diff --git a/api.cjs.js b/api.cjs.js index a2f79c3..95ce265 100644 --- a/api.cjs.js +++ b/api.cjs.js @@ -7,7 +7,15 @@ var xaop = require('xaop'); var Line2 = require('three/examples/jsm/lines/Line2'); var LineGeometry = require('three/examples/jsm/lines/LineGeometry'); var LineMaterial = require('three/examples/jsm/lines/LineMaterial'); +var geom3 = require('@jscad/modeling/src/geometries/geom3'); +var mat4 = require('@jscad/modeling/src/maths/mat4'); +var measureBoundingBox = require('@jscad/modeling/src/measurements/measureBoundingBox'); +var splitPolygonByPlane = require('@jscad/modeling/src/operations/booleans/trees/splitPolygonByPlane'); +var retessellate = require('@jscad/modeling/src/operations/modifiers/retessellate'); +var transforms = require('@jscad/modeling/src/operations/transforms'); +var poly3 = require('@jscad/modeling/src/geometries/poly3'); var Flatbush = require('flatbush'); +var booleans = require('@jscad/modeling/src/operations/booleans'); var polylabel = require('polylabel'); var clipperLib = require('js-angusj-clipper/web'); @@ -31,10 +39,111 @@ function _interopNamespace(e) { return Object.freeze(n); } +var geom3__default = /*#__PURE__*/_interopDefaultLegacy(geom3); +var mat4__default = /*#__PURE__*/_interopDefaultLegacy(mat4); +var measureBoundingBox__default = /*#__PURE__*/_interopDefaultLegacy(measureBoundingBox); +var splitPolygonByPlane__default = /*#__PURE__*/_interopDefaultLegacy(splitPolygonByPlane); +var retessellate__default = /*#__PURE__*/_interopDefaultLegacy(retessellate); var Flatbush__default = /*#__PURE__*/_interopDefaultLegacy(Flatbush); var polylabel__default = /*#__PURE__*/_interopDefaultLegacy(polylabel); var clipperLib__namespace = /*#__PURE__*/_interopNamespace(clipperLib); +/** + * 删除数组中指定的元素,返回数组本身 + * @param {Array} arr 需要操作的数组 + * @param {*} el 需要移除的元素 + */ +function arrayRemoveOnce(arr, el) { + let index = arr.indexOf(el); + if (index !== -1) + arr.splice(index, 1); + return arr; +} +/** + * 删除通过函数校验的元素 + * @param {(e: T) => boolean} checkFuntion 校验函数 + */ +function arrayRemoveIf(arr, checkFuntion) { + let j = 0; + for (let i = 0, l = arr.length; i < l; i++) { + if (!checkFuntion(arr[i])) { + arr[j++] = arr[i]; + } + } + arr.length = j; + return arr; +} +function arrayLast(arr) { + return arr[arr.length - 1]; +} +/** + * 根据数值从小到大排序数组 + * @param {Array} arr + * @returns {Array} 返回自身 + */ +function arraySortByNumber$1(arr) { + arr.sort(sortNumberCompart$1); + return arr; +} +/** + * 对排序好的数组进行去重操作 + * @param {(e1, e2) => boolean} [checkFuction] 校验对象相等函数,如果相等 则删除e2 + * @returns {Array} 返回自身 + */ +function arrayRemoveDuplicateBySort(arr, checkFuction = checkEqual) { + if (arr.length < 2) + return arr; + let j = 1; + for (let i = 1, l = arr.length; i < l; i++) + if (!checkFuction(arr[j - 1], arr[i])) + arr[j++] = arr[i]; + arr.length = j; + return arr; +} +function sortNumberCompart$1(e1, e2) { + return e1 - e2; +} +function checkEqual(e1, e2) { + return e1 === e2; +} +/** + * 改变数组的值顺序 + * @param arr 需要改变初始值位置的数组 + * @param index //将index位置以后的值放到起始位置 + */ +function changeArrayStartIndex(arr, index) { + arr.unshift(...arr.splice(index)); + return arr; +} +function equalArray(a, b, checkF = checkEqual) { + if (a === b) + return true; + if (a.length !== b.length) + return false; + for (var i = 0; i < a.length; ++i) + if (!checkF(a[i], b[i])) + return false; + return true; +} +function arrayClone(arr) { + return arr.slice(); +} +//https://jsperf.com/merge-array-implementations/30 +function arrayPushArray$1(arr1, arr2) { + let arr1Length = arr1.length; + let arr2Length = arr2.length; + arr1.length = arr1Length + arr2Length; + for (let i = 0; i < arr2Length; i++) + arr1[arr1Length + i] = arr2[i]; + return arr1; +} +function arraySum(arr) { + let sum = 0; + for (let n of arr) + sum += n; + return sum; +} + /****************************************************************************** Copyright (c) Microsoft Corporation. @@ -151,6 +260,8 @@ var RenderType; * 概念 */ RenderType[RenderType["Conceptual"] = 2] = "Conceptual"; + /** 概念(透明)*/ + RenderType[RenderType["ConceptualTransparent"] = 82] = "ConceptualTransparent"; /** * 物理着色PBR */ @@ -182,8 +293,18 @@ var RenderType; /**真实带线框 */ RenderType[RenderType["Physical2Print"] = 106] = "Physical2Print"; RenderType[RenderType["CustomNumberPrint"] = 109] = "CustomNumberPrint"; - RenderType[RenderType["ConceptualTransparent"] = 182] = "ConceptualTransparent"; //概念透明 })(RenderType || (RenderType = {})); +/** 实体的渲染颜色种类 */ +var ColorInTransparent; +(function (ColorInTransparent) { + ColorInTransparent[ColorInTransparent["\u539F\u59CB\u989C\u8272"] = 0] = "\u539F\u59CB\u989C\u8272"; + ColorInTransparent[ColorInTransparent["\u7070\u5EA6\u5355\u8272"] = 1] = "\u7070\u5EA6\u5355\u8272"; +})(ColorInTransparent || (ColorInTransparent = {})); +/** 渲染的状态 */ +const RenderState = { + /** 概念透明下的实体颜色 */ + ConceptualColor: ColorInTransparent.原始颜色, +}; class IHostApplicationServices { get ProxyObject() { return this.__ProxyObject__; } @@ -197,11 +318,16 @@ class IHostApplicationServices { } constructor() { this.IsRoomEntityVisible = true; //室内实体可见 + /** 当前画笔的颜色索引 */ + this.CurrentColorindex = 7; this.isShowLightShadow = true; //灯光阴影 (除太阳光外) this.ShowHistoryLog = true; this.Physical2EdgeColor = 7; //真实视图带线框的线框颜色 默认白色 this.ConceptualEdgeColor = 7; //概念线框的颜色 - this.ConceptualOpacity = 1; //概念透明的透明度 + this.ConceptualOpacity = 1; //概念的透明度 + this.ConceptualTransparentOpacity = 0.5; //概念(透明)的透明度 + this.IsTransparentMetals = false; // 五金是否受概念(透明)影响 + this.IsTransparentComp = false; // 组件是否受概念(透明)影响 this.DrawWallBottomFace = false; //绘制底面 this.sealReserve = 0; //封边统计留头量 //#region _RenderType 渲染类型 @@ -222,6 +348,13 @@ class IHostApplicationServices { //#region 显示开门方向纹路 this.showOpenDirLines = false; //#endregion + //#region 开门方向纹路配置 + this.doorLinesOption = { + physicalShowLines: false, //真实视图显示开门方向纹路 + physicalShowLines2: false, //真实视图带线框显示开门方向纹路 + reverseOpenDirLines: false, //反转开门方向纹路 + }; + //#endregion //#region 显示二维刀路路径线条 this.show2DPathLine = false; //#endregion @@ -247,6 +380,8 @@ class IHostApplicationServices { sealValues: '', //封边值列表 hardwareExpressionFormattingAccuracy: 2, //复合实体表达式值格式化精度 partialSplitValueCanTakesEffect: false, + cancelHoleProcessing: false, //填写拆单尺寸板件取消孔槽加工 + isCheckCustomBoardNumber: false, //是否开启自动板件编号校验 }; this.viewSize = { minViewHeight: 1e-3, @@ -262,6 +397,11 @@ class IHostApplicationServices { this.boardCustomNumberTextHeight = 60; //板编号字体高度 this.lineWidth = 2; //打印线框 this.fractionDigitsType = FractionDigitsType.two; + this.throughModelSegmentedDrill = false; //挖穿造型分段排钻 + this.autoDeviation = false; //排钻碰撞智能偏移 + this.autoDeviationMinDist = 200; //排钻碰撞智能偏移最小排钻面长度 + this.smallGrooveThreshold = 900; //全深槽影响阈值 + this.sealWidthPercentage = 1; //封边宽度百分比 } ; static GetInstance() { @@ -287,6 +427,15 @@ __decorate([ __decorate([ ProxyValue ], IHostApplicationServices.prototype, "ConceptualOpacity", void 0); +__decorate([ + ProxyValue +], IHostApplicationServices.prototype, "ConceptualTransparentOpacity", void 0); +__decorate([ + ProxyValue +], IHostApplicationServices.prototype, "IsTransparentMetals", void 0); +__decorate([ + ProxyValue +], IHostApplicationServices.prototype, "IsTransparentComp", void 0); __decorate([ ProxyValue ], IHostApplicationServices.prototype, "_renderType", void 0); @@ -305,6 +454,9 @@ __decorate([ __decorate([ ProxyValue ], IHostApplicationServices.prototype, "showOpenDirLines", void 0); +__decorate([ + ProxyValue +], IHostApplicationServices.prototype, "doorLinesOption", void 0); __decorate([ ProxyValue ], IHostApplicationServices.prototype, "show2DPathLine", void 0); @@ -338,6 +490,21 @@ __decorate([ __decorate([ ProxyValue ], IHostApplicationServices.prototype, "fractionDigitsType", void 0); +__decorate([ + ProxyValue +], IHostApplicationServices.prototype, "throughModelSegmentedDrill", void 0); +__decorate([ + ProxyValue +], IHostApplicationServices.prototype, "autoDeviation", void 0); +__decorate([ + ProxyValue +], IHostApplicationServices.prototype, "autoDeviationMinDist", void 0); +__decorate([ + ProxyValue +], IHostApplicationServices.prototype, "smallGrooveThreshold", void 0); +__decorate([ + ProxyValue +], IHostApplicationServices.prototype, "sealWidthPercentage", void 0); let HostApplicationServices = IHostApplicationServices.GetInstance(); //将属性字段指向代理对象 function ProxyValue(target, propertyKey, descriptor) { @@ -395,10 +562,14 @@ function Object3DRemoveAll(obj) { return obj; } +/** 用于表示跟随图层的颜色索引 */ +const ByLayerColorIndex = 260; + exports.Status = void 0; (function (Status) { Status[Status["False"] = 0] = "False"; Status[Status["True"] = 1] = "True"; + Status[Status["Side"] = 2] = "Side"; Status[Status["Canel"] = -1] = "Canel"; Status[Status["ConverToCircle"] = 101] = "ConverToCircle"; Status[Status["DuplicateRecordName"] = 102] = "DuplicateRecordName"; @@ -463,6 +634,11 @@ class Box3Ext extends three.Box3 { interBox.max.setComponent(splitType, Math.max(this.min.getComponent(splitType), b2.min.getComponent(splitType))); return interBox; } + containsBox(box, fuzz = 1e-8) { + return this.min.x <= box.min.x + fuzz && box.max.x <= this.max.x + fuzz && + this.min.y <= box.min.y + fuzz && box.max.y <= this.max.y + fuzz && + this.min.z <= box.min.z + fuzz && box.max.z <= this.max.z + fuzz; + } intersectsBox(box, fuzz = 1e-8) { return IntersectsBox(this, box, fuzz); } @@ -1070,6 +1246,57 @@ const U_WORLD_MOVE = "u_w_move"; const V_WORLD_MOVE = "v_w_move"; const U_WORLD_RO = "v_w_ro"; +/**统一板件属性key的命名,修改值会导致无法 .xxx该属性 */ +var EBoardKeyList; +(function (EBoardKeyList) { + EBoardKeyList["Height"] = "height"; + EBoardKeyList["Width"] = "width"; + EBoardKeyList["Thick"] = "thickness"; + EBoardKeyList["RoomName"] = "roomName"; + EBoardKeyList["CabinetName"] = "cabinetName"; + EBoardKeyList["PaperName"] = "paperName"; + EBoardKeyList["BrName"] = "brName"; + EBoardKeyList["BrMat"] = "boardName"; + EBoardKeyList["Mat"] = "material"; + EBoardKeyList["Color"] = "color"; + EBoardKeyList["Lines"] = "lines"; + EBoardKeyList["ProcessGroup"] = "ProcessGroup"; + EBoardKeyList["BigHole"] = "bigHoleDir"; + /** + * 排钻类型,当没有定义每个边的排钻数据时,使用统一的排钻类型 + */ + EBoardKeyList["DrillType"] = "drillType"; + EBoardKeyList["ComposingFace"] = "composingFace"; + /** + * 封边数组,定义每个边的封边信息 + */ + EBoardKeyList["HighSealed"] = "highSealed"; + EBoardKeyList["UpSealed"] = "sealedUp"; + EBoardKeyList["DownSealed"] = "sealedDown"; + EBoardKeyList["LeftSealed"] = "sealedLeft"; + EBoardKeyList["RightSealed"] = "sealedRight"; + EBoardKeyList["KnifeRad"] = "knifeRadius"; + EBoardKeyList["SpliteHeight"] = "spliteHeight"; + EBoardKeyList["SpliteWidth"] = "spliteWidth"; + EBoardKeyList["SpliteThickness"] = "spliteThickness"; + EBoardKeyList["DrawNumber"] = "drawNumber"; + EBoardKeyList["Remarks"] = "remarks"; + EBoardKeyList["ExtraRemarks"] = "extraRemarks"; + EBoardKeyList["OpenDir"] = "openDir"; + EBoardKeyList["GroovesAddLength"] = "GroovesAddLength"; + EBoardKeyList["GroovesAddWidth"] = "GroovesAddWidth"; + EBoardKeyList["GroovesAddDepth"] = "GroovesAddDepth"; + EBoardKeyList["FrontDrill"] = "frontDrill"; + EBoardKeyList["BackDrill"] = "backDrill"; + EBoardKeyList["SelectRoomCabinet"] = "selectRoomCabinet"; +})(EBoardKeyList || (EBoardKeyList = {})); + +var EMetalsType; +(function (EMetalsType) { + EMetalsType["Metals"] = "\u4E94\u91D1"; + EMetalsType["Comp"] = "\u7EC4\u4EF6"; +})(EMetalsType || (EMetalsType = {})); + class SymbolTableRecord extends CADObject { constructor() { super(...arguments); @@ -1081,7 +1308,13 @@ class SymbolTableRecord extends CADObject { set Name(name) { if (this.name === name) return; - this.WriteAllObjectRecord(); + let undoData = this.UndoRecord(); + if (undoData) { + let hr = new HistorycRecord(); + hr.undoData = new NameData(this.name); + hr.redoData = new NameData(name); + undoData.WriteObjectHistoryPath(this, hr); + } if (this.Owner) { let symbolTable = this.Owner.Object; if (!symbolTable.ChangeRecordName(this, name)) @@ -1102,7 +1335,40 @@ class SymbolTableRecord extends CADObject { file.Read(); this.name = file.Read(); } + //局部撤销 + ApplyPartialUndo(undoData) { + super.ApplyPartialUndo(undoData); + if (undoData instanceof NameData) { + if (this.name === undoData.name) + return; + if (this.Owner) { + let symbolTable = this.Owner.Object; + if (!symbolTable.ChangeRecordName(this, undoData.name)) + return; + } + this.name = undoData.name; + } + } } +/** + * 记录当前Name的序列化数据 + */ +let NameData = class NameData { + ReadFile(file) { + this.name = file.Read(); + return this; + } + WriteFile(file) { + file.Write(this.name); + return this; + } + constructor(name) { + this.name = name; + } +}; +NameData = __decorate([ + Factory +], NameData); let MaterialTableRecord = class MaterialTableRecord extends SymbolTableRecord { }; @@ -1174,6 +1440,67 @@ let PhysicalMaterialRecord = class PhysicalMaterialRecord extends MaterialTableR color: "", material: "", }; + // 扩展材质的属性 + this._hardwareAttributeInfo = { + name: { + value: "", + checked: false + }, + roomName: { + value: "", + checked: false + }, + cabinetName: { + value: "", + checked: false + }, + factory: { + value: "", + checked: false + }, + comments: { + value: "", + checked: false + }, + actualExpr: { + value: "", + checked: false + }, + brand: { + value: "", + checked: false + }, + model: { + value: "", + checked: false + }, + spec: { + value: "", + checked: false + }, + count: { + value: "", + checked: false + }, + unit: { + value: "", + checked: false + }, + DataList: { + value: Array.from({ length: 20 }, () => ["", ""]), + checked: false + }, + type: { + value: EMetalsType.Metals, + checked: false + }, + goods: { + goodsSn: "", + goodsId: "", + checked: false, + }, + }; + this._isMaterialLock = false; //材质锁 this.material = new three.MeshPhysicalMaterial({}); Object.defineProperty(this.material, "ObjectId", { get: () => { @@ -1182,6 +1509,10 @@ let PhysicalMaterialRecord = class PhysicalMaterialRecord extends MaterialTableR }); } async Update() { + await this.PhysicalMaterialUpdate(); + } + //因为Asset.tsx监听了Update的事件,然后又要去调用这个,导致重复监听,所以分离出这个函数 + async PhysicalMaterialUpdate() { this.material[USE_WORLD_UV] = this.UseWorldUV; if (this.material[USE_WORLD_UV]) { this.material[U_WORLD_REP] = this.UWroldRep; @@ -1271,6 +1602,22 @@ let PhysicalMaterialRecord = class PhysicalMaterialRecord extends MaterialTableR this.WriteAllObjectRecord(); Object.assign(this._goodsInfo, info); } + get HardwareAttributeInfo() { + return this._hardwareAttributeInfo; + } + set HardwareAttributeInfo(info) { + this.WriteAllObjectRecord(); + this._hardwareAttributeInfo = JSON.parse(JSON.stringify(info)); + } + get IsMaterialLock() { + return !this.IsErase && this._isMaterialLock; + } + set IsMaterialLock(v) { + if (this._isMaterialLock === v) + return; + this.WriteAllObjectRecord(); + this._isMaterialLock = v; + } //#region -------------------------File------------------------- ReadFile(file) { super.ReadFile(file); @@ -1341,13 +1688,54 @@ let PhysicalMaterialRecord = class PhysicalMaterialRecord extends MaterialTableR this.refraction = file.Read(); this.side = file.Read(); } + if (ver > 10) { + this._isMaterialLock = file.Read(); + } + if (ver > 11) { + this._hardwareAttributeInfo.name.value = file.Read(); + this._hardwareAttributeInfo.name.checked = file.Read(); + this._hardwareAttributeInfo.roomName.value = file.Read(); + this._hardwareAttributeInfo.roomName.checked = file.Read(); + this._hardwareAttributeInfo.cabinetName.value = file.Read(); + this._hardwareAttributeInfo.cabinetName.checked = file.Read(); + this._hardwareAttributeInfo.factory.value = file.Read(); + this._hardwareAttributeInfo.factory.checked = file.Read(); + this._hardwareAttributeInfo.comments.value = file.Read(); + this._hardwareAttributeInfo.comments.checked = file.Read(); + this._hardwareAttributeInfo.actualExpr.value = file.Read(); + this._hardwareAttributeInfo.actualExpr.checked = file.Read(); + this._hardwareAttributeInfo.brand.value = file.Read(); + this._hardwareAttributeInfo.brand.checked = file.Read(); + this._hardwareAttributeInfo.model.value = file.Read(); + this._hardwareAttributeInfo.model.checked = file.Read(); + this._hardwareAttributeInfo.spec.value = file.Read(); + this._hardwareAttributeInfo.spec.checked = file.Read(); + this._hardwareAttributeInfo.count.value = file.Read(); + this._hardwareAttributeInfo.count.checked = file.Read(); + this._hardwareAttributeInfo.unit.value = file.Read(); + this._hardwareAttributeInfo.unit.checked = file.Read(); + let DataListCount = file.Read(); + for (let i = 0; i < DataListCount; i++) { + let d = [ + file.Read(), + file.Read() + ]; + this._hardwareAttributeInfo.DataList.value[i] = d; + } + this._hardwareAttributeInfo.DataList.checked = file.Read(); + this._hardwareAttributeInfo.type.value = file.Read(); + this._hardwareAttributeInfo.type.checked = file.Read(); + this._hardwareAttributeInfo.goods.goodsSn = file.Read(); + this._hardwareAttributeInfo.goods.goodsId = file.Read(); + this._hardwareAttributeInfo.goods.checked = file.Read(); + } } this.Update(); } //对象将自身数据写入到文件. WriteFile(file) { super.WriteFile(file); - file.Write(10); + file.Write(12); file.Write(this.color); file.Write(this.transparent); file.Write(this.matalness); @@ -1405,6 +1793,43 @@ let PhysicalMaterialRecord = class PhysicalMaterialRecord extends MaterialTableR //ver10 file.Write(this.refraction); file.Write(this.side); + //ver11 + file.Write(this.IsMaterialLock); + // ver12 + file.Write(this._hardwareAttributeInfo.name.value); + file.Write(this._hardwareAttributeInfo.name.checked); + file.Write(this._hardwareAttributeInfo.roomName.value); + file.Write(this._hardwareAttributeInfo.roomName.checked); + file.Write(this._hardwareAttributeInfo.cabinetName.value); + file.Write(this._hardwareAttributeInfo.cabinetName.checked); + file.Write(this._hardwareAttributeInfo.factory.value); + file.Write(this._hardwareAttributeInfo.factory.checked); + file.Write(this._hardwareAttributeInfo.comments.value); + file.Write(this._hardwareAttributeInfo.comments.checked); + file.Write(this._hardwareAttributeInfo.actualExpr.value); + file.Write(this._hardwareAttributeInfo.actualExpr.checked); + file.Write(this._hardwareAttributeInfo.brand.value); + file.Write(this._hardwareAttributeInfo.brand.checked); + file.Write(this._hardwareAttributeInfo.model.value); + file.Write(this._hardwareAttributeInfo.model.checked); + file.Write(this._hardwareAttributeInfo.spec.value); + file.Write(this._hardwareAttributeInfo.spec.checked); + file.Write(this._hardwareAttributeInfo.count.value); + file.Write(this._hardwareAttributeInfo.count.checked); + file.Write(this._hardwareAttributeInfo.unit.value); + file.Write(this._hardwareAttributeInfo.unit.checked); + const filteredDataList = this._hardwareAttributeInfo.DataList.value.filter(item => item[0] || item[1]); // 过滤掉值为空的项 + file.Write(filteredDataList.length); + for (let i = 0; i < filteredDataList.length; i++) { + file.Write(this._hardwareAttributeInfo.DataList.value[i][0]); + file.Write(this._hardwareAttributeInfo.DataList.value[i][1]); + } + file.Write(this._hardwareAttributeInfo.DataList.checked); + file.Write(this._hardwareAttributeInfo.type.value); + file.Write(this._hardwareAttributeInfo.type.checked); + file.Write(this._hardwareAttributeInfo.goods.goodsSn); + file.Write(this._hardwareAttributeInfo.goods.goodsId); + file.Write(this._hardwareAttributeInfo.goods.checked); } }; __decorate([ @@ -1538,7 +1963,7 @@ var Entity_1; let Entity = Entity_1 = class Entity extends CADObject { constructor() { super(); - this.IsEmbedEntity = false; + this.IsEmbedEntity = false; //当这个值为true时,这个实体是复合实体的内嵌实体 /** * 该实体的只有一个渲染类型,任何渲染类型都一个样 */ @@ -1547,7 +1972,7 @@ let Entity = Entity_1 = class Entity extends CADObject { this.HasPlaceFaceRenderType = false; //拥有排版面绘制模式 this.HasBigHoleFaceRenderType = false; //拥有大孔面绘制模式 this._CacheDrawObject = new Map(); - this._Color = 7; + this._Color = HostApplicationServices.CurrentColorindex; //自身坐标系 this._Matrix = new three.Matrix4(); //模块空间的标系 @@ -1555,6 +1980,7 @@ let Entity = Entity_1 = class Entity extends CADObject { this._Visible = true; this._VisibleInRender = true; //在渲染器中显示 this._Freeze = false; //冻结(无法被选中) + this._LockMaterial = false; // 锁定材质 //加工组 this.ProcessingGroupList = []; /** @@ -1597,7 +2023,16 @@ let Entity = Entity_1 = class Entity extends CADObject { this._VisibleInRender = v; } } + get LockMaterial() { return this._LockMaterial; } + set LockMaterial(f) { + if (f === this._LockMaterial) + return; + this.WriteAllObjectRecord(); + this._LockMaterial = f; + } set Material(materialId) { + if (this.LockMaterial) + return; if (materialId === this._MaterialId) return; if (this._db && materialId?.Object) //我们放宽校验,当图形未加入到图纸时,我们允许它任意设置材质 @@ -1607,16 +2042,83 @@ let Entity = Entity_1 = class Entity extends CADObject { if (materialId.Object.Db !== this.Db) throw "程序内部错误!设置材质错误:不同图纸间材质"; } + const _obj = this._MaterialId?.Object; + if (_obj?.IsMaterialLock) + return; this.WriteAllObjectRecord(); this._MaterialId = materialId; for (let [type, obj] of this._CacheDrawObject) this.UpdateDrawObjectMaterial(type, obj); } - get Material() { return this._MaterialId; } + get Material() { + if (this._MaterialId?.IsErase) + return; + return this._MaterialId; + } GetMaterialSlots() { } + IsMtlLockAtSlot(slotIndex) { + if (this.LockMaterial) + return true; + return this.Material?.Object?.IsMaterialLock; + } SetMaterialAtSlot(mtl, slotIndex) { + if (this.IsMtlLockAtSlot()) + return; + this.WriteAllObjectRecord(); this.Material = mtl; } + GetMtlLockedStatus() { + const locked = this.Material?.Object?.IsMaterialLock; + return { + allMtlLocked: locked, + partMtlLocked: locked, + }; + } + /** + * 获取实体的 PhysicalMaterialRecord + * @param {boolean} [containErased=false] 是否包含被删除的材质 + * @return {*} {PhysicalMaterialRecord[]} + * @memberof Entity + */ + GetPhyMtlRecords(containErased = false) { + if (this._MaterialId) { + if (containErased || !this._MaterialId.IsErase) + return [this._MaterialId.Object]; + } + return []; + } + get HasLayer() { return this._Layer?.Object !== undefined; } + get Layer() { + return this._Layer?.Object ? this._Layer : HostApplicationServices.Database.LayerTable.Current ?? HostApplicationServices.Database.DefaultLayer.Id; + } + set Layer(id) { + if (!id || id === this._Layer) + return; + this.WriteAllObjectRecord(); + const oldLayerIsOff = this._Layer?.Object?.IsOff; + const oldLayerIsLocked = this._Layer?.Object?.IsLocked; + const oldLayerColorIndex = this._Layer?.Object?.ColorIndex; + this._Layer = id; + // 更新隐藏 + if (id.Object.IsOff !== oldLayerIsOff) + this.UpdateVisible(); + // 更新锁定 + if (id.Object.IsLocked !== oldLayerIsLocked) { + this.Freeze = id.Object.IsLocked; + for (let [type, obj] of this._CacheDrawObject) + this.UpdateDrawObjectMaterial(type, obj); + } + // 更新颜色 + else if (this._Color === ByLayerColorIndex && id.Object.ColorIndex !== oldLayerColorIndex) { + for (let [type, obj] of this._CacheDrawObject) + this.UpdateDrawObjectMaterial(type, obj); + } + } + SetAllMaterialAtSlot(mtl) { + if (this.LockMaterial) + return; + this.SetMaterialAtSlot(mtl); + } set ColorIndex(color) { if (color !== this._Color) { let undoRec = this.UndoRecord(); @@ -1633,6 +2135,9 @@ let Entity = Entity_1 = class Entity extends CADObject { get ColorIndex() { return this._Color; } + get DrawColorIndex() { + return this._Color === ByLayerColorIndex ? this.Layer.Object.ColorIndex : this._Color; + } /** * 炸开实体 */ @@ -1685,7 +2190,7 @@ let Entity = Entity_1 = class Entity extends CADObject { } Move(v) { if (equaln$1(v.x, 0) && equaln$1(v.y, 0) && equaln$1(v.z, 0)) - return; + return this; tempMatrix1.identity().setPosition(v.x, v.y, v.z); this.ApplyMatrix(tempMatrix1); return this; @@ -1823,8 +2328,6 @@ let Entity = Entity_1 = class Entity extends CADObject { else renderType = RenderType.WireframePrint; } - if (renderType === RenderType.Edge && !this.HasEdgeRenderType) - renderType = RenderType.Conceptual; if (renderType === RenderType.PlaceFace && !this.HasPlaceFaceRenderType) renderType = RenderType.Wireframe; if (renderType === RenderType.BigHoleFace && !this.HasBigHoleFaceRenderType) @@ -1876,7 +2379,15 @@ let Entity = Entity_1 = class Entity extends CADObject { let mode = this.NeedUpdateFlag; if (mode === 0) return; - if (mode & exports.UpdateDraw.Geometry && this._CacheDrawObject.size > 0) + if (!this._CacheDrawObject) + return; + /** + * br1 - br2 关联切割(斜的) + let temp = br1.Clone() 临时的对象来计算切割后的结果 + temp br2 因为求交集,所以要访问temp.csg temp.MeshGeom (drawObjectsize = 0) + temp.setContour update失败 + */ + if (mode & exports.UpdateDraw.Geometry) // && this._CacheDrawObject.size > 0 因为有时提前获取了MeshGeom 如果判断绘制的个数 会导致没有刷新 this.UpdateDrawGeometry(); this.UpdateVisible(); let isJigIng = this._CacheDrawObject.has(RenderType.Jig); @@ -1919,8 +2430,9 @@ let Entity = Entity_1 = class Entity extends CADObject { UpdateDrawObjectMaterial(type, obj, material) { } get MeshMaterial() { - if (this._MaterialId && this._MaterialId.Object) - return this._MaterialId.Object.Material; + const mtlId = this._MaterialId; + if (!mtlId?.IsErase && mtlId?.Object) + return mtlId.Object.Material; return HostApplicationServices.DefaultMeshMaterial; } /** @@ -1943,7 +2455,7 @@ let Entity = Entity_1 = class Entity extends CADObject { } } get IsVisible() { - return !this._isErase && this._Visible; + return !this._isErase && this._Visible && !this.Layer.Object.IsOff; } UpdateVisible() { if (this._drawObject) { @@ -2093,10 +2605,14 @@ let Entity = Entity_1 = class Entity extends CADObject { this._VisibleInRender = file.ReadBool(); else this._VisibleInRender = true; + if (ver > 10) + this._Layer = file.ReadObjectId(); + else + this._Layer = undefined; } //对象将自身数据写入到文件. WriteFile(file) { - file.Write(10); + file.Write(11); super.WriteFile(file); file.Write(this._Color); file.WriteHardObjectId(this._MaterialId); @@ -2110,6 +2626,7 @@ let Entity = Entity_1 = class Entity extends CADObject { file.WriteHardObjectId(id); file.WriteBool(this._Freeze); file.WriteBool(this._VisibleInRender); + file.WriteHardObjectId(this._Layer); } //局部撤销 ApplyPartialUndo(undoData) { @@ -2202,7 +2719,7 @@ function eval2(expr, params, defaultParam) { three.MathUtils.degToRad; three.MathUtils.RAD2DEG; three.MathUtils.DEG2RAD; - //eval_gen_code + let abs = Math.abs; let acos = Math.acos; let acosh = Math.acosh; @@ -2253,11 +2770,12 @@ function eval2(expr, params, defaultParam) { let R2D = three.MathUtils.RAD2DEG; let D2R = three.MathUtils.DEG2RAD; let fix = FixedNotZero; - //eval_gen_code + let code = ""; + //模板材质变量的value默认是"",会导致eval报错,params[name]为""时换成0 if (params) for (let name in params) - code += `let ${name} = ${params[name]};`; + code += `let ${name} = ${params[name] != "" ? params[name] : "0"};`; if (defaultParam) { expr = expr.trimLeft(); if (expr[0] && OPERATORS.has(expr[0])) @@ -2266,9 +2784,9 @@ function eval2(expr, params, defaultParam) { code += expr; let result = eval(code); if (typeof result === "function") - return result(); + result = result(); if (typeof result === "bigint") - return Number(result); //防止bigint乱入 + result = Number(result); //防止bigint乱入 return result; } function safeEval(expr, params, defaultParam) { @@ -2327,6 +2845,16 @@ function FixedNotZero(v, fractionDigits = 0, expr = undefined) { else return v.toFixed(fractionDigits).replace(/[.]?0+$/, ""); } +/** + * To fixed + * @param v + * @param [fractionDigits] + */ +function ToFixed(v, fractionDigits = 5) { + if (equaln$1(v, 0, Math.pow(0.1, fractionDigits))) + return "0"; + return v.toFixed(fractionDigits); +} const IdentityMtx4 = new three.Matrix4(); const ZeroVec = new three.Vector3(); @@ -2464,6 +2992,9 @@ function isParallelTo(v1, v2, fuzz = 1e-8) { function isPerpendicularityTo(v1, v2, fuzz = 1e-8) { return equaln$1(v1.dot(v2), 0, fuzz); } +function midPoint(v1, v2) { + return v1.clone().add(v2).multiplyScalar(0.5); +} let tempBox = new three.Box3(); /** * 获得Three对象的包围盒. @@ -2711,164 +3242,6 @@ var ObjectSnapMode; ObjectSnapMode[ObjectSnapMode["All"] = 31743] = "All"; })(ObjectSnapMode || (ObjectSnapMode = {})); -/** - * 轨道控制的数学类,观察向量和角度的互相转换 - * 当x当抬头或者低头到90度时,触发万向锁. - */ -class Orbit { - constructor() { - //抬头低头 正数抬头 负数低头 - this.phi = 0; //Φ - //身体旋转 0为正右边 逆时针旋转 - this.theta = 0; //θ - } - get RoX() { - return this.phi; - } - set RoX(v) { - this.phi = three.MathUtils.clamp(v, Math.PI * -0.49, Math.PI * 0.49); - } - /** - * 使用旋转角度 计算观察向量 - * @param [outDirection] 引用传入,如果传入,那么就不构造新的向量 - * @returns 返回观察向量 - */ - UpdateDirection(outDirection = new three.Vector3()) { - outDirection.z = Math.sin(this.phi); - //归一化专用. - let d = Math.abs(Math.cos(this.phi)); - outDirection.x = Math.cos(this.theta) * d; - outDirection.y = Math.sin(this.theta) * d; - return outDirection; - } - /** - * 使用观察向量,计算旋转角度 - * @param dir 这个向量会被修改成单位向量. - */ - SetFromDirection(dir) { - dir.normalize(); - this.phi = Math.asin(dir.z); - if (equaln$1(dir.x, 0) && equaln$1(dir.y, 0)) - if (dir.z > 0) - this.theta = Math.PI * -0.5; - else - this.theta = Math.PI * 0.5; - else - this.theta = Math.atan2(dir.y, dir.x); - } - /** - * 参考任意轴坐标系算法. - * http://help.autodesk.com/view/ACD/2017/CHS/?guid=GUID-E19E5B42-0CC7-4EBA-B29F-5E1D595149EE - */ - static ComputUpDirection(n, ay = new three.Vector3(), ax = new three.Vector3()) { - n.normalize(); - if (Math.abs(n.x) < 0.015625 && Math.abs(n.y) < 0.015625) - ax.crossVectors(YAxis, n); - else - ax.crossVectors(ZAxis, n); - ay.crossVectors(n, ax); - ax.normalize(); - ay.normalize(); - return ay; - } -} - -/** - * 删除数组中指定的元素,返回数组本身 - * @param {Array} arr 需要操作的数组 - * @param {*} el 需要移除的元素 - */ -function arrayRemoveOnce(arr, el) { - let index = arr.indexOf(el); - if (index !== -1) - arr.splice(index, 1); - return arr; -} -/** - * 删除通过函数校验的元素 - * @param {(e: T) => boolean} checkFuntion 校验函数 - */ -function arrayRemoveIf(arr, checkFuntion) { - let j = 0; - for (let i = 0, l = arr.length; i < l; i++) { - if (!checkFuntion(arr[i])) { - arr[j++] = arr[i]; - } - } - arr.length = j; - return arr; -} -function arrayLast(arr) { - return arr[arr.length - 1]; -} -/** - * 根据数值从小到大排序数组 - * @param {Array} arr - * @returns {Array} 返回自身 - */ -function arraySortByNumber$1(arr) { - arr.sort(sortNumberCompart$1); - return arr; -} -/** - * 对排序好的数组进行去重操作 - * @param {(e1, e2) => boolean} [checkFuction] 校验对象相等函数,如果相等 则删除e2 - * @returns {Array} 返回自身 - */ -function arrayRemoveDuplicateBySort(arr, checkFuction = checkEqual) { - if (arr.length < 2) - return arr; - let j = 1; - for (let i = 1, l = arr.length; i < l; i++) - if (!checkFuction(arr[j - 1], arr[i])) - arr[j++] = arr[i]; - arr.length = j; - return arr; -} -function sortNumberCompart$1(e1, e2) { - return e1 - e2; -} -function checkEqual(e1, e2) { - return e1 === e2; -} -/** - * 改变数组的值顺序 - * @param arr 需要改变初始值位置的数组 - * @param index //将index位置以后的值放到起始位置 - */ -function changeArrayStartIndex(arr, index) { - arr.unshift(...arr.splice(index)); - return arr; -} -function equalArray(a, b, checkF = checkEqual) { - if (a === b) - return true; - if (a.length !== b.length) - return false; - for (var i = 0; i < a.length; ++i) - if (!checkF(a[i], b[i])) - return false; - return true; -} -function arrayClone(arr) { - return arr.slice(); -} -//https://jsperf.com/merge-array-implementations/30 -function arrayPushArray$1(arr1, arr2) { - let arr1Length = arr1.length; - let arr2Length = arr2.length; - arr1.length = arr1Length + arr2Length; - for (let i = 0; i < arr2Length; i++) - arr1[arr1Length + i] = arr2[i]; - return arr1; -} -function arraySum(arr) { - let sum = 0; - for (let n of arr) - sum += n; - return sum; -} - function GetGoodShaderSimple(color = new three.Vector3, side = three.FrontSide, logBuf = false, opacity = 1) { return { uniforms: { @@ -3185,9 +3558,7 @@ class ColorMaterial { this._BasicDoubleSideMaterialMap.set(color, mtl); return mtl; } - static GetConceptualMaterial(color, side = three.FrontSide, enableTransparent = false, freeze = false, opacity) { - if (freeze) - color = 257; + static GetConceptualMaterial(color, side = three.FrontSide, enableTransparent = false) { let key = `${color},${side},${enableTransparent ? 1 : 0}`; if (this._ConceptualMaterial.has(key)) return this._ConceptualMaterial.get(key); @@ -3198,19 +3569,27 @@ class ColorMaterial { get: () => mtl.uniforms.opacity.value !== 1 }); Object.defineProperty(mtl.uniforms.opacity, "value", { - get: () => { - let conceptualOpacity = HostApplicationServices.ConceptualOpacity; - if (freeze) - conceptualOpacity = 0.5; - else if (opacity) - conceptualOpacity = opacity; - return conceptualOpacity; - } + get: () => HostApplicationServices.ConceptualOpacity }); } this._ConceptualMaterial.set(key, mtl); return mtl; } + static GetConceptualTransparentMaterial(color, side = three.FrontSide) { + let key = `${color},${side}`; + if (this._ConceptualTransparentMaterial.has(key)) + return this._ConceptualTransparentMaterial.get(key); + let shaderParams = GetGoodShaderSimple(new three.Vector3().fromArray(this.GetColor(color).toArray()), side, ColorMaterial.UseLogBuf); + let mtl = new three.ShaderMaterial(shaderParams); + Object.defineProperty(mtl, "transparent", { + get: () => mtl.uniforms.opacity.value !== 1 + }); + Object.defineProperty(mtl.uniforms.opacity, "value", { + get: () => HostApplicationServices.ConceptualTransparentOpacity + }); + this._ConceptualTransparentMaterial.set(key, mtl); + return mtl; + } static UpdateConceptualMaterial(useLogBuf) { } static GetPrintConceptualMaterial() { @@ -3276,6 +3655,7 @@ ColorMaterial.UseLogBuf = false; ColorMaterial._WallLineMtlMap = new Map(); ColorMaterial._BasicDoubleSideMaterialMap = new Map(); ColorMaterial._ConceptualMaterial = new Map(); +ColorMaterial._ConceptualTransparentMaterial = new Map(); ColorMaterial._BasicTransparentMaterialMap = new Map(); ColorMaterial._BasicTransparentMaterialMap2 = new Map(); //橡皮筋材质: 黄色 点划线 @@ -3411,7 +3791,7 @@ var BufferGeometryUtils; maxMaterialIndex = Math.max(maxMaterialIndex, g.materialIndex ?? 0); mergedGeometry.addGroup(offset + g.start, g.count, materialOffset + g.materialIndex); } - materialOffset += maxMaterialIndex; + materialOffset += (maxMaterialIndex + 1); } offset += count; } @@ -3489,5473 +3869,68 @@ var BufferGeometryUtils; BufferGeometryUtils.MergeBufferAttributes = MergeBufferAttributes; })(BufferGeometryUtils || (BufferGeometryUtils = {})); -var ExtendType; -(function (ExtendType) { - /** - * 前后都不延伸 - */ - ExtendType[ExtendType["None"] = 0] = "None"; - /** - * 只允许延伸前面 - */ - ExtendType[ExtendType["Front"] = 1] = "Front"; - /** - * 只允许延伸后面 - */ - ExtendType[ExtendType["Back"] = 2] = "Back"; - /** - * 前后延伸 - */ - ExtendType[ExtendType["Both"] = 3] = "Both"; -})(ExtendType || (ExtendType = {})); /** - * 曲线的基类,子类请实现以下方法. + * 轨道控制的数学类,观察向量和角度的互相转换 + * 当x当抬头或者低头到90度时,触发万向锁. */ -let Curve = class Curve extends Entity { +class Orbit { constructor() { - super(); - //------------------绘制相关------------------ - //重载 - this.OnlyRenderType = true; + //抬头低头 正数抬头 负数低头 + this.phi = 0; //Φ + //身体旋转 0为正右边 逆时针旋转 + this.theta = 0; //θ } - get Is2D() { - return equaln$1(this._Matrix.elements[14], 0); + get RoX() { + return this.phi; } - get StartPoint() { return; } - set StartPoint(v) { return; } - get StartParam() { return; } - get EndPoint() { return; } - set EndPoint(v) { return; } - /** 曲线中点 */ - get Midpoint() { - return this.GetPointAtParam(this.MidParam); + set RoX(v) { + this.phi = three.MathUtils.clamp(v, Math.PI * -0.49, Math.PI * 0.49); } - get MidParam() { - if (this.EndParam === 1) - return 0.5; - else - return this.GetParamAtDist(this.Length * 0.5); - } - get EndParam() { return; } - get Area() { return 0; } /** - *获得曲线的面积,逆时针为正,顺时针为负. + * 使用旋转角度 计算观察向量 + * @param [outDirection] 引用传入,如果传入,那么就不构造新的向量 + * @returns 返回观察向量 */ - get Area2() { return 0; } - get Length() { return 0; } - get IsClose() { return false; } - /** 曲线为顺时针 */ - get IsClockWise() { return this.Area2 < 0; } - get Shape() { throw "未实现"; } - GetPointAtParam(param) { return; } - GetPointAtDistance(distance) { return; } - GetDistAtParam(param) { return; } - GetDistAtPoint(pt) { return; } - GetParamAtPoint(pt, fuzz = 1e-6) { return; } - GetParamAtPoint2(pt, fuzz = 1e-6) { return this.GetParamAtPoint(pt, fuzz); } - GetParamAtDist(d) { return; } + UpdateDirection(outDirection = new three.Vector3()) { + outDirection.z = Math.sin(this.phi); + //归一化专用. + let d = Math.abs(Math.cos(this.phi)); + outDirection.x = Math.cos(this.theta) * d; + outDirection.y = Math.sin(this.theta) * d; + return outDirection; + } /** - * 返回曲线在指定位置的一阶导数(在wcs内) - * @param {(number | Vector3)} param + * 使用观察向量,计算旋转角度 + * @param dir 这个向量会被修改成单位向量. */ - GetFirstDeriv(param) { return; } - GetFirstDerivAngle(param) { - let d = this.GetFirstDeriv(param); - return Math.atan2(d.y, d.x); - } - /** - * 返回切割曲线后的结果.总是从起点开始切割,并且按顺序返回曲线. - * @param {(number[] | number)} param - */ - GetSplitCurves(param) { return; } - //未完善 - GetCurveAtParamRange(startParam, EndParam) { return; } - GetSplitCurvesByPts(pt) { - let pts = Array.isArray(pt) ? pt : [pt]; - let pars = pts.map(p => this.GetParamAtPoint(p)); - return this.GetSplitCurves(pars); - } - SplitParamSort(param) { - if (Array.isArray(param)) { - param = param.filter(p => this.ParamOnCurve(p)); - if (param.length === 0) - return []; - param.push(0, this.EndParam); - arraySortByNumber$1(param); - arrayRemoveDuplicateBySort(param, (e1, e2) => equaln$1(e1, e2, 1e-7)); - return param; - } - else if (this.ParamOnCurve(param)) - return [0, param, this.EndParam]; - else - return []; - } - Extend(newParam) { } - /** - * 连接曲线到本曲线,如果成功返回true - * @param {Curve} cu 需要连接的曲线 - * @returns {boolean} 连接成功 - * @memberof Curve - */ - Join(cu, allowGap = false, tolerance = 1e-4) { return exports.Status.False; } - //翻转曲线.首尾调换. - Reverse() { return this; } - //点在曲线上 - PtOnCurve(pt, fuzz = 1e-5) { - return equalv3(this.StartPoint, pt, fuzz) || equalv3(this.EndPoint, pt, fuzz) || this.ParamOnCurve(this.GetParamAtPoint(pt, fuzz)); - } - //点在曲线中,不在起点或者终点. - PtOnCurve2(pt) { - return !(equalv3(this.StartPoint, pt, 1e-6) || equalv3(this.EndPoint, pt, 1e-6)) && this.ParamOnCurve(this.GetParamAtPoint(pt), 0); - } - //点在曲线上,已经确定点在曲线的延伸线上 - PtOnCurve3(p, fuzz = 1e-6) { - return this.PtOnCurve(p, fuzz); - } - //参数在曲线上 容差,1e-6 - ParamOnCurve(param, fuzz = 1e-6) { return !isNaN(param) && param >= -fuzz && param <= this.EndParam + fuzz; } - GetOffsetCurves(offsetDist) { return; } - GetClosestPointTo(pt, extend) { return; } - /** - * 曲线相交点 - */ - IntersectWith(curve, intType, tolerance = 1e-6) { - return this.IntersectWith2(curve, intType, tolerance).map(r => r.pt); - } - /** - * 曲线相交点和点的参数 - */ - IntersectWith2(curve, intType, tolerance = 1e-6) { return []; } - /** - * 拽托点个数 - */ - GetDragPointCount(drag) { return 0; } - //样条线重载了这个,得到了更高的绘制精度 - GetDrawCount() { return 30; } - /** - * @param {RenderType} [renderType=RenderType.Wireframe] - */ - InitDrawObject(renderType = RenderType.Wireframe) { - let pts = this.Shape.getPoints(this.GetDrawCount()); - if (pts.length === 0) - pts.push(new three.Vector3); - if (renderType === RenderType.WireframePrint) { - let array = []; - for (let p of pts) - array.push(p.x, p.y, 0); - let geometry = new LineGeometry.LineGeometry().setPositions(array); - return new Line2.Line2(geometry, ColorMaterial.PrintLineMatrial); - } - let geo = new three.BufferGeometry().setFromPoints(pts); - return new three.Line(geo, ColorMaterial.GetLineMaterial(this._Color)); - } - /** - * 重载:更新绘制的实体 - * @param {RenderType} type - * @param {Object3D} obj - */ - UpdateDrawObject(type, obj) { - let pts = this.Shape.getPoints(this.GetDrawCount()); - let plObj = obj; - let geo = plObj.geometry; - if (geo instanceof LineGeometry.LineGeometry) { - let array = []; - for (let p of pts) - array.push(p.x, p.y, 0); - geo.setPositions(array); - } - else { - //@ts-ignore - for (let p of pts) - p.z = 0; - if (!BufferGeometryUtils.UpdatePts(geo, pts)) - updateGeometry(plObj, new three.BufferGeometry().setFromPoints(pts)); - } - } - /** - * 重载:更新实体材质 - */ - UpdateDrawObjectMaterial(type, obj, material) { - if (type === RenderType.WireframePrint) ; - else { - let m = obj; - m.material = material || ColorMaterial.GetLineMaterial(this._Color); - } - } - UpdateJigMaterial(color = 8) { - for (let [type, obj] of this._CacheDrawObject) { - this.UpdateDrawObjectMaterial(type, obj, ColorMaterial.GetLineMaterial(color)); - } - } -}; -Curve = __decorate([ - Factory -], Curve); - -var DragPointType; -(function (DragPointType) { - DragPointType[DragPointType["Grip"] = 0] = "Grip"; - DragPointType[DragPointType["Stretch"] = 1] = "Stretch"; -})(DragPointType || (DragPointType = {})); - -class Matrix2 { - constructor() { - //column-major - this.el = [1, 0, 0, 1]; //ix iy jx jy [a c b d] - } - set(ix, iy, jx, jy) { - this.el[0] = ix; - this.el[1] = iy; - this.el[2] = jx; - this.el[3] = jy; - return this; - } - applyVector(vec) { - let x = vec.x; - let y = vec.y; - let e = this.el; - vec.x = e[0] * x + e[2] * y; - vec.y = e[1] * x + e[3] * y; - return this; - } - fromMatrix4(mtx4) { - this.set(mtx4.elements[0], mtx4.elements[1], mtx4.elements[3], mtx4.elements[4]); - } - setRotate(theta) { - let c = Math.cos(theta); - let s = Math.sin(theta); - this.set(c, s, -s, c); - return this; - } - //自我求逆矩阵,返回自身 - invert() { - //ref:https://www.mathsisfun.com/algebra/matrix-inverse.html - let [a, c, b, d] = this.el; - let det = 1 / (a * d - b * c); - this.set(d * det, -c * det, -b * det, a * det); - return this; - } -} - -class PlaneExt extends three.Plane { - constructor(normal = new three.Vector3(0, 0, 1), constant) { - super(normal); - if (typeof constant === "number") - this.constant = constant; - else if (constant) - this.parseConstantFromPoint(constant); - } - parseConstantFromPoint(constant) { - this.constant = -this.normal.dot(constant); - } - intersectLine(line, optionalTarget = new three.Vector3(), extendLine = false) { - let v1 = new three.Vector3(); - let direction = line.delta(v1); - let denominator = this.normal.dot(direction); - if (denominator === 0) { - // line is coplanar, return origin - if (this.distanceToPoint(line.start) === 0) { - return optionalTarget.copy(line.start); - } - // Unsure if this is the correct method to handle this case. - return undefined; - } - let t = -(line.start.dot(this.normal) + this.constant) / denominator; - //If you not extendLine,check intersect point in Line - if (!extendLine && (t < -1e-6 || t > 1)) { - return undefined; - } - return optionalTarget.copy(direction).multiplyScalar(t).add(line.start); - } - intersectRay(ray, optionalTarget, extendLine) { - // 从射线初始位置 - let line = new three.Line3(ray.origin.clone(), ray.origin.clone().add(ray.direction)); - return this.intersectLine(line, optionalTarget, extendLine); - } -} - -const ROTATE_MTX2 = new Matrix2().set(0, -1, 1, 0); - -var Line_1; -exports.Line = Line_1 = class Line extends Curve { - constructor(_StartPoint = new three.Vector3, _EndPoint = new three.Vector3) { - super(); - this._StartPoint = _StartPoint; - this._EndPoint = _EndPoint; - } - get Is2D() { - return super.Is2D && equaln$1(this._StartPoint.z, 0) && equaln$1(this._EndPoint.z, 0); - } - get Shape() { - return new three.Shape([AsVector2(this._StartPoint), AsVector2(this._EndPoint)]); - } - Z0() { - this.WriteAllObjectRecord(); - let ocsInv = this.OCSInv; - let sp = this.StartPoint.setZ(0).applyMatrix4(ocsInv); - let ep = this.EndPoint.setZ(0).applyMatrix4(ocsInv); - this._StartPoint.copy(sp); - this._EndPoint.copy(ep); - this.Update(); - return this; - } - ApplyScaleMatrix(m) { - this.WriteAllObjectRecord(); - this.StartPoint = this.StartPoint.applyMatrix4(m); - this.EndPoint = this.EndPoint.applyMatrix4(m); - return this; - } - ApplyMirrorMatrix(m) { - this.WriteAllObjectRecord(); - let sp = this.StartPoint; - let ep = this.EndPoint; - reviseMirrorMatrix(this._Matrix); - this.StartPoint = sp; - this.EndPoint = ep; - return this; - } - InitDrawObject(renderType = RenderType.Wireframe) { - let pts = [this._StartPoint, this._EndPoint]; - if (renderType === RenderType.WireframePrint) { - let array = []; - for (let p of pts) - array.push(p.x, p.y, p.z); - let geometry = new LineGeometry.LineGeometry().setPositions(array); - return new Line2.Line2(geometry, ColorMaterial.PrintLineMatrial); - } - let geo = new three.BufferGeometry().setFromPoints(pts); - return new three.Line(geo, ColorMaterial.GetLineMaterial(this._Color)); - } - /** - * 重载:更新绘制的实体 - * @param {RenderType} type - * @param {Object3D} obj - */ - UpdateDrawObject(type, obj) { - let pts = [this._StartPoint, this._EndPoint]; - let plObj = obj; - let geo = plObj.geometry; - if (geo instanceof LineGeometry.LineGeometry) { - let array = []; - for (let p of pts) - array.push(p.x, p.y, p.z); - geo.setPositions(array); - } - else { - if (!BufferGeometryUtils.UpdatePts(geo, pts)) - updateGeometry(plObj, new three.BufferGeometry().setFromPoints(pts)); - } - } - GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { - switch (snapMode) { - case ObjectSnapMode.End: - return [this.StartPoint, this.EndPoint]; - case ObjectSnapMode.Mid: - return [this.GetPointAtParam(0.5)]; - case ObjectSnapMode.Nea: - { - let derv = this.GetFirstDeriv(0).normalize(); - let viewNormal = new three.Vector3().fromArray(viewXform.elements, 2 * 3); - //平行不捕捉 - if (isParallelTo(viewNormal, derv)) - return []; - let fNormal = new three.Vector3().crossVectors(viewNormal, derv); - fNormal.crossVectors(derv, fNormal); - let plane = new PlaneExt(fNormal, this.StartPoint); - let plocal = plane.intersectLine(new three.Line3(pickPoint, pickPoint.clone().add(viewNormal)), new three.Vector3(), true); - let pclosest = this.GetClosestPointTo(plocal, false); - return [pclosest]; - } - case ObjectSnapMode.Ext: - return [this.GetClosestPointTo(pickPoint, true)]; - case ObjectSnapMode.Per: - if (lastPoint) { - let { closestPt, param } = this.GetClosestAtPoint(lastPoint, true); - if (this.ParamOnCurve(param)) - return [closestPt]; - } - } - return []; - } - GetGripPoints() { - return [this.StartPoint, this.GetPointAtParam(0.5), this.EndPoint]; - } - MoveGripPoints(indexList, vec) { - this.WriteAllObjectRecord(); - for (let index of indexList) { - if (index === 0) - this.StartPoint = this.StartPoint.add(vec); - else if (index === 2) - this.EndPoint = this.EndPoint.add(vec); - else { - let m = MoveMatrix(vec); - this.ApplyMatrix(m); - } - } - } - GetStretchPoints() { - return [this.StartPoint, this.EndPoint]; - } - MoveStretchPoints(indexList, vec) { - this.WriteAllObjectRecord(); - for (let index of indexList) { - if (index === 0) - this.StartPoint = this.StartPoint.add(vec); + SetFromDirection(dir) { + dir.normalize(); + this.phi = Math.asin(dir.z); + if (equaln$1(dir.x, 0) && equaln$1(dir.y, 0)) + if (dir.z > 0) + this.theta = Math.PI * -0.5; else - this.EndPoint = this.EndPoint.add(vec); - } - } - GetFirstDeriv(param) { - return this.EndPoint.sub(this.StartPoint); - } - /** - * 需要注意的是,平行线和共线无交点 - * @param curve - * @param intType - * @param [tolerance=1e-4] - * @returns - */ - IntersectWith2(curve, intType, tolerance = 1e-4) { - if (curve instanceof Line_1 || curve.constructor.name === "RoomWallLine") { - return IntersectLineAndLine(this, curve, intType, tolerance); - } - if (curve instanceof exports.Arc || curve.constructor.name === "RoomWallArc") { - return IntersectLineAndArc(this, curve, intType, tolerance); - } - if (curve instanceof exports.Circle) { - return IntersectLineAndCircle(this, curve, intType, tolerance); - } - if (curve instanceof exports.Polyline) { - return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType), tolerance)); - } - if (curve instanceof Ellipse) - return IntersectEllipseAndLine(this, curve, intType, tolerance); - //其他的尚未实现. - return []; - } - //Param - GetPointAtParam(param) { - return this.StartPoint.add(this.GetFirstDeriv(0).multiplyScalar(param)); - } - GetParamAtPoint(pt, fuzz = 1e-5) { - let { closestPt, param } = this.GetClosestAtPoint(pt, true); - if (!equalv3(closestPt, pt, fuzz)) - return NaN; - return param; - } - GetParamAtDist(d) { - return d / this.Length; - } - GetPointAtDistance(distance) { - return this.GetPointAtParam(this.GetParamAtDist(distance)); - } - GetDistAtParam(param) { - return this.Length * param; - } - GetDistAtPoint(pt) { - return this.GetDistAtParam(this.GetParamAtPoint(pt)); - } - GetSplitCurves(param) { - let params = this.SplitParamSort(param); - let pts = params.map(param => this.GetPointAtParam(param)); - let ret = new Array(); - if (pts.length >= 2) { - for (let i = 0; i < pts.length - 1; i++) { - let newLine = this.Clone(); - newLine.ColorIndex = this.ColorIndex; - newLine.SetStartEndPoint(pts[i], pts[i + 1]); - ret.push(newLine); - } - } - return ret; - } - GetParamAtPoint2(pt) { - let { param } = this.GetClosestAtPoint(pt, true); - return param; - } - //点在曲线上,已经确定点在曲线的延伸线上 - PtOnCurve3(p, fuzz = 1e-6) { - let { param } = this.GetClosestAtPoint(p, true); - return this.ParamOnCurve(param, fuzz); - } - GetClosestAtPoint(pt, extend) { - let sp = this.StartPoint; - let ep = this.EndPoint; - if (equalv3(pt, sp, 1e-8)) - return { closestPt: sp, param: 0 }; - else if (equalv3(pt, ep, 1e-8)) - return { closestPt: ep, param: 1 }; - let direction = this.GetFirstDeriv(0); - let length = direction.length(); - if (length === 0) { - let param = NaN; - if (equalv3(pt, this.StartPoint, 1e-6)) - param = 0; - return { closestPt: sp, param: param }; - } - direction.divideScalar(length); - let diff = pt.clone().sub(sp); - let param = direction.dot(diff); - let closestPt; - if (extend) - closestPt = sp.add(direction.multiplyScalar(param)); - else if (param < 0) { - closestPt = sp; - param = 0; - } - else if (param > length) { - closestPt = this.EndPoint; - param = length; - } + this.theta = Math.PI * 0.5; else - closestPt = sp.add(direction.multiplyScalar(param)); - return { - closestPt: closestPt, - param: param / length - }; - } - GetClosestPointTo(pt, extend) { - return this.GetClosestAtPoint(pt, extend).closestPt; - } - Extend(newParam) { - this.WriteAllObjectRecord(); - if (newParam < this.StartParam) { - this.StartPoint = this.GetPointAtParam(newParam); - } - else if (newParam > this.EndParam) { - this.EndPoint = this.GetPointAtParam(newParam); - } - } - Join(cu, allowGap = false, tolerance = 1e-5) { - if (cu instanceof Line_1 || cu.constructor.name === "RoomWallLine") { - //平行 - if (!isParallelTo(this.GetFirstDeriv(0).normalize(), cu.GetFirstDeriv(0).normalize())) - return exports.Status.False; - let sp = cu.StartPoint; - let { closestPt: cp1, param: param1 } = this.GetClosestAtPoint(sp, true); - if (!equalv3(sp, cp1, tolerance)) //点在曲线上,允许较低的精度 - return exports.Status.False; - let ep = cu.EndPoint; - let { closestPt: cp2, param: param2 } = this.GetClosestAtPoint(ep, true); - if (!equalv3(ep, cp2, tolerance)) - return exports.Status.False; - if (param1 > param2) { - [param1, param2] = [param2, param1]; - [sp, ep] = [ep, sp]; - } - if (allowGap || Math.max(0, param1) < Math.min(1, param2) + tolerance / this.Length) //这里的容差是值容差,但是我们用它来判断参数,所以进行转换 - { - if (param1 < 0) - this.StartPoint = sp; - if (param2 > 1) - this.EndPoint = ep; - return exports.Status.True; - } - } - return exports.Status.False; - } - Reverse() { - this.WriteAllObjectRecord(); - [this._StartPoint, this._EndPoint] = [this._EndPoint, this._StartPoint]; - return this; - } - GetOffsetCurves(offsetDist) { - let offset = this._EndPoint.clone().sub(this._StartPoint).normalize().multiplyScalar(offsetDist); - ROTATE_MTX2.applyVector(offset); - let newLine = this.Clone(); - newLine.ClearDraw(); - newLine._StartPoint.add(offset); - newLine._EndPoint.add(offset); - return [newLine]; - } - get BoundingBox() { - return new three.Box3().setFromPoints([this.StartPoint, this.EndPoint]); + this.theta = Math.atan2(dir.y, dir.x); } /** - * 返回对象在自身坐标系下的Box + * 参考任意轴坐标系算法. + * http://help.autodesk.com/view/ACD/2017/CHS/?guid=GUID-E19E5B42-0CC7-4EBA-B29F-5E1D595149EE */ - get BoundingBoxInOCS() { - return new Box3Ext().setFromPoints([this._StartPoint, this._EndPoint]); - } - get StartParam() { - return 0; - } - get EndParam() { - return 1; - } - //属性 - get Length() { return this._StartPoint.distanceTo(this._EndPoint); } - //#region -----------------------------File----------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - //对象从文件中读取数据,初始化自身 - _ReadFile(file) { - super._ReadFile(file); - file.Read(); //1 - this._StartPoint.fromArray(file.Read()); - this._EndPoint.fromArray(file.Read()); - } - //对象将自身数据写入到文件. - WriteFile(file) { - super.WriteFile(file); - file.Write(1); //ver - file.Write(this._StartPoint.toArray()); - file.Write(this._EndPoint.toArray()); - } - //#endregion-----------------------------File End----------------------------- - //#region 属性 - set StartPoint(p) { - this.WriteAllObjectRecord(); - this._StartPoint.copy(p).applyMatrix4(this.OCSInv); - this.Update(); - } - get StartPoint() { - return this._StartPoint.clone().applyMatrix4(this.OCSNoClone); - } - get EndPoint() { - return this._EndPoint.clone().applyMatrix4(this.OCSNoClone); - } - set EndPoint(p) { - this.WriteAllObjectRecord(); - this._EndPoint.copy(p).applyMatrix4(this.OCSInv); - this.Update(); - } - SetStartEndPoint(s, e) { - this.WriteAllObjectRecord(); - let inv = this.OCSInv; - this._StartPoint.copy(s).applyMatrix4(inv); - this._EndPoint.copy(e).applyMatrix4(inv); - this.Update(); - } -}; -exports.Line = Line_1 = __decorate([ - Factory -], exports.Line); - -var Ellipse_1; -let Ellipse = Ellipse_1 = class Ellipse extends Curve { - constructor(center, radX = 1e-3, radY = 1e-3, angle = 0) { - super(); - this._startAngle = 0; - this._endAngle = Math.PI * 2; - center && this._Matrix.setPosition(center); - this._radX = radX; - this._radY = radY; - this._rotate = angle; - } - get StartParam() { - return 0; - } - get EndParam() { - return 1; - } - get StartPoint() { - return this.GetPointAtParam(0); - } - get EndPoint() { - return this.GetPointAtParam(1); - } - get Shape() { - let sp = new three.Shape(); - sp.ellipse(0, 0, this._radX, this._radY, this._startAngle, this._endAngle, false, this._rotate); - return sp; - } - get IsClose() { - return equaln$1(this.TotalAngle, Math.PI * 2); - } - get Center() { - return new three.Vector3().setFromMatrixPosition(this._Matrix); - } - set Center(v) { - this.WriteAllObjectRecord(); - this._Matrix.setPosition(v); - this.Update(); - } - get RadX() { - return this._radX; - } - set RadX(v) { - this.WriteAllObjectRecord(); - this._radX = v; - this.Update(); - } - get RadY() { - return this._radY; - } - set RadY(v) { - this.WriteAllObjectRecord(); - this._radY = v; - this.Update(); - } - get Rotation() { - return this._rotate; - } - set Rotation(v) { - this.WriteAllObjectRecord(); - this._rotate = v; - this.Update(); - } - get StartAngle() { - return this._startAngle; - } - get EndAngle() { - return this._endAngle; - } - set StartAngle(v) { - this.WriteAllObjectRecord(); - this._startAngle = v; - this.Update(); - } - set EndAngle(v) { - this.WriteAllObjectRecord(); - this._endAngle = v; - this.Update(); - } - get Length() { - let a = this._radX; - let b = this._radY; - return Math.PI * Math.abs(3 * (a + b) - Math.sqrt((3 * a + b) * (a + 3 * b))) * this.TotalAngle / Math.PI * 0.5; - } - get Area() { - let area = Math.PI * this._radX * this._radY; - let an = this._endAngle - this._startAngle; - if (an < 0) - an = Math.PI * 2 + an; - area *= an / Math.PI * 0.5; - let area2 = Math.abs(getDeterminantFor2V(AsVector2(this.StartPoint.sub(this.Center)), AsVector2(this.EndPoint.sub(this.Center)))) / 2; - if (an < Math.PI) - area -= area2; + static ComputUpDirection(n, ay = new three.Vector3(), ax = new three.Vector3()) { + n.normalize(); + if (Math.abs(n.x) < 0.015625 && Math.abs(n.y) < 0.015625) + ax.crossVectors(YAxis, n); else - area += area2; - return area; - } - get TotalAngle() { - let totolAngle = this._endAngle - this._startAngle; - if (totolAngle <= 0) - totolAngle = Math.PI * 2 + totolAngle; - return totolAngle; - } - ApplyScaleMatrix(m) { - //或许我们应该在缩放一下轴尺寸 但是先不做了 - let p = this.Position; - p.applyMatrix4(m); - this.Position = p; - return this; - } - Extend(newParam) { - this.WriteAllObjectRecord(); - if (newParam < 0) - this._startAngle = this.GetAngleAtParam(newParam); - else if (newParam > 1) - this._endAngle = this.GetAngleAtParam(newParam); - this.Update(); - } - PtInCurve(pt) { - let p = rotatePoint(pt.clone().sub(this.Center), -this.Rotation); - return p.x ** 2 / this.RadX ** 2 + p.y ** 2 / this.RadY ** 2 < 1; - } - PtOnCurve(pt) { - return this.PtOnEllipse(pt) && this.ParamOnCurve(this.GetParamAtPoint(pt)); - } - PtOnEllipse(pt) { - let p = rotatePoint(pt.clone().applyMatrix4(this.OCSInv), -this.Rotation); - return equaln$1(p.x ** 2 / this.RadX ** 2 + p.y ** 2 / this.RadY ** 2, 1, 1e-3); - } - GetPointAtParam(param) { - let an = this.TotalAngle * param + this._startAngle; - let a = this.RadX; - let b = this.RadY; - let pt = new three.Vector3(a * Math.cos(an), b * Math.sin(an), 0); - let mtx = new Matrix2().setRotate(this._rotate); - mtx.applyVector(pt); - return pt.applyMatrix4(this.OCSNoClone); - } - GetParamAtPoint(pt) { - if (!this.PtOnEllipse(pt)) - return NaN; - let an = this.GetCircleAngleAtPoint(pt); - let allAngle = this.TotalAngle; - let param = an / allAngle; - if (this.IsClose) - return param; - else { - if (an >= this._startAngle) - param = (an - this._startAngle) / allAngle; - else - param = ((Math.PI * 2) - (this._startAngle - an)) / allAngle; - //剩余的参数 - let remParam = Math.PI * 2 / allAngle - 1; - if (param > (remParam * 0.5 + 1)) //一半 - param = (param - 1) - remParam; //返回负数 - return param; - } - } - GetPointAtDistance(distance) { - let param = distance / this.Length; - return this.GetPointAtParam(param); - } - GetDistAtParam(param) { - return this.Length * param; - } - GetDistAtPoint(pt) { - let param = this.GetParamAtPoint(pt); - return this.GetDistAtParam(param); - } - GetParamAtDist(d) { - return d / this.Length; - } - GetAngleAtParam(param) { - return this._startAngle + param * this.TotalAngle; - } - GetCircleAngleAtPoint(pt) { - pt = pt.clone().applyMatrix4(this.OCSInv); - let romtx = new Matrix2().setRotate(-this._rotate); - romtx.applyVector(pt); - //https://www.petercollingridge.co.uk/tutorials/computational-geometry/finding-angle-around-ellipse/ - let an = Math.atan(this.RadX * pt.y / (this.RadY * pt.x)); - if (pt.x < 0) - an += Math.PI; - else if (an < 0) - an += Math.PI * 2; - return an; - } - GetFirstDeriv(pt) { - if (typeof pt === "number") - pt = this.GetPointAtParam(pt); - else - pt = pt.clone(); - let refPts = this.GetGripPoints(); - let p = pt.clone().applyMatrix4(this.OCSInv).applyMatrix4(new three.Matrix4().makeRotationZ(-this._rotate)); - let vec = new three.Vector3(); - if (equalv3(pt, refPts[0])) - vec.set(0, 1, 0); - else if (equalv3(pt, refPts[1])) - vec.set(0, -1, 0); - else if (p.y > 0) { - let k = -(this._radY ** 2 * p.x) / (this._radX ** 2 * p.y); - vec.set(-1, -k, 0); - } - else { - let k = -(this._radY ** 2 * p.x) / (this._radX ** 2 * p.y); - vec.set(1, k, 0); - } - rotatePoint(vec, this._rotate); - return vec.applyMatrix4(this.OCS.setPosition(0, 0, 0)); - } - GetClosestPointTo(p, extend) { - //参考:https://wet-robots.ghost.io/simple-method-for-distance-to-ellipse/ - let ro = new three.Matrix4().makeRotationZ(this._rotate); - let roInv = new three.Matrix4().getInverse(ro); - let pt = p.clone().applyMatrix4(this.OCSInv).setZ(0).applyMatrix4(roInv); - let px = pt.x; - let py = pt.y; - let t = angle(pt); - let a = this._radX; - let b = this._radY; - let x, y; - for (let i = 0; i < 3; i++) { - x = a * Math.cos(t); - y = b * Math.sin(t); - let ex = (a ** 2 - b ** 2) * Math.cos(t) ** 3 / a; - let ey = (b * b - a * a) * Math.sin(t) ** 3 / b; - let rx = x - ex; - let ry = y - ey; - let qx = px - ex; - let qy = py - ey; - let r = Math.sqrt(ry ** 2 + rx ** 2); - let q = Math.sqrt(qy ** 2 + qx ** 2); - let dc = r * Math.asin((rx * qy - ry * qx) / (r * q)); - let dt = dc / Math.sqrt(a * a + b * b - x * x - y * y); - t += dt; - } - let retPt = new three.Vector3(x, y).applyMatrix4(ro).applyMatrix4(this.OCSNoClone); - if (this.IsClose || extend) { - return retPt; - } - else if (this.PtOnCurve(retPt)) { - return retPt; - } - else { - let d1 = p.distanceToSquared(this.StartPoint); - let d2 = p.distanceToSquared(this.EndPoint); - return d1 < d2 ? this.StartPoint : this.EndPoint; - } - } - GetOffsetCurves(offsetDist) { - if ((offsetDist + Math.min(this._radX, this._radY)) > 0) { - let el = this.Clone(); - el.RadX = this._radX + offsetDist; - el.RadY = this._radY + offsetDist; - return [el]; - } - return []; - } - GetSplitCurves(param) { - let params; - if (param instanceof Array) { - params = param.filter(p => this.ParamOnCurve(p)); - params.sort((a1, a2) => a2 - a1); //从大到小 - } - else - params = [param]; - //补上最后一个到第一个的弧 - if (this.IsClose) - params.unshift(arrayLast(params)); - else { - params.unshift(1); - params.push(0); - } - arrayRemoveDuplicateBySort(params); - let anglelist = params.map(param => this.TotalAngle * param + this._startAngle); - let elllist = []; - for (let i = 0; i < anglelist.length - 1; i++) { - let sa = anglelist[i]; - let ea = anglelist[i + 1]; - let el = this.Clone(); - if (!equaln$1(sa, ea, 1e-6)) { - el.StartAngle = ea; - el.EndAngle = equaln$1(sa, 0) ? Math.PI * 2 : sa; - elllist.push(el); - } - } - return elllist; - } - Join(el) { - if (this.IsClose || el.IsClose || !this.IsCoplaneTo(el) || !equalv3(el.Center, this.Center)) - return exports.Status.False; - let status = exports.Status.False; - if (equaln$1(this._endAngle, this._startAngle)) { - this.EndAngle = this._endAngle; - status = exports.Status.True; - } - else if (equaln$1(this._startAngle, el._endAngle)) { - this.StartAngle = el._startAngle; - status = exports.Status.True; - } - if (status === exports.Status.True && !this.IsClose && equaln$1(this._startAngle, this._endAngle)) { - this.StartAngle = 0; - this.EndAngle = Math.PI * 2; - } - return status; - } - GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { - switch (snapMode) { - case ObjectSnapMode.End: - { - let pts = this.GetGripPoints(); - return pts; - } - case ObjectSnapMode.Cen: - return [this.Center]; - case ObjectSnapMode.Nea: - { - return getArcOrCirNearPts(this, pickPoint, viewXform); - } - case ObjectSnapMode.Per: - if (lastPoint) { - if (equaln$1(lastPoint.distanceToSquared(this.Center), 0, 1e-10)) - return []; - return [this.GetClosestPointTo(lastPoint, false)]; - } - case ObjectSnapMode.Tan: - { - //TODO:过某点获取椭圆全部切点 - if (lastPoint) { - return getTanPtsOnEllipse(); - } - } - default: - return []; - } - } - IntersectWith2(curve, intType) { - //TODO:优化椭圆和椭圆,椭圆和圆相交 - if (curve instanceof exports.Line) { - return SwapParam(IntersectEllipseAndLine(curve, this, reverseIntersectOption(intType))); - } - else if (curve instanceof exports.Circle || curve instanceof exports.Arc) { - return IntersectEllipseAndCircleOrArc(this, curve, intType); - } - else if (curve instanceof exports.Polyline) { - return SwapParam(IntersectPolylineAndCurve(curve, this, intType)); - } - else if (curve instanceof Ellipse_1) { - return IntersectEllipse(this, curve); - } - else - return []; - } - GetStretchPoints() { - return this.GetGripPoints(); - } - GetGripPoints() { - let tmpMat4 = new three.Matrix4().makeRotationZ(this.Rotation); - let pts = [ - new three.Vector3(this._radX, 0), - new three.Vector3(-this._radX, 0), - new three.Vector3(0, this._radY), - new three.Vector3(0, -this._radY) - ]; - for (let p of pts) - p.applyMatrix4(tmpMat4).applyMatrix4(this.OCSNoClone); - if (!equaln$1(0, this._startAngle)) - pts.push(this.StartPoint); - if (!equaln$1(0, this._endAngle)) - pts.push(this.EndPoint); - pts.push(this.Center); - return pts; - } - MoveStretchPoints(indexList, vec) { - this.ApplyMatrix(MoveMatrix(vec)); - } - MoveGripPoints(indexList, vec) { - let pts = this.GetStretchPoints(); - if (indexList.length > 0) { - let p = pts[indexList[0]].clone(); - p.add(vec); - if (indexList[0] <= 1) - this.RadX = p.distanceTo(this.Center); - else if (indexList[0] <= 3) - this.RadY = p.distanceTo(this.Center); - else { - let p1 = pts[indexList[0]]; - //TODO:跟cad不一致待优化 - if (equalv3(p1, this.StartPoint)) { - let v1 = p1.clone().sub(this.Center); - let v2 = p.clone().sub(this.Center); - let an = angleTo(v1, v2); - this.StartAngle = this.StartAngle + an; - } - else if (equalv3(p1, this.EndPoint)) { - let v1 = p1.clone().sub(this.Center); - let v2 = p.clone().sub(this.Center); - let an = angleTo(v2, v1); - this.EndAngle = this.EndAngle + an; - } - else - this.Center = p; - } - } - } - Convert2Polyline(count = 0) { - const MIN_LEN = 80; - const par = this.TotalAngle / Math.PI * 0.5; - if (!count) { - count = Math.floor(this.Length / par / MIN_LEN); - count = three.MathUtils.clamp(count, 15, 80); - } - count = Math.floor(count * par); - if ((count & 1) === 0) - count++; - let pts = this.Shape.getPoints(count); - if (this.IsClose) - pts.pop(); - let pl = Pts2Polyline(pts, this.IsClose); - pl.ColorIndex = this.ColorIndex; - pl.ApplyMatrix(this.OCS); - if (this.IsClose) - pl.CloseMark = true; - return pl; - } - _ReadFile(file) { - super._ReadFile(file); - file.Read(); - this._radX = file.Read(); - this._radY = file.Read(); - this._rotate = file.Read(); - this._startAngle = file.Read(); - this._endAngle = file.Read(); - this.Update(); - } - //对象将自身数据写入到文件. - WriteFile(file) { - super.WriteFile(file); - file.Write(1); - file.Write(this.RadX); - file.Write(this.RadY); - file.Write(this.Rotation); - file.Write(this._startAngle); - file.Write(this._endAngle); - } -}; -Ellipse = Ellipse_1 = __decorate([ - Factory -], Ellipse); - -var Circle_1; -let circleGeometry; -function GetCircleGeometry() { - if (!circleGeometry) - circleGeometry = BufferGeometryUtils.CreateFromPts(new three.EllipseCurve(0, 0, 1, 1, 0, 2 * Math.PI, false, 0).getPoints(360).map(AsVector3)); - return circleGeometry; -} -exports.Circle = Circle_1 = class Circle extends Curve { - constructor(center, radius = 1e-6) { - super(); - center && this._Matrix.setPosition(center); - this._Radius = radius; - } - get Shape() { - let sp = new Shape2(); - sp.ellipse(0, 0, this._Radius, this._Radius, 0, 2 * Math.PI, false, 0); - return sp; - } - get Center() { - return new three.Vector3().setFromMatrixPosition(this._Matrix); - } - set Center(v) { - this.WriteAllObjectRecord(); - this._Matrix.setPosition(v); - this.Update(); - } - get Radius() { - return this._Radius; - } - set Radius(v) { - this.WriteAllObjectRecord(); - this._Radius = clamp(v, 1e-9, 1e19); - this.Update(); - } - ApplyScaleMatrix(m) { - this.WriteAllObjectRecord(); - this.Center = this.Center.applyMatrix4(m); - this.Radius = this.Radius * m.getMaxScaleOnAxis(); - return this; - } - ApplyMirrorMatrix(m) { - this.WriteAllObjectRecord(); - reviseMirrorMatrix(this._Matrix); - return this; - } - //******************** Curve function start*****************// - get StartPoint() { - return this.GetPointAtParam(0); - } - get StartParam() { - return 0; - } - get EndPoint() { - return this.GetPointAtParam(0); - } - get EndParam() { - return 1; - } - PtInCurve(pt) { - return pt.distanceToSquared(this.Center) < Math.pow(this.Radius, 2); - } - get Area() { - return Math.PI * this._Radius ** 2; - } - get Area2() { - return Math.PI * this._Radius ** 2; - } - get Length() { - return Math.PI * 2 * this._Radius; - } - get IsClose() { - return true; - } - //曲线为顺时针 - get IsClockWise() { return false; } - GetPointAtParam(param) { - return polar(new three.Vector3(), param * 2 * Math.PI, this._Radius).applyMatrix4(this._Matrix); - } - GetPointAtDistance(distance) { - let param = distance / (Math.PI * 2 * this._Radius); - return this.GetPointAtParam(param); - } - GetDistAtParam(param) { - return Math.PI * 2 * this._Radius * param; - } - GetDistAtPoint(pt) { - let param = this.GetParamAtPoint(pt); - return this.GetDistAtParam(param); - } - GetParamAtDist(d) { - return d / (Math.PI * 2 * this._Radius); - } - GetSplitCurves(param) { - let params; - if (param instanceof Array) { - params = param.filter(p => this.ParamOnCurve(p)); - params.sort((a1, a2) => a2 - a1); //从大到小 - arrayRemoveDuplicateBySort(params); - if (params.length < 2) - return []; - } - else //圆不能被单个参数切割 - return []; - //补上最后一个到第一个的弧 - params.unshift(arrayLast(params)); - let anglelist = params.map(param => Math.PI * 2 * param); - let curvelist = new Array(); - for (let i = 0; i < anglelist.length - 1; i++) { - let sa = anglelist[i]; - let ea = anglelist[i + 1]; - if (!equaln$1(sa, ea, 1e-6)) { - let arc = new exports.Arc(new three.Vector3(), this._Radius, ea, sa, false); - arc.ColorIndex = this.ColorIndex; - arc.ApplyMatrix(this.OCS); - curvelist.push(arc); - } - } - return curvelist; - } - GetParamAtPoint(pt) { - if (!this.PtOnCurve(pt)) - return NaN; - return angle(pt.clone().applyMatrix4(this.OCSInv)) / (Math.PI * 2); - } - PtOnCurve(pt, fuzz = 1e-5) { - return equaln$1(pt.distanceToSquared(this.Center), this._Radius * this._Radius, fuzz); - } - GetOffsetCurves(offsetDist) { - if ((offsetDist + this._Radius) > 0) { - let circle = this.Clone(); - circle.Radius = this._Radius + offsetDist; - return [circle]; - } - return []; - } - IntersectWith2(curve, intType, tolerance = 1e-5) { - if (curve instanceof exports.Arc) { - return IntersectCircleAndArc(this, curve, intType, tolerance); - } - if (curve instanceof exports.Line) { - return SwapParam(IntersectLineAndCircle(curve, this, reverseIntersectOption(intType), tolerance)); - } - if (curve instanceof Circle_1) { - return IntersectCircleAndCircle(this, curve, tolerance); - } - if (curve instanceof Ellipse) { - return SwapParam(IntersectEllipseAndCircleOrArc(curve, this, intType)); - } - if (curve instanceof exports.Polyline) - return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType), tolerance)); - return []; - } - //******************** Curve function end*****************// - get BoundingBoxInOCS() { - return new Box3Ext(new three.Vector3(-this.Radius, -this.Radius), new three.Vector3(this.Radius, this.Radius)); - } - get BoundingBox() { - let z = this.Normal; - let x = new three.Vector3; - let y = new three.Vector3; - Orbit.ComputUpDirection(z, y, x); - let m = new three.Matrix4().makeBasis(x, y, z).setPosition(this.Center); - //使用任意轴坐标系 以便我们正确的对齐世界坐标系 - return this.BoundingBoxInOCS.applyMatrix4(m); - } - InitDrawObject(renderType = RenderType.Wireframe) { - let obj = new three.Object3D(); - let cirGeo = GetCircleGeometry(); - if (renderType === RenderType.WireframePrint) { - let geometry = new LineGeometry.LineGeometry().setPositions(cirGeo.attributes.position.array); - obj.add(new Line2.Line2(geometry, ColorMaterial.PrintLineMatrial)); - } - else { - let line = new three.Line(cirGeo, ColorMaterial.GetLineMaterial(this._Color)); - obj.add(line); - } - this.UpdateDrawObject(renderType, obj); - return obj; - } - UpdateDrawObject(type, obj) { - obj.children[0].scale.set(this._Radius, this._Radius, this._Radius); - obj.children[0].updateMatrix(); - } - UpdateDrawObjectMaterial(type, obj, material) { - if (type === RenderType.WireframePrint) ; - else { - let m = obj.children[0]; - m.material = material ? material : ColorMaterial.GetLineMaterial(this._Color); - return obj; - } - } - GetDragPointCount(drag) { - if (drag === DragPointType.Grip) - return 5; - else - return 1; - } - GetGripPoints() { - let pts = [ - new three.Vector3(), - new three.Vector3(0, this._Radius), - new three.Vector3(0, -this._Radius), - new three.Vector3(-this._Radius, 0), - new three.Vector3(this._Radius, 0), - ]; - let ocs = this.OCS; - pts.forEach(p => p.applyMatrix4(ocs)); - return pts; - } - GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { - switch (snapMode) { - case ObjectSnapMode.Nea: - { - return getArcOrCirNearPts(this, pickPoint, viewXform); - } - case ObjectSnapMode.Cen: - return [this.Center]; - case ObjectSnapMode.Per: - if (lastPoint) { - if (equaln$1(lastPoint.distanceToSquared(this.Center), 0, 1e-10)) - return []; - let l = new exports.Line(this.Center, lastPoint); - return l.IntersectWith(this, IntersectOption.ExtendBoth); - } - case ObjectSnapMode.Tan: - let pts = GetTanPtsOnArcOrCircle(this, lastPoint); - if (pts) - return pts; - case ObjectSnapMode.End: - { - let pts = this.GetGripPoints(); - pts.shift(); - return pts; - } - } - return []; - } - MoveGripPoints(indexList, vec) { - let pts = this.GetGripPoints(); - if (indexList.length > 0) { - let index = indexList[0]; - let p = pts[index]; - if (p) { - if (index > 0) { - p.add(vec); - this.Radius = p.distanceTo(this.Center); - } - else { - this.Center = this.Center.add(vec); - } - } - } - } - GetStretchPoints() { - let pts = [new three.Vector3()]; - let ocs = this.OCS; - pts.forEach(p => p.applyMatrix4(ocs)); - return pts; - } - MoveStretchPoints(indexList, vec) { - if (indexList.length > 0) { - let mat = MoveMatrix(vec); - this.ApplyMatrix(mat); - } - } - GetFirstDeriv(pt) { - if (typeof pt === "number") - pt = this.GetPointAtParam(pt); - else - pt = pt.clone(); - pt.applyMatrix4(this.OCSInv); - let an = angle(pt) + Math.PI * 0.5; - return polar(new three.Vector3(), an, 1).applyMatrix4(new three.Matrix4().extractRotation(this.OCS)); - } - GetClosestPointTo(pt, extend) { - pt = pt.clone().applyMatrix4(this.OCSInv); - if (equalv2(pt, ZeroVec, 1e-8)) - return this.GetPointAtParam(0); - let a = Math.atan2(pt.y, pt.x); - return polar(new three.Vector3, a, this._Radius).applyMatrix4(this._Matrix); - } - //#region -------------------------File------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - //对象从文件中读取数据,初始化自身 - _ReadFile(file) { - super._ReadFile(file); - file.Read(); - this._Radius = file.Read(); - } - //对象将自身数据写入到文件. - WriteFile(file) { - super.WriteFile(file); - file.Write(1); - file.Write(this._Radius); - } -}; -exports.Circle = Circle_1 = __decorate([ - Factory -], exports.Circle); - -const ARC_DRAW_CONFIG = { - ARC_SplitLength: 0.4, //圆的分段长度 - ARC_RADIUS_MIN: 2.5, //大于半径25的自动优化成36等分圆 保证绘制光滑 - Arc_MinSplitCount: 8, //圆的最小分段个数 - ARC_MaxSplitCount: 90, //圆的最大分段个数 -}; -function GetArcDrawCount(arc) { - let radius = typeof arc === "number" ? arc : arc.Radius; - let splitCount = radius / ARC_DRAW_CONFIG.ARC_SplitLength; - //保证是偶数(避免奇数和Shape2计算方式一致导致的干涉) - splitCount = clamp(Math.floor(splitCount * 0.5) * 2, ARC_DRAW_CONFIG.Arc_MinSplitCount, ARC_DRAW_CONFIG.ARC_MaxSplitCount); - if (radius > ARC_DRAW_CONFIG.ARC_RADIUS_MIN) - splitCount = Math.max(36, splitCount); - return splitCount; -} -/** - * - * @param cu - */ -function SplitCurveParams(cu) { - let xparams = []; - if (cu instanceof exports.Circle) { - let splitCount = GetArcDrawCount(cu); - for (let i = 0; i < splitCount; i++) - xparams.push(i / splitCount); - } - else - //分段1 - for (let i = 0; i < cu.EndParam; i++) { - xparams.push(i); - if (!equaln$1(cu.GetBulgeAt(i), 0, BUL_IS_LINE_FUZZ)) // is arc - { - let arc = cu.GetCurveAtIndex(i); - let splitCount = GetArcDrawCount(arc); - if (splitCount === 0) - continue; - let a = Math.PI * 2 / splitCount; - let params = []; - for (let j = 0; j < splitCount; j++) { - let param = arc.GetParamAtAngle(a * j); - if (arc.ParamOnCurve(param)) - params.push(param); - } - arraySortByNumber$1(params); - if (params.length === 0) - continue; - for (let p of params) { - if (p > 1e-5 && p < 0.99999) - xparams.push(p + i); - } - } - } - xparams.push(cu.EndParam); - return xparams; -} - -let tempArc; -class Shape2 extends three.Shape { - getPoints(divisions = 12, optimizeArc = true) { - let points = [], last; - for (let i = 0, curves = this.curves; i < curves.length; i++) { - let curve = curves[i]; - let resolution = divisions; - //@ts-ignore - if (curve && curve.isEllipseCurve) { - if (optimizeArc) { - if (!tempArc) - tempArc = new exports.Arc; - else - tempArc.ClearDraw(); - tempArc.IsClockWise = curve.aClockwise; - tempArc.StartAngle = curve.aStartAngle; - tempArc.EndAngle = curve.aEndAngle; - tempArc.Radius = Math.abs(curve.xRadius); - //根据圆的半径来确定绘制个数(与SplitCurveParams一致) - let splitCount = GetArcDrawCount(tempArc); - resolution = Math.max(1, Math.ceil(Math.abs((tempArc.AllAngle * 0.5) / Math.PI) * splitCount * 0.5)) * 2; - } - else - resolution = divisions * 2; - } - else { - //@ts-ignore - resolution = (curve && (curve.isLineCurve || curve.isLineCurve3)) ? 1 - //@ts-ignore - : (curve && curve.isSplineCurve) ? divisions * curve.points.length - : divisions; - } - let pts = curve.getPoints(resolution); - for (let j = 0; j < pts.length; j++) { - let point = pts[j]; - if (last && equalv2(last, point, 1e-4)) - continue; // ensures no consecutive points are duplicates - points.push(point); - last = point; - if (j === pts.length - 1) - point["_mask_"] = true; - } - } - if (this.autoClose - && points.length > 1 - && !points[points.length - 1].equals(points[0])) { - points.push(points[0]); - } - return points; - } - absellipse(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation) { - let curve = new three.EllipseCurve(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation); - /* - if (this.curves.length > 0) - { - // if a previous curve is present, attempt to join - let firstPoint = curve.getPoint(0); - if (!equalv2(firstPoint, this.currentPoint)) - { - this.lineTo(firstPoint.x, firstPoint.y); - } - } - */ - this.curves.push(curve); - let lastPoint = curve.getPoint(1); - this.currentPoint.copy(lastPoint); - return this; + ax.crossVectors(ZAxis, n); + ay.crossVectors(n, ax); + ax.normalize(); + ay.normalize(); + return ay; } } -//解析二维圆弧 -class Arc2d { - constructor(p1, p2, bul) { - p1 = p1.clone(); - p2 = p2.clone(); - //a (* 2 (atan b)) - let a = Math.atan(bul) * 2; - //r (/ (distance p1 p2) 2 (sin a)) - let r = p1.distanceTo(p2) / 2 / Math.sin(a); - //c (polar p1 (+ (- (/ pi 2) a) (angle p1 p2)) r) - let c = polar(p1.clone(), Math.PI / 2 - a + angle(p2.clone().sub(p1)), r); - this._Radius = Math.abs(r); - this._StartAn = angle(p1.sub(c)); - this._EndAn = angle(p2.sub(c)); - this._Center = c; - } -} -//创建轮廓 通过点表和凸度 -function CreatePolylinePath(pts, buls) { - let shape = new Shape2(); - if (pts.length === 0) - return shape; - let firstPt = pts[0]; - shape.moveTo(firstPt.x, firstPt.y); - for (let i = 0; i < pts.length - 1; i++) { - let prePt = pts[i]; - let nextPt = pts[i + 1]; - if (equaln$1(buls[i], 0, 1e-8) || equalv2(prePt, nextPt, 1e-2)) { - shape.lineTo(nextPt.x, nextPt.y); - } - else { - //参考 - //http://www.dorodnic.com/blog/tag/three-js/ 绘制一个齿轮 - //https://www.kirupa.com/html5/drawing_circles_canvas.htm //html5 - let arc2 = new Arc2d(prePt, nextPt, buls[i]); - let cen = arc2._Center; - shape.absarc(cen.x, cen.y, arc2._Radius, arc2._StartAn, arc2._EndAn, buls[i] < 0); - } - } - return shape; -} - -/* -功能:判断线段是否存在交点 -ref:https://www.geeksforgeeks.org/check-if-two-given-line-segments-intersect/ -*/ -// Given three colinear points p, q, r, the function checks if -// point q lies on line segment 'pr' -function onSegment(p, q, r) { - if (q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && - q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y)) - return true; - return false; -} -// To find orientation of ordered triplet (p, q, r). -// The function returns following values -// 0 --> p, q and r are colinear -// 1 --> Clockwise -// 2 --> Counterclockwise -function orientation(p, q, r) { - // See https://www.geeksforgeeks.org/orientation-3-ordered-points/ - // for details of below formula. - let val = (q.y - p.y) * (r.x - q.x) - - (q.x - p.x) * (r.y - q.y); - if (val === 0) - return 0; // colinear - return (val > 0) ? 1 : 2; // clock or counterclock wise -} -/** - * 判断线段`p1q1`和线段`p2q2`是否相交. - */ -function doIntersect(p1, q1, p2, q2) { - // Find the four orientations needed for general and - // special cases - let o1 = orientation(p1, q1, p2); - let o2 = orientation(p1, q1, q2); - let o3 = orientation(p2, q2, p1); - let o4 = orientation(p2, q2, q1); - // General case - if (o1 !== o2 && o3 !== o4) - return true; - // Special Cases - // p1, q1 and p2 are colinear and p2 lies on segment p1q1 - if (o1 === 0 && onSegment(p1, p2, q1)) - return true; - // p1, q1 and q2 are colinear and q2 lies on segment p1q1 - if (o2 === 0 && onSegment(p1, q2, q1)) - return true; - // p2, q2 and p1 are colinear and p1 lies on segment p2q2 - if (o3 === 0 && onSegment(p2, p1, q2)) - return true; - // p2, q2 and q1 are colinear and q1 lies on segment p2q2 - if (o4 === 0 && onSegment(p2, q1, q2)) - return true; - return false; // Doesn't fall in any of the above cases -} - -function SplineConver2Polyline(spl, tolerance = 0.1) { - let cu = spl.Shape; - let cacheParam = new Map(); - let cacheTange = new Map(); - const GetPointAtParam = (param) => { - let p = cacheParam.get(param); - if (p) - return p; - p = cu.getPoint(param); - cacheParam.set(param, p); - return p; - }; - const GetTangentAtParam = (param) => { - let t = cacheTange.get(param); - if (t) - return t; - if (equaln$1(param, 1)) { - if (spl.CloseMark) - t = cu.getPoint(1e-4).sub(GetPointAtParam(param)).normalize(); - else - t = GetPointAtParam(param).clone().sub(cu.getPoint(1 - 1e-4)).normalize(); - } - else - t = cu.getPoint(param + 1e-4).sub(GetPointAtParam(param)).normalize(); - cacheTange.set(param, t); - return t; - }; - let count = spl.EndParam; - let stepx = 1 / count; - let curves = []; - for (let i = 0; i < 1;) { - let step = 0.25 * stepx; //0.5的时候也可以有不错的收敛,但是在0.25的时候会有比较贴合的效果 - while (true) { - let param1 = i; - let param2 = Math.min(1, i + step); - let x = param2 - param1; - let midp1 = GetPointAtParam(param1 + x * 0.25); - let midp2 = GetPointAtParam(param1 + x * 0.75); - let p1 = GetPointAtParam(param1); - let p2 = GetPointAtParam(param2); - let t1 = GetTangentAtParam(param1); - let t2 = GetTangentAtParam(param2); - let [c1, c2] = ComputeBiarc(p1, p2, t1, t2); - // TestDraw(new Point(midp1)); - // TestDraw(new Point(midp2)); - // TestDraw(new Point(c1.GetPointAtParam(0.5))); - // TestDraw(new Point(c2.GetPointAtParam(0.5))); - if (c1.GetClosestPointTo(midp1, false).distanceTo(midp1) < tolerance && - c2.GetClosestPointTo(midp2, false).distanceTo(midp2) < tolerance) { - curves.push(c1, c2); - break; - } - else - step = step * 0.5; - } - i += step; - } - let polyline = exports.Polyline.Combine(curves, 1e-3); - polyline.ApplyMatrix(spl.OCSNoClone); - polyline.ColorIndex = spl.ColorIndex; - return polyline; -} -//传入的一定是碎点,不是碎点,没有6个点请不要进来 -function PointsSimplify2Polyline(pts, tolerance = 0.1) { - let tolSq = tolerance * tolerance; - let cacheTange = new Map(); - let ptsCount = pts.length; - const GetIndexAtParam = (param) => { - if (param === 1) - return pts.length - 1; - return Math.floor(ptsCount * param); - }; - const GetPointAtParam = (param) => { - return pts[GetIndexAtParam(param)]; - }; - const GetTangentAtParam = (param) => { - let t = cacheTange.get(param); - if (t) - return t; - let index = Math.floor(ptsCount * param); - if (equaln$1(param, 1) || index + 1 >= pts.length) - t = arrayLast(pts).clone().sub(pts[pts.length - 1]).normalize(); - else - t = pts[index + 1].clone().sub(pts[index]).normalize(); - cacheTange.set(param, t); - return t; - }; - let stepx = 1; - let curves = []; - for (let i = 0; i < 1;) { - let step = 0.25 * stepx; //0.5的时候也可以有不错的收敛,但是在0.25的时候会有比较贴合的效果 - while (true) { - let param1 = i; - let param2 = Math.min(1, i + step); - let index1 = GetIndexAtParam(param1); - let index2 = GetIndexAtParam(param2); - if ((index2 - index1) < 4) //当点个数等于4时,我们计算双圆弧插值必然成功.(但是也失去了意义) - { - if (index2 - index1 > 0) { - let lineD = []; - for (let i = index1; i <= index2; i++) - lineD.push({ pt: AsVector2(pts[i]), bul: 0 }); - curves.push(new exports.Polyline(lineD)); - } - break; - } - let x = param2 - param1; - let midp1 = GetPointAtParam(param1 + x * 0.25); - let midp2 = GetPointAtParam(param1 + x * 0.75); - let p1 = pts[index1]; - let p2 = pts[index2]; - let t1 = GetTangentAtParam(param1); - let t2 = GetTangentAtParam(param2); - let [c1, c2] = ComputeBiarc(p1, p2, t1, t2); - if (c1.GetClosestPointTo(midp1, false).distanceToSquared(midp1) < tolSq && - c2.GetClosestPointTo(midp2, false).distanceToSquared(midp2) < tolSq) { - curves.push(c1, c2); - break; - } - else - step = step * 0.5; - } - i += step; - } - let polyline = exports.Polyline.Combine(curves, 1e-3); - return polyline; -} -/** - * 将碎点简化为多段线,(尝试转换为简单圆弧,或者使用双圆弧插值) - * @param pts 点表 - * @param [tolerance=0.1] 容差 - * @param [parseArc=true] 解析成简单圆弧 - * @param [lineLengthSq=2000] - * @returns 多段线 - */ -function PointsSimplify2PolylineAndParseArc(pts, buls = undefined, tolerance = 0.1, parseArc = true, lineLengthSq = 2000) { - let tolSq = tolerance * tolerance; - let ptsCount = pts.length; - const CreateLineOrArc = (startIndex, endIndex) => { - if (!buls || equaln$1(buls[startIndex], 0, 1e-4)) - return new exports.Line(AsVector3(pts[startIndex]), AsVector3(pts[endIndex])); - else - return new exports.Arc().ParseFromBul(AsVector3(pts[startIndex]), AsVector3(pts[endIndex]), buls[startIndex]); - }; - let retPolyline = new exports.Polyline; - let start = 0; - for (let next = start + 1; next <= ptsCount; next++) { - if (next === ptsCount || pts[next].distanceToSquared(pts[next - 1]) > lineLengthSq || (buls && !equaln$1(buls[next - 1], 0, 1e-4))) //长度大于50,我们才认为它是一条直线 - { - //1.将start->next-1部分组成圆弧 - if (parseArc || (next - start) < 6) - while (start < next - 1) { - if ((next - 1) - start === 1) //直线 - { - retPolyline.Join(CreateLineOrArc(start, next - 1)); - break; - } - //第一个三角形的方向 - let firstDir = orientation(pts[start], pts[start + 1], pts[start + 2]); - let to = start; - for (; to + 3 < next; to++) { - let dir = orientation(pts[to + 1], pts[to + 2], pts[to + 3]); - if (dir !== firstDir) - break; - } - if (start === to) //三个点 - { - retPolyline.Join(CreateLineOrArc(start, start + 1)); - retPolyline.Join(CreateLineOrArc(start + 1, start + 2)); - start = to + 2; - continue; - } - else if ((to - start) < 3) { - retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, to + 2 + 1).map(AsVector3))); - } - else { - let sp = pts[start]; - let ep = pts[to + 2]; - let mp = pts[Math.floor((start + to + 2) / 2)]; - let arc = new exports.Arc().FromThreePoint(AsVector3(sp), AsVector3(mp), AsVector3(ep)); - let c = to + 2 - start; - let p1 = AsVector3(pts[start + Math.floor(c * 0.25)]); - let p2 = AsVector3(pts[start + Math.floor(c * 0.75)]); - if (arc.GetClosestPointTo(p1, false).distanceToSquared(p1) < tolSq - && arc.GetClosestPointTo(p2, false).distanceToSquared(p2) < tolSq) - retPolyline.Join(arc); - else - retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, to + 2 + 1).map(AsVector3))); - } - start = to + 2; //闪烁到圆弧终点 - if (start === next - 2) { - retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, next).map(AsVector3))); - start = next; - break; - } - } - else - retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, next).map(AsVector3))); - //2.加入直线 - if (next !== ptsCount) - retPolyline.Join(CreateLineOrArc(next - 1, next)); - start = next; - } - } - return retPolyline; -} -function SmartPointsSimply2Polyline(pts, buls = undefined, tolerance = 0.1, lineLengthSq = 2000) { - let pl1 = PointsSimplify2PolylineAndParseArc(pts, buls, tolerance, true, lineLengthSq); - let pl2 = PointsSimplify2PolylineAndParseArc(pts, buls, tolerance, false, lineLengthSq); - if (pl1.EndParam < pl2.EndParam) - return pl1; - else - return pl2; -} -/** - * 简化多段线,返回结果比较好的多段线 - * @param pl - * @param [tolerance=0.1] - * @param [lineLengthSq=2000] - * @returns 返回undefined时,简化失败 - */ -function SmartPolylineSimply2Polyline(pl, tolerance = 0.1, lineLengthSq = 2000) { - if (pl.EndParam < 3) - return; - let ld = pl.LineData; - let pts = [ld[0].pt]; - let buls = [ld[0].bul]; - let prep = pts[0]; - for (let i = 1; i < ld.length; i++) { - let d = ld[i]; - let p = d.pt; - if (!equalv2(p, prep, 1e-3)) { - pts.push(p); - buls.push(d.bul); - prep = p; - } - } - if (pl.CloseMark && !equalv2(pts[0], arrayLast(pts))) - pts.push(pts[0].clone()); - let npl = SmartPointsSimply2Polyline(pts, pl.LineData.map(p => p.bul), tolerance, lineLengthSq); - npl.ApplyMatrix(pl.OCSNoClone); - npl.ColorIndex = pl.ColorIndex; - return npl; -} -//types -function Vec2(x, y) { - this.x = x; - this.y = y; -} -let c_Epsilon = 0.0001; -// math functions -function Sqr(val) { - return val * val; -} -function IsEqualEps(lhs, rhs) { - return Math.abs(lhs - rhs) <= c_Epsilon; -} -function Vec2_Add(lhs, rhs) { - return new Vec2(lhs.x + rhs.x, lhs.y + rhs.y); -} -function Vec2_Sub(lhs, rhs) { - return new Vec2(lhs.x - rhs.x, lhs.y - rhs.y); -} -function Vec2_Scale(lhs, scale) { - return new Vec2(lhs.x * scale, lhs.y * scale); -} -function Vec2_AddScaled(lhs, rhs, scale) { - return new Vec2(lhs.x + rhs.x * scale, lhs.y + rhs.y * scale); -} -function Vec2_Dot(lhs, rhs) { - return lhs.x * rhs.x + lhs.y * rhs.y; -} -function Vec2_MagSqr(val) { - return val.x * val.x + val.y * val.y; -} -function CreateArcFromEdge(p1, t1, p2, fromP1) { - let chord = Vec2_Sub(p2, p1); - let n1 = new Vec2(-t1.y, t1.x); - let chordDotN1 = Vec2_Dot(chord, n1); - if (IsEqualEps(chordDotN1, 0)) - return new exports.Line(AsVector3(p1), AsVector3(p2)); - else { - let radius = Vec2_MagSqr(chord) / (2 * chordDotN1); - let center = Vec2_AddScaled(p1, n1, radius); - let p1Offset = Vec2_Sub(p1, center); - let p2Offset = Vec2_Sub(p2, center); - let p1Ang1 = Math.atan2(p1Offset.y, p1Offset.x); - let p2Ang1 = Math.atan2(p2Offset.y, p2Offset.x); - if (p1Offset.x * t1.y - p1Offset.y * t1.x > 0) - return new exports.Arc(AsVector3(center), Math.abs(radius), p1Ang1, p2Ang1, !fromP1); - else - return new exports.Arc(AsVector3(center), Math.abs(radius), p1Ang1, p2Ang1, fromP1); - } -} -/** - * 计算双圆弧插值的圆弧 - * @param p1 起点 - * @param p2 终点 - * @param t1 起点切线 - * @param t2 终点切线 - * @returns 两个圆弧(或者其中一个是直线) - */ -function ComputeBiarc(p1, p2, t1, t2) { - let v = Vec2_Sub(p2, p1); - let vMagSqr = Vec2_MagSqr(v); - let vDotT1 = Vec2_Dot(v, t1); - { - let t = Vec2_Add(t1, t2); - let tMagSqr = Vec2_MagSqr(t); - let equalTangents = IsEqualEps(tMagSqr, 4.0); - let perpT1 = IsEqualEps(vDotT1, 0.0); - if (equalTangents && perpT1) //2个半圆 - { - let angle = Math.atan2(v.y, v.x); - let center1 = Vec2_AddScaled(p1, v, 0.25); - let center2 = Vec2_AddScaled(p1, v, 0.75); - let radius = Math.sqrt(vMagSqr) * 0.25; - let cross = v.x * t1.y - v.y * t1.x; - return [ - new exports.Arc(AsVector3(center1), radius, angle, angle + Math.PI, cross < 0), - new exports.Arc(AsVector3(center2), radius, angle, angle + Math.PI, cross > 0) - ]; - } - else { - let vDotT = Vec2_Dot(v, t); - let d1; - if (equalTangents) - d1 = vMagSqr / (4 * vDotT1); - else { - let denominator = 2 - 2 * Vec2_Dot(t1, t2); - let discriminant = Sqr(vDotT) + denominator * vMagSqr; - d1 = (Math.sqrt(discriminant) - vDotT) / denominator; - } - let joint = Vec2_Scale(Vec2_Sub(t1, t2), d1); - joint = Vec2_Add(joint, p1); - joint = Vec2_Add(joint, p2); - joint = Vec2_Scale(joint, 0.5); - return [ - CreateArcFromEdge(p1, t1, joint, true), - CreateArcFromEdge(p2, t2, joint, false) - ]; - } - } -} - -var Spline_1; -const DrawSplitCount = 120; -let Spline = Spline_1 = class Spline extends Curve { - constructor(_PointList = []) { - super(); - this._PointList = _PointList; - this._ClosedMark = false; - } - get Shape() { - return new three.CatmullRomCurve3(this.Points, this._ClosedMark); - } - get Length() { - //TODO:这个的性能挺低的(因为还需要重新获取一遍点表(如果我们有绘制对象,应该用绘制对象的点表来计算长度)) - return this.Shape.getLength(); - } - get Points() { - return this._PointList; - } - set Points(pts) { - if (pts.length < 2) - return; - this.WriteAllObjectRecord(); - let ocsInv = this.OCSInv; - this._PointList = pts.map(p => p.clone().applyMatrix4(ocsInv)); - if (pts.length > 2 && equalv3(this._PointList[0], arrayLast(this._PointList), 1e-3)) { - this._PointList.pop(); - this._ClosedMark = true; - } - this.Update(); - } - //闭合标志 - get CloseMark() { - return this._ClosedMark; - } - //曲线是否闭合 - get IsClose() { - return this.CloseMark || (equalv3(this.StartPoint, this.EndPoint, 1e-4)) && this.EndParam > 1; - } - set CloseMark(v) { - if (this._ClosedMark === v) - return; - this.WriteAllObjectRecord(); - this._ClosedMark = v; - this.Update(); - } - get StartPoint() { - return this._PointList[0]; - } - get EndPoint() { - return arrayLast(this._PointList); - } - get StartParam() { - return 0; - } - get EndParam() { - return this._ClosedMark ? this._PointList.length : this._PointList.length - 1; - } - GetClosestPointTo(pt, extend) { - return this.Convert2Polyline().GetClosestPointTo(pt, extend); - } - GetOffsetCurves(offsetDist) { - if (offsetDist === 0) - return []; - let pld = this._PointList.map(p => { - return { pt: AsVector2(p), bul: 0 }; - }); - let pl = new exports.Polyline(pld); - let pls = pl.GetOffsetCurves(offsetDist); - return pls.map(pl => { - let pts = pl.LineData.map(p => AsVector3(p.pt)); - let spl = new Spline_1(pts); - spl.OCS = this._Matrix; - spl._ClosedMark = this._ClosedMark; - return spl; - }); - } - GetGripPoints() { - return this._PointList.map(p => p.clone().applyMatrix4(this.OCSNoClone)); - } - GetStretchPoints() { - return this.GetGripPoints(); - } - MoveGripPoints(indexList, vec) { - vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0)).setZ(0); - this.WriteAllObjectRecord(); - for (let index of indexList) - this._PointList[index].add(vec); - this.Update(); - } - MoveStretchPoints(indexList, vec) { - vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0)).setZ(0); - this.WriteAllObjectRecord(); - for (let index of indexList) - this._PointList[index].add(vec); - this.Update(); - } - GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { - switch (snapMode) { - case ObjectSnapMode.End: - return this.GetStretchPoints(); - case ObjectSnapMode.Mid: - case ObjectSnapMode.Nea: - case ObjectSnapMode.Ext: - case ObjectSnapMode.Cen: - case ObjectSnapMode.Per: - case ObjectSnapMode.Tan: - } - return []; - } - GetDrawCount() { - return this.EndParam * DrawSplitCount; - } - Convert2Polyline() { - return SplineConver2Polyline(this); - } - _ReadFile(file) { - super._ReadFile(file); - let ver = file.Read(); //1 - let count = file.Read(); - this._PointList.length = 0; - for (let i = 0; i < count; i++) - this._PointList.push(new three.Vector3().fromArray(file.Read())); - if (ver > 1) - this._ClosedMark = file.Read(); - } - WriteFile(file) { - super.WriteFile(file); - file.Write(2); //ver - file.Write(this._PointList.length); - this._PointList.forEach(p => file.Write(p.toArray())); - file.Write(this._ClosedMark); - } -}; -Spline = Spline_1 = __decorate([ - Factory -], Spline); - -/** - * 简化优化版本的曲线求交, 优化版本可以参考(算法导论33.2 确定任意一对线段是否相交 p599) - */ -class CurveIntersection { - /** - * @param {Curve[]} cus 请注意数组的顺序会被更改,如果你在意数组的顺序,请拷贝数组后传进来 - * @memberof CurveIntersection - */ - constructor(cus, parseIntersectionParam = false, intType = IntersectOption.ExtendNone, fuzz = 1e-6, parseRecord = false) { - this.fuzz = fuzz; - //用来缓存的曲线包围盒 - this.boxMap = new Map(); - /** - * 交点数据集,key 为曲线 value 为和它相交的(曲线和交点的Map) - */ - this.intersect = new Map(); - //交点参数集 - this.intersect2 = new Map(); - this.intersect3 = []; - this.GenBox(cus); - //按x排序 - this.SortCurve(cus); - let count = cus.length; - for (let i = 0; i < count; i++) { - let c1 = cus[i]; - let c1d = this.GetIntersect(c1); - let c1b = this.boxMap.get(c1); - for (let j = i + 1; j < count; j++) { - let c2 = cus[j]; - //过滤掉不需要计算的曲线 - let c2b = this.boxMap.get(c2); - if (c2b.min.x - c1b.max.x > fuzz) - break; - if (c2b.min.y - c1b.max.y > fuzz) - continue; - let ints = this.IntersectWith2(c1, c2, intType); - if (ints.length > 0) { - let pts = ints.map(i => i.pt); - c1d.set(c2, pts); - this.GetIntersect(c2).set(c1, pts); - if (parseRecord) - this.intersect3.push([c1, c2, pts]); - if (parseIntersectionParam) { - this.AppendIntersectionParams(c1, ints.map(i => [i.thisParam, i.pt])); - this.AppendIntersectionParams(c2, ints.map(i => [i.argParam, i.pt])); - } - } - } - } - } - IntersectWith2(c1, c2, intType) { - return c1.IntersectWith2(c2, intType); - } - AppendIntersectionParams(curve, params) { - let arr = this.intersect2.get(curve); - if (!arr) { - arr = []; - this.intersect2.set(curve, arr); - } - arrayPushArray$1(arr, params); - } - GenBox(cus) { - for (let c of cus) - this.boxMap.set(c, c.BoundingBox); - } - SortCurve(cus) { - cus.sort((c1, c2) => { - return this.boxMap.get(c1).min.x - this.boxMap.get(c2).min.x; - }); - } - GetIntersect(cu) { - if (this.intersect.has(cu)) - return this.intersect.get(cu); - let m = new Map(); - this.intersect.set(cu, m); - return m; - } -} -class CurveIntersection2 extends CurveIntersection { - /** - * Curve2Polyline使用这个时,为了避免多余的交点导致曲线切割过度,过滤掉无关的点 - */ - IntersectWith2(c1, c2, intType) { - let pts = c1.IntersectWith2(c2, intType); - return pts.filter(p => { - let inC1 = c1.ParamOnCurve(p.thisParam) || (p.thisParam < 0 ? c1.StartPoint.distanceTo(p.pt) < this.fuzz : c1.EndPoint.distanceTo(p.pt) < this.fuzz); - if (!inC1) - return false; - let inC2 = c2.ParamOnCurve(p.argParam) || (p.argParam < 0 ? c2.StartPoint.distanceTo(p.pt) < this.fuzz : c2.EndPoint.distanceTo(p.pt) < this.fuzz); - return inC2; - }); - } -} - -/** - * 曲线连接图 - * 所有的顶点和边的关系 - */ -class CurveMap { - constructor(numdimensions = 4, _RemoveSortLine = false, multiplier = 10 ** numdimensions) { - this.numdimensions = numdimensions; - this._RemoveSortLine = _RemoveSortLine; - this.multiplier = multiplier; - /* - 节点图. - 每个节点对应下一个路口的路线表. - 路口表使用逆时针排序,起始角度使用正x轴. - */ - this._VerticeMap = new Map(); - this._Vertices = []; - this._LookupTable = {}; - } - /** - * 得到节点图的所有站点列表 - */ - get Stands() { - return this._Vertices; - } - /** - * @param curve - * @param [isArc=curve instanceof Arc] - * @param [removeDuplicate=false] - * @returns 加入成功? - */ - AddCurveToMap(curve, isArc = curve instanceof exports.Arc, removeDuplicate = false, parseAngle = false) { - let sp = curve.StartPoint; - let ep = curve.EndPoint; - let startS = this.GetOnlyVertice(sp); - let endS = this.GetOnlyVertice(ep); - //在面域分析中,路线指向同一个顶点已经没有意义了 - if (this._RemoveSortLine && startS === endS) - return false; - if (removeDuplicate) //删除重复 - { - let index = startS.routes.findIndex(r => { - if (r.to === endS && r.curve.constructor.name === curve.constructor.name) { - if (isArc) - return equalv3(curve.GetPointAtParam(0.5), r.curve.GetPointAtParam(0.5)); - return true; - } - }); - if (index !== -1) - return false; - } - let length = curve.Length; - curve.TempData = 0; - let routeS2E = { curve, isReverse: false, length, from: startS, to: endS, s: sp, e: ep }; - let routeE2S = { curve, isReverse: true, length, from: endS, to: startS, e: sp, s: ep }; - if (!isArc && parseAngle) { - let an = angle(endS.position.clone().sub(startS.position)); - routeS2E.an = an; - routeE2S.an = clampRad(an + Math.PI); - } - startS.routes.push(routeS2E); - endS.routes.push(routeE2S); - return true; - } - /** - * 获得唯一的顶点 - */ - GetOnlyVertice(p) { - let gp = this.GenerateP(p); - if (this._VerticeMap.has(gp)) - return this._VerticeMap.get(gp); - let vertice = { position: gp, routes: [] }; - this._VerticeMap.set(p, vertice); - this._Vertices.push(vertice); - return vertice; - } - /** - * 生成一个唯一的向量. - */ - GenerateP(p) { - let key = ""; - let els = p.toArray(); - for (let n of els) { - let valueQuantized = Math.round(n * this.multiplier); - key += valueQuantized + '/'; - } - if (key in this._LookupTable) - return this._LookupTable[key]; - let hashparts = els.map((el) => { - let q0 = Math.floor(el * this.multiplier); - let q1 = q0 + 1; - return ['' + q0 + '/', '' + q1 + '/']; - }); - let numelements = els.length; - let numhashes = 1 << numelements; - for (let hashmask = 0; hashmask < numhashes; ++hashmask) { - let hashmaskShifted = hashmask; - key = ''; - for (let hashpart of hashparts) { - key += hashpart[hashmaskShifted & 1]; - hashmaskShifted >>= 1; - } - this._LookupTable[key] = p; - } - return p; - } -} - -const _overlap_ = "_overlap_"; -/** -面域分析,基于最小循环图重新实现的版本,拓展了实现求最大轮廓。 -当最大轮廓=最小轮廓时,只绘制最大轮廓(独立轮廓无分裂)。 - -算法只实现去重模式,业务场景应该没有非去重模式。 -如果需要非去重模式,那么应该获取到多个CurveMap,然后对多个CurveMap进行面域分析,得出多个重叠的面域。 - */ -class RegionParse { - /** - * @param cuList 请不要传递圆和椭圆. - * @param [numDimensions=3] 精度:小数点后个数 - * @param [removeDuplicate=true] 删除重复(现在必须是true,请不要修改它) - */ - constructor(cuList, numDimensions = 3, removeDuplicate = true) { - this.numDimensions = numDimensions; - this.removeDuplicate = removeDuplicate; - //区域列表 通常是外轮廓 - this.RegionsOutline = []; //外轮廓和内轮廓重叠时,只有外轮廓有数据,可以使用RegionParse.RegionsIsOverlap来取得 - //区域列表 通常是内轮廓 - this.RegionsInternal = []; - //碎线 曲线进入到这里会被炸开. - this.ExpLineMap = new Map(); - //需要搜索的站 - let vertices = this.GenerateVerticeMap(cuList); - //移除细丝 - while (true) { - let v = vertices.find(v => v.routes.length < 2); - if (v) - this.RemoveFilamentAt(v, vertices); - else - break; - } - let lowerVertice; - while (vertices.length > 0) { - lowerVertice = lowerVertice?.routes.length > 1 ? lowerVertice : this.FindLowerLeftStand(vertices); - let minWalk = ClosedWalkFrom(lowerVertice, this._CurveCount, WalkType.Min); - let maxWalk = ClosedWalkFrom(lowerVertice, this._CurveCount, WalkType.Max); - this.RemoveEdge(minWalk[0]); - this.RemoveFilamentAt(minWalk[0].from, vertices); - this.RemoveFilamentAt(minWalk[0].to, vertices); - minWalk = ReduceWalk(minWalk); - maxWalk = ReduceWalk(maxWalk); - if (maxWalk.length > 1) { - this.RegionsOutline.push(maxWalk); - if (minWalk.length === maxWalk.length && minWalk.every((w1, index) => w1 === maxWalk[index])) //大小重叠 - { - //直接remove,不用计算引用个数 - for (let w of minWalk) { - w.curve.TempData = 2; - this.RemoveEdge(w); - this.RemoveFilamentAt(w.from, vertices); - this.RemoveFilamentAt(w.to, vertices); - } - maxWalk[_overlap_] = true; - continue; //继续循环 - } - else - for (let w of maxWalk) - w.curve.TempData = 1; - } - if (minWalk.length > 1) // && minWalk.every(w => (w.curve.TempData) < 2) 没有重复线应该不会被用2次 - { - this.RegionsInternal.push(minWalk); - for (let w of minWalk) { - w.curve.TempData++; - if (w.curve.TempData === 2) { - this.RemoveEdge(w); - this.RemoveFilamentAt(w.from, vertices); - this.RemoveFilamentAt(w.to, vertices); - } - } - } - } - } - //大小圈重叠 - static RegionsIsOverlap(Route) { - return Boolean(Route[_overlap_]); - } - RemoveFilamentAt(v, vertices) { - let current = v; - while (current && current.routes.length < 2) { - vertices = arrayRemoveOnce(vertices, current); - let r = current.routes[0]; - if (r) { - this.RemoveEdge(r); - current = r.to; - } - else - current = undefined; - } - } - RemoveEdge(r) { - let index = r.from.routes.findIndex(rr => rr.curve === r.curve); - if (index !== -1) - r.from.routes.splice(index, 1); - index = r.to.routes.findIndex(rr => rr.curve === r.curve); - if (index !== -1) - r.to.routes.splice(index, 1); - } - /** - * 找到最下方并且最左边的站 yx - */ - FindLowerLeftStand(vertices) { - return vertices.reduce((m, v) => { - let dy = v.position.y - m.position.y; - if (dy < 0) - return v; - if (dy > 0) - return m; - return v.position.x - m.position.x < 0 ? v : m; - }); - } - /** - * 构造路线图. 每个节点对应下一个路口的路线表. 路口表使用逆时针排序,起始角度使用正x轴. - * @returns 所有的顶点 - */ - GenerateVerticeMap(curveList) { - let curveMap = new CurveMap(this.numDimensions, true); - //将多段线炸开 - let plcus = []; - arrayRemoveIf(curveList, c => { - if (c instanceof exports.Polyline) { - let cus = c.Explode(); - //如果为圆弧,提前打断 - let arcs = []; - arrayRemoveIf(cus, c => { - if (c.Length < 1e-5) - return true; - if (c instanceof exports.Arc) { - let arcBrs = this.BreakArc(c); - for (let arc of arcBrs) - arcs.push(arc); - } - return false; - }); - //加入到计算 - cus.push(...arcs); - this.ExpLineMap.set(c, cus); - plcus.push(...cus); - return true; - } - return false; - }); - curveList.push(...plcus); - this._CurveCount = curveList.length; - for (let cu of curveList) { - //由于圆弧可能导致最低点计算错误的问题. - if (cu instanceof exports.Arc) { - let arcs = this.BreakArc(cu); - if (arcs.length > 1) { - arcs.forEach(a => curveMap.AddCurveToMap(a, true, this.removeDuplicate, true)); - this.ExpLineMap.set(cu, arcs); - continue; - } - else - curveMap.AddCurveToMap(cu, true, this.removeDuplicate, true); - } - else - curveMap.AddCurveToMap(cu, false, this.removeDuplicate, true); - } - //排序,根据角度逆时针排序. - for (let v of curveMap._Vertices) { - let minLength = Infinity; - for (let r of v.routes) - if (r.length < minLength) - minLength = r.length; - for (let r of v.routes) - CalcRouteAngle(r, minLength * 0.2); - v.routes.sort((r1, r2) => r1.an - r2.an); - } - return curveMap.Stands; - } - BreakArc(arc) { - let underPt = arc.Center.add(new three.Vector3(0, -arc.Radius)); - let param = arc.GetParamAtPoint(underPt); - if (param > 1e-4 && param < 0.9999) - return arc.GetSplitCurves(param); - else - return [arc]; - } - /** - * 曲线是否已经被算法使用 - */ - GetCueveUsed(cu) { - if (this.ExpLineMap.has(cu)) { - let use = this.ExpLineMap.get(cu).some(c => c.TempData > 0); - if (!use) - this.ExpLineMap.delete(cu); - return use; - } - else - return cu.TempData > 0; - } -} -function CalcRouteAngle(r, length) { - if (r.an !== undefined) - return; - let cu = r.curve; - let p = r.isReverse ? - cu.GetPointAtParam(cu.GetParamAtDist(r.length - length)) - : cu.GetPointAtParam(cu.GetParamAtDist(length)); - r.an = angle(p.sub(r.from.position)); -} -var WalkType; -(function (WalkType) { - WalkType[WalkType["Min"] = 1] = "Min"; - WalkType[WalkType["Max"] = -1] = "Max"; -})(WalkType || (WalkType = {})); -function ClosedWalkFrom(startVertice, maxRoute, type = WalkType.Min) { - let walk = []; - let curVertice = startVertice; - let preRoute; - // console.log("start", type, startVertice.position.toArray()); - do { - let route = GetNextRoute(curVertice, preRoute, type); - if (type === WalkType.Max && route.curve.TempData > 0) - return []; - // console.log(route.to.position.toArray()); - walk.push(route); - [curVertice, preRoute] = [route.to, route]; - if (walk.length > maxRoute * 2) - throw "超过计算次数限制"; - } while (curVertice !== startVertice); - return walk; -} -/** - * 删除中途回路 - */ -function ReduceWalk(w) { - if (w.length === 0) - return w; - //未构成回路,直接回家 - if (w[0].curve === arrayLast(w).curve) - return []; - for (let i = 0; i < w.length; i++) { - let r1 = w[i]; - for (let j = w.length; j--;) { - if (i === j) - break; - let r2 = w[j]; - if (r1.to === r2.to) { - if (j > i) - w.splice(i + 1, j - i); - break; - } - } - } - return w; -} -function GetNextRoute(v, prev, type = WalkType.Min) { - if (!prev) - return arrayLast(v.routes); //顺时针 cw \|/ 从左往右 - //逆时针 ccw 往左 - let index = v.routes.findIndex(r => r.curve === prev.curve); - let newIndex = FixIndex$1(index + 1 * type, v.routes); - return v.routes[newIndex]; -} - -/** - * 某些时候我们不能创建轮廓,此时我们使用类似c2r的方法来构建一个外部轮廓. - */ -function CreateContours(curves, fuzz = 1e-4) { - let contours = []; - let extendsMinDistSq = fuzz * fuzz; - //炸开多段线(防止自交多段线) - let newCurves = []; - for (let cu of curves) { - if (cu instanceof exports.Circle) - contours.push(Contour.CreateContour(cu.Clone())); //避免将原始曲线传递给板,导致撤销这个圆失败 - else if (cu instanceof exports.Polyline) - arrayPushArray$1(newCurves, cu.Explode()); - else if (cu instanceof Spline) { - let pl = cu.Convert2Polyline(); - if (pl.IsClose) - contours.push(Contour.CreateContour(pl, false)); - else - newCurves.push(pl); - } - else if (cu instanceof Ellipse) - Contour.CreateContour(cu.Convert2Polyline(), false); - else - newCurves.push(cu); - } - let intersect = new CurveIntersection2(newCurves, false, IntersectOption.ExtendBoth, fuzz); - let curves2 = []; - //延伸+打断 - for (let [cu, pmap] of intersect.intersect) { - let sp = cu.StartPoint; - let ep = cu.EndPoint; - let epExtend; - let epDist = Infinity; - let spExtend; - let spDist = Infinity; - let isClose = cu.IsClose; - let ipts = []; - for (let [, pts] of pmap) { - arrayPushArray$1(ipts, pts); - if (!isClose) - for (let p of pts) { - let d = p.distanceToSquared(ep); - if (d < epDist) { - epDist = d; - epExtend = p; - } - d = p.distanceToSquared(sp); - if (d < spDist) { - spDist = d; - spExtend = p; - } - } - } - if (!isClose) { - //延伸 - if (epDist > 0 && epDist < extendsMinDistSq) { - let param = cu.GetParamAtPoint(epExtend); - if (param > cu.EndParam) - cu.Extend(param); - } - if (spDist > 0 && spDist < extendsMinDistSq) { - let param = cu.GetParamAtPoint(spExtend); - if (param < 0) - cu.Extend(param); - } - } - //打断 - let curves; - if (ipts.length > 0) - curves = cu.GetSplitCurvesByPts(ipts); - else - curves = [cu]; - let tempCus = []; - for (let c of curves) { - if (c instanceof exports.Polyline) - arrayPushArray$1(tempCus, c.Explode()); - else - tempCus.push(c); - } - arrayPushArray$1(curves2, tempCus); - } - let parse = new RegionParse(curves2); - for (let rs of parse.RegionsOutline) { - let curves = rs.map(r => r.curve); - let contour = Contour.CreateContour(curves, false); - if (contour) - contours.push(contour); - } - return contours; -} -function CreateContour2(curves, fuzz = 1e-4) { - return CreateContours(curves, fuzz)[0]; -} - -exports.BoolOpeartionType = void 0; -(function (BoolOpeartionType) { - BoolOpeartionType[BoolOpeartionType["Intersection"] = 0] = "Intersection"; - BoolOpeartionType[BoolOpeartionType["Union"] = 1] = "Union"; - BoolOpeartionType[BoolOpeartionType["Subtract"] = 2] = "Subtract"; -})(exports.BoolOpeartionType || (exports.BoolOpeartionType = {})); -const fuzz = 1e-3; -let fuzzV3 = new three.Vector3(fuzz, fuzz, fuzz); -//判断小曲线是不是被大曲线包含(或者重叠?) -function isTargetCurInOrOnSourceCur(bigCurve, smallCurve) { - //#fix fileid 2087494 使用二维的box来计算看起来没有问题 - if (!three.Box2.prototype.containsBox.apply(bigCurve.BoundingBox.expandByVector(fuzzV3), [smallCurve.BoundingBox])) - return false; - let cus = []; - if (smallCurve instanceof exports.Polyline) - cus = smallCurve.Explode(); - else - cus = [smallCurve]; - return cus.every(c => { - let pts = getIntPtContextPts(bigCurve, c); - if (pts.length <= 1) - pts.push(c.StartPoint, c.EndPoint); - return IsPtsAllInOrOnReg(bigCurve, pts); - }); -} -//获取交点处上下距0.01par的点 -function getIntPtContextPts(sourceCur, cu, pts = []) { - let interPts = cu.IntersectWith(sourceCur, IntersectOption.ExtendNone); - if (interPts.length > 0) { - let pars = interPts.map(pt => cu.GetParamAtPoint(pt)); - for (let par of pars) { - if (par >= 0.02) - pts.push(cu.GetPointAtParam(par - 0.01)); - if (par <= (cu.EndParam - 0.02)) - pts.push(cu.GetPointAtParam(par + 0.01)); - } - } - return pts; -} -//判断点点是否全部都在封闭区域内或者在曲线上 -function IsPtsAllInOrOnReg(sourceReg, pts) { - return pts.every(pt => { - //是否点在封闭曲线内 - return sourceReg.PtOnCurve(pt) || sourceReg.PtInCurve(pt); - }); -} -//判断点是否全部都在封闭区域外或者在曲线上 -function IsPtsAllOutOrOnReg(sourceReg, pts) { - return pts.every(pt => { - //是否点在封闭曲线内 - return sourceReg.PtOnCurve(pt) || !sourceReg.PtInCurve(pt); - }); -} - -let cache$1 = new WeakMap(); -const COMBINE_FUZZ = 1e-2; -class Contour { - SetCurve(cu) { - if (cu instanceof exports.Polyline) { - if (cu.Area2 < 0) - cu.Reverse(); - } - this._Curve = cu; - } - /**会将传入的闭合轮廓改为逆时针 */ - static CreateContour(cus, needLink = true) { - if (cus instanceof Curve) { - if (cus.IsClose) { - let c = new Contour(); - c.SetCurve(cus); - return c; - } - return; - } - let closeCurve = Contour.Combine(cus, needLink, COMBINE_FUZZ); - if (closeCurve && closeCurve.IsClose) { - if (closeCurve instanceof exports.Polyline && closeCurve.CloseMark === false) { - closeCurve.CloseMark = true; - closeCurve.RemoveVertexAt(closeCurve.NumberOfVertices - 1); - } - let c = new Contour(); - c.SetCurve(closeCurve); - return c; - } - } - get Curve() { - return this._Curve; - } - get Area() { - return this._Curve.Area; - } - get BoundingBox() { - return this._Curve.BoundingBox; - } - /** - * 不等比例缩放 - * @param {number} ref 缩放参考值,大于该值的点缩放 - * @param {number} dist 缩放距离 - * @param {string} dir x y z - */ - UnEqualProportionScale(ref, dist, dir) { - let cu = this._Curve; - if (cu instanceof exports.Polyline) { - let lineData = cu.LineData; - let length = lineData.length; - let p = cu.Position[dir]; - let moveIndexs = []; - for (let i = 0; i < length; i++) { - if (lineData[i].pt[dir] + p > ref) - moveIndexs.push(i); - } - let moveVec = new three.Vector3(); - moveVec[dir] = dist; - cu.MoveStretchPoints(moveIndexs, moveVec); - return true; - } - return false; - } - Clone() { - return Contour.CreateContour([this._Curve.Clone()]); - } - //交集:结果数组为空则失败 - IntersectionBoolOperation(target) { - if (!IntersectBox2(this.BoundingBox, target.BoundingBox)) - return []; - let resultCus = this.GetIntersetAndUnionList(target); - return Contour.GetAllContour(resultCus.intersectionList); - } - //并集:结果轮廓数组长度大于2,则失败.等于1则成功. - UnionBoolOperation(target) { - let resultCus = this.GetIntersetAndUnionList(target); - //快速 - if (resultCus.unionList.every(c => c.IsClose)) - return { - contours: Contour.GetAllContour(resultCus.unionList), - holes: [], - }; - //并集后的线段表如果有共线的直接合并起来 - let cus = []; - for (let pl of resultCus.unionList) { - if (pl instanceof exports.Polyline) - cus.push(...pl.Explode()); - else - cus.push(pl); - } - let cuGroups = curveLinkGroup(cus); - for (let g of cuGroups) { - for (let i = 0; i < g.length; i++) { - let c1 = g[i]; - let nextI = FixIndex$1(i + 1, g); - let c2 = g[nextI]; - let status = c1.Join(c2); - if (status === exports.Status.True) { - g.splice(nextI, 1); - i--; - } - else if (status === exports.Status.ConverToCircle) { - g.length = 0; - let a = c1; - g.push(new exports.Circle(a.Center, a.Radius)); - break; - } - } - } - let allContour = Contour.GetAllContour(cuGroups); - if (allContour.length < 2) { - return { - contours: allContour, - holes: [], - }; - } - else { - let cache = new WeakMap(); - for (let c of allContour) - cache.set(c, c.Area); - allContour.sort((a, b) => cache.get(b) - cache.get(a)); - return { - contours: [allContour[0]], - holes: allContour.slice(1) - }; - } - } - //差集:等于0完全被减去 - SubstactBoolOperation(target) { - let subtractList = this.GetSubtractList(target); - //纯网洞 - if (subtractList.every(c => c.IsClose)) - return Contour.GetAllContour(subtractList); - let regParse = new RegionParse(subtractList, 2); - let contours = []; - //分析封闭包围区域 - const parseRoute = (routeSet) => { - for (let routes of routeSet) { - let cs = routes.map(r => r.curve); - let c = Contour.CreateContour(cs, false); - if (c - && !equalCurve(c.Curve, this.Curve) - && !equalCurve(c.Curve, target.Curve) - && c.Area > 1e-3) - contours.push(c); - } - }; - parseRoute(regParse.RegionsOutline); - parseRoute(regParse.RegionsInternal); - return contours; - } - /** - * 计算与目标轮廓布尔运算后的结果曲线. - */ - GetIntersetAndUnionList(target) { - //同心圆 - if (this._Curve instanceof exports.Circle && target._Curve instanceof exports.Circle && equalv2(this._Curve.Center, target._Curve.Center, 1e-3)) { - if (this._Curve.Radius > target._Curve.Radius) - return { intersectionList: [target._Curve], unionList: [this._Curve] }; - else - return { intersectionList: [this._Curve], unionList: [target._Curve] }; - } - let intersectionList = []; - let unionList = []; - let sourceOutline = this._Curve; - let targetOutline = target.Curve; - let isEqualNormal = equalv3(sourceOutline.Normal, targetOutline.Normal, 1e-3); - //可能会有提升,但是好像不大(并且还有更慢的趋势) - // if (!sourceOutline.BoundingBox.intersectsBox(targetOutline.BoundingBox, 1e-3)) - // return { intersectionList, unionList }; - let interPts = sourceOutline.IntersectWith2(targetOutline, IntersectOption.ExtendNone, COMBINE_FUZZ); - let sourceContainerTarget; - let targetContainerSource; - if (sourceOutline.Area > targetOutline.Area) { - sourceContainerTarget = CurveContainerCurve(sourceOutline, targetOutline, interPts); - targetContainerSource = false; - } - else { - sourceContainerTarget = false; - targetContainerSource = CurveContainerCurve(targetOutline, sourceOutline, interPts); - } - //包含.相交.分离(三种状态) - if (sourceContainerTarget) //源包含目标 - { - intersectionList.push(targetOutline); - unionList.push(sourceOutline); - } - else if (targetContainerSource) //目标包含源 - { - unionList.push(targetOutline); - intersectionList.push(sourceOutline); - } - else if (interPts.length <= 1) //分离 - { - unionList.push(sourceOutline, targetOutline); - } - else //相交 interPts.length > 0 - { - let pars1 = interPts.map(r => r.thisParam); - let pars2 = interPts.map(r => r.argParam); - let sourceCus = sourceOutline.GetSplitCurves(pars1); - let targetCus = targetOutline.GetSplitCurves(pars2); - for (let pl of sourceCus) { - let hasEqualCus = false; - for (let i = 0; i < targetCus.length; i++) { - let cu = targetCus[i]; - hasEqualCus = fastEqualCurve(cu, pl, COMBINE_FUZZ); - if (hasEqualCus) { - //方向相同 - if (equalv3(cu.GetFirstDeriv(cu.MidParam).normalize(), pl.GetFirstDeriv(pl.MidParam).normalize(), 1e-2) - === isEqualNormal) { - unionList.push(pl); - intersectionList.push(pl); - } - targetCus.splice(i, 1); - break; - } - } - if (hasEqualCus) - continue; - if (fastCurveInCurve(targetOutline, pl)) - intersectionList.push(pl); - else - unionList.push(pl); - } - for (let pl of targetCus) { - if (fastCurveInCurve(sourceOutline, pl)) - intersectionList.push(pl); - else - unionList.push(pl); - } - //特殊的分离 - if (intersectionList.length === 0 && unionList.length === (sourceCus.length + targetCus.length)) { - return { intersectionList, unionList: [sourceOutline, targetOutline] }; - } - } - return { intersectionList, unionList }; - } - GetSubtractList(target) { - let sourceOutline = this._Curve; - let targetOutline = target.Curve; - let isEqualNormal = equalv3(sourceOutline.Normal, targetOutline.Normal, 1e-3); - let interPts = sourceOutline.IntersectWith2(targetOutline, IntersectOption.ExtendNone, COMBINE_FUZZ); - if (interPts.length <= 1) { - let areaState = sourceOutline.Area > targetOutline.Area; - //反包含 - if ((!areaState && fastCurveInCurve2(targetOutline, sourceOutline, interPts[0]?.pt)) || equalCurve(targetOutline, sourceOutline)) - return []; - //包含 - if ((areaState && fastCurveInCurve2(sourceOutline, targetOutline, interPts[0]?.pt))) - return [sourceOutline, targetOutline]; - else //分离 - return [sourceOutline]; - } - //相交 - let subtractList = []; - let sourceCus = sourceOutline.GetSplitCurves(interPts.map(r => r.thisParam)); - let targetCus = targetOutline.GetSplitCurves(interPts.map(r => r.argParam)); - for (let pl of sourceCus) { - let plMidParam = pl.MidParam; - let plDir = pl.GetFirstDeriv(plMidParam).normalize(); - let index = targetCus.findIndex(cu => fastEqualCurve(cu, pl)); - if (index !== -1) { - let cu = targetCus[index]; - let cuMidParam = cu.MidParam; - let cuDir = cu.GetFirstDeriv(cuMidParam).normalize(); - if (isEqualNormal === !equalv3(cuDir, plDir, 1e-3)) //不同向 - subtractList.push(pl); - targetCus.splice(index, 1); - continue; - } - if (!fastCurveInCurve(targetOutline, pl)) - subtractList.push(pl); - } - //源对象没有被破坏 - let sourceNotBreak = subtractList.length === sourceCus.length; - for (let pl of targetCus) - if (fastCurveInCurve(sourceOutline, pl)) - subtractList.push(pl); - if (sourceNotBreak && subtractList.length === sourceCus.length) - return [sourceOutline]; - return subtractList; - } - GetSubtractListByMoreTargets(targets) { - let { holes, subtractList } = this.GetSubListWithCus(targets); - //纯网洞 - if (subtractList.every(c => c.IsClose)) - return { - holes: holes.map(h => Contour.CreateContour(h)), - outlines: Contour.GetAllContour(subtractList) - }; - let regParse = new RegionParse(subtractList, 2); - let contours = []; - //分析封闭包围区域 - const parseRoute = (routeSet) => { - for (let routes of routeSet) { - let cs = routes.map(r => r.curve); - let c = Contour.CreateContour(cs, false) ?? CreateContour2(cs); - if (c - && !equalCurve(c.Curve, this.Curve) - && targets.every(target => !equalCurve(c.Curve, target.Curve)) - && c.Area > 1e-3) - contours.push(c); - } - }; - parseRoute(regParse.RegionsOutline); - parseRoute(regParse.RegionsInternal); - return { - holes: holes.map(h => Contour.CreateContour(h)), - outlines: contours - }; - } - GetSubListWithCus(targets) { - let sourceOutline = this._Curve; - let subtractList = []; - let holes = []; - let intPars = []; - let curveIntParamsMap = new Map(); - let outBox = sourceOutline.BoundingBox; - for (let con of targets) { - const targetOutline = con.Curve; - if (!IntersectBox2(outBox, targetOutline.BoundingBox)) - continue; - let pts = sourceOutline.IntersectWith2(con.Curve, IntersectOption.ExtendNone, COMBINE_FUZZ); - if (pts.length <= 1) { - let areaState = sourceOutline.Area > targetOutline.Area; - //反包含 - if ((!areaState && fastCurveInCurve2(targetOutline, sourceOutline, pts[0]?.pt)) || equalCurve(targetOutline, sourceOutline)) - return { holes, subtractList }; - //包含 - if (areaState && fastCurveInCurve2(sourceOutline, targetOutline, pts[0]?.pt)) - holes.push(targetOutline); - } - else { - intPars.push(...pts.map(r => r.thisParam)); - curveIntParamsMap.set(targetOutline, pts.map(r => r.argParam)); - } - } - let sourceSplitCurves = sourceOutline.GetSplitCurves(intPars); - let targetSplitCurves = []; - let targetSplitCurve_CurvesMap = new WeakMap(); //分裂后->原始曲线 映射 - for (let [curve, intParams] of curveIntParamsMap) { - let splitCurves = curve.GetSplitCurves(intParams); - for (let splitCurve of splitCurves) { - targetSplitCurve_CurvesMap.set(splitCurve, curve); - targetSplitCurves.push(splitCurve); - } - } - for (let sourceSplitcu of sourceSplitCurves) { - let index = targetSplitCurves.findIndex(cu => fastEqualCurve(cu, sourceSplitcu, 0.05)); - if (index !== -1) { - let targetSplitcu = targetSplitCurves[index]; - let isEqualNormal = equalv3(sourceOutline.Normal, targetSplitCurve_CurvesMap.get(targetSplitcu).Normal, 1e-3); - if (isEqualNormal === !equalv3(sourceSplitcu.StartPoint, targetSplitcu.StartPoint, 0.05)) //不同向 - { - subtractList.push(sourceSplitcu); - // TestDraw(sourceSplitcu.Clone(), 1); - // TestDraw(targetSplitcu.Clone(), 1); - } - // else - // TestDraw(sourceSplitcu.Clone(), 2); - targetSplitCurves.splice(index, 1); - continue; - } - if (targets.every(t => !fastCurveInCurve(t.Curve, sourceSplitcu))) - subtractList.push(sourceSplitcu); - } - //源对象没有被破坏 - let sourceNotBreak = subtractList.length === sourceSplitCurves.length; - for (let pl of targetSplitCurves) - if (fastCurveInCurve(sourceOutline, pl)) - subtractList.push(pl); - if (sourceNotBreak && subtractList.length === sourceSplitCurves.length) - return { subtractList: [sourceOutline], holes }; - return { subtractList, holes }; - } - /** - * 获得全部闭合曲线 - * @若传入二维曲线数据,将默认子数组为闭合曲线段 - */ - static GetAllContour(cus) { - if (cus.length === 0) - return []; - let cuGroups; - if (Array.isArray(cus[0])) - cuGroups = cus; - else - cuGroups = curveLinkGroup(cus, -Math.log10(COMBINE_FUZZ)); - let contours = []; - for (let g of cuGroups) - contours.push(Contour.CreateContour(g, false)); - return contours.filter(c => c !== undefined && !equaln$1(c.Area, 0, 1e-6)); - } - /** - * 合并曲线组成为多段线 - * @param cus 曲线组 - * @param [needLink=true] 需要解析成首尾连接状态 - * @returns 单一曲线,如果返回超过1个,其他的将被遗弃. - */ - static Combine(cus, needLink = true, tolerance = 1e-3) { - if (cus.length === 0) - return undefined; - let groups = needLink ? curveLinkGroup(cus, -Math.log10(tolerance)) : [cus]; - for (let g of groups) { - if (g.length === 1) - return g[0].Clone(); - else { - if (cache$1.has(g)) - return cache$1.get(g); - let gclone = g.map(c => c.Clone()); - arrayRemoveDuplicateBySort(gclone, (cu1, cu2) => cu1.Join(cu2, false, tolerance) === exports.Status.True); - if (gclone.length > 1 && gclone[0].Join(arrayLast(gclone), false, tolerance)) - gclone.pop(); - let pl = exports.Polyline.Combine(gclone, tolerance); - cache$1.set(g, pl); - return pl; - } - } - } - get Shape() { - return this._Curve.Shape; - } - /** - * 判断是否完全包含曲线 - * @param smallCurve 传入的这个曲线不能比本轮廓还大(这个需要自己优化?) - * @returns - */ - ContainerCurve(smallCurve, isAreaCheckd = false, ipts = undefined) { - if (!isAreaCheckd && this.Area < smallCurve.Area) - return false; - return CurveContainerCurve(this._Curve, smallCurve, ipts); - } - Equal(tar) { - return equalCurve(this._Curve, tar._Curve); - } -} -/** - * 对于轮廓切割后的曲线判断相同,使用这个函数进行快速判断 - */ -function fastEqualCurve(c1, c2, tolerance = 5e-3) { - let sp1 = c1.StartPoint; - let ep1 = c1.EndPoint; - let sp2 = c2.StartPoint; - let ep2 = c2.EndPoint; - if (!((equalv3(sp1, sp2, tolerance) && equalv3(ep1, ep2, tolerance)) - || (equalv3(sp1, ep2, tolerance) && equalv3(ep1, sp2, tolerance)))) - return false; - return equalv3(c1.Midpoint, c2.Midpoint, tolerance); -} -/** - * 对于双多段线互相切割后的结果(或者交点个数为0),快速判断曲线是否在另一条曲线内部 - * @param bigCurve - * @param smallCurve - * @returns - */ -function fastCurveInCurve(bigCurve, smallCurve) { - return bigCurve.PtInCurve(smallCurve.Midpoint); -} -//当交点小于等于1时 -function fastCurveInCurve2(bigCurve, smallCurve, iPt) { - if (iPt) //提高准确性,避免使用交点去判断 导致的错误 - { - let sp = smallCurve.StartPoint; - if (equalv3(sp, iPt, 1e-3)) - return bigCurve.PtInCurve(smallCurve.Midpoint); - else - return bigCurve.PtInCurve(smallCurve.StartPoint); - } - else - return bigCurve.PtInCurve(smallCurve.Midpoint) || bigCurve.PtInCurve(smallCurve.StartPoint); -} -//大曲线是否完全包含小曲线(或者重合) -function CurveContainerCurve(bigCurve, smallCurve, ipts = undefined, fuzz = COMBINE_FUZZ) { - if (!ipts) - ipts = bigCurve.IntersectWith2(smallCurve, IntersectOption.ExtendNone, fuzz); - if (ipts.length === 0) - return fastCurveInCurve(bigCurve, smallCurve); - else if (ipts.length === 1) - return fastCurveInCurve2(bigCurve, smallCurve, ipts[0].pt); - else - return isTargetCurInOrOnSourceCur(bigCurve, smallCurve); -} - -class CurveTreeNode { - Create(curve, box) { return new this.constructor(curve, box); } - constructor(curve, box) { - this.curve = curve; - this.box = box || curve.BoundingBox; - } - TrimBy(contour, box) { - if (IntersectsBox(box, this.box)) { - if (this.children !== undefined) { - for (let c of this.children) - c.TrimBy(contour, box); - } - else { - if (contour.Curve instanceof exports.Circle && this.curve instanceof exports.Arc) { - if (equalv3(contour.Curve.Center, this.curve.Center)) { - if (contour.Curve.Radius > this.curve.Radius + 1e-4) - this.children = []; - return; - } - } - //交点参数列表 - let iParams = this.curve.IntersectWith2(contour.Curve, IntersectOption.ExtendNone) - .map(p => p.thisParam); - //#region 交点参数优化,避免出现无意义长度的曲线被移除 CurveIsFine - let length = this.curve.Length; - if (!(this.curve instanceof exports.Circle)) - iParams.push(0, 1); - iParams.sort((e1, e2) => e1 - e2); - if (this.curve instanceof exports.Arc || this.curve instanceof exports.Circle) { - let allAngle = this.curve instanceof exports.Circle ? Math.PI * 2 : this.curve.AllAngle; - arrayRemoveDuplicateBySort(iParams, (p1, p2) => { - return allAngle * (p2 - p1) < ARC_MIN_ALLANGLE || length * (p2 - p1) < CURVE_MIN_LENGTH; - }); - } - else { - arrayRemoveDuplicateBySort(iParams, (p1, p2) => { - return length * (p2 - p1) < CURVE_MIN_LENGTH; - }); - } - if (!(this.curve instanceof exports.Circle)) { - iParams.shift(); //remove 0 - iParams.pop(); //remove 1 or 0.9999 - } - //#endregion - let cus = this.curve.GetSplitCurves(iParams); - if (cus.length === 0) { - let p = this.curve.GetPointAtParam(0.5); - if (box.containsPoint(p) && (contour.Curve.PtInCurve(p) && !contour.Curve.PtOnCurve(p))) - this.children = []; - } - else { - this.children = []; - for (let c of cus) { - let p = c.GetPointAtParam(0.5); - if (CurveIsFine(c) && (!(box.containsPoint(p) && contour.Curve.PtInCurve(p)) || contour.Curve.PtOnCurve(p))) - this.children.push(this.Create(c)); - } - if (this.children.length === cus.length) - this.children = undefined; - } - } - } - } - get Nodes() { - if (!this.children) - return [this]; - else { - let cus = []; - for (let c of this.children) - cus.push(...c.Nodes); - return cus; - } - } -} -var PolylineJoinType; -(function (PolylineJoinType) { - PolylineJoinType[PolylineJoinType["Square"] = 0] = "Square"; - PolylineJoinType[PolylineJoinType["Round"] = 1] = "Round"; -})(PolylineJoinType || (PolylineJoinType = {})); -class OffsetPolyline { - /** - * - * @param _Polyline - * @param _OffsetDist - * @param [_ToolPath=false] 走刀模式(在这个模式下,我们会进行圆弧过渡(或者直线过渡)避免尖角过大) - * @param [_OffsetDistSq=(_OffsetDist ** 2) * 2.1] 允许的最大尖角长度 默认值差不多是矩形的尖角大一点 - * @param [_JoinType=PolylineJoinType.Round] 尖角的处理方式,默认是圆弧过渡,可以切换成直线过渡 - */ - constructor(_Polyline, _OffsetDist, _ToolPath = false, _OffsetDistSq = (_OffsetDist ** 2) * 2.1, //对直角走刀不进行圆弧过度 - _JoinType = PolylineJoinType.Round //仅在走刀路径时生效 - ) { - this._Polyline = _Polyline; - this._OffsetDist = _OffsetDist; - this._ToolPath = _ToolPath; - this._OffsetDistSq = _OffsetDistSq; - this._JoinType = _JoinType; - this._IsTopoOffset = false; //局部偏移,允许特殊延伸,参考测试用例 - } - Do() { - this._OffsetDistSign = Math.sign(this._OffsetDist); - this._TrimPolylineContours = []; - this._TrimCircleContours = []; - this._TrimArcContours = []; - this._RetCurves = []; - this._CurveTreeNodes = []; - this.InitSubCurves(); - if (this._SubCurves.length === 0) - return this._RetCurves; - this.GeneralCirclesAndVertexs(); - this.OffsetSubCurves(); - this.LinkSubCurves(); - if (this._SubOffsetedCurves.length === 0) { - this._SubOffsetedCurves.push({ curve: this._Circles[0], index: 0, paddingCurve: this._Circles.slice(1) }); - this._TrimPolylineContours.push(...this._Circles.map(c => Contour.CreateContour(c, false)), ...this._SubCurves.map(c => Contour.CreateContour([c, new exports.Line(c.StartPoint, c.EndPoint)], false))); - } - else - this.GeneralTrimContours(); - // for (let c of this._SubOffsetedCurves) - // { - // TestDraw(c.curve.Clone(), 1); - // if (c.paddingCurve) - // for (let cc of c.paddingCurve) - // TestDraw(cc.Clone(), 2); - // } - // for (let c of this._TrimPolylineContours) - // { - // TestDraw(c.Curve.Clone(), 3); - // } - this.TrimByContours(); - this.FilterInvalidCurve(); - this.JoinCollinear(); - this.LinkResultPolyline(); - this.RepairResultPolylineClosemark(); - return this._RetCurves; - } - InitSubCurves() { - this._CacheOCS = this._Polyline.OCS; - this._IsClose = this._Polyline.IsClose; - this._Polyline.OCS = IdentityMtx4; - this._SubCurves = this._Polyline.Explode().filter(c => c.Length > 1e-4); //TODO: 简化这个 并且生成圆 顶点 圆 - this._Polyline.OCS = this._CacheOCS; - return this; - } - GeneralCirclesAndVertexs() { - this._Vertexs = this._SubCurves.map(c => c.StartPoint); - let lastCu = arrayLast(this._SubCurves); - if (!equalv3(lastCu.EndPoint, this._Vertexs[0], 1e-3)) - this._Vertexs.push(lastCu.EndPoint); - let radius = Math.abs(this._OffsetDist); - this._Circles = this._Vertexs.map(p => new exports.Circle(p, radius)); - } - OffsetSubCurves() { - this._SubOffsetedCurves = []; - for (let index = 0; index < this._SubCurves.length; index++) { - let curveOld = this._SubCurves[index]; - if (curveOld.Length > 1e-6) { - let curve = curveOld.GetOffsetCurves(this._OffsetDist)[0]; - if (curve) - this._SubOffsetedCurves.push({ curve, index }); - else - this._TrimArcContours.push(Contour.CreateContour([curveOld, new exports.Line(curveOld.StartPoint, curveOld.EndPoint)], false)); - } - } - } - //连接(延伸)曲线,或者补(圆弧,直线) - LinkSubCurves() { - let count = this._SubOffsetedCurves.length; - if (!this._IsClose) - count--; - for (let i = 0; i < count; i++) { - let curveResNow = this._SubOffsetedCurves[i]; - let iNext = FixIndex$1(i + 1, this._SubOffsetedCurves); - let curveResNext = this._SubOffsetedCurves[iNext]; - let curveNow = curveResNow.curve; - let curveNext = curveResNext.curve; - let isNeighbor = FixIndex$1(curveResNow.index + 1, this._SubCurves) === curveResNext.index; - if (isNeighbor) { - let sp = curveNow.EndPoint; - let ep = curveNext.StartPoint; - //直连 - if (equalv3(sp, ep, 1e-3)) - continue; - let iPtsP = curveNow.IntersectWith2(curveNext, IntersectOption.ExtendBoth, 1e-6); - let iPts = iPtsP.map(p => p.pt); - let tPts = iPtsP.filter(p => curveNow.ParamOnCurve(p.thisParam) && curveNext.ParamOnCurve(p.argParam)).map(p => p.pt); - let code = EntityEncode2(curveNow, curveNext); - let tp; - if (code === 1) { - if (this._IsTopoOffset && tPts.length === 0 && curveResNow.dist !== curveResNext.dist) - tPts = iPts; - if (tPts.length > 0) //不走刀或者有真交点 this._ToolPath === false || - tp = iPts[0]; - else { - if (iPts.length > 0 && iPtsP[0].thisParam > 1) { - let refP = this._Vertexs[curveResNext.index]; - let distSq = iPts[0].distanceToSquared(refP); - if (this._ToolPath && distSq > this._OffsetDistSq) { - if (this._JoinType === PolylineJoinType.Round) - curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)]; - else - curveResNow.paddingCurve = [this.CreateSquare(refP, curveResNow, curveResNext, code)]; //补直线 - this._TrimCircleContours.push(this._Circles[curveResNext.index]); - } - else - tp = iPts[0]; - } - // else - // curveResNow.paddingCurve = [new Line(sp, ep)]; - } - } - else //直线和圆弧 圆弧和圆弧 - { - let refP = this._Vertexs[curveResNext.index]; - //在局部偏移中,当偏移距离不一致时,我们总是倾向于直接连接 - if (this._IsTopoOffset && tPts.length === 0 && curveResNow.dist !== curveResNext.dist) { - if (iPts.length) - tPts = iPts; - else { - curveResNow.paddingCurve = [new exports.Line(sp, ep)]; //补直线 - continue; - } - } - if (tPts.length > 0) //ipts = 1 or ipts = 2 - tp = SelectNearP(tPts, refP); - else //补圆弧 或者尝试连接 - { - if (iPts.length > 0 && !this._ToolPath && this.IsSharpCorner(curveResNow, curveResNext)) //非加工刀路 并且尖角化(谷)时 - { - //设置新的连接点,并且备份旧点 - let oldp; - if (curveResNow.sp) { - oldp = curveNow.StartPoint; - curveNow.StartPoint = curveResNow.sp; - } - let oldp2; - if (curveResNext.ep) { - oldp2 = curveNext.EndPoint; - curveNext.EndPoint = curveResNext.ep; - } - let p; - if (code === 2 && iPts.length === 2) { - let c = curveNow; - let minArc = new exports.Arc(c.Center, c.Radius, c.EndAngle, 0, c.IsClockWise); - let p1 = iPts[0]; - let a1 = minArc.GetAngleAtPoint(p1); - let anAll1 = c.ParamOnCurve(c.GetParamAtAngle(a1)) ? Infinity : minArc.ComputeAnlge(a1); - let p2 = iPts[1]; - let a2 = minArc.GetAngleAtPoint(p2); - let anAll2 = c.ParamOnCurve(c.GetParamAtAngle(a2)) ? Infinity : minArc.ComputeAnlge(a2); - if (anAll2 < anAll1) - p = p2; - else - p = p1; - } - else - p = SelectNearP(iPts, refP); - let onPre; - let param = curveNow.GetParamAtPoint2(p); - if (curveNow instanceof exports.Line) - onPre = param > 1; - else - onPre = param < 0 || param > 1; - let onNext = false; - if (onPre) { - let param2 = curveNext.GetParamAtPoint2(p); - if (curveNext instanceof exports.Line) - onNext = param2 < 0; - else - onNext = param2 < 0 || param2 > 1; - } - if (curveResNow.sp) - curveNow.StartPoint = oldp; - if (curveResNext.ep) - curveNext.EndPoint = oldp2; - if (onPre && onNext) - tp = p; - else - curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)]; //补圆弧 - } - else { - if (this._JoinType === PolylineJoinType.Round) - curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)]; //补圆弧 - else { - curveResNow.paddingCurve = [this.CreateSquare(refP, curveResNow, curveResNext, code)]; //补直线 - } - } - let circle = this._Circles[curveResNext.index]; - if (circle) - this._TrimCircleContours.push(circle); //因为局部偏移可能未提供圆 - } - } - if (tp) { - curveResNow.ep = tp; - curveResNext.sp = tp; - curveResNow.nextCurve = curveNext; - curveResNext.preCurve = curveNow; - } - } - else { - let padCirs = []; - for (let s = FixIndex$1(curveResNow.index + 1, this._Circles);; s = FixIndex$1(s + 1, this._Circles)) { - let circle = this._Circles[s]; - if (circle) //因为局部偏移可能未提供圆 - { - this._TrimCircleContours.push(circle); - padCirs.push(circle); - } - if (s === curveResNext.index) - break; - } - curveResNow.paddingCurve = padCirs; - } - } - } - /** - * 判断两曲线是否尖角化 - * 在 - * 1.直线和圆弧,圆弧和圆弧 - * 2.有交点,无真交点时 - * 必须在正确的方向做出延伸动作,所以必须在尖角的情况下延伸,偏移的结果就像一个谷字去掉一个口的结果,上面的人就是偏移后的结果. - * 如果是谷,则允许连接 #I7WKKG - */ - IsSharpCorner(curveResNow, curveResNext) { - let v1 = this._SubCurves[curveResNow.index].GetFirstDeriv(1); - let v2 = this._SubCurves[curveResNext.index].GetFirstDeriv(0); - v1.cross(v2); - return Math.sign(v1.z) === this._OffsetDistSign; - } - GeneralTrimContours() { - for (let d of this._SubOffsetedCurves) { - let cu2 = d.curve; - if (d.sp && d.ep) { - let param1 = cu2.GetParamAtPoint(d.sp); - let param2 = cu2.GetParamAtPoint(d.ep); - if (cu2.ParamOnCurve(param1) && cu2.ParamOnCurve(param2) && param1 > param2) - [d.sp, d.ep] = [d.ep, d.sp]; - } - if (d.sp) - cu2.StartPoint = d.sp; - if (d.ep) - cu2.EndPoint = d.ep; - //这是极端情况,圆弧被压缩成0长度圆弧,本质是空圆弧(我们会在下面判断它)(因为精度的问题) - //因为精度的问题,这种0圆心角的圆弧会被当成全圆,但是偏移算法中,应该不可能出现全圆弧的圆弧,所以我们压扁它 - if (cu2 instanceof exports.Arc - && equaln$1(cu2.StartAngle, cu2.EndAngle, 1e-6) - // && !equaln((this._SubCurves[d.index]).AllAngle, Math.PI * 2, 1e-3) 应该不会出现 - ) { - if (cu2.IsClockWise) - cu2.StartAngle = cu2.EndAngle + 1e-6; - else - cu2.EndAngle = cu2.StartAngle + 1e-6; - } - } - for (let d of this._SubOffsetedCurves) { - let cu1 = this._SubCurves[d.index]; - let cu2 = d.curve; - let [p1, p2, p3, p4] = [cu1.StartPoint, cu2.StartPoint, cu1.EndPoint, cu2.EndPoint]; - let l1 = new exports.Line(p1, p2); - let l2 = new exports.Line(p3, p4); - let ipts = l1.IntersectWith(l2, IntersectOption.ExtendNone, 1e-8); - if (ipts.length > 0) { - let p = ipts[0]; - l1.EndPoint = p; - l2.EndPoint = p; - let cus = [cu1, l1, l2]; - let contour = Contour.CreateContour(cus, false); - if (contour) { - this._TrimPolylineContours.push(contour); - continue; - } - else { - console.error("未预料到的错误,构建轮廓失败" + this._OffsetDist); - } - } - //真理1:针脚线不可能同时被两个圆弧所切割 - let l1Intact = true; - let l2Intact = true; - if (cu2 instanceof exports.Arc) { - if (Math.sign(cu2.Bul) !== this._OffsetDistSign) { - let ipts1 = cu2.IntersectWith(l1, IntersectOption.ExtendNone); - let ipts2 = cu2.IntersectWith(l2, IntersectOption.ExtendNone); - let sp; - let ep; - if (ipts1.length === 2) - sp = SelectNearP(ipts1, p1); - if (ipts2.length === 2) - ep = SelectNearP(ipts2, p3); - if (sp || ep) - cu2 = cu2.Clone(); - if (sp) { - l1.EndPoint = sp; - cu2.StartPoint = sp; - l1Intact = false; - } - if (ep) { - l2.EndPoint = ep; - cu2.EndPoint = ep; - l2Intact = false; - } - } - } - let l1PadArc; - let l2PadArc; - //真理2:隔壁的圆弧不可能破坏当前的圆弧,只能破坏当前的针脚 - if (l1Intact && d.preCurve && d.preCurve instanceof exports.Arc) { - let a = d.preCurve; - if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6) { - let ipts = a.IntersectWith(l1, IntersectOption.ExtendNone); - if (ipts.length === 2) { - let sp = SelectNearP(ipts, p1); - l1.EndPoint = sp; - l1PadArc = a.Clone(); - l1PadArc.StartPoint = sp; - } - } - } - if (l2Intact && d.nextCurve && d.nextCurve instanceof exports.Arc) { - let a = d.nextCurve; - if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6) { - let ipts = a.IntersectWith(l2, IntersectOption.ExtendNone); - if (ipts.length === 2) { - let ep = SelectNearP(ipts, p3); - l2.EndPoint = ep; - l2PadArc = a.Clone(); - l2PadArc.EndPoint = ep; - } - } - } - let pl = new exports.Polyline(); - let cus = [cu1, l1]; - if (l1PadArc) - cus.push(l1PadArc); - cus.push(cu2, l2); - if (l2PadArc) - cus.push(l2PadArc); - for (let c of cus) - pl.Join(c); - let contour = Contour.CreateContour(pl, false); - if (contour) - this._TrimPolylineContours.push(contour); - else - console.error("未预料到的错误,构建轮廓失败" + this._OffsetDist); - } - if (!this._IsClose) { - if (this._TrimCircleContours[0] !== this._Circles[0]) - this._TrimCircleContours.push(this._Circles[0]); - let lastTrimCircle = arrayLast(this._TrimCircleContours); - let lastCircle = arrayLast(this._Circles); - if (lastTrimCircle !== lastCircle) - this._TrimCircleContours.push(lastCircle); - if (this._SubOffsetedCurves[0].index !== 0) - this._TrimCircleContours.push(this._Circles[this._SubOffsetedCurves[0].index]); - let lastIndex = this._Circles.length - 1; - let lastD = arrayLast(this._SubOffsetedCurves); - if (lastIndex !== lastD.index) - this._TrimCircleContours.push(this._Circles[lastD.index + 1]); - } - this._TrimPolylineContours.push(...this._TrimCircleContours.map(c => Contour.CreateContour(c, false)), ...this._TrimArcContours); - } - // 通过构建的轮廓对偏移曲线进行裁剪 - TrimByContours() { - for (let d of this._SubOffsetedCurves) { - let c = d.curve; - if (CurveIsFine(c)) - this._CurveTreeNodes.push(new CurveTreeNode(c)); - if (d.paddingCurve) - this._CurveTreeNodes.push(...d.paddingCurve.map(c => new CurveTreeNode(c))); - } - for (let i = 0; i < this._TrimPolylineContours.length; i++) { - let c = this._TrimPolylineContours[i]; - let cbox = c.BoundingBox; - for (let curveNode of this._CurveTreeNodes) - curveNode.TrimBy(c, cbox); - } - } - //过滤方向相反和0长度线 - FilterInvalidCurve() { - this._CurveTrimedTreeNodes = []; - for (let n of this._CurveTreeNodes) { - let ns = n.Nodes; - for (let sn of ns) { - if (this.CheckPointDir(sn.curve.GetPointAtParam(0.5))) - this._CurveTrimedTreeNodes.push(sn); - } - } - } - //合并共线 - JoinCollinear() { - for (let i = 0; i < this._CurveTrimedTreeNodes.length; i++) { - let n = this._CurveTrimedTreeNodes[i]; - if (n.used) - continue; - let sp = n.curve.StartPoint; - for (let j = i + 1; j < this._CurveTrimedTreeNodes.length; j++) { - let n2 = this._CurveTrimedTreeNodes[j]; - if (n2.used) - continue; - let status = n.curve.Join(n2.curve); - if (status === exports.Status.ConverToCircle) { - n.used = true; - n2.used = true; - let circle = new exports.Circle(n.curve.Center, n.curve.Radius); - n.curve = circle; - this._RetCurves.push(ConverCircleToPolyline$1(circle).ApplyMatrix(this._CacheOCS)); - } - else if (status === exports.Status.True) { - if (equalv3(sp, n.curve.StartPoint)) - n2.used = true; - else { - n.used = true; - n2.curve = n.curve; - break; - } - } - } - } - } - //连接结果曲线,返回最终多段线 - LinkResultPolyline() { - let used = new Set(); - let cuMap = new CurveMap(1); - for (let n of this._CurveTrimedTreeNodes) { - if (!n.used) - cuMap.AddCurveToMap(n.curve); - } - let preP; - let searchNext = (s, pl, isJoinEnd = true) => { - let minDist = Infinity; - let minR; - for (let r of s.routes) { - if (used.has(r.curve)) - continue; - if (preP) { - let d = r.s.distanceToSquared(preP); - if (d < minDist) { - minR = r; - minDist = d; - } - } - else { - minR = r; - minDist = 0; - break; - } - } - if (minR && Math.sqrt(minDist) < 0.085) { - used.add(minR.curve); - preP = minR.e; - // let status = pl.Join(minR.curve, false, 8e-2); - // if (status !== Status.True) - // console.warn("连接失败"); - //#region fast join (为了避免Polyline.Join 导致的顺序错误) - let cu = minR.curve; - //bul - let bul = 0; - if (cu instanceof exports.Arc) { - bul = cu.Bul; - if (minR.isReverse) - bul *= -1; - if (!isJoinEnd) - bul *= -1; - } - if (pl.LineData.length === 0) { - pl.LineData.push({ - pt: AsVector2(minR.s), - bul: bul - }); - } - if (isJoinEnd) { - pl.LineData[pl.LineData.length - 1].bul = bul; - pl.LineData.push({ - pt: AsVector2(minR.e), - bul: 0 - }); - } - else { - pl.LineData.unshift({ - pt: AsVector2(minR.e), - bul - }); - } - //#endregion - return minR.to; - } - }; - for (let s of cuMap.Stands) { - preP = undefined; - let pl = new exports.Polyline(); - let ss = s; - while (ss && !pl.IsClose) - ss = searchNext(ss, pl, true); - ss = s; - preP = pl.StartPoint; - while (ss && !pl.IsClose) - ss = searchNext(ss, pl, false); - if (pl.NumberOfVertices > 1) { - //避免0长度的线 - if (pl.NumberOfVertices === 2 && pl.Length < 1e-6) - continue; - let d = pl.LineData; - let ld = arrayLast(d); - if (equalv2(d[0].pt, ld.pt, 1e-2)) - ld.pt.copy(d[0].pt); - this._RetCurves.push(pl.ApplyMatrix(this._CacheOCS)); - } - } - } - RepairResultPolylineClosemark() { - if (!this._RetCurves.length) - return; - if (this._Polyline.CloseMark) { - if (!equalv2(this._Polyline.LineData[0].pt, arrayLast(this._Polyline.LineData).pt, 8e-2)) //缺省一个点 - { - for (let pl of this._RetCurves) { - if (pl.IsClose && //封闭 - equaln$1(arrayLast(pl.LineData).bul, 0, 1e-5) && //是直线 - equalv2(pl.LineData[0].pt, arrayLast(pl.LineData).pt, 8e-2)) //首尾重复(一般已经是了) - { - pl.LineData.pop(); //移除最后一点 - pl.CloseMark = true; - } - } - } - else { - for (let pl of this._RetCurves) { - if (pl.IsClose) - pl.CloseMark = true; - } - } - } - else if (this._IsClose) { - for (let pl of this._RetCurves) { - let firstP = pl.LineData[0].pt; - let lastP = arrayLast(pl.LineData).pt; - if (equalv2(firstP, lastP, 8e-2)) - lastP.copy(firstP); - } - } - } - CheckPointDir(pt) { - return this.GetPointAtCurveDir(pt) === this._OffsetDistSign; - } - GetPointAtCurveDir(pt) { - let minIndex = Infinity; - let minDist = Infinity; - let minCp; - for (let i = 0; i < this._SubCurves.length; i++) { - let c = this._SubCurves[i]; - let cp = c.GetClosestPointTo(pt, false); - if (equalv3(cp, pt, 1e-5)) - return 0; - let dist = cp.distanceToSquared(pt); - if (dist < minDist) { - minDist = dist; - minIndex = i; - minCp = cp; - } - } - let c = this._SubCurves[minIndex]; - let param = c.GetParamAtPoint(minCp); - if (equaln$1(param, 0) && ((minIndex === 0) ? this._IsClose : true)) { - let preIndex = FixIndex$1(minIndex - 1, this._SubCurves); - let preCurve = this._SubCurves[preIndex]; - if (!equalv3(c.GetFirstDeriv(0).normalize(), preCurve.GetFirstDeriv(1).normalize())) { - let p = c.StartPoint; - let l1 = c.Length; - let l2 = preCurve.Length; - let minLength = Math.min(l1, l2) * 0.2; - let nextP; - let preP; - if (c instanceof exports.Arc) - nextP = c.GetPointAtDistance(minLength); - else - nextP = c.EndPoint; - if (preCurve instanceof exports.Arc) - preP = preCurve.GetPointAtDistance(l2 - minLength); - else - preP = preCurve.StartPoint; - let arc = new exports.Arc(p, 1, angle(preP.sub(p)), angle(nextP.sub(p))); - let dir = arc.PtOnCurve3(pt) ? -1 : 1; - return dir; - } - } - else if (equaln$1(param, 1) && ((minIndex === this._SubCurves.length - 1) ? this._IsClose : true)) { - let nextIndex = FixIndex$1(minIndex + 1, this._SubCurves); - let nextCurve = this._SubCurves[nextIndex]; - if (!equalv3(c.GetFirstDeriv(1).normalize(), nextCurve.GetFirstDeriv(0).normalize())) { - let p = c.EndPoint; - let l1 = c.Length; - let l2 = nextCurve.Length; - let minLength = Math.min(l1, l2) * 0.2; - let nextP; - let preP; - if (c instanceof exports.Arc) - preP = c.GetPointAtDistance(l1 - minLength); - else - preP = c.StartPoint; - if (nextCurve instanceof exports.Arc) - nextP = nextCurve.GetPointAtDistance(minLength); - else - nextP = nextCurve.EndPoint; - let arc = new exports.Arc(p, 1, angle(preP.sub(p)), angle(nextP.sub(p))); - let dir = arc.PtOnCurve3(pt) ? -1 : 1; - return dir; - } - } - let dri = c.GetFirstDeriv(param); - let cross = dri.cross(pt.clone().sub(minCp)); - return -Math.sign(cross.z); - } - CreateArc(center, startP, endP) { - let sa = angle(startP.clone().sub(center)); - let ea = endP ? angle(endP.clone().sub(center)) : sa; - let arc = new exports.Arc(center, Math.abs(this._OffsetDist), sa, ea, this._OffsetDist < 0); - return arc; - } - CreateSquare(center, curveNow, curveNext, entTypeCode) { - const arc = this.CreateArc(center, curveNow.curve.EndPoint, curveNext.curve.StartPoint); - const centerPoint = arc.GetPointAtParam(0.5); - const tangentLine = new exports.Line(centerPoint, arc.GetFirstDeriv(0.5).add(centerPoint)); //切线 - let ep, sp; - if (entTypeCode === 1) { - ep = tangentLine.IntersectWith(curveNow.curve, IntersectOption.ExtendBoth)[0]; //第一条线新的终点坐标 - sp = centerPoint.multiplyScalar(2).sub(ep); - } - else // if (entTypeCode === 0)//全圆弧 直线和圆弧 - { - ep = SelectNearP(tangentLine.IntersectWith(curveNow.curve, IntersectOption.ExtendBoth), center); //第一条线新的终点坐标 - sp = SelectNearP(tangentLine.IntersectWith(curveNext.curve, IntersectOption.ExtendBoth), center); - } - curveNow.ep = ep; - curveNext.sp = sp; - return new exports.Line(ep, sp); - } -} -function EntityEncode(c) { - if (c instanceof exports.Line) - return 1; - else - return 2; -} -function EntityEncode2(c1, c2) { - return EntityEncode(c1) & EntityEncode(c2); -} -const CURVE_MIN_LENGTH = 5e-5; -const ARC_MIN_ALLANGLE = 2e-6; -//表示这个是一个正常的曲线,不是0长度的线,也不是0长度的圆弧 -function CurveIsFine(curve) { - if (curve instanceof exports.Arc && curve.AllAngle < ARC_MIN_ALLANGLE) - return false; - return curve.Length > CURVE_MIN_LENGTH; -} - -/** - * 判断点在多段线内外(如果点在线上 则返回false) - * @param pl 多段线 - * @param pt 点 - * @returns 点在多段线内部 - */ -function IsPointInPolyLine(pl, pt) { - let crossings = 0; - let insLine = new exports.Line(pt, pt.clone().add(new three.Vector3(0, 10, 0))); - for (let i = 0; i < pl.EndParam; i++) { - if (equaln$1(pl.GetBulgeAt(i), 0, BUL_IS_LINE_FUZZ)) //直线 - { - let sp = pl.GetPointAtParam(i); - let ep = pl.GetPointAtParam(i + 1); - if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5)) //在起点或者终点 - return false; - //点位于线上面 - if (pt.y > Math.max(sp.y, ep.y)) - continue; - //线垂直Y轴 - let derX = ep.x - sp.x; - if (equaln$1(derX, 0, 5e-6)) { - if (equaln$1(pt.x, ep.x, 1e-5) - && (pt.y > Math.min(sp.y, ep.y) - 1e-5 && pt.y < Math.max(sp.y, ep.y) + 1e-5)) - return false; //点在线上 - continue; - } - //起点 - if (equaln$1(sp.x, pt.x, 5e-6)) { - if (sp.y > pt.y && derX < 0) - crossings++; - continue; - } - //终点 - if (equaln$1(ep.x, pt.x, 5e-6)) { - if (ep.y > pt.y && derX > 0) - crossings++; - continue; - } - //快速求交,只验证有没有交点 - let [x1, x2] = sp.x > ep.x ? [ep.x, sp.x] : [sp.x, ep.x]; - if (pt.x > x1 && pt.x < x2) { - let derY = ep.y - sp.y; - let k = derY / derX; - let iptY = (pt.x - sp.x) * k + sp.y; - if (equaln$1(iptY, pt.y, 1e-5)) //点在线上 返回false - return false; - if (iptY > pt.y) - crossings++; - } - } - else //圆弧 - { - let arc = pl.GetCurveAtIndex(i); - let sp = arc.StartPoint; - let ep = arc.EndPoint; - if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5)) //在起点或者终点 - return false; - let center = arc.Center; - //如果相切 - if (equaln$1(Math.abs(pt.x - center.x), arc.Radius)) { - //点在线上 - if (equaln$1(pt.y, center.y) && arc.ParamOnCurve(arc.GetParamAtPoint2(pt))) - return false; - //当点和起点或者终点和点相切时 - if (equaln$1(sp.x, pt.x) && sp.y > pt.y) { - if (ep.x - sp.x < -1e-5) - crossings++; - } - else if (equaln$1(ep.x, pt.x) && ep.y > pt.y) { - if (ep.x - sp.x > 1e-5) - crossings++; - } - continue; - } - if (equaln$1(sp.x, pt.x) && sp.y > pt.y) { - let der = arc.GetFirstDeriv(0).normalize(); - if (der.x < -1e-5) - crossings++; - } - if (equaln$1(ep.x, pt.x) && ep.y > pt.y) { - let der = arc.GetFirstDeriv(1).normalize(); - if (der.x > 1e-5) - crossings++; - } - for (let pti of arc.IntersectWith(insLine, IntersectOption.ExtendArg)) { - if (equalv2(pti, pt, 1e-5)) //点在线上 返回false - return false; - //交点在点下 交点在起点? 交点在终点? - if (pti.y + 1e-5 < pt.y || equalv2(sp, pti, 1e-5) || equalv2(ep, pti, 1e-5)) - continue; - crossings++; - } - } - } - return (crossings % 2) === 1; -} - -var Polyline_1; -const BUL_IS_LINE_FUZZ = 1e-5; -exports.Polyline = Polyline_1 = class Polyline extends Curve { - constructor(_LineData = []) { - super(); - this._LineData = _LineData; - this._ClosedMark = false; - } - UpdateOCSTo(m) { - this.WriteAllObjectRecord(); - let p = new three.Vector3().setFromMatrixPosition(m); - p.applyMatrix4(this.OCSInv); - if (equaln$1(p.z, 0)) { - let dir = Math.sign(this.Area2); - let tm = matrixAlignCoordSys(this.OCSNoClone, m); - for (let p of this._LineData) { - let p3 = AsVector3(p.pt); - p3.applyMatrix4(tm); - p.pt.set(p3.x, p3.y); - } - this.OCS = m; - let newDir = Math.sign(this.Area2); - if (dir !== newDir) - for (let p of this._LineData) - p.bul *= -1; - } - } - /** - * 原地翻转,仅改变法向量 - */ - Flip() { - this.WriteAllObjectRecord(); - let x = new three.Vector3(); - let y = new three.Vector3(); - let z = new three.Vector3(); - this._Matrix.extractBasis(x, y, z); - z.negate(); - y.crossVectors(z, x); - let p = this.Position; - this._Matrix.makeBasis(x, y, z).setPosition(p); - for (let d of this._LineData) { - d.pt.y *= -1; - d.bul *= -1; - } - this.Update(); - return this; - } - //翻转曲线,首尾调换 - Reverse() { - if (this._LineData.length === 0) - return this; - this.WriteAllObjectRecord(); - let pts = []; - let buls = []; - for (let data of this._LineData) { - pts.push(data.pt); - buls.push(-data.bul); - } - let lastBul = buls.pop(); - buls.reverse(); - buls.push(lastBul); - pts.reverse(); - if (this._ClosedMark && !equalv2(pts[0], arrayLast(pts))) { - pts.unshift(pts.pop()); - buls.unshift(buls.pop()); - } - for (let i = 0; i < pts.length; i++) { - let d = this._LineData[i]; - d.pt = pts[i]; - d.bul = buls[i]; - } - return this; - } - set LineData(data) { - this.WriteAllObjectRecord(); - this._LineData = data; - this.Update(); - } - get LineData() { - return this._LineData; - } - get NumberOfVertices() { - return this._LineData.length; - } - /** - * 在指定位置插入点. - * 例如: - * pl.AddVertexAt(pl.NumberOfVertices,p);//在末尾插入一个点 - * - * @param {number} index 索引位置 - * @param {Vector2} pt 点 - * @returns {this} - * @memberof Polyline - */ - AddVertexAt(index, pt) { - this.WriteAllObjectRecord(); - let pts; - if (Array.isArray(pt)) { - pts = pt.map(p => { - return { - pt: p.clone(), - bul: 0 - }; - }); - } - else - pts = [{ pt: pt.clone(), bul: 0 }]; - this._LineData.splice(index, 0, ...pts); - this.Update(); - return this; - } - RemoveVertexAt(index) { - if (index < this._LineData.length) { - this.WriteAllObjectRecord(); - this._LineData.splice(index, 1); - this.Update(); - } - return this; - } - RemoveVertexIn(from, to) { - if (from + 1 < this._LineData.length && to > from) { - this.WriteAllObjectRecord(); - this._LineData.splice(from + 1, to - from - 1); - this.Update(); - } - return this; - } - /** - * 重设闭合多段线的起点 - * @param index 起始index,如果index非整数,将用最接近的整数作为起始索引 - */ - ResetStartPoint(index) { - if (!this.IsClose || index >= this.EndParam) - return false; - if (equalv2(this._LineData[0].pt, arrayLast(this._LineData).pt)) - this._LineData.pop(); - changeArrayStartIndex(this._LineData, Math.floor(index + 0.5)); - this._LineData.push({ - pt: this._LineData[0].pt.clone(), - bul: 0 - }); - return true; - } - GetPoint2dAt(index) { - if (index >= 0 && this._LineData.length > index) - return this._LineData[index].pt.clone(); - } - /** - * 设置指定点的位置 - * - * @param {number} index - * @param {Vector2} pt - * @memberof Polyline - */ - SetPointAt(index, pt) { - let d = this._LineData[index]; - if (d) { - this.WriteAllObjectRecord(); - d.pt.copy(pt); - this.Update(); - } - return this; - } - ApplyScaleMatrix(m) { - this.WriteAllObjectRecord(); - let inv = this.OCSInv; - for (let i = 0; i <= this.EndParam; i++) { - let p = this.GetPointAtParam(i); - p.applyMatrix4(m).applyMatrix4(inv); - this.SetPointAt(i, AsVector2(p)); - } - return this; - } - ApplyMirrorMatrix(m) { - this.WriteAllObjectRecord(); - let oldPts = this.GetStretchPoints(); - reviseMirrorMatrix(this._Matrix); - let inv = this.OCSInv; - for (let i = 0; i < oldPts.length; i++) { - let newP = oldPts[i].applyMatrix4(inv); - let newBul = -this.GetBulgeAt(i); - this.SetPointAt(i, AsVector2(newP)); - this.SetBulgeAt(i, newBul); - } - this.Reverse(); - return this; - } - SetBulgeAt(index, bul) { - let d = this._LineData[index]; - if (d) { - this.WriteAllObjectRecord(); - d.bul = bul; - this.Update(); - } - return this; - } - GetBulgeAt(index) { - return this._LineData[index].bul; - } - Rectangle(length, height) { - this.LineData = [ - { pt: new three.Vector2(), bul: 0 }, - { pt: new three.Vector2(length), bul: 0 }, - { pt: new three.Vector2(length, height), bul: 0 }, - { pt: new three.Vector2(0, height), bul: 0 } - ]; - this.CloseMark = true; - return this; - } - RectangleFrom2Pt(p1, p2) { - let box = new three.Box3(); - box.setFromPoints([p2, p1].map((p) => p.clone().applyMatrix4(this.OCSInv))); - let px1 = AsVector2(box.min); - let px3 = AsVector2(box.max); - let px2 = new three.Vector2(px3.x, px1.y); - let px4 = new three.Vector2(px1.x, px3.y); - this.LineData = [ - { pt: px1, bul: 0 }, - { pt: px2, bul: 0 }, - { pt: px3, bul: 0 }, - { pt: px4, bul: 0 } - ]; - this.CloseMark = true; - return this; - } - FromPoints2d(pts) { - this.WriteAllObjectRecord(); - this._LineData.length = 0; - for (let p of pts) - this._LineData.push({ pt: AsVector2(p), bul: 0 }); - this.Update(); - return this; - } - //多段线起点 - get StartPoint() { - if (this._LineData.length > 0) - return AsVector3(this._LineData[0].pt).applyMatrix4(this.OCS); - return new three.Vector3(); - } - set StartPoint(p) { - this.WriteAllObjectRecord(); - p = p.clone().applyMatrix4(this.OCSInv); - if (this._LineData.length === 0) - this.AddVertexAt(0, AsVector2(p)); - else if (this._LineData.length === 1) - this.SetPointAt(0, AsVector2(p)); - else { - let bul = this.GetBulgeAt(0); - if (bul !== 0) { - let arc = this.GetCurveAtParam(0); - arc.StartPoint = p; - //前面线的凸度调整 - this.SetBulgeAt(0, Math.tan(arc.AllAngle / 4) * Math.sign(bul)); - } - this.SetPointAt(0, AsVector2(p)); - } - } - get EndPoint() { - if (this._ClosedMark) - return this.StartPoint; - if (this._LineData.length > 0) - return AsVector3(this._LineData[this.EndParam].pt).applyMatrix4(this.OCS); - return new three.Vector3(); - } - set EndPoint(p) { - if (this._LineData.length < 2 || this.CloseMark) - return; - this.WriteAllObjectRecord(); - p = p.clone().applyMatrix4(this.OCSInv); - let bul = this.GetBulgeAt(this.EndParam - 1); - if (bul !== 0) { - let arc = this.GetCurveAtParam(this.EndParam - 1); - arc.ApplyMatrix(this.OCSInv); - arc.EndPoint = p; - //前面线的凸度调整 - this.SetBulgeAt(this.EndParam - 1, Math.tan(arc.AllAngle / 4) * Math.sign(bul)); - } - this.SetPointAt(this.EndParam, AsVector2(p)); - } - get CurveCount() { - return this.EndParam; - } - get StartParam() { - return 0; - } - /** - * 表示最后一条曲线的终止参数,使用该参数可以直接遍历到多段线的所有子线段. for(i 1 && (equalv3(this.StartPoint, this.EndPoint, 1e-4))); - } - set CloseMark(v) { - this.WriteAllObjectRecord(); - this._ClosedMark = v; - this.Update(); - } - DigestionCloseMark() { - if (this._ClosedMark && this._LineData.length > 1) { - this.WriteAllObjectRecord(); - this._ClosedMark = false; - if (!equalv2(this._LineData[0].pt, arrayLast(this._LineData).pt)) - this._LineData.push({ pt: AsVector2(this._LineData[0].pt), bul: 0 }); - } - } - /** - * 删除重复点 - * @param [fuzz=0.1] 容差=0.1 - */ - RemoveRepeatPos(fuzz = 0.1) { - let index = 0; - let pre = 0; - let writed = false; - for (let next = 1; next <= this._LineData.length; next++) { - if ((!this._ClosedMark && next === this._LineData.length) || //如果曲线没闭合 则总是保留最后一个点 - !equalv2(this._LineData[pre].pt, this._LineData[FixIndex$1(next, this._LineData)].pt, fuzz)) { - if (!writed) { - this.WriteAllObjectRecord(); - writed = true; - } - this._LineData[index] = this._LineData[pre]; - index++; - } - pre++; - } - if (equalv2(this._LineData[0].pt, this._LineData[index - 1].pt, fuzz)) - this._LineData[index - 1].pt.copy(this._LineData[0].pt); - this._LineData.length = index; - this.Update(); - } - get Length() { - return this.Explode().reduce((l, cu) => l + cu.Length, 0); - } - /** - * 获得指定参数所在的点. - * 当曲线存在闭合标志时,参数必须在曲线内部. - * 当曲线不存在闭合标志时,参数允许延伸出曲线. - * - * @param {number} param 参数 - * @returns {Vector3} 三维点,可为空 - */ - GetPointAtParam(param) { - if (param === Math.floor(param) && this.ParamOnCurve(param)) - return AsVector3(this.GetPoint2dAt(FixIndex$1(param, this.NumberOfVertices))).applyMatrix4(this.OCSNoClone); - let cu = this.GetCurveAtParam(param); - if (cu) - return cu.GetPointAtParam(this.GetCurveParamAtParam(param)); - return undefined; - } - GetDistAtParam(param) { - if (this._ClosedMark && !this.ParamOnCurve(param)) - return NaN; - //参数 整数 - let paramFloor = Math.floor(param); - //需要计算的曲线个数 - let cuCount = paramFloor > this.EndParam ? this.EndParam : paramFloor; - let dist = 0; - //首先计算完整曲线的长度 - for (let i = 0; i < cuCount; i++) { - dist += this.GetCurveAtIndex(i).Length; - } - //参数已经大于索引,证明参数在线外. - if (paramFloor !== cuCount) { - dist += this.GetCurveAtParam(param).GetDistAtParam(param - cuCount); - } - else if (param > paramFloor) { - let lastParam = param - paramFloor; - dist += this.GetCurveAtParam(param).GetDistAtParam(lastParam); - } - return dist; - } - GetPointAtDistance(dist) { - let param = this.GetParamAtDist(dist); - return this.GetPointAtParam(param); - } - /** - * 返回参数所在的点. 如果曲线不闭合,会试图返回延伸点参数 - * - * @param {Vector3} pt - * @returns {number} - * @memberof Polyline - */ - GetParamAtPoint(pt) { - let cus = this.Explode(); - if (cus.length === 0) - return NaN; - for (let i = 0; i < cus.length; i++) { - let cu = cus[i]; - let param = cu.GetParamAtPoint(pt); - if (cu.ParamOnCurve(param)) - return i + param; //返回点在曲线内部的参数 - } - //当曲线闭合时,不需要延伸首尾去判断参数 - if (this._ClosedMark) - return NaN; - //起点终点参数集合 - let seParams = []; - //点在第一条曲线上的参数 - let startParam = cus[0].GetParamAtPoint(pt); - if (!isNaN(startParam) && startParam < 0) - seParams.push(startParam); - //点在最后一条线上的参数 - let endParam = cus[cus.length - 1].GetParamAtPoint(pt); - if (!isNaN(endParam) && endParam > 0) - seParams.push(endParam + this.EndParam - 1); - if (seParams.length == 1) { - return seParams[0]; - } - else if (seParams.length == 2) { - //返回较近的参数 - if (pt.distanceToSquared(this.StartPoint) - < pt.distanceToSquared(this.EndPoint)) - return seParams[0]; - else - return seParams[1]; - } - return NaN; - } - GetParamAtDist(dist) { - if (equaln$1(dist, 0)) - return 0; - let cus = []; - for (let i = 0; i < this.EndParam; i++) { - let cu = this.GetCurveAtIndex(i); - let len = cu.Length; - if (len < 1e-6) - continue; - cus.push(cu); - if (dist <= len) - return i + cu.GetParamAtDist(dist); - else if (equaln$1(dist, len, 1e-8)) - return i + 1; - dist -= len; - } - if (!this._ClosedMark) - return cus.length + cus[cus.length - 1].GetParamAtDist(dist); - return NaN; - } - GetDistAtPoint(pt) { - let param = this.GetParamAtPoint(pt); - if (!this.ParamOnCurve(param)) - return NaN; - return this.GetDistAtParam(param); - } - /** - * 返回曲线的一阶导数. - * 当曲线闭合(标志)且点不在曲线上. - * 或者曲线不闭合(标志) 且点不在曲线上也不在延伸上 - * - * @param {(number | Vector3)} param - * @returns {Vector3} - * @memberof Polyline - */ - GetFirstDeriv(param) { - if (param instanceof three.Vector3) - param = this.GetParamAtPoint(param); - if (isNaN(param)) - return undefined; - let cu = this.GetCurveAtParam(param); - if (!cu) - return undefined; - return cu.GetFirstDeriv(this.GetCurveParamAtParam(param)); - } - GetSplitCurves(param) { - //参数需要转化为参数数组 - let params; - if (typeof param == "number") - params = [param]; - else - params = param; - //校验参数在曲线中,修正参数 - let endParam = this.EndParam; - params = params.filter(p => this.ParamOnCurve(p) && p > -1e-6) - .map(a => { - if (a < 0) - return 0; - if (a > endParam) - return endParam; - if (equaln$1(a, Math.floor(a + 0.5), 1e-8)) - return Math.floor(a + 0.5); - return a; - }); - //排序 - params.sort((a, b) => a - b); - let hasEndParam = arrayLast(params) === this.EndParam; - //必须加入最后一个参数,保证切割后的曲线完整 - if (!hasEndParam) - params.push(this.EndParam); - arrayRemoveDuplicateBySort(params, (e1, e2) => equaln$1(e1, e2, 1e-8)); - params = params.filter(p => this.ParamOnCurve(p)); - if (params.length === 0) - return []; - //判断是否存在0参数 - let hasZeroParam = params[0] === 0; - if (hasZeroParam) - params.shift(); - let { pts, buls } = this.PtsBuls; - //返回的多段线集合 - let pls = []; - let len = 0; //已经走过的参数长度(整数) - //上一个切割参数的位置 0-1 - let prePa = 0; - for (let pa of params) { - //参数所在点 - let pt = AsVector2(this.GetPointAtParam(pa).applyMatrix4(this.OCSInv)); - pa -= len; - let pafloor = Math.floor(pa); - len += pafloor; - let plData = []; - //添加点 - for (let i = 0; i < pafloor; i++) { - if (i === 0 && !equaln$1(buls[0], 0, 1e-8)) { - buls[0] = Math.tan((1 - prePa) * Math.atan(buls[0])); - } - plData.push({ pt: pts[0], bul: buls[0] }); - pts.shift(); - buls.shift(); - } - if (equaln$1(pa, pafloor, 1e-8)) //如果pa在点上 - { - plData.push({ pt: pts[0].clone(), bul: buls[0] }); - } - else //在曲线上 - { - let bul = buls[0]; - if (!equaln$1(bul, 0, 1e-6)) - bul = Math.tan((pa - pafloor - (0 === pafloor ? prePa : 0)) * Math.atan(buls[0])); //->凸度 - //加入顶点+凸度 - plData.push({ pt: pts[0].clone(), bul }); - //终点 - plData.push({ pt, bul: 0 }); - //修正剩余的点表和凸度表 - pts[0].copy(pt); - } - prePa = pa - pafloor; - if (plData.length > 1) { - let pl = new Polyline_1(plData).ApplyMatrix(this.OCS); - pl.ColorIndex = this.ColorIndex; - pls.push(pl); - } - } - //当曲线为闭合曲线,并且不存在0切割参数时,首尾连接曲线 - if (this._ClosedMark && !hasZeroParam && !hasEndParam) { - let lastPl = pls[pls.length - 1]; - if (equalv2(arrayLast(lastPl._LineData).pt, pls[0]._LineData[0].pt)) - lastPl._LineData.pop(); - lastPl._LineData.push(...pls[0]._LineData); - pls.shift(); - } - return pls; - } - //未完善 - GetCurveAtParamRange(startParam, endParam) { - let sfloor = Math.floor(startParam + 0.5); - if (equaln$1(sfloor, startParam, 1e-8)) - startParam = sfloor; - else - sfloor = Math.floor(startParam); - let efloor = Math.floor(endParam + 0.5); - if (equaln$1(efloor, endParam, 1e-8)) - endParam = efloor; - else - efloor = Math.floor(efloor); - const GetCurve = (index) => { - let d = this._LineData[index]; - let next = this._LineData[index + 1]; - if (!equaln$1(d.bul, 0, 1e-8)) - return new exports.Arc().ParseFromBul(d.pt, next.pt, d.bul); - else - return new exports.Line(AsVector3(d.pt), AsVector3(next.pt)); - }; - let lined = []; - if (startParam === sfloor) { - let d = this._LineData[sfloor]; - lined.push({ pt: d.pt.clone(), bul: d.bul }); - } - else { - let d = this._LineData[sfloor]; - let cu = GetCurve(sfloor); - let remParam = startParam - sfloor; - let p = cu.GetPointAtParam(remParam); - let bul = d.bul; - if (!equaln$1(bul, 0)) - bul = Math.tan(Math.atan(bul) * (1 - remParam)); - lined.push({ pt: AsVector2(p), bul: bul }); - } - for (let i = sfloor + 1; i < efloor; i++) { - let d = this._LineData[i]; - lined.push({ pt: d.pt.clone(), bul: d.bul }); - } - if (efloor !== endParam) { - let d = this.LineData[efloor]; - let remParam = endParam - efloor; - let cu = GetCurve(efloor); - let p = cu.GetPointAtParam(remParam); - let bul = d.bul; - if (!equaln$1(bul, 0)) { - arrayLast(lined).bul = Math.tan(Math.atan(bul) * remParam); - bul = Math.tan(Math.atan(bul) * (1 - remParam)); - } - lined.push({ pt: AsVector2(p), bul }); - } - let pl = new Polyline_1(lined); - pl.OCS = this.OCSNoClone; - return; - } - Extend(newParam) { - if (this.CloseMark || this.ParamOnCurve(newParam)) - return; - this.WriteAllObjectRecord(); - let ptIndex; - let bulIndex; - if (newParam < 0) { - ptIndex = 0; - bulIndex = 0; - } - else if (newParam > this.EndParam) { - ptIndex = this.EndParam; - bulIndex = ptIndex - 1; - } - //修改顶点 - this._LineData[ptIndex].pt = AsVector2(this.GetPointAtParam(newParam).applyMatrix4(this.OCSInv)); - //修改凸度 - let oldBul = this._LineData[bulIndex].bul; - if (oldBul != 0) - this._LineData[bulIndex].bul = Math.tan(Math.atan(oldBul) * (1 + newParam - ptIndex)); - this.Update(); - } - //const this - MatrixAlignTo2(toMatrix) { - if (!matrixIsCoplane(this._Matrix, toMatrix, 1e-4)) - return this.PtsBuls; - let m = matrixAlignCoordSys(this._Matrix, toMatrix); - let z1 = this.Normal; - let z2 = new three.Vector3().setFromMatrixColumn(toMatrix, 2); - let isMirror = equalv3(z1, z2.negate()); - let pts = []; - let buls = []; - for (let d of this._LineData) { - let p = AsVector2(AsVector3(d.pt).applyMatrix4(m)); - pts.push(p); - buls.push(isMirror ? -d.bul : d.bul); - } - return { pts, buls }; - } - Join(cu, allowGap = false, tolerance = 1e-4) { - this.WriteAllObjectRecord(); - if (this._ClosedMark) - return exports.Status.False; - let [sp, ep, cuSp, cuEp] = [this.StartPoint, this.EndPoint, cu.StartPoint, cu.EndPoint]; - let ocsInv = this.OCSInv; - let [cuSp2, cuEp2] = [cuSp, cuEp].map(p => AsVector2(p.clone().applyMatrix4(ocsInv))); - if (this._LineData.length === 0) { - if (cu instanceof exports.Line) { - this._LineData.push({ pt: cuSp2, bul: 0 }); - this._LineData.push({ pt: cuEp2, bul: 0 }); - } - else if (cu instanceof exports.Arc) { - let x = new three.Vector3().setFromMatrixColumn(cu.OCSNoClone, 0); - let y = new three.Vector3().setFromMatrixColumn(cu.OCSNoClone, 1); - let cuZ = x.cross(y); - let dir = equalv3(this.Normal, cuZ, 1e-4) ? 1 : -1; - let bul = cu.Bul * dir; - this._LineData.push({ pt: cuSp2, bul: bul }); - this._LineData.push({ pt: cuEp2, bul: 0 }); - } - else if (cu instanceof Polyline_1) { - let f = new CADFiler(); - cu.WriteFile(f); - this.ReadFile(f); - } - else - return exports.Status.False; - } - else { - let LinkType; - (function (LinkType) { - LinkType[LinkType["None"] = 0] = "None"; - LinkType[LinkType["SpSp"] = 1] = "SpSp"; - LinkType[LinkType["SpEp"] = 2] = "SpEp"; - LinkType[LinkType["EpSp"] = 3] = "EpSp"; - LinkType[LinkType["EpEp"] = 4] = "EpEp"; - })(LinkType || (LinkType = {})); - let spspDisSq = cuSp.distanceToSquared(sp); - let spepDisSq = cuSp.distanceToSquared(ep); - let epspDisSq = cuEp.distanceToSquared(sp); - let epepDisSq = cuEp.distanceToSquared(ep); - let minDis = tolerance * tolerance; - let linkType = LinkType.None; - if (epspDisSq < minDis) { - linkType = LinkType.EpSp; - minDis = epspDisSq; - } - if (epepDisSq < minDis) { - linkType = LinkType.EpEp; - minDis = epepDisSq; - } - if (spspDisSq < minDis) { - linkType = LinkType.SpSp; - minDis = spspDisSq; - } - if (spepDisSq < minDis) { - linkType = LinkType.SpEp; - minDis = spepDisSq; - } - if (linkType === LinkType.None) - return exports.Status.False; - if (cu instanceof exports.Line) { - if (linkType === LinkType.SpSp) { - this._LineData.unshift({ pt: cuEp2, bul: 0 }); - } - else if (linkType === LinkType.SpEp) { - this._LineData.push({ pt: cuEp2, bul: 0 }); - } - else if (linkType === LinkType.EpSp) { - this._LineData.unshift({ pt: cuSp2, bul: 0 }); - } - else if (linkType === LinkType.EpEp) { - this._LineData.push({ pt: cuSp2, bul: 0 }); - } - } - else if (cu instanceof exports.Arc) { - let x = new three.Vector3().setFromMatrixColumn(cu.OCSNoClone, 0); - let y = new three.Vector3().setFromMatrixColumn(cu.OCSNoClone, 1); - let cuZ = x.cross(y); - let dir = equalv3(this.Normal, cuZ, 1e-4) ? 1 : -1; - let bul = cu.Bul * dir; - if (linkType === LinkType.SpSp) { - this._LineData.unshift({ pt: cuEp2, bul: -bul }); - } - else if (linkType === LinkType.SpEp) { - arrayLast(this._LineData).bul = bul; - this._LineData.push({ pt: cuEp2, bul: 0 }); - } - else if (linkType === LinkType.EpSp) { - this._LineData.unshift({ pt: cuSp2, bul: bul }); - } - else if (linkType === LinkType.EpEp) { - arrayLast(this._LineData).bul = -bul; - this._LineData.push({ pt: cuSp2, bul: 0 }); - } - } - else if (cu instanceof Polyline_1) { - if (cu.CloseMark) - return exports.Status.False; - let { pts, buls } = this.PtsBuls; - if (linkType === LinkType.SpSp) { - cu.Reverse(); - let cuPtsBul = cu.MatrixAlignTo2(this.OCS); - cuPtsBul.pts.pop(); - cuPtsBul.buls.pop(); - pts = cuPtsBul.pts.concat(pts); - buls = cuPtsBul.buls.concat(buls); - } - else if (linkType === LinkType.SpEp) { - pts.pop(); - buls.pop(); - let cuPtsBul = cu.MatrixAlignTo2(this.OCS); - pts = pts.concat(cuPtsBul.pts); - buls = buls.concat(cuPtsBul.buls); - } - else if (linkType === LinkType.EpSp) { - let cuPtsBul = cu.MatrixAlignTo2(this.OCS); - cuPtsBul.pts.pop(); - cuPtsBul.buls.pop(); - pts = cuPtsBul.pts.concat(pts); - buls = cuPtsBul.buls.concat(buls); - } - else if (linkType === LinkType.EpEp) { - pts.pop(); - buls.pop(); - cu.Reverse(); - let cuPtsBul = cu.MatrixAlignTo2(this.OCS); - pts = pts.concat(cuPtsBul.pts); - buls = buls.concat(cuPtsBul.buls); - } - this._LineData.length = 0; - for (let i = 0; i < pts.length; i++) { - this._LineData.push({ pt: pts[i], bul: buls[i] }); - } - } - else - return exports.Status.False; - } - //在上面的其他分支已经返回了假 所以这里直接返回真. - this.Update(); - return exports.Status.True; - } - /** - * 将曲线数组组合成多段线 - * @param curves 已经使用CurveLinked的数组,总是首尾相连 - * @returns - */ - static Combine(curves, tolerance = 1e-5) { - if (!curves || curves.length === 0) - return; - let pl = new Polyline_1; - pl.OCS = ComputerCurvesNormalOCS(curves); - for (let cu of curves) { - pl.Join(cu, false, 0.1); - // if (status === Status.False) - // console.log(); - } - let d = pl.LineData; - if (d.length > 1) { - let ld = arrayLast(d).pt; - if (equalv2(d[0].pt, ld, tolerance)) - ld.copy(d[0].pt); - } - return pl; - } - /**首尾相连的曲线直接连接 */ - static FastCombine(curves, tolerance = 1e-5, computOCS = true) { - if (!curves || curves.length === 0) - return; - let pl = new Polyline_1; - if (computOCS) - pl.OCS = ComputerCurvesNormalOCS(curves); - let ocsInv = pl.OCSInv; - let normal = pl.Normal; - let lineData = []; - for (let i = 0; i < curves.length; i++) { - let cu = curves[i]; - let bul = 0; - if (cu instanceof exports.Arc) { - let dir = equalv3(normal, cu.Normal.negate(), 1e-3) ? -1 : 1; - bul = cu.Bul * dir; - } - lineData.push({ - pt: AsVector2(cu.StartPoint.applyMatrix4(ocsInv)), - bul - }); - if (i === curves.length - 1) { - lineData.push({ - pt: AsVector2(cu.EndPoint.applyMatrix4(ocsInv)), - bul: 0 - }); - } - } - if (lineData.length > 1) { - let ld = arrayLast(lineData).pt; - if (equalv2(lineData[0].pt, ld, tolerance)) - ld.copy(lineData[0].pt); - } - pl.LineData = lineData; - return pl; - } - PtOnCurve(pt, fuzz = 1e-6) { - for (let i = 0; i < this.EndParam; i++) { - let c = this.GetCurveAtIndex(i); - if (c.PtOnCurve(pt, fuzz)) - return true; - } - return false; - } - //点在曲线上,已经确定点在曲线的延伸线上 - PtOnCurve3(p, fuzz = 1e-6) { - for (let i = 0; i < this.EndParam; i++) { - let c = this.GetCurveAtIndex(i); - if (c.PtOnCurve3(p, fuzz)) - return true; - } - return false; - } - PtInCurve(pt) { - return this.IsClose && IsPointInPolyLine(this, pt); - } - GetClosestPointTo(pt, extend) { - return this.GetClosestPointTo2(pt, extend ? ExtendType.Both : ExtendType.None); - } - GetClosestPointTo2(pt, extType) { - //当曲线空时,返回空 - if (this.EndParam < 1) - return undefined; - //当有闭合标志时,曲线在任何位置都不延伸 - if (this._ClosedMark) - extType = ExtendType.None; - //最近点 - let ptC = undefined; - //最近点的距离 - let ptCDist = Infinity; - for (let i = 0; i < this.EndParam; i++) { - let cu = this.GetCurveAtIndex(i); - //前延伸 - if (i === 0 && (extType & ExtendType.Front) > 0) { - let ptCFirst = cu.GetClosestPointTo(pt, true); - if (cu.GetParamAtPoint(ptCFirst) <= 1) { - ptC = ptCFirst; - ptCDist = ptC.distanceToSquared(pt); - } - if (extType === ExtendType.Front) - continue; - } - let ptCloseNew; //新的最近点 - //后延伸 (此处与前延伸分开if 如果线只有一段,那么前后延伸都能同时触发) - if (i === (this.EndParam - 1) && (extType & ExtendType.Back) > 0) { - let ptCLast = cu.GetClosestPointTo(pt, true); - if (cu.GetParamAtPoint(ptCLast) >= 0) - ptCloseNew = ptCLast; - else //如果延伸之后并不在曲线或者曲线的后延伸上 - ptCloseNew = cu.EndPoint; - } - else { - ptCloseNew = cu.GetClosestPointTo(pt, false); - } - let newDist = ptCloseNew.distanceToSquared(pt); - if (newDist < ptCDist) { - ptC = ptCloseNew; - ptCDist = newDist; - } - } - return ptC; - } - //偏移 - GetOffsetCurves(offsetDist) { - if (equaln$1(offsetDist, 0)) - return []; - let polyOffestUtil = new OffsetPolyline(this, offsetDist); - let curves = polyOffestUtil.Do(); - for (let cu of curves) - cu.ColorIndex = this.ColorIndex; - return curves; - } - GetFeedingToolPath(offsetDist, offsetDistSq = (offsetDist ** 2) * 2.1, joinType = PolylineJoinType.Round) { - if (equaln$1(offsetDist, 0)) - return []; - let polyOffestUtil = new OffsetPolyline(this, offsetDist, true, offsetDistSq, joinType); - return polyOffestUtil.Do(); - } - /** - * 分解 - */ - Explode() { - let exportCus = []; - for (let i = 0; i < this.EndParam; i++) { - exportCus.push(this.GetCurveAtIndex(i)); - } - return exportCus; - } - /** - * 根据参数得到参数所在的子曲线. - * - * 当曲线存在闭合标志时,参数必须在曲线内部,否则返回空. - * - * @param {number} param 参数值 - * @returns {Curve} 曲线(直线或者圆弧) 或空 - * @memberof Polyline - */ - GetCurveAtParam(param) { - if (this._ClosedMark && !this.ParamOnCurve(param)) - return undefined; - if (param < 0) - return this.GetCurveAtIndex(0); - else if (param >= this.EndParam) - return this.GetCurveAtIndex(this.EndParam - 1); - else - return this.GetCurveAtIndex(Math.floor(param)); - } - /** - * 得到参数在子曲线中的表示 - * - * @param {number} param 参数在多段线中表示 - * @returns {number} 参数在子曲线中表示 - * @memberof Polyline - */ - GetCurveParamAtParam(param) { - if (param >= this.EndParam) - param -= this.EndParam - 1; - else if (param > 0) - param -= Math.floor(param); - return param; - } - /** - * 获得曲线,来自索引位置. - * @param {number} i 索引位置 整数 - */ - GetCurveAtIndex(i) { - if (i >= this._LineData.length) - return undefined; - if (!this.ParamOnCurve(i)) - return undefined; - if (!this._ClosedMark && i === this._LineData.length - 1) - return undefined; - let d1 = this._LineData[i]; - let d2 = this._LineData[FixIndex$1(i + 1, this._LineData)]; - let curve; - if (equaln$1(d1.bul, 0, BUL_IS_LINE_FUZZ)) - curve = new exports.Line(AsVector3(d1.pt), AsVector3(d2.pt)).ApplyMatrix(this.OCSNoClone); - else - curve = new exports.Arc().ParseFromBul(d1.pt, d2.pt, d1.bul).ApplyMatrix(this.OCSNoClone); - curve.ColorIndex = this._Color; - return curve; - } - IntersectWith2(curve, intType, tolerance = 1e-5) { - return IntersectPolylineAndCurve(this, curve, intType, tolerance); - } - //计算自交点. - IntersectSelf() { - let cus = this.Explode(); - if (cus.length === 0) - return []; - let intParams = []; - for (let i = 0; i < cus.length; i++) { - let c = cus[i]; - for (let j = i + 2; j < cus.length; j++) { - let c2 = cus[j]; - let pts = c.IntersectWith(c2, IntersectOption.ExtendNone); - for (let p of pts) { - intParams.push(i + c.GetParamAtPoint(p)); - intParams.push(j + c2.GetParamAtPoint(p)); - } - } - } - return intParams; - } - IsIntersectSelf() { - let cus = this.Explode().filter(c => !equaln$1(c.Length, 0, 1e-3)); - for (let i = 0; i < cus.length - 1; i++) { - let c1 = cus[i]; - let c1IsLine = c1 instanceof exports.Line; - let d1 = c1.GetFirstDeriv(c1IsLine ? 0 : 1).normalize(); - for (let j = i + 1; j < cus.length; j++) { - let c2 = cus[j]; - let c2IsLine = c2 instanceof exports.Line; - let d2 = c2.GetFirstDeriv(0).normalize(); - if (j === i + 1) { - if (c1IsLine === c2IsLine) { - if (c1IsLine) { - if (equalv3(d1, d2.negate())) - return true; - continue; - } - else { - if (equalv3(d1, d2.negate()) && equalv3(c1.Center, c2.Center)) - return true; - } - } - } - let intPts = c1.IntersectWith2(c2, 0); - let intPtsLen = intPts.length; - if (intPtsLen > 0) { - if (intPtsLen === 2 && equalv3(intPts[0].pt, intPts[1].pt, 1e-3)) { - intPtsLen = 1; - intPts.pop(); - } - if (intPtsLen === 2 && j === i + 1 && cus.length === 2) { - if (intPts.every(r => equaln$1(r.thisParam, 0, 1e-3) || equaln$1(r.thisParam, 1, 1e-3))) - continue; - } - if (j === i + 1 && intPtsLen === 1) - continue; - if (this.IsClose && i === 0 && j === cus.length - 1 && intPtsLen === 1) - continue; - return true; - } - } - } - return false; - } - get BoundingBox() { - let box = new Box3Ext(); - for (let i = 0; i < this.EndParam; i++) { - let cu = this.GetCurveAtIndex(i); - box.union(cu.BoundingBox); - } - return box; - } - SetPtsBuls(pts, buls) { - this.WriteAllObjectRecord(); - this._LineData.length = 0; - for (let i = 0; i < pts.length; i++) { - let pt = pts[i]; - let bul = buls[i]; - this._LineData.push({ pt, bul }); - } - this.Update(); - return this; - } - /** - * 得到曲线有用的点表和凸度(闭合曲线首尾重复) - */ - get PtsBuls() { - let pts = []; - let buls = []; - if (this._LineData.length === 0) - return { pts, buls }; - for (let data of this._LineData) { - pts.push(data.pt.clone()); - buls.push(data.bul); - } - //闭合且起点不等于终点 - if (this._ClosedMark && - !this._LineData[0].pt.equals(arrayLast(this._LineData).pt)) { - pts.push(pts[0].clone()); - buls.push(buls[0]); - } - return { pts, buls }; - } - get IsBulge() { - if (!this.IsClose) - return false; - let refDir = Math.sign(this.Area2); - let c1; - let c2; - for (let i = 0; i < this.EndParam; i++) { - c1 = this.GetCurveAtIndex(i); - c2 = this.GetCurveAtIndex(FixIndex$1(i + 1, this.EndParam)); - let len1 = c1.Length; - let len2 = c2.Length; - let minLen = Math.min(len1, len2) * 0.2; - let p = c1.EndPoint; - let p1; - let p2; - if (c1 instanceof exports.Arc) { - let dir = c1.IsClockWise ? -1 : 1; - if (dir !== refDir) - return false; - p1 = c1.GetPointAtDistance(len1 - minLen); - } - else - p1 = c1.StartPoint; - if (c2 instanceof exports.Arc) { - let dir = c2.IsClockWise ? -1 : 1; - if (dir !== refDir) - return false; - p2 = c2.GetPointAtDistance(minLen); - } - else - p2 = c2.EndPoint; - let vec1 = p.clone().sub(p1); - let vec2 = p2.sub(p); - let dir = Math.sign(vec1.cross(vec2).z); - if (dir !== 0 && dir !== refDir) - return false; - } - return true; - } - get Shape() { - let { pts, buls } = this.PtsBuls; - return CreatePolylinePath(pts, buls); - } - get SVG() { - let sp = this.StartPoint; - let str = `M${sp.x} ${sp.y} `; - for (let i = 1; i <= this.EndParam; i++) { - let bul = this.GetBulgeAt(i - 1); - let p = this.GetPointAtParam(i); - if (bul === 0) - str += `L${p.x} ${p.y} `; - else { - let arc = this.GetCurveAtIndex(i - 1); - str += `A ${arc.Radius} ${arc.Radius} 0 ${Math.abs(bul) >= 1 ? 1 : 0} ${arc.IsClockWise ? 0 : 1} ${p.x} ${p.y}`; - } - } - return str; - } - GetDragPointCount(drag) { - if (drag === DragPointType.Grip) { - let count = this.EndParam * 2 + 1; - if (this.CloseMark) - count--; - return count; - } - else { - return this._LineData.length; - } - } - GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { - switch (snapMode) { - case ObjectSnapMode.End: - return this.GetStretchPoints(); - case ObjectSnapMode.Mid: - let midPts = []; - let enParam = this.EndParam; - for (let i = 0.5; i < enParam; i++) { - let p = this.GetPointAtParam(i); - p && midPts.push(p); - } - return midPts; - case ObjectSnapMode.Nea: - { - let nea = []; - for (let cu of this.Explode()) { - let neaa = cu.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform); - if (neaa) - nea.push(...neaa); - } - return nea; - } - case ObjectSnapMode.Ext: - { - let cp = this.GetClosestPointTo(pickPoint, true); - if (cp) - return [cp]; - break; - } - case ObjectSnapMode.Cen: - let cenPts = []; - for (let i = 0; i < this._LineData.length; i++) { - let data = this._LineData[i]; - if (!equaln$1(data.bul, 0)) { - let cu = this.GetCurveAtIndex(i); - if (cu) //end bul !== 0 但是并没有圆弧 - cenPts.push(cu.Center); - } - } - return cenPts; - case ObjectSnapMode.Per: - if (lastPoint) { - let cp = this.GetClosestPointTo(pickPoint, false); - if (!cp) - return []; - let cparam = this.GetParamAtPoint(cp); - let cu = this.GetCurveAtParam(cparam); - if (cu) { - let closestPt = cu.GetClosestPointTo(lastPoint, true); - if (closestPt && this.PtOnCurve(closestPt)) - return [closestPt]; - } - } - case ObjectSnapMode.Tan: - if (lastPoint) { - let clostPt = this.GetClosestPointTo(pickPoint, false); - if (!clostPt) - return []; - let par = this.GetParamAtPoint(clostPt); - let cu = this.GetCurveAtParam(par); - if (cu instanceof exports.Arc) - return cu.GetObjectSnapPoints(snapMode, pickPoint, lastPoint); - return []; - } - } - return []; - } - GetGripPoints() { - let ptList = []; - if (this._LineData.length < 2) - return ptList; - let enParam = this.EndParam; - if (this.CloseMark) - enParam -= 0.5; - for (let i = 0; i < enParam + 0.5; i += 0.5) { - let p = this.GetPointAtParam(i); - ptList.push(p); - } - return ptList; - } - MoveGripPoints(indexList, moveVec) { - this.WriteAllObjectRecord(); - let moveVLoc = AsVector2(moveVec.clone().applyMatrix4(new three.Matrix4().extractRotation(this.OCSInv))); - let calcIndexList = indexList; - if (indexList.length > 1) { - let centerIndexes = indexList.filter(i => i % 2 === 0); - if (centerIndexes.length > 0) - calcIndexList = centerIndexes; - } - for (let index of calcIndexList) { - if (index % 2 === 0) { - let cuIndex = index / 2; - let ptCount = this._LineData.length; - let frontIndex = cuIndex - 1; - if (this._ClosedMark) - frontIndex = FixIndex$1(frontIndex, ptCount); - if (frontIndex >= 0 && this.GetBulgeAt(frontIndex)) { - let arc = this.GetCurveAtIndex(frontIndex); - arc.MoveGripPoints([2], moveVec); - this._LineData[frontIndex].bul = arc.Bul; - } - if ((cuIndex !== ptCount - 1) && this.GetBulgeAt(cuIndex)) { - let arc = this.GetCurveAtIndex(cuIndex); - arc.MoveGripPoints([0], moveVec); - this._LineData[cuIndex].bul = arc.Bul; - } - this._LineData[cuIndex].pt.add(moveVLoc); - } - else { - let ptIndex = (index - 1) / 2; - let nextIndex = (FixIndex$1(ptIndex + 1, this._LineData)); - let d = this._LineData[ptIndex]; - if (d.bul === 0) { - this._LineData[ptIndex].pt.add(moveVLoc); - this._LineData[nextIndex].pt.add(moveVLoc); - } - else { - let arc = this.GetCurveAtIndex(ptIndex); - arc.MoveGripPoints([1], moveVec); - this._LineData[ptIndex].bul = arc.Bul; - } - } - } - this.Update(); - } - GetStretchPoints() { - let iswcs = MatrixIsIdentityCS(this._Matrix); - let pts = []; - for (let data of this._LineData) { - let p = AsVector3(data.pt); - if (!iswcs) - p.applyMatrix4(this._Matrix); - pts.push(p); - } - return pts; - } - /** - * 范围拉伸(stretch),对夹点进行拉伸. - * 如果对圆弧的一侧进行拉伸,那么修改bul - * - * @param {Array} indexList - * @param {Vector3} vec - */ - MoveStretchPoints(indexList, vec) { - this.WriteAllObjectRecord(); - //本地坐标系移动向量 - let moveVLoc = vec.clone().applyMatrix4(new three.Matrix4().extractRotation(this.OCSInv)); - let ptCount = this._LineData.length; - for (let index of indexList) { - if (index >= ptCount) - throw "在拉伸多段线顶点时,尝试拉伸不存在的顶点!(通常是因为模块中的板轮廓被破坏,导致的顶点丢失!)"; - let frontIndex = index - 1; - let nextIndex = index + 1; - if (this._ClosedMark) { - frontIndex = FixIndex$1(frontIndex, ptCount); - nextIndex = FixIndex$1(nextIndex, ptCount); - } - /** - * 根据新的拉伸点修改凸度. - * - * @param {number} nextIndex 隔壁点索引 - * @param {number} bulIndex 需要修改凸度位置的索引 - * @returns - */ - const ChangeBul = (nextIndex, bulIndex) => { - //需要修改的点的数据 - let d = this._LineData[bulIndex]; - if (d === undefined || d.bul === 0) - return; - //如果隔壁点不在拉伸列表中 - if (indexList.indexOf(nextIndex) === -1) { - let needChangeP = this.GetPointAtParam(index); - let notChangeP = this.GetPointAtParam(nextIndex); - //原先的弦长的一半 - let oldChordLengthHalf = needChangeP.distanceTo(notChangeP) * 0.5; - //弓高 - let arcHeight = oldChordLengthHalf * d.bul; - needChangeP.add(vec); - let newChordLengthHalf = needChangeP.distanceTo(notChangeP) * 0.5; - d.bul = arcHeight / newChordLengthHalf; - } - }; - ChangeBul(frontIndex, frontIndex); - ChangeBul(nextIndex, index); - //修改顶点 - this._LineData[index].pt.add(AsVector2(moveVLoc)); - } - this.Update(); - } - _ReadFile(file) { - super._ReadFile(file); - let ver = file.Read(); - this._LineData.length = 0; - let count = file.Read(); - for (let i = 0; i < count; i++) { - let v = new three.Vector2().fromArray(file.Read()); - let bul = file.Read(); - this._LineData.push({ pt: v, bul: bul }); - } - if (ver > 1) - this._ClosedMark = file.Read(); - // 某些时候会画出这样的多段线 尚未知道是为什么画出的 - // if (this._LineData.length === 0) - // this.Erase(); - } - //对象将自身数据写入到文件. - WriteFile(file) { - super.WriteFile(file); - file.Write(2); - file.Write(this._LineData.length); - for (let l of this._LineData) { - file.Write(l.pt.toArray()); - file.Write(l.bul); - } - file.Write(this._ClosedMark); - } -}; -exports.Polyline = Polyline_1 = __decorate([ - Factory -], exports.Polyline); -const TempPolyline = new exports.Polyline(); - /** * 相交延伸选项. * @@ -9489,6 +4464,1136 @@ function IntersectEllipse(el1, el2, type) { return intPts; } +var ExtendType; +(function (ExtendType) { + /** + * 前后都不延伸 + */ + ExtendType[ExtendType["None"] = 0] = "None"; + /** + * 只允许延伸前面 + */ + ExtendType[ExtendType["Front"] = 1] = "Front"; + /** + * 只允许延伸后面 + */ + ExtendType[ExtendType["Back"] = 2] = "Back"; + /** + * 前后延伸 + */ + ExtendType[ExtendType["Both"] = 3] = "Both"; +})(ExtendType || (ExtendType = {})); +/** + * 曲线的基类,子类请实现以下方法. + */ +let Curve = class Curve extends Entity { + constructor() { + super(); + this._RoomName = ""; + this._CabinetName = ""; + //------------------绘制相关------------------ + //重载 + this.OnlyRenderType = true; + } + get RoomName() { return this._RoomName; } + set RoomName(value) { + if (value === this._RoomName) + return; + this.WriteAllObjectRecord(); + this._RoomName = value; + } + get CabinetName() { return this._CabinetName; } + set CabinetName(value) { + if (value === this._CabinetName) + return; + this.WriteAllObjectRecord(); + this._CabinetName = value; + } + get Is2D() { + return equaln$1(this._Matrix.elements[14], 0); + } + get StartPoint() { return; } + set StartPoint(v) { return; } + get StartParam() { return; } + get EndPoint() { return; } + set EndPoint(v) { return; } + /** 曲线中点 */ + get Midpoint() { + return this.GetPointAtParam(this.MidParam); + } + get MidParam() { + if (this.EndParam === 1) + return 0.5; + else + return this.GetParamAtDist(this.Length * 0.5); + } + get EndParam() { return; } + get Area() { return 0; } + /** + *获得曲线的面积,逆时针为正,顺时针为负. + */ + get Area2() { return 0; } + get Length() { return 0; } + get IsClose() { return false; } + /** 曲线为顺时针 */ + get IsClockWise() { return this.Area2 < 0; } + get Shape() { throw "未实现"; } + GetPointAtParam(param) { return; } + GetPointAtDistance(distance) { return; } + GetDistAtParam(param) { return; } + GetDistAtPoint(pt) { return; } + GetParamAtPoint(pt, fuzz = 1e-6) { return; } + //直接提供点在线上的参数,不管点有没有在线上 + GetParamAtPoint2(pt, fuzz = 1e-6) { return this.GetParamAtPoint(pt, fuzz); } + GetParamAtDist(d) { return; } + /** + * 返回曲线在指定位置的一阶导数(在wcs内) + * @param {(number | Vector3)} param + */ + GetFirstDeriv(param) { return; } + GetFirstDerivAngle(param) { + let d = this.GetFirstDeriv(param); + return Math.atan2(d.y, d.x); + } + /** + * 返回切割曲线后的结果.总是从起点开始切割,并且按顺序返回曲线. + * @param {(number[] | number)} param + */ + GetSplitCurves(param) { return; } + //未完善 + GetCurveAtParamRange(startParam, EndParam) { return; } + GetSplitCurvesByPts(pt) { + let pts = Array.isArray(pt) ? pt : [pt]; + let pars = pts.map(p => this.GetParamAtPoint(p)); + return this.GetSplitCurves(pars); + } + SplitParamSort(param) { + if (Array.isArray(param)) { + param = param.filter(p => this.ParamOnCurve(p)); + if (param.length === 0) + return []; + param.push(0, this.EndParam); + arraySortByNumber$1(param); + arrayRemoveDuplicateBySort(param, (e1, e2) => equaln$1(e1, e2, 1e-7)); + return param; + } + else if (this.ParamOnCurve(param)) + return [0, param, this.EndParam]; + else + return []; + } + Extend(newParam) { } + /** + * 连接曲线到本曲线,如果成功返回true + * @param {Curve} cu 需要连接的曲线 + * @returns {boolean} 连接成功 + * @memberof Curve + */ + Join(cu, allowGap = false, tolerance = 1e-4) { return exports.Status.False; } + //翻转曲线.首尾调换. + Reverse() { return this; } + //点在曲线上 + PtOnCurve(pt, fuzz = 1e-5) { + return equalv3(this.StartPoint, pt, fuzz) || equalv3(this.EndPoint, pt, fuzz) || this.ParamOnCurve(this.GetParamAtPoint(pt, fuzz)); + } + //点在曲线中,不在起点或者终点. + PtOnCurve2(pt) { + return !(equalv3(this.StartPoint, pt, 1e-6) || equalv3(this.EndPoint, pt, 1e-6)) && this.ParamOnCurve(this.GetParamAtPoint(pt), 0); + } + //点在曲线上,已经确定点在曲线的延伸线上 + PtOnCurve3(p, fuzz = 1e-6) { + return this.PtOnCurve(p, fuzz); + } + //参数在曲线上 容差,1e-6 + ParamOnCurve(param, fuzz = 1e-6) { return !isNaN(param) && param >= -fuzz && param <= this.EndParam + fuzz; } + /** + * 偏移曲线 + * @param offsetDist 左边负数 右边正数 + * @returns 返回偏移后的曲线 可能返回多条曲线 + */ + GetOffsetCurves(offsetDist) { return; } + GetClosestPointTo(pt, extend) { return; } + /** + * 曲线相交点 + */ + IntersectWith(curve, intType, tolerance = 1e-6) { + return this.IntersectWith2(curve, intType, tolerance).map(r => r.pt); + } + /** + * 曲线相交点和点的参数 + */ + IntersectWith2(curve, intType, tolerance = 1e-6) { return []; } + /** + * 拽托点个数 + */ + GetDragPointCount(drag) { return 0; } + //样条线重载了这个,得到了更高的绘制精度 + GetDrawCount() { return 30; } + /** + * @param {RenderType} [renderType=RenderType.Wireframe] + */ + InitDrawObject(renderType = RenderType.Wireframe) { + let pts = this.Shape.getPoints(this.GetDrawCount()); + if (pts.length === 0) + pts.push(new three.Vector3); + if (renderType === RenderType.WireframePrint) { + let array = []; + for (let p of pts) + array.push(p.x, p.y, 0); + let geometry = new LineGeometry.LineGeometry().setPositions(array); + return new Line2.Line2(geometry, ColorMaterial.PrintLineMatrial); + } + let geo = new three.BufferGeometry().setFromPoints(pts); + return new three.Line(geo, ColorMaterial.GetLineMaterial(this.DrawColorIndex)); + } + /** + * 重载:更新绘制的实体 + * @param {RenderType} type + * @param {Object3D} obj + */ + UpdateDrawObject(type, obj) { + let pts = this.Shape.getPoints(this.GetDrawCount()); + let plObj = obj; + let geo = plObj.geometry; + if (geo instanceof LineGeometry.LineGeometry) { + let array = []; + for (let p of pts) + array.push(p.x, p.y, 0); + geo.setPositions(array); + } + else { + //@ts-ignore + for (let p of pts) + p.z = 0; + if (!BufferGeometryUtils.UpdatePts(geo, pts)) + updateGeometry(plObj, new three.BufferGeometry().setFromPoints(pts)); + } + } + /** + * 重载:更新实体材质 + */ + UpdateDrawObjectMaterial(type, obj, material) { + if (type === RenderType.WireframePrint) ; + else { + let m = obj; + m.material = material || ColorMaterial.GetLineMaterial(this.DrawColorIndex); + } + } + UpdateJigMaterial(color = 8) { + for (let [type, obj] of this._CacheDrawObject) { + this.UpdateDrawObjectMaterial(type, obj, ColorMaterial.GetLineMaterial(color)); + } + } + ReadRoomAndCabinetName(file) { + this._RoomName = file.Read(); + this._CabinetName = file.Read(); + } + WriteRoomAndCabinetName(file) { + file.Write(this._RoomName); + file.Write(this._CabinetName); + } +}; +Curve = __decorate([ + Factory +], Curve); + +class Matrix2 { + constructor() { + //column-major + this.el = [1, 0, 0, 1]; //ix iy jx jy [a c b d] + } + set(ix, iy, jx, jy) { + this.el[0] = ix; + this.el[1] = iy; + this.el[2] = jx; + this.el[3] = jy; + return this; + } + applyVector(vec) { + let x = vec.x; + let y = vec.y; + let e = this.el; + vec.x = e[0] * x + e[2] * y; + vec.y = e[1] * x + e[3] * y; + return this; + } + fromMatrix4(mtx4) { + this.set(mtx4.elements[0], mtx4.elements[1], mtx4.elements[3], mtx4.elements[4]); + } + setRotate(theta) { + let c = Math.cos(theta); + let s = Math.sin(theta); + this.set(c, s, -s, c); + return this; + } + //自我求逆矩阵,返回自身 + invert() { + //ref:https://www.mathsisfun.com/algebra/matrix-inverse.html + let [a, c, b, d] = this.el; + let det = 1 / (a * d - b * c); + this.set(d * det, -c * det, -b * det, a * det); + return this; + } +} + +class PlaneExt extends three.Plane { + constructor(normal = new three.Vector3(0, 0, 1), constant) { + super(normal); + if (typeof constant === "number") + this.constant = constant; + else if (constant) + this.parseConstantFromPoint(constant); + } + parseConstantFromPoint(constant) { + this.constant = -this.normal.dot(constant); + } + intersectLine(line, optionalTarget = new three.Vector3(), extendLine = false) { + let v1 = new three.Vector3(); + let direction = line.delta(v1); + let denominator = this.normal.dot(direction); + if (denominator === 0) { + // line is coplanar, return origin + if (this.distanceToPoint(line.start) === 0) { + return optionalTarget.copy(line.start); + } + // Unsure if this is the correct method to handle this case. + return undefined; + } + let t = -(line.start.dot(this.normal) + this.constant) / denominator; + //If you not extendLine,check intersect point in Line + if (!extendLine && (t < -1e-6 || t > 1)) { + return undefined; + } + return optionalTarget.copy(direction).multiplyScalar(t).add(line.start); + } + intersectRay(ray, optionalTarget, extendLine) { + // 从射线初始位置 + let line = new three.Line3(ray.origin.clone(), ray.origin.clone().add(ray.direction)); + return this.intersectLine(line, optionalTarget, extendLine); + } +} + +const ROTATE_MTX2 = new Matrix2().set(0, -1, 1, 0); + +var Line_1; +exports.Line = Line_1 = class Line extends Curve { + constructor(_StartPoint = new three.Vector3, _EndPoint = new three.Vector3) { + super(); + this._StartPoint = _StartPoint; + this._EndPoint = _EndPoint; + } + get Is2D() { + return super.Is2D && equaln$1(this._StartPoint.z, 0) && equaln$1(this._EndPoint.z, 0); + } + get Shape() { + return new three.Shape([AsVector2(this._StartPoint), AsVector2(this._EndPoint)]); + } + Z0() { + this.WriteAllObjectRecord(); + let ocsInv = this.OCSInv; + let sp = this.StartPoint.setZ(0).applyMatrix4(ocsInv); + let ep = this.EndPoint.setZ(0).applyMatrix4(ocsInv); + this._StartPoint.copy(sp); + this._EndPoint.copy(ep); + this.Update(); + return this; + } + ApplyScaleMatrix(m) { + this.WriteAllObjectRecord(); + this.StartPoint = this.StartPoint.applyMatrix4(m); + this.EndPoint = this.EndPoint.applyMatrix4(m); + return this; + } + ApplyMirrorMatrix(m) { + this.WriteAllObjectRecord(); + let sp = this.StartPoint; + let ep = this.EndPoint; + reviseMirrorMatrix(this._Matrix); + this.StartPoint = sp; + this.EndPoint = ep; + return this; + } + InitDrawObject(renderType = RenderType.Wireframe) { + let pts = [this._StartPoint, this._EndPoint]; + if (renderType === RenderType.WireframePrint) { + let array = []; + for (let p of pts) + array.push(p.x, p.y, p.z); + let geometry = new LineGeometry.LineGeometry().setPositions(array); + return new Line2.Line2(geometry, ColorMaterial.PrintLineMatrial); + } + let geo = new three.BufferGeometry().setFromPoints(pts); + return new three.Line(geo, ColorMaterial.GetLineMaterial(this.DrawColorIndex)); + } + /** + * 重载:更新绘制的实体 + * @param {RenderType} type + * @param {Object3D} obj + */ + UpdateDrawObject(type, obj) { + let pts = [this._StartPoint, this._EndPoint]; + let plObj = obj; + let geo = plObj.geometry; + if (geo instanceof LineGeometry.LineGeometry) { + let array = []; + for (let p of pts) + array.push(p.x, p.y, p.z); + geo.setPositions(array); + } + else { + if (!BufferGeometryUtils.UpdatePts(geo, pts)) + updateGeometry(plObj, new three.BufferGeometry().setFromPoints(pts)); + } + } + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + switch (snapMode) { + case ObjectSnapMode.End: + return [this.StartPoint, this.EndPoint]; + case ObjectSnapMode.Mid: + return [this.GetPointAtParam(0.5)]; + case ObjectSnapMode.Nea: + { + let derv = this.GetFirstDeriv(0).normalize(); + let viewNormal = new three.Vector3().fromArray(viewXform.elements, 2 * 3); + //平行不捕捉 + if (isParallelTo(viewNormal, derv)) + return []; + let fNormal = new three.Vector3().crossVectors(viewNormal, derv); + fNormal.crossVectors(derv, fNormal); + let plane = new PlaneExt(fNormal, this.StartPoint); + let plocal = plane.intersectLine(new three.Line3(pickPoint, pickPoint.clone().add(viewNormal)), new three.Vector3(), true); + let pclosest = this.GetClosestPointTo(plocal, false); + return [pclosest]; + } + case ObjectSnapMode.Ext: + return [this.GetClosestPointTo(pickPoint, true)]; + case ObjectSnapMode.Per: + if (lastPoint) { + let { closestPt, param } = this.GetClosestAtPoint(lastPoint, true); + if (this.ParamOnCurve(param)) + return [closestPt]; + } + } + return []; + } + GetGripPoints() { + return [this.StartPoint, this.GetPointAtParam(0.5), this.EndPoint]; + } + MoveGripPoints(indexList, vec) { + this.WriteAllObjectRecord(); + for (let index of indexList) { + if (index === 0) + this.StartPoint = this.StartPoint.add(vec); + else if (index === 2) + this.EndPoint = this.EndPoint.add(vec); + else { + let m = MoveMatrix(vec); + this.ApplyMatrix(m); + } + } + } + GetStretchPoints() { + return [this.StartPoint, this.EndPoint]; + } + MoveStretchPoints(indexList, vec) { + this.WriteAllObjectRecord(); + for (let index of indexList) { + if (index === 0) + this.StartPoint = this.StartPoint.add(vec); + else + this.EndPoint = this.EndPoint.add(vec); + } + } + GetFirstDeriv(param) { + return this.EndPoint.sub(this.StartPoint); + } + /** + * 需要注意的是,平行线和共线无交点 + * @param curve + * @param intType + * @param [tolerance=1e-4] + * @returns + */ + IntersectWith2(curve, intType, tolerance = 1e-4) { + if (curve instanceof Line_1 || curve.constructor.name === "RoomWallLine") { + return IntersectLineAndLine(this, curve, intType, tolerance); + } + if (curve instanceof exports.Arc || curve.constructor.name === "RoomWallArc") { + return IntersectLineAndArc(this, curve, intType, tolerance); + } + if (curve instanceof exports.Circle) { + return IntersectLineAndCircle(this, curve, intType, tolerance); + } + if (curve instanceof exports.Polyline) { + return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType), tolerance)); + } + if (curve instanceof Ellipse) + return IntersectEllipseAndLine(this, curve, intType, tolerance); + //其他的尚未实现. + return []; + } + //Param + GetPointAtParam(param) { + return this.StartPoint.add(this.GetFirstDeriv(0).multiplyScalar(param)); + } + GetParamAtPoint(pt, fuzz = 1e-5) { + let { closestPt, param } = this.GetClosestAtPoint(pt, true); + if (!equalv3(closestPt, pt, fuzz)) + return NaN; + return param; + } + GetParamAtDist(d) { + return d / this.Length; + } + GetPointAtDistance(distance) { + return this.GetPointAtParam(this.GetParamAtDist(distance)); + } + GetDistAtParam(param) { + return this.Length * param; + } + GetDistAtPoint(pt) { + return this.GetDistAtParam(this.GetParamAtPoint(pt)); + } + GetSplitCurves(param) { + let params = this.SplitParamSort(param); + let pts = params.map(param => this.GetPointAtParam(param)); + let ret = new Array(); + if (pts.length >= 2) { + for (let i = 0; i < pts.length - 1; i++) { + let newLine = this.Clone(); + newLine.ColorIndex = this.ColorIndex; + newLine.SetStartEndPoint(pts[i], pts[i + 1]); + ret.push(newLine); + } + } + return ret; + } + GetParamAtPoint2(pt) { + let { param } = this.GetClosestAtPoint(pt, true); + return param; + } + //点在曲线上,已经确定点在曲线的延伸线上 + PtOnCurve3(p, fuzz = 1e-6) { + let { param } = this.GetClosestAtPoint(p, true); + return this.ParamOnCurve(param, fuzz); + } + GetClosestAtPoint(pt, extend) { + let sp = this.StartPoint; + let ep = this.EndPoint; + if (equalv3(pt, sp, 1e-8)) + return { closestPt: sp, param: 0 }; + else if (equalv3(pt, ep, 1e-8)) + return { closestPt: ep, param: 1 }; + let direction = this.GetFirstDeriv(0); + let length = direction.length(); + if (length === 0) { + let param = NaN; + if (equalv3(pt, this.StartPoint, 1e-6)) + param = 0; + return { closestPt: sp, param: param }; + } + direction.divideScalar(length); + let diff = pt.clone().sub(sp); + let param = direction.dot(diff); + let closestPt; + if (extend) + closestPt = sp.add(direction.multiplyScalar(param)); + else if (param < 0) { + closestPt = sp; + param = 0; + } + else if (param > length) { + closestPt = this.EndPoint; + param = length; + } + else + closestPt = sp.add(direction.multiplyScalar(param)); + return { + closestPt: closestPt, + param: param / length + }; + } + GetClosestPointTo(pt, extend) { + return this.GetClosestAtPoint(pt, extend).closestPt; + } + Extend(newParam) { + this.WriteAllObjectRecord(); + if (newParam < this.StartParam) { + this.StartPoint = this.GetPointAtParam(newParam); + } + else if (newParam > this.EndParam) { + this.EndPoint = this.GetPointAtParam(newParam); + } + } + Join(cu, allowGap = false, tolerance = 1e-5) { + if (cu instanceof Line_1 || cu.constructor.name === "RoomWallLine") { + //平行 + if (!isParallelTo(this.GetFirstDeriv(0).normalize(), cu.GetFirstDeriv(0).normalize())) + return exports.Status.False; + let sp = cu.StartPoint; + let { closestPt: cp1, param: param1 } = this.GetClosestAtPoint(sp, true); + if (!equalv3(sp, cp1, tolerance)) //点在曲线上,允许较低的精度 + return exports.Status.False; + let ep = cu.EndPoint; + let { closestPt: cp2, param: param2 } = this.GetClosestAtPoint(ep, true); + if (!equalv3(ep, cp2, tolerance)) + return exports.Status.False; + if (param1 > param2) { + [param1, param2] = [param2, param1]; + [sp, ep] = [ep, sp]; + } + if (allowGap || Math.max(0, param1) < Math.min(1, param2) + tolerance / this.Length) //这里的容差是值容差,但是我们用它来判断参数,所以进行转换 + { + if (param1 < 0) + this.StartPoint = sp; + if (param2 > 1) + this.EndPoint = ep; + return exports.Status.True; + } + } + return exports.Status.False; + } + Reverse() { + this.WriteAllObjectRecord(); + [this._StartPoint, this._EndPoint] = [this._EndPoint, this._StartPoint]; + return this; + } + GetOffsetCurves(offsetDist) { + let offset = this._EndPoint.clone().sub(this._StartPoint).normalize().multiplyScalar(offsetDist); + ROTATE_MTX2.applyVector(offset); + let newLine = this.Clone(); + newLine.ClearDraw(); + newLine._StartPoint.add(offset); + newLine._EndPoint.add(offset); + return [newLine]; + } + get BoundingBox() { + return new three.Box3().setFromPoints([this.StartPoint, this.EndPoint]); + } + /** + * 返回对象在自身坐标系下的Box + */ + get BoundingBoxInOCS() { + return new Box3Ext().setFromPoints([this._StartPoint, this._EndPoint]); + } + get StartParam() { + return 0; + } + get EndParam() { + return 1; + } + //属性 + get Length() { return this._StartPoint.distanceTo(this._EndPoint); } + //#region -----------------------------File----------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + _ReadFile(file) { + super._ReadFile(file); + let ver = file.Read(); //1 + this._StartPoint.fromArray(file.Read()); + this._EndPoint.fromArray(file.Read()); + if (ver > 1) + this.ReadRoomAndCabinetName(file); + } + //对象将自身数据写入到文件. + WriteFile(file) { + super.WriteFile(file); + file.Write(2); //ver + file.Write(this._StartPoint.toArray()); + file.Write(this._EndPoint.toArray()); + this.WriteRoomAndCabinetName(file); + } + //#endregion-----------------------------File End----------------------------- + //#region 属性 + set StartPoint(p) { + this.WriteAllObjectRecord(); + this._StartPoint.copy(p).applyMatrix4(this.OCSInv); + this.Update(); + } + get StartPoint() { + return this._StartPoint.clone().applyMatrix4(this.OCSNoClone); + } + get StartPointInOcs() { return this._StartPoint.clone(); } + get EndPointInOcs() { return this._EndPoint.clone(); } + get EndPoint() { + return this._EndPoint.clone().applyMatrix4(this.OCSNoClone); + } + set EndPoint(p) { + this.WriteAllObjectRecord(); + this._EndPoint.copy(p).applyMatrix4(this.OCSInv); + this.Update(); + } + SetStartEndPoint(s, e) { + this.WriteAllObjectRecord(); + let inv = this.OCSInv; + this._StartPoint.copy(s).applyMatrix4(inv); + this._EndPoint.copy(e).applyMatrix4(inv); + this.Update(); + } +}; +exports.Line = Line_1 = __decorate([ + Factory +], exports.Line); + +var Ellipse_1; +let Ellipse = Ellipse_1 = class Ellipse extends Curve { + constructor(center, radX = 1e-3, radY = 1e-3, angle = 0) { + super(); + this._startAngle = 0; + this._endAngle = Math.PI * 2; + center && this._Matrix.setPosition(center); + this._radX = radX; + this._radY = radY; + this._rotate = angle; + } + get StartParam() { + return 0; + } + get EndParam() { + return 1; + } + get StartPoint() { + return this.GetPointAtParam(0); + } + get EndPoint() { + return this.GetPointAtParam(1); + } + get Shape() { + let sp = new three.Shape(); + sp.ellipse(0, 0, this._radX, this._radY, this._startAngle, this._endAngle, false, this._rotate); + return sp; + } + get IsClose() { + return equaln$1(this.TotalAngle, Math.PI * 2); + } + get Center() { + return new three.Vector3().setFromMatrixPosition(this._Matrix); + } + set Center(v) { + this.WriteAllObjectRecord(); + this._Matrix.setPosition(v); + this.Update(); + } + get RadX() { + return this._radX; + } + set RadX(v) { + this.WriteAllObjectRecord(); + this._radX = v; + this.Update(); + } + get RadY() { + return this._radY; + } + set RadY(v) { + this.WriteAllObjectRecord(); + this._radY = v; + this.Update(); + } + get Rotation() { + return this._rotate; + } + set Rotation(v) { + this.WriteAllObjectRecord(); + this._rotate = v; + this.Update(); + } + get StartAngle() { + return this._startAngle; + } + get EndAngle() { + return this._endAngle; + } + set StartAngle(v) { + this.WriteAllObjectRecord(); + this._startAngle = v; + this.Update(); + } + set EndAngle(v) { + this.WriteAllObjectRecord(); + this._endAngle = v; + this.Update(); + } + get Length() { + let a = this._radX; + let b = this._radY; + return Math.PI * Math.abs(3 * (a + b) - Math.sqrt((3 * a + b) * (a + 3 * b))) * this.TotalAngle / Math.PI * 0.5; + } + get Area() { + let area = Math.PI * this._radX * this._radY; + let an = this._endAngle - this._startAngle; + if (an < 0) + an = Math.PI * 2 + an; + area *= an / Math.PI * 0.5; + let area2 = Math.abs(getDeterminantFor2V(AsVector2(this.StartPoint.sub(this.Center)), AsVector2(this.EndPoint.sub(this.Center)))) / 2; + if (an < Math.PI) + area -= area2; + else + area += area2; + return area; + } + get TotalAngle() { + let totolAngle = this._endAngle - this._startAngle; + if (totolAngle <= 0) + totolAngle = Math.PI * 2 + totolAngle; + return totolAngle; + } + ApplyScaleMatrix(m) { + //或许我们应该在缩放一下轴尺寸 但是先不做了 + let p = this.Position; + p.applyMatrix4(m); + this.Position = p; + return this; + } + Extend(newParam) { + this.WriteAllObjectRecord(); + if (newParam < 0) + this._startAngle = this.GetAngleAtParam(newParam); + else if (newParam > 1) + this._endAngle = this.GetAngleAtParam(newParam); + this.Update(); + } + PtInCurve(pt) { + let p = rotatePoint(pt.clone().sub(this.Center), -this.Rotation); + return p.x ** 2 / this.RadX ** 2 + p.y ** 2 / this.RadY ** 2 < 1; + } + PtOnCurve(pt) { + return this.PtOnEllipse(pt) && this.ParamOnCurve(this.GetParamAtPoint(pt)); + } + PtOnEllipse(pt) { + let p = rotatePoint(pt.clone().applyMatrix4(this.OCSInv), -this.Rotation); + return equaln$1(p.x ** 2 / this.RadX ** 2 + p.y ** 2 / this.RadY ** 2, 1, 1e-3); + } + GetPointAtParam(param) { + let an = this.TotalAngle * param + this._startAngle; + let a = this.RadX; + let b = this.RadY; + let pt = new three.Vector3(a * Math.cos(an), b * Math.sin(an), 0); + let mtx = new Matrix2().setRotate(this._rotate); + mtx.applyVector(pt); + return pt.applyMatrix4(this.OCSNoClone); + } + GetParamAtPoint(pt) { + if (!this.PtOnEllipse(pt)) + return NaN; + let an = this.GetCircleAngleAtPoint(pt); + let allAngle = this.TotalAngle; + let param = an / allAngle; + if (this.IsClose) + return param; + else { + if (an >= this._startAngle) + param = (an - this._startAngle) / allAngle; + else + param = ((Math.PI * 2) - (this._startAngle - an)) / allAngle; + //剩余的参数 + let remParam = Math.PI * 2 / allAngle - 1; + if (param > (remParam * 0.5 + 1)) //一半 + param = (param - 1) - remParam; //返回负数 + return param; + } + } + GetPointAtDistance(distance) { + let param = distance / this.Length; + return this.GetPointAtParam(param); + } + GetDistAtParam(param) { + return this.Length * param; + } + GetDistAtPoint(pt) { + let param = this.GetParamAtPoint(pt); + return this.GetDistAtParam(param); + } + GetParamAtDist(d) { + return d / this.Length; + } + GetAngleAtParam(param) { + return this._startAngle + param * this.TotalAngle; + } + GetCircleAngleAtPoint(pt) { + pt = pt.clone().applyMatrix4(this.OCSInv); + let romtx = new Matrix2().setRotate(-this._rotate); + romtx.applyVector(pt); + //https://www.petercollingridge.co.uk/tutorials/computational-geometry/finding-angle-around-ellipse/ + let an = Math.atan(this.RadX * pt.y / (this.RadY * pt.x)); + if (pt.x < 0) + an += Math.PI; + else if (an < 0) + an += Math.PI * 2; + return an; + } + GetFirstDeriv(pt) { + if (typeof pt === "number") + pt = this.GetPointAtParam(pt); + else + pt = pt.clone(); + let refPts = this.GetGripPoints(); + let p = pt.clone().applyMatrix4(this.OCSInv).applyMatrix4(new three.Matrix4().makeRotationZ(-this._rotate)); + let vec = new three.Vector3(); + if (equalv3(pt, refPts[0])) + vec.set(0, 1, 0); + else if (equalv3(pt, refPts[1])) + vec.set(0, -1, 0); + else if (p.y > 0) { + let k = -(this._radY ** 2 * p.x) / (this._radX ** 2 * p.y); + vec.set(-1, -k, 0); + } + else { + let k = -(this._radY ** 2 * p.x) / (this._radX ** 2 * p.y); + vec.set(1, k, 0); + } + rotatePoint(vec, this._rotate); + return vec.applyMatrix4(this.OCS.setPosition(0, 0, 0)); + } + GetClosestPointTo(p, extend) { + //参考:https://wet-robots.ghost.io/simple-method-for-distance-to-ellipse/ + let ro = new three.Matrix4().makeRotationZ(this._rotate); + let roInv = new three.Matrix4().getInverse(ro); + let pt = p.clone().applyMatrix4(this.OCSInv).setZ(0).applyMatrix4(roInv); + let px = pt.x; + let py = pt.y; + let t = angle(pt); + let a = this._radX; + let b = this._radY; + let x, y; + for (let i = 0; i < 3; i++) { + x = a * Math.cos(t); + y = b * Math.sin(t); + let ex = (a ** 2 - b ** 2) * Math.cos(t) ** 3 / a; + let ey = (b * b - a * a) * Math.sin(t) ** 3 / b; + let rx = x - ex; + let ry = y - ey; + let qx = px - ex; + let qy = py - ey; + let r = Math.sqrt(ry ** 2 + rx ** 2); + let q = Math.sqrt(qy ** 2 + qx ** 2); + let dc = r * Math.asin((rx * qy - ry * qx) / (r * q)); + let dt = dc / Math.sqrt(a * a + b * b - x * x - y * y); + t += dt; + } + let retPt = new three.Vector3(x, y).applyMatrix4(ro).applyMatrix4(this.OCSNoClone); + if (this.IsClose || extend) { + return retPt; + } + else if (this.PtOnCurve(retPt)) { + return retPt; + } + else { + let d1 = p.distanceToSquared(this.StartPoint); + let d2 = p.distanceToSquared(this.EndPoint); + return d1 < d2 ? this.StartPoint : this.EndPoint; + } + } + GetOffsetCurves(offsetDist) { + if ((offsetDist + Math.min(this._radX, this._radY)) > 0) { + let el = this.Clone(); + el.RadX = this._radX + offsetDist; + el.RadY = this._radY + offsetDist; + return [el]; + } + return []; + } + GetSplitCurves(param) { + let params; + if (param instanceof Array) { + params = param.filter(p => this.ParamOnCurve(p)); + params.sort((a1, a2) => a2 - a1); //从大到小 + } + else + params = [param]; + //补上最后一个到第一个的弧 + if (this.IsClose) + params.unshift(arrayLast(params)); + else { + params.unshift(1); + params.push(0); + } + arrayRemoveDuplicateBySort(params); + let anglelist = params.map(param => this.TotalAngle * param + this._startAngle); + let elllist = []; + for (let i = 0; i < anglelist.length - 1; i++) { + let sa = anglelist[i]; + let ea = anglelist[i + 1]; + let el = this.Clone(); + if (!equaln$1(sa, ea, 1e-6)) { + el.StartAngle = ea; + el.EndAngle = equaln$1(sa, 0) ? Math.PI * 2 : sa; + elllist.push(el); + } + } + return elllist; + } + Join(el) { + if (this.IsClose || el.IsClose || !this.IsCoplaneTo(el) || !equalv3(el.Center, this.Center)) + return exports.Status.False; + let status = exports.Status.False; + if (equaln$1(this._endAngle, this._startAngle)) { + this.EndAngle = this._endAngle; + status = exports.Status.True; + } + else if (equaln$1(this._startAngle, el._endAngle)) { + this.StartAngle = el._startAngle; + status = exports.Status.True; + } + if (status === exports.Status.True && !this.IsClose && equaln$1(this._startAngle, this._endAngle)) { + this.StartAngle = 0; + this.EndAngle = Math.PI * 2; + } + return status; + } + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + switch (snapMode) { + case ObjectSnapMode.End: + { + let pts = this.GetGripPoints(); + return pts; + } + case ObjectSnapMode.Cen: + return [this.Center]; + case ObjectSnapMode.Nea: + { + return getArcOrCirNearPts(this, pickPoint, viewXform); + } + case ObjectSnapMode.Per: + if (lastPoint) { + if (equaln$1(lastPoint.distanceToSquared(this.Center), 0, 1e-10)) + return []; + return [this.GetClosestPointTo(lastPoint, false)]; + } + case ObjectSnapMode.Tan: + { + //TODO:过某点获取椭圆全部切点 + if (lastPoint) { + return getTanPtsOnEllipse(); + } + return []; + } + default: + return []; + } + } + IntersectWith2(curve, intType) { + //TODO:优化椭圆和椭圆,椭圆和圆相交 + if (curve instanceof exports.Line) { + return SwapParam(IntersectEllipseAndLine(curve, this, reverseIntersectOption(intType))); + } + else if (curve instanceof exports.Circle || curve instanceof exports.Arc) { + return IntersectEllipseAndCircleOrArc(this, curve, intType); + } + else if (curve instanceof exports.Polyline) { + return SwapParam(IntersectPolylineAndCurve(curve, this, intType)); + } + else if (curve instanceof Ellipse_1) { + return IntersectEllipse(this, curve); + } + else + return []; + } + GetStretchPoints() { + return this.GetGripPoints(); + } + GetGripPoints() { + let tmpMat4 = new three.Matrix4().makeRotationZ(this.Rotation); + let pts = [ + new three.Vector3(this._radX, 0), + new three.Vector3(-this._radX, 0), + new three.Vector3(0, this._radY), + new three.Vector3(0, -this._radY) + ]; + for (let p of pts) + p.applyMatrix4(tmpMat4).applyMatrix4(this.OCSNoClone); + if (!equaln$1(0, this._startAngle)) + pts.push(this.StartPoint); + if (!equaln$1(0, this._endAngle)) + pts.push(this.EndPoint); + pts.push(this.Center); + return pts; + } + MoveStretchPoints(indexList, vec) { + this.ApplyMatrix(MoveMatrix(vec)); + } + MoveGripPoints(indexList, vec) { + let pts = this.GetStretchPoints(); + if (indexList.length > 0) { + let p = pts[indexList[0]].clone(); + p.add(vec); + if (indexList[0] <= 1) + this.RadX = p.distanceTo(this.Center); + else if (indexList[0] <= 3) + this.RadY = p.distanceTo(this.Center); + else { + let p1 = pts[indexList[0]]; + //TODO:跟cad不一致待优化 + if (equalv3(p1, this.StartPoint)) { + let v1 = p1.clone().sub(this.Center); + let v2 = p.clone().sub(this.Center); + let an = angleTo(v1, v2); + this.StartAngle = this.StartAngle + an; + } + else if (equalv3(p1, this.EndPoint)) { + let v1 = p1.clone().sub(this.Center); + let v2 = p.clone().sub(this.Center); + let an = angleTo(v2, v1); + this.EndAngle = this.EndAngle + an; + } + else + this.Center = p; + } + } + } + Convert2Polyline(count = 0) { + const MIN_LEN = 80; + const par = this.TotalAngle / Math.PI * 0.5; + if (!count) { + count = Math.floor(this.Length / par / MIN_LEN); + count = three.MathUtils.clamp(count, 15, 80); + } + count = Math.floor(count * par); + if ((count & 1) === 0) + count++; + let pts = this.Shape.getPoints(count); + if (this.IsClose) + pts.pop(); + //忽略空多段线怎么样? + if (pts.length < 2) { + let pl = new exports.Polyline; + return pl; + } + let pl = Pts2Polyline(pts, this.IsClose); + pl.ColorIndex = this.ColorIndex; + pl.ApplyMatrix(this.OCS); + if (this.IsClose) + pl.CloseMark = true; + return pl; + } + _ReadFile(file) { + super._ReadFile(file); + let ver = file.Read(); + this._radX = file.Read(); + this._radY = file.Read(); + this._rotate = file.Read(); + this._startAngle = file.Read(); + this._endAngle = file.Read(); + if (ver > 1) + this.ReadRoomAndCabinetName(file); + this.Update(); + } + //对象将自身数据写入到文件. + WriteFile(file) { + super.WriteFile(file); + file.Write(2); + file.Write(this.RadX); + file.Write(this.RadY); + file.Write(this.Rotation); + file.Write(this._startAngle); + file.Write(this._endAngle); + this.WriteRoomAndCabinetName(file); + } +}; +Ellipse = Ellipse_1 = __decorate([ + Factory +], Ellipse); + var Arc_1; /** * 圆弧实体类 @@ -9502,6 +5607,7 @@ var Arc_1; exports.Arc = Arc_1 = class Arc extends Curve { constructor(center = ZeroVec, radius = 0.1, startAngle = 0.1, endAngle = 0, clockwise = true) { super(); + this._DisplayAccuracy = 0; /** * 曲线为顺时针 */ @@ -9515,6 +5621,9 @@ exports.Arc = Arc_1 = class Arc extends Curve { get Shape() { let sp = new Shape2(); sp.absarc(0, 0, this._Radius, this._StartAngle, this._EndAngle, this._Clockwise); + if (this._DisplayAccuracy !== 0) { + sp.DisplayAccuracy = this._DisplayAccuracy; + } return sp; } get Center() { @@ -9531,6 +5640,16 @@ exports.Arc = Arc_1 = class Arc extends Curve { SetMtxVector(this._Matrix, 2, v); this.Update(); } + get DisplayAccuracy() { + return this._DisplayAccuracy; + } + set DisplayAccuracy(v) { + if (!equaln$1(v, this._DisplayAccuracy)) { + this.WriteAllObjectRecord(); + this._DisplayAccuracy = v; + this.Update(); + } + } get Area() { return 0.5 * this.AllAngle * this.Radius * this.Radius; } @@ -9682,10 +5801,10 @@ exports.Arc = Arc_1 = class Arc extends Curve { let param = this.GetParamAtPoint(pt); return this.GetDistAtParam(param); } - GetParamAtPoint(pt) { + GetParamAtPoint(pt, fuzz = 1e-6) { if (this._Radius == 0 || this.AllAngle == 0 || - !equaln$1(pt.distanceTo(this.Center), this._Radius, 1e-6)) + !equaln$1(pt.distanceTo(this.Center), this._Radius, fuzz)) return NaN; return this.GetParamAtAngle(this.GetAngleAtPoint(pt)); } @@ -10088,15 +6207,23 @@ exports.Arc = Arc_1 = class Arc extends Curve { this._StartAngle = file.Read(); this._EndAngle = file.Read(); this._Clockwise = file.ReadBool(); + if (ver > 2) { + this._DisplayAccuracy = file.Read(); + } + if (ver > 3) + this.ReadRoomAndCabinetName(file); } //对象将自身数据写入到文件. WriteFile(file) { super.WriteFile(file); - file.Write(2); + file.Write(4); file.Write(this._Radius); file.Write(this._StartAngle); file.Write(this._EndAngle); file.WriteBool(this._Clockwise); + file.Write(this._DisplayAccuracy); + //ver4 + this.WriteRoomAndCabinetName(file); } }; exports.Arc._X = new three.Vector3; @@ -10108,6 +6235,4599 @@ exports.Arc = Arc_1 = __decorate([ Factory ], exports.Arc); +var DragPointType; +(function (DragPointType) { + DragPointType[DragPointType["Grip"] = 0] = "Grip"; + DragPointType[DragPointType["Stretch"] = 1] = "Stretch"; + DragPointType[DragPointType["End"] = 2] = "End"; +})(DragPointType || (DragPointType = {})); + +var Circle_1; +let circleGeometry; +function GetCircleGeometry() { + if (!circleGeometry) + circleGeometry = BufferGeometryUtils.CreateFromPts(new three.EllipseCurve(0, 0, 1, 1, 0, 2 * Math.PI, false, 0).getPoints(360).map(AsVector3)); + return circleGeometry; +} +exports.Circle = Circle_1 = class Circle extends Curve { + constructor(center, radius = 1e-6) { + super(); + this._DisplayAccuracy = 0; + center && this._Matrix.setPosition(center); + this._Radius = radius; + } + get DisplayAccuracy() { + return this._DisplayAccuracy; + } + set DisplayAccuracy(v) { + if (!equaln$1(v, this._DisplayAccuracy)) { + this.WriteAllObjectRecord(); + this._DisplayAccuracy = v; + this.Update(); + } + } + get Shape() { + let sp = new Shape2(); + sp.ellipse(0, 0, this._Radius, this._Radius, 0, 2 * Math.PI, false, 0); + if (this._DisplayAccuracy !== 0) { + sp.DisplayAccuracy = this._DisplayAccuracy; + } + return sp; + } + get Center() { + return new three.Vector3().setFromMatrixPosition(this._Matrix); + } + set Center(v) { + this.WriteAllObjectRecord(); + this._Matrix.setPosition(v); + this.Update(); + } + get Radius() { + return this._Radius; + } + set Radius(v) { + this.WriteAllObjectRecord(); + this._Radius = clamp(v, 1e-9, 1e19); + this.Update(); + } + ApplyScaleMatrix(m) { + this.WriteAllObjectRecord(); + this.Center = this.Center.applyMatrix4(m); + this.Radius = this.Radius * m.getMaxScaleOnAxis(); + return this; + } + ApplyMirrorMatrix(m) { + this.WriteAllObjectRecord(); + reviseMirrorMatrix(this._Matrix); + return this; + } + //******************** Curve function start*****************// + get StartPoint() { + return this.GetPointAtParam(0); + } + get StartParam() { + return 0; + } + get EndPoint() { + return this.GetPointAtParam(0); + } + get EndParam() { + return 1; + } + PtInCurve(pt) { + return pt.distanceToSquared(this.Center) < Math.pow(this.Radius, 2); + } + get Area() { + return Math.PI * this._Radius ** 2; + } + get Area2() { + return Math.PI * this._Radius ** 2; + } + get Length() { + return Math.PI * 2 * this._Radius; + } + get IsClose() { + return true; + } + //曲线为顺时针 + get IsClockWise() { return false; } + GetPointAtParam(param) { + return polar(new three.Vector3(), param * 2 * Math.PI, this._Radius).applyMatrix4(this._Matrix); + } + GetPointAtDistance(distance) { + let param = distance / (Math.PI * 2 * this._Radius); + return this.GetPointAtParam(param); + } + GetDistAtParam(param) { + return Math.PI * 2 * this._Radius * param; + } + GetDistAtPoint(pt) { + let param = this.GetParamAtPoint(pt); + return this.GetDistAtParam(param); + } + GetParamAtDist(d) { + return d / (Math.PI * 2 * this._Radius); + } + GetSplitCurves(param) { + let params; + if (param instanceof Array) { + params = param.filter(p => this.ParamOnCurve(p)); + params.sort((a1, a2) => a2 - a1); //从大到小 + arrayRemoveDuplicateBySort(params); + if (params.length < 2) + return []; + } + else //圆不能被单个参数切割 + return []; + //补上最后一个到第一个的弧 + params.unshift(arrayLast(params)); + let anglelist = params.map(param => Math.PI * 2 * param); + let curvelist = new Array(); + for (let i = 0; i < anglelist.length - 1; i++) { + let sa = anglelist[i]; + let ea = anglelist[i + 1]; + if (!equaln$1(sa, ea, 1e-6)) { + let arc = new exports.Arc(new three.Vector3(), this._Radius, ea, sa, false); + arc.ColorIndex = this.ColorIndex; + arc.ApplyMatrix(this.OCS); + curvelist.push(arc); + } + } + return curvelist; + } + GetParamAtPoint(pt) { + if (!this.PtOnCurve(pt)) + return NaN; + return angle(pt.clone().applyMatrix4(this.OCSInv)) / (Math.PI * 2); + } + PtOnCurve(pt, fuzz = 1e-5) { + return equaln$1(pt.distanceToSquared(this.Center), this._Radius * this._Radius, fuzz); + } + GetOffsetCurves(offsetDist) { + if ((offsetDist + this._Radius) > 0) { + let circle = this.Clone(); + circle.Radius = this._Radius + offsetDist; + return [circle]; + } + return []; + } + IntersectWith2(curve, intType, tolerance = 1e-5) { + if (curve instanceof exports.Arc) { + return IntersectCircleAndArc(this, curve, intType, tolerance); + } + if (curve instanceof exports.Line) { + return SwapParam(IntersectLineAndCircle(curve, this, reverseIntersectOption(intType), tolerance)); + } + if (curve instanceof Circle_1) { + return IntersectCircleAndCircle(this, curve, tolerance); + } + if (curve instanceof Ellipse) { + return SwapParam(IntersectEllipseAndCircleOrArc(curve, this, intType)); + } + if (curve instanceof exports.Polyline) + return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType), tolerance)); + return []; + } + //******************** Curve function end*****************// + get BoundingBoxInOCS() { + return new Box3Ext(new three.Vector3(-this.Radius, -this.Radius), new three.Vector3(this.Radius, this.Radius)); + } + get BoundingBox() { + let z = this.Normal; + let x = new three.Vector3; + let y = new three.Vector3; + Orbit.ComputUpDirection(z, y, x); + let m = new three.Matrix4().makeBasis(x, y, z).setPosition(this.Center); + //使用任意轴坐标系 以便我们正确的对齐世界坐标系 + return this.BoundingBoxInOCS.applyMatrix4(m); + } + InitDrawObject(renderType = RenderType.Wireframe) { + let obj = new three.Object3D(); + let cirGeo = GetCircleGeometry(); + if (renderType === RenderType.WireframePrint) { + let geometry = new LineGeometry.LineGeometry().setPositions(cirGeo.attributes.position.array); + obj.add(new Line2.Line2(geometry, ColorMaterial.PrintLineMatrial)); + } + else { + let line = new three.Line(cirGeo, ColorMaterial.GetLineMaterial(this.DrawColorIndex)); + obj.add(line); + } + this.UpdateDrawObject(renderType, obj); + return obj; + } + UpdateDrawObject(type, obj) { + obj.children[0].scale.set(this._Radius, this._Radius, this._Radius); + obj.children[0].updateMatrix(); + } + UpdateDrawObjectMaterial(type, obj, material) { + if (type === RenderType.WireframePrint) ; + else { + let m = obj.children[0]; + m.material = material ? material : ColorMaterial.GetLineMaterial(this.DrawColorIndex); + return obj; + } + } + GetDragPointCount(drag) { + if (drag === DragPointType.Grip) + return 5; + else + return 1; + } + GetGripPoints() { + let pts = [ + new three.Vector3(), + new three.Vector3(0, this._Radius), + new three.Vector3(0, -this._Radius), + new three.Vector3(-this._Radius, 0), + new three.Vector3(this._Radius, 0), + ]; + let ocs = this.OCS; + pts.forEach(p => p.applyMatrix4(ocs)); + return pts; + } + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + switch (snapMode) { + case ObjectSnapMode.Nea: + { + return getArcOrCirNearPts(this, pickPoint, viewXform); + } + case ObjectSnapMode.Cen: + return [this.Center]; + case ObjectSnapMode.Per: + if (lastPoint) { + if (equaln$1(lastPoint.distanceToSquared(this.Center), 0, 1e-10)) + return []; + let l = new exports.Line(this.Center, lastPoint); + return l.IntersectWith(this, IntersectOption.ExtendBoth); + } + case ObjectSnapMode.Tan: + let pts = GetTanPtsOnArcOrCircle(this, lastPoint); + if (pts) + return pts; + break; + case ObjectSnapMode.End: + { + let pts = this.GetGripPoints(); + pts.shift(); + return pts; + } + } + return []; + } + MoveGripPoints(indexList, vec) { + let pts = this.GetGripPoints(); + if (indexList.length > 0) { + let index = indexList[0]; + let p = pts[index]; + if (p) { + if (index > 0) { + p.add(vec); + this.Radius = p.distanceTo(this.Center); + } + else { + this.Center = this.Center.add(vec); + } + } + } + } + GetStretchPoints() { + let pts = [new three.Vector3()]; + let ocs = this.OCS; + pts.forEach(p => p.applyMatrix4(ocs)); + return pts; + } + MoveStretchPoints(indexList, vec) { + if (indexList.length > 0) { + let mat = MoveMatrix(vec); + this.ApplyMatrix(mat); + } + } + GetFirstDeriv(pt) { + if (typeof pt === "number") + pt = this.GetPointAtParam(pt); + else + pt = pt.clone(); + pt.applyMatrix4(this.OCSInv); + let an = angle(pt) + Math.PI * 0.5; + return polar(new three.Vector3(), an, 1).applyMatrix4(new three.Matrix4().extractRotation(this.OCS)); + } + GetClosestPointTo(pt, extend) { + pt = pt.clone().applyMatrix4(this.OCSInv); + if (equalv2(pt, ZeroVec, 1e-8)) + return this.GetPointAtParam(0); + let a = Math.atan2(pt.y, pt.x); + return polar(new three.Vector3, a, this._Radius).applyMatrix4(this._Matrix); + } + //#region -------------------------File------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + _ReadFile(file) { + super._ReadFile(file); + let ver = file.Read(); + this._Radius = file.Read(); + if (ver > 1) + this.ReadRoomAndCabinetName(file); + } + //对象将自身数据写入到文件. + WriteFile(file) { + super.WriteFile(file); + file.Write(2); + file.Write(this._Radius); + this.WriteRoomAndCabinetName(file); + } +}; +exports.Circle = Circle_1 = __decorate([ + Factory +], exports.Circle); + +const ARC_DRAW_CONFIG = { + ARC_SplitLength: 0.4, //圆的分段长度 + ARC_RADIUS_MIN: 2.5, //大于半径25的自动优化成36等分圆 保证绘制光滑 + Arc_MinSplitCount: 8, //圆的最小分段个数 + ARC_MaxSplitCount: 90, //圆的最大分段个数 +}; +function GetArcDrawCount(arc) { + let radius = typeof arc === "number" ? arc : arc.Radius; + let splitCount = radius / ARC_DRAW_CONFIG.ARC_SplitLength; + //保证是偶数(避免奇数和Shape2计算方式一致导致的干涉) + splitCount = clamp(Math.floor(splitCount * 0.5) * 2, ARC_DRAW_CONFIG.Arc_MinSplitCount, ARC_DRAW_CONFIG.ARC_MaxSplitCount); + if (radius > ARC_DRAW_CONFIG.ARC_RADIUS_MIN) + splitCount = Math.max(36, splitCount); + return splitCount; +} +/** + * + * @param cu + */ +function SplitCurveParams(cu) { + let xparams = []; + if (cu instanceof exports.Circle) { + let splitCount = GetArcDrawCount(cu); + if (cu.DisplayAccuracy > 0) + splitCount = cu.DisplayAccuracy; + for (let i = 0; i < splitCount; i++) + xparams.push(i / splitCount); + } + else + //分段1 + for (let i = 0; i < cu.EndParam; i++) { + xparams.push(i); + if (!equaln$1(cu.GetBulgeAt(i), 0, BUL_IS_LINE_FUZZ)) // is arc + { + let arc = cu.GetCurveAtIndex(i); + let splitCount = GetArcDrawCount(arc); + if (splitCount === 0) + continue; + let a = Math.PI * 2 / splitCount; + let params = []; + for (let j = 0; j < splitCount; j++) { + let param = arc.GetParamAtAngle(a * j); + if (arc.ParamOnCurve(param)) + params.push(param); + } + arraySortByNumber$1(params); + if (params.length === 0) + continue; + for (let p of params) { + if (p > 1e-5 && p < 0.99999) + xparams.push(p + i); + } + } + } + xparams.push(cu.EndParam); + return xparams; +} + +let tempArc; +class Shape2 extends three.Shape { + constructor() { + super(...arguments); + this._DisplayAccuracy = 0; + } + get DisplayAccuracy() { + return this._DisplayAccuracy; + } + set DisplayAccuracy(v) { + if (!equaln$1(v, this._DisplayAccuracy)) + this._DisplayAccuracy = v; + } + getPoints(divisions = 12, optimizeArc = true) { + let points = [], last; + for (let i = 0, curves = this.curves; i < curves.length; i++) { + let curve = curves[i]; + let resolution = divisions; + //@ts-ignore + if (curve && curve.isEllipseCurve) { + if (optimizeArc) { + if (!tempArc) + tempArc = new exports.Arc; + else + tempArc.ClearDraw(); + tempArc.IsClockWise = curve.aClockwise; + tempArc.StartAngle = curve.aStartAngle; + tempArc.EndAngle = curve.aEndAngle; + tempArc.Radius = Math.abs(curve.xRadius); + //根据圆的半径来确定绘制个数(与SplitCurveParams一致) + let splitCount = GetArcDrawCount(tempArc); + if (this._DisplayAccuracy > 0) { + splitCount = this._DisplayAccuracy; + } + resolution = Math.max(1, Math.ceil(Math.abs((tempArc.AllAngle * 0.5) / Math.PI) * splitCount * 0.5)) * 2; + } + else + resolution = divisions * 2; + } + else { + //@ts-ignore + resolution = (curve && (curve.isLineCurve || curve.isLineCurve3)) ? 1 + //@ts-ignore + : (curve && curve.isSplineCurve) ? divisions * curve.points.length + : divisions; + } + let pts = curve.getPoints(resolution); + for (let j = 0; j < pts.length; j++) { + let point = pts[j]; + if (last && equalv2(last, point, 1e-4)) + continue; // ensures no consecutive points are duplicates + points.push(point); + last = point; + if (j === pts.length - 1) + point["_mask_"] = true; + } + } + if (this.autoClose + && points.length > 1 + && !points[points.length - 1].equals(points[0])) { + points.push(points[0]); + } + return points; + } + absellipse(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation) { + let curve = new three.EllipseCurve(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation); + /* + if (this.curves.length > 0) + { + // if a previous curve is present, attempt to join + let firstPoint = curve.getPoint(0); + if (!equalv2(firstPoint, this.currentPoint)) + { + this.lineTo(firstPoint.x, firstPoint.y); + } + } + */ + this.curves.push(curve); + let lastPoint = curve.getPoint(1); + this.currentPoint.copy(lastPoint); + return this; + } +} + +//解析二维圆弧 +class Arc2d { + constructor(p1, p2, bul) { + p1 = p1.clone(); + p2 = p2.clone(); + //a (* 2 (atan b)) + let a = Math.atan(bul) * 2; + //r (/ (distance p1 p2) 2 (sin a)) + let r = p1.distanceTo(p2) / 2 / Math.sin(a); + //c (polar p1 (+ (- (/ pi 2) a) (angle p1 p2)) r) + let c = polar(p1.clone(), Math.PI / 2 - a + angle(p2.clone().sub(p1)), r); + this._Radius = Math.abs(r); + this._StartAn = angle(p1.sub(c)); + this._EndAn = angle(p2.sub(c)); + this._Center = c; + } +} +//创建轮廓 通过点表和凸度 +function CreatePolylinePath(pts, buls, displayAccuracy = 0) { + let shape = new Shape2(); + shape.DisplayAccuracy = displayAccuracy; + if (pts.length === 0) + return shape; + let firstPt = pts[0]; + shape.moveTo(firstPt.x, firstPt.y); + for (let i = 0; i < pts.length - 1; i++) { + let prePt = pts[i]; + let nextPt = pts[i + 1]; + if (equaln$1(buls[i], 0, 1e-8) || equalv2(prePt, nextPt, 1e-2)) { + shape.lineTo(nextPt.x, nextPt.y); + } + else { + //参考 + //http://www.dorodnic.com/blog/tag/three-js/ 绘制一个齿轮 + //https://www.kirupa.com/html5/drawing_circles_canvas.htm //html5 + let arc2 = new Arc2d(prePt, nextPt, buls[i]); + let cen = arc2._Center; + shape.absarc(cen.x, cen.y, arc2._Radius, arc2._StartAn, arc2._EndAn, buls[i] < 0); + } + } + return shape; +} + +/* +功能:判断线段是否存在交点 +ref:https://www.geeksforgeeks.org/check-if-two-given-line-segments-intersect/ +*/ +// Given three colinear points p, q, r, the function checks if +// point q lies on line segment 'pr' +function onSegment(p, q, r) { + if (q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && + q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y)) + return true; + return false; +} +// To find orientation of ordered triplet (p, q, r). +// The function returns following values +// 0 --> p, q and r are colinear +// 1 --> Clockwise +// 2 --> Counterclockwise +function orientation(p, q, r) { + // See https://www.geeksforgeeks.org/orientation-3-ordered-points/ + // for details of below formula. + let val = (q.y - p.y) * (r.x - q.x) - + (q.x - p.x) * (r.y - q.y); + if (val === 0) + return 0; // colinear + return (val > 0) ? 1 : 2; // clock or counterclock wise +} +/** + * 判断线段`p1q1`和线段`p2q2`是否相交. + */ +function doIntersect(p1, q1, p2, q2) { + // Find the four orientations needed for general and + // special cases + let o1 = orientation(p1, q1, p2); + let o2 = orientation(p1, q1, q2); + let o3 = orientation(p2, q2, p1); + let o4 = orientation(p2, q2, q1); + // General case + if (o1 !== o2 && o3 !== o4) + return true; + // Special Cases + // p1, q1 and p2 are colinear and p2 lies on segment p1q1 + if (o1 === 0 && onSegment(p1, p2, q1)) + return true; + // p1, q1 and q2 are colinear and q2 lies on segment p1q1 + if (o2 === 0 && onSegment(p1, q2, q1)) + return true; + // p2, q2 and p1 are colinear and p1 lies on segment p2q2 + if (o3 === 0 && onSegment(p2, p1, q2)) + return true; + // p2, q2 and q1 are colinear and q1 lies on segment p2q2 + if (o4 === 0 && onSegment(p2, q1, q2)) + return true; + return false; // Doesn't fall in any of the above cases +} + +function SplineConver2Polyline(spl, tolerance = 0.1) { + let cu = spl.Shape; + let cacheParam = new Map(); + let cacheTange = new Map(); + const GetPointAtParam = (param) => { + let p = cacheParam.get(param); + if (p) + return p; + p = cu.getPoint(param); + cacheParam.set(param, p); + return p; + }; + const GetTangentAtParam = (param) => { + let t = cacheTange.get(param); + if (t) + return t; + if (equaln$1(param, 1)) { + if (spl.CloseMark) + t = cu.getPoint(1e-4).sub(GetPointAtParam(param)).normalize(); + else + t = GetPointAtParam(param).clone().sub(cu.getPoint(1 - 1e-4)).normalize(); + } + else + t = cu.getPoint(param + 1e-4).sub(GetPointAtParam(param)).normalize(); + cacheTange.set(param, t); + return t; + }; + let count = spl.EndParam; + let stepx = 1 / count; + let curves = []; + for (let i = 0; i < 1;) { + let step = 0.25 * stepx; //0.5的时候也可以有不错的收敛,但是在0.25的时候会有比较贴合的效果 + while (true) { + let param1 = i; + let param2 = Math.min(1, i + step); + let x = param2 - param1; + let midp1 = GetPointAtParam(param1 + x * 0.25); + let midp2 = GetPointAtParam(param1 + x * 0.75); + let p1 = GetPointAtParam(param1); + let p2 = GetPointAtParam(param2); + let t1 = GetTangentAtParam(param1); + let t2 = GetTangentAtParam(param2); + let [c1, c2] = ComputeBiarc(p1, p2, t1, t2); + // TestDraw(new Point(midp1)); + // TestDraw(new Point(midp2)); + // TestDraw(new Point(c1.GetPointAtParam(0.5))); + // TestDraw(new Point(c2.GetPointAtParam(0.5))); + if (c1.GetClosestPointTo(midp1, false).distanceTo(midp1) < tolerance && + c2.GetClosestPointTo(midp2, false).distanceTo(midp2) < tolerance) { + curves.push(c1, c2); + break; + } + else + step = step * 0.5; + } + i += step; + } + let polyline = exports.Polyline.Combine(curves, 1e-3); + polyline.ApplyMatrix(spl.OCSNoClone); + polyline.ColorIndex = spl.ColorIndex; + return polyline; +} +//传入的一定是碎点,不是碎点,没有6个点请不要进来 +function PointsSimplify2Polyline(pts, tolerance = 0.1) { + let tolSq = tolerance * tolerance; + let cacheTange = new Map(); + let ptsCount = pts.length; + const GetIndexAtParam = (param) => { + if (param === 1) + return pts.length - 1; + return Math.floor(ptsCount * param); + }; + const GetPointAtParam = (param) => { + return pts[GetIndexAtParam(param)]; + }; + const GetTangentAtParam = (param) => { + let t = cacheTange.get(param); + if (t) + return t; + let index = Math.floor(ptsCount * param); + if (equaln$1(param, 1) || index + 1 >= pts.length) + t = arrayLast(pts).clone().sub(pts[pts.length - 1]).normalize(); + else + t = pts[index + 1].clone().sub(pts[index]).normalize(); + cacheTange.set(param, t); + return t; + }; + let stepx = 1; + let curves = []; + for (let i = 0; i < 1;) { + let step = 0.25 * stepx; //0.5的时候也可以有不错的收敛,但是在0.25的时候会有比较贴合的效果 + while (true) { + let param1 = i; + let param2 = Math.min(1, i + step); + let index1 = GetIndexAtParam(param1); + let index2 = GetIndexAtParam(param2); + if ((index2 - index1) < 4) //当点个数等于4时,我们计算双圆弧插值必然成功.(但是也失去了意义) + { + if (index2 - index1 > 0) { + let lineD = []; + for (let i = index1; i <= index2; i++) + lineD.push({ pt: AsVector2(pts[i]), bul: 0 }); + curves.push(new exports.Polyline(lineD)); + } + break; + } + let x = param2 - param1; + let midp1 = GetPointAtParam(param1 + x * 0.25); + let midp2 = GetPointAtParam(param1 + x * 0.75); + let p1 = pts[index1]; + let p2 = pts[index2]; + let t1 = GetTangentAtParam(param1); + let t2 = GetTangentAtParam(param2); + let [c1, c2] = ComputeBiarc(p1, p2, t1, t2); + if (c1.GetClosestPointTo(midp1, false).distanceToSquared(midp1) < tolSq && + c2.GetClosestPointTo(midp2, false).distanceToSquared(midp2) < tolSq) { + curves.push(c1, c2); + break; + } + else + step = step * 0.5; + } + i += step; + } + let polyline = exports.Polyline.Combine(curves, 1e-3); + return polyline; +} +/** + * 将碎点简化为多段线,(尝试转换为简单圆弧,或者使用双圆弧插值) + * @param pts 点表 + * @param [tolerance=0.1] 容差 + * @param [parseArc=true] 解析成简单圆弧 + * @param [lineLengthSq=2000] + * @returns 多段线 + */ +function PointsSimplify2PolylineAndParseArc(pts, buls = undefined, tolerance = 0.1, parseArc = true, lineLengthSq = 2000) { + let tolSq = tolerance * tolerance; + let ptsCount = pts.length; + const CreateLineOrArc = (startIndex, endIndex) => { + if (!buls || equaln$1(buls[startIndex], 0, 1e-4)) + return new exports.Line(AsVector3(pts[startIndex]), AsVector3(pts[endIndex])); + else + return new exports.Arc().ParseFromBul(AsVector3(pts[startIndex]), AsVector3(pts[endIndex]), buls[startIndex]); + }; + let retPolyline = new exports.Polyline; + let start = 0; + for (let next = start + 1; next <= ptsCount; next++) { + if (next === ptsCount || pts[next].distanceToSquared(pts[next - 1]) > lineLengthSq || (buls && !equaln$1(buls[next - 1], 0, 1e-4))) //长度大于50,我们才认为它是一条直线 + { + //1.将start->next-1部分组成圆弧 + if (parseArc || (next - start) < 6) + while (start < next - 1) { + if ((next - 1) - start === 1) //直线 + { + retPolyline.Join(CreateLineOrArc(start, next - 1)); + break; + } + //第一个三角形的方向 + let firstDir = orientation(pts[start], pts[start + 1], pts[start + 2]); + let to = start; + for (; to + 3 < next; to++) { + let dir = orientation(pts[to + 1], pts[to + 2], pts[to + 3]); + if (dir !== firstDir) + break; + } + if (start === to) //三个点 + { + retPolyline.Join(CreateLineOrArc(start, start + 1)); + retPolyline.Join(CreateLineOrArc(start + 1, start + 2)); + start = to + 2; + continue; + } + else if ((to - start) < 3) { + retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, to + 2 + 1).map(AsVector3))); + } + else { + let sp = pts[start]; + let ep = pts[to + 2]; + let mp = pts[Math.floor((start + to + 2) / 2)]; + let arc = new exports.Arc().FromThreePoint(AsVector3(sp), AsVector3(mp), AsVector3(ep)); + let c = to + 2 - start; + let p1 = AsVector3(pts[start + Math.floor(c * 0.25)]); + let p2 = AsVector3(pts[start + Math.floor(c * 0.75)]); + if (arc.GetClosestPointTo(p1, false).distanceToSquared(p1) < tolSq + && arc.GetClosestPointTo(p2, false).distanceToSquared(p2) < tolSq) + retPolyline.Join(arc); + else + retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, to + 2 + 1).map(AsVector3))); + } + start = to + 2; //闪烁到圆弧终点 + if (start === next - 2) { + retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, next).map(AsVector3))); + start = next; + break; + } + } + else + retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, next).map(AsVector3))); + //2.加入直线 + if (next !== ptsCount) + retPolyline.Join(CreateLineOrArc(next - 1, next)); + start = next; + } + } + return retPolyline; +} +function SmartPointsSimply2Polyline(pts, buls = undefined, tolerance = 0.1, lineLengthSq = 2000) { + let pl1 = PointsSimplify2PolylineAndParseArc(pts, buls, tolerance, true, lineLengthSq); + let pl2 = PointsSimplify2PolylineAndParseArc(pts, buls, tolerance, false, lineLengthSq); + if (pl1.EndParam < pl2.EndParam) + return pl1; + else + return pl2; +} +/** + * 简化多段线,返回结果比较好的多段线 + * @param pl + * @param [tolerance=0.1] + * @param [lineLengthSq=2000] + * @returns 返回undefined时,简化失败 + */ +function SmartPolylineSimply2Polyline(pl, tolerance = 0.1, lineLengthSq = 2000) { + if (pl.EndParam < 3) + return; + let ld = pl.LineData; + let pts = [ld[0].pt]; + let buls = [ld[0].bul]; + let prep = pts[0]; + for (let i = 1; i < ld.length; i++) { + let d = ld[i]; + let p = d.pt; + if (!equalv2(p, prep, 1e-3)) { + pts.push(p); + buls.push(d.bul); + prep = p; + } + } + if (pl.CloseMark && !equalv2(pts[0], arrayLast(pts))) + pts.push(pts[0].clone()); + let npl = SmartPointsSimply2Polyline(pts, pl.LineData.map(p => p.bul), tolerance, lineLengthSq); + npl.ApplyMatrix(pl.OCSNoClone); + npl.ColorIndex = pl.ColorIndex; + return npl; +} +//types +function Vec2(x, y) { + this.x = x; + this.y = y; +} +let c_Epsilon = 0.0001; +// math functions +function Sqr(val) { + return val * val; +} +function IsEqualEps(lhs, rhs) { + return Math.abs(lhs - rhs) <= c_Epsilon; +} +function Vec2_Add(lhs, rhs) { + return new Vec2(lhs.x + rhs.x, lhs.y + rhs.y); +} +function Vec2_Sub(lhs, rhs) { + return new Vec2(lhs.x - rhs.x, lhs.y - rhs.y); +} +function Vec2_Scale(lhs, scale) { + return new Vec2(lhs.x * scale, lhs.y * scale); +} +function Vec2_AddScaled(lhs, rhs, scale) { + return new Vec2(lhs.x + rhs.x * scale, lhs.y + rhs.y * scale); +} +function Vec2_Dot(lhs, rhs) { + return lhs.x * rhs.x + lhs.y * rhs.y; +} +function Vec2_MagSqr(val) { + return val.x * val.x + val.y * val.y; +} +function CreateArcFromEdge(p1, t1, p2, fromP1) { + let chord = Vec2_Sub(p2, p1); + let n1 = new Vec2(-t1.y, t1.x); + let chordDotN1 = Vec2_Dot(chord, n1); + if (IsEqualEps(chordDotN1, 0)) + return new exports.Line(AsVector3(p1), AsVector3(p2)); + else { + let radius = Vec2_MagSqr(chord) / (2 * chordDotN1); + let center = Vec2_AddScaled(p1, n1, radius); + let p1Offset = Vec2_Sub(p1, center); + let p2Offset = Vec2_Sub(p2, center); + let p1Ang1 = Math.atan2(p1Offset.y, p1Offset.x); + let p2Ang1 = Math.atan2(p2Offset.y, p2Offset.x); + if (p1Offset.x * t1.y - p1Offset.y * t1.x > 0) + return new exports.Arc(AsVector3(center), Math.abs(radius), p1Ang1, p2Ang1, !fromP1); + else + return new exports.Arc(AsVector3(center), Math.abs(radius), p1Ang1, p2Ang1, fromP1); + } +} +/** + * 计算双圆弧插值的圆弧 + * @param p1 起点 + * @param p2 终点 + * @param t1 起点切线 + * @param t2 终点切线 + * @returns 两个圆弧(或者其中一个是直线) + */ +function ComputeBiarc(p1, p2, t1, t2) { + let v = Vec2_Sub(p2, p1); + let vMagSqr = Vec2_MagSqr(v); + let vDotT1 = Vec2_Dot(v, t1); + { + let t = Vec2_Add(t1, t2); + let tMagSqr = Vec2_MagSqr(t); + let equalTangents = IsEqualEps(tMagSqr, 4.0); + let perpT1 = IsEqualEps(vDotT1, 0.0); + if (equalTangents && perpT1) //2个半圆 + { + let angle = Math.atan2(v.y, v.x); + let center1 = Vec2_AddScaled(p1, v, 0.25); + let center2 = Vec2_AddScaled(p1, v, 0.75); + let radius = Math.sqrt(vMagSqr) * 0.25; + let cross = v.x * t1.y - v.y * t1.x; + return [ + new exports.Arc(AsVector3(center1), radius, angle, angle + Math.PI, cross < 0), + new exports.Arc(AsVector3(center2), radius, angle, angle + Math.PI, cross > 0) + ]; + } + else { + let vDotT = Vec2_Dot(v, t); + let d1; + if (equalTangents) + d1 = vMagSqr / (4 * vDotT1); + else { + let denominator = 2 - 2 * Vec2_Dot(t1, t2); + let discriminant = Sqr(vDotT) + denominator * vMagSqr; + d1 = (Math.sqrt(discriminant) - vDotT) / denominator; + } + let joint = Vec2_Scale(Vec2_Sub(t1, t2), d1); + joint = Vec2_Add(joint, p1); + joint = Vec2_Add(joint, p2); + joint = Vec2_Scale(joint, 0.5); + return [ + CreateArcFromEdge(p1, t1, joint, true), + CreateArcFromEdge(p2, t2, joint, false) + ]; + } + } +} + +var Spline_1; +const DrawSplitCount = 120; +let Spline = Spline_1 = class Spline extends Curve { + constructor(_PointList = []) { + super(); + this._PointList = _PointList; + this._ClosedMark = false; + } + get Shape() { + return new three.CatmullRomCurve3(this.Points, this._ClosedMark); + } + get Length() { + //TODO:这个的性能挺低的(因为还需要重新获取一遍点表(如果我们有绘制对象,应该用绘制对象的点表来计算长度)) + return this.Shape.getLength(); + } + get Points() { + return this._PointList; + } + set Points(pts) { + if (pts.length < 2) + return; + this.WriteAllObjectRecord(); + let ocsInv = this.OCSInv; + this._PointList = pts.map(p => p.clone().applyMatrix4(ocsInv)); + if (pts.length > 2 && equalv3(this._PointList[0], arrayLast(this._PointList), 1e-3)) { + this._PointList.pop(); + this._ClosedMark = true; + } + this.Update(); + } + //闭合标志 + get CloseMark() { + return this._ClosedMark; + } + //曲线是否闭合 + get IsClose() { + return this.CloseMark || (equalv3(this.StartPoint, this.EndPoint, 1e-4)) && this.EndParam > 1; + } + set CloseMark(v) { + if (this._ClosedMark === v) + return; + this.WriteAllObjectRecord(); + this._ClosedMark = v; + this.Update(); + } + get StartPoint() { + return this._PointList[0].clone().applyMatrix4(this.OCSNoClone); + } + get EndPoint() { + return arrayLast(this._PointList).clone().applyMatrix4(this.OCSNoClone); + } + get StartParam() { + return 0; + } + get EndParam() { + return this._ClosedMark ? this._PointList.length : this._PointList.length - 1; + } + GetPointAtParam(param) { + const endParam = this.EndParam; + if (param < 0) { + const p1 = this.StartPoint; + const derv = this.GetFirstDeriv(0.1); + return p1.add(derv.multiplyScalar(param / endParam * this.Length)); + } + if (param > endParam) { + const p2 = this.EndPoint; + const derv = this.GetFirstDeriv(endParam); + return p2.add(derv.multiplyScalar((param - endParam) / endParam * this.Length)); + } + return this.Shape.getPoint(param / endParam).applyMatrix4(this.OCSNoClone); + } + GetFirstDeriv(param) { + if (param instanceof three.Vector3) + param = this.GetParamAtPoint(param); + return this.GetPointAtParam(param).sub(this.GetPointAtParam(param - 0.1)).normalize(); + } + GetClosestPointTo(pt, extend) { + return this.Convert2Polyline().GetClosestPointTo(pt, extend); + } + GetOffsetCurves(offsetDist) { + if (offsetDist === 0) + return []; + let pld = this._PointList.map(p => { + return { pt: AsVector2(p), bul: 0 }; + }); + let pl = new exports.Polyline(pld); + let pls = pl.GetOffsetCurves(offsetDist); + return pls.map(pl => { + let pts = pl.LineData.map(p => AsVector3(p.pt)); + let spl = new Spline_1(pts); + spl.OCS = this._Matrix; + spl._ClosedMark = this._ClosedMark; + return spl; + }); + } + GetGripPoints() { + return this._PointList.map(p => p.clone().applyMatrix4(this.OCSNoClone)); + } + GetStretchPoints() { + return this.GetGripPoints(); + } + MoveGripPoints(indexList, vec) { + vec = TransformVector(vec.clone(), this.OCSInv).setZ(0); + if (equalv3(vec, ZeroVec)) + return; + this.WriteAllObjectRecord(); + for (let index of indexList) + this._PointList[index].add(vec); + this.Update(); + } + MoveStretchPoints(indexList, vec) { + vec = TransformVector(vec.clone(), this.OCSInv).setZ(0); + if (equalv3(vec, ZeroVec)) + return; + this.WriteAllObjectRecord(); + for (let index of indexList) + this._PointList[index].add(vec); + this.Update(); + } + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + switch (snapMode) { + case ObjectSnapMode.End: + return this.GetStretchPoints(); + case ObjectSnapMode.Mid: + case ObjectSnapMode.Nea: + case ObjectSnapMode.Ext: + case ObjectSnapMode.Cen: + case ObjectSnapMode.Per: + case ObjectSnapMode.Tan: + } + return []; + } + GetDrawCount() { + return this.EndParam * DrawSplitCount; + } + Convert2Polyline() { + return SplineConver2Polyline(this); + } + _ReadFile(file) { + super._ReadFile(file); + let ver = file.Read(); //1 + let count = file.Read(); + this._PointList.length = 0; + for (let i = 0; i < count; i++) + this._PointList.push(new three.Vector3().fromArray(file.Read())); + if (ver > 1) + this._ClosedMark = file.Read(); + if (ver > 2) + this.ReadRoomAndCabinetName(file); + } + WriteFile(file) { + super.WriteFile(file); + file.Write(3); //ver + file.Write(this._PointList.length); + this._PointList.forEach(p => file.Write(p.toArray())); + file.Write(this._ClosedMark); + this.WriteRoomAndCabinetName(file); + } +}; +Spline = Spline_1 = __decorate([ + Factory +], Spline); + +/** + * 简化优化版本的曲线求交, 优化版本可以参考(算法导论33.2 确定任意一对线段是否相交 p599) + */ +class CurveIntersection { + /** + * @param {Curve[]} cus 请注意数组的顺序会被更改,如果你在意数组的顺序,请拷贝数组后传进来 + * @memberof CurveIntersection + */ + constructor(cus, parseIntersectionParam = false, intType = IntersectOption.ExtendNone, fuzz = 1e-6, parseRecord = false) { + this.fuzz = fuzz; + //用来缓存的曲线包围盒 + this.boxMap = new Map(); + /** + * 交点数据集,key 为曲线 value 为和它相交的(曲线和交点的Map) + */ + this.intersect = new Map(); + //交点参数集 + this.intersect2 = new Map(); + this.intersect3 = []; + this.GenBox(cus); + //按x排序 + this.SortCurve(cus); + let count = cus.length; + for (let i = 0; i < count; i++) { + let c1 = cus[i]; + let c1d = this.GetIntersect(c1); + let c1b = this.boxMap.get(c1); + for (let j = i + 1; j < count; j++) { + let c2 = cus[j]; + //过滤掉不需要计算的曲线 + let c2b = this.boxMap.get(c2); + if (c2b.min.x - c1b.max.x > fuzz) + break; + if (c2b.min.y - c1b.max.y > fuzz) + continue; + let ints = this.IntersectWith2(c1, c2, intType, fuzz); + if (ints.length > 0) { + let pts = ints.map(i => i.pt); + c1d.set(c2, pts); + this.GetIntersect(c2).set(c1, pts); + if (parseRecord) + this.intersect3.push([c1, c2, pts]); + if (parseIntersectionParam) { + this.AppendIntersectionParams(c1, ints.map(i => [i.thisParam, i.pt])); + this.AppendIntersectionParams(c2, ints.map(i => [i.argParam, i.pt])); + } + } + } + } + } + IntersectWith2(c1, c2, intType, fuzz) { + return c1.IntersectWith2(c2, intType, fuzz); + } + AppendIntersectionParams(curve, params) { + let arr = this.intersect2.get(curve); + if (!arr) { + arr = []; + this.intersect2.set(curve, arr); + } + arrayPushArray$1(arr, params); + } + GenBox(cus) { + for (let c of cus) + this.boxMap.set(c, c.BoundingBox); + } + SortCurve(cus) { + cus.sort((c1, c2) => { + return this.boxMap.get(c1).min.x - this.boxMap.get(c2).min.x; + }); + } + GetIntersect(cu) { + if (this.intersect.has(cu)) + return this.intersect.get(cu); + let m = new Map(); + this.intersect.set(cu, m); + return m; + } +} +class CurveIntersection2 extends CurveIntersection { + /** + * Curve2Polyline使用这个时,为了避免多余的交点导致曲线切割过度,过滤掉无关的点 + */ + IntersectWith2(c1, c2, intType) { + let pts = c1.IntersectWith2(c2, intType); + return pts.filter(p => { + let inC1 = c1.ParamOnCurve(p.thisParam) || (p.thisParam < 0 ? c1.StartPoint.distanceTo(p.pt) < this.fuzz : c1.EndPoint.distanceTo(p.pt) < this.fuzz); + if (!inC1) + return false; + let inC2 = c2.ParamOnCurve(p.argParam) || (p.argParam < 0 ? c2.StartPoint.distanceTo(p.pt) < this.fuzz : c2.EndPoint.distanceTo(p.pt) < this.fuzz); + return inC2; + }); + } +} + +/** + * 曲线连接图 + * 所有的顶点和边的关系 + */ +class CurveMap { + constructor(numdimensions = 4, _RemoveSortLine = false, multiplier = 10 ** numdimensions) { + this.numdimensions = numdimensions; + this._RemoveSortLine = _RemoveSortLine; + this.multiplier = multiplier; + /* + 节点图. + 每个节点对应下一个路口的路线表. + 路口表使用逆时针排序,起始角度使用正x轴. + */ + this._VerticeMap = new Map(); + this._Vertices = []; + this._LookupTable = {}; + } + /** + * 得到节点图的所有站点列表 + */ + get Stands() { + return this._Vertices; + } + /** + * @param curve + * @param [isArc=curve instanceof Arc] + * @param [removeDuplicate=false] + * @returns 加入成功? + */ + AddCurveToMap(curve, isArc = curve instanceof exports.Arc, removeDuplicate = false, parseAngle = false) { + let sp = curve.StartPoint; + let ep = curve.EndPoint; + let startS = this.GetOnlyVertice(sp); + let endS = this.GetOnlyVertice(ep); + //在面域分析中,路线指向同一个顶点已经没有意义了 + if (this._RemoveSortLine && startS === endS) + return false; + if (removeDuplicate) //删除重复 + { + let index = startS.routes.findIndex(r => { + if (r.to === endS && r.curve.constructor.name === curve.constructor.name) { + if (isArc) + return equalv3(curve.GetPointAtParam(0.5), r.curve.GetPointAtParam(0.5)); + return true; + } + }); + if (index !== -1) + return false; + } + let length = curve.Length; + curve.TempData = 0; + let routeS2E = { curve, isReverse: false, length, from: startS, to: endS, s: sp, e: ep }; + let routeE2S = { curve, isReverse: true, length, from: endS, to: startS, e: sp, s: ep }; + if (!isArc && parseAngle) { + let an = angle(endS.position.clone().sub(startS.position)); + routeS2E.an = an; + routeE2S.an = clampRad(an + Math.PI); + } + startS.routes.push(routeS2E); + endS.routes.push(routeE2S); + return true; + } + /** + * 获得唯一的顶点 + */ + GetOnlyVertice(p) { + let gp = this.GenerateP(p); + if (this._VerticeMap.has(gp)) + return this._VerticeMap.get(gp); + let vertice = { position: gp, routes: [] }; + this._VerticeMap.set(p, vertice); + this._Vertices.push(vertice); + return vertice; + } + /** + * 生成一个唯一的向量. + */ + GenerateP(p) { + let key = ""; + let els = p.toArray(); + for (let n of els) { + let valueQuantized = Math.round(n * this.multiplier); + key += valueQuantized + '/'; + } + if (key in this._LookupTable) + return this._LookupTable[key]; + let hashparts = els.map((el) => { + let q0 = Math.floor(el * this.multiplier); + let q1 = q0 + 1; + return ['' + q0 + '/', '' + q1 + '/']; + }); + let numelements = els.length; + let numhashes = 1 << numelements; + for (let hashmask = 0; hashmask < numhashes; ++hashmask) { + let hashmaskShifted = hashmask; + key = ''; + for (let hashpart of hashparts) { + key += hashpart[hashmaskShifted & 1]; + hashmaskShifted >>= 1; + } + this._LookupTable[key] = p; + } + return p; + } +} + +const _overlap_ = "_overlap_"; +/** +面域分析,基于最小循环图重新实现的版本,拓展了实现求最大轮廓。 +当最大轮廓=最小轮廓时,只绘制最大轮廓(独立轮廓无分裂)。 + +算法只实现去重模式,业务场景应该没有非去重模式。 +如果需要非去重模式,那么应该获取到多个CurveMap,然后对多个CurveMap进行面域分析,得出多个重叠的面域。 + */ +class RegionParse { + /** + * @param cuList 请不要传递圆和椭圆. + * @param [numDimensions=3] 精度:小数点后个数 + * @param [removeDuplicate=true] 删除重复(现在必须是true,请不要修改它) + */ + constructor(cuList, numDimensions = 3, removeDuplicate = true) { + this.numDimensions = numDimensions; + this.removeDuplicate = removeDuplicate; + //区域列表 通常是外轮廓 + this.RegionsOutline = []; //外轮廓和内轮廓重叠时,只有外轮廓有数据,可以使用RegionParse.RegionsIsOverlap来取得 + //区域列表 通常是内轮廓 + this.RegionsInternal = []; + //碎线 曲线进入到这里会被炸开. + this.ExpLineMap = new Map(); + //需要搜索的站 + let vertices = this.GenerateVerticeMap(cuList); + //移除细丝 + while (true) { + let v = vertices.find(v => v.routes.length < 2); + if (v) + this.RemoveFilamentAt(v, vertices); + else + break; + } + let lowerVertice; + while (vertices.length > 0) { + lowerVertice = lowerVertice?.routes.length > 1 ? lowerVertice : this.FindLowerLeftStand(vertices); + let minWalk = ClosedWalkFrom(lowerVertice, this._CurveCount, WalkType.Min); + let maxWalk = ClosedWalkFrom(lowerVertice, this._CurveCount, WalkType.Max); + this.RemoveEdge(minWalk[0]); + this.RemoveFilamentAt(minWalk[0].from, vertices); + this.RemoveFilamentAt(minWalk[0].to, vertices); + minWalk = ReduceWalk(minWalk); + maxWalk = ReduceWalk(maxWalk); + if (maxWalk.length > 1) { + this.RegionsOutline.push(maxWalk); + if (minWalk.length === maxWalk.length && minWalk.every((w1, index) => w1 === maxWalk[index])) //大小重叠 + { + //直接remove,不用计算引用个数 + for (let w of minWalk) { + w.curve.TempData = 2; + this.RemoveEdge(w); + this.RemoveFilamentAt(w.from, vertices); + this.RemoveFilamentAt(w.to, vertices); + } + maxWalk[_overlap_] = true; + continue; //继续循环 + } + else + for (let w of maxWalk) + w.curve.TempData = 1; + } + if (minWalk.length > 1) // && minWalk.every(w => (w.curve.TempData) < 2) 没有重复线应该不会被用2次 + { + this.RegionsInternal.push(minWalk); + for (let w of minWalk) { + w.curve.TempData++; + if (w.curve.TempData === 2) { + this.RemoveEdge(w); + this.RemoveFilamentAt(w.from, vertices); + this.RemoveFilamentAt(w.to, vertices); + } + } + } + } + } + //大小圈重叠 + static RegionsIsOverlap(Route) { + return Boolean(Route[_overlap_]); + } + RemoveFilamentAt(v, vertices) { + let current = v; + while (current && current.routes.length < 2) { + vertices = arrayRemoveOnce(vertices, current); + let r = current.routes[0]; + if (r) { + this.RemoveEdge(r); + current = r.to; + } + else + current = undefined; + } + } + RemoveEdge(r) { + let index = r.from.routes.findIndex(rr => rr.curve === r.curve); + if (index !== -1) + r.from.routes.splice(index, 1); + index = r.to.routes.findIndex(rr => rr.curve === r.curve); + if (index !== -1) + r.to.routes.splice(index, 1); + } + /** + * 找到最下方并且最左边的站 yx + */ + FindLowerLeftStand(vertices) { + return vertices.reduce((m, v) => { + let dy = v.position.y - m.position.y; + if (dy < 0) + return v; + if (dy > 0) + return m; + return v.position.x - m.position.x < 0 ? v : m; + }); + } + /** + * 构造路线图. 每个节点对应下一个路口的路线表. 路口表使用逆时针排序,起始角度使用正x轴. + * @returns 所有的顶点 + */ + GenerateVerticeMap(curveList) { + let curveMap = new CurveMap(this.numDimensions, true); + //将多段线炸开 + let plcus = []; + arrayRemoveIf(curveList, c => { + if (c instanceof exports.Polyline) { + let cus = c.Explode(); + //如果为圆弧,提前打断 + let arcs = []; + arrayRemoveIf(cus, c => { + if (c.Length < 1e-5) + return true; + if (c instanceof exports.Arc) { + let arcBrs = this.BreakArc(c); + for (let arc of arcBrs) + arcs.push(arc); + return true; + } + return false; + }); + //加入到计算 + cus.push(...arcs); + this.ExpLineMap.set(c, cus); + plcus.push(...cus); + return true; + } + return false; + }); + curveList.push(...plcus); + this._CurveCount = curveList.length; + for (let cu of curveList) { + //由于圆弧可能导致最低点计算错误的问题. + if (cu instanceof exports.Arc) { + let arcs = this.BreakArc(cu); + if (arcs.length > 1) { + arcs.forEach(a => curveMap.AddCurveToMap(a, true, this.removeDuplicate, true)); + this.ExpLineMap.set(cu, arcs); + continue; + } + else + curveMap.AddCurveToMap(cu, true, this.removeDuplicate, true); + } + else + curveMap.AddCurveToMap(cu, false, this.removeDuplicate, true); + } + //排序,根据角度逆时针排序. + for (let v of curveMap._Vertices) { + let minLength = Infinity; + for (let r of v.routes) + if (r.length < minLength) + minLength = r.length; + for (let r of v.routes) + CalcRouteAngle(r, minLength * 0.2); + v.routes.sort((r1, r2) => r1.an - r2.an); + } + return curveMap.Stands; + } + BreakArc(arc) { + let underPt = arc.Center.add(new three.Vector3(0, -arc.Radius)); + let param = arc.GetParamAtPoint(underPt); + if (param > 1e-4 && param < 0.9999) + return arc.GetSplitCurves(param); + else + return [arc]; + } + /** + * 曲线是否已经被算法使用 + */ + GetCueveUsed(cu) { + if (this.ExpLineMap.has(cu)) { + let use = this.ExpLineMap.get(cu).some(c => c.TempData > 0); + if (!use) + this.ExpLineMap.delete(cu); + return use; + } + else + return cu.TempData > 0; + } +} +function CalcRouteAngle(r, length) { + if (r.an !== undefined) + return; + let cu = r.curve; + let p = r.isReverse ? + cu.GetPointAtParam(cu.GetParamAtDist(r.length - length)) + : cu.GetPointAtParam(cu.GetParamAtDist(length)); + r.an = angle(p.sub(r.from.position)); +} +var WalkType; +(function (WalkType) { + WalkType[WalkType["Min"] = 1] = "Min"; + WalkType[WalkType["Max"] = -1] = "Max"; +})(WalkType || (WalkType = {})); +function ClosedWalkFrom(startVertice, maxRoute, type = WalkType.Min) { + let walk = []; + let curVertice = startVertice; + let preRoute; + // console.log("start", type, startVertice.position.toArray()); + do { + let route = GetNextRoute(curVertice, preRoute, type); + if (type === WalkType.Max && route.curve.TempData > 0) + return []; + // console.log(route.to.position.toArray()); + walk.push(route); + [curVertice, preRoute] = [route.to, route]; + if (walk.length > maxRoute * 2) + throw "超过计算次数限制"; + } while (curVertice !== startVertice); + return walk; +} +/** + * 删除中途回路 + */ +function ReduceWalk(w) { + if (w.length === 0) + return w; + //未构成回路,直接回家 + if (w[0].curve === arrayLast(w).curve) + return []; + for (let i = 0; i < w.length; i++) { + let r1 = w[i]; + for (let j = w.length; j--;) { + if (i === j) + break; + let r2 = w[j]; + if (r1.to === r2.to) { + if (j > i) + w.splice(i + 1, j - i); + break; + } + } + } + return w; +} +function GetNextRoute(v, prev, type = WalkType.Min) { + if (!prev) + return arrayLast(v.routes); //顺时针 cw \|/ 从左往右 + //逆时针 ccw 往左 + let index = v.routes.findIndex(r => r.curve === prev.curve); + let newIndex = FixIndex$1(index + 1 * type, v.routes); + return v.routes[newIndex]; +} + +/** + * 某些时候我们不能创建轮廓,此时我们使用类似c2r的方法来构建一个外部轮廓. + */ +function CreateContours(curves, fuzz = 1e-4) { + let contours = []; + let extendsMinDistSq = fuzz * fuzz; + //炸开多段线(防止自交多段线) + let newCurves = []; + for (let cu of curves) { + if (cu instanceof exports.Circle) + contours.push(Contour.CreateContour(cu.Clone())); //避免将原始曲线传递给板,导致撤销这个圆失败 + else if (cu instanceof exports.Polyline) + arrayPushArray$1(newCurves, cu.Explode()); + else if (cu instanceof Spline) { + let pl = cu.Convert2Polyline(); + if (pl.IsClose) + contours.push(Contour.CreateContour(pl, false)); + else + newCurves.push(pl); + } + else if (cu instanceof Ellipse) + Contour.CreateContour(cu.Convert2Polyline(), false); + else + newCurves.push(cu); + } + let intersect = new CurveIntersection2(newCurves, false, IntersectOption.ExtendBoth, fuzz); + let curves2 = []; + //延伸+打断 + for (let [cu, pmap] of intersect.intersect) { + let sp = cu.StartPoint; + let ep = cu.EndPoint; + let epExtend; + let epDist = Infinity; + let spExtend; + let spDist = Infinity; + let isClose = cu.IsClose; + let ipts = []; + for (let [, pts] of pmap) { + arrayPushArray$1(ipts, pts); + if (!isClose) + for (let p of pts) { + let d = p.distanceToSquared(ep); + if (d < epDist) { + epDist = d; + epExtend = p; + } + d = p.distanceToSquared(sp); + if (d < spDist) { + spDist = d; + spExtend = p; + } + } + } + if (!isClose) { + //延伸 + if (epDist > 0 && epDist < extendsMinDistSq) { + let param = cu.GetParamAtPoint(epExtend); + if (param > cu.EndParam) + cu.Extend(param); + } + if (spDist > 0 && spDist < extendsMinDistSq) { + let param = cu.GetParamAtPoint(spExtend); + if (param < 0) + cu.Extend(param); + } + } + //打断 + let curves; + if (ipts.length > 0) + curves = cu.GetSplitCurvesByPts(ipts); + else + curves = [cu]; + let tempCus = []; + for (let c of curves) { + if (c instanceof exports.Polyline) + arrayPushArray$1(tempCus, c.Explode()); + else + tempCus.push(c); + } + arrayPushArray$1(curves2, tempCus); + } + let parse = new RegionParse(curves2, Math.ceil(-Math.log10(fuzz))); + for (let rs of parse.RegionsOutline) { + const polyline = new exports.Polyline; + polyline.CloseMark = true; + //获取曲线所在平面矩阵 + const OCS = ComputerCurvesNormalOCS(rs.map(r => r.curve)); + const OCSInv = new three.Matrix4().getInverse(OCS); + for (let r of rs) { + let bul = 0; + if (r.curve instanceof exports.Arc) { + bul = r.curve.Bul; + if (equalv3(TransformVector(r.curve.Normal, OCSInv), ZAxisN, 1e-3)) + bul *= -1; + if (r.isReverse) + bul *= -1; + } + polyline.LineData.push({ + pt: AsVector2(r.s.applyMatrix4(OCSInv)), + bul + }); + } + polyline.ApplyMatrix(OCS); + let contour = Contour.CreateContour(polyline, false); + if (contour) + contours.push(contour); + } + return contours; +} +function CreateContour2(curves, fuzz = 1e-4) { + return CreateContours(curves, fuzz)[0]; +} + +exports.BoolOpeartionType = void 0; +(function (BoolOpeartionType) { + BoolOpeartionType[BoolOpeartionType["Intersection"] = 0] = "Intersection"; + BoolOpeartionType[BoolOpeartionType["Union"] = 1] = "Union"; + BoolOpeartionType[BoolOpeartionType["Subtract"] = 2] = "Subtract"; +})(exports.BoolOpeartionType || (exports.BoolOpeartionType = {})); +const fuzz = 1e-3; +let fuzzV3 = new three.Vector3(fuzz, fuzz, fuzz); +//判断小曲线是不是被大曲线包含(或者重叠?) +function isTargetCurInOrOnSourceCur(bigCurve, smallCurve) { + //#fix fileid 2087494 使用二维的box来计算看起来没有问题 + if (!three.Box2.prototype.containsBox.apply(bigCurve.BoundingBox.expandByVector(fuzzV3), [smallCurve.BoundingBox])) + return false; + let cus = []; + if (smallCurve instanceof exports.Polyline) + cus = smallCurve.Explode(); + else + cus = [smallCurve]; + return cus.every(c => { + let pts = getIntPtContextPts(bigCurve, c); + if (pts.length <= 1) + pts.push(c.StartPoint, c.EndPoint); + return IsPtsAllInOrOnReg(bigCurve, pts); + }); +} +//获取交点处上下距0.01par的点 +function getIntPtContextPts(sourceCur, cu, pts = []) { + let interPts = cu.IntersectWith(sourceCur, IntersectOption.ExtendNone); + if (interPts.length > 0) { + let pars = interPts.map(pt => cu.GetParamAtPoint(pt)); + for (let par of pars) { + if (par >= 0.02) + pts.push(cu.GetPointAtParam(par - 0.01)); + if (par <= (cu.EndParam - 0.02)) + pts.push(cu.GetPointAtParam(par + 0.01)); + } + } + return pts; +} +//判断点点是否全部都在封闭区域内或者在曲线上 +function IsPtsAllInOrOnReg(sourceReg, pts) { + return pts.every(pt => { + //是否点在封闭曲线内 + return sourceReg.PtOnCurve(pt) || sourceReg.PtInCurve(pt); + }); +} +//判断点是否全部都在封闭区域外或者在曲线上 +function IsPtsAllOutOrOnReg(sourceReg, pts) { + return pts.every(pt => { + //是否点在封闭曲线内 + return sourceReg.PtOnCurve(pt) || !sourceReg.PtInCurve(pt); + }); +} + +let cache$1 = new WeakMap(); +const COMBINE_FUZZ = 1e-2; +class Contour { + SetCurve(cu) { + if (cu instanceof exports.Polyline) { + if (cu.Area2 < 0) + cu.Reverse(); + } + this._Curve = cu; + } + /**会将传入的闭合轮廓改为逆时针 */ + static CreateContour(cus, needLink = true) { + if (cus instanceof Curve) { + if (cus.IsClose) { + let c = new Contour(); + c.SetCurve(cus); + return c; + } + return; + } + let closeCurve = Contour.Combine(cus, needLink, COMBINE_FUZZ); + if (closeCurve && closeCurve.IsClose) { + if (closeCurve instanceof exports.Polyline && closeCurve.CloseMark === false) { + closeCurve.CloseMark = true; + closeCurve.RemoveVertexAt(closeCurve.NumberOfVertices - 1); + } + let c = new Contour(); + c.SetCurve(closeCurve); + return c; + } + } + get Curve() { + return this._Curve; + } + get Area() { + return this._Curve.Area; + } + get BoundingBox() { + return this._Curve.BoundingBox; + } + /** + * 不等比例缩放 + * @param {number} ref 缩放参考值,大于该值的点缩放 + * @param {number} dist 缩放距离 + * @param {string} dir x y z + */ + UnEqualProportionScale(ref, dist, dir) { + let cu = this._Curve; + if (cu instanceof exports.Polyline) { + let lineData = cu.LineData; + let length = lineData.length; + let p = cu.Position[dir]; + let moveIndexs = []; + for (let i = 0; i < length; i++) { + if (lineData[i].pt[dir] + p > ref) + moveIndexs.push(i); + } + let moveVec = new three.Vector3(); + moveVec[dir] = dist; + cu.MoveStretchPoints(moveIndexs, moveVec); + return true; + } + return false; + } + Clone() { + return Contour.CreateContour([this._Curve.Clone()]); + } + //交集:结果数组为空则失败 + IntersectionBoolOperation(target) { + if (!IntersectBox2(this.BoundingBox, target.BoundingBox)) + return []; + let resultCus = this.GetIntersetAndUnionList(target); + return Contour.GetAllContour(resultCus.intersectionList); + } + //并集:结果轮廓数组长度大于2,则失败.等于1则成功. + UnionBoolOperation(target) { + let resultCus = this.GetIntersetAndUnionList(target); + //快速 + if (resultCus.unionList.every(c => c.IsClose)) + return { + contours: Contour.GetAllContour(resultCus.unionList), + holes: [], + }; + //并集后的线段表如果有共线的直接合并起来 + let cus = []; + for (let pl of resultCus.unionList) { + if (pl instanceof exports.Polyline) + cus.push(...pl.Explode()); + else + cus.push(pl); + } + let cuGroups = curveLinkGroup(cus); + for (let g of cuGroups) { + for (let i = 0; i < g.length; i++) { + let c1 = g[i]; + let nextI = FixIndex$1(i + 1, g); + let c2 = g[nextI]; + let status = c1.Join(c2); + if (status === exports.Status.True) { + g.splice(nextI, 1); + i--; + } + else if (status === exports.Status.ConverToCircle) { + g.length = 0; + let a = c1; + g.push(new exports.Circle(a.Center, a.Radius)); + break; + } + } + } + let allContour = Contour.GetAllContour(cuGroups); + if (allContour.length < 2) { + return { + contours: allContour, + holes: [], + }; + } + else { + let cache = new WeakMap(); + for (let c of allContour) + cache.set(c, c.Area); + allContour.sort((a, b) => cache.get(b) - cache.get(a)); + return { + contours: [allContour[0]], + holes: allContour.slice(1) + }; + } + } + //差集:等于0完全被减去 + SubstactBoolOperation(target) { + let subtractList = this.GetSubtractList(target); + //纯网洞 + if (subtractList.every(c => c.IsClose)) + return Contour.GetAllContour(subtractList); + let regParse = new RegionParse(subtractList, 2); + let contours = []; + //分析封闭包围区域 + const parseRoute = (routeSet) => { + for (let routes of routeSet) { + let cs = routes.map(r => r.curve); + let c = Contour.CreateContour(cs, false); + if (c + && !equalCurve(c.Curve, this.Curve) + && !equalCurve(c.Curve, target.Curve) + && c.Area > 1e-3) + contours.push(c); + } + }; + parseRoute(regParse.RegionsOutline); + parseRoute(regParse.RegionsInternal); + return contours; + } + /** + * 计算与目标轮廓布尔运算后的结果曲线. + */ + GetIntersetAndUnionList(target) { + //同心圆 + if (this._Curve instanceof exports.Circle && target._Curve instanceof exports.Circle && equalv2(this._Curve.Center, target._Curve.Center, 1e-3)) { + if (this._Curve.Radius > target._Curve.Radius) + return { intersectionList: [target._Curve], unionList: [this._Curve] }; + else + return { intersectionList: [this._Curve], unionList: [target._Curve] }; + } + let intersectionList = []; + let unionList = []; + let sourceOutline = this._Curve; + let targetOutline = target.Curve; + let isEqualNormal = equalv3(sourceOutline.Normal, targetOutline.Normal, 1e-3); + //可能会有提升,但是好像不大(并且还有更慢的趋势) + // if (!sourceOutline.BoundingBox.intersectsBox(targetOutline.BoundingBox, 1e-3)) + // return { intersectionList, unionList }; + let interPts = sourceOutline.IntersectWith2(targetOutline, IntersectOption.ExtendNone, COMBINE_FUZZ); + let sourceContainerTarget; + let targetContainerSource; + if (sourceOutline.Area > targetOutline.Area) { + sourceContainerTarget = CurveContainerCurve(sourceOutline, targetOutline, interPts); + targetContainerSource = false; + } + else { + sourceContainerTarget = false; + targetContainerSource = CurveContainerCurve(targetOutline, sourceOutline, interPts); + } + //包含.相交.分离(三种状态) + if (sourceContainerTarget) //源包含目标 + { + intersectionList.push(targetOutline); + unionList.push(sourceOutline); + } + else if (targetContainerSource) //目标包含源 + { + unionList.push(targetOutline); + intersectionList.push(sourceOutline); + } + else if (interPts.length <= 1) //分离 + { + unionList.push(sourceOutline, targetOutline); + } + else //相交 interPts.length > 0 + { + let pars1 = interPts.map(r => r.thisParam); + let pars2 = interPts.map(r => r.argParam); + let sourceCus = sourceOutline.GetSplitCurves(pars1); + let targetCus = targetOutline.GetSplitCurves(pars2); + for (let pl of sourceCus) { + let hasEqualCus = false; + for (let i = 0; i < targetCus.length; i++) { + let cu = targetCus[i]; + hasEqualCus = fastEqualCurve(cu, pl, COMBINE_FUZZ); + if (hasEqualCus) { + //方向相同 + if (equalv3(cu.GetFirstDeriv(cu.MidParam).normalize(), pl.GetFirstDeriv(pl.MidParam).normalize(), 1e-2) + === isEqualNormal) { + unionList.push(pl); + intersectionList.push(pl); + } + targetCus.splice(i, 1); + break; + } + } + if (hasEqualCus) + continue; + if (fastCurveInCurve(targetOutline, pl)) + intersectionList.push(pl); + else + unionList.push(pl); + } + for (let pl of targetCus) { + if (fastCurveInCurve(sourceOutline, pl)) + intersectionList.push(pl); + else + unionList.push(pl); + } + //特殊的分离 + if (intersectionList.length === 0 && unionList.length === (sourceCus.length + targetCus.length)) { + return { intersectionList, unionList: [sourceOutline, targetOutline] }; + } + } + return { intersectionList, unionList }; + } + GetSubtractList(target) { + let sourceOutline = this._Curve; + let targetOutline = target.Curve; + let isEqualNormal = equalv3(sourceOutline.Normal, targetOutline.Normal, 1e-3); + let interPts = sourceOutline.IntersectWith2(targetOutline, IntersectOption.ExtendNone, COMBINE_FUZZ); + if (interPts.length <= 1) { + let areaState = sourceOutline.Area > targetOutline.Area; + //反包含 + if ((!areaState && fastCurveInCurve2(targetOutline, sourceOutline, interPts[0]?.pt)) || equalCurve(targetOutline, sourceOutline)) + return []; + //包含 + if ((areaState && fastCurveInCurve2(sourceOutline, targetOutline, interPts[0]?.pt))) + return [sourceOutline, targetOutline]; + else //分离 + return [sourceOutline]; + } + //相交 + let subtractList = []; + let sourceCus = sourceOutline.GetSplitCurves(interPts.map(r => r.thisParam)); + let targetCus = targetOutline.GetSplitCurves(interPts.map(r => r.argParam)); + for (let pl of sourceCus) { + let plMidParam = pl.MidParam; + let plDir = pl.GetFirstDeriv(plMidParam).normalize(); + let index = targetCus.findIndex(cu => fastEqualCurve(cu, pl)); + if (index !== -1) { + let cu = targetCus[index]; + let cuMidParam = cu.MidParam; + let cuDir = cu.GetFirstDeriv(cuMidParam).normalize(); + if (isEqualNormal === !equalv3(cuDir, plDir, 1e-3)) //不同向 + subtractList.push(pl); + targetCus.splice(index, 1); + continue; + } + if (!fastCurveInCurve(targetOutline, pl)) + subtractList.push(pl); + } + //源对象没有被破坏 + let sourceNotBreak = subtractList.length === sourceCus.length; + for (let pl of targetCus) + if (fastCurveInCurve(sourceOutline, pl)) + subtractList.push(pl); + if (sourceNotBreak && subtractList.length === sourceCus.length) + return [sourceOutline]; + return subtractList; + } + GetSubtractListByMoreTargets(targets) { + let { holes, subtractList } = this.GetSubListWithCus(targets); + //纯网洞 + if (subtractList.every(c => c.IsClose)) + return { + holes: holes.map(h => Contour.CreateContour(h)), + outlines: Contour.GetAllContour(subtractList) + }; + let regParse = new RegionParse(subtractList, 2); + let contours = []; + //分析封闭包围区域 + const parseRoute = (routeSet) => { + for (let routes of routeSet) { + let cs = routes.map(r => r.curve); + let c = Contour.CreateContour(cs, false) ?? CreateContour2(cs); + if (c + && !equalCurve(c.Curve, this.Curve) + && targets.every(target => !equalCurve(c.Curve, target.Curve)) + && c.Area > 1e-3) + contours.push(c); + } + }; + parseRoute(regParse.RegionsOutline); + parseRoute(regParse.RegionsInternal); + return { + holes: holes.map(h => Contour.CreateContour(h)), + outlines: contours + }; + } + /** + * 计算轮廓被差集之后的结果 + * @param targets 切去的轮廓 + * @returns {holes: Polyline[] 网洞曲线列表, subtractList: Polyline[] 轮廓曲线列表} + */ + GetSubListWithCus(targets) { + let sourceOutline = this._Curve; + let subtractList = []; + let holes = []; + let intPars = []; + let curveIntParamsMap = new Map(); + let outBox = sourceOutline.BoundingBox; + for (let con of targets) { + const targetOutline = con.Curve; + if (!IntersectBox2(outBox, targetOutline.BoundingBox)) + continue; + let pts = sourceOutline.IntersectWith2(con.Curve, IntersectOption.ExtendNone, COMBINE_FUZZ); + if (pts.length <= 1) { + let areaState = sourceOutline.Area > targetOutline.Area; + //反包含 + if ((!areaState && fastCurveInCurve2(targetOutline, sourceOutline, pts[0]?.pt)) || equalCurve(targetOutline, sourceOutline)) + return { holes, subtractList }; + //包含 + if (areaState && fastCurveInCurve2(sourceOutline, targetOutline, pts[0]?.pt)) + holes.push(targetOutline); + } + else { + intPars.push(...pts.map(r => r.thisParam)); + curveIntParamsMap.set(targetOutline, pts.map(r => r.argParam)); + } + } + let sourceSplitCurves = sourceOutline.GetSplitCurves(intPars); + let targetSplitCurves = []; + let targetSplitCurve_CurvesMap = new WeakMap(); //分裂后->原始曲线 映射 + for (let [curve, intParams] of curveIntParamsMap) { + let splitCurves = curve.GetSplitCurves(intParams); + for (let splitCurve of splitCurves) { + targetSplitCurve_CurvesMap.set(splitCurve, curve); + targetSplitCurves.push(splitCurve); + } + } + for (let sourceSplitcu of sourceSplitCurves) { + let index = targetSplitCurves.findIndex(cu => fastEqualCurve(cu, sourceSplitcu, 0.05)); + if (index !== -1) { + let targetSplitcu = targetSplitCurves[index]; + let isEqualNormal = equalv3(sourceOutline.Normal, targetSplitCurve_CurvesMap.get(targetSplitcu).Normal, 1e-3); + if (isEqualNormal === !equalv3(sourceSplitcu.StartPoint, targetSplitcu.StartPoint, 0.05)) //不同向 + { + subtractList.push(sourceSplitcu); + // TestDraw(sourceSplitcu.Clone(), 1); + // TestDraw(targetSplitcu.Clone(), 1); + } + // else + // TestDraw(sourceSplitcu.Clone(), 2); + targetSplitCurves.splice(index, 1); + continue; + } + if (targets.every(t => !fastCurveInCurve(t.Curve, sourceSplitcu))) + subtractList.push(sourceSplitcu); + } + //源对象没有被破坏 + let sourceNotBreak = subtractList.length === sourceSplitCurves.length; + for (let pl of targetSplitCurves) + if (fastCurveInCurve(sourceOutline, pl)) + subtractList.push(pl); + if (sourceNotBreak && subtractList.length === sourceSplitCurves.length) + return { subtractList: [sourceOutline], holes }; + return { subtractList, holes }; + } + /** + * 获得全部闭合曲线 + * @若传入二维曲线数据,将默认子数组为闭合曲线段 + */ + static GetAllContour(cus) { + if (cus.length === 0) + return []; + let cuGroups; + if (Array.isArray(cus[0])) + cuGroups = cus; + else + cuGroups = curveLinkGroup(cus, -Math.log10(COMBINE_FUZZ)); + let contours = []; + for (let g of cuGroups) + contours.push(Contour.CreateContour(g, false)); + return contours.filter(c => c !== undefined && !equaln$1(c.Area, 0, 1e-6)); + } + /** + * 合并曲线组成为多段线 + * @param cus 曲线组 + * @param [needLink=true] 需要解析成首尾连接状态 + * @returns 单一曲线,如果返回超过1个,其他的将被遗弃. + */ + static Combine(cus, needLink = true, tolerance = 1e-3) { + if (cus.length === 0) + return undefined; + let groups = needLink ? curveLinkGroup(cus, -Math.log10(tolerance)) : [cus]; + for (let g of groups) { + if (g.length === 1) + return g[0].Clone(); + else { + if (cache$1.has(g)) + return cache$1.get(g); + let gclone = g.map(c => c.Clone()); + arrayRemoveDuplicateBySort(gclone, (cu1, cu2) => cu1.Join(cu2, false, tolerance) === exports.Status.True); + if (gclone.length > 1 && gclone[0].Join(arrayLast(gclone), false, tolerance)) + gclone.pop(); + let pl = exports.Polyline.Combine(gclone, tolerance); + cache$1.set(g, pl); + return pl; + } + } + } + get Shape() { + return this._Curve.Shape; + } + /** + * 判断是否完全包含曲线 + * @param smallCurve 传入的这个曲线不能比本轮廓还大(这个需要自己优化?) + * @returns + */ + ContainerCurve(smallCurve, isAreaCheckd = false, ipts = undefined) { + if (!isAreaCheckd && this.Area < smallCurve.Area) + return false; + return CurveContainerCurve(this._Curve, smallCurve, ipts); + } + Equal(tar) { + return equalCurve(this._Curve, tar._Curve); + } +} +/** + * 对于轮廓切割后的曲线判断相同,使用这个函数进行快速判断 + */ +function fastEqualCurve(c1, c2, tolerance = 5e-3) { + let sp1 = c1.StartPoint; + let ep1 = c1.EndPoint; + let sp2 = c2.StartPoint; + let ep2 = c2.EndPoint; + if (!((equalv3(sp1, sp2, tolerance) && equalv3(ep1, ep2, tolerance)) + || (equalv3(sp1, ep2, tolerance) && equalv3(ep1, sp2, tolerance)))) + return false; + return equalv3(c1.Midpoint, c2.Midpoint, tolerance); +} +/** + * 对于双多段线互相切割后的结果(或者交点个数为0),快速判断曲线是否在另一条曲线内部 + * @param bigCurve + * @param smallCurve + * @returns + */ +function fastCurveInCurve(bigCurve, smallCurve) { + return bigCurve.PtInCurve(smallCurve.Midpoint); +} +//当交点小于等于1时 +function fastCurveInCurve2(bigCurve, smallCurve, iPt) { + if (iPt) //提高准确性,避免使用交点去判断 导致的错误 + { + let sp = smallCurve.StartPoint; + if (equalv3(sp, iPt, 1e-3)) + return bigCurve.PtInCurve(smallCurve.Midpoint); + else + return bigCurve.PtInCurve(smallCurve.StartPoint); + } + else + return bigCurve.PtInCurve(smallCurve.Midpoint) || bigCurve.PtInCurve(smallCurve.StartPoint); +} +//大曲线是否完全包含小曲线(或者重合) +function CurveContainerCurve(bigCurve, smallCurve, ipts = undefined, fuzz = COMBINE_FUZZ) { + if (!ipts) + ipts = bigCurve.IntersectWith2(smallCurve, IntersectOption.ExtendNone, fuzz); + if (ipts.length === 0) + return fastCurveInCurve(bigCurve, smallCurve); + else if (ipts.length === 1) + return fastCurveInCurve2(bigCurve, smallCurve, ipts[0].pt); + else + return isTargetCurInOrOnSourceCur(bigCurve, smallCurve); +} + +class CurveTreeNode { + Create(curve, box) { return new this.constructor(curve, box); } + constructor(curve, box) { + this.curve = curve; + this.box = box || curve.BoundingBox; + } + TrimBy(contour, box) { + if (IntersectsBox(box, this.box)) { + if (this.children !== undefined) { + for (let c of this.children) + c.TrimBy(contour, box); + } + else { + if (contour.Curve instanceof exports.Circle && this.curve instanceof exports.Arc) { + if (equalv3(contour.Curve.Center, this.curve.Center)) { + if (contour.Curve.Radius > this.curve.Radius + 1e-4) + this.children = []; + return; + } + } + //交点参数列表 + let iParams = this.curve.IntersectWith2(contour.Curve, IntersectOption.ExtendNone) + .map(p => p.thisParam); + //#region 交点参数优化,避免出现无意义长度的曲线被移除 CurveIsFine + let length = this.curve.Length; + if (!(this.curve instanceof exports.Circle)) + iParams.push(0, 1); + iParams.sort((e1, e2) => e1 - e2); + if (this.curve instanceof exports.Arc || this.curve instanceof exports.Circle) { + let allAngle = this.curve instanceof exports.Circle ? Math.PI * 2 : this.curve.AllAngle; + arrayRemoveDuplicateBySort(iParams, (p1, p2) => { + return allAngle * (p2 - p1) < ARC_MIN_ALLANGLE || length * (p2 - p1) < CURVE_MIN_LENGTH; + }); + } + else { + arrayRemoveDuplicateBySort(iParams, (p1, p2) => { + return length * (p2 - p1) < CURVE_MIN_LENGTH; + }); + } + if (!(this.curve instanceof exports.Circle)) { + iParams.shift(); //remove 0 + iParams.pop(); //remove 1 or 0.9999 + } + //#endregion + let cus = this.curve.GetSplitCurves(iParams); + if (cus.length === 0) { + let p = this.curve.GetPointAtParam(0.5); + if (box.containsPoint(p) && (contour.Curve.PtInCurve(p) && !contour.Curve.PtOnCurve(p))) + this.children = []; + } + else { + this.children = []; + for (let c of cus) { + let p = c.GetPointAtParam(0.5); + if (CurveIsFine(c) && (!(box.containsPoint(p) && contour.Curve.PtInCurve(p)) || contour.Curve.PtOnCurve(p))) + this.children.push(this.Create(c)); + } + if (this.children.length === cus.length) + this.children = undefined; + } + } + } + } + get Nodes() { + if (!this.children) + return [this]; + else { + let cus = []; + for (let c of this.children) + cus.push(...c.Nodes); + return cus; + } + } +} +var PolylineJoinType; +(function (PolylineJoinType) { + PolylineJoinType[PolylineJoinType["Square"] = 0] = "Square"; + PolylineJoinType[PolylineJoinType["Round"] = 1] = "Round"; +})(PolylineJoinType || (PolylineJoinType = {})); +class OffsetPolyline { + /** + * + * @param _Polyline + * @param _OffsetDist + * @param [_ToolPath=false] 走刀模式(在这个模式下,我们会进行圆弧过渡(或者直线过渡)避免尖角过大) + * @param [_OffsetDistSq=(_OffsetDist ** 2) * 2.1] 允许的最大尖角长度 默认值差不多是矩形的尖角大一点 + * @param [_JoinType=PolylineJoinType.Round] 尖角的处理方式,默认是圆弧过渡,可以切换成直线过渡 + */ + constructor(_Polyline, _OffsetDist, _ToolPath = false, _OffsetDistSq = (_OffsetDist ** 2) * 2.1, //对直角走刀不进行圆弧过度 + _JoinType = PolylineJoinType.Round //仅在走刀路径时生效 + ) { + this._Polyline = _Polyline; + this._OffsetDist = _OffsetDist; + this._ToolPath = _ToolPath; + this._OffsetDistSq = _OffsetDistSq; + this._JoinType = _JoinType; + this._IsTopoOffset = false; //局部偏移,允许特殊延伸,参考测试用例 + this._AllowConverToCircle = true; + } + Do() { + this._OffsetDistSign = Math.sign(this._OffsetDist); + this._TrimPolylineContours = []; + this._TrimCircleContours = []; + this._TrimArcContours = []; + this._RetCurves = []; + this._CurveTreeNodes = []; + this.InitSubCurves(); + if (this._SubCurves.length === 0) + return this._RetCurves; + this.GeneralCirclesAndVertexs(); + this.OffsetSubCurves(); + this.LinkSubCurves(); + if (this._SubOffsetedCurves.length === 0) { + this._SubOffsetedCurves.push({ curve: this._Circles[0], index: 0, paddingCurve: this._Circles.slice(1) }); + this._TrimPolylineContours.push(...this._Circles.map(c => Contour.CreateContour(c, false)), ...this._SubCurves.map(c => Contour.CreateContour([c, new exports.Line(c.StartPoint, c.EndPoint)], false))); + } + else + this.GeneralTrimContours(); + // for (let c of this._SubOffsetedCurves) + // { + // TestDraw(c.curve.Clone(), 1); + // if (c.paddingCurve) + // for (let cc of c.paddingCurve) + // TestDraw(cc.Clone(), 2); + // } + // for (let c of this._TrimPolylineContours) + // { + // TestDraw(c.Curve.Clone(), 3); + // } + this.TrimByContours(); + this.FilterInvalidCurve(); + this.JoinCollinear(); + this.LinkResultPolyline(); + this.RepairResultPolylineClosemark(); + return this._RetCurves; + } + InitSubCurves() { + this._CacheOCS = this._Polyline.OCS; + this._IsClose = this._Polyline.IsClose; + this._Polyline.OCS = IdentityMtx4; + this._SubCurves = this._Polyline.Explode().filter(c => c.Length > 1e-4); //TODO: 简化这个 并且生成圆 顶点 圆 + this._Polyline.OCS = this._CacheOCS; + return this; + } + GeneralCirclesAndVertexs() { + this._Vertexs = this._SubCurves.map(c => c.StartPoint); + let lastCu = arrayLast(this._SubCurves); + if (!equalv3(lastCu.EndPoint, this._Vertexs[0], 1e-3)) + this._Vertexs.push(lastCu.EndPoint); + let radius = Math.abs(this._OffsetDist); + this._Circles = this._Vertexs.map(p => new exports.Circle(p, radius)); + } + OffsetSubCurves() { + this._SubOffsetedCurves = []; + for (let index = 0; index < this._SubCurves.length; index++) { + let curveOld = this._SubCurves[index]; + if (curveOld.Length > 1e-6) { + let curve = curveOld.GetOffsetCurves(this._OffsetDist)[0]; + if (curve) + this._SubOffsetedCurves.push({ curve, index }); + else + this._TrimArcContours.push(Contour.CreateContour([curveOld, new exports.Line(curveOld.StartPoint, curveOld.EndPoint)], false)); + } + } + } + //连接(延伸)曲线,或者补(圆弧,直线) + LinkSubCurves() { + let count = this._SubOffsetedCurves.length; + if (!this._IsClose) + count--; + for (let i = 0; i < count; i++) { + let curveResNow = this._SubOffsetedCurves[i]; + let iNext = FixIndex$1(i + 1, this._SubOffsetedCurves); + let curveResNext = this._SubOffsetedCurves[iNext]; + let curveNow = curveResNow.curve; + let curveNext = curveResNext.curve; + let isNeighbor = FixIndex$1(curveResNow.index + 1, this._SubCurves) === curveResNext.index; + if (isNeighbor) { + let sp = curveNow.EndPoint; + let ep = curveNext.StartPoint; + let code1 = EntityEncode(curveNow); //1:直线 2:圆弧 + let code2 = EntityEncode(curveNext); + let code = code1 & code2; //1:纯直线 2:纯圆弧 3:直线和圆弧 + //直连 + if (equalv3(sp, ep, 1e-3)) { + //参考测试用例`裁剪失败,需要连接`,在极端的情况下,如果没有连接这两条线,会导致裁剪缝隙,导致偏移错误 + if (!equalv2(sp, ep, 1e-6)) { + if (code1 === 1) //线1是直线 + curveNow.EndPoint = ep; + else if (code2 === 1) //线2是直线 + curveNext.StartPoint = sp; + else //都是圆弧 + { + let mp = midPoint(sp, ep); + curveNow.EndPoint = mp; + curveNext.StartPoint = mp; + } + } + continue; + } + let iPtsP = curveNow.IntersectWith2(curveNext, IntersectOption.ExtendBoth, 1e-6); + let iPts = iPtsP.map(p => p.pt); + let tPts = iPtsP.filter(p => curveNow.ParamOnCurve(p.thisParam) && curveNext.ParamOnCurve(p.argParam)).map(p => p.pt); + let tp; + if (code === 1) { + if (this._IsTopoOffset && tPts.length === 0 && curveResNow.dist !== curveResNext.dist) + tPts = iPts; + if (tPts.length > 0) //不走刀或者有真交点 this._ToolPath === false || + tp = iPts[0]; + else { + if (iPts.length > 0 && iPtsP[0].thisParam > 1) { + let refP = this._Vertexs[curveResNext.index]; + let distSq = iPts[0].distanceToSquared(refP); + if (this._ToolPath && distSq > this._OffsetDistSq) { + if (this._JoinType === PolylineJoinType.Round) + curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)]; + else + curveResNow.paddingCurve = [this.CreateSquare(refP, curveResNow, curveResNext, code)]; //补直线 + this._TrimCircleContours.push(this._Circles[curveResNext.index]); + } + else + tp = iPts[0]; + } + // else + // curveResNow.paddingCurve = [new Line(sp, ep)]; + } + } + else //直线和圆弧 圆弧和圆弧 + { + let refP = this._Vertexs[curveResNext.index]; + //在局部偏移中,当偏移距离不一致时,我们总是倾向于直接连接 + if (this._IsTopoOffset && tPts.length === 0 && curveResNow.dist !== curveResNext.dist) { + if (iPts.length) + tPts = iPts; + else { + curveResNow.paddingCurve = [new exports.Line(sp, ep)]; //补直线 + continue; + } + } + if (tPts.length > 0) //ipts = 1 or ipts = 2 + tp = SelectNearP(tPts, refP); + else //补圆弧 或者尝试连接 + { + if (iPts.length > 0 && !this._ToolPath && this.IsSharpCorner(curveResNow, curveResNext)) //非加工刀路 并且尖角化(谷)时 + { + //设置新的连接点,并且备份旧点 + let oldp; + if (curveResNow.sp) { + oldp = curveNow.StartPoint; + curveNow.StartPoint = curveResNow.sp; + } + let oldp2; + if (curveResNext.ep) { + oldp2 = curveNext.EndPoint; + curveNext.EndPoint = curveResNext.ep; + } + let p; + if (code === 2 && iPts.length === 2) { + let c = curveNow; + let minArc = new exports.Arc(c.Center, c.Radius, c.EndAngle, 0, c.IsClockWise); + let p1 = iPts[0]; + let a1 = minArc.GetAngleAtPoint(p1); + let anAll1 = c.ParamOnCurve(c.GetParamAtAngle(a1)) ? Infinity : minArc.ComputeAnlge(a1); + let p2 = iPts[1]; + let a2 = minArc.GetAngleAtPoint(p2); + let anAll2 = c.ParamOnCurve(c.GetParamAtAngle(a2)) ? Infinity : minArc.ComputeAnlge(a2); + if (anAll2 < anAll1) + p = p2; + else + p = p1; + } + else + p = SelectNearP(iPts, refP); + let onPre; + let param = curveNow.GetParamAtPoint2(p); + if (curveNow instanceof exports.Line) + onPre = param > 1; + else + onPre = param < 0 || param > 1; + let onNext = false; + if (onPre) { + let param2 = curveNext.GetParamAtPoint2(p); + if (curveNext instanceof exports.Line) + onNext = param2 < 0; + else + onNext = param2 < 0 || param2 > 1; + } + if (curveResNow.sp) + curveNow.StartPoint = oldp; + if (curveResNext.ep) + curveNext.EndPoint = oldp2; + if (onPre && onNext) + tp = p; + else + curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)]; //补圆弧 + } + else { + if (this._JoinType === PolylineJoinType.Round) + curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)]; //补圆弧 + else { + curveResNow.paddingCurve = [this.CreateSquare(refP, curveResNow, curveResNext, code)]; //补直线 + } + } + let circle = this._Circles[curveResNext.index]; + if (circle) + this._TrimCircleContours.push(circle); //因为局部偏移可能未提供圆 + } + } + if (tp) { + curveResNow.ep = tp; + curveResNext.sp = tp; + curveResNow.nextCurve = curveNext; + curveResNext.preCurve = curveNow; + } + } + else { + let padCirs = []; + for (let s = FixIndex$1(curveResNow.index + 1, this._Circles);; s = FixIndex$1(s + 1, this._Circles)) { + let circle = this._Circles[s]; + if (circle) //因为局部偏移可能未提供圆 + { + this._TrimCircleContours.push(circle); + padCirs.push(circle); + } + if (s === curveResNext.index) + break; + } + curveResNow.paddingCurve = padCirs; + } + } + } + /** + * 判断两曲线是否尖角化 + * 在 + * 1.直线和圆弧,圆弧和圆弧 + * 2.有交点,无真交点时 + * 必须在正确的方向做出延伸动作,所以必须在尖角的情况下延伸,偏移的结果就像一个谷字去掉一个口的结果,上面的人就是偏移后的结果. + * 如果是谷,则允许连接 #I7WKKG + */ + IsSharpCorner(curveResNow, curveResNext) { + let v1 = this._SubCurves[curveResNow.index].GetFirstDeriv(1); + let v2 = this._SubCurves[curveResNext.index].GetFirstDeriv(0); + v1.cross(v2); + return Math.sign(v1.z) === this._OffsetDistSign; + } + GeneralTrimContours() { + for (let d of this._SubOffsetedCurves) { + let cu2 = d.curve; + if (d.sp && d.ep) { + let param1 = cu2.GetParamAtPoint(d.sp); + let param2 = cu2.GetParamAtPoint(d.ep); + if (cu2.ParamOnCurve(param1) && cu2.ParamOnCurve(param2) && param1 > param2) + [d.sp, d.ep] = [d.ep, d.sp]; + } + if (d.sp) + cu2.StartPoint = d.sp; + if (d.ep) + cu2.EndPoint = d.ep; + //这是极端情况,圆弧被压缩成0长度圆弧,本质是空圆弧(我们会在下面判断它)(因为精度的问题) + //因为精度的问题,这种0圆心角的圆弧会被当成全圆,但是偏移算法中,应该不可能出现全圆弧的圆弧,所以我们压扁它 + if (cu2 instanceof exports.Arc + && equaln$1(cu2.StartAngle, cu2.EndAngle, 1e-6) + // && !equaln((this._SubCurves[d.index]).AllAngle, Math.PI * 2, 1e-3) 应该不会出现 + ) { + if (cu2.IsClockWise) + cu2.StartAngle = cu2.EndAngle + 1e-6; + else + cu2.EndAngle = cu2.StartAngle + 1e-6; + } + } + for (let d of this._SubOffsetedCurves) { + let cu1 = this._SubCurves[d.index]; + let cu2 = d.curve; + let [p1, p2, p3, p4] = [cu1.StartPoint, cu2.StartPoint, cu1.EndPoint, cu2.EndPoint]; + let l1 = new exports.Line(p1, p2); + let l2 = new exports.Line(p3, p4); + let ipts = l1.IntersectWith(l2, IntersectOption.ExtendNone, 1e-8); + if (ipts.length > 0) { + let p = ipts[0]; + l1.EndPoint = p; + l2.EndPoint = p; + let cus = [cu1, l1, l2]; + let contour = Contour.CreateContour(cus, false); + if (contour) { + this._TrimPolylineContours.push(contour); + continue; + } + else { + console.error("未预料到的错误,构建轮廓失败" + this._OffsetDist); + } + } + //真理1:针脚线不可能同时被两个圆弧所切割 + let l1Intact = true; + let l2Intact = true; + if (cu2 instanceof exports.Arc) { + if (Math.sign(cu2.Bul) !== this._OffsetDistSign) { + let ipts1 = cu2.IntersectWith(l1, IntersectOption.ExtendNone); + let ipts2 = cu2.IntersectWith(l2, IntersectOption.ExtendNone); + let sp; + let ep; + if (ipts1.length === 2) + sp = SelectNearP(ipts1, p1); + if (ipts2.length === 2) + ep = SelectNearP(ipts2, p3); + if (sp || ep) + cu2 = cu2.Clone(); + if (sp) { + l1.EndPoint = sp; + cu2.StartPoint = sp; + l1Intact = false; + } + if (ep) { + l2.EndPoint = ep; + cu2.EndPoint = ep; + l2Intact = false; + } + } + } + let l1PadArc; + let l2PadArc; + //真理2:隔壁的圆弧不可能破坏当前的圆弧,只能破坏当前的针脚 + if (l1Intact && d.preCurve && d.preCurve instanceof exports.Arc) { + let a = d.preCurve; + if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6) { + let ipts = a.IntersectWith(l1, IntersectOption.ExtendNone); + if (ipts.length === 2) { + let sp = SelectNearP(ipts, p1); + l1.EndPoint = sp; + l1PadArc = a.Clone(); + l1PadArc.StartPoint = sp; + } + } + } + if (l2Intact && d.nextCurve && d.nextCurve instanceof exports.Arc) { + let a = d.nextCurve; + if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6) { + let ipts = a.IntersectWith(l2, IntersectOption.ExtendNone); + if (ipts.length === 2) { + let ep = SelectNearP(ipts, p3); + l2.EndPoint = ep; + l2PadArc = a.Clone(); + l2PadArc.EndPoint = ep; + } + } + } + let pl = new exports.Polyline(); + let cus = [cu1, l1]; + if (l1PadArc) + cus.push(l1PadArc); + cus.push(cu2, l2); + if (l2PadArc) + cus.push(l2PadArc); + for (let c of cus) + pl.Join(c); + let contour = Contour.CreateContour(pl, false); + if (contour) + this._TrimPolylineContours.push(contour); + else + console.error("未预料到的错误,构建轮廓失败" + this._OffsetDist); + } + if (!this._IsClose) { + //起点和终点裁剪掉圆 + if (this._TrimCircleContours[0] !== this._Circles[0]) + this._TrimCircleContours.push(this._Circles[0]); + let lastTrimCircle = arrayLast(this._TrimCircleContours); + let lastCircle = arrayLast(this._Circles); + if (lastTrimCircle !== lastCircle) + this._TrimCircleContours.push(lastCircle); + if (this._SubOffsetedCurves[0].index !== 0) + this._TrimCircleContours.push(this._Circles[this._SubOffsetedCurves[0].index]); + //最后一段曲线裁剪掉圆 + let lastIndex = this._Circles.length - 1; + let lastD = arrayLast(this._SubOffsetedCurves); + if (lastIndex !== lastD.index) + this._TrimCircleContours.push(this._Circles[lastD.index + 1]); + } + this._TrimPolylineContours.push(...this._TrimCircleContours.map(c => Contour.CreateContour(c, false)), ...this._TrimArcContours); + } + // 通过构建的轮廓对偏移曲线进行裁剪 + TrimByContours() { + for (let d of this._SubOffsetedCurves) { + let c = d.curve; + if (CurveIsFine(c)) + this._CurveTreeNodes.push(new CurveTreeNode(c)); + if (d.paddingCurve) + this._CurveTreeNodes.push(...d.paddingCurve.map(c => new CurveTreeNode(c))); + } + for (let i = 0; i < this._TrimPolylineContours.length; i++) { + let c = this._TrimPolylineContours[i]; + let cbox = c.BoundingBox; + for (let curveNode of this._CurveTreeNodes) + curveNode.TrimBy(c, cbox); + } + } + //过滤方向相反和0长度线 + FilterInvalidCurve() { + this._CurveTrimedTreeNodes = []; + for (let n of this._CurveTreeNodes) { + let ns = n.Nodes; + for (let sn of ns) { + if (this.CheckPointDir(sn.curve.GetPointAtParam(0.5))) + this._CurveTrimedTreeNodes.push(sn); + } + } + } + //合并共线 + JoinCollinear() { + for (let i = 0; i < this._CurveTrimedTreeNodes.length; i++) { + let n = this._CurveTrimedTreeNodes[i]; + if (n.used) + continue; + let sp = n.curve.StartPoint; + for (let j = i + 1; j < this._CurveTrimedTreeNodes.length; j++) { + let n2 = this._CurveTrimedTreeNodes[j]; + if (n2.used) + continue; + let status = n.curve.Join(n2.curve); + if (status === exports.Status.ConverToCircle && this._AllowConverToCircle) { + n.used = true; + n2.used = true; + let circle = new exports.Circle(n.curve.Center, n.curve.Radius); + n.curve = circle; + this._RetCurves.push(ConverCircleToPolyline$1(circle).ApplyMatrix(this._CacheOCS)); + } + else if (status === exports.Status.True) { + if (equalv3(sp, n.curve.StartPoint)) + n2.used = true; + else { + n.used = true; + n2.curve = n.curve; + break; + } + } + } + } + } + //连接结果曲线,返回最终多段线 + LinkResultPolyline() { + let used = new Set(); + let cuMap = new CurveMap(1); + for (let n of this._CurveTrimedTreeNodes) { + if (!n.used) + cuMap.AddCurveToMap(n.curve); + } + let preP; + let searchNext = (s, pl, isJoinEnd = true) => { + let minDist = Infinity; + let minR; + for (let r of s.routes) { + if (used.has(r.curve)) + continue; + if (preP) { + let d = r.s.distanceToSquared(preP); + if (d < minDist) { + minR = r; + minDist = d; + } + } + else { + minR = r; + minDist = 0; + break; + } + } + if (minR && Math.sqrt(minDist) < 0.085) { + used.add(minR.curve); + preP = minR.e; + // let status = pl.Join(minR.curve, false, 8e-2); + // if (status !== Status.True) + // console.warn("连接失败"); + //#region fast join (为了避免Polyline.Join 导致的顺序错误) + let cu = minR.curve; + //bul + let bul = 0; + if (cu instanceof exports.Arc) { + bul = cu.Bul; + if (minR.isReverse) + bul *= -1; + if (!isJoinEnd) + bul *= -1; + } + if (pl.LineData.length === 0) { + pl.LineData.push({ + pt: AsVector2(minR.s), + bul: bul + }); + } + if (isJoinEnd) { + pl.LineData[pl.LineData.length - 1].bul = bul; + pl.LineData.push({ + pt: AsVector2(minR.e), + bul: 0 + }); + } + else { + pl.LineData.unshift({ + pt: AsVector2(minR.e), + bul + }); + } + //#endregion + return minR.to; + } + }; + for (let s of cuMap.Stands) { + preP = undefined; + let pl = new exports.Polyline(); + let ss = s; + while (ss && !pl.IsClose) + ss = searchNext(ss, pl, true); + ss = s; + preP = pl.StartPoint; + while (ss && !pl.IsClose) + ss = searchNext(ss, pl, false); + if (pl.NumberOfVertices > 1) { + //避免0长度的线 + if (pl.NumberOfVertices === 2 && pl.Length < 1e-6) + continue; + let d = pl.LineData; + let ld = arrayLast(d); + if (equalv2(d[0].pt, ld.pt, 1e-2)) + ld.pt.copy(d[0].pt); + this._RetCurves.push(pl.ApplyMatrix(this._CacheOCS)); + } + } + } + RepairResultPolylineClosemark() { + if (!this._RetCurves.length) + return; + if (this._Polyline.CloseMark) { + if (!equalv2(this._Polyline.LineData[0].pt, arrayLast(this._Polyline.LineData).pt, 8e-2)) //缺省一个点 + { + for (let pl of this._RetCurves) { + if (pl.IsClose && //封闭 + equaln$1(arrayLast(pl.LineData).bul, 0, 1e-5) && //是直线 + equalv2(pl.LineData[0].pt, arrayLast(pl.LineData).pt, 8e-2)) //首尾重复(一般已经是了) + { + pl.LineData.pop(); //移除最后一点 + pl.CloseMark = true; + } + } + } + else { + for (let pl of this._RetCurves) { + if (pl.IsClose) + pl.CloseMark = true; + } + } + } + else if (this._IsClose) { + for (let pl of this._RetCurves) { + let firstP = pl.LineData[0].pt; + let lastP = arrayLast(pl.LineData).pt; + if (equalv2(firstP, lastP, 8e-2)) + lastP.copy(firstP); + } + } + } + CheckPointDir(pt) { + return this.GetPointAtCurveDir(pt) === this._OffsetDistSign; + } + /** + * 点在线上 或者在线内(外) + * @param pt + * @returns 0在线上 1 -1 + */ + GetPointAtCurveDir(pt) { + let minIndex = Infinity; + let minDist = Infinity; + let minCp; + for (let i = 0; i < this._SubCurves.length; i++) { + let c = this._SubCurves[i]; + let cp = c.GetClosestPointTo(pt, false); + if (equalv3(cp, pt, 1e-4)) + return 0; + let dist = cp.distanceToSquared(pt); + if (dist < minDist) { + minDist = dist; + minIndex = i; + minCp = cp; + } + } + let c = this._SubCurves[minIndex]; + let param = c.GetParamAtPoint(minCp); + if (equaln$1(param, 0) && ((minIndex === 0) ? this._IsClose : true)) { + let preIndex = FixIndex$1(minIndex - 1, this._SubCurves); + let preCurve = this._SubCurves[preIndex]; + if (!equalv3(c.GetFirstDeriv(0).normalize(), preCurve.GetFirstDeriv(1).normalize())) { + let p = c.StartPoint; + let l1 = c.Length; + let l2 = preCurve.Length; + let minLength = Math.min(l1, l2) * 0.2; + let nextP; + let preP; + if (c instanceof exports.Arc) + nextP = c.GetPointAtDistance(minLength); + else + nextP = c.EndPoint; + if (preCurve instanceof exports.Arc) + preP = preCurve.GetPointAtDistance(l2 - minLength); + else + preP = preCurve.StartPoint; + let arc = new exports.Arc(p, 1, angle(preP.sub(p)), angle(nextP.sub(p))); + let dir = arc.PtOnCurve3(pt) ? -1 : 1; + return dir; + } + } + else if (equaln$1(param, 1) && ((minIndex === this._SubCurves.length - 1) ? this._IsClose : true)) { + let nextIndex = FixIndex$1(minIndex + 1, this._SubCurves); + let nextCurve = this._SubCurves[nextIndex]; + if (!equalv3(c.GetFirstDeriv(1).normalize(), nextCurve.GetFirstDeriv(0).normalize())) { + let p = c.EndPoint; + let l1 = c.Length; + let l2 = nextCurve.Length; + let minLength = Math.min(l1, l2) * 0.2; + let nextP; + let preP; + if (c instanceof exports.Arc) + preP = c.GetPointAtDistance(l1 - minLength); + else + preP = c.StartPoint; + if (nextCurve instanceof exports.Arc) + nextP = nextCurve.GetPointAtDistance(minLength); + else + nextP = nextCurve.EndPoint; + let arc = new exports.Arc(p, 1, angle(preP.sub(p)), angle(nextP.sub(p))); + let dir = arc.PtOnCurve3(pt) ? -1 : 1; + return dir; + } + } + let dri = c.GetFirstDeriv(param); + let cross = dri.cross(pt.clone().sub(minCp)); + return -Math.sign(cross.z); + } + CreateArc(center, startP, endP) { + let sa = angle(startP.clone().sub(center)); + let ea = endP ? angle(endP.clone().sub(center)) : sa; + let arc = new exports.Arc(center, Math.abs(this._OffsetDist), sa, ea, this._OffsetDist < 0); + return arc; + } + CreateSquare(center, curveNow, curveNext, entTypeCode) { + const arc = this.CreateArc(center, curveNow.curve.EndPoint, curveNext.curve.StartPoint); + const centerPoint = arc.GetPointAtParam(0.5); + const tangentLine = new exports.Line(centerPoint, arc.GetFirstDeriv(0.5).add(centerPoint)); //切线 + let ep, sp; + if (entTypeCode === 1) { + ep = tangentLine.IntersectWith(curveNow.curve, IntersectOption.ExtendBoth)[0]; //第一条线新的终点坐标 + sp = centerPoint.multiplyScalar(2).sub(ep); + } + else // if (entTypeCode === 0)//全圆弧 直线和圆弧 + { + ep = SelectNearP(tangentLine.IntersectWith(curveNow.curve, IntersectOption.ExtendBoth), center); //第一条线新的终点坐标 + sp = SelectNearP(tangentLine.IntersectWith(curveNext.curve, IntersectOption.ExtendBoth), center); + } + curveNow.ep = ep; + curveNext.sp = sp; + return new exports.Line(ep, sp); + } +} +/** + * @param c + * @returns 1:line 2:arc + */ +function EntityEncode(c) { + if (c instanceof exports.Line) + return 1; + else + return 2; +} +const CURVE_MIN_LENGTH = 5e-5; +const ARC_MIN_ALLANGLE = 2e-6; +//表示这个是一个正常的曲线,不是0长度的线,也不是0长度的圆弧 +function CurveIsFine(curve) { + if (curve instanceof exports.Arc && curve.AllAngle < ARC_MIN_ALLANGLE) + return false; + return curve.Length > CURVE_MIN_LENGTH; +} + +/** + * 判断点在多段线内外(如果点在线上 则返回false) + * @param pl 多段线 + * @param pt 点 + * @returns 点在多段线内部 + */ +function IsPointInPolyLine(pl, pt) { + let crossings = 0; + let insLine = new exports.Line(pt, pt.clone().add(new three.Vector3(0, 10, 0))); + for (let i = 0; i < pl.EndParam; i++) { + if (equaln$1(pl.GetBulgeAt(i), 0, BUL_IS_LINE_FUZZ)) //直线 + { + let sp = pl.GetPointAtParam(i); + let ep = pl.GetPointAtParam(i + 1); + if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5)) //在起点或者终点 + return false; + //点位于线上面 + if (pt.y > Math.max(sp.y, ep.y)) + continue; + //线垂直Y轴 + let derX = ep.x - sp.x; + if (equaln$1(derX, 0, 5e-6)) { + if (equaln$1(pt.x, ep.x, 1e-5) + && (pt.y > Math.min(sp.y, ep.y) - 1e-5 && pt.y < Math.max(sp.y, ep.y) + 1e-5)) + return false; //点在线上 + continue; + } + //起点 + if (equaln$1(sp.x, pt.x, 5e-6)) { + if (sp.y > pt.y && derX < 0) + crossings++; + continue; + } + //终点 + if (equaln$1(ep.x, pt.x, 5e-6)) { + if (ep.y > pt.y && derX > 0) + crossings++; + continue; + } + //快速求交,只验证有没有交点 + let [x1, x2] = sp.x > ep.x ? [ep.x, sp.x] : [sp.x, ep.x]; + if (pt.x > x1 && pt.x < x2) { + let derY = ep.y - sp.y; + let k = derY / derX; + let iptY = (pt.x - sp.x) * k + sp.y; + if (equaln$1(iptY, pt.y, 1e-5)) //点在线上 返回false + return false; + if (iptY > pt.y) + crossings++; + } + } + else //圆弧 + { + let arc = pl.GetCurveAtIndex(i); + let sp = arc.StartPoint; + let ep = arc.EndPoint; + if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5)) //在起点或者终点 + return false; + let center = arc.Center; + //如果相切 + if (equaln$1(Math.abs(pt.x - center.x), arc.Radius)) { + //点在线上 + if (equaln$1(pt.y, center.y) && arc.ParamOnCurve(arc.GetParamAtPoint2(pt))) + return false; + //当点和起点或者终点和点相切时 + if (equaln$1(sp.x, pt.x) && sp.y > pt.y) { + if (ep.x - sp.x < -1e-5) + crossings++; + } + else if (equaln$1(ep.x, pt.x) && ep.y > pt.y) { + if (ep.x - sp.x > 1e-5) + crossings++; + } + continue; + } + if (equaln$1(sp.x, pt.x) && sp.y > pt.y) { + let der = arc.GetFirstDeriv(0).normalize(); + if (der.x < -1e-5) + crossings++; + } + if (equaln$1(ep.x, pt.x) && ep.y > pt.y) { + let der = arc.GetFirstDeriv(1).normalize(); + if (der.x > 1e-5) + crossings++; + } + for (let pti of arc.IntersectWith(insLine, IntersectOption.ExtendArg)) { + if (equalv2(pti, pt, 1e-5)) //点在线上 返回false + return false; + //交点在点下 交点在起点? 交点在终点? + if (pti.y + 1e-5 < pt.y || equalv2(sp, pti, 1e-5) || equalv2(ep, pti, 1e-5)) + continue; + crossings++; + } + } + } + return (crossings % 2) === 1; +} + +var Polyline_1; +const BUL_IS_LINE_FUZZ = 1e-5; +exports.Polyline = Polyline_1 = class Polyline extends Curve { + constructor(_LineData = []) { + super(); + this._LineData = _LineData; + this._DisplayAccuracy = 0; + this._ClosedMark = false; + } + UpdateOCSTo(m) { + this.WriteAllObjectRecord(); + let p = new three.Vector3().setFromMatrixPosition(m); + p.applyMatrix4(this.OCSInv); + if (equaln$1(p.z, 0)) { + let dir = Math.sign(this.Area2); + let tm = matrixAlignCoordSys(this.OCSNoClone, m); + for (let p of this._LineData) { + let p3 = AsVector3(p.pt); + p3.applyMatrix4(tm); + p.pt.set(p3.x, p3.y); + } + this.OCS = m; + let newDir = Math.sign(this.Area2); + if (dir !== newDir) + for (let p of this._LineData) + p.bul *= -1; + } + } + /** + * 原地翻转,仅改变法向量 + */ + Flip() { + this.WriteAllObjectRecord(); + let x = new three.Vector3(); + let y = new three.Vector3(); + let z = new three.Vector3(); + this._Matrix.extractBasis(x, y, z); + z.negate(); + y.crossVectors(z, x); + let p = this.Position; + this._Matrix.makeBasis(x, y, z).setPosition(p); + for (let d of this._LineData) { + d.pt.y *= -1; + d.bul *= -1; + } + this.Update(); + return this; + } + //翻转曲线,首尾调换 + Reverse() { + if (this._LineData.length === 0) + return this; + this.WriteAllObjectRecord(); + let pts = []; + let buls = []; + for (let data of this._LineData) { + pts.push(data.pt); + buls.push(-data.bul); + } + let lastBul = buls.pop(); + buls.reverse(); + buls.push(lastBul); + pts.reverse(); + if (this._ClosedMark && !equalv2(pts[0], arrayLast(pts))) { + pts.unshift(pts.pop()); + buls.unshift(buls.pop()); + } + for (let i = 0; i < pts.length; i++) { + let d = this._LineData[i]; + d.pt = pts[i]; + d.bul = buls[i]; + } + return this; + } + get DisplayAccuracy() { + return this._DisplayAccuracy; + } + set DisplayAccuracy(v) { + if (!equaln$1(v, this._DisplayAccuracy)) { + this.WriteAllObjectRecord(); + this._DisplayAccuracy = v; + this.Update(); + } + } + set LineData(data) { + this.WriteAllObjectRecord(); + this._LineData = data; + this.Update(); + } + get LineData() { + return this._LineData; + } + get NumberOfVertices() { + return this._LineData.length; + } + /** + * 在指定位置插入点. + * 例如: + * pl.AddVertexAt(pl.NumberOfVertices,p);//在末尾插入一个点 + * + * @param {number} index 索引位置 + * @param {Vector2} pt 点 + * @returns {this} + * @memberof Polyline + */ + AddVertexAt(index, pt) { + this.WriteAllObjectRecord(); + let pts; + if (Array.isArray(pt)) { + pts = pt.map(p => { + return { + pt: p.clone(), + bul: 0 + }; + }); + } + else + pts = [{ pt: pt.clone(), bul: 0 }]; + this._LineData.splice(index, 0, ...pts); + this.Update(); + return this; + } + RemoveVertexAt(index) { + if (index < this._LineData.length) { + this.WriteAllObjectRecord(); + this._LineData.splice(index, 1); + this.Update(); + } + return this; + } + RemoveVertexIn(from, to) { + if (from + 1 < this._LineData.length && to > from) { + this.WriteAllObjectRecord(); + this._LineData.splice(from + 1, to - from - 1); + this.Update(); + } + return this; + } + /** + * 重设闭合多段线的起点 + * @param index 起始index,如果index非整数,将用最接近的整数作为起始索引 + */ + ResetStartPoint(index) { + if (!this.IsClose || index >= this.EndParam) + return false; + if (equalv2(this._LineData[0].pt, arrayLast(this._LineData).pt)) + this._LineData.pop(); + changeArrayStartIndex(this._LineData, Math.floor(index + 0.5)); + this._LineData.push({ + pt: this._LineData[0].pt.clone(), + bul: 0 + }); + return true; + } + GetPoint2dAt(index) { + if (index >= 0 && this._LineData.length > index) + return this._LineData[index].pt.clone(); + } + /** + * 设置指定点的位置 + * + * @param {number} index + * @param {Vector2} pt + * @memberof Polyline + */ + SetPointAt(index, pt) { + let d = this._LineData[index]; + if (d) { + this.WriteAllObjectRecord(); + d.pt.copy(pt); + this.Update(); + } + return this; + } + ApplyScaleMatrix(m) { + this.WriteAllObjectRecord(); + let inv = this.OCSInv; + for (let i = 0; i <= this.EndParam; i++) { + let p = this.GetPointAtParam(i); + p.applyMatrix4(m).applyMatrix4(inv); + this.SetPointAt(i, AsVector2(p)); + } + return this; + } + ApplyMirrorMatrix(m) { + this.WriteAllObjectRecord(); + let oldPts = this.GetStretchPoints(); + reviseMirrorMatrix(this._Matrix); + let inv = this.OCSInv; + for (let i = 0; i < oldPts.length; i++) { + let newP = oldPts[i].applyMatrix4(inv); + let newBul = -this.GetBulgeAt(i); + this.SetPointAt(i, AsVector2(newP)); + this.SetBulgeAt(i, newBul); + } + this.Reverse(); + return this; + } + SetBulgeAt(index, bul) { + let d = this._LineData[index]; + if (d) { + this.WriteAllObjectRecord(); + d.bul = bul; + this.Update(); + } + return this; + } + GetBulgeAt(index) { + return this._LineData[index].bul; + } + Rectangle(length, height) { + this.LineData = [ + { pt: new three.Vector2(), bul: 0 }, + { pt: new three.Vector2(length), bul: 0 }, + { pt: new three.Vector2(length, height), bul: 0 }, + { pt: new three.Vector2(0, height), bul: 0 } + ]; + this.CloseMark = true; + return this; + } + RectangleFrom2Pt(p1, p2) { + let box = new three.Box3(); + box.setFromPoints([p2, p1].map((p) => p.clone().applyMatrix4(this.OCSInv))); + let px1 = AsVector2(box.min); + let px3 = AsVector2(box.max); + let px2 = new three.Vector2(px3.x, px1.y); + let px4 = new three.Vector2(px1.x, px3.y); + this.LineData = [ + { pt: px1, bul: 0 }, + { pt: px2, bul: 0 }, + { pt: px3, bul: 0 }, + { pt: px4, bul: 0 } + ]; + this.CloseMark = true; + return this; + } + FromPoints2d(pts) { + this.WriteAllObjectRecord(); + this._LineData.length = 0; + for (let p of pts) + this._LineData.push({ pt: AsVector2(p), bul: 0 }); + this.Update(); + return this; + } + //多段线起点 + get StartPoint() { + if (this._LineData.length > 0) + return AsVector3(this._LineData[0].pt).applyMatrix4(this.OCS); + return new three.Vector3(); + } + set StartPoint(p) { + this.WriteAllObjectRecord(); + p = p.clone().applyMatrix4(this.OCSInv); + if (this._LineData.length === 0) + this.AddVertexAt(0, AsVector2(p)); + else if (this._LineData.length === 1) + this.SetPointAt(0, AsVector2(p)); + else { + let bul = this.GetBulgeAt(0); + if (bul !== 0) { + let arc = this.GetCurveAtParam(0); + arc.StartPoint = p; + //前面线的凸度调整 + this.SetBulgeAt(0, Math.tan(arc.AllAngle / 4) * Math.sign(bul)); + } + this.SetPointAt(0, AsVector2(p)); + } + } + get EndPoint() { + if (this._ClosedMark) + return this.StartPoint; + if (this._LineData.length > 0) + return AsVector3(this._LineData[this.EndParam].pt).applyMatrix4(this.OCS); + return new three.Vector3(); + } + set EndPoint(p) { + if (this._LineData.length < 2 || this.CloseMark) + return; + this.WriteAllObjectRecord(); + p = p.clone().applyMatrix4(this.OCSInv); + let bul = this.GetBulgeAt(this.EndParam - 1); + if (bul !== 0) { + let arc = this.GetCurveAtParam(this.EndParam - 1); + arc.ApplyMatrix(this.OCSInv); + arc.EndPoint = p; + //前面线的凸度调整 + this.SetBulgeAt(this.EndParam - 1, Math.tan(arc.AllAngle / 4) * Math.sign(bul)); + } + this.SetPointAt(this.EndParam, AsVector2(p)); + } + get CurveCount() { + return this.EndParam; + } + get StartParam() { + return 0; + } + /** + * 表示最后一条曲线的终止参数,使用该参数可以直接遍历到多段线的所有子线段. for(i 1 && (equalv3(this.StartPoint, this.EndPoint, 1e-4))); + } + set CloseMark(v) { + this.WriteAllObjectRecord(); + this._ClosedMark = v; + this.Update(); + } + DigestionCloseMark() { + if (this._ClosedMark && this._LineData.length > 1) { + this.WriteAllObjectRecord(); + this._ClosedMark = false; + if (!equalv2(this._LineData[0].pt, arrayLast(this._LineData).pt)) + this._LineData.push({ pt: AsVector2(this._LineData[0].pt), bul: 0 }); + } + } + /** + * 删除重复点 + * @param [fuzz=0.1] 容差=0.1 + */ + RemoveRepeatPos(fuzz = 0.1) { + let index = 0; + let pre = 0; + let writed = false; + for (let next = 1; next <= this._LineData.length; next++) { + if ((!this._ClosedMark && next === this._LineData.length) || //如果曲线没闭合 则总是保留最后一个点 + !equalv2(this._LineData[pre].pt, this._LineData[FixIndex$1(next, this._LineData)].pt, fuzz)) { + if (!writed) { + this.WriteAllObjectRecord(); + writed = true; + } + this._LineData[index] = this._LineData[pre]; + index++; + } + pre++; + } + if (equalv2(this._LineData[0].pt, this._LineData[index - 1].pt, fuzz)) + this._LineData[index - 1].pt.copy(this._LineData[0].pt); + this._LineData.length = index; + this.Update(); + } + get Length() { + return this.Explode().reduce((l, cu) => l + cu.Length, 0); + } + /** + * 获得指定参数所在的点. + * 当曲线存在闭合标志时,参数必须在曲线内部. + * 当曲线不存在闭合标志时,参数允许延伸出曲线. + * + * @param {number} param 参数 + * @returns {Vector3} 三维点,可为空 + */ + GetPointAtParam(param) { + if (param === Math.floor(param) && this.ParamOnCurve(param)) + return AsVector3(this.GetPoint2dAt(FixIndex$1(param, this.NumberOfVertices))).applyMatrix4(this.OCSNoClone); + let cu = this.GetCurveAtParam(param); + if (cu) + return cu.GetPointAtParam(this.GetCurveParamAtParam(param)); + return undefined; + } + GetDistAtParam(param) { + if (this._ClosedMark && !this.ParamOnCurve(param)) + return NaN; + //参数 整数 + let paramFloor = Math.floor(param); + //需要计算的曲线个数 + let cuCount = paramFloor > this.EndParam ? this.EndParam : paramFloor; + let dist = 0; + //首先计算完整曲线的长度 + for (let i = 0; i < cuCount; i++) { + dist += this.GetCurveAtIndex(i).Length; + } + //参数已经大于索引,证明参数在线外. + if (paramFloor !== cuCount) { + dist += this.GetCurveAtParam(param).GetDistAtParam(param - cuCount); + } + else if (param > paramFloor) { + let lastParam = param - paramFloor; + dist += this.GetCurveAtParam(param).GetDistAtParam(lastParam); + } + return dist; + } + GetPointAtDistance(dist) { + let param = this.GetParamAtDist(dist); + return this.GetPointAtParam(param); + } + /** + * 返回参数所在的点. 如果曲线不闭合,会试图返回延伸点参数 + * + * @param {Vector3} pt + * @returns {number} + * @memberof Polyline + */ + GetParamAtPoint(pt, fuzz = 1e-5) { + let cus = this.Explode(); + if (cus.length === 0) + return NaN; + for (let i = 0; i < cus.length; i++) { + let cu = cus[i]; + let param = cu.GetParamAtPoint(pt, fuzz); + if (cu.ParamOnCurve(param, fuzz)) + return i + param; //返回点在曲线内部的参数 + } + //当曲线闭合时,不需要延伸首尾去判断参数 + if (this._ClosedMark) + return NaN; + //起点终点参数集合 + let seParams = []; + //点在第一条曲线上的参数 + let startParam = cus[0].GetParamAtPoint(pt, fuzz); + if (!isNaN(startParam) && startParam < 0) + seParams.push(startParam); + //点在最后一条线上的参数 + let endParam = cus[cus.length - 1].GetParamAtPoint(pt, fuzz); + if (!isNaN(endParam) && endParam > 0) + seParams.push(endParam + this.EndParam - 1); + if (seParams.length == 1) { + return seParams[0]; + } + else if (seParams.length == 2) { + //返回较近的参数 + if (pt.distanceToSquared(this.StartPoint) + < pt.distanceToSquared(this.EndPoint)) + return seParams[0]; + else + return seParams[1]; + } + return NaN; + } + GetParamAtDist(dist) { + if (equaln$1(dist, 0)) + return 0; + let cus = []; + for (let i = 0; i < this.EndParam; i++) { + let cu = this.GetCurveAtIndex(i); + let len = cu.Length; + if (len < 1e-6) + continue; + cus.push(cu); + if (dist <= len) + return i + cu.GetParamAtDist(dist); + else if (equaln$1(dist, len, 1e-8)) + return i + 1; + dist -= len; + } + if (!this._ClosedMark) + return cus.length + cus[cus.length - 1].GetParamAtDist(dist); + return NaN; + } + GetDistAtPoint(pt) { + let param = this.GetParamAtPoint(pt); + if (!this.ParamOnCurve(param)) + return NaN; + return this.GetDistAtParam(param); + } + /** + * 这个方法允许点在曲线的延伸线上 + * @param pt 需要保证传入的点路径上 + * @returns + */ + GetDistAtPoint2(pt) { + let param = this.GetParamAtPoint(pt); + if (param < 0) { + let c1 = this.GetCurveAtIndex(0); + return c1.Length * param; + } + else if (param > this.EndParam) { + let ce = this.GetCurveAtIndex(this.EndParam - 1); + return this.Length + ce.Length * (param - this.EndParam); + } + return this.GetDistAtParam(param); + } + /** + * 返回曲线的一阶导数. + * 当曲线闭合(标志)且点不在曲线上. + * 或者曲线不闭合(标志) 且点不在曲线上也不在延伸上 + * + * @param {(number | Vector3)} param + * @returns {Vector3} + * @memberof Polyline + */ + GetFirstDeriv(param) { + if (param instanceof three.Vector3) + param = this.GetParamAtPoint(param); + if (isNaN(param)) + return undefined; + let cu = this.GetCurveAtParam(param); + if (!cu) + return undefined; + return cu.GetFirstDeriv(this.GetCurveParamAtParam(param)); + } + GetSplitCurves(param) { + //参数需要转化为参数数组 + let params; + if (typeof param == "number") + params = [param]; + else + params = param; + //校验参数在曲线中,修正参数 + let endParam = this.EndParam; + params = params.filter(p => this.ParamOnCurve(p) && p > -1e-6) + .map(a => { + if (a < 0) + return 0; + if (a > endParam) + return endParam; + if (equaln$1(a, Math.floor(a + 0.5), 1e-8)) + return Math.floor(a + 0.5); + return a; + }); + //排序 + params.sort((a, b) => a - b); + let hasEndParam = arrayLast(params) === this.EndParam; + //必须加入最后一个参数,保证切割后的曲线完整 + if (!hasEndParam) + params.push(this.EndParam); + arrayRemoveDuplicateBySort(params, (e1, e2) => equaln$1(e1, e2, 1e-8)); + params = params.filter(p => this.ParamOnCurve(p)); + if (params.length === 0) + return []; + //判断是否存在0参数 + let hasZeroParam = params[0] === 0; + if (hasZeroParam) + params.shift(); + let { pts, buls } = this.PtsBuls; + //返回的多段线集合 + let pls = []; + let len = 0; //已经走过的参数长度(整数) + //上一个切割参数的位置 0-1 + let prePa = 0; + for (let pa of params) { + //参数所在点 + let pt = AsVector2(this.GetPointAtParam(pa).applyMatrix4(this.OCSInv)); + pa -= len; + let pafloor = Math.floor(pa); + len += pafloor; + let plData = []; + //添加点 + for (let i = 0; i < pafloor; i++) { + if (i === 0 && !equaln$1(buls[0], 0, 1e-8)) { + buls[0] = Math.tan((1 - prePa) * Math.atan(buls[0])); + } + plData.push({ pt: pts[0], bul: buls[0] }); + pts.shift(); + buls.shift(); + } + if (equaln$1(pa, pafloor, 1e-8)) //如果pa在点上 + { + plData.push({ pt: pts[0].clone(), bul: buls[0] }); + } + else //在曲线上 + { + let bul = buls[0]; + if (!equaln$1(bul, 0, 1e-6)) + bul = Math.tan((pa - pafloor - (0 === pafloor ? prePa : 0)) * Math.atan(buls[0])); //->凸度 + //加入顶点+凸度 + plData.push({ pt: pts[0].clone(), bul }); + //终点 + plData.push({ pt, bul: 0 }); + //修正剩余的点表和凸度表 + pts[0].copy(pt); + } + prePa = pa - pafloor; + if (plData.length > 1) { + let pl = new Polyline_1(plData).ApplyMatrix(this.OCS); + pl.ColorIndex = this.ColorIndex; + pls.push(pl); + } + } + //当曲线为闭合曲线,并且不存在0切割参数时,首尾连接曲线 + if (this._ClosedMark && !hasZeroParam && !hasEndParam) { + let lastPl = pls[pls.length - 1]; + if (equalv2(arrayLast(lastPl._LineData).pt, pls[0]._LineData[0].pt)) + lastPl._LineData.pop(); + lastPl._LineData.push(...pls[0]._LineData); + pls.shift(); + } + return pls; + } + //未完善 + GetCurveAtParamRange(startParam, endParam) { + let sfloor = Math.floor(startParam + 0.5); + if (equaln$1(sfloor, startParam, 1e-8)) + startParam = sfloor; + else + sfloor = Math.floor(startParam); + let efloor = Math.floor(endParam + 0.5); + if (equaln$1(efloor, endParam, 1e-8)) + endParam = efloor; + else + efloor = Math.floor(efloor); + const GetCurve = (index) => { + let d = this._LineData[index]; + let next = this._LineData[index + 1]; + if (!equaln$1(d.bul, 0, 1e-8)) + return new exports.Arc().ParseFromBul(d.pt, next.pt, d.bul); + else + return new exports.Line(AsVector3(d.pt), AsVector3(next.pt)); + }; + let lined = []; + if (startParam === sfloor) { + let d = this._LineData[sfloor]; + lined.push({ pt: d.pt.clone(), bul: d.bul }); + } + else { + let d = this._LineData[sfloor]; + let cu = GetCurve(sfloor); + let remParam = startParam - sfloor; + let p = cu.GetPointAtParam(remParam); + let bul = d.bul; + if (!equaln$1(bul, 0)) + bul = Math.tan(Math.atan(bul) * (1 - remParam)); + lined.push({ pt: AsVector2(p), bul: bul }); + } + for (let i = sfloor + 1; i < efloor; i++) { + let d = this._LineData[i]; + lined.push({ pt: d.pt.clone(), bul: d.bul }); + } + if (efloor !== endParam) { + let d = this.LineData[efloor]; + let remParam = endParam - efloor; + let cu = GetCurve(efloor); + let p = cu.GetPointAtParam(remParam); + let bul = d.bul; + if (!equaln$1(bul, 0)) { + arrayLast(lined).bul = Math.tan(Math.atan(bul) * remParam); + bul = Math.tan(Math.atan(bul) * (1 - remParam)); + } + lined.push({ pt: AsVector2(p), bul }); + } + let pl = new Polyline_1(lined); + pl.OCS = this.OCSNoClone; + return; + } + Extend(newParam) { + if (this.CloseMark || this.ParamOnCurve(newParam)) + return; + this.WriteAllObjectRecord(); + let ptIndex; + let bulIndex; + if (newParam < 0) { + ptIndex = 0; + bulIndex = 0; + } + else if (newParam > this.EndParam) { + ptIndex = this.EndParam; + bulIndex = ptIndex - 1; + } + //修改顶点 + this._LineData[ptIndex].pt = AsVector2(this.GetPointAtParam(newParam).applyMatrix4(this.OCSInv)); + //修改凸度 + let oldBul = this._LineData[bulIndex].bul; + if (oldBul !== 0) + this._LineData[bulIndex].bul = Math.tan(Math.atan(oldBul) * (1 + Math.abs(newParam - ptIndex))); + this.Update(); + } + //const this + MatrixAlignTo2(toMatrix) { + if (!matrixIsCoplane(this._Matrix, toMatrix, 1e-4)) + return this.PtsBuls; + let m = matrixAlignCoordSys(this._Matrix, toMatrix); + let z1 = this.Normal; + let z2 = new three.Vector3().setFromMatrixColumn(toMatrix, 2); + let isMirror = equalv3(z1, z2.negate()); + let pts = []; + let buls = []; + for (let d of this._LineData) { + let p = AsVector2(AsVector3(d.pt).applyMatrix4(m)); + pts.push(p); + buls.push(isMirror ? -d.bul : d.bul); + } + return { pts, buls }; + } + /** + * 将多段线的OCS清除(请保证这个实体是在WCSZ0坐标系下,否则结果不正确!) + */ + MatrixIdentity() { + this.WriteAllObjectRecord(); + const { pts: pathPts, buls } = this.MatrixAlignTo2(new three.Matrix4); + this.OCSNoClone.identity(); + for (let i = 0; i < this.LineData.length; i++) { + this.LineData[i].pt.copy(pathPts[i]); + this.LineData[i].bul = buls[i]; + } + } + Join(cu, allowGap = false, tolerance = 1e-4) { + this.WriteAllObjectRecord(); + if (this._ClosedMark) + return exports.Status.False; + let [sp, ep, cuSp, cuEp] = [this.StartPoint, this.EndPoint, cu.StartPoint, cu.EndPoint]; + let ocsInv = this.OCSInv; + let [cuSp2, cuEp2] = [cuSp, cuEp].map(p => AsVector2(p.clone().applyMatrix4(ocsInv))); + if (this._LineData.length === 0) { + if (cu instanceof exports.Line) { + this._LineData.push({ pt: cuSp2, bul: 0 }); + this._LineData.push({ pt: cuEp2, bul: 0 }); + } + else if (cu instanceof exports.Arc) { + let x = new three.Vector3().setFromMatrixColumn(cu.OCSNoClone, 0); + let y = new three.Vector3().setFromMatrixColumn(cu.OCSNoClone, 1); + let cuZ = x.cross(y); + let dir = equalv3(this.Normal, cuZ, 1e-4) ? 1 : -1; + let bul = cu.Bul * dir; + this._LineData.push({ pt: cuSp2, bul: bul }); + this._LineData.push({ pt: cuEp2, bul: 0 }); + } + else if (cu instanceof Polyline_1) { + let f = new CADFiler(); + cu.WriteFile(f); + this.ReadFile(f); + } + else + return exports.Status.False; + } + else { + let LinkType; + (function (LinkType) { + LinkType[LinkType["None"] = 0] = "None"; + LinkType[LinkType["SpSp"] = 1] = "SpSp"; + LinkType[LinkType["SpEp"] = 2] = "SpEp"; + LinkType[LinkType["EpSp"] = 3] = "EpSp"; + LinkType[LinkType["EpEp"] = 4] = "EpEp"; + })(LinkType || (LinkType = {})); + let spspDisSq = cuSp.distanceToSquared(sp); + let spepDisSq = cuSp.distanceToSquared(ep); + let epspDisSq = cuEp.distanceToSquared(sp); + let epepDisSq = cuEp.distanceToSquared(ep); + let minDis = tolerance * tolerance; + let linkType = LinkType.None; + if (epspDisSq < minDis) { + linkType = LinkType.EpSp; + minDis = epspDisSq; + } + if (epepDisSq < minDis) { + linkType = LinkType.EpEp; + minDis = epepDisSq; + } + if (spspDisSq < minDis) { + linkType = LinkType.SpSp; + minDis = spspDisSq; + } + if (spepDisSq < minDis) { + linkType = LinkType.SpEp; + minDis = spepDisSq; + } + if (linkType === LinkType.None) + return exports.Status.False; + if (cu instanceof exports.Line) { + if (linkType === LinkType.SpSp) { + this._LineData.unshift({ pt: cuEp2, bul: 0 }); + } + else if (linkType === LinkType.SpEp) { + this._LineData.push({ pt: cuEp2, bul: 0 }); + } + else if (linkType === LinkType.EpSp) { + this._LineData.unshift({ pt: cuSp2, bul: 0 }); + } + else if (linkType === LinkType.EpEp) { + this._LineData.push({ pt: cuSp2, bul: 0 }); + } + } + else if (cu instanceof exports.Arc) { + let x = new three.Vector3().setFromMatrixColumn(cu.OCSNoClone, 0); + let y = new three.Vector3().setFromMatrixColumn(cu.OCSNoClone, 1); + let cuZ = x.cross(y); + let dir = equalv3(this.Normal, cuZ, 1e-4) ? 1 : -1; + let bul = cu.Bul * dir; + if (linkType === LinkType.SpSp) { + this._LineData.unshift({ pt: cuEp2, bul: -bul }); + } + else if (linkType === LinkType.SpEp) { + arrayLast(this._LineData).bul = bul; + this._LineData.push({ pt: cuEp2, bul: 0 }); + } + else if (linkType === LinkType.EpSp) { + this._LineData.unshift({ pt: cuSp2, bul: bul }); + } + else if (linkType === LinkType.EpEp) { + arrayLast(this._LineData).bul = -bul; + this._LineData.push({ pt: cuSp2, bul: 0 }); + } + } + else if (cu instanceof Polyline_1) { + if (cu.CloseMark) + return exports.Status.False; + let { pts, buls } = this.PtsBuls; + if (linkType === LinkType.SpSp) { + cu.Reverse(); + let cuPtsBul = cu.MatrixAlignTo2(this.OCS); + cuPtsBul.pts.pop(); + cuPtsBul.buls.pop(); + pts = cuPtsBul.pts.concat(pts); + buls = cuPtsBul.buls.concat(buls); + } + else if (linkType === LinkType.SpEp) { + pts.pop(); + buls.pop(); + let cuPtsBul = cu.MatrixAlignTo2(this.OCS); + pts = pts.concat(cuPtsBul.pts); + buls = buls.concat(cuPtsBul.buls); + } + else if (linkType === LinkType.EpSp) { + let cuPtsBul = cu.MatrixAlignTo2(this.OCS); + cuPtsBul.pts.pop(); + cuPtsBul.buls.pop(); + pts = cuPtsBul.pts.concat(pts); + buls = cuPtsBul.buls.concat(buls); + } + else if (linkType === LinkType.EpEp) { + pts.pop(); + buls.pop(); + cu.Reverse(); + let cuPtsBul = cu.MatrixAlignTo2(this.OCS); + pts = pts.concat(cuPtsBul.pts); + buls = buls.concat(cuPtsBul.buls); + } + this._LineData.length = 0; + for (let i = 0; i < pts.length; i++) { + this._LineData.push({ pt: pts[i], bul: buls[i] }); + } + } + else + return exports.Status.False; + } + //在上面的其他分支已经返回了假 所以这里直接返回真. + this.Update(); + return exports.Status.True; + } + /** + * 将曲线数组组合成多段线 + * @param curves 已经使用CurveLinked的数组,总是首尾相连 + * @returns + */ + static Combine(curves, tolerance = 1e-5) { + if (!curves || curves.length === 0) + return; + let pl = new Polyline_1; + pl.OCS = ComputerCurvesNormalOCS(curves); + for (let cu of curves) { + pl.Join(cu, false, 0.1); + // if (status === Status.False) + // console.log(); + } + let d = pl.LineData; + if (d.length > 1) { + let ld = arrayLast(d).pt; + if (equalv2(d[0].pt, ld, tolerance)) + ld.copy(d[0].pt); + } + return pl; + } + /**首尾相连的曲线直接连接 */ + static FastCombine(curves, tolerance = 1e-5, computOCS = true) { + if (!curves || curves.length === 0) + return; + let pl = new Polyline_1; + if (computOCS) + pl.OCS = ComputerCurvesNormalOCS(curves); + let ocsInv = pl.OCSInv; + let normal = pl.Normal; + let lineData = []; + for (let i = 0; i < curves.length; i++) { + let cu = curves[i]; + let bul = 0; + if (cu instanceof exports.Arc) { + let dir = equalv3(normal, cu.Normal.negate(), 1e-3) ? -1 : 1; + bul = cu.Bul * dir; + } + lineData.push({ + pt: AsVector2(cu.StartPoint.applyMatrix4(ocsInv)), + bul + }); + if (i === curves.length - 1) { + lineData.push({ + pt: AsVector2(cu.EndPoint.applyMatrix4(ocsInv)), + bul: 0 + }); + } + } + if (lineData.length > 1) { + let ld = arrayLast(lineData).pt; + if (equalv2(lineData[0].pt, ld, tolerance)) + ld.copy(lineData[0].pt); + } + pl.LineData = lineData; + return pl; + } + PtOnCurve(pt, fuzz = 1e-6) { + for (let i = 0; i < this.EndParam; i++) { + let c = this.GetCurveAtIndex(i); + if (c.PtOnCurve(pt, fuzz)) + return true; + } + return false; + } + //点在曲线上,已经确定点在曲线的延伸线上 + PtOnCurve3(p, fuzz = 1e-6) { + for (let i = 0; i < this.EndParam; i++) { + let c = this.GetCurveAtIndex(i); + if (c.PtOnCurve3(p, fuzz)) + return true; + } + return false; + } + PtInCurve(pt) { + return this.IsClose && IsPointInPolyLine(this, pt); + } + GetClosestPointTo(pt, extend) { + return this.GetClosestPointTo2(pt, extend ? ExtendType.Both : ExtendType.None); + } + GetClosestPointTo2(pt, extType) { + //当曲线空时,返回空 + if (this.EndParam < 1) + return undefined; + //当有闭合标志时,曲线在任何位置都不延伸 + if (this._ClosedMark) + extType = ExtendType.None; + //最近点 + let ptC = undefined; + //最近点的距离 + let ptCDist = Infinity; + for (let i = 0; i < this.EndParam; i++) { + let cu = this.GetCurveAtIndex(i); + //前延伸 + if (i === 0 && (extType & ExtendType.Front) > 0) { + let ptCFirst = cu.GetClosestPointTo(pt, true); + if (cu.GetParamAtPoint(ptCFirst) <= 1) { + ptC = ptCFirst; + ptCDist = ptC.distanceToSquared(pt); + } + if (extType === ExtendType.Front) + continue; + } + let ptCloseNew; //新的最近点 + //后延伸 (此处与前延伸分开if 如果线只有一段,那么前后延伸都能同时触发) + if (i === (this.EndParam - 1) && (extType & ExtendType.Back) > 0) { + let ptCLast = cu.GetClosestPointTo(pt, true); + if (cu.GetParamAtPoint(ptCLast) >= 0) + ptCloseNew = ptCLast; + else //如果延伸之后并不在曲线或者曲线的后延伸上 + ptCloseNew = cu.EndPoint; + } + else { + ptCloseNew = cu.GetClosestPointTo(pt, false); + } + let newDist = ptCloseNew.distanceToSquared(pt); + if (newDist < ptCDist) { + ptC = ptCloseNew; + ptCDist = newDist; + } + } + return ptC; + } + //偏移 + GetOffsetCurves(offsetDist) { + if (equaln$1(offsetDist, 0)) + return []; + let polyOffestUtil = new OffsetPolyline(this, offsetDist); + let curves = polyOffestUtil.Do(); + for (let cu of curves) + cu.ColorIndex = this.ColorIndex; + return curves; + } + GetFeedingToolPath(offsetDist, offsetDistSq = (offsetDist ** 2) * 2.1, joinType = PolylineJoinType.Round) { + if (equaln$1(offsetDist, 0)) + return []; + let polyOffestUtil = new OffsetPolyline(this, offsetDist, true, offsetDistSq, joinType); + return polyOffestUtil.Do(); + } + /** + * 分解 + */ + Explode() { + let exportCus = []; + for (let i = 0; i < this.EndParam; i++) { + exportCus.push(this.GetCurveAtIndex(i)); + } + return exportCus; + } + /** + * 根据参数得到参数所在的子曲线. + * + * 当曲线存在闭合标志时,参数必须在曲线内部,否则返回空. + * + * @param {number} param 参数值 + * @returns {Curve} 曲线(直线或者圆弧) 或空 + * @memberof Polyline + */ + GetCurveAtParam(param) { + if (this._ClosedMark && !this.ParamOnCurve(param)) + return undefined; + if (param < 0) + return this.GetCurveAtIndex(0); + else if (param >= this.EndParam) + return this.GetCurveAtIndex(this.EndParam - 1); + else + return this.GetCurveAtIndex(Math.floor(param)); + } + /** + * 得到参数在子曲线中的表示 + * + * @param {number} param 参数在多段线中表示 + * @returns {number} 参数在子曲线中表示 + * @memberof Polyline + */ + GetCurveParamAtParam(param) { + if (param >= this.EndParam) + param -= this.EndParam - 1; + else if (param > 0) + param -= Math.floor(param); + return param; + } + /** + * 获得曲线,来自索引位置. + * @param {number} i 索引位置 整数 + */ + GetCurveAtIndex(i) { + if (i >= this._LineData.length) + return undefined; + if (!this.ParamOnCurve(i)) + return undefined; + if (!this._ClosedMark && i === this._LineData.length - 1) + return undefined; + let d1 = this._LineData[i]; + let d2 = this._LineData[FixIndex$1(i + 1, this._LineData)]; + let curve; + if (equaln$1(d1.bul, 0, BUL_IS_LINE_FUZZ)) + curve = new exports.Line(AsVector3(d1.pt), AsVector3(d2.pt)).ApplyMatrix(this.OCSNoClone); + else + curve = new exports.Arc().ParseFromBul(d1.pt, d2.pt, d1.bul).ApplyMatrix(this.OCSNoClone); + curve.ColorIndex = this._Color; + return curve; + } + IntersectWith2(curve, intType, tolerance = 1e-5) { + return IntersectPolylineAndCurve(this, curve, intType, tolerance); + } + //计算自交点. + IntersectSelf() { + let cus = this.Explode(); + if (cus.length === 0) + return []; + let intParams = []; + for (let i = 0; i < cus.length; i++) { + let c = cus[i]; + for (let j = i + 2; j < cus.length; j++) { + let c2 = cus[j]; + let pts = c.IntersectWith(c2, IntersectOption.ExtendNone); + for (let p of pts) { + intParams.push(i + c.GetParamAtPoint(p)); + intParams.push(j + c2.GetParamAtPoint(p)); + } + } + } + return intParams; + } + IsIntersectSelf() { + let cus = this.Explode().filter(c => !equaln$1(c.Length, 0, 1e-3)); + for (let i = 0; i < cus.length - 1; i++) { + let c1 = cus[i]; + let c1IsLine = c1 instanceof exports.Line; + let d1 = c1.GetFirstDeriv(c1IsLine ? 0 : 1).normalize(); + for (let j = i + 1; j < cus.length; j++) { + let c2 = cus[j]; + let c2IsLine = c2 instanceof exports.Line; + let d2 = c2.GetFirstDeriv(0).normalize(); + if (j === i + 1) { + if (c1IsLine === c2IsLine) { + if (c1IsLine) { + if (equalv3(d1, d2.negate())) + return true; + continue; + } + else { + if (equalv3(d1, d2.negate()) && equalv3(c1.Center, c2.Center)) + return true; + } + } + } + let intPts = c1.IntersectWith2(c2, 0); + let intPtsLen = intPts.length; + if (intPtsLen > 0) { + if (intPtsLen === 2 && equalv3(intPts[0].pt, intPts[1].pt, 1e-3)) { + intPtsLen = 1; + intPts.pop(); + } + if (intPtsLen === 2 && j === i + 1 && cus.length === 2) { + if (intPts.every(r => equaln$1(r.thisParam, 0, 1e-3) || equaln$1(r.thisParam, 1, 1e-3))) + continue; + } + if (j === i + 1 && intPtsLen === 1) + continue; + if (this.IsClose && i === 0 && j === cus.length - 1 && intPtsLen === 1) + continue; + return true; + } + } + } + return false; + } + get BoundingBox() { + let box = new Box3Ext(); + for (let i = 0; i < this.EndParam; i++) { + let cu = this.GetCurveAtIndex(i); + box.union(cu.BoundingBox); + } + return box; + } + SetPtsBuls(pts, buls) { + this.WriteAllObjectRecord(); + this._LineData.length = 0; + for (let i = 0; i < pts.length; i++) { + let pt = pts[i]; + let bul = buls[i]; + this._LineData.push({ pt, bul }); + } + this.Update(); + return this; + } + /** + * 得到曲线有用的点表和凸度(闭合曲线首尾重复) + */ + get PtsBuls() { + let pts = []; + let buls = []; + if (this._LineData.length === 0) + return { pts, buls }; + for (let data of this._LineData) { + pts.push(data.pt.clone()); + buls.push(data.bul); + } + //闭合且起点不等于终点 + if (this._ClosedMark && + !this._LineData[0].pt.equals(arrayLast(this._LineData).pt)) { + pts.push(pts[0].clone()); + buls.push(buls[0]); + } + return { pts, buls }; + } + get IsBulge() { + if (!this.IsClose) + return false; + let refDir = Math.sign(this.Area2); + let c1; + let c2; + for (let i = 0; i < this.EndParam; i++) { + c1 = this.GetCurveAtIndex(i); + c2 = this.GetCurveAtIndex(FixIndex$1(i + 1, this.EndParam)); + let len1 = c1.Length; + let len2 = c2.Length; + let minLen = Math.min(len1, len2) * 0.2; + let p = c1.EndPoint; + let p1; + let p2; + if (c1 instanceof exports.Arc) { + let dir = c1.IsClockWise ? -1 : 1; + if (dir !== refDir) + return false; + p1 = c1.GetPointAtDistance(len1 - minLen); + } + else + p1 = c1.StartPoint; + if (c2 instanceof exports.Arc) { + let dir = c2.IsClockWise ? -1 : 1; + if (dir !== refDir) + return false; + p2 = c2.GetPointAtDistance(minLen); + } + else + p2 = c2.EndPoint; + let vec1 = p.clone().sub(p1); + let vec2 = p2.sub(p); + let dir = Math.sign(vec1.cross(vec2).z); + if (dir !== 0 && dir !== refDir) + return false; + } + return true; + } + get Shape() { + let { pts, buls } = this.PtsBuls; + return CreatePolylinePath(pts, buls, this._DisplayAccuracy); + } + get SVG() { + let sp = this.StartPoint; + let str = `M${sp.x} ${sp.y} `; + for (let i = 1; i <= this.EndParam; i++) { + let bul = this.GetBulgeAt(i - 1); + let p = this.GetPointAtParam(i); + if (bul === 0) + str += `L${p.x} ${p.y} `; + else { + let arc = this.GetCurveAtIndex(i - 1); + str += `A ${arc.Radius} ${arc.Radius} 0 ${Math.abs(bul) >= 1 ? 1 : 0} ${arc.IsClockWise ? 0 : 1} ${p.x} ${p.y}`; + } + } + return str; + } + GetDragPointCount(drag) { + if (drag === DragPointType.Grip) { + let count = this.EndParam * 2 + 1; + if (this.CloseMark) + count--; + return count; + } + else { + return this._LineData.length; + } + } + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + switch (snapMode) { + case ObjectSnapMode.End: + return this.GetStretchPoints(); + case ObjectSnapMode.Mid: + let midPts = []; + let enParam = this.EndParam; + for (let i = 0.5; i < enParam; i++) { + let p = this.GetPointAtParam(i); + p && midPts.push(p); + } + return midPts; + case ObjectSnapMode.Nea: + { + let nea = []; + for (let cu of this.Explode()) { + let neaa = cu.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform); + if (neaa) + nea.push(...neaa); + } + return nea; + } + case ObjectSnapMode.Ext: + { + let cp = this.GetClosestPointTo(pickPoint, true); + if (cp) + return [cp]; + break; + } + case ObjectSnapMode.Cen: + let cenPts = []; + for (let i = 0; i < this._LineData.length; i++) { + let data = this._LineData[i]; + if (!equaln$1(data.bul, 0)) { + let cu = this.GetCurveAtIndex(i); + if (cu) //end bul !== 0 但是并没有圆弧 + cenPts.push(cu.Center); + } + } + return cenPts; + case ObjectSnapMode.Per: + if (lastPoint) { + let cp = this.GetClosestPointTo(pickPoint, false); + if (!cp) + return []; + let cparam = this.GetParamAtPoint(cp); + let cu = this.GetCurveAtParam(cparam); + if (cu) { + let closestPt = cu.GetClosestPointTo(lastPoint, true); + if (closestPt && this.PtOnCurve(closestPt)) + return [closestPt]; + } + } + case ObjectSnapMode.Tan: + if (lastPoint) { + let clostPt = this.GetClosestPointTo(pickPoint, false); + if (!clostPt) + return []; + let par = this.GetParamAtPoint(clostPt); + let cu = this.GetCurveAtParam(par); + if (cu instanceof exports.Arc) + return cu.GetObjectSnapPoints(snapMode, pickPoint, lastPoint); + return []; + } + } + return []; + } + GetGripPoints() { + let ptList = []; + if (this._LineData.length < 2) + return ptList; + let enParam = this.EndParam; + if (this.CloseMark) + enParam -= 0.5; + for (let i = 0; i < enParam + 0.5; i += 0.5) { + let p = this.GetPointAtParam(i); + ptList.push(p); + } + return ptList; + } + MoveGripPoints(indexList, moveVec) { + this.WriteAllObjectRecord(); + let moveVLoc = AsVector2(moveVec.clone().applyMatrix4(new three.Matrix4().extractRotation(this.OCSInv))); + let calcIndexList = indexList; + if (indexList.length > 1) { + let centerIndexes = indexList.filter(i => i % 2 === 0); + if (centerIndexes.length > 0) + calcIndexList = centerIndexes; + } + for (let index of calcIndexList) { + if (index % 2 === 0) { + let cuIndex = index / 2; + let ptCount = this._LineData.length; + let frontIndex = cuIndex - 1; + if (this._ClosedMark) + frontIndex = FixIndex$1(frontIndex, ptCount); + if (frontIndex >= 0 && this.GetBulgeAt(frontIndex)) { + let arc = this.GetCurveAtIndex(frontIndex); + arc.MoveGripPoints([2], moveVec); + this._LineData[frontIndex].bul = arc.Bul; + } + if ((cuIndex !== ptCount - 1) && this.GetBulgeAt(cuIndex)) { + let arc = this.GetCurveAtIndex(cuIndex); + arc.MoveGripPoints([0], moveVec); + this._LineData[cuIndex].bul = arc.Bul; + } + this._LineData[cuIndex].pt.add(moveVLoc); + } + else { + let ptIndex = (index - 1) / 2; + let nextIndex = (FixIndex$1(ptIndex + 1, this._LineData)); + let d = this._LineData[ptIndex]; + if (d.bul === 0) { + this._LineData[ptIndex].pt.add(moveVLoc); + this._LineData[nextIndex].pt.add(moveVLoc); + } + else { + let arc = this.GetCurveAtIndex(ptIndex); + arc.MoveGripPoints([1], moveVec); + this._LineData[ptIndex].bul = arc.Bul; + } + } + } + this.Update(); + } + GetStretchPoints() { + let iswcs = MatrixIsIdentityCS(this._Matrix); + let pts = []; + for (let data of this._LineData) { + let p = AsVector3(data.pt); + if (!iswcs) + p.applyMatrix4(this._Matrix); + pts.push(p); + } + return pts; + } + /** + * 范围拉伸(stretch),对夹点进行拉伸. + * 如果对圆弧的一侧进行拉伸,那么修改bul + * + * @param {Array} indexList + * @param {Vector3} vec + */ + MoveStretchPoints(indexList, vec) { + this.WriteAllObjectRecord(); + //本地坐标系移动向量 + let moveVLoc = vec.clone().applyMatrix4(new three.Matrix4().extractRotation(this.OCSInv)); + let ptCount = this._LineData.length; + for (let index of indexList) { + if (index >= ptCount) + throw "在拉伸多段线顶点时,尝试拉伸不存在的顶点!(通常是因为模块中的板轮廓被破坏,导致的顶点丢失!)"; + let frontIndex = index - 1; + let nextIndex = index + 1; + if (this._ClosedMark) { + frontIndex = FixIndex$1(frontIndex, ptCount); + nextIndex = FixIndex$1(nextIndex, ptCount); + } + /** + * 根据新的拉伸点修改凸度. + * + * @param {number} nextIndex 隔壁点索引 + * @param {number} bulIndex 需要修改凸度位置的索引 + * @returns + */ + const ChangeBul = (nextIndex, bulIndex) => { + //需要修改的点的数据 + let d = this._LineData[bulIndex]; + if (d === undefined || d.bul === 0) + return; + //如果隔壁点不在拉伸列表中 + if (indexList.indexOf(nextIndex) === -1) { + let needChangeP = this.GetPointAtParam(index); + let notChangeP = this.GetPointAtParam(nextIndex); + //原先的弦长的一半 + let oldChordLengthHalf = needChangeP.distanceTo(notChangeP) * 0.5; + //弓高 + let arcHeight = oldChordLengthHalf * d.bul; + needChangeP.add(vec); + let newChordLengthHalf = needChangeP.distanceTo(notChangeP) * 0.5; + d.bul = arcHeight / newChordLengthHalf; + } + }; + ChangeBul(frontIndex, frontIndex); + ChangeBul(nextIndex, index); + //修改顶点 + this._LineData[index].pt.add(AsVector2(moveVLoc)); + } + this.Update(); + } + _ReadFile(file) { + super._ReadFile(file); + let ver = file.Read(); + this._LineData.length = 0; + let count = file.Read(); + for (let i = 0; i < count; i++) { + let v = new three.Vector2().fromArray(file.Read()); + let bul = file.Read(); + this._LineData.push({ pt: v, bul: bul }); + } + if (ver > 1) + this._ClosedMark = file.Read(); + // 某些时候会画出这样的多段线 尚未知道是为什么画出的 + // if (this._LineData.length === 0) + // this.Erase(); + if (ver > 2) + this.ReadRoomAndCabinetName(file); + } + //对象将自身数据写入到文件. + WriteFile(file) { + super.WriteFile(file); + file.Write(3); + file.Write(this._LineData.length); + for (let l of this._LineData) { + file.Write(l.pt.toArray()); + file.Write(l.bul); + } + file.Write(this._ClosedMark); + this.WriteRoomAndCabinetName(file); + } +}; +exports.Polyline = Polyline_1 = __decorate([ + Factory +], exports.Polyline); +const TempPolyline = new exports.Polyline(); + +/** + * 线性切割多线段 + * @param {Polyline} meatPl 被切割的曲线 + * @param {Polyline[]} knifePls 刀曲线 + * @param {boolean} [isSweep = false] 是否为圆弧板(被切割的曲线是否为圆弧板的轮廓) + * @return {Polyline[]} 切割后的多线段 + */ +function SplitPolyline(meatPl, knifePls, isSweep = false) { + let allSplitPls = []; + let allIntersePts = []; + for (let pl of knifePls) { + let ipts = pl.IntersectWith(meatPl, IntersectOption.ExtendThis); + allIntersePts.push(...ipts); + if (pl.LineData.length === 2 && ipts.length > 1) //直线切割,且有2个已经的顶点 + { + if (ipts.length === 2) { + pl.StartPoint = ipts[0]; + pl.EndPoint = ipts[1]; + } + else { + ipts.sort(ComparePointFnGenerate("xy")); + pl.StartPoint = ipts[0]; + pl.EndPoint = arrayLast(ipts); + } + } + else { + let iptsNotExt = ipts.filter(p => pl.PtOnCurve(p)); + if (iptsNotExt.length < 2 && ipts.length === 2) { + let params = ipts.map(p => pl.GetParamAtPoint(p)); + pl.Extend(params[0]); + pl.Extend(params[1]); + } + } + let splitPls = pl.GetSplitCurvesByPts(ipts); + allSplitPls.push(...splitPls); + } + let brSplitCus = meatPl.GetSplitCurvesByPts(allIntersePts); + allSplitPls = allSplitPls.filter(pl => { + return meatPl.PtInCurve(pl.GetPointAtParam(pl.EndParam / 2)); //切割线必须在板内才有用 + }); + let regionParse = new RegionParse(brSplitCus.concat(allSplitPls)); + let cus = regionParse.RegionsInternal.map(r => { + let pl = new exports.Polyline(); + for (let route of r) + pl.Join(route.curve); + if (pl.Area2 < 0) + pl.Reverse(); + // 针对圆弧板特殊处理(去除多余的控制点) + if (isSweep) { + pl = pl.GetOffsetCurves(10)[0]; + pl = pl.GetOffsetCurves(-10)[0]; + } + return pl; + }); + return cus; +} + /** * 一个简单的计数器实现,本质是使用一个Map来保存元素的个数 * @@ -10280,6 +11000,22 @@ function equalCurve(cu1, cu2, tolerance = 1e-4) { return equalArray(buls1, buls2, equaln$1) && equalArray(pts1, pts2, (p1, p2) => equalv3(AsVector3(p1).applyMatrix4(cu1.OCS), AsVector3(p2).applyMatrix4(cu2.OCS), tolerance)); } + else if ((cu1 instanceof exports.Polyline && cu2 instanceof exports.Circle) + || (cu1 instanceof exports.Circle && cu2 instanceof exports.Polyline)) { + if (cu1 instanceof exports.Circle) + [cu1, cu2] = [cu2, cu1]; + if (cu1.EndParam < 2) + return false; + let curves = cu1.Explode(); + if (curves.length < 2 || !curves.every(c => c instanceof exports.Arc)) + return false; + let c1 = curves[0]; + if (!(equalv3(c1.Center, cu2.Center) && equaln$1(c1.Radius, cu2.Radius, 1e-6))) + return false; + for (let i = 1; i < curves.length - 1; i++) + c1.Join(curves[i]); + return c1.Join(curves[curves.length - 1]) === exports.Status.ConverToCircle; + } else if (cu1 instanceof exports.Circle && cu2 instanceof exports.Circle) { return equalv3(cu1.Center, cu2.Center) && equaln$1(cu1.Radius, cu2.Radius, 1e-6); } @@ -10338,7 +11074,7 @@ function GetTanPtsOnArcOrCircle(cu, lastPoint) { new three.Vector3(cu.Radius * (cu.Radius * v.x + v.y * deltaDist) * ratio, cu.Radius * (cu.Radius * v.y - v.x * deltaDist) * ratio), ]; for (let p of pts) - p.applyMatrix4(cu.OCS); + p.applyMatrix4(cu.OCSNoClone); return pts; } } @@ -10634,32 +11370,209 @@ class Singleton { } } -function ScaleUV(geo, scale = 1e-3) { - for (let uvsg of geo.faceVertexUvs) { - for (let uvs of uvsg) { - for (let uv of uvs) { - uv.multiplyScalar(scale); +var BoardType; +(function (BoardType) { + BoardType[BoardType["Layer"] = 0] = "Layer"; + BoardType[BoardType["Vertical"] = 1] = "Vertical"; + BoardType[BoardType["Behind"] = 2] = "Behind"; //背板 +})(BoardType || (BoardType = {})); +//纹路类型 +var LinesType; +(function (LinesType) { + /** 正纹 */ + LinesType[LinesType["Positive"] = 0] = "Positive"; + /** 反纹 */ + LinesType[LinesType["Reverse"] = 1] = "Reverse"; + /** 可翻转 */ + LinesType[LinesType["CanReversal"] = 2] = "CanReversal"; +})(LinesType || (LinesType = {})); +//映射对应的名称 +({ + [LinesType.Positive]: "正纹", + [LinesType.Reverse]: "反纹", + [LinesType.CanReversal]: "可翻转" +}); +// 排版面 +var ComposingType; +(function (ComposingType) { + ComposingType[ComposingType["Positive"] = 0] = "Positive"; + ComposingType[ComposingType["Reverse"] = 1] = "Reverse"; + ComposingType[ComposingType["Arbitrary"] = 2] = "Arbitrary"; //任意 +})(ComposingType || (ComposingType = {})); +var BoardOpenDir; +(function (BoardOpenDir) { + BoardOpenDir[BoardOpenDir["Left"] = 1] = "Left"; + BoardOpenDir[BoardOpenDir["Right"] = 2] = "Right"; + BoardOpenDir[BoardOpenDir["Up"] = 3] = "Up"; + BoardOpenDir[BoardOpenDir["Down"] = 4] = "Down"; + BoardOpenDir[BoardOpenDir["NoOpen"] = 5] = "NoOpen"; + BoardOpenDir[BoardOpenDir["None"] = 0] = "None"; +})(BoardOpenDir || (BoardOpenDir = {})); +var BrRelativePos; +(function (BrRelativePos) { + BrRelativePos["Front"] = "front"; + BrRelativePos["Back"] = "back"; + BrRelativePos["Top"] = "top"; + BrRelativePos["Bottom"] = "bottom"; + BrRelativePos["Left"] = "left"; + BrRelativePos["Right"] = "right"; + BrRelativePos["Div"] = "div"; +})(BrRelativePos || (BrRelativePos = {})); +// 追加备注 +var AddRemarkType; +(function (AddRemarkType) { + AddRemarkType[AddRemarkType["Cover"] = 1] = "Cover"; + AddRemarkType[AddRemarkType["NoCover"] = 0] = "NoCover"; +})(AddRemarkType || (AddRemarkType = {})); + +const DIRS = [XAxis, YAxis, ZAxis, XAxisN, YAxisN, ZAxisN]; +function GetFaceDir(direction) { + let absx = Math.abs(direction.x); + let absy = Math.abs(direction.y); + let absz = Math.abs(direction.z); + let face = -1.0; + if (absx > absz) { + if (absx > absy) + face = direction.x > 0 ? 0 : 3; + else + face = direction.y > 0 ? 1 : 4; + } + else { + if (absz > absy) + face = direction.z > 0 ? 2 : 5; + else + face = direction.y > 0 ? 1 : 4; + } + return DIRS[face]; +} +class GenUVForWorld { + constructor() { + this.InvMtxMap = new Map(); + this._Z = new three.Vector3; + this._X = new three.Vector3; + this._Y = new three.Vector3; + this._Box = new three.Box3; + this._Box2 = new three.Box3; + } + GetMtxInv(normalX, normalY, normalZ) { + this._Z.set(normalX, normalY, normalZ); + let n = GetFaceDir(this._Z); + let mtx = this.InvMtxMap.get(n); + if (mtx) + return mtx; + this._Z.copy(n); + Orbit.ComputUpDirection(this._Z, this._Y, this._X); + mtx = new three.Matrix4().makeBasis(this._X, this._Y, this._Z); + mtx.getInverse(mtx); + this.InvMtxMap.set(n, mtx); + return mtx; + } + GenUV(mesh) { + if (Array.isArray(mesh.material)) { + let geo = mesh.geometry; + if (!geo.boundingBox) + geo.computeBoundingBox(); + let normals = geo.getAttribute("normal"); + let pos = geo.getAttribute("position"); + let uvs = geo.getAttribute("uv"); + for (let i = 0; i < mesh.material.length; i++) { + let mtl = mesh.material[i]; + if (mtl[USE_WORLD_UV]) { + this._Box.makeEmpty(); + let g = mesh.geometry.groups[i]; + for (let y = 0; y < g.count; y++) { + let index = (y + g.start) * 3; + this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]); + this._Box.expandByPoint(this._X); + } + for (let y = 0; y < g.count; y++) { + let index = (y + g.start) * 3; + let mtx = this.GetMtxInv(normals.array[index], normals.array[index + 1], normals.array[index + 2]); + this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]); + this._X.applyMatrix4(mtx); + this._Box2.copy(this._Box).applyMatrix4(mtx); + //@ts-ignore + 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; + //@ts-ignore + 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; + } + uvs.needsUpdate = true; + } } } + else { + let mtl = mesh.material; + if (mtl[USE_WORLD_UV]) + this.GenGeoUV(mesh.geometry, mtl, 1e-2); + } } -} -function ScaleUV2(geo, ocs, xScale = 1e-3, yScale = 1e-3, isInvert = false) { - for (let uvsg of geo.faceVertexUvs) { - for (let uvs of uvsg) { - for (let uv of uvs) { - let p = new three.Vector3(uv.x, uv.y).applyMatrix4(ocs); - uv.x = p.x; - uv.y = p.y; - if (isInvert) { - uv.x /= yScale; - uv.y /= xScale; - } - else { - uv.x /= xScale; - uv.y /= yScale; - } - } + GenGeoUV(bGeo, mtl, scale = 1e-3) { + if (!bGeo.boundingBox) + bGeo.computeBoundingBox(); + let normals = bGeo.getAttribute("normal"); + let pos = bGeo.getAttribute("position"); + let uvs = bGeo.getAttribute("uv"); + if (!pos || !uvs || pos.count === 0) + return; + for (let y = 0; y < pos.count; y++) { + let index = y * 3; + let mtx = this.GetMtxInv(normals.array[index], normals.array[index + 1], normals.array[index + 2]); + this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]); + this._X.applyMatrix4(mtx); + this._Box.copy(bGeo.boundingBox); + this._Box.applyMatrix4(mtx); + //@ts-ignore + 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; + //@ts-ignore + 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; } + uvs.needsUpdate = true; + } +} + +//板件的UV计算 +class GenLocalUv { + constructor() { + this.InvMtxMap = new Map(); + this._Z = new three.Vector3; + this._X = new three.Vector3; + this._Y = new three.Vector3; + } + GetMtxInv({ normalX, normalY, normalZ }, IsReverse) { + this._Z.set(normalX, normalY, normalZ); + let n = GetFaceDir(this._Z); + let mtx = this.InvMtxMap.get(n); + if (mtx) + return mtx; + this._Z.copy(n); + if (n.z != 0 && !IsReverse) //正面和背面不旋转 + Orbit.ComputUpDirection(this._Z, this._Y, this._X); + else + Orbit.ComputUpDirection(this._Z, this._X, this._Y); + mtx = new three.Matrix4().makeBasis(this._X, this._Y, this._Z); + mtx.getInverse(mtx); + this.InvMtxMap.set(n, mtx); + return mtx; + } + //计算uv值 + CalculateUv(geo, IsReverse, scale = 1e-3) { + if (!geo.boundingBox) + geo.computeBoundingBox(); + let normals = geo.getAttribute("normal"); + let pos = geo.getAttribute("position"); + const uvs = []; + for (let y = 0; y < pos.count; y++) { + let index = y * 3; + const normalX = normals.array[index]; + const normalY = normals.array[index + 1]; + const normalZ = normals.array[index + 2]; + let mtx = this.GetMtxInv({ normalX, normalY, normalZ }, IsReverse); + this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]); + this._X.applyMatrix4(mtx); + uvs.push(this._X.x * scale); + uvs.push(this._X.y * scale); + } + geo.setAttribute("uv", new three.Float32BufferAttribute(uvs, 2)); } } @@ -10667,6 +11580,14 @@ class Shape { constructor(_Outline = new Contour, _Holes = []) { this._Outline = _Outline; this._Holes = _Holes; + this._DisplayAccuracy = 0; + } + get DisplayAccuracy() { + return this._DisplayAccuracy; + } + set DisplayAccuracy(v) { + if (!equaln$1(v, this._DisplayAccuracy)) + this._DisplayAccuracy = v; } get Outline() { return this._Outline; @@ -10702,6 +11623,7 @@ class Shape { else shape.holes.push(h.Shape); } + shape.DisplayAccuracy = this._DisplayAccuracy; return shape; } get Position() { @@ -10856,9 +11778,8 @@ class Shape { let tmpContours = cu.SubstactBoolOperation(outline).sort((a, b) => b.Area - a.Area); //面积从大到校 let isAllContainered = tmpContours.length > 1 && tmpContours.slice(1).every((cu, index) => tmpContours[0].ContainerCurve(cu.Curve, true)); //洞是否被最大的洞包含,是,则把被包含的洞都提取出来加入形状数组 - if (isAllContainered) { + if (isAllContainered) shapes.push(...this.targetOutlinesSubHoles(tmpContours.slice(1).map(c => new Shape(c)), tarHoles.map(c => new Shape(c)))); - } else unionHoles.push(...tmpContours); }); @@ -11082,664 +12003,1100 @@ class Shape { } } -class ShapeManager { - constructor(_ShapeList = []) { - this._ShapeList = _ShapeList; +/** Epsilon used during determination of near zero distances. + * @default + */ +const EPS = 5e-2; + +// ////////////////////////////// +// tolerance: The maximum difference for each parameter allowed to be considered a match +class FuzzyFactory { + constructor(numdimensions = 3, tolerance = EPS) { + this.lookuptable = {}; + this.multiplier = 1.0 / tolerance; } - get ShapeList() { - return this._ShapeList.slice(); - } - get ShapeCount() { - return this._ShapeList.length; - } - get ShapeArea() { - return this._ShapeList.map(s => s.Area).reduce((a1, a2) => a1 + a2, 0); - } - AppendShapeList(shapes) { - Array.isArray(shapes) ? this._ShapeList.push(...shapes) : this._ShapeList.push(shapes); - return this; - } - Clear() { - this._ShapeList.length = 0; - } - BoolOper(otherMg, booltype) { - switch (booltype) { - case exports.BoolOpeartionType.Intersection: - return this.IntersectionBoolOperation(otherMg); - case exports.BoolOpeartionType.Union: - return this.UnionBoolOperation(otherMg); - case exports.BoolOpeartionType.Subtract: - return this.SubstactBoolOperation(otherMg); + // let obj = f.lookupOrCreate([el1, el2, el3], function(elements) {/* create the new object */}); + // Performs a fuzzy lookup of the object with the specified elements. + // If found, returns the existing object + // If not found, calls the supplied callback function which should create a new object with + // the specified properties. This object is inserted in the lookup database. + lookupOrCreate(els, object) { + let hash = ""; + let multiplier = this.multiplier; + for (let el of els) { + let valueQuantized = Math.round(el * multiplier); + hash += valueQuantized + "/"; } - } - //交集 如果成功返回一个面域 失败返回0个 - IntersectionBoolOperation(target) { - let shapes = []; - for (let srcShape of this._ShapeList) { - for (let tarShape of target._ShapeList) { - let tmpShapes = srcShape.IntersectionBoolOperation(tarShape); - shapes.push(...tmpShapes); + if (hash in this.lookuptable) + return this.lookuptable[hash]; + else { + let hashparts = els.map(el => { + let q0 = Math.floor(el * multiplier); + let q1 = q0 + 1; + return ["" + q0 + "/", "" + q1 + "/"]; + }); + let numelements = els.length; + let numhashes = 1 << numelements; + for (let hashmask = 0; hashmask < numhashes; ++hashmask) { + let hashmaskShifted = hashmask; + hash = ""; + hashparts.forEach(hashpart => { + hash += hashpart[hashmaskShifted & 1]; + hashmaskShifted >>= 1; + }); + this.lookuptable[hash] = object; } - } - this.Clear(); - this._ShapeList = shapes; - return this._ShapeList.length > 0; - } - //并集,如果有一个形状并集成功,就成功 - UnionBoolOperation(targetMg) { - let isSuccess = false; - let srcShapes = this._ShapeList; - let tarShapes = targetMg._ShapeList; - let alones = []; //孤立的形状 - const boxCache = new WeakMap(); - for (let src of srcShapes) { - let notUnions = []; //未被合并的形状列表 来自tarShapes - let srcBox = src.BoundingBox; - for (let tar of tarShapes) { - let tarBox = boxCache.get(tar); - if (!tarBox) { - tarBox = tar.BoundingBox; - boxCache.set(tar, tarBox); - } - if (!IntersectBox2(srcBox, tarBox)) { - notUnions.push(tar); - continue; - } - let unions = src.UnionBoolOperation(tar); - if (unions.length === 1) //并集成功 - { - isSuccess = true; - src = unions[0]; //src设置为 合并完的形状 - } - else //并集失败 - notUnions.push(tar); //设置为未计算 - } - //如果发现src和任意一个形状并集成功,那么 - if (notUnions.length !== tarShapes.length) { - notUnions.push(src); //加入src 进行下一轮 - tarShapes = notUnions; - } - else - alones.push(src); //它是孤独的一个形状 - } - this._ShapeList = alones.concat(tarShapes); - return isSuccess; - } - SubstactBoolOperation(target) { - let newShapes = []; - for (let s of this._ShapeList) { - let ss = s.SubstactBoolOperation(target.ShapeList); - newShapes.push(...ss); - } - this._ShapeList = newShapes; - return true; - } - /** - * 与region.ApplyMatrix不同的是,这个是直接操作内部对象. - * 通常用来计算布尔运算时需要真实的移动这个位置. - * 并且将不会刷新显示 - * - * @param {Matrix4} mat4 - * @memberof ShapeManager - */ - ApplyMatrix(mat4) { - for (let s of this._ShapeList) { - s.Outline.Curve.ApplyMatrix(mat4); - s.Holes.forEach(o => o.Curve.ApplyMatrix(mat4)); - } - } - ReadFile(file) { - file.Read(); //1 - let cout = file.Read(); - for (let i = 0; i < cout; i++) { - let obj = new Shape(); - obj.ReadFile(file); - this._ShapeList.push(obj); - } - } - WriteFile(file) { - file.Write(1); //ver - file.Write(this.ShapeList.length); - for (let s of this.ShapeList) { - s.WriteFile(file); + return object; } } } -var Region_1; -let Region = Region_1 = class Region extends Entity { - static CreateFromCurves(cus) { - let shapes = Contour.GetAllContour(cus).map(out => new Shape(out)); - if (shapes.length > 0) { - let reg = new Region_1(); - //MarkX:曲线同面域一起移动 - reg.ApplyMatrix(shapes[0].Outline.Curve.OCS); - reg.ShapeManager.AppendShapeList(shapes); - return reg; +new three.Vector3(); +new three.Vector3(); +new three.Vector3(); + +var Type; +(function (Type) { + Type[Type["CoplanarFront"] = 0] = "CoplanarFront"; + Type[Type["CoplanarBack"] = 1] = "CoplanarBack"; + Type[Type["Front"] = 2] = "Front"; + Type[Type["Back"] = 3] = "Back"; + Type[Type["Spanning"] = 4] = "Spanning"; +})(Type || (Type = {})); + +function Geometry2CSG2(geometry) { + if (geometry instanceof three.BufferGeometry) + geometry = new three.Geometry().fromBufferGeometry(geometry); + let polygons = []; + for (let i = 0; i < geometry.faces.length; i++) { + let face = geometry.faces[i]; + let vertices = []; + if (face instanceof three.Face3) { + vertices.push(geometry.vertices[face.a].toArray()); + vertices.push(geometry.vertices[face.b].toArray()); + vertices.push(geometry.vertices[face.c].toArray()); + } + polygons.push(poly3.create(vertices)); + } + return retessellate__default["default"](geom3__default["default"].create(polygons)); +} +function CSG2Geometry2(csg) { + let geo = new three.Geometry; + for (let poly of csg.polygons) { + let normal; //面的法线 + //@ts-ignore + if (poly.plane) + //@ts-ignore + normal = new three.Vector3().fromArray(poly.plane); + let startIndex = geo.vertices.length; + for (let v of poly.vertices) + geo.vertices.push(new three.Vector3().fromArray(v)); + if (!normal && poly.vertices.length > startIndex + 2) //如果没有法线,则自己计算 + normal = new three.Plane().setFromCoplanarPoints(geo.vertices[startIndex], geo.vertices[startIndex + 1], geo.vertices[startIndex + 2]).normal; + for (let i = poly.vertices.length - 3; i >= 0; i--) { + let f = new three.Face3(startIndex, startIndex + i + 1, startIndex + i + 2, normal); + geo.faces.push(f); } } - constructor(_ShapeManager = new ShapeManager()) { - super(); - this._ShapeManager = _ShapeManager; + return geo; +} + +class ArcBoardBuild { + //弃用 + // private _SweepParamRanges: [number, number][];//Path 每段的起点参数和终点参数 基于SweepCurves1 + constructor(_board, + //放样路径 + _SweepPath = _board.GetSweepPath(), + //路径基于板旋转 + _SweepAngle = _board.SweepAngle, _FaceDir = _board.SweepVisibleFace) { + this._board = _board; + this._SweepPath = _SweepPath; + this._SweepAngle = _SweepAngle; + this._FaceDir = _FaceDir; + // //稳健折弯 + // private ParseSweepLengths2() + // { + // let sweepCurves = this.SweepCurves; + // let sweepCurves2 = this.SweepCurves2; + // let lengths: number[] = []; + // this._SweepParamRanges = []; + // for (let i = 0; i < sweepCurves.length; i++) + // { + // let c1 = sweepCurves[i]; + // let c2 = sweepCurves2[i]; + // if (c1 instanceof Line) + // { + // let param = new GetLineParam(c1); + // //我们这里得到了折弯处的参数 或许可以有用? + // let sp = param.GetParamAtPoint(c2.StartPoint); + // let ep = param.GetParamAtPoint(c2.EndPoint); + // this._SweepParamRanges.push([sp, ep]); + // sp = Math.min(sp, 0); + // ep = Math.max(ep, 1); + // lengths.push(param.Length * (ep - sp)); + // } + // else + // { + // let sa = c1.GetAngleAtPoint(c2.StartPoint); + // let ea = c1.GetAngleAtPoint(c2.EndPoint); + // let sp = c1.GetParamAtAngle(sa); + // let ep = c1.GetParamAtAngle(ea); + // this._SweepParamRanges.push([sp, ep]); + // sp = Math.min(sp, 0); + // ep = Math.max(ep, 1); + // //背面为c1 正面为c2 + // lengths.push((this._FaceDir === FaceDirection.Front ? c2.Length : c1.Length) * (ep - sp)); + // } + // } + // this._SweepLengths = lengths; + // } + //用于缓存X位置->映射点和方向 + this._CacheFuzzXFactory = new FuzzyFactory(1, 1e-3); //唯一映射x + this._Cache_X_PosDirMap = new Map; + this.ParseContourLength(); } - //如果需要修改获取到的属性,需要Clone后进行操作,否则会对原实体进行破坏 - get ShapeManager() { - return this._ShapeManager; + get SweepPath1() { return this._SweepPath1; } + get SweepPath2() { return this._SweepPath2; } + ParseContourLength() { + if (this._SweepAngle !== 0 && !this._Rotate2OCSMtx) + this.ParseRotateMtx(); } - get Area() { - return this.ShapeManager.ShapeArea; + //针对本算法特殊定制的偏移算法 避免偏移后起点丢失(主要是圆) + static OffsetPolyline(path, dist) { + let offset = new OffsetPolyline(path, dist); + offset._AllowConverToCircle = false; + return offset.Do()[0]; } - get BoundingBox() { - let box = new three.Box3(); - for (let s of this._ShapeManager.ShapeList) - box.union(s.BoundingBox); - return box; + get OCS2RotateMtx() { + if (!this._OCS2RotateMtx) + this.ParseRotateMtx(); + return this._OCS2RotateMtx; } - Explode() { - let shapeList = this._ShapeManager.ShapeList; - if (shapeList.length <= 1) { - return shapeList[0].Explode(); + get Rotate2OCSMtx() { + if (!this._OCS2RotateMtx) + this.ParseRotateMtx(); + return this._Rotate2OCSMtx; + } + ParseRotateMtx() { + if (this._SweepAngle === 0) + this._OCS2RotateMtx = new three.Matrix4; + let con = this._board.ContourCurve.Clone(); + let mtx = new three.Matrix4().makeRotationZ(-this._SweepAngle); + con.ApplyMatrix(mtx); + let box = con.BoundingBox; + mtx.setPosition(box.min.negate()); + this._OCS2RotateMtx = mtx; + this._Rotate2OCSMtx = new three.Matrix4().getInverse(mtx); + } + get SweepCurves1() { + return this._SweepCurves1; + } + get SweepCurves2() { + return this._SweepCurves2; + } + ParseSweepCurves() { + let path = ArcBoardBuild.OffsetPolyline(this._SweepPath, -this._board.Thickness); + if (this._FaceDir === FaceDirection.Back) { + this._SweepPath1 = ArcBoardBuild.OffsetPolyline(path, this._board.Thickness); + this._SweepPath2 = path; + this._SweepCurves1 = this._SweepPath1.Explode(); + this._SweepCurves2 = this._SweepCurves1.map(c => { + let offsetC = c.GetOffsetCurves(-this._board.Thickness)[0]; + if (!offsetC) + offsetC = new exports.Line(c.StartPoint, c.StartPoint); + return offsetC; + }); } else { - let regs = []; - shapeList.forEach(s => { - let reg = new Region_1().ApplyMatrix(this.OCS); - reg.ShapeManager.AppendShapeList(s); - regs.push(reg); + this._SweepPath1 = path; + this._SweepPath2 = ArcBoardBuild.OffsetPolyline(this._SweepPath1, this._board.Thickness); + this._SweepCurves1 = this._SweepPath1.Explode(); + this._SweepCurves2 = this._SweepCurves1.map(c => { + let offsetC = c.GetOffsetCurves(this._board.Thickness)[0]; + if (!offsetC) + offsetC = new exports.Line(c.StartPoint, c.StartPoint); + return offsetC; }); - return regs; } + this._SweepLengths = this._SweepCurves1.map(c => c.Length); + return this; } - /** - * 对于布尔操作,这个将会变换内部轮廓到对方坐标系. - * 并且这个变换不会更新图形绘制. - * @param {Matrix4} m - * @memberof Region - */ - ShapeApplyMatrix(m) { - this.WriteAllObjectRecord(); - this._ShapeManager.ApplyMatrix(m); + get SweepLengths() { + if (!this._SweepLengths) + this.ParseSweepCurves(); + return this._SweepLengths; } - GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { - switch (snapMode) { - case ObjectSnapMode.End: - return this.GetGripPoints(); - case ObjectSnapMode.Mid: - case ObjectSnapMode.Cen: - case ObjectSnapMode.Nea: - case ObjectSnapMode.Ext: - case ObjectSnapMode.Per: - case ObjectSnapMode.Tan: - { - let pts = []; - for (let s of this._ShapeManager.ShapeList) { - pts.push(...s.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)); + get SweepLength() { + let length = 0; + for (let l of this.SweepLengths) + length += l; + return length; + } + get SweepEndDists() { + if (this._SweepEndDists) + return this._SweepEndDists; + this._SweepEndDists = []; + let sumLength = 0; + for (let i = 0; i < this.SweepLengths.length; i++) { + let length = this.SweepLengths[i]; + sumLength += length; + this._SweepEndDists.push(sumLength); + } + return this._SweepEndDists; + } + get CSGBoard() { + if (!this._csgBoard) + this.ParseCSGBoard(); + return this._csgBoard; + } + get SplitXList() { + if (!this._splitXList) + this.ParseSplitXlist(); + return this._splitXList; + } + /** 解析切割的位置 */ + ParseSplitXlist() { + //每段线段的结束距离 + let dists = []; + let split_xs = []; //分割位置 + //解析每段长度 解析分割位置 + let sumLength = 0; + for (let i = 0; i < this.SweepLengths.length; i++) { + let length = this.SweepLengths[i]; + if (this._SweepCurves1[i] instanceof exports.Arc) //在圆弧时分段切割 + { + let splitCount = GetArcDrawCount(this._SweepCurves1[i]); + let divDist = length / splitCount; + for (let j = 1; j < splitCount; j++) + split_xs.push(sumLength + (divDist * j)); + } + sumLength += length; + dists.push(sumLength); + split_xs.push(sumLength); + } + split_xs.pop(); //最后一段不在切割 + this._SweepEndDists = dists; + this._splitXList = split_xs; + } + /** 解析临时板 */ + ParseCSGBoard() { + //特性坍塌 我们记录所有转角处的x位置 以便我们遇到这个位置的坐标时,求正确的dir. + this.ParseCorner(); + //拿CSG过来分割 + // let br = new Board; + // br.Thickness = this._board.Thickness; + // br.ContourCurve = this._board.ContourCurve; + let br = this._board.Clone(); + br.Name = "临时板"; + br.SetSweepPath(undefined, 0); + let arcBoardOptions = this._board.ArcBoardOptions; + //构建转角处的槽 + let mmm = []; + for (let i = 0; i < this.SweepEndDists.length - 1; i++) { + const arcBoardOption = arcBoardOptions.get(-1); + let c1 = this._SweepCurves1[i]; + let c2 = this._SweepCurves1[i + 1]; + let co1 = this._SweepCurves2[i]; + let co2 = this._SweepCurves2[i + 1]; + //避免多余槽 + if (co1.Length < 0.1 || co2.Length < 0.1 || equalv2(co1.EndPoint, co2.StartPoint, 0.1)) + continue; + let p = co1.IntersectWith(co2, IntersectOption.ExtendNone, 0.1); + if (p.length === 1) { + let cp1 = c1.GetClosestPointTo(p[0], false); + let cp2 = c2.GetClosestPointTo(p[0], false); + let dist1 = c1.GetDistAtPoint(cp1); + let dist2 = c2.GetDistAtPoint(cp2); + dist1 = this.SweepLengths[i] - dist1; + if (dist1 + dist2 < 0.1) + continue; + let d = this.SweepEndDists[i]; + let zValue = arcBoardOption.retainedThickness; + let thickness = br.Thickness - zValue; + if (this._FaceDir === FaceDirection.Front) + zValue = 0; + let pl = new exports.Polyline().Rectangle(dist1 + dist2, 10000).Move(new three.Vector3(d - dist1, -100, 0)); + if (this._SweepAngle !== 0) + pl.ApplyMatrix(this.Rotate2OCSMtx); + let data = { + shape: new Shape(Contour.CreateContour(pl)), + thickness: thickness, + dir: 1 - this._FaceDir, //见光面和开槽面相反 这里翻转它 + knifeRadius: 3, + addLen: 0, + }; + mmm.push(data); + } + else if (p.length === 0) { + let d = this.SweepEndDists[i]; + let zValue = arcBoardOption.retainedThickness; + let thickness = br.Thickness - zValue; + let pl = new exports.Polyline().Rectangle(1, 10000).Move(new three.Vector3(d - 0.5, -100, 0)); + if (this._SweepAngle !== 0) + pl.ApplyMatrix(this.Rotate2OCSMtx); + let data = { + shape: new Shape(Contour.CreateContour(pl)), + thickness: thickness, + dir: 1 - this._FaceDir, //见光面和开槽面相反 这里翻转它 + knifeRadius: 3, + addLen: 0, + }; + mmm.push(data); + } + } + // mmm = []; + br.BoardModeling = this._board.BoardModeling.concat(mmm); + // br.Modeling2D = this._board.Modeling2D; + // br.Modeling3D = this._board.Modeling3D; + //TestDraw(br.Clone()); + this._csgBoard = br; + } + /** 生成圆弧板的Geometry */ + BuildMeshEdgeGeom(csg) { + let br = this.CSGBoard; + if (!csg) + csg = this.CSGBoard.CSG; + //旋转 r+m 逆矩阵(m+r) 将板轮廓旋转后 移动到WCS0(包围盒) + let min, max; + if (this._SweepAngle !== 0) { + //根据csg旋转 + let roMtx = mat4__default["default"].create(); + mat4__default["default"].rotateZ(roMtx, roMtx, -this._SweepAngle); + csg = transforms.transform(roMtx, csg); + [min, max] = measureBoundingBox__default["default"](csg); + let moveMtx = mat4__default["default"].create(); + mat4__default["default"].translate(moveMtx, moveMtx, min.map(v => -v)); + csg = transforms.transform(moveMtx, csg); + if (max[0] > this.SweepLength) + console.log("出错"); + // let geom = CSG2Geometry2(geom3.create(toPolygons(csg))); + // geom.computeVertexNormals(); + // TestDraw(new Mesh(geom, new MeshNormalMaterial)); + this._OCS2RotateMtx = new three.Matrix4().makeRotationZ(-this._SweepAngle).setPosition(-min[0], -min[1], -min[2]); //rotate + move + this._Rotate2OCSMtx = new three.Matrix4().makeRotationZ(this._SweepAngle).multiply(new three.Matrix4().setPosition(min[0], min[1], min[2])); //move + rotate + } + let remPolys = geom3.toPolygons(csg); + let plane = [1, 0, 0, 0]; + let splitedPolys = []; + for (let x of this.SplitXList) { + plane[3] = x; + let leftPolys = []; + let rightPolys = []; + for (let poly of remPolys) { + // Returns object: + // .type: + // 0: coplanar-front + // 1: coplanar-back + // 2: front + // 3: back + // 4: spanning + // In case the polygon is spanning, returns: + // .front: a Polygon3 of the front part + // .back: a Polygon3 of the back part + if (!poly) // 先临时处理为null的情况,以免Error + continue; + let res = splitPolygonByPlane__default["default"](plane, poly); + if (res.type === 0) + leftPolys.push(poly); + else if (res.type === 1) + leftPolys.push(poly); + else if (res.type === 2) + rightPolys.push(poly); + else if (res.type === 3) + leftPolys.push(poly); + else if (res.type === 4) { + if (res.back) + leftPolys.push(res.back); + if (res.front) + rightPolys.push(res.front); + } + } + splitedPolys.push(...geom3.toPolygons(retessellate__default["default"](geom3__default["default"].create(leftPolys)))); + remPolys = rightPolys; + } + splitedPolys.push(...geom3.toPolygons(retessellate__default["default"](geom3__default["default"].create(remPolys)))); + //分割结束 + //生成UV + let geom = CSG2Geometry2(geom3__default["default"].create(splitedPolys)); + const bufferGeometry = new three.BufferGeometry().fromGeometry(geom); + //旋转板先变换到原始状态计算uv + if (this._SweepAngle !== 0) + bufferGeometry.applyMatrix4(this._Rotate2OCSMtx); + const gen = new GenLocalUv(); + gen.CalculateUv(bufferGeometry, this._board.BoardProcessOption.lines === LinesType.Reverse); + //变换回来映射 + if (this._SweepAngle !== 0) + bufferGeometry.applyMatrix4(this._OCS2RotateMtx); + //收集所有的x + let pos = bufferGeometry.getAttribute("position"); + let xs = []; + for (let y = 0; y < pos.count; y++) + xs.push(pos.array[y * 3]); + arraySortByNumber$1(xs); + arrayRemoveDuplicateBySort(xs, equaln$1); + //映射所有的x + this.ParseAllX_Map(xs); + //变换所有的点 + let tempP = new three.Vector3; + for (let i = 0; i < pos.count; i++) { + tempP.fromArray(pos.array, i * 3); + this.PosMap2ArcPos(tempP); + pos.setXYZ(i, tempP.x, tempP.y, tempP.z); + } + //#region 构建线框 + let edgeGeom = br.EdgeGeometry; + pos = edgeGeom.getAttribute("position"); + let plane2 = new three.Plane(new three.Vector3(-1, 0, 0), 0); + let remLiens = []; + for (let y = 0; y < pos.count; y += 2) { + let p1 = new three.Vector3().fromArray(pos.array, y * 3); + let p2 = new three.Vector3().fromArray(pos.array, (y + 1) * 3); + if (this._OCS2RotateMtx) { + p1.applyMatrix4(this._OCS2RotateMtx); + p2.applyMatrix4(this._OCS2RotateMtx); + } + let line3 = new three.Line3(p1, p2); + remLiens.push(line3); + } + //所有的线被切割分组 + let lines = []; + for (let x of this.SplitXList) { + plane2.constant = x; + let rightLines = []; + for (let line of remLiens) { + let ip = plane2.intersectLine(line, tempP); + if (ip) { + if (line.start.x < line.end.x) { + lines.push(new three.Line3(line.start, ip.clone())); + rightLines.push(new three.Line3(ip.clone(), line.end)); + } + else { + lines.push(new three.Line3(ip.clone(), line.end)); + rightLines.push(new three.Line3(line.start, ip.clone())); } - return pts; } + else if (line.start.x > x) + rightLines.push(line); + else + lines.push(line); + } + remLiens = rightLines; } - return []; - } - GetGripPoints() { + lines = lines.concat(remLiens); + //转换为点表 let pts = []; - for (let s of this._ShapeManager.ShapeList) - pts.push(...s.GetStretchPoints()); - return pts; - } - MoveGripPoints(indexList, moveVec) { - this.WriteAllObjectRecord(); - let moveVLoc = moveVec.clone().applyMatrix4(new three.Matrix4().extractRotation(this.OCSInv)); - this.ApplyMatrix(MoveMatrix(moveVLoc)); - } - ApplyMatrix(m) { - this.WriteAllObjectRecord(); - //面域移动,组成面域的曲线也要移动 MarkX:曲线同面域一起移动 - this._ShapeManager.ShapeList.forEach(s => s.ApplyMatrix(m)); - return super.ApplyMatrix(m); - } - get Position() { - return super.Position; - } - set Position(pt) { - this.WriteAllObjectRecord(); - let moveX = pt.x - this._Matrix.elements[12]; - let moveY = pt.y - this._Matrix.elements[13]; - let moveZ = pt.z - this._Matrix.elements[14]; - this._Matrix.setPosition(pt); - this._SpaceOCS.elements[12] += moveX; - this._SpaceOCS.elements[13] += moveY; - this._SpaceOCS.elements[14] += moveZ; - let m = new three.Matrix4().setPosition(moveX, moveY, moveZ); - for (let s of this.ShapeManager.ShapeList) - s.ApplyMatrix(m); - this.Update(exports.UpdateDraw.Matrix); - } - ApplyScaleMatrix(m) { - this.WriteAllObjectRecord(); - for (let s of this._ShapeManager.ShapeList) - s.ApplyScaleMatrix(m); - this.Update(exports.UpdateDraw.Geometry); - return this; - } - //Z轴归0 - Z0() { - super.Z0(); - for (let s of this._ShapeManager.ShapeList) - s.Z0(); - return this; - } - MatrixPlanarizere() { - super.MatrixPlanarizere(); - for (let s of this._ShapeManager.ShapeList) - s.MatrixPlanarizere(); - return this; - } - ApplyMirrorMatrix(m) { - return this; - } - /** - * 请注意:该计算会操作otherRegion的矩阵 - * @param {Region} otherRegion - * @param {BoolOpeartionType} boolType - */ - BooleanOper(otherRegion, boolType) { - if (this.IsCoplaneTo(otherRegion)) { - this.WriteAllObjectRecord(); - let oldOcs = this.OCS; - //把形状曲线转移到二维屏幕计算后还原回来 - this.ShapeApplyMatrix(this.OCSInv); - otherRegion.ShapeApplyMatrix(this.OCSInv); - let isSuccess = this._ShapeManager.BoolOper(otherRegion._ShapeManager, boolType); - this.ShapeApplyMatrix(oldOcs); - this.Update(); - return isSuccess; + for (let l of lines) + pts.push(l.start, l.end); + xs = pts.map(p => p.x); + arraySortByNumber$1(xs); + arrayRemoveDuplicateBySort(xs, equaln$1); + this.ParseAllX_Map(xs); + //变换所有的点 + for (let p of pts) + this.PosMap2ArcPos(p); + edgeGeom = BufferGeometryUtils.CreateFromPts(pts); + //#endregion 结束线框构建 + // TestDraw(new Mesh(bufferGeometry.clone(), new MeshNormalMaterial)); + if (this._SweepAngle !== 0) //将板从旋转状态转回原始状态 + { + edgeGeom.applyMatrix4(this._Rotate2OCSMtx); + bufferGeometry.applyMatrix4(this._Rotate2OCSMtx); } - return false; + bufferGeometry.computeBoundingBox(); + bufferGeometry.computeVertexNormals(); + // TestDraw(new Mesh(bufferGeometry, new MeshNormalMaterial)); + return [bufferGeometry, edgeGeom]; } - get MeshGeometry() { - if (this._MeshGeometry) - return this._MeshGeometry; - this.UpdateGeometry(); - return this._MeshGeometry; - } - get EdgeGeometry() { - if (this._EdgeGeometry) - return this._EdgeGeometry; - this.UpdateGeometry(); - return this._EdgeGeometry; - } - UpdateGeometry() { - let shapeList = this._ShapeManager.ShapeList; - let edgePts = []; - let meshGeoms = []; - const AddEdgePts = (pts, diffMat) => { - for (let i = 0; i < pts.length; i++) { - let p = AsVector3(pts[i]); - p.applyMatrix4(diffMat); - edgePts.push(p); - if (i !== 0 && i !== pts.length - 1) - edgePts.push(p); + /** 生成大孔面 */ + BuildBigHoleFace() { + let split_xs = []; //分割位置 + //解析每段长度 解析分割位置 + let sumLength = 0; + for (let i = 0; i < this.SweepLengths.length; i++) { + let length = this.SweepLengths[i]; + if (this._SweepCurves1[i] instanceof exports.Arc) //在圆弧时分段切割 + { + let splitCount = GetArcDrawCount(this._SweepCurves1[i]); + let divDist = length / splitCount; + for (let j = 1; j < splitCount; j++) + split_xs.push(sumLength + (divDist * j)); } - }; - for (let i = 0; i < shapeList.length; i++) { - let shape = shapeList[i]; - let geometry = new three.ShapeGeometry(shape.Shape, 60); //60 可以优化. - let diffMat = this.OCSInv.clone().multiply(shape.Outline.Curve.OCSNoClone); - geometry.applyMatrix4(diffMat); - ScaleUV(geometry); - meshGeoms.push(new three.BufferGeometry().fromGeometry(geometry)); - let shapeInfo = shape.Shape.extractPoints(60); - let pts = shapeInfo.shape; - AddEdgePts(pts, diffMat); - let holePtss = shapeInfo.holes; - for (let holePts of holePtss) - AddEdgePts(holePts, diffMat); + sumLength += length; + split_xs.push(sumLength); } - this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(edgePts); - this._MeshGeometry = BufferGeometryUtils.MergeBufferGeometries(meshGeoms); - this._MeshGeometry["IsMesh"] = true; - this._MeshGeometry.computeVertexNormals(); - } - UpdateDrawGeometry() { - if (this._EdgeGeometry) - this._EdgeGeometry.dispose(); - this._EdgeGeometry = undefined; - if (this._MeshGeometry) - this._MeshGeometry.dispose(); - this._MeshGeometry = undefined; - } - ClearDraw() { - this.UpdateDrawGeometry(); - return super.ClearDraw(); - } - InitDrawObject(renderType = RenderType.Wireframe) { - if (renderType === RenderType.Wireframe) { - return new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)); + split_xs.pop(); //最后一段不在切割 + //拿CSG过来分割 + let br = new Board; + br.Thickness = this._board.Thickness; + br.ContourCurve = this._board.ContourCurve; + br.BoardProcessOption[EBoardKeyList.BigHole] = this._board.BoardProcessOption[EBoardKeyList.BigHole]; + let csg = Geometry2CSG2(br.BigHoleFaceGeo); + //旋转 r+m 逆矩阵(m+r) 将板轮廓旋转后 移动到WCS0(包围盒) + let min, max; + let Rotate2OCSMtx = new three.Matrix4(); + if (this._SweepAngle !== 0) { + //根据csg旋转 + let roMtx = mat4__default["default"].create(); + mat4__default["default"].rotateZ(roMtx, roMtx, -this._SweepAngle); + csg = transforms.transform(roMtx, csg); + [min, max] = measureBoundingBox__default["default"](csg); + let moveMtx = mat4__default["default"].create(); + mat4__default["default"].translate(moveMtx, moveMtx, [-min[0], -min[1], 0]); + csg = transforms.transform(moveMtx, csg); + if (max[0] > this.SweepLength) + console.log("出错"); + Rotate2OCSMtx = new three.Matrix4().makeRotationZ(this._SweepAngle).multiply(new three.Matrix4().setPosition(min[0], min[1], 0)); //move + rotate } - else if (renderType === RenderType.Conceptual) { - return new three.Object3D().add(new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)), new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex))); - } - else if (renderType === RenderType.Physical) { - let mesh = new three.Mesh(this.MeshGeometry, this.MeshMaterial); - mesh.castShadow = true; - mesh.receiveShadow = true; - return mesh; - } - else if (renderType === RenderType.Print) { - return new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(0)); - } - else if (renderType === RenderType.Physical2) { - let mesh = new three.Mesh(this.MeshGeometry, this.MeshMaterial); - mesh.castShadow = true; - mesh.receiveShadow = true; - return new three.Object3D().add(new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)), mesh); - } - } - UpdateDrawObject(renderType, obj) { - DisposeThreeObj(obj); - Object3DRemoveAll(obj); - if (renderType === RenderType.Wireframe) { - let l = obj; - l.geometry = this.EdgeGeometry; - l.material = ColorMaterial.GetLineMaterial(this.ColorIndex); - } - else if (renderType === RenderType.Conceptual) { - return obj.add(new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)), new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex))); - } - else if (renderType === RenderType.Physical) { - let mesh = obj; - mesh.geometry = this.MeshGeometry; - mesh.material = this.MeshMaterial; - } - else if (renderType === RenderType.Physical2) { - let mesh = new three.Mesh(this.MeshGeometry, this.MeshMaterial); - mesh.castShadow = true; - mesh.receiveShadow = true; - return obj.add(new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)), mesh); - } - else if (renderType === RenderType.Print) { - let l = obj; - l.geometry = this.EdgeGeometry; - l.material = ColorMaterial.GetLineMaterial(0); - } - } - /** - * 当实体需要被更新时,更新实体材质 - */ - UpdateDrawObjectMaterial(type, obj, material) { - if (type === RenderType.Wireframe || type === RenderType.Print) { - let line = obj; - line.material = ColorMaterial.GetLineMaterial(this.ColorIndex); - } - else if (type === RenderType.Conceptual) { - for (let i = 0; i < obj.children.length; i++) { - if (i % 2 === 0) { - let l = obj.children[i]; - l.material = ColorMaterial.GetLineMaterial(this.ColorIndex); - } - else { - let mesh = obj.children[i]; - mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex); + let remPolys = geom3.toPolygons(csg); + let plane = [1, 0, 0, 0]; + let splitedPolys = []; + for (let x of split_xs) { + plane[3] = x; + let leftPolys = []; + let rightPolys = []; + for (let poly of remPolys) { + if (!poly) // 先临时处理为null的情况,以免Error + continue; + let res = splitPolygonByPlane__default["default"](plane, poly); + if (res.type === 0) + leftPolys.push(poly); + else if (res.type === 1) + leftPolys.push(poly); + else if (res.type === 2) + rightPolys.push(poly); + else if (res.type === 3) + leftPolys.push(poly); + else if (res.type === 4) { + leftPolys.push(res.back); + rightPolys.push(res.front); } } + splitedPolys.push(...geom3.toPolygons(retessellate__default["default"](geom3__default["default"].create(leftPolys)))); + remPolys = rightPolys; } - else if (type === RenderType.Physical) { - let mesh = obj; - mesh.material = this.MeshMaterial; + splitedPolys.push(...geom3.toPolygons(retessellate__default["default"](geom3__default["default"].create(remPolys)))); + //分割结束 + //生成UV + let geom = CSG2Geometry2(geom3__default["default"].create(splitedPolys)); + const bufferGeometry = new three.BufferGeometry().fromGeometry(geom); + //收集所有的x + let pos = bufferGeometry.getAttribute("position"); + let xs = []; + for (let y = 0; y < pos.count; y++) + xs.push(pos.array[y * 3]); + arraySortByNumber$1(xs); + arrayRemoveDuplicateBySort(xs, equaln$1); + //映射所有的x + // 为了不影响this._CacheFuzzXFactory和this._Cache_X_PosDirMap,这里重新定义(否则可能导致错误,但目前没测到) + const [cacheFuzzXFactory, cache_X_PosDirMap] = this.ParseAllX_Map_BigHole(xs); + //变换所有的点 + let tempP = new three.Vector3; + for (let i = 0; i < pos.count; i++) { + tempP.fromArray(pos.array, i * 3); + this.PosMap2ArcPos(tempP, cacheFuzzXFactory, cache_X_PosDirMap); + pos.setXYZ(i, tempP.x, tempP.y, tempP.z); + } + if (this._SweepAngle !== 0) //将板从旋转状态转回原始状态 + { + bufferGeometry.applyMatrix4(Rotate2OCSMtx); + } + return bufferGeometry; + } + // + ParseCorner() { + this._CornerSet = new Set(); + this._CornerFuzzFactory = new FuzzyFactory(3, 1e-3); + for (let d of this.SweepEndDists) { + d = this._CornerFuzzFactory.lookupOrCreate([d], d); + this._CornerSet.add(d); } } - _ReadFile(file) { - super._ReadFile(file); - file.Read(); //1 - this._ShapeManager.Clear(); - this._ShapeManager.ReadFile(file); + ParseAllX_Map(xs) { + if (!this._CornerSet) + this.ParseCorner(); + let dists = this.SweepEndDists; + let fuzzX = this._CacheFuzzXFactory; + let curveIndex = 0; + let curSum = dists[0]; + let preSum = 0; + let rotateAngle = this._FaceDir === FaceDirection.Back ? Math.PI / 2 : -Math.PI / 2; + for (let x of xs) { + while (x > curSum && curveIndex < dists.length - 1) { + curveIndex++; + preSum = curSum; + curSum = dists[curveIndex]; + } + let c = this._SweepCurves1[curveIndex]; + let param = ((x - preSum) / this._SweepLengths[curveIndex]); + let onlyX = fuzzX.lookupOrCreate([x], x); + let derv = c.GetFirstDeriv(param); + // if (c instanceof Line) + // derv.divideScalar(this._SweepLengths[curveIndex]); + // else + // derv.divideScalar(c.Radius); + derv.normalize(); + rotatePoint(derv, rotateAngle); + let onlyD = this._CornerFuzzFactory.lookupOrCreate([x], x); + if (this._CornerSet.has(onlyD)) //坍塌 + { + // console.log("坍塌"); + let p2 = this._SweepPath2.GetPointAtParam(curveIndex + Math.round(param)); + derv = p2.sub(c.GetPointAtParam(param)).divideScalar(this._board.Thickness); + } + this._Cache_X_PosDirMap.set(onlyX, [c.GetPointAtParam(param), derv]); + } } - WriteFile(file) { - super.WriteFile(file); - file.Write(1); //ver - this._ShapeManager.WriteFile(file); + ParseAllX_Map_BigHole(xs) { + const cacheFuzzXFactory = new FuzzyFactory(1, 1e-3); + const cache_X_PosDirMap = new Map; + let dists = this.SweepEndDists; + let curveIndex = 0; + let curSum = dists[0]; + let preSum = 0; + let rotateAngle = this._FaceDir === FaceDirection.Back ? Math.PI / 2 : -Math.PI / 2; + for (let x of xs) { + while (x > curSum && curveIndex < dists.length - 1) { + curveIndex++; + preSum = curSum; + curSum = dists[curveIndex]; + } + let c = this._SweepCurves1[curveIndex]; + let param = ((x - preSum) / this._SweepLengths[curveIndex]); + let onlyX = cacheFuzzXFactory.lookupOrCreate([x], x); + let derv = c.GetFirstDeriv(param); + derv.normalize(); + rotatePoint(derv, rotateAngle); + let onlyD = this._CornerFuzzFactory.lookupOrCreate([x], x); + if (this._CornerSet.has(onlyD)) //坍塌 + { + let p2 = this._SweepPath2.GetPointAtParam(curveIndex + Math.round(param)); + derv = p2.sub(c.GetPointAtParam(param)).divideScalar(this._board.Thickness); + } + cache_X_PosDirMap.set(onlyX, [c.GetPointAtParam(param), derv]); + } + return [cacheFuzzXFactory, cache_X_PosDirMap]; } + PosMap2ArcPos(p, cacheFuzzXFactory = this._CacheFuzzXFactory, cache_X_PosDirMap = this._Cache_X_PosDirMap) { + let [x, y, z] = p.toArray(); + let onlyX = cacheFuzzXFactory.lookupOrCreate([x], x); + let arr = cache_X_PosDirMap.get(onlyX); + if (!arr) { + console.error("未知情况?"); + return; + } + let [pox, v] = arr; + if (this._FaceDir === FaceDirection.Front) + z = this._board.Thickness - z; + p.copy(v).multiplyScalar(z).add(pox); + [p.y, p.z] = [y, p.y]; + } +} + +var ArcBoardFeedProcess; +(function (ArcBoardFeedProcess) { + ArcBoardFeedProcess[ArcBoardFeedProcess["Slots"] = 0] = "Slots"; + ArcBoardFeedProcess[ArcBoardFeedProcess["Model"] = 1] = "Model"; +})(ArcBoardFeedProcess || (ArcBoardFeedProcess = {})); + +//圆弧默认的槽配置 +const defultArcBoardOption = { + arcLength: 0, + grooveSpacing: 6, + grooveWidth: 6, + retainedThickness: 2, + knifeRadius: 3, + grooveAddLength: 0, + grooveAddWidth: 0, + grooveAddDepth: 0, + arcExtension: 0, }; -Region = Region_1 = __decorate([ - Factory -], Region); - /** - * 把板件炸开成面域,0,1为正反面,其余的为边面(没有圆弧面) - */ -function Board2Regions(br) { - let ocs = br.OCS; - let cu = br.ContourCurve.Clone(); - if (cu instanceof exports.Circle) - cu = ConverCircleToPolyline$1(cu); - let frontReg = Region.CreateFromCurves([cu.Clone()]); - let regFrontOcs = ocs.clone(); - regFrontOcs.setPosition(br.Position.add(br.Normal.multiplyScalar(br.Thickness))); - frontReg.ApplyMatrix(regFrontOcs); - let backReg = Region.CreateFromCurves([cu.Flip()]); - backReg.ApplyMatrix(ocs); - let resultRegs = [frontReg, backReg]; - //edges - let lines = cu.Explode().filter(c => c instanceof exports.Line); - for (let l of lines) { - let rectPl = new exports.Polyline().Rectangle(l.Length, br.Thickness); - let reg = Region.CreateFromCurves([rectPl]); - if (!reg) + * 解析圆弧板需要的走刀数据 + * @param br + * @param path 圆弧放样路径 + * @param angle 角度 + * @param dir 圆弧板见光面 见光面正面走刀颜色黄色,背面颜色红色 + * @param [onlyVert=false] 仅解析交点位置 (默认解析所有的槽) + * @returns 返回需要增加的槽的数据 + */ +function ParseBoardArcFeed(br, path, angle, dir, arcBoardOptions, onlyVert = false) { + const arcBoardBuild = new ArcBoardBuild(br); + arcBoardBuild.ParseSweepCurves(); + //每段线段的起始位置 + const dists = []; + //解析每段长度 + let sumLength = 0; + dists.push(sumLength); + let SweepLengths = arcBoardBuild.SweepLengths; + for (let i = 0; i < SweepLengths.length; i++) { + let length = SweepLengths[i]; + sumLength += length; + dists.push(sumLength); + } + const board = new Board(); + board.Thickness = br.Thickness; + board.ContourCurve = br.ContourCurve; + //获取板形状 + const c1 = br.Shape; + if (angle !== 0) + c1.ApplyMatrix(arcBoardBuild.OCS2RotateMtx); + //记录每个转角槽信息 + const grooveInfo = new Map(); + for (let i = 0; i < dists.length - 2; i++) { + const arcBoardOption = arcBoardOptions.get(-1); + let c1 = arcBoardBuild.SweepCurves1[i]; + let c2 = arcBoardBuild.SweepCurves1[i + 1]; + let co1 = arcBoardBuild.SweepCurves2[i]; + let co2 = arcBoardBuild.SweepCurves2[i + 1]; + //避免多余槽 + if (equalv2(co1.EndPoint, co2.StartPoint, 0.1)) continue; - let p = l.StartPoint.applyMatrix4(ocs); - let x = l.GetFirstDeriv(0).transformDirection(ocs); - let y = br.Normal; - let z = new three.Vector3().crossVectors(x, y); - let mtx = new three.Matrix4().makeBasis(x, y, z).setPosition(p); - reg.ApplyMatrix(mtx); - resultRegs.push(reg); - } - return resultRegs; -} - -/**统一板件属性key的命名,修改值会导致无法 .xxx该属性 */ -var EBoardKeyList; -(function (EBoardKeyList) { - EBoardKeyList["Height"] = "height"; - EBoardKeyList["Width"] = "width"; - EBoardKeyList["Thick"] = "thickness"; - EBoardKeyList["RoomName"] = "roomName"; - EBoardKeyList["CabinetName"] = "cabinetName"; - EBoardKeyList["PaperName"] = "paperName"; - EBoardKeyList["BrName"] = "brName"; - EBoardKeyList["BrMat"] = "boardName"; - EBoardKeyList["Mat"] = "material"; - EBoardKeyList["Color"] = "color"; - EBoardKeyList["Lines"] = "lines"; - EBoardKeyList["ProcessGroup"] = "ProcessGroup"; - EBoardKeyList["BigHole"] = "bigHoleDir"; - /** - * 排钻类型,当没有定义每个边的排钻数据时,使用统一的排钻类型 - */ - EBoardKeyList["DrillType"] = "drillType"; - EBoardKeyList["ComposingFace"] = "composingFace"; - /** - * 封边数组,定义每个边的封边信息 - */ - EBoardKeyList["HighSealed"] = "highSealed"; - EBoardKeyList["UpSealed"] = "sealedUp"; - EBoardKeyList["DownSealed"] = "sealedDown"; - EBoardKeyList["LeftSealed"] = "sealedLeft"; - EBoardKeyList["RightSealed"] = "sealedRight"; - EBoardKeyList["KnifeRad"] = "knifeRadius"; - EBoardKeyList["SpliteHeight"] = "spliteHeight"; - EBoardKeyList["SpliteWidth"] = "spliteWidth"; - EBoardKeyList["SpliteThickness"] = "spliteThickness"; - EBoardKeyList["DrawNumber"] = "drawNumber"; - EBoardKeyList["Remarks"] = "remarks"; - EBoardKeyList["ExtraRemarks"] = "extraRemarks"; - EBoardKeyList["OpenDir"] = "openDir"; - EBoardKeyList["GroovesAddLength"] = "GroovesAddLength"; - EBoardKeyList["GroovesAddWidth"] = "GroovesAddWidth"; - EBoardKeyList["GroovesAddDepth"] = "GroovesAddDepth"; - EBoardKeyList["FrontDrill"] = "frontDrill"; - EBoardKeyList["BackDrill"] = "backDrill"; -})(EBoardKeyList || (EBoardKeyList = {})); - -/**序列化板件数据 */ -function serializeBoardData(file, processData) { - file.Write(processData[EBoardKeyList.RoomName]); - file.Write(processData[EBoardKeyList.CabinetName]); - file.Write(processData[EBoardKeyList.BrMat]); - file.Write(processData[EBoardKeyList.Mat]); - file.Write(processData[EBoardKeyList.Color]); - file.Write(processData[EBoardKeyList.Lines]); - file.Write(processData[EBoardKeyList.BigHole]); - file.Write(processData[EBoardKeyList.DrillType]); - file.Write(processData[EBoardKeyList.ComposingFace]); - file.Write(processData[EBoardKeyList.HighSealed].length); - for (let n of processData[EBoardKeyList.HighSealed]) { - file.Write(n.size); - } - file.Write(processData[EBoardKeyList.UpSealed]); - file.Write(processData[EBoardKeyList.DownSealed]); - file.Write(processData[EBoardKeyList.LeftSealed]); - file.Write(processData[EBoardKeyList.RightSealed]); - file.Write(processData.spliteHeight); - file.Write(processData.spliteWidth); - file.Write(processData.spliteThickness); - file.Write(processData.highDrill.length); - for (let n of processData.highDrill) - file.Write(n); - file.Write(processData.frontDrill); - file.Write(processData.backDrill); - file.Write(processData.remarks.length); - for (let d of processData.remarks) { - file.Write(d[0]); - file.Write(d[1]); - } -} -//反序列化板件数据 -function deserializationBoardData(file, processData, ver) { - processData[EBoardKeyList.RoomName] = file.Read(); - processData[EBoardKeyList.CabinetName] = file.Read(); - processData[EBoardKeyList.BrMat] = file.Read(); - processData[EBoardKeyList.Mat] = file.Read(); - processData[EBoardKeyList.Color] = file.Read(); - processData[EBoardKeyList.Lines] = file.Read(); - processData[EBoardKeyList.BigHole] = file.Read(); - processData[EBoardKeyList.DrillType] = file.Read(); - processData[EBoardKeyList.ComposingFace] = file.Read(); - let count = file.Read(); - processData[EBoardKeyList.HighSealed].length = 0; - for (let i = 0; i < count; i++) { - let size = file.Read(); - if (ver < 4) { - file.Read(); + let p = co1.IntersectWith(co2, IntersectOption.ExtendNone, 0.1); + if (p.length === 1) { + let cp1 = c1.GetClosestPointTo(p[0], false); + let cp2 = c2.GetClosestPointTo(p[0], false); + let dist1 = c1.GetDistAtPoint(cp1); + let dist2 = c2.GetDistAtPoint(cp2); + dist1 = arcBoardBuild.SweepLengths[i] - dist1; + if (dist1 + dist2 < 0.1) + continue; + grooveInfo.set(i, { l: dist1, r: dist2 }); } - processData[EBoardKeyList.HighSealed].push({ size }); - } - processData[EBoardKeyList.UpSealed] = file.Read(); - processData[EBoardKeyList.DownSealed] = file.Read(); - processData[EBoardKeyList.LeftSealed] = file.Read(); - processData[EBoardKeyList.RightSealed] = file.Read(); - processData.spliteHeight = file.Read(); - processData.spliteWidth = file.Read(); - processData.spliteThickness = file.Read(); - count = file.Read(); - processData.highDrill = file.ReadArray(count); - processData.frontDrill = file.Read(); - processData.backDrill = file.Read(); - if (ver >= 7) { - let count = file.Read(); - processData.remarks.length = 0; - for (let i = 0; i < count; i++) { - let d = ["", ""]; - d[0] = file.Read(); - d[1] = file.Read(); - processData.remarks.push(d); + else if (p.length === 0) { + grooveInfo.set(i, { l: arcBoardOption.grooveWidth / 2, r: arcBoardOption.grooveWidth / 2 }); } } -} -function SerializeBoard2DModeingData(file, modelList) { - file.Write(modelList.length); - for (let data of modelList) { - file.WriteObject(data.path); - file.Write(data.dir); - file.Write(data.items.length); - for (let item of data.items) { - file.Write(item.depth); - file.Write(item.offset); - file.Write(item.knife.id); - file.Write(item.knife.radius); - file.Write(item.knife.angle); - file.Write(item.knife.name); - } - } -} -function SerializeBoard3DModeingData(file, modelList) { - file.Write(modelList.length); - for (let item of modelList) { - file.Write(item.path.length); - for (let d of item.path) { - file.Write(d.pt.toArray()); - file.Write(d.bul); - } - file.Write(item.dir); - file.Write(item.knife.id); - file.Write(item.knife.radius); - file.Write(item.knife.angle); - file.Write(item.knife.name); - } -} -//反序列化板件数据 -function DeserializationBoard2DModeingData(file, data, ver) { - data.length = 0; - const count = file.Read(); - for (let i = 0; i < count; i++) { - let path = file.ReadObject(); - let dir = file.Read(); - let m = { - path, - dir, - items: [] - }; - const itemCount = file.Read(); - for (let j = 0; j < itemCount; j++) { - let depth = file.Read(); - let offset = file.Read(); - let knifeId = file.Read(); - let knifeRad = file.Read(); - let knifeAngle = file.Read(); - let knifeName = file.Read(); - m.items.push({ - depth, offset, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName } + const appendModel = (grooveWidth, x, arcBoardOption) => { + const pl = new exports.Polyline().Rectangle(grooveWidth, 10000).Move(new three.Vector3(x, 0, 0)); + const c2 = new Shape(Contour.CreateContour(pl)); + for (const contour of c1.IntersectionBoolOperation(c2)) { + if (angle !== 0) + contour.ApplyMatrix(arcBoardBuild.Rotate2OCSMtx); + mmm.push({ + shape: contour, + thickness: br.Thickness - arcBoardOption.retainedThickness, + dir: dir === 0 ? FaceDirection.Back : FaceDirection.Front, + knifeRadius: arcBoardOption.knifeRadius, + addLen: arcBoardOption.grooveAddLength, + addWidth: arcBoardOption.grooveAddWidth, + addDepth: arcBoardOption.grooveAddDepth, }); } - data.push(m); - } -} -//反序列化板件数据 -function DeserializationBoard3DModeingData(file, data, ver) { - data.length = 0; - const count = file.Read(); - for (let i = 0; i < count; i++) { - let pathCount = file.Read(); - let path = []; - for (let i = 0; i < pathCount; i++) { - let pt = new three.Vector3().fromArray(file.Read()); - let bul = file.Read(); - path.push({ pt, bul }); + }; + //判断是否可以等分 + const checkIsDivide = (remainLength, grooveWidth, grooveSpacing, firstGrooveLength, lastGrooveLength) => { + //如果前面有默认槽,则减去一个槽宽度 + if (!firstGrooveLength) + remainLength -= grooveWidth; + //如果后面有默认槽,则减去一个槽宽度 + if (!lastGrooveLength) + remainLength -= grooveWidth; + const pericycleWidth = grooveSpacing + grooveWidth; //周期宽度 + const length = remainLength + grooveWidth; //加一个槽宽,让槽宽和槽间距个数相等 + const count = Math.ceil(length / pericycleWidth); //计算挖槽个数 + const newSpacing = (length / count) - grooveWidth; //计算新的槽间距值 + return newSpacing > 0; //如果新的槽间距大于零,可等分,如果小等于零槽就会重叠 + }; + //构建槽 + const mmm = []; + for (let i = 0; i < dists.length - 1; i++) { + const cu = arcBoardBuild.SweepCurves1[i]; + const startGroove = grooveInfo.get(i - 1); + if (startGroove) { + const arcBoardOption = arcBoardOptions.get(-1); + const grooveWidth = startGroove.l + startGroove.r; + const x = dists[i] - startGroove.l; + appendModel(grooveWidth, x, arcBoardOption); + } + if (!onlyVert && (cu instanceof exports.Arc)) { + const arcBoardOption = arcBoardOptions.get(i); + const { grooveWidth, grooveSpacing, arcExtension } = arcBoardOption; + const firstGrooveLength = grooveInfo.get(i - 1)?.r ?? 0; //头通用挖槽长度 + const lastGrooveLength = grooveInfo.get(i)?.l ?? 0; //尾通用挖槽长度 + if (br.arcBoardFeedProcess === ArcBoardFeedProcess.Slots) { + //挖槽的规律是先挖最左右两个槽,再根据最大槽间距、槽宽和剩余长度计算出比例挖槽 + let remainLength = cu.Length - firstGrooveLength - lastGrooveLength; //剩余长度 + //更新起始距离 + let startDist = dists[i] + firstGrooveLength; + //先计算是否可以添加槽加长 + const cu1 = arcBoardBuild.SweepCurves1[i - 1]; + const cu2 = arcBoardBuild.SweepCurves1[i + 1]; + if (!firstGrooveLength && arcExtension && cu1 && cu1 instanceof exports.Line) { + remainLength += arcExtension; + startDist -= arcExtension; + } + if (!lastGrooveLength && arcExtension && cu2 && cu2 instanceof exports.Line) + remainLength += arcExtension; + if (remainLength > 0) { + //只能画一个槽的情况 + if (remainLength <= grooveWidth) { + if (firstGrooveLength) { + startDist += grooveSpacing; + remainLength -= grooveSpacing; + } + if (lastGrooveLength) { + remainLength -= grooveSpacing; + } + if (remainLength > 0) + appendModel(remainLength, startDist, arcBoardOption); + continue; + } + //这里只够分配前后两个槽,这两个槽的大小可能一大一小 + if (remainLength <= grooveWidth * 2 + grooveSpacing) { + if (firstGrooveLength) { + startDist += grooveSpacing; + remainLength -= grooveSpacing; + } + if (lastGrooveLength) { + remainLength -= grooveSpacing; + } + appendModel(grooveWidth, startDist, arcBoardOption); + let x2 = startDist + grooveSpacing + grooveWidth; + let grooveLength2 = remainLength - grooveWidth - grooveSpacing; + // 如果第二个槽太小无法走刀,画一个最小刀直径的槽 + let knifeDiameter = arcBoardOption.knifeRadius * 2; + if (grooveLength2 < knifeDiameter) + appendModel(knifeDiameter, x2 - knifeDiameter + grooveLength2, arcBoardOption); + else + appendModel(grooveLength2, x2, arcBoardOption); + continue; + } + //绘制多个槽 + if (checkIsDivide(remainLength, grooveWidth, grooveSpacing, firstGrooveLength, lastGrooveLength)) { + if (!firstGrooveLength) { + appendModel(grooveWidth, startDist, arcBoardOption); + startDist += grooveWidth; + remainLength -= grooveWidth; + } + if (!lastGrooveLength) { + const cu1 = arcBoardBuild.SweepCurves1[i + 1]; + remainLength -= grooveWidth; + //判断是否满足尾部延伸 + const x = dists[i + 1] - grooveWidth + ((arcExtension && cu1 && cu1 instanceof exports.Line) ? arcExtension : 0); + appendModel(grooveWidth, x, arcBoardOption); + } + const pericycleWidth = grooveSpacing + grooveWidth; //周期宽度 + const length = remainLength + grooveWidth; + const count = Math.ceil(length / pericycleWidth); + // 计算新的槽位间距 + const newSpacing = (length / count) - grooveWidth; + const newPericycleWidth = newSpacing + grooveWidth; + for (let j = 0; j < count - 1; j++) { + const x = startDist + j * newPericycleWidth + newSpacing; + appendModel(grooveWidth, x, arcBoardOption); + } + } + else { + if (firstGrooveLength) { + startDist += grooveSpacing; + } + //不能等分,根据指定槽大小绘制,最后补一个小槽 + const pericycleWidth = grooveSpacing + grooveWidth; //周期宽度 + const count = Math.ceil(remainLength / pericycleWidth); + for (let j = 0; j < count; j++) { + let x = startDist + j * pericycleWidth; + if (remainLength >= pericycleWidth) { + appendModel(grooveWidth, x, arcBoardOption); + remainLength -= pericycleWidth; + } + else { + // 如果最后一个槽太小无法走刀,画一个最小刀直径的槽 + let knifeDiameter = arcBoardOption.knifeRadius * 2; + if (remainLength < knifeDiameter) + appendModel(knifeDiameter, x - knifeDiameter + remainLength, arcBoardOption); + else + appendModel(remainLength, x, arcBoardOption); + } + } + } + } + } + else { + let remainLength = cu.Length - firstGrooveLength - lastGrooveLength; //剩余长度 + if (remainLength > 0) { + //更新起始距离 + let startDist = dists[i]; + if (!firstGrooveLength) { + const cu1 = arcBoardBuild.SweepCurves1[i - 1]; + //判断是否满足头部延伸 + if (arcExtension && cu1 && cu1 instanceof exports.Line) { + remainLength += arcExtension; + startDist -= arcExtension; + } + } + if (!lastGrooveLength) { + const cu1 = arcBoardBuild.SweepCurves1[i + 1]; + //判断是否满足尾部延伸 + if (arcExtension && cu1 && cu1 instanceof exports.Line) { + remainLength += arcExtension; + } + } + appendModel(remainLength, startDist, arcBoardOption); + } + } } - let dir = file.Read(); - let knifeId = file.Read(); - let knifeRad = file.Read(); - let knifeAngle = file.Read(); - let knifeName = file.Read(); - data.push({ - path, dir, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName } - }); } + return mmm; +} + +/** 视图类型 */ +var ViewType; +(function (ViewType) { + ViewType["Normal"] = "\u6B63\u89C6\u56FE"; + ViewType["Front"] = "\u524D\u89C6\u56FE"; + ViewType["Left"] = "\u5DE6\u89C6\u56FE"; + ViewType["Right"] = "\u53F3\u89C6\u56FE"; + ViewType["Down"] = "\u4FEF\u89C6\u56FE"; + ViewType["Unknown"] = "\u672A\u77E5\u89C6\u56FE"; +})(ViewType || (ViewType = {})); +/** 线段管理器 */ +class CurveManager { + /* 多段线展开直线(类型依旧是多段线) */ + static CreateExpandPl(pl) { + const cus = pl.Explode(); + let len = 0; + const ps = []; + for (const cu of cus) { + ps.push(new three.Vector2(len, 0)); + len += cu.Length; + } + ps.push(new three.Vector2(len, 0)); + return this.CreatePolyline(ps).ApplyMatrix(pl.OCS); + } + ; + /** 绘制矩阵所表示的坐标系 */ + static CreateAxis(m) { + const len = 100; + const xArrow = new exports.Line(new three.Vector3(0, 0, 0), new three.Vector3(len, 0, 0)); + const yArrow = new exports.Line(new three.Vector3(0, 0, 0), new three.Vector3(0, len, 0)); + const zArrow = new exports.Line(new three.Vector3(0, 0, 0), new three.Vector3(0, 0, len)); + xArrow.ColorIndex = 1; + yArrow.ColorIndex = 3; + zArrow.ColorIndex = 5; + xArrow.ApplyMatrix(m); + yArrow.ApplyMatrix(m); + zArrow.ApplyMatrix(m); + return [xArrow, yArrow, zArrow]; + } + ; + /** 点集转线段簇 */ + static PtsToLines(pts) { + const lines = []; + for (let i = 1; i < pts.length; i++) { + const p1 = pts[i - 1]; + const p2 = pts[i]; + const line = new exports.Line(p1, p2); + lines.push(line); + } + return lines; + } + ; + /** 线段簇转多段线 */ + static LinesToPl(lines) { + const pl = new exports.Polyline(); + // 确保坐标系不要沿着直线方向 + const lines2 = []; + if (lines.length === 1) { + lines2.push(lines[0]); + const p1 = lines[0].EndPoint; + const p2 = p1.clone().add(p1.clone().normalize().multiplyScalar(1)); + const line = new exports.Line(p1, p2); + lines2.push(line); + pl.OCS = ComputerCurvesNormalOCS(lines2); + } + else { + pl.OCS = ComputerCurvesNormalOCS(lines); + } + // 转成多段线 + pl.ColorIndex = lines[0].ColorIndex; + for (const splitLine of lines) { + pl.Join(splitLine, false, 0.01); + } + return pl; + } + ; + /** 获取pA-pB之间的曲线 */ + static Get_Pl_InPtAtoPtB(pl, pA, pB) { + // 确保pA在pB前面 + if (pl.GetParamAtPoint(pA) > pl.GetParamAtPoint(pB)) { + const temp = pA; + pA = pB; + pB = temp; + } + const paramA = pl.GetParamAtPoint(pA); + const pls = pl.GetSplitCurves(paramA); + pl = pls[1] || pls[0]; + const paramB = pl.GetParamAtPoint(pB); + return pl.GetSplitCurves(paramB)[0]; + } + ; +} +/** X轴的平行线 */ +CurveManager.CreateXLine = (p) => new exports.Line(new three.Vector3(p.x - 1000, p.y, p.z), new three.Vector3(p.x + 1000, p.y, p.z)); +/** Y轴的平行线 */ +CurveManager.CreateYLine = (p) => new exports.Line(new three.Vector3(p.x, p.y - 1000, p.z), new three.Vector3(p.x, p.y + 1000, p.z)); +/** Z轴的平行线 */ +CurveManager.CreateZLine = (p) => new exports.Line(new three.Vector3(p.x, p.y, p.z - 1000), new three.Vector3(p.x, p.y, p.z + 1000)); +/** 通过点集生成多段线 */ +CurveManager.CreatePolyline = (ps) => new exports.Polyline(ps.map(p => { return { pt: p, bul: 0 }; })); + +//为了避免Core对UI库的依赖,导致测试用例失败,导致外部项目引用失败,我们分离了这个函数 +var Intent; +(function (Intent) { + Intent["NONE"] = "none"; + Intent["PRIMARY"] = "primary"; + Intent["SUCCESS"] = "success"; + Intent["WARNING"] = "warning"; + Intent["DANGER"] = "danger"; +})(Intent || (Intent = {})); +const ToasterInjectFunctions = []; +function Toaster(option) { + for (let f of ToasterInjectFunctions) + f(option); +} +const ToasterShowEntityMsgInjectFunctions = []; +function ToasterShowEntityMsg(option) { + for (let f of ToasterShowEntityMsgInjectFunctions) + f(option); + let logMsgs = [{ msg: option.msg }]; + if (option.ent) + logMsgs.push({ msg: "点击查看", entity: Array.isArray(option.ent) ? option.ent : [option.ent] }); + InteractionLog(logMsgs, LogType.Warning); +} + +function equaln(v1, v2, fuzz = 1e-5) { + return Math.abs(v1 - v2) <= fuzz; +} +function FixIndex(index, arr) { + let count = (arr instanceof Array) ? arr.length : arr; + if (index < 0) + return count + index; + else if (index >= count) + return index - count; + else + return index; +} +/** + * @param compart true => t2 , false => t1 + * @returns 索引 + */ +function Max(arr, compart) { + let best = arr[0]; + let bestIndex = 0; + for (let i = 1; i < arr.length; i++) { + let t1 = arr[i]; + if (compart(best, t1)) { + best = t1; + bestIndex = i; + } + } + return bestIndex; } let Hole = class Hole extends Entity { constructor() { super(...arguments); + this.allowHoleAtBoardEdge = false; //允许大孔面在板边缘 this.type = GangDrillType.Pxl; } get Height() { @@ -11761,6 +13118,15 @@ let Hole = class Hole extends Entity { this.type = t; } } + get AllowPxl() { + return this.allowHoleAtBoardEdge; + } + set AllowPxl(v) { + if (this.allowHoleAtBoardEdge !== v) { + this.WriteAllObjectRecord(); + this.allowHoleAtBoardEdge = v; + } + } Clone() { let ent = super.Clone(); ent.OtherHalfTongKong = null; @@ -11778,17 +13144,30 @@ let Hole = class Hole extends Entity { this.FId = file.ReadSoftObjectId(); this.MId = file.ReadSoftObjectId(); } - if (ver >= 6) { + if (ver > 5) { this.OtherHalfTongKong = file.ReadSoftObjectId(); } + if (ver > 6) { + this.allowHoleAtBoardEdge = file.ReadBool(); + } + else { + this.allowHoleAtBoardEdge = false; + } + if (ver > 8) + this._LockMaterial = file.ReadBool(); + else + this._LockMaterial = false; } WriteFile(file) { super.WriteFile(file); - file.Write(6); //ver + file.Write(9); file.Write(this._Height); file.WriteSoftObjectId(this.FId); file.WriteSoftObjectId(this.MId); file.WriteSoftObjectId(this.OtherHalfTongKong); + file.WriteBool(this.allowHoleAtBoardEdge); + // ver9 + file.WriteBool(this._LockMaterial); } }; __decorate([ @@ -11827,6 +13206,10 @@ let CylinderHole = CylinderHole_1 = class CylinderHole extends Hole { constructor() { super(); this._Radius = 1; + //同侧面 常规单头连杆、偏心轮、预埋件三合一排钻(原先是)是双头三合一 + this._SameSideHole = false; + this._GoodsId = ""; + this._GoodsSn = ""; this._Color = 1; } static CreateCylHole(radius, height, type) { @@ -11855,12 +13238,40 @@ let CylinderHole = CylinderHole_1 = class CylinderHole extends Hole { super.Height = v; } } + //同侧面排钻 + get SameSideHole() { + return this._SameSideHole; + } + set SameSideHole(value) { + if (this._SameSideHole !== value) { + this.WriteAllObjectRecord(); + this._SameSideHole = value; + } + } get Radius() { return this._Radius; } get BoundingBox() { return this.BoundingBoxInOCS.applyMatrix4(this._Matrix); } + get GoodsId() { + return this._GoodsId; + } + set GoodsId(value) { + if (this._GoodsId !== value) { + this.WriteAllObjectRecord(); + this._GoodsId = value; + } + } + get GoodsSn() { + return this._GoodsSn; + } + set GoodsSn(value) { + if (this._GoodsSn !== value) { + this.WriteAllObjectRecord(); + this._GoodsSn = value; + } + } /** * 返回对象在自身坐标系下的Box */ @@ -11915,7 +13326,7 @@ let CylinderHole = CylinderHole_1 = class CylinderHole extends Hole { GetObject3DByRenderType(renderType) { if (renderType === RenderType.Wireframe) return new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)); - else if (renderType === RenderType.CustomNumber || renderType === RenderType.ModelGroove) + else if (renderType === RenderType.CustomNumber || renderType === RenderType.ModelGroove || renderType === RenderType.Edge) return; //不绘制了 // return new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex, FrontSide, true)); else @@ -11962,12 +13373,21 @@ let CylinderHole = CylinderHole_1 = class CylinderHole extends Hole { else { this.type = file.Read(); } + if (ver > 5) + this.SameSideHole = file.Read(); + if (ver > 6) { + this.GoodsId = file.Read(); + this.GoodsSn = file.Read(); + } } WriteFile(file) { super.WriteFile(file); - file.Write(5); //ver + file.Write(7); //ver file.Write(this._Radius); file.Write(this.type); + file.Write(this.SameSideHole); + file.Write(this.GoodsId); + file.Write(this.GoodsSn); } }; CylinderHole = CylinderHole_1 = __decorate([ @@ -12010,7 +13430,7 @@ function FastDrillingEdgeGeometry(radius, height) { CADFactory.RegisterObjectAlias(CylinderHole, "GangDrill"); const SCALAR = 0.1; -function CyHoleInBoard(cys, br, ocs, checkAll = false, allowPxl = false) { +function CyHoleInBoard(cys, br, ocs, checkAll = false) { if (!checkAll && cys.length === 1 && cys[0].Type === GangDrillType.Ymj) return true; const outline = br.ContourCurve; @@ -12055,7 +13475,7 @@ function CyHoleInBoard(cys, br, ocs, checkAll = false, allowPxl = false) { if (ymj) { let center = ymj.Position.applyMatrix4(ocs).setZ(0); let cir = new exports.Circle(center, ymj.Radius - SCALAR); - return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center); + return outline.IntersectWith(cir, 0, 1e-4).length === 0 && outline.PtInCurve(center); } } else { @@ -12066,17 +13486,21 @@ function CyHoleInBoard(cys, br, ocs, checkAll = false, allowPxl = false) { if (plxs.every(cy => { let center = cy.Position.applyMatrix4(ocs).setZ(0); let cir = new exports.Circle(center, pxl.Radius - SCALAR); - if (allowPxl || !HostApplicationServices.forceFilterPxl) - return outline.IntersectWith(cir, 0).length <= 1 && !outline.PtInCurve(center); + if (HostApplicationServices.forceFilterPxl) { + if (pxl.AllowPxl) + return outline.IntersectWith(cir, 0, 1e-4).length <= 1 && !outline.PtInCurve(center); + else + return outline.IntersectWith(cir, 0, 1e-4).length > 0 || !outline.PtInCurve(center); + } else - return outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center); + return outline.IntersectWith(cir, 0, 1e-4).length <= 1 && !outline.PtInCurve(center); })) return false; } if (woodPXL) { let center = woodPXL.Position.applyMatrix4(ocs).setZ(0); let cir = new exports.Circle(center, woodPXL.Radius - SCALAR); - if (outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center)) + if (outline.IntersectWith(cir, 0, 1e-4).length > 0 || !outline.PtInCurve(center)) return false; } if (ljg) { @@ -12088,7 +13512,7 @@ function CyHoleInBoard(cys, br, ocs, checkAll = false, allowPxl = false) { c1.add(nor.multiplyScalar(ljg.Radius)); c2.add(nor.negate()); let rect = new exports.Polyline().RectangleFrom2Pt(c1, c2); - let intPtsLen = outline.IntersectWith(rect, 0).length; + let intPtsLen = outline.IntersectWith(rect, 0, 1e-4).length; if (intPtsLen > 2 || (intPtsLen === 0 && !outline.PtInCurve(minPt))) return false; } @@ -12103,7 +13527,7 @@ function CyHoleInBoard(cys, br, ocs, checkAll = false, allowPxl = false) { let p4 = c2.clone().add(dir); let l1 = new exports.Line(p1, p2); let l2 = new exports.Line(p3, p4); - if (l1.IntersectWith(outline, 0).length !== 1 || l2.IntersectWith(outline, 0).length !== 1) + if (l1.IntersectWith(outline, 0, 1e-4).length !== 1 || l2.IntersectWith(outline, 0, 1e-4).length !== 1) return false; } } @@ -12175,338 +13599,33 @@ function SetBrHighHoleTypeFromRectHoleType(br, brRectHoleType) { br.BoardProcessOption[EBoardKeyList.DrillType] = DrillType.More; } -class BoardUVGenerator { - generateTopUV(geometry, vertices, indexA, indexB, indexC) { - var a_x = vertices[indexA * 3]; - var a_y = vertices[indexA * 3 + 1]; - var b_x = vertices[indexB * 3]; - var b_y = vertices[indexB * 3 + 1]; - var c_x = vertices[indexC * 3]; - var c_y = vertices[indexC * 3 + 1]; - return [ - new three.Vector2(a_x, a_y), - new three.Vector2(b_x, b_y), - new three.Vector2(c_x, c_y) - ]; - } - generateSideWallUV(geometry, vertices, indexA, indexB, indexC, indexD) { - var a_x = vertices[indexA * 3]; - var a_y = vertices[indexA * 3 + 1]; - var a_z = vertices[indexA * 3 + 2]; - var b_x = vertices[indexB * 3]; - var b_y = vertices[indexB * 3 + 1]; - var b_z = vertices[indexB * 3 + 2]; - var c_x = vertices[indexC * 3]; - var c_y = vertices[indexC * 3 + 1]; - var c_z = vertices[indexC * 3 + 2]; - var d_x = vertices[indexD * 3]; - var d_y = vertices[indexD * 3 + 1]; - var d_z = vertices[indexD * 3 + 2]; - let pts; - if (Math.abs(a_y - b_y) < 0.01) { - pts = [ - new three.Vector2(a_z - 1, a_x), - new three.Vector2(b_z - 1, b_x), - new three.Vector2(c_z - 1, c_x), - new three.Vector2(d_z - 1, d_x) - ]; - } - else { - pts = [ - new three.Vector2(a_z - 1, a_y), - new three.Vector2(b_z - 1, b_y), - new three.Vector2(c_z - 1, c_y), - new three.Vector2(d_z - 1, d_y) - ]; - } - return pts; - } -} -class BoardUVGenerator2 extends BoardUVGenerator { - generateTopUV(geometry, vertices, indexA, indexB, indexC) { - var a_x = vertices[indexA * 3]; - var a_y = vertices[indexA * 3 + 1]; - var b_x = vertices[indexB * 3]; - var b_y = vertices[indexB * 3 + 1]; - var c_x = vertices[indexC * 3]; - var c_y = vertices[indexC * 3 + 1]; - return [ - new three.Vector2(a_y, a_x), - new three.Vector2(b_y, b_x), - new three.Vector2(c_y, c_x) - ]; - } -} -let boardUVGenerator = new BoardUVGenerator(); -let boardUVGenerator2 = new BoardUVGenerator2(); +var FontType; +(function (FontType) { + FontType["YaHei"] = "yahei"; + FontType["SongTi"] = "songti"; + FontType["KaiTi"] = "KaiTi"; + FontType["FangSong"] = "FangSong"; + FontType["LiShu"] = "LiShu"; + FontType["HeiTi"] = "HeiTi"; + FontType["HuaWenLiShu"] = "HuaWenLiShu"; + FontType["HuaWenXingKai"] = "HuaWenXingKai"; +})(FontType || (FontType = {})); +[ + { label: "宋体", value: FontType.SongTi }, + { label: "雅黑", value: FontType.YaHei }, + { label: "楷体", value: FontType.KaiTi }, + { label: "仿宋", value: FontType.FangSong }, + { label: "隶书", value: FontType.LiShu }, + { label: "黑体", value: FontType.HeiTi }, + { label: "华文隶书", value: FontType.HuaWenLiShu }, + { label: "华文行楷", value: FontType.HuaWenXingKai } +]; -const _TerminateTaskInjectInteractionFunctions = []; -function TerminateCSGTask(task) { - for (let f of _TerminateTaskInjectInteractionFunctions) - f(task); -} - -var BoardType; -(function (BoardType) { - BoardType[BoardType["Layer"] = 0] = "Layer"; - BoardType[BoardType["Vertical"] = 1] = "Vertical"; - BoardType[BoardType["Behind"] = 2] = "Behind"; //背板 -})(BoardType || (BoardType = {})); -//纹路类型 -var LinesType; -(function (LinesType) { - /** 正纹 */ - LinesType[LinesType["Positive"] = 0] = "Positive"; - /** 反纹 */ - LinesType[LinesType["Reverse"] = 1] = "Reverse"; - /** 可翻转 */ - LinesType[LinesType["CanReversal"] = 2] = "CanReversal"; -})(LinesType || (LinesType = {})); -// 排版面 -var ComposingType; -(function (ComposingType) { - ComposingType[ComposingType["Positive"] = 0] = "Positive"; - ComposingType[ComposingType["Reverse"] = 1] = "Reverse"; - ComposingType[ComposingType["Arbitrary"] = 2] = "Arbitrary"; //任意 -})(ComposingType || (ComposingType = {})); -var BoardOpenDir; -(function (BoardOpenDir) { - BoardOpenDir[BoardOpenDir["Left"] = 1] = "Left"; - BoardOpenDir[BoardOpenDir["Right"] = 2] = "Right"; - BoardOpenDir[BoardOpenDir["Up"] = 3] = "Up"; - BoardOpenDir[BoardOpenDir["Down"] = 4] = "Down"; - BoardOpenDir[BoardOpenDir["None"] = 0] = "None"; -})(BoardOpenDir || (BoardOpenDir = {})); -var BrRelativePos; -(function (BrRelativePos) { - BrRelativePos["Front"] = "front"; - BrRelativePos["Back"] = "back"; - BrRelativePos["Top"] = "top"; - BrRelativePos["Bottom"] = "bottom"; - BrRelativePos["Left"] = "left"; - BrRelativePos["Right"] = "right"; - BrRelativePos["Div"] = "div"; -})(BrRelativePos || (BrRelativePos = {})); - -class PointShapeUtils { - //方形点表 - static SquarePts(size) { - return [ - new three.Vector3(-size, -size), - new three.Vector3(size, -size), - new three.Vector3(size, size), - new three.Vector3(-size, size), - new three.Vector3(-size, -size), - ]; - } - //方形外圈十字直线点表 - static OutsideLinePts(squareSize, lineLength) { - return [ - //-X - new three.Vector3(-squareSize, 0), - new three.Vector3(-lineLength, 0), - //X - new three.Vector3(squareSize, 0), - new three.Vector3(lineLength, 0), - //Y - new three.Vector3(0, squareSize), - new three.Vector3(0, lineLength), - //-Y - new three.Vector3(0, -squareSize), - new three.Vector3(0, -lineLength), - ]; - } - //十字直线点表 - static CrossLinePts(lineLength) { - return [ - new three.Vector3(0, -lineLength), - new three.Vector3(0, lineLength), - new three.Vector3(lineLength, 0), - new three.Vector3(-lineLength, 0), - ]; - } - static CrossLine3DPts(lineLength) { - return [ - [new three.Vector3(lineLength, 0), - new three.Vector3(-lineLength / 2, 0)], - [new three.Vector3(0, -lineLength / 2), - new three.Vector3(0, lineLength)], - [new three.Vector3(0, 0, -lineLength / 2), - new three.Vector3(0, 0, lineLength)], - ]; - } - static TrianglePts(size) { - return [ - new three.Vector3(size, -size), - new three.Vector3(0, size), - new three.Vector3(-size, -size), - new three.Vector3(size, -size), - ]; - } - static CirclePts(size) { - let pts = []; - let a = Math.PI * 2 / 8; - for (let i = 0; i < 9; i++) - pts.push(new three.Vector3(Math.sin(a * i) * size, Math.cos(a * i) * size)); - return pts; - } - static ObliqueCrossPts(size) { - return [new three.Vector3(-size, size), new three.Vector3(size, -size), new three.Vector3(-size, -size), new three.Vector3(size, size)]; - } - static ObliqueCrossLinePts(size) { - return [new three.Vector3(-size, size), new three.Vector3(size, -size), new three.Vector3(), new three.Vector3(-size, -size), new three.Vector3(size, size)]; - } - static SandClockPts(size) { - return [ - new three.Vector3(size, size), - new three.Vector3(-size, size), - new three.Vector3(size, -size), - new three.Vector3(-size, -size), - new three.Vector3(size, size), - ]; - } - static TangentPts(size) { - let pts = [ - new three.Vector3(-size, size), - new three.Vector3(size, size), - new three.Vector3(size / 2, size), - ]; - let a = Math.PI * 2 / 8; - for (let i = 0; i < 9; i++) - pts.push(new three.Vector3(Math.sin(a * i + Math.PI / 2) * size, Math.cos(a * i + Math.PI / 2) * size)); - return pts; - } - static PerPts(size) { - return [ - new three.Vector3(-size, size), - new three.Vector3(-size, -size), - new three.Vector3(size, -size), - new three.Vector3(0, -size), - new three.Vector3(0, 0), - new three.Vector3(-size, 0), - ]; - } - static LinesDirPts(len, width, lineType) { - if (lineType === LinesType.Reverse) { - return [ - new three.Vector3(-len / 2), new three.Vector3(-len / 2 + width / 2, width / 2), - new three.Vector3(-len / 2), new three.Vector3(-len / 2 + width / 2, -width / 2), - new three.Vector3(-len / 2), new three.Vector3(len / 2), - new three.Vector3(len / 2), new three.Vector3(len / 2 - width / 2, width / 2), - new three.Vector3(len / 2), new three.Vector3(len / 2 - width / 2, -width / 2), - ]; - } - else if (lineType === LinesType.Positive) - return [ - new three.Vector3(0, -len / 2), new three.Vector3(-width / 2, -len / 2 + width / 2), - new three.Vector3(0, -len / 2), new three.Vector3(width / 2, -len / 2 + width / 2), - new three.Vector3(0, -len / 2), new three.Vector3(0, len / 2), - new three.Vector3(0, len / 2), new three.Vector3(-width / 2, len / 2 - width / 2), - new three.Vector3(0, len / 2), new three.Vector3(width / 2, len / 2 - width / 2), - ]; - else { - let w1 = Math.min(len, width) / 5; - return [ - new three.Vector3(0, len / 2), new three.Vector3(0, -len / 2), - new three.Vector3(-width / 2), new three.Vector3(width / 2), - new three.Vector3(-width / 2), new three.Vector3(-width / 2 + w1, w1), - new three.Vector3(-width / 2), new three.Vector3(-width / 2 + w1, -w1), - new three.Vector3(width / 2), new three.Vector3(width / 2 - w1, w1), - new three.Vector3(width / 2), new three.Vector3(width / 2 - w1, -w1), - new three.Vector3(0, len / 2), new three.Vector3(-w1, len / 2 - w1), - new three.Vector3(0, len / 2), new three.Vector3(w1, len / 2 - w1), - new three.Vector3(0, -len / 2), new three.Vector3(-w1, -len / 2 + w1), - new three.Vector3(0, -len / 2), new three.Vector3(w1, -len / 2 + w1), - ]; - } - } - //开门方向纹路 - static LinesOpenDirPts(len, width, openDir) { - if (openDir === BoardOpenDir.Right) { - return [ - new three.Vector3(-width / 2, -len / 2), new three.Vector3(width / 2, 0), - new three.Vector3(width / 2, 0), new three.Vector3(-width / 2, len / 2) - ]; - } - else if (openDir === BoardOpenDir.Left) { - return [ - new three.Vector3(width / 2, -len / 2), new three.Vector3(-width / 2, 0), - new three.Vector3(-width / 2, 0), new three.Vector3(width / 2, len / 2) - ]; - } - else if (openDir === BoardOpenDir.Up) { - return [ - new three.Vector3(-width / 2, -len / 2), new three.Vector3(0, len / 2), - new three.Vector3(0, len / 2), new three.Vector3(width / 2, -len / 2) - ]; - } - else if (openDir === BoardOpenDir.Down) { - return [ - new three.Vector3(-width / 2, len / 2), new three.Vector3(0, -len / 2), - new three.Vector3(0, -len / 2), new three.Vector3(width / 2, len / 2) - ]; - } - } -} - -//为了避免Core对UI库的依赖,导致测试用例失败,导致外部项目引用失败,我们分离了这个函数 -var Intent; -(function (Intent) { - Intent["NONE"] = "none"; - Intent["PRIMARY"] = "primary"; - Intent["SUCCESS"] = "success"; - Intent["WARNING"] = "warning"; - Intent["DANGER"] = "danger"; -})(Intent || (Intent = {})); -const ToasterInjectFunctions = []; -function Toaster(option) { - for (let f of ToasterInjectFunctions) - f(option); -} -const ToasterShowEntityMsgInjectFunctions = []; -function ToasterShowEntityMsg(option) { - for (let f of ToasterShowEntityMsgInjectFunctions) - f(option); - let logMsgs = [{ msg: option.msg }]; - if (option.ent) - logMsgs.push({ msg: "点击查看", entity: Array.isArray(option.ent) ? option.ent : [option.ent] }); - InteractionLog(logMsgs, LogType.Warning); -} - -function equaln(v1, v2, fuzz = 1e-5) { - return Math.abs(v1 - v2) <= fuzz; -} -function FixIndex(index, arr) { - let count = (arr instanceof Array) ? arr.length : arr; - if (index < 0) - return count + index; - else if (index >= count) - return index - count; - else - return index; -} -/** - * @param compart true => t2 , false => t1 - * @returns 索引 - */ -function Max(arr, compart) { - let best = arr[0]; - let bestIndex = 0; - for (let i = 1; i < arr.length; i++) { - let t1 = arr[i]; - if (compart(best, t1)) { - best = t1; - bestIndex = i; - } - } - return bestIndex; -} - -var EMetalsType; -(function (EMetalsType) { - EMetalsType["Metals"] = "\u4E94\u91D1"; - EMetalsType["Comp"] = "\u7EC4\u4EF6"; -})(EMetalsType || (EMetalsType = {})); +var FindModifyStyle; +(function (FindModifyStyle) { + FindModifyStyle[FindModifyStyle["FuzzyQuery"] = 0] = "FuzzyQuery"; + FindModifyStyle[FindModifyStyle["PreciseQuery"] = 1] = "PreciseQuery"; +})(FindModifyStyle || (FindModifyStyle = {})); [EBoardKeyList.UpSealed, EBoardKeyList.DownSealed, EBoardKeyList.RightSealed, EBoardKeyList.LeftSealed]; var EFindType; @@ -12531,6 +13650,8 @@ var ECompareType; ECompareType["Greater"] = ">="; ECompareType["Less"] = "<="; ECompareType["Include"] = "//"; + ECompareType["Prefix"] = "\u524D\u7F00"; + ECompareType["Suffix"] = "\u540E\u7F00"; })(ECompareType || (ECompareType = {})); //门板位置类型 @@ -12675,7 +13796,7 @@ var EOrderType; })(EOrderType || (EOrderType = {})); const DefaultLayerBoardConfig = { - version: 3, + version: 4, type: BoardType.Layer, name: "层板", frontShrink: 0, @@ -12692,10 +13813,12 @@ const DefaultLayerBoardConfig = { calcFrontShrink: "0", calcLeftShrink: "0", calcRightShrink: "0", + exprCount: "1", + exprThickness: "18" }; Object.freeze(DefaultLayerBoardConfig); const DefaultVerticalBoardConfig = { - version: 3, + version: 4, type: BoardType.Vertical, name: "立板", frontShrink: 0, @@ -12711,10 +13834,12 @@ const DefaultVerticalBoardConfig = { calcSpaceSize: "0", calcBottomShrink: "0", calcFrontShrink: "0", + exprCount: "1", + exprThickness: "18" }; Object.freeze(DefaultVerticalBoardConfig); const DefaultBehindBoardConfig = { - version: 2, + version: 3, type: BoardType.Behind, name: "背板", leftExt: 0, @@ -12730,10 +13855,12 @@ const DefaultBehindBoardConfig = { count: 1, calcSpaceSize: "0", calcMoveDist: "0", + exprCount: "1", + exprThickness: "18" }; Object.freeze(DefaultBehindBoardConfig); const DefaultWineRackConfig = { - version: 5, + version: 6, type: EWineRackType.Oblique, wineRackStyle: EWineRackStyle.WholeLattice, arrayType: EWRackArrayType.ByWidth, @@ -12763,7 +13890,12 @@ const DefaultWineRackConfig = { brThick2: 18, isExtendsBH2: false, followNarrow: false, - useBoardProcessOption: true + useBoardProcessOption: true, + boardMatName: "", //板材名 + material: "", //材料 + color: "", //颜色 + roomName: "", //房名 + cabinetName: "", //柜名 }; Object.freeze(DefaultWineRackConfig); const DefaultTopBoardOption = { @@ -12782,7 +13914,7 @@ const DefaultTopBoardOption = { }; Object.freeze(DefaultTopBoardOption); const DefaultBottomBoardOption = { - version: 2, + version: 3, type: BoardType.Layer, name: "底板", isDraw: true, @@ -12801,6 +13933,7 @@ const DefaultBottomBoardOption = { isDrawStrengthenStrip: false, footerOffset: 0, divCount: 1, + bigHoleDir: FaceDirection.Front, }; Object.freeze(DefaultBottomBoardOption); const DefaultSideBoardOption = { @@ -12851,7 +13984,7 @@ const DefaultPointLightOption = { lightColor: "#FFFFFF", temperature: 6500, Intensity: 100, - IndirectLightingIntensity: 1, + IndirectLightingIntensity: 3, SpecularScale: 1, SourceRadius: 10, SoftSourceRadius: 0, @@ -12864,13 +13997,13 @@ const DefaultSpotLightOption = { lightColor: "#FFFFFF", temperature: 6500, Intensity: 100, - IndirectLightingIntensity: 1, + IndirectLightingIntensity: 3, SpecularScale: 1, - SourceRadius: 0, + SourceRadius: 10, SoftSourceRadius: 30, SourceLength: 0, Angle: 45, - InnerConeAngle: 0, + InnerConeAngle: 30, AttenuationRadius: 300, CaseShadow: true, ShowHelper: true, @@ -12881,7 +14014,7 @@ const DefaultRectAreaLightOption = { lightColor: "#FFFFFF", temperature: 6500, Intensity: 100, - IndirectLightingIntensity: 1, + IndirectLightingIntensity: 3, SpecularScale: 1, AttenuationRadius: 300, Width: 150, @@ -12893,24 +14026,33 @@ const DefaultRectAreaLightOption = { }; Object.freeze(DefaultRectAreaLightOption); const DefaultRightPlaneLightOption = { - version: 2, + version: 3, ShowHemiLight: true, ShowSunLight: true, SkyLightColor: "#FFFFFF", SkyLightIntensity: 1, - SkyLightIndirectLightingIntensity: 1, + SkyLightIndirectLightingIntensity: 3, SunLightIntensity: 50, - SunLightIndirectLightingIntensity: 1, + SunLightIndirectLightingIntensity: 3, SunLightColor: "#FFFFFF", SunLightTemperature: 6500, SunLightElevationDeg: 60, SunLightRotateDeg: 300, + SunLightSourceAngle: 0.5, ShowExposure: true, AutoExposure: false, ExposureCompensation: 0, SunTime: "默认", }; Object.freeze(DefaultRightPlaneLightOption); +const DefaultArcBoardOption = { + version: 1, + name: "圆弧板", + type: BoardType.Layer, + height: 1200, + thickness: 18, +}; +Object.freeze(DefaultArcBoardOption); const DefaultSingleBoardOption = { version: 1, name: "层板", @@ -12925,9 +14067,9 @@ const DefaultSingleBoardOption = { }; Object.freeze(DefaultSingleBoardOption); const DefaultClosingStripOption = { - version: 3, + version: 6, type: BoardType.Vertical, - name: "收口条", + name: "收口条", //辅助条占用 striptype: StripType.H, boardRelative: BrRelativePos.Left, width: 54, @@ -12936,11 +14078,16 @@ const DefaultClosingStripOption = { isDrawFuZhu: true, fzWidth: 80, fzThickness: 18, - addSKTCabinetName: true + addSKTCabinetName: true, + brName: "左收口条", + FuZhuType: StripType.V, + fuZhuBrName: '', + fuZhuMaterial: '', + fuZhuColor: '', }; Object.freeze(DefaultClosingStripOption); const DefaultBoardFindOption = { - version: 9, + version: 14, condition: { // layer: false, //这个KEY看起来没用了 height: false, @@ -12980,6 +14127,13 @@ const DefaultBoardFindOption = { edgeRemarkDown: false, edgeRemarkLeft: false, edgeRemarkRight: false, + [EBoardKeyList.SpliteHeight]: false, + [EBoardKeyList.SpliteWidth]: false, + [EBoardKeyList.SpliteThickness]: false, + useCurve: false, + noUseBr: false, + noUseHwd: false, + useText: false, }, compareType: { height: ECompareType.Equal, @@ -12998,12 +14152,22 @@ const DefaultBoardFindOption = { composingFace: ECompareType.Equal, openDir: ECompareType.Equal, [EBoardKeyList.KnifeRad]: ECompareType.Equal, + edgeRemarkUp: ECompareType.Equal, + edgeRemarkDown: ECompareType.Equal, + edgeRemarkLeft: ECompareType.Equal, + edgeRemarkRight: ECompareType.Equal, + [EBoardKeyList.SpliteHeight]: ECompareType.Equal, + [EBoardKeyList.SpliteWidth]: ECompareType.Equal, + [EBoardKeyList.SpliteThickness]: ECompareType.Equal, }, tolerance: { height: "", width: "", thickness: "", [EBoardKeyList.KnifeRad]: "", + [EBoardKeyList.SpliteHeight]: "", + [EBoardKeyList.SpliteWidth]: "", + [EBoardKeyList.SpliteThickness]: "", }, // layer: "0", 删除无用的key height: "", @@ -13037,10 +14201,15 @@ const DefaultBoardFindOption = { edgeRemarkDown: "", edgeRemarkLeft: "", edgeRemarkRight: "", + query: FindModifyStyle.FuzzyQuery, + [EBoardKeyList.SpliteHeight]: "", + [EBoardKeyList.SpliteWidth]: "", + [EBoardKeyList.SpliteThickness]: "", + appendRemark: Array.from({ length: 10 }, () => ["", "", AddRemarkType.Cover]), }; Object.freeze(DefaultBoardFindOption); const DefaultLatticOption = { - version: 3, + version: 4, arrayType: ELatticeArrayType.ByWidth, gripWidth: 100, gripDepth: 100, @@ -13063,10 +14232,15 @@ const DefaultLatticOption = { downCut: 4, linesType: LinesType.Reverse, useBoardProcessOption: true, + boardMatName: "", //板材名 + material: "", //材料 + color: "", //颜色 + roomName: "", //房名 + cabinetName: "", //柜名 }; Object.freeze(DefaultLatticOption); const DefaultDoorOption = { - version: 9, + version: 13, col: 2, row: 1, isAllSelect: true, @@ -13119,19 +14293,59 @@ const DefaultDoorOption = { lbHightDrillOption: { up: "", down: "", left: "", right: "" }, useBoardProcessOption: true, isModifyHardwareMaterial: false, - deviation: 100 //偏移量 + deviation: 100, //偏移量 + boardMatName: "", //板材名 + material: "", //材料 + color: "", //颜色 + roomName: "", //房名 + cabinetName: "", //柜名 + layerEdgeRemarkUp: '', //层板板边备注上下左右 + layerEdgeRemarkDown: '', + layerEdgeRemarkLeft: '', + layerEdgeRemarkRight: '', + verticalEdgeRemarkUp: '', //立板板边备注上下左右 + verticalEdgeRemarkDown: '', + verticalEdgeRemarkLeft: '', + verticalEdgeRemarkRight: '', + parseHinge: false, + sealColorUp: "", //门板封边颜色 + sealColorDown: "", + sealColorLeft: "", + sealColorRight: "", + reservedEdgeUp: "0", //门板预留边 + reservedEdgeDown: "0", + reservedEdgeLeft: "0", + reservedEdgeRight: "0", + layerSealColorUp: "", //层板封边颜色 + layerSealColorDown: "", + layerSealColorLeft: "", + layerSealColorRight: "", + layerReservedEdgeUp: "0", //层板预留边 + layerReservedEdgeDown: "0", + layerReservedEdgeLeft: "0", + layerReservedEdgeRight: "0", + verticalSealColorUp: "", //立板封边颜色 + verticalSealColorDown: "", + verticalSealColorLeft: "", + verticalSealColorRight: "", + verticalReservedEdgeUp: "0", //层板预留边 + verticalReservedEdgeDown: "0", + verticalReservedEdgeLeft: "0", + verticalReservedEdgeRight: "0", }; Object.freeze(DefaultDoorOption); const DefaultHingeOption = { + version: 1, hingeCount: 0, hindeTopDist: 0, hindeBottomDist: 0, useRule: false, - deviation: 100 + deviation: 100, + parseHinge: false, }; Object.freeze(DefaultHingeOption); const DefaultDrawerOption = { - version: 7, + version: 10, col: 1, row: 1, isAllSelect: true, @@ -13151,6 +14365,7 @@ const DefaultDrawerOption = { thickness: 18, depth: 0, isAuto: true, + isFloor50: true, boardName: "", handleAngle: 90, handleHorPos: HandleHorPos.Mid, @@ -13172,6 +14387,19 @@ const DefaultDrawerOption = { lbHightDrillOption: { up: "", down: "", left: "", right: "" }, useBoardProcessOption: true, isModifyHardwareMaterial: false, + boardMatName: "", //板材名 + material: "", //材料 + color: "", //颜色 + roomName: "", //房名 + cabinetName: "", //柜名 + sealColorUp: "", //抽屉立板封边颜色 + sealColorDown: "", + sealColorLeft: "", + sealColorRight: "", + reservedEdgeUp: "0", //抽屉立板预留边 + reservedEdgeDown: "0", + reservedEdgeLeft: "0", + reservedEdgeRight: "0", }; Object.freeze(DefaultDrawerOption); const DefaultBoardBatchCurtailOption = { @@ -13215,7 +14443,12 @@ const DefaultLatticeConfig = { upCut: 0, downCut: 4, linesType: LinesType.Reverse, - useBoardProcessOption: true + useBoardProcessOption: true, + boardMatName: "", //板材名 + material: "", //材料 + color: "", //颜色 + roomName: "", //房名 + cabinetName: "", //柜名 }; Object.freeze(DefaultLatticeConfig); const DefaultNailOption = { @@ -13230,7 +14463,7 @@ const DefaultNailOption = { count: 2, rad: 2.5, length: 34, - depth: 11 + depth: 11, }; Object.freeze(DefaultNailOption); const DefaultCylinederMetalsOption = { @@ -13273,7 +14506,7 @@ const DefaultExtruderMetalsOption = { }; Object.freeze(DefaultExtruderMetalsOption); const DefaultCompositeMetalsOption = { - version: 2, + version: 3, type: EMetalsType.Metals, isSplite: false, isSplitePrice: false, @@ -13292,6 +14525,8 @@ const DefaultCompositeMetalsOption = { material: "", comments: "", isHole: true, + goodsId: "", + goodsSn: "" }; Object.freeze(DefaultCompositeMetalsOption); const DefaultToplineMetalsOption = { @@ -13309,10 +14544,12 @@ const DefaultToplineMetalsOption = { comments: "", addLen: "0", isHole: false, + goodsId: "", + goodsSn: "" }; Object.freeze(DefaultToplineMetalsOption); const DefaultBoardProcessOption = { - version: 4, + version: 5, roomName: "", cabinetName: "", boardName: "", @@ -13340,6 +14577,16 @@ const DefaultBoardProcessOption = { edgeRemarkLeft: "", edgeRemarkRight: "", highBoardEdgeRemark: [], + reservedEdgeUp: "0", + reservedEdgeDown: "0", + reservedEdgeLeft: "0", + reservedEdgeRight: "0", + highReservedEdge: [], + sealColorUp: "", + sealColorDown: "", + sealColorLeft: "", + sealColorRight: "", + sealColorType: "", }; Object.freeze(DefaultBoardProcessOption); const DefaultCurve2RecOption = { @@ -13506,7 +14753,7 @@ const DefaultR2bOption = { }; Object.freeze(DefaultR2bOption); const DefaultR2b2Option = { - version: 1, + version: 2, depthExpr: "W", drillType: "", sealedDown: "1", @@ -13517,10 +14764,16 @@ const DefaultR2b2Option = { maxThickness: 20, layerShrink: 0, vertialShrink: 0, + useBoardProcessOption: true, + boardMatName: "", //板材名 + material: "", //材料 + color: "", //颜色 + roomName: "", //房名 + cabinetName: "", //柜名 }; Object.freeze(DefaultR2b2Option); ({ - version: 5, + version: 7, isAll: true, isHide: true, isDelete: false, @@ -13551,8 +14804,12 @@ Object.freeze(DefaultR2b2Option); circle: false, arc: false, custom: false, + spotlight: false, + pointLight: false, + rectAreaLight: false, customBoardName: "", - matchType: ECompareType.Equal + matchType: ECompareType.Equal, + text: false, }); const DefaultCommonPanelOption = { version: 1, @@ -13565,7 +14822,7 @@ const DefaultDatalistOption = { }; Object.freeze(DefaultDatalistOption); const DefaultAutoDimBrsOption = { - version: 1, + version: 2, total: true, out: true, inW: false, @@ -13581,6 +14838,8 @@ const DefaultAutoDimBrsOption = { forBoardName: false, forBoardNameStr: "", forBoardNameType: ForBoardNameType.Same, + insideOffset: false, + insideOffsetDist: 0 }; Object.freeze(DefaultAutoDimBrsOption); const DefaultWindowPanelOption = { @@ -13614,23 +14873,31 @@ const DefaultDimStyleOption = { }; Object.freeze(DefaultDimStyleOption); const DefaultChangeColorByBoardMaterialOption = { + version: 1, accordThickness: false, accordMaterialColor: true, accordMaterial: true, - accordMaterialName: true + accordMaterialName: true, + includeNoChaiDanBoard: true, }; Object.freeze(DefaultChangeColorByBoardMaterialOption); const DefaultShareBoardInfConfigurationOption = { + version: 2, Physical2EdgeColor: 7, VisualStyle: RenderType.Conceptual, Viewport: ViewDirection.Southwest, IsExportBoard: true, IsExportHardware: true, showBom: true, + expireDays: "", + IsExportCurve: true, + IsExportDimension: true, + IsExportText: true }; Object.freeze(DefaultShareBoardInfConfigurationOption); const DefaultBulkheadCeilingOption = { - Item: [] + Item: [], + Height: 300 }; Object.freeze(DefaultBulkheadCeilingOption); const DefaultChangeColorByRoomOrCabinetOption = { @@ -13639,11 +14906,31 @@ const DefaultChangeColorByRoomOrCabinetOption = { }; Object.freeze(DefaultChangeColorByRoomOrCabinetOption); const DefaultDoorRelatesInfoOption = { - version: 1, - hingeOption: [] + version: 3, + hingeOption: [], + hingeDecimal: 1, + filterNoDoor: false, }; Object.freeze(DefaultDoorRelatesInfoOption); -({ +const DefaultPartsAnalysisOption = { + version: 1, + PartsOption: [ + ["name", true], + ["factory", false], + ["brand", false], + ["model", false], + ["spec", true], + ["material", false], + ["color", false], + ["unit", false], + ["count", true], + ["comments", false], + ["process", false], + ["actualExpr", false], + ] +}; +Object.freeze(DefaultPartsAnalysisOption); +const DefaultFastDimOption = { filterSmallSize: false, filterSmallSizeValue: 0, filterAppointSize: false, @@ -13651,7 +14938,102 @@ Object.freeze(DefaultDoorRelatesInfoOption); filterAppointForBoardName: false, filterAppointForBoardNameValues: "", conditionType: ForBoardNameType.Same, -}); +}; +Object.freeze(DefaultFastDimOption); +const DefaultOneClickInspectionOption = { + version: 2, + InspectionOption: { + isInterfere: true, + isMaxSizeBoard: true, + isMinSizeBoard: true, + isModel: true, + isDrill: true, + isSpecialBoardContour: true, + isSplitBoard: true, + isDrawHole: true, + }, + excludeDrawHoleOption: { + boardName: false, + boardNameValue: "", + processingGroupName: false, + processingGroupNameValue: "", + boardThickness: false, + boardThicknessValue: 18, + IsSplitBoard: false, + boardNameCompareType: ECompareType.Include, + processingGroupNameCompareType: ECompareType.Include, + boardThicknessCompareType: ECompareType.Less, + }, + excludeInterfereOption: { + boardName: false, + boardNameValue: "", + processingGroupName: false, + processingGroupNameValue: "", + hwComposityName: false, + hwComposityNameValue: "", + noChaiDanBoard: false, + boardNameCompareType: ECompareType.Include, + processingGroupNameCompareType: ECompareType.Include, + hwComposityNameCompareType: ECompareType.Include, + } +}; +Object.freeze(DefaultOneClickInspectionOption); +const DefaultArcBoardGrooveOption = { + version: 3, + isDrawArcGroove: true, + retainedThickness: "2", + knifeRadius: "3", + grooveAddLength: "0", + grooveAddWidth: "0", + grooveAddDepth: "0", + grooveSpacing2: "6", + grooveWidth2: "6", + arcExtension2: "0", + retainedThickness2: "2", + knifeRadius2: "3", + grooveAddLength2: "0", + grooveAddWidth2: "0", + grooveAddDepth2: "0", + arcBoardFeedProcess: ArcBoardFeedProcess.Slots, +}; +Object.freeze(DefaultArcBoardGrooveOption); +const DefaultSpaceParseOption = { + autoParseDepth: false, +}; +Object.freeze(DefaultSpaceParseOption); +const DefaultEditViewOption = { + version: 1, + hight: 60, + renderType: false, + renderTypeValue: "概念", + viewDir: false, + viewDirValue: "左视图", + roomName: false, + cabinetName: false, + boardMaterialName: false, + material: false, + color: false, + page: false, + date: false, + designer: false, + sheetName: false, + hideDoor: false, + hideDrawer: false, + hideDim: false, + hideCurve: false, + hideModel: false, + hideLayer: false, + hideLayerValue: "", + showLayer: false, + showLayerValue: "" +}; +Object.freeze(DefaultEditViewOption); +const DefaultFontStyleOption = { + height: 60, + fontType: FontType.YaHei, + widthFactor: 1, +}; +Object.freeze(DefaultFontStyleOption); /** * 使用轮廓和扫描路径构建扫描几何体,实现衣柜中的顶线或者地脚线之类的实体. @@ -14108,6 +15490,7 @@ var SweepSolid_1; let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { constructor(contour, pathCurve) { super(); + this._DisplayAccuracy = 0; this._Contour = contour; this._PathCurve = pathCurve; if (this._Contour && this._Contour.Id) @@ -14134,6 +15517,16 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { } return [this._Contour.Clone().ApplyMatrix(this._Matrix), this._PathCurve.Clone().ApplyMatrix(this._Matrix)]; } + get DisplayAccuracy() { + return this._DisplayAccuracy; + } + set DisplayAccuracy(v) { + if (!equaln$1(v, this._DisplayAccuracy)) { + this.WriteAllObjectRecord(); + this._DisplayAccuracy = v; + this.Update(); + } + } get Contour() { return this._Contour; } @@ -14215,6 +15608,10 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { let box = contour.BoundingBox; contour = new exports.Polyline().RectangleFrom2Pt(box.min, box.max); } + if (this._PathCurve instanceof exports.Arc || this._PathCurve instanceof exports.Circle || this._PathCurve instanceof exports.Polyline) { + this._PathCurve.DisplayAccuracy = this._DisplayAccuracy; + } + this._Contour.DisplayAccuracy = this._DisplayAccuracy; this._MeshGeometry = new SweepGeometry(contour, this._PathCurve); this._EdgeGeometry = this._MeshGeometry.EdgeGeom; this._LineGeom = this._MeshGeometry.LineGeom; @@ -14232,8 +15629,8 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { return this._EdgeGeometry; } InitDrawObject(renderType) { - if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) { - let line = new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)); + if (renderType === RenderType.Wireframe) { + let line = new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex)); // for (let p of this.Paths) // { // p.IsEmbedEntity = true; @@ -14246,7 +15643,14 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { return line; } else if (renderType === RenderType.Conceptual) { - return new three.Object3D().add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); + return new three.Object3D().add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); + } + // 概念透明 + else if (renderType === RenderType.ConceptualTransparent) { + let color = this.DrawColorIndex; + if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) + color = 8; + return new three.Object3D().add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, three.FrontSide)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); } else if (renderType === RenderType.Physical) return new three.Mesh(this.MeshGeometry, this.MeshMaterial); @@ -14284,10 +15688,10 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { } UpdateDrawObject(renderType, obj) { DisposeThreeObj(obj); - if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) { + if (renderType === RenderType.Wireframe) { let l = obj; l.geometry = this.EdgeGeometry; - l.material = ColorMaterial.GetLineMaterial(this.ColorIndex); + l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex); // Object3DRemoveAll(l); // for (let p of this.Paths) // { @@ -14300,7 +15704,15 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { } else if (renderType === RenderType.Conceptual) { Object3DRemoveAll(obj); - return obj.add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); + return obj.add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); + } + // 概念透明 + else if (renderType === RenderType.ConceptualTransparent) { + Object3DRemoveAll(obj); + let color = this.DrawColorIndex; + if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) + color = 8; + return obj.add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, three.FrontSide)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); } else if (renderType === RenderType.Physical) { let mesh = obj; @@ -14326,11 +15738,19 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { UpdateDrawObjectMaterial(type, obj) { if (type === RenderType.Wireframe) { let l = obj; - l.material = ColorMaterial.GetLineMaterial(this.ColorIndex); + l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex); } else if (type === RenderType.Conceptual) { let mesh = obj.children[0]; - mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex); + mesh.material = ColorMaterial.GetConceptualMaterial(this.DrawColorIndex); + } + // 概念透明 + else if (type === RenderType.ConceptualTransparent) { + let mesh = obj.children[0]; + let color = this.DrawColorIndex; + if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) + color = 8; + mesh.material = ColorMaterial.GetConceptualTransparentMaterial(color, three.FrontSide); } else if (type === RenderType.Physical2) { let mesh = obj.children[0]; @@ -14356,7 +15776,7 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { let size = box.getSize(new three.Vector3); return new OBB(MoveMatrix(box.min), size.multiplyScalar(0.5)); } - GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum) { switch (snapMode) { case ObjectSnapMode.End: return this.GetEndPoint(); @@ -14367,27 +15787,41 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { case ObjectSnapMode.Per: case ObjectSnapMode.Tan: { - if (Array.isArray(this._PathCurve)) { - const points = []; - for (let path of this._PathCurve) { - let contour = path.Clone(); - contour.ApplyMatrix(this.OCS); - let pts = contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform); - if (snapMode === ObjectSnapMode.Mid) - points.push(...pts, ...this.GetMidPoints()); - else - points.push(...pts); + let pts = []; + //拷贝来自圆弧板最近点捕捉 + if (snapMode === ObjectSnapMode.Nea) { + //这里实现对线框的快速捕捉 + let edgeGeom = this.EdgeGeometry; + let pos = edgeGeom.getAttribute("position"); + let p1 = new three.Vector3; + let p2 = new three.Vector3; + let line = new exports.Line(p1, p2); + line.ApplyMatrix(this.OCSNoClone); + let sel = frustum["_select_"]; + for (let y = 0; y < pos.count; y += 2) { + p1.fromArray(pos.array, y * 3); + p2.fromArray(pos.array, (y + 1) * 3); + p1.applyMatrix4(this._Matrix); + p2.applyMatrix4(this._Matrix); + sel.WorldToScreenPoint(p1); + sel.WorldToScreenPoint(p2); + if (sel.IntersectLine(p1, p2)) { + p1.fromArray(pos.array, y * 3); + p2.fromArray(pos.array, (y + 1) * 3); + arrayPushArray$1(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)); + } } - return points; - } - else { - let contour = this._PathCurve.Clone(); - contour.ApplyMatrix(this.OCS); - let pts = contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform); - if (snapMode === ObjectSnapMode.Mid) - return [...pts, ...this.GetMidPoints()]; return pts; } + let pathArr = Array.isArray(this._PathCurve) ? this._PathCurve : [this._PathCurve]; + for (let path of pathArr) { + let contour = path.Clone(); + contour.ApplyMatrix(this.OCSNoClone); + arrayPushArray$1(pts, contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)); + if (snapMode === ObjectSnapMode.Mid) + arrayPushArray$1(pts, this.GetMidPoints()); + } + return pts; } } return []; @@ -14478,6 +15912,8 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { let shapePts3d = shapePts2d.map(AsVector3); let isClosePath = equalv3(pathPts[0], pathPts[pathPts.length - 1], 1e-3); let pts = []; //端点 + if (!isClosePath) + pts.push(...ProjectionToPlane(shapePts3d, pathNormals[0], pathPts[0], undefined, pathPts[1])); //遍历所有的路径节点进行顶点投射 for (let i = 1; i < pathPts.length; i++) { if (i === pathPts.length - 1) { @@ -14709,10 +16145,16 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { } } } + if (ver > 2) + this._LockMaterial = file.ReadBool(); + else + this._LockMaterial = false; + if (ver > 3) + this._DisplayAccuracy = file.Read(); } WriteFile(file) { super.WriteFile(file); - file.Write(2); //ver + file.Write(4); //ver file.WriteObject(this._Contour); if (Array.isArray(this._PathCurve)) { file.Write(this._PathCurve.length); @@ -14723,6 +16165,10 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { file.Write(1); file.WriteObject(this._PathCurve); } + // ver3 + file.WriteBool(this._LockMaterial); + // ver4 + file.Write(this._DisplayAccuracy); } }; SweepSolid.UseRectFakerContour = false; @@ -14833,7 +16279,7 @@ let HardwareTopline = class HardwareTopline extends SweepSolid { } _ReadFile(file) { super._ReadFile(file); - file.Read(); //1 + let ver = file.Read(); //1 this._contourRotation = file.Read(); this.HardwareOption.addLen = file.Read(); this.HardwareOption.name = file.Read(); @@ -14854,10 +16300,18 @@ let HardwareTopline = class HardwareTopline extends SweepSolid { d[1] = file.Read(); this.DataList.push(d); } + if (ver > 1) { + this.HardwareOption.goodsId = file.Read(); + this.HardwareOption.goodsSn = file.Read(); + } + if (ver > 2) + this._LockMaterial = file.ReadBool(); + else + this._LockMaterial = false; } WriteFile(file) { super.WriteFile(file); - file.Write(1); //ver + file.Write(3); //ver file.Write(this._contourRotation); file.Write(this.HardwareOption.addLen); file.Write(this.HardwareOption.name); @@ -14875,6 +16329,10 @@ let HardwareTopline = class HardwareTopline extends SweepSolid { file.Write(data[0]); file.Write(data[1]); } + file.Write(this.HardwareOption.goodsId); + file.Write(this.HardwareOption.goodsSn); + // ver3 + file.WriteBool(this._LockMaterial); } }; __decorate([ @@ -14899,6 +16357,10 @@ class LookOverBoardInfosTool { return obj.Name; }); }; + // 显示复合实体特殊备注 + this.GetTranslatedHardwareRemarks = (entity, dataLength) => { + return entity.DataList.map(([key, value], i) => `${lookOverBoardInfosTool.ParseSpec(entity, key, dataLength)}:${lookOverBoardInfosTool.ParseSpec(entity, value, dataLength)}`); + }; } GetCount(brs, options = null, IsBbsCountChaidan) { let drillCount = []; @@ -14911,12 +16373,28 @@ class LookOverBoardInfosTool { if (this.drillTypeMap.size > 0) for (let [k, v] of this.drillTypeMap) { if (v[0] instanceof Hole) - if (k === "木销") - drillCount.push({ name: k, count: v.length }); + if (k === "木销") { + for (let drill of v) { + let goodsSn = drill.GoodsSn; + let drillGroup = drillCount.find(d => d.name === k && d.goodsSn === goodsSn); //区分排钻商品ID + if (drillGroup) + drillGroup.count += 1; + else + drillCount.push({ name: k, count: 1, goodsSn, goodsId: drill.GoodsId }); + } + } else if (k === "层板钉") drillCount.push({ name: k, count: v.length }); - else - drillCount.push({ name: k, count: v.length }); + else { + for (let drill of v) { + let goodsSn = drill.GoodsSn; + let drillGroup = drillCount.find(d => d.name === k && d.goodsSn === goodsSn); //区分排钻商品ID + if (drillGroup) + drillGroup.count += 1; + else + drillCount.push({ name: k, count: 1, goodsSn, goodsId: drill.GoodsId }); + } + } else { this.ParseHardwareCount(k, v, hardwareCount); } @@ -14957,10 +16435,10 @@ class LookOverBoardInfosTool { hardwares.push(e); } for (let h of hardwares) { - let { name, unit, factory, spec, model, brand } = h.HardwareOption; + let { name, unit, factory, spec, model, brand, goodsSn } = h.HardwareOption; let tags = this.ParseProcessingGroupTags(h); - // :230行 代码对关联复合实体又进行一遍分析 需同步修改 - addDrillToMap(`${name},${unit},${factory},${this.ParseSpec(h, spec)},${this.ParseSpec(h, model)},${brand},${tags.join(",")}`, h); + // :254行 代码对关联复合实体又进行一遍分析 需同步修改 + addDrillToMap(`${name},${unit},${this.ParseSpec(h, factory)},${this.ParseSpec(h, spec)},${this.ParseSpec(h, model)},${this.ParseSpec(h, brand)},${tags.join(",")},${goodsSn}`, h); } this.UpdateBoardMap(brsProps); //统计 排钻 封边 关联的五金(排钻?) @@ -15049,10 +16527,10 @@ class LookOverBoardInfosTool { for (const mId of br.RelativeHardware) { let metal = mId?.Object; if (metal && !metal.IsErase && metal.HardwareOption) { - let { name, unit, factory, spec, model, brand } = metal.HardwareOption; + let { name, unit, factory, spec, model, brand, goodsSn } = metal.HardwareOption; let tags = this.ParseProcessingGroupTags(metal); - // :113行 代码对关联复合实体又进行一遍分析 需同步修改 - addDrillToMap(`${name},${unit},${factory},${this.ParseSpec(metal, spec)},${this.ParseSpec(metal, model)},${brand},${tags.join(",")}`, metal); + // :135行 代码对关联复合实体又进行一遍分析 需同步修改 + addDrillToMap(`${name},${unit},${this.ParseSpec(metal, factory)},${this.ParseSpec(metal, spec)},${this.ParseSpec(metal, model)},${this.ParseSpec(metal, brand)},${tags.join(",")},${goodsSn}`, metal); } } //封边 @@ -15066,8 +16544,7 @@ class LookOverBoardInfosTool { }); throw "错误:板扣除封边失败!"; } - let sealData = exports.Production.ParseSealData(sealdData); - let color = br.BoardProcessOption[EBoardKeyList.Color]; + let { seals: sealData, reservedEdges } = exports.Production.ParseSealData(sealdData, br.BoardProcessOption.color); //封边留头量 let sealReserve = HostApplicationServices.sealReserve * 2; let thickness = this.GetBoardThickness(br); @@ -15075,9 +16552,10 @@ class LookOverBoardInfosTool { if (equaln$1(0, data.size)) continue; data.length += sealReserve; + let color = data.sealColor; let k = `${data.size}-${FixedNotZero(thickness, 2)}-${color}`; if (options && options.sealGruopKey) { - options.sealGruopKey(k, br, data.size); + options.sealGruopKey(k, br, thickness, data); } let len = this.sealMap.get(k); if (!len) @@ -15239,50 +16717,1276 @@ function AddEntityDrawObject(obj, embedEntity, renderType = RenderType.Wireframe obj.add(embedObject); } -/** Epsilon used during determination of near zero distances. - * @default - */ -const EPS = 5e-2; +function CSGIntersect(csg1, csg2, csg2tranfrom) { + //因为内部使用geom3进行box cache 所以我们新建了一个geom3 避免被cache导致错误 + let csg1Clone = geom3__default["default"].create(csg1.polygons.concat()); + let csg2Clone = geom3__default["default"].create(csg2.polygons.concat()); + csg2Clone.transforms = csg2tranfrom.elements; + return booleans.intersect(csg1Clone, csg2Clone); +} -// ////////////////////////////// -// tolerance: The maximum difference for each parameter allowed to be considered a match -class FuzzyFactory { - constructor(numdimensions = 3, tolerance = EPS) { - this.lookuptable = {}; - this.multiplier = 1.0 / tolerance; +/** + * 解决 THREEBSP(CSG) 产生的结果没有办法得到分裂的个数. + * 本类分析了THREEBSP的组合情况. + * + * Example: + * + * let topology = new BSPGroupParse(csg); + * topology.parse(); + */ +class BSPGroupParse { + constructor(bsp, fractionDigits = 1) { + this.fractionDigits = fractionDigits; + this.map = new Map(); + this.vecMap = new Map(); + if (bsp) + for (let poly of bsp.polygons) + this.Add(poly); } - // let obj = f.lookupOrCreate([el1, el2, el3], function(elements) {/* create the new object */}); - // Performs a fuzzy lookup of the object with the specified elements. - // If found, returns the existing object - // If not found, calls the supplied callback function which should create a new object with - // the specified properties. This object is inserted in the lookup database. - lookupOrCreate(els, object) { - let hash = ""; - let multiplier = this.multiplier; - for (let el of els) { - let valueQuantized = Math.round(el * multiplier); - hash += valueQuantized + "/"; + Add(poly) { + let strs = poly.vertices.map(p => this.GenerateP(p)); + let str0 = strs[0]; + let s0 = this.Get(str0); + for (let i = 1; i < strs.length; i++) { + let stri = strs[i]; + s0.add(stri); + this.Get(stri).add(str0); } - if (hash in this.lookuptable) - return this.lookuptable[hash]; - else { - let hashparts = els.map(el => { - let q0 = Math.floor(el * multiplier); - let q1 = q0 + 1; - return ["" + q0 + "/", "" + q1 + "/"]; + } + /** + * 返回组合点 + */ + Parse() { + let set = new Set([...this.map.keys()]); + let res = []; + while (set.size > 0) { + let fp = set[Symbol.iterator]().next().value; + set.delete(fp); + let cset = new Set(); + cset.add(fp); + this.GetPts(fp, cset, set); + let pts = [...cset].map(str => { + let v3 = this.vecMap.get(str); + return new three.Vector3().fromArray(v3); }); - let numelements = els.length; - let numhashes = 1 << numelements; - for (let hashmask = 0; hashmask < numhashes; ++hashmask) { - let hashmaskShifted = hashmask; - hash = ""; - hashparts.forEach(hashpart => { - hash += hashpart[hashmaskShifted & 1]; - hashmaskShifted >>= 1; - }); - this.lookuptable[hash] = object; + res.push(pts); + } + return res; + } + Get(vstr) { + if (!this.map.has(vstr)) { + let s = new Set(); + this.map.set(vstr, s); + return s; + } + return this.map.get(vstr); + } + GetPts(p, cset, oset) { + let strs = this.map.get(p); + for (let str of strs) { + if (!cset.has(str)) { + cset.add(str); + oset.delete(str); + this.GetPts(str, cset, oset); } - return object; + } + } + GenerateP(v) { + let str = v.map(n => ToFixed(n, this.fractionDigits)).join(","); + this.vecMap.set(str, v); + return str; + } +} + +function BoardSideModelCSGBuilder(board) { + const sideModeingCsgs = []; + if (!(board.SideModelingMap.size || board.RelevanceSideModelMap.size)) + return sideModeingCsgs; + let con = GetBoardContour(board); + if (!con) + return sideModeingCsgs; + let inverseZ = con.Area2 < 0; + let cus = con.Explode(); + const mirrorMtxZ = MakeMirrorMtx(ZAxis); + for (let [index, soilds] of board.AllSideModelGrooveMap) { + let cu = cus[index]; + if (!cu) + continue; + let mt4 = GetSideCuFaceMtx(cus[index], inverseZ); + for (let soild of soilds) { + let s = soild.Clone(); + let geom3$1 = Geometry2CSG2(s.MeshGeometry); + geom3$1 = geom3.transform(mirrorMtxZ.elements, geom3$1); + geom3$1 = geom3.transform(mt4.clone().multiply(soild.OCS).elements, geom3$1); + sideModeingCsgs.push(geom3$1); + } + } + return sideModeingCsgs; +} +function GetSideCuFaceMtx(cu, inverseZ = false) { + let x = cu.GetFirstDeriv(0).normalize(); + let y = ZAxis; + let z = x.clone().cross(y); + if (inverseZ) + z.negate(); + let basePt = cu.StartPoint; + return new three.Matrix4().makeBasis(x, y, z).setPosition(basePt); +} + +class BoardUVGenerator { + generateTopUV(geometry, vertices, indexA, indexB, indexC) { + const a_x = vertices[indexA * 3]; + const a_y = vertices[indexA * 3 + 1]; + const b_x = vertices[indexB * 3]; + const b_y = vertices[indexB * 3 + 1]; + const c_x = vertices[indexC * 3]; + const c_y = vertices[indexC * 3 + 1]; + return [ + new three.Vector2(a_x, a_y), + new three.Vector2(b_x, b_y), + new three.Vector2(c_x, c_y) + ]; + } + generateSideWallUV(geometry, vertices, indexA, indexB, indexC, indexD) { + const a_x = vertices[indexA * 3]; + const a_y = vertices[indexA * 3 + 1]; + const a_z = vertices[indexA * 3 + 2]; + const b_x = vertices[indexB * 3]; + const b_y = vertices[indexB * 3 + 1]; + const b_z = vertices[indexB * 3 + 2]; + const c_x = vertices[indexC * 3]; + const c_y = vertices[indexC * 3 + 1]; + const c_z = vertices[indexC * 3 + 2]; + const d_x = vertices[indexD * 3]; + const d_y = vertices[indexD * 3 + 1]; + const d_z = vertices[indexD * 3 + 2]; + if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x)) { + return [ + new three.Vector2(a_z - 1, a_x), + new three.Vector2(b_z - 1, b_x), + new three.Vector2(c_z - 1, c_x), + new three.Vector2(d_z - 1, d_x) + ]; + } + else { + return [ + new three.Vector2(a_z - 1, a_y), + new three.Vector2(b_z - 1, b_y), + new three.Vector2(c_z - 1, c_y), + new three.Vector2(d_z - 1, d_y) + ]; + } + } +} +class BoardUVGenerator2 extends BoardUVGenerator { + generateTopUV(geometry, vertices, indexA, indexB, indexC) { + const a_x = vertices[indexA * 3]; + const a_y = vertices[indexA * 3 + 1]; + const b_x = vertices[indexB * 3]; + const b_y = vertices[indexB * 3 + 1]; + const c_x = vertices[indexC * 3]; + const c_y = vertices[indexC * 3 + 1]; + return [ + new three.Vector2(a_y, a_x), + new three.Vector2(b_y, b_x), + new three.Vector2(c_y, c_x) + ]; + } +} +let boardUVGenerator = new BoardUVGenerator(); +let boardUVGenerator2 = new BoardUVGenerator2(); + +function ScaleUV(geo, scale = 1e-3) { + for (let uvsg of geo.faceVertexUvs) { + for (let uvs of uvsg) { + for (let uv of uvs) { + uv.multiplyScalar(scale); + } + } + } +} +function ScaleUV2(geo, ocs, xScale = 1e-3, yScale = 1e-3, isInvert = false) { + for (let uvsg of geo.faceVertexUvs) { + for (let uvs of uvsg) { + for (let uv of uvs) { + let p = new three.Vector3(uv.x, uv.y).applyMatrix4(ocs); + uv.x = p.x; + uv.y = p.y; + if (isInvert) { + uv.x /= yScale; + uv.y /= xScale; + } + else { + uv.x /= xScale; + uv.y /= yScale; + } + } + } + } +} + +class ShapeManager { + constructor(_ShapeList = []) { + this._ShapeList = _ShapeList; + } + get ShapeList() { + return this._ShapeList.slice(); + } + get ShapeCount() { + return this._ShapeList.length; + } + get ShapeArea() { + return this._ShapeList.map(s => s.Area).reduce((a1, a2) => a1 + a2, 0); + } + AppendShapeList(shapes) { + Array.isArray(shapes) ? this._ShapeList.push(...shapes) : this._ShapeList.push(shapes); + return this; + } + Clear() { + this._ShapeList.length = 0; + } + BoolOper(otherMg, booltype) { + switch (booltype) { + case exports.BoolOpeartionType.Intersection: + return this.IntersectionBoolOperation(otherMg); + case exports.BoolOpeartionType.Union: + return this.UnionBoolOperation(otherMg); + case exports.BoolOpeartionType.Subtract: + return this.SubstactBoolOperation(otherMg); + } + } + //交集 如果成功返回一个面域 失败返回0个 + IntersectionBoolOperation(target) { + let shapes = []; + for (let srcShape of this._ShapeList) { + for (let tarShape of target._ShapeList) { + let tmpShapes = srcShape.IntersectionBoolOperation(tarShape); + shapes.push(...tmpShapes); + } + } + this.Clear(); + this._ShapeList = shapes; + return this._ShapeList.length > 0; + } + //并集,如果有一个形状并集成功,就成功 + UnionBoolOperation(targetMg) { + let isSuccess = false; + let srcShapes = this._ShapeList; + let tarShapes = targetMg._ShapeList; + let alones = []; //孤立的形状 + const boxCache = new WeakMap(); + for (let src of srcShapes) { + let notUnions = []; //未被合并的形状列表 来自tarShapes + let srcBox = src.BoundingBox; + for (let tar of tarShapes) { + let tarBox = boxCache.get(tar); + if (!tarBox) { + tarBox = tar.BoundingBox; + boxCache.set(tar, tarBox); + } + if (!IntersectBox2(srcBox, tarBox)) { + notUnions.push(tar); + continue; + } + let unions = src.UnionBoolOperation(tar); + if (unions.length === 1) //并集成功 + { + isSuccess = true; + src = unions[0]; //src设置为 合并完的形状 + } + else //并集失败 + notUnions.push(tar); //设置为未计算 + } + //如果发现src和任意一个形状并集成功,那么 + if (notUnions.length !== tarShapes.length) { + notUnions.push(src); //加入src 进行下一轮 + tarShapes = notUnions; + } + else + alones.push(src); //它是孤独的一个形状 + } + this._ShapeList = alones.concat(tarShapes); + return isSuccess; + } + SubstactBoolOperation(target) { + let newShapes = []; + for (let s of this._ShapeList) { + let ss = s.SubstactBoolOperation(target.ShapeList); + newShapes.push(...ss); + } + this._ShapeList = newShapes; + return true; + } + /** + * 与region.ApplyMatrix不同的是,这个是直接操作内部对象. + * 通常用来计算布尔运算时需要真实的移动这个位置. + * 并且将不会刷新显示 + * + * @param {Matrix4} mat4 + * @memberof ShapeManager + */ + ApplyMatrix(mat4) { + for (let s of this._ShapeList) { + s.Outline.Curve.ApplyMatrix(mat4); + s.Holes.forEach(o => o.Curve.ApplyMatrix(mat4)); + } + } + ReadFile(file) { + file.Read(); //1 + let cout = file.Read(); + for (let i = 0; i < cout; i++) { + let obj = new Shape(); + obj.ReadFile(file); + this._ShapeList.push(obj); + } + } + WriteFile(file) { + file.Write(1); //ver + file.Write(this.ShapeList.length); + for (let s of this.ShapeList) { + s.WriteFile(file); + } + } +} + +var Region_1; +let Region = Region_1 = class Region extends Entity { + static CreateFromCurves(cus) { + let shapes = Contour.GetAllContour(cus).map(out => new Shape(out)); + if (shapes.length > 0) { + let reg = new Region_1(); + //MarkX:曲线同面域一起移动 + reg.ApplyMatrix(shapes[0].Outline.Curve.OCS); + reg.ShapeManager.AppendShapeList(shapes); + return reg; + } + } + constructor(_ShapeManager = new ShapeManager()) { + super(); + this._ShapeManager = _ShapeManager; + } + //如果需要修改获取到的属性,需要Clone后进行操作,否则会对原实体进行破坏 + get ShapeManager() { + return this._ShapeManager; + } + get Area() { + return this.ShapeManager.ShapeArea; + } + get BoundingBox() { + let box = new three.Box3(); + for (let s of this._ShapeManager.ShapeList) + box.union(s.BoundingBox); + return box; + } + Explode() { + let shapeList = this._ShapeManager.ShapeList; + if (shapeList.length <= 1) { + return shapeList[0].Explode(); + } + else { + let regs = []; + shapeList.forEach(s => { + let reg = new Region_1().ApplyMatrix(this.OCS); + reg.ShapeManager.AppendShapeList(s); + regs.push(reg); + }); + return regs; + } + } + /** + * 对于布尔操作,这个将会变换内部轮廓到对方坐标系. + * 并且这个变换不会更新图形绘制. + * @param {Matrix4} m + * @memberof Region + */ + ShapeApplyMatrix(m) { + this.WriteAllObjectRecord(); + this._ShapeManager.ApplyMatrix(m); + } + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + switch (snapMode) { + case ObjectSnapMode.End: + return this.GetGripPoints(); + case ObjectSnapMode.Mid: + case ObjectSnapMode.Cen: + case ObjectSnapMode.Nea: + case ObjectSnapMode.Ext: + case ObjectSnapMode.Per: + case ObjectSnapMode.Tan: + { + let pts = []; + for (let s of this._ShapeManager.ShapeList) { + pts.push(...s.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)); + } + return pts; + } + } + return []; + } + GetGripPoints() { + let pts = []; + for (let s of this._ShapeManager.ShapeList) + pts.push(...s.GetStretchPoints()); + return pts; + } + MoveGripPoints(indexList, moveVec) { + this.WriteAllObjectRecord(); + let moveVLoc = moveVec.clone().applyMatrix4(new three.Matrix4().extractRotation(this.OCSInv)); + this.ApplyMatrix(MoveMatrix(moveVLoc)); + } + ApplyMatrix(m) { + this.WriteAllObjectRecord(); + //面域移动,组成面域的曲线也要移动 MarkX:曲线同面域一起移动 + this._ShapeManager.ShapeList.forEach(s => s.ApplyMatrix(m)); + return super.ApplyMatrix(m); + } + get Position() { + return super.Position; + } + set Position(pt) { + this.WriteAllObjectRecord(); + let moveX = pt.x - this._Matrix.elements[12]; + let moveY = pt.y - this._Matrix.elements[13]; + let moveZ = pt.z - this._Matrix.elements[14]; + this._Matrix.setPosition(pt); + this._SpaceOCS.elements[12] += moveX; + this._SpaceOCS.elements[13] += moveY; + this._SpaceOCS.elements[14] += moveZ; + let m = new three.Matrix4().setPosition(moveX, moveY, moveZ); + for (let s of this.ShapeManager.ShapeList) + s.ApplyMatrix(m); + this.Update(exports.UpdateDraw.Matrix); + } + ApplyScaleMatrix(m) { + this.WriteAllObjectRecord(); + for (let s of this._ShapeManager.ShapeList) + s.ApplyScaleMatrix(m); + this.Update(exports.UpdateDraw.Geometry); + return this; + } + //Z轴归0 + Z0() { + super.Z0(); + for (let s of this._ShapeManager.ShapeList) + s.Z0(); + return this; + } + MatrixPlanarizere() { + super.MatrixPlanarizere(); + for (let s of this._ShapeManager.ShapeList) + s.MatrixPlanarizere(); + return this; + } + ApplyMirrorMatrix(m) { + return this; + } + /** + * 请注意:该计算会操作otherRegion的矩阵 + * @param {Region} otherRegion + * @param {BoolOpeartionType} boolType + */ + BooleanOper(otherRegion, boolType) { + if (this.IsCoplaneTo(otherRegion)) { + this.WriteAllObjectRecord(); + let oldOcs = this.OCS; + //把形状曲线转移到二维屏幕计算后还原回来 + this.ShapeApplyMatrix(this.OCSInv); + otherRegion.ShapeApplyMatrix(this.OCSInv); + let isSuccess = this._ShapeManager.BoolOper(otherRegion._ShapeManager, boolType); + this.ShapeApplyMatrix(oldOcs); + this.Update(); + return isSuccess; + } + return false; + } + get MeshGeometry() { + if (this._MeshGeometry) + return this._MeshGeometry; + this.UpdateGeometry(); + return this._MeshGeometry; + } + get EdgeGeometry() { + if (this._EdgeGeometry) + return this._EdgeGeometry; + this.UpdateGeometry(); + return this._EdgeGeometry; + } + UpdateGeometry() { + let shapeList = this._ShapeManager.ShapeList; + let edgePts = []; + let meshGeoms = []; + const AddEdgePts = (pts, diffMat) => { + for (let i = 0; i < pts.length; i++) { + let p = AsVector3(pts[i]); + p.applyMatrix4(diffMat); + edgePts.push(p); + if (i !== 0 && i !== pts.length - 1) + edgePts.push(p); + } + }; + for (let i = 0; i < shapeList.length; i++) { + let shape = shapeList[i]; + let geometry = new three.ShapeGeometry(shape.Shape, 60); //60 可以优化. + let diffMat = this.OCSInv.clone().multiply(shape.Outline.Curve.OCSNoClone); + geometry.applyMatrix4(diffMat); + ScaleUV(geometry); + meshGeoms.push(new three.BufferGeometry().fromGeometry(geometry)); + let shapeInfo = shape.Shape.extractPoints(60); + let pts = shapeInfo.shape; + AddEdgePts(pts, diffMat); + let holePtss = shapeInfo.holes; + for (let holePts of holePtss) + AddEdgePts(holePts, diffMat); + } + this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(edgePts); + this._MeshGeometry = BufferGeometryUtils.MergeBufferGeometries(meshGeoms); + this._MeshGeometry["IsMesh"] = true; + this._MeshGeometry.computeVertexNormals(); + } + UpdateDrawGeometry() { + if (this._EdgeGeometry) + this._EdgeGeometry.dispose(); + this._EdgeGeometry = undefined; + if (this._MeshGeometry) + this._MeshGeometry.dispose(); + this._MeshGeometry = undefined; + } + ClearDraw() { + this.UpdateDrawGeometry(); + return super.ClearDraw(); + } + InitDrawObject(renderType = RenderType.Wireframe) { + if (renderType === RenderType.Wireframe) { + return new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex)); + } + else if (renderType === RenderType.Conceptual) { + return new three.Object3D().add(new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex)), new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex))); + } + else if (renderType === RenderType.Physical) { + let mesh = new three.Mesh(this.MeshGeometry, this.MeshMaterial); + mesh.castShadow = true; + mesh.receiveShadow = true; + return mesh; + } + else if (renderType === RenderType.Print) { + return new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(0)); + } + else if (renderType === RenderType.Physical2) { + let mesh = new three.Mesh(this.MeshGeometry, this.MeshMaterial); + mesh.castShadow = true; + mesh.receiveShadow = true; + return new three.Object3D().add(new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex)), mesh); + } + } + UpdateDrawObject(renderType, obj) { + DisposeThreeObj(obj); + Object3DRemoveAll(obj); + if (renderType === RenderType.Wireframe) { + let l = obj; + l.geometry = this.EdgeGeometry; + l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex); + } + else if (renderType === RenderType.Conceptual) { + return obj.add(new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex)), new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex))); + } + else if (renderType === RenderType.Physical) { + let mesh = obj; + mesh.geometry = this.MeshGeometry; + mesh.material = this.MeshMaterial; + } + else if (renderType === RenderType.Physical2) { + let mesh = new three.Mesh(this.MeshGeometry, this.MeshMaterial); + mesh.castShadow = true; + mesh.receiveShadow = true; + return obj.add(new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex)), mesh); + } + else if (renderType === RenderType.Print) { + let l = obj; + l.geometry = this.EdgeGeometry; + l.material = ColorMaterial.GetLineMaterial(0); + } + } + /** + * 当实体需要被更新时,更新实体材质 + */ + UpdateDrawObjectMaterial(type, obj, material) { + if (type === RenderType.Wireframe || type === RenderType.Print) { + let line = obj; + line.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex); + } + else if (type === RenderType.Conceptual) { + for (let i = 0; i < obj.children.length; i++) { + if (i % 2 === 0) { + let l = obj.children[i]; + l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex); + } + else { + let mesh = obj.children[i]; + mesh.material = ColorMaterial.GetConceptualMaterial(this.DrawColorIndex); + } + } + } + else if (type === RenderType.Physical) { + let mesh = obj; + mesh.material = this.MeshMaterial; + } + } + _ReadFile(file) { + super._ReadFile(file); + let ver = file.Read(); //1 + this._ShapeManager.Clear(); + this._ShapeManager.ReadFile(file); + if (ver > 1) + this._LockMaterial = file.ReadBool(); + else + this._LockMaterial = false; + } + WriteFile(file) { + super.WriteFile(file); + file.Write(2); //ver + this._ShapeManager.WriteFile(file); + // ver2 + file.WriteBool(this._LockMaterial); + } +}; +Region = Region_1 = __decorate([ + Factory +], Region); + +const CanDrawHoleFuzz = 0.1; + +const FUZZ = 1e-5; +//Segment1d列表中 合并相交的区间 +function Segment1dJoin(segment) { + if (segment.length < 2) + return segment; + segment.sort((a, b) => a[0] - b[0]); + const NewSegment = []; + for (let i = 0; i < segment.length; i++) { + let segment1 = segment[i]; + if (i === segment.length - 1) { + NewSegment.push(segment1); + break; + } + for (let j = i + 1; j < segment.length; j++) { + let segment2 = segment[j]; + if (segment2[0] < segment1[1] + FUZZ) + segment1 = [segment1[0], Math.max(segment1[1], segment2[1])]; + else { + NewSegment.push(segment1); + break; + } + if (j === segment.length - 1) { + NewSegment.push(segment1); + i = segment.length - 1; + } + } + } + return NewSegment; +} +//获取多个区间列表相交的部分 +function IntersectSegment1ds(segment1, segment2) { + const IntersectSegments = []; + for (let s1 of segment1) { + for (let s2 of segment2) { + //[1,10] + [5,15] = [5,10] + if ((s2[0] > s1[0] - FUZZ && s2[0] < s1[1]) || (s1[0] > s2[0] - FUZZ && s1[0] < s2[1])) { + IntersectSegments.push([Math.max(s1[0], s2[0]), Math.min(s1[1], s2[1])]); + } + } + } + return IntersectSegments; +} + +class Face { + constructor(parameters) { + this.isEqualType = false; + this.OCS = new three.Matrix4(); + this.IsRect = true; + this.PolyLineOCS = new three.Matrix4(); + if (parameters) { + this.type = parameters.type; + this._Region = parameters.region; + this.LocalBoard = parameters.localBoard; + this.OCS = parameters.matrix4; + this.Length = parameters.length; + this.Width = parameters.width; + if (parameters.isRect !== undefined) + this.IsRect = parameters.isRect; + if (parameters.drillType) + this.DrillType = parameters.drillType; + else + this.DrillType = this.LocalBoard.BoardProcessOption.drillType; + if (parameters.polyLineOCS) + this.PolyLineOCS = parameters.polyLineOCS; + if (parameters.CurveBoardFaceRegionPolyline) + this.CurveBoardFaceRegionPolyline = parameters.CurveBoardFaceRegionPolyline; + } + } + get Region() { + if (!this._Region) { + let curve = this.CurveBoardFaceRegionPolyline ?? new exports.Polyline().Rectangle(this.Length, this.Width); + this._Region = Region.CreateFromCurves([curve]); + } + return this._Region; + } + get OCSInv() { + return new three.Matrix4().getInverse(this.OCS); + } + get Normal() { + return new three.Vector3().setFromMatrixColumn(this.OCS, 2); + } + Intersect(f) { + //获得侧面和非侧面 + let [sideFace, noSideFace] = this.type === BoardFaceType.Side ? [this, f] : [f, this]; + //同侧面排钻时 厚度小的那块当做第一块 + if (sideFace.type === noSideFace.type) + [sideFace, noSideFace] = this.Width > f.Width ? [f, this] : [this, f]; + //布尔面和被布尔面得差异矩阵 + let diffMtx = sideFace.OCSInv.multiply(noSideFace.OCS); + MatrixPlanarizere(diffMtx); + let isSuccess = false; + let x = new three.Vector3().setFromMatrixColumn(diffMtx, 0); + let ang = x.angleTo(XAxis); + //盒子旋转0,90,180度不会被破坏 + let canUseBoxCalc = equaln$1(ang, 0) || equaln$1(ang, Math.PI / 2) || equaln$1(ang, Math.PI); + let retBoxs = []; + let sizes = []; + //如果不是矩形,用布尔运算,如果 + if (!noSideFace.IsRect || !canUseBoxCalc) { + let sideReg = sideFace.Region?.Clone(); + if (!sideReg || !noSideFace.Region) + return []; + let toReg = noSideFace.Region.Clone().ApplyMatrix(diffMtx); + //注意: 排钻因为布尔运算失败的重灾区 + // TestDraw(sideReg.Clone(), 1); + // TestDraw(toReg.Clone(), 2); + isSuccess = sideReg.BooleanOper(toReg, exports.BoolOpeartionType.Intersection); + //挖穿造型分段排钻 + const throughModelSegmentedDrill = HostApplicationServices.throughModelSegmentedDrill; + if (throughModelSegmentedDrill) { + let boardModeling = noSideFace.LocalBoard.BoardModeling; + if (boardModeling?.length) { + let boardThickness = noSideFace.LocalBoard.Thickness; + for (let modal of boardModeling) { + if (boardThickness - modal.thickness > 1e-5) + continue; + let modalReg = Region.CreateFromCurves([modal.shape.Outline.Curve]).ApplyMatrix(diffMtx); + isSuccess = sideReg.BooleanOper(modalReg, exports.BoolOpeartionType.Subtract); + } + } + } + for (let s of sideReg.ShapeManager.ShapeList) { + if (!throughModelSegmentedDrill) { + let box = s.BoundingBox; + retBoxs.push(box); + sizes.push(box.getSize(new three.Vector3())); + } + else { + //求以X轴和Y=Thickness轴上的点 相互切割形成的矩形面 + const XLists = []; + const TLists = []; + const Thickness = s.BoundingBox.getSize(new three.Vector3).y; + for (let cu of s.Outline.Shape.curves) { + let pt1 = cu.getPoint(0); + let pt2 = cu.getPoint(1); + let x1 = Math.abs(pt1.x); + let x2 = Math.abs(pt2.x); + if (equaln$1(pt1.y, 0) && equaln$1(pt2.y, 0)) + XLists.push([Math.min(x1, x2), Math.max(x1, x2)]); + if (equaln$1(Math.abs(pt1.y), Thickness) && equaln$1(Math.abs(pt2.y), Thickness)) + TLists.push([Math.min(x1, x2), Math.max(x1, x2)]); + } + //合并可以相连的区间 如[0,100] + [100,200] = [0,200] + const XJoinLists = Segment1dJoin(XLists); + const TJoinLists = Segment1dJoin(TLists); + //X轴和厚度轴相交的区间 + const IntersectSegments = IntersectSegment1ds(XJoinLists, TJoinLists); + //造型切割出来会有Position点 其他都是(0,0,0) + let startPt = new three.Vector3(s.Position.x); + for (let segment of IntersectSegments) { + let minV; + let maxV; + //圆弧板面宽度具有方向性 + if (sideFace.Width > 0) { + minV = new three.Vector3(segment[0]); + maxV = new three.Vector3(segment[1], Thickness); + } + else { + minV = new three.Vector3(segment[0], sideFace.Width); + maxV = new three.Vector3(segment[1]); + } + let box = new Box3Ext(minV.add(startPt), maxV.add(startPt)); + retBoxs.push(box); + sizes.push(box.getSize(new three.Vector3)); + } + } + } + if (throughModelSegmentedDrill && !retBoxs.length) + isSuccess = false; + } + else { + let minV; + let maxV; + //圆弧板面宽度具有方向性 + if (sideFace.Width > 0) { + minV = new three.Vector3(); + maxV = new three.Vector3(sideFace.Length, sideFace.Width); + } + else { + minV = new three.Vector3(0, sideFace.Width); + maxV = new three.Vector3(sideFace.Length, 0); + } + let retBox = new Box3Ext(minV, maxV); + let p1 = new three.Vector3().setFromMatrixPosition(diffMtx); + let p2 = new three.Vector3(noSideFace.Length, noSideFace.Width).applyMatrix4(diffMtx); + let box3 = new Box3Ext().setFromPoints([p1, p2]); + if (retBox.intersectsBox(box3)) { + retBox.intersect(box3); + let size = retBox.getSize(new three.Vector3()); + isSuccess = !equaln$1(size.x * size.y, 0); + retBoxs = [retBox]; + sizes = [size]; + } + } + let newFaces = []; + if (isSuccess) { + for (let i = 0; i < sizes.length; i++) { + let newFace = new Face(); + //提供侧面的板件作为相交面 + newFace.LocalBoard = noSideFace.LocalBoard; + newFace.InterBoard = sideFace.LocalBoard; + newFace.Length = sizes[i].x; + newFace.Width = sizes[i].y; + let min = retBoxs[i].min; + min.applyMatrix4(sideFace.OCS); + //构建碰撞面坐标系 + newFace.OCS = sideFace.OCS.clone().setPosition(min); + newFace.DrillType = sideFace.DrillType; + //都是侧面 + if (this.type === f.type) + newFace.isEqualType = true; + newFaces.push(newFace); + } + } + return newFaces; + } + IsIntersect(f, fuzz = 1e-6, currentCoverBoxes = []) { + //获得侧面和非侧面 + let [sideFace, noSideFace] = this.type === BoardFaceType.Side ? [this, f] : [f, this]; + //布尔面和被布尔面得差异矩阵 + let diffMtx = sideFace.OCSInv.multiply(noSideFace.OCS); + MatrixPlanarizere(diffMtx); + let x = new three.Vector3().setFromMatrixColumn(diffMtx, 0); + let ang = x.angleTo(XAxis); + //盒子旋转0,90,180度不会被破坏 + let canUseBoxCalc = equaln$1(ang, 0) || equaln$1(ang, Math.PI / 2) || equaln$1(ang, Math.PI); + //如果不是矩形,用布尔运算,如果 + if (!noSideFace.IsRect || !canUseBoxCalc) { + let c1 = new exports.Polyline().Rectangle(sideFace.Length, sideFace.Width); + let c2 = noSideFace.LocalBoard.ContourCurve.Clone().ApplyMatrix(diffMtx); + let box = c1.BoundingBox.intersect(c2.BoundingBox); + let size = box.getSize(new three.Vector3); + if (equaln$1(size.x * size.y, 0)) + return { isInt: false, coverBoxesList: currentCoverBoxes }; + let con1 = Contour.CreateContour(c1); + let con2 = Contour.CreateContour(c2); + let cs = con1.IntersectionBoolOperation(con2); + let width = 0; + let boxList = []; + //当前碰撞区域如果遮光直接退出 + for (let c of cs) { + let b = c.BoundingBox; + b.getSize(size); + width += size.x; + if (width / sideFace.Length > fuzz) + return { isInt: true }; + boxList.push(b); + } + if (currentCoverBoxes.length === 0) { + return { isInt: false, coverBoxesList: boxList }; + } + //与旧盒子合并后测试是否遮光 + width = 0; + while (currentCoverBoxes.length > 0) { + let b = currentCoverBoxes.pop(); + let isInt = false; + for (let box of boxList) { + if (box.intersectsBox(b)) { + isInt = true; + box.union(b); + break; + } + } + if (!isInt) + boxList.push(b); + } + for (let b of boxList) { + b.getSize(size); + width += size.x; + if (width / sideFace.Length > fuzz) + return { isInt: true }; + } + return { isInt: false, coverBoxesList: boxList }; + } + else { + let minV; + let maxV; + if (sideFace.Width > 0) { + minV = new three.Vector3(); + maxV = new three.Vector3(sideFace.Length, sideFace.Width); + } + else { + minV = new three.Vector3(0, sideFace.Width); + maxV = new three.Vector3(sideFace.Length, 0); + } + let retBox = new Box3Ext(minV, maxV); + let p1 = new three.Vector3().setFromMatrixPosition(diffMtx); + let p2 = new three.Vector3(noSideFace.Length, noSideFace.Width).applyMatrix4(diffMtx); + let box3 = new Box3Ext().setFromPoints([p1, p2]); + if (retBox.intersectsBox(box3)) { + retBox.intersect(box3); + let size = retBox.getSize(new three.Vector3()); + if (equaln$1(size.x * size.y, 0) || Math.abs(size.y / sideFace.Width) <= fuzz) + return { isInt: false, coverBoxesList: currentCoverBoxes }; + if (size.x / sideFace.Length > fuzz) + return { isInt: true }; + if (currentCoverBoxes.length === 0) { + return { isInt: false, coverBoxesList: [retBox] }; + } + for (let b of currentCoverBoxes) { + if (b.intersectsBox(retBox)) { + b.union(retBox); + retBox = null; + break; + } + } + if (retBox) + currentCoverBoxes.push(retBox); + let width = 0; + for (let b of currentCoverBoxes) { + b.getSize(size); + width += size.x; + if (width / sideFace.Length > fuzz) + return { isInt: true }; + } + return { isInt: false, coverBoxesList: currentCoverBoxes }; + } + return { isInt: false, coverBoxesList: currentCoverBoxes }; + } + } +} + +var BoardFaceType; +(function (BoardFaceType) { + BoardFaceType[BoardFaceType["Side"] = 0] = "Side"; + BoardFaceType[BoardFaceType["NoSide"] = 1] = "NoSide"; +})(BoardFaceType || (BoardFaceType = {})); +class BoardGetFace { + constructor(Board) { + this.Board = Board; + this.Faces = []; + this.ParseFaces(); + } + ParseFaces() { + if (this.Board.IsArcBoard) { + this.GetArcBoardFaces(); + return; + } + //正反面 + this.GetTopAndBottomFace(); + //侧面 + this.GetSideFaces(); + } + GetTopAndBottomFace(isEdgeFace = false) { + let curve = this.Board.ContourCurve; + let reg; + if (this.Board.IsSpecialShape) + reg = Region.CreateFromCurves([curve]); + let thickness = this.Board.Thickness; + let ocs = this.Board.OCS; + const opt = this.Board.BoardProcessOption; + //挖穿造型分段排钻 + let throughModelSegmentedDrill = HostApplicationServices.throughModelSegmentedDrill; + let isRect = throughModelSegmentedDrill ? (this.Board.IsRect && !this.Board.BoardModeling.length) : this.Board.IsRect; + //正反面 + if (opt.frontDrill || isEdgeFace) + this.Faces.push(new Face({ + type: BoardFaceType.NoSide, + region: reg, + isRect, + localBoard: this.Board, + matrix4: ocs.clone().multiply(new three.Matrix4().setPosition(new three.Vector3(0, 0, thickness))), + length: this.Board.Width, + width: this.Board.Height + })); + if (opt.backDrill || isEdgeFace) { + let mtx = MakeMirrorMtx(ZAxis); + this.Faces.push(new Face({ + type: BoardFaceType.NoSide, + localBoard: this.Board, + isRect, + region: reg ? reg.Clone() : undefined, + matrix4: new three.Matrix4().multiplyMatrices(ocs, mtx), + length: this.Board.Width, + width: this.Board.Height + })); + } + } + GetSideFaces() { + let con = this.Board.ContourCurve.Clone(); + let inverseZ = con.Area2 < 0; + let cus = con.Explode(); + const highDrill = this.Board.BoardProcessOption.highDrill.slice(); + for (let i = 0; i < cus.length; i++) { + let cu = cus[i]; + let length = cu.Length; + if ((highDrill.length > 0 && highDrill[i] === DrillType.None) + || equaln$1(length, 0) + || cu instanceof exports.Arc) + continue; + let mtx = GetSideFaceMtx(cu, inverseZ); + this.Faces.push(new Face({ + type: BoardFaceType.Side, + localBoard: this.Board, + matrix4: new three.Matrix4().multiplyMatrices(this.Board.OCS.clone(), mtx), + length, + width: this.Board.Thickness, + drillType: highDrill.length > 0 && highDrill[i] + })); + } + } + //获取曲线板的正反 侧面 + GetArcBoardFaces(faceSealingDataMap, highSealingData, sealCu) { + let br = this.Board; + const opt = br.BoardProcessOption; + //排钻反应器 实体渲染赋值可能延迟 手动构造ArcBoardBuild + let sweepArcBoardBuild = new ArcBoardBuild(br); + sweepArcBoardBuild.ParseSweepCurves(); + let conCus = sweepArcBoardBuild.SweepCurves1.map(c => c.Clone()); + //曲线路径相对曲线板 + const RX = new three.Matrix4().makeRotationX(Math.PI / 2); + const PathOCS = new three.Matrix4().multiplyMatrices(br.OCS, RX); + // //弧形板旋转角度 + const AMtx = new three.Matrix4().makeRotationY(br.SweepAngle); + PathOCS.multiply(AMtx); + let basePt = new three.Vector3().applyMatrix4(new three.Matrix4().multiplyMatrices(RX, sweepArcBoardBuild.OCS2RotateMtx)); + PathOCS.multiply(new three.Matrix4().setPosition(basePt)); + const PathOCSInv = new three.Matrix4().getInverse(PathOCS); + for (let cu of conCus) + cu.ApplyMatrix(PathOCS); + const ZNormal = new three.Vector3().setFromMatrixColumn(PathOCS, 2); + let currentLength = 0; + const FaceDir = br.SweepVisibleFace === FaceDirection.Front ? -1 : 1; + const ContourCurve = br.ContourCurve.Clone(); + //弧形板旋转角度 + ContourCurve.ApplyMatrix(sweepArcBoardBuild.OCS2RotateMtx); + if (highSealingData) { + let cus = br.ContourCurve.Clone().Explode(); + highSealingData.push(...structuredClone(GetBoardHighSeal(br, cus))); + sealCu.push(...cus); + } + let contourLength = br.ParseBoardLengthInArcSweep(); + for (let i = 0; i < conCus.length; i++) { + if (currentLength > contourLength) + continue; + //按分段曲线 对板轮廓裁剪 + let conCu = conCus[i]; + let length = currentLength + conCu.Length; + //跳过圆弧 + if (conCu instanceof exports.Arc) { + currentLength = length; + continue; + } + let starKnifePls = new exports.Polyline([{ pt: AsVector2({ x: currentLength, y: -1 }), bul: 0 }, { pt: AsVector2({ x: currentLength, y: 10000 }), bul: 0 }]); + let endKnifePls = new exports.Polyline([{ pt: AsVector2({ x: length, y: -1 }), bul: 0 }, { pt: AsVector2({ x: length, y: 10000 }), bul: 0 }]); + //裁剪结果 + let faceRegions = SplitPolyline(ContourCurve, [starKnifePls, endKnifePls]); + faceRegions = faceRegions.filter((faceRegion) => { + let x = faceRegion.BoundingBox.getCenter(new three.Vector3).x; + return x > currentLength && x < length; + }); + if (faceRegions.length) { + let c = conCu.Clone().ApplyMatrix(PathOCSInv); + let lineToward = c.EndPoint.clone().sub(c.StartPoint); + let ro = angle(lineToward); + let ocs = PathOCS.setPosition(0, 0, 0); + ocs = new three.Matrix4().multiplyMatrices((new three.Matrix4().makeRotationAxis(ZNormal, ro)), ocs).setPosition(conCu.StartPoint); + ocs.multiply(new three.Matrix4().getInverse(RX)); + for (let faceRegion of faceRegions) { + //添加正反面 + for (let data of faceRegion.LineData) + data.pt.add(new three.Vector2(-currentLength)); + let frontMat; + let backMat; + let mtx = MakeMirrorMtx(ZAxis); + const faceRegionBox = faceRegion.BoundingBox; + const faceRegionSize = faceRegionBox.getSize(new three.Vector3); + if (br.SweepVisibleFace === FaceDirection.Front) { + frontMat = new three.Matrix4().multiplyMatrices(ocs, mtx.setPosition(new three.Vector3(0, faceRegionBox.min.y, br.Thickness * FaceDir))); + backMat = new three.Matrix4().multiplyMatrices(ocs, new three.Matrix4().setPosition(new three.Vector3(0, faceRegionBox.min.y))); + } + else { + frontMat = new three.Matrix4().multiplyMatrices(ocs, new three.Matrix4().setPosition(new three.Vector3(0, faceRegionBox.min.y, br.Thickness * FaceDir))); + backMat = new three.Matrix4().multiplyMatrices(ocs, mtx.setPosition(new three.Vector3(0, faceRegionBox.min.y))); + } + if (opt.frontDrill) + this.Faces.push(new Face({ + type: BoardFaceType.NoSide, + localBoard: br, + matrix4: frontMat, + length: conCu.Length, + width: faceRegionSize.y, + CurveBoardFaceRegionPolyline: faceRegion + })); + if (opt.backDrill) { + this.Faces.push(new Face({ + type: BoardFaceType.NoSide, + localBoard: br, + matrix4: backMat, + length: conCu.Length, + width: faceRegionSize.y, + CurveBoardFaceRegionPolyline: faceRegion + })); + } + //侧面 + let cus = faceRegion.Explode(); + //应用新轮廓 计算排钻顺序 + let cloneBr = br.Clone(); + cloneBr.ContourCurve = faceRegion; + const HighDrill = cloneBr.BoardProcessOption.highDrill.slice(); + for (let j = 0; j < cus.length; j++) { + if (HighDrill.length > 0 && HighDrill[j] === DrillType.None) + continue; + let cu = cus[j]; + let mtx = GetSideFaceMtx(cu, faceRegion.IsClockWise); + let ocs = PathOCS.clone().setPosition(0, 0, 0); + ocs = new three.Matrix4().multiplyMatrices((new three.Matrix4().makeRotationAxis(ZNormal, ro)), ocs).setPosition(conCu.StartPoint); + ocs.multiply(new three.Matrix4().getInverse(RX)).multiply(mtx); + let f = new Face({ + type: BoardFaceType.Side, + localBoard: br, + matrix4: ocs, + length: cu.Length, + width: br.Thickness * FaceDir, + drillType: HighDrill.length > 0 && HighDrill[j] + }); + if (faceSealingDataMap) { + let pt = cu.GetPointAtParam(0.5).add(new three.Vector3(currentLength)); + let index = Math.floor(ContourCurve.GetParamAtPoint(pt)); + if (!isNaN(index)) + faceSealingDataMap.set(f, index); + } + this.Faces.push(f); + } + } + } + currentLength = length; + } + // 测试代码 + // for (let f of this.Faces) + // { + // let r = f.Region.Clone().ApplyMatrix(f.OCS); + // TestDraw(r); + // } + } + IntersectFace(br, bInsEqual = false) { + let collisionFaces = []; + for (let f1 of this.Faces) { + for (let f2 of br.Faces) { + //都是正面,或者不允许侧面同侧面并且2板件类型不一样就跳过 + if (f1.type === f2.type + && (f1.type === BoardFaceType.NoSide || !bInsEqual || br.Board.BoardType !== this.Board.BoardType)) + continue; + //不共面 + if (!MatrixIsCoplane2(f1.OCS, f2.OCS, CanDrawHoleFuzz)) + continue; + collisionFaces.push(...f1.Intersect(f2)); + } + } + return collisionFaces; + } + static GetAllSidesFaces(br, isMergeFace = false) { + let faces = []; + let con = br.ContourCurve; + let inverseZ = con.Area2 < 0; + let cus = con.Explode(); + if (isMergeFace) + MergeCurvelist(cus); + for (let i = 0; i < cus.length; i++) { + let cu = cus[i]; + let length = cu.Length; + let mtx = GetSideFaceMtx(cu, inverseZ); + faces.push(new Face({ + type: BoardFaceType.Side, + localBoard: br, + matrix4: new three.Matrix4().multiplyMatrices(br.OCS.clone(), mtx), + length, + width: br.Thickness, + })); + } + return faces; + } +} +//坐标系共面且法线相反 +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-4)) + return false; + //高共面 + let pt = new three.Vector3().setFromMatrixPosition(matrixTo); + //变换到自身对象坐标系. + pt.applyMatrix4(new three.Matrix4().getInverse(matrixFrom)); + return equaln$1(pt.z, 0, zFuzz); +} +function GetSideFaceMtx(cu, inverseZ = false) { + let x = cu.GetFirstDeriv(0).normalize(); + let y = ZAxis; + let z = x.clone().cross(y); + if (inverseZ) + z.negate(); + let basePt; + if ((equaln$1(x.x, 0, 1e-5) && x.y > 0) || x.x < -1e-5) { + x.negate(); + basePt = cu.EndPoint; + } + else + basePt = cu.StartPoint; + //构建面矩阵 + return new three.Matrix4() + .makeBasis(x, y, z) + .setPosition(basePt); +} +class ParseBoardSideFace extends BoardGetFace { + constructor(Board) { + super(Board); + this.Board = Board; + } + ParseFaces() { + this.GetSideFaces(); + } + GetSideFaces() { + let con = GetBoardContour(this.Board); + if (!con) + return; + let inverseZ = con.Area2 < 0; + let cus = con.Explode(); + for (let cu of cus) { + let type = BoardFaceType.Side; + let length = cu.Length; + if (equaln$1(length, 0) || cu instanceof exports.Arc) + type = BoardFaceType.NoSide; + let mtx = GetSideCuFaceMtx(cu, inverseZ); + let face = new Face({ + type, + localBoard: this.Board, + matrix4: new three.Matrix4().multiplyMatrices(this.Board.OCS.clone(), mtx), + length, + width: this.Board.Thickness, + }); + this.Faces.push(face); } } } @@ -15350,8 +18054,8 @@ class Groove { this.lid.SplitTo(groove.lid); } } - Draw(verticesArray, uvArray, edgeBuild, rotateUv) { - this.contourWall.Draw(verticesArray, uvArray, edgeBuild); + Draw(verticesArray, uvArray, edgeBuild, rotateUv, displayAccuracy = 0) { + this.contourWall.Draw(verticesArray, uvArray, edgeBuild, displayAccuracy); for (let wall of this.holeWalls) wall.Draw(verticesArray, uvArray, edgeBuild); if (this.depthType === DepthType.All) @@ -15435,7 +18139,7 @@ class ContourTreeNode { } return; //如果不倒角 就不执行下面的代码 } - static ParseContourTree(contourNodes) { + static ParseContourTree(contourNodes, ignoreInCurve = false, checkIntersect = false) { if (contourNodes.length < 2) return; let fb = new Flatbush__default["default"](contourNodes.length); @@ -15456,7 +18160,10 @@ class ContourTreeNode { let node2 = contourNodes[id]; if (node2.parent === node1 || node2.area < node1.area) continue; //避免自己的儿子成为自己的父亲 - if (node2.contour.Curve.PtInCurve(p)) { + //检查是否有交集 + if (checkIntersect && node1.contour.Curve.IntersectWith(node2.contour.Curve, IntersectOption.ExtendNone)?.length) + continue; + if (node2.contour.Curve.PtInCurve(p) || ignoreInCurve) { node1.SetParent(node2); break; } @@ -15823,7 +18530,8 @@ class ExtudeWall { this.Tape = taps; return this; } - Draw(verticesArray, uvArray, edgeBuild) { + Draw(verticesArray, uvArray, edgeBuild, displayAccuracy = 0) { + this.curve.DisplayAccuracy = displayAccuracy; let xparams = SplitCurveParams(this.curve); let isOuter = this.wallType === DirectionType.Outer; let allDepth = this.allDepth; @@ -16121,7 +18829,7 @@ class ExtrudeGeometryBuilder { let s2 = grooves[j]; s1.ClipTo(s2, true); } - s1.Draw(this.verticesArray, this.uvArray, this.edgeAndLidBuilder, rotateUv); + s1.Draw(this.verticesArray, this.uvArray, this.edgeAndLidBuilder, rotateUv, br.DisplayAccuracy); } outerWall.Draw(this.verticesArray, this.uvArray, this.edgeAndLidBuilder); //这里构建盖子 @@ -16260,116 +18968,12 @@ function GetIntersection(cu1, cu2) { return r; } -const DIRS = [XAxis, YAxis, ZAxis, XAxisN, YAxisN, ZAxisN]; -function GetFaceDir(direction) { - let absx = Math.abs(direction.x); - let absy = Math.abs(direction.y); - let absz = Math.abs(direction.z); - let face = -1.0; - if (absx > absz) { - if (absx > absy) - face = direction.x > 0 ? 0 : 3; - else - face = direction.y > 0 ? 1 : 4; - } - else { - if (absz > absy) - face = direction.z > 0 ? 2 : 5; - else - face = direction.y > 0 ? 1 : 4; - } - return DIRS[face]; -} -class GenUVForWorld { - constructor() { - this.InvMtxMap = new Map(); - this._Z = new three.Vector3; - this._X = new three.Vector3; - this._Y = new three.Vector3; - this._Box = new three.Box3; - this._Box2 = new three.Box3; - } - GetMtxInv(normalX, normalY, normalZ) { - this._Z.set(normalX, normalY, normalZ); - let n = GetFaceDir(this._Z); - let mtx = this.InvMtxMap.get(n); - if (mtx) - return mtx; - this._Z.copy(n); - Orbit.ComputUpDirection(this._Z, this._Y, this._X); - mtx = new three.Matrix4().makeBasis(this._X, this._Y, this._Z); - mtx.getInverse(mtx); - this.InvMtxMap.set(n, mtx); - return mtx; - } - GenUV(mesh) { - if (Array.isArray(mesh.material)) { - let geo = mesh.geometry; - if (!geo.boundingBox) - geo.computeBoundingBox(); - let normals = geo.getAttribute("normal"); - let pos = geo.getAttribute("position"); - let uvs = geo.getAttribute("uv"); - for (let i = 0; i < mesh.material.length; i++) { - let mtl = mesh.material[i]; - if (mtl[USE_WORLD_UV]) { - this._Box.makeEmpty(); - let g = mesh.geometry.groups[i]; - for (let y = 0; y < g.count; y++) { - let index = (y + g.start) * 3; - this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]); - this._Box.expandByPoint(this._X); - } - for (let y = 0; y < g.count; y++) { - let index = (y + g.start) * 3; - let mtx = this.GetMtxInv(normals.array[index], normals.array[index + 1], normals.array[index + 2]); - this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]); - this._X.applyMatrix4(mtx); - this._Box2.copy(this._Box).applyMatrix4(mtx); - //@ts-ignore - 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; - //@ts-ignore - 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; - } - uvs.needsUpdate = true; - } - } - } - else { - let mtl = mesh.material; - if (mtl[USE_WORLD_UV]) - this.GenGeoUV(mesh.geometry, mtl, 1e-2); - } - } - GenGeoUV(geo, mtl, scale = 1e-3) { - if (!geo.boundingBox) - geo.computeBoundingBox(); - let normals = geo.getAttribute("normal"); - let pos = geo.getAttribute("position"); - let uvs = geo.getAttribute("uv"); - if (!pos || !uvs || pos.count === 0) - return; - for (let y = 0; y < pos.count; y++) { - let index = y * 3; - let mtx = this.GetMtxInv(normals.array[index], normals.array[index + 1], normals.array[index + 2]); - this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]); - this._X.applyMatrix4(mtx); - this._Box.copy(geo.boundingBox); - this._Box.applyMatrix4(mtx); - //@ts-ignore - 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; - //@ts-ignore - 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; - } - uvs.needsUpdate = true; - } -} - var ExtrudeSolid_1; const MaxDrawGrooveCount = 1000; //最大的绘制槽个数(但是还是会绘制线) let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { constructor() { super(); + this._DisplayAccuracy = 0; /* y----------- ^ | @@ -16406,7 +19010,7 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { }); } set Material(materialId) { - let oldMaterial = this.Material ?? this._db?.DefaultMaterial.objectId; + let oldMaterial = this.Material ?? this._db?.DefaultMaterial?.objectId; super.Material = materialId; let isf_old = Boolean(oldMaterial?.Object?.IsFull); let isf_new = Boolean(materialId?.Object?.IsFull); @@ -16418,6 +19022,16 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { } } get Material() { return super.Material; } + get DisplayAccuracy() { + return this._DisplayAccuracy; + } + set DisplayAccuracy(v) { + if (!equaln$1(v, this._DisplayAccuracy)) { + this.WriteAllObjectRecord(); + this._DisplayAccuracy = v; + this.Update(); + } + } get KnifeRadius() { return this.knifeRadius; } @@ -16430,7 +19044,7 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { } } get BoundingBox() { - return this.BoundingBoxInOCS.applyMatrix4(this.OCS); + return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone); } get BoundingBoxInOCS() { if (this.width > 0 && this.height > 0 && this.thickness > 0) @@ -16474,10 +19088,11 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { this.__UpdateVersion__++; } } - Clone() { - let en = super.Clone(); - return en; - } + // Clone() + // { + // let en = super.Clone(); + // return en; + // } ApplyMatrix(m) { //暂时关闭更新,避免内部实体还没有更新位置时,先更新了实体的Geometry,导致后续没有进行更新 let updateBak = this.AutoUpdate; @@ -16591,12 +19206,18 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { get Grooves() { return this.grooves; } + //侧面造型 + get SideModelingMap() { + return undefined; + } /** * 返回未拷贝的轮廓曲线 */ get ContourCurve() { if (!this.contourCurve) this.GeneralRectContour(); + // 默认轮廓都是白的 + this.contourCurve.ColorIndex = 7; return this.contourCurve; } set ContourCurve(cu) { @@ -16715,8 +19336,8 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { //修正轮廓基点 if (!equalv3(box.min, ZeroVec)) { this.contourCurve.Position = this.contourCurve.Position.sub(box.min); - let v = box.min.applyMatrix4(this.OCS.setPosition(ZeroVec)); - this._Matrix.setPosition(this.Position.add(v)); + TransformVector(box.min, this.OCSNoClone); + this._Matrix.setPosition(this.Position.add(box.min)); } } get IsRect() { @@ -16730,7 +19351,7 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { let contour = Contour.CreateContour(this.ContourCurve.Clone(), false); let holes = []; for (let g of this.grooves) { - if (equaln$1(g.thickness, this.thickness, 1e-3) && (!filterSmallGroove || g.ContourCurve.Area > 900)) + if (equaln$1(g.thickness, this.thickness, 1e-3) && (!filterSmallGroove || g.ContourCurve.Area > HostApplicationServices.smallGrooveThreshold)) holes.push(Contour.CreateContour(g.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(g.OCSNoClone)), false)); } return new Shape(contour, holes); @@ -16768,14 +19389,16 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { this.RelevanceMeats.push(meat); } }; - if (equaln$1(this.thickness, target.thickness) - && equaln$1(0, targetZMin)) { + if (equaln$1(this.thickness, target.thickness, 1e-3) + && equaln$1(0, targetZMin, 2e-3)) { let matrixToLocal = this.OCSInv.multiply(target.OCS); let thisShape = this.Shape; let targetShape = target.Shape.ApplyMatrix(matrixToLocal).Z0(); let unionShapes = thisShape.UnionBoolOperation(targetShape, true); if (unionShapes.length === 1) { this.WriteAllObjectRecord(); + //防止重复添加 + this.grooves = this.grooves.filter((g) => !equaln$1(g.thickness, target.thickness, 1e-3)); //过滤掉一样的 因为已经在shape里 // [ + ] 产生网洞. for (let hole of unionShapes[0].Holes) { let g = new ExtrudeSolid_1(); @@ -16785,7 +19408,9 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { this.AppendGroove(g); } this.ContourCurve = unionShapes[0].Outline.Curve; - this.grooves.push(...target.grooves.map(g => g.Clone())); + for (let tg of target.grooves) + if (!equaln$1(tg.thickness, target.thickness, 1e-3)) //过滤掉一样的 因为已经在shape里 + this.grooves.push(tg.Clone()); MergeRelevance(); this.GrooveCheckMerge(); this.Update(); @@ -16829,6 +19454,176 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { Subtract(extrudes, output = undefined, checkIntersect = true) { return false; } + //将相交部分转换为正反面槽或侧槽 + ParseGrooves(knifeExtrudes) { + let faces; + let con; + let inverseZ; + let cus; + let mirrorMtxZ; + let grooves = []; + let relevanceSideModelMap = new Map(); + //切割的侧槽 + const GetSideModelList = (extrude) => { + let knifeCon = extrude.ContourCurve.Clone(); + let knifeConIsCircle = knifeCon instanceof exports.Circle; + if (this instanceof Board) { + let intersectFaceIndex = 0; + let intersectFaceIndexs = []; + if (!faces) { + faces = new ParseBoardSideFace(this); + con = GetBoardContour(this); + if (!con) + return; + inverseZ = con.Area2 < 0; + cus = con.Explode(); + mirrorMtxZ = MakeMirrorMtx(ZAxis); + } + //相交SCG + //使用克隆 防止正反面槽mesh丢失 + let cloneEnt = this.Clone(); + let interCSG = CSGIntersect(cloneEnt.CSG, extrude.CSG, this.OCSInv.multiply(extrude.OCS)); + //转换至相交面的尺寸 + let topology = new BSPGroupParse(interCSG); + let ptsList = topology.Parse(); + for (let pts of ptsList) { + // ------- 求相交面索引 begin ---------- + intersectFaceIndexs = []; + let checkBox = new Box3Ext().setFromPoints(pts); + for (let i = 0; i < faces.Faces.length; i++) { + let face = faces.Faces[i]; + let region = face.Region.Clone(); + region.ApplyMatrix(this.OCSInv.multiply(face.OCS)); + if (checkBox.intersectsBox(region.BoundingBox, 1e-3)) + intersectFaceIndexs.push(i); + } + if (!intersectFaceIndexs.length) { + InteractionLog([{ msg: `${this.Name}`, entity: [this] }, { msg: "侧面造型切割面解析失败, 无法生成侧面造型!" }], LogType.Error); + continue; + } + else if (intersectFaceIndexs.length === 1) + intersectFaceIndex = intersectFaceIndexs[0]; + else { + //截面小的为正面 + intersectFaceIndexs.sort((i, j) => { + let faceOCSInv1 = faces.Faces[i].OCSInv; + let faceOCSInv2 = faces.Faces[j].OCSInv; + let box1 = checkBox.clone().applyMatrix4(this.OCS).applyMatrix4(faceOCSInv1).getSize(new three.Vector3); + let box2 = checkBox.clone().applyMatrix4(this.OCS).applyMatrix4(faceOCSInv2).getSize(new three.Vector3); + return knifeConIsCircle ? box1.x - box2.x : box2.x - box1.x; + }); + intersectFaceIndex = intersectFaceIndexs[0]; + } + intersectFaceIndexs = []; + // ------- 求相交面索引 end ---------- + const faceMtx = GetSideCuFaceMtx(cus[intersectFaceIndex], inverseZ); + const faceMtxInv = new three.Matrix4().getInverse(faceMtx); + const faceMtxOnBoard = this.OCS.multiply(faceMtx).multiply(mirrorMtxZ); + const mtx = new three.Matrix4().getInverse(faceMtx.clone().multiply(mirrorMtxZ)); + //测试绘制 + // TestDrawGeom3s([interCSG], 1); + let sideModelCon; + let yv = extrude.Normal; + let zv = new three.Vector3().setFromMatrixColumn(faceMtxOnBoard, 2); + if (isParallelTo(yv, zv)) { + sideModelCon = knifeCon.Clone(); + yv = new three.Vector3().setFromMatrixColumn(extrude.OCS, 0); + } + let xv = yv.clone().cross(zv); + yv.copy(zv).cross(xv); + xv.normalize(); + yv.normalize(); + zv.normalize(); + const grooveMtx = new three.Matrix4().makeBasis(xv, yv, zv).copyPosition(faceMtxOnBoard); + const grooveMtxInv = new three.Matrix4().getInverse(grooveMtx).multiply(faceMtxOnBoard).multiply(mtx); + for (let p of pts) + p.applyMatrix4(grooveMtxInv); + let box = new Box3Ext().setFromPoints(pts); + if (!box.isSolid(0.1)) + continue; + let size = box.getSize(new three.Vector3()); + let solid = new ExtrudeSolid_1(); + solid.groovesAddDepth = extrude.groovesAddDepth; + solid.groovesAddLength = extrude.groovesAddLength; + solid.groovesAddWidth = extrude.groovesAddWidth; + solid.knifeRadius = extrude.knifeRadius; + solid.ConverToRectSolid(size.x, size.y, size.z); + if (sideModelCon) { + if (sideModelCon instanceof exports.Circle) { + if (equaln$1(size.x, size.y)) + solid.ContourCurve = sideModelCon; + else { + //保留圆形切割 + const r = sideModelCon.Radius * 2; + const cuLength = cus[intersectFaceIndex].Length; + let splitLeft = false; + let intersectX = 0; + if (equaln$1(box.min.x, 0)) + intersectX = r - box.max.x + sideModelCon.BoundingBox.min.x; + else { + splitLeft = true; + intersectX = cuLength - box.min.x + sideModelCon.BoundingBox.min.x; + } + let starKnifePls = new exports.Polyline([{ pt: AsVector2({ x: intersectX, y: 1 }), bul: 0 }, { pt: AsVector2({ x: intersectX, y: 0 }), bul: 0 }]); + let faceRegions = SplitPolyline(sideModelCon, [starKnifePls]); + faceRegions = faceRegions.filter((faceRegion) => { + let x = faceRegion.BoundingBox.getCenter(new three.Vector3).x; + return splitLeft ? x < intersectX : x > intersectX; + }); + if (faceRegions.length) + solid.ContourCurve = faceRegions[0]; + } + solid.ApplyMatrix(grooveMtx.clone().setPosition(box.min.applyMatrix4(grooveMtx)).multiply(mirrorMtxZ)); + solid.ApplyMatrix(this.OCSInv); + solid.ApplyMatrix(faceMtxInv); + } + else { + sideModelCon.ApplyMatrix(new three.Matrix4().setPosition(sideModelCon.BoundingBox.min.negate())); + sideModelCon.ApplyMatrix(extrude.OCS); + sideModelCon.ApplyMatrix(this.OCSInv); + sideModelCon.ApplyMatrix(new three.Matrix4().getInverse(faceMtx)); + solid.ContourCurve = sideModelCon; + //确保侧面造型槽solid在XY平面上 + solid.Z0(); + } + } + else { + solid.ApplyMatrix(grooveMtx.clone().setPosition(box.min.applyMatrix4(grooveMtx)).multiply(mirrorMtxZ)); + solid.ApplyMatrix(this.OCSInv); + solid.ApplyMatrix(faceMtxInv); + } + let sideModelList = relevanceSideModelMap.get(intersectFaceIndex); + if (sideModelList) + sideModelList.push(solid); + else + sideModelList = [solid]; + relevanceSideModelMap.set(intersectFaceIndex, sideModelList); + } + } + }; + for (let extrude of knifeExtrudes) { + let gs = this.ConverToLocalGroove(extrude); + if (gs.length) { + let sideGrooves = []; + for (let g of gs) { + //侧槽 + if (this.GrooveCheckPosition(g) === exports.Status.Side) + sideGrooves.push(g); + else + grooves.push(g); + } + if (sideGrooves.length) { + if (sideGrooves.length === gs.length) + GetSideModelList(extrude); + else { + for (let g of sideGrooves) + GetSideModelList(g); + } + } + } + } + return { grooves, relevanceSideModelMap }; + } RelevanceSubtract(knif, check = false) { if (!this.Id || !knif.Id) return; @@ -16876,10 +19671,33 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { this.grooves.push(...grooves); this.GrooveCheckAllAutoSplit(output); } + /** + * 添加侧面槽 + * 通常槽已经校验过准确性,所以不在校验 + */ + AppendRelevanceSideModel(relevanceSideModelMap) { + if (this instanceof Board) { + this.ClearSideModelingCache(); + this.RelevanceSideModelMap = relevanceSideModelMap; + } + } + AppendSideModel(relevanceSideModelMap) { + if (relevanceSideModelMap.size && this instanceof Board) { + this.WriteAllObjectRecord(); + const sideModelMap = this.SideModelingMap; + for (let [num, soilds] of relevanceSideModelMap) { + let ss = this.SideModelingMap.get(num) ?? []; + for (let soild of soilds) + ss.push(soild); + sideModelMap.set(num, ss); + } + this.SideModelingMap = sideModelMap; + } + } GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum) { switch (snapMode) { case ObjectSnapMode.End: - return this.GetStretchPoints(); + return this.GetGripOrStretchPoints(DragPointType.End); case ObjectSnapMode.Mid: case ObjectSnapMode.Cen: case ObjectSnapMode.Nea: @@ -16920,8 +19738,19 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { return counts; } GetGripOrStretchPoints(dragType) { - let isGrip = dragType === DragPointType.Grip; - let pts = isGrip ? this.ContourCurve.GetGripPoints() : this.ContourCurve.GetStretchPoints(); + let pts; + if (dragType === DragPointType.Grip) + pts = this.ContourCurve.GetGripPoints(); + else if (dragType === DragPointType.Stretch) + pts = this.ContourCurve.GetStretchPoints(); + else if (dragType === DragPointType.End) { + if (this.contourCurve instanceof exports.Circle) + pts = this.ContourCurve.GetGripPoints(); + else + pts = this.ContourCurve.GetStretchPoints(); + } + else + pts = []; let v = new three.Vector3(0, 0, this.thickness); pts.push(...pts.map(p => p.clone().add(v))); pts.forEach(p => { p.applyMatrix4(this.OCSNoClone); }); @@ -16934,14 +19763,15 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { MoveGripOrStretchPoints(indexList, vec, dragType) { this.WriteAllObjectRecord(); let counts = this.GetStrectchPointCountList(dragType); - if (dragType === DragPointType.Stretch && indexList.length === arraySum(counts)) { + const isGrip = dragType === DragPointType.Grip; + if (!isGrip && indexList.length === arraySum(counts)) { this.Position = this.Position.add(vec); return; } arraySortByNumber$1(indexList); let updateBak = this.AutoUpdate; this.AutoUpdate = false; - if (this.grooves.length === 0) { + if (!this.grooves.length && !this.HasSideModel) { this.MoveGripOrStretchPointsOnly(indexList, vec, dragType); } else { @@ -16949,6 +19779,27 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { let icount = indexList.length; let offset = 0; let grooveIndex = -1; + let sideModelIndex = -1; + let cus; + let baseIndexList = new Set(); + let sideModelSealCurveMtxCache = new Map(); + //获取侧面的OCS + const GetSideModelSealCurveMtx = (num) => { + if (!cus) + cus = GetBoardContour(this)?.Explode(); + let mtx = sideModelSealCurveMtxCache.get(num); + if (!mtx && cus?.length) { + let cu = cus[num]; + if (!cu) + return new three.Matrix4; + let x = cu.GetFirstDeriv(0).normalize().applyMatrix4(this.OCS.setPosition(0, 0, 0)); + let y = this.Normal; + let z = x.clone().cross(y); + mtx = new three.Matrix4().getInverse(new three.Matrix4().makeBasis(x, y, z)); + sideModelSealCurveMtxCache.set(num, mtx); + } + return mtx ?? new three.Matrix4; + }; for (let count of counts) { offset += count; let ilist = []; @@ -16959,18 +19810,125 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { break; } if (ilist.length > 0) { - if (grooveIndex === -1) + if (grooveIndex === -1) { + let orgCus; + if (this.HasSideModel) + orgCus = GetBoardContour(this)?.Explode(); this.MoveGripOrStretchPointsOnly(ilist, vec, dragType); - else + if (this.HasSideModel) { + //修正点的索引 判断侧面造型的起点是否被移动 + let stretchCount = this.ContourCurve.GetDragPointCount(dragType); + for (let num of ilist) { + if (num < stretchCount) + baseIndexList.add(num); + else + baseIndexList.add(num - stretchCount); + } + let isChangeThiness = this.IsStretchThickness(Array.from(baseIndexList)); + //起点被拉伸时反向移动 达到相对静止状态 + const sideModelingMap = this.SideModelingMap; + for (let [num, soilds] of sideModelingMap) { + let firstIndex = num; + let secondIndex = (num + 1) === stretchCount ? 0 : num + 1; + if (isGrip) { + firstIndex = num * 2; + //拉取中点时 + secondIndex = (firstIndex - 1) < 0 ? (stretchCount - 1) : (firstIndex - 1); + } + //Grip的时候点选中点时两边相连的 也反向移动 firstIndex - 1 + if (!isGrip && (baseIndexList.has(firstIndex) && !baseIndexList.has(secondIndex)) || + isGrip && (baseIndexList.has(firstIndex) || baseIndexList.has(secondIndex)) || + isChangeThiness && ilist[0] < stretchCount) { + for (let s of soilds) { + let mtx = GetSideModelSealCurveMtx(num); + let v = vec.clone().applyMatrix4(mtx).setZ(0); + if (isChangeThiness) { + v.setX(0); + } + else { + if (cus?.length && cus[num] && orgCus) + v = new three.Vector3(orgCus[num].Length - cus[num].Length); + else + v.setY(0); + } + s.ApplyMatrix(new three.Matrix4().setPosition(v.clone().multiplyScalar(-1))); + } + } + } + } + } + else if (grooveIndex < this.grooves.length) this.grooves[grooveIndex].MoveGripOrStretchPoints(ilist, vec, dragType); + else { + //侧面造型拉伸 + const sideModelingMap = this.SideModelingMap; + let soildCount = 0; + const isMainChangeThiness = this.IsStretchThickness(Array.from(baseIndexList)); + for (let [num, soilds] of sideModelingMap) { + soildCount += soilds.length; + if (sideModelIndex < soildCount) { + let mtx = GetSideModelSealCurveMtx(num); + let v = vec.clone().applyMatrix4(mtx); + if (isMainChangeThiness) + v.setX(0); + let soild = soilds[soilds.length - (soildCount - sideModelIndex)]; + const stretchPtLength = soild.ContourCurve.GetStretchPoints().length; + const firstIndex = num; + const secondIndex = (num + 1) === stretchPtLength ? 0 : num + 1; + const mainSoildIList = []; + const grooveSoildIList = []; + for (let k of ilist) { + if (k < stretchPtLength * 2) + mainSoildIList.push(k); + else + grooveSoildIList.push(k); + } + //改变侧面造型厚度 + if (soild.IsStretchThickness(mainSoildIList)) { + if (mainSoildIList.every(i => i >= stretchPtLength)) { + //造型 底边 + v.setZ(-v.z); + } + else if ((baseIndexList.has(firstIndex) && baseIndexList.has(secondIndex))) { + //造型见光面 和侧面一起移动 + ilist = []; + for (let k = 0; k < stretchPtLength; k++) + ilist.push(k + stretchPtLength); + //有选中子槽端点 默认一起改变 + if (grooveSoildIList.length) { + const grooveStretchPtLength = soild.grooves[0].ContourCurve.GetStretchPoints().length; + for (let k = 0; k < grooveStretchPtLength; k++) + ilist.push(k + grooveStretchPtLength + stretchPtLength * 2); + } + } + else + break; + } + else if (!isMainChangeThiness && baseIndexList.has(firstIndex) && baseIndexList.has(secondIndex)) + break; + else + v.setZ(0); + soild.MoveGripOrStretchPoints(ilist, v, dragType); + break; + } + } + } } grooveIndex++; + if (grooveIndex >= this.grooves.length) + sideModelIndex++; } } - if (this.objectId) { + if (this.objectId || this.IsEmbedEntity) { this.CheckContourCurve(); let splitEntitys = []; this.GrooveCheckAll(splitEntitys); + if (this.HasSideModel) { + let board = this; + board.SplitBoardSideModelUtil.Init(board); + board.SplitBoardSideModelUtil.SpiltSideModelOfBrContour(board); + board.SplitBoardSideModelUtil.SpiltSideModelOfBrThickness(board, board.Thickness); + } if (splitEntitys.length > 0 && this.Owner) { let ms = this.Owner.Object; for (let e of splitEntitys) @@ -17102,8 +20060,10 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { if (!(equaln$1(minZ, 0))) target.ApplyMatrix(MoveMatrix(this.Normal.multiplyScalar(-minZ))); } - else if (maxZ >= (this.thickness - 1e-2) && minZ > 0) //正面 + else if (maxZ >= (this.thickness - 1e-2) && minZ > 0 && (this.thickness - minZ) > 0.01) //正面 target.Thickness = this.thickness - minZ; + else if (minZ > 1e-2 && maxZ < (this.thickness - 1e-2)) + return exports.Status.Side; else return exports.Status.False; if (equaln$1(target.thickness, this.thickness, 1e-2)) @@ -17192,6 +20152,10 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { return grooves; } } + /** (步骤4.2.1) 针对圆弧板-修正路径 */ + AdjustPath(ext, outline) { } + /** (步骤4.2.2) 针对圆弧板-修正位置 */ + AdjustPosition(ext, basePoint) { } /** * (步骤4.2) * 计算本实体被全身的凹槽差集后正确的实体轮廓,和有可能的分裂实体 @@ -17208,12 +20172,20 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { let grooveCurve = groove.ContourCurve.Clone(); let matrixToLocal = this.OCSInv.multiply(groove.OCS); grooveCurve.ApplyMatrix(matrixToLocal); - subtractShape.AppendShapeList(new Shape(Contour.CreateContour([grooveCurve], false))); + subtractShape.AppendShapeList(new Shape(Contour.CreateContour([grooveCurve], false), groove.grooves.filter(g => equaln$1(g.thickness, groove.thickness)).map(g => { + let gc = g.ContourCurve.Clone(); + let mtx = g.OCS.premultiply(groove.OCSInv).premultiply(matrixToLocal); + gc.ApplyMatrix(mtx); + return Contour.CreateContour([gc], false); + }))); allDepthGrooves.push(groove); return true; } return false; }); + // 测试绘制黄色为原始轮廓 红色为切割轮廓 + // TestDraw(new Region(shapeManager).Clone(), 2); + // TestDraw(new Region(subtractShape).Clone(), 1); shapeManager.SubstactBoolOperation(subtractShape); let shapes = shapeManager.ShapeList; //不做任何改变 @@ -17244,8 +20216,14 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { groove.thickness = this.thickness; ext.grooves.push(groove); } + const shapeOutline = shape.Outline.Curve.Clone(); + // 针对圆弧板-修正路径 + this.AdjustPath(ext, shapeOutline); + const shapeBasePoint = shape.Outline.Curve.StartPoint; ext.ContourCurve = shape.Outline.Curve; ext.GrooveCheckAll(splitEntitys); + // 针对圆弧板-修正位置 + this.AdjustPosition(ext, shapeBasePoint); ext.Update(); splitEntitys.push(ext); } @@ -17292,13 +20270,7 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { }); //清除全深洞的子槽 for (let g of this.grooves) { - if (equaln$1(g.thickness, this.thickness, 1e-3)) { - /* - 此刻我们直接将它的子槽清空,虽然子槽可能将这个槽分裂成2个, - 但是这样的情况只能在造型应用中才会产生 - */ - g.grooves.length = 0; - } + if (equaln$1(g.thickness, this.thickness, 1e-3)) ; else arrayRemoveIf(g.grooves, subg => !equaln$1(g.thickness, subg.thickness, 1e-3)); } @@ -17383,10 +20355,10 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { } InitDrawObject(renderType = RenderType.Wireframe) { if (renderType === RenderType.Wireframe) { - return new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex, this.Freeze)); + return new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex, this.Freeze)); } else if (renderType === RenderType.Conceptual) { - return new three.Object3D().add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex, three.FrontSide, true, this.Freeze)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); + return new three.Object3D().add(new three.Mesh(this.MeshGeometry, this.GetConceptualMaterial()), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); } else if (renderType === RenderType.Physical) { let mesh = new three.Mesh(this.MeshGeometry, this.MeshMaterial); @@ -17442,16 +20414,23 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { this.__CacheKnifVersion__ = {}; let knifs = []; this.GetRelevanceKnifes(knifs); + //如果是切割圆弧板或刀是圆弧板,先不切割 + // if (this instanceof Board && this.IsArcBoard) knifs = []; + // knifs = knifs.filter(e => !(e instanceof Board && e.IsArcBoard)); if (knifs.length > 0) { for (let k of knifs) //复合实体(五金)的子实体没有id this.__CacheKnifVersion__[k.Id?.Index ?? k.__TempIndexVersion__?.Index] = k.__TempIndexVersion__?.Version ?? k.__UpdateVersion__; - let tempExtrude = this.Clone(); + let tempExtrude = this.Clone(true); tempExtrude.RelevanceKnifs.length = 0; //避免递归 + if (tempExtrude instanceof Board) + tempExtrude.SideModelingMap.clear(); if (!this.ReadFileIng) tempExtrude.__OriginalId__ = this.Id; //在读取文件时不打印日志 let output = [tempExtrude]; let ok = tempExtrude.Subtract(knifs, output); this.__CacheSplitExtrudes = output; + if (tempExtrude instanceof Board) + this.AppendRelevanceSideModel(tempExtrude.SideModelingMap); if (ok) { this.__CacheVolume__ = tempExtrude.Volume; let meshs = []; @@ -17499,8 +20478,11 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { this.Id && this instanceof Board && this.__CacheVolume__ !== undefined && - !equaln$1(this.__CacheVolume__, this.Volume)) + !equaln$1(this.__CacheVolume__, this.Volume)) { InteractionLog([{ msg: `${this.Name}(${this.Id.Index})`, entity: [this] }, { msg: "关联槽已逃离或者被清除!" }], LogType.Warning); + //清除关联侧槽 + this.AppendRelevanceSideModel(new Map()); + } this.__CacheSplitExtrudes = [this]; this.__CacheVolume__ = undefined; } @@ -17565,6 +20547,10 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { return this._MeshGeometry; this._EdgeGeometry = undefined; //清理掉(以便在被csg切割后得到edgegeom) let grooves = this.Grooves; + /** + * 如果要板件圆造型的挖穿跟不挖穿的效果一致 + * 则把下段代码的判断,改为 if (grooves.length === 0) + */ if (grooves.every(g => equaln$1(g.thickness, this.thickness)) || grooves.length === 0) { let contour = this.ContourCurve.Clone(); let holes = []; @@ -17588,6 +20574,7 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { bevelOffset: -2, bevelSegments: 1, }; + shape.DisplayAccuracy = this._DisplayAccuracy; let geo = new three.ExtrudeGeometry(shape.Shape, extrudeSettings); geo.applyMatrix4(contour.OCSNoClone); if (this.bevelEnabled) @@ -17596,7 +20583,14 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { //板在某些时候需要布尔运算(二维刀路) this._MeshGeometry = this.UpdateMeshGeom(geo); this._MeshGeometry["IsMesh"] = true; - this.GenWorldUV(this._MeshGeometry); + let mtl = this.Material?.Object ?? this.Db?.DefaultMaterial; + if (mtl?.UseWorldUV) { + //类型转换 + if (this._MeshGeometry instanceof three.Geometry) + this._MeshGeometry = new three.BufferGeometry().fromGeometry(this._MeshGeometry); + let gen = new GenUVForWorld(); + gen.GenGeoUV(this._MeshGeometry, mtl.Material); + } //edge geometry if (grooves.length < MaxDrawGrooveCount && !this._EdgeGeometry) //这个代码保证线框和概念对齐 { @@ -17622,6 +20616,7 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { return geo; } get Has2DPath() { return false; } + get HasSideModel() { return false; } get EdgeGeometry() { if (this._EdgeGeometry) return this._EdgeGeometry; @@ -17629,8 +20624,8 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { if (this._EdgeGeometry) return this._EdgeGeometry; //这里我们超过100就用这个,为了性能 和MaxDrawGrooveCount不一致 - if (this.grooves.length > 100 || (!this.Has2DPath && (this.grooves.length === 0 || this.grooves.every(g => equaln$1(g.thickness, this.thickness))))) { - let coords = FastExtrudeEdgeGeometry(this, this.ColorIndex, 12, true); + if (this.grooves.length > 100 || (!this.Has2DPath && !this.HasSideModel && (this.grooves.length === 0 || this.grooves.every(g => equaln$1(g.thickness, this.thickness))))) { + let coords = FastExtrudeEdgeGeometry(this, this.DrawColorIndex, 12, true); let edgeGeo = new three.BufferGeometry(); edgeGeo.setAttribute('position', new three.Float32BufferAttribute(coords, 3)); this._EdgeGeometry = edgeGeo; @@ -17692,16 +20687,25 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { if (renderType === RenderType.Wireframe) { let l = obj; l.geometry = this.EdgeGeometry; - l.material = ColorMaterial.GetLineMaterial(this.ColorIndex, this.Freeze); + l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex, this.Freeze); } else if (renderType === RenderType.Conceptual) { - return obj.add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex, three.FrontSide, true, this.Freeze)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); + return obj.add(new three.Mesh(this.MeshGeometry, this.GetConceptualMaterial()), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); } else if (renderType === RenderType.ModelGroove) { obj.add( // new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(9, FrontSide, true, this.Freeze)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); obj.add(this.GetModelGroove()); + //侧槽 + obj.add(this.GetSideModelGroove()); + } + // 概念透明 + else if (renderType === RenderType.ConceptualTransparent) { + let color = this.DrawColorIndex; + if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) + color = 8; + return obj.add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, three.FrontSide)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); } else if (renderType === RenderType.Physical) { let mesh = obj; @@ -17724,15 +20728,24 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { }); return obj.add(mesh, new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())); } + return obj; } UpdateDrawObjectMaterial(renderType, obj) { if (renderType === RenderType.Wireframe) { let l = obj; - l.material = ColorMaterial.GetLineMaterial(this.ColorIndex, this.Freeze); + l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex, this.Freeze); } else if (renderType === RenderType.Conceptual) { let mesh = obj.children[0]; - mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex, three.FrontSide, true, this.Freeze); + mesh.material = this.GetConceptualMaterial(); + } + // 概念透明 + else if (renderType === RenderType.ConceptualTransparent) { + let color = this.DrawColorIndex; + if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) + color = 8; + let mesh = obj.children[0]; + mesh.material = ColorMaterial.GetConceptualTransparentMaterial(color, three.FrontSide); } else if (renderType === RenderType.Physical2) { let mesh = obj.children[0]; @@ -17743,6 +20756,15 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { mesh.material = this.MeshMaterial; } } + //获取概念视图材质 冻结状态使用257色号 半透明 + GetConceptualMaterial() { + let mtl; + if (this.Freeze) + mtl = ColorMaterial.GetBasicMaterialTransparent2(257, 0.5); + else + mtl = ColorMaterial.GetConceptualMaterial(this.DrawColorIndex, three.FrontSide, true); + return mtl; + } GetModelGroove() { const grooves = []; for (const sp of this.__CacheSplitExtrudes ?? []) { @@ -17758,11 +20780,42 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { const line = new three.LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(1, this.Freeze)); const meshGeo = grooveClone.MeshGeometry; meshGeo.applyMatrix4(mtx); - const mesh = new three.Mesh(meshGeo, ColorMaterial.GetConceptualMaterial(1, three.FrontSide, true, this.Freeze, 0.6)); + const mesh = new three.Mesh(meshGeo, ColorMaterial.GetBasicMaterialTransparent2(1, 0.6)); group.add(mesh, line); } return group; } + GetSideModelGroove() { + let board = this; + const AllSideModelGrooveMap = board.AllSideModelGrooveMap; + const group = new three.Group(); + if (AllSideModelGrooveMap.size) { + let con = GetBoardContour(board); + if (!con) + return group; + let inverseZ = con.Area2 < 0; + let cus = con.Explode(); + const mirrorMtxZ = MakeMirrorMtx(ZAxis); + for (let [index, soilds] of AllSideModelGrooveMap) { + let cu = cus[index]; + if (!cu) + continue; + let mt4 = GetSideCuFaceMtx(cus[index], inverseZ); + for (let soild of soilds) { + const edgeGeo = soild.EdgeGeometry; + const line = new three.LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(1, this.Freeze)); + line.applyMatrix4(mirrorMtxZ); + line.applyMatrix4(mt4.clone().multiply(soild.OCS)); + const meshGeo = soild.MeshGeometry; + const mesh = new three.Mesh(meshGeo, ColorMaterial.GetBasicMaterialTransparent2(1, 0.6)); + mesh.applyMatrix4(mirrorMtxZ); + mesh.applyMatrix4(mt4.clone().multiply(soild.OCS)); + group.add(mesh, line); + } + } + } + return group; + } UpdateJigMaterial(color = 8) { } //#endregion @@ -17814,9 +20867,12 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { this.RelevanceKnifs.push(id); } } + if (ver > 3) { + this._DisplayAccuracy = file.Read(); + } } WriteFileOnly(file) { - file.Write(3); + file.Write(4); file.Write(this.height); file.Write(this.width); file.Write(this.thickness); @@ -17836,6 +20892,7 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { file.Write(this.RelevanceKnifs.length); for (let id of this.RelevanceKnifs) file.WriteSoftObjectId(id); + file.Write(this._DisplayAccuracy); } //对象从文件中读取数据,初始化自身 _ReadFile(file) { @@ -17901,8 +20958,11 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { */ Explode() { return this.Entitys.map(e => { - let cloneE = e.Clone(); - cloneE.Material = e.Material; + if (!e.Db && this._db) + e.SetDatabase(this._db); + let cloneE = e.Clone(false); + if (!(cloneE instanceof CompositeEntity_1)) + cloneE.Material = e.Material; return cloneE.ApplyMatrix(this.OCSNoClone); }); } @@ -17937,10 +20997,11 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { } UpdateDrawObject(renderType, obj) { Object3DRemoveAll(obj); - if (renderType === RenderType.ModelGroove) - return; + if (renderType === RenderType.ModelGroove || renderType === RenderType.Edge) + return; //造型槽和封边模式下不显示五金 for (let e of this.Entitys) { e.IsEmbedEntity = true; + e.ParentEntity = this.ParentEntity || this; // //内嵌实体在某些时候可能被清理,修复它 // if (e.DrawObject.children.length === 0) // e.ClearDraw(); @@ -17954,6 +21015,20 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { } } } + /** 为了避免_CacheDrawObject中的key错误,这里重写了GetDrawObjectFromRenderType,而不是直接在UpdateDrawObject中修改rtype */ + GetDrawObjectFromRenderType(renderType = RenderType.Wireframe) { + if (renderType === RenderType.ConceptualTransparent && this instanceof HardwareCompositeEntity) { + // 未开启五金透明选项时,五金的概念(透明)效果同概念 + if (!HostApplicationServices.IsTransparentMetals && this.HardwareOption.type === EMetalsType.Metals) { + renderType = RenderType.Conceptual; + } + // 组件同理 + if (!HostApplicationServices.IsTransparentComp && this.HardwareOption.type === EMetalsType.Comp) { + renderType = RenderType.Conceptual; + } + } + return super.GetDrawObjectFromRenderType(renderType); + } get ColorIndex() { return super.ColorIndex; } @@ -17982,7 +21057,69 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { e.Material = id; } } + get Layer() { + return super.Layer; + } + set Layer(id) { + super.Layer = id; + for (let e of this.Entitys) { + if (!e.Db) + e.SetDatabase(this.Db); + e.Layer = id; + } + } + SetAllMaterialAtSlot(mtl) { + if (this.LockMaterial) + return; + this.WriteAllObjectRecord(); + this.Traverse(e => { + if (e === this) + return; + e.SetAllMaterialAtSlot(mtl); + }); + this.Update(exports.UpdateDraw.Material); + } + GetMtlLockedStatus() { + let partMtlLocked = false; + let allMtlLocked = true; + this.Traverse(e => { + if (e === this) + return; + const res = e.GetMtlLockedStatus(); + if (res.partMtlLocked) { + partMtlLocked = true; + if (!res.allMtlLocked) + allMtlLocked = false; + } + else + allMtlLocked = false; + }); + return { + partMtlLocked, + allMtlLocked, + }; + } + GetPhyMtlRecords(containErased = false) { + const materials = []; + this.Traverse(e => { + if (e === this) + return; + const res = e.GetPhyMtlRecords(containErased); + if (res.length) + arrayPushArray$1(materials, res); + }); + return materials; + } UpdateDrawObjectMaterial(renderType, obj) { + if (renderType === RenderType.ModelGroove) + return; + this.Traverse(e => { + if (e === this) + return; + let o = e.GetDrawObjectFromRenderType(renderType); + if (o) + e.UpdateDrawObjectMaterial(renderType, o); + }); this.UpdateDrawObject(renderType, obj); } RestoreJigMaterial() { @@ -17998,10 +21135,10 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { * @param viewXform const 最近点捕捉需要这个变量 * @returns object snap points */ - GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum) { let pts = []; for (let e of this.Entitys) - arrayPushArray$1(pts, e.Clone().ApplyMatrix(this.OCSNoClone).GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)); + arrayPushArray$1(pts, e.Clone().ApplyMatrix(this.OCSNoClone).GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum)); return pts; } GetGripPoints() { @@ -18062,6 +21199,8 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { break; } let ent = this.Entitys[j]; + ent.IsEmbedEntity = true; + ent.ParentEntity = this; dragType === DragPointType.Grip ? ent.MoveGripPoints(ilist, vec) : ent.MoveStretchPoints(ilist, vec); if (ent instanceof ExtrudeSolid) //取消优化判断this.Objectid,因为这个实体可能被复合在另一个实体中,导致这个id是不存在的,所以我们无法判断它在拽拖. ent.CheckContourCurve(); @@ -18096,7 +21235,7 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { //#endregion //#region 文件序列化 _ReadFile(file) { - file.Read(); + let v = file.Read(); super._ReadFile(file); let count = file.Read(); this.Entitys.length = 0; @@ -18105,14 +21244,20 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { if (ent) this.Entitys.push(ent); } + if (v > 1) + this._LockMaterial = file.ReadBool(); + else + this._LockMaterial = false; } //对象将自身数据写入到文件. WriteFile(file) { - file.Write(1); + file.Write(2); super.WriteFile(file); file.Write(this.Entitys.length); for (let e of this.Entitys) file.WriteObject(e); + // ver2 + file.WriteBool(this._LockMaterial); } }; __decorate([ @@ -18216,11 +21361,15 @@ let HardwareCompositeEntity = HardwareCompositeEntity_1 = class HardwareComposit this.RelevanceHandle.push(objId); } } + if (v > 5) { + this.HardwareOption.goodsId = file.Read(); + this.HardwareOption.goodsSn = file.Read(); + } } //对象将自身数据写入到文件. WriteFile(file) { super.WriteFile(file); - file.Write(5); + file.Write(6); file.Write(this.HardwareOption.type); file.Write(this.HardwareOption.isSplite); file.Write(this.HardwareOption.isSplitePrice); @@ -18253,6 +21402,8 @@ let HardwareCompositeEntity = HardwareCompositeEntity_1 = class HardwareComposit file.Write(this.RelevanceHandle.length); for (let id of this.RelevanceHandle) file.WriteSoftObjectId(id); + file.Write(this.HardwareOption.goodsId); + file.Write(this.HardwareOption.goodsSn); } }; __decorate([ @@ -18274,31 +21425,6 @@ HardwareCompositeEntity = HardwareCompositeEntity_1 = __decorate([ Factory ], HardwareCompositeEntity); -const CanDrawHoleFuzz = 0.1; -var BoardFaceType; -(function (BoardFaceType) { - BoardFaceType[BoardFaceType["Side"] = 0] = "Side"; - BoardFaceType[BoardFaceType["NoSide"] = 1] = "NoSide"; -})(BoardFaceType || (BoardFaceType = {})); -function GetSideFaceMtx(cu, inverseZ = false) { - let x = cu.GetFirstDeriv(0).normalize(); - let y = ZAxis; - let z = x.clone().cross(y); - if (inverseZ) - z.negate(); - let basePt; - if ((equaln$1(x.x, 0, 1e-5) && x.y > 0) || x.x < -1e-5) { - x.negate(); - basePt = cu.EndPoint; - } - else - basePt = cu.StartPoint; - //构建面矩阵 - return new three.Matrix4() - .makeBasis(x, y, z) - .setPosition(basePt); -} - const x = new three.Vector3; const y = new three.Vector3; let tempPolyline; @@ -18353,11 +21479,29 @@ function ConverArcToPtsBul(arc, hasEnd = false) { return result; } +exports.ModelType = void 0; +(function (ModelType) { + ModelType[ModelType["frontBackModel"] = 0] = "frontBackModel"; + ModelType[ModelType["sideModel"] = 1] = "sideModel"; + ModelType[ModelType["drill"] = 2] = "drill"; + ModelType[ModelType["sideHoleModel"] = 3] = "sideHoleModel"; +})(exports.ModelType || (exports.ModelType = {})); +exports.SplitOrderType = void 0; +(function (SplitOrderType) { + SplitOrderType[SplitOrderType["ChaiDan"] = 0] = "ChaiDan"; + SplitOrderType[SplitOrderType["HoleGrooveDim"] = 1] = "HoleGrooveDim"; +})(exports.SplitOrderType || (exports.SplitOrderType = {})); exports.Production = void 0; (function (Production) { - /**获取板件拆单数据 */ - function GetBoardSplitOrderData(br, redundancyKnif = 0) { - let sealedData = GetSealedBoardContour(br); + /** + * 获取板件拆单数据 + * @param {Board} br 板件 + * @param {number} [redundancyKnif=0] 刀冗余 + * @param {SplitOrderType} [splitType=SplitOrderType.ChaiDan] 拆单类型,默认为拆单 + * @return {*} {(ISpliteOrderData | undefined)} + */ + function GetBoardSplitOrderData(br, redundancyKnif = 0, splitType = exports.SplitOrderType.ChaiDan) { + let sealedData = GetSealedBoardContour(br, splitType); if (!sealedData) { ToasterShowEntityMsg({ msg: br.Name + " 轮廓错误,可能存在轮廓自交,请检查后重新拆单!(错误的板已经选中,您可以按住鼠标中键查看该板!)(使用FISC命令可以修复自交轮廓!)", @@ -18379,47 +21523,74 @@ exports.Production = void 0; let originOutlinePtsBul = ConverToPtsBul(orgContour); originOutlinePtsBul.pts.pop(); originOutlinePtsBul.buls.pop(); - let { modeling, sideModeling } = GetBoardModelingData(br, offsetTanslation, redundancyKnif); + const curveBoardModeling = br.ArcBoardModeling; + //正反面造型 自定义不规则排钻孔 + let { modeling, sideModeling } = GetBoardModelingData(br, offsetTanslation, redundancyKnif, curveBoardModeling); + //侧面造型 + let { sideModel, sideHole } = GetBoardSideModelingData(br, true); + sideModeling.push(...sideModel); let boardContour; - if (GetSpiteSize(br)) + if (HasSpiteSize(br)) boardContour = ConverToPtsBul(br.ContourCurve); //不分裂圆弧转点表 + let info = GetBoardInfo(br, size); //每段封边信息 - let perSealData = ParseSealData(sealedData); - let perBoardEdgeRemarkData = br.IsSpecialShape ? ParseBoardEdgeRemarkData(sealedData, br.BoardProcessOption.highBoardEdgeRemark) : []; - //因为传递给拆单软件的数据是逆时针,所以我们翻转它 - if (orgContour.Area2 < 0) + let { seals: perSealData, reservedEdges: perReservedEdgeData } = ParseSealData(sealedData, br.BoardProcessOption.color); + let perBoardEdgeRemarkData; + if (splitType === exports.SplitOrderType.HoleGrooveDim) + perBoardEdgeRemarkData = GetHighBoardEdgeRemark(br, sealedData.brCurves, true); // 孔槽板边备注,按照正常的边顺序返回备注数据即可 + else + perBoardEdgeRemarkData = ParseBoardEdgeRemarkData(sealedData, br.BoardProcessOption.highBoardEdgeRemark); // 拆单的板边备注,并且轮廓是圆的时候,需要分成两段圆弧。 + let isReverse = orgContour.Area2 < 0; + //因为传递给拆单软件的数据是逆时针,所以是顺时针时我们翻转它 + if (isReverse) { perSealData.reverse(); + perBoardEdgeRemarkData.reverse(); + perReservedEdgeData.reverse(); + //对应sealedOutlinePtsBul顺序 解析孔时翻转orgContour + orgContour.Reverse(); + } + let holes = GetBoardHolesData(br, offsetTanslation, orgContour); + holes.sideHoles.push(...sideHole); return { - info: GetBoardInfo(br, size), + info, originOutlin: originOutlinePtsBul, //拼错了 未扣封边的点表 outline: sealedOutlinePtsBul, //扣完封边的点表 sealing: perSealData, //每段曲线的封边信息 boardEdgeRemark: perBoardEdgeRemarkData, //每段曲线的板边备注信息 + reservedEdge: perReservedEdgeData, //每段曲线的预留边信息 modeling, - holes: GetBoardHolesData(br, offsetTanslation, orgContour), + curveBoardModeling, + holes, sideModeling, offsetTanslation, metalsData: GetBoardMetals(br), boardContour, modeling2D: Get2DModeing(br, offsetTanslation), modeling3D: Get3DModeing(br, offsetTanslation), + isReverse //轮廓是否翻转 }; } Production.GetBoardSplitOrderData = GetBoardSplitOrderData; //生产那边需要一一对应的数据 - function ParseSealData(sealData) { + function ParseSealData(sealData, defaultSealColor = "") { let seals = []; + let reservedEdges = []; for (let i = 0; i < sealData.brCurves.length; i++) { let curve = sealData.brCurves[i]; let sealD = sealData.highSeals[i]; + let reservedEdgeD = sealData.highReservedEdges[i]; if (curve instanceof exports.Circle) { let seal2 = { length: curve.Length * 0.5, - ...sealD + ...sealD, + sealColor: sealD.sealColor ? sealD.sealColor : defaultSealColor }; + //圆型板拆单时是分成两段圆弧处理 seals.push(seal2); seals.push({ ...seal2 }); - return seals; + reservedEdges.push(reservedEdgeD); + reservedEdges.push({ ...reservedEdgeD }); + return { seals, reservedEdges }; } else { if (curve instanceof exports.Polyline) //多段线炸开 @@ -18427,22 +21598,26 @@ exports.Production = void 0; for (let subC of curve.Explode()) { let seal2 = { length: subC.Length, - ...sealD + ...sealD, + sealColor: sealD.sealColor ? sealD.sealColor : defaultSealColor }; seals.push(seal2); + reservedEdges.push(reservedEdgeD); } } else //直线 圆弧直接加 { let seal2 = { length: curve.Length, - ...sealD + ...sealD, + sealColor: sealD.sealColor ? sealD.sealColor : defaultSealColor }; seals.push(seal2); + reservedEdges.push(reservedEdgeD); } } } - return seals; + return { seals, reservedEdges }; } Production.ParseSealData = ParseSealData; function ParseBoardEdgeRemarkData(sealData, highBoardEdgeRemark) { @@ -18451,6 +21626,7 @@ exports.Production = void 0; let curve = sealData.brCurves[i]; let remarkData = highBoardEdgeRemark[i]; if (curve instanceof exports.Circle) { + //圆型板拆单时是分成两段圆弧处理 remarks.push(remarkData); remarks.push({ ...remarkData }); return remarks; @@ -18470,7 +21646,6 @@ exports.Production = void 0; } return remarks; } - Production.ParseBoardEdgeRemarkData = ParseBoardEdgeRemarkData; function GetBoardInfo(br, size) { let data = br.BoardProcessOption; let spliteSize = Production.GetSpiteSize(br); @@ -18485,6 +21660,7 @@ exports.Production = void 0; [EBoardKeyList.Color]: data[EBoardKeyList.Color], [EBoardKeyList.Lines]: data[EBoardKeyList.Lines], [EBoardKeyList.DrillType]: data[EBoardKeyList.DrillType], + [EBoardKeyList.Thick]: br.Thickness, spliteHeight: spliteSize ? spliteSize.spliteHeight.toString() : "", spliteThickness: spliteSize ? spliteSize.spliteThickness.toString() : "", spliteWidth: spliteSize ? spliteSize.spliteWidth.toString() : "", @@ -18535,7 +21711,7 @@ exports.Production = void 0; }; let allModeling = GetModelingFromCustomDrill(br); let modeling = getModelings([...br.BoardModeling, ...allModeling.modeling]); - let sideModeling = getModelings(allModeling.sideModeling); + let sideModeling = GetBoardSideModelingData(br); return { modeling, sideModeling }; } Production.GetOriginBoardModelingData = GetOriginBoardModelingData; @@ -18544,10 +21720,10 @@ exports.Production = void 0; * @param br * @param offsetTanslation */ - function GetBoardModelingData(br, offsetTanslation, redundancyKnif = 0) { + function GetBoardModelingData(br, offsetTanslation, redundancyKnif = 0, curveBoardModeling) { const tool = FeedingToolPath.GetInstance(); const tMtx = MoveMatrix(offsetTanslation.clone().negate()); - const getModelings = (ms, isSide) => { + const getModelings = (ms) => { let data = []; for (let m of ms) { let cu = m.shape.Outline.Curve; @@ -18556,8 +21732,7 @@ exports.Production = void 0; if (HostApplicationServices.chaidanOption.useDefaultRad) m.knifeRadius = HostApplicationServices.chaidanOption.radius; let paths = tool.GetModelFeedPath(br, m, redundancyKnif); //走刀路径 - if (!isSide) - paths.forEach(path => path.ApplyMatrix(tMtx)); + paths.forEach(path => path.ApplyMatrix(tMtx)); //走刀的ptsbuls let feeding = paths.map((c) => ConverToPtsBul(c, false)); if (feeding.length > 0) @@ -18586,17 +21761,98 @@ exports.Production = void 0; return data; }; let allModeling = GetModelingFromCustomDrill(br); - let modeling = getModelings([...br.BoardModeling, ...allModeling.modeling], false).filter(f => f.feeding.length > 0); - let sideModeling = getModelings(allModeling.sideModeling, true).filter(f => f.feeding.length > 0); - return { modeling, sideModeling }; + let modeling = getModelings([...br.BoardModeling, ...allModeling.modeling, ...curveBoardModeling]).filter(f => f.feeding.length > 0); + // 拆单值有效的板件勾选取消孔槽加工 + const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption; + const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness]; + if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing) { + modeling.length = 0; + allModeling.sideModeling.length = 0; + } + return { modeling, sideModeling: allModeling.sideModeling }; } Production.GetBoardModelingData = GetBoardModelingData; + function GetBoardSideModelingData(br, toaster = false) { + let sideModel = []; + let sideHole = []; + let allSideModelGrooveMap = br.AllSideModelGrooveMap; + //跳过有拆单尺寸板件 避免拆单错误 + if (!allSideModelGrooveMap.size || HasSpiteSize(br)) + return { sideModel, sideHole }; + const tool = FeedingToolPath.GetInstance(); + let faces = new ParseBoardSideFace(br); + for (let [num, solids] of allSideModelGrooveMap) { + let faceContour = faces.Faces[num].Region.ShapeManager.ShapeList[0].Outline.Curve; + for (let solid of solids) { + let cu = solid.Shape.Outline.Curve.Clone().ApplyMatrix(solid.OCSNoClone); + let modelType = exports.ModelType.sideModel; + // 圆造型拆成孔类型 + if (!solid.Shape.Holes.length && cu instanceof exports.Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6) { + let mtx = br.OCSInv.multiply(faces.Faces[num].OCS); + let position = cu.Position.clone().applyMatrix4(mtx); + let endPt = cu.Position.clone().setZ(-solid.Thickness).applyMatrix4(mtx); + /**拆单那边需要把侧孔 z 坐标转换为从上到下 */ + InvertPosition(position, br.Thickness); + InvertPosition(endPt, br.Thickness); + // cu.ApplyMatrix(mtx); + // TestDraw(cu); + // TestDraw(new Point(position)); + // TestDraw(new Point(endPt)); + sideHole.push({ + position, //排钻开始位置 + endPt, //排钻结束的位置(在板的坐标系) + radius: cu.Radius, //排钻半径 + depth: solid.Thickness, //排钻的插入深度 + face: num, //板在哪个边上 + name: "", + type: null + }); + continue; + } + let knifeRadius = solid.KnifeRadius; + if (HostApplicationServices.chaidanOption.useDefaultRad) + knifeRadius = HostApplicationServices.chaidanOption.radius; + let paths = tool.GetSideModelFeedPath(solid, faceContour); //走刀路径 + if (paths.length) { + sideModel.push({ + thickness: solid.Thickness + (solid.GroovesAddDepth ?? 0), + dir: num, + knifeRadius, + outline: ConverToPtsBul(cu, false), + holes: solid.Shape.Holes.map((cu) => ConverToPtsBul(cu.Curve.Clone().ApplyMatrix(solid.OCSNoClone), false)), + addLen: solid.GroovesAddLength, + addWidth: solid.GroovesAddWidth, + addDepth: solid.GroovesAddDepth, + chaiDanName: "", + modelType, + }); + } + else if (toaster) { + Toaster({ + message: "板件有侧面造型或者自定义排钻无法加工,请运行造型检测命令确认", + timeout: 5000, + intent: Intent.DANGER, + key: "侧面造型加工错误" + }); + } + } + } + return { sideModel, sideHole }; + } + Production.GetBoardSideModelingData = GetBoardSideModelingData; + //是否有拆单尺寸 + function HasSpiteSize(br) { + let [spHeight, spWidth, spThickness] = [br.BoardProcessOption?.spliteHeight, br.BoardProcessOption?.spliteWidth, br.BoardProcessOption?.spliteThickness]; + const isEffect = HostApplicationServices.chaidanOption.partialSplitValueCanTakesEffect; //局部拆单值 + const hasSize = (isEffect ? (spHeight || spWidth || spThickness) : (spHeight && spWidth && spThickness)); + return Boolean(hasSize); + } + Production.HasSpiteSize = HasSpiteSize; //获得拆单尺寸 function GetSpiteSize(br) { - let [spHeight, spWidth, spThickness] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness]; - const isEffect = HostApplicationServices.chaidanOption.partialSplitValueCanTakesEffect; - const param = { L: br.Height, W: br.Width, H: br.Thickness }; - if (isEffect ? (spHeight || spWidth || spThickness) : (spHeight && spWidth && spThickness)) { + if (HasSpiteSize(br)) { + let [spHeight, spWidth, spThickness] = [br.BoardProcessOption?.spliteHeight, br.BoardProcessOption?.spliteWidth, br.BoardProcessOption?.spliteThickness]; + const param = { L: br.Height, W: br.Width, H: br.Thickness }; spHeight = spHeight || br.Height.toString(); spWidth = spWidth || br.Width.toString(); spThickness = spThickness || br.Thickness.toString(); @@ -18627,10 +21883,27 @@ exports.Production = void 0; frontBackHoles: [], sideHoles: [] }; + const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption; + // 拆单值有效的板件勾选取消孔槽加工 + const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness]; + if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing) { + return data; + } let brNormal = br.Normal; // 性能优化的解析板件网洞类 // new ParseBoardHoleData(br, offsetTanslation, sealedContour); - for (let [, driss] of br.DrillList) { + //是弧形板件时解析排钻在路径的相对位置 + if (br.IsArcBoard && br.DrillList.size) { + offsetTanslation = ParseArcBoardHoles(br, offsetTanslation); + } + for (let [key, driss] of br.DrillList) { + let linkBoard = key?.Object; + if (cancelHoleProcessing && linkBoard) { + const [L, W, H] = [linkBoard.BoardProcessOption.spliteHeight, linkBoard.BoardProcessOption.spliteWidth, linkBoard.BoardProcessOption.spliteThickness]; + if ((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) { + continue; + } + } for (let dris of driss) { for (let dId of dris) { if (!dId || dId.IsErase) @@ -18665,6 +21938,13 @@ exports.Production = void 0; if (!nid || !nid.Object || nid.IsErase) continue; let nail = nid.Object; + let linkBoard = nail.MId?.Object; + if (cancelHoleProcessing && linkBoard) { + const [L, W, H] = [linkBoard.BoardProcessOption.spliteHeight, linkBoard.BoardProcessOption.spliteWidth, linkBoard.BoardProcessOption.spliteThickness]; + if ((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) { + continue; + } + } if (!isParallelTo(nail.Normal, brNormal, CanDrawHoleFuzz)) continue; let sp = nail.Position.applyMatrix4(br.OCSInv); @@ -18713,22 +21993,49 @@ exports.Production = void 0; function InvertPosition(pos, thickness) { pos.z = thickness - pos.z; } - function HoleInBoard(center, radius, outline, isYMJ = false) { + function HoleInBoard(center, radius, outline, allowPxl, isYMJ = false) { let cir = new exports.Circle(center, radius - SCALAR); if (isYMJ) { return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center); } else { - if (HostApplicationServices.forceFilterPxl) - return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center); - else + if (allowPxl || !HostApplicationServices.forceFilterPxl) return outline.IntersectWith(cir, 0).length > 1 || outline.PtInCurve(center); + else + return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center); } } /**分析常规排钻 */ function ParseCylHoles(cyHole, br, offsetTanslation, data, outline) { let brInv = br.OCSInv; let brNormal = br.Normal; + let outlineWidth = br.Width; + let outlineHeight = br.Height; + let faceRegions; + let faceRegionsBox; + let addPos; + if (br.IsArcBoard) { + addPos = cyHole["__CacheAddPos__"]; + faceRegions = cyHole["__CacheContour__"]; + let ocs = cyHole["__CacheBrOCS__"]; + cyHole["__CacheAddPos__"] = undefined; + cyHole["__CacheBrOCS__"] = undefined; + cyHole["__CacheContour__"] = undefined; + if (!ocs || !addPos || !faceRegions?.length) + return; + else { + brInv = new three.Matrix4().getInverse(ocs); + brNormal = new three.Vector3().setFromMatrixColumn(ocs, 2); + faceRegionsBox = new three.Box3(); + for (let pl of faceRegions) + faceRegionsBox.union(pl.BoundingBox); + let boxSize = faceRegionsBox.getSize(new three.Vector3); + outlineWidth = boxSize.x; + outlineHeight = boxSize.y; + let extrude = Board.CreateBoard(boxSize.y, boxSize.x, 1); + outline = extrude.ContourCurve; + } + } let brInvRo = new three.Matrix4().extractRotation(brInv); let position = cyHole.Position.applyMatrix4(brInv); let holes = data.frontBackHoles; @@ -18743,9 +22050,9 @@ exports.Production = void 0; let pos2 = position.clone().add(cyNormal.multiplyScalar(depth)); if (cyHole.Type === GangDrillType.Pxl || cyHole.Type === GangDrillType.WoodPXL) { if (isParallelTo(cyHole.Normal, brNormal, CanDrawHoleFuzz)) { - if (!IsBetweenA2B(position.x, -cyHole.Radius, br.Width + cyHole.Radius, 1e-6) - || !IsBetweenA2B(position.y, -cyHole.Radius, br.Height + cyHole.Radius, 1e-6) - || !HoleInBoard(position.clone().setZ(0), cyHole.Radius, outline)) + if (!IsBetweenA2B(position.x, -cyHole.Radius, outlineWidth + cyHole.Radius, 1e-6) + || !IsBetweenA2B(position.y, -cyHole.Radius, outlineHeight + cyHole.Radius, 1e-6) + || !HoleInBoard(position.clone().setZ(0), cyHole.Radius, outline, cyHole.AllowPxl)) return; position.sub(offsetTanslation); //#region 求得真实的求交范围 @@ -18768,7 +22075,7 @@ exports.Production = void 0; isPush = true; } } - else if (cyHole.Type === GangDrillType.Ljg || cyHole.Type === GangDrillType.Wood) { + else if (cyHole.Type === GangDrillType.Ljg || cyHole.Type === GangDrillType.Wood || cyHole.SameSideHole) { if (isPerpendicularityTo(cyHole.Normal, brNormal, CanDrawHoleFuzz)) //侧孔 { let z = position.z; @@ -18777,7 +22084,26 @@ exports.Production = void 0; let sp = position.clone().setZ(0); //真实数据 let ep = position.clone().add(cyHole.Normal.multiplyScalar(cyHole.Height).applyMatrix4(brInvRo)).setZ(0); //真实数据 let testLine = new exports.Line(sp, ep); - let iPt = outline.IntersectWith(testLine, 0, CanDrawHoleFuzz)[0]; + let iPt; + if (br.IsArcBoard) { + if (faceRegions?.length) { + for (let pl of faceRegions) { + pl.UpdateOCSTo(new three.Matrix4().setPosition(faceRegionsBox.min)); + let newPl = new exports.Polyline(pl.LineData); + iPt = newPl.IntersectWith(testLine, 0, CanDrawHoleFuzz)[0]; + if (iPt) { + outline = newPl; + break; + } + } + } + else { + InteractionLog([{ msg: "警告:" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: "侧孔与板无交点,无法加工该侧孔!" }], LogType.Warning); + return; + } + } + else + iPt = outline.IntersectWith(testLine, 0, CanDrawHoleFuzz)[0]; if (!iPt) { InteractionLog([{ msg: "警告:" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: "侧孔与板无交点,无法加工该侧孔!" }], LogType.Warning); return; @@ -18790,7 +22116,9 @@ exports.Production = void 0; } } if (!endPt) { - InteractionLog([{ msg: "警告:" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: "侧孔位置有问题,排钻不在板轮廓内!" }], LogType.Warning); + //同侧面生成常规单头排钻 连接杆在Curve边缘时不提示错误 + if (!cyHole.SameSideHole) + InteractionLog([{ msg: "警告:" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: "侧孔位置有问题,排钻不在板轮廓内!" }], LogType.Warning); return; } holes = data.sideHoles; @@ -18829,10 +22157,10 @@ exports.Production = void 0; } else { if (isParallelTo(cyHole.Normal, brNormal, CanDrawHoleFuzz)) { - if (!IsBetweenA2B(position.x, -cyHole.Radius, br.Width + cyHole.Radius, CanDrawHoleFuzz) - || !IsBetweenA2B(position.y, -cyHole.Radius, br.Height + cyHole.Radius, CanDrawHoleFuzz) + if (!IsBetweenA2B(position.x, -cyHole.Radius, outlineWidth + cyHole.Radius, CanDrawHoleFuzz) + || !IsBetweenA2B(position.y, -cyHole.Radius, outlineHeight + cyHole.Radius, CanDrawHoleFuzz) || !isIntersect2(0, br.Thickness, position.z, pos2.z, -CanDrawHoleFuzz) - || !HoleInBoard(position.clone().setZ(0), cyHole.Radius, outline, true)) + || !HoleInBoard(position.clone().setZ(0), cyHole.Radius, outline, cyHole.AllowPxl, true)) return; position.sub(offsetTanslation); holes = data.frontBackHoles; @@ -18840,16 +22168,29 @@ exports.Production = void 0; isPush = true; } } - isPush && holes.push({ - type: cyHole.Type, - position, //排钻开始位置 - endPt, //排钻结束的位置(在板的坐标系) - radius: cyHole.Radius, //排钻半径 - depth, //排钻的插入深度 - face, //板在哪个边上 - angle, - name: GetGroupName(cyHole) - }); + if (isPush) { + if (br.IsArcBoard) { + //弧形板需要单独增加差值 + position = position.add(addPos); + endPt = endPt?.add(addPos); + if (br.SweepAngle) { + let ocsInv = new three.Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx); + position.applyMatrix4(ocsInv); + endPt?.applyMatrix4(ocsInv); + } + } + holes.push({ + type: cyHole.Type, + position, //排钻开始位置 + endPt, //排钻结束的位置(在板的坐标系) + radius: cyHole.Radius, //排钻半径 + depth, //排钻的插入深度 + face, //板在哪个边上 + angle, + name: GetGroupName(cyHole), + goodsId: cyHole.GoodsId, //商品编号 + }); + } } /**分析自定义圆柱排钻 * @@ -18861,10 +22202,38 @@ exports.Production = void 0; function ParseExtrudeHoles(d, br, offsetTanslation, data, outline, isCheckGroove = false, isRelativeHardware = false) { if (!d.isHole) return; + let brInv = br.OCSInv; let brNormal = br.Normal; let cir = d.ContourCurve; + let outlineWidth = br.Width; + let outlineHeight = br.Height; + let addPos; + let faceRegions; + let faceRegionsBox; + if (br.IsArcBoard) { + addPos = d["__CacheAddPos__"]; + faceRegions = d["__CacheContour__"]; + let ocs = d["__CacheBrOCS__"]; + d["__CacheAddPos__"] = undefined; + d["__CacheBrOCS__"] = undefined; + d["__CacheContour__"] = undefined; + if (!ocs || !addPos || !faceRegions?.length) + return; + else { + brInv = new three.Matrix4().getInverse(ocs); + brNormal = new three.Vector3().setFromMatrixColumn(ocs, 2); + faceRegionsBox = new three.Box3(); + for (let pl of faceRegions) + faceRegionsBox.union(pl.BoundingBox); + let boxSize = faceRegionsBox.getSize(new three.Vector3); + outlineWidth = boxSize.x; + outlineHeight = boxSize.y; + let extrude = Board.CreateBoard(boxSize.y, boxSize.x, 1); + outline = extrude.ContourCurve; + } + } if (cir instanceof exports.Circle) { - let diffMtx = br.OCSInv.multiply(d.OCS); + let diffMtx = brInv.multiply(d.OCS); let nor = d.Normal; let sp = cir.Center.applyMatrix4(diffMtx); let ep = cir.Center.add(new three.Vector3(0, 0, d.Height)).applyMatrix4(diffMtx); @@ -18876,7 +22245,8 @@ exports.Production = void 0; { let z0 = Math.min(sp.z, ep.z); let z1 = Math.max(sp.z, ep.z); - let p = sp.clone().setZ(0).sub(offsetTanslation); + //检测排钻中心孔位与板轮廓outline交集关系时,不考虑offsetTanslation的差值 因为传进来的outline都不是封边轮廓 + let p = sp.clone().setZ(0); //区间没有交集 if (!(Math.max(z0, 0) < (Math.min(z1, br.Thickness) - CanDrawHoleFuzz))) return; @@ -18895,20 +22265,31 @@ exports.Production = void 0; InteractionLog([{ msg: "警告:" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: "的孔在造型内,无法加工,已经跳过!" }], LogType.Warning); return; } + p.sub(offsetTanslation); let depth = z0 < CanDrawHoleFuzz ? z1 : br.Thickness - z0; let angle = angleTo(XAxis, x); if (equaln$1(angle, Math.PI)) angle = 0; - if (depth > CanDrawHoleFuzz) + if (depth > CanDrawHoleFuzz) { + let position = z0 < CanDrawHoleFuzz ? p : p.setZ(br.Thickness); + if (br.IsArcBoard) { + //弧形板需要单独增加差值 + position = position.add(addPos); + if (br.SweepAngle) { + let ocsInv = new three.Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx); + position.applyMatrix4(ocsInv); + } + } data.frontBackHoles.push({ type: d.isThrough ? GangDrillType.TK : (isRelativeHardware ? GangDrillType.Ljg : d.Type), - position: z0 < CanDrawHoleFuzz ? p : p.setZ(br.Thickness), + position, radius: cir.Radius, depth, face: z0 < CanDrawHoleFuzz ? FaceDirection.Back : FaceDirection.Front, angle: angle, name: GetGroupName(d) }); + } } else //侧孔 { @@ -18917,13 +22298,13 @@ exports.Production = void 0; let [minY, maxY] = sp.y < ep.y ? [sp.y, ep.y] : [ep.y, sp.y]; if (sp.z > -cir.Radius && sp.z < br.Thickness + cir.Radius - && Math.max(minX, 0) < (Math.min(br.Width, maxX) + (isRelativeHardware ? -CanDrawHoleFuzz : 1e-6)) //区间交集必须大于CanDrawHoleFuzz - && Math.max(minY, 0) < (Math.min(br.Height, maxY) + (isRelativeHardware ? -CanDrawHoleFuzz : 1e-6)) //区间交集必须大于CanDrawHoleFuzz + && Math.max(minX, 0) < (Math.min(outlineWidth, maxX) + (isRelativeHardware ? -CanDrawHoleFuzz : 1e-6)) //区间交集必须大于CanDrawHoleFuzz + && Math.max(minY, 0) < (Math.min(outlineHeight, maxY) + (isRelativeHardware ? -CanDrawHoleFuzz : 1e-6)) //区间交集必须大于CanDrawHoleFuzz ) { sp.setZ(0); ep.setZ(0); let line = new exports.Line(sp, ep); - let pt = outline.IntersectWith(line, 0)[0]; + let pt = outline.IntersectWith(line, 0, 1e-5)[0]; if (!pt) { InteractionLog([{ msg: "警告:" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: `的${isRelativeHardware ? "五金" : "排钻"}嵌在板件内部,已经跳过!` }], LogType.Warning); return; @@ -18944,6 +22325,16 @@ exports.Production = void 0; return; InvertPosition(position, br.Thickness); InvertPosition(endPt, br.Thickness); + if (br.IsArcBoard) { + //弧形板需要单独增加差值 + position = position.add(addPos); + endPt = endPt.add(addPos); + if (br.SweepAngle) { + let ocsInv = new three.Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx); + position.applyMatrix4(ocsInv); + endPt.applyMatrix4(ocsInv); + } + } data.sideHoles.push({ type: GangDrillType.Ljg, endPt, @@ -18983,7 +22374,7 @@ exports.Production = void 0; let size = en.BoundingBoxInOCS.getSize(new three.Vector3); let data = { ...en.HardwareOption }; const actualVal = safeEval(data.actualExpr, { L: size.x, W: size.y, H: size.z }); - data.actualExpr = actualVal ? actualVal.toString() : data.actualExpr; + data.actualExpr = actualVal ? FixedNotZero(actualVal, 2) : data.actualExpr; data.spec = ParseExpr(data.spec, accuracy, { L: size.x, W: size.y, H: size.z }); data.model = ParseExpr(data.model, accuracy, { L: size.x, W: size.y, H: size.z }); data.factory = ParseExpr(data.factory, accuracy, { L: size.x, W: size.y, H: size.z }); @@ -19087,6 +22478,12 @@ exports.Production = void 0; Production.Data2Polyline = Data2Polyline; function Get2DModeing(br, offset) { let res = []; + // 拆单值有效的板件勾选取消孔槽加工 + const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption; + const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness]; + if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing) { + return res; + } let tmtx = MoveMatrix(offset.clone().negate()); for (let m of br.Modeling2D) { let path = m.path.Clone().ApplyMatrix(tmtx); @@ -19101,6 +22498,12 @@ exports.Production = void 0; Production.Get2DModeing = Get2DModeing; function Get3DModeing(br, offset) { let res = []; + // 拆单值有效的板件勾选取消孔槽加工 + const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption; + const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness]; + if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing) { + return res; + } for (let m of br.Modeling3D) { let d = { path: { pts: [], buls: [] }, @@ -19160,6 +22563,74 @@ exports.Production = void 0; } Production.GetGroupName = GetGroupName; })(exports.Production || (exports.Production = {})); +function ParseArcBoardHoles(br, offsetTanslation) { + const ArcBoardBuild = br.ArcBuild; + ArcBoardBuild.ParseSweepCurves(); + let cus = ArcBoardBuild.SweepCurves1; + let ContourCurve = br.Shape.Outline.Curve.Clone().ApplyMatrix(ArcBoardBuild.OCS2RotateMtx); + let brBoxSize = ContourCurve.BoundingBox.getSize(new three.Vector3); + let currentLength = 0; + if (br.SweepAngle) + offsetTanslation = offsetTanslation.clone().applyMatrix4(ArcBoardBuild.OCS2RotateMtx.clone().setPosition(0, 0, 0)); + for (let cu of cus) { + if (currentLength > brBoxSize.x) + break; + if (cu instanceof exports.Arc) { + currentLength = currentLength + cu.Length; + continue; + } + //直线所在坐标系 + let cuBox = new three.Box3(new three.Vector3, new three.Vector3(cu.Length, brBoxSize.y, br.Thickness)); + let an = angle(cu.EndPoint.clone().sub(cu.StartPoint)); + let m = new three.Matrix4().makeRotationY(-an); + let ocs = br.OCS; + if (br.SweepAngle) + ocs.multiply(ArcBoardBuild.Rotate2OCSMtx); + ocs.multiply(m.setPosition(cu.StartPoint.clone().applyMatrix4(new three.Matrix4().makeRotationX(Math.PI / 2)))); + //正面时翻转Z向量 + if (br.SweepVisibleFace === FaceDirection.Front) + ocs.setPosition(new three.Vector3(0, 0, -br.Thickness).applyMatrix4(ocs)); + // 测试代码 + // let pt = new Vector3().applyMatrix4(ocs); + // let l1 = new Line(pt, pt.clone().add(new Vector3().setFromMatrixColumn(ocs, 0).normalize().multiplyScalar(100))); + // let l2 = new Line(pt, pt.clone().add(new Vector3().setFromMatrixColumn(ocs, 1).normalize().multiplyScalar(100))); + // let l3 = new Line(pt, pt.clone().add(new Vector3().setFromMatrixColumn(ocs, 2).normalize().multiplyScalar(100))); + // TestDraw(new Point(pt)); + // TestDraw(l1, 1); + // TestDraw(l2, 3); + // TestDraw(l3, 5); + //裁剪 计算每个分段轮廓 + let length = currentLength + cu.Length; + let starKnifePls = new exports.Polyline([{ pt: AsVector2({ x: currentLength, y: -1 }), bul: 0 }, { pt: AsVector2({ x: currentLength, y: 10000 }), bul: 0 }]); + let endKnifePls = new exports.Polyline([{ pt: AsVector2({ x: length, y: -1 }), bul: 0 }, { pt: AsVector2({ x: length, y: 10000 }), bul: 0 }]); + //裁剪结果 + let faceRegions = SplitPolyline(ContourCurve, [starKnifePls, endKnifePls]); + faceRegions = faceRegions.filter((faceRegion) => { + let x = faceRegion.BoundingBox.getCenter(new three.Vector3).x; + return x > currentLength && x < length; + }); + for (let [, driss] of br.DrillList) { + for (let dris of driss) { + for (let dId of dris) { + if (!dId || dId.IsErase) + continue; + let d = dId.Object; + if (d["__CacheBrOCS__"]) + continue; + let b = d.BoundingBox.applyMatrix4(new three.Matrix4().getInverse(ocs)); + if (cuBox.intersectsBox(b)) { + d["__CacheBrOCS__"] = ocs; + //记录分段路径的起点与原点差值 + d["__CacheAddPos__"] = new three.Vector3(currentLength); + d["__CacheContour__"] = faceRegions; + } + } + } + } + currentLength = length; + } + return offsetTanslation; +} /** * 分析曲线的上下左右位置的线 @@ -19288,9 +22759,7 @@ function SubsectionCurvesOfHightSeal(in_out_curves) { if (g.length === 1) in_out_curves.push(g[0]); else { - let pl = new exports.Polyline(); - for (let c of g) - pl.Join(c); + let pl = exports.Polyline.FastCombine(g, LINK_FUZZ, false); in_out_curves.push(pl); } } @@ -19298,14 +22767,13 @@ function SubsectionCurvesOfHightSeal(in_out_curves) { } //与GetBoardSealingCurves相关 function GetBoardHighSeal(br, sealcus) { - if (br.BoardProcessOption[EBoardKeyList.SpliteHeight] - && br.BoardProcessOption[EBoardKeyList.SpliteWidth] - && br.BoardProcessOption[EBoardKeyList.SpliteThickness]) { + const option = br.BoardProcessOption; + if (exports.Production.HasSpiteSize(br)) { return [ - { size: parseFloat(br.BoardProcessOption.sealedDown) }, - { size: parseFloat(br.BoardProcessOption.sealedRight) }, - { size: parseFloat(br.BoardProcessOption.sealedUp) }, - { size: parseFloat(br.BoardProcessOption.sealedLeft) }, + { size: parseFloat(option.sealedDown), sealColor: option.sealColorDown }, + { size: parseFloat(option.sealedRight), sealColor: option.sealColorRight }, + { size: parseFloat(option.sealedUp), sealColor: option.sealColorUp }, + { size: parseFloat(option.sealedLeft), sealColor: option.sealColorLeft }, ]; } let highSeals = []; @@ -19324,26 +22792,70 @@ function GetBoardHighSeal(br, sealcus) { let derv = c.GetFirstDeriv(0).multiplyScalar(dir); if (Math.abs(derv.x) > Math.abs(derv.y)) { if (derv.x > 0) - highSeals.push({ size: sealDown }); + highSeals.push({ size: sealDown, sealColor: option.sealColorDown }); else - highSeals.push({ size: sealUp }); + highSeals.push({ size: sealUp, sealColor: option.sealColorUp }); } else { if (derv.y > 0) - highSeals.push({ size: sealRight }); + highSeals.push({ size: sealRight, sealColor: option.sealColorRight }); else - highSeals.push({ size: sealLeft }); + highSeals.push({ size: sealLeft, sealColor: option.sealColorLeft }); } } } return highSeals; } -function GetHighBoardEdgeRemark(br, sealcus) { +function GetBoardHighReservedEdge(br, sealcus) { + if (exports.Production.HasSpiteSize(br)) { + return [ + { size: parseFloat(br.BoardProcessOption.reservedEdgeDown) }, + { size: parseFloat(br.BoardProcessOption.reservedEdgeRight) }, + { size: parseFloat(br.BoardProcessOption.reservedEdgeUp) }, + { size: parseFloat(br.BoardProcessOption.reservedEdgeLeft) }, + ]; + } + let highReservedEdge = []; + for (let d of br.BoardProcessOption.highReservedEdge) + if (d.size != null) + highReservedEdge.push({ ...d }); + //若未设置高级封边,把上下左右封边存入高级封边 + if (sealcus.length !== highReservedEdge.length || !br.IsSpecialShape) { + let reservedEdgeDown = parseFloat(br.BoardProcessOption.reservedEdgeDown); + let reservedEdgeUp = parseFloat(br.BoardProcessOption.reservedEdgeUp); + let reservedEdgeLeft = parseFloat(br.BoardProcessOption.reservedEdgeLeft); + let reservedEdgeRight = parseFloat(br.BoardProcessOption.reservedEdgeRight); + highReservedEdge.length = 0; + let dir = Math.sign(br.ContourCurve.Area2); + for (let c of sealcus) { + let derv = c.GetFirstDeriv(0).multiplyScalar(dir); + if (Math.abs(derv.x) > Math.abs(derv.y)) { + if (derv.x > 0) + highReservedEdge.push({ size: reservedEdgeDown }); + else + highReservedEdge.push({ size: reservedEdgeUp }); + } + else { + if (derv.y > 0) + highReservedEdge.push({ size: reservedEdgeRight }); + else + highReservedEdge.push({ size: reservedEdgeLeft }); + } + } + } + return highReservedEdge; +} +/** + * 获取板边备注 + * @param br 板 + * @param sealcus 封边轮廓线 + * @param addAll 添加所有板边备注 + * @returns 板边备注 + */ +function GetHighBoardEdgeRemark(br, sealcus, addAll = false) { const opt = br.BoardProcessOption; //顺序和封边一样 - if (opt[EBoardKeyList.SpliteHeight] - && opt[EBoardKeyList.SpliteWidth] - && opt[EBoardKeyList.SpliteThickness]) { + if (exports.Production.HasSpiteSize(br)) { return [ { description: opt.edgeRemarkDown }, { description: opt.edgeRemarkRight }, @@ -19353,7 +22865,7 @@ function GetHighBoardEdgeRemark(br, sealcus) { } const highBoardEdgeRemark = []; for (const d of opt.highBoardEdgeRemark) - if (d.description != null) + if (d.description != null || addAll) highBoardEdgeRemark.push({ ...d }); //若未设置高级板边备注,把上下左右板边备注存入高级板边备注 if (sealcus.length !== highBoardEdgeRemark.length || !br.IsSpecialShape) { @@ -19442,8 +22954,10 @@ class OffsetPolyline2 extends OffsetPolyline { * 修改时 请注意函数 GetSealedBoardContour */ function GetBoardContour(br) { - if (Math.abs(br.ContourCurve.Area) < 10) + if (Math.abs(br.ContourCurve.Area) < 10) { + InteractionLog([{ msg: `板件:${br.Name}`, entity: [br] }, { msg: "板轮廓面积小于10" }], LogType.Warning); return; + } let curves = GetBoardSealingCurves(br); if (curves.length === 1 && curves[0] instanceof exports.Circle) return curves[0]; @@ -19453,24 +22967,32 @@ function GetBoardContour(br) { allCurvs.push(...c.Explode()); else allCurvs.push(c); - let brContour = exports.Polyline.FastCombine(allCurvs, 1e-4, false); + let brContour = exports.Polyline.FastCombine(allCurvs, LINK_FUZZ * 2, false); return brContour; } /** * 获取板件(扣封边后的)轮廓(拆单时) * 修改时 请注意函数 GetBoardContour + * @param {Board} br 板件 + * @param {SplitOrderType} [splitType=SplitOrderType.ChaiDan] 拆单类型 + * @return {*} {(BrSealedData | undefined)} */ -function GetSealedBoardContour(br) { +function GetSealedBoardContour(br, splitType = exports.SplitOrderType.ChaiDan) { if (Math.abs(br.ContourCurve.Area) < 10) return; let curves = GetBoardSealingCurves(br); let highSeals = GetBoardHighSeal(br, curves); + let highReservedEdges = GetBoardHighReservedEdge(br, curves); + if (splitType === exports.SplitOrderType.HoleGrooveDim) // 孔洞标注,不需计算预留边值 + for (const element of highReservedEdges) + element.size = 0; if (curves.length === 1 && curves[0] instanceof exports.Circle) { let res = { brContour: curves[0], - sealedContour: curves[0].GetOffsetCurves(-highSeals[0].size)[0], + sealedContour: curves[0].GetOffsetCurves(-highSeals[0].size + highReservedEdges[0].size)[0], brCurves: curves, highSeals, + highReservedEdges, }; return res; } @@ -19480,74 +23002,106 @@ function GetSealedBoardContour(br) { allCurvs.push(...c.Explode()); else allCurvs.push(c); - let brContour = exports.Polyline.FastCombine(allCurvs, 1e-4, false); + let brContour = exports.Polyline.FastCombine(allCurvs, LINK_FUZZ * 2, false); let dir = Math.sign(brContour.Area2); let sealedContours; - { - //局部偏移 - let polylineOffset = new OffsetPolyline2(brContour, dir * -Math.max(...highSeals.map(s => s.size))); - let subIndex = 0; - polylineOffset._TrimCircleContours = []; - polylineOffset._TrimArcContours = []; - polylineOffset._SubOffsetedCurves = []; - polylineOffset._SubCurves = []; - polylineOffset._Circles = []; - polylineOffset._CacheOCS = IdentityMtx4; - polylineOffset._IsClose = true; + let maxOffset = 0; //正偏移(外) + let minOffset = 0; //负偏移(内) + curves.map((c, i) => { + let seal = highSeals[i]; //封边 + let reservedEdge = highReservedEdges[i]; + let offDist = -seal.size + reservedEdge.size; + maxOffset = Math.max(maxOffset, offDist); + minOffset = Math.min(minOffset, offDist); + return offDist; + }); + //判断偏移值全是0的情况 + if (minOffset === 0 && maxOffset === 0) { + sealedContours = [brContour]; + } + else { + //先分解多段线生成对应线段和偏移值,防止两次偏移时启用的线段数不一致 + const newCurves = []; + //----计算每段封边偏移值 begin--- + //封边 + 预留边(正数为封边正方向,负值为封边反方向) + const offsetValues = []; for (let i = 0; i < curves.length; i++) { - let curve = curves[i]; //曲线组 - let seal = highSeals[i]; //封边 - let preSeal = highSeals[FixIndex$1(i - 1, curves)]; + let seal = highSeals[i]; + let reservedEdge = highReservedEdges[i]; + let curve = curves[i]; if (curve instanceof exports.Polyline) { let curveExpds = curve.Explode().filter(c => c.Length >= 1e-4); - for (let j = 0; j < curveExpds.length; j++) { - let c = curveExpds[j]; - polylineOffset._SubCurves.push(c); //sub - //trim Circle - if (seal.size && (j || seal.size === preSeal.size)) - polylineOffset._Circles.push(new exports.Circle(c.StartPoint, seal.size)); - else - polylineOffset._Circles.push(undefined); - //offset - let offsetC = c.GetOffsetCurves(dir * -seal.size)[0]; - if (offsetC) - polylineOffset._SubOffsetedCurves.push({ - index: subIndex, - curve: offsetC, - dist: seal.size, - }); - else - polylineOffset._TrimArcContours.push(Contour.CreateContour([c, new exports.Line(c.StartPoint, c.EndPoint)], false)); - subIndex++; + for (const c of curveExpds) { + offsetValues.push(-seal.size + reservedEdge.size); + newCurves.push(c); } } else { + offsetValues.push(-seal.size + reservedEdge.size); + newCurves.push(curve); + } + } + // --- 每段封边偏移值 end ---- + const SealedOffset = (curves, offectValues, dist) => { + //局部偏移 + let polylineOffset = new OffsetPolyline2(brContour, dir * dist); + let subIndex = 0; + polylineOffset._TrimCircleContours = []; + polylineOffset._TrimArcContours = []; + polylineOffset._SubOffsetedCurves = []; + polylineOffset._SubCurves = []; + polylineOffset._Circles = []; + polylineOffset._CacheOCS = IdentityMtx4; + polylineOffset._IsClose = true; + for (let i = 0; i < curves.length; i++) { + let curve = curves[i]; //曲线组 + let offectValue = offectValues[i]; + if (Math.sign(offectValue) !== Math.sign(dist)) + offectValue = 0; + let preOffectValue = offectValues[FixIndex$1(i - 1, curves)]; if (curve.Length < 1e-4) continue; polylineOffset._SubCurves.push(curve); //sub //trim Circle - if (seal.size && seal.size === preSeal.size) - polylineOffset._Circles.push(new exports.Circle(curve.StartPoint, seal.size)); + if (offectValue > 0 && offectValue === preOffectValue) + polylineOffset._Circles.push(new exports.Circle(curve.StartPoint, offectValue)); else polylineOffset._Circles.push(undefined); //offset - let offsetC = curve.GetOffsetCurves(dir * -seal.size)[0]; + let offsetC = curve.GetOffsetCurves(dir * offectValue)[0]; if (offsetC) polylineOffset._SubOffsetedCurves.push({ index: subIndex, curve: offsetC, - dist: seal.size, + dist: -offectValue, }); else polylineOffset._TrimArcContours.push(Contour.CreateContour([curve, new exports.Line(curve.StartPoint, curve.EndPoint)], false)); subIndex++; } + polylineOffset._Vertexs = polylineOffset._SubCurves.map(c => c.StartPoint); + polylineOffset.Do(); + return polylineOffset; + }; + let polylineOffset1; + let offCurves = newCurves; + //先判断负偏移,0的时候不偏移 + if (minOffset < 0) { + polylineOffset1 = SealedOffset(newCurves, offsetValues, minOffset); + offCurves = polylineOffset1._SubOffsetedCurves.map((s) => s.curve); } - polylineOffset._Vertexs = polylineOffset._SubCurves.map(c => c.StartPoint); - sealedContours = polylineOffset.Do(); + //如果存在正偏移,再偏移一次 + if (maxOffset > 0) { + let polylineOffset2 = SealedOffset(offCurves, offsetValues, maxOffset); + sealedContours = polylineOffset2._RetCurves; + } + else + sealedContours = polylineOffset1._RetCurves; } + let hasSealedErr = false; //如果有多个 取最大 if (sealedContours.length > 1) { + hasSealedErr = true; Toaster({ message: `有板计算封边异常,请检查!(点击左下角提示可以查看该板)`, timeout: 15000, @@ -19577,6 +23131,8 @@ function GetSealedBoardContour(br) { sealedContour, brCurves: curves, highSeals, + highReservedEdges, + hasSealedErr }; return res; } @@ -19598,27 +23154,73 @@ function SetBoardTopDownLeftRightSealData(br, sealDatas, sealCurves, brContourCu // if ((spliteHeight && spliteWidth && spliteThickness) || !br.IsSpecialShape && cus.length === 4) if (br.IsRect && sealCurves.length === 4) { for (let i = 0; i < 4; i++) { + const size = sealDatas[i].size.toString(); + const { sealColor: color = "" } = sealDatas[i]; let derv = sealCurves[i].GetFirstDeriv(0).normalize(); if (isParallelTo(derv, XAxis, 1e-4)) { - if (derv.x * dir > 0) - br.BoardProcessOption[EBoardKeyList.DownSealed] = sealDatas[i].size.toString(); - else - br.BoardProcessOption[EBoardKeyList.UpSealed] = sealDatas[i].size.toString(); + if (derv.x * dir > 0) { + br.BoardProcessOption[EBoardKeyList.DownSealed] = size; + br.BoardProcessOption.sealColorDown = color; + } + else { + br.BoardProcessOption[EBoardKeyList.UpSealed] = size; + br.BoardProcessOption.sealColorUp = color; + } } else { - if (derv.y * dir > 0) - br.BoardProcessOption[EBoardKeyList.RightSealed] = sealDatas[i].size.toString(); - else - br.BoardProcessOption[EBoardKeyList.LeftSealed] = sealDatas[i].size.toString(); + if (derv.y * dir > 0) { + br.BoardProcessOption[EBoardKeyList.RightSealed] = size; + br.BoardProcessOption.sealColorRight = color; + } + else { + br.BoardProcessOption[EBoardKeyList.LeftSealed] = size; + br.BoardProcessOption.sealColorLeft = color; + } } } } else { + if (sealCurves.length === 0) + return; let [left, right, top, bottom] = ParseEdgeSealDir(sealCurves); br.BoardProcessOption[EBoardKeyList.LeftSealed] = sealDatas[left].size.toString(); br.BoardProcessOption[EBoardKeyList.RightSealed] = sealDatas[right].size.toString(); br.BoardProcessOption[EBoardKeyList.UpSealed] = sealDatas[top].size.toString(); br.BoardProcessOption[EBoardKeyList.DownSealed] = sealDatas[bottom].size.toString(); + br.BoardProcessOption.sealColorLeft = sealDatas[left].sealColor ?? ""; + br.BoardProcessOption.sealColorRight = sealDatas[right].sealColor ?? ""; + br.BoardProcessOption.sealColorUp = sealDatas[top].sealColor ?? ""; + br.BoardProcessOption.sealColorDown = sealDatas[bottom].sealColor ?? ""; + } +} +function SetBoardReservedEdgeData(br, sealDatas, sealCurves, brContourCurve) { + let dir = Math.sign((brContourCurve ?? br.ContourCurve).Area2); + sealCurves = sealCurves ?? GetBoardSealingCurves(br); + if (br.IsRect && sealCurves.length === 4) { + for (let i = 0; i < 4; i++) { + let derv = sealCurves[i].GetFirstDeriv(0).normalize(); + if (isParallelTo(derv, XAxis, 1e-4)) { + if (derv.x * dir > 0) + br.BoardProcessOption.reservedEdgeDown = sealDatas[i].size.toString(); + else + br.BoardProcessOption.reservedEdgeUp = sealDatas[i].size.toString(); + } + else { + if (derv.y * dir > 0) + br.BoardProcessOption.reservedEdgeRight = sealDatas[i].size.toString(); + else + br.BoardProcessOption.reservedEdgeLeft = sealDatas[i].size.toString(); + } + } + } + else { + if (sealCurves.length === 0) + return; + let [left, right, top, bottom] = ParseEdgeSealDir(sealCurves); + br.BoardProcessOption.reservedEdgeLeft = sealDatas[left].size.toString(); + br.BoardProcessOption.reservedEdgeRight = sealDatas[right].size.toString(); + br.BoardProcessOption.reservedEdgeUp = sealDatas[top].size.toString(); + br.BoardProcessOption.reservedEdgeDown = sealDatas[bottom].size.toString(); } } function SetBoardEdgeRemarkData(br, remarkDatas, sealCurves, brContourCurve) { @@ -19643,6 +23245,8 @@ function SetBoardEdgeRemarkData(br, remarkDatas, sealCurves, brContourCurve) { } } else { + if (sealCurves.length === 0) + return; let [left, right, top, bottom] = ParseEdgeSealDir(sealCurves); opt.edgeRemarkLeft = remarkDatas[left].description; opt.edgeRemarkRight = remarkDatas[right].description; @@ -19651,6 +23255,1104 @@ function SetBoardEdgeRemarkData(br, remarkDatas, sealCurves, brContourCurve) { } } +//侧面造型分裂 +class SplitBoardSideModelUtil { + constructor(br) { + //备份原始二维刀路在世界坐标系中 + this.OrgBoardOCS = new three.Matrix4(); + this.CacheSideModel = new Map(); + this.OldSealCurves = []; + this.Init(br); + } + Init(br, isSpecialShape = false) { + this.OrgBoardOCS = br.OCS; + let curves = GetBoardSealingCurves(br); + //取消异型操作会提前令isSpecialShape = false + if (isSpecialShape) + SubsectionCurvesOfHightSeal(curves); + let oldSealCurves = []; + for (let c of curves) + if (c instanceof exports.Polyline) + oldSealCurves.push(...c.Explode()); + else + oldSealCurves.push(c); + this.OldSealCurves = oldSealCurves; + const sideModelMap = new Map(); + for (let [num, soilds] of br.SideModelingMap) + sideModelMap.set(num, soilds); + this.CacheSideModel = sideModelMap; + } + CheckSideModel() { + let maxSideIndex = 0; + for (let [num, soilds] of this.CacheSideModel) + maxSideIndex = Math.max(num, maxSideIndex); + return this.OldSealCurves.length >= maxSideIndex; + } + SetBoardSideModel(br) { + if (!this.CacheSideModel.size) + return; + if (this.CheckSideModel()) { + this.SpiltSideModelOfBrContour(br); + } + } + //新轮廓切割原始轮廓 + SpiltSideModelOfBrContour(br) { + let curves = GetBoardSealingCurves(br); + let newSealCurves = []; + for (let c of curves) + if (c instanceof exports.Polyline) + newSealCurves.push(...c.Explode()); + else + newSealCurves.push(c); + let sideMadelMap = new Map(); + for (let [nmu, soilds] of this.CacheSideModel) { + if (soilds?.length) { + let oldCu = this.OldSealCurves[nmu]?.Clone(); + if (!oldCu) + continue; + oldCu.ApplyMatrix(this.OrgBoardOCS); + for (let i = 0; i < newSealCurves.length; i++) { + if (newSealCurves[i] instanceof exports.Arc) + continue; + let newCu = newSealCurves[i].Clone().ApplyMatrix(br.OCSNoClone); + let p = newCu.GetPointAtParam(newCu.EndParam * 0.5); + let spliteEnts = []; + if (oldCu.PtOnCurve(p)) { + let startX = oldCu.GetDistAtPoint(newCu.StartPoint); + let endX = oldCu.GetDistAtPoint(newCu.EndPoint); + if (startX > endX) { + let backStart = startX; + startX = endX; + endX = backStart; + } + let box = new Box3Ext(new three.Vector3(startX), new three.Vector3(endX, br.Thickness)); + let knifePls = []; + for (let soild of soilds) { + if (soild.Thickness <= 0) + continue; + let sCon = soild.ContourCurve.Clone().ApplyMatrix(soild.OCSNoClone); + let thickness = soild.Thickness; + let newNeighborCus = []; + newNeighborCus.push(newSealCurves[FixIndex(i - 1, newSealCurves)].Clone().ApplyMatrix(br.OCSNoClone)); + newNeighborCus.push(newSealCurves[FixIndex(i + 1, newSealCurves)].Clone().ApplyMatrix(br.OCSNoClone)); + const offsetCus = newCu.GetOffsetCurves(-thickness); + const xPtList = [startX, endX]; + for (let cu of offsetCus) { + for (let nbCu of newNeighborCus) { + const intersectPts = cu.IntersectWith(nbCu, IntersectOption.ExtendThis); + for (let pt of intersectPts) { + let { closestPt } = newCu.GetClosestAtPoint(pt, true); + let ptX = oldCu.GetDistAtPoint(closestPt); + xPtList.push(ptX); + } + } + } + xPtList.sort((a, b) => a - b); + for (let x of [xPtList[0], arrayLast(xPtList)]) + knifePls.push(new exports.Polyline([{ pt: AsVector2({ x, y: 0 }), bul: 0 }, { pt: AsVector2({ x, y: 1 }), bul: 0 }])); + let splitSideModelCons = SplitPolyline(sCon, knifePls); + if (!splitSideModelCons.length) + splitSideModelCons.push(sCon); + for (let j = 0; j < splitSideModelCons.length; j++) { + let intersectBox = box.clone().intersect(splitSideModelCons[j].BoundingBox); + if (box.intersectsBox(splitSideModelCons[j].BoundingBox, 1) && !equaln$1(intersectBox.max.x, intersectBox.min.x)) { + let soildClone = soild.Clone(); + soildClone.ContourCurve = splitSideModelCons[j].ApplyMatrix(soild.OCSInv); + soildClone.GrooveCheckAllAutoSplit(); + soildClone.ApplyMatrix(new three.Matrix4().setPosition(-startX, 0, 0)); + spliteEnts.push(soildClone); + } + } + } + if (spliteEnts.length) + sideMadelMap.set(i, spliteEnts); + } + } + } + } + br.SideModelingMap = sideMadelMap; + } + //修改板厚度时裁剪侧面造型 + SpiltSideModelOfBrThickness(br, thickness) { + this.Init(br); + let sideMadelMap = new Map(); + for (let [nmu, soilds] of this.CacheSideModel) { + if (soilds?.length) { + let cu = this.OldSealCurves[nmu]?.Clone(); + if (!cu) + continue; + cu.ApplyMatrix(this.OrgBoardOCS); + let spliteEnts = []; + let knifePls = []; + let box = new Box3Ext(new three.Vector3(), new three.Vector3(cu.Length, thickness)); + for (let soild of soilds) { + if (soild.Thickness <= 0) + continue; + let sCon = soild.ContourCurve.Clone().ApplyMatrix(soild.OCSNoClone); + knifePls.push(new exports.Polyline([{ pt: AsVector2({ x: 0, y: 0 }), bul: 0 }, { pt: AsVector2({ x: 1, y: 0 }), bul: 0 }])); + knifePls.push(new exports.Polyline([{ pt: AsVector2({ x: 0, y: thickness }), bul: 0 }, { pt: AsVector2({ x: 1, y: thickness }), bul: 0 }])); + let splitSideModelCons = SplitPolyline(sCon, knifePls); + if (!splitSideModelCons.length) + splitSideModelCons.push(sCon); + for (let con of splitSideModelCons) { + let intersectBox = box.clone().intersect(con.BoundingBox); + if (box.intersectsBox(con.BoundingBox, 1) && !equaln$1(intersectBox.max.y, intersectBox.min.y)) { + let soildClone = soild.Clone(); + soildClone.ContourCurve = con.ApplyMatrix(soild.OCSInv); + soildClone.GrooveCheckAllAutoSplit(); + spliteEnts.push(soildClone); + } + } + } + if (spliteEnts.length) + sideMadelMap.set(nmu, spliteEnts); + } + } + br.SideModelingMap = sideMadelMap; + } +} + +/** + * 把板件炸开成面域,0,1为正反面,其余的为边面(没有圆弧面) + */ +function Board2Regions(br) { + let ocs = br.OCS; + let cu = br.ContourCurve.Clone(); + if (cu instanceof exports.Circle) + cu = ConverCircleToPolyline$1(cu); + let frontReg = Region.CreateFromCurves([cu.Clone()]); + let regFrontOcs = ocs.clone(); + regFrontOcs.setPosition(br.Position.add(br.Normal.multiplyScalar(br.Thickness))); + frontReg.ApplyMatrix(regFrontOcs); + let backReg = Region.CreateFromCurves([cu.Flip()]); + backReg.ApplyMatrix(ocs); + let resultRegs = [frontReg, backReg]; + //edges + let lines = cu.Explode().filter(c => c instanceof exports.Line); + for (let l of lines) { + let rectPl = new exports.Polyline().Rectangle(l.Length, br.Thickness); + let reg = Region.CreateFromCurves([rectPl]); + if (!reg) + continue; + let p = l.StartPoint.applyMatrix4(ocs); + let x = l.GetFirstDeriv(0).transformDirection(ocs); + let y = br.Normal; + let z = new three.Vector3().crossVectors(x, y); + let mtx = new three.Matrix4().makeBasis(x, y, z).setPosition(p); + reg.ApplyMatrix(mtx); + resultRegs.push(reg); + } + return resultRegs; +} + +/**序列化板件数据 */ +function serializeBoardData(file, processData) { + file.Write(processData[EBoardKeyList.RoomName]); + file.Write(processData[EBoardKeyList.CabinetName]); + file.Write(processData[EBoardKeyList.BrMat]); + file.Write(processData[EBoardKeyList.Mat]); + file.Write(processData[EBoardKeyList.Color]); + file.Write(processData[EBoardKeyList.Lines]); + file.Write(processData[EBoardKeyList.BigHole]); + file.Write(processData[EBoardKeyList.DrillType]); + file.Write(processData[EBoardKeyList.ComposingFace]); + file.Write(processData[EBoardKeyList.HighSealed].length); + for (let n of processData[EBoardKeyList.HighSealed]) { + file.Write(n.size); + file.Write(n.sealColor); + } + file.Write(processData[EBoardKeyList.UpSealed]); + file.Write(processData[EBoardKeyList.DownSealed]); + file.Write(processData[EBoardKeyList.LeftSealed]); + file.Write(processData[EBoardKeyList.RightSealed]); + file.Write(processData.spliteHeight); + file.Write(processData.spliteWidth); + file.Write(processData.spliteThickness); + file.Write(processData.highDrill.length); + for (let n of processData.highDrill) + file.Write(n); + file.Write(processData.frontDrill); + file.Write(processData.backDrill); + file.Write(processData.remarks.length); + for (let d of processData.remarks) { + file.Write(d[0]); + file.Write(d[1]); + } +} +//反序列化板件数据 +function deserializationBoardData(file, processData, ver) { + processData[EBoardKeyList.RoomName] = file.Read(); + processData[EBoardKeyList.CabinetName] = file.Read(); + processData[EBoardKeyList.BrMat] = file.Read(); + processData[EBoardKeyList.Mat] = file.Read(); + processData[EBoardKeyList.Color] = file.Read(); + processData[EBoardKeyList.Lines] = file.Read(); + processData[EBoardKeyList.BigHole] = file.Read(); + processData[EBoardKeyList.DrillType] = file.Read(); + processData[EBoardKeyList.ComposingFace] = file.Read(); + let count = file.Read(); + processData[EBoardKeyList.HighSealed].length = 0; + for (let i = 0; i < count; i++) { + let size = file.Read(); + let sealColor = ""; + if (ver > 23) { + sealColor = file.Read(); + } + if (ver < 4) { + file.Read(); + } + processData[EBoardKeyList.HighSealed].push({ size, sealColor }); + } + processData[EBoardKeyList.UpSealed] = file.Read(); + processData[EBoardKeyList.DownSealed] = file.Read(); + processData[EBoardKeyList.LeftSealed] = file.Read(); + processData[EBoardKeyList.RightSealed] = file.Read(); + processData.spliteHeight = file.Read(); + processData.spliteWidth = file.Read(); + processData.spliteThickness = file.Read(); + count = file.Read(); + processData.highDrill = file.ReadArray(count); + processData.frontDrill = file.Read(); + processData.backDrill = file.Read(); + if (ver >= 7) { + let count = file.Read(); + processData.remarks.length = 0; + for (let i = 0; i < count; i++) { + let d = ["", ""]; + d[0] = file.Read(); + d[1] = file.Read(); + processData.remarks.push(d); + } + } +} +function SerializeBoard2DModeingData(file, modelList) { + file.Write(modelList.length); + for (let data of modelList) { + file.WriteObject(data.path); + file.Write(data.dir); + file.Write(data.items.length); + for (let item of data.items) { + file.Write(item.depth); + file.Write(item.offset); + file.Write(item.knife.id); + file.Write(item.knife.radius); + file.Write(item.knife.angle); + file.Write(item.knife.name); + file.Write(item.depthExpr); + } + } +} +function SerializeBoard3DModeingData(file, modelList) { + file.Write(modelList.length); + for (let item of modelList) { + file.Write(item.path.length); + for (let d of item.path) { + file.Write(d.pt.toArray()); + file.Write(d.bul); + } + file.Write(item.dir); + file.Write(item.knife.id); + file.Write(item.knife.radius); + file.Write(item.knife.angle); + file.Write(item.knife.name); + } +} +//反序列化板件数据 +function DeserializationBoard2DModeingData(file, data, ver) { + data.length = 0; + const count = file.Read(); + for (let i = 0; i < count; i++) { + let path = file.ReadObject(); + let dir = file.Read(); + let m = { + path, + dir, + items: [] + }; + const itemCount = file.Read(); + for (let j = 0; j < itemCount; j++) { + let depth = file.Read(); + let offset = file.Read(); + let knifeId = file.Read(); + let knifeRad = file.Read(); + let knifeAngle = file.Read(); + let knifeName = file.Read(); + let depthExpr; + if (ver > 19) { + depthExpr = file.Read(); + } + else { + depthExpr = depth.toString(); + } + m.items.push({ + depth, offset, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName }, depthExpr + }); + } + data.push(m); + } +} +//反序列化板件数据 +function DeserializationBoard3DModeingData(file, data, ver) { + data.length = 0; + const count = file.Read(); + for (let i = 0; i < count; i++) { + let pathCount = file.Read(); + let path = []; + for (let i = 0; i < pathCount; i++) { + let pt = new three.Vector3().fromArray(file.Read()); + let bul = file.Read(); + path.push({ pt, bul }); + } + let dir = file.Read(); + let knifeId = file.Read(); + let knifeRad = file.Read(); + let knifeAngle = file.Read(); + let knifeName = file.Read(); + data.push({ + path, dir, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName } + }); + } +} +function SerializeBoardSideModeingData(file, sideModelingMap) { + file.Write(sideModelingMap.size); + for (let [index, sideModelingList] of sideModelingMap) { + file.Write(index); + file.Write(sideModelingList.length); + for (let data of sideModelingList) + file.WriteObject(data); + } +} +function DeserializationBoardSideModeingData(file, sideModelingMap) { + sideModelingMap.clear(); + const count = file.Read(); + for (let i = 0; i < count; i++) { + let index = file.Read(); + let listCount = file.Read(); + let sideModelingList = []; + for (let j = 0; j < listCount; j++) { + let obj = file.ReadObject(); + sideModelingList.push(obj); + } + sideModelingMap.set(index, sideModelingList); + } +} + +const _TerminateTaskInjectInteractionFunctions = []; +function TerminateCSGTask(task) { + for (let f of _TerminateTaskInjectInteractionFunctions) + f(task); +} + +class PointShapeUtils { + //方形点表 + static SquarePts(size) { + return [ + new three.Vector3(-size, -size), + new three.Vector3(size, -size), + new three.Vector3(size, size), + new three.Vector3(-size, size), + new three.Vector3(-size, -size), + ]; + } + //方形外圈十字直线点表 + static OutsideLinePts(squareSize, lineLength) { + return [ + //-X + new three.Vector3(-squareSize, 0), + new three.Vector3(-lineLength, 0), + //X + new three.Vector3(squareSize, 0), + new three.Vector3(lineLength, 0), + //Y + new three.Vector3(0, squareSize), + new three.Vector3(0, lineLength), + //-Y + new three.Vector3(0, -squareSize), + new three.Vector3(0, -lineLength), + ]; + } + //十字直线点表 + static CrossLinePts(lineLength) { + return [ + new three.Vector3(0, -lineLength), + new three.Vector3(0, lineLength), + new three.Vector3(lineLength, 0), + new three.Vector3(-lineLength, 0), + ]; + } + static CrossLine3DPts(lineLength) { + return [ + [new three.Vector3(lineLength, 0), + new three.Vector3(-lineLength / 2, 0)], + [new three.Vector3(0, -lineLength / 2), + new three.Vector3(0, lineLength)], + [new three.Vector3(0, 0, -lineLength / 2), + new three.Vector3(0, 0, lineLength)], + ]; + } + static TrianglePts(size) { + return [ + new three.Vector3(size, -size), + new three.Vector3(0, size), + new three.Vector3(-size, -size), + new three.Vector3(size, -size), + ]; + } + static CirclePts(size) { + let pts = []; + let a = Math.PI * 2 / 8; + for (let i = 0; i < 9; i++) + pts.push(new three.Vector3(Math.sin(a * i) * size, Math.cos(a * i) * size)); + return pts; + } + static ObliqueCrossPts(size) { + return [new three.Vector3(-size, size), new three.Vector3(size, -size), new three.Vector3(-size, -size), new three.Vector3(size, size)]; + } + static ObliqueCrossLinePts(size) { + return [new three.Vector3(-size, size), new three.Vector3(size, -size), new three.Vector3(), new three.Vector3(-size, -size), new three.Vector3(size, size)]; + } + static SandClockPts(size) { + return [ + new three.Vector3(size, size), + new three.Vector3(-size, size), + new three.Vector3(size, -size), + new three.Vector3(-size, -size), + new three.Vector3(size, size), + ]; + } + static TangentPts(size) { + let pts = [ + new three.Vector3(-size, size), + new three.Vector3(size, size), + new three.Vector3(size / 2, size), + ]; + let a = Math.PI * 2 / 8; + for (let i = 0; i < 9; i++) + pts.push(new three.Vector3(Math.sin(a * i + Math.PI / 2) * size, Math.cos(a * i + Math.PI / 2) * size)); + return pts; + } + static PerPts(size) { + return [ + new three.Vector3(-size, size), + new three.Vector3(-size, -size), + new three.Vector3(size, -size), + new three.Vector3(0, -size), + new three.Vector3(0, 0), + new three.Vector3(-size, 0), + ]; + } + static LinesDirPts(len, width, lineType) { + if (lineType === LinesType.Reverse) { + return [ + new three.Vector3(-len / 2), new three.Vector3(-len / 2 + width / 2, width / 2), + new three.Vector3(-len / 2), new three.Vector3(-len / 2 + width / 2, -width / 2), + new three.Vector3(-len / 2), new three.Vector3(len / 2), + new three.Vector3(len / 2), new three.Vector3(len / 2 - width / 2, width / 2), + new three.Vector3(len / 2), new three.Vector3(len / 2 - width / 2, -width / 2), + ]; + } + else if (lineType === LinesType.Positive) + return [ + new three.Vector3(0, -len / 2), new three.Vector3(-width / 2, -len / 2 + width / 2), + new three.Vector3(0, -len / 2), new three.Vector3(width / 2, -len / 2 + width / 2), + new three.Vector3(0, -len / 2), new three.Vector3(0, len / 2), + new three.Vector3(0, len / 2), new three.Vector3(-width / 2, len / 2 - width / 2), + new three.Vector3(0, len / 2), new three.Vector3(width / 2, len / 2 - width / 2), + ]; + else { + let w1 = Math.min(len, width) / 5; + return [ + new three.Vector3(0, len / 2), new three.Vector3(0, -len / 2), + new three.Vector3(-width / 2), new three.Vector3(width / 2), + new three.Vector3(-width / 2), new three.Vector3(-width / 2 + w1, w1), + new three.Vector3(-width / 2), new three.Vector3(-width / 2 + w1, -w1), + new three.Vector3(width / 2), new three.Vector3(width / 2 - w1, w1), + new three.Vector3(width / 2), new three.Vector3(width / 2 - w1, -w1), + new three.Vector3(0, len / 2), new three.Vector3(-w1, len / 2 - w1), + new three.Vector3(0, len / 2), new three.Vector3(w1, len / 2 - w1), + new three.Vector3(0, -len / 2), new three.Vector3(-w1, -len / 2 + w1), + new three.Vector3(0, -len / 2), new three.Vector3(w1, -len / 2 + w1), + ]; + } + } + //开门方向纹路 + static LinesOpenDirPts(len, width, openDir) { + if (openDir === BoardOpenDir.Right) { + return [ + new three.Vector3(-width / 2, -len / 2), new three.Vector3(width / 2, 0), + new three.Vector3(width / 2, 0), new three.Vector3(-width / 2, len / 2) + ]; + } + else if (openDir === BoardOpenDir.Left) { + return [ + new three.Vector3(width / 2, -len / 2), new three.Vector3(-width / 2, 0), + new three.Vector3(-width / 2, 0), new three.Vector3(width / 2, len / 2) + ]; + } + else if (openDir === BoardOpenDir.Up) { + return [ + new three.Vector3(-width / 2, -len / 2), new three.Vector3(0, len / 2), + new three.Vector3(0, len / 2), new three.Vector3(width / 2, -len / 2) + ]; + } + else if (openDir === BoardOpenDir.Down) { + return [ + new three.Vector3(-width / 2, len / 2), new three.Vector3(0, -len / 2), + new three.Vector3(0, -len / 2), new three.Vector3(width / 2, len / 2) + ]; + } + } +} + +/** + * 封边视图下和修改封边时显示的实体 + */ +class SealSolid extends Entity { + constructor(pathCurve, sealWidth) { + super(); + this.OnlyRenderType = true; + this._PathCurve = pathCurve; + this._SealWidth = sealWidth; + if (this._PathCurve) { + let path = this._PathCurve; + this.OCS = path.OCSNoClone; + this._SpaceOCS.copy(path.OCSNoClone); + let ocsInv = this.OCSInv; + this._PathCurve.ApplyMatrix(ocsInv); + } + } + get MeshGeometry() { + if (this._MeshGeometry) + return this._MeshGeometry; + let z0 = 0; + let z1 = this._SealWidth; + let coords = []; + let pts = this._PathCurve.Shape.getPoints(); + for (let i = 0; i < pts.length - 1; i++) { + let p = pts[i]; + let nextp = pts[FixIndex$1(i + 1, pts)]; + coords.push(p.x, p.y, z0, nextp.x, nextp.y, z1, nextp.x, nextp.y, z0, p.x, p.y, z0, p.x, p.y, z1, nextp.x, nextp.y, z1); + } + let edgeGeo = new three.BufferGeometry(); + edgeGeo.setAttribute('position', new three.Float32BufferAttribute(coords, 3)); + edgeGeo.computeVertexNormals(); + this._MeshGeometry = edgeGeo; + return this._MeshGeometry; + } + get EdgeGeometry() { + if (this._EdgeGeometry) + return this._EdgeGeometry; + let z0 = 0; + let z1 = this._SealWidth; + let coords = []; + const pl = this._PathCurve; + let pts = pl.Shape.getPoints(); + for (let i = 0; i < pts.length - 1; i++) { + let p = pts[i]; + let nextp = pts[FixIndex$1(i + 1, pts)]; + coords.push(p.x, p.y, z0, nextp.x, nextp.y, z0); + coords.push(p.x, p.y, z1, nextp.x, nextp.y, z1); + if (p["_mask_"]) + coords.push(p.x, p.y, z0, p.x, p.y, z1); + } + let edgeGeo = new three.BufferGeometry(); + edgeGeo.setAttribute('position', new three.Float32BufferAttribute(coords, 3)); + edgeGeo.computeVertexNormals(); + this._EdgeGeometry = edgeGeo; + return this._EdgeGeometry; + } + InitDrawObject(renderType) { + const mtl = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex); + mtl.transparent = true; + mtl.opacity = 0.3; + return new three.Object3D().add(new three.Mesh(this.MeshGeometry, mtl), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex))); + } + UpdateDrawGeometry() { + if (this._EdgeGeometry) + this._EdgeGeometry.dispose(); + this._EdgeGeometry = undefined; + if (this._MeshGeometry) + this._MeshGeometry.dispose(); + this._MeshGeometry = undefined; + } + ClearDraw() { + this.UpdateDrawGeometry(); + return super.ClearDraw(); + } + UpdateDrawObject(renderType, obj) { + DisposeThreeObj(obj); + Object3DRemoveAll(obj); + const mtl = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex); + mtl.transparent = true; + mtl.opacity = 0.3; + return obj.add(new three.Mesh(this.MeshGeometry, mtl), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex))); + } + /** + * 当实体需要被更新时,更新实体材质 + */ + UpdateDrawObjectMaterial(renderType, obj) { + const mtl = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex); + mtl.transparent = true; + mtl.opacity = 0.3; + return obj.add(new three.Mesh(this.MeshGeometry, mtl), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex))); + } + ApplyMatrix(m) { + this.WriteAllObjectRecord(); + if (equaln$1(m.getMaxScaleOnAxis(), 1)) { + let xA = new three.Vector3(); + let yA = new three.Vector3(); + let zA = new three.Vector3(); + m.extractBasis(xA, yA, zA); + if (!equalv3(xA.clone().cross(yA).normalize(), zA)) + this.ApplyMirrorMatrix(m); + else { + this._Matrix.multiplyMatrices(m, this._Matrix); + this._SpaceOCS.multiplyMatrices(m, this._SpaceOCS); + this.Update(exports.UpdateDraw.Matrix); + } + } + else { + this.ApplyScaleMatrix(m); + } + return this; + } +} + +var FontStyleKeyCode; +(function (FontStyleKeyCode) { + FontStyleKeyCode[FontStyleKeyCode["Height"] = 1] = "Height"; + FontStyleKeyCode[FontStyleKeyCode["WidthFactor"] = 2] = "WidthFactor"; + FontStyleKeyCode[FontStyleKeyCode["FontType"] = 3] = "FontType"; +})(FontStyleKeyCode || (FontStyleKeyCode = {})); + +/** + * 字体样式 + */ +let FontStyleRecord = class FontStyleRecord extends SymbolTableRecord { + constructor() { + super(...arguments); + /** 字体高度 1 */ + this.Height = 60; //1 + /** 宽度因子 2 字符串间距 */ + this.WidthFactor = 1; + /** 样式类型 3 */ + this.FontType = FontType.YaHei; + //#endregion + } + //#region -------------------------File------------------------- + //对象从文件中读取数据,初始化自身 + ReadFile(file) { + file.Read(); + super.ReadFile(file); + this.Height = file.Read(); + this.WidthFactor = file.Read(); + this.FontType = file.Read(); + } + //对象将自身数据写入到文件. + WriteFile(file) { + file.Write(1); + super.WriteFile(file); + file.Write(this.Height); + file.Write(this.WidthFactor); + file.Write(this.FontType); + } +}; +__decorate([ + AutoRecord +], FontStyleRecord.prototype, "Height", void 0); +__decorate([ + AutoRecord +], FontStyleRecord.prototype, "WidthFactor", void 0); +__decorate([ + AutoRecord +], FontStyleRecord.prototype, "FontType", void 0); +FontStyleRecord = __decorate([ + Factory +], FontStyleRecord); + +const TEXT_HEIGHT_SCALE = 1.35; +var TextAligen; +(function (TextAligen) { + TextAligen[TextAligen["LeftTop"] = 3] = "LeftTop"; + TextAligen[TextAligen["Top"] = 1] = "Top"; + TextAligen[TextAligen["RightTop"] = 5] = "RightTop"; + TextAligen[TextAligen["LeftMid"] = 2] = "LeftMid"; + TextAligen[TextAligen["Mid"] = 0] = "Mid"; + TextAligen[TextAligen["RightMid"] = 4] = "RightMid"; + TextAligen[TextAligen["LeftDown"] = 10] = "LeftDown"; + TextAligen[TextAligen["Down"] = 8] = "Down"; + TextAligen[TextAligen["RightDown"] = 12] = "RightDown"; +})(TextAligen || (TextAligen = {})); +// 多层lineHeight比例计算方式: +// src\DatabaseServices\Text\FontExt.ts createPaths函数中 +// textHeight * (textType.boundingBox.yMax - textType.boundingBox.yMin + textType.underlineThickness) / textType.resolution +const LineHeightScaleMap = { + [FontType.YaHei]: 1.875, // (1439+355+81) / 1000 + [FontType.SongTi]: 1.834, // (1369+437+28) / 1000 + [FontType.KaiTi]: 1.514, // (1194 +255 + 65) / 1000 + [FontType.FangSong]: 1.487, // (1194 +228 + 65) / 1000 + [FontType.LiShu]: 1.58, // (1194 +315 + 71) / 1000 + [FontType.HeiTi]: 1.476, // (1194 +217 +65 ) / 1000 + [FontType.HuaWenLiShu]: 1.499, // (1111 +360 +28 ) / 1000 + [FontType.HuaWenXingKai]: 1.543, // (1114 +401 +28 ) / 1000 +}; +/** + * 单/多行文字实体 + */ +let Text = class Text extends Entity { + constructor(pos, _TextString = "", _TextRotation = 0, fontName, widthFactor) { + super(); + this._TextString = _TextString; + this._TextRotation = _TextRotation; + this.OnlyRenderType = true; + this._FontStyleOverride = new Map; //字体样式替代 + this._RoomName = ""; + this._CabinetName = ""; + this._Align = TextAligen.LeftDown; + this.IsDoubleMesh = false; //文字使用双面网格体 + this.IsFsText = false; //文字写在俯视图上 + pos && this._Matrix.setPosition(pos); + this.FontStyle = HostApplicationServices.CurrentFontStyle; + if (fontName) + this.FontName = fontName; + if (widthFactor) + this.WidthFactor = widthFactor; + } + get RoomName() { return this._RoomName; } + set RoomName(value) { + if (value === this._RoomName) + return; + this.WriteAllObjectRecord(); + this._RoomName = value; + } + get CabinetName() { return this._CabinetName; } + set CabinetName(value) { + if (value === this._CabinetName) + return; + this.WriteAllObjectRecord(); + this._CabinetName = value; + } + get TextRotation() { + return this._TextRotation; + } + set TextRotation(v) { + if (this._TextRotation === v) + return; + this.WriteAllObjectRecord(); + this._TextRotation = v; + this.UpdateTranslate(); + } + get TextString() { + return this._TextString; + } + set TextString(str) { + if (str !== this._TextString) { + this.WriteAllObjectRecord(); + this._TextString = str; + this.Update(); + } + } + set TextAligen(al) { + if (al === this._Align) + return; + this.WriteAllObjectRecord(); + this._Align = al; + this.UpdateTranslate(); + } + get TextAligen() { + return this._Align; + } + /**设置字体样式 */ + set FontStyle(styleId) { + if (styleId === this._FontStyle) + return; + this.WriteAllObjectRecord(); + this._FontStyle = styleId; + this.Update(); + } + /**大概多行文字的高度 */ + get MultiHeight() { + // this.Height 为用户初始化设置的高度。 + // 但是this.Height和实际渲染高度不一致。所以使用高度乘以比例scale,这样行高会精确一点。 + // 如果需要精确的,可以绘制完后,再获取实际高度。 + const scale = LineHeightScaleMap[this.FontName] || LineHeightScaleMap[FontType.SongTi]; + if (this._TextString.includes("\n")) { + let texts = this._TextString.split("\n"); + const scale = LineHeightScaleMap[this.FontName] || LineHeightScaleMap[FontType.SongTi]; + return texts.length * this.Height * scale; + } + return this.Height * scale; + } + get FontStyle() { return this._FontStyle; } + //字体样式名称 + get FontName() { + return this.GetFontStyleValue(FontStyleKeyCode.FontType); + } + set FontName(fontName) { + this.SetFontStyleOverrideValue(FontStyleKeyCode.FontType, fontName); + } + //字体尺寸大小 + get Height() { + return this.GetFontStyleValue(FontStyleKeyCode.Height); + } + set Height(value) { + this.SetFontStyleOverrideValue(FontStyleKeyCode.Height, value); + } + //字体间距 + get WidthFactor() { + return this.GetFontStyleValue(FontStyleKeyCode.WidthFactor); + } + set WidthFactor(value) { + this.SetFontStyleOverrideValue(FontStyleKeyCode.WidthFactor, value); + } + get FontStyleOverride() { + return this._FontStyleOverride; + } + GetFontStyleOverrideValue(key) { return this._FontStyleOverride.get(key); } + GetFontStyleValue(key) { + let value = this.GetFontStyleOverrideValue(key); + if (value !== undefined) + return value; + if (this._FontStyle?.Object) + return this._FontStyle.Object[FontStyleKeyCode[key]]; + if (HostApplicationServices.CurrentFontStyle && HostApplicationServices.CurrentFontStyle.Object instanceof FontStyleRecord) + return HostApplicationServices.CurrentFontStyle.Object[FontStyleKeyCode[key]]; + } + //设置覆盖的样式 + SetFontStyleOverrideValue(key, value) { + if (this.GetFontStyleOverrideValue(key) === value) + return; + this.WriteAllObjectRecord(); + let oldV = this.GetFontStyleValue(key); + this._FontStyleOverride.set(key, value); + if (oldV !== value) + this.Update(); + } + ClearFontStyleOverride() { + if (this._FontStyleOverride.size === 0) + return; + this.WriteAllObjectRecord(); + this._FontStyleOverride.clear(); + this.Update(); + } + //创建字体对象 + async AsyncUpdateDrawObject(obj, renderType) { + } + /**大概宽度 */ + get Width() { + let count = 0; + const textStr = this._TextString.split("\n"); + for (const txt of textStr) { + let cTemp = 0; + for (let i = 0; i < txt.length; i++) { + const code = txt.charCodeAt(i); + if (code > 255) + cTemp++; + else + cTemp += 0.5; + } + count = Math.max(count, cTemp); + } + return count * this.Height * TEXT_HEIGHT_SCALE * this.WidthFactor; + } + get HasBoundingBox() { return this._CacheDrawObject.has(RenderType.Wireframe); } + get BoundingBox() { + let obj = this._CacheDrawObject.get(RenderType.Wireframe); + if (obj && obj.children.length === 1) + return GetBox(obj); + return this.BoundingBoxInOCS.applyMatrix4(new three.Matrix4().makeRotationZ(this.TextRotation)).applyMatrix4((this.OCSNoClone)); + } + get BoundingBoxInOCS() { + let width = this.Width; + let height = this.MultiHeight; + let obj = this._CacheDrawObject.get(RenderType.Wireframe); + if (obj && obj.children.length === 1) { + let geo = obj.children[0].geometry; + if (geo) { + if (!geo.boundingBox) + geo.computeBoundingBox(); + width = geo.boundingBox.max.x - geo.boundingBox.min.x; + height = geo.boundingBox.max.y - geo.boundingBox.min.y; + } + } + let w = Math.max(Math.abs(width / 2), 1); + let h = Math.max(Math.abs(height / 2), 1); + let box = new Box3Ext(new three.Vector3(-w, -h, 0), new three.Vector3(w, h, 0)); + let offset = new three.Vector3; + if (this.TextAligen & TextAligen.LeftMid) + offset.x = w; + if (this.TextAligen & TextAligen.RightMid) + offset.x = -w; + if (this.TextAligen & TextAligen.Top) + offset.y = -h; + if (this.TextAligen & TextAligen.Down) + offset.y = h; + box.translate(offset); + return box; + } + UpdateTranslate() { + for (let [type, obj] of this._CacheDrawObject) { + this.UpdateObjectTranslate(obj); + } + } + UpdateObjectTranslate(obj) { + if (obj.children.length > 0) { + let [mesh, mesh2] = obj.children; + let box = mesh.geometry.boundingBox; + let p = new three.Vector3(); + if (this._Align & TextAligen.LeftMid) + p.x = box.min.x; + else if (this._Align & TextAligen.RightMid) + p.x = box.max.x; + else + p.x = (box.min.x + box.max.x) / 2; + if (this._Align & TextAligen.Top) + p.y = box.max.y; + else if (this._Align & TextAligen.Down) + p.y = box.min.y; + else + p.y = (box.min.y + box.max.y) / 2; + mesh.matrix = new three.Matrix4().makeRotationZ(this.TextRotation).multiply(new three.Matrix4().setPosition(p.negate())); + if (mesh2 && this.IsDoubleMesh) { + //左右视图时应该这样,俯视图是X,-Y,-Z(y+=(xxx) + if (this.IsFsText) { + p.y += (box.max.y - box.min.y); + mesh2.matrix = new three.Matrix4().makeBasis(XAxis, YAxisN, ZAxisN).premultiply(new three.Matrix4().makeRotationZ(this.TextRotation).multiply(new three.Matrix4().setPosition(p))); + } + else { + p.x += (box.max.x - box.min.x); + mesh2.matrix = new three.Matrix4().makeBasis(XAxisN, YAxis, ZAxisN).premultiply(new three.Matrix4().makeRotationZ(this.TextRotation).multiply(new three.Matrix4().setPosition(p))); + } + } + obj.updateMatrixWorld(true); + } + } + ApplyMatrix(m) { + super.ApplyMatrix(m); + return this; + } + ApplyScaleMatrix(m) { + this.WriteAllObjectRecord(); + let p1 = this.Position; + let p2 = new three.Vector3(0, this.Height).applyMatrix4(this.OCS); + [p1, p2].forEach(p => p.applyMatrix4(m)); + this.Position = p1; + this.Height = p1.distanceTo(p2); + return this; + } + InitDrawObject(renderType = RenderType.Wireframe) { + let g = new three.Object3D(); + if (renderType !== RenderType.Wireframe) { + let obj = this.CacheDrawObject.get(RenderType.Wireframe); + if (obj && obj.children.length === 1 && obj.children[0].geometry) { + let color = (renderType > 100 || renderType === RenderType.Print) ? 0 : this.DrawColorIndex; + let mesh = new three.Mesh(obj.children[0].geometry, ColorMaterial.GetBasicMaterial(color)); + g.add((mesh)); + g.updateMatrixWorld(true); + this.UpdateObjectTranslate(g); + return g; + } + } + this.AsyncUpdateDrawObject(g, renderType); + return g; + } + UpdateDrawObject(type, obj) { + this.AsyncUpdateDrawObject(obj, type); + } + UpdateDrawObjectMaterial(renderType, en) { + if (en && en.children.length === 1) { + let mesh = en.children[0]; + //因为我们是OnlyRnderType 所以Print会变成WireframePrint,所以要用下面的写法 + let color = (renderType > 100 || renderType === RenderType.Print) ? 0 : this.DrawColorIndex; + mesh.material = ColorMaterial.GetBasicMaterialDoubleSide(color); + } + } + GetGripPoints() { + return [this.Position, new three.Vector3(0, this.Height).applyMatrix4(this.OCS)]; + } + MoveGripPoints(indexList, vec) { + if (indexList[0] === 0) + this.Position = this.Position.add(vec); + else { + let v = vec.clone().applyMatrix4(this.OCSInv.setPosition(new three.Vector3)); + this.Height = this.Height + v.y; + } + } + //捕捉点 + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + if (snapMode === ObjectSnapMode.End) { + let box = this.BoundingBoxInOCS; + let p2 = new three.Vector3(box.min.x, box.max.y); + let p3 = new three.Vector3(box.max.x, box.min.y); + let pts = [box.min, p2, p3, box.max]; + for (let p of pts) + p.applyMatrix4(this.OCSNoClone); + return pts; + } + return []; + } + GetStretchPoints() { + return [this.Position]; + } + MoveStretchPoints(indexList, vec) { + this.ApplyMatrix(MoveMatrix(vec)); + } + //#region -----------------------------File----------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + ReadFontStyle(file) { + this._FontStyleOverride.clear(); + let size = file.Read(); + for (let i = 0; i < size; i++) { + let k = file.Read(); + let v = file.Read(); + this._FontStyleOverride.set(k, v); + } + } + WriteFontStyle(file) { + file.Write(this._FontStyleOverride.size); + for (let [k, v] of this._FontStyleOverride) { + file.Write(k); + file.Write(v); + } + } + //对象从文件中读取数据,初始化自身 + _ReadFile(file) { + super._ReadFile(file); + let ver = file.Read(); //1 + this._TextString = file.Read(); + if (ver < 2) + this.Height = file.Read(); + this.TextRotation = file.Read(); + if (ver < 2) + this.FontName = file.Read(); + this._Align = file.Read(); + //从版本2开始使用FontStyle + if (ver >= 2) { + this.ReadFontStyle(file); + this._FontStyle = file.ReadHardObjectId() ?? HostApplicationServices.CurrentFontStyle; + } + if (ver > 2) { + this._RoomName = file.Read(); + this._CabinetName = file.Read(); + } + } + //对象将自身数据写入到文件. + WriteFile(file) { + super.WriteFile(file); + file.Write(3); //ver + file.Write(this._TextString); + file.Write(this.TextRotation); + file.Write(this._Align); + this.WriteFontStyle(file); + file.WriteHardObjectId(this._FontStyle); + file.Write(this._RoomName); + file.Write(this._CabinetName); + } +}; +Text = __decorate([ + Factory +], Text); + var Board_1; //排钻配置名是合法的 可用的 function IsValidDriName(name) { @@ -19680,19 +24382,344 @@ let Board = Board_1 = class Board extends ExtrudeSolid { this._IsChaiDan = true; this._2DModelingList = []; this._3DModelingList = []; + //侧面造型 + this._SideModelingMap = new Map(); this._CustomNumber = null; //自定义编号 this._DrillLock = false; //排钻独立锁 this._DrillAssociationLock = new Set(); //排钻关联锁 + //放样路径 基于OPt X Z -Y 坐标系为基准的路径 + this._SweepPath = undefined; + this._SweepAngle = 0; + /** 见光面 */ + this._SweepVisibleFace = FaceDirection.Front; + this._SweepArcBoardBuild = undefined; //用于建模和计算的类 不保证其正确性(绘制更新可能存在延迟) + //圆弧板每一段圆弧的槽配置 + this._ArcBoardOptions = new Map(); + this._isDrawArcGroove = true; + this.arcBoardFeedProcess = ArcBoardFeedProcess.Slots; //圆弧板槽加工工艺 //仅在渲染器中使用倒角 this.bevelEnabled = true; //二维刀路 id -> polyline this._KnifePolylineMap = new Map(); + this._FixContourByArcSweepPath_Ing = false; + //侧面关联槽 + this.RelevanceSideModelMap = new Map(); + this.UpdateSplitBoardSideModelUtil = true; + this._asyncSideModelIng = false; this._workerCalcedGeom = null; //worker计算后,暂时存入到这里 - this._async2DPathIng = false; + this._async2DPathIng = false; //二维刀路构建进行中 //偏移缓存 this.OffsetPathCache = new Map(); this.InitBoardData(); } + get BoundingBoxInOCS() { + if (this._SweepPath) + return new Box3Ext().copy(this.MeshGeometry.boundingBox); + return super.BoundingBoxInOCS; + } + get BoundingBox() { + if (this._SweepPath) { + let geom = this.MeshGeometry; + const position = geom.attributes.position; + if (position) { + let vec = new three.Vector3; + let box = new Box3Ext; + for (let i = 0, il = position.count; i < il; i++) { + vec.fromBufferAttribute(position, i); + vec.applyMatrix4(this.OCSNoClone); + box.expandByPoint(vec); + } + return box; + } + } + return super.BoundingBox; + } + get IsDrawArcGroove() { + return this._isDrawArcGroove; + } + set IsDrawArcGroove(v) { + this.WriteAllObjectRecord(); + this._isDrawArcGroove = v; + } + /** + * path 发生改变,更新圆弧配置 + * @param {{ key: number, arc: Arc; }[]} oldArcs 旧圆弧和对应的board options key + * @param {Polyline} nPath 新路径(未进行起点偏移) + * @return {*} {void} + */ + UpdateArcBoardOptionsByPath(oldArcs, nPath) { + if (oldArcs.length === 0) + return; + const nCurves = nPath.Explode(); + const newArcs = []; + for (let i = 0; i < nCurves.length; i++) + if (nCurves[i] instanceof exports.Arc) + newArcs.push({ key: i, arc: nCurves[i] }); + const newOpts = new Map(); + const oldOpts = this._ArcBoardOptions; + newOpts.set(-1, oldOpts.get(-1)); + // 设置新圆弧对应的原始配置 + for (let i = 0; i < newArcs.length; i++) + for (const item of oldArcs) { + const oldArc = item.arc; + const oldKey = item.key; + const newArc = newArcs[i].arc; + const newKey = newArcs[i].key; + if (equalv3(newArc.StartPoint, oldArc.StartPoint, 1e-5) || equalv3(newArc.EndPoint, oldArc.EndPoint, 1e-5)) // 若圆弧的头或尾部位置相同,说明是同一段圆弧 + { + newOpts.set(newKey, { ...oldOpts.get(oldKey), arcLength: parseFloat(FixedNotZero(newArc.Length, 5)) }); + break; + } + } + // 曲线从头拉到尾部后面,或者从尾拉到头部前面 + if (newArcs.length === 1 && newOpts.size === 1) { + let oldArcIndex = 0; // 第一个圆弧 + if (equalv3(newArcs[0].arc.StartPoint, arrayLast(oldArcs).arc.EndPoint, 1e-3)) // 从头拉伸到尾部后面,则新圆弧的起点和旧圆弧的尾点相等。 + oldArcIndex = oldArcs.length - 1; // 最后一个圆弧 + const oldKey = oldArcs[oldArcIndex].key; + const newKey = newArcs[0].key; + newOpts.set(newKey, { ...oldOpts.get(oldKey), arcLength: parseFloat(FixedNotZero(newArcs[0].arc.Length, 5)) }); + } + this._ArcBoardOptions.clear(); + this._ArcBoardOptions = newOpts; + } + get ArcBoardOptions() { + if (this._ArcBoardOptions.size > 0) + return this._ArcBoardOptions; + let cus = new ArcBoardBuild(this).ParseSweepCurves().SweepCurves1; + //key=-1 为通用转角槽配置 + this._ArcBoardOptions.set(-1, { ...defultArcBoardOption }); + cus.forEach((cu, i) => { + if (cu instanceof exports.Arc) + this._ArcBoardOptions.set(i, { ...defultArcBoardOption, arcLength: parseFloat(FixedNotZero(cu.Length, 5)) }); + }); + return this._ArcBoardOptions; + } + set ArcBoardOptions(opt) { + this.WriteAllObjectRecord(); + this._ArcBoardOptions = opt; + this.UpdateArcBoardOptions(false); + this.Update(); + } + UpdateArcBoardOptions(isNewPath) { + //更新ArcBuild曲线数据 + this._SweepArcBoardBuild = new ArcBoardBuild(this).ParseSweepCurves(); + let cus = this.GetSweepPathInWCS().Explode(); + let newOpts = new Map(); + newOpts.set(-1, this._ArcBoardOptions.get(-1)); + //如果是新的多段线信息,就更新全部数据 + if (isNewPath) { + cus.forEach((cu, i) => { + if (cu instanceof exports.Arc) + newOpts.set(i, { ...this._ArcBoardOptions.get(i), arcLength: parseFloat(FixedNotZero(cu.Length, 5)) }); + }); + } + else if (cus.filter(cu => cu instanceof exports.Arc).length <= this._ArcBoardOptions.size - 1) { + cus.forEach((cu, i) => { + if (cu instanceof exports.Arc && this._ArcBoardOptions.has(i)) + newOpts.set(i, { ...this._ArcBoardOptions.get(i), arcLength: parseFloat(FixedNotZero(cu.Length, 5)) }); + }); + } + this._ArcBoardOptions = newOpts; + } + get IsArcBoard() { + return this._SweepPath != undefined; + } + get ArcBuild() { + if (!this._SweepArcBoardBuild) + this._SweepArcBoardBuild = new ArcBoardBuild(this); + return this._SweepArcBoardBuild; + } + SetSweepPath(path, sweepAngle) { + this.WriteAllObjectRecord(); + this._SweepPath = path; + this._SweepAngle = sweepAngle; + this.Update(); + } + FixContourByArcSweepPath() { + if (!this._SweepPath) + return; + //标记正在修改轮廓 避免重复进入 + this._FixContourByArcSweepPath_Ing = true; + let build = new ArcBoardBuild(this); + let length = build.SweepLength; + if (this._SweepAngle === 0) { + if (!equaln$1(length, this.width, 1e-3)) + this.Width = length; //直接拉大拉小 + } + else if (equaln$1(Math.abs(this._SweepAngle), Math.PI / 2)) { + if (!equaln$1(length, this.height, 1e-3)) + this.Height = length; //直接拉大拉小 + } + else { + let con = this.ContourCurve.Clone(); + let ro = new three.Matrix4().makeRotationZ(-this._SweepAngle); + con.ApplyMatrix(ro); + con.Move(con.StartPoint.negate()); + let box = con.BoundingBox; + let size = box.max.x - box.min.x; + if (!equaln$1(size, length)) { + let contour = Contour.CreateContour(con, false); + contour.UnEqualProportionScale(size / 2, length - size, "x"); + let ro = new three.Matrix4().makeRotationZ(this._SweepAngle); + contour.Curve.ApplyMatrix(ro); + contour.Curve.Move(contour.Curve.BoundingBox.min.negate()); + this.SetContourCurve(contour.Curve); + } + } + this._FixContourByArcSweepPath_Ing = false; + } + FixArcSweepPathLength() { + if (!this._SweepPath) + return; + let build = new ArcBoardBuild(this); + let length = build.SweepLength; + let brLength = this.ParseBoardLengthInArcSweep(); + if (equaln$1(brLength, length, 1e-3)) + return; + if (brLength > length) { + //延伸路径 + let endp = this._SweepPath.EndPoint; + let derv = this._SweepPath.GetFirstDeriv(this._SweepPath.EndParam).normalize(); + if (this._SweepPath.GetCurveAtParam(this._SweepPath.EndParam - 0.5) instanceof exports.Arc) + this._SweepPath.AddVertexAt(this._SweepPath.LineData.length, AsVector2(endp.add(derv.multiplyScalar(brLength - length)))); + else + this._SweepPath.LineData[this._SweepPath.LineData.length - 1].pt.copy(AsVector2(endp.add(derv.multiplyScalar(brLength - length)))); + } + else { + if (this._SweepVisibleFace === FaceDirection.Back) { + //裁剪路径 + let param = this._SweepPath.GetParamAtDist(brLength); + this._SweepPath = this._SweepPath.GetSplitCurves(param)[0]; + } + else { + //裁剪路径 + let param = build.SweepPath1.GetParamAtDist(brLength); + let path = build.SweepPath1.GetSplitCurves(param)[0]; + this._SweepPath = ArcBoardBuild.OffsetPolyline(path, this.thickness); + } + } + } + ParseBoardLengthInArcSweep() { + let brLength; + if (this._SweepAngle === 0) + brLength = this.width; + else if (equaln$1(Math.abs(this._SweepAngle), Math.PI / 2)) + brLength = this.height; + else { + let con = this.ContourCurve.Clone(); + let ro = new three.Matrix4().makeRotationZ(-this._SweepAngle); + con.ApplyMatrix(ro); + let box = con.BoundingBox; + brLength = box.max.x - box.min.x; + } + return brLength; + } + ClearSweepPath() { + this.WriteAllObjectRecord(); + this._SweepPath = undefined; + this._SweepAngle = 0; + this.Update(); + } + GetSweepPath() { + return this._SweepPath; + } + //获得见光path + GetSweepPathInWCS() { + if (!this._SweepPath) + return; + let path = this.ArcBuild.SweepPath1.Clone(); + let mtx = new three.Matrix4().makeBasis(XAxis, ZAxis, YAxisN) + .premultiply(this.ArcBuild.Rotate2OCSMtx) + .premultiply(this.OCSNoClone); + path.ApplyMatrix(mtx); + return path; + } + //背面 + GetSweepPath1InWCS() { + if (!this._SweepPath) + return; + let path = this._SweepPath.Clone(); + let mtx = new three.Matrix4().makeBasis(XAxis, ZAxis, YAxisN) + .premultiply(this.ArcBuild.Rotate2OCSMtx) + .premultiply(this.OCSNoClone); + path.ApplyMatrix(mtx); + return path; + } + //正面 + GetSweepPath2InWCS() { + if (!this._SweepPath) + return; + let path = this._SweepVisibleFace === FaceDirection.Back ? this.ArcBuild.SweepPath2.Clone() : this.ArcBuild.SweepPath1.Clone(); + let mtx = new three.Matrix4().makeBasis(XAxis, ZAxis, YAxisN) + .premultiply(this.ArcBuild.Rotate2OCSMtx) + .premultiply(this.OCSNoClone); + path.ApplyMatrix(mtx); + return path; + } + /** 获取见光面 */ + get SweepVisibleFace() { + return this._SweepVisibleFace; + } + /** 设置见光面 */ + set SweepVisibleFace(dir) { + if (dir === this._SweepVisibleFace) + return; + this.WriteAllObjectRecord(); + this._SweepVisibleFace = dir; + this.FixContourByArcSweepPath(); + this.Update(); + } + get SweepAngle() { + return this._SweepAngle; + } + set SweepAngle(v) { + if (equaln$1(v, this._SweepAngle)) + return; + this.WriteAllObjectRecord(); + this._SweepAngle = v; + this.FixArcSweepPathLength(); + this.Update(); + } + AdjustPath(br, outline) { + if (this.IsArcBoard) { + const path = this.GetSweepPath(); + // 1.将放样路径展开 + const pathWCS = this.GetSweepPathInWCS(); + pathWCS.ApplyMatrix(pathWCS.OCSInv); + const expandPath = CurveManager.CreateExpandPl(pathWCS); + // 2.将轮廓进行旋转 + outline.ApplyMatrix(new three.Matrix4().makeRotationZ(-this.SweepAngle)); + // 3.根据轮廓的左右两侧,截取取对应的放样路径 + const leftParam = expandPath.GetParamAtDist(outline.BoundingBox.min.x); + const rightParam = expandPath.GetParamAtDist(outline.BoundingBox.max.x); + const leftPt = path.GetPointAtParam(leftParam); + const rightPt = path.GetPointAtParam(rightParam); + const newPath = CurveManager.Get_Pl_InPtAtoPtB(path, leftPt, rightPt); + // 4.路径起点为原点 + newPath.Move(newPath.StartPoint.negate()); + br.SetSweepPath(newPath, this.SweepAngle); + } + } + AdjustPosition(br, basePoint) { + if (this.IsArcBoard) { + // 映射shape上的基点 + basePoint.applyMatrix4(this.ArcBuild.OCS2RotateMtx); + this.ArcBuild.ParseAllX_Map([basePoint.x]); + this.ArcBuild.PosMap2ArcPos(basePoint); + basePoint.applyMatrix4(this.ArcBuild.Rotate2OCSMtx); + basePoint.applyMatrix4(this.OCSNoClone); + // 映射board上的基点 + const basePointInBoard = br.ContourCurve.StartPoint; + basePointInBoard.applyMatrix4(br.ArcBuild.OCS2RotateMtx); + br.ArcBuild.ParseAllX_Map([basePointInBoard.x]); + br.ArcBuild.PosMap2ArcPos(basePointInBoard); + basePointInBoard.applyMatrix4(br.ArcBuild.Rotate2OCSMtx); + basePointInBoard.applyMatrix4(br.OCSNoClone); + // 移动(boardBasePoint -> basePoint) + br.Move(basePoint.sub(basePointInBoard)); + } + } /** * 创建一个代理数组,数组改变时被监听 */ @@ -19733,6 +24760,16 @@ let Board = Board_1 = class Board extends ExtrudeSolid { edgeRemarkLeft: "", edgeRemarkRight: "", highBoardEdgeRemark: this.CreateArray(), + reservedEdgeUp: "0", + reservedEdgeDown: "0", + reservedEdgeRight: "0", + reservedEdgeLeft: "0", + highReservedEdge: this.CreateArray(), + sealColorUp: "", + sealColorDown: "", + sealColorLeft: "", + sealColorRight: "", + sealColorType: "", }; this._BoardProcessOption = new Proxy(defaultData, { get: function (target, key, receiver) { @@ -19741,7 +24778,7 @@ let Board = Board_1 = class Board extends ExtrudeSolid { set: (target, key, value, receiver) => { if (Reflect.get(target, key, receiver) !== value) { this.WriteAllObjectRecord(); - if (key === "highDrill" || key === EBoardKeyList.HighSealed || key === "highBoardEdgeRemark") { + if (key === "highDrill" || key === EBoardKeyList.HighSealed || key === "highBoardEdgeRemark" || key === "highReservedEdge") { let arr = this.CreateArray(); arr.push(...value); target[key] = arr; @@ -19805,6 +24842,7 @@ let Board = Board_1 = class Board extends ExtrudeSolid { this._BoardProcessOption.highDrill = Array(4).fill(type); this.ConverToRectSolid(width, length, thickness); this.Update(exports.UpdateDraw.Geometry); + return this; } static CreateBoard(length, width, thickness, boardType = BoardType.Layer) { let board = new Board_1(); @@ -19887,8 +24925,9 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } set BoardProcessOption(obj) { Object.assign(this._BoardProcessOption, obj, { - [EBoardKeyList.HighSealed]: obj[EBoardKeyList.HighSealed].slice(), - highBoardEdgeRemark: obj.highBoardEdgeRemark.slice(), + [EBoardKeyList.HighSealed]: (obj[EBoardKeyList.HighSealed]).slice(), + highBoardEdgeRemark: (obj.highBoardEdgeRemark).slice(), + highReservedEdge: (obj.highReservedEdge).slice() }); } get NeedUpdateRelevanceGroove() { @@ -19905,30 +24944,36 @@ let Board = Board_1 = class Board extends ExtrudeSolid { GetRelevanceKnifes(knifs) { super.GetRelevanceKnifes(knifs); for (let e of this.RelativeHardware) { - if (e.IsErase) + if (e.IsErase) { + this.__CacheKnifVersion__[e.Index] = e?.Object?.__UpdateVersion__; continue; - let ent = e.Object; - if (ent instanceof HardwareCompositeEntity) { - if (ent.HardwareOption.isHole) { - let holes = ent.GetAllEntity(true, e => e instanceof ExtrudeHole || e instanceof ExtrudeSolid); + } + let hardware = e.Object; + if (hardware instanceof HardwareCompositeEntity) { + if (hardware.HardwareOption.isHole) { + let holes = hardware.GetAllEntity(true, e => e instanceof ExtrudeHole || e instanceof ExtrudeSolid); for (let i = 0; i < holes.length; i++) { let h = holes[i]; let g = h instanceof ExtrudeHole ? h.Convert2ExtrudeSolid() : h; - g.__TempIndexVersion__ = { Index: ent.Id.Index, Version: ent.__UpdateVersion__ }; + g.__TempIndexVersion__ = { Index: hardware.Id.Index, Version: hardware.__UpdateVersion__ }; knifs.push(g); } } + else { + this.__CacheKnifVersion__[e.Index] = e?.Object?.__UpdateVersion__; + } } } } ClearRelevance(en) { - for (let id of this.RelativeHardware) { + for (let id of [...this.RelativeHardware, ...this.RelativeHandle]) { let e = id.Object; if (e instanceof HardwareCompositeEntity) { arrayRemoveIf(e.RelevanceBoards, i => !i || i.Index === this.Id.Index); } } this.RelativeHardware.length = 0; + this.RelativeHandle.length = 0; super.ClearRelevance(en); } get SplitBoards() { @@ -19953,8 +24998,12 @@ let Board = Board_1 = class Board extends ExtrudeSolid { br._DrillList = new Map(this._DrillList.entries()); br._LayerNails = [...this._LayerNails]; br.ProcessingGroupList = [...this.ProcessingGroupList]; + br.AlignLineObject = this.AlignLineObject; br._BoardProcessOption = { ...this._BoardProcessOption }; br._CustomNumber = this._CustomNumber; //因为CustomNumber不会刷新绘制,所以拷贝这个 + br._DrillLock = this._DrillLock; //!2726 关联切割后的引用实体需要复制这个属性,否则反应器无法更新 + br._SideModelingMap = this.SideModelingMap; + br.RelevanceSideModelMap = this.RelevanceSideModelMap; //关联切割侧槽 let new2old_edgeMap; //修正排钻边的数据 if (highDrills) { @@ -19998,6 +25047,12 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } return brs; } + get ArcBoardModeling() { + if (!this.IsArcBoard || !this.IsDrawArcGroove) + return []; + const { _SweepPath: path, _SweepAngle: angle, SweepVisibleFace: dir, ArcBoardOptions } = this; + return ParseBoardArcFeed(this, path, angle, dir, ArcBoardOptions, false); + } get BoardModeling() { let models = []; for (let g of this.grooves) { @@ -20039,7 +25094,12 @@ let Board = Board_1 = class Board extends ExtrudeSolid { subG.Thickness = model.thickness; g.AppendGroove(subG); } - //不需要处理正反面的原因是因为Get时保留了曲线的高度,导致生成的槽位置已经在指定位置 + let gz = 0; //槽的z轴位置 (由于旋转轮廓或者镜像轮廓在Set时会被清除掉坐标系,我们还是需要正确的搞定z轴) + if (model.dir === FaceDirection.Front) + gz = this.thickness - g.Thickness; + let moveZ = gz - g.Position.z; + if (!equaln$1(moveZ, 0)) + g.Move({ x: 0, y: 0, z: moveZ }); g.ApplyMatrix(this.OCSNoClone); this.grooves.push(g); } @@ -20048,6 +25108,14 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } //二维刀路 get Modeling2D() { + for (const m of this._2DModelingList) { + for (const item of m.items) { + let d = safeEval(item.depthExpr, { BH: this.thickness }); + if (!isNaN(d) && d != item.depth) { + item.depth = d; + } + } + } return [...this._2DModelingList]; } set Modeling2D(ms) { @@ -20065,6 +25133,37 @@ let Board = Board_1 = class Board extends ExtrudeSolid { this._3DModelingList = ms; this.Update(exports.UpdateDraw.Geometry); } + //侧面造型 + get SideModelingMap() { + return this._SideModelingMap; + } + set SideModelingMap(sideModelingMap) { + this.WriteAllObjectRecord(); + this.ClearSideModelingCache(); + this._SideModelingMap = sideModelingMap; + this.Update(exports.UpdateDraw.Geometry); + } + //获取侧面关联槽和侧面造型 + get AllSideModelGrooveMap() { + let allSideModelGrooveMap = new Map(); + for (let [n, soilds] of this._SideModelingMap) + allSideModelGrooveMap.set(n, [...soilds]); + for (let [n, soilds] of this.RelevanceSideModelMap) { + let ss = allSideModelGrooveMap.get(n) ?? []; + for (let soild of soilds) + ss.push(soild); + allSideModelGrooveMap.set(n, ss); + } + return allSideModelGrooveMap; + } + ClearSideModeling() { + if (!this._SideModelingMap.size) + return; + this.WriteAllObjectRecord(); + this.ClearSideModelingCache(); + this._SideModelingMap.clear(); + this.Update(exports.UpdateDraw.Geometry); + } ClearModeling2DList() { if (this._2DModelingList.length === 0) return; @@ -20188,6 +25287,10 @@ let Board = Board_1 = class Board extends ExtrudeSolid { if (isSuccess) { this.height = v; this.GrooveCheckAllAutoSplit(); + if (this._SweepPath && !this._FixContourByArcSweepPath_Ing) + this.FixArcSweepPathLength(); + if (this.HasSideModel) + this.SplitBoardSideModelUtil.SpiltSideModelOfBrContour(this); this.Update(); } } @@ -20207,10 +25310,25 @@ let Board = Board_1 = class Board extends ExtrudeSolid { if (isSuccess) { this.width = v; this.GrooveCheckAllAutoSplit(); + if (this._SweepPath && !this._FixContourByArcSweepPath_Ing) + this.FixArcSweepPathLength(); + if (this.HasSideModel) + this.SplitBoardSideModelUtil.SpiltSideModelOfBrContour(this); this.Update(); } } } + get Thickness() { return super.Thickness; } + set Thickness(thickness) { + if (!equaln$1(thickness, this.thickness, 1e-4)) //避免18.0009 无法改成 18 + { + if (this.HasSideModel) + this.SplitBoardSideModelUtil.SpiltSideModelOfBrThickness(this, thickness); + super.Thickness = thickness; + if (this._SweepPath && !this._FixContourByArcSweepPath_Ing) + this.FixContourByArcSweepPath(); + } + } get BoardType() { return this._BoardType; } @@ -20267,6 +25385,22 @@ let Board = Board_1 = class Board extends ExtrudeSolid { this.WriteAllObjectRecord(); this._Name = n; } + get SplitBoardSideModelUtil() { + if (!this._SplitBoardSideModelUtil) + this._SplitBoardSideModelUtil = new SplitBoardSideModelUtil(this); + return this._SplitBoardSideModelUtil; + } + GeneralRectContour() { + //取消异型时,强制使用矩形轮廓 导致原始轮廓数据丢失 + if (this.HasSideModel) { + this.UpdateSplitBoardSideModelUtil = false; + this.SplitBoardSideModelUtil.Init(this, true); + super.GeneralRectContour(); + this.UpdateSplitBoardSideModelUtil = true; + } + else + super.GeneralRectContour(); + } /** * 板件的轮廓,在板件坐标系中的表现方式. */ @@ -20288,7 +25422,16 @@ let Board = Board_1 = class Board extends ExtrudeSolid { ParseBoardRectHoleType(this, rectHoleOpt); //分析旧的上下左右排钻 let oldHightSealCurves = GetBoardSealingCurves(this); //旧的封边轮廓 let oldHightSealDatas = GetBoardHighSeal(this, oldHightSealCurves); //旧的封边数据 - let oldHighBoardEdgeRemarkDatas = GetHighBoardEdgeRemark(this, oldHightSealCurves); //旧的封边数据 + let oldHighBoardEdgeRemarkDatas = GetHighBoardEdgeRemark(this, oldHightSealCurves); //旧的板边备注数据 + let oldHighReservedEdgeDatas = GetBoardHighReservedEdge(this, oldHightSealCurves); //旧的预留边数据 + let splitSideModel = false; + if (this.UpdateSplitBoardSideModelUtil && this.HasSideModel) { + this.SplitBoardSideModelUtil.Init(this); //旧的侧面造型 + //记录侧面造型后清空 防止在分裂侧面造型时带入更新mesh + this.WriteAllObjectRecord(); + this._SideModelingMap.clear(); + splitSideModel = true; + } let oldContour = this.ContourCurve; //旧的轮廓 let defaultDrillType = this._BoardProcessOption.drillType; if (!IsValidDriName(defaultDrillType) && this._BoardProcessOption.highDrill) @@ -20319,10 +25462,12 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } this._BoardProcessOption.highSealed.length = 0; this._BoardProcessOption.highBoardEdgeRemark.length = 0; + this._BoardProcessOption.highReservedEdge.length = 0; //保持封边属性 if (this.isRect) { SetBoardTopDownLeftRightSealData(this, oldHightSealDatas, oldHightSealCurves, oldContour); SetBoardEdgeRemarkData(this, oldHighBoardEdgeRemarkDatas, oldHightSealCurves, oldContour); + SetBoardReservedEdgeData(this, oldHighReservedEdgeDatas, oldHightSealCurves, oldContour); } else //变成了异形 { @@ -20342,8 +25487,12 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } this._BoardProcessOption.highSealed.push(oldHightSealDatas[closesIndex]); this._BoardProcessOption.highBoardEdgeRemark.push(oldHighBoardEdgeRemarkDatas[closesIndex]); + this._BoardProcessOption.highReservedEdge.push(oldHighReservedEdgeDatas[closesIndex]); } } + //分裂侧面造型 + if (splitSideModel || this.HasSideModel) + this.SplitBoardSideModelUtil.SetBoardSideModel(this); } Explode() { return Board2Regions(this); @@ -20486,8 +25635,8 @@ let Board = Board_1 = class Board extends ExtrudeSolid { this._DrillList = drillBak; this._LayerNails = layerNailsBak; } - Clone() { - let br = super.Clone(); + Clone(cloneDraw = true) { + let br = super.Clone(cloneDraw); br._DrillAssociationLock.clear(); br._DrillList.clear(); br._LayerNails.length = 0; @@ -20508,30 +25657,74 @@ let Board = Board_1 = class Board extends ExtrudeSolid { let l; let len; let width; + let brWidth = this.width; + let brHeight = this.height; switch (this.BoardProcessOption.lines) { case LinesType.Positive: - len = this.height / 3; - width = Math.min(this.width, this.height) / 8; + len = brHeight / 3; + width = Math.min(brWidth, brHeight) / 8; break; case LinesType.Reverse: - len = this.width / 2; - width = Math.min(this.width, this.height) / 8; + len = brWidth / 2; + width = Math.min(brWidth, brHeight) / 8; break; case LinesType.CanReversal: - len = this.height / 3; - width = this.width / 2; + len = brHeight / 3; + width = brWidth / 2; } l = new three.LineSegments(BufferGeometryUtils.CreateFromPts(PointShapeUtils.LinesDirPts(len, width, this.BoardProcessOption.lines)), ColorMaterial.GetLineMaterial(8)); let l1 = l.clone(); l1.material = ColorMaterial.GetLineMaterial(7); - l.position.set(this.width / 2, this.height / 2, 0); - l1.position.set(this.width / 2, this.height / 2, this.thickness); + l.position.set(brWidth / 2, brHeight / 2, 0); + l1.position.set(brWidth / 2, brHeight / 2, this.thickness); + if (this._SweepPath) { + let pts = [l.position, l1.position]; + let x, y; + if (this._SweepAngle !== 0) { + l.position.z -= 1; + l1.position.z += 1; + x = l.position.clone().add(XAxis); + y = l.position.clone().add(YAxis); + pts.push(x, y); + for (let p of pts) + p.applyMatrix4(this.ArcBuild.OCS2RotateMtx); + } + else { + x = l.position.clone().add(XAxis); + y = l.position.clone().add(YAxis); + pts.push(x, y); + } + let xs = pts.map(p => p.x); + arraySortByNumber$1(xs); + arrayRemoveDuplicateBySort(xs, equaln$1); + this.ArcBuild.ParseAllX_Map(xs); + for (let p of pts) + this.ArcBuild.PosMap2ArcPos(p); + if (this._SweepAngle !== 0) + for (let p of pts) + p.applyMatrix4(this.ArcBuild.Rotate2OCSMtx); + x.sub(l.position).normalize(); + y.sub(l.position).normalize(); + let z = new three.Vector3().crossVectors(x, y); + let mtx = new three.Matrix4().makeBasis(x, y, z); + l.rotation.setFromRotationMatrix(mtx); + l1.rotation.setFromRotationMatrix(mtx); + } l.updateMatrix(); l1.updateMatrix(); return [l, l1]; } - GetLinesOpenDir() { - const l = new three.Line(BufferGeometryUtils.CreateFromPts(PointShapeUtils.LinesOpenDirPts(this.height, this.width, this.OpenDir)), ColorMaterial.GetWallLineMtl(9)); + GetLinesOpenDir(renderType) { + const openDirReverse = { + 1: BoardOpenDir.Right, + 2: BoardOpenDir.Left, + 3: BoardOpenDir.Down, + 4: BoardOpenDir.Up, + 5: BoardOpenDir.NoOpen, + }; + const openDir = HostApplicationServices.doorLinesOption.reverseOpenDirLines ? openDirReverse[this.OpenDir] : this.OpenDir; + const mtl = (renderType === RenderType.Physical || renderType === RenderType.Physical2) ? ColorMaterial.GetPhysical2EdgeMaterial() : ColorMaterial.GetWallLineMtl(9); + const l = new three.Line(BufferGeometryUtils.CreateFromPts(PointShapeUtils.LinesOpenDirPts(this.height, this.width, openDir)), mtl); l.computeLineDistances(); let l1 = l.clone(); l.position.set(this.width / 2, this.height / 2, 0); @@ -20606,19 +25799,37 @@ let Board = Board_1 = class Board extends ExtrudeSolid { this._2DPathCsgs = []; return this._2DPathCsgs; } - //#endregion + ; + GetSideModeingCsgs() { + if (this._SideModeingCsgs) + return this._SideModeingCsgs; + this._SideModeingCsgs = []; + if (!this._SideModelingMap.size && !this.RelevanceSideModelMap.size) + return this._SideModeingCsgs; + this._SideModeingCsgs = BoardSideModelCSGBuilder(this); + return this._SideModeingCsgs; + } + //清除侧面造型Csgs的缓存 + ClearSideModelingCache() { + this._SideModeingCsgs = undefined; + } + //#endregion 侧面造型 + get HasSideModel() { return this._SideModelingMap.size > 0; } + get AsyncSideModeling() { return this._asyncSideModelIng; } get Has2DPath() { return this._2DModelingList.length > 0; } get Async2DPathing() { return this._async2DPathIng; } GoodBye() { super.GoodBye(); TerminateCSGTask({ key: this }); } - async Load2DPathIng() { - return new Promise((res) => { - this.promise2DPath = res; - }); + async Load2DPathPromise() { + if (!this._2DPathBuildPromise) + this._2DPathBuildPromise = new Promise((res) => { + this._Promise2DPathRes = res; + }); + return this._2DPathBuildPromise; } - //分裂后重新将排钻实体设置给不同的实体 + //分裂后重新将排钻实体 关联五金 设置给不同的实体 HandleSpliteEntitys(splitEntitys) { if (!splitEntitys.length) return; @@ -20719,25 +25930,197 @@ let Board = Board_1 = class Board extends ExtrudeSolid { object.Erase(); } } + //重新关联复合实体 + arrayRemoveIf(this.RelativeHardware, (hwdObjId) => { + if (!hwdObjId || hwdObjId.IsErase) + return true; + for (let ent of splitEntitys) { + let hwd = hwdObjId.Object; + if (ent.BoundingBox.intersectsBox(hwd.BoundingBox)) { + //原始板件删除这个五金 + arrayRemoveIf(hwd.RelevanceBoards, (rbr) => rbr?.Object === this); + //五金与分裂的板关联 + hwd.RelevanceBoards.push(ent.objectId); + ent.RelativeHardware.push(hwdObjId); + //如果五金是把手 写入分裂的板的RelativeHandle + if (this.RelativeHandle.includes(hwdObjId)) { + arrayRemoveIf(this.RelativeHandle, (handle) => handle === hwdObjId); + ent.RelativeHandle.push(hwdObjId); + } + return true; + } + } + }); } + BuildArcGeometry() { + //针对圆弧板 + let build = new ArcBoardBuild(this); + [this._MeshGeometry, this._EdgeGeometry] = build.BuildMeshEdgeGeom(); + // 圆弧板的二维刀路与侧面造型 + if (build.CSGBoard.Async2DPathing || build.CSGBoard.AsyncSideModeling) { + build.CSGBoard.Load2DPathPromise().then(() => { + /** @todo 圆弧板暂时先不显示二维刀路的线框吧 */ + this._2DPathDrawObject = undefined; + // 完毕后,不再显示二维刀路/侧面造型建模中的文字 + this._async2DPathIng = false; + this._asyncSideModelIng = false; + this.UpdateDrawGeometry(); //销毁旧的 + [this._MeshGeometry, this._EdgeGeometry] = build.BuildMeshEdgeGeom(); + // 更新 + for (let [type, obj] of this.CacheDrawObject) { + this.UpdateDrawObject(type, obj); + obj.updateMatrixWorld(true); + obj.traverse(UpdateBoundingSphere); + } + }); + } + this._SweepArcBoardBuild = build; //记录 + } + UpdateDrawObject(renderType, obj) { + // 圆弧板和复合实体内的圆弧板,Jig时,实时显示见光面路径 + if (this._SweepPath && (renderType === RenderType.Jig)) { + DisposeThreeObj(obj); + Object3DRemoveAll(obj); + if (this._jigSweepPath) { + const path2BoardMtx = new three.Matrix4(); + const invMtx = new three.Matrix4().getInverse(this._Matrix); + path2BoardMtx.multiplyMatrices(invMtx, this._jigPath2WCSMtx); + const pts = this._jigSweepPath.Shape.getPoints().map(AsVector3); + const geo = new three.BufferGeometry().setFromPoints(pts); + const line = new three.Line(geo, ColorMaterial.GetLineMaterial(this.ColorIndex)); + line.matrix = path2BoardMtx; + obj.add(line); + this._jigSweepPath = undefined; + this._jigPath2WCSMtx = undefined; + return; + } + } + let o = super.UpdateDrawObject(renderType, obj); + if (renderType === RenderType.Edge) { + obj.add(new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(8))); + this.CheckSealing(obj); + } + else if (renderType === RenderType.PlaceFace) { + let isArbitrary = this._BoardProcessOption[EBoardKeyList.ComposingFace] === ComposingType.Arbitrary; + obj.add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(8)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))); + if (!isArbitrary) //如果不是任意面 + obj.add(this.GetPlaceFace()); + } + else if (renderType === RenderType.BigHoleFace) { + obj.add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(8)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))); + obj.add(this.GetBigHoleFace()); + } + else if (renderType === RenderType.CustomNumber || renderType === RenderType.CustomNumberPrint) { + if (renderType === RenderType.CustomNumberPrint) + obj.add(...this.GetPrintObject3D()); + else + obj.add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex, three.FrontSide, true))); + //#region 添加文字 + if (!this._CustomNumberTextEntity) { + this._CustomNumberTextEntity = new Text(); + this._CustomNumberTextEntity.TextAligen = TextAligen.Mid; + this._CustomNumberTextEntity.IsDoubleMesh = true; + this._CustomNumberTextEntity.IsFsText = this._BoardType === BoardType.Layer; + this._CustomNumberTextEntity.IsEmbedEntity = true; + } + if (this._BoardType === BoardType.Layer) + this._CustomNumberTextEntity.OCSNoClone.makeRotationZ(-Math.PI / 2).setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5); + else + this._CustomNumberTextEntity.OCSNoClone.identity().setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5); + this._CustomNumberTextEntity.TextString = this._CustomNumber?.toString() ?? (this.objectId?.Index > 0 ? "未编号" : " "); + if (this._CustomNumberTextEntity.TextString === "未编号") + this._CustomNumberTextEntity.Height = 60; + else + this._CustomNumberTextEntity.Height = HostApplicationServices.boardCustomNumberTextHeight; + let o = this._CustomNumberTextEntity.GetDrawObjectFromRenderType(RenderType.Conceptual); + if (o) { + o.traverse(obj => obj.userData = {}); + AddEntityDrawObject(obj, this._CustomNumberTextEntity, RenderType.Conceptual); + } + //#endregion + } + this.UpdateDrawObjectByBoardInfo(renderType, obj); + this.DrawAsyncText(obj); + return o; + } + DrawAsyncText(obj) { + if (this._async2DPathIng || this._asyncSideModelIng) { + //#region 添加文字 + if (!this._AsyncIngTextEntity) { + this._AsyncIngTextEntity = new Text(); + this._AsyncIngTextEntity.TextAligen = TextAligen.Mid; + this._AsyncIngTextEntity.IsDoubleMesh = true; + this._AsyncIngTextEntity.IsFsText = this._BoardType === BoardType.Layer; + this._AsyncIngTextEntity.IsEmbedEntity = true; + } + if (this._BoardType === BoardType.Layer) + this._AsyncIngTextEntity.OCSNoClone.makeRotationZ(-Math.PI / 2).setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5); + else + this._AsyncIngTextEntity.OCSNoClone.identity().setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5); + if (this._async2DPathIng) + this._AsyncIngTextEntity.TextString = "二维刀路建模中!"; + else if (this._asyncSideModelIng) + this._AsyncIngTextEntity.TextString = "侧面造型建模中!"; + let o = this._AsyncIngTextEntity.GetDrawObjectFromRenderType(RenderType.Conceptual); + if (o) { + o.traverse(obj => obj.userData = {}); + AddEntityDrawObject(obj, this._AsyncIngTextEntity, RenderType.Conceptual); + } + //#endregion + } + } + //del_exp2_end //绘制排版面时使用的颜色 - get PlaceColor() { return this._Color === 8 ? 9 : this._Color; } + get PlaceColor() { return this._Color === 8 ? 9 : this.DrawColorIndex; } //排版面网格 GetPlaceFace() { - let shapeGeom = new three.ShapeGeometry(this.contourCurve.Shape); + let shapeGeom = new three.ShapeBufferGeometry(this.contourCurve.Shape); let isBack = this._BoardProcessOption[EBoardKeyList.ComposingFace] !== ComposingType.Positive; + if (isBack) { + const indices = Array.from(shapeGeom.getIndex().array); + // 翻转面片索引的顺序 + const flippedIndices = []; + for (let i = 0; i < indices.length; i += 3) + flippedIndices.push(indices[i], indices[i + 2], indices[i + 1]); + // 创建新的面片索引属性 + const newIndices = new three.BufferAttribute(new Uint16Array(flippedIndices), 1); + // 更新面片索引属性 + shapeGeom.setIndex(newIndices); + } shapeGeom.applyMatrix4(this.contourCurve.OCSNoClone); shapeGeom.translate(0, 0, isBack ? -1e-3 : this.thickness + 1e-3); - let mesh = new three.Mesh(shapeGeom, ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor)); + let mesh = new three.Mesh(shapeGeom, ColorMaterial.GetBasicMaterial(this.PlaceColor)); return mesh; } + /** 获取大孔面的几何体 */ + get BigHoleFaceGeo() { + let shapeGeom = new three.ShapeBufferGeometry(this.contourCurve.Shape); + let isBack = this._BoardProcessOption[EBoardKeyList.BigHole] === FaceDirection.Back; + if (isBack) { + const indices = Array.from(shapeGeom.getIndex().array); + // 翻转面片索引的顺序 + const flippedIndices = []; + for (let i = 0; i < indices.length; i += 3) + flippedIndices.push(indices[i], indices[i + 2], indices[i + 1]); + // 创建新的面片索引属性 + const newIndices = new three.BufferAttribute(new Uint16Array(flippedIndices), 1); + // 更新面片索引属性 + shapeGeom.setIndex(newIndices); + } + shapeGeom.applyMatrix4(this.contourCurve.OCSNoClone); + shapeGeom.translate(0, 0, isBack ? -1e-3 : this.thickness + 1e-3); + return shapeGeom; + } //大孔面网格 GetBigHoleFace() { - let shapeGeom = new three.ShapeGeometry(this.contourCurve.Shape); - let isBack = this._BoardProcessOption[EBoardKeyList.BigHole] === FaceDirection.Back; - shapeGeom.applyMatrix4(this.contourCurve.OCSNoClone); - shapeGeom.translate(0, 0, isBack ? -1e-3 : this.thickness + 1e-3); - let mesh = new three.Mesh(shapeGeom, ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor)); + if (this._SweepPath) //针对圆弧板 + { + const geometry = this._SweepArcBoardBuild.BuildBigHoleFace(); + let mesh = new three.Mesh(geometry, ColorMaterial.GetBasicMaterial(this.PlaceColor)); + return mesh; + } + let shapeGeom = this.BigHoleFaceGeo; + let mesh = new three.Mesh(shapeGeom, ColorMaterial.GetBasicMaterial(this.PlaceColor)); return mesh; } /** @@ -20751,7 +26134,7 @@ let Board = Board_1 = class Board extends ExtrudeSolid { return; if (!this.IsChaiDan) //非拆单板绘制更新 { - if (renderType === RenderType.Conceptual || renderType === RenderType.Physical2) { + if (renderType === RenderType.Conceptual || renderType === RenderType.ConceptualTransparent || renderType === RenderType.Physical2) { obj.children.length = 1; obj.children[0].material = ColorMaterial.GrayTransparentMeshMaterial; //灰色半透明 } @@ -20759,13 +26142,20 @@ let Board = Board_1 = class Board extends ExtrudeSolid { obj.material = ColorMaterial.GrayTransparentMeshMaterial; //灰色半透明(会不会有bug?) } //线框及概念且可拆单 - if (([RenderType.Wireframe, RenderType.Conceptual, RenderType.Print].includes(renderType)) && this.IsChaiDan) { + if (([RenderType.Wireframe, RenderType.Conceptual, RenderType.ConceptualTransparent, RenderType.Print].includes(renderType)) && this.IsChaiDan) { //绘制纹路 if (HostApplicationServices.showLines && renderType !== RenderType.Print) obj.add(...this.GetLinesDir()); //绘制开门方向纹路 - if (HostApplicationServices.showOpenDirLines && this.OpenDir !== BoardOpenDir.None) - obj.add(...this.GetLinesOpenDir()); + if (HostApplicationServices.showOpenDirLines && this.OpenDir !== BoardOpenDir.None && this.OpenDir !== BoardOpenDir.NoOpen) + obj.add(...this.GetLinesOpenDir(renderType)); + } + const doorLinesOption = HostApplicationServices.doorLinesOption; + if (doorLinesOption.physicalShowLines && renderType === RenderType.Physical + || doorLinesOption.physicalShowLines2 && renderType === RenderType.Physical2) { + //绘制开门方向纹路 + if (HostApplicationServices.showOpenDirLines && this.OpenDir !== BoardOpenDir.None && this.OpenDir !== BoardOpenDir.NoOpen) + obj.add(...this.GetLinesOpenDir(renderType)); } if (this.objectId) //二维和三维刀路 { @@ -20784,6 +26174,7 @@ let Board = Board_1 = class Board extends ExtrudeSolid { else obj.add(path2d); } + this.GetSideModeingCsgs(); } } UpdateDrawObjectMaterial(renderType, obj) { @@ -20792,10 +26183,10 @@ let Board = Board_1 = class Board extends ExtrudeSolid { let face = obj.children[2]; if (!face) return; - face.material = ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor); + face.material = ColorMaterial.GetBasicMaterial(this.PlaceColor); } if (!this.IsChaiDan) { - if (renderType === RenderType.Conceptual || renderType === RenderType.Physical2) { + if (renderType === RenderType.Conceptual || renderType === RenderType.ConceptualTransparent || renderType === RenderType.Physical2) { obj.children[0].material = ColorMaterial.GrayTransparentMeshMaterial; } else if (renderType !== RenderType.Wireframe) { @@ -20810,25 +26201,115 @@ let Board = Board_1 = class Board extends ExtrudeSolid { return; let cus = GetBoardSealingCurves(this); let highSeals = GetBoardHighSeal(this, cus); - for (let i = 0; i < cus.length; i++) { + const thickness = this.Thickness; + const sealWidth = thickness * (HostApplicationServices.sealWidthPercentage ?? 1) / 100; + const sealSolids = cus.map((c) => { + const sealSolid = new SealSolid(c, sealWidth); + sealSolid.Move({ x: 0, y: 0, z: (thickness - sealWidth) / 2 }); + return sealSolid; + }); + for (let i = 0; i < sealSolids.length; i++) { let size = highSeals[i].size.toString(); let color = sealingInfo.get(size); if (color) { - cus[i].Position = cus[i].Position.add(new three.Vector3(0, 0, this.thickness / 2)); - cus[i].ColorIndex = parseInt(color) ?? 7; - let l = cus[i].GetDrawObjectFromRenderType(RenderType.Wireframe); + sealSolids[i].ColorIndex = parseInt(color) ?? 7; + let l = sealSolids[i].GetDrawObjectFromRenderType(RenderType.Conceptual); obj.add(l); } } } + AddSideModelGripPoints(pts, dragPointType) { + let con = GetBoardContour(this); + if (!con) + return; + let inverseZ = con.Area2 < 0; + let cus = con.Explode(); + for (let [index, soilds] of this.SideModelingMap) { + let cu = cus[index]; + if (!cu) + continue; + let mt4 = GetSideCuFaceMtx(cus[index], inverseZ); + for (let soild of soilds) { + const MirrorMtxZ = MakeMirrorMtx(ZAxis); + let s = soild.Clone(); + s.ApplyMatrix(MirrorMtxZ); + s.ApplyMatrix(mt4); + s.ApplyMatrix(this.OCSNoClone); + pts.push(...s.GetGripOrStretchPoints(dragPointType)); + } + } + } + GetStrectchPointCountList(dragType) { + let counts = super.GetStrectchPointCountList(dragType); + if (this.HasSideModel) { + for (let [num, soilds] of this.SideModelingMap) { + for (let soild of soilds) { + let c = soild.ContourCurve.GetDragPointCount(dragType) * 2; + for (let g of soild.Grooves) + c += g.ContourCurve.GetDragPointCount(dragType) * 2; + counts.push(c); + } + } + } + return counts; + } + //因为圆弧板 我们重载了它 + GetGripPoints() { + let pts = super.GetGripPoints(); + pts = this.MapToArcPoints(pts, DragPointType.Grip); + return pts; + } + MapToArcPoints(pts, dragPointType) { + if (this._SweepPath) { + if (!this._SweepArcBoardBuild) + this._SweepArcBoardBuild = new ArcBoardBuild(this); + let inv = this.OCSInv; + let mtx = this.OCSNoClone; + if (this._SweepArcBoardBuild._OCS2RotateMtx) { + inv.multiplyMatrices(this._SweepArcBoardBuild._OCS2RotateMtx, inv); + mtx = new three.Matrix4().multiplyMatrices(mtx, this._SweepArcBoardBuild._Rotate2OCSMtx); + } + for (let p of pts) + p.applyMatrix4(inv); + let xs = pts.map(p => p.x); + arraySortByNumber$1(xs); + arrayRemoveDuplicateBySort(xs); + this._SweepArcBoardBuild.ParseAllX_Map(xs); + for (let p of pts) { + this._SweepArcBoardBuild.PosMap2ArcPos(p); + p.applyMatrix4(mtx); + } + } + else if (this.HasSideModel) + this.AddSideModelGripPoints(pts, dragPointType); + return pts; + } + MoveGripPoints(indexList, vec) { + if (indexList.length === 0) + return; + this.ClearSideModelingCache(); + if (this._SweepPath) { + this.MoveArcBoardPoints(indexList, vec, DragPointType.Grip); + this.Update(); + } + else + super.MoveGripPoints(indexList, vec); + } GetStretchPoints() { let pts = this.GetGripOrStretchPoints(DragPointType.Stretch); + pts = this.MapToArcPoints(pts, DragPointType.Stretch); for (let m of this._2DModelingList) { - pts.push(...m.path.GetStretchPoints().map(p => p.add(new three.Vector3(0, 0, m.dir === FaceDirection.Front ? this.thickness : 0)).applyMatrix4(this.OCS))); + pts.push(...m.path.GetStretchPoints().map(p => p.add(new three.Vector3(0, 0, m.dir === FaceDirection.Front ? this.thickness : 0)).applyMatrix4(this.OCSNoClone))); } return pts; } MoveStretchPoints(indexList, vec) { + if (indexList.length === 0) { + let undoData = this.UndoRecord(); + if (undoData) + undoData.WriteObjectHistoryPath(this, new HistorycRecord); + return; + } let exCount = arraySum(this.GetStrectchPointCountList(DragPointType.Stretch)); let originIndexList = []; let mIndexList = []; @@ -20839,7 +26320,10 @@ let Board = Board_1 = class Board extends ExtrudeSolid { mIndexList.push(i - exCount); } let oldOcs = this.OCS; - super.MoveStretchPoints(originIndexList, vec); + if (this._SweepPath) + this.MoveArcBoardPoints(originIndexList, vec, DragPointType.Stretch); + else + super.MoveStretchPoints(originIndexList, vec); if (!this.Id) return; arraySortByNumber$1(mIndexList); @@ -20865,9 +26349,37 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } this.Clear2DPathCache(); this.Clear3DPathCache(); + this.ClearSideModelingCache(); this.Update(exports.UpdateDraw.Geometry); } GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum) { + if (this._SweepPath) { + if (snapMode === ObjectSnapMode.Nea) { + let pts = []; + //这里实现对线框的快速捕捉 + let edgeGeom = this.EdgeGeometry; + let pos = edgeGeom.getAttribute("position"); + let p1 = new three.Vector3; + let p2 = new three.Vector3; + let line = new exports.Line(p1, p2); + line.ApplyMatrix(this.OCSNoClone); + let sel = frustum["_select_"]; + for (let y = 0; y < pos.count; y += 2) { + p1.fromArray(pos.array, y * 3); + p2.fromArray(pos.array, (y + 1) * 3); + p1.applyMatrix4(this._Matrix); + p2.applyMatrix4(this._Matrix); + sel.WorldToScreenPoint(p1); + sel.WorldToScreenPoint(p2); + if (sel.IntersectLine(p1, p2)) { + p1.fromArray(pos.array, y * 3); + p2.fromArray(pos.array, (y + 1) * 3); + arrayPushArray$1(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)); + } + } + return pts; + } + } let pts = super.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum); if (snapMode === ObjectSnapMode.End) { for (let vm of this._2DModelingList) { @@ -20901,8 +26413,226 @@ let Board = Board_1 = class Board extends ExtrudeSolid { pts.push(...ps); } } + //为圆弧板映射新的点表 + if (this._SweepPath) { + let inv = this.OCSInv; + let mtx = this._Matrix; + if (this._SweepAngle !== 0) { + inv.multiplyMatrices(this.ArcBuild.OCS2RotateMtx, inv); + mtx = new three.Matrix4().multiplyMatrices(mtx, this.ArcBuild.Rotate2OCSMtx); + } + for (let p of pts) + p.applyMatrix4(inv); + let xs = pts.map(p => p.x); + arraySortByNumber$1(xs); + arrayRemoveDuplicateBySort(xs, equaln$1); + this.ArcBuild.ParseAllX_Map(xs); + for (let p of pts) { + this.ArcBuild.PosMap2ArcPos(p); + p.applyMatrix4(mtx); + } + } return pts; } + MoveArcBoardPoints(indexList, vec, dragType) { + this.WriteAllObjectRecord(); + const isGrip = dragType === DragPointType.Grip; + const oldPts = isGrip ? this.GetGripPoints() : this.GetStretchPoints(); + const MoveBack = () => isGrip ? super.MoveGripPoints(indexList, offsetVec.clone().negate()) : super.MoveStretchPoints(indexList, offsetVec.clone().negate()); + let path = this.ArcBuild.SweepPath1.Clone(); + // 1、计算沿着SweepPath偏移的向量 + const offsetVec = this.GetOffsetVecAlongPath(oldPts[indexList[0]].clone(), vec, path); + const oldPos = this.Position; + const oldCon = this.ContourCurve.Clone(); + const ocs2rot = this.ArcBuild.OCS2RotateMtx; + oldCon.ApplyMatrix(ocs2rot); + const oldBox = oldCon.BoundingBox; + // 2、移动平板上的点 + isGrip ? super.MoveGripPoints(indexList, offsetVec) : super.MoveStretchPoints(indexList, offsetVec); + const newPos = this.Position; + const conMoveVec = TransformVector(newPos.clone().sub(oldPos), this.OCSInv); //轮廓在OCS中移动的向量 + const newCon = this.ContourCurve.Clone(); + newCon.Move(conMoveVec); + newCon.ApplyMatrix(ocs2rot); + const newBox = newCon.BoundingBox; + this._jigSweepPath = path.Clone(); + // 特殊场景:闭合SweepPath,其对应的首尾不能发生变化,否者会发生path和Contour映射错误。 + if (path.CloseMark && !(equaln$1(newBox.min.x, oldBox.min.x) && equaln$1(newBox.max.x, oldBox.max.x))) { + MoveBack(); // 若头尾被拖拽过,需要恢复回去 + return; + } + // 特殊场景:某些操作,对弧形板进行移动(如当拖拽中间点),未发生路径改变,则重新移动回去 + const newSize = newBox.getSize(new three.Vector3); + const oldSize = oldBox.getSize(new three.Vector3); + if (equaln$1(newSize.x, oldSize.x, 1e-3)) { + const newPts = isGrip ? this.GetGripPoints() : this.GetStretchPoints(); + if (oldPts.length === newPts.length) { + const vec = oldPts[0].clone().sub(newPts[0]); + const isMoveArcBoard = oldPts.every((pt, i) => equalv3(pt.clone().sub(newPts[i]), vec)); + if (isMoveArcBoard) { + MoveBack(); + return; + } + } + } + // 3、修正SweepPath + path = this.FixSweepPathByContourBondingbox(newBox, oldBox, path); + // 特殊场景:path 计算发生错误,需要恢复板的状态 + if (!path) { + MoveBack(); + return; + } + // 4、计算弧形板偏移矩阵 + if (this.objectId || (this.IsEmbedEntity)) { + const pts1 = isGrip ? newCon.GetGripPoints() : newCon.GetStretchPoints(); + const pts2 = isGrip ? oldCon.GetGripPoints() : oldCon.GetStretchPoints(); + const count = Math.min(pts1.length, pts2.length); + this._SweepArcBoardBuild = undefined; + for (let i = 0; i < count; i++) { + if (equalv2(pts1[i], pts2[i], 1e-3)) // 找到新板和旧板上不变的点,计算出偏移矩阵 + { + const pts = isGrip ? this.GetGripPoints() : this.GetStretchPoints(); + this.Move(oldPts[i].sub(pts[i])); + break; + } + } + this._SweepArcBoardBuild = undefined; + } + } + GetOffsetVecAlongPath(oldP, vec, path) { + const p = oldP.clone().add(vec); //拉伸后的点 在世界坐标系中 + const path2WCSMtx = new three.Matrix4().makeBasis(XAxis, ZAxis, YAxisN); + if (this._SweepAngle !== 0) + path2WCSMtx.premultiply(this.ArcBuild.Rotate2OCSMtx); + path2WCSMtx.premultiply(this.OCSNoClone); + const wcs2PathMtx = new three.Matrix4().getInverse(path2WCSMtx); + this._jigPath2WCSMtx = path2WCSMtx.clone(); + //变换到路径坐标系 + p.applyMatrix4(wcs2PathMtx); + oldP.applyMatrix4(wcs2PathMtx); + // 限制p, 在见光面的曲面中,计算偏移向量 + const cp = path.GetClosestPointTo(p, true); + const oldZ = oldP.z; + const newZ = p.z; + const oldPCp = path.GetClosestPointTo(oldP.setZ(0), false); //旧的最近点 + const oldDist = path.GetDistAtPoint2(oldPCp); // 移动前的Dist + const movedDist = path.GetDistAtPoint2(cp); // 移动后的Dist + const moveVec = new three.Vector3(movedDist - oldDist, -newZ + oldZ, 0); + //将moveVec转换到世界坐标系 + if (this._SweepAngle !== 0) + TransformVector(moveVec, this.ArcBuild.Rotate2OCSMtx); + TransformVector(moveVec, this.OCSNoClone); + return moveVec; + } + /** + * @private 通过新旧轮廓的Bondingbox修正路径 + * @param {Box3Ext} newBox 路径坐标系下,新轮廓的Bondingbox + * @param {Box3Ext} oldBox 路径坐标系下,旧轮廓的Bondingbox + * @param {Polyline} path 见光面路径 + * @return {*} {Polyline} 修正好的路径 + */ + FixSweepPathByContourBondingbox(newBox, oldBox, path) { + // 若头部和尾部重合,则直接不处理 + if (equaln$1(newBox.min.x, newBox.max.x, 0.1)) + return; + const GetArcAndKeys = () => { + const curves = path.Explode(); + const arcs = []; + for (let i = 0; i < curves.length; i++) + if (curves[i] instanceof exports.Arc) + arcs.push({ key: i, arc: curves[i].Clone() }); + return arcs; + }; + const arcKeys = GetArcAndKeys(); + const MovePath = (pathToMove, mVec) => { + // 修正SWeepPath + pathToMove.Move(mVec); + const { pts: pathPts, buls } = pathToMove.MatrixAlignTo2(new three.Matrix4); + pathToMove.OCSNoClone.identity(); + for (let i = 0; i < pathToMove.LineData.length; i++) { + pathToMove.LineData[i].pt.copy(pathPts[i]); + pathToMove.LineData[i].bul = buls[i]; + } + }; + let jigSpt = undefined; + const FixHead = () => { + if (!equaln$1(newBox.min.x, 0, 1e-3)) // 头部 + { + const c1 = path.GetCurveAtIndex(0); + if (newBox.min.x < 0) + path.Extend(newBox.min.x / c1.Length); // 延伸 + else + path = path.GetSplitCurves(path.GetParamAtDist(newBox.min.x))[1]; // 裁剪 + jigSpt = path.StartPoint.clone(); + MovePath(path, path.StartPoint.clone().negate()); // 修正Path + } + }; + const FixTail = () => { + if (!equaln$1(newBox.max.x, oldBox.max.x, 1e-3)) // 尾部 + { + const dist = newBox.max.x - oldBox.max.x; + const ce = path.GetCurveAtIndex(path.EndParam - 1); + if (dist > 0) + path.Extend(path.EndParam + ((dist) / ce.Length)); // 延伸 + else + path = path.GetSplitCurves(path.GetParamAtDist(newBox.max.x - newBox.min.x))[0]; // 裁剪, PS: 从尾部点拉伸到头部点之前,newBox.min.x不为零 + } + }; + /** + * 某些异形板左侧头部拉伸到尾部后面示意图: + * ___________ + * A | | + * |_______ | + * | | + * old B |___| + * _____ + * | | A + * ___|_____| + * | | + * new B |___| + */ + const outofTail = newBox.min.x >= oldBox.max.x + || equaln$1(newBox.min.x, oldBox.max.x, 1e-3) // 矩形板:拉伸后,新板头和旧板尾部相同 + || newBox.min.x > oldBox.min.x && newBox.max.x > oldBox.max.x; // 某些异形板:新板头会在旧板中间某处,新板尾超过旧版尾 + if (outofTail) { + // 头部拉伸在超过尾部,即新头部大于等于原尾部。则先对尾部延伸,再裁剪头部(若先裁剪头部,则path可能会为空) + FixTail(); + FixHead(); + } + else { + FixHead(); + FixTail(); + } + // 计算 this._SweepPath + let sweepPath = undefined; + if (this._SweepVisibleFace === FaceDirection.Back) { + sweepPath = path; + // 做offset偏移,查看path是否会被裁剪。若被裁剪,会破坏板和路径的映射关系,则不能继续其他操作 + if (this.objectId || (this.IsEmbedEntity && this.ParentEntity.objectId)) { + const frontPath = ArcBoardBuild.OffsetPolyline(sweepPath, -this.thickness); // 正面path + const backPath = ArcBoardBuild.OffsetPolyline(frontPath, this.thickness); // 背面path + if (!equaln$1(backPath.Length, sweepPath.Length, 1e-3)) + return; + } + } + else { + sweepPath = ArcBoardBuild.OffsetPolyline(path, this.thickness); + // 做offset偏移,查看path是否会被裁剪。若被裁剪,会破坏板和路径的映射关系,则不能继续其他操作 + if (this.objectId || (this.IsEmbedEntity && this.ParentEntity.objectId)) { + const frontPath = ArcBoardBuild.OffsetPolyline(sweepPath, -this.thickness); // 正面path + if (!equaln$1(frontPath.Length, path.Length, 1e-3)) + return; + } + } + this._SweepPath = sweepPath; + this._jigSweepPath = path.Clone(); + if (jigSpt) + MovePath(this._jigSweepPath, jigSpt); // 新路径,但是未进行起始点偏移。方便拖拽时,实时显示当前路径 + // 更新圆弧配置 + if (this.objectId || (this.IsEmbedEntity && this.ParentEntity.objectId)) + this.UpdateArcBoardOptionsByPath(arcKeys, this._jigSweepPath); + return path; + } DeferUpdate() { if (this.NeedUpdateFlag & exports.UpdateDraw.Matrix) { if (this.RelativeHardware.some(id => !id.IsErase)) @@ -20941,6 +26671,8 @@ let Board = Board_1 = class Board extends ExtrudeSolid { let fileId = file.ReadObjectId(); fileId && drIDs.push(fileId); } + if (ver > 21) + drIDs.Name = file.Read(); if (drIDs.length > 0) drIdList.push(drIDs); } @@ -20978,7 +26710,7 @@ let Board = Board_1 = class Board extends ExtrudeSolid { if (ver >= 9) this._IsChaiDan = file.Read(); if (ver >= 10) { - DeserializationBoard2DModeingData(file, this._2DModelingList); + DeserializationBoard2DModeingData(file, this._2DModelingList, ver); DeserializationBoard3DModeingData(file, this._3DModelingList); } this.Clear2DPathCache(); @@ -21014,6 +26746,7 @@ let Board = Board_1 = class Board extends ExtrudeSolid { processData.edgeRemarkLeft = file.Read(); processData.edgeRemarkRight = file.Read(); let count = file.Read(); + processData.highBoardEdgeRemark.length = 0; processData.highBoardEdgeRemark = file.ReadArray(count); } this._DrillAssociationLock.clear(); @@ -21027,10 +26760,67 @@ let Board = Board_1 = class Board extends ExtrudeSolid { this._DrillAssociationLock.add(id); } } + if (ver > 15) { + this._SweepPath = file.ReadObject(); + if (this._SweepPath) { + this._SweepAngle = file.Read(); + if (ver > 16) + this._SweepVisibleFace = file.Read(); + if (ver > 17) + this._isDrawArcGroove = file.Read(); + this._ArcBoardOptions.clear(); + const count = file.Read(); + for (let i = 0; i < count; i++) { + let key = file.Read(); + let opt = { + arcLength: file.Read(), + grooveSpacing: file.Read(), + grooveWidth: file.Read(), + retainedThickness: file.Read(), + grooveAddDepth: file.Read(), + grooveAddLength: file.Read(), + grooveAddWidth: file.Read(), + knifeRadius: file.Read(), + arcExtension: 0, + }; + if (ver > 18) + opt.arcExtension = file.Read(); + this._ArcBoardOptions.set(key, opt); + } + } + } + if (ver > 19) + this.AlignLineObject = file.ReadHardObjectId(); + if (ver > 20) + DeserializationBoardSideModeingData(file, this._SideModelingMap); + this.ClearSideModelingCache(); + if (ver > 22) + this._LockMaterial = file.ReadBool(); + else + this._LockMaterial = false; + if (ver > 23) { + processData.reservedEdgeUp = file.Read(); + processData.reservedEdgeDown = file.Read(); + processData.reservedEdgeLeft = file.Read(); + processData.reservedEdgeRight = file.Read(); + let count = file.Read(); + processData.highReservedEdge.length = 0; + for (let i = 0; i < count; i++) { + let size = file.Read(); + processData.highReservedEdge.push({ size }); + } + processData.sealColorUp = file.Read(); + processData.sealColorDown = file.Read(); + processData.sealColorLeft = file.Read(); + processData.sealColorRight = file.Read(); + processData.sealColorType = file.Read(); + } + if (ver > 24) + this.arcBoardFeedProcess = file.Read(); } WriteFile(file) { super.WriteFile(file); - file.Write(15); + file.Write(25); // file.Write(this._SpaceOCS.toArray()); ver < 6 file.Write(this._BoardType); file.Write(this._Name); @@ -21043,6 +26833,7 @@ let Board = Board_1 = class Board extends ExtrudeSolid { file.Write(ids.length); for (let id of ids) file.WriteObjectId(id); + file.Write(ids.Name); } } file.Write(this._LayerNails.length); @@ -21085,6 +26876,48 @@ let Board = Board_1 = class Board extends ExtrudeSolid { file.WriteObjectId(id); } } + //ver 16 + file.WriteObject(this._SweepPath); + if (this._SweepPath) { + file.Write(this._SweepAngle); + file.Write(this._SweepVisibleFace); + file.Write(this._isDrawArcGroove); + file.Write(this._ArcBoardOptions.size); + for (const [k, v] of this._ArcBoardOptions) { + file.Write(k); + file.Write(v.arcLength); + file.Write(v.grooveSpacing); + file.Write(v.grooveWidth); + file.Write(v.retainedThickness); + file.Write(v.grooveAddDepth); + file.Write(v.grooveAddLength); + file.Write(v.grooveAddWidth); + file.Write(v.knifeRadius); + file.Write(v.arcExtension); + } + } + //ver 20 + file.WriteHardObjectId(this.AlignLineObject); + //ver 21 + SerializeBoardSideModeingData(file, this._SideModelingMap); + // ver 23 + file.WriteBool(this._LockMaterial); + //ver 24 + file.Write(processData.reservedEdgeUp); + file.Write(processData.reservedEdgeDown); + file.Write(processData.reservedEdgeLeft); + file.Write(processData.reservedEdgeRight); + file.Write(processData.highReservedEdge.length); + for (let r of processData.highReservedEdge) { + file.Write(r.size); + } + file.Write(processData.sealColorUp); + file.Write(processData.sealColorDown); + file.Write(processData.sealColorLeft); + file.Write(processData.sealColorRight); + file.Write(processData.sealColorType); + // ver 25 + file.Write(this.arcBoardFeedProcess); } }; __decorate([ @@ -21093,6 +26926,9 @@ __decorate([ __decorate([ AutoRecord ], Board.prototype, "RelativeHandle", void 0); +__decorate([ + AutoRecord +], Board.prototype, "AlignLineObject", void 0); Board = Board_1 = __decorate([ Factory ], Board); @@ -21147,6 +26983,29 @@ function FastWireframe(br, color = 0, divCount = 6, optArc = true) { result.push(l); } } + if (br instanceof Board && br.HasSideModel) { + let con = GetBoardContour(br); + if (con) { + let inverseZ = con.Area2 < 0; + let cus = con.Explode(); + const mirrorMtxZ = MakeMirrorMtx(ZAxis); + for (let [index, soilds] of br.SideModelingMap) { + let cu = cus[index]; + if (!cu) + continue; + let mt4 = GetSideCuFaceMtx(cus[index], inverseZ); + for (let soild of soilds) { + let lines = FastWireframe(soild, color, 3, false); + for (let line of lines) { + line.applyMatrix4(mirrorMtxZ); + line.applyMatrix4(soild.OCSNoClone); + line.applyMatrix4(mt4); + result.push(line); + } + } + } + } + } return result; } function FastExtrudeEdgeGeometryOfShape(shape, z0, z1, divCount = 6, optArc = true, coords = []) { @@ -21255,11 +27114,62 @@ function GenerateExtrudeEdgeGeometryPoints(contourPoints, height) { return pts; } +//https://github.com/mrdoob/three.js/blob/master/src/geometries/ExtrudeGeometry.js#L727 +class WorldUVGenerator { + generateTopUV(geometry, vertices, indexA, indexB, indexC) { + const a_x = vertices[indexA * 3]; + const a_y = vertices[indexA * 3 + 1]; + const b_x = vertices[indexB * 3]; + const b_y = vertices[indexB * 3 + 1]; + const c_x = vertices[indexC * 3]; + const c_y = vertices[indexC * 3 + 1]; + return [ + new three.Vector2(a_x, a_y), + new three.Vector2(b_x, b_y), + new three.Vector2(c_x, c_y) + ]; + } + generateSideWallUV(geometry, vertices, indexA, indexB, indexC, indexD) { + const a_x = vertices[indexA * 3]; + const a_y = vertices[indexA * 3 + 1]; + const a_z = vertices[indexA * 3 + 2]; + const b_x = vertices[indexB * 3]; + const b_y = vertices[indexB * 3 + 1]; + const b_z = vertices[indexB * 3 + 2]; + const c_x = vertices[indexC * 3]; + const c_y = vertices[indexC * 3 + 1]; + const c_z = vertices[indexC * 3 + 2]; + const d_x = vertices[indexD * 3]; + const d_y = vertices[indexD * 3 + 1]; + const d_z = vertices[indexD * 3 + 2]; + if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x)) { + return [ + new three.Vector2(a_x, 1 - a_z), + new three.Vector2(b_x, 1 - b_z), + new three.Vector2(c_x, 1 - c_z), + new three.Vector2(d_x, 1 - d_z) + ]; + } + else { + return [ + new three.Vector2(a_y, 1 - a_z), + new three.Vector2(b_y, 1 - b_z), + new three.Vector2(c_y, 1 - c_z), + new three.Vector2(d_y, 1 - d_z) + ]; + } + } +} +const worldUVGenerator = new WorldUVGenerator(); + let ExtrudeHole = class ExtrudeHole extends Hole { constructor() { super(...arguments); + this._DisplayAccuracy = 0; this._contourCurve = new exports.Polyline(); this._knifeRadius = 3; + this._GoodsId = ""; + this._GoodsSn = ""; this.isHole = true; this.isThrough = false; } @@ -21272,6 +27182,24 @@ let ExtrudeHole = class ExtrudeHole extends Hole { this._knifeRadius = v; } } + get GoodsId() { + return this._GoodsId; + } + set GoodsId(value) { + if (this._GoodsId !== value) { + this.WriteAllObjectRecord(); + this._GoodsId = value; + } + } + get GoodsSn() { + return this._GoodsSn; + } + set GoodsSn(value) { + if (this._GoodsSn !== value) { + this.WriteAllObjectRecord(); + this._GoodsSn = value; + } + } Explode() { return [this.ContourCurve.Clone().ApplyMatrix(this.OCS)]; } @@ -21336,6 +27264,8 @@ let ExtrudeHole = class ExtrudeHole extends Hole { GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { switch (snapMode) { case ObjectSnapMode.End: + if (this._contourCurve instanceof exports.Circle) + return this.GetGripPoints(); return this.GetStretchPoints(); case ObjectSnapMode.Mid: case ObjectSnapMode.Cen: @@ -21356,6 +27286,16 @@ let ExtrudeHole = class ExtrudeHole extends Hole { } return []; } + get DisplayAccuracy() { + return this._DisplayAccuracy; + } + set DisplayAccuracy(v) { + if (!equaln$1(v, this._DisplayAccuracy)) { + this.WriteAllObjectRecord(); + this._DisplayAccuracy = v; + this.Update(); + } + } get Shape() { let contour = Contour.CreateContour(this.ContourCurve.Clone(), false); return new Shape(contour); @@ -21390,7 +27330,11 @@ let ExtrudeHole = class ExtrudeHole extends Hole { steps: 1, bevelEnabled: false, depth: this.Height, + UVGenerator: worldUVGenerator, }; + if (this.ContourCurve instanceof exports.Circle || this.ContourCurve instanceof exports.Polyline) { + this.ContourCurve.DisplayAccuracy = this._DisplayAccuracy; + } let geo = new three.ExtrudeGeometry(this.ContourCurve.Shape, extrudeSettings); geo.applyMatrix4(this._contourCurve.OCSNoClone); let mtl = this.Material?.Object ?? this.Db?.DefaultMaterial; @@ -21522,11 +27466,28 @@ let ExtrudeHole = class ExtrudeHole extends Hole { return [line, mesh]; } InitDrawObject(renderType = RenderType.Wireframe) { - if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) { - return new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)); + if (renderType === RenderType.Wireframe) { + return new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex)); } - else if (renderType === RenderType.Conceptual || renderType === RenderType.Physical2) { - return new three.Object3D().add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))); + else if (renderType === RenderType.Conceptual) { + return new three.Object3D().add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))); + } + // 概念透明 + else if (renderType === RenderType.ConceptualTransparent) { + let color = this.DrawColorIndex; + if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) + color = 8; + return new three.Object3D().add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, three.FrontSide)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))); + } + else if (renderType === RenderType.Physical2) { + let mesh = new three.Mesh(this.MeshGeometry, this.MeshMaterial); + Object.defineProperty(mesh, "castShadow", { + get: () => this.CaseShadow + }); + Object.defineProperty(mesh, "receiveShadow", { + get: () => this.CaseShadow + }); + return new three.Object3D().add(mesh, new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())); } else if (renderType === RenderType.Physical) { let mesh = new three.Mesh(this.MeshGeometry, this.MeshMaterial); @@ -21548,10 +27509,10 @@ let ExtrudeHole = class ExtrudeHole extends Hole { this._EdgeGeometry = undefined; this._MeshGeometry = undefined; this.MeshGeometry; - if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) { + if (renderType === RenderType.Wireframe) { let l = obj; l.geometry = this.EdgeGeometry; - l.material = ColorMaterial.GetLineMaterial(this.ColorIndex); + l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex); } else if (renderType === RenderType.Print) { obj.add(...this.GetPrintObject3D()); @@ -21561,25 +27522,54 @@ let ExtrudeHole = class ExtrudeHole extends Hole { mesh.geometry = this.MeshGeometry; mesh.material = this.MeshMaterial; } - else if (renderType === RenderType.Conceptual || renderType === RenderType.Physical2) { - obj.add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))); + else if (renderType === RenderType.Physical2) { + let mesh = new three.Mesh(this.MeshGeometry, this.MeshMaterial); + Object.defineProperty(mesh, "castShadow", { + get: () => this.CaseShadow + }); + Object.defineProperty(mesh, "receiveShadow", { + get: () => this.CaseShadow + }); + return obj.add(mesh, new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())); + } + else if (renderType === RenderType.Conceptual) { + obj.add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))); + } + // 概念透明 + else if (renderType === RenderType.ConceptualTransparent) { + let color = this.DrawColorIndex; + if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) + color = 8; + return obj.add(new three.Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, three.FrontSide)), new three.LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))); } else if (renderType === RenderType.Jig) obj.add(...FastWireframe2(this)); return obj; } UpdateDrawObjectMaterial(renderType, obj) { - if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) { + if (renderType === RenderType.Wireframe) { let l = obj; - l.material = ColorMaterial.GetLineMaterial(this.ColorIndex); + l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex); + } + // 概念透明 + else if (renderType === RenderType.ConceptualTransparent) { + let mesh = obj.children[0]; + let color = this.DrawColorIndex; + if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) + color = 8; + mesh.material = ColorMaterial.GetConceptualTransparentMaterial(color, three.FrontSide); } else if (renderType === RenderType.Physical) { let mesh = obj; mesh.material = this.MeshMaterial; } + else if (renderType === RenderType.Physical2) { + let mesh = obj.children[0]; + mesh.material = this.MeshMaterial; + } else if (renderType !== RenderType.Jig && renderType !== RenderType.Print) { let mesh = obj.children[0]; - mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex); + mesh.material = ColorMaterial.GetConceptualMaterial(this.DrawColorIndex); } } ClearDraw() { @@ -21615,19 +27605,31 @@ let ExtrudeHole = class ExtrudeHole extends Hole { for (let i = 0; i < count; i++) file.ReadSoftObjectId(); } + if (ver > 5) { + this._GoodsId = file.Read(); + this._GoodsSn = file.Read(); + } + if (ver > 6) { + this._DisplayAccuracy = file.Read(); + } this.Update(); } //对象将自身数据写入到文件. WriteFile(file) { super.WriteFile(file); - file.Write(5); + file.Write(7); file.WriteObject(this._contourCurve); file.Write(this._knifeRadius); file.Write(this.isHole); file.Write(this.isThrough); file.Write(this.type); - //ver= 5 弃用 + //ver = 5 弃用 file.Write(0); + //ver = 6 + file.Write(this._GoodsId); + file.Write(this._GoodsSn); + //ver = 7 + file.Write(this._DisplayAccuracy); } }; __decorate([ @@ -22013,8 +28015,8 @@ class FeedingToolPath extends Singleton { /**用于测试走刀路径 */ TestCalcPath(br, isCd = false, rk = 0) { let modelings = br.BoardModeling; - let allModeling = GetModelingFromCustomDrill(br); - modelings.push(...allModeling.modeling); + let { modeling } = GetModelingFromCustomDrill(br); + modelings.push(...modeling); if (isCd && HostApplicationServices.chaidanOption.useDefaultRad) modelings.forEach(m => m.knifeRadius = HostApplicationServices.chaidanOption.radius); if (isCd) @@ -22078,21 +28080,55 @@ class FeedingToolPath extends Singleton { } return cus; } + //获取侧面造型走刀 + GetSideModelFeedPath(solid, faceContour, redundancyKnif = 0) { + let cus = []; //返回走刀路径 + let shape = solid.Shape; + let thickness = solid.Thickness; + let knifeRadius = solid.KnifeRadius; + let addLen = solid.GroovesAddLength; + let addDepth = solid.GroovesAddDepth; + let addWidth = solid.GroovesAddWidth; + if (!knifeRadius) + knifeRadius = 3; + if (addDepth) + thickness += addDepth; + if (thickness < 1e-5) + return cus; + shape = shape.Clone().ApplyMatrix(solid.OCSNoClone); + shape.Z0(); + this.GrooveAddSize(shape, addLen, addWidth); + this.HandleThoughGroove(faceContour, shape, knifeRadius); + //造型半径和刀半径相等,返回重合点的线 + let outline = shape.Outline.Curve; + if (outline instanceof exports.Circle && equaln$1(outline.Radius, knifeRadius)) + return [new exports.Polyline([{ pt: AsVector2(outline.Center), bul: 0 }, { pt: AsVector2(outline.Center), bul: 0 }])]; + // { + // todo 全深槽 + // } + let offsetCus = this.HandleShape(shape, knifeRadius, true, redundancyKnif); + if (offsetCus.length > 1) + cus.push(...OptimizeToolPath(offsetCus, shape, knifeRadius)); + return cus; + } GrooveAddSize(shape, addLen, addWidth) { shape.Outline.Curve.Position = shape.Outline.Curve.Position.setZ(0); + //addWidth可能为undefined 导致box计算错误 + let length = addLen ?? 0; + let width = addWidth ?? 0; //若是矩形,应用槽加长 - if (addLen > 0 || addWidth > 0) { + if (length != 0 || width != 0) { let rectInfo = IsRect(shape.Outline.Curve); if (rectInfo) { let box = rectInfo.box; let size = rectInfo.size; if (size.x > size.y) { - box.max.add(new three.Vector3(addLen / 2, addWidth / 2)); - box.min.add(new three.Vector3(-addLen / 2, -addWidth / 2)); + box.max.add(new three.Vector3(length / 2, width / 2)); + box.min.add(new three.Vector3(-length / 2, -width / 2)); } else { - box.max.add(new three.Vector3(addWidth / 2, addLen / 2)); - box.min.add(new three.Vector3(-addWidth / 2, -addLen / 2)); + box.max.add(new three.Vector3(width / 2, length / 2)); + box.min.add(new three.Vector3(-width / 2, -length / 2)); } let pl = new exports.Polyline().RectangleFrom2Pt(box.min, box.max).ApplyMatrix(rectInfo.OCS); shape.Outline = Contour.CreateContour(pl); @@ -22134,6 +28170,7 @@ class FeedingToolPath extends Singleton { } return cons; } + //检查正反面造型 CheckModeling(br) { let errorIndexs = []; let modelings = br.BoardModeling; @@ -22150,10 +28187,43 @@ class FeedingToolPath extends Singleton { } return errorIndexs; } + //检查侧面造型 + CheckSideModeling(br) { + let allSideModelGrooveMap = br.AllSideModelGrooveMap; + if (!allSideModelGrooveMap?.size) + return []; + let errorSideModel = []; + let faces = new ParseBoardSideFace(br); + let con = GetBoardContour(br); + if (!con) + return errorSideModel; + let inverseZ = con.Area2 < 0; + let cus = con.Explode(); + const mirrorMtxZ = MakeMirrorMtx(ZAxis); + for (let [n, solids] of allSideModelGrooveMap) { + let faceContour = faces.Faces[n].Region.ShapeManager.ShapeList[0].Outline.Curve; + let mt4 = GetSideCuFaceMtx(cus[n], inverseZ); + for (let solid of solids) { + // 圆造型拆成孔 + // let cu = solid.Shape.Outline.Curve; + // if (!solid.Shape.Holes.length && cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6) + // continue; + let paths = this.GetSideModelFeedPath(solid, faceContour); //走刀路径 + if (!paths.length) { + let s = solid.Clone(); + s.ApplyMatrix(mirrorMtxZ); + s.ApplyMatrix(mt4); + s.ApplyMatrix(br.OCS); + errorSideModel.push(s); + } + } + } + return errorSideModel; + } CheckCustomHole(br) { - let { modeling, sideModeling } = GetModelingFromCustomDrill(br); + let { modeling } = GetModelingFromCustomDrill(br); let errHoles = []; - for (let m of [...modeling, ...sideModeling]) { + for (let m of modeling) { let cu = m.shape.Outline.Curve; if (m.shape.Holes.length === 0 && cu instanceof exports.Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6) continue; @@ -22266,39 +28336,92 @@ class FeedingToolPath extends Singleton { } function GetModelingFromCustomDrill(br) { let normal = br.Normal; - let outline = GetBoardContour(br); + let brInv = br.OCSInv; + let originOutline = GetBoardContour(br); + let outline = originOutline; let modeling = []; let sideModeling = []; const holes = []; let bbox = br.BoundingBoxInOCS; let holeBoxMap = new WeakMap(); - for (let [, idss] of br.DrillList) { + if (br.IsArcBoard && br.DrillList.size) + ParseArcBoardHoles(br, new three.Vector3); + const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption; + for (let [objetId, idss] of br.DrillList) { + let linkBoard = objetId?.Object; + if (cancelHoleProcessing && linkBoard) { + const [L, W, H] = [linkBoard.BoardProcessOption.spliteHeight, linkBoard.BoardProcessOption.spliteWidth, linkBoard.BoardProcessOption.spliteThickness]; + if ((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) + continue; + } for (let ids of idss) { for (let id of ids) { - if (id?.Object && !id.Object.IsErase && id.Object instanceof ExtrudeHole && id.Object.isHole) { - if (!(id.Object.ContourCurve instanceof exports.Circle)) { - let en = id.Object; - let enBox = en.GetBoundingBoxInMtx(br.OCSInv); - holeBoxMap.set(en, enBox); - if (enBox.clone().intersect(bbox).isSolid(0.1)) - holes.push(id.Object); + if (!id?.Object || id.Object.IsErase) + continue; + let hole = id.Object; + if (hole instanceof ExtrudeHole && hole.isHole) { + if (!(hole.ContourCurve instanceof exports.Circle)) { + hole["__CacheChaiDanName__"] = ids.Name; + if (br.IsArcBoard) { + let ocs = hole["__CacheBrOCS__"]; + if (!ocs) + continue; + brInv = new three.Matrix4().getInverse(ocs); + let holeBox = hole.GetBoundingBoxInMtx(brInv); + holeBoxMap.set(hole, holeBox); + if (hole.BoundingBox.clone().intersect(br.BoundingBox).isSolid(0.1)) + holes.push(hole); + } + else { + let holeBox = hole.GetBoundingBoxInMtx(brInv); + holeBoxMap.set(hole, holeBox); + if (holeBox.clone().intersect(bbox).isSolid(0.1)) + holes.push(hole); + } + continue; } } - else - break; + hole["__CacheAddPos__"] = undefined; + hole["__CacheBrOCS__"] = undefined; + hole["__CacheContour__"] = undefined; } } } - for (let en of holes) { - let box = holeBoxMap.get(en); + for (let hole of holes) { + let box = holeBoxMap.get(hole); let max = box.max; let min = box.min; let dir; - let shape = en.Shape; - let diff = br.OCSInv.multiply(en.OCS); + let shape = hole.Shape; + let faceRegions; + let faceRegionsBox; + let addPos; + let chaiDanName = hole["__CacheChaiDanName__"]; + hole["__CacheChaiDanName__"] = undefined; + if (br.IsArcBoard) { + addPos = hole["__CacheAddPos__"]; + faceRegions = hole["__CacheContour__"]; + let ocs = hole["__CacheBrOCS__"]; + hole["__CacheAddPos__"] = undefined; + hole["__CacheBrOCS__"] = undefined; + hole["__CacheContour__"] = undefined; + if (!ocs || !addPos || !faceRegions?.length) + return; + else { + brInv = new three.Matrix4().getInverse(ocs); + normal = new three.Vector3().setFromMatrixColumn(ocs, 2); + faceRegionsBox = new three.Box3(); + for (let pl of faceRegions) + faceRegionsBox.union(pl.BoundingBox); + let boxSize = faceRegionsBox.getSize(new three.Vector3); + let extrude = Board.CreateBoard(boxSize.y, boxSize.x, 1); + outline = extrude.ContourCurve; + } + } + let diff = brInv.clone().multiply(hole.OCS); shape.ApplyMatrix(diff); let thickness; - if (isParallelTo(normal, en.Normal)) { + if (isParallelTo(normal, hole.Normal)) { if (min.z > br.Thickness - 1e-6) continue; //在板件的世界,0.01的误差应该不能被看出来,所以我们允许0.01的容差(这样应该是没问题的) @@ -22315,41 +28438,86 @@ function GetModelingFromCustomDrill(br) { else continue; if (thickness > 1e-6 && isTargetCurInOrOnSourceCur(outline, shape.Outline.Curve.Clone().Z0())) { + if (br.IsArcBoard) { + //弧形板需要单独增加差值 + shape.Position = shape.Position.add(addPos); + if (br.SweepAngle) { + let ocsInv = new three.Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx); + shape.ApplyMatrix(ocsInv); + } + } modeling.push({ shape, thickness, dir, - knifeRadius: en.KnifeRadius, + knifeRadius: hole.KnifeRadius, addLen: 0, - originEn: en, + addDepth: 0, + addWidth: 0, + originEn: hole, }); } } else { if (min.z <= 0 || max.z >= br.Thickness) continue; - let spt = en.Position.applyMatrix4(br.OCSInv).setZ(0); - if (outline.PtOnCurve(spt)) - continue; - let line = new exports.Line(spt, en.Position.add(en.Normal.multiplyScalar(en.Height)).applyMatrix4(br.OCSInv).setZ(0)); - let pt = outline.IntersectWith(line, 0)[0]; + let spt = hole.Position.applyMatrix4(brInv).setZ(0); + // 有可能Z向量朝向轮廓内部 + // if (outline.PtOnCurve(spt)) continue; + let line = new exports.Line(spt, hole.Position.add(hole.Normal.multiplyScalar(hole.Height)).applyMatrix4(brInv).setZ(0)); + let pt = outline.IntersectWith(line, IntersectOption.ExtendNone, 1e-5)[0]; if (!pt) continue; + let thickness = 0; + for (let p of [line.StartPoint, line.EndPoint]) { + if (outline.PtInCurve(p)) { + thickness = p.distanceTo(pt); + break; + } + } + //漏网之鱼 过滤掉不在板内的排钻 :677计算的弧形板包围盒不准确导致 + if (thickness < 1e-3) + continue; let index = Math.floor(outline.GetParamAtPoint(pt)); - let thickness = line.StartPoint.distanceTo(pt); - let shape = en.Shape.ApplyMatrix(en.OCS).ApplyMatrix(br.OCSInv); let vec = line.GetFirstDeriv(0).normalize().multiplyScalar(thickness); shape.Position = shape.Position.add(vec); - //侧面造型仅在多段线直线上 - let cu = outline.GetCurveAtIndex(index); - shape.ApplyMatrix(new three.Matrix4().getInverse(GetSideFaceMtx(cu))); + if (br.IsArcBoard) { + //弧形板需要单独增加差值 + shape.Position = shape.Position.add(addPos); + pt = pt.add(addPos); + if (br.SweepAngle) { + let ocsInv = new three.Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx); + pt.applyMatrix4(ocsInv); + shape.ApplyMatrix(ocsInv); + } + } + if (br.IsArcBoard) { + //侧面造型仅在多段线直线上 + //因为侧面造型起点特殊性 要处理一下 + index = Math.floor(originOutline.GetParamAtPoint(pt)); + let cu = originOutline.GetCurveAtIndex(index); + if (cu) + shape.ApplyMatrix(new three.Matrix4().getInverse(GetSideCuFaceMtx(cu))); + else { + console.error("圆弧板非圆侧孔求交失败"); + continue; + } + } + else { + let cu = outline.GetCurveAtIndex(index); + shape.ApplyMatrix(new three.Matrix4().getInverse(GetSideCuFaceMtx(cu))); + } sideModeling.push({ - shape, + outline: ConverToPtsBul(shape.Outline.Curve, false), + holes: shape.Holes.map((cu) => ConverToPtsBul(cu.Curve, false)), thickness, dir: index, - knifeRadius: en.KnifeRadius, + knifeRadius: hole.KnifeRadius, addLen: 0, - originEn: en, + addDepth: 0, + addWidth: 0, + chaiDanName, + modelType: exports.ModelType.drill }); } } @@ -22386,13 +28554,13 @@ function VKnifToolPath(polyline, feedingDepth, knifAngle) { ptsbul.push({ pt: c1.EndPoint, bul: 0 }); break; } + let derv1 = c1.GetFirstDeriv(0).normalize(); + let derv2 = c2.GetFirstDeriv(0).normalize(); //圆弧与直线相切,此时不要提刀 - if (isParallelTo(c1.GetFirstDeriv(0), c2.GetFirstDeriv(0))) + if (isParallelTo(derv1, derv2, 1e-6)) continue; //计算提刀部分: //向量与平分线,参照倒角代码 - let derv1 = c1.GetFirstDeriv(0).normalize(); - let derv2 = c2.GetFirstDeriv(0).normalize(); let bisectorVec = derv1.clone().negate().add(derv2).multiplyScalar(0.5); let co1 = c1.GetOffsetCurves(x * Math.sign(derv1.cross(bisectorVec).z))[0]; let co2 = c2.GetOffsetCurves(x * Math.sign(derv2.cross(bisectorVec).z))[0]; @@ -23175,7 +29343,32 @@ function PathScale(pts, scale) { return pts; } +const MAX_CACHE_LEN = 100000; class NestCache { + static SetPos(key, value) { + if (this._PosCacheCount > MAX_CACHE_LEN) { + // this._PosCacheCount = 0; + // this._PositionCache = {}; + return; + } + this._PositionCache[key] = value; + this._PosCacheCount++; + } + static GetPos(key) { + return this._PositionCache[key]; + } + static SetNoPut(key, value) { + if (this._NoPutCacheCount > MAX_CACHE_LEN) { + // this._NoPutCacheCount = 0; + // this._NoPutCache = {}; + return; + } + this._NoPutCache[key] = value; + this._NoPutCacheCount++; + } + static GetNoPut(key) { + return this._NoPutCache[key]; + } /** * 用于创建原点在0点的矩形路径 */ @@ -23194,17 +29387,18 @@ class NestCache { static Clear() { this.CachePartPosCount = 0; this.CacheNoSetCount = 0; - this.CacheRect.clear(); - this.PositionCache = {}; + this._PositionCache = {}; + this._PosCacheCount = 0; + this._NoPutCache = {}; + this._NoPutCacheCount = 0; } } //放置零件时,命中缓存的次数 NestCache.CachePartPosCount = 0; //放置零件时,命中无法放置缓存的次数 NestCache.CacheNoSetCount = 0; //noset -NestCache.PositionCache = {}; -NestCache.NoPutCache = {}; -NestCache.CacheRect = new Map(); +NestCache._PositionCache = {}; +NestCache._NoPutCache = {}; const TEXT_BOX = NestCache.CreatePath(570, 110); /** @@ -24028,6 +30222,7 @@ exports.InitClipperCpp = InitClipperCpp; exports.IsPtsAllOutOrOnReg = IsPtsAllOutOrOnReg; exports.IsRect = IsRect; exports.LargestInteriorRectangle = LargestInteriorRectangle; +exports.ParseArcBoardHoles = ParseArcBoardHoles; exports.ParseRegionTextPos = ParseRegionTextPos; exports.PointsSimplify2PolylineAndParseArc = PointsSimplify2PolylineAndParseArc; exports.Polyline2Points = Polyline2Points; diff --git a/api.cjs.js.map b/api.cjs.js.map index 5ba81cb..845cfb8 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/StoreageKeys.ts","../src/Common/eval.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/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/Matrix2.ts","../src/Geometry/Plane.ts","../src/Geometry/RotateUV.ts","../src/DatabaseServices/Entity/Line.ts","../src/DatabaseServices/Entity/Ellipse.ts","../src/DatabaseServices/Entity/Circle.ts","../src/Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams.ts","../src/DatabaseServices/Shape2.ts","../src/Geometry/CreatePolylinePath.ts","../src/Geometry/DoIntersect.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/Add-on/DrawDrilling/DrillType.ts","../src/Common/Log.ts","../src/Common/Singleton.ts","../src/Geometry/UVUtils.ts","../src/DatabaseServices/Shape.ts","../src/DatabaseServices/ShapeManager.ts","../src/DatabaseServices/Entity/Region.ts","../src/Add-on/BoardEditor/Board2Regions.ts","../src/Common/BoardKeyList.ts","../src/Add-on/BoardEditor/SerializeBoardData.ts","../src/DatabaseServices/3DSolid/Hole.ts","../src/DatabaseServices/3DSolid/CylinderHole.ts","../src/Add-on/DrawDrilling/HoleUtils.ts","../src/Geometry/BoardUVGenerator.ts","../src/Geometry/CSGSubtract/CSGSubtractTaskManager.ts","../src/DatabaseServices/Entity/BoardInterface.ts","../src/Geometry/PointShapeUtils.ts","../src/Common/Toaster.ts","../src/Nest/Common/Util.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/OptionInterface/AutoDimBrsOption.ts","../src/UI/Store/OptionInterface/BoardBatchCurtailOption .ts","../src/UI/Store/OptionInterface/ClosingStripOption.ts","../src/UI/Store/OptionInterface/OptionEnum.ts","../src/UI/Store/WineRackInterface.ts","../src/Editor/OrderType.ts","../src/Editor/DefaultConfig.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/DatabaseServices/GroupTableRecord.ts","../src/Common/AddEntityDrawObject.ts","../src/csg/core/constants.ts","../src/csg/core/FuzzyFactory.ts","../src/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.ts","../src/DatabaseServices/Entity/GenUVForWorld.ts","../src/DatabaseServices/Entity/Extrude.ts","../src/DatabaseServices/Entity/CompositeEntity.ts","../src/DatabaseServices/Hardware/HardwareCompositeEntity.ts","../src/Geometry/DrillParse/BoardGetFace.ts","../src/Production/Convert2PtsBul.ts","../src/Production/Product.ts","../src/GraphicsSystem/ParseEdgeSealDir.ts","../src/GraphicsSystem/CalcEdgeSealing.ts","../src/DatabaseServices/Entity/Board.ts","../src/Geometry/CreateWireframe.ts","../src/Geometry/SimpleExtrudeEdgeGeometry.ts","../src/DatabaseServices/3DSolid/ExtrudeHole.ts","../src/GraphicsSystem/ToolPath/OptimizeToolPath.ts","../src/GraphicsSystem/ToolPath/FeedingToolPath.ts","../src/GraphicsSystem/ToolPath/VKnifToolPath.ts","../src/Geometry/ConverToPolylineAndSplitArc.ts","../src/Nest/Common/Area.ts","../src/Nest/Converter/Path2Polyline.ts","../src/Nest/Common/Vector2.ts","../src/Nest/Common/Box2.ts","../src/Nest/Common/ClipperCpp.ts","../src/Nest/Core/Path.ts","../src/Nest/Core/NestCache.ts","../src/DatabaseServices/Room/ParseService/ParseRegionTextPos.ts","../src/DatabaseServices/Room/ParseService/RangeUtils.ts","../src/Geometry/CheckIntersect.ts","../src/Nest/Common/ArrayExt.ts","../src/Add-on/testEntity/LargestInteriorRectangle.ts","../src/Nest/Converter/Curves2Points.ts","../src/Nest/Converter/Simplify2.ts","../src/Nest/Converter/CurveWrap.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 six = 6\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,//封边检查 OpenCabinet.UNOPENRENDERTYPE 该视图下不支持开门动作\r\n PlaceFace = 8,//排版面 OpenCabinet.UNOPENRENDERTYPE 该视图下不支持开门动作\r\n BigHoleFace = 81, //大孔面 OpenCabinet.UNOPENRENDERTYPE 该视图下不支持开门动作\r\n CustomNumber = 9,//自定义编号\r\n ModelGroove = 10,//造型槽 OpenCabinet.UNOPENRENDERTYPE 该视图下不支持开门动作\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 CustomNumberPrint = 109,\r\n\r\n ConceptualTransparent = 182//概念透明\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 { ObjectId } from '../DatabaseServices/ObjectId';\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 DefaultFloorMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n DefaultWallMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n DefaultBulkheadCeilingMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n\r\n IsRoomEntityVisible = true;//室内实体可见\r\n\r\n CurrentDimStyle: ObjectId;\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 @ProxyValue ConceptualOpacity = 1;//概念透明的透明度\r\n\r\n DrawWallBottomFace = false;//绘制底面\r\n sealReserve = 0; //封边统计留头量\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 //#region 显示纹路\r\n @ProxyValue showLines = false;\r\n //#endregion\r\n\r\n //#region 显示开门方向纹路\r\n @ProxyValue showOpenDirLines = false;\r\n //#endregion\r\n\r\n //#region 显示二维刀路路径线条\r\n @ProxyValue show2DPathLine = false;\r\n //#endregion\r\n\r\n //#region 显示二维刀路\r\n @ProxyValue show2DPathObject = 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 drillRemark: false,//拆单获取排钻备注\r\n checkSealType: \"1\",\r\n sealMaxValue: 10,//封边最大值\r\n sealValues: '',//封边值列表\r\n hardwareExpressionFormattingAccuracy: 2,//复合实体表达式值格式化精度\r\n partialSplitValueCanTakesEffect: 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 boardCustomNumberTextHeight = 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 WriteBool(v: boolean)\r\n {\r\n this.Write(v ? 1 : 0);\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 Write2dArray(arr: [any, any][])\r\n {\r\n this._datas.push(arr.length, ...arr.flat());\r\n }\r\n\r\n Read(): any\r\n {\r\n return this._datas[this.readIndex++];\r\n }\r\n\r\n ReadBool()\r\n {\r\n return Boolean(this.Read());\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 Read2dArray(): [any, any][]\r\n {\r\n let count = this.Read();\r\n let arr = this._datas.slice(this.readIndex, this.readIndex + count * 2);\r\n this.readIndex += count * 2;\r\n\r\n let arr2d: [any, any][] = [];\r\n for (let i = 0; i < arr.length; i = i + 2)\r\n arr2d.push([arr[i], arr[i + 1]]);\r\n\r\n return arr2d;\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.ReadBool();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.WriteBool(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.ReadBool();\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.WriteBool(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\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 if (ver === 1)\r\n file.ReadObject();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n file.WriteObject(this.undoData);\r\n file.WriteObject(this.redoData);\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 = \"u_ro\";\r\n","import { Status } from \"../Common/Status\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { CADObject } from \"./CADObject\";\r\nimport { SymbolTable } from \"./Tables/SymbolTable\";\r\n\r\nexport abstract 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 { Factory } from \"./CADFactory\";\r\nimport { SymbolTableRecord } from \"./SymbolTableRecord\";\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\r\n constructor()\r\n {\r\n super();\r\n\r\n Object.defineProperty(this.material, \"ObjectId\", {\r\n get: () =>\r\n {\r\n return this?.objectId?.Index;\r\n }\r\n });\r\n }\r\n\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?.Object && !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?.Object && !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?.Object && !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 { Frustum, 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 { MatrixPlanarizere, matrixIsCoplane, tempMatrix1 } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { GetBox, IdentityMtx4, UpdateBoundingSphere, equaln, equalv3 } 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 protected HasBigHoleFaceRenderType = 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 constructor()\r\n {\r\n super();\r\n if (this._drawObject)\r\n throw \"未知错误 实体内部已经有对象\";\r\n\r\n this._drawObject = undefined;\r\n }\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 protected _VisibleInRender = true;//在渲染器中显示\r\n protected _Freeze = false;//冻结(无法被选中)\r\n\r\n get Freeze() { return this._Freeze; }\r\n set Freeze(f: boolean)\r\n {\r\n if (f === this._Freeze) return;\r\n this.WriteAllObjectRecord();\r\n this._Freeze = f;\r\n this.Update(UpdateDraw.Material);\r\n }\r\n\r\n get VisibleInRender() { return this._VisibleInRender; }\r\n set VisibleInRender(v: boolean)\r\n {\r\n if (this._VisibleInRender !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._VisibleInRender = v;\r\n }\r\n }\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() { return this._MaterialId; }\r\n\r\n GetMaterialSlots() { }\r\n\r\n SetMaterialAtSlot(mtl: ObjectId, slotIndex: number)\r\n {\r\n this.Material = mtl;\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 isClearDraw = this._CacheDrawObject.size === 0;\r\n let box = this.BoundingBox;\r\n this._Matrix = mtxBak;\r\n if (isClearDraw)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n obj.matrix = this._Matrix;//因为使用了备份的矩阵,导致此时这个矩形是错误的,这里还原它\r\n this.Update(UpdateDraw.Matrix);//保证盒子是正确的\r\n }\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 tempMatrix1.identity().setPosition(v.x, v.y, v.z);\r\n this.ApplyMatrix(tempMatrix1);\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 this.Move({ x: moveX, y: moveY, z: moveZ });\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.OCSNoClone, 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 if (Array.isArray(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 = undefined;\r\n\r\n get DrawObject()\r\n {\r\n if (this.constructor.name === \"Entity\" || this.constructor.name === \"CADObject\")\r\n throw \"出错了\";\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 if (renderType === RenderType.BigHoleFace && !this.HasBigHoleFaceRenderType)\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 /** 立即更新 */\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(): Material | Material[]\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 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 frustum?: Frustum,\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(cloneDraw = true): this\r\n {\r\n let ent = super.Clone();\r\n ent._CurRenderType = this._CurRenderType;\r\n ent.Template = undefined;\r\n if (cloneDraw)\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 if (!this._MaterialId)\r\n this._MaterialId = file.database?.DefaultMaterial?.Id;\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.ReadBool();\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 if (ver > 8)\r\n this._Freeze = file.ReadBool();\r\n else\r\n this._Freeze = false;\r\n\r\n if (ver > 9)\r\n this._VisibleInRender = file.ReadBool();\r\n else\r\n this._VisibleInRender = true;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(10);\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.WriteBool(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 file.WriteBool(this._Freeze);\r\n file.WriteBool(this._VisibleInRender);\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","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 ShopName = \"shopName\",\r\n ShopProps = \"ShopProps\",\r\n\r\n AgentShopName = \"AgentShopName\",//经销商名称\r\n AgentPhone = \"AgentPhone\",//经销商电话\r\n VersionName = \"VersionName\",//版本名称\r\n RegisterTime = \"RegisterTime\",//注册时间\r\n\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 { MathUtils } from \"three\";\r\nimport { equaln } from \"../Geometry/GeUtils\";\r\nimport { clamp as CLAMP, FixedNotZero } from \"./Utils\";\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 //eval_gen_code\r\n let abs = Math.abs;\r\n let acos = Math.acos;\r\n let acosh = Math.acosh;\r\n let asin = Math.asin;\r\n let asinh = Math.asinh;\r\n let atan = Math.atan;\r\n let atanh = Math.atanh;\r\n let atan2 = Math.atan2;\r\n let ceil = Math.ceil;\r\n let cbrt = Math.cbrt;\r\n let expm1 = Math.expm1;\r\n let clz32 = Math.clz32;\r\n let cos = Math.cos;\r\n let cosh = Math.cosh;\r\n let exp = Math.exp;\r\n let floor = Math.floor;\r\n let fround = Math.fround;\r\n let hypot = Math.hypot;\r\n let imul = Math.imul;\r\n let log = Math.log;\r\n let log1p = Math.log1p;\r\n let log2 = Math.log2;\r\n let log10 = Math.log10;\r\n let max = Math.max;\r\n let min = Math.min;\r\n let pow = Math.pow;\r\n let random = Math.random;\r\n let round = Math.round;\r\n let sign = Math.sign;\r\n let sin = Math.sin;\r\n let sinh = Math.sinh;\r\n let sqrt = Math.sqrt;\r\n let tan = Math.tan;\r\n let tanh = Math.tanh;\r\n let trunc = Math.trunc;\r\n let E = Math.E;\r\n let LN10 = Math.LN10;\r\n let LN2 = Math.LN2;\r\n let LOG10E = Math.LOG10E;\r\n let LOG2E = Math.LOG2E;\r\n let PI = Math.PI;\r\n let SQRT1_2 = Math.SQRT1_2;\r\n let SQRT2 = Math.SQRT2;\r\n let clamp = CLAMP;\r\n let eq = equaln;\r\n let r2d = MathUtils.radToDeg;\r\n let d2r = MathUtils.degToRad;\r\n let R2D = MathUtils.RAD2DEG;\r\n let D2R = MathUtils.DEG2RAD;\r\n let fix = FixedNotZero;\r\n //eval_gen_code\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 if (typeof result === \"bigint\")\r\n return Number(result);//防止bigint乱入\r\n\r\n return result;\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, fractionDigits: number = 0, 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 {\r\n let value = safeEval(str.slice(1, -1), params);\r\n let strValue: string;\r\n if (typeof value === \"number\")\r\n strValue = FixedNotZero(value, fractionDigits, expr);\r\n else\r\n strValue = value;\r\n\r\n expr = expr.replace(str, strValue);\r\n }\r\n return expr;\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 { StoreageKeys } from \"./StoreageKeys\";\r\nimport { safeEval } from \"./eval\";\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, expr: string = undefined)\r\n{\r\n if (typeof v === \"string\")\r\n {\r\n if (expr?.includes(\"fix\"))\r\n return v;//如果表达式中有fix,则尊重表达式的格式化,不再二次格式化\r\n\r\n v = parseFloat(v);\r\n }\r\n\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 */\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 IsFreeze(obj: Object3D)\r\n{\r\n return obj[\"freeze\"];\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\r\n/** 有触摸板 */\r\nexport const isHasTouch = () =>\r\n{\r\n return ('ontouchstart' in document.documentElement);\r\n};\r\n\r\nexport function isChinese(str: string)\r\n{\r\n const reg = new RegExp(`\\^[^\\\\u4e00-\\\\u9fa5]+$`);\r\n if (reg.test(str)) return false;\r\n return true;\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\n//范围交集 [a1,a2] 与 [b1,b2] 的交集\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, fuzz = 1e-8): compareVectorFn\r\n{\r\n let cacheKey = `${sortKey}${fuzz}`;\r\n if (comparePointCache.has(cacheKey))\r\n return comparePointCache.get(cacheKey);\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, fuzz)) 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 * map按Key的拼音首字母排序\r\n * reverse:倒序\r\n */\r\nexport function mapSortByCN(map: Map, reverse: boolean = false): Map\r\n{\r\n return new Map([...map].sort((x1, x2) =>\r\n {\r\n return reverse ? x2[0].localeCompare(x1[0], 'zh-CN') : x1[0].localeCompare(x2[0], 'zh-CN');\r\n }));\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 { 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 \"opacity\": { type: \"f\", value: 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, logBuf = false, opacity = 1): ShaderMaterialParameters\r\n{\r\n return {\r\n uniforms: {\r\n \"SurfaceColor\": { value: color },\r\n \"opacity\": { value: opacity },\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\nexport const 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 ----256\r\n [135, 206, 235, 255], //-----257\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, freeze = false): LineBasicMaterial\r\n {\r\n if (freeze) color = 257;\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, enableTransparent = false, freeze = false, opacity?: number)\r\n {\r\n if (freeze) color = 257;\r\n let key = `${color},${side},${enableTransparent ? 1 : 0}`;\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, ColorMaterial.UseLogBuf);\r\n let mtl = new ShaderMaterial(shaderParams);\r\n if (enableTransparent)\r\n {\r\n Object.defineProperty(mtl, \"transparent\", {\r\n get: () => mtl.uniforms.opacity.value !== 1\r\n });\r\n Object.defineProperty(mtl.uniforms.opacity, \"value\", {\r\n get: () =>\r\n {\r\n let conceptualOpacity = HostApplicationServices.ConceptualOpacity;\r\n if (freeze)\r\n conceptualOpacity = 0.5;\r\n else if (opacity)\r\n conceptualOpacity = opacity;\r\n return conceptualOpacity;\r\n }\r\n });\r\n }\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), 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), 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\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\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\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 let materialOffset = 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 let count: number;\r\n if (isIndexed)\r\n count = geometry.index.count;\r\n else if (geometry.attributes.position !== undefined)\r\n count = geometry.attributes.position.count;\r\n else\r\n return null;\r\n\r\n if (geometry.groups.length === 0)\r\n {\r\n mergedGeometry.addGroup(offset, count, materialOffset);\r\n materialOffset++;\r\n }\r\n else\r\n {\r\n let maxMaterialIndex = 0;\r\n for (let g of geometry.groups)\r\n {\r\n maxMaterialIndex = Math.max(maxMaterialIndex, g.materialIndex ?? 0);\r\n mergedGeometry.addGroup(offset + g.start, g.count, materialOffset + g.materialIndex);\r\n }\r\n\r\n materialOffset += maxMaterialIndex;\r\n }\r\n offset += count;\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, Line, Material, Object3D, Curve as TCurve, Line as TLine, 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, fuzz = 1e-6): number { return; }\r\n GetParamAtPoint2(pt: Vector3, fuzz = 1e-6): number { return this.GetParamAtPoint(pt, fuzz); }\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 GetFirstDeriv(param: number | Vector3): Vector3 { return; }\r\n GetFirstDerivAngle(param: number | Vector3): number\r\n {\r\n let d = this.GetFirstDeriv(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-5): boolean\r\n {\r\n return equalv3(this.StartPoint, pt, fuzz) || equalv3(this.EndPoint, pt, fuzz) || this.ParamOnCurve(this.GetParamAtPoint(pt, fuzz));\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 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 (pts.length === 0)\r\n pts.push(new Vector3);\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\r\nexport const DbCurve = Curve;\r\n","export enum DragPointType\r\n{\r\n Grip = 0,\r\n Stretch = 1\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 { 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.parseConstantFromPoint(constant);\r\n }\r\n\r\n parseConstantFromPoint(constant: Vector3)\r\n {\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 { Matrix2 } from './Matrix2';\r\n\r\nexport const ROTATE_MTX2 = new Matrix2().set(0, -1, 1, 0);\r\nexport function RotateUVs(geo: THREE.Geometry)\r\n{\r\n for (let uvs of geo.faceVertexUvs)\r\n {\r\n for (let uv of uvs)\r\n {\r\n for (let v of uv)\r\n ROTATE_MTX2.applyVector(v);\r\n }\r\n }\r\n geo.uvsNeedUpdate = true;\r\n}\r\n","import { Box3, BufferGeometry, Line3, Matrix3, Matrix4, Object3D, Shape, Line as TLine, 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, MoveMatrix, equaln, equalv3, isParallelTo, updateGeometry } from '../../Geometry/GeUtils';\r\nimport { PlaneExt } from '../../Geometry/Plane';\r\nimport { ROTATE_MTX2 } from '../../Geometry/RotateUV';\r\nimport { IntersectEllipseAndLine, IntersectLineAndArc, IntersectLineAndCircle, IntersectLineAndLine, IntersectOption, IntersectPolylineAndCurve, IntersectResult, 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.GetFirstDeriv(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 GetFirstDeriv(param: number | Vector3): Vector3\r\n {\r\n return this.EndPoint.sub(this.StartPoint);\r\n }\r\n\r\n /**\r\n * 需要注意的是,平行线和共线无交点\r\n * @param curve\r\n * @param intType\r\n * @param [tolerance=1e-4]\r\n * @returns\r\n */\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-4): IntersectResult[]\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.GetFirstDeriv(0).multiplyScalar(param));\r\n }\r\n override GetParamAtPoint(pt: Vector3, fuzz = 1e-5): number\r\n {\r\n let { closestPt, param } = this.GetClosestAtPoint(pt, true);\r\n if (!equalv3(closestPt, pt, fuzz))\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.GetFirstDeriv(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.GetFirstDeriv(0).normalize(), cu.GetFirstDeriv(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 offset = this._EndPoint.clone().sub(this._StartPoint).normalize().multiplyScalar(offsetDist);\r\n ROTATE_MTX2.applyVector(offset);\r\n let newLine = this.Clone() as Line;\r\n newLine.ClearDraw();\r\n newLine._StartPoint.add(offset);\r\n newLine._EndPoint.add(offset);\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 { Pts2Polyline, getArcOrCirNearPts, getDeterminantFor2V, getTanPtsOnEllipse } from '../../Common/CurveUtils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { AsVector2, MoveMatrix, angle, angleTo, equaln, equalv3, rotatePoint } from '../../Geometry/GeUtils';\r\nimport { Matrix2 } from '../../Geometry/Matrix2';\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._endAngle;\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\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 Extend(newParam: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (newParam < 0)\r\n this._startAngle = this.GetAngleAtParam(newParam);\r\n else if (newParam > 1)\r\n this._endAngle = this.GetAngleAtParam(newParam);\r\n this.Update();\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 return this.PtOnEllipse(pt) && this.ParamOnCurve(this.GetParamAtPoint(pt));\r\n }\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\r\n GetPointAtParam(param: number)\r\n {\r\n let an = this.TotalAngle * param + this._startAngle;\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 let mtx = new Matrix2().setRotate(this._rotate);\r\n mtx.applyVector(pt);\r\n return pt.applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n GetParamAtPoint(pt?: Vector3)\r\n {\r\n if (!this.PtOnEllipse(pt)) return NaN;\r\n\r\n let an = this.GetCircleAngleAtPoint(pt);\r\n let allAngle = this.TotalAngle;\r\n let param = an / allAngle;\r\n if (this.IsClose)\r\n return param;\r\n else\r\n {\r\n if (an >= this._startAngle)\r\n param = (an - this._startAngle) / allAngle;\r\n else\r\n param = ((Math.PI * 2) - (this._startAngle - an)) / allAngle;\r\n\r\n //剩余的参数\r\n let remParam = Math.PI * 2 / allAngle - 1;\r\n\r\n if (param > (remParam * 0.5 + 1))//一半\r\n param = (param - 1) - remParam;//返回负数\r\n\r\n return param;\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\r\n GetParamAtDist(d: number)\r\n {\r\n return d / this.Length;\r\n }\r\n\r\n GetAngleAtParam(param: number)\r\n {\r\n return this._startAngle + param * this.TotalAngle;\r\n }\r\n\r\n GetCircleAngleAtPoint(pt: Vector3): number\r\n {\r\n pt = pt.clone().applyMatrix4(this.OCSInv);\r\n let romtx = new Matrix2().setRotate(-this._rotate);\r\n romtx.applyVector(pt);\r\n //https://www.petercollingridge.co.uk/tutorials/computational-geometry/finding-angle-around-ellipse/\r\n let an = Math.atan(this.RadX * pt.y / (this.RadY * pt.x));\r\n\r\n if (pt.x < 0) an += Math.PI;\r\n else if (an < 0) an += Math.PI * 2;\r\n return an;\r\n }\r\n\r\n GetFirstDeriv(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\r\n rotatePoint(vec, this._rotate);\r\n return vec.applyMatrix4(this.OCS.setPosition(0, 0, 0));\r\n }\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.OCSNoClone);\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 ];\r\n for (let p of pts)\r\n p.applyMatrix4(tmpMat4).applyMatrix4(this.OCSNoClone);\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, Material, Matrix3, Matrix4, Object3D, Line as TLine, 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 { GetTanPtsOnArcOrCircle, getArcOrCirNearPts } 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 { AsVector3, MoveMatrix, ZeroVec, angle, equaln, equalv2, polar } from '../../Geometry/GeUtils';\r\nimport { Orbit } from '../../Geometry/Orbit';\r\nimport { IntersectCircleAndArc, IntersectCircleAndCircle, IntersectEllipseAndCircleOrArc, IntersectLineAndCircle, IntersectOption, IntersectPolylineAndCurve, IntersectResult, 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 override IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-5): IntersectResult[]\r\n {\r\n if (curve instanceof Arc)\r\n {\r\n return IntersectCircleAndArc(this, curve, intType, tolerance);\r\n }\r\n if (curve instanceof Line)\r\n {\r\n return SwapParam(IntersectLineAndCircle(curve, this, reverseIntersectOption(intType), tolerance));\r\n }\r\n if (curve instanceof Circle)\r\n {\r\n return IntersectCircleAndCircle(this, curve, tolerance);\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), tolerance));\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 GetFirstDeriv(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 { 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 { BUL_IS_LINE_FUZZ } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector3, equaln } from \"../GeUtils\";\r\n\r\n\r\n\r\n\r\nexport const ARC_DRAW_CONFIG = {\r\n ARC_SplitLength: 0.4,//圆的分段长度\r\n ARC_RADIUS_MIN: 2.5,//大于半径25的自动优化成36等分圆 保证绘制光滑\r\n Arc_MinSplitCount: 8,//圆的最小分段个数\r\n ARC_MaxSplitCount: 90,//圆的最大分段个数\r\n};\r\n\r\n\r\nexport function GetArcDrawCount(arc: Arc | Circle | number): number\r\n{\r\n let radius = typeof arc === \"number\" ? arc : arc.Radius;\r\n let splitCount = radius / ARC_DRAW_CONFIG.ARC_SplitLength;\r\n //保证是偶数(避免奇数和Shape2计算方式一致导致的干涉)\r\n splitCount = clamp(Math.floor(splitCount * 0.5) * 2, ARC_DRAW_CONFIG.Arc_MinSplitCount, ARC_DRAW_CONFIG.ARC_MaxSplitCount);\r\n if (radius > ARC_DRAW_CONFIG.ARC_RADIUS_MIN)\r\n splitCount = Math.max(36, splitCount);\r\n return splitCount;\r\n}\r\n\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 = GetArcDrawCount(cu);\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 (!equaln(cu.GetBulgeAt(i), 0, BUL_IS_LINE_FUZZ))// is arc\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = GetArcDrawCount(arc);\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 = GetArcDrawCount(cu);\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 (!equaln(cu.GetBulgeAt(i), 0, BUL_IS_LINE_FUZZ))// is arc\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = GetArcDrawCount(arc);\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 = GetArcDrawCount(arc);\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 { EllipseCurve, Shape, Vector2 } from \"three\";\r\nimport { GetArcDrawCount } from \"../Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams\";\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: Vector2[] = [],\r\n 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 //根据圆的半径来确定绘制个数(与SplitCurveParams一致)\r\n let splitCount = GetArcDrawCount(tempArc);\r\n\r\n resolution = Math.max(1, Math.ceil(Math.abs((tempArc.AllAngle * 0.5) / Math.PI) * splitCount * 0.5)) * 2;\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 { 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[]): Shape2\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 { Vec2 } from \"./CheckIntersect\";\r\n/*\r\n功能:判断线段是否存在交点\r\nref:https://www.geeksforgeeks.org/check-if-two-given-line-segments-intersect/\r\n*/\r\n\r\n// Given three colinear points p, q, r, the function checks if\r\n// point q lies on line segment 'pr'\r\nfunction onSegment(p: Vec2, q: Vec2, r: Vec2): boolean\r\n{\r\n if (q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) &&\r\n q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y))\r\n return true;\r\n return false;\r\n}\r\n// To find orientation of ordered triplet (p, q, r).\r\n// The function returns following values\r\n// 0 --> p, q and r are colinear\r\n// 1 --> Clockwise\r\n// 2 --> Counterclockwise\r\nexport function orientation(p: Vec2, q: Vec2, r: Vec2): number\r\n{\r\n // See https://www.geeksforgeeks.org/orientation-3-ordered-points/\r\n // for details of below formula.\r\n let val = (q.y - p.y) * (r.x - q.x) -\r\n (q.x - p.x) * (r.y - q.y);\r\n if (val === 0)\r\n return 0; // colinear\r\n return (val > 0) ? 1 : 2; // clock or counterclock wise\r\n}\r\n/**\r\n * 判断线段`p1q1`和线段`p2q2`是否相交.\r\n */\r\nexport function doIntersect(p1: Vec2, q1: Vec2, p2: Vec2, q2: Vec2): boolean\r\n{\r\n // Find the four orientations needed for general and\r\n // special cases\r\n let o1 = orientation(p1, q1, p2);\r\n let o2 = orientation(p1, q1, q2);\r\n let o3 = orientation(p2, q2, p1);\r\n let o4 = orientation(p2, q2, q1);\r\n // General case\r\n if (o1 !== o2 && o3 !== o4)\r\n return true;\r\n // Special Cases\r\n // p1, q1 and p2 are colinear and p2 lies on segment p1q1\r\n if (o1 === 0 && onSegment(p1, p2, q1))\r\n return true;\r\n // p1, q1 and q2 are colinear and q2 lies on segment p1q1\r\n if (o2 === 0 && onSegment(p1, q2, q1))\r\n return true;\r\n // p2, q2 and p1 are colinear and p1 lies on segment p2q2\r\n if (o3 === 0 && onSegment(p2, p1, q2))\r\n return true;\r\n // p2, q2 and q1 are colinear and q1 lies on segment p2q2\r\n if (o4 === 0 && onSegment(p2, q1, q2))\r\n return true;\r\n return false; // Doesn't fall in any of the above cases\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 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 w.curve.TempData = 2;\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 { Box2, 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(bigCurve: Polyline | Circle | Ellipse, smallCurve: Curve)\r\n{\r\n //#fix fileid 2087494 使用二维的box来计算看起来没有问题\r\n if (!Box2.prototype.containsBox.apply(bigCurve.BoundingBox.expandByVector(fuzzV3), [smallCurve.BoundingBox]))\r\n return false;\r\n\r\n let cus: Curve[] = [];\r\n if (smallCurve instanceof Polyline)\r\n cus = smallCurve.Explode();\r\n else\r\n cus = [smallCurve];\r\n\r\n return cus.every(c =>\r\n {\r\n let pts = getIntPtContextPts(bigCurve, c);\r\n if (pts.length <= 1)\r\n pts.push(c.StartPoint, c.EndPoint);\r\n return IsPtsAllInOrOnReg(bigCurve, 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, IntersectResult } 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 = CurveContainerCurve(sourceOutline, targetOutline, interPts);\r\n targetContainerSource = false;\r\n }\r\n else\r\n {\r\n sourceContainerTarget = false;\r\n targetContainerSource = CurveContainerCurve(targetOutline, sourceOutline, interPts);\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, COMBINE_FUZZ);\r\n if (hasEqualCus)\r\n {\r\n //方向相同\r\n if (\r\n equalv3(cu.GetFirstDeriv(cu.MidParam).normalize(), pl.GetFirstDeriv(pl.MidParam).normalize(), 1e-2)\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 let areaState = sourceOutline.Area > targetOutline.Area;\r\n //反包含\r\n if ((!areaState && fastCurveInCurve2(targetOutline, sourceOutline, interPts[0]?.pt)) || equalCurve(targetOutline, sourceOutline))\r\n return [];\r\n //包含\r\n if ((areaState && fastCurveInCurve2(sourceOutline, targetOutline, interPts[0]?.pt)))\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.GetFirstDeriv(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.GetFirstDeriv(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 curveIntParamsMap = 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 let areaState = sourceOutline.Area > targetOutline.Area;\r\n //反包含\r\n if ((!areaState && fastCurveInCurve2(targetOutline, sourceOutline, pts[0]?.pt)) || equalCurve(targetOutline, sourceOutline))\r\n return { holes, subtractList };\r\n //包含\r\n if (areaState && fastCurveInCurve2(sourceOutline, targetOutline, pts[0]?.pt))\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 curveIntParamsMap.set(targetOutline, pts.map(r => r.argParam));\r\n }\r\n }\r\n\r\n let sourceSplitCurves = sourceOutline.GetSplitCurves(intPars) as Polyline[];\r\n let targetSplitCurves: Polyline[] = [];\r\n\r\n let targetSplitCurve_CurvesMap = new WeakMap();//分裂后->原始曲线 映射\r\n\r\n for (let [curve, intParams] of curveIntParamsMap)\r\n {\r\n\r\n let splitCurves = curve.GetSplitCurves(intParams) as Polyline[];\r\n for (let splitCurve of splitCurves)\r\n {\r\n targetSplitCurve_CurvesMap.set(splitCurve, curve);\r\n targetSplitCurves.push(splitCurve);\r\n }\r\n }\r\n\r\n for (let sourceSplitcu of sourceSplitCurves)\r\n {\r\n let index = targetSplitCurves.findIndex(cu => fastEqualCurve(cu, sourceSplitcu, 0.05));\r\n if (index !== -1)\r\n {\r\n let targetSplitcu = targetSplitCurves[index];\r\n let isEqualNormal = equalv3(sourceOutline.Normal, targetSplitCurve_CurvesMap.get(targetSplitcu).Normal, 1e-3);\r\n\r\n if (isEqualNormal === !equalv3(sourceSplitcu.StartPoint, targetSplitcu.StartPoint, 0.05))//不同向\r\n {\r\n subtractList.push(sourceSplitcu);\r\n // TestDraw(sourceSplitcu.Clone(), 1);\r\n // TestDraw(targetSplitcu.Clone(), 1);\r\n }\r\n // else\r\n // TestDraw(sourceSplitcu.Clone(), 2);\r\n\r\n targetSplitCurves.splice(index, 1);\r\n\r\n continue;\r\n }\r\n\r\n if (targets.every(t => !fastCurveInCurve(t.Curve as Polyline, sourceSplitcu)))\r\n subtractList.push(sourceSplitcu);\r\n }\r\n\r\n //源对象没有被破坏\r\n let sourceNotBreak = subtractList.length === sourceSplitCurves.length;\r\n\r\n for (let pl of targetSplitCurves)\r\n if (fastCurveInCurve(sourceOutline, pl))\r\n subtractList.push(pl);\r\n\r\n if (sourceNotBreak && subtractList.length === sourceSplitCurves.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[], -Math.log10(COMBINE_FUZZ));\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, -Math.log10(tolerance)) : [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\r\n /**\r\n * 判断是否完全包含曲线\r\n * @param smallCurve 传入的这个曲线不能比本轮廓还大(这个需要自己优化?)\r\n * @returns\r\n */\r\n ContainerCurve(smallCurve: Polyline | Circle | Curve, isAreaCheckd = false, ipts: IntersectResult[] = undefined): boolean\r\n {\r\n if (!isAreaCheckd && this.Area < smallCurve.Area)\r\n return false;\r\n return CurveContainerCurve(this._Curve, smallCurve, ipts);\r\n }\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 = 5e-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 * 对于双多段线互相切割后的结果(或者交点个数为0),快速判断曲线是否在另一条曲线内部\r\n * @param bigCurve\r\n * @param smallCurve\r\n * @returns\r\n */\r\nfunction fastCurveInCurve(bigCurve: Polyline | Circle, smallCurve: Curve): boolean\r\n{\r\n return bigCurve.PtInCurve(smallCurve.Midpoint);\r\n}\r\n\r\n//当交点小于等于1时\r\nexport function fastCurveInCurve2(bigCurve: Polyline | Circle, smallCurve: Curve, iPt?: Vector3)\r\n{\r\n if (iPt)//提高准确性,避免使用交点去判断 导致的错误\r\n {\r\n let sp = smallCurve.StartPoint;;\r\n if (equalv3(sp, iPt, 1e-3))\r\n return bigCurve.PtInCurve(smallCurve.Midpoint);\r\n else\r\n return bigCurve.PtInCurve(smallCurve.StartPoint);\r\n }\r\n else\r\n return bigCurve.PtInCurve(smallCurve.Midpoint) || bigCurve.PtInCurve(smallCurve.StartPoint);\r\n}\r\n\r\n//大曲线是否完全包含小曲线(或者重合)\r\nexport function CurveContainerCurve(bigCurve: Polyline | Circle, smallCurve: Polyline | Circle | Curve, ipts: IntersectResult[] = undefined, fuzz = COMBINE_FUZZ)\r\n{\r\n if (!ipts)\r\n ipts = bigCurve.IntersectWith2(smallCurve, IntersectOption.ExtendNone, fuzz);\r\n\r\n if (ipts.length === 0)\r\n return fastCurveInCurve(bigCurve, smallCurve);\r\n else if (ipts.length === 1)\r\n return fastCurveInCurve2(bigCurve, smallCurve, ipts[0].pt);\r\n else\r\n return isTargetCurInOrOnSourceCur(bigCurve, smallCurve);\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort } 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 { AsVector2, IdentityMtx4, SelectNearP, angle, equaln, equalv2, equalv3 } 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 /**偏移距离(仅在局部偏移时提供) */\r\n dist?: number;\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.IntersectWith2(contour.Curve, IntersectOption.ExtendNone)\r\n .map(p => p.thisParam);\r\n\r\n //#region 交点参数优化,避免出现无意义长度的曲线被移除 CurveIsFine\r\n let length = this.curve.Length;\r\n if (!(this.curve instanceof Circle))\r\n iParams.push(0, 1);\r\n iParams.sort((e1, e2) => e1 - e2);\r\n if (this.curve instanceof Arc || this.curve instanceof Circle)\r\n {\r\n let allAngle = this.curve instanceof Circle ? Math.PI * 2 : this.curve.AllAngle;\r\n arrayRemoveDuplicateBySort(iParams, (p1, p2) =>\r\n {\r\n return allAngle * (p2 - p1) < ARC_MIN_ALLANGLE || length * (p2 - p1) < CURVE_MIN_LENGTH;\r\n });\r\n }\r\n else\r\n {\r\n arrayRemoveDuplicateBySort(iParams, (p1, p2) =>\r\n {\r\n return length * (p2 - p1) < CURVE_MIN_LENGTH;\r\n });\r\n }\r\n\r\n if (!(this.curve instanceof Circle))\r\n {\r\n iParams.shift();//remove 0\r\n iParams.pop(); //remove 1 or 0.9999\r\n }\r\n //#endregion\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 enum PolylineJoinType\r\n{\r\n Square = 0,\r\n Round = 1,\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 _IsTopoOffset = false;//局部偏移,允许特殊延伸,参考测试用例\r\n\r\n /**\r\n *\r\n * @param _Polyline\r\n * @param _OffsetDist\r\n * @param [_ToolPath=false] 走刀模式(在这个模式下,我们会进行圆弧过渡(或者直线过渡)避免尖角过大)\r\n * @param [_OffsetDistSq=(_OffsetDist ** 2) * 2.1] 允许的最大尖角长度 默认值差不多是矩形的尖角大一点\r\n * @param [_JoinType=PolylineJoinType.Round] 尖角的处理方式,默认是圆弧过渡,可以切换成直线过渡\r\n */\r\n constructor(public _Polyline: Polyline, public _OffsetDist: number, public _ToolPath = false,\r\n private _OffsetDistSq = (_OffsetDist ** 2) * 2.1,//对直角走刀不进行圆弧过度\r\n private _JoinType = PolylineJoinType.Round //仅在走刀路径时生效\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\r\n // for (let c of this._SubOffsetedCurves)\r\n // {\r\n // TestDraw(c.curve.Clone(), 1);\r\n // if (c.paddingCurve)\r\n // for (let cc of c.paddingCurve)\r\n // TestDraw(cc.Clone(), 2);\r\n // }\r\n // for (let c of this._TrimPolylineContours)\r\n // {\r\n // TestDraw(c.Curve.Clone(), 3);\r\n // }\r\n\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);//TODO: 简化这个 并且生成圆 顶点 圆\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 iPtsP = curveNow.IntersectWith2(curveNext, IntersectOption.ExtendBoth, 1e-6);\r\n let iPts = iPtsP.map(p => p.pt);\r\n let tPts = iPtsP.filter(p => curveNow.ParamOnCurve(p.thisParam) && curveNext.ParamOnCurve(p.argParam)).map(p => p.pt);\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 (this._IsTopoOffset && tPts.length === 0 && curveResNow.dist !== curveResNext.dist)\r\n tPts = iPts;\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 && iPtsP[0].thisParam > 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 if (this._JoinType === PolylineJoinType.Round)\r\n curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)];\r\n else\r\n curveResNow.paddingCurve = [this.CreateSquare(refP, curveResNow, curveResNext, code)];//补直线\r\n\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\r\n //在局部偏移中,当偏移距离不一致时,我们总是倾向于直接连接\r\n if (this._IsTopoOffset && tPts.length === 0 && curveResNow.dist !== curveResNext.dist)\r\n {\r\n if (iPts.length)\r\n tPts = iPts;\r\n else\r\n {\r\n curveResNow.paddingCurve = [new Line(sp, ep)];//补直线\r\n continue;\r\n }\r\n }\r\n\r\n if (tPts.length > 0) //ipts = 1 or ipts = 2\r\n tp = SelectNearP(tPts, refP);\r\n else //补圆弧 或者尝试连接\r\n {\r\n if (iPts.length > 0 && !this._ToolPath && this.IsSharpCorner(curveResNow, curveResNext))//非加工刀路 并且尖角化(谷)时\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 = [this.CreateArc(refP, sp, ep)];//补圆弧\r\n }\r\n else\r\n {\r\n if (this._JoinType === PolylineJoinType.Round)\r\n curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)];//补圆弧\r\n else\r\n {\r\n curveResNow.paddingCurve = [this.CreateSquare(refP, curveResNow, curveResNext, code)];//补直线\r\n }\r\n }\r\n\r\n let circle = this._Circles[curveResNext.index];\r\n if (circle) this._TrimCircleContours.push(circle);//因为局部偏移可能未提供圆\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 circle = this._Circles[s];\r\n if (circle)//因为局部偏移可能未提供圆\r\n {\r\n this._TrimCircleContours.push(circle);\r\n padCirs.push(circle);\r\n }\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 * 在\r\n * 1.直线和圆弧,圆弧和圆弧\r\n * 2.有交点,无真交点时\r\n * 必须在正确的方向做出延伸动作,所以必须在尖角的情况下延伸,偏移的结果就像一个谷字去掉一个口的结果,上面的人就是偏移后的结果.\r\n * 如果是谷,则允许连接 #I7WKKG\r\n */\r\n private IsSharpCorner(curveResNow: IOffsetResult, curveResNext: IOffsetResult): boolean\r\n {\r\n let v1 = this._SubCurves[curveResNow.index].GetFirstDeriv(1);\r\n let v2 = this._SubCurves[curveResNext.index].GetFirstDeriv(0);\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, isJoinEnd = true): 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 minDist = 0;\r\n break;\r\n }\r\n }\r\n\r\n if (minR && Math.sqrt(minDist) < 0.085)\r\n {\r\n used.add(minR.curve);\r\n preP = minR.e;\r\n\r\n // let status = pl.Join(minR.curve, false, 8e-2);\r\n // if (status !== Status.True)\r\n // console.warn(\"连接失败\");\r\n\r\n //#region fast join (为了避免Polyline.Join 导致的顺序错误)\r\n let cu = minR.curve;\r\n\r\n //bul\r\n let bul = 0;\r\n if (cu instanceof Arc)\r\n {\r\n bul = cu.Bul;\r\n if (minR.isReverse)\r\n bul *= -1;\r\n\r\n if (!isJoinEnd)\r\n bul *= -1;\r\n }\r\n\r\n if (pl.LineData.length === 0)\r\n {\r\n pl.LineData.push({\r\n pt: AsVector2(minR.s),\r\n bul: bul\r\n });\r\n }\r\n\r\n if (isJoinEnd)\r\n {\r\n pl.LineData[pl.LineData.length - 1].bul = bul;\r\n pl.LineData.push({\r\n pt: AsVector2(minR.e),\r\n bul: 0\r\n });\r\n }\r\n else\r\n {\r\n pl.LineData.unshift({\r\n pt: AsVector2(minR.e),\r\n bul\r\n });\r\n }\r\n //#endregion\r\n\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, true);\r\n ss = s;\r\n preP = pl.StartPoint;\r\n while (ss && !pl.IsClose)\r\n ss = searchNext(ss, pl, false);\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.GetFirstDeriv(0).normalize(), preCurve.GetFirstDeriv(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.GetFirstDeriv(1).normalize(), nextCurve.GetFirstDeriv(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.GetFirstDeriv(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 protected CreateSquare(center: Vector3, curveNow: IOffsetResult, curveNext: IOffsetResult, entTypeCode: number)\r\n {\r\n const arc = this.CreateArc(center, curveNow.curve.EndPoint, curveNext.curve.StartPoint);\r\n const centerPoint = arc.GetPointAtParam(0.5);\r\n const tangentLine = new Line(centerPoint, arc.GetFirstDeriv(0.5).add(centerPoint)); //切线\r\n\r\n let ep: Vector3, sp: Vector3;\r\n if (entTypeCode === 1)\r\n {\r\n ep = tangentLine.IntersectWith(curveNow.curve, IntersectOption.ExtendBoth)[0]; //第一条线新的终点坐标\r\n sp = centerPoint.multiplyScalar(2).sub(ep);\r\n }\r\n else// if (entTypeCode === 0)//全圆弧 直线和圆弧\r\n {\r\n ep = SelectNearP(tangentLine.IntersectWith(curveNow.curve, IntersectOption.ExtendBoth), center); //第一条线新的终点坐标\r\n sp = SelectNearP(tangentLine.IntersectWith(curveNext.curve, IntersectOption.ExtendBoth), center);\r\n }\r\n\r\n curveNow.ep = ep;\r\n curveNext.sp = sp;\r\n\r\n return new Line(ep, sp);\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\r\nconst CURVE_MIN_LENGTH = 5e-5;\r\nconst ARC_MIN_ALLANGLE = 2e-6;\r\n//表示这个是一个正常的曲线,不是0长度的线,也不是0长度的圆弧\r\nexport function CurveIsFine(curve: Curve)\r\n{\r\n if (curve instanceof Arc && curve.AllAngle < ARC_MIN_ALLANGLE) return false;\r\n return curve.Length > CURVE_MIN_LENGTH;\r\n}\r\n","import { Vec2, Vector3 } from 'three';\r\nimport { angle, equaln, equalv2 } from '../Geometry/GeUtils';\r\nimport { IntersectOption } from '../GraphicsSystem/IntersectWith';\r\nimport { Arc } from './Entity/Arc';\r\nimport { Line } from './Entity/Line';\r\nimport { BUL_IS_LINE_FUZZ, 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 * 判断点在多段线内外(如果点在线上 则返回false)\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, BUL_IS_LINE_FUZZ))//直线\r\n {\r\n let sp = pl.GetPointAtParam(i);\r\n let ep = pl.GetPointAtParam(i + 1);\r\n\r\n if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5))//在起点或者终点\r\n return false;\r\n\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 {\r\n if (equaln(pt.x, ep.x, 1e-5)\r\n && (pt.y > Math.min(sp.y, ep.y) - 1e-5 && pt.y < Math.max(sp.y, ep.y) + 1e-5))\r\n return false;//点在线上\r\n continue;\r\n }\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 let iptY = (pt.x - sp.x) * k + sp.y;\r\n if (equaln(iptY, pt.y, 1e-5))//点在线上 返回false\r\n return false;\r\n if (iptY > 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 if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5))//在起点或者终点\r\n return false;\r\n\r\n let center = arc.Center;\r\n //如果相切\r\n if (equaln(Math.abs(pt.x - center.x), arc.Radius))\r\n {\r\n //点在线上\r\n if (equaln(pt.y, center.y) && arc.ParamOnCurve(arc.GetParamAtPoint2(pt)))\r\n return false;\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.GetFirstDeriv(0).normalize();\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.GetFirstDeriv(1).normalize();\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 (equalv2(pti, pt, 1e-5))//点在线上 返回false\r\n return false;\r\n\r\n //交点在点下 交点在起点? 交点在终点?\r\n if (pti.y + 1e-5 < pt.y || equalv2(sp, pti, 1e-5) || equalv2(ep, pti, 1e-5))\r\n continue;\r\n\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: number;\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, 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, MatrixIsIdentityCS, equaln, equalv2, equalv3 } from '../../Geometry/GeUtils';\r\nimport { IntersectOption, IntersectPolylineAndCurve } from '../../GraphicsSystem/IntersectWith';\r\nimport { OffsetPolyline, PolylineJoinType } from '../../GraphicsSystem/OffsetPolyline';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { IsPointInPolyLine } from '../PointInPolyline';\r\nimport { Shape2 } from '../Shape2';\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\nexport const BUL_IS_LINE_FUZZ = 1e-5;\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 /**\r\n * 删除重复点\r\n * @param [fuzz=0.1] 容差=0.1\r\n */\r\n RemoveRepeatPos(fuzz = 0.1)\r\n {\r\n let index = 0;\r\n let pre = 0;\r\n let writed = false;\r\n for (let next = 1; next <= this._LineData.length; next++)\r\n {\r\n if ((!this._ClosedMark && next === this._LineData.length) ||//如果曲线没闭合 则总是保留最后一个点\r\n !equalv2(this._LineData[pre].pt, this._LineData[FixIndex(next, this._LineData)].pt, fuzz))\r\n {\r\n if (!writed)\r\n {\r\n this.WriteAllObjectRecord();\r\n writed = true;\r\n }\r\n\r\n this._LineData[index] = this._LineData[pre];\r\n index++;\r\n }\r\n pre++;\r\n }\r\n\r\n if (equalv2(this._LineData[0].pt, this._LineData[index - 1].pt, fuzz))\r\n this._LineData[index - 1].pt.copy(this._LineData[0].pt);\r\n\r\n this._LineData.length = index;\r\n this.Update();\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: (Line | Arc)[] = [];\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let cu = this.GetCurveAtIndex(i);\r\n let len = cu.Length;\r\n if (len < 1e-6) continue;\r\n\r\n cus.push(cu);\r\n\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\r\n dist -= len;\r\n }\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 GetFirstDeriv(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.GetFirstDeriv(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 let x = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 0);\r\n let y = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 1);\r\n let cuZ = x.cross(y);\r\n\r\n let dir = equalv3(this.Normal, cuZ, 1e-4) ? 1 : -1;\r\n let bul = cu.Bul * dir;\r\n\r\n this._LineData.push({ pt: cuSp2, bul: 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 (epspDisSq < minDis)\r\n {\r\n linkType = LinkType.EpSp;\r\n minDis = epspDisSq;\r\n }\r\n\r\n if (epepDisSq < minDis)\r\n {\r\n linkType = LinkType.EpEp;\r\n minDis = epepDisSq;\r\n }\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 (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 x = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 0);\r\n let y = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 1);\r\n let cuZ = x.cross(y);\r\n\r\n let dir = equalv3(this.Normal, cuZ, 1e-4) ? 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 {\r\n let status = pl.Join(cu, false, 0.1);\r\n // if (status === Status.False)\r\n // console.log();\r\n }\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 /**首尾相连的曲线直接连接 */\r\n static FastCombine(curves: Curve[], tolerance = 1e-5, computOCS = true): Polyline | undefined\r\n {\r\n if (!curves || curves.length === 0) return;\r\n\r\n let pl = new Polyline;\r\n if (computOCS)\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 override PtOnCurve(pt: 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.PtOnCurve(pt, fuzz))\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, joinType: PolylineJoinType = PolylineJoinType.Round): Polyline[]\r\n {\r\n if (equaln(offsetDist, 0)) return [];\r\n let polyOffestUtil = new OffsetPolyline(this, offsetDist, true, offsetDistSq, joinType);\r\n return polyOffestUtil.Do();\r\n }\r\n /**\r\n * 分解\r\n */\r\n Explode(): (Line | Arc)[]\r\n {\r\n let exportCus: (Line | Arc)[] = [];\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): Line | Arc\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: Line | Arc;\r\n if (equaln(d1.bul, 0, BUL_IS_LINE_FUZZ))\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 override 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.GetFirstDeriv(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.GetFirstDeriv(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 SetPtsBuls(pts: Vector2[], buls: number[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.length = 0;\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let pt = pts[i];\r\n let bul = buls[i];\r\n\r\n this._LineData.push({ pt, bul });\r\n }\r\n this.Update();\r\n return this;\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(): Shape2\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 // if (this._LineData.length === 0)\r\n // this.Erase();\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 { clamp } from '../Common/Utils';\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, equalv2, 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, tolerance = 1e-4): IntersectResult[]\r\n{\r\n if (!cu1.IsCoplaneTo(cu2)) return [];\r\n\r\n let c1OcsInv = cu1.OCSInv;\r\n let c1Ocs = cu1.OCSNoClone;\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, tolerance)) 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, tolerance))//防止点重复\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, tolerance);\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, tolerance = 1e-6): 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, tolerance))\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, tolerance);\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, tolerance);\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 //v1 p1->p2\r\n //v2 p3->p4\r\n\r\n //v3 p2->p4\r\n\r\n let dx1 = p1.x - p2.x;//v1\r\n let dx2 = p3.x - p4.x;//v2\r\n let dx3 = p4.x - p2.x;//v3\r\n\r\n let dy1 = p1.y - p2.y;//v1\r\n let dy2 = p3.y - p4.y;//v2\r\n let dy3 = p4.y - p2.y;//v3\r\n\r\n let det = (dx2 * dy1) - (dy2 * dx1);//v1.cross(v2) 叉积 几何意义是平行四边形的面积\r\n\r\n let v2Length = Math.sqrt(dx2 * dx2 + dy2 * dy2);\r\n\r\n if (equaln(det / v2Length, 0.0, 1e-5))//平行 1e-5是平行四边形的高\r\n {\r\n let det2 = (dx2 * dy3) - (dy2 * dx3);\r\n if (equaln(det2 / v2Length, 0.0, 1e-5))//共线 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 //暂时没有必要\r\n // let cu1EndPoint = cu1.EndPoint;\r\n // for (let i = 0; i < ptPars.length; i++)\r\n // if (equalv3(ptPars[i].pt, cu1EndPoint, tolerance))\r\n // ptPars[i].thisParam = 1;//如果通过容差测试,我们认为它在终点上\r\n\r\n ptPars = ptPars.filter(res => res.thisParam <= 1);\r\n }\r\n else if (isEnd)\r\n {\r\n //暂时没有必要\r\n // let cu1StartPoint = cu1.StartPoint;\r\n // for (let i = 0; i < ptPars.length; i++)\r\n // if (equalv3(ptPars[i].pt, cu1StartPoint, tolerance))\r\n // ptPars[i].thisParam = 0;//如果通过容差测试,我们认为它在起点上\r\n\r\n ptPars = ptPars.filter(res => res.thisParam >= 0);\r\n }\r\n }\r\n else //当曲线不延伸时,它通过了容差测验,这时我们认为曲线在线上\r\n for (let i = 0; i < ptPars.length; i++)\r\n ptPars[i].thisParam = clamp(ptPars[i].thisParam, 0, 1);\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 else //当曲线不延伸时,它通过了容差测验,这时我们认为曲线在线上\r\n for (let i = 0; i < ptPars.length; i++)\r\n ptPars[i].argParam = clamp(ptPars[i].argParam, 0, 1);\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\r\n let fn = ComparePointFnGenerate(\"xyz\", tolerance);\r\n intRes.sort((p1, p2) => fn(p1.pt, p2.pt));\r\n arrayRemoveDuplicateBySort(intRes, (p1, p2) => equalv3(p1.pt, p2.pt, tolerance));\r\n\r\n return intRes;\r\n}\r\n\r\nexport function IntersectLineAndEllipseFor2D(l: Line, el: Ellipse)\r\n{\r\n let elInv = new Matrix4().makeRotationZ(-el.Rotation).multiply(el.OCSInv);\r\n let matInv = new Matrix4().getInverse(elInv);\r\n\r\n let a = el.RadX;\r\n let b = el.RadY;\r\n let sp = l.StartPoint.applyMatrix4(elInv);\r\n let ep = l.EndPoint.applyMatrix4(elInv);\r\n\r\n if (!(equaln(sp.z, 1e-6) && equaln(ep.z, 1e-6)))\r\n {\r\n if (equalv2(sp, ep, 1e-6))//如果与之垂直\r\n {\r\n let p = sp.setZ(0).applyMatrix4(matInv);\r\n if (el.PtOnCurve(p))\r\n return [\r\n {\r\n pt: p,\r\n thisParam: l.GetParamAtPoint(p),\r\n argParam: el.GetParamAtPoint(p)\r\n }\r\n ];\r\n }\r\n //todo:求交面\r\n return [];\r\n }\r\n\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 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 { GetTanPtsOnArcOrCircle, getArcOrCirNearPts, getCircleCenter } from '../../Common/CurveUtils';\r\nimport { SetMtxVector, TransformVector, reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { AsVector3, MoveMatrix, ZeroVec, angle, clampRad, equaln, equalv2, equalv3, polar } from '../../Geometry/GeUtils';\r\nimport { Orbit } from '../../Geometry/Orbit';\r\nimport { IntersectArcAndArc, IntersectCircleAndArc, IntersectEllipseAndCircleOrArc, IntersectLineAndArc, IntersectOption, IntersectPolylineAndCurve, IntersectResult, 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): IntersectResult[]\r\n {\r\n if (curve instanceof Arc || curve.constructor.name === \"RoomWallArc\")\r\n {\r\n return IntersectArcAndArc(this, curve as Arc, intType, tolerance);\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 * @param {number} endAngle 结束的角度\r\n */\r\n ComputeAnlge(endAngle: number): 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 GetFirstDeriv(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.ReadBool();\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.WriteBool(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 { Box2, 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 { BUL_IS_LINE_FUZZ, 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, XAxis, YAxis, ZAxis, ZeroVec, equaln, equalv2, equalv3, isIntersect, isParallelTo } from '../Geometry/GeUtils';\r\nimport { Vec3 } from '../Geometry/IVec3';\r\nimport { Matrix2 } from '../Geometry/Matrix2';\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[], numdimensions = 4): 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 const fuzz = 5 * Math.pow(0.1, numdimensions);\r\n //曲线节点图\r\n let cuMap = new CurveMap(numdimensions);\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, fuzz))\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, fuzz))\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 //最近点\r\n let cp = cu.GetClosestPointTo(pt, false);\r\n if (equalv3(cp, pt, 1e-6)) return 0;\r\n //最近点的切线\r\n let deriv = cu.GetFirstDeriv(cu.GetParamAtPoint(cp));\r\n let vec2 = pt.clone().sub(cp);\r\n let cross = deriv.cross(vec2).applyMatrix4(cu.OCSInv.setPosition(0, 0, 0));\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.GetFirstDeriv(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 size: Vector3;\r\n box: Box3;\r\n OCS: Matrix4;\r\n}\r\n\r\n/**\r\n * 判断多段线是不是矩形\r\n * 因为用户画的垃圾图,所以我们会给容差\r\n * 1.简化点表成4个点\r\n * -得到x向量,构建二维旋转矩阵\r\n * -所有的点旋转\r\n * 2.构建box\r\n * 3.4个点都在盒子里,面积是矩形\r\n * @param cu\r\n */\r\nexport function IsRect(cu: Curve): IRectInfo | undefined\r\n{\r\n if (cu instanceof Polyline)\r\n {\r\n //如果不封闭(就不是矩形)\r\n if (!cu.IsClose) return;\r\n\r\n //如果点个数小于4(就不是矩形)\r\n if (cu.LineData.length < 4) return;\r\n\r\n //如果有圆弧(就不是矩形)\r\n for (let i = 0; i < cu.LineData.length; i++)\r\n {\r\n let d = cu.LineData[i];\r\n if (equaln(d.bul, 0, BUL_IS_LINE_FUZZ))\r\n continue;\r\n let next = FixIndex(i + 1, cu.LineData);\r\n if (equalv2(d.pt, cu.LineData[next].pt))\r\n continue;\r\n return;\r\n }\r\n\r\n let pts2d = cu.LineData.map(d => d.pt);\r\n\r\n //去除重复点\r\n arrayRemoveDuplicateBySort(pts2d, (p1, p2) => equalv2(p1, p2));\r\n if (equalv2(pts2d[0], pts2d[pts2d.length - 1]))\r\n pts2d.pop();\r\n\r\n //这里我们判断它是不是有4个90度的角,并且有4个点\r\n let preV = pts2d[0].clone().sub(pts2d[pts2d.length - 1]).negate();//preVector\r\n let preL = preV.length();//preLength\r\n let nowV = new Vector2;//nowVector\r\n let crossV = 0;//永远相同方向的90度,如果不是(就不是矩形)\r\n\r\n let pts4: Vector2[] = [];//简化成4个点\r\n\r\n for (let i = 0; i < pts2d.length; i++)\r\n {\r\n nowV.subVectors(pts2d[FixIndex(i + 1, pts2d.length)], pts2d[i]);\r\n\r\n let cross = preV.cross(nowV) / preL;\r\n\r\n let nowL = nowV.length();//nowLength\r\n\r\n if (equaln(cross, 0, 0.01))//平行 此时的cross = 三角形的高(其中preL是三角形的底边) 我们认为它移动了0.01是可以接受的\r\n continue;//TODOX:我们可能要合并这条线? 把preV preL更新一下?\r\n\r\n cross /= nowL;//此时的cross = sin@\r\n\r\n //如果不等于90度(就不是矩形)\r\n if (!equaln(Math.abs(cross), 1, 1e-5))\r\n return;\r\n\r\n cross = Math.sign(cross);\r\n\r\n if (!crossV)\r\n crossV = cross;\r\n else if (crossV !== cross)//如果方向不一致(没有绕着90度)(就不是矩形)\r\n return;\r\n\r\n pts4.push(pts2d[i]);\r\n if (pts4.length > 4)//如果超过4个点(就不是矩形)\r\n return;\r\n\r\n preL = nowL;\r\n preV.copy(nowV).negate();//翻转它 以便下一次计算\r\n }\r\n\r\n if (pts4.length !== 4 || !crossV)//没有90度 (就不是矩形)\r\n return;\r\n\r\n let rectOCS: Matrix4;\r\n\r\n preV.subVectors(pts4[1], pts4[0]);\r\n let box = new Box2;\r\n if (equaln(preV.x, 0, 1e-3) || equaln(preV.y, 0, 1e-3))//判断是不是与X轴平行或者与Y轴平行,精度容差在0.001 看起来没问题\r\n {\r\n rectOCS = cu.OCS;\r\n box.setFromPoints(pts4);\r\n }\r\n else//如果矩形不与X轴平行,我们旋转这个点表,然后变换它\r\n {\r\n let a = Math.atan2(preV.y, preV.x);\r\n let r = new Matrix2().setRotate(-a);\r\n\r\n let p0 = pts4[0];\r\n pts4 = pts4.map(p =>\r\n {\r\n p = p.clone().sub(p0);\r\n r.applyVector(p);\r\n return p;\r\n });\r\n box.setFromPoints(pts4);\r\n\r\n nowV.set(-preV.y, preV.x);//旋转90度\r\n\r\n rectOCS = new Matrix4().makeBasis(\r\n AsVector3(preV.normalize()),\r\n AsVector3(nowV.normalize()),\r\n ZAxis,\r\n ).setPosition(p0.x, p0.y, 0);\r\n\r\n rectOCS.multiplyMatrices(cu.OCSNoClone, rectOCS);\r\n }\r\n\r\n //4个点都在角上\r\n if (!pts4.every(p =>\r\n {\r\n return (equaln(p.x, box.min.x, 0.01) || equaln(p.x, box.max.x, 0.01))\r\n && (equaln(p.y, box.min.y, 0.01) || equaln(p.y, box.max.y, 0.01));\r\n }))\r\n return;\r\n\r\n let size = box.getSize(new Vector2);\r\n\r\n return {\r\n size: AsVector3(size),\r\n box: new Box3(AsVector3(box.min), AsVector3(box.max)),\r\n OCS: rectOCS,\r\n };\r\n }\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.GetFirstDeriv(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.GetFirstDeriv(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\nconst PolylineSpliteRectFuzz = 1e-3;\r\n/**封闭多段线 分割成矩形 */\r\nexport function PolylineSpliteRect(outline: Polyline): Polyline[]\r\n{\r\n if (!outline.IsClose || IsRect(outline))\r\n return [outline];\r\n\r\n let firstDerv = outline.GetFirstDeriv(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.GetFirstDeriv(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.GetFirstDeriv(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","/**\r\n *勿随意更改属性名,若更改,需更改对应UI模态框的属性和检验方法的key\r\n *\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\n//偏心轮类型\r\n// 左右侧板 Font朝向柜内 Back朝向柜外\r\n// 顶底板 Font朝向柜外 Back两面朝下 Inside朝向柜内\r\nexport enum FaceDirection\r\n{\r\n Front = 0,\r\n Back = 1,\r\n Inside = 2\r\n}\r\n","export enum LogType\r\n{\r\n Error = \"ERROR\",\r\n Warning = \"WARNING\",\r\n Info = \"INFO\",\r\n Command = \"COMMAND\",\r\n All = \"ALL\",\r\n}\r\n\r\ntype LogFunction = (message?: any, ...optionalParams: any[]) => void;\r\n\r\nexport const _LogInjectFunctions: LogFunction[] = [];\r\n\r\n//Log(`板:${br.Name}没有提供排钻信息!`, LogType.Warning, [br]);\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 _LogInjectInteractionFunctions: LogFunction[] = [];\r\n\r\n//InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: \"侧孔与板无交点,无法加工该侧孔!\" }], LogType.Warning);\r\nexport function InteractionLog(message?: any, ...optionalParams: any[]): void\r\n{\r\n for (let f of _LogInjectInteractionFunctions)\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","\r\n\r\nlet instanceMap = new Map();\r\n\r\nexport interface PrototypeType extends Function\r\n{\r\n prototype: T;\r\n}\r\n\r\nexport interface ConstructorFunctionType extends PrototypeType\r\n{\r\n new(...args: any[]): T;\r\n}\r\n\r\nexport type ConstructorType = PrototypeType> = (ConstructorFunctionType | PrototypeType) & {\r\n [Key in keyof Static]: Static[Key];\r\n};\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 //ref:https://github.com/Microsoft/TypeScript/issues/5863\r\n static GetInstance(this: ConstructorType): T\r\n {\r\n if (instanceMap.has(this))\r\n return instanceMap.get(this);\r\n //@ts-ignore\r\n let __instance__ = new this.prototype.constructor();\r\n instanceMap.set(this, __instance__);\r\n return __instance__;\r\n }\r\n}\r\n","import { Geometry, Matrix4, Vector3 } from \"three\";\r\n\r\nexport function ScaleUV(geo: Geometry, scale = 1e-3)\r\n{\r\n for (let uvsg of geo.faceVertexUvs)\r\n {\r\n for (let uvs of uvsg)\r\n {\r\n for (let uv of uvs)\r\n {\r\n uv.multiplyScalar(scale);\r\n }\r\n }\r\n }\r\n}\r\nexport function ScaleUV2(geo: Geometry, ocs: Matrix4, xScale = 1e-3, yScale = 1e-3, isInvert = false)\r\n{\r\n for (let uvsg of geo.faceVertexUvs)\r\n {\r\n for (let uvs of uvsg)\r\n {\r\n for (let uv of uvs)\r\n {\r\n let p = new Vector3(uv.x, uv.y).applyMatrix4(ocs);\r\n uv.x = p.x;\r\n uv.y = p.y;\r\n if (isInvert)\r\n {\r\n uv.x /= yScale;\r\n uv.y /= xScale;\r\n }\r\n else\r\n {\r\n uv.x /= xScale;\r\n uv.y /= yScale;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { 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 constructor(\r\n private _Outline: Contour = new Contour,\r\n private _Holes: Contour[] = []\r\n )\r\n {\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(con: Contour)\r\n {\r\n this._Outline = con;\r\n }\r\n set Holes(holes: Contour[])\r\n {\r\n this._Holes = holes;\r\n }\r\n\r\n get Shape(): TShape\r\n {\r\n let 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 shape.holes.push(sp);\r\n }\r\n else\r\n shape.holes.push(h.Shape);\r\n }\r\n\r\n return shape;\r\n }\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].ContainerCurve(cu.Curve, true));\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.ContainerCurve(con.Curve, true);\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.ContainerCurve(h.Curve, true));\r\n }\r\n return holes;\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\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[] | (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 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 ClearDraw(): this\r\n {\r\n this.UpdateDrawGeometry();\r\n return super.ClearDraw();\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.GetFirstDeriv(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 PaperName = \"paperName\",\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 Remarks = \"remarks\",//备注\r\n ExtraRemarks = \"extraRemarks\",//追加备注\r\n OpenDir = \"openDir\", //开门方向\r\n GroovesAddLength = \"GroovesAddLength\", //槽加长\r\n GroovesAddWidth = \"GroovesAddWidth\", //槽加宽\r\n GroovesAddDepth = \"GroovesAddDepth\", //槽加深\r\n FrontDrill = \"frontDrill\",//正面排孔\r\n BackDrill = \"backDrill\",//反面排孔\r\n}\r\n","import { Vector3 } from \"three\";\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 { BoardProcessOption } from \"../../UI/Store/OptionInterface/BoardProcessOption\";\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\nimport { GangDrillType } from './CylinderHole';\r\n\r\n@Factory\r\nexport abstract 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 protected type: GangDrillType = GangDrillType.Pxl;\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\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 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, FrontSide, 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 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\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\r\n InitDrawObject(renderType: RenderType)\r\n {\r\n return this.GetObject3DByRenderType(renderType);\r\n }\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 if (renderType === RenderType.CustomNumber || renderType === RenderType.ModelGroove)\r\n return;//不绘制了\r\n // return new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex, FrontSide, true));\r\n else\r\n return new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n }\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\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 if (type === RenderType.CustomNumber || type === RenderType.ModelGroove)\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex, FrontSide, true);\r\n else\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n\r\n ClearDraw(): this\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 return super.ClearDraw();\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\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 { 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 { Box3Ext } from \"../../Geometry/Box\";\r\nimport { ZAxis, isParallelTo, rotatePoint } from \"../../Geometry/GeUtils\";\r\nimport { DrillType } from \"./DrillType\";\r\n\r\nexport const SCALAR = 0.1;\r\n\r\nexport function CyHoleInBoard(cys: CylinderHole[], br: Board, ocs: Matrix4, checkAll = false, allowPxl = false)\r\n{\r\n if (!checkAll && 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 Box3Ext();\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, 1e-5))\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 (allowPxl || !HostApplicationServices.forceFilterPxl)\r\n return outline.IntersectWith(cir, 0).length <= 1 && !outline.PtInCurve(center);\r\n else\r\n return outline.IntersectWith(cir, 0).length > 0 || !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\n/**\r\n * 板的排钻 <上下左右>\r\n */\r\nexport interface IBoardRectHoleType\r\n{\r\n up: string;\r\n down: string;\r\n left: string;\r\n right: string;\r\n}\r\n\r\n/**分析上下左右排钻 */\r\nexport function ParseBoardRectHoleType(br: Board, outBrRectHoleType: IBoardRectHoleType = {} as any)\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.GetFirstDeriv(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 outBrRectHoleType.down = hightDrill[i];\r\n else\r\n outBrRectHoleType.up = hightDrill[i];\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n outBrRectHoleType.right = hightDrill[i];\r\n else\r\n outBrRectHoleType.left = hightDrill[i];\r\n }\r\n }\r\n\r\n return outBrRectHoleType;\r\n}\r\nexport function ExtureHoleInBoard(holes: ExtrudeHole[], board: Board, ocs: Matrix4)\r\n{\r\n //TODO:自定义排钻判断\r\n return true;\r\n}\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 SetBrHighHoleTypeFromRectHoleType(br: Board, brRectHoleType: IBoardRectHoleType)\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.GetFirstDeriv(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(brRectHoleType.down);\r\n else\r\n highDrill.push(brRectHoleType.up);\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n highDrill.push(brRectHoleType.right);\r\n else\r\n highDrill.push(brRectHoleType.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 { Task } from \"../../Common/ThreadPool/Task\";\r\n\r\nexport type CSGTask = Pick;\r\n\r\ntype CSGSubtractFunction = (task: CSGTask) => void;\r\nexport const _CSGSubtractInjectInteractionFunctions: CSGSubtractFunction[] = [];\r\nexport function AddCSGSubtractTask(task: CSGTask)\r\n{\r\n for (let f of _CSGSubtractInjectInteractionFunctions)\r\n f(task);\r\n}\r\n\r\nexport type TaskKey = Pick;\r\ntype TerminateCSGTaskFunction = (task: TaskKey) => void;\r\nexport const _TerminateTaskInjectInteractionFunctions: TerminateCSGTaskFunction[] = [];\r\nexport function TerminateCSGTask(task: TaskKey)\r\n{\r\n for (let f of _TerminateTaskInjectInteractionFunctions)\r\n f(task);\r\n}\r\n","export enum BoardType\r\n{\r\n Layer = 0, //层板\r\n Vertical = 1, //立板\r\n Behind = 2 //背板\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\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 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","import { Vector3 } from \"three\";\r\nimport { BoardOpenDir, LinesType } from \"../DatabaseServices/Entity/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 //开门方向纹路\r\n static LinesOpenDirPts(len: number, width: number, openDir: BoardOpenDir)\r\n {\r\n if (openDir === BoardOpenDir.Right)\r\n {\r\n return [\r\n new Vector3(-width / 2, -len / 2), new Vector3(width / 2, 0),\r\n new Vector3(width / 2, 0), new Vector3(-width / 2, len / 2)\r\n ];\r\n }\r\n else if (openDir === BoardOpenDir.Left)\r\n {\r\n return [\r\n new Vector3(width / 2, -len / 2), new Vector3(-width / 2, 0),\r\n new Vector3(-width / 2, 0), new Vector3(width / 2, len / 2)\r\n ];\r\n }\r\n else if (openDir === BoardOpenDir.Up)\r\n {\r\n return [\r\n new Vector3(-width / 2, -len / 2), new Vector3(0, len / 2),\r\n new Vector3(0, len / 2), new Vector3(width / 2, -len / 2)\r\n ];\r\n }\r\n else if (openDir === BoardOpenDir.Down)\r\n {\r\n return [\r\n new Vector3(-width / 2, len / 2), new Vector3(0, -len / 2),\r\n new Vector3(0, -len / 2), new Vector3(width / 2, len / 2)\r\n ];\r\n }\r\n }\r\n\r\n}\r\n","//为了避免Core对UI库的依赖,导致测试用例失败,导致外部项目引用失败,我们分离了这个函数\r\n\r\nimport { InteractionLog, LogType } from \"./Log\";\r\n\r\nexport 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\r\n\r\ninterface IToasterShowEntityErrorOption\r\n{\r\n intent: Intent,\r\n msg: string,\r\n timeout: number;\r\n ent: any;\r\n}\r\n\r\nexport const ToasterShowEntityMsgInjectFunctions: ((option: IToasterShowEntityErrorOption) => void)[] = [];\r\nexport function ToasterShowEntityMsg(option: {\r\n intent: Intent,\r\n msg: string,\r\n timeout: number;\r\n ent: any;\r\n})\r\n{\r\n for (let f of ToasterShowEntityMsgInjectFunctions)\r\n f(option);\r\n\r\n let logMsgs = [{ msg: option.msg }] as any[];\r\n if (option.ent)\r\n logMsgs.push({ msg: \"点击查看\", entity: Array.isArray(option.ent) ? option.ent : [option.ent] });\r\n InteractionLog(logMsgs, LogType.Warning);\r\n}\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","import { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { IBaseOption } from \"../../Store/OptionInterface/IOptionInterface\";\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 { FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { BoardOpenDir, ComposingType, LinesType } from \"../../DatabaseServices/Entity/BoardInterface\";\r\nimport { IBaseOption } from \"./OptionInterface/IOptionInterface\";\r\n\r\nexport const DRILL_KEYS = [\"downDrill\", \"rightDrill\", \"upDrill\", \"leftDrill\"]; //这个顺序不能变\r\nexport const SEAL_KEYS = [EBoardKeyList.UpSealed, EBoardKeyList.DownSealed, EBoardKeyList.RightSealed, EBoardKeyList.LeftSealed];\r\nexport const EDGEREMARK_KEYS = [\"edgeRemarkUp\", \"edgeRemarkDown\", \"edgeRemarkLeft\", \"edgeRemarkRight\"];\r\n\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 hardwareName: 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.OpenDir]: BoardOpenDir;\r\n [EBoardKeyList.UpSealed]: string;\r\n [EBoardKeyList.DownSealed]: string;\r\n [EBoardKeyList.LeftSealed]: string;\r\n [EBoardKeyList.RightSealed]: string;\r\n hardwareDoorName: string;\r\n highDrill: string[];\r\n upDownDrill: [boolean, boolean];\r\n isClose: boolean;\r\n remarks: [string, string][];\r\n extraRemarks: [string, string][];\r\n isChaidan: boolean;\r\n [EBoardKeyList.KnifeRad]: string;\r\n\r\n edgeRemarkUp: string; //板边备注上下左右\r\n edgeRemarkDown: string;\r\n edgeRemarkLeft: string;\r\n edgeRemarkRight: 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 hardwareName: 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 addRemarks: boolean;\r\n [EBoardKeyList.ComposingFace]: boolean;\r\n [EBoardKeyList.OpenDir]: 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 edgeRemarkUp: boolean;\r\n edgeRemarkDown: boolean;\r\n edgeRemarkLeft: boolean;\r\n edgeRemarkRight: 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 hardwareName: 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.OpenDir]: 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 GetHardWareOption = 10,\r\n RemoveSplitSize = 11, //去除拆单尺寸\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, IHightDrillOption } from \"./OptionInterface/IOptionInterface\";\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 verticalBoardName: string; //立板名称\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 lbSealedUp: number;//立板封边上下左右\r\n lbSealedDown: number;\r\n lbSealedLeft: number;\r\n lbSealedRight: number;\r\n lbHightDrillOption: IHightDrillOption; //立板高级排钻\r\n useBoardProcessOption?: boolean; //使用周围板件数据\r\n isModifyHardwareMaterial: boolean; //使用周围板件数据时五金是否应用\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 layerBoardName: string;\r\n cbHightDrillOption: IHightDrillOption; //层板高级排钻\r\n deviation: number; //铰链碰撞单次偏移量\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 deviation: number; //铰链碰撞单次偏移量\r\n}\r\n\r\n/**\r\n * 抽屉数据接口\r\n */\r\nexport interface IDrawerConfigOption extends IDoorAndDrawerConfigOption\r\n{\r\n drawerTotalDepth: number; //抽屉总深\r\n trackDepth: number; //轨道深度\r\n isAutoSelectTrack: boolean;\r\n isLockTopOffset: boolean;\r\n isLockBottomOffset: boolean;\r\n}\r\n\r\n//门板位置类型\r\nexport enum DoorPosType\r\n{\r\n Out = 0, //外盖\r\n In = 1,\r\n}\r\n\r\nexport enum HandleHorPos\r\n{\r\n Left = 0,\r\n Right = 1,\r\n Mid = 2,\r\n}\r\nexport enum HandleVePos\r\n{\r\n Top = 0,\r\n Bottom = 1,\r\n Mid = 2,\r\n}\r\n//门板开门类型\r\nexport enum DoorOpenDir\r\n{\r\n Left = \"lf\",\r\n Right = \"rt\",\r\n Top = \"tp\",\r\n Bottom = \"bm\",\r\n None = \"none\",\r\n}\r\n\r\n//抽屉门板信息\r\nexport interface IDrawerInfo extends IBaseOption\r\n{\r\n row: number,\r\n col: number,\r\n divWidth: number, //预览UI尺寸\r\n divHeight: number,\r\n showWidth: string, //UI展示数据\r\n showHeight: string,\r\n width: number, //门板计算尺寸\r\n height: number,\r\n isLockWidth: boolean,\r\n isLockHeight: boolean,\r\n isSelect: boolean;\r\n tempInfo: ISelectTempInfo;\r\n marginRight?: number;\r\n}\r\n\r\nexport interface IDoorInfo extends IDrawerInfo\r\n{\r\n openDir: DoorOpenDir,\r\n\r\n isDrawLayer: boolean;\r\n isDrawVer: boolean;\r\n}\r\n\r\nexport interface IDrawerDoorTempInfo\r\n{\r\n name: string;\r\n id: string;\r\n logo?: string;\r\n props?: 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\nexport interface IWindowTempInfo\r\n{\r\n logo?: string;\r\n}\r\n\r\n/**选择的模板信息,temp-抽屉或门板,handletemp-拉手模板,windowTemp-窗户模板,其他是铰链模板 */\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 \"./OptionInterface/IOptionInterface\";\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 linesType: number; //纹路\r\n useBoardProcessOption?: boolean; //使用周围的板件数据\r\n}\r\n","import { IBaseOption } from \"./IOptionInterface\";\r\n\r\nexport enum ForBoardNameType\r\n{\r\n Same = \"same\",\r\n NoSame = \"nosame\",\r\n Include = \"include\",\r\n NoInclude = \"noinclude\"\r\n}\r\n\r\nexport interface IAutoDimBrsOption extends IBaseOption\r\n{\r\n total: boolean; //整体标注\r\n out: boolean; //柜外标注(前视图标注)\r\n inW: boolean; //柜内宽标注\r\n inH: boolean; //柜内高标注\r\n noRepeat: boolean; //删除重复\r\n noSmSize: boolean; //过滤小尺寸\r\n noAppointSize: boolean; //过滤指定尺寸\r\n noInSize: boolean; //空间小于该数值时 不标注内空\r\n noShowMinSize: number;\r\n noShowMinInSize: number;\r\n noShowAppointSizes: string;\r\n useParseGroups: string;\r\n forBoardName: boolean;\r\n forBoardNameStr: string;\r\n forBoardNameType: ForBoardNameType;\r\n}\r\n\r\nexport interface IFastDimOption extends IBaseOption\r\n{\r\n filterSmallSize: boolean; //过滤小尺寸\r\n filterSmallSizeValue: number; //过滤小尺寸值\r\n filterAppointSize: boolean; //过滤指定尺寸\r\n filterAppointSizeValues: string;//过滤指定尺寸的值\r\n filterAppointForBoardName: boolean;///根据板名过滤\r\n conditionType: ForBoardNameType; //根据板名过滤条件\r\n filterAppointForBoardNameValues: string;//根据板名过滤的值\r\n}\r\n","import { IBaseOption } from \"./IOptionInterface\";\r\n\r\nexport enum CurtailType\r\n{\r\n PerBr = \"0\",\r\n Total = \"1\",\r\n OCS = \"2\"\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","import { BrRelativePos } from \"../../../DatabaseServices/Entity/BoardInterface\";\r\nimport { BoardConfigOption } from \"./IOptionInterface\";\r\n\r\nexport enum StripType\r\n{\r\n H = \"h\",\r\n V = \"v\"\r\n}\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 addSKTCabinetName: boolean; //柜名加收口名称\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 * @export\r\n * @enum {number}\r\n */\r\n\r\nexport enum ViewDirection\r\n{\r\n Left = 1,\r\n Right = 2,\r\n Up = 3,\r\n Front = 4,\r\n Bottom = 5,\r\n Back = 6,\r\n Southwest = 7\r\n}\r\n\r\nexport enum ViewportPosition\r\n{\r\n Vertical = \"vertical\",\r\n Horizontal = \"horizontal\",\r\n Left = \"left\",\r\n Right = \"right\",\r\n Bottom = \"bottom\",\r\n Top = \"top\"\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","import { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { IBaseOption } from \"./OptionInterface/IOptionInterface\";\r\n\r\nexport enum EWineRackType\r\n{\r\n Oblique = 0,\r\n Upright = 1,\r\n}\r\n\r\n/**酒格样式 */\r\nexport enum EWineRackStyle\r\n{\r\n WholeLattice = 0,//全格优先\r\n Semilattice = 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 wineRackStyle: EWineRackStyle,\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 useBoardProcessOption?: 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 { FaceDirection } from \"../Add-on/DrawDrilling/DrillType\";\r\nimport { 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 { BoardOpenDir, BoardType, BrRelativePos, ComposingType, LinesType } from \"../DatabaseServices/Entity/BoardInterface\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\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 { 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 { ForBoardNameType, IAutoDimBrsOption, IFastDimOption } from \"../UI/Store/OptionInterface/AutoDimBrsOption\";\r\nimport { CurtailType, IBoardBatchCurtailOption } from \"../UI/Store/OptionInterface/BoardBatchCurtailOption \";\r\nimport { BoardProcessOption } from \"../UI/Store/OptionInterface/BoardProcessOption\";\r\nimport { BulkheadCeilingOption } from \"../UI/Store/OptionInterface/BulkheadCeilingOption\";\r\nimport { ClosingStripOption, StripType } from \"../UI/Store/OptionInterface/ClosingStripOption\";\r\nimport { BehindBoardOption, ChangeColorByBoardMaterialOption, ChangeColorByRoomOrCabinetOption, CommonPanelConfigOption, DatalistConfigOption, DoorRelatesInfoOption, IBatchModifyPanelOption, IDimStyleOption, LayerBoardOption, LayerNailOption, ModifyTextsConfigOption, RightPlaneLightOption, ShareBoardInfConfigurationOption, SideBoardOption, SingleBoardOption, TBBoardOption, VerticalBoardOption, WindowPanelConfigOption } from \"../UI/Store/OptionInterface/IOptionInterface\";\r\nimport { PointLightOption, RectAreaLightOption, SpotLightOption } from \"../UI/Store/OptionInterface/LightConfigOption\";\r\nimport { BehindHeightPositon, RadioType, ViewDirection, ViewportPosition } from \"../UI/Store/OptionInterface/OptionEnum\";\r\nimport { Viewport2ConfigOption, Viewport3ConfigOption, Viewport4ConfigOption, ViewportConfigOption } from \"../UI/Store/OptionInterface/ViewportConfigOption\";\r\nimport { EFullDir, EFullType, EWRackArrayType, EWineRackStyle, EWineRackType, 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: 5,\r\n type: EWineRackType.Oblique,\r\n wineRackStyle: EWineRackStyle.WholeLattice,\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 useBoardProcessOption: true\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\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: ViewDirection.Up,\r\n renderType: RenderType.Print,\r\n revertRotation: false\r\n};\r\nObject.freeze(DefaultViewportConfigOption);\r\n\r\nexport const DefaultViewport2ConfigOption: Viewport2ConfigOption = {\r\n viewportPosition: ViewportPosition.Vertical,\r\n renderType: [RenderType.Print, RenderType.Print],\r\n view1: ViewDirection.Left,\r\n view2: ViewDirection.Up,\r\n revertRotation: false\r\n};\r\nObject.freeze(DefaultViewport2ConfigOption);\r\n\r\nexport const DefaultViewport3ConfigOption: Viewport3ConfigOption = {\r\n viewportPosition: ViewportPosition.Vertical,\r\n renderType: [RenderType.Print, RenderType.Print, RenderType.Print],\r\n view: [ViewDirection.Front, ViewDirection.Up, ViewDirection.Southwest],\r\n revertRotation: false\r\n};\r\nObject.freeze(DefaultViewport3ConfigOption);\r\n\r\nexport const DefaultViewport4ConfigOption: Viewport4ConfigOption = {\r\n view: [ViewDirection.Front, ViewDirection.Left, ViewDirection.Up, ViewDirection.Southwest],\r\n renderType: [RenderType.Print, RenderType.Print, RenderType.Print, RenderType.Print],\r\n revertRotation: false\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\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: 30,\r\n SourceLength: 0,\r\n Angle: 45,\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: 3,\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 addSKTCabinetName: true\r\n};\r\nObject.freeze(DefaultClosingStripOption);\r\n\r\nexport const DefaultBoardFindOption: IBoardFindOption = {\r\n version: 9,\r\n condition: {\r\n // layer: false, //这个KEY看起来没用了\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 hardwareName: 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 addRemarks: false,\r\n composingFace: false,\r\n openDir: 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 edgeRemarkUp: false,\r\n edgeRemarkDown: false,\r\n edgeRemarkLeft: false,\r\n edgeRemarkRight: 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 hardwareName: 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 openDir: 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\", 删除无用的key\r\n height: \"\",\r\n width: \"\",\r\n thickness: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n brName: \"\",\r\n hardwareName: \"\",\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 openDir: BoardOpenDir.None,\r\n hardwareDoorName: \"\",\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 extraRemarks: Array.from({ length: 10 }, () => [\"\", \"\"]),\r\n isChaidan: false,\r\n [EBoardKeyList.KnifeRad]: \"\",\r\n edgeRemarkUp: \"\",\r\n edgeRemarkDown: \"\",\r\n edgeRemarkLeft: \"\",\r\n edgeRemarkRight: \"\",\r\n};\r\nObject.freeze(DefaultBoardFindOption);\r\n\r\nexport const DefaultLatticOption: ILatticeOption = {\r\n version: 3,\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 linesType: LinesType.Reverse,\r\n useBoardProcessOption: true,\r\n};\r\nObject.freeze(DefaultLatticOption);\r\n\r\nexport const DefaultDoorOption: IDoorConfigOption = {\r\n version: 9,\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 cbHightDrillOption: { up: \"\", down: \"\", left: \"\", right: \"\" },\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 verticalBoardName: \"立板\",\r\n layerBoardName: \"层板\",\r\n lbSealedUp: 1,\r\n lbSealedDown: 1,\r\n lbSealedLeft: 1,\r\n lbSealedRight: 1,\r\n lbHightDrillOption: { up: \"\", down: \"\", left: \"\", right: \"\" },\r\n useBoardProcessOption: true,\r\n isModifyHardwareMaterial: false,\r\n deviation: 100 //偏移量\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 deviation: 100\r\n};\r\nObject.freeze(DefaultHingeOption);\r\nexport const DefaultDrawerOption: IDrawerConfigOption = {\r\n version: 7,\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 verticalBoardName: \"立板\",\r\n lbSealedUp: 1,\r\n lbSealedDown: 1,\r\n lbSealedLeft: 1,\r\n lbSealedRight: 1,\r\n lbHightDrillOption: { up: \"\", down: \"\", left: \"\", right: \"\" },\r\n useBoardProcessOption: true,\r\n isModifyHardwareMaterial: false,\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 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.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 linesType: LinesType.Reverse,\r\n useBoardProcessOption: true\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: 4,\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 edgeRemarkUp: \"\",\r\n edgeRemarkDown: \"\",\r\n edgeRemarkLeft: \"\",\r\n edgeRemarkRight: \"\",\r\n highBoardEdgeRemark: [],\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: 3,\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 edgeRemarkUp: \"\",\r\n edgeRemarkDown: \"\",\r\n edgeRemarkLeft: \"\",\r\n edgeRemarkRight: \"\",\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 edgeRemarkUp: false,\r\n edgeRemarkDown: false,\r\n edgeRemarkLeft: false,\r\n edgeRemarkRight: false,\r\n }\r\n};\r\n\r\nObject.freeze(DefaultUpdateInfoOption);\r\n\r\nexport const DefaultKuGanOption: IKuGangDrawOption = {\r\n insertMode: \"0\",\r\n minSpacing: 50,\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: 3,\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 middleVerticalBrName: \"立板\",\r\n topMostLayerBrName: \"顶板\",\r\n middleLayerBrName: \"层板\",\r\n bottomMostLayerBrName: \"底板\",\r\n bottomMostBackBrName: \"地脚线\",\r\n stripeBrName: \"收口条\",\r\n cabinetName: \"\",\r\n isfarLeftVerticalBrName: true,//最左侧立板名称\r\n isModifyMiddleVerticalBrName: false,//是否修改中间立板名称\r\n isfarRightVerticalBrName: true,\r\n istopMostLayerBrName: true,\r\n isModifyMiddleLayerBrName: false, //是否修改中间层板名称\r\n isbottomMostLayerBrName: true,\r\n isbottomMostBackBrName: true,\r\n isstripeBrName: true,\r\n iscabinetName: false,//修改柜名\r\n isModifyRoomName: true,//修改房名\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: 8,\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 useSktTemplate: false,\r\n sktTemplate: null,\r\n sktTemplateId: \"\",\r\n rightSktTemplateId: \"\",\r\n topSktTemplateId: \"\",\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: 5,\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 noChaiDan: 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 visual: false,\r\n curve: false,\r\n line: false,\r\n polyline: false,\r\n circle: false,\r\n arc: false,\r\n custom: false,\r\n customBoardName: \"\",\r\n matchType: ECompareType.Equal\r\n};\r\n\r\nexport const DefaultCommonPanelOption: CommonPanelConfigOption = {\r\n version: 1,\r\n orderMap: {},\r\n orderType: EOrderType.ByUpdate,\r\n};\r\nObject.freeze(DefaultCommonPanelOption);\r\n\r\nexport const DefaultDatalistOption: DatalistConfigOption = {\r\n resizeUI: {}\r\n};\r\nObject.freeze(DefaultDatalistOption);\r\n\r\nexport const DefaultAutoDimBrsOption: IAutoDimBrsOption = {\r\n version: 1,\r\n total: true,\r\n out: true,\r\n inW: false,\r\n inH: false,\r\n noRepeat: false,\r\n noSmSize: false,\r\n noAppointSize: false,\r\n noInSize: false,\r\n noShowMinSize: 20,\r\n noShowMinInSize: 300,\r\n noShowAppointSizes: \"\",\r\n useParseGroups: \"0\",\r\n forBoardName: false,\r\n forBoardNameStr: \"\",\r\n forBoardNameType: ForBoardNameType.Same,\r\n};\r\nObject.freeze(DefaultAutoDimBrsOption);\r\n\r\n\r\nexport const DefaultWindowPanelOption: WindowPanelConfigOption = {\r\n Length: 1100,\r\n Height: 1500,\r\n Thick: 280,\r\n WindowOffGround: 900,\r\n IsBayWindow: false,\r\n BayLeftIsWall: false,\r\n BayRightIsWall: false,\r\n BayDist: 500,\r\n BayLeftDist: 600,\r\n BayMiddleDist: 600,\r\n BayRightDist: 600,\r\n HasWindowStone: false,\r\n StoneThick: 50,\r\n StoneBulge: 50,\r\n StoneLeftRightBulge: 50,\r\n};\r\n\r\nObject.freeze(DefaultWindowPanelOption);\r\nexport const DefaultDimStyleOption: IDimStyleOption = {\r\n dimFXLON: true,\r\n dimFXL: 100,\r\n dimALTD: 2,\r\n dimASZ: 10,\r\n dimGAP: 10,\r\n dimEXE: 20,\r\n dimTXT: 60,\r\n dimTAD: 2,\r\n dimADEC: 2,\r\n};\r\nObject.freeze(DefaultDimStyleOption);\r\n\r\nexport const DefaultChangeColorByBoardMaterialOption: ChangeColorByBoardMaterialOption = {\r\n accordThickness: false,\r\n accordMaterialColor: true,\r\n accordMaterial: true,\r\n accordMaterialName: true\r\n};\r\nObject.freeze(DefaultChangeColorByBoardMaterialOption);\r\n\r\nexport const DefaultShareBoardInfConfigurationOption: ShareBoardInfConfigurationOption = {\r\n Physical2EdgeColor: 7,\r\n VisualStyle: RenderType.Conceptual,\r\n Viewport: ViewDirection.Southwest,\r\n IsExportBoard: true,\r\n IsExportHardware: true,\r\n showBom: true,\r\n};\r\nObject.freeze(DefaultShareBoardInfConfigurationOption);\r\n\r\nexport const DefaultBulkheadCeilingOption: BulkheadCeilingOption = {\r\n Item: []\r\n};\r\nObject.freeze(DefaultBulkheadCeilingOption);\r\n\r\nexport const DefaultChangeColorByRoomOrCabinetOption: ChangeColorByRoomOrCabinetOption = {\r\n accordCabinetName: true,\r\n accordRoomName: true\r\n};\r\nObject.freeze(DefaultChangeColorByRoomOrCabinetOption);\r\n\r\nexport const DefaultDoorRelatesInfoOption: DoorRelatesInfoOption = {\r\n version: 1,\r\n hingeOption: []\r\n};\r\nObject.freeze(DefaultDoorRelatesInfoOption);\r\n\r\nexport const DefaultFastDimOption: IFastDimOption = {\r\n filterSmallSize: false,\r\n filterSmallSizeValue: 0,\r\n filterAppointSize: false,\r\n filterAppointSizeValues: \"\",\r\n filterAppointForBoardName: false,\r\n filterAppointForBoardNameValues: \"\",\r\n conditionType: ForBoardNameType.Same,\r\n};\r\n","import { BufferGeometry, Face3, Float32BufferAttribute, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, Line3, Matrix4, Shape, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayRemoveDuplicateBySort } from \"../Common/ArrayExt\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { FixIndex } from \"../Nest/Common/Util\";\r\nimport { AsVector3, ZeroVec, equalv2, equalv3 } from \"./GeUtils\";\r\nimport { PlaneExt } from \"./Plane\";\r\n\r\n/**\r\n * 使用轮廓和扫描路径构建扫描几何体,实现衣柜中的顶线或者地脚线之类的实体.\r\n * 该几何体需要轮廓和路径的起始截面垂直,否则构造的实体将会错误.\r\n */\r\nexport class SweepGeometry extends Geometry\r\n{\r\n edgePts: number[] = [];\r\n polygonIndexes = [];\r\n ShapeMaterialSlotData: number[];//[0,0,0,1,2,3,0] 指定多段线轮廓的材质槽索引 每个顶点指定一个材质槽位置\r\n constructor(contour: Polyline, path: Curve[] | Curve, ShapeMaterialSlotData?: number[])\r\n {\r\n super();\r\n this.ShapeMaterialSlotData = ShapeMaterialSlotData;\r\n if (Array.isArray(path))\r\n this.AddShape2(contour, path);\r\n else\r\n this.AddShape(contour, path);\r\n this.computeVertexNormals();\r\n this.computeFaceNormals();\r\n }\r\n\r\n get LineGeom(): LineGeometry\r\n {\r\n let lineGeo = new LineGeometry();\r\n let lineSegments = new Float32Array(this.edgePts);\r\n var instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\r\n lineGeo.setAttribute('instanceStart', new InterleavedBufferAttribute(instanceBuffer, 3, 0));\r\n lineGeo.setAttribute('instanceEnd', new InterleavedBufferAttribute(instanceBuffer, 3, 3));\r\n return lineGeo;\r\n }\r\n\r\n get EdgeGeom()\r\n {\r\n return new BufferGeometry().setAttribute('position', new Float32BufferAttribute(this.edgePts, 3));\r\n }\r\n\r\n AddShape(contour: Polyline, path: Curve)\r\n {\r\n //路径点表\r\n let pathPts2d = (path.Shape as 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.OCSNoClone);\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.OCSNoClone);\r\n\r\n let isClosePath = path.IsClose;\r\n\r\n let verts: Vector3[][] = [];//所有路径上的轮廓点\r\n\r\n let pathNormal = path.Normal;\r\n\r\n //计算所有需要的几何点,本质是不断的投影\r\n if (!isClosePath)\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormal, pathPts[0], undefined, pathPts[1]));\r\n\r\n\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, pathNormal, pathPts[i], pathPts[i - 1], pathPts[1]));\r\n else\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormal, pathPts[i], pathPts[i - 1]));\r\n }\r\n else\r\n {\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormal, pathPts[i], pathPts[i - 1], pathPts[i + 1]));\r\n }\r\n }\r\n\r\n if (isClosePath)\r\n verts.unshift(verts[verts.length - 1]);\r\n\r\n this.BuildSideFaces(shapePts2d, pathPts2d, pathPts, verts);\r\n if (!isClosePath) this.BuildLid(shapePts2d, verts);\r\n }\r\n\r\n AddShape2(contour: Polyline, paths: Curve[])\r\n {\r\n let pathPts: Vector3[] = [];\r\n let pathNormals: Vector3[] = [];\r\n\r\n //路径点表\r\n for (let path of paths)\r\n {\r\n let pathPts2d = path.Shape.getPoints(4) as Vector2[];\r\n arrayRemoveDuplicateBySort(pathPts2d, (p1, p2) =>\r\n {\r\n if (equalv2(p1, p2))\r\n {\r\n p2[\"_mask_\"] = p1[\"_mask_\"];\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n if (path !== paths[0])\r\n pathPts2d.shift();\r\n\r\n let pNormal = path.Normal;\r\n\r\n for (let p of pathPts2d)\r\n {\r\n let p3 = AsVector3(p).applyMatrix4(path.OCSNoClone);\r\n p3[\"_mask_\"] = p[\"_mask_\"];\r\n pathPts.push(p3);\r\n\r\n pathNormals.push(pNormal);\r\n }\r\n }\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.OCSNoClone);\r\n\r\n let isClosePath = equalv3(pathPts[0], pathPts[pathPts.length - 1], 1e-3);\r\n\r\n let verts: Vector3[][] = [];//所有路径上的轮廓点\r\n //计算所有需要的几何点,本质是不断的投影\r\n if (!isClosePath)\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormals[0], pathPts[0], undefined, pathPts[1]));\r\n\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, pathNormals[i], pathPts[i], pathPts[i - 1], pathPts[1]));\r\n else\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1]));\r\n }\r\n else\r\n {\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1], pathPts[i + 1]));\r\n }\r\n }\r\n\r\n if (isClosePath)\r\n verts.unshift(verts[verts.length - 1]);\r\n\r\n this.BuildSideFaces(shapePts2d, pathPts as unknown as Vector2[], pathPts, verts);\r\n if (!isClosePath) this.BuildLid(shapePts2d, verts);\r\n }\r\n\r\n /**\r\n * 使用4点构建面\r\n * @param a 左下\r\n * @param b 右下\r\n * @param c 左上\r\n * @param d 右上\r\n * @param uvs\r\n * @param [materialIndex]\r\n */\r\n protected BuildFace4(a: number, b: number, c: number, d: number, uvs: Vector2[], materialIndex?: number)\r\n {\r\n let f1 = new Face3(a, b, c, undefined, undefined, materialIndex);\r\n let f2 = new Face3(b, d, c, undefined, undefined, materialIndex);\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\r\n /**\r\n * 构造边缘面开始标记\r\n * @param dir 前进方向(单位向量)\r\n */\r\n protected SideStartMark(dir: Vector3) { }\r\n\r\n protected 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)\r\n if (p[\"_mask_\"])\r\n {\r\n addCount++;\r\n\r\n if (this.ShapeMaterialSlotData)\r\n p[\"_material_index_\"] = this.ShapeMaterialSlotData[addCount - 1];\r\n }\r\n\r\n let sumCount = addCount + shapePts2d.length; //实际个数\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 this.SideStartMark(p1Dir);\r\n\r\n let tempStartX = 0;\r\n\r\n let lastMaterialIndex = undefined;\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 (p2d[\"_mask_\"])\r\n lastMaterialIndex = p2d[\"_material_index_\"] ?? lastMaterialIndex;\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\r\n this.BuildFace4(curIndex, nextIndex, curIndex2, nextIndex2, uvs, lastMaterialIndex);\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 protected 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\nexport function 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 mtx = ContourTransfromToPath(curP, normal, nextP.clone().sub(curP));\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mtx));\r\n }\r\n else if (!nextP && preP)\r\n {\r\n let mtx = ContourTransfromToPath(curP, normal, curP.clone().sub(preP));\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mtx));\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 if (equalv2(v, ZeroVec))\r\n norm.copy(dir);\r\n\r\n //角平分线的平面\r\n let plane = new PlaneExt(norm, curP);\r\n\r\n let mtx = ContourTransfromToPath(preP, normal, dir);\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mtx));\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\r\n//用索引来定义\r\ntype Polygon = number[];\r\n\r\nexport class SweepGeometrySimple extends SweepGeometry\r\n{\r\n SidePolygons: (Polygon[])[];//所有侧面的多边形\r\n private _curSidePolygons: Polygon[];//\r\n private _curDir: Vector3;\r\n\r\n TriFaces: (number[])[];//截面的三角面索引\r\n shapeVerts: Vector3[][];//所有的截面点在节点位置\r\n shapePts2d: Vector2[];\r\n override computeVertexNormals() { }\r\n override computeFaceNormals() { }\r\n\r\n override BuildFace4(a: number, b: number, c: number, d: number, uvs: Vector2[], materialIndex?: number)\r\n {\r\n let polygon = [a, b, d, c];\r\n polygon[\"dir\"] = this._curDir;\r\n this._curSidePolygons.push(polygon);\r\n }\r\n\r\n protected override SideStartMark(dir: Vector3)\r\n {\r\n this._curDir = dir;\r\n if (this._curSidePolygons?.length)\r\n this.SidePolygons.push(this._curSidePolygons);\r\n\r\n this._curSidePolygons = [];\r\n }\r\n\r\n protected override BuildSideFaces(shapePts2d: Vector2[], pathPts2d: Vector2[], pathPts: Vector3[], verts: Vector3[][])\r\n {\r\n this.shapeVerts = verts;\r\n this.shapePts2d = shapePts2d;\r\n pathPts2d[0][\"_mask_\"] = true;\r\n\r\n if (!this.TriFaces)\r\n this.TriFaces = ShapeUtils.triangulateShape(shapePts2d, []);\r\n\r\n\r\n if (!this.SidePolygons) this.SidePolygons = [];\r\n super.BuildSideFaces(shapePts2d, pathPts2d, pathPts, verts);\r\n\r\n if (this._curSidePolygons?.length)\r\n this.SidePolygons.push(this._curSidePolygons);\r\n }\r\n\r\n protected override BuildLid(shapePts2d: Vector2[], verts: Vector3[][]) { }\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, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Line as TLine, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayRemoveDuplicateBySort } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { curveLinkGroup } from \"../../Common/CurveUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { Log, LogType } from \"../../Common/Log\";\r\nimport { tempMatrix1 } from \"../../Common/Matrix4Utils\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { AsVector3, MoveMatrix, ZAxis, ZeroVec, equaln, equalv3, isParallelTo } from '../../Geometry/GeUtils';\r\nimport { ProjectionToPlane, 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 { OBB } from './../../Geometry/OBB/obb';\r\n\r\n@Factory\r\nexport class SweepSolid extends Entity\r\n{\r\n static UseRectFakerContour = false;\r\n\r\n protected _Contour: Polyline;\r\n protected _PathCurve: Curve | Curve[];\r\n constructor(contour?: Polyline, pathCurve?: Curve | 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\r\n //将OCS变换成第一个路径的OCS(合理一点)\r\n let paths = this.Paths;\r\n let path = paths[0];\r\n\r\n this.OCS = path.OCSNoClone;\r\n this._SpaceOCS.copy(path.OCSNoClone);\r\n\r\n let ocsInv = this.OCSInv;\r\n for (let p of paths)\r\n p.ApplyMatrix(ocsInv);\r\n }\r\n }\r\n\r\n Explode()\r\n {\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n const explode: Curve[] = [this._Contour.Clone().ApplyMatrix(this._Matrix)];\r\n for (let path of this._PathCurve)\r\n {\r\n explode.push(path.Clone().ApplyMatrix(this._Matrix));\r\n }\r\n return explode;\r\n }\r\n return [this._Contour.Clone().ApplyMatrix(this._Matrix), this._PathCurve.Clone().ApplyMatrix(this._Matrix)];\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\r\n //单纯的返回数组\r\n get Paths()\r\n {\r\n return Array.isArray(this._PathCurve) ? this._PathCurve : [this._PathCurve];\r\n }\r\n\r\n Reverse()\r\n {\r\n this.WriteAllObjectRecord();\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n for (let path of this._PathCurve)\r\n path.Reverse();\r\n this._PathCurve.reverse();\r\n }\r\n else this._PathCurve.Reverse();\r\n this.Update();\r\n }\r\n\r\n /**\r\n * 将轮廓变换到wcs空间,当用户选定某个与扫描线起点相切的轮廓时.\r\n */\r\n private TransfromPathToWCS()\r\n {\r\n if (Array.isArray(this._PathCurve)) return;\r\n if (equalv3(this._Contour.Normal, ZAxis))\r\n return;\r\n\r\n let fDir = this._PathCurve.GetFirstDeriv(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.GetFirstDeriv(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(\"错误:提供的轮廓没有和路径垂直!\", LogType.Error);\r\n }\r\n\r\n private _MeshGeometry: SweepGeometry | BufferGeometry;\r\n private _LineGeom: 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 = this._MeshGeometry.EdgeGeom;\r\n this._LineGeom = this._MeshGeometry.LineGeom;\r\n this._MeshGeometry.edgePts = undefined;\r\n\r\n \r\n\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\r\n private _EdgeGeometry: BufferGeometry;\r\n 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 {\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n\r\n // for (let p of this.Paths)\r\n // {\r\n // p.IsEmbedEntity = true;\r\n // let lineObj = p.GetDrawObjectFromRenderType(RenderType.Wireframe) as TLine;\r\n // lineObj.material = ColorMaterial.GetWallLineMtl(1);\r\n // lineObj.computeLineDistances();\r\n // lineObj.matrix.copy(p.OCSNoClone);\r\n // line.add(lineObj);\r\n // }\r\n\r\n return line;\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 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._LineGeom, ColorMaterial.PrintLineMatrial);\r\n return new Object3D().add(line, mesh);\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n const object3d = new Object3D();\r\n for (let path of this._PathCurve)\r\n object3d.add(path.DrawObject);\r\n return object3d;\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 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 ClearDraw(): this\r\n {\r\n this.UpdateDrawGeometry();\r\n return super.ClearDraw();\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 // Object3DRemoveAll(l);\r\n // for (let p of this.Paths)\r\n // {\r\n // p.IsEmbedEntity = true;\r\n // let lineObj = p.GetDrawObjectFromRenderType(RenderType.Wireframe) as TLine;\r\n // lineObj.material = ColorMaterial.GetWallLineMtl(1);\r\n // lineObj.computeLineDistances();\r\n // l.add(lineObj);\r\n // }\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 if (Array.isArray(this._PathCurve))\r\n for (let path of this._PathCurve)\r\n obj.add(path.DrawObject);\r\n else\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 if (Array.isArray(this._PathCurve))\r\n {\r\n const points: Vector3[] = [];\r\n for (let path of this._PathCurve)\r\n {\r\n let contour = path.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 points.push(...pts, ...this.GetMidPoints());\r\n else points.push(...pts);\r\n }\r\n return points;\r\n }\r\n else\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 }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n //缓存夹点和子实体的索引\r\n private _GripSubIndexMap: Map;\r\n /** 获取夹点与子实体的索引 */\r\n GetGripSubIndexMap()\r\n {\r\n if (this._GripSubIndexMap)\r\n return this._GripSubIndexMap;\r\n\r\n this.GetGripPoints();\r\n\r\n return this._GripSubIndexMap;\r\n }\r\n\r\n GetGripPoints()\r\n {\r\n this._GripSubIndexMap = undefined;\r\n\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n this._GripSubIndexMap = new Map;\r\n\r\n const points: Vector3[] = [];\r\n for (let path of this._PathCurve)\r\n {\r\n let pts = path.GetGripPoints();\r\n for (let p of pts)\r\n {\r\n this._GripSubIndexMap.set(points.length, path);\r\n\r\n p.applyMatrix4(this._Matrix);\r\n points.push(p);\r\n }\r\n }\r\n return points;\r\n }\r\n else\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 }\r\n\r\n GetStretchPoints()\r\n {\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n const points: Vector3[] = [];\r\n for (let path of this._PathCurve)\r\n {\r\n let pts = path.GetStretchPoints();\r\n for (let p of pts)\r\n {\r\n p.applyMatrix4(this._Matrix);\r\n points.push(p);\r\n }\r\n }\r\n return points;\r\n }\r\n else\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 }\r\n\r\n //端点捕捉时提供端点\r\n private GetEndPoint()\r\n {\r\n let pathPts: Vector3[] = [];\r\n let pathNormals: Vector3[] = [];\r\n //路径点表\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n for (let path of this._PathCurve)\r\n {\r\n pathPts = path.GetStretchPoints();\r\n arrayRemoveDuplicateBySort(pathPts, (p1, p2) =>\r\n {\r\n if (equalv3(p1, p2))\r\n {\r\n p2[\"_mask_\"] = p1[\"_mask_\"];\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n if (path !== this._PathCurve[0])\r\n pathPts.shift();\r\n\r\n let pNormal = path.Normal;\r\n\r\n for (let p of pathPts)\r\n pathNormals.push(pNormal);\r\n }\r\n }\r\n else\r\n {\r\n const path = this._PathCurve;\r\n //路径点表\r\n pathPts = path.GetStretchPoints();\r\n if (path.IsClose && !equalv3(pathPts[0], pathPts[pathPts.length - 1], 1e-3))\r\n pathPts.push(pathPts[0]);\r\n\r\n arrayRemoveDuplicateBySort(pathPts, equalv3);\r\n let pNormal = path.Normal;\r\n for (let p of pathPts)\r\n pathNormals.push(pNormal);\r\n }\r\n\r\n let shapePts2d = this.Contour.GetStretchPoints();\r\n\r\n //轮廓点表\r\n let shapePts3d = shapePts2d.map(AsVector3);\r\n let isClosePath = equalv3(pathPts[0], pathPts[pathPts.length - 1], 1e-3);\r\n\r\n let pts: Vector3[] = [];//端点\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 pts.push(...ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1], pathPts[1]));\r\n else\r\n pts.push(...ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1]));\r\n }\r\n else\r\n {\r\n pts.push(...ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1], pathPts[i + 1]));\r\n }\r\n }\r\n\r\n for (let pt of pts) pt.applyMatrix4(this.OCSNoClone);\r\n return pts;\r\n }\r\n\r\n private GetMidPoints()\r\n {\r\n let conPts = this._Contour.GetStretchPoints();\r\n const pts: Vector3[] = [];\r\n const UpdateEndMtx = (path: Curve) =>\r\n {\r\n for (let i = 0.5; i < path.EndParam; i++)\r\n {\r\n let pos = path.GetPointAtParam(i);\r\n let dir = path.GetFirstDeriv(i).normalize();\r\n let y = path.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 pts.push(...conPts.map(p => p.clone().applyMatrix4(tempMatrix1)));\r\n }\r\n };\r\n if (Array.isArray(this._PathCurve))\r\n for (let path of this._PathCurve)\r\n UpdateEndMtx(path);\r\n else\r\n UpdateEndMtx(this._PathCurve);\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n let ptsLengths = 0;\r\n for (let i = 0; i < this._PathCurve.length; i += 1)\r\n {\r\n const path = this._PathCurve[i];\r\n const pathGripPts = path.GetGripPoints();\r\n const idxList = indexList.filter(v => v >= ptsLengths && v < (ptsLengths + pathGripPts.length)).map((v) => v - ptsLengths);\r\n\r\n ptsLengths += pathGripPts.length;\r\n\r\n if (idxList.length === 0) continue;\r\n\r\n let isMoveLine = (path instanceof Line && idxList.length === 1 && idxList[0] === 1);\r\n let isMovePolylineStart = (path instanceof Polyline) && idxList.length === 1 && idxList.includes(1);\r\n let isMovePolylineEnd = (path instanceof Polyline) && idxList.length === 1 && idxList.includes(pathGripPts.length - 2);\r\n\r\n //如果不是整体移动,那么vec被限制在CURVE OCS Z0\r\n let isMove = isMoveLine || idxList.length === pathGripPts.length;\r\n if (!isMove)\r\n {\r\n vec = vec.clone()\r\n .applyMatrix4(path.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(path.OCS.setPosition(0, 0, 0));\r\n }\r\n\r\n //我们校验它的前后曲线支不支持它移动这个点\r\n let prePath = this._PathCurve[FixIndex(i - 1, this._PathCurve)];\r\n let nextPath = this._PathCurve[FixIndex(i + 1, this._PathCurve)];\r\n\r\n if ((isMoveLine || idxList.includes(0) || isMovePolylineStart)//(move line ) or (move start) or(move pl start)\r\n && (i || equalv3(prePath.EndPoint, path.StartPoint, 1e-3)))//连接到下一段\r\n {\r\n //vec限制在上一段的坐标系内 无z\r\n vec = vec.clone()\r\n .applyMatrix4(prePath.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(prePath.OCS.setPosition(0, 0, 0));\r\n\r\n if (isMoveLine || isMovePolylineStart)//顺带移动上一段\r\n prePath.MoveGripPoints([prePath.GetGripPoints().length - 1], vec);\r\n\r\n }\r\n if ((isMoveLine || idxList.includes(pathGripPts.length - 1) || isMovePolylineEnd)//(move line ) or (move end) or(move pl end)\r\n && (i < this._PathCurve.length - 2 || equalv3(path.EndPoint, nextPath.StartPoint, 1e-3)))//连接到上一段\r\n {\r\n //vec限制在下一段的坐标系内 无z\r\n vec = vec.clone()\r\n .applyMatrix4(nextPath.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(nextPath.OCS.setPosition(0, 0, 0));\r\n\r\n if (isMoveLine || isMovePolylineEnd)//顺带移动下一段\r\n nextPath.MoveGripPoints([0], vec);\r\n }\r\n\r\n if (isMove)\r\n path.Move(vec);\r\n else\r\n path.MoveGripPoints(idxList, vec);\r\n }\r\n }\r\n else\r\n {\r\n this._PathCurve.MoveGripPoints(indexList, vec);\r\n }\r\n this.Update();\r\n }\r\n\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n let ptsLengths = 0;\r\n let pathIndexMap = new Map();\r\n\r\n //1.parse\r\n for (let i = 0; i < this._PathCurve.length; i++)\r\n {\r\n let path = this._PathCurve[i];\r\n const pts = path.GetStretchPoints();\r\n const idxList = indexList.filter(v => v >= ptsLengths && v < (ptsLengths + pts.length)).map((v) => v - ptsLengths);\r\n\r\n ptsLengths += pts.length;\r\n\r\n pathIndexMap.set(path, {\r\n idx: idxList,\r\n count: pts.length,\r\n isMove: pts.length === idxList.length,\r\n });\r\n }\r\n\r\n //2.change vec\r\n for (let i = 0; i < this._PathCurve.length; i++)\r\n {\r\n let path = this._PathCurve[i];\r\n let { idx: idxList, count: ptsCount, isMove } = pathIndexMap.get(path);\r\n\r\n if (idxList.length === 0) continue;\r\n\r\n let isMoveStart = idxList.includes(0);\r\n let isMoveEnd = idxList.includes(ptsCount - 1);\r\n\r\n if (!isMove)//如果不是移动 限制在本OCS内 NO Z\r\n {\r\n vec.applyMatrix4(path.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(path.OCS.setPosition(0, 0, 0));\r\n }\r\n\r\n //我们校验它的前后曲线支不支持它移动这个点\r\n let prePath = this._PathCurve[FixIndex(i - 1, this._PathCurve)];\r\n let nextPath = this._PathCurve[FixIndex(i + 1, this._PathCurve)];\r\n\r\n //如果pre是move 则不需要过滤z\r\n if ((isMove || isMoveStart)//(move line ) or (move start) or(move pl start)\r\n && (i || equalv3(prePath.EndPoint, path.StartPoint, 1e-3))//连接到下一段\r\n && (!pathIndexMap.get(prePath).isMove)//非移动\r\n )\r\n {\r\n //vec限制在上一段的坐标系内 无z\r\n vec.applyMatrix4(prePath.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(prePath.OCS.setPosition(0, 0, 0));\r\n }\r\n if (\r\n isMove || isMoveEnd\r\n && (i < this._PathCurve.length - 2 || equalv3(path.EndPoint, nextPath.StartPoint, 1e-3))//连接到上一段\r\n && (!pathIndexMap.get(nextPath).isMove)//非移动\r\n )\r\n {\r\n //vec限制在下一段的坐标系内 无z\r\n vec.applyMatrix4(nextPath.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(nextPath.OCS.setPosition(0, 0, 0));\r\n }\r\n }\r\n\r\n //3 move\r\n for (let i = 0; i < this._PathCurve.length; i++)\r\n {\r\n let path = this._PathCurve[i];\r\n let { idx: idxList, isMove } = pathIndexMap.get(path);\r\n if (isMove)\r\n path.Move(vec);\r\n else\r\n path.MoveStretchPoints(idxList, vec);\r\n }\r\n }\r\n else\r\n {\r\n this._PathCurve.MoveStretchPoints(indexList, vec);\r\n }\r\n this.Update();\r\n }\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\r\n let ocsInv = this.OCSInv;\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n for (let p of this._PathCurve)\r\n p.ApplyMatrix(this.OCSNoClone).ApplyMatrix(m).ApplyMatrix(ocsInv);\r\n\r\n let group = curveLinkGroup(this._PathCurve);\r\n this._PathCurve = group[0];\r\n }\r\n else\r\n this._PathCurve.ApplyMatrix(this.OCSNoClone).ApplyMatrix(m).ApplyMatrix(ocsInv);\r\n\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\r\n }\r\n\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//ver\r\n this._Contour = file.ReadObject() as Polyline;\r\n if (ver === 1)\r\n {\r\n this._PathCurve = file.ReadObject() as Curve;\r\n if (this._Contour instanceof Spline || this._PathCurve instanceof Spline)\r\n {\r\n this._isErase = true;\r\n Log(\"放样实体是样条线生成的,自动删除它!\", LogType.Info);\r\n }\r\n }\r\n else if (ver > 1)\r\n {\r\n const pathCurveCount = file.Read();\r\n if (pathCurveCount === 1)\r\n this._PathCurve = file.ReadObject() as Curve;\r\n else\r\n {\r\n this._PathCurve = [];\r\n for (let i = 0; i < pathCurveCount; i++)\r\n {\r\n this._PathCurve.push(file.ReadObject());\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.WriteObject(this._Contour);\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n file.Write(this._PathCurve.length);\r\n for (let c of this._PathCurve)\r\n file.WriteObject(c);\r\n }\r\n else\r\n {\r\n file.Write(1);\r\n file.WriteObject(this._PathCurve);\r\n }\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { DefaultToplineMetalsOption } from \"../../Editor/DefaultConfig\";\r\nimport { AsVector3, ZeroVec, equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { ProjectionToPlane } from \"../../Geometry/SweepGeometry\";\r\nimport { Max } 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 { Arc } from \"../Entity/Arc\";\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\r\n /**\r\n *延伸取最大最小轮廓每段首尾到前面线段,取最长线段作为分段长\r\n */\r\n get Segmentations(): Curve[]\r\n {\r\n //轮廓点表\r\n let contourPts = this._Contour.Shape.getPoints(4).map(AsVector3);\r\n for (let p of contourPts)\r\n p.applyMatrix4(this._Contour.OCSNoClone);\r\n\r\n //收集所有的点\r\n let pathCurves: (Line | Arc)[] = [];\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n for (let p of this._PathCurve)\r\n {\r\n if (p instanceof Polyline)\r\n pathCurves.push(...p.Explode() as Line[]);\r\n else\r\n pathCurves.push(p.Clone() as Line);\r\n }\r\n }\r\n else\r\n if (this._PathCurve instanceof Polyline)\r\n pathCurves.push(...this._PathCurve.Explode() as Line[]);\r\n else\r\n pathCurves.push(this._PathCurve.Clone() as Line);\r\n\r\n\r\n let isClosePath = equalv3(pathCurves[0].StartPoint, pathCurves[pathCurves.length - 1].EndPoint, 1e-3);\r\n\r\n\r\n let radiusMap = new Map();\r\n\r\n function ExtendsCurve(path: Curve, pts: Vector3[])\r\n {\r\n let params = pts.map(p => path.GetParamAtPoint2(path.GetClosestPointTo(p, true)));\r\n\r\n let min = Math.min(0, params[Max(params, (p1, p2) => p1 > p2)]);\r\n let max = Math.max(1, params[Max(params, (p1, p2) => p1 < p2)]);\r\n\r\n let sp = path.GetPointAtParam(min);\r\n let ep = path.GetPointAtParam(max);\r\n\r\n path.StartPoint = sp;\r\n path.EndPoint = ep;\r\n }\r\n\r\n //遍历所有的路径节点进行顶点投射\r\n for (let i = 0; i < pathCurves.length; i++)\r\n {\r\n let path = pathCurves[i];\r\n if (isClosePath || i !== pathCurves.length - 1)//与下一段\r\n {\r\n let ep = path.EndPoint;\r\n let nextPath = pathCurves[FixIndex(i + 1, pathCurves)];\r\n let preP: Vector3;\r\n if (path instanceof Line)\r\n preP = ep.clone().sub(path.GetFirstDeriv(1).normalize());\r\n else\r\n {\r\n let pts = path.Shape.getPoints(4);\r\n preP = AsVector3(pts[pts.length - 2]).applyMatrix4(path.OCSNoClone);\r\n }\r\n let nextP: Vector3;\r\n if (nextPath instanceof Line)\r\n nextP = ep.clone().add(nextPath.GetFirstDeriv(0).normalize());\r\n else\r\n {\r\n let pts = nextPath.Shape.getPoints(4);\r\n nextP = AsVector3(pts[1]).applyMatrix4(nextPath.OCSNoClone);\r\n }\r\n\r\n //投射的点表\r\n let pts = ProjectionToPlane(contourPts, path.Normal, ep, preP, nextP);\r\n\r\n // for (let j = 0; j < pts.length - 1; j++)\r\n // TestDraw(new Line(pts[j].clone(), pts[j + 1].clone()).ApplyMatrix(this.OCSNoClone), i + 1);\r\n\r\n //针对圆弧 修改它的半径\r\n if (path instanceof Arc)\r\n {\r\n let mp = path.GetPointAtParam(0.5);\r\n let arcPts = ProjectionToPlane(contourPts, path.Normal, mp, mp.clone().sub(path.GetFirstDeriv(0.5).normalize()));\r\n\r\n let r = radiusMap.get(path);\r\n let ocsInv = path.OCSInv;\r\n let radius = arcPts.map(p => p.applyMatrix4(ocsInv).setZ(0).distanceTo(ZeroVec));\r\n if (r) radius.push(r);\r\n let maxRadius = radius[Max(radius, (r1, r2) => r1 < r2)];\r\n radiusMap.set(path, maxRadius);\r\n }\r\n\r\n\r\n ExtendsCurve(path, pts);\r\n ExtendsCurve(nextPath, pts);\r\n }\r\n }\r\n\r\n for (let [arc, rad] of radiusMap)\r\n arc.Radius = rad;\r\n\r\n return pathCurves;\r\n }\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 this.WriteAllObjectRecord();\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\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\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 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 { Log, LogType } from \"../../Common/Log\";\r\nimport { Intent, Toaster, ToasterShowEntityMsg } from \"../../Common/Toaster\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { ParseExpr, safeEval } from \"../../Common/eval\";\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 { Entity } from \"../../DatabaseServices/Entity/Entity\";\r\nimport { GroupRecord } from \"../../DatabaseServices/GroupTableRecord\";\r\nimport { HardwareCompositeEntity } from \"../../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { HardwareTopline } from \"../../DatabaseServices/Hardware/HardwareTopline\";\r\nimport { ProcessingGroupRecord } from '../../DatabaseServices/ProcessingGroup/ProcessingGroupRecord';\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { GetSealedBoardContour } from \"../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { IHardwareType, Production } from \"../../Production/Product\";\r\nimport { ISealingData } from \"../../UI/Store/OptionInterface/IHighSealedItem\";\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\r\n GetCount(brs: (Board | IHardwareType)[], options: GetCountOption = null, IsBbsCountChaidan?: boolean)\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, IsBbsCountChaidan);\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 const chaiDan = IsBbsCountChaidan ? bs : bs.filter(b => b.IsChaiDan);\r\n areaCount.push({\r\n entity: bs[0],\r\n count: chaiDan.length,\r\n count2: this.GetBoardsArea(chaiDan)\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, IsBbsCountChaidan?: boolean)\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 let tags = this.ParseProcessingGroupTags(h);\r\n // :230行 代码对关联复合实体又进行一遍分析 需同步修改\r\n addDrillToMap(`${name},${unit},${factory},${this.ParseSpec(h, spec)},${this.ParseSpec(h, model)},${brand},${tags.join(\",\")}`, h);\r\n }\r\n\r\n this.UpdateBoardMap(brsProps);\r\n\r\n //统计 排钻 封边 关联的五金(排钻?)\r\n for (let br of brsProps)\r\n {\r\n if (!IsBbsCountChaidan && !br.IsChaiDan)//非拆单板我们不统计\r\n continue;\r\n\r\n //排钻 层板钉\r\n let dlist = br.DrillList;\r\n if (equaln(br.ContourCurve.Area, 0))\r\n {\r\n ToasterShowEntityMsg({\r\n msg: `${br.BoardProcessOption.roomName} ${br.BoardProcessOption.cabinetName} ${br.Name}轮廓有有问题,请检查`,\r\n timeout: 5000,\r\n intent: Intent.DANGER,\r\n ent: br\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, br))\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: `柜名:${br.BoardProcessOption.cabinetName} 房间名:${br.BoardProcessOption.roomName} 板名:${br.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, timeout: 5000, intent: Intent.DANGER });\r\n Log(`柜名:${br.BoardProcessOption.cabinetName} 房间名:${br.BoardProcessOption.roomName} 板名:${br.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, LogType.Error, [br, gd]);\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 (br.LayerNails.length > 0)\r\n for (let objId of br.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 br.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 let tags = this.ParseProcessingGroupTags(metal);\r\n // :113行 代码对关联复合实体又进行一遍分析 需同步修改\r\n addDrillToMap(`${name},${unit},${factory},${this.ParseSpec(metal, spec)},${this.ParseSpec(metal, model)},${brand},${tags.join(\",\")}`, metal);\r\n }\r\n }\r\n\r\n //封边\r\n let sealdData = GetSealedBoardContour(br);\r\n if (!sealdData)\r\n {\r\n ToasterShowEntityMsg({\r\n intent: Intent.DANGER,\r\n msg: \"板件扣封边失败,请检查板件轮廓!\",\r\n timeout: 10000,\r\n ent: br\r\n });\r\n throw \"错误:板扣除封边失败!\";\r\n }\r\n\r\n let sealData: ISealingData[] = Production.ParseSealData(sealdData);\r\n let color = br.BoardProcessOption[EBoardKeyList.Color];\r\n\r\n //封边留头量\r\n let sealReserve = HostApplicationServices.sealReserve * 2;\r\n\r\n let thickness = this.GetBoardThickness(br);\r\n\r\n for (let data of sealData)\r\n {\r\n if (equaln(0, data.size)) continue;\r\n data.length += sealReserve;\r\n\r\n let k = `${data.size}-${FixedNotZero(thickness, 2)}-${color}`;\r\n if (options && options.sealGruopKey)\r\n {\r\n options.sealGruopKey(k, br, 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 const accuracy = HostApplicationServices.chaidanOption.hardwareExpressionFormattingAccuracy;\r\n return ParseExpr(spec, accuracy, { 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 const accuracy = HostApplicationServices.chaidanOption.hardwareExpressionFormattingAccuracy;\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, accuracy) });\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), accuracy));\r\n hardwareCount.push({ name, count, entity: v[0], count2, length: count2 });\r\n }\r\n }\r\n }\r\n }\r\n\r\n ParseProcessingGroupTags = (entity: Entity) =>\r\n {\r\n return [...entity.ProcessingGroupList].map((g) =>\r\n {\r\n let obj = g?.Object;\r\n if (obj)\r\n return (obj as ProcessingGroupRecord).Name;\r\n });\r\n };\r\n private UpdateBoardMap(brs: Board[])\r\n {\r\n this.boardMap.clear();\r\n for (let b of brs)\r\n {\r\n let thickness = this.GetBoardThickness(b);\r\n let brMat = b.BoardProcessOption[EBoardKeyList.BrMat];\r\n let mat = b.BoardProcessOption[EBoardKeyList.Mat];\r\n let color = b.BoardProcessOption[EBoardKeyList.Color];\r\n let key = `${thickness}-${brMat}-${mat}-${color}`;\r\n let list = this.boardMap.get(key);\r\n if (!list)\r\n {\r\n list = [];\r\n this.boardMap.set(key, list);\r\n }\r\n list.push(b);\r\n }\r\n }\r\n GetBoardThickness(br: Board)\r\n {\r\n let size = Production.GetSpiteSize(br);\r\n if (size)\r\n return FixedNotZero(size.spliteThickness, 2);\r\n else\r\n return FixedNotZero(br.Thickness, 2);\r\n }\r\n GetBoardsArea(brs: Board[])\r\n {\r\n return brs.reduce((area, b) =>\r\n {\r\n let size = Production.GetSpiteSize(b);\r\n let ar: number;\r\n if (size)\r\n ar = size.spliteHeight * size.spliteWidth / 1e6;\r\n else\r\n ar = b.Width * b.Height / 1e6;\r\n ar = parseFloat(ar.toFixed(3));\r\n return area + ar;\r\n }, 0).toFixed(2);\r\n }\r\n}\r\n\r\nexport const lookOverBoardInfosTool = new LookOverBoardInfosTool();\r\n","import { 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 { 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","export const _CSGDEBUG = false;\r\n\r\n/** Epsilon used during determination of near zero distances.\r\n * @default\r\n */\r\nexport const EPS = 5e-2;\r\n\r\n// Tag factory: we can request a unique tag through CSG.getTag()\r\nexport let staticTag = 1;\r\nexport const getTag = () => staticTag++;\r\n","\r\n// //////////////////////////////\r\n// ## class fuzzyFactory\r\n// This class acts as a factory for objects. We can search for an object with approximately\r\n// the desired properties (say a rectangle with width 2 and height 1)\r\n// The lookupOrCreate() method looks for an existing object (for example it may find an existing rectangle\r\n// with width 2.0001 and height 0.999. If no object is found, the user supplied callback is\r\n// called, which should generate a new object. The new object is inserted into the database\r\n// so it can be found by future lookupOrCreate() calls.\r\n// Constructor:\r\n// numdimensions: the number of parameters for each object\r\n// for example for a 2D rectangle this would be 2\r\n\r\nimport { EPS } from \"./constants\";\r\n\r\n// tolerance: The maximum difference for each parameter allowed to be considered a match\r\nexport class FuzzyFactory\r\n{\r\n lookuptable: {};\r\n multiplier: number;\r\n constructor(numdimensions: number = 3, tolerance: number = EPS)\r\n {\r\n this.lookuptable = {};\r\n this.multiplier = 1.0 / tolerance;\r\n }\r\n\r\n // let obj = f.lookupOrCreate([el1, el2, el3], function(elements) {/* create the new object */});\r\n // Performs a fuzzy lookup of the object with the specified elements.\r\n // If found, returns the existing object\r\n // If not found, calls the supplied callback function which should create a new object with\r\n // the specified properties. This object is inserted in the lookup database.\r\n lookupOrCreate(els: number[], object: T): T\r\n {\r\n let hash = \"\";\r\n let multiplier = this.multiplier;\r\n for (let el of els)\r\n {\r\n let valueQuantized = Math.round(el * multiplier);\r\n hash += valueQuantized + \"/\";\r\n }\r\n if (hash in this.lookuptable) return this.lookuptable[hash];\r\n else\r\n {\r\n let hashparts = els.map(el =>\r\n {\r\n let q0 = Math.floor(el * multiplier);\r\n let q1 = q0 + 1;\r\n return [\"\" + q0 + \"/\", \"\" + q1 + \"/\"];\r\n });\r\n let numelements = els.length;\r\n let numhashes = 1 << numelements;\r\n for (let hashmask = 0; hashmask < numhashes; ++hashmask)\r\n {\r\n let hashmaskShifted = hashmask;\r\n hash = \"\";\r\n hashparts.forEach(hashpart =>\r\n {\r\n hash += hashpart[hashmaskShifted & 1];\r\n hashmaskShifted >>= 1;\r\n });\r\n this.lookuptable[hash] = object;\r\n }\r\n return object;\r\n }\r\n }\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, BufferGeometry, Float32BufferAttribute, MathUtils, Matrix4, ShapeUtils, Shape as TShape, Vector3 } from \"three\";\r\nimport { arrayPushArray, arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { ComputerCurvesNormalOCS, curveLinkGroup } from \"../../Common/CurveUtils\";\r\nimport { Status } from '../../Common/Status';\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { Contour, fastCurveInCurve2 } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { LinesType } from \"../../DatabaseServices/Entity/BoardInterface\";\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 { FuzzyFactory } from '../../csg/core/FuzzyFactory';\r\nimport { IntersectsBox } from \"../Box\";\r\nimport { CreateContour2 } from \"../CreateContour2\";\r\nimport { FastOffset } from \"../FastOffset\";\r\nimport { AsVector2, IdentityMtx4, equaln, equalv2, equalv3 } 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\r\n //对于未被面域分析出来的线,我们进行join操作\r\n let unusedLines: Line[] = [];\r\n for (let l of lines)\r\n if (!parse.GetCueveUsed(l))\r\n unusedLines.push(l);\r\n if (unusedLines.length > 2)\r\n {\r\n let groups = curveLinkGroup(unusedLines, 1);\r\n for (let g of groups)\r\n {\r\n if (g.length < 2) continue;\r\n let pl = new Polyline();\r\n pl.ColorIndex = g[0].ColorIndex;\r\n pl.OCS = ComputerCurvesNormalOCS(g);\r\n for (let cu of g)\r\n {\r\n if (pl.Join(cu, false, 0.1) === Status.True)\r\n cu.Erase();\r\n }\r\n\r\n pl.CloseMark = true;\r\n let c = Contour.CreateContour(pl, false) ?? CreateContour2(pl.Explode(), 0.1);;\r\n if (c && c.Area > 0.1)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"错误:构建板件的MeshGeometry的盖子生成轮廓失败了!\");\r\n }\r\n }\r\n\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) ?? CreateContour2(cs, 0.1);\r\n if (c)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"错误:构建板件的MeshGeometry的盖子生成轮廓失败了!\");\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\r\n //备份原始的槽,下面的代码为了合并槽,会将板的槽先清空,后续我们在还原它 (未来我们可能不强制合并板的槽 而是在这里合并? 保证板的槽的纯粹?例如矩形)\r\n let bakGrooves: ExtrudeSolid[];\r\n {\r\n //合并深度相同 但是半径不相同的槽\r\n\r\n let thicknessKnifsMap = new Map>();//深度->刀半径Set\r\n let thicknessGroovesMap = new Map();//深度->刀半径Set\r\n\r\n let fuzz = new FuzzyFactory(2, 1e-2);\r\n for (let g of br.Grooves)//准备数据 map\r\n {\r\n let thick = fuzz.lookupOrCreate([g.Thickness], g.Thickness);\r\n let knifsSet = thicknessKnifsMap.get(thick);\r\n let grooveArr = thicknessGroovesMap.get(thick);\r\n if (!knifsSet)\r\n {\r\n knifsSet = new Set();\r\n grooveArr = [];\r\n thicknessKnifsMap.set(thick, knifsSet);\r\n thicknessGroovesMap.set(thick, grooveArr);\r\n }\r\n grooveArr.push(g);\r\n knifsSet.add(g.KnifeRadius);\r\n }\r\n\r\n let mergeGrooves: ExtrudeSolid[] = [];\r\n for (let [thick, set] of thicknessKnifsMap)\r\n {\r\n if (set.size > 1)//如果深度相同的大于1\r\n {\r\n if (!bakGrooves)\r\n bakGrooves = br.Grooves.concat();//复制一个\r\n\r\n let arr = thicknessGroovesMap.get(thick).map(g =>\r\n {\r\n let newg = g.Clone();\r\n newg.KnifeRadius = 0;\r\n return newg;\r\n });\r\n br.Grooves.length = 0;\r\n br.Grooves.push(...arr);\r\n br.GrooveCheckMerge(false);\r\n\r\n mergeGrooves.push(...br.Grooves);\r\n }\r\n else\r\n {\r\n mergeGrooves.push(...thicknessGroovesMap.get(thick));\r\n }\r\n }\r\n\r\n if (bakGrooves)\r\n {\r\n br.Grooves.length = 0;\r\n br.Grooves.push(...mergeGrooves);\r\n }\r\n }\r\n\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 if (bakGrooves)\r\n {\r\n br.Grooves.length = 0;\r\n br.Grooves.push(...bakGrooves);\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, 1e-4);\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\nexport function 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\r\n if (!pos || !uvs || pos.count === 0) return;\r\n\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\r\n uvs.needsUpdate = true;\r\n }\r\n}\r\n","\r\nimport Flatbush from 'flatbush';\r\nimport { Box3, BoxGeometry, BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, Float32BufferAttribute, FrontSide, Frustum, Geometry, Group, InstancedInterleavedBuffer, InterleavedBufferAttribute, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Line as TLine, UVGenerator, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayClone, arrayLast, arrayRemoveIf, arraySortByNumber, arraySum } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { equalCurve } from \"../../Common/CurveUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { InteractionLog, Log, LogType } from \"../../Common/Log\";\r\nimport { MakeMirrorMtx, TransformVector, Vector2ApplyMatrix4, reviseMirrorMatrix, tempMatrix1 } from \"../../Common/Matrix4Utils\";\r\nimport { Status, UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { boardUVGenerator } from \"../../Geometry/BoardUVGenerator\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { FastExtrudeEdgeGeometry, FastExtrudeEdgeGeometryOfShape, FastWireframe } from \"../../Geometry/CreateWireframe\";\r\nimport { EdgesGeometry } from \"../../Geometry/EdgeGeometry\";\r\nimport { ExtrudeGeometryBuilder } from \"../../Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2\";\r\nimport { AsVector2, IdentityMtx4, MoveMatrix, XAxis, YAxis, ZAxis, ZeroVec, equaln, equalv2, equalv3, isIntersect, isParallelTo, isPerpendicularityTo } 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 protected bevelEnabled = false;\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 */\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\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 this.__UpdateVersion__++;\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 let normal = this.Normal.negate();\r\n\r\n for (let g of this.grooves)\r\n {\r\n g._SpaceOCS.copy(this._SpaceOCS);//因为在镜像(Extrude.ApplyMirrorMatrix)的时候 没有设置这个会导致错误(参考该函数的代码,似乎是为了实现柜子镜像) 所以拷贝一下\r\n g.objectId = new ObjectId;\r\n g.ApplyMatrix(m);\r\n\r\n //如果是镜像,如果槽的方向相反了,那么需要修正\r\n let gNormal = g.Normal;\r\n if (equalv3(normal, gNormal, 1e-3))\r\n {\r\n let p = g.Position.add(gNormal.multiplyScalar(g.thickness * 0.5));\r\n g.ApplyMatrix(MakeMirrorMtx(normal, p));\r\n }\r\n\r\n g.objectId = undefined;\r\n }\r\n\r\n \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\r\n //实现了这个函数后 实现了柜子的镜像\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n const curve = this.ContourCurve;\r\n if (curve instanceof Polyline && !equalv3(curve.Position, ZeroVec))//移除多段线的OCS(目前只判断了基点)\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 Vector2ApplyMatrix4(ocs, p.pt);\r\n curve.OCS = IdentityMtx4;\r\n }\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 curve.ApplyMatrix(new Matrix4().makeRotationX(Math.PI));\r\n else\r\n reviseMirrorMatrix(curve.OCSNoClone, 1);\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 curve.ApplyMatrix(new Matrix4().makeRotationY(Math.PI));\r\n else\r\n reviseMirrorMatrix(curve.OCSNoClone, 0);\r\n\r\n this.SetContourCurve(curve);\r\n }\r\n\r\n if (this.grooves.length)\r\n this.Update(UpdateDraw.Geometry);\r\n\r\n return this;\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-4))//避免18.0009 无法改成 18\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 //修复#I7CBHO的过程中 直接修改了这个属性\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 */\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!`, LogType.Warning);\r\n this.isRect = equaln(this.width * this.height, this.ContourCurve.Area, 0.1);\r\n\r\n // if (area2 < 0)\r\n // this.contourCurve.Reverse();//矩形板的封边与排钻不需要考虑 异形板的排钻封边可能会错误(无所谓了)\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\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() { return this.GetShape(false); }\r\n\r\n private GetShape(filterSmallGroove = false)\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) && (!filterSmallGroove || g.ContourCurve.Area > 900))\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 \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 override GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3,\r\n frustum?: Frustum,\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 {\r\n if (!frustum || frustum.intersectsBox(g.BoundingBox))\r\n pts.push(...g.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum));\r\n }\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.GetFirstDeriv(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\r\n /**\r\n * (步骤2)\r\n * 更新凹槽位置和厚度(校验凹槽的Z轴位置是否存在交集)\r\n */\r\n GrooveCheckPosition(target: ExtrudeSolid): Status\r\n {\r\n if (target.Width < 1e-1 || target.Height < 1e-1 || target.Thickness < 1e-1)\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-2) && 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-2))\r\n target.thickness = this.thickness;\r\n\r\n return target.thickness > 1e-2 ? Status.True : Status.False;\r\n }\r\n\r\n /**\r\n * (步骤3)\r\n * 计算凹槽合并\r\n */\r\n GrooveCheckMerge(checkGrooveContourCurve = true)\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 (checkGrooveContourCurve && 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 groove 凹槽(不拷贝,直接被修改)\r\n * @returns this[] 凹槽在本实体中正确的约束状态.(可能分裂成为多个)\r\n */\r\n private GrooveCheckContour(groove: ExtrudeSolid): ExtrudeSolid[]\r\n {\r\n let matrixToTarget = groove.OCSInv.multiply(this.OCS);\r\n matrixToTarget.elements[14] = 0;//z->0\r\n\r\n //理论上只有大洞才需要优化,小洞无所谓了\r\n let thisShape = this.GetShape(true).ApplyMatrix(matrixToTarget);\r\n let targetShape = new Shape(Contour.CreateContour([groove.ContourCurve.Clone()], false));\r\n\r\n let inters = thisShape.IntersectionBoolOperation(targetShape);\r\n\r\n if (inters.length === 1)\r\n {\r\n groove.ContourCurve = inters[0].Outline.Curve;\r\n let grooves = [groove];\r\n groove.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 = groove.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 allDepthGrooves: 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 allDepthGrooves.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 === allDepthGrooves.length)\r\n {\r\n //在拉伸夹点后,全深槽如果不改原始的板的信息,那么它无法在递归检查,这个时候如果不校验,那么它将不会在被校验\r\n for (let g of allDepthGrooves)\r\n g.CheckContourCurve();\r\n\r\n this.grooves.push(...allDepthGrooves);\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\r\n //#endregion 保持旧的槽数据 (必须在这里写代码 因为下面会修改hole.Curve)\r\n let p = hole.Curve.StartPoint;\r\n let oldGrooveIndex = subtractShape.ShapeList.findIndex(s => s.Outline.Curve.PtOnCurve(p));\r\n let oldGroove = allDepthGrooves[Math.max(oldGrooveIndex, 0)];\r\n\r\n groove.knifeRadius = oldGroove.knifeRadius;\r\n groove.groovesAddWidth = oldGroove.groovesAddWidth;\r\n groove.groovesAddDepth = oldGroove.groovesAddDepth;\r\n groove.groovesAddLength = oldGroove.groovesAddLength;\r\n //#endregion\r\n\r\n groove.OCS = this.OCSNoClone;\r\n groove.ContourCurve = hole.Curve;\r\n groove.thickness = this.thickness;\r\n\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\r\n //#endregion 保持旧的槽数据 (必须在这里写代码 因为下面会修改hole.Curve)\r\n let p = hole.Curve.StartPoint;\r\n let oldGrooveIndex = subtractShape.ShapeList.findIndex(s => s.Outline.Curve.PtOnCurve(p));\r\n let oldGroove = allDepthGrooves[Math.max(oldGrooveIndex, 0)];\r\n\r\n groove.knifeRadius = oldGroove.knifeRadius;\r\n groove.groovesAddWidth = oldGroove.groovesAddWidth;\r\n groove.groovesAddDepth = oldGroove.groovesAddDepth;\r\n groove.groovesAddLength = oldGroove.groovesAddLength;\r\n //#endregion\r\n\r\n groove.OCS = this.OCSNoClone;\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 this.IsLazyGrooveCheck = false;\r\n if (this.IsNeedGrooveCheck)\r\n this.GrooveCheckAllAutoSplit();\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, this.Freeze));\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, FrontSide, true, this.Freeze)),\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 //在同步反应器中,当存在关联拉槽的实体和本实体一起被删除后,会更新本实体,然后导致同步认为它没有子实体\r\n if (this._isErase) return false;\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 //因为这里更新了mesh geom 所以我们必须更新它.\r\n this._MeshGeometry = this.UpdateMeshGeom(this._MeshGeometry);\r\n this._MeshGeometry[\"IsMesh\"] = true;\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 InteractionLog([{ msg: `${this.Name}(${id.Index})`, entity: [this] }, { msg: \"关联槽已逃离!\" }], LogType.Warning);\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 InteractionLog([{ msg: `${this.Name}(${this.Id.Index})`, entity: [this] }, { msg: \"关联槽已逃离或者被清除!\" }], LogType.Warning);\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 this._EdgeGeometry = undefined;//清理掉(以便在被csg切割后得到edgegeom)\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 < MaxDrawGrooveCount)\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 UVGenerator: this.UCGenerator,\r\n depth: this.bevelEnabled ? this.thickness - 4 : this.thickness,\r\n bevelEnabled: this.bevelEnabled,\r\n bevelThickness: 2,\r\n bevelSize: 2,\r\n bevelOffset: -2,\r\n bevelSegments: 1,\r\n };\r\n let geo = new ExtrudeGeometry(shape.Shape, extrudeSettings);\r\n geo.applyMatrix4(contour.OCSNoClone);\r\n\r\n if (this.bevelEnabled)\r\n geo.translate(0, 0, 2);\r\n\r\n this.UpdateUV(geo, contour.OCSNoClone);\r\n\r\n //板在某些时候需要布尔运算(二维刀路)\r\n this._MeshGeometry = this.UpdateMeshGeom(geo);\r\n this._MeshGeometry[\"IsMesh\"] = true;\r\n\r\n this.GenWorldUV(this._MeshGeometry);\r\n\r\n //edge geometry\r\n if (grooves.length < MaxDrawGrooveCount && !this._EdgeGeometry)//这个代码保证线框和概念对齐\r\n {\r\n let coords = FastExtrudeEdgeGeometryOfShape(shape.Shape, 0, this.thickness, 12, true);\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n edgeGeo.applyMatrix4(contour.OCSNoClone);\r\n this._EdgeGeometry = edgeGeo;\r\n }\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n let builder = new ExtrudeGeometryBuilder(this);\r\n\r\n this._MeshGeometry = builder.MeshGeometry;\r\n this._MeshGeometry = this.UpdateMeshGeom(this._MeshGeometry);\r\n if (grooves.length < MaxDrawGrooveCount && !this._EdgeGeometry)\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 //子类重载,用于二次计算几何体(例如二维刀路布尔运算)\r\n UpdateMeshGeom(geo: BufferGeometry | Geometry): BufferGeometry\r\n {\r\n return geo as BufferGeometry;\r\n }\r\n\r\n protected get Has2DPath() { return false; }\r\n\r\n protected _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.Has2DPath && (this.grooves.length === 0 || this.grooves.every(g => equaln(g.thickness, this.thickness))))\r\n )\r\n {\r\n let coords = FastExtrudeEdgeGeometry(this, this.ColorIndex, 12, 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 \r\n\r\n ClearDraw(): this\r\n {\r\n this.UpdateDrawGeometry();\r\n return super.ClearDraw();\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, this.Freeze);\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, FrontSide, true, this.Freeze)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())\r\n );\r\n }\r\n else if (renderType === RenderType.ModelGroove)\r\n {\r\n obj.add(\r\n // new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(9, FrontSide, true, this.Freeze)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())\r\n );\r\n obj.add(this.GetModelGroove());\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, this.Freeze);\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, FrontSide, true, this.Freeze);\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 private GetModelGroove()\r\n {\r\n const grooves: ExtrudeSolid[] = [];\r\n for (const sp of this.__CacheSplitExtrudes ?? [])\r\n {\r\n grooves.push(...sp.grooves);\r\n }\r\n const group = new Group();\r\n for (const groove of grooves)\r\n {\r\n const grooveClone = groove.Clone();\r\n grooveClone.UpdateDrawGeometry();\r\n const mtx = new Matrix4().premultiply(grooveClone.OCSNoClone).premultiply(this.OCSInv);\r\n\r\n const edgeGeo = grooveClone.EdgeGeometry;\r\n edgeGeo.applyMatrix4(mtx);\r\n const line = new LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(1, this.Freeze));\r\n\r\n const meshGeo = grooveClone.MeshGeometry;\r\n meshGeo.applyMatrix4(mtx);\r\n const mesh = new Mesh(meshGeo, ColorMaterial.GetConceptualMaterial(1, FrontSide, true, this.Freeze, 0.6));\r\n group.add(mesh, line);\r\n }\r\n return group;\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 { 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 if (renderType === RenderType.ModelGroove) return;\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 { Matrix4 } from \"three\";\r\nimport { 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 /**\r\n * 备注\r\n */\r\n @AutoRecord DataList: [string, string][] = [];\r\n @AutoRecord RelevanceBoards: ObjectId[] = [];\r\n @AutoRecord RelevanceHardware: ObjectId[] = []; //当这个实体为复合板时,关联五金的信息\r\n @AutoRecord RelevanceHandle: 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 ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n super.ApplyMirrorMatrix(m);\r\n\r\n //\"左\",\"右\"互换\r\n if (this.HardwareOption.model.includes(\"左\"))\r\n this.HardwareOption.model = this.HardwareOption.model.replace(\"左\", \"右\");\r\n else if (this.HardwareOption.model.includes(\"右\"))\r\n this.HardwareOption.model = this.HardwareOption.model.replace(\"右\", \"左\");\r\n\r\n return this;\r\n }\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 if (v > 4)\r\n {\r\n let count = file.Read();\r\n this.RelevanceHandle.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.RelevanceHandle.push(objId);\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(5);\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 file.Write(this.RelevanceHandle.length);\r\n for (let id of this.RelevanceHandle)\r\n file.WriteSoftObjectId(id);\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { DrillType } from \"../../Add-on/DrawDrilling/DrillType\";\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 { ZAxis, equaln, equalv3 } 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.GetFirstDeriv(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","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\nconst x = new Vector3;\r\nconst y = new Vector3;\r\n\r\nlet tempPolyline: Polyline;\r\n\r\n\r\n/**\r\n * 转换成多段线点表(pts bul)\r\n * @param cu\r\n * @param [isOutline=true] 如果是外部轮廓,则返回逆时针点表\r\n * @returns pts buls\r\n */\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 ptsBuls = cu.PtsBuls;\r\n\r\n let ocs = cu.OCSNoClone;\r\n //判断是不是被镜像了\r\n x.setFromMatrixColumn(ocs, 0);\r\n y.setFromMatrixColumn(ocs, 1);\r\n let z1 = x.cross(y);\r\n let isMirror = !equaln(z1.z, 1, 1e-3);\r\n\r\n for (let i = 0; i < ptsBuls.pts.length; i++)\r\n {\r\n Vector2ApplyMatrix4(ocs, ptsBuls.pts[i]);\r\n if (isMirror)\r\n ptsBuls.buls[i] *= -1;\r\n }\r\n\r\n if (isOutline && cu.IsClose)\r\n {\r\n tempPolyline = tempPolyline || new Polyline;\r\n tempPolyline.LineData.length = 0;\r\n for (let i = 0; i < ptsBuls.pts.length; i++)\r\n tempPolyline.LineData.push({ pt: ptsBuls.pts[i], bul: ptsBuls.buls[i] });\r\n\r\n if (cu.Area2 < 0)\r\n {\r\n tempPolyline.Reverse();\r\n ptsBuls = tempPolyline.PtsBuls;\r\n }\r\n tempPolyline.LineData.length = 0;\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 { FaceDirection } from \"../Add-on/DrawDrilling/DrillType\";\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 { InteractionLog, LogType } from \"../Common/Log\";\r\nimport { Intent, Toaster, ToasterShowEntityMsg } from \"../Common/Toaster\";\r\nimport { FixedNotZero } from \"../Common/Utils\";\r\nimport { ParseExpr, safeEval } from \"../Common/eval\";\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 { BoardOpenDir } from \"../DatabaseServices/Entity/BoardInterface\";\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 { GroupRecord } from \"../DatabaseServices/GroupTableRecord\";\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 { IsBetweenA2B, MoveMatrix, XAxis, angleTo, equaln, equalv2, equalv3, isIntersect2, isParallelTo, isPerpendicularityTo } from \"../Geometry/GeUtils\";\r\nimport { BrSealedData, GetSealedBoardContour } from \"../GraphicsSystem/CalcEdgeSealing\";\r\nimport { FeedingToolPath, GetModelingFromCustomDrill } from \"../GraphicsSystem/ToolPath/FeedingToolPath\";\r\nimport { EMetalsType, IHardwareOption, IToplineOption } from \"../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { IHighEdgeRemarkItem, ISealingData } from \"../UI/Store/OptionInterface/IHighSealedItem\";\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 name: string;\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 boardEdgeRemark: IHighEdgeRemarkItem[]; //板边备注信息\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, redundancyKnif = 0): ISpliteOrderData | undefined\r\n {\r\n let sealedData = GetSealedBoardContour(br);\r\n if (!sealedData)\r\n {\r\n ToasterShowEntityMsg({\r\n msg: br.Name + \" 轮廓错误,可能存在轮廓自交,请检查后重新拆单!(错误的板已经选中,您可以按住鼠标中键查看该板!)(使用FISC命令可以修复自交轮廓!)\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n ent: br.__OriginalEnt__ ?? br\r\n });\r\n return undefined;\r\n }\r\n let { brContour: orgContour, sealedContour: sealedOutline } = sealedData;\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, redundancyKnif);\r\n\r\n let boardContour: IContourData;\r\n if (GetSpiteSize(br))\r\n boardContour = ConverToPtsBul(br.ContourCurve);//不分裂圆弧转点表\r\n\r\n //每段封边信息\r\n let perSealData = ParseSealData(sealedData);\r\n\r\n let perBoardEdgeRemarkData = br.IsSpecialShape ? ParseBoardEdgeRemarkData(sealedData, br.BoardProcessOption.highBoardEdgeRemark) : [];\r\n //因为传递给拆单软件的数据是逆时针,所以我们翻转它\r\n if (orgContour.Area2 < 0) perSealData.reverse();\r\n\r\n return {\r\n info: GetBoardInfo(br, size),\r\n originOutlin: originOutlinePtsBul,//拼错了 未扣封边的点表\r\n outline: sealedOutlinePtsBul, //扣完封边的点表\r\n sealing: perSealData,//每段曲线的封边信息\r\n boardEdgeRemark: perBoardEdgeRemarkData, //每段曲线的板边备注信息\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\r\n\r\n //生产那边需要一一对应的数据\r\n export function ParseSealData(sealData: BrSealedData): ISealingData[]\r\n {\r\n let seals: ISealingData[] = [];\r\n for (let i = 0; i < sealData.brCurves.length; i++)\r\n {\r\n let curve = sealData.brCurves[i];\r\n let sealD = sealData.highSeals[i];\r\n\r\n if (curve instanceof Circle)\r\n {\r\n let seal2: ISealingData = {\r\n length: curve.Length * 0.5,\r\n ...sealD\r\n };\r\n\r\n seals.push(seal2);\r\n seals.push({ ...seal2 });\r\n return seals;\r\n }\r\n else\r\n {\r\n if (curve instanceof Polyline)//多段线炸开\r\n {\r\n for (let subC of curve.Explode())\r\n {\r\n let seal2: ISealingData = {\r\n length: subC.Length,\r\n ...sealD\r\n };\r\n seals.push(seal2);\r\n }\r\n }\r\n else//直线 圆弧直接加\r\n {\r\n let seal2: ISealingData = {\r\n length: curve.Length,\r\n ...sealD\r\n };\r\n seals.push(seal2);\r\n }\r\n }\r\n }\r\n return seals;\r\n }\r\n\r\n export function ParseBoardEdgeRemarkData(sealData: BrSealedData, highBoardEdgeRemark: IHighEdgeRemarkItem[]): IHighEdgeRemarkItem[]\r\n {\r\n let remarks: IHighEdgeRemarkItem[] = [];\r\n for (let i = 0; i < sealData.brCurves.length; i++)\r\n {\r\n let curve = sealData.brCurves[i];\r\n let remarkData = highBoardEdgeRemark[i];\r\n\r\n if (curve instanceof Circle)\r\n {\r\n remarks.push(remarkData);\r\n remarks.push({ ...remarkData });\r\n return remarks;\r\n }\r\n else\r\n {\r\n if (curve instanceof Polyline)//多段线炸开\r\n {\r\n for (let subC of curve.Explode())\r\n {\r\n remarks.push(remarkData);\r\n }\r\n }\r\n else//直线 圆弧直接加\r\n {\r\n remarks.push(remarkData);\r\n }\r\n }\r\n }\r\n return remarks;\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 (m.shape.Holes.length === 0 && 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, false),\r\n holes: m.shape.Holes.map(h => ConverToPtsBul(h.Curve, 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\r\n /**\r\n * 计算板的造型走刀数据(包括自定义排钻的走刀 侧面走刀)\r\n * @param br\r\n * @param offsetTanslation\r\n */\r\n export function GetBoardModelingData(br: Board, offsetTanslation: Vector3, redundancyKnif = 0)\r\n {\r\n const tool = FeedingToolPath.GetInstance();\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 (m.shape.Holes.length === 0 && 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, redundancyKnif);//走刀路径\r\n if (!isSide)\r\n paths.forEach(path => path.ApplyMatrix(tMtx));\r\n\r\n //走刀的ptsbuls\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, false),\r\n holes: m.shape.Holes.map(h => ConverToPtsBul(h.Curve, 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 export function GetSpiteSize(br: Board)\r\n {\r\n let [spHeight, spWidth, spThickness] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness];\r\n const isEffect = HostApplicationServices.chaidanOption.partialSplitValueCanTakesEffect;\r\n const param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n\r\n if (isEffect ? (spHeight || spWidth || spThickness) : (spHeight && spWidth && spThickness))\r\n {\r\n spHeight = spHeight || br.Height.toString();\r\n spWidth = spWidth || br.Width.toString();\r\n spThickness = spThickness || br.Thickness.toString();\r\n\r\n const spliteHeight = safeEval(spHeight, param, \"L\");\r\n const spliteWidth = safeEval(spWidth, param, \"W\");\r\n const spliteThickness = safeEval(spThickness, param, \"H\");\r\n\r\n if (spliteHeight && spliteWidth && spliteThickness)\r\n {\r\n return {\r\n spliteHeight,\r\n spliteWidth,\r\n spliteThickness\r\n };\r\n }\r\n }\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 if (size)\r\n return new Polyline().Rectangle(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, 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 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 if (\r\n Math.max(z0, 0) < Math.min(z1, br.Thickness) - 1e-6\r\n && br.ContourCurve.PtInCurve(sp.setZ(0))\r\n //层板钉中心点不在造型槽内\r\n && modelings.every(m =>\r\n {\r\n if (m.dir !== face && (depth + m.thickness) < br.Thickness)//不相交\r\n return true;\r\n\r\n // if (m.shape.Holes.some(h => h.Curve.PtInCurve(sp))) return true; //层板钉在孤岛内 现实中应该不会有\r\n return !m.shape.Outline.Curve.PtInCurve(sp);\r\n })\r\n )\r\n {\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 name: '层板钉'\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 (m.shape.Holes.length === 0 && 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.Ljg,//设置为偏心轮导致我们分析大孔面方向和板的大孔面一致时错误,所以改成连接杆\r\n position: center,\r\n radius: cu.Radius,\r\n depth: m.thickness,\r\n face: m.dir as number,\r\n name: GetGroupName(cu)\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(cyHole: CylinderHole, br: Board, offsetTanslation: Vector3, data: IBoardHoleInfo, outline: ExtrudeContourCurve)\r\n {\r\n let brInv = br.OCSInv;\r\n let brNormal = br.Normal;\r\n let brInvRo = new Matrix4().extractRotation(brInv);\r\n let position = cyHole.Position.applyMatrix4(brInv);\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 = cyHole.Height;\r\n let diffMat = brInv.clone().multiply(cyHole.OCSNoClone);\r\n let x = new Vector3().setFromMatrixColumn(diffMat, 0);\r\n let angle = angleTo(XAxis, x);\r\n\r\n let cyNormal = cyHole.Normal.applyMatrix4(brInvRo);\r\n let pos2 = position.clone().add(cyNormal.multiplyScalar(depth));\r\n\r\n if (cyHole.Type === GangDrillType.Pxl || cyHole.Type === GangDrillType.WoodPXL)\r\n {\r\n if (isParallelTo(cyHole.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n if (!IsBetweenA2B(position.x, -cyHole.Radius, br.Width + cyHole.Radius, 1e-6)\r\n || !IsBetweenA2B(position.y, -cyHole.Radius, br.Height + cyHole.Radius, 1e-6)\r\n || !HoleInBoard(position.clone().setZ(0), cyHole.Radius, outline)) return;\r\n\r\n position.sub(offsetTanslation);\r\n\r\n //#region 求得真实的求交范围\r\n let z0 = position.z;\r\n let z1 = pos2.z;\r\n if (z0 > z1) [z0, z1] = [z1, z0];\r\n\r\n let i1 = Math.max(z0, 0);\r\n let i2 = Math.min(z1, br.Thickness);\r\n if (i2 - i1 < CanDrawHoleFuzz) return;//相交范围小于0.1\r\n\r\n if (equaln(i1, 0, CanDrawHoleFuzz)) face = FaceDirection.Back;\r\n else if (equaln(i2, br.Thickness, CanDrawHoleFuzz)) face = FaceDirection.Front;\r\n else return;//不在正面 也不在反面\r\n\r\n depth = i2 - i1;//真实的相交范围\r\n //#endregion\r\n\r\n isPush = true;\r\n }\r\n }\r\n else if (cyHole.Type === GangDrillType.Ljg || cyHole.Type === GangDrillType.Wood)\r\n {\r\n if (isPerpendicularityTo(cyHole.Normal, brNormal, CanDrawHoleFuzz))//侧孔\r\n {\r\n let z = position.z;\r\n if (!IsBetweenA2B(z, -cyHole.Radius, br.Thickness + cyHole.Radius, 1e-6)) return;\r\n\r\n let sp = position.clone().setZ(0); //真实数据\r\n let ep = position.clone().add(cyHole.Normal.multiplyScalar(cyHole.Height).applyMatrix4(brInvRo)).setZ(0); //真实数据\r\n let testLine = new Line(sp, ep);\r\n let iPt = outline.IntersectWith(testLine, 0, CanDrawHoleFuzz)[0];\r\n if (!iPt)\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: \"侧孔与板无交点,无法加工该侧孔!\" }], LogType.Warning);\r\n return;\r\n }\r\n position = iPt.clone().setZ(z);//排钻开始的位置\r\n for (let p of [sp, ep])\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 InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: \"侧孔位置有问题,排钻不在板轮廓内!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n holes = data.sideHoles;\r\n face = Math.floor(outline.GetParamAtPoint(iPt));//板在那个边上\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 (cyHole.Type === GangDrillType.Wood)//木销\r\n {\r\n if (!outline.PtInCurve(position.clone().setZ(0))) return;\r\n position.sub(offsetTanslation);\r\n\r\n //#region 求得真实的求交范围\r\n let z0 = position.z;\r\n let z1 = pos2.z;\r\n if (z0 > z1) [z0, z1] = [z1, z0];\r\n\r\n let i1 = Math.max(z0, 0);\r\n let i2 = Math.min(z1, br.Thickness);\r\n if (i2 - i1 < CanDrawHoleFuzz) return;//相交范围小于0.1\r\n\r\n if (equaln(i1, 0, CanDrawHoleFuzz)) face = FaceDirection.Back;\r\n else if (equaln(i2, br.Thickness, CanDrawHoleFuzz)) face = FaceDirection.Front;\r\n else return;//不在正面 也不在反面\r\n\r\n depth = i2 - i1;//真实的相交范围\r\n //#endregion\r\n\r\n holes = data.frontBackHoles;\r\n isPush = true;\r\n }\r\n }\r\n else\r\n {\r\n if (isParallelTo(cyHole.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n if (!IsBetweenA2B(position.x, -cyHole.Radius, br.Width + cyHole.Radius, CanDrawHoleFuzz)\r\n || !IsBetweenA2B(position.y, -cyHole.Radius, br.Height + cyHole.Radius, CanDrawHoleFuzz)\r\n || !isIntersect2(0, br.Thickness, position.z, pos2.z, -CanDrawHoleFuzz)\r\n || !HoleInBoard(position.clone().setZ(0), cyHole.Radius, outline, true)) return;\r\n\r\n position.sub(offsetTanslation);\r\n holes = data.frontBackHoles;\r\n face = !equalv3(cyHole.Normal, brNormal, CanDrawHoleFuzz) ? FaceDirection.Front : FaceDirection.Back;\r\n isPush = true;\r\n }\r\n }\r\n isPush && holes.push({\r\n type: cyHole.Type,\r\n position,//排钻开始位置\r\n endPt, //排钻结束的位置(在板的坐标系)\r\n radius: cyHole.Radius,//排钻半径\r\n depth,//排钻的插入深度\r\n face,//板在哪个边上\r\n angle,\r\n name: GetGroupName(cyHole)\r\n });\r\n }\r\n\r\n /**分析自定义圆柱排钻\r\n *\r\n * isRelativeHardware 关联的五金使用此类型误差\r\n * CanDrawHoleFuzz)//区间交集必须大于CanDrawHoleFuzz\r\n * CanDrawHoleFuzz)//区间交集必须大于CanDrawHoleFuzz\r\n *\r\n */\r\n function ParseExtrudeHoles(d: ExtrudeHole, br: Board, offsetTanslation: Vector3, data: IBoardHoleInfo, outline: ExtrudeContourCurve, isCheckGroove = false, isRelativeHardware = 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 InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: \"的孔嵌在板中间,无法加工,已经跳过!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n if (!(outline.PtInCurve(p)))//在轮廓内\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: \"的孔不在板轮廓内,无法加工,已经跳过!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n if (groovesOutlines.some(g => g.PtInCurve(p)))//在洞内\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: \"的孔在造型内,无法加工,已经跳过!\" }], LogType.Warning);\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 : (isRelativeHardware ? GangDrillType.Ljg : d.Type),\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 name: GetGroupName(d)\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 if (sp.z > -cir.Radius\r\n && sp.z < br.Thickness + cir.Radius\r\n && Math.max(minX, 0) < (Math.min(br.Width, maxX) + (isRelativeHardware ? -CanDrawHoleFuzz : 1e-6))//区间交集必须大于CanDrawHoleFuzz\r\n && Math.max(minY, 0) < (Math.min(br.Height, maxY) + (isRelativeHardware ? -CanDrawHoleFuzz : 1e-6))//区间交集必须大于CanDrawHoleFuzz\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 InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: `的${isRelativeHardware ? \"五金\" : \"排钻\"}嵌在板件内部,已经跳过!` }], LogType.Warning);\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 (!equalv2(p, 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 name: GetGroupName(d)\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 const accuracy = HostApplicationServices.chaidanOption.hardwareExpressionFormattingAccuracy;\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, accuracy, { L: size.x, W: size.y, H: size.z });\r\n data.model = ParseExpr(data.model, accuracy, { L: size.x, W: size.y, H: size.z });\r\n data.factory = ParseExpr(data.factory, accuracy, { L: size.x, W: size.y, H: size.z });\r\n data.brand = ParseExpr(data.brand, accuracy, { 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 const accuracy = HostApplicationServices.chaidanOption.hardwareExpressionFormattingAccuracy;\r\n d.spec = ParseExpr(data.spec, accuracy, { 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 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, false),\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, redundancyKnif = 0)\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();\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(\r\n { Thickness: brThickness, ContourCurve: brContour },\r\n {\r\n shape,\r\n thickness,\r\n dir, knifeRadius, addLen, addWidth, addDepth\r\n },\r\n redundancyKnif);\r\n\r\n return paths.map((c: ExtrudeContourCurve) => ConverToPtsBul(c, false));\r\n }\r\n export function GetGroupName(ent: Entity): string\r\n {\r\n let group = ent.GroupId?.Object as GroupRecord;\r\n if (!group || !(group instanceof GroupRecord)) return \"未知(无拆单名称)\";\r\n return group.Name;\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 { Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../Common/ArrayExt\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { MergeCurvelist } from \"../Common/CurveUtils\";\r\nimport { InteractionLog, LogType } from \"../Common/Log\";\r\nimport { Intent, Toaster } from \"../Common/Toaster\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { Contour } 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 } 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 { IdentityMtx4, XAxis, equaln, equalv3, isParallelTo } from \"../Geometry/GeUtils\";\r\nimport { Max } from \"../Nest/Common/Util\";\r\nimport { Production } from \"../Production/Product\";\r\nimport { IHighEdgeRemarkItem, IHighSealedItem } from \"../UI/Store/OptionInterface/IHighSealedItem\";\r\nimport { OffsetPolyline } from \"./OffsetPolyline\";\r\nimport { ParseEdgeSealDir } from \"./ParseEdgeSealDir\";\r\n\r\ntype CurveGroups = (Curve[])[];\r\n\r\n/**\r\n * 将曲线分段(根据高级封边的特性 (因为圆弧无法单独使用封边,所以和圆弧在一起的曲线必须和圆弧一样的封边,否则偏移失败))\r\n * @l-arc-l,l-arc-arc-l,l-arc-l-arc-l....\r\n * @param in_out_curves 曲线组( 函数结束后 这个数组被改变 )\r\n * @returns 返回编组 curveGroups\r\n */\r\nexport function SubsectionCurvesOfHightSeal(in_out_curves: Curve[]): CurveGroups\r\n{\r\n let curveGroups: CurveGroups = [];\r\n let usedCu: WeakSet = new WeakSet();\r\n\r\n //归类曲线,返回归类是否成功\r\n const paragraph = (nextCurve: Curve, curCurve: Curve, curvesGroup: Curve[], isBack: boolean) =>\r\n {\r\n const curIsLine = curCurve instanceof Line;\r\n const nextIsLine = nextCurve instanceof Line;\r\n\r\n if (usedCu.has(nextCurve))\r\n return false;\r\n\r\n if (curIsLine !== nextIsLine)//直线和圆弧\r\n {\r\n if (curIsLine)\r\n {\r\n if (isBack)\r\n {\r\n if (!isParallelTo(curCurve.GetFirstDeriv(0).normalize(), nextCurve.GetFirstDeriv(0).normalize()))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!isParallelTo(curCurve.GetFirstDeriv(0).normalize(), nextCurve.GetFirstDeriv(1).normalize()))\r\n return false;\r\n }\r\n }\r\n\r\n if (nextIsLine)\r\n {\r\n if (isBack)\r\n {\r\n if (!isParallelTo(curCurve.GetFirstDeriv(1).normalize(), nextCurve.GetFirstDeriv(0).normalize()))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!isParallelTo(curCurve.GetFirstDeriv(0).normalize(), nextCurve.GetFirstDeriv(0).normalize()))\r\n return false;\r\n }\r\n }\r\n }\r\n else if (nextIsLine)//都是直线\r\n {\r\n //共线且相连的直线分为一组 #I11T1Z\r\n if (!isParallelTo(nextCurve.GetFirstDeriv(0).normalize(), curCurve.GetFirstDeriv(0).normalize()))\r\n return false;\r\n\r\n let pts = [curCurve.StartPoint, curCurve.EndPoint];\r\n let pts2 = [nextCurve.StartPoint, nextCurve.EndPoint];\r\n if (pts.every(p => pts2.every(p2 => !equalv3(p, p2, 1e-6))))//2条线完全分离 没有共同点\r\n return false;\r\n }\r\n //else 都是圆弧 必然成组\r\n\r\n if (isBack)\r\n curvesGroup.push(nextCurve);\r\n else\r\n curvesGroup.unshift(nextCurve);\r\n\r\n usedCu.add(nextCurve);\r\n return true;\r\n };\r\n\r\n let caclCus = in_out_curves.filter(c => !equaln(c.Length, 0));\r\n\r\n while (caclCus.length > 0)\r\n {\r\n let curCurve = caclCus.shift();\r\n if (usedCu.has(curCurve))\r\n continue;\r\n\r\n let curvesGroup = [curCurve];//编组\r\n usedCu.add(curCurve);\r\n //往后搜索\r\n for (let i = 0; i < caclCus.length; i++)\r\n {\r\n if (!paragraph(caclCus[i], curCurve, curvesGroup, true))\r\n break;\r\n curCurve = caclCus[i];\r\n }\r\n //只有第一条才需要往前搜索\r\n if (caclCus.length === in_out_curves.length - 1)\r\n {\r\n curCurve = curvesGroup[0];\r\n //往前搜索\r\n for (let i = caclCus.length - 1; i >= 0; i--)\r\n {\r\n if (!paragraph(caclCus[i], curCurve, curvesGroup, false))\r\n break;\r\n curCurve = caclCus[i];\r\n }\r\n }\r\n curveGroups.push(curvesGroup);\r\n }\r\n\r\n in_out_curves.length = 0;\r\n //同组多条曲线连接为多段线\r\n for (let g of curveGroups)\r\n {\r\n if (g.length === 1)\r\n in_out_curves.push(g[0]);\r\n else\r\n {\r\n let pl = new Polyline();\r\n for (let c of g)\r\n pl.Join(c);\r\n in_out_curves.push(pl);\r\n }\r\n }\r\n\r\n return curveGroups;\r\n}\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: IHighSealedItem[] = [];\r\n for (let d of br.BoardProcessOption.highSealed)\r\n if (d.size != null)\r\n highSeals.push({ ...d });\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.GetFirstDeriv(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\nexport function GetHighBoardEdgeRemark(br: Board, sealcus: Curve[]): IHighEdgeRemarkItem[]\r\n{\r\n const opt = br.BoardProcessOption;\r\n\r\n //顺序和封边一样\r\n if (opt[EBoardKeyList.SpliteHeight]\r\n && opt[EBoardKeyList.SpliteWidth]\r\n && opt[EBoardKeyList.SpliteThickness]\r\n )\r\n {\r\n return [\r\n { description: opt.edgeRemarkDown },\r\n { description: opt.edgeRemarkRight },\r\n { description: opt.edgeRemarkUp },\r\n { description: opt.edgeRemarkLeft },\r\n ];\r\n }\r\n\r\n const highBoardEdgeRemark: IHighEdgeRemarkItem[] = [];\r\n for (const d of opt.highBoardEdgeRemark)\r\n if (d.description != null)\r\n highBoardEdgeRemark.push({ ...d });\r\n\r\n //若未设置高级板边备注,把上下左右板边备注存入高级板边备注\r\n if (sealcus.length !== highBoardEdgeRemark.length || !br.IsSpecialShape)\r\n {\r\n const edgeRemarkDown = opt.edgeRemarkDown;\r\n const edgeRemarkRight = opt.edgeRemarkRight;\r\n const edgeRemarkUp = opt.edgeRemarkUp;\r\n const edgeRemarkLeft = opt.edgeRemarkLeft;\r\n\r\n highBoardEdgeRemark.length = 0;\r\n const dir = Math.sign(br.ContourCurve.Area2);\r\n for (const c of sealcus)\r\n {\r\n const derv = c.GetFirstDeriv(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 highBoardEdgeRemark.push({ description: edgeRemarkDown });\r\n else\r\n highBoardEdgeRemark.push({ description: edgeRemarkUp });\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n highBoardEdgeRemark.push({ description: edgeRemarkRight });\r\n else\r\n highBoardEdgeRemark.push({ description: edgeRemarkLeft });\r\n }\r\n }\r\n }\r\n\r\n return highBoardEdgeRemark;\r\n}\r\n\r\n/**偏移前后曲线起点没改变 */\r\nexport function OffsetOutlineSpNotChange(oldcu: Curve, newCu: Curve)\r\n{\r\n if (!newCu) return false;\r\n if (oldcu.EndParam !== newCu.EndParam) return false;\r\n let sDerv = oldcu.GetFirstDeriv(0).normalize();\r\n let eDerv = oldcu.GetFirstDeriv(oldcu.EndParam).normalize().negate();\r\n sDerv.add(eDerv).normalize();\r\n let mDerv = newCu.StartPoint.sub(oldcu.StartPoint).normalize();\r\n return isParallelTo(mDerv, sDerv);\r\n}\r\n\r\n/**\r\n * 获取板件的轮廓曲线数组(合并共线了 已经对封边进行合并了 尊重原始时针)\r\n * GetBrContourCurvesBySealGrouped\r\n * @param offsetInside 向内偏移1(为了编辑封边)\r\n * */\r\nexport function GetBoardSealingCurves(br: Board, offsetInside = false): Curve[]\r\n{\r\n let brContour: ExtrudeContourCurve = Production.GetSpliteOutlineBySpliteSize(br);\r\n if (brContour)\r\n return brContour.Explode();//如果是拆单板 则直接炸开返回\r\n\r\n brContour = br.ContourCurve;\r\n if (brContour instanceof Circle)\r\n return [brContour.Clone()];\r\n\r\n if (offsetInside)\r\n {\r\n let dir = Math.sign(brContour.Area2);\r\n let offsetedCurve = brContour.GetOffsetCurves(-1 * dir)[0] as Polyline;\r\n if (OffsetOutlineSpNotChange(brContour, offsetedCurve))\r\n brContour = offsetedCurve;\r\n }\r\n\r\n //避免共线导致的侧面数据对应错误\r\n let curves = brContour.Explode();\r\n MergeCurvelist(curves);\r\n\r\n if (curves.length === 1 && curves[0] instanceof Circle)//变成一个圆\r\n return curves;\r\n\r\n if (br.IsSpecialShape)//是异形板(其实矩形板也需要分组 避免共线导致的错误) (但是如果删了这个 之前的数据会出现不兼容的问题)\r\n SubsectionCurvesOfHightSeal(curves);//分组 join 改变cus\r\n\r\n return curves;\r\n}\r\n\r\n\r\nexport interface BrSealedData\r\n{\r\n brContour: ExtrudeContourCurve;//板件轮廓(原始(没有转换为逆时针 因为Product那边会转换))\r\n sealedContour: ExtrudeContourCurve;//封边后的轮廓\r\n\r\n brCurves: Curve[];//封边轮廓(高级封边 已经成组)\r\n highSeals: IHighSealedItem[];//高级封边(一一对应)\r\n}\r\n\r\nclass OffsetPolyline2 extends OffsetPolyline\r\n{\r\n override InitSubCurves()\r\n {\r\n this._IsTopoOffset = true;\r\n return this;\r\n }\r\n protected override OffsetSubCurves(): void { }\r\n\r\n protected override GeneralCirclesAndVertexs(): void { }\r\n\r\n protected override GeneralTrimContours(): void\r\n {\r\n super.GeneralTrimContours();\r\n arrayRemoveIf(this._TrimPolylineContours, con => con.Curve.Area < 0.01);//因为局部偏移可能为0,产生0面积的轮廓\r\n }\r\n\r\n CheckPointDir(pt: Vector3): boolean\r\n {\r\n let dir = this.GetPointAtCurveDir(pt);\r\n return dir === 0 || dir === this._OffsetDistSign;//因为局部偏移可能为0,所以在线上的我们也保留了\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 获取板件的轮廓(没有扣封边)(拆单时表现)\r\n * 在拆单的时候 我们用这个轮廓(为了数据对应准确性)\r\n * 修改时 请注意函数 GetSealedBoardContour\r\n*/\r\nexport function GetBoardContour(br: Board): ExtrudeContourCurve | undefined\r\n{\r\n if (Math.abs(br.ContourCurve.Area) < 10)\r\n return;\r\n\r\n let curves = GetBoardSealingCurves(br);\r\n\r\n if (curves.length === 1 && curves[0] instanceof Circle)\r\n return curves[0];\r\n\r\n let allCurvs: Curve[] = [];\r\n for (let c of curves)\r\n if (c instanceof Polyline)\r\n allCurvs.push(...c.Explode());\r\n else\r\n allCurvs.push(c);\r\n let brContour = Polyline.FastCombine(allCurvs, 1e-4, false);\r\n return brContour;\r\n}\r\n\r\n\r\n/**\r\n * 获取板件(扣封边后的)轮廓(拆单时)\r\n * 修改时 请注意函数 GetBoardContour\r\n */\r\nexport function GetSealedBoardContour(br: Board): BrSealedData | undefined\r\n{\r\n if (Math.abs(br.ContourCurve.Area) < 10)\r\n return;\r\n\r\n let curves = GetBoardSealingCurves(br);\r\n let highSeals = GetBoardHighSeal(br, curves);\r\n\r\n if (curves.length === 1 && curves[0] instanceof Circle)\r\n {\r\n let res: BrSealedData = {\r\n brContour: curves[0],\r\n sealedContour: curves[0].GetOffsetCurves(-highSeals[0].size)[0] as Circle,\r\n brCurves: curves,\r\n highSeals,\r\n };\r\n return res;\r\n }\r\n\r\n let allCurvs: Curve[] = [];\r\n for (let c of curves)\r\n if (c instanceof Polyline)\r\n allCurvs.push(...c.Explode());\r\n else\r\n allCurvs.push(c);\r\n let brContour = Polyline.FastCombine(allCurvs, 1e-4, false);\r\n\r\n let dir = Math.sign(brContour.Area2);\r\n\r\n let sealedContours: Polyline[];\r\n if (false && highSeals.every(s => equaln(s.size, highSeals[0].size), 1e-3))\r\n {\r\n sealedContours = brContour.GetOffsetCurves(-highSeals[0].size * dir) as Polyline[];\r\n }\r\n else\r\n {\r\n //局部偏移\r\n let polylineOffset = new OffsetPolyline2(brContour, dir * -Math.max(...highSeals.map(s => s.size)));\r\n let subIndex = 0;\r\n polylineOffset._TrimCircleContours = [];\r\n polylineOffset._TrimArcContours = [];\r\n polylineOffset._SubOffsetedCurves = [];\r\n polylineOffset._SubCurves = [];\r\n polylineOffset._Circles = [];\r\n polylineOffset._CacheOCS = IdentityMtx4;\r\n polylineOffset._IsClose = true;\r\n\r\n for (let i = 0; i < curves.length; i++)\r\n {\r\n let curve = curves[i];//曲线组\r\n let seal = highSeals[i];//封边\r\n\r\n let preSeal = highSeals[FixIndex(i - 1, curves)];\r\n\r\n if (curve instanceof Polyline)\r\n {\r\n let curveExpds = curve.Explode().filter(c => c.Length >= 1e-4);\r\n\r\n for (let j = 0; j < curveExpds.length; j++)\r\n {\r\n let c = curveExpds[j];\r\n\r\n polylineOffset._SubCurves.push(c);//sub\r\n\r\n //trim Circle\r\n if (seal.size && (j || seal.size === preSeal.size))\r\n polylineOffset._Circles.push(new Circle(c.StartPoint, seal.size));\r\n else\r\n polylineOffset._Circles.push(undefined);\r\n\r\n //offset\r\n let offsetC = c.GetOffsetCurves(dir * -seal.size)[0];\r\n if (offsetC)\r\n polylineOffset._SubOffsetedCurves.push({\r\n index: subIndex,\r\n curve: offsetC,\r\n dist: seal.size,\r\n });\r\n else\r\n polylineOffset._TrimArcContours.push(Contour.CreateContour([c, new Line(c.StartPoint, c.EndPoint)], false));\r\n\r\n subIndex++;\r\n }\r\n }\r\n else\r\n {\r\n if (curve.Length < 1e-4) continue;\r\n\r\n polylineOffset._SubCurves.push(curve);//sub\r\n\r\n //trim Circle\r\n if (seal.size && seal.size === preSeal.size)\r\n polylineOffset._Circles.push(new Circle(curve.StartPoint, seal.size));\r\n else\r\n polylineOffset._Circles.push(undefined);\r\n\r\n //offset\r\n let offsetC = curve.GetOffsetCurves(dir * -seal.size)[0];\r\n if (offsetC)\r\n polylineOffset._SubOffsetedCurves.push({\r\n index: subIndex,\r\n curve: offsetC,\r\n dist: seal.size,\r\n });\r\n else\r\n polylineOffset._TrimArcContours.push(Contour.CreateContour([curve, new Line(curve.StartPoint, curve.EndPoint)], false));\r\n\r\n subIndex++;\r\n }\r\n }\r\n\r\n polylineOffset._Vertexs = polylineOffset._SubCurves.map(c => c.StartPoint);\r\n\r\n sealedContours = polylineOffset.Do();\r\n }\r\n\r\n //如果有多个 取最大\r\n if (sealedContours.length > 1)\r\n {\r\n Toaster({\r\n message: `有板计算封边异常,请检查!(点击左下角提示可以查看该板)`,\r\n timeout: 15000,\r\n intent: Intent.WARNING,\r\n key: \"sealerror\"\r\n });\r\n\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板:${br.Name}`, entity: [br] }, { msg: `在扣除封边计算中,得到了${sealedContours.length}条轮廓,请检查!` }], LogType.Warning);\r\n\r\n let areas = sealedContours.map(p => p.Area);\r\n let maxIndex = Max(areas, (a1, a2) => a2 > a1);\r\n sealedContours = [sealedContours[maxIndex]];\r\n }\r\n\r\n //如果不闭合 则尝试闭合\r\n let sealedContour = sealedContours[0];\r\n if (sealedContour && !sealedContour.IsClose)\r\n {\r\n if (sealedContour.StartPoint.distanceTo(sealedContour.EndPoint) < 0.1)\r\n sealedContour.CloseMark = true;\r\n else\r\n sealedContour = CreateContour2([sealedContour])?.Curve as Polyline;\r\n }\r\n\r\n if (!sealedContour)\r\n return;\r\n\r\n //逆时针\r\n if (sealedContour && sealedContour.Area2 < 0)\r\n sealedContour.Reverse();\r\n\r\n let res: BrSealedData = {\r\n brContour,\r\n sealedContour,\r\n brCurves: curves,\r\n highSeals,\r\n };\r\n\r\n return res;\r\n}\r\n\r\n\r\n/**\r\n * 将11对应的封边数值改成WebCAD的高级封边\r\n * @param seals 每段曲线的封边\r\n * @param curves 曲线表\r\n * @returns 转换成高级封边后的封边值 (圆弧会编组)\r\n */\r\nexport function ConverEachSeal2HightSealData(seals: IHighSealedItem[], curves: Curve[]): IHighSealedItem[]\r\n{\r\n curves = curves.concat();\r\n seals = seals.concat();\r\n let lastSeal = seals[seals.length - 1];\r\n\r\n for (let i = seals.length; i < curves.length; i++)\r\n seals.push(lastSeal);\r\n\r\n let map = new Map();\r\n for (let i = 0; i < curves.length; i++)\r\n map.set(curves[i], seals[i]);\r\n\r\n let groups = SubsectionCurvesOfHightSeal(curves);\r\n\r\n return groups.map(g => map.get(g[0]));\r\n}\r\n\r\n\r\n/**\r\n * 设置板的上下左右封边(解析来自高级封边)\r\n * @param br\r\n * @param sealDatas 封边数据\r\n * @param [sealCurves] 封边的曲线\r\n * @param [brContourCurve] 传递封边的曲线轮廓\r\n */\r\nexport function SetBoardTopDownLeftRightSealData(br: Board, sealDatas: IHighSealedItem[], sealCurves?: Curve[], brContourCurve?: ExtrudeContourCurve)\r\n{\r\n let dir = Math.sign((brContourCurve ?? br.ContourCurve).Area2);\r\n sealCurves = sealCurves ?? 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.IsRect && sealCurves.length === 4)\r\n {\r\n for (let i = 0; i < 4; i++)\r\n {\r\n let derv = sealCurves[i].GetFirstDeriv(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] = sealDatas[i].size.toString();\r\n else\r\n br.BoardProcessOption[EBoardKeyList.UpSealed] = sealDatas[i].size.toString();\r\n }\r\n else\r\n {\r\n if (derv.y * dir > 0)\r\n br.BoardProcessOption[EBoardKeyList.RightSealed] = sealDatas[i].size.toString();\r\n else\r\n br.BoardProcessOption[EBoardKeyList.LeftSealed] = sealDatas[i].size.toString();\r\n }\r\n }\r\n }\r\n else\r\n {\r\n let [left, right, top, bottom] = ParseEdgeSealDir(sealCurves);\r\n br.BoardProcessOption[EBoardKeyList.LeftSealed] = sealDatas[left].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.RightSealed] = sealDatas[right].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.UpSealed] = sealDatas[top].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.DownSealed] = sealDatas[bottom].size.toString();\r\n }\r\n}\r\n\r\nexport function SetBoardEdgeRemarkData(br: Board, remarkDatas: IHighEdgeRemarkItem[], sealCurves?: Curve[], brContourCurve?: ExtrudeContourCurve)\r\n{\r\n let dir = Math.sign((brContourCurve ?? br.ContourCurve).Area2);\r\n sealCurves = sealCurves ?? GetBoardSealingCurves(br);\r\n\r\n const opt = br.BoardProcessOption;\r\n if (br.IsRect && sealCurves.length === 4)\r\n {\r\n for (let i = 0; i < 4; i++)\r\n {\r\n let derv = sealCurves[i].GetFirstDeriv(0).normalize();\r\n if (isParallelTo(derv, XAxis, 1e-4))\r\n {\r\n if (derv.x * dir > 0)\r\n opt.edgeRemarkDown = remarkDatas[i].description;\r\n else\r\n opt.edgeRemarkUp = remarkDatas[i].description;\r\n }\r\n else\r\n {\r\n if (derv.y * dir > 0)\r\n opt.edgeRemarkRight = remarkDatas[i].description;\r\n else\r\n opt.edgeRemarkLeft = remarkDatas[i].description;\r\n }\r\n }\r\n }\r\n else\r\n {\r\n let [left, right, top, bottom] = ParseEdgeSealDir(sealCurves);\r\n opt.edgeRemarkLeft = remarkDatas[left].description;\r\n opt.edgeRemarkRight = remarkDatas[right].description;\r\n opt.edgeRemarkUp = remarkDatas[top].description;\r\n opt.edgeRemarkDown = remarkDatas[bottom].description;\r\n }\r\n}\r\n","import Geom3 from '@jscad/modeling/src/geometries/geom3/type';\r\nimport { Euler, Frustum, Geometry, LineSegments, Matrix3, Matrix4, Mesh, Object3D, ShapeGeometry, Line as TLine, UVGenerator, Vector3 } from 'three';\r\nimport { Board2Regions } from '../../Add-on/BoardEditor/Board2Regions';\r\nimport { DeserializationBoard2DModeingData, DeserializationBoard3DModeingData, SerializeBoard2DModeingData, SerializeBoard3DModeingData, deserializationBoardData, serializeBoardData } from '../../Add-on/BoardEditor/SerializeBoardData';\r\nimport { DrillType, FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { CyHoleInBoard, IBoardRectHoleType, ParseBoardRectHoleType, SetBrHighHoleTypeFromRectHoleType } 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 { DisposeThreeObj } from '../../Common/Dispose';\r\nimport { TransformVector, tempMatrix1 } 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 { TerminateCSGTask } from '../../Geometry/CSGSubtract/CSGSubtractTaskManager';\r\nimport { IdentityMtx4, XAxis, XAxisN, YAxis, YAxisN, ZAxis, ZeroVec, equaln, equalv3 } from '../../Geometry/GeUtils';\r\nimport { PointShapeUtils } from '../../Geometry/PointShapeUtils';\r\nimport { GetBoardHighSeal, GetBoardSealingCurves, GetHighBoardEdgeRemark, SetBoardEdgeRemarkData, SetBoardTopDownLeftRightSealData } from '../../GraphicsSystem/CalcEdgeSealing';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { BoardProcessOption } from \"../../UI/Store/OptionInterface/BoardProcessOption\";\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 { Text as DbText } from \"../Text/Text\";\r\nimport { Arc } from './Arc';\r\nimport { BoardOpenDir, BoardType, ComposingType, LinesType } from './BoardInterface';\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//排钻配置名是合法的 可用的\r\nfunction IsValidDriName(name: string): boolean\r\n{\r\n return name === DrillType.None || 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 protected HasBigHoleFaceRenderType = 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 private _OpenDir: BoardOpenDir = BoardOpenDir.None;\r\n @AutoRecord RelativeHandle: ObjectId[] = [];\r\n private _IsChaiDan: boolean = true;\r\n private _2DModelingList: I2DModeling[] = [];\r\n private _3DModelingList: I3DModeling[] = [];\r\n private _CustomNumber: number = null;//自定义编号\r\n private _DrillLock = false; //排钻独立锁\r\n private _DrillAssociationLock = new Set(); //排钻关联锁\r\n\r\n //仅在渲染器中使用倒角\r\n protected bevelEnabled: boolean = true;\r\n\r\n //二维刀路 id -> polyline\r\n private _KnifePolylineMap: Map = new Map();\r\n\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 edgeRemarkUp: \"\",\r\n edgeRemarkDown: \"\",\r\n edgeRemarkLeft: \"\",\r\n edgeRemarkRight: \"\",\r\n highBoardEdgeRemark: 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 || key === \"highBoardEdgeRemark\")\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 else if (key === EBoardKeyList.BigHole)\r\n {\r\n let obj = this.CacheDrawObject.get(RenderType.BigHoleFace);\r\n if (obj)\r\n {\r\n this.UpdateDrawObject(RenderType.BigHoleFace, 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 if (!length || !width || !thickness)\r\n throw `无法使用该尺寸构建板,长:${length},宽:${width},厚:${thickness}`;\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 DrillLock()\r\n {\r\n return this._DrillLock;\r\n }\r\n\r\n set DrillLock(v: boolean)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DrillLock = v;\r\n }\r\n get isDrillAssociationLock()\r\n {\r\n //有一块关联的板就返回true\r\n for (const o of this._DrillAssociationLock)\r\n {\r\n if (o.Object && !(o.Object as Board).IsErase)\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n get DrillAssociationLock(): Set\r\n {\r\n return this._DrillAssociationLock;\r\n }\r\n\r\n AppendDrillAssociationLock(o: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DrillAssociationLock.add(o);\r\n }\r\n ClearDrillAssociationLock(o: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DrillAssociationLock.delete(o);\r\n }\r\n ClearAllAssociDrillLock()\r\n {\r\n this.WriteAllObjectRecord();\r\n for (const o of this._DrillAssociationLock)\r\n {\r\n this.ClearDrillAssociationLock(o);\r\n\r\n if (o && o.Object)\r\n {\r\n let br = o.Object as Board;\r\n br.ClearDrillAssociationLock(this.Id);\r\n }\r\n }\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 private _CustomNumberTextEntity: DbText;\r\n private _AsyncIngTextEntity: DbText;\r\n\r\n get CustomNumber() { return this._CustomNumber; }\r\n set CustomNumber(n: number | null)\r\n {\r\n if (n !== this._CustomNumber)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._CustomNumber = n;\r\n\r\n if (this._CustomNumberTextEntity)\r\n {\r\n this._CustomNumberTextEntity.TextString = n?.toString() ?? \"\";\r\n this._CustomNumberTextEntity.Visible = this._CustomNumberTextEntity.TextString !== \"\";\r\n this._CustomNumberTextEntity.Height = HostApplicationServices.boardCustomNumberTextHeight;\r\n }\r\n }\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,\r\n {\r\n [EBoardKeyList.HighSealed]: obj[EBoardKeyList.HighSealed].slice(),\r\n highBoardEdgeRemark: obj.highBoardEdgeRemark.slice(),\r\n });\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 ent = e.Object;\r\n if (ent instanceof HardwareCompositeEntity)\r\n {\r\n if (ent.HardwareOption.isHole)\r\n {\r\n let holes = ent.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: ent.Id.Index, Version: ent.__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 highDrills: 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 {\r\n highDrills = this._BoardProcessOption.highDrill;\r\n }\r\n\r\n ocsInv = this.OCSInv;\r\n }\r\n\r\n let oldContour = this.ContourCurve;//旧的轮廓\r\n let oldHightSealCurves = GetBoardSealingCurves(this);//旧的封边轮廓\r\n let oldHightSealDatas = GetBoardHighSeal(this, oldHightSealCurves);//旧的封边数据\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 br._CustomNumber = this._CustomNumber;//因为CustomNumber不会刷新绘制,所以拷贝这个\r\n\r\n let new2old_edgeMap: number[];\r\n //修正排钻边的数据\r\n if (highDrills)\r\n {\r\n br.BoardProcessOption.highDrill = [];//因为上面用了拷贝,所以这里不能直接改它的数据(我们新建一个数组来改它,否则原始板件的数据就被改掉了)\r\n new2old_edgeMap = ParseNewBr2OldBr_EdgeMap(br, this, ocsInv);\r\n for (let index of new2old_edgeMap)\r\n {\r\n let dri = highDrills[index];\r\n if (dri !== undefined)\r\n br._BoardProcessOption.highDrill.push(dri);\r\n else\r\n br._BoardProcessOption.highDrill.push(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 //保持封边属性(代码来自SetContourCurve)\r\n br._BoardProcessOption.highSealed = [];\r\n if (br.isRect)\r\n {\r\n SetBoardTopDownLeftRightSealData(br, oldHightSealDatas, oldHightSealCurves, oldContour);\r\n }\r\n else//变成了异形\r\n {\r\n let newhightSealCurves = GetBoardSealingCurves(br);\r\n\r\n for (let i = 0; i < newhightSealCurves.length; i++)\r\n {\r\n let newC = newhightSealCurves[i];\r\n let p = newC.GetPointAtParam(newC.EndParam * 0.5);\r\n\r\n let closesIndex = 0;\r\n let closesDistance = Infinity;\r\n\r\n for (let j = 0; j < oldHightSealCurves.length; j++)\r\n {\r\n let oldC = oldHightSealCurves[j];\r\n let d = oldC.GetClosestPointTo(p, false).distanceTo(p);\r\n if (d < closesDistance)\r\n {\r\n closesIndex = j;\r\n closesDistance = d;\r\n }\r\n }\r\n\r\n br._BoardProcessOption.highSealed.push(oldHightSealDatas[closesIndex]);\r\n }\r\n }\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 //二维刀路\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.Clear2DPathCache();\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.Clear3DPathCache();\r\n this._3DModelingList = ms;\r\n this.Update(UpdateDraw.Geometry);\r\n }\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.Clear2DPathCache();\r\n this.Update(UpdateDraw.Geometry);\r\n }\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.Clear3DPathCache();\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n get IsChaiDan()\r\n {\r\n return this._IsChaiDan;\r\n }\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\r\n get OpenDir()\r\n {\r\n return this._OpenDir;\r\n }\r\n\r\n set OpenDir(v: BoardOpenDir)\r\n {\r\n if (this._OpenDir !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._OpenDir = v;\r\n //开门方向改变更新\r\n this.Update(UpdateDraw.Geometry);\r\n }\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\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 override get ContourCurve()\r\n {\r\n return super.ContourCurve;\r\n }\r\n\r\n //设置新的板件轮廓,这里重载为了保持正确的排钻封边映射\r\n override set ContourCurve(newContour: ExtrudeContourCurve)\r\n {\r\n /**\r\n * 保持排钻边和封边数据对应正确性\r\n * (2x2种可能性)\r\n * 矩形->矩形\r\n * 矩形->异形\r\n * 异形->异形\r\n * 异形->矩形\r\n */\r\n\r\n //上下左右排钻属性(在矩形时生效)\r\n let rectHoleOpt: IBoardRectHoleType = {} as any;\r\n ParseBoardRectHoleType(this, rectHoleOpt);//分析旧的上下左右排钻\r\n\r\n let oldHightSealCurves = GetBoardSealingCurves(this);//旧的封边轮廓\r\n let oldHightSealDatas = GetBoardHighSeal(this, oldHightSealCurves);//旧的封边数据\r\n let oldHighBoardEdgeRemarkDatas = GetHighBoardEdgeRemark(this, oldHightSealCurves);//旧的封边数据\r\n\r\n let oldContour = this.ContourCurve;//旧的轮廓\r\n\r\n let defaultDrillType = this._BoardProcessOption.drillType;\r\n if (!IsValidDriName(defaultDrillType) && this._BoardProcessOption.highDrill)\r\n for (let name of this._BoardProcessOption.highDrill)\r\n if (IsValidDriName(name))\r\n {\r\n defaultDrillType = name;\r\n break;\r\n }\r\n if (!IsValidDriName(defaultDrillType))\r\n defaultDrillType = HostApplicationServices.DrillConfigs.size ? HostApplicationServices.DrillConfigs.entries().next().value[0] : DrillType.None;\r\n\r\n super.ContourCurve = newContour;//设置新的轮廓\r\n\r\n //保持排钻边属性\r\n if (this.isRect && rectHoleOpt.up)//矩形->矩形\r\n SetBrHighHoleTypeFromRectHoleType(this, rectHoleOpt);//直接应用旧的矩形数据\r\n else//异形->矩形 矩形->异形 异形->异形\r\n {\r\n let indexMap: number[] = [];\r\n\r\n for (let i = 0; i < newContour.EndParam; i++)\r\n {\r\n let p = newContour.GetPointAtParam(i + 0.5);\r\n\r\n let cp = oldContour.GetClosestPointTo(p, false);\r\n let cparam = oldContour.GetParamAtPoint2(cp);\r\n indexMap.push(Math.floor(cparam));\r\n }\r\n\r\n let highDrill: string[] = [];\r\n for (let index of indexMap)\r\n highDrill.push(this._BoardProcessOption.highDrill[index] ?? defaultDrillType);\r\n\r\n this._BoardProcessOption.highDrill = highDrill;\r\n }\r\n\r\n this._BoardProcessOption.highSealed.length = 0;\r\n this._BoardProcessOption.highBoardEdgeRemark.length = 0;\r\n //保持封边属性\r\n if (this.isRect)\r\n {\r\n SetBoardTopDownLeftRightSealData(this, oldHightSealDatas, oldHightSealCurves, oldContour);\r\n SetBoardEdgeRemarkData(this, oldHighBoardEdgeRemarkDatas, oldHightSealCurves, oldContour);\r\n }\r\n else//变成了异形\r\n {\r\n let newhightSealCurves = GetBoardSealingCurves(this);\r\n\r\n for (let i = 0; i < newhightSealCurves.length; i++)\r\n {\r\n let newC = newhightSealCurves[i];\r\n let p = newC.GetPointAtParam(newC.EndParam * 0.5);\r\n\r\n let closesIndex = 0;\r\n let closesDistance = Infinity;\r\n\r\n for (let j = 0; j < oldHightSealCurves.length; j++)\r\n {\r\n let oldC = oldHightSealCurves[j];\r\n let d = oldC.GetClosestPointTo(p, false).distanceTo(p);\r\n if (d < closesDistance)\r\n {\r\n closesIndex = j;\r\n closesDistance = d;\r\n }\r\n }\r\n\r\n this._BoardProcessOption.highSealed.push(oldHightSealDatas[closesIndex]);\r\n this._BoardProcessOption.highBoardEdgeRemark.push(oldHighBoardEdgeRemarkDatas[closesIndex]);\r\n }\r\n }\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 = 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 SetBoardTopDownLeftRightSealData(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\r\n /**实际上这个值可能被改变,应该适当的去校验它(仅在重新设计模块时,这个值会被改变!) */\r\n get Rotation()\r\n {\r\n let roMtx = this.RotateMat;\r\n let roMtxInv = roMtx.getInverse(roMtx);\r\n\r\n let csInSpace = this.SpaceOCSInv.multiply(this.OCSNoClone);//逆到模块坐标系\r\n csInSpace.multiply(roMtxInv);//(正确)\r\n csInSpace.setPosition(0, 0, 0);\r\n\r\n let euRoMtx = new Matrix4().makeRotationFromEuler(new Euler(this._Rotation.x, this._Rotation.y, this._Rotation.z, \"ZYX\"));\r\n\r\n if (euRoMtx.elements.every((v, i) => equaln(v, csInSpace.elements[i])))\r\n return this._Rotation;\r\n else\r\n {\r\n let eu = new Euler(0, 0, 0, \"ZYX\").setFromRotationMatrix(csInSpace);\r\n return eu;\r\n }\r\n }\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;//为了优化性能,在jig模式下不去计算封边排钻等属性,不重绘板\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 highSealsCurves = GetBoardSealingCurves(this);\r\n let highSeals = GetBoardHighSeal(this, highSealsCurves);\r\n let isStartSealToBack = !equalv3(highSealsCurves[0].StartPoint, this.contourCurve.StartPoint, 1e-4);//第一段封边往后搜索了\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\r\n if (isStartSealToBack)//如果第一段封边往后搜索了,那么封边在镜像后 第一段封边保持不变\r\n highSeals.unshift(highSeals.pop());\r\n\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 SetBoardTopDownLeftRightSealData(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 //开门方向\"左\",\"右\"互换\r\n if (this.OpenDir === BoardOpenDir.Left)\r\n this.OpenDir = BoardOpenDir.Right;\r\n else if (this.OpenDir === BoardOpenDir.Right)\r\n this.OpenDir = BoardOpenDir.Left;\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._DrillAssociationLock.clear();\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\r\n private GetLinesOpenDir()\r\n {\r\n const l: TLine = new TLine(\r\n BufferGeometryUtils.CreateFromPts(PointShapeUtils.LinesOpenDirPts(this.height, this.width, this.OpenDir)),\r\n ColorMaterial.GetWallLineMtl(9)\r\n );\r\n l.computeLineDistances();\r\n\r\n let l1 = l.clone();\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\r\n get KnifePolylineMap()\r\n {\r\n return new Map(this._KnifePolylineMap);\r\n }\r\n\r\n set KnifePolylineMap(map: Map)\r\n {\r\n if (map.size === 0 && this._KnifePolylineMap.size === 0)\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._KnifePolylineMap = map;\r\n\r\n //不进行更新 通常由其他的方法更新\r\n }\r\n\r\n //三维刀路绘制对象\r\n private _3DPathObject: Object3D;\r\n\r\n Clear3DPathCache()\r\n {\r\n if (!this._3DPathObject) return;\r\n\r\n DisposeThreeObj(this._3DPathObject);\r\n this._3DPathObject = undefined;\r\n }\r\n\r\n\r\n //获取三维刀路的绘制对象\r\n private Get3DPathDrawObject(): Object3D\r\n {\r\n if (this._3DPathObject)\r\n return this._3DPathObject;\r\n\r\n this._3DPathObject = new Object3D();\r\n\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 this._3DPathObject.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 this._3DPathObject.add(arc.GetDrawObjectFromRenderType(RenderType.Wireframe));\r\n }\r\n }\r\n }\r\n\r\n return this._3DPathObject;\r\n }\r\n\r\n //#region 二维刀路缓存\r\n //清除二维刀路的缓存\r\n Clear2DPathCache()\r\n {\r\n this._2DPathCsgs = undefined;\r\n if (this._2DPathDrawObject)\r\n {\r\n DisposeThreeObj(this._2DPathDrawObject);\r\n this._2DPathDrawObject = undefined;\r\n }\r\n this.OffsetPathCache.clear();\r\n }\r\n\r\n _2DPathCsgs: Geom3[];//二维刀路的csg数组\r\n _2DPathDrawObject: Object3D;//二维刀路提刀线框显示对象\r\n\r\n /**\r\n * 这个函数生成了二维刀路的csg数组,并且同时生成了_2DPathDrawObject(二维刀路提刀线框显示对象)\r\n */\r\n \r\n Get2DPathCsgs(): Geom3[]\r\n {\r\n if (this._2DPathCsgs)\r\n return this._2DPathCsgs;\r\n\r\n this._2DPathCsgs = [];\r\n\r\n \r\n\r\n return this._2DPathCsgs;\r\n }\r\n //#endregion\r\n\r\n protected get Has2DPath() { return this._2DModelingList.length > 0; }\r\n private _workerCalcedGeom: Geom3 = null;//worker计算后,暂时存入到这里\r\n private _async2DPathIng = false;\r\n get Async2DPathing() { return this._async2DPathIng; }\r\n override GoodBye(): void\r\n {\r\n super.GoodBye();\r\n TerminateCSGTask({ key: this });\r\n }\r\n\r\n private promise2DPath: (res: boolean) => void;\r\n async Load2DPathIng()\r\n {\r\n return new Promise((res) =>\r\n {\r\n this.promise2DPath = res;\r\n });\r\n }\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 || this.DrillLock || this.isDrillAssociationLock)\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 || this.DrillLock || this.isDrillAssociationLock)\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 \r\n\r\n //绘制排版面时使用的颜色\r\n private get PlaceColor() { return this._Color === 8 ? 9 : this._Color; }\r\n //排版面网格\r\n private 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 ? -1e-3 : this.thickness + 1e-3);\r\n let mesh = new Mesh(shapeGeom, ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor));\r\n return mesh;\r\n }\r\n\r\n //大孔面网格\r\n private GetBigHoleFace(): Mesh\r\n {\r\n let shapeGeom = new ShapeGeometry(this.contourCurve.Shape);\r\n let isBack = this._BoardProcessOption[EBoardKeyList.BigHole] === FaceDirection.Back;\r\n shapeGeom.applyMatrix4(this.contourCurve.OCSNoClone);\r\n shapeGeom.translate(0, 0, isBack ? -1e-3 : this.thickness + 1e-3);\r\n let mesh = new Mesh(shapeGeom, ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor));\r\n return mesh;\r\n }\r\n\r\n //偏移缓存\r\n OffsetPathCache = new Map();\r\n\r\n /**\r\n * 根据板的信息修改绘制的实体\r\n * 1.非拆单板 灰色\r\n * 2.纹路 开门方向纹路\r\n * 3.二维 三维刀路\r\n */\r\n private UpdateDrawObjectByBoardInfo(renderType: RenderType, obj: Object3D)\r\n {\r\n if (!obj) return;\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)// renderType === RenderType.Physical(理论上只有这个)\r\n (obj as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;//灰色半透明(会不会有bug?)\r\n }\r\n\r\n //线框及概念且可拆单\r\n if (([RenderType.Wireframe, RenderType.Conceptual, RenderType.Print].includes(renderType)) && this.IsChaiDan)\r\n {\r\n //绘制纹路\r\n if (HostApplicationServices.showLines && renderType !== RenderType.Print)\r\n obj.add(...this.GetLinesDir());\r\n //绘制开门方向纹路\r\n if (HostApplicationServices.showOpenDirLines && this.OpenDir !== BoardOpenDir.None)\r\n obj.add(...this.GetLinesOpenDir());\r\n }\r\n\r\n if (this.objectId)//二维和三维刀路\r\n {\r\n //三维刀路\r\n let path3d = this.Get3DPathDrawObject();\r\n if (path3d.parent)\r\n obj.children.push(path3d);\r\n else\r\n obj.add(path3d);\r\n\r\n //二维刀路\r\n this.Get2DPathCsgs();\r\n let path2d = this._2DPathDrawObject;\r\n if (path2d && HostApplicationServices.show2DPathLine)\r\n {\r\n if (path2d.parent)\r\n obj.children.push(path2d);\r\n else\r\n obj.add(path2d);\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 || renderType === RenderType.BigHoleFace)\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 //封边检查(为obj 对象添加封边检查的曲线)\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 cus[i].ColorIndex = parseInt(color) ?? 7;\r\n let l = cus[i].GetDrawObjectFromRenderType(RenderType.Wireframe) as LineSegments;\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\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\r\n let oldOcs = this.OCS;\r\n\r\n super.MoveStretchPoints(originIndexList, vec);\r\n\r\n if (!this.Id) return;\r\n\r\n arraySortByNumber(mIndexList);\r\n let ocsInv = this.OCSInv;\r\n let localVec = TransformVector(vec.clone(), ocsInv);\r\n let offset = 0;\r\n let icount = mIndexList.length;\r\n let i = 0;\r\n\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(ocsInv);\r\n }\r\n\r\n this.Clear2DPathCache();\r\n this.Clear3DPathCache();\r\n this.Update(UpdateDraw.Geometry);\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 frustum?: Frustum,\r\n ): Vector3[]\r\n {\r\n let pts = super.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum);\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.Clear2DPathCache();\r\n this.Clear3DPathCache();\r\n\r\n if (ver > 10)\r\n this._CustomNumber = file.Read();\r\n else\r\n this._CustomNumber = null;\r\n\r\n this._KnifePolylineMap.clear();\r\n if (ver > 11)\r\n {\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let id = file.Read();\r\n let pl = file.ReadObject() as Polyline;\r\n this._KnifePolylineMap.set(id, pl);\r\n }\r\n }\r\n\r\n // if (this.width === 0 || this.height === 0) //板件变成0长度,无法绘制\r\n // this._isErase = true;\r\n\r\n if (ver > 12)\r\n {\r\n let count = file.Read();\r\n this.RelativeHandle.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.RelativeHandle.push(objId);\r\n }\r\n }\r\n\r\n const processData = this._BoardProcessOption;\r\n if (ver > 13)\r\n {\r\n processData.edgeRemarkUp = file.Read();\r\n processData.edgeRemarkDown = file.Read();\r\n processData.edgeRemarkLeft = file.Read();\r\n processData.edgeRemarkRight = file.Read();\r\n let count = file.Read();\r\n processData.highBoardEdgeRemark = file.ReadArray(count);\r\n }\r\n\r\n this._DrillAssociationLock.clear();\r\n if (ver > 14)\r\n {\r\n this._DrillLock = file.Read();\r\n\r\n //读取关联排钻锁映射\r\n const size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n const id = file.ReadObjectId();\r\n if (id)\r\n this._DrillAssociationLock.add(id);\r\n }\r\n }\r\n }\r\n\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(15);\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 file.Write(this._CustomNumber);\r\n\r\n file.Write(this._KnifePolylineMap.size);\r\n for (let [id, pl] of this._KnifePolylineMap)\r\n {\r\n file.Write(id);\r\n file.WriteObject(pl);\r\n }\r\n\r\n file.Write(this.RelativeHandle.length);\r\n for (let id of this.RelativeHandle)\r\n file.WriteObjectId(id);\r\n\r\n const processData = this._BoardProcessOption;\r\n file.Write(processData.edgeRemarkUp);\r\n file.Write(processData.edgeRemarkDown);\r\n file.Write(processData.edgeRemarkLeft);\r\n file.Write(processData.edgeRemarkRight);\r\n file.Write(processData.highBoardEdgeRemark.length);\r\n for (let r of processData.highBoardEdgeRemark)\r\n {\r\n file.Write(r);\r\n }\r\n\r\n //ver>14\r\n {\r\n file.Write(this._DrillLock);\r\n const count = this._DrillAssociationLock.size;\r\n file.Write(count);\r\n for (const id of this._DrillAssociationLock)\r\n {\r\n file.WriteObjectId(id);\r\n }\r\n }\r\n }\r\n}\r\n\r\n//解析新的板的边映射到旧板边的映射情况\r\nfunction ParseNewBr2OldBr_EdgeMap(newBr: Board, oldBr: Board, oldBrOcsInv: Matrix4): number[]\r\n{\r\n let newBrCu = newBr.ContourCurve;\r\n let oldBrCu = oldBr.ContourCurve;\r\n\r\n let indexMap: number[] = [];\r\n\r\n //矩阵对齐\r\n let m = newBr.OCS.premultiply(oldBrOcsInv);\r\n\r\n for (let i = 0; i < newBrCu.EndParam; i++)\r\n {\r\n let p = newBrCu.GetPointAtParam(i + 0.5).applyMatrix4(m);\r\n\r\n let cp = oldBrCu.GetClosestPointTo(p, false);\r\n let cparam = oldBrCu.GetParamAtPoint2(cp);\r\n indexMap.push(Math.floor(cparam));\r\n }\r\n\r\n return indexMap;\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, Geometry, Line, LineBasicMaterial, LineSegments, Matrix4, Object3D, Vector3 } from \"three\";\r\nimport { FaceDirection } from \"../Add-on/DrawDrilling/DrillType\";\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 { Shape2 } from \"../DatabaseServices/Shape2\";\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\nexport function FastExtrudeEdgeGeometryOfShape(shape: Shape2, z0: number, z1: number, divCount = 6, optArc = true, coords: number[] = [])\r\n{\r\n let ptss = [shape.getPoints(divCount, optArc)];\r\n for (let hole of shape.holes)\r\n ptss.push((hole as Shape2).getPoints(divCount, optArc));\r\n\r\n for (let pts of ptss)\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, z0, nextp.x, nextp.y, z0);\r\n //顶面\r\n coords.push(p.x, p.y, z1, nextp.x, nextp.y, z1);\r\n\r\n if (p[\"_mask_\"])//侧面\r\n coords.push(p.x, p.y, z0, p.x, p.y, z1);\r\n }\r\n\r\n return coords;\r\n}\r\n\r\nlet tempP = new Vector3;\r\n//这个代码天生不和Mesh对齐,因为独立坐标系的原因,槽的坐标系可能和主题的坐标系不一致导致的\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 { 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, ZeroVec, equaln, equalv2, equalv3 } 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 { GangDrillType } from \"./CylinderHole\";\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\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 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.OCSNoClone);\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.OCSNoClone); });\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.GetFirstDeriv(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\r\n ClearDraw(): this\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 return super.ClearDraw();\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\r\n if (ver > 3)\r\n this.type = file.Read();\r\n else\r\n this.type = GangDrillType.Ljg;\r\n\r\n //回退版本5弃用\r\n if (ver > 4)\r\n {\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n file.ReadSoftObjectId();\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(5);\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 file.Write(this.type);\r\n\r\n //ver= 5 弃用\r\n file.Write(0);\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 ((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\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 ChangePlListStartPt(plList);\r\n //对多段线进行排序,按最起始点远近排序\r\n SortPlByStartPt(plList);\r\n\r\n let result: Polyline[] = [];\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 j = 0; j < cuPtsBul.pts.length; j++)\r\n {\r\n //坐标系对齐\r\n let p = cuPtsBul.pts[j];\r\n p.copy(AsVector2(AsVector3(p).applyMatrix4(alMat)));\r\n firstPl.LineData.push({ pt: p, bul: cuPtsBul.buls[j] });\r\n }\r\n }\r\n }\r\n result.push(firstPl);\r\n\r\n for (let pl of result)\r\n pl.RemoveRepeatPos(1e-3);\r\n\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)\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, rectInfo: IRectInfo, dist: number)\r\n{\r\n if (!rectInfo || equaln(dist, 0)) return;\r\n\r\n let box = rectInfo.box;\r\n let size = rectInfo.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(rectInfo.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(rectInfo.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(rectInfo.OCS);\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline, IsRect, MergeCurvelist, equalCurve } 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 { CanDrawHoleFuzz, 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 { BoolOpeartionType, isTargetCurInOrOnSourceCur } from \"../BoolOperateUtils\";\r\nimport { GetBoardContour } 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, redundancyKnif = 0): 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 let hasRedK = false;\r\n if ((!isOut || offsetDist >= knifRadius) && rectInfo)\r\n {\r\n hasRedK = true;\r\n offsetDist += knifRadius * 2 - redundancyKnif;\r\n }\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 && offsetDist > knifRadius)\r\n {\r\n const rectMinLengthHalf = Math.min(rectInfo.size.x, rectInfo.size.y) / 2;\r\n //如果最后一个矩形最小边区间一半小于刀半径减去冗余值的一半,则偏移到中心处切一次\r\n if (!equaln(offsetDist, rectMinLengthHalf, 1e-5) && offsetDist - rectMinLengthHalf - 1e-5 < knifRadius - redundancyKnif / 2)\r\n {\r\n retCus.push(...GetOffsetCurves(outline, rectMinLengthHalf * dir, rectInfo));\r\n }\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 =>\r\n {\r\n let ipts = h.Curve.IntersectWith2(c, 0);\r\n return ipts.length > 0 || h.ContainerCurve(c, false, ipts);\r\n });\r\n\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\r\n //testcode\r\n // let reg = new Region(shapeMg).Clone();\r\n // let reg2 = new Region(holesMg).Clone();\r\n // TestDraw(reg, 1);\r\n // TestDraw(reg2, 2);\r\n\r\n shapeMg.BoolOper(holesMg, BoolOpeartionType.Subtract);\r\n\r\n // let reg3 = new Region(shapeMg).Clone();\r\n // TestDraw(reg3, 3);\r\n\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, rk = 0)\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 (m.shape.Holes.length === 0 && 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, rk);\r\n }\r\n\r\n /**\r\n * 计算走刀路径\r\n */\r\n CalcPath(modelings: IModeling[], br: Board, rk = 0): 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, rk));\r\n }\r\n return cus;\r\n }\r\n\r\n //获取造型走刀\r\n GetModelFeedPath(br: { Thickness: number, ContourCurve: ExtrudeContourCurve; }, modeling: IModeling, redundancyKnif = 0): 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 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, redundancyKnif);\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 rectInfo = IsRect(shape.Outline.Curve);\r\n if (rectInfo)\r\n {\r\n let box = rectInfo.box;\r\n let size = rectInfo.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(rectInfo.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 (m.shape.Holes.length === 0 && 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 (m.shape.Holes.length === 0 && 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\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 let param = brCon.GetParamAtPoint(mp);\r\n\r\n let curveOnContour = false;\r\n if (brCon.ParamOnCurve(param))\r\n {\r\n //#I7MYN9 在长的槽里面,我们防止它加长,短的槽就无所谓了\r\n if (c.Length > 100)\r\n {\r\n let curve = (brCon as Polyline).GetCurveAtParam(param);\r\n curveOnContour = curve.PtOnCurve(c.GetPointAtParam(0.2), 0.1) && curve.PtOnCurve(c.GetPointAtParam(0.8), 0.1);\r\n }\r\n else\r\n curveOnContour = true;\r\n }\r\n\r\n if (curveOnContour)\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\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\n\r\nexport function GetModelingFromCustomDrill(br: Board)\r\n{\r\n let normal = br.Normal;\r\n let outline = GetBoardContour(br);\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 - CanDrawHoleFuzz)\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 < CanDrawHoleFuzz)\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.GetFirstDeriv(0).normalize().multiplyScalar(thickness);\r\n shape.Position = shape.Position.add(vec);\r\n\r\n //侧面造型仅在多段线直线上\r\n let cu = (outline as Polyline).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 { 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.GetFirstDeriv(1).multiplyScalar(100)), curP.clone());\r\n }\r\n if (c2 instanceof Arc)\r\n c2 = new Line(curP.clone(), curP.clone().add(c2.GetFirstDeriv(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.GetFirstDeriv(0), c2.GetFirstDeriv(0))) continue;\r\n\r\n //计算提刀部分:\r\n //向量与平分线,参照倒角代码\r\n let derv1 = c1.GetFirstDeriv(0).normalize();\r\n let derv2 = c2.GetFirstDeriv(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 { Vector2 } from \"three\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\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 { IContourData } from \"../Production/Convert2PtsBul\";\r\nimport { AsVector2, equaln, equalv2 } from \"./GeUtils\";\r\n\r\n/**\r\n * 转换成多段线点表,并且将圆弧打断(大于1/4的话) API仅用于开料生产\r\n * @param cu 多段线或者圆弧\r\n * @param [isOutline=true] 如果为外部轮廓,则将其转换为逆时针\r\n * @param [isSplite=true] 如果为true,则对大圆弧进行切割\r\n * @returns 点表+凸度表\r\n */\r\nexport function ConverToPolylineAndSplitArc(cu: Polyline | Circle, isOutline = true, isSplite = true): IContourData\r\n{\r\n let ptsBuls: { pts: Vector2[]; buls: number[]; };\r\n if (cu instanceof Circle)\r\n {\r\n let pl = ConverCircleToPolyline(cu);\r\n ptsBuls = pl.PtsBuls;\r\n }\r\n else\r\n {\r\n if (isOutline && cu.IsClose && cu.Normal.z * cu.Area2 < 0)\r\n cu.Reverse();\r\n if (isSplite)\r\n ptsBuls = SplitePolylineAtArc(cu);\r\n else\r\n ptsBuls = cu.PtsBuls;\r\n }\r\n let ocs = cu.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\nfunction ConverCircleToPolyline(cir: Circle): Polyline\r\n{\r\n let arcs = cir.GetSplitCurves([0, 0.25, 0.5, 0.75]);\r\n let pl = new Polyline();\r\n pl.OCS = cir.OCSNoClone;\r\n for (let arc of arcs)\r\n pl.Join(arc);\r\n return pl;\r\n}\r\n\r\nconst SPLITBUL = Math.tan(Math.PI / 8);\r\nfunction GetSpliteCount(allAngle: number)\r\n{\r\n return Math.ceil(Math.abs(allAngle) / Math.PI * 2);\r\n}\r\n\r\n/** 打断多段线超过1/4圆的圆弧*/\r\nfunction SplitePolylineAtArc(cu: Polyline): IContourData\r\n{\r\n let ptsBuls = cu.PtsBuls;\r\n let ocsInv = cu.OCSInv;\r\n\r\n let result: IContourData = { pts: [], buls: [] };\r\n\r\n if (ptsBuls.pts.length === 0)\r\n return result;\r\n\r\n for (let i = 0; i < ptsBuls.buls.length - 1; i++)\r\n {\r\n let bul = ptsBuls.buls[i];\r\n if (Math.abs(bul) > SPLITBUL + 1e-8)\r\n {\r\n let allAngle = Math.atan(bul) * 4;\r\n let splitCount = GetSpliteCount(allAngle);\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let paramDiv = 1 / splitCount;\r\n let newBul = Math.tan((allAngle / splitCount) / 4);\r\n for (let i = 0; i < splitCount; i++)\r\n {\r\n let param = i * paramDiv;\r\n let p = arc.GetPointAtParam(param).applyMatrix4(ocsInv);\r\n let p2 = AsVector2(p);\r\n //暂时不处理0长度段\r\n if (true || result.pts.length === 0 || !equalv2(p2, arrayLast(result.pts), 1e-2))\r\n {\r\n result.pts.push(p2);\r\n result.buls.push(newBul);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n //暂时不处理0长度段\r\n if (true || result.pts.length === 0 || !equalv2(ptsBuls.pts[i], arrayLast(result.pts), 1e-2))\r\n {\r\n result.pts.push(ptsBuls.pts[i]);\r\n result.buls.push(ptsBuls.buls[i]);\r\n }\r\n }\r\n }\r\n\r\n result.pts.push(arrayLast(ptsBuls.pts));\r\n result.buls.push(arrayLast(ptsBuls.buls));\r\n return result;\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 \"../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 { 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 * 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 //del_ue_exp_start\r\n clipperLib.NativeClipperLibRequestedFormat.WasmOnly\r\n //del_ue_exp_end\r\n //del_ue_exp_start\r\n //del_ue_exp_end 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 { 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 PathTranslate(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 PathTranslate_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 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, PathTranslate_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\nconst TEXT_BOX = NestCache.CreatePath(570, 110);\r\n\r\n/**\r\n * 分析文字放置位置\r\n * @param contour 轮廓点表\r\n * @param holes 网洞点表\r\n * @param [textBox=TEXT_BOX] 标签盒子\r\n * @param [allowReturnNullPos=false] 允许返回null 当没有找到合适的位置返回null\r\n * @returns Vector3\r\n */\r\nexport function ParseRegionTextPos(contour: Point[], holes: (Point[])[], textBox = TEXT_BOX, allowReturnNullPos = false): Vector3 | undefined\r\n{\r\n let hasTextBox = true;\r\n let path = new Path(contour);\r\n let nfps: Polyline[] = path.GetInsideNFP(textBox)?.map(nfp => Path2Polyline(PathTranslate_Self(PathScale(nfp, 1e-4), path.OrigionMinPoint.x, path.OrigionMinPoint.y))); //可能无法获得\r\n if (!nfps || nfps.length === 0)\r\n {\r\n if (allowReturnNullPos) return;\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(textBox);\r\n let nfp = nfps[Max(nfps, (n1, n2) => Area(n2) > Area(n1))];\r\n\r\n let pl = Path2Polyline(PathTranslate_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 {\r\n //允许返回空的点 因为无法放置\r\n if (allowReturnNullPos) return;\r\n resShapes = shapes;\r\n }\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 += textBox.Size.x * 0.5;\r\n p.y += textBox.Size.y * 0.5;\r\n }\r\n return p;\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 { Box2, Vector2, MathUtils } from \"three\";\r\nimport { doIntersect } from \"./DoIntersect\";\r\n\r\n/*\r\n功能:盒子相交检测,快速判断正矩形(未旋转的)与直线和圆是否有交点.\r\n1.使用裁剪算法优化判断速度.\r\n参考:https://zh.wikipedia.org/wiki/%E7%A7%91%E6%81%A9%EF%BC%8D%E8%8B%8F%E6%B3%BD%E5%85%B0%E7%AE%97%E6%B3%95\r\n2.使用快速判断直线是否有交点提高速度.\r\n参考:doIntersect方法.\r\n*/\r\n\r\nexport interface Vec2\r\n{\r\n x: number;\r\n y: number;\r\n}\r\n\r\nconst LEFT = 1, RIGHT = 2, DOWN = 4, TOP = 8;\r\n// Compute the bit code for a point (x, y) using the clip rectangle\r\n// bounded diagonally by (xmin, ymin), and (xmax, ymax)\r\n\r\n// ASSUME THAT xmax, xmin, ymax and ymin are global constants.\r\nfunction ComputeOutCode(x: number, y: number, box: Box2): number\r\n{\r\n let code = 0;\r\n if (x < box.min.x) // to the left of clip window\r\n code |= LEFT;\r\n else if (x > box.max.x) // to the right of clip window\r\n code |= RIGHT;\r\n\r\n if (y < box.min.y) // below the clip window\r\n code |= DOWN;\r\n else if (y > box.max.y) // above the clip window\r\n code |= TOP;\r\n\r\n return code;\r\n}\r\n\r\n\r\n/**\r\n * 盒子相交测试,快速判断盒子和直线或者圆是否有相交\r\n */\r\nexport class BoxCheckIntersect\r\n{\r\n p1: Vec2;\r\n p2: Vec2;\r\n p3: Vec2;\r\n p4: Vec2;\r\n box: Box2;\r\n constructor(box: Box2)\r\n {\r\n this.p1 = box.min;\r\n this.p3 = box.max;\r\n this.p2 = new Vector2(this.p3.x, this.p1.y);\r\n this.p4 = new Vector2(this.p1.x, this.p3.y);\r\n\r\n this.box = box;\r\n }\r\n\r\n //直线与盒子相交,或者被盒子包含. Cohen–Sutherland裁剪算法\r\n IsIntersectLine(p1: Vec2, p2: Vec2): boolean\r\n {\r\n let code1 = ComputeOutCode(p1.x, p1.y, this.box);\r\n let code2 = ComputeOutCode(p2.x, p2.y, this.box);\r\n\r\n //按位AND不为0:两个点共享一个外部区域(LEFT,RIGHT,TOP或BOTTOM),因此两个点都必须在窗口外部\r\n if (code1 & code2) return false;\r\n\r\n let code = code1 | code2;\r\n if (code1 === 0 || code2 === 0 || code === 3 || code === 12)//点1点2在矩形内,或者竖直贯穿,水平贯穿\r\n return true;\r\n\r\n if ((code & TOP) && doIntersect(p1, p2, this.p3, this.p4))\r\n return true;\r\n if ((code & LEFT) && doIntersect(p1, p2, this.p1, this.p4))\r\n return true;\r\n if ((code & RIGHT) && doIntersect(p1, p2, this.p2, this.p3))\r\n return true;\r\n if ((code & DOWN) && doIntersect(p1, p2, this.p3, this.p1))\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n //ref https://yal.cc/rectangle-circle-intersection-test/\r\n IsIntersectCircle(cen: Vec2, radius: number): boolean\r\n {\r\n let nearestX = MathUtils.clamp(cen.x, this.box.min.x, this.box.max.x);\r\n let nearestY = MathUtils.clamp(cen.y, this.box.min.y, this.box.max.y);\r\n return ((nearestX - cen.x) ** 2 + (nearestY - cen.y) ** 2) <= radius ** 2;\r\n }\r\n}\r\n\r\n//https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm\r\nfunction CohenSutherlandLineClip(box: Box2, p1: Vec2, p2: Vec2)\r\n{\r\n let [x0, y0] = [p1.x, p1.y];\r\n let [x1, y1] = [p2.x, p2.y];\r\n\r\n let xmin = box.min.x;\r\n let ymin = box.min.y;\r\n\r\n let xmax = box.max.x;\r\n let ymax = box.max.y;\r\n\r\n // compute outcodes for P0, P1, and whatever point lies outside the clip rectangle\r\n let outcode0 = ComputeOutCode(x0, y0, box);\r\n let outcode1 = ComputeOutCode(x1, y1, box);\r\n let accept = false;\r\n\r\n while (true)\r\n {\r\n if (!(outcode0 | outcode1))\r\n {\r\n // bitwise OR is 0: both points inside window; trivially accept and exit loop\r\n accept = true;\r\n break;\r\n }\r\n else if (outcode0 & outcode1)\r\n {\r\n // bitwise AND is not 0: both points share an outside zone (LEFT, RIGHT, TOP,\r\n // or BOTTOM), so both must be outside window; exit loop (accept is false)\r\n break;\r\n }\r\n else\r\n {\r\n // failed both tests, so calculate the line segment to clip\r\n // from an outside point to an intersection with clip edge\r\n let x: number, y: number;\r\n\r\n // At least one endpoint is outside the clip rectangle; pick it.\r\n let outcodeOut = outcode1 > outcode0 ? outcode1 : outcode0;\r\n\r\n // Now find the intersection point;\r\n // use formulas:\r\n // slope = (y1 - y0) / (x1 - x0)\r\n // x = x0 + (1 / slope) * (ym - y0), where ym is ymin or ymax\r\n // y = y0 + slope * (xm - x0), where xm is xmin or xmax\r\n // No need to worry about divide-by-zero because, in each case, the\r\n // outcode bit being tested guarantees the denominator is non-zero\r\n if (outcodeOut & TOP)\r\n { // point is above the clip window\r\n x = x0 + (x1 - x0) * (ymax - y0) / (y1 - y0);\r\n y = ymax;\r\n }\r\n else if (outcodeOut & DOWN)\r\n { // point is below the clip window\r\n x = x0 + (x1 - x0) * (ymin - y0) / (y1 - y0);\r\n y = ymin;\r\n }\r\n else if (outcodeOut & RIGHT)\r\n { // point is to the right of clip window\r\n y = y0 + (y1 - y0) * (xmax - x0) / (x1 - x0);\r\n x = xmax;\r\n }\r\n else if (outcodeOut & LEFT)\r\n { // point is to the left of clip window\r\n y = y0 + (y1 - y0) * (xmin - x0) / (x1 - x0);\r\n x = xmin;\r\n }\r\n\r\n // Now we move outside point to intersection point to clip\r\n // and get ready for next pass.\r\n if (outcodeOut === outcode0)\r\n {\r\n x0 = x;\r\n y0 = y;\r\n outcode0 = ComputeOutCode(x0, y0, box);\r\n }\r\n else\r\n {\r\n x1 = x;\r\n y1 = y;\r\n outcode1 = ComputeOutCode(x1, y1, box);\r\n }\r\n }\r\n }\r\n}\r\n","/**\r\n * 删除数组中指定的元素,返回数组本身\r\n * @param {Array} arr 需要操作的数组\r\n * @param {*} el 需要移除的元素\r\n */\r\nexport function arrayRemove(arr: Array, el: T): Array\r\n{\r\n let j = 0;\r\n for (let i = 0, l = arr.length; i < l; i++)\r\n {\r\n if (arr[i] !== el)\r\n {\r\n arr[j++] = arr[i];\r\n }\r\n }\r\n arr.length = j;\r\n\r\n return arr;\r\n}\r\n\r\n\r\nexport function arrayRemoveOnce(arr: Array, el: T): Array\r\n{\r\n let index = arr.indexOf(el);\r\n if (index !== -1)\r\n arr.splice(index, 1);\r\n return arr;\r\n}\r\n\r\n/**\r\n * 删除通过函数校验的元素\r\n * @param {(e: T) => boolean} checkFuntion 校验函数\r\n */\r\nexport function arrayRemoveIf(arr: Array, checkFuntion: (e: T) => boolean): Array\r\n{\r\n let j = 0;\r\n for (let i = 0, l = arr.length; i < l; i++)\r\n {\r\n if (!checkFuntion(arr[i]))\r\n {\r\n arr[j++] = arr[i];\r\n }\r\n }\r\n arr.length = j;\r\n\r\n return arr;\r\n}\r\n\r\nexport function arrayFirst(arr: Array): T\r\n{\r\n return arr[0];\r\n}\r\n\r\nexport function arrayLast(arr: { [key: number]: T, length: number; }): T\r\n{\r\n return arr[arr.length - 1];\r\n}\r\n\r\n/**\r\n * 根据数值从小到大排序数组\r\n * @param {Array} arr\r\n * @returns {Array} 返回自身\r\n */\r\nexport function arraySortByNumber(arr: Array): Array\r\n{\r\n arr.sort(sortNumberCompart);\r\n return arr;\r\n}\r\n\r\n/**\r\n * 对排序好的数组进行去重操作\r\n * @param {(e1, e2) => boolean} [checkFuction] 校验对象相等函数\r\n * @returns {Array} 返回自身\r\n */\r\nexport function arrayRemoveDuplicateBySort(arr: Array, checkFuction: (e1: T, e2: T) => boolean = checkEqual): Array\r\n{\r\n if (arr.length < 2) return arr;\r\n let j = 1;\r\n for (let i = 1, l = arr.length; i < l; i++)\r\n if (!checkFuction(arr[j - 1], arr[i]))\r\n arr[j++] = arr[i];\r\n arr.length = j;\r\n return arr;\r\n}\r\n\r\n//原地更新数组,注意这个函数并不会比map快.\r\nexport function arrayMap(arr: Array, mapFunc: (v: T) => T): Array\r\n{\r\n for (let i = 0, count = arr.length; i < count; i++)\r\n arr[i] = mapFunc(arr[i]);\r\n return arr;\r\n}\r\n\r\nfunction sortNumberCompart(e1: any, e2: any)\r\n{\r\n return e1 - e2;\r\n}\r\n\r\nfunction checkEqual(e1: any, e2: any): boolean\r\n{\r\n return e1 === e2;\r\n}\r\n\r\n/**\r\n * 改变数组的值顺序\r\n * @param arr 需要改变初始值位置的数组\r\n * @param index //将index位置以后的值放到起始位置\r\n */\r\nexport function changeArrayStartIndex(arr: T[], index: number): T[]\r\n{\r\n arr.unshift(...arr.splice(index));\r\n return arr;\r\n}\r\n\r\nexport function equalArray(a: T[], b: T[], checkF = checkEqual)\r\n{\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n for (var i = 0; i < a.length; ++i)\r\n if (!checkF(a[i], b[i])) return false;\r\n return true;\r\n}\r\n\r\nexport function arrayClone(arr: T[]): T[]\r\n{\r\n return arr.slice();\r\n}\r\n\r\n//https://jsperf.com/merge-array-implementations/30\r\nexport function arrayPushArray(arr1: T[], arr2: T[]): T[]\r\n{\r\n let arr1Length = arr1.length;\r\n let arr2Length = arr2.length;\r\n arr1.length = arr1Length + arr2Length;\r\n for (let i = 0; i < arr2Length; i++)\r\n arr1[arr1Length + i] = arr2[i];\r\n\r\n return arr1;\r\n}\r\n\r\nexport function arraySum(arr: number[])\r\n{\r\n let sum = 0;\r\n for (let n of arr) sum += n;\r\n return sum;\r\n}\r\n\r\nexport function FilterSet(s: Set, fn: (el: T) => boolean): Set\r\n{\r\n let ns = new Set();\r\n for (let el of s)\r\n {\r\n if (fn(el))\r\n ns.add(el);\r\n }\r\n return ns;\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box2, Vector2, Vector3 } from \"three\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { InsertSortedIndex, RangeUnion } from \"../../DatabaseServices/Room/ParseService/RangeUtils\";\r\nimport { BoxCheckIntersect } from '../../Geometry/CheckIntersect';\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { arrayPushArray, arraySortByNumber } from \"../../Nest/Common/ArrayExt\";\r\nimport { Max } from '../../Nest/Common/Util';\r\nimport { FuzzyFactory } from '../../csg/core/FuzzyFactory';\r\n\r\n/** [area maxXIndex maxYIndex xCount yCount,width,height] */\r\nexport type RectData = [number, number, number, number, number, number, number];\r\n\r\n/**\r\n * 获取面积最大的矩形\r\n * @param rects\r\n * @returns\r\n */\r\nfunction GetMaxAreaFn(rects: RectData[]): number\r\n{\r\n return Max(rects, (t1, t2) => t2[0] > t1[0]);\r\n}\r\n\r\nfunction GetMaxWidthFn(rects: RectData[]): number\r\n{\r\n return Max(rects, (t1, t2) => t2[5] === t1[5] ? t2[6] > t1[6] : t2[5] > t1[5]);\r\n}\r\n\r\nfunction GetMaxHeightFn(rects: RectData[]): number\r\n{\r\n return Max(rects, (t1, t2) => t2[6] === t1[6] ? t2[6] > t1[6] : t2[5] > t1[5]);\r\n}\r\n\r\n\r\n//最大内接矩形\r\n//1.分析盒子\r\n// 1.默认我们使用顶点坐标进行一维展开\r\n// 2.当存在斜线时, 我们精确展开(当跨度大于(100/50)时,我们精确产开另一条轴)\r\n// (1).获取需要精确展开的区间 随后合并区间\r\n// (2).对区间进行展开数值,使用二分搜索,如果在已有的顶点附近,则不进行增项\r\n\r\n//2.标记轮廓内的矩形\r\n// (1).我们收集多边形所有的斜线,与矩形盒子求交,如果相交,则矩形盒子无效化\r\n// (2).矩形终点在轮廓内(使用单条射线检测,因为我们始终在端点增加锚点的关系 我们似乎不会在顶点位置得到(交点? 稳妥起见 实现标准的射线检测算法)\r\n\r\n//3.获取最大内接矩形\r\n// 迭代开始\r\n// 动态规划 存储每个方块得到的最大矩形\r\n// 获取最大的(根据规则)\r\n// 对池子里的结果进行生存选择(如果被占用了方块,则该结果已经不可用)\r\n// 取剩下可用的最大的(因为我们已经是在合理的情况下拿最大的了,所以不需要在重新迭代)\r\n// 重复迭代\r\n\r\n\r\n/**\r\n * @example\r\n *\r\n * //1. 设置过滤条件(舍弃掉一些无用的矩形)\r\n * let lir = new LargestInteriorRectangle;\r\n * lir.MinWidth = 200;//设置最小可以接受的矩形宽度\r\n * lir.MinHeight = 200;//设置最小可以接受的矩形宽度\r\n * lir.MinArea = 200 * 200;//设置最小可以接受的矩形面积\r\n *\r\n * //除了变量 也可以设置过滤函数\r\n * //例如:\r\n * lir.FilterRectFn = (w,h)=> !(w>500 || h>500) //这样将对长或者宽不足500的矩形板过滤(舍弃)\r\n *\r\n * //2. 可以设置优先模式,默认提供了面积优先,你也可以使用宽度优先或者高度优先,或许默认规则可能不好用,可以自定义传入自定义函数.\r\n * lir.GetMaxRectIndexFn = LargestInteriorRectangle.GetMaxAreaFn; //或者 LargestInteriorRectangle.GetMaxWidthFn / LargestInteriorRectangle.GetMaxHeightFn\r\n *\r\n * //3. 你已经设置好解析器,你现在可以进行解析了\r\n * let rects = lir.ParseLir([ new Vector3(0,0,0) , new Vector3(100,0,0) , new Vector3(50,100,0)]) //首尾不需要重复,首尾重复可能造成错误,程序不再校验\r\n *\r\n */\r\nexport class LargestInteriorRectangle\r\n{\r\n MinWidth = 100;\r\n MinHeight = 100;\r\n MinArea = 200 * 200;\r\n\r\n /** 可以自定义过滤函数,以便过滤掉某些不需要的矩形,当返回true时,我们会过滤它 */\r\n FilterRectFn: (width: number, height: number) => boolean;\r\n\r\n GetMaxRectIndexFn: (rects: RectData[]) => number = GetMaxAreaFn;\r\n\r\n\r\n static GetMaxAreaFn = GetMaxAreaFn;\r\n static GetMaxWidthFn = GetMaxWidthFn;\r\n static GetMaxHeightFn = GetMaxHeightFn;\r\n\r\n constructor()\r\n {\r\n }\r\n\r\n /**\r\n * 分析最大内接矩形\r\n * @param polygonPts 多边形点表,首尾不要相等\r\n */\r\n ParseLIR(polygonPts: Vector2[]): Box2[]\r\n {\r\n //端点列表\r\n let xs: number[] = [];\r\n let ys: number[] = [];\r\n\r\n let xset = new Set();\r\n let yset = new Set();\r\n\r\n //需要展开的范围\r\n let xranges: [number, number][] = [];\r\n let yranges: [number, number][] = [];\r\n\r\n let polygonBox = new Box2().setFromPoints(polygonPts);\r\n\r\n let vec = new Vector2;\r\n\r\n let klines: [Vector2, Vector2][] = []; //所有的斜线\r\n // let linesP: [Vector2, Vector2][] = []; //所有的线点\r\n // let linesFb = new Flatbush(pts.length);//所有的线的索引\r\n\r\n let fuzzX = new FuzzyFactory(1, 0.1);\r\n let fuzzY = new FuzzyFactory(1, 0.1);\r\n\r\n for (let i = 0; i < polygonPts.length; i++)\r\n {\r\n let p = polygonPts[i];\r\n let p2 = polygonPts[FixIndex(i + 1, polygonPts)];\r\n\r\n // linesP.push([p, p2]);\r\n // let box = new Box2().setFromPoints([p, p2]);\r\n // linesFb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n\r\n vec.subVectors(p2, p);\r\n\r\n //收集端点\r\n let x = fuzzX.lookupOrCreate([p.x], p.x);\r\n if (!xset.has(x))\r\n {\r\n xs.push(x);\r\n xset.add(x);\r\n }\r\n\r\n let y = fuzzY.lookupOrCreate([p.y], p.y);\r\n if (!yset.has(y))\r\n {\r\n ys.push(y);\r\n yset.add(y);\r\n }\r\n\r\n //展开斜线 每20分段\r\n if (Math.abs(vec.x) > 20 && Math.abs(vec.y) > 20)\r\n {\r\n if (Math.abs(vec.x) > 20)\r\n yranges.push(vec.y > 0 ? [p.y, p2.y] : [p2.y, p.y]);\r\n\r\n if (Math.abs(vec.y) > 20)\r\n xranges.push(vec.x > 0 ? [p.x, p2.x] : [p2.x, p.x]);\r\n }\r\n\r\n //收集所有的斜线\r\n if (!equaln(vec.x, 0, 0.1) && !equaln(vec.y, 0, 0.1))\r\n klines.push([p, p2]);\r\n }\r\n\r\n // linesFb.finish();\r\n\r\n //合并展开区间\r\n xranges.sort((a, b) => a[0] - b[0]);\r\n yranges.sort((a, b) => a[0] - b[0]);\r\n xranges = RangeUnion(xranges);\r\n yranges = RangeUnion(yranges);\r\n\r\n arraySortByNumber(xs);\r\n arraySortByNumber(ys);\r\n\r\n //展开\r\n RangesAdd(xranges, xs);\r\n RangesAdd(yranges, ys);\r\n\r\n //最大化\r\n xs[0] = polygonBox.min.x;\r\n xs[xs.length - 1] = polygonBox.max.x;\r\n\r\n ys[0] = polygonBox.min.y;\r\n ys[ys.length - 1] = polygonBox.max.y;\r\n\r\n //所有网格的索引\r\n let gridFb = new Flatbush((xs.length - 1) * (ys.length - 1));\r\n\r\n // let pls: Polyline[] = [];\r\n\r\n for (let i = 0; i < xs.length - 1; i++)\r\n {\r\n for (let j = 0; j < ys.length - 1; j++)\r\n {\r\n gridFb.add(xs[i], ys[j], xs[i + 1], ys[j + 1]);\r\n\r\n // let pl = new Polyline().RectangleFrom2Pt(new Vector3(xs[i], ys[j]), new Vector3(xs[i + 1], ys[j + 1]));\r\n // if (false) TestDraw(pl);\r\n // pls.push(pl);\r\n }\r\n }\r\n\r\n gridFb.finish();\r\n\r\n const matrix: number[][] = new Array(xs.length - 1).fill(1).map(() => new Array(ys.length - 1).fill(1));\r\n\r\n //矩形与斜线相交\r\n let checks: BoxCheckIntersect[] = [];\r\n for (let line of klines)\r\n {\r\n let box = new Box2().setFromPoints(line);\r\n let ids = gridFb.search(box.min.x, box.min.y, box.max.x, box.max.y);\r\n\r\n for (let id of ids)\r\n {\r\n let check = checks[id];\r\n\r\n let i = Math.floor((id) / (ys.length - 1));\r\n let j = id - (i * (ys.length - 1));\r\n\r\n if (!check)\r\n {\r\n check = new BoxCheckIntersect(new Box2(new Vector2(xs[i] + 0.01, ys[j] + 0.01), new Vector2(xs[i + 1] - 0.01, ys[j + 1] - 0.01)));\r\n checks[id] = check;\r\n\r\n // let pl = new Polyline().RectangleFrom2Pt(new Vector3(xs[i], ys[j]), new Vector3(xs[i + 1], ys[j + 1]));\r\n // TestDraw(pl, 2);\r\n }\r\n\r\n if (check.IsIntersectLine(line[0], line[1]))\r\n {\r\n // pls[id].ColorIndex = 1;\r\n // pls[id].Erase();\r\n matrix[i][j] = 0;\r\n }\r\n }\r\n }\r\n\r\n //y轴扫描线(矩形在多边形外)\r\n // if (xs.length < ys.length)\r\n {\r\n for (let i = 0; i < xs.length - 1; i++)\r\n {\r\n let x = (xs[i + 1] + xs[i]) * 0.5;\r\n\r\n let iPtYs = IsPointInPolygon(polygonPts, new Vector3(x, polygonBox.min.y - 0.1, 0));\r\n arraySortByNumber(iPtYs);\r\n\r\n for (let j = 0; j < ys.length - 1; j++)\r\n {\r\n let y = (ys[j + 1] + ys[j]) * 0.5;\r\n while (iPtYs.length && iPtYs[0] < y)\r\n iPtYs.shift();\r\n\r\n if (iPtYs.length % 2 !== 1)\r\n {\r\n // pls[i * (ys.length - 1) + j].ColorIndex = 3;\r\n // pls[i * (ys.length - 1) + j].Erase();\r\n matrix[i][j] = 0;\r\n }\r\n }\r\n }\r\n }\r\n // else//x轴扫描线\r\n\r\n //ref https://leetcode.cn/problems/maximal-rectangle/solutions/535672/zui-da-ju-xing-by-leetcode-solution-bjlu/\r\n const maximalRectangle = () =>\r\n {\r\n const m = matrix.length;//m个竖条 xlist\r\n if (m === 0) return 0;\r\n const n = matrix[0].length;//n个横条 ylist\r\n if (n === 0) return;\r\n\r\n const left: number[][] = new Array(m).fill(0).map(() => new Array(n).fill(0));\r\n\r\n for (let i = 0; i < m; i++)\r\n {\r\n for (let j = 0; j < n; j++)\r\n {\r\n if (matrix[i][j])\r\n {\r\n left[i][j] = (j === 0 ? 0 : left[i][j - 1]) + 1;\r\n }\r\n }\r\n }\r\n\r\n //area maxXIndex maxYIndex xcount ycount,width,height\r\n let rects: RectData[] = [];\r\n\r\n for (let j = 0; j < n; j++) // 对于每一列,使用基于柱状图的方法\r\n {\r\n const up = new Array(m).fill(0);\r\n const down = new Array(m).fill(0);\r\n\r\n let stack: number[] = [];\r\n for (let i = 0; i < m; i++)\r\n {\r\n while (stack.length && left[stack[stack.length - 1]][j] >= left[i][j])\r\n {\r\n stack.pop();\r\n }\r\n up[i] = stack.length === 0 ? -1 : stack[stack.length - 1];\r\n stack.push(i);\r\n }\r\n stack = [];\r\n for (let i = m - 1; i >= 0; i--)\r\n {\r\n while (stack.length && left[stack[stack.length - 1]][j] >= left[i][j])\r\n {\r\n stack.pop();\r\n }\r\n down[i] = stack.length === 0 ? m : stack[stack.length - 1];\r\n stack.push(i);\r\n }\r\n\r\n for (let i = 0; i < m; i++)\r\n {\r\n const xCount = down[i] - up[i] - 1;\r\n const yCount = left[i][j];\r\n\r\n if (!yCount || !xCount) continue;\r\n\r\n let width = xs[down[i]] - xs[down[i] - xCount];\r\n let height = ys[j + 1] - ys[j + 1 - yCount];\r\n\r\n if (width < this.MinWidth || height < this.MinHeight) continue;\r\n\r\n //自定义过滤函数\r\n if (this.FilterRectFn && this.FilterRectFn(width, height)) continue;\r\n\r\n let area = width * height;\r\n\r\n //面积小于最小允许面积\r\n if (area < this.MinArea) continue;\r\n\r\n rects.push([area, down[i], j, xCount, yCount, width, height]);\r\n }\r\n }\r\n\r\n // while (rects.length)\r\n if (rects.length)\r\n {\r\n let maxIndex = this.GetMaxRectIndexFn(rects);\r\n\r\n let [area, maxXIndex, maxYIndex, xCount, yCount] = rects[maxIndex];\r\n\r\n let xMax = xs[maxXIndex];\r\n let yMax = ys[maxYIndex + 1];\r\n\r\n let xMin = xs[maxXIndex - xCount];\r\n let yMin = ys[maxYIndex + 1 - yCount];\r\n\r\n maxRects.push(new Box2(new Vector2(xMin, yMin), new Vector2(xMax, yMax)));\r\n\r\n rects.splice(maxIndex, 1);\r\n\r\n //对方块进行标记\r\n for (let i = 0; i < xCount; i++)\r\n {\r\n for (let j = 0; j < yCount; j++)\r\n {\r\n matrix[maxXIndex - 1 - i][maxYIndex - j] = 0;\r\n }\r\n }\r\n\r\n //如果有被标记的方块,则删除它\r\n //某些情况不适合这个算法,移除了它,保证结果正确性\r\n // arrayRemoveIf(rects, rect =>\r\n // {\r\n // let [area, maxX, maxY, xCount, yCount] = rect;\r\n // for (let i = 0; i < xCount; i++)\r\n // {\r\n // for (let j = 0; j < yCount; j++)\r\n // {\r\n // if (!matrix[maxX - 1 - i][maxY - j])\r\n // return true;\r\n // }\r\n // }\r\n // return false;\r\n // });\r\n }\r\n };\r\n\r\n let maxRects: Box2[] = [];\r\n while (true)\r\n {\r\n let count = maxRects.length;\r\n maximalRectangle();\r\n if (count === maxRects.length) break;\r\n }\r\n\r\n return maxRects;\r\n }\r\n}\r\n\r\nfunction RangesAdd(ranges: [number, number][], vList: number[])\r\n{\r\n let adds: number[] = [];\r\n for (let range of ranges)\r\n {\r\n let dist = range[1] - range[0];\r\n let count = Math.floor(dist / 20);\r\n let divDist = Math.floor(dist / count);\r\n\r\n for (let i = 1; i < count - 1; i++)\r\n {\r\n let d = Math.floor(range[0] + divDist * i);\r\n\r\n let index = InsertSortedIndex(vList, d, (a, b) => a - b);\r\n\r\n if (Math.abs(vList[index] - d) < 5)\r\n continue;\r\n\r\n if (index !== vList.length - 1 && Math.abs(vList[index + 1] - d) < 5)\r\n continue;\r\n\r\n adds.push(d);\r\n }\r\n }\r\n\r\n if (adds.length)\r\n {\r\n arrayPushArray(vList, adds);\r\n arraySortByNumber(vList);\r\n }\r\n}\r\n\r\n/**\r\n * 判断点在多段线内外 这是为了LIR实现的优化算法,返回交点的Y轴列表\r\n */\r\nfunction IsPointInPolygon(polyPts: Vector2[], pt: Vector3): number[]\r\n{\r\n // let crossings = 0;\r\n // let insLine = new Line(pt, p2);\r\n\r\n let iPtYs: number[] = [];\r\n\r\n for (let i = 0; i < polyPts.length; i++)\r\n {\r\n let sp = polyPts[i];\r\n let ep = polyPts[FixIndex(i + 1, polyPts)];\r\n\r\n // if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5))//在起点或者终点\r\n // return false;\r\n\r\n //点位于线上面\r\n // if (pt.y > Math.max(sp.y, ep.y))\r\n // continue;\r\n\r\n //线垂直Y轴\r\n let derX = ep.x - sp.x;\r\n if (equaln(derX, 0, 5e-6))\r\n {\r\n // if (equaln(pt.x, ep.x, 1e-5)\r\n // && (pt.y > Math.min(sp.y, ep.y) - 1e-5 && pt.y < Math.max(sp.y, ep.y) + 1e-5))\r\n // return false;//点在线上\r\n continue;\r\n }\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)\r\n if (derX < 0)\r\n {\r\n // crossings++;\r\n iPtYs.push(sp.y);\r\n }\r\n continue;\r\n }\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)\r\n if (derX > 0)\r\n {\r\n // crossings++;\r\n iPtYs.push(ep.y);\r\n }\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 let iptY = (pt.x - sp.x) * k + sp.y;\r\n // if (equaln(iptY, pt.y, 1e-5))//点在线上 返回false\r\n // return false;\r\n if (iptY > pt.y)\r\n {\r\n // crossings++;\r\n iPtYs.push(iptY);\r\n }\r\n }\r\n }\r\n\r\n return iPtYs;\r\n}\r\n","import { EndType, JoinType } from \"js-angusj-clipper/web\";\r\nimport { Vec2, Vector2, Vector3 } from \"three\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { BUL_IS_LINE_FUZZ, Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { polar } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { clipperCpp } from \"../Common/ClipperCpp\";\r\nimport { Point } from \"../Common/Point\";\r\nimport { FixIndex, equaln } from \"../Common/Util\";\r\nimport { PathScale } from \"../Core/Path\";\r\n\r\n/** 内外接多边形 */\r\nexport function Circle2Points(circle: Circle, knifRadius: number, splitSize = 10, outside = false): Point[]\r\n{\r\n let radius = circle.Radius;\r\n let an = Math.PI * 2 / splitSize;\r\n\r\n if (outside)\r\n radius = radius / Math.cos(an / 2) + knifRadius;\r\n else\r\n radius -= knifRadius;\r\n\r\n let cenP = circle.Center;\r\n let pts: Vector3[] = [];\r\n for (let i = 0; i < splitSize; i++)\r\n {\r\n pts.push(polar(cenP.clone(), an * i, radius));\r\n }\r\n return pts as Point[];\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 // //小圆弧内嵌时忽略小圆(直线连接) 有可能产生自交 放弃这个\r\n // if (!outside && arc.Radius < 30 && bul > 0) continue;\r\n // if (outside && arc.Radius < 30 && bul < 0) continue;\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(Math.floor(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\r\n/**\r\n * 移除小圆弧,使用尖角直连(有可能产生自交 概率不大)\r\n * @param pl 请传入逆时针多段线(我们将直接修改这个多段线,如果你不想被修改 你应该拷贝一个)\r\n * @param [radius=30]\r\n */\r\nexport function PolylineFilletMinArc(pl: Polyline, radius = 30)\r\n{\r\n let ocsInv = pl.OCSInv;\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n let bul = pl.LineData[i].bul;\r\n if (equaln(bul, BUL_IS_LINE_FUZZ)) continue;\r\n\r\n let arc = pl.GetCurveAtIndex(i) as Arc;\r\n\r\n if (arc.Radius > radius) continue;\r\n\r\n let preCurve = pl.GetCurveAtIndex(FixIndex(i - 1, pl.EndParam));\r\n if (!(preCurve instanceof Line)) continue;\r\n\r\n let nextCurve = pl.GetCurveAtIndex(FixIndex(i + 1, pl.EndParam));\r\n if (!(nextCurve instanceof Line)) continue;\r\n\r\n if (preCurve.IntersectWith2(arc, IntersectOption.ExtendThis).length === 2) continue;\r\n\r\n let ipt = nextCurve.IntersectWith(preCurve, IntersectOption.ExtendBoth)[0];\r\n\r\n if (!ipt) continue;\r\n\r\n if (ipt.distanceTo(arc.Midpoint) > 50) continue;\r\n\r\n pl.LineData.splice(i, 1);\r\n pl.SetPointAt(i, ipt.applyMatrix4(ocsInv) as Vec2 as Vector2);\r\n }\r\n}\r\n","import { Vector2 } from \"../Common/Vector2\";\r\n\r\ninterface P\r\n{\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface IOffset\r\n{\r\n negativeOffset: number;\r\n positiveOffset: number;\r\n}\r\n\r\n/** 点p到线段P1P2 的最短距离的平方,线段不延伸 */\r\nfunction GetSqSegDist(p: P, p1: P, p2: P): number\r\n{\r\n let x = p1.x;\r\n let y = p1.y;\r\n let dx = p2.x - x;\r\n let dy = p2.y - y;\r\n\r\n if (dx !== 0 || dy !== 0)//不是0长度线\r\n {\r\n let t = ((p.x - x) * dx + (p.y - y) * dy) / (dx * dx + dy * dy);\r\n if (t > 1)\r\n {\r\n x = p2.x;\r\n y = p2.y;\r\n }\r\n else if (t > 0)\r\n {\r\n x += dx * t;\r\n y += dy * t;\r\n }\r\n }\r\n dx = p.x - x;\r\n dy = p.y - y;\r\n return dx * dx + dy * dy;\r\n}\r\n\r\nfunction CrossVector2(a: P, b: P)\r\n{\r\n return a.x * b.y - a.y * b.x;\r\n}\r\n\r\n//Ramer-Douglas-Peucker algorithm\r\nfunction SimplifyDPStep(points: P[], first: number, last: number, sqTolerance: number, simplified: P[], offset: IOffset): void\r\n{\r\n let maxSqDist = 0;\r\n let index: number;\r\n let fp = points[first];\r\n let lp = points[last];\r\n\r\n for (let i = first + 1; i < last; i++)\r\n {\r\n let p = points[i];\r\n let sqDist = GetSqSegDist(p, fp, lp);\r\n if (sqDist > maxSqDist)\r\n {\r\n index = i;\r\n maxSqDist = sqDist;\r\n }\r\n }\r\n\r\n if (maxSqDist > sqTolerance)\r\n {\r\n if (index - first > 1) SimplifyDPStep(points, first, index, sqTolerance, simplified, offset);\r\n simplified.push(points[index]);\r\n if (last - index > 1) SimplifyDPStep(points, index, last, sqTolerance, simplified, offset);\r\n }\r\n else\r\n {\r\n //记录偏移\r\n let v = new Vector2(lp.x - fp.x, lp.y - fp.y).normalize();\r\n for (let i = first + 1; i < last; i++)\r\n {\r\n let p = points[i];\r\n let offsetDist = -CrossVector2(v, { x: p.x - fp.x, y: p.y - fp.y });\r\n offset.positiveOffset = Math.max(offset.positiveOffset, offsetDist);\r\n offset.negativeOffset = Math.min(offset.negativeOffset, offsetDist);\r\n }\r\n }\r\n}\r\n\r\n// Ramer-Douglas-Peucker 算法\r\nexport function SimplifyDouglasPeucker(points: P[], sqTolerance: number): [P[], IOffset]\r\n{\r\n let last = points.length - 1;\r\n let simplified: P[] = [points[0]];\r\n let offset: IOffset = { negativeOffset: 0, positiveOffset: 0 };\r\n SimplifyDPStep(points, 0, last, sqTolerance, simplified, offset);\r\n simplified.push(points[last]);\r\n return [simplified, offset];\r\n}\r\n","import { EndType, JoinType } from \"js-angusj-clipper/web\";\r\nimport { Box3 } from \"three\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { clipperCpp } from \"../Common/ClipperCpp\";\r\nimport { Point } from \"../Common/Point\";\r\nimport { PathScale } from \"../Core/Path\";\r\nimport { Circle2Points, Polyline2Points } from \"./Curves2Points\";\r\nimport { Path2Polyline } from \"./Path2Polyline\";\r\nimport { IOffset, SimplifyDouglasPeucker } from \"./Simplify2\";\r\n\r\n\r\n/**\r\n * 运用此代码将曲线转换为点,并且精简它.\r\n * @class CurveWrap\r\n */\r\nexport class CurveWrap\r\n{\r\n BoundingBox: Box3;\r\n\r\n Area: number;\r\n\r\n SimplyPolyline: Polyline;\r\n SimplyOffset: IOffset;\r\n Used = false;\r\n Holes: CurveWrap[] = [];\r\n\r\n Points: Point[];\r\n\r\n _OrgCurve: Polyline | Circle;\r\n\r\n constructor(public Curve: Polyline | Circle, public KnifRadius = 3, public IsOutside: boolean = true)\r\n {\r\n this._OrgCurve = Curve;\r\n this.BoundingBox = Curve.BoundingBox;\r\n\r\n if (Curve instanceof Polyline)\r\n {\r\n let pts = Polyline2Points(Curve, IsOutside, 0)[1];\r\n let [spts, offset] = SimplifyDouglasPeucker(pts, KnifRadius ** 2 + KnifRadius);\r\n if (spts.length !== pts.length)\r\n {\r\n this.SimplyOffset = offset;\r\n this.SimplyPolyline = Path2Polyline(spts);\r\n this.Curve = this.SimplyPolyline; //保险起见,也更新它\r\n this.Area = this.SimplyPolyline.Area;\r\n }\r\n else //此处更新多段线\r\n this.Curve = Path2Polyline(pts);\r\n this.Points = spts;\r\n }\r\n\r\n if (this.Area === undefined)\r\n this.Area = this.Curve.Area;\r\n }\r\n\r\n ContainsCurve(curve: CurveWrap): boolean\r\n {\r\n if (this.SimplyPolyline)\r\n return this.SimplyPolyline.PtInCurve(curve.Curve.StartPoint);\r\n return this.Curve.PtInCurve(curve.Curve.StartPoint);\r\n }\r\n\r\n GetOutsidePoints(): Point[]\r\n {\r\n if (this.Curve instanceof Circle)\r\n {\r\n let pts = Circle2Points(this.Curve, this.KnifRadius, 10, true);\r\n return pts;\r\n }\r\n\r\n else\r\n {\r\n let pl = this.SimplyPolyline || this.Curve;\r\n let offset = this.KnifRadius;\r\n if (this.SimplyOffset)\r\n offset += this.SimplyOffset.positiveOffset;\r\n\r\n if (offset > 0)\r\n {\r\n let pts = pl.GetStretchPoints() as Point[];\r\n pts = clipperCpp.lib.offsetToPaths({\r\n delta: offset * 10000,\r\n offsetInputs: [{ data: PathScale(pts, 10000), joinType: JoinType.Miter, endType: EndType.ClosedPolygon }]\r\n })[0];\r\n PathScale(pts, 0.0001);\r\n return pts;\r\n }\r\n\r\n else\r\n return this.Points;\r\n }\r\n }\r\n\r\n GetInsidePoints(): Point[]\r\n {\r\n if (this.Curve instanceof Circle)\r\n {\r\n let pts = Circle2Points(this.Curve, this.KnifRadius, 10, false);\r\n return pts;\r\n }\r\n\r\n else\r\n {\r\n let pl = this.SimplyPolyline || this.Curve;\r\n let offset = -this.KnifRadius;\r\n if (this.SimplyOffset)\r\n {\r\n offset += this.SimplyOffset.negativeOffset;\r\n }\r\n if (offset < -0.01)\r\n {\r\n let pls = pl.GetOffsetCurves(offset);\r\n if (pls.length)\r\n return pls[0].GetStretchPoints();\r\n }\r\n\r\n else\r\n return this.Points;\r\n }\r\n }\r\n}\r\n"],"names":["Vector3","Matrix4","Status","UpdateDraw","DuplicateRecordCloning","Box3","iaop","Color","FrontSide","MeshPhysicalMaterial","equaln","Object3D","MathUtils","FixIndex","Vector2","Quaternion","arraySortByNumber","sortNumberCompart","arrayPushArray","LineBasicMaterial","DoubleSide","LineDashedMaterial","MeshBasicMaterial","ShaderMaterial","LineMaterial","BufferGeometry","Shape","ShapeGeometry","BufferAttribute","LineGeometry","Line2","TLine","Plane","Line3","Line","Arc","Circle","Polyline","EllipseCurve","CatmullRomCurve3","BoolOpeartionType","Box2","cache","ConverCircleToPolyline","Path","BufferGeometryUtils2","LineSegments","Mesh","CylinderBufferGeometry","TShape","Float32BufferAttribute","Geometry","InstancedInterleavedBuffer","InterleavedBufferAttribute","ShapeUtils","Face3","BoxBufferGeometry","Production","Flatbush","ExtrudeGeometry","Group","Euler","clipperLib","polylabel","JoinType","EndType"],"mappings":"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C,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACZ,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;CACvB,CAAC;AAEK,MAAM,UAAU,GAAG,CAAC,CAAC;AAE5B;MACa,aAAa,CAAA;AAEtB,IAAA,WAAA,GAAA,GAAyB;AAIzB,IAAA,OAAO,eAAe,CAAC,KAAa,EAAE,MAAM,GAAG,KAAK,EAAA;AAEhD,QAAA,IAAI,MAAM;YAAE,KAAK,GAAG,GAAG,CAAC;AACxB,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC;YAChC,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,GAAG,GAAG,IAAIW,uBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,EAAEC,gBAAU,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACtC,QAAA,OAAO,GAAG,CAAC;KACd;IAGD,OAAO,cAAc,CAAC,KAAa,EAAA;AAE/B,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC5E,QAAA,IAAI,GAAG,GAAG,IAAIC,wBAAkB,CAAC;AAC7B,YAAA,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3B,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,OAAO,EAAE,EAAE;AACd,SAAA,CAAC,CAAC;QACH,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACrC,QAAA,OAAO,GAAG,CAAC;KACd;IAED,OAAO,gBAAgB,CAAC,KAAa,EAAA;AAEjC,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;YACjC,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC7C,QAAA,IAAI,GAAG,GAAG,IAAIC,uBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACvC,QAAA,OAAO,GAAG,CAAC;KACd;IAGD,OAAO,0BAA0B,CAAC,KAAa,EAAA;AAE3C,QAAA,IAAI,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,KAAK,CAAC;YAC3C,OAAO,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,GAAG,GAAG,IAAIA,uBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,EAAEF,gBAAU,EAAE,CAAC,CAAC;QACnF,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACjD,QAAA,OAAO,GAAG,CAAC;KACd;AAGD,IAAA,OAAO,qBAAqB,CAAC,KAAa,EAAE,OAAaZ,eAAS,EAAE,iBAAiB,GAAG,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,OAAgB,EAAA;AAE3H,QAAA,IAAI,MAAM;YAAE,KAAK,GAAG,GAAG,CAAC;AACxB,QAAA,IAAI,GAAG,GAAG,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,IAAI,CAAI,CAAA,EAAA,iBAAiB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1D,QAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC;YACjC,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE7C,IAAI,YAAY,GAAG,mBAAmB,CAAC,IAAIR,aAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;AAC/H,QAAA,IAAI,GAAG,GAAG,IAAIuB,oBAAc,CAAC,YAAY,CAAC,CAAC;QAC3C,IAAI,iBAAiB,EACrB;AACI,YAAA,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,aAAa,EAAE;AACtC,gBAAA,GAAG,EAAE,MAAM,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,KAAK,CAAC;AAC9C,aAAA,CAAC,CAAC;YACH,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE;gBACjD,GAAG,EAAE,MAAK;AAEN,oBAAA,IAAI,iBAAiB,GAAG,uBAAuB,CAAC,iBAAiB,CAAC;AAClE,oBAAA,IAAI,MAAM;wBACN,iBAAiB,GAAG,GAAG,CAAC;AACvB,yBAAA,IAAI,OAAO;wBACZ,iBAAiB,GAAG,OAAO,CAAC;AAChC,oBAAA,OAAO,iBAAiB,CAAC;iBAC5B;AACJ,aAAA,CAAC,CAAC;SACN;QACD,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACvC,QAAA,OAAO,GAAG,CAAC;KACd;IAED,OAAO,wBAAwB,CAAC,SAAkB,EAAA;KAGjD;AAGD,IAAA,OAAO,0BAA0B,GAAA;AAE7B,QAAA,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAClC;AACI,YAAA,IAAI,CAAC,wBAAwB,GAAG,IAAIA,oBAAc,CAAC;AAC/C,gBAAA,QAAQ,EAAE;oBACN,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE;AAC7C,iBAAA;AAED,gBAAA,aAAa,EAAE,IAAI;AACnB,gBAAA,mBAAmB,EAAE,CAAC;AACtB,gBAAA,kBAAkB,EAAE,UAAU;AACjC,aAAA,CAAC,CAAC;SACN;QACD,OAAO,IAAI,CAAC,wBAAwB,CAAC;KACxC;AAGD,IAAA,OAAO,2BAA2B,CAAC,KAAa,EAAE,OAAe,EAAA;AAE7D,QAAA,IAAI,GAAG,GAAG,CAAA,EAAG,KAAK,CAAI,CAAA,EAAA,OAAO,EAAE,CAAC;QAChC,IAAI,GAAG,GAAG,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrD,QAAA,IAAI,GAAG;AAAE,YAAA,OAAO,GAAG,CAAC;QACpB,GAAG,GAAG,IAAID,uBAAiB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAEF,gBAAU,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpH,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAChD,QAAA,OAAO,GAAG,CAAC;KACd;AAGD,IAAA,OAAO,4BAA4B,CAAC,KAAa,EAAE,OAAe,EAAA;AAE9D,QAAA,IAAI,GAAG,GAAG,CAAA,EAAG,KAAK,CAAI,CAAA,EAAA,OAAO,EAAE,CAAC;QAChC,IAAI,GAAG,GAAG,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtD,QAAA,IAAI,GAAG;AAAE,YAAA,OAAO,GAAG,CAAC;QACpB,GAAG,GAAG,IAAIE,uBAAiB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClG,IAAI,CAAC,6BAA6B,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACjD,QAAA,OAAO,GAAG,CAAC;KACd;IAED,OAAO,QAAQ,CAAC,KAAa,EAAA;AAEzB,QAAA,IAAI,GAAG,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;AAC9B,QAAA,IAAI,GAAG;YACH,OAAO,IAAIf,WAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;;QAG/D,OAAO,IAAIA,WAAK,EAAE,CAAC;KACtB;AAGD,IAAA,OAAO,yBAAyB,GAAA;QAE5B,IAAI,CAAC,IAAI,CAAC,uBAAuB;YAC7B,IAAI,CAAC,uBAAuB,GAAG,IAAIY,uBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,EAAE,IAAI,EAAEC,gBAAU,EAAE,CAAC,CAAC;QAElJ,OAAO,IAAI,CAAC,uBAAuB,CAAC;KACvC;AACD,IAAA,OAAO,4BAA4B,GAAA;QAE/B,IAAI,IAAI,CAAC,uBAAuB;AAC5B,YAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,CAAC,CAAC;KAC3G;AAED,IAAA,OAAO,wBAAwB,GAAA;QAE3B,IAAI,CAAC,IAAI,CAAC,sBAAsB;YAC5B,IAAI,CAAC,sBAAsB,GAAG,IAAID,uBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAEC,gBAAU,EAAE,CAAC,CAAC;QAEhJ,OAAO,IAAI,CAAC,sBAAsB,CAAC;KACtC;AACD,IAAA,OAAO,2BAA2B,GAAA;QAE9B,IAAI,IAAI,CAAC,sBAAsB;AAC3B,YAAA,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,CAAC,CAAC;KACzG;;AA5Jc,aAAA,CAAA,gBAAgB,GAAG,IAAI,GAAG,EAA6B,CAAC;AACxD,aAAA,CAAA,iBAAiB,GAAG,IAAI,GAAG,EAA6B,CAAC;AACjE,aAAS,CAAA,SAAA,GAAG,KAAK,CAAC;AAWV,aAAA,CAAA,eAAe,GAAG,IAAI,GAAG,EAA8B,CAAC;AAsBxD,aAAA,CAAA,2BAA2B,GAAG,IAAI,GAAG,EAA6B,CAAC;AAUnE,aAAA,CAAA,mBAAmB,GAAgC,IAAI,GAAG,EAAE,CAAC;AAsD7D,aAAA,CAAA,4BAA4B,GAAmC,IAAI,GAAG,EAAE,CAAC;AAWzE,aAAA,CAAA,6BAA6B,GAAmC,IAAI,GAAG,EAAE,CAAC;AAgDzF;AACO,aAAkB,CAAA,kBAAA,GAAG,IAAIC,wBAAkB,CAAC;AAC/C,IAAA,KAAK,EAAE,QAAQ;AACf,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,OAAO,EAAE,CAAC;AACb,CAAA,CAAC,CAAC;AAEH;AACO,aAAgB,CAAA,gBAAA,GAAG,IAAIA,wBAAkB,CAAC;AAC7C,IAAA,KAAK,EAAE,QAAQ;AACf,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,OAAO,EAAE,CAAC;AACb,CAAA,CAAC,CAAC;AAEH;AACO,aAAgB,CAAA,gBAAA,GAAG,IAAIG,yBAAY,CAAC;AACvC,IAAA,KAAK,EAAE,QAAQ;AACf,IAAA,SAAS,EAAE,UAAU;AACrB,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,UAAU,EAAE,IAAIV,aAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AACnC,IAAA,IAAI,EAAEM,gBAAU;AACnB,CAAA,CAAC,CAAC;AAEH;AACO,aAA2B,CAAA,2BAAA,GAAG,IAAIE,uBAAiB,CAAC;AACvD,IAAA,KAAK,EAAE,QAAQ;AACf,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,OAAO,EAAE,GAAG;AACf,CAAA,CAAC,CAAC;AAEI,aAAuB,CAAA,uBAAA,GAAG,IAAIA,uBAAiB,CAAC;AACnD,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,OAAO,EAAE,CAAC;AACb,CAAA,CAAC;;ACldC,MAAM,+BAA+B,GAAG,IAAI,OAAO,EAA4B,CAAC;AACvF,UAAU,CAAC,IAAI,GAAG,+BAA+B;;ACA3C,IAAW,mBAAmB,CAoQnC;AApQD,CAAA,UAAiB,mBAAmB,EAAA;IAEhC,SAAgB,aAAa,CAAC,GAAc,EAAA;QAExC,OAAO,IAAIG,oBAAc,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;KAClD;AAHe,IAAA,mBAAA,CAAA,aAAa,gBAG5B,CAAA;AAED;;;;;;AAMG;IACH,SAAgB,SAAS,CAAC,GAAmB,EAAE,GAAc,EAAE,cAAc,GAAG,KAAK,EAAA;QAEjF,IAAI,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC,UAAU,CAAoB,CAAC;QACzD,IAAI,EAAE,KAAK,SAAS;AAChB,YAAA,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;aACtB,IAAI,EAAE,CAAC,KAAK,KAAK,GAAG,CAAC,MAAM,KAAK,cAAc,IAAI,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC;SAC7E;AACI,YAAA,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAC1B,YAAA,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC;YACtB,GAAG,CAAC,SAAS,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC;SACpC;;AAEG,YAAA,OAAO,KAAK,CAAC;AAEjB,QAAA,+BAA+B,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC5C,QAAA,OAAO,IAAI,CAAC;KACf;AAhBe,IAAA,mBAAA,CAAA,SAAS,YAgBxB,CAAA;AAED,IAAA,IAAI,aAA4B,CAAC;AACjC,IAAA,SAAgB,aAAa,GAAA;AAEzB,QAAA,IAAI,aAAa;AACb,YAAA,OAAO,aAAa,CAAC;aAEzB;AACI,YAAA,IAAI,UAAU,GAAG,IAAIC,WAAK,EAAE,CAAC;YAC7B,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;YAC9B,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;AAC7B,YAAA,aAAa,GAAG,IAAIC,mBAAa,CAAC,UAAU,CAAC,CAAC;YAC9C,aAAa,CAAC,kBAAkB,EAAE,CAAC;AACnC,YAAA,OAAO,aAAa,CAAC;SACxB;KACJ;AAbe,IAAA,mBAAA,CAAA,aAAa,gBAa5B,CAAA;AAED,IAAA,SAAgB,qBAAqB,CAAC,UAA4B,EAAE,YAAqB,KAAK,EAAA;AAE1F,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YACvB,OAAO,IAAIF,oBAAc,EAAE,CAAC;QAChC,IAAI,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC;AAE7C,QAAA,IAAI,cAAc,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACpE,QAAA,IAAI,mBAAmB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;QAE9E,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,IAAI,eAAe,GAAG,EAAE,CAAC;QAEzB,IAAI,oBAAoB,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC;AAE9D,QAAA,IAAI,cAAc,GAAG,IAAIA,oBAAc,EAAE,CAAC;QAE1C,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,cAAc,GAAG,CAAC,CAAC;AAEvB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAC1C;AAEI,YAAA,IAAI,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;;YAI7B,IAAI,SAAS,MAAM,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC;AAAE,gBAAA,OAAO,IAAI,CAAC;;AAIzD,YAAA,KAAK,IAAI,IAAI,IAAI,QAAQ,CAAC,UAAU,EACpC;AAEI,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,SAAS;AAExC,gBAAA,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,SAAS;AAAE,oBAAA,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAE1D,gBAAA,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;aAEpD;;AAID,YAAA,IAAI,oBAAoB,KAAK,QAAQ,CAAC,oBAAoB;AAAE,gBAAA,OAAO,IAAI,CAAC;AAExE,YAAA,KAAK,IAAI,IAAI,IAAI,QAAQ,CAAC,eAAe,EACzC;AAEI,gBAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,SAAS;AAE7C,gBAAA,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,SAAS;AAAE,oBAAA,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAEpE,gBAAA,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;aAE9D;;AAID,YAAA,cAAc,CAAC,QAAQ,CAAC,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,cAAc,IAAI,EAAE,CAAC;YACtF,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAE/D,IAAI,SAAS,EACb;AACI,gBAAA,IAAI,KAAa,CAAC;AAClB,gBAAA,IAAI,SAAS;AACT,oBAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;AAC5B,qBAAA,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,KAAK,SAAS;oBAC/C,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;;AAE3C,oBAAA,OAAO,IAAI,CAAC;gBAEhB,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAChC;oBACI,cAAc,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;AACvD,oBAAA,cAAc,EAAE,CAAC;iBACpB;qBAED;oBACI,IAAI,gBAAgB,GAAG,CAAC,CAAC;AACzB,oBAAA,KAAK,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,EAC7B;AACI,wBAAA,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC;AACpE,wBAAA,cAAc,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,cAAc,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC;qBACxF;oBAED,cAAc,IAAI,gBAAgB,CAAC;iBACtC;gBACD,MAAM,IAAI,KAAK,CAAC;aACnB;SAEJ;;QAID,IAAI,SAAS,EACb;YAEI,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,IAAI,WAAW,GAAG,EAAE,CAAC;AAErB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAC1C;gBAEI,IAAI,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAEhC,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,EACpC;AAEI,oBAAA,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC;iBAEjD;gBAED,WAAW,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;aAE1D;AAED,YAAA,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;SAExC;;AAID,QAAA,KAAK,IAAI,IAAI,IAAI,UAAU,EAC3B;YAEI,IAAI,eAAe,GAAG,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAE9D,YAAA,IAAI,CAAC,eAAe;AAAE,gBAAA,OAAO,IAAI,CAAC;AAElC,YAAA,cAAc,CAAC,YAAY,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;SAEtD;;AAID,QAAA,KAAK,IAAI,IAAI,IAAI,eAAe,EAChC;YAEI,IAAI,eAAe,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAEtD,IAAI,eAAe,KAAK,CAAC;gBAAE,MAAM;YAEjC,cAAc,CAAC,eAAe,GAAG,cAAc,CAAC,eAAe,IAAI,EAAE,CAAC;AACtE,YAAA,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAE1C,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,EAAE,CAAC,EACxC;gBAEI,IAAI,sBAAsB,GAAU,EAAE,CAAC;AAEvC,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EACrD;AAEI,oBAAA,sBAAsB,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAE5D;AAED,gBAAA,IAAI,oBAAoB,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,CAAC;AAEzE,gBAAA,IAAI,CAAC,oBAAoB;AAAE,oBAAA,OAAO,IAAI,CAAC;gBAEvC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;aAEnE;SAEJ;AAED,QAAA,OAAO,cAAc,CAAC;KAEzB;AAzKe,IAAA,mBAAA,CAAA,qBAAqB,wBAyKpC,CAAA;IAED,SAAgB,qBAAqB,CAAC,UAA6B,EAAA;AAE/D,QAAA,IAAI,UAAU,CAAC;AACf,QAAA,IAAI,QAAgB,CAAC;AACrB,QAAA,IAAI,UAAmB,CAAC;QACxB,IAAI,WAAW,GAAG,CAAC,CAAC;AAEpB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAC1C;AAEI,YAAA,IAAI,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YAE9B,IAAI,UAAU,KAAK,SAAS;AAAE,gBAAA,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC;AACvE,YAAA,IAAI,UAAU,KAAK,SAAS,CAAC,KAAK,CAAC,WAAW;AAAE,gBAAA,OAAO,IAAI,CAAC;YAE5D,IAAI,QAAQ,KAAK,SAAS;AAAE,gBAAA,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC;AAC1D,YAAA,IAAI,QAAQ,KAAK,SAAS,CAAC,QAAQ;AAAE,gBAAA,OAAO,IAAI,CAAC;YAEjD,IAAI,UAAU,KAAK,SAAS;AAAE,gBAAA,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;AAChE,YAAA,IAAI,UAAU,KAAK,SAAS,CAAC,UAAU;AAAE,gBAAA,OAAO,IAAI,CAAC;AAErD,YAAA,WAAW,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC;SAEzC;AAED,QAAA,IAAI,KAAK,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;QACxC,IAAI,MAAM,GAAG,CAAC,CAAC;AAEf,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,EAC1C;AAEI,YAAA,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YAEvC,MAAM,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;SAExC;QAED,OAAO,IAAIG,qBAAe,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;KAE3D;AAvCe,IAAA,mBAAA,CAAA,qBAAqB,wBAuCpC,CAAA;AAEL,CAAC,EApQgB,mBAAmB,KAAnB,mBAAmB,GAoQnC,EAAA,CAAA,CAAA;;ACzPD,IAAY,UAkBX,CAAA;AAlBD,CAAA,UAAY,UAAU,EAAA;AAElB;;AAEG;AACH,IAAA,UAAA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR;;AAEG;AACH,IAAA,UAAA,CAAA,UAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACT;;AAEG;AACH,IAAA,UAAA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR;;AAEG;AACH,IAAA,UAAA,CAAA,UAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACZ,CAAC,EAlBW,UAAU,KAAV,UAAU,GAkBrB,EAAA,CAAA,CAAA,CAAA;AAED;;AAEG;AAEI,IAAe,KAAK,GAApB,MAAe,KAAM,SAAQ,MAAM,CAAA;AAEtC,IAAA,WAAA,GAAA;AAEI,QAAA,KAAK,EAAE,CAAC;;;QAmJO,IAAc,CAAA,cAAA,GAAG,IAAI,CAAC;KAlJxC;AAED,IAAA,IAAI,IAAI,GAAA;AAEJ,QAAA,OAAOlB,QAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KAC/C;AAED,IAAA,IAAI,UAAU,GAAA,EAAc,OAAO,EAAE;AACrC,IAAA,IAAI,UAAU,CAAC,CAAU,EAAI,EAAA,OAAO,EAAE;AACtC,IAAA,IAAI,UAAU,GAAA,EAAa,OAAO,EAAE;AACpC,IAAA,IAAI,QAAQ,GAAA,EAAc,OAAO,EAAE;AACnC,IAAA,IAAI,QAAQ,CAAC,CAAU,EAAI,EAAA,OAAO,EAAE;;AAGpC,IAAA,IAAI,QAAQ,GAAA;QAER,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC9C;AAED,IAAA,IAAI,QAAQ,GAAA;AAER,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC;AACnB,YAAA,OAAO,GAAG,CAAC;;YAEX,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;KACrD;AAED,IAAA,IAAI,QAAQ,GAAA,EAAa,OAAO,EAAE;AAClC,IAAA,IAAI,IAAI,GAAa,EAAA,OAAO,CAAC,CAAC,EAAE;AAChC;;AAEG;AACH,IAAA,IAAI,KAAK,GAAa,EAAA,OAAO,CAAC,CAAC,EAAE;AACjC,IAAA,IAAI,MAAM,GAAa,EAAA,OAAO,CAAC,CAAC,EAAE;AAClC,IAAA,IAAI,OAAO,GAAc,EAAA,OAAO,KAAK,CAAC,EAAE;;IAExC,IAAI,WAAW,GAAc,EAAA,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE;AAErD,IAAA,IAAI,KAAK,GAAkB,EAAA,MAAM,KAAK,CAAC,EAAE;AAEzC,IAAA,eAAe,CAAC,KAAa,EAAa,EAAA,OAAO,EAAE;AACnD,IAAA,kBAAkB,CAAC,QAAgB,EAAa,EAAA,OAAO,EAAE;AACzD,IAAA,cAAc,CAAC,KAAa,EAAY,EAAA,OAAO,EAAE;AACjD,IAAA,cAAc,CAAC,EAAW,EAAY,EAAA,OAAO,EAAE;IAC/C,eAAe,CAAC,EAAW,EAAE,IAAI,GAAG,IAAI,EAAA,EAAY,OAAO,EAAE;AAC7D,IAAA,gBAAgB,CAAC,EAAW,EAAE,IAAI,GAAG,IAAI,IAAY,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,EAAE;AAE7F,IAAA,cAAc,CAAC,CAAS,EAAY,EAAA,OAAO,EAAE;AAE7C;;;AAGG;AACH,IAAA,aAAa,CAAC,KAAuB,EAAa,EAAA,OAAO,EAAE;AAC3D,IAAA,kBAAkB,CAAC,KAAuB,EAAA;QAEtC,IAAI,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAClC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/B;AAED;;;AAGG;AACH,IAAA,cAAc,CAAC,KAAwB,EAAkB,EAAA,OAAO,EAAE;;AAElE,IAAA,oBAAoB,CAAC,UAAkB,EAAE,QAAgB,EAAkB,EAAA,OAAO,EAAE;AACpF,IAAA,mBAAmB,CAAC,EAAuB,EAAA;AAEvC,QAAA,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AACxC,QAAA,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;KACpC;AACS,IAAA,cAAc,CAAC,KAAwB,EAAA;AAE7C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EACxB;AACI,YAAA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,YAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAClB,gBAAA,OAAO,EAAE,CAAC;YACd,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC7BM,mBAAiB,CAAC,KAAK,CAAC,CAAC;AACzB,YAAA,0BAA0B,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,KAAKN,QAAM,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AACpE,YAAA,OAAO,KAAK,CAAC;SAChB;AACI,aAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YAC7B,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAEjC,YAAA,OAAO,EAAE,CAAC;KACjB;IACD,MAAM,CAAC,QAAgB,EAAA,GAAK;AAC5B;;;;;AAKE;AACF,IAAA,IAAI,CAAC,EAAS,EAAE,QAAQ,GAAG,KAAK,EAAE,SAAS,GAAG,IAAI,IAAY,OAAOR,cAAM,CAAC,KAAK,CAAC,EAAE;;AAGpF,IAAA,OAAO,GAAW,EAAA,OAAO,IAAI,CAAC,EAAE;;AAGhC,IAAA,SAAS,CAAC,EAAW,EAAE,IAAI,GAAG,IAAI,EAAA;AAE9B,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;KACtI;;AAGD,IAAA,UAAU,CAAC,EAAW,EAAA;AAElB,QAAA,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KACtI;;AAGD,IAAA,UAAU,CAAC,CAAU,EAAE,IAAI,GAAG,IAAI,EAAA;QAE9B,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;KAClC;;AAGD,IAAA,YAAY,CAAC,KAAa,EAAE,IAAI,GAAG,IAAI,EAAa,EAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE;AAC9H,IAAA,eAAe,CAAC,UAAkB,EAAkB,EAAA,OAAO,EAAE;AAC7D,IAAA,iBAAiB,CAAC,EAAW,EAAE,MAAe,EAAa,EAAA,OAAO,EAAE;AAEpE;;AAEG;AACH,IAAA,aAAa,CAAC,KAAY,EAAE,OAAwB,EAAE,SAAS,GAAG,IAAI,EAAA;QAElE,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;KACxE;AAED;;AAEG;AACH,IAAA,cAAc,CAAC,KAAY,EAAE,OAAwB,EAAE,SAAS,GAAG,IAAI,EAAuB,EAAA,OAAO,EAAE,CAAC,EAAE;AAG1G;;AAEG;AACH,IAAA,iBAAiB,CAAC,IAAmB,EAAA,EAAY,OAAO,CAAC,CAAC,EAAE;;AAO5D,IAAA,YAAY,GAAK,EAAA,OAAO,EAAE,CAAC,EAAE;AAE7B;;AAEE;AACiB,IAAA,cAAc,CAAC,UAAA,GAAyB,UAAU,CAAC,SAAS,EAAA;AAE3E,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AACpD,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAChB,YAAA,GAAG,CAAC,IAAI,CAAC,IAAIF,aAAO,CAAC,CAAC;AAC1B,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,cAAc,EAC5C;YACI,IAAI,KAAK,GAAa,EAAE,CAAC;YACzB,KAAK,IAAI,CAAC,IAAI,GAAG;AAAE,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3C,IAAI,QAAQ,GAAG,IAAI6B,yBAAY,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACtD,OAAO,IAAIC,WAAK,CAAC,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;SAC9D;QACD,IAAI,GAAG,GAAG,IAAIL,oBAAc,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAClD,QAAA,OAAO,IAAIM,UAAK,CAAC,GAAG,EAAE,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;KACrE;AAED;;;;AAIG;IACM,gBAAgB,CAAC,IAAgB,EAAE,GAAa,EAAA;AAErD,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACpD,IAAI,KAAK,GAAG,GAAY,CAAC;AACzB,QAAA,IAAI,GAAG,GAAG,KAAK,CAAC,QAAyC,CAAC;AAC1D,QAAA,IAAI,GAAG,YAAYF,yBAAY,EAC/B;YACI,IAAI,KAAK,GAAa,EAAE,CAAC;YACzB,KAAK,IAAI,CAAC,IAAI,GAAG;AAAE,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1C,YAAA,GAAoB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;SAC7C;aAED;;YAEI,KAAK,IAAI,CAAC,IAAI,GAAG;AAAE,gBAAA,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,GAAG,EAAE,GAA2B,CAAC;AAChE,gBAAA,cAAc,CAAC,KAAK,EAAE,IAAIJ,oBAAc,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;SACtE;KACJ;AAED;;AAEG;AACM,IAAA,wBAAwB,CAAC,IAAgB,EAAE,GAAa,EAAE,QAAmB,EAAA;AAElF,QAAA,IAAI,IAAI,KAAK,UAAU,CAAC,cAAc,EACtC,CAEC;aAED;YACI,IAAI,CAAC,GAAG,GAAW,CAAC;AACpB,YAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ,IAAI,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;SACvE;KACJ;IAEQ,iBAAiB,CAAC,KAAK,GAAG,CAAC,EAAA;QAEhC,KAAK,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAC7C;AACI,YAAA,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,GAAG,EAAE,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;SAClF;KACJ;CACJ,CAAA;AA/NqB,KAAK,GAAA,UAAA,CAAA;IAD1B,OAAO;AACc,CAAA,EAAA,KAAK,CA+N1B;;ACrQD,IAAY,aAIX,CAAA;AAJD,CAAA,UAAY,aAAa,EAAA;AAErB,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACf,CAAC,EAJW,aAAa,KAAb,aAAa,GAIxB,EAAA,CAAA,CAAA;;MCFY,OAAO,CAAA;AAApB,IAAA,WAAA,GAAA;;AAGI,QAAA,IAAA,CAAA,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KAgDrB;AA9CG,IAAA,GAAG,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAA;AAE9C,QAAA,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAChB,QAAA,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAEhB,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,WAAW,CAAC,GAAsB,EAAA;AAE9B,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;AAChB,QAAA,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5B,QAAA,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5B,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,WAAW,CAAC,IAAa,EAAA;AAErB,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EACvC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CACrC,CAAC;KACL;AAED,IAAA,SAAS,CAAC,KAAa,EAAA;QAEnB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC;KACf;;IAGD,MAAM,GAAA;;AAGF,QAAA,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;AAC3B,QAAA,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,EACtB,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,CACpB,CAAC;AACF,QAAA,OAAO,IAAI,CAAC;KACf;AACJ;;ACnDK,MAAO,QAAS,SAAQO,WAAK,CAAA;AAE/B,IAAA,WAAA,CAAY,MAAM,GAAG,IAAIhC,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,QAA2B,EAAA;QAElE,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,OAAO,QAAQ,KAAK,QAAQ;AAC5B,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACxB,aAAA,IAAI,QAAQ;AACb,YAAA,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;KAC7C;AAED,IAAA,sBAAsB,CAAC,QAAiB,EAAA;AAEpC,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;KAC9C;IAED,aAAa,CAAC,IAAW,EAAE,cAAc,GAAG,IAAIA,aAAO,EAAE,EAAE,UAAU,GAAG,KAAK,EAAA;AAEzE,QAAA,IAAI,EAAE,GAAG,IAAIA,aAAO,EAAE,CAAC;QAEvB,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAE/B,IAAI,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAE7C,QAAA,IAAI,WAAW,KAAK,CAAC,EACrB;;YAEI,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAC1C;gBACI,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC1C;;AAED,YAAA,OAAO,SAAS,CAAC;SACpB;QAED,IAAI,CAAC,GAAG,EAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC;;AAEtE,QAAA,IAAI,CAAC,UAAU,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EACvC;AACI,YAAA,OAAO,SAAS,CAAC;SACpB;AAED,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC3E;AACD,IAAA,YAAY,CAAC,GAAQ,EAAE,cAAwB,EAAE,UAAoB,EAAA;;QAGjE,IAAI,IAAI,GAAG,IAAIiC,WAAK,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QAChF,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;KAC/D;AACJ;;AClDM,MAAM,WAAW,GAAG,IAAI,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;;;ACsB5CC,YAAI,GAAA,MAAA,GAAV,MAAM,IAAK,SAAQ,KAAK,CAAA;AAG3B,IAAA,WAAA,CAAoB,cAAc,IAAIlC,aAAO,EACjC,SAAA,GAAY,IAAIA,aAAO,EAAA;AAE/B,QAAA,KAAK,EAAE,CAAC;QAHQ,IAAW,CAAA,WAAA,GAAX,WAAW,CAAc;QACjC,IAAS,CAAA,SAAA,GAAT,SAAS,CAAc;KAGlC;AAED,IAAA,IAAI,IAAI,GAAA;QAEJ,OAAO,KAAK,CAAC,IAAI,IAAIU,QAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,IAAIA,QAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;KACrF;AAED,IAAA,IAAI,KAAK,GAAA;AAEL,QAAA,OAAO,IAAIgB,WAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KAC9E;IAED,EAAE,GAAA;QAEE,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACzB,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACtD,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,QAAA,OAAO,IAAI,CAAC;KACf;AAES,IAAA,gBAAgB,CAAC,CAAU,EAAA;QAEjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAC9C,QAAA,OAAO,IAAI,CAAC;KACf;AACS,IAAA,iBAAiB,CAAC,CAAU,EAAA;QAElC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5B,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;AACzB,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;AAEvB,QAAA,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEjC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,cAAc,CAAC,UAAA,GAAyB,UAAU,CAAC,SAAS,EAAA;QAExD,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AAC7C,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,cAAc,EAC5C;YACI,IAAI,KAAK,GAAa,EAAE,CAAC;YACzB,KAAK,IAAI,CAAC,IAAI,GAAG;AAAE,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,IAAI,QAAQ,GAAG,IAAIG,yBAAY,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACtD,OAAO,IAAIC,WAAK,CAAC,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;SAC9D;QACD,IAAI,GAAG,GAAG,IAAIL,oBAAc,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAClD,QAAA,OAAO,IAAIM,UAAK,CAAC,GAAG,EAAE,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;KACrE;AAED;;;;AAIG;IACH,gBAAgB,CAAC,IAAgB,EAAE,GAAa,EAAA;QAE5C,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,KAAK,GAAG,GAAY,CAAC;AACzB,QAAA,IAAI,GAAG,GAAG,KAAK,CAAC,QAAyC,CAAC;AAC1D,QAAA,IAAI,GAAG,YAAYF,yBAAY,EAC/B;YACI,IAAI,KAAK,GAAa,EAAE,CAAC;YACzB,KAAK,IAAI,CAAC,IAAI,GAAG;AAAE,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,YAAA,GAAoB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;SAC7C;aAED;YACI,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,GAAG,EAAE,GAA2B,CAAC;AAChE,gBAAA,cAAc,CAAC,KAAK,EAAE,IAAIJ,oBAAc,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;SACtE;KACJ;AAGD,IAAA,mBAAmB,CACf,QAAwB,EACxB,SAAkB,EAClB,SAAkB,EAClB,SAAkB,EAAA;QAGlB,QAAQ,QAAQ;YAEZ,KAAK,cAAc,CAAC,GAAG;gBACnB,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5C,KAAK,cAAc,CAAC,GAAG;gBACnB,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;YACvC,KAAK,cAAc,CAAC,GAAG;gBACnB;oBACI,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC7C,oBAAA,IAAI,UAAU,GAAG,IAAIzB,aAAO,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;;AAGpE,oBAAA,IAAI,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC;AAC9B,wBAAA,OAAO,EAAE,CAAC;AAEd,oBAAA,IAAI,OAAO,GAAG,IAAIA,aAAO,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAC3D,oBAAA,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBAEpC,IAAI,KAAK,GAAG,IAAI,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACnD,oBAAA,IAAI,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC,IAAIiC,WAAK,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,IAAIjC,aAAO,EAAE,EAAE,IAAI,CAAC,CAAC;oBAC/G,IAAI,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;oBACrD,OAAO,CAAC,QAAQ,CAAC,CAAC;iBACrB;YACL,KAAK,cAAc,CAAC,GAAG;gBACnB,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YACrD,KAAK,cAAc,CAAC,GAAG;gBACnB,IAAI,SAAS,EACb;AACI,oBAAA,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACnE,oBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;wBACxB,OAAO,CAAC,SAAS,CAAC,CAAC;iBAC1B;SAGR;AACD,QAAA,OAAO,EAAE,CAAC;KACb;IAED,aAAa,GAAA;AAET,QAAA,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KACtE;IACD,cAAc,CAAC,SAAwB,EAAE,GAAY,EAAA;QAEjD,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,KAAK,IAAI,KAAK,IAAI,SAAS,EAC3B;YACI,IAAI,KAAK,KAAK,CAAC;gBACX,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBAC1C,IAAI,KAAK,KAAK,CAAC;gBAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBAE3C;AACI,gBAAA,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;AACxB,gBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;aACvB;SACJ;KACJ;IAED,gBAAgB,GAAA;QAEZ,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC3C;IACD,iBAAiB,CAAC,SAAwB,EAAE,GAAY,EAAA;QAEpD,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,KAAK,IAAI,KAAK,IAAI,SAAS,EAC3B;YACI,IAAI,KAAK,KAAK,CAAC;gBACX,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;gBAE3C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SAC9C;KACJ;AAED,IAAA,aAAa,CAAC,KAAuB,EAAA;QAEjC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC7C;AAED;;;;;;AAMG;AACH,IAAA,cAAc,CAAC,KAAY,EAAE,OAAwB,EAAE,SAAS,GAAG,IAAI,EAAA;AAEnE,QAAA,IAAI,KAAK,YAAY,MAAI,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,cAAc,EACtE;YACI,OAAO,oBAAoB,CAAC,IAAI,EAAE,KAAa,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;SACxE;AACD,QAAA,IAAI,KAAK,YAAYmC,WAAG,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,aAAa,EACpE;YACI,OAAO,mBAAmB,CAAC,IAAI,EAAE,KAAY,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;SACtE;AACD,QAAA,IAAI,KAAK,YAAYC,cAAM,EAC3B;YACI,OAAO,sBAAsB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;SAClE;AACD,QAAA,IAAI,KAAK,YAAYC,gBAAQ,EAC7B;AACI,YAAA,OAAO,SAAS,CAAC,yBAAyB,CAAC,KAAK,EAAE,IAAI,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;SACxG;QAED,IAAI,KAAK,YAAY,OAAO;YACxB,OAAO,uBAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;;AAGpE,QAAA,OAAO,EAAE,CAAC;KACb;;AAGD,IAAA,eAAe,CAAC,KAAa,EAAA;AAEzB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;KAC3E;AACQ,IAAA,eAAe,CAAC,EAAW,EAAE,IAAI,GAAG,IAAI,EAAA;AAE7C,QAAA,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC;AAC7B,YAAA,OAAO,GAAG,CAAC;AACf,QAAA,OAAO,KAAK,CAAC;KAChB;AACD,IAAA,cAAc,CAAC,CAAS,EAAA;AAEpB,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;KAC1B;AACD,IAAA,kBAAkB,CAAC,QAAgB,EAAA;QAE/B,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC9D;AACD,IAAA,cAAc,CAAC,KAAa,EAAA;AAExB,QAAA,OAAO,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KAC9B;AACD,IAAA,cAAc,CAAC,EAAW,EAAA;QAEtB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;KACxD;AACD,IAAA,cAAc,CAAC,KAAwB,EAAA;QAEnC,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3D,QAAA,IAAI,GAAG,GAAG,IAAI,KAAK,EAAS,CAAC;AAC7B,QAAA,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EACnB;AACI,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EACvC;AACI,gBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,EAAU,CAAC;AACnC,gBAAA,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AACrC,gBAAA,OAAO,CAAC,gBAAgB,CACpB,GAAG,CAAC,CAAC,CAAC,EACN,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CACb,CAAC;AACF,gBAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACrB;SACJ;AACD,QAAA,OAAO,GAAG,CAAC;KACd;AAED,IAAA,gBAAgB,CAAC,EAAW,EAAA;AAExB,QAAA,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AACjD,QAAA,OAAO,KAAK,CAAC;KAChB;;AAGD,IAAA,UAAU,CAAC,CAAU,EAAE,IAAI,GAAG,IAAI,EAAA;AAE9B,QAAA,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KACzC;IAED,iBAAiB,CAAC,EAAW,EAAE,MAAe,EAAA;AAE1C,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;AACzB,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;AACvB,QAAA,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC;YACrB,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AAClC,aAAA,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC;YAC1B,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAEvC,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACtC,QAAA,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;AAEhC,QAAA,IAAI,MAAM,KAAK,CAAC,EAChB;YACI,IAAI,KAAK,GAAG,GAAG,CAAC;YAChB,IAAI,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;gBAClC,KAAK,GAAG,CAAC,CAAC;YACd,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;SAC1C;AAED,QAAA,SAAS,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAE/B,IAAI,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9B,IAAI,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAEhC,QAAA,IAAI,SAAkB,CAAC;AACvB,QAAA,IAAI,MAAM;AACN,YAAA,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;AAEpD,aAAA,IAAI,KAAK,GAAG,CAAC,EACb;YACI,SAAS,GAAG,EAAE,CAAC;YACf,KAAK,GAAG,CAAC,CAAC;SACb;AACI,aAAA,IAAI,KAAK,GAAG,MAAM,EACvB;AACI,YAAA,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC1B,KAAK,GAAG,MAAM,CAAC;SAClB;;AAEG,YAAA,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QAC5D,OAAO;AACH,YAAA,SAAS,EAAE,SAAS;YACpB,KAAK,EAAE,KAAK,GAAG,MAAM;SACxB,CAAC;KACL;IAED,iBAAiB,CAAC,EAAW,EAAE,MAAe,EAAA;QAE1C,OAAO,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,SAAS,CAAC;KACvD;AAED,IAAA,MAAM,CAAC,QAAgB,EAAA;QAEnB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,EAC9B;YACI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;SACpD;AACI,aAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EACjC;YACI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;SAClD;KACJ;IAED,IAAI,CAAC,EAAS,EAAE,QAAQ,GAAG,KAAK,EAAE,SAAS,GAAG,IAAI,EAAA;AAE9C,QAAA,IAAI,EAAE,YAAY,MAAI,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,KAAK,cAAc,EAChE;;YAEI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBACjF,OAAOnC,cAAM,CAAC,KAAK,CAAC;AAExB,YAAA,IAAI,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC;AACvB,YAAA,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACzE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC;gBAC5B,OAAOA,cAAM,CAAC,KAAK,CAAC;AAExB,YAAA,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC;AACrB,YAAA,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;YACzE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,CAAC;gBAC5B,OAAOA,cAAM,CAAC,KAAK,CAAC;AAExB,YAAA,IAAI,MAAM,GAAG,MAAM,EACnB;gBACI,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACpC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;aACvB;YAED,IAAI,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC,MAAM;aACnF;gBACI,IAAI,MAAM,GAAG,CAAC;AACV,oBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;gBACzB,IAAI,MAAM,GAAG,CAAC;AACV,oBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;gBACvB,OAAOA,cAAM,CAAC,IAAI,CAAC;aACtB;SACJ;QACD,OAAOA,cAAM,CAAC,KAAK,CAAC;KACvB;IAED,OAAO,GAAA;QAEH,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACxE,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,eAAe,CAAC,UAAkB,EAAA;QAE9B,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;AACjG,QAAA,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAChC,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,EAAU,CAAC;QACnC,OAAO,CAAC,SAAS,EAAE,CAAC;AACpB,QAAA,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAChC,QAAA,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9B,OAAO,CAAC,OAAO,CAAC,CAAC;KACpB;AAED,IAAA,IAAI,WAAW,GAAA;AAEX,QAAA,OAAO,IAAIG,UAAI,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;KACrE;AAED;;AAEG;AACH,IAAA,IAAI,gBAAgB,GAAA;AAEhB,QAAA,OAAO,IAAI,OAAO,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;KAC1E;AAED,IAAA,IAAI,UAAU,GAAA;AAEV,QAAA,OAAO,CAAC,CAAC;KACZ;AACD,IAAA,IAAI,QAAQ,GAAA;AAER,QAAA,OAAO,CAAC,CAAC;KACZ;;AAED,IAAA,IAAI,MAAM,GAAA,EAAa,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE;;;;AAMzD,IAAA,SAAS,CAAC,IAAc,EAAA;AAEvC,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,GAAG;QACtB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;KACzC;;AAEQ,IAAA,SAAS,CAAC,IAAc,EAAA;AAE7B,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACd,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;KACxC;;;IAID,IAAI,UAAU,CAAC,CAAU,EAAA;QAErB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AACD,IAAA,IAAI,UAAU,GAAA;AAEV,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACjE;AAED,IAAA,IAAI,QAAQ,GAAA;AAER,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC/D;IACD,IAAI,QAAQ,CAAC,CAAU,EAAA;QAEnB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;IAED,gBAAgB,CAAC,CAAU,EAAE,CAAU,EAAA;QAEnC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;AACtB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;EAGJ;AArdY6B,YAAI,GAAA,MAAA,GAAA,UAAA,CAAA;IADhB,OAAO;AACK,CAAA,EAAAA,YAAI,CAqdhB;;;AC3dM,IAAM,OAAO,GAAA,SAAA,GAAb,MAAM,OAAQ,SAAQ,KAAK,CAAA;IAO9B,WACI,CAAA,MAAgB,EAChB,IAAe,GAAA,IAAI,EACnB,IAAe,GAAA,IAAI,EACnB,KAAA,GAAgB,CAAC,EAAA;AAEjB,QAAA,KAAK,EAAE,CAAC;QARJ,IAAW,CAAA,WAAA,GAAG,CAAC,CAAC;AAChB,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAQ5B,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACxB;AACD,IAAA,IAAI,UAAU,GAAA;AAEV,QAAA,OAAO,CAAC,CAAC;KACZ;AACD,IAAA,IAAI,QAAQ,GAAA;AAER,QAAA,OAAO,CAAC,CAAC;KACZ;AACD,IAAA,IAAI,UAAU,GAAA;AAEV,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;KAClC;AACD,IAAA,IAAI,QAAQ,GAAA;AAER,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;KAClC;AACD,IAAA,IAAI,KAAK,GAAA;AAEL,QAAA,IAAI,EAAE,GAAG,IAAIR,WAAK,EAAE,CAAC;AACrB,QAAA,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AAChG,QAAA,OAAO,EAAE,CAAC;KACb;AACD,IAAA,IAAI,OAAO,GAAA;AAEP,QAAA,OAAOhB,QAAM,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;KAC/C;AACD,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAIV,aAAO,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC5D;IACD,IAAI,MAAM,CAAC,CAAU,EAAA;QAEjB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AACD,IAAA,IAAI,IAAI,GAAA;QAEJ,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;IACD,IAAI,IAAI,CAAC,CAAS,EAAA;QAEd,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AACD,IAAA,IAAI,IAAI,GAAA;QAEJ,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;IACD,IAAI,IAAI,CAAC,CAAS,EAAA;QAEd,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QACf,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AACD,IAAA,IAAI,QAAQ,GAAA;QAER,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;IACD,IAAI,QAAQ,CAAC,CAAS,EAAA;QAElB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AACD,IAAA,IAAI,UAAU,GAAA;QAEV,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;AACD,IAAA,IAAI,QAAQ,GAAA;QAER,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IACD,IAAI,UAAU,CAAC,CAAS,EAAA;QAEpB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;IACD,IAAI,QAAQ,CAAC,CAAS,EAAA;QAElB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AACD,IAAA,IAAI,MAAM,GAAA;AAEN,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACnB,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;KACnH;AACD,IAAA,IAAI,IAAI,GAAA;AAEJ,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7C,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;QAC3C,IAAI,EAAE,GAAG,CAAC;YACN,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;QAC1B,IAAI,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;AAC3B,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAChB,mBAAmB,CACf,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAC3C,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CACjD,GAAG,CAAC,CAAC;AACN,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE;YACZ,IAAI,IAAI,KAAK,CAAC;;YAEd,IAAI,IAAI,KAAK,CAAC;AAClB,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,IAAI,UAAU,GAAA;QAEV,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;QACnD,IAAI,UAAU,IAAI,CAAC;YACf,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,UAAU,CAAC;AAC1C,QAAA,OAAO,UAAU,CAAC;KACrB;AAES,IAAA,gBAAgB,CAAC,CAAU,EAAA;;AAGjC,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;AACtB,QAAA,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAClB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;AAClB,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,MAAM,CAAC,QAAgB,EAAA;QAEnB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,QAAQ,GAAG,CAAC;YACZ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;aACjD,IAAI,QAAQ,GAAG,CAAC;YACjB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AAED,IAAA,SAAS,CAAC,EAAW,EAAA;QAEjB,IAAI,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;KACpE;AAED,IAAA,SAAS,CAAC,EAAW,EAAA;AAEjB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;KAC9E;AAED,IAAA,WAAW,CAAC,EAAW,EAAA;QAEnB,IAAI,CAAC,GAAG,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1E,QAAA,OAAOU,QAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;KACjF;AAED,IAAA,eAAe,CAAC,KAAa,EAAA;QAEzB,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;AACpD,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QAClB,IAAI,EAAE,GAAG,IAAIV,aAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5D,QAAA,IAAI,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChD,QAAA,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACpB,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC3C;AAED,IAAA,eAAe,CAAC,EAAY,EAAA;AAExB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;AAAE,YAAA,OAAO,GAAG,CAAC;QAEtC,IAAI,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC;AACxC,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAI,KAAK,GAAG,EAAE,GAAG,QAAQ,CAAC;QAC1B,IAAI,IAAI,CAAC,OAAO;AACZ,YAAA,OAAO,KAAK,CAAC;aAEjB;AACI,YAAA,IAAI,EAAE,IAAI,IAAI,CAAC,WAAW;gBACtB,KAAK,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC;;gBAE3C,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,IAAI,QAAQ,CAAC;;YAGjE,IAAI,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;YAE1C,IAAI,KAAK,IAAI,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC;gBAC5B,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,QAAQ,CAAC;AAEnC,YAAA,OAAO,KAAK,CAAC;SAChB;KACJ;AACD,IAAA,kBAAkB,CAAC,QAAgB,EAAA;AAE/B,QAAA,IAAI,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;AACnC,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;KACtC;AACD,IAAA,cAAc,CAAC,KAAa,EAAA;AAExB,QAAA,OAAO,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KAC9B;AACD,IAAA,cAAc,CAAC,EAAW,EAAA;QAEtB,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AACrC,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;KACrC;AAED,IAAA,cAAc,CAAC,CAAS,EAAA;AAEpB,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;KAC1B;AAED,IAAA,eAAe,CAAC,KAAa,EAAA;QAEzB,OAAO,IAAI,CAAC,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;KACrD;AAED,IAAA,qBAAqB,CAAC,EAAW,EAAA;AAE7B,QAAA,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1C,QAAA,IAAI,KAAK,GAAG,IAAI,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnD,QAAA,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;;QAEtB,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1D,QAAA,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC;AAAE,YAAA,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;aACvB,IAAI,EAAE,GAAG,CAAC;AAAE,YAAA,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AACnC,QAAA,OAAO,EAAE,CAAC;KACb;AAED,IAAA,aAAa,CAAC,EAAoB,EAAA;QAE9B,IAAI,OAAO,EAAE,KAAK,QAAQ;AACtB,YAAA,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;;AAE9B,YAAA,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;AAEpB,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AAElC,QAAA,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,IAAIC,aAAO,EAAE,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACtG,QAAA,IAAI,GAAG,GAAG,IAAID,aAAO,EAAE,CAAC;QACxB,IAAI,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACtB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;aAChB,IAAI,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3B,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACjB,aAAA,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAChB;YACI,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACtB;aAED;YACI,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;SACpB;AAED,QAAA,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AAC/B,QAAA,OAAO,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAC1D;IAED,iBAAiB,CAAC,CAAU,EAAE,MAAe,EAAA;;AAGzC,QAAA,IAAI,EAAE,GAAG,IAAIC,aAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,KAAK,GAAG,IAAIA,aAAO,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACzC,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACzE,QAAA,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAClB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QACnB,IAAI,CAAS,EAAE,CAAS,CAAC;AACzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC1B;YACI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAClD,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,YAAA,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;AAChB,YAAA,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;AAChB,YAAA,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACjB,YAAA,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAEjB,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AACrC,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;YAErC,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtD,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAEvD,CAAC,IAAI,EAAE,CAAC;SACX;QACD,IAAI,KAAK,GAAG,IAAID,aAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC7E,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,MAAM,EAC1B;AACI,YAAA,OAAO,KAAK,CAAC;SAChB;AACI,aAAA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAC9B;AACI,YAAA,OAAO,KAAK,CAAC;SAChB;aAED;YACI,IAAI,EAAE,GAAG,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9C,IAAI,EAAE,GAAG,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC5C,YAAA,OAAO,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;SACpD;KACJ;AACD,IAAA,eAAe,CAAC,UAAkB,EAAA;AAE9B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EACvD;AACI,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACtB,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;YAClC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;YAClC,OAAO,CAAC,EAAE,CAAC,CAAC;SACf;AACD,QAAA,OAAO,EAAE,CAAC;KACb;AACD,IAAA,cAAc,CAAC,KAAwB,EAAA;AAEnC,QAAA,IAAI,MAAgB,CAAC;AACrB,QAAA,IAAI,KAAK,YAAY,KAAK,EAC1B;AACI,YAAA,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,YAAA,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;SACpC;;AAEG,YAAA,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;;QAGrB,IAAI,IAAI,CAAC,OAAO;YACZ,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;aAEtC;AACI,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClB,YAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAClB;QACD,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAEnC,IAAI,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;QAChF,IAAI,OAAO,GAAW,EAAE,CAAC;AACzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAC7C;AACI,YAAA,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1B,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YACtB,IAAI,CAACU,QAAM,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EACzB;AACI,gBAAA,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC;gBACnB,EAAE,CAAC,QAAQ,GAAGA,QAAM,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;AAC/C,gBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACpB;SACJ;AACD,QAAA,OAAO,OAAO,CAAC;KAClB;AACD,IAAA,IAAI,CAAC,EAAW,EAAA;QAEZ,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;YACvF,OAAOR,cAAM,CAAC,KAAK,CAAC;AAExB,QAAA,IAAI,MAAM,GAAGA,cAAM,CAAC,KAAK,CAAC;QAE1B,IAAIQ,QAAM,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,EAC5C;AACI,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;AAC/B,YAAA,MAAM,GAAGR,cAAM,CAAC,IAAI,CAAC;SACxB;aACI,IAAIQ,QAAM,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,SAAS,CAAC,EAC/C;AACI,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC;AACjC,YAAA,MAAM,GAAGR,cAAM,CAAC,IAAI,CAAC;SACxB;QACD,IAAI,MAAM,KAAKA,cAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,IAAIQ,QAAM,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,EACvF;AACI,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;SAC/B;AACD,QAAA,OAAO,MAAM,CAAC;KACjB;AACD,IAAA,mBAAmB,CACf,QAAwB,EACxB,SAAkB,EAClB,SAAkB,EAClB,SAAmB,EAAA;QAGnB,QAAQ,QAAQ;YAEZ,KAAK,cAAc,CAAC,GAAG;gBACnB;AACI,oBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AAC/B,oBAAA,OAAO,GAAG,CAAC;iBACd;YACL,KAAK,cAAc,CAAC,GAAG;AACnB,gBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,KAAK,cAAc,CAAC,GAAG;gBACnB;oBACI,OAAO,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;iBACzD;YACL,KAAK,cAAc,CAAC,GAAG;gBACnB,IAAI,SAAS,EACb;AACI,oBAAA,IAAIA,QAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC1D,wBAAA,OAAO,EAAE,CAAC;oBACd,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;iBACrD;YACL,KAAK,cAAc,CAAC,GAAG;gBACnB;;oBAEI,IAAI,SAAS,EACb;AACI,wBAAA,OAAO,kBAAkB,CAAgB,CAAC,CAAC;qBAC9C;iBACJ;AACL,YAAA;AACI,gBAAA,OAAO,EAAE,CAAC;SACjB;KACJ;IACD,cAAc,CAAC,KAAY,EAAE,OAAwB,EAAA;;AAGjD,QAAA,IAAI,KAAK,YAAYwB,YAAI,EACzB;AACI,YAAA,OAAO,SAAS,CAAC,uBAAuB,CAAC,KAAK,EAAE,IAAI,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;SAC3F;aACI,IAAI,KAAK,YAAYE,cAAM,IAAI,KAAK,YAAYD,WAAG,EACxD;YACI,OAAO,8BAA8B,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;SAC/D;AACI,aAAA,IAAI,KAAK,YAAYE,gBAAQ,EAClC;YACI,OAAO,SAAS,CAAC,yBAAyB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;SACrE;AACI,aAAA,IAAI,KAAK,YAAY,SAAO,EACjC;YACI,OAAO,gBAAgB,CAAC,IAAI,EAAE,KAAc,CAAC,CAAC;SACjD;;AAEG,YAAA,OAAO,EAAE,CAAC;KACjB;IAED,gBAAgB,GAAA;AAEZ,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;KAC/B;IACD,aAAa,GAAA;AAET,QAAA,IAAI,OAAO,GAAG,IAAIpC,aAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACzD,QAAA,IAAI,GAAG,GAAG;AACN,YAAA,IAAID,aAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC1B,IAAIA,aAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AAC3B,YAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC;YAC1B,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;SAC9B,CAAC;QACF,KAAK,IAAI,CAAC,IAAI,GAAG;AACb,YAAA,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1D,IAAI,CAACU,QAAM,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC;AAC5B,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9B,IAAI,CAACA,QAAM,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;AAC1B,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAE5B,QAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,QAAA,OAAO,GAAG,CAAC;KACd;IACD,iBAAiB,CAAC,SAAwB,EAAE,GAAY,EAAA;QAEpD,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;KACrC;IACD,cAAc,CAAC,SAAwB,EAAE,GAAY,EAAA;AAEjD,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAElC,QAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EACxB;AACI,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;AAClC,YAAA,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEX,YAAA,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;gBACjB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACrC,iBAAA,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAE1C;gBACI,IAAI,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;;gBAE3B,IAAI,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,EAChC;AACI,oBAAA,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACrC,oBAAA,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACpC,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBACzB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;iBAC1C;qBACI,IAAI,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,EACnC;AACI,oBAAA,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACrC,oBAAA,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACpC,IAAI,EAAE,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;iBACtC;;AAEG,oBAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACvB;SACJ;KACJ;IACD,gBAAgB,CAAC,KAAK,GAAG,CAAC,EAAA;QAEtB,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;QAC5C,IAAI,CAAC,KAAK,EACV;AACI,YAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,CAAC;YAChD,KAAK,GAAGE,eAAS,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;SAC1C;QAED,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;AAEhC,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC;AACjB,YAAA,KAAK,EAAE,CAAC;QAEZ,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,IAAI,CAAC,OAAO;YACZ,GAAG,CAAC,GAAG,EAAE,CAAC;QAEd,IAAI,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACzC,QAAA,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AAChC,QAAA,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,OAAO;AACZ,YAAA,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;AACxB,QAAA,OAAO,EAAE,CAAC;KACb;AACS,IAAA,SAAS,CAAC,IAAc,EAAA;AAE9B,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAU,IAAI,CAAC,IAAI,GAAG;AACtB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC7B,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,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC9B;CAEJ,CAAA;AA5jBY,OAAO,GAAA,SAAA,GAAA,UAAA,CAAA;IADnB,OAAO;AACK,CAAA,EAAA,OAAO,CA4jBnB;;;ACpjBD,IAAI,cAA8B,CAAC;AACnC,SAAS,iBAAiB,GAAA;AAEtB,IAAA,IAAI,CAAC,cAAc;AACf,QAAA,cAAc,GAAG,mBAAmB,CAAC,aAAa,CAC9C,IAAI0B,kBAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CACvF,CAAC;AACN,IAAA,OAAO,cAAc,CAAC;AAC1B,CAAC;AAGYF,cAAM,GAAA,QAAA,GAAZ,MAAM,MAAO,SAAQ,KAAK,CAAA;IAE7B,WAAY,CAAA,MAAgB,EAAE,MAAA,GAAiB,IAAI,EAAA;AAE/C,QAAA,KAAK,EAAE,CAAC;QACR,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;KACzB;AAGD,IAAA,IAAI,KAAK,GAAA;AAEL,QAAA,IAAI,EAAE,GAAG,IAAI,MAAM,EAAE,CAAC;QACtB,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACvE,QAAA,OAAO,EAAE,CAAC;KACb;AAED,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAIpC,aAAO,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC5D;IACD,IAAI,MAAM,CAAC,CAAU,EAAA;QAEjB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AACD,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;IACD,IAAI,MAAM,CAAC,CAAS,EAAA;QAEhB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AAES,IAAA,gBAAgB,CAAC,CAAU,EAAA;QAEjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,iBAAiB,EAAE,CAAC;AAClD,QAAA,OAAO,IAAI,CAAC;KACf;AACS,IAAA,iBAAiB,CAAC,CAAU,EAAA;QAElC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5B,QAAA,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEjC,QAAA,OAAO,IAAI,CAAC;KACf;;AAID,IAAA,IAAI,UAAU,GAAA;AAEV,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;KAClC;AACD,IAAA,IAAI,UAAU,GAAA;AAEV,QAAA,OAAO,CAAC,CAAC;KACZ;AACD,IAAA,IAAI,QAAQ,GAAA;AAER,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;KAClC;AACD,IAAA,IAAI,QAAQ,GAAA;AAER,QAAA,OAAO,CAAC,CAAC;KACZ;AACD,IAAA,SAAS,CAAC,EAAW,EAAA;AAEjB,QAAA,OAAO,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;KACvE;AACD,IAAA,IAAI,IAAI,GAAA;QAEJ,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;KACtC;AACD,IAAA,IAAI,KAAK,GAAA;QAEL,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC;KACtC;AACD,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;KACrC;AAED,IAAA,IAAI,OAAO,GAAA;AAEP,QAAA,OAAO,IAAI,CAAC;KACf;;AAGD,IAAA,IAAI,WAAW,GAAc,EAAA,OAAO,KAAK,CAAC,EAAE;AAE5C,IAAA,eAAe,CAAC,KAAa,EAAA;QAEzB,OAAQ,KAAK,CAAC,IAAIA,aAAO,EAAE,EAAE,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAa,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC1G;AAED,IAAA,kBAAkB,CAAC,QAAgB,EAAA;AAE/B,QAAA,IAAI,KAAK,GAAG,QAAQ,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;AACpD,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;KACtC;AAED,IAAA,cAAc,CAAC,KAAa,EAAA;QAExB,OAAO,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KAC7C;AAED,IAAA,cAAc,CAAC,EAAW,EAAA;QAEtB,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AACrC,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;KACrC;AAED,IAAA,cAAc,CAAC,CAAS,EAAA;AAEpB,QAAA,OAAO,CAAC,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;KAC3C;AAED,IAAA,cAAc,CAAC,KAAwB,EAAA;AAEnC,QAAA,IAAI,MAAgB,CAAC;AACrB,QAAA,IAAI,KAAK,YAAY,KAAK,EAC1B;AACI,YAAA,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,YAAA,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YACjC,0BAA0B,CAAC,MAAM,CAAC,CAAC;AACnC,YAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;AAAE,gBAAA,OAAO,EAAE,CAAC;SACpC;;AAEG,YAAA,OAAO,EAAE,CAAC;;QAGd,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AAElC,QAAA,IAAI,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;AAEzD,QAAA,IAAI,SAAS,GAAG,IAAI,KAAK,EAAO,CAAC;AACjC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAC7C;AACI,YAAA,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1B,IAAI,CAACU,QAAM,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EACzB;AACI,gBAAA,IAAI,GAAG,GAAG,IAAIyB,WAAG,CAAC,IAAInC,aAAO,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AAC9D,gBAAA,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AACjC,gBAAA,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,gBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACvB;SACJ;AACD,QAAA,OAAO,SAAS,CAAC;KACpB;AAED,IAAA,eAAe,CAAC,EAAY,EAAA;AAExB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;AACnB,YAAA,OAAO,GAAG,CAAC;QACf,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;KACtE;AAED,IAAA,SAAS,CAAC,EAAW,EAAE,IAAI,GAAG,IAAI,EAAA;QAE9B,OAAOU,QAAM,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;KACvF;AACD,IAAA,eAAe,CAAC,UAAkB,EAAA;QAE9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,EACnC;AACI,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC1B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;YAC1C,OAAO,CAAC,MAAM,CAAC,CAAC;SACnB;AACD,QAAA,OAAO,EAAE,CAAC;KACb;AAEQ,IAAA,cAAc,CAAC,KAAY,EAAE,OAAwB,EAAE,SAAS,GAAG,IAAI,EAAA;AAE5E,QAAA,IAAI,KAAK,YAAYyB,WAAG,EACxB;YACI,OAAO,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;SACjE;AACD,QAAA,IAAI,KAAK,YAAYD,YAAI,EACzB;AACI,YAAA,OAAO,SAAS,CAAC,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;SACrG;AACD,QAAA,IAAI,KAAK,YAAY,QAAM,EAC3B;YACI,OAAO,wBAAwB,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;SAC3D;AACD,QAAA,IAAI,KAAK,YAAY,OAAO,EAC5B;YACI,OAAO,SAAS,CAAC,8BAA8B,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;SAC1E;QACD,IAAI,KAAK,YAAYG,gBAAQ;AACzB,YAAA,OAAO,SAAS,CAAC,yBAAyB,CAAC,KAAK,EAAE,IAAI,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AACzG,QAAA,OAAO,EAAE,CAAC;KACb;;AAGD,IAAA,IAAI,gBAAgB,GAAA;AAEhB,QAAA,OAAO,IAAI,OAAO,CAAC,IAAIrC,aAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAIA,aAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;KACtG;AAED,IAAA,IAAI,WAAW,GAAA;AAEX,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACpB,QAAA,IAAI,CAAC,GAAG,IAAIA,aAAO,CAAC;AACpB,QAAA,IAAI,CAAC,GAAG,IAAIA,aAAO,CAAC;QACpB,KAAK,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG,IAAIC,aAAO,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;QAElE,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;KAChD;AAED,IAAA,cAAc,CAAC,UAAA,GAAyB,UAAU,CAAC,SAAS,EAAA;AAExD,QAAA,IAAI,GAAG,GAAG,IAAIU,cAAQ,EAAE,CAAC;AACzB,QAAA,IAAI,MAAM,GAAG,iBAAiB,EAAE,CAAC;AACjC,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,cAAc,EAC5C;AACI,YAAA,IAAI,QAAQ,GAAG,IAAIkB,yBAAY,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAiB,CAAC,CAAC;AAC7F,YAAA,GAAG,CAAC,GAAG,CAAC,IAAIC,WAAK,CAAC,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC;SAChE;aAED;AACI,YAAA,IAAI,IAAI,GAAG,IAAIC,UAAK,CAAC,MAAM,EAAE,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACzE,YAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACjB;AAED,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AACvC,QAAA,OAAO,GAAG,CAAC;KACd;IACD,gBAAgB,CAAC,IAAgB,EAAE,GAAa,EAAA;QAE5C,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QACpE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;KAClC;AACD,IAAA,wBAAwB,CAAC,IAAgB,EAAE,GAAa,EAAE,QAAkB,EAAA;AAExE,QAAA,IAAI,IAAI,KAAK,UAAU,CAAC,cAAc,EACtC,CAEC;aAED;YACI,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAU,CAAC;AACjC,YAAA,CAAC,CAAC,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9E,YAAA,OAAO,GAAG,CAAC;SACd;KAEJ;AAED,IAAA,iBAAiB,CAAC,IAAmB,EAAA;AAEjC,QAAA,IAAI,IAAI,KAAK,aAAa,CAAC,IAAI;AAC3B,YAAA,OAAO,CAAC,CAAC;;AAET,YAAA,OAAO,CAAC,CAAC;KAChB;IAED,aAAa,GAAA;AAET,QAAA,IAAI,GAAG,GAAG;AACN,YAAA,IAAI/B,aAAO,EAAE;AACb,YAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC;YAC5B,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAIA,aAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AAC7B,YAAA,IAAIA,aAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;SAC/B,CAAC;AAEF,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,QAAA,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACtC,QAAA,OAAO,GAAG,CAAC;KACd;AAED,IAAA,mBAAmB,CACf,QAAwB,EACxB,SAAkB,EAClB,SAAkB,EAClB,SAAmB,EAAA;QAGnB,QAAQ,QAAQ;YAEZ,KAAK,cAAc,CAAC,GAAG;gBACnB;oBACI,OAAO,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;iBACzD;YACL,KAAK,cAAc,CAAC,GAAG;AACnB,gBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,KAAK,cAAc,CAAC,GAAG;gBACnB,IAAI,SAAS,EACb;AACI,oBAAA,IAAIU,QAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC1D,wBAAA,OAAO,EAAE,CAAC;oBACd,IAAI,CAAC,GAAG,IAAIwB,YAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;oBACzC,OAAO,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;iBAC5D;YACL,KAAK,cAAc,CAAC,GAAG;gBACnB,IAAI,GAAG,GAAG,sBAAsB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAClD,gBAAA,IAAI,GAAG;AACH,oBAAA,OAAO,GAAG,CAAC;YACnB,KAAK,cAAc,CAAC,GAAG;gBACnB;AACI,oBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;oBAC/B,GAAG,CAAC,KAAK,EAAE,CAAC;AACZ,oBAAA,OAAO,GAAG,CAAC;iBACd;SAGR;AACD,QAAA,OAAO,EAAE,CAAC;KACb;IACD,cAAc,CAAC,SAAwB,EAAE,GAAY,EAAA;AAGjD,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AAC/B,QAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EACxB;AACI,YAAA,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,IAAI,CAAC,EACL;AACI,gBAAA,IAAI,KAAK,GAAG,CAAC,EACb;AACI,oBAAA,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBACX,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC3C;qBAED;oBACI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBACtC;aACJ;SACJ;KACJ;IACD,gBAAgB,GAAA;AAEZ,QAAA,IAAI,GAAG,GAAG,CAAC,IAAIlC,aAAO,EAAE,CAAC,CAAC;AAC1B,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;AACnB,QAAA,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACtC,QAAA,OAAO,GAAG,CAAC;KACd;IACD,iBAAiB,CAAC,SAAwB,EAAE,GAAY,EAAA;AAEpD,QAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EACxB;AACI,YAAA,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;AAC1B,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;SACzB;KACJ;AACD,IAAA,aAAa,CAAC,EAAoB,EAAA;QAE9B,IAAI,OAAO,EAAE,KAAK,QAAQ;AACtB,YAAA,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;;AAE9B,YAAA,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;AAEpB,QAAA,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAE7B,QAAA,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;QAEnC,OAAO,KAAK,CAAC,IAAIA,aAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAIC,aAAO,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;KAC5F;IACD,iBAAiB,CAAC,EAAW,EAAE,MAAe,EAAA;AAE1C,QAAA,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1C,QAAA,IAAI,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC;AAC1B,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAEnC,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAA,OAAO,KAAK,CAAC,IAAID,aAAO,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACzE;;;;AAKS,IAAA,SAAS,CAAC,IAAc,EAAA;AAE9B,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAU,IAAI,CAAC,IAAI,GAAG;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;KAC9B;;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,OAAO,CAAC,CAAC;KAC5B;EAEJ;AA5YYoC,cAAM,GAAA,QAAA,GAAA,UAAA,CAAA;IADlB,OAAO;AACK,CAAA,EAAAA,cAAM,CA4YlB;;ACraM,MAAM,eAAe,GAAG;IAC3B,eAAe,EAAE,GAAG;IACpB,cAAc,EAAE,GAAG;IACnB,iBAAiB,EAAE,CAAC;IACpB,iBAAiB,EAAE,EAAE;CACxB,CAAC;AAGI,SAAU,eAAe,CAAC,GAA0B,EAAA;AAEtD,IAAA,IAAI,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;AACxD,IAAA,IAAI,UAAU,GAAG,MAAM,GAAG,eAAe,CAAC,eAAe,CAAC;;IAE1D,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,iBAAiB,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC;AAC3H,IAAA,IAAI,MAAM,GAAG,eAAe,CAAC,cAAc;QACvC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;AAC1C,IAAA,OAAO,UAAU,CAAC;AACtB,CAAC;AAGD;;;AAGG;AACG,SAAU,gBAAgB,CAAC,EAAuB,EAAA;IAEpD,IAAI,OAAO,GAAa,EAAE,CAAC;AAC3B,IAAA,IAAI,EAAE,YAAYA,cAAM,EACxB;AACI,QAAA,IAAI,UAAU,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE;AAC/B,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC;KACpC;;;AAIG,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,EACpC;AACI,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB,YAAA,IAAI,CAAC1B,QAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC;aAClD;gBACI,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAQ,CAAC;AACvC,gBAAA,IAAI,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;gBACtC,IAAI,UAAU,KAAK,CAAC;oBAChB,SAAS;gBAEb,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,UAAU,CAAC;gBACjC,IAAI,MAAM,GAAa,EAAE,CAAC;AAC1B,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EACnC;oBACI,IAAI,KAAK,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,oBAAA,IAAI,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC;AACvB,wBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBAC1B;gBACDM,mBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,gBAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;oBACnB,SAAS;AAEb,gBAAA,KAAK,IAAI,CAAC,IAAI,MAAM,EACpB;AACI,oBAAA,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,OAAO;AACvB,wBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;iBAC3B;aACJ;SACJ;AACL,IAAA,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC1B,IAAA,OAAO,OAAO,CAAC;AACnB;;AC1EA,IAAI,OAAY,CAAC;AACX,MAAO,MAAO,SAAQU,WAAK,CAAA;AAE7B,IAAA,SAAS,CAAC,SAAoB,GAAA,EAAE,EAAE,WAAW,GAAG,IAAI,EAAA;AAEhD,QAAA,IAAI,MAAM,GAAc,EAAE,EACtB,IAAa,CAAC;QAClB,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;gBACI,IAAI,WAAW,EACf;AACI,oBAAA,IAAI,CAAC,OAAO;wBAAE,OAAO,GAAG,IAAIS,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,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;AAE1C,oBAAA,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,GAAG,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,GAAG,UAAU,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;iBAC5G;;AAEG,oBAAA,UAAU,GAAG,SAAS,GAAG,CAAC,CAAC;aAClC;iBAED;;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;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;SACJ;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;SAC1B;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,IAAIG,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;;AC3FD;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,IAAI5B,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;SACpC;aAED;;;;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;SACrF;KACJ;AACD,IAAA,OAAO,KAAK,CAAC;AACjB;;AC1DA;;;AAGE;AAEF;AACA;AACA,SAAS,SAAS,CAAC,CAAO,EAAE,CAAO,EAAE,CAAO,EAAA;AAExC,IAAA,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACtD,QAAA,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACtD,QAAA,OAAO,IAAI,CAAC;AAChB,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC;AACD;AACA;AACA;AACA;AACA;SACgB,WAAW,CAAC,CAAO,EAAE,CAAO,EAAE,CAAO,EAAA;;;IAIjD,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/B,QAAA,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,GAAG,KAAK,CAAC;QACT,OAAO,CAAC,CAAC;AACb,IAAA,OAAO,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AACD;;AAEG;AACG,SAAU,WAAW,CAAC,EAAQ,EAAE,EAAQ,EAAE,EAAQ,EAAE,EAAQ,EAAA;;;IAI9D,IAAI,EAAE,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACjC,IAAI,EAAE,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACjC,IAAI,EAAE,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACjC,IAAI,EAAE,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;;AAEjC,IAAA,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;AACtB,QAAA,OAAO,IAAI,CAAC;;;IAGhB,IAAI,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACjC,QAAA,OAAO,IAAI,CAAC;;IAEhB,IAAI,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACjC,QAAA,OAAO,IAAI,CAAC;;IAEhB,IAAI,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACjC,QAAA,OAAO,IAAI,CAAC;;IAEhB,IAAI,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AACjC,QAAA,OAAO,IAAI,CAAC;IAChB,OAAO,KAAK,CAAC;AACjB;;SChDgB,qBAAqB,CAAC,GAAW,EAAE,SAAS,GAAG,GAAG,EAAA;AAE9D,IAAA,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC;AAEnB,IAAA,IAAI,UAAU,GAAG,IAAI,GAAG,EAAmB,CAAC;AAC5C,IAAA,IAAI,UAAU,GAAG,IAAI,GAAG,EAAmB,CAAC;AAE5C,IAAA,MAAM,eAAe,GAAG,CAAC,KAAa,KAAI;QAEtC,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC;AAEhB,QAAA,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvB,QAAA,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,QAAA,OAAO,CAAC,CAAC;AACb,KAAC,CAAC;AAEF,IAAA,MAAM,iBAAiB,GAAG,CAAC,KAAa,KAAI;QAExC,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC;AAEhB,QAAA,IAAIA,QAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EACpB;YACI,IAAI,GAAG,CAAC,SAAS;AACb,gBAAA,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;;gBAE9D,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;SACjF;;YAEG,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC1E,QAAA,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,QAAA,OAAO,CAAC,CAAC;AACb,KAAC,CAAC;AAEF,IAAA,IAAI,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC;AACzB,IAAA,IAAI,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC;IAEtB,IAAI,MAAM,GAAY,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GACrB;AACI,QAAA,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;QACxB,OAAO,IAAI,EACX;YACI,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AAEnC,YAAA,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC;YACxB,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAC/C,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAE/C,YAAA,IAAI,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,YAAA,IAAI,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;AAEjC,YAAA,IAAI,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACnC,YAAA,IAAI,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAEnC,YAAA,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;;;;;AAQ5C,YAAA,IACI,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,SAAS;AAChE,gBAAA,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,SAAS,EAEpE;AACI,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACpB,MAAM;aACT;;AAEG,gBAAA,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;SACzB;QACD,CAAC,IAAI,IAAI,CAAC;KACb;IAED,IAAI,QAAQ,GAAG2B,gBAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9C,IAAA,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACrC,IAAA,QAAQ,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;AACrC,IAAA,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED;AACA,SAAS,uBAAuB,CAAC,GAAc,EAAE,SAAS,GAAG,GAAG,EAAA;AAE5D,IAAA,IAAI,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;AAClC,IAAA,IAAI,UAAU,GAAG,IAAI,GAAG,EAAmB,CAAC;AAE5C,IAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC;AAE1B,IAAA,MAAM,eAAe,GAAG,CAAC,KAAa,KAAI;QAEtC,IAAI,KAAK,KAAK,CAAC;AAAE,YAAA,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;AACxC,KAAC,CAAC;AACF,IAAA,MAAM,eAAe,GAAG,CAAC,KAAa,KAAI;AAEtC,QAAA,OAAO,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;AACvC,KAAC,CAAC;AAEF,IAAA,MAAM,iBAAiB,GAAG,CAAC,KAAa,KAAI;QAExC,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC;QAEhB,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC;AACzC,QAAA,IAAI3B,QAAM,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM;YAC3C,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;;YAEhE,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC3D,QAAA,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzB,QAAA,OAAO,CAAC,CAAC;AACb,KAAC,CAAC;IAEF,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,MAAM,GAAY,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GACrB;AACI,QAAA,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;QACxB,OAAO,IAAI,EACX;YACI,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AAEnC,YAAA,IAAI,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;AACrC,YAAA,IAAI,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YACrC,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC;aACzB;AACI,gBAAA,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC,EACvB;oBACI,IAAI,KAAK,GAAoB,EAAE,CAAC;oBAChC,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,EAAE;AACjC,wBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;oBAClD,MAAM,CAAC,IAAI,CAAC,IAAI2B,gBAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;iBACpC;gBACD,MAAM;aACT;AAED,YAAA,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC;YACxB,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;YAC/C,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;AAE/C,YAAA,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;AACrB,YAAA,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;AAErB,YAAA,IAAI,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACnC,YAAA,IAAI,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAEnC,YAAA,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAE5C,YAAA,IACI,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,KAAK;AACnE,gBAAA,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,KAAK,EAEvE;AACI,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBACpB,MAAM;aACT;;AAEG,gBAAA,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;SACzB;QACD,CAAC,IAAI,IAAI,CAAC;KACb;IAED,IAAI,QAAQ,GAAGA,gBAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAC9C,IAAA,OAAO,QAAQ,CAAC;AACpB,CAAC;AAED;;;;;;;AAOG;SACa,kCAAkC,CAAC,GAAc,EAAE,IAAA,GAAiB,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE,QAAQ,GAAG,IAAI,EAAE,YAAY,GAAG,IAAI,EAAA;AAEhJ,IAAA,IAAI,KAAK,GAAG,SAAS,GAAG,SAAS,CAAC;AAClC,IAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC;AAE1B,IAAA,MAAM,eAAe,GAAG,CAAC,UAAkB,EAAE,QAAgB,KAAI;AAE7D,QAAA,IAAI,CAAC,IAAI,IAAI3B,QAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;AAC1C,YAAA,OAAO,IAAIwB,YAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;;YAEtE,OAAO,IAAIC,WAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9G,KAAC,CAAC;AAEF,IAAA,IAAI,WAAW,GAAG,IAAIE,gBAAQ,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,IAAA,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,CAAC,EAAE,IAAI,IAAI,QAAQ,EAAE,IAAI,EAAE,EACnD;AACI,QAAA,IAAI,IAAI,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,KAAK,IAAI,IAAI,CAAC3B,QAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;SAChI;;YAEI,IAAI,QAAQ,IAAI,CAAC,IAAI,GAAG,KAAK,IAAI,CAAC;AAC9B,gBAAA,OAAO,KAAK,GAAG,IAAI,GAAG,CAAC,EACvB;oBACI,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,CAAC;qBAC5B;AACI,wBAAA,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;wBACnD,MAAM;qBACT;;oBAGD,IAAI,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;oBACvE,IAAI,EAAE,GAAG,KAAK,CAAC;oBACf,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,EAAE,EAC1B;wBACI,IAAI,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC7D,IAAI,GAAG,KAAK,QAAQ;4BAChB,MAAM;qBACb;AAED,oBAAA,IAAI,KAAK,KAAK,EAAE;qBAChB;AACI,wBAAA,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AACpD,wBAAA,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AACxD,wBAAA,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;wBACf,SAAS;qBACZ;yBACI,IAAI,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC,EACzB;wBACI,WAAW,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;qBAC1F;yBAED;AACI,wBAAA,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;wBACpB,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACrB,wBAAA,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC/C,IAAI,GAAG,GAAG,IAAIyB,WAAG,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AAEhF,wBAAA,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;AAEvB,wBAAA,IAAI,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACtD,wBAAA,IAAI,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACtD,wBAAA,IAAI,GAAG,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,GAAG,KAAK;AAC3D,+BAAA,GAAG,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,GAAG,KAAK;AACjE,4BAAA,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;4BAEtB,WAAW,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;qBAC9F;AAED,oBAAA,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;AAEf,oBAAA,IAAI,KAAK,KAAK,IAAI,GAAG,CAAC,EACtB;wBACI,WAAW,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;wBACjF,KAAK,GAAG,IAAI,CAAC;wBACb,MAAM;qBACT;iBACJ;;gBAED,WAAW,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;;YAGrF,IAAI,IAAI,KAAK,QAAQ;AACjB,gBAAA,WAAW,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YACtD,KAAK,GAAG,IAAI,CAAC;SAChB;KACJ;AAED,IAAA,OAAO,WAAW,CAAC;AACvB,CAAC;AAEe,SAAA,0BAA0B,CAAC,GAAc,EAAE,IAAiB,GAAA,SAAS,EAAE,SAAS,GAAG,GAAG,EAAE,YAAY,GAAG,IAAI,EAAA;AAEvH,IAAA,IAAI,GAAG,GAAG,kCAAkC,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;AACvF,IAAA,IAAI,GAAG,GAAG,kCAAkC,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;AAExF,IAAA,IAAI,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ;AAC3B,QAAA,OAAO,GAAG,CAAC;;AAEX,QAAA,OAAO,GAAG,CAAC;AACnB,CAAC;AAED;;;;;;AAMG;AACG,SAAU,4BAA4B,CAAC,EAAY,EAAE,SAAS,GAAG,GAAG,EAAE,YAAY,GAAG,IAAI,EAAA;AAE3F,IAAA,IAAI,EAAE,CAAC,QAAQ,GAAG,CAAC;QAAE,OAAO;AAE5B,IAAA,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC;IACrB,IAAI,GAAG,GAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAChC,IAAI,IAAI,GAAa,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACjC,IAAA,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAClB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAClC;AACI,QAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACb,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAC3B;AACI,YAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACZ,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACjB,IAAI,GAAG,CAAC,CAAC;SACZ;KACJ;AAED,IAAA,IAAI,EAAE,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;QAChD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;IAE7B,IAAI,GAAG,GAAG,0BAA0B,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;AAChG,IAAA,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;AAC/B,IAAA,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;AAC/B,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAED;AACA,SAAS,IAAI,CAAC,CAAS,EAAE,CAAS,EAAA;AAE9B,IAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACX,IAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,IAAI,SAAS,GAAG,MAAM,CAAC;AAEvB;AACA,SAAS,GAAG,CAAC,GAAW,EAAA;IAEpB,OAAO,GAAG,GAAG,GAAG,CAAC;AACrB,CAAC;AACD,SAAS,UAAU,CAAC,GAAW,EAAE,GAAW,EAAA;IAExC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC;AAC5C,CAAC;AAQD,SAAS,QAAQ,CAAC,GAAS,EAAE,GAAS,EAAA;AAElC,IAAA,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AACD,SAAS,QAAQ,CAAC,GAAS,EAAE,GAAS,EAAA;AAElC,IAAA,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AACD,SAAS,UAAU,CAAC,GAA8B,EAAE,KAAa,EAAA;AAE7D,IAAA,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAClD,CAAC;AACD,SAAS,cAAc,CAAC,GAAS,EAAE,GAAS,EAAE,KAAa,EAAA;IAEvD,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,QAAQ,CAAC,GAAS,EAAE,GAAS,EAAA;AAElC,IAAA,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,WAAW,CAAC,GAA8B,EAAA;AAE/C,IAAA,OAAO,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,iBAAiB,CAAC,EAAQ,EAAE,EAAQ,EAAE,EAAQ,EAAE,MAAe,EAAA;IAEpE,IAAI,KAAK,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC7B,IAAA,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,UAAU,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAErC,IAAA,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;AACzB,QAAA,OAAO,IAAID,YAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;SAElD;AACI,QAAA,IAAI,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QACnD,IAAI,MAAM,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAE5C,IAAI,QAAQ,GAAG,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,QAAQ,GAAG,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAEpC,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAChD,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAChD,QAAA,IAAI,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;YACzC,OAAO,IAAIC,WAAG,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;;YAE7E,OAAO,IAAIA,WAAG,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KACnF;AACL,CAAC;AAED;;;;;;;AAOG;AACG,SAAU,YAAY,CAAC,EAAQ,EAAE,EAAQ,EAAE,EAAQ,EAAE,EAAQ,EAAA;IAE/D,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACzB,IAAA,IAAI,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAE7B,IAAI,MAAM,GAAG,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAG7B;QACI,IAAI,CAAC,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACzB,QAAA,IAAI,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;QAE7B,IAAI,aAAa,GAAG,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAE7C,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AACrC,QAAA,IAAI,aAAa,IAAI,MAAM;SAC3B;AACI,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,OAAO,GAAG,cAAc,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC1C,IAAI,OAAO,GAAG,cAAc,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC1C,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;AACvC,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAEpC,OAAO;gBACH,IAAIA,WAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC;gBACtE,IAAIA,WAAG,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC;aACzE,CAAC;SACL;aAED;YACI,IAAI,KAAK,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE3B,YAAA,IAAI,EAAU,CAAC;AACf,YAAA,IAAI,aAAa;gBACb,EAAE,GAAG,OAAO,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;iBAEhC;AACI,gBAAA,IAAI,WAAW,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3C,IAAI,YAAY,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,WAAW,GAAG,OAAO,CAAC;AACtD,gBAAA,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,KAAK,IAAI,WAAW,CAAC;aACxD;AAED,YAAA,IAAI,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;AAC7C,YAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC5B,YAAA,KAAK,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAC5B,YAAA,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAE/B,OAAO;gBACH,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC;gBACtC,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC;aAC1C,CAAC;SACL;KAyCJ;AACL;;;AC9eA,MAAM,cAAc,GAAG,GAAG,CAAC;AAGpB,IAAM,MAAM,GAAA,QAAA,GAAZ,MAAM,MAAO,SAAQ,KAAK,CAAA;AAG7B,IAAA,WAAA,CAAoB,aAAwB,EAAE,EAAA;AAE1C,QAAA,KAAK,EAAE,CAAC;QAFQ,IAAU,CAAA,UAAA,GAAV,UAAU,CAAgB;QADtC,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;KAIpC;AAED,IAAA,IAAI,KAAK,GAAA;QAEL,OAAO,IAAII,sBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;KAC9D;AAED,IAAA,IAAI,MAAM,GAAA;;AAGN,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;KACjC;AAED,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IACD,IAAI,MAAM,CAAC,GAAc,EAAA;AAErB,QAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO;QAC3B,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;QAE/D,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,EACnF;AACI,YAAA,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SAC3B;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;;AAED,IAAA,IAAI,SAAS,GAAA;QAET,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;;AAED,IAAA,IAAI,OAAO,GAAA;QAEP,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;KACjG;IACD,IAAI,SAAS,CAAC,CAAU,EAAA;AAEpB,QAAA,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC;YAAE,OAAO;QACnC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AACD,IAAA,IAAI,UAAU,GAAA;AAEV,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KAC7B;AACD,IAAA,IAAI,QAAQ,GAAA;AAER,QAAA,OAAO,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACrC;AACD,IAAA,IAAI,UAAU,GAAA;AAEV,QAAA,OAAO,CAAC,CAAC;KACZ;AAED,IAAA,IAAI,QAAQ,GAAA;QAER,OAAO,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;KACjF;IAED,iBAAiB,CAAC,EAAW,EAAE,MAAe,EAAA;QAE1C,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;KAChE;AAED,IAAA,eAAe,CAAC,UAAkB,EAAA;QAE9B,IAAI,UAAU,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;QAChC,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAG;AAE9B,YAAA,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AACxC,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,EAAE,GAAG,IAAIF,gBAAQ,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AAEzC,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,IAAG;AAEhB,YAAA,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChD,YAAA,IAAI,GAAG,GAAG,IAAI,QAAM,CAAC,GAAG,CAAC,CAAC;AAC1B,YAAA,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;AACvB,YAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACnC,YAAA,OAAO,GAAG,CAAC;AACf,SAAC,CAAC,CAAC;KACN;IAED,aAAa,GAAA;QAET,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;KAC5E;IACD,gBAAgB,GAAA;AAEZ,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;KAC/B;IACD,cAAc,CAAC,SAAwB,EAAE,GAAY,EAAA;QAEjD,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,KAAK,IAAI,KAAK,IAAI,SAAS;YACvB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;IACD,iBAAiB,CAAC,SAAwB,EAAE,GAAY,EAAA;QAEpD,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,KAAK,IAAI,KAAK,IAAI,SAAS;YACvB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AACD,IAAA,mBAAmB,CACf,QAAwB,EACxB,SAAkB,EAClB,SAAkB,EAClB,SAAmB,EAAA;QAGnB,QAAQ,QAAQ;YAEZ,KAAK,cAAc,CAAC,GAAG;AACnB,gBAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACnC,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;SAG3B;AACD,QAAA,OAAO,EAAE,CAAC;KACb;IAED,YAAY,GAAA;AAER,QAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC;KACzC;IAED,gBAAgB,GAAA;AAEZ,QAAA,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;KACtC;AAES,IAAA,SAAS,CAAC,IAAc,EAAA;AAE9B,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACtB,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAIrC,aAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/D,IAAI,GAAG,GAAG,CAAC;AACP,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;KACtC;AACD,IAAA,SAAS,CAAC,IAAc,EAAA;AAEpB,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACd,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KAChC;CACJ,CAAA;AA/KY,MAAM,GAAA,QAAA,GAAA,UAAA,CAAA;IADlB,OAAO;AACK,CAAA,EAAA,MAAM,CA+KlB;;ACxLD;;AAEG;MACU,iBAAiB,CAAA;AAc1B;;;AAGG;AACH,IAAA,WAAA,CAAY,GAAY,EAAE,sBAAsB,GAAG,KAAK,EAAE,OAAO,GAAG,eAAe,CAAC,UAAU,EAAY,IAAA,GAAO,IAAI,EAAE,WAAW,GAAG,KAAK,EAAA;QAAhC,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAO;;AAf3G,QAAA,IAAA,CAAA,MAAM,GAAqB,IAAI,GAAG,EAAE,CAAC;AAE/C;;AAEG;AACH,QAAA,IAAA,CAAA,SAAS,GAAsC,IAAI,GAAG,EAAE,CAAC;;AAEzD,QAAA,IAAA,CAAA,UAAU,GAAoC,IAAI,GAAG,EAAE,CAAC;QAExD,IAAU,CAAA,UAAA,GAAgC,EAAE,CAAC;AAQzC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;;AAEjB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAEpB,QAAA,IAAI,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC;AACvB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;AACI,YAAA,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAChB,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAEhC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC9B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAClC;AACI,gBAAA,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;;gBAGhB,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAE9B,gBAAA,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;oBAC5B,MAAM;AACV,gBAAA,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;oBAC5B,SAAS;AAEb,gBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;AAChD,gBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EACnB;AACI,oBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9B,oBAAA,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AACjB,oBAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAEnC,oBAAA,IAAI,WAAW;AACX,wBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;oBAExC,IAAI,sBAAsB,EAC1B;wBACI,IAAI,CAAC,wBAAwB,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;wBACtE,IAAI,CAAC,wBAAwB,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;qBACxE;iBACJ;aACJ;SACJ;KACJ;AAES,IAAA,cAAc,CAAC,EAAS,EAAE,EAAS,EAAE,OAAwB,EAAA;QAEnE,OAAO,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;KACzC;IAES,wBAAwB,CAAC,KAAY,EAAE,MAA2B,EAAA;QAExE,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,GAAG,EACR;YACI,GAAG,GAAG,EAAE,CAAC;YACT,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SACnC;AACD,QAAAkB,gBAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;KAC/B;AAES,IAAA,MAAM,CAAC,GAAY,EAAA;QAEzB,KAAK,IAAI,CAAC,IAAI,GAAG;YACb,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;KACzC;AAES,IAAA,SAAS,CAAC,GAAY,EAAA;QAE5B,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAI;YAEhB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjE,SAAC,CAAC,CAAC;KACN;AAED,IAAA,YAAY,CAAC,EAAS,EAAA;AAElB,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAElC,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1B,QAAA,OAAO,CAAC,CAAC;KACZ;AACJ,CAAA;AAEK,MAAO,kBAAmB,SAAQ,iBAAiB,CAAA;AAErD;;AAEG;AACO,IAAA,cAAc,CAAC,EAAS,EAAE,EAAS,EAAE,OAAwB,EAAA;QAEnE,IAAI,GAAG,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACzC,QAAA,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAG;YAElB,IAAI,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AACrJ,YAAA,IAAI,CAAC,IAAI;AAAE,gBAAA,OAAO,KAAK,CAAC;YACxB,IAAI,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;AACnJ,YAAA,OAAO,IAAI,CAAC;AAChB,SAAC,CAAC,CAAC;KACN;AACJ;;ACpGD;;;AAGG;MACU,QAAQ,CAAA;IAEjB,WACW,CAAA,aAAA,GAAgB,CAAC,EACjB,eAAA,GAAkB,KAAK,EACtB,UAAA,GAAa,EAAE,IAAI,aAAa,EAAA;QAFjC,IAAa,CAAA,aAAA,GAAb,aAAa,CAAI;QACjB,IAAe,CAAA,eAAA,GAAf,eAAe,CAAQ;QACtB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAsB;AAG5C;;;;AAIE;AACF,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;QAE1C,IAAS,CAAA,SAAA,GAAc,EAAE,CAAC;QA0E1B,IAAY,CAAA,YAAA,GAAgC,EAAE,CAAC;KAnF1C;AAWL;;AAEG;AACH,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;AAED;;;;;AAKG;AACH,IAAA,aAAa,CAAC,KAAY,EAAE,KAAA,GAAiB,KAAK,YAAYiB,WAAG,EAAE,eAA2B,GAAA,KAAK,EAAE,UAAU,GAAG,KAAK,EAAA;AAEnH,QAAA,IAAI,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;AAC1B,QAAA,IAAI,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;QACxB,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QACrC,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;;AAGnC,QAAA,IAAI,IAAI,CAAC,eAAe,IAAI,MAAM,KAAK,IAAI;AACvC,YAAA,OAAO,KAAK,CAAC;QAEjB,IAAI,eAAe;SACnB;YACI,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAG;gBAEpC,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,EACxE;AACI,oBAAA,IAAI,KAAK;AACL,wBAAA,OAAO,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7E,oBAAA,OAAO,IAAI,CAAC;iBACf;AACL,aAAC,CAAC,CAAC;YACH,IAAI,KAAK,KAAK,CAAC,CAAC;AAAE,gBAAA,OAAO,KAAK,CAAC;SAClC;AAED,QAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAC1B,QAAA,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;QAEnB,IAAI,QAAQ,GAAU,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;QAChG,IAAI,QAAQ,GAAU,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAE/F,QAAA,IAAI,CAAC,KAAK,IAAI,UAAU,EACxB;AACI,YAAA,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3D,YAAA,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;YACjB,QAAQ,CAAC,EAAE,GAAG,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;SACxC;AACD,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAE3B,QAAA,OAAO,IAAI,CAAC;KACf;AAED;;AAEE;AACF,IAAA,cAAc,CAAC,CAAU,EAAA;QAErB,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEpC,IAAI,OAAO,GAAY,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;QACpD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7B,QAAA,OAAO,OAAO,CAAC;KAClB;AAID;;AAEG;AACH,IAAA,SAAS,CAAC,CAAU,EAAA;QAEhB,IAAI,GAAG,GAAG,EAAE,CAAC;AACb,QAAA,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;AACtB,QAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EACjB;AACI,YAAA,IAAI,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;AACrD,YAAA,GAAG,IAAI,cAAc,GAAG,GAAG,CAAC;SAC/B;AAED,QAAA,IAAI,GAAG,IAAI,IAAI,CAAC,YAAY;AACxB,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAElC,IAAI,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAI;AAE3B,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;AAC1C,YAAA,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAChB,YAAA,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;AAC1C,SAAC,CAAC,CAAC;AAEH,QAAA,IAAI,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC;AAC7B,QAAA,IAAI,SAAS,GAAG,CAAC,IAAI,WAAW,CAAC;AACjC,QAAA,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,SAAS,EAAE,EAAE,QAAQ,EACvD;YACI,IAAI,eAAe,GAAG,QAAQ,CAAC;YAC/B,GAAG,GAAG,EAAE,CAAC;AACT,YAAA,KAAK,IAAI,QAAQ,IAAI,SAAS,EAC9B;AACI,gBAAA,GAAG,IAAI,QAAQ,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;gBACrC,eAAe,KAAK,CAAC,CAAC;aACzB;AACD,YAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SAC9B;AACD,QAAA,OAAO,CAAC,CAAC;KACZ;AACJ;;ACxJD,MAAM,SAAS,GAAG,WAAW,CAAC;AAK9B;;;;;;AAMG;MACU,WAAW,CAAA;AAYpB;;;;AAIG;AACH,IAAA,WAAA,CAAY,MAAe,EAAS,aAAA,GAAgB,CAAC,EAAU,kBAAkB,IAAI,EAAA;QAAjD,IAAa,CAAA,aAAA,GAAb,aAAa,CAAI;QAAU,IAAe,CAAA,eAAA,GAAf,eAAe,CAAO;;AAdrF,QAAA,IAAA,CAAA,cAAc,GAAiB,EAAE,CAAC;;QAElC,IAAe,CAAA,eAAA,GAAiB,EAAE,CAAC;;AAGnC,QAAA,IAAA,CAAA,UAAU,GAAwB,IAAI,GAAG,EAAE,CAAC;;QAYxC,IAAI,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;;QAG/C,OAAO,IAAI,EACX;AACI,YAAA,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChD,YAAA,IAAI,CAAC;AAAE,gBAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;;gBACrC,MAAM;SACd;AACD,QAAA,IAAI,YAAqB,CAAC;AAC1B,QAAA,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,EAC1B;YACI,YAAY,GAAG,YAAY,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAClG,YAAA,IAAI,OAAO,GAAG,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC3E,YAAA,IAAI,OAAO,GAAG,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;YAE3E,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AACjD,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AAE/C,YAAA,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AAC9B,YAAA,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AAC9B,YAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EACtB;AACI,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAClC,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,KAAK,EAAE,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC;iBAC5F;;AAEI,oBAAA,KAAK,IAAI,CAAC,IAAI,OAAO,EACrB;AACI,wBAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;AACrB,wBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;wBACnB,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;wBACxC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;qBACzC;AAED,oBAAA,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC;AAC1B,oBAAA,SAAS;iBACZ;;oBAEG,KAAK,IAAI,CAAC,IAAI,OAAO;AACjB,wBAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;aAChC;AAED,YAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;aACtB;AACI,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnC,gBAAA,KAAK,IAAI,CAAC,IAAI,OAAO,EACrB;AACI,oBAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACnB,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,EAC1B;AACI,wBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;wBACnB,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;wBACxC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;qBACzC;iBACJ;aACJ;SACJ;KACJ;;IAGD,OAAO,gBAAgB,CAAC,KAAc,EAAA;AAElC,QAAA,OAAO,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;KACpC;IAEO,gBAAgB,CAAC,CAAU,EAAE,QAAmB,EAAA;QAEpD,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,OAAO,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAC3C;AACI,YAAA,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1B,IAAI,CAAC,EACL;AACI,gBAAA,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACnB,gBAAA,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;aAClB;;gBAEG,OAAO,GAAG,SAAS,CAAC;SAC3B;KACJ;AAEO,IAAA,UAAU,CAAC,CAAQ,EAAA;QAEvB,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;QAChE,IAAI,KAAK,KAAK,CAAC,CAAC;YACZ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAEnC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,KAAK,KAAK,CAAC,CAAC;YACZ,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KACpC;AAED;;AAEG;AACK,IAAA,kBAAkB,CAAC,QAAmB,EAAA;QAE1C,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;AAE5B,YAAA,IAAI,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACrC,IAAI,EAAE,GAAG,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAC;YACrB,IAAI,EAAE,GAAG,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAC;YACrB,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;KACN;AAED;;;AAGG;AACO,IAAA,kBAAkB,CAAC,SAAkB,EAAA;QAE3C,IAAI,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;;QAGtD,IAAI,KAAK,GAAY,EAAE,CAAC;AACxB,QAAA,aAAa,CAAC,SAAS,EAAE,CAAC,IAAG;AAEzB,YAAA,IAAI,CAAC,YAAYE,gBAAQ,EACzB;AACI,gBAAA,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;;gBAGtB,IAAI,IAAI,GAAU,EAAE,CAAC;AACrB,gBAAA,aAAa,CAAC,GAAG,EAAE,CAAC,IAAG;AAEnB,oBAAA,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI;AAAE,wBAAA,OAAO,IAAI,CAAC;AAEjC,oBAAA,IAAI,CAAC,YAAYF,WAAG,EACpB;wBACI,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wBAC9B,KAAK,IAAI,GAAG,IAAI,MAAM;AAClB,4BAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;qBACtB;AAED,oBAAA,OAAO,KAAK,CAAC;AACjB,iBAAC,CAAC,CAAC;;AAEH,gBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;gBAElB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC5B,gBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AACnB,gBAAA,OAAO,IAAI,CAAC;aACf;AACD,YAAA,OAAO,KAAK,CAAC;AACjB,SAAC,CAAC,CAAC;AACH,QAAA,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;AAEzB,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC;AAEpC,QAAA,KAAK,IAAI,EAAE,IAAI,SAAS,EACxB;;AAEI,YAAA,IAAI,EAAE,YAAYA,WAAG,EACrB;gBACI,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAC7B,gBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EACnB;oBACI,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC;oBAC/E,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;oBAC9B,SAAS;iBACZ;;AAEG,oBAAA,QAAQ,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;aACpE;;AAEG,gBAAA,QAAQ,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;SACrE;;AAGD,QAAA,KAAK,IAAI,CAAC,IAAI,QAAQ,CAAC,SAAS,EAChC;YACI,IAAI,SAAS,GAAG,QAAQ,CAAC;AACzB,YAAA,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;AAClB,gBAAA,IAAI,CAAC,CAAC,MAAM,GAAG,SAAS;AAAE,oBAAA,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;AACnD,YAAA,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;AAClB,gBAAA,cAAc,CAAC,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC,CAAC;YACvC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;SAC5C;QACD,OAAO,QAAQ,CAAC,MAAM,CAAC;KAC1B;AAEO,IAAA,QAAQ,CAAC,GAAQ,EAAA;AAErB,QAAA,IAAI,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAInC,aAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,IAAI,KAAK,GAAG,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AACzC,QAAA,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,MAAM;AAC9B,YAAA,OAAO,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;;YAEjC,OAAO,CAAC,GAAG,CAAC,CAAC;KACpB;AAED;;AAEG;AACH,IAAA,YAAY,CAAC,EAAS,EAAA;QAElB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAC3B;YACI,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;AAC5D,YAAA,IAAI,CAAC,GAAG;AACJ,gBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC/B,YAAA,OAAO,GAAG,CAAC;SACd;;AAEG,YAAA,OAAO,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC;KAC9B;AACJ,CAAA;AAEe,SAAA,cAAc,CAAC,CAAQ,EAAE,MAAc,EAAA;AAEnD,IAAA,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS;QAAE,OAAO;AAC/B,IAAA,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC;AACjB,IAAA,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS;AACf,QAAA,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACxD,UAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;AACpD,IAAA,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,IAAK,QAIJ,CAAA;AAJD,CAAA,UAAK,QAAQ,EAAA;AAET,IAAA,QAAA,CAAA,QAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACP,IAAA,QAAA,CAAA,QAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,GAAA,KAAQ,CAAA;AACZ,CAAC,EAJI,QAAQ,KAAR,QAAQ,GAIZ,EAAA,CAAA,CAAA,CAAA;AAED,SAAS,cAAc,CAAC,YAAqB,EAAE,QAAgB,EAAE,IAAI,GAAG,QAAQ,CAAC,GAAG,EAAA;IAEhF,IAAI,IAAI,GAAY,EAAE,CAAC;IACvB,IAAI,UAAU,GAAY,YAAY,CAAC;AACvC,IAAA,IAAI,QAAe,CAAC;;AAEpB,IAAA,GACA;QACI,IAAI,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AACrD,QAAA,IAAI,IAAI,KAAK,QAAQ,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC;AACjD,YAAA,OAAO,EAAE,CAAC;;AAEd,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjB,QAAA,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAC3C,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,GAAG,CAAC;AAC1B,YAAA,MAAM,UAAU,CAAC;AACzB,KAAC,QACM,UAAU,KAAK,YAAY,EAAE;AAEpC,IAAA,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;AAEG;AACH,SAAS,UAAU,CAAC,CAAU,EAAA;AAE1B,IAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,CAAC,CAAC;;AAE7B,IAAA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK;AAAE,QAAA,OAAO,EAAE,CAAC;AAEjD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EACjC;AACI,QAAA,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,GAC1B;YACI,IAAI,CAAC,KAAK,CAAC;gBAAE,MAAM;AACnB,YAAA,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACd,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EACnB;gBACI,IAAI,CAAC,GAAG,CAAC;oBACL,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC3B,MAAM;aACT;SACJ;KACJ;AAED,IAAA,OAAO,CAAC,CAAC;AACb,CAAC;AAED,SAAS,YAAY,CAAC,CAAU,EAAE,IAAY,EAAE,IAAA,GAAiB,QAAQ,CAAC,GAAG,EAAA;AAEzE,IAAA,IAAI,CAAC,IAAI;QACL,OAAO,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;;IAG/B,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5D,IAAA,IAAI,QAAQ,GAAGa,UAAQ,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;AACpD,IAAA,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC9B;;AC5TA;;AAEG;SACa,cAAc,CAAC,MAAe,EAAE,IAAI,GAAG,IAAI,EAAA;IAEvD,IAAI,QAAQ,GAAc,EAAE,CAAC;AAC7B,IAAA,IAAI,gBAAgB,GAAG,IAAI,GAAG,IAAI,CAAC;;IAEnC,IAAI,SAAS,GAAY,EAAE,CAAC;AAC5B,IAAA,KAAK,IAAI,EAAE,IAAI,MAAM,EACrB;QACI,IAAI,EAAE,YAAYuB,cAAM;AACpB,YAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aAChD,IAAI,EAAE,YAAYC,gBAAQ;YAC3BnB,gBAAc,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;AACvC,aAAA,IAAI,EAAE,YAAY,MAAM,EAC7B;AACI,YAAA,IAAI,EAAE,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC;YAC/B,IAAI,EAAE,CAAC,OAAO;AACV,gBAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;;AAEhD,gBAAA,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC1B;aACI,IAAI,EAAE,YAAY,OAAO;YAC1B,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,gBAAgB,EAAE,EAAE,KAAK,CAAC,CAAC;;AAEpD,YAAA,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAC1B;AAED,IAAA,IAAI,SAAS,GAAG,IAAI,kBAAkB,CAAC,SAAS,EAAE,KAAK,EAAE,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAE3F,IAAI,OAAO,GAAY,EAAE,CAAC;;IAG1B,KAAK,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,SAAS,CAAC,SAAS,EAC1C;AACI,QAAA,IAAI,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC;AACvB,QAAA,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC;AAErB,QAAA,IAAI,QAAiB,CAAC;QACtB,IAAI,MAAM,GAAG,QAAQ,CAAC;AACtB,QAAA,IAAI,QAAiB,CAAC;QACtB,IAAI,MAAM,GAAG,QAAQ,CAAC;AAEtB,QAAA,IAAI,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;QAEzB,IAAI,IAAI,GAAc,EAAE,CAAC;QACzB,KAAK,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EACxB;AACI,YAAAA,gBAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAE1B,YAAA,IAAI,CAAC,OAAO;AACR,gBAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EACjB;oBACI,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAChC,oBAAA,IAAI,CAAC,GAAG,MAAM,EACd;wBACI,MAAM,GAAG,CAAC,CAAC;wBACX,QAAQ,GAAG,CAAC,CAAC;qBAChB;AACD,oBAAA,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAC5B,oBAAA,IAAI,CAAC,GAAG,MAAM,EACd;wBACI,MAAM,GAAG,CAAC,CAAC;wBACX,QAAQ,GAAG,CAAC,CAAC;qBAChB;iBACJ;SACR;QAED,IAAI,CAAC,OAAO,EACZ;;YAEI,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,gBAAgB,EAC3C;gBACI,IAAI,KAAK,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AACzC,gBAAA,IAAI,KAAK,GAAG,EAAE,CAAC,QAAQ;AACnB,oBAAA,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACxB;YACD,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,gBAAgB,EAC3C;gBACI,IAAI,KAAK,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;gBACzC,IAAI,KAAK,GAAG,CAAC;AACT,oBAAA,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACxB;SACJ;;AAGD,QAAA,IAAI,MAAe,CAAC;AACpB,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,YAAA,MAAM,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;;AAEtC,YAAA,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC;QAElB,IAAI,OAAO,GAAY,EAAE,CAAC;AAC1B,QAAA,KAAK,IAAI,CAAC,IAAI,MAAM,EACpB;YACI,IAAI,CAAC,YAAYmB,gBAAQ;gBACrBnB,gBAAc,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;;AAErC,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACvB;AAED,QAAAA,gBAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;KACpC;AAED,IAAA,IAAI,KAAK,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;AAErC,IAAA,KAAK,IAAI,EAAE,IAAI,KAAK,CAAC,cAAc,EACnC;AACI,QAAA,IAAI,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACnD,QAAA,IAAI,OAAO;AACP,YAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC9B;AACD,IAAA,OAAO,QAAQ,CAAC;AACpB,CAAC;SAEe,cAAc,CAAC,MAAe,EAAE,IAAI,GAAG,IAAI,EAAA;IAEvD,OAAO,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C;;AC7HYsB,mCAKX;AALD,CAAA,UAAY,iBAAiB,EAAA;AAEzB,IAAA,iBAAA,CAAA,iBAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAgB,CAAA;AAChB,IAAA,iBAAA,CAAA,iBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACT,IAAA,iBAAA,CAAA,iBAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;AAChB,CAAC,EALWA,yBAAiB,KAAjBA,yBAAiB,GAK5B,EAAA,CAAA,CAAA,CAAA;AAED,MAAM,IAAI,GAAG,IAAI,CAAC;AAClB,IAAI,MAAM,GAAG,IAAIxC,aAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE3C;AACgB,SAAA,0BAA0B,CAAC,QAAqC,EAAE,UAAiB,EAAA;;IAG/F,IAAI,CAACyC,UAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AACxG,QAAA,OAAO,KAAK,CAAC;IAEjB,IAAI,GAAG,GAAY,EAAE,CAAC;IACtB,IAAI,UAAU,YAAYJ,gBAAQ;AAC9B,QAAA,GAAG,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;;AAE3B,QAAA,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;AAEvB,IAAA,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,IAAG;QAEjB,IAAI,GAAG,GAAG,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC1C,QAAA,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;YACf,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;AACvC,QAAA,OAAO,iBAAiB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC5C,KAAC,CAAC,CAAC;AACP,CAAC;AAED;AACA,SAAS,kBAAkB,CAAC,SAAgB,EAAE,EAAS,EAAE,MAAiB,EAAE,EAAA;AAExE,IAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;AACvE,IAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EACvB;AACI,QAAA,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;AACtD,QAAA,KAAK,IAAI,GAAG,IAAI,IAAI,EACpB;YACI,IAAI,GAAG,IAAI,IAAI;AACX,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;YAE7C,IAAI,GAAG,KAAK,EAAE,CAAC,QAAQ,GAAG,IAAI,CAAC;AAC3B,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;SAChD;KACJ;AACD,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AACD;AACA,SAAS,iBAAiB,CAAC,SAAsC,EAAE,GAAc,EAAA;AAE7E,IAAA,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,IAAG;;AAGlB,QAAA,OAAO,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC9D,KAAC,CAAC,CAAC;AACP,CAAC;AAED;AACgB,SAAA,kBAAkB,CAAC,SAA4B,EAAE,GAAc,EAAA;AAE3E,IAAA,OAAO,GAAG,CAAC,KAAK,CAAC,EAAE,IAAG;;AAGlB,QAAA,OAAO,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AAC/D,KAAC,CAAC,CAAC;AACP;;AC1DA,IAAIK,OAAK,GAAG,IAAI,OAAO,EAAE,CAAC;AAE1B,MAAM,YAAY,GAAG,IAAI,CAAC;MAEb,OAAO,CAAA;AAIN,IAAA,QAAQ,CAAC,EAAqB,EAAA;AAEpC,QAAA,IAAI,EAAE,YAAYL,gBAAQ,EAC1B;AACI,YAAA,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC;gBACZ,EAAE,CAAC,OAAO,EAAE,CAAC;SACpB;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;KACpB;;AAED,IAAA,OAAO,aAAa,CAAC,GAAgC,EAAE,QAAQ,GAAG,IAAI,EAAA;AAElE,QAAA,IAAI,GAAG,YAAY,KAAK,EACxB;AACI,YAAA,IAAI,GAAG,CAAC,OAAO,EACf;AACI,gBAAA,IAAI,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;AACtB,gBAAA,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAChB,gBAAA,OAAO,CAAC,CAAC;aACZ;YACD,OAAO;SACV;AAED,QAAA,IAAI,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,CAAsB,CAAC;AACnF,QAAA,IAAI,UAAU,IAAI,UAAU,CAAC,OAAO,EACpC;YACI,IAAI,UAAU,YAAYA,gBAAQ,IAAI,UAAU,CAAC,SAAS,KAAK,KAAK,EACpE;AACI,gBAAA,UAAU,CAAC,SAAS,GAAG,IAAI,CAAC;gBAC5B,UAAU,CAAC,cAAc,CAAC,UAAU,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;aAC9D;AAED,YAAA,IAAI,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC;AACtB,YAAA,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;AACvB,YAAA,OAAO,CAAC,CAAC;SACZ;KACJ;AACD,IAAA,IAAI,KAAK,GAAA;QAEL,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;AACD,IAAA,IAAI,IAAI,GAAA;AAEJ,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;KAC3B;AACD,IAAA,IAAI,WAAW,GAAA;AAEX,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;KAClC;AACD;;;;;AAKG;AACH,IAAA,sBAAsB,CAAC,GAAW,EAAE,IAAY,EAAE,GAAc,EAAA;AAE5D,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;AACrB,QAAA,IAAI,EAAE,YAAYA,gBAAQ,EAC1B;AACI,YAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC;AAC3B,YAAA,IAAI,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC7B,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAEzB,IAAI,UAAU,GAAa,EAAE,CAAC;AAC9B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAC/B;AACI,gBAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG;AAC7B,oBAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAC1B;AACD,YAAA,IAAI,OAAO,GAAG,IAAIrC,aAAO,EAAE,CAAC;AAC5B,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AACpB,YAAA,EAAE,CAAC,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC1C,YAAA,OAAO,IAAI,CAAC;SACf;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;IACD,KAAK,GAAA;AAED,QAAA,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KACvD;;AAED,IAAA,yBAAyB,CAAC,MAAe,EAAA;QAErC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC;AACpD,YAAA,OAAO,EAAE,CAAC;QACd,IAAI,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;QACrD,OAAO,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;KAC5D;;AAED,IAAA,kBAAkB,CAAC,MAAe,EAAA;QAE9B,IAAI,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;;AAGrD,QAAA,IAAI,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YACzC,OAAO;gBACH,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC;AACpD,gBAAA,KAAK,EAAE,EAAE;aACZ,CAAC;;QAGN,IAAI,GAAG,GAAY,EAAE,CAAC;AACtB,QAAA,KAAK,IAAI,EAAE,IAAI,SAAS,CAAC,SAAS,EAClC;YACI,IAAI,EAAE,YAAYqC,gBAAQ;gBACtB,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;;AAE1B,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACpB;AACD,QAAA,IAAI,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;AACnC,QAAA,KAAK,IAAI,CAAC,IAAI,QAAQ,EACtB;AACI,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EACjC;AACI,gBAAA,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACd,IAAI,KAAK,GAAGxB,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,gBAAA,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;gBAElB,IAAI,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzB,gBAAA,IAAI,MAAM,KAAKX,cAAM,CAAC,IAAI,EAC1B;AACI,oBAAA,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACnB,oBAAA,CAAC,EAAE,CAAC;iBACP;AACI,qBAAA,IAAI,MAAM,KAAKA,cAAM,CAAC,cAAc,EACzC;AACI,oBAAA,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;oBACb,IAAI,CAAC,GAAG,EAAS,CAAC;AAClB,oBAAA,CAAC,CAAC,IAAI,CAAC,IAAIkC,cAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;oBACvC,MAAM;iBACT;aACJ;SACJ;QACD,IAAI,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AACjD,QAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EACzB;YACI,OAAO;AACH,gBAAA,QAAQ,EAAE,UAAU;AACpB,gBAAA,KAAK,EAAE,EAAE;aACZ,CAAC;SACL;aAED;AACI,YAAA,IAAI,KAAK,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,KAAK,IAAI,CAAC,IAAI,UAAU;gBACpB,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACzB,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,OAAO;AACH,gBAAA,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACzB,gBAAA,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;aAC7B,CAAC;SACL;KAEJ;;AAED,IAAA,qBAAqB,CAAC,MAAe,EAAA;QAEjC,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;;QAGhD,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;AAClC,YAAA,OAAO,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;QAE/C,IAAI,QAAQ,GAAG,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAEhD,IAAI,QAAQ,GAAc,EAAE,CAAC;;AAE7B,QAAA,MAAM,UAAU,GAAG,CAAC,QAAwB,KAAI;AAE5C,YAAA,KAAK,IAAI,MAAM,IAAI,QAAQ,EAC3B;AACI,gBAAA,IAAI,EAAE,GAAY,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC3C,IAAI,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC;uBACE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;uBAChC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;uBAClC,CAAC,CAAC,IAAI,GAAG,IAAI;AAChB,oBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACxB;AACL,SAAC,CAAC;AACF,QAAA,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACpC,QAAA,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AAErC,QAAA,OAAO,QAAQ,CAAC;KACnB;AACD;;AAEG;AACH,IAAA,uBAAuB,CAAC,MAAe,EAAA;;AAGnC,QAAA,IAAI,IAAI,CAAC,MAAM,YAAYA,cAAM,IAAI,MAAM,CAAC,MAAM,YAAYA,cAAM,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,EAC/H;YACI,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM;AACzC,gBAAA,OAAO,EAAE,gBAAgB,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;;AAEvE,gBAAA,OAAO,EAAE,gBAAgB,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;SAC9E;QAED,IAAI,gBAAgB,GAAY,EAAE,CAAC;QACnC,IAAI,SAAS,GAAY,EAAE,CAAC;AAE5B,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;AAChC,QAAA,IAAI,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;AACjC,QAAA,IAAI,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;;;;AAM9E,QAAA,IAAI,QAAQ,GAAG,aAAa,CAAC,cAAc,CAAC,aAAa,EAAE,eAAe,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAErG,QAAA,IAAI,qBAA8B,CAAC;AACnC,QAAA,IAAI,qBAA8B,CAAC;QACnC,IAAI,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,EAC3C;YACI,qBAAqB,GAAG,mBAAmB,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;YACpF,qBAAqB,GAAG,KAAK,CAAC;SACjC;aAED;YACI,qBAAqB,GAAG,KAAK,CAAC;YAC9B,qBAAqB,GAAG,mBAAmB,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;SACvF;;QAGD,IAAI,qBAAqB;SACzB;AACI,YAAA,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACrC,YAAA,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SACjC;aACI,IAAI,qBAAqB;SAC9B;AACI,YAAA,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC9B,YAAA,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SACxC;AACI,aAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC;SAC7B;AACI,YAAA,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;SAChD;;SAED;AACI,YAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;AAC3C,YAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;YAE1C,IAAI,SAAS,GAA0B,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC3E,IAAI,SAAS,GAA0B,aAAa,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAE3E,YAAA,KAAK,IAAI,EAAE,IAAI,SAAS,EACxB;gBACI,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EACzC;AACI,oBAAA,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;oBACtB,WAAW,GAAG,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;oBACnD,IAAI,WAAW,EACf;;wBAEI,IACI,OAAO,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC;AAC/F,gCAAA,aAAa,EAErB;AACI,4BAAA,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACnB,4BAAA,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;yBAC7B;AACD,wBAAA,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACvB,MAAM;qBACT;iBACJ;AAED,gBAAA,IAAI,WAAW;oBACX,SAAS;AAEb,gBAAA,IAAI,gBAAgB,CAAC,aAAa,EAAE,EAAE,CAAC;AACnC,oBAAA,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;AAE1B,oBAAA,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC1B;AAED,YAAA,KAAK,IAAI,EAAE,IAAI,SAAS,EACxB;AACI,gBAAA,IAAI,gBAAgB,CAAC,aAAa,EAAE,EAAE,CAAC;AACnC,oBAAA,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;;AAE1B,oBAAA,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC1B;;YAGD,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,MAAM,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,EAC/F;gBACI,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,CAAC;aAC1E;SACJ;AACD,QAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,CAAC;KAC1C;AACD,IAAA,eAAe,CAAC,MAAe,EAAA;AAE3B,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,MAAkB,CAAC;AAC5C,QAAA,IAAI,aAAa,GAAG,MAAM,CAAC,KAAiB,CAAC;AAE7C,QAAA,IAAI,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAE9E,QAAA,IAAI,QAAQ,GAAG,aAAa,CAAC,cAAc,CAAC,aAAa,EAAE,eAAe,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAErG,QAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EACxB;YACI,IAAI,SAAS,GAAG,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;;YAExD,IAAI,CAAC,CAAC,SAAS,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,UAAU,CAAC,aAAa,EAAE,aAAa,CAAC;AAC5H,gBAAA,OAAO,EAAE,CAAC;;AAEd,YAAA,KAAK,SAAS,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC9E,gBAAA,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;;gBAEtC,OAAO,CAAC,aAAa,CAAC,CAAC;SAC9B;;QAGD,IAAI,YAAY,GAAe,EAAE,CAAC;AAClC,QAAA,IAAI,SAAS,GAAG,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAe,CAAC;AAC3F,QAAA,IAAI,SAAS,GAAG,aAAa,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAe,CAAC;AAE1F,QAAA,KAAK,IAAI,EAAE,IAAI,SAAS,EACxB;AACI,YAAA,IAAI,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC;YAC7B,IAAI,KAAK,GAAG,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,CAAC;AAErD,YAAA,IAAI,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9D,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAChB;AACI,gBAAA,IAAI,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1B,gBAAA,IAAI,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC;gBAC7B,IAAI,KAAK,GAAG,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,CAAC;AAErD,gBAAA,IAAI,aAAa,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AAC9C,oBAAA,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAE1B,gBAAA,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAE3B,SAAS;aACZ;AACD,YAAA,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,EAAE,CAAC;AACpC,gBAAA,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC7B;;QAGD,IAAI,cAAc,GAAG,YAAY,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,CAAC;QAE9D,KAAK,IAAI,EAAE,IAAI,SAAS;AACpB,YAAA,IAAI,gBAAgB,CAAC,aAAa,EAAE,EAAE,CAAC;AACnC,gBAAA,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE9B,IAAI,cAAc,IAAI,YAAY,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;YAC1D,OAAO,CAAC,aAAa,CAAC,CAAC;AAE3B,QAAA,OAAO,YAAY,CAAC;KACvB;AACD,IAAA,4BAA4B,CAAC,OAAkB,EAAA;AAE3C,QAAA,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;;QAG9D,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;YAClC,OAAO;AACH,gBAAA,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC/C,gBAAA,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC;aAChD,CAAC;QAEN,IAAI,QAAQ,GAAG,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;QAEhD,IAAI,QAAQ,GAAc,EAAE,CAAC;;AAE7B,QAAA,MAAM,UAAU,GAAG,CAAC,QAAwB,KAAI;AAE5C,YAAA,KAAK,IAAI,MAAM,IAAI,QAAQ,EAC3B;AACI,gBAAA,IAAI,EAAE,GAAY,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AAC3C,gBAAA,IAAI,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;AAC/D,gBAAA,IAAI,CAAC;uBACE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC;AAChC,uBAAA,OAAO,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;uBAC3D,CAAC,CAAC,IAAI,GAAG,IAAI;AAChB,oBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACxB;AACL,SAAC,CAAC;AACF,QAAA,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACpC,QAAA,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;QAErC,OAAO;AACH,YAAA,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC/C,YAAA,QAAQ,EAAE,QAAQ;SACrB,CAAC;KAEL;AACD,IAAA,iBAAiB,CAAC,OAAkB,EAAA;AAEhC,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,MAAkB,CAAC;QAC5C,IAAI,YAAY,GAAe,EAAE,CAAC;QAClC,IAAI,KAAK,GAAe,EAAE,CAAC;QAC3B,IAAI,OAAO,GAAa,EAAE,CAAC;AAC3B,QAAA,IAAI,iBAAiB,GAAG,IAAI,GAAG,EAAmB,CAAC;AAEnD,QAAA,IAAI,MAAM,GAAG,aAAa,CAAC,WAAW,CAAC;AAEvC,QAAA,KAAK,IAAI,GAAG,IAAI,OAAO,EACvB;AACI,YAAA,MAAM,aAAa,GAAG,GAAG,CAAC,KAAiB,CAAC;YAE5C,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,WAAW,CAAC;gBACjD,SAAS;AAEb,YAAA,IAAI,GAAG,GAAG,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,eAAe,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAC5F,YAAA,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EACnB;gBACI,IAAI,SAAS,GAAG,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;;gBAExD,IAAI,CAAC,CAAC,SAAS,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,UAAU,CAAC,aAAa,EAAE,aAAa,CAAC;AACvH,oBAAA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;;AAEnC,gBAAA,IAAI,SAAS,IAAI,iBAAiB,CAAC,aAAa,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACxE,oBAAA,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAI5B;aACJ;iBAED;AACI,gBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;AAC3C,gBAAA,iBAAiB,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;aAClE;SACJ;QAED,IAAI,iBAAiB,GAAG,aAAa,CAAC,cAAc,CAAC,OAAO,CAAe,CAAC;QAC5E,IAAI,iBAAiB,GAAe,EAAE,CAAC;AAEvC,QAAA,IAAI,0BAA0B,GAAG,IAAI,OAAO,EAAgB,CAAC;QAE7D,KAAK,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,iBAAiB,EAChD;YAEI,IAAI,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,SAAS,CAAe,CAAC;AAChE,YAAA,KAAK,IAAI,UAAU,IAAI,WAAW,EAClC;AACI,gBAAA,0BAA0B,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAClD,gBAAA,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aACtC;SACJ;AAED,QAAA,KAAK,IAAI,aAAa,IAAI,iBAAiB,EAC3C;AACI,YAAA,IAAI,KAAK,GAAG,iBAAiB,CAAC,SAAS,CAAC,EAAE,IAAI,cAAc,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC,CAAC;AACvF,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAChB;AACI,gBAAA,IAAI,aAAa,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC7C,gBAAA,IAAI,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,0BAA0B,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAE9G,gBAAA,IAAI,aAAa,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC;iBACxF;AACI,oBAAA,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;;iBAGpC;;;AAID,gBAAA,iBAAiB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBAEnC,SAAS;aACZ;AAED,YAAA,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAiB,EAAE,aAAa,CAAC,CAAC;AACzE,gBAAA,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SACxC;;QAGD,IAAI,cAAc,GAAG,YAAY,CAAC,MAAM,KAAK,iBAAiB,CAAC,MAAM,CAAC;QAEtE,KAAK,IAAI,EAAE,IAAI,iBAAiB;AAC5B,YAAA,IAAI,gBAAgB,CAAC,aAAa,EAAE,EAAE,CAAC;AACnC,gBAAA,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE9B,IAAI,cAAc,IAAI,YAAY,CAAC,MAAM,KAAK,iBAAiB,CAAC,MAAM;YAClE,OAAO,EAAE,YAAY,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC;AAEpD,QAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;KAElC;AACD;;;AAGG;IACH,OAAO,aAAa,CAAC,GAAwB,EAAA;AAEzC,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAChB,YAAA,OAAO,EAAE,CAAC;AAEd,QAAA,IAAI,QAAmB,CAAC;QACxB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrB,QAAQ,GAAG,GAAgB,CAAC;;AAE5B,YAAA,QAAQ,GAAG,cAAc,CAAC,GAAc,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;QAEzE,IAAI,QAAQ,GAAc,EAAE,CAAC;QAE7B,KAAK,IAAI,CAAC,IAAI,QAAQ;AAClB,YAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QACnD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC1B,QAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;KAC5E;AACD;;;;;AAKG;IACH,OAAO,OAAO,CAAC,GAAY,EAAE,QAAQ,GAAG,IAAI,EAAE,SAAS,GAAG,IAAI,EAAA;AAE1D,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,SAAS,CAAC;QAEvC,IAAI,MAAM,GAAG,QAAQ,GAAG,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5E,QAAA,KAAK,IAAI,CAAC,IAAI,MAAM,EACpB;AACI,YAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;AACd,gBAAA,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;iBAExB;AACI,gBAAA,IAAIgC,OAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACZ,oBAAA,OAAOA,OAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAExB,gBAAA,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;gBAEnC,0BAA0B,CAAC,MAAM,EAAE,CAAC,GAAU,EAAE,GAAU,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,KAAKxC,cAAM,CAAC,IAAI,CAAC,CAAC;gBAEhH,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC;oBACxE,MAAM,CAAC,GAAG,EAAE,CAAC;gBAEjB,IAAI,EAAE,GAAGmC,gBAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAE7C,gBAAAK,OAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAEjB,gBAAA,OAAO,EAAE,CAAC;aACb;SACJ;KACJ;AACD,IAAA,IAAI,KAAK,GAAA;AAEL,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;KAC5B;AAED;;;;AAIG;IACH,cAAc,CAAC,UAAqC,EAAE,YAAY,GAAG,KAAK,EAAE,OAA0B,SAAS,EAAA;QAE3G,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI;AAC5C,YAAA,OAAO,KAAK,CAAC;QACjB,OAAO,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;KAC7D;AAED,IAAA,KAAK,CAAC,GAAY,EAAA;QAEd,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;KAC9C;AACJ,CAAA;AAED;;AAEG;AACH,SAAS,cAAc,CAAC,EAAS,EAAE,EAAS,EAAE,SAAS,GAAG,IAAI,EAAA;AAE1D,IAAA,IAAI,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC;AACxB,IAAA,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC;AACtB,IAAA,IAAI,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC;AACxB,IAAA,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC;IAEtB,IAAI,EACA,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC;AAC1D,YAAC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,CACpE;AACG,QAAA,OAAO,KAAK,CAAC;AAEjB,IAAA,OAAO,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AACxD,CAAC;AAGD;;;;;AAKG;AACH,SAAS,gBAAgB,CAAC,QAA2B,EAAE,UAAiB,EAAA;IAEpE,OAAO,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACnD,CAAC;AAED;SACgB,iBAAiB,CAAC,QAA2B,EAAE,UAAiB,EAAE,GAAa,EAAA;IAE3F,IAAI,GAAG;KACP;AACI,QAAA,IAAI,EAAE,GAAG,UAAU,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAI,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC;YACtB,OAAO,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;;YAE/C,OAAO,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;KACxD;;AAEG,QAAA,OAAO,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACpG,CAAC;AAED;AACgB,SAAA,mBAAmB,CAAC,QAA2B,EAAE,UAAqC,EAAE,IAAA,GAA0B,SAAS,EAAE,IAAI,GAAG,YAAY,EAAA;AAE5J,IAAA,IAAI,CAAC,IAAI;AACL,QAAA,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,UAAU,EAAE,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAEjF,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AACjB,QAAA,OAAO,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC7C,SAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AACtB,QAAA,OAAO,iBAAiB,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;;AAE3D,QAAA,OAAO,0BAA0B,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAChE;;MC/mBa,aAAa,CAAA;AAMtB,IAAA,MAAM,CAAC,KAAY,EAAE,GAAU,EAAA,EAAU,OAAO,IAA2B,IAAI,CAAC,WAAY,CAAC,KAAK,EAAE,GAAG,CAAS,CAAC,EAAE;IAEnH,WAAmB,CAAA,KAAY,EAAE,GAAU,EAAA;QAAxB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAO;QAE3B,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC;KACvC;IAED,MAAM,CAAC,OAAgB,EAAE,GAAS,EAAA;QAE9B,IAAI,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAChC;AACI,YAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAC/B;AACI,gBAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ;AACvB,oBAAA,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;aAC9B;iBAED;AACI,gBAAA,IAAI,OAAO,CAAC,KAAK,YAAYN,cAAM,IAAI,IAAI,CAAC,KAAK,YAAYD,WAAG,EAChE;AACI,oBAAA,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EACpD;AACI,wBAAA,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI;AAC/C,4BAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;wBAEvB,OAAO;qBACV;iBACJ;;AAGD,gBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC;qBAC7E,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;;AAG3B,gBAAA,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;AAC/B,gBAAA,IAAI,EAAE,IAAI,CAAC,KAAK,YAAYC,cAAM,CAAC;AAC/B,oBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvB,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAClC,gBAAA,IAAI,IAAI,CAAC,KAAK,YAAYD,WAAG,IAAI,IAAI,CAAC,KAAK,YAAYC,cAAM,EAC7D;oBACI,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,YAAYA,cAAM,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;oBAChF,0BAA0B,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,KAAI;AAE3C,wBAAA,OAAO,QAAQ,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,gBAAgB,IAAI,MAAM,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,gBAAgB,CAAC;AAC5F,qBAAC,CAAC,CAAC;iBACN;qBAED;oBACI,0BAA0B,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,KAAI;wBAE3C,OAAO,MAAM,IAAI,EAAE,GAAG,EAAE,CAAC,GAAG,gBAAgB,CAAC;AACjD,qBAAC,CAAC,CAAC;iBACN;gBAED,IAAI,EAAE,IAAI,CAAC,KAAK,YAAYA,cAAM,CAAC,EACnC;AACI,oBAAA,OAAO,CAAC,KAAK,EAAE,CAAC;AAChB,oBAAA,OAAO,CAAC,GAAG,EAAE,CAAC;iBACjB;;gBAGD,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAC7C,gBAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EACpB;oBACI,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;oBACxC,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACnF,wBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;iBAC1B;qBAED;AACI,oBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,oBAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EACjB;wBACI,IAAI,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AAC/B,wBAAA,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACvG,4BAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;qBAC1C;oBACD,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM;AACnC,wBAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;iBACjC;aACJ;SACJ;KACJ;AAED,IAAA,IAAI,KAAK,GAAA;QAEL,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC;aAElC;YACI,IAAI,GAAG,GAAW,EAAE,CAAC;AACrB,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ;gBACvB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;AACzB,YAAA,OAAO,GAAG,CAAC;SACd;KACJ;AACJ,CAAA;AAED,IAAY,gBAIX,CAAA;AAJD,CAAA,UAAY,gBAAgB,EAAA;AAExB,IAAA,gBAAA,CAAA,gBAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACV,IAAA,gBAAA,CAAA,gBAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACb,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,GAI3B,EAAA,CAAA,CAAA,CAAA;MAEY,cAAc,CAAA;AA4BvB;;;;;;;AAOG;AACH,IAAA,WAAA,CAAmB,SAAmB,EAAS,WAAmB,EAAS,SAAA,GAAY,KAAK,EAChF,aAAA,GAAgB,CAAC,WAAW,IAAI,CAAC,IAAI,GAAG;AACxC,IAAA,SAAA,GAAY,gBAAgB,CAAC,KAAK;;QAF3B,IAAS,CAAA,SAAA,GAAT,SAAS,CAAU;QAAS,IAAW,CAAA,WAAA,GAAX,WAAW,CAAQ;QAAS,IAAS,CAAA,SAAA,GAAT,SAAS,CAAQ;QAChF,IAAa,CAAA,aAAA,GAAb,aAAa,CAA2B;QACxC,IAAS,CAAA,SAAA,GAAT,SAAS,CAAyB;AAZ9C,QAAA,IAAA,CAAA,aAAa,GAAG,KAAK,CAAC;KAerB;IAED,EAAE,GAAA;QAEE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;AAChC,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;AAE3B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAE1B,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC;YAC5B,OAAO,IAAI,CAAC,UAAU,CAAC;QAE3B,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EACxC;AACI,YAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAE1G,YAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAC3B,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAC1D,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,IAAIF,YAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CACrG,CAAC;SACL;;YAEG,IAAI,CAAC,mBAAmB,EAAE,CAAC;;;;;;;;;;;;QAc/B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC1B,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IAED,aAAa,GAAA;QAET,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACvC,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,YAAY,CAAC;QAClC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACxE,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;AACpC,QAAA,OAAO,IAAI,CAAC;KACf;IAES,wBAAwB,GAAA;AAE9B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;QACvD,IAAI,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YACjD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAExC,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,IAAIE,cAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;KACjE;IAES,eAAe,GAAA;AAErB,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;AAC7B,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAC3D;YACI,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACtC,YAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,IAAI,EAC1B;AACI,gBAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,gBAAA,IAAI,KAAK;oBACL,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;;AAE/C,oBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,IAAIF,YAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;aAC9H;SACJ;KACJ;;IAGD,aAAa,GAAA;AAET,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,QAAQ;AAAE,YAAA,KAAK,EAAE,CAAC;AAE5B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;YACI,IAAI,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAC7C,YAAA,IAAI,KAAK,GAAGrB,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;YACrD,IAAI,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAClD,YAAA,IAAI,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC;AACjC,YAAA,IAAI,SAAS,GAAG,YAAY,CAAC,KAAK,CAAC;AACnC,YAAA,IAAI,UAAU,GAAGA,UAAQ,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,YAAY,CAAC,KAAK,CAAC;YAEzF,IAAI,UAAU,EACd;AACI,gBAAA,IAAI,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC;AAC3B,gBAAA,IAAI,EAAE,GAAG,SAAS,CAAC,UAAU,CAAC;;AAE9B,gBAAA,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC;oBACrB,SAAS;AAEb,gBAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACjF,gBAAA,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AAChC,gBAAA,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBAEtH,IAAI,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAE9C,gBAAA,IAAI,EAAW,CAAC;AAChB,gBAAA,IAAI,IAAI,KAAK,CAAC,EACd;AACI,oBAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI;wBACjF,IAAI,GAAG,IAAI,CAAC;AAEhB,oBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,wBAAA,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;yBAEjB;AACI,wBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,EAC7C;4BACI,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;4BAC7C,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;4BAC7C,IAAI,IAAI,CAAC,SAAS,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa,EACjD;AACI,gCAAA,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAgB,CAAC,KAAK;AACzC,oCAAA,WAAW,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;;AAE1D,oCAAA,WAAW,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;AAE1F,gCAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;6BACpE;;AAEG,gCAAA,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;yBACpB;;;qBAGJ;iBACJ;;iBAED;oBACI,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;;AAG7C,oBAAA,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,WAAW,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,EACrF;wBACI,IAAI,IAAI,CAAC,MAAM;4BACX,IAAI,GAAG,IAAI,CAAC;6BAEhB;AACI,4BAAA,WAAW,CAAC,YAAY,GAAG,CAAC,IAAIqB,YAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;4BAC9C,SAAS;yBACZ;qBACJ;AAED,oBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AACf,wBAAA,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;qBAEjC;wBACI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,YAAY,CAAC;yBACvF;;AAEI,4BAAA,IAAI,IAAa,CAAC;AAClB,4BAAA,IAAI,WAAW,CAAC,EAAE,EAClB;AACI,gCAAA,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC;AAC3B,gCAAA,QAAQ,CAAC,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC;6BACxC;AACD,4BAAA,IAAI,KAAc,CAAC;AACnB,4BAAA,IAAI,YAAY,CAAC,EAAE,EACnB;AACI,gCAAA,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC;AAC3B,gCAAA,SAAS,CAAC,QAAQ,GAAG,YAAY,CAAC,EAAE,CAAC;6BACxC;AAED,4BAAA,IAAI,CAAU,CAAC;4BAEf,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EACnC;gCACI,IAAI,CAAC,GAAG,QAAe,CAAC;gCACxB,IAAI,MAAM,GAAG,IAAIC,WAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;AAEvE,gCAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gCACjB,IAAI,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;gCACpC,IAAI,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AAExF,gCAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;gCACjB,IAAI,EAAE,GAAG,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;gCACpC,IAAI,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,GAAG,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gCAExF,IAAI,MAAM,GAAG,MAAM;oCACf,CAAC,GAAG,EAAE,CAAC;;oCAEP,CAAC,GAAG,EAAE,CAAC;6BACd;;AAEG,gCAAA,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAEhC,4BAAA,IAAI,KAAc,CAAC;4BACnB,IAAI,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;4BACzC,IAAI,QAAQ,YAAYD,YAAI;AACxB,gCAAA,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;;gCAElB,KAAK,GAAG,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;4BAEnC,IAAI,MAAM,GAAY,KAAK,CAAC;4BAC5B,IAAI,KAAK,EACT;gCACI,IAAI,MAAM,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;gCAC3C,IAAI,SAAS,YAAYA,YAAI;AACzB,oCAAA,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;;oCAEpB,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC;6BACzC;4BAED,IAAI,WAAW,CAAC,EAAE;AACd,gCAAA,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;4BAC/B,IAAI,YAAY,CAAC,EAAE;AACf,gCAAA,SAAS,CAAC,QAAQ,GAAG,KAAK,CAAC;4BAE/B,IAAI,KAAK,IAAI,MAAM;gCACf,EAAE,GAAG,CAAC,CAAC;;AAEP,gCAAA,WAAW,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;yBACjE;6BAED;AACI,4BAAA,IAAI,IAAI,CAAC,SAAS,KAAK,gBAAgB,CAAC,KAAK;AACzC,gCAAA,WAAW,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;iCAE9D;AACI,gCAAA,WAAW,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;6BACzF;yBACJ;wBAED,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC/C,wBAAA,IAAI,MAAM;4BAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;qBACrD;iBACJ;gBACD,IAAI,EAAE,EACN;AACI,oBAAA,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC;AACpB,oBAAA,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;AAErB,oBAAA,WAAW,CAAC,SAAS,GAAG,SAAS,CAAC;AAClC,oBAAA,YAAY,CAAC,QAAQ,GAAG,QAAQ,CAAC;iBACpC;aACJ;iBAED;gBACI,IAAI,OAAO,GAAa,EAAE,CAAC;AAC3B,gBAAA,KAAK,IAAI,CAAC,GAAGrB,UAAQ,CAAC,WAAW,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAI,CAAC,GAAGA,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EACjG;oBACI,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,MAAM;qBACV;AACI,wBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtC,wBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;qBACxB;AACD,oBAAA,IAAI,CAAC,KAAK,YAAY,CAAC,KAAK;wBACxB,MAAM;iBACb;AACD,gBAAA,WAAW,CAAC,YAAY,GAAG,OAAO,CAAC;aACtC;SACJ;KACJ;AAED;;;;;;;AAOG;IACK,aAAa,CAAC,WAA0B,EAAE,YAA2B,EAAA;AAEzE,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC7D,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC9D,QAAA,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACb,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC;KACnD;IAES,mBAAmB,GAAA;AAEzB,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,EACrC;AACI,YAAA,IAAI,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC;YAClB,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,EAChB;gBACI,IAAI,MAAM,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACvC,IAAI,MAAM,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAEvC,gBAAA,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,MAAM;AACvE,oBAAA,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;aACnC;YACD,IAAI,CAAC,CAAC,EAAE;AAAE,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,CAAC,EAAE;AAAE,gBAAA,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC;;;YAI9B,IAAI,GAAG,YAAYsB,WAAG;mBACfzB,QAAM,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;;cAGjD;gBACI,IAAI,GAAG,CAAC,WAAW;oBACf,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;;oBAErC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC;aAC5C;SACJ;AACD,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,EACrC;YACI,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACnC,YAAA,IAAI,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC;YAElB,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;YACpF,IAAI,EAAE,GAAG,IAAIwB,YAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1B,IAAI,EAAE,GAAG,IAAIA,YAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAE1B,YAAA,IAAI,IAAI,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAClE,YAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EACnB;AACI,gBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB,gBAAA,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC;AAChB,gBAAA,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAChB,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACxB,IAAI,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBAChD,IAAI,OAAO,EACX;AACI,oBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACzC,SAAS;iBACZ;qBAED;oBACI,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;iBACtD;aACJ;;YAGD,IAAI,QAAQ,GAAG,IAAI,CAAC;YACpB,IAAI,QAAQ,GAAG,IAAI,CAAC;AACpB,YAAA,IAAI,GAAG,YAAYC,WAAG,EACtB;AACI,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,eAAe,EAC/C;AACI,oBAAA,IAAI,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,EAAE,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;AAC9D,oBAAA,IAAI,KAAK,GAAG,GAAG,CAAC,aAAa,CAAC,EAAE,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;AAE9D,oBAAA,IAAI,EAAW,CAAC;AAChB,oBAAA,IAAI,EAAW,CAAC;AAChB,oBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAClB,wBAAA,EAAE,GAAG,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAChC,oBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAClB,wBAAA,EAAE,GAAG,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBAEhC,IAAI,EAAE,IAAI,EAAE;AAAE,wBAAA,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;oBAChC,IAAI,EAAE,EACN;AACI,wBAAA,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC;AACjB,wBAAA,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC;wBACpB,QAAQ,GAAG,KAAK,CAAC;qBACpB;oBACD,IAAI,EAAE,EACN;AACI,wBAAA,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC;AACjB,wBAAA,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC;wBAClB,QAAQ,GAAG,KAAK,CAAC;qBACpB;iBACJ;aACJ;AAED,YAAA,IAAI,QAAa,CAAC;AAClB,YAAA,IAAI,QAAa,CAAC;;AAElB,YAAA,IAAI,QAAQ,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,YAAYA,WAAG,EACvD;AACI,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AACnB,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,QAAQ,GAAG,IAAI,EAClE;AACI,oBAAA,IAAI,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;AAC3D,oBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EACrB;wBACI,IAAI,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC/B,wBAAA,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC;AACjB,wBAAA,QAAQ,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AACrB,wBAAA,QAAQ,CAAC,UAAU,GAAG,EAAE,CAAC;qBAC5B;iBACJ;aACJ;AACD,YAAA,IAAI,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,YAAYA,WAAG,EACzD;AACI,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC;AACpB,gBAAA,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,QAAQ,GAAG,IAAI,EAClE;AACI,oBAAA,IAAI,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;AAC3D,oBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EACrB;wBACI,IAAI,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAC/B,wBAAA,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC;AACjB,wBAAA,QAAQ,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AACrB,wBAAA,QAAQ,CAAC,QAAQ,GAAG,EAAE,CAAC;qBAC1B;iBACJ;aACJ;AAED,YAAA,IAAI,EAAE,GAAG,IAAIE,gBAAQ,EAAE,CAAC;AACxB,YAAA,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACpB,YAAA,IAAI,QAAQ;AAAE,gBAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACjC,YAAA,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAClB,YAAA,IAAI,QAAQ;AAAE,gBAAA,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEjC,KAAK,IAAI,CAAC,IAAI,GAAG;AACb,gBAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEf,IAAI,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAC/C,YAAA,IAAI,OAAO;AACP,gBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;gBAEzC,OAAO,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;SAC1D;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAClB;AACI,YAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,IAAI,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACzD,IAAI,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,cAAc,KAAK,UAAU;AAC7B,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9C,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC;AACtC,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAEnF,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;YACzC,IAAI,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAC/C,YAAA,IAAI,SAAS,KAAK,KAAK,CAAC,KAAK;AACzB,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;SACrE;AAED,QAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAC3B,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EACrE,GAAG,IAAI,CAAC,gBAAgB,CAC3B,CAAC;KACL;;IAGS,cAAc,GAAA;AAEpB,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,EACrC;AACI,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;YAChB,IAAI,WAAW,CAAC,CAAC,CAAC;gBACd,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,CAAC,YAAY;gBACd,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACnF;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC,EAAE,EAC1D;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;AACtC,YAAA,IAAI,IAAI,GAAG,CAAC,CAAC,WAAW,CAAC;AACzB,YAAA,KAAK,IAAI,SAAS,IAAI,IAAI,CAAC,eAAe;AACtC,gBAAA,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;SACjC;KACJ;;IAGO,kBAAkB,GAAA;AAEtB,QAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE,CAAC;AAChC,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,EAClC;AACI,YAAA,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC;AACjB,YAAA,KAAK,IAAI,EAAE,IAAI,EAAE,EACjB;AACI,gBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AACjD,oBAAA,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC3C;SACJ;KACJ;;IAGO,aAAa,GAAA;AAEjB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC,EAAE,EAC1D;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,CAAC,IAAI;gBAAE,SAAS;AACrB,YAAA,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;AAC5B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC,EAAE,EAC9D;gBACI,IAAI,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;gBACvC,IAAI,EAAE,CAAC,IAAI;oBAAE,SAAS;AACtB,gBAAA,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACpC,gBAAA,IAAI,MAAM,KAAKnC,cAAM,CAAC,cAAc,EACpC;AACI,oBAAA,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;AACd,oBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;AACf,oBAAA,IAAI,MAAM,GAAG,IAAIkC,cAAM,CAAO,CAAC,CAAC,KAAM,CAAC,MAAM,EAAQ,CAAC,CAAC,KAAM,CAAC,MAAM,CAAC,CAAC;AACtE,oBAAA,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC;AACjB,oBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAACO,wBAAsB,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;iBACpF;AACI,qBAAA,IAAI,MAAM,KAAKzC,cAAM,CAAC,IAAI,EAC/B;oBACI,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;AAC/B,wBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;yBAEnB;AACI,wBAAA,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;AACd,wBAAA,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;wBACnB,MAAM;qBACT;iBACJ;aACJ;SACJ;KACJ;;IAGO,kBAAkB,GAAA;AAEtB,QAAA,IAAI,IAAI,GAAG,IAAI,GAAG,EAAS,CAAC;AAC5B,QAAA,IAAI,KAAK,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5B,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,qBAAqB,EACxC;YACI,IAAI,CAAC,CAAC,CAAC,IAAI;AACP,gBAAA,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;SACpC;AAED,QAAA,IAAI,IAAa,CAAC;QAElB,IAAI,UAAU,GAAG,CAAC,CAAU,EAAE,EAAY,EAAE,SAAS,GAAG,IAAI,KAAa;YAErE,IAAI,OAAO,GAAG,QAAQ,CAAC;AACvB,YAAA,IAAI,IAAW,CAAC;AAChB,YAAA,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EACtB;AACI,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;oBAAE,SAAS;gBAEhC,IAAI,IAAI,EACR;oBACI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;AACpC,oBAAA,IAAI,CAAC,GAAG,OAAO,EACf;wBACI,IAAI,GAAG,CAAC,CAAC;wBACT,OAAO,GAAG,CAAC,CAAC;qBACf;iBACJ;qBAED;oBACI,IAAI,GAAG,CAAC,CAAC;oBACT,OAAO,GAAG,CAAC,CAAC;oBACZ,MAAM;iBACT;aACJ;YAED,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,EACtC;AACI,gBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrB,gBAAA,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;;;;;AAOd,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;;gBAGpB,IAAI,GAAG,GAAG,CAAC,CAAC;AACZ,gBAAA,IAAI,EAAE,YAAYiC,WAAG,EACrB;AACI,oBAAA,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;oBACb,IAAI,IAAI,CAAC,SAAS;wBACd,GAAG,IAAI,CAAC,CAAC,CAAC;AAEd,oBAAA,IAAI,CAAC,SAAS;wBACV,GAAG,IAAI,CAAC,CAAC,CAAC;iBACjB;gBAED,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAC5B;AACI,oBAAA,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;AACb,wBAAA,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACrB,wBAAA,GAAG,EAAE,GAAG;AACX,qBAAA,CAAC,CAAC;iBACN;gBAED,IAAI,SAAS,EACb;AACI,oBAAA,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;AAC9C,oBAAA,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;AACb,wBAAA,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACrB,wBAAA,GAAG,EAAE,CAAC;AACT,qBAAA,CAAC,CAAC;iBACN;qBAED;AACI,oBAAA,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;AAChB,wBAAA,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;wBACrB,GAAG;AACN,qBAAA,CAAC,CAAC;iBACN;;gBAGD,OAAO,IAAI,CAAC,EAAE,CAAC;aAClB;AACL,SAAC,CAAC;AAEF,QAAA,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,EAC1B;YACI,IAAI,GAAG,SAAS,CAAC;AACjB,YAAA,IAAI,EAAE,GAAG,IAAIE,gBAAQ,EAAE,CAAC;YACxB,IAAI,EAAE,GAAG,CAAC,CAAC;AACX,YAAA,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO;gBACpB,EAAE,GAAG,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;YAClC,EAAE,GAAG,CAAC,CAAC;AACP,YAAA,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC;AACrB,YAAA,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO;gBACpB,EAAE,GAAG,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AAEnC,YAAA,IAAI,EAAE,CAAC,gBAAgB,GAAG,CAAC,EAC3B;;gBAEI,IAAI,EAAE,CAAC,gBAAgB,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI;oBAAE,SAAS;AAE5D,gBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC;AACpB,gBAAA,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACtB,gBAAA,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC;AAC7B,oBAAA,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACxB,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;aACxD;SACJ;KACJ;IAEO,6BAA6B,GAAA;AAEjC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE,OAAO;AAEpC,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAC5B;AACI,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC;aACxF;AACI,gBAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,UAAU,EAC9B;AACI,oBAAA,IAAI,EAAE,CAAC,OAAO;AACV,wBAAA3B,QAAM,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC;wBAC3C,OAAO,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC;qBAC/D;AACI,wBAAA,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;AAClB,wBAAA,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;qBACvB;iBACJ;aACJ;iBAED;AACI,gBAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,UAAU,EAC9B;oBACI,IAAI,EAAE,CAAC,OAAO;AACV,wBAAA,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;iBAC3B;aACJ;SACJ;AACI,aAAA,IAAI,IAAI,CAAC,QAAQ,EACtB;AACI,YAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,UAAU,EAC9B;gBACI,IAAI,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/B,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;AACtC,gBAAA,IAAI,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC;AAC5B,oBAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC1B;SACJ;KACJ;AAED,IAAA,aAAa,CAAC,EAAW,EAAA;QAErB,OAAO,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC;KAC/D;AAED,IAAA,kBAAkB,CAAC,EAAW,EAAA;QAE1B,IAAI,QAAQ,GAAG,QAAQ,CAAC;QACxB,IAAI,OAAO,GAAG,QAAQ,CAAC;AACvB,QAAA,IAAI,KAAc,CAAC;AACnB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAC/C;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,EAAE,GAAG,CAAC,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AACxC,YAAA,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAC;YAEpC,IAAI,IAAI,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AACpC,YAAA,IAAI,IAAI,GAAG,OAAO,EAClB;gBACI,OAAO,GAAG,IAAI,CAAC;gBACf,QAAQ,GAAG,CAAC,CAAC;gBACb,KAAK,GAAG,EAAE,CAAC;aACd;SACJ;QAED,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAClC,IAAI,KAAK,GAAG,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAErC,IAAIA,QAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EACjE;AACI,YAAA,IAAI,QAAQ,GAAGG,UAAQ,CAAC,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACvD,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAEzC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,EACnF;AACI,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC;AACrB,gBAAA,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC;AAClB,gBAAA,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC;AACzB,gBAAA,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;AAEvC,gBAAA,IAAI,KAAc,CAAC;AACnB,gBAAA,IAAI,IAAa,CAAC;gBAClB,IAAI,CAAC,YAAYsB,WAAG;AAChB,oBAAA,KAAK,GAAG,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;;AAExC,oBAAA,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC;gBAEvB,IAAI,QAAQ,YAAYA,WAAG;oBACvB,IAAI,GAAG,QAAQ,CAAC,kBAAkB,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;;AAEnD,oBAAA,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC;AAE/B,gBAAA,IAAI,GAAG,GAAG,IAAIA,WAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjE,gBAAA,IAAI,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACtC,gBAAA,OAAO,GAAG,CAAC;aACd;SACJ;AACI,aAAA,IAAIzB,QAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,EAC/F;AACI,YAAA,IAAI,SAAS,GAAGG,UAAQ,CAAC,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACxD,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAE3C,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,EACpF;AACI,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;AAEnB,gBAAA,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC;AAClB,gBAAA,IAAI,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC;AAC1B,gBAAA,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;AAEvC,gBAAA,IAAI,KAAc,CAAC;AACnB,gBAAA,IAAI,IAAa,CAAC;gBAClB,IAAI,CAAC,YAAYsB,WAAG;oBAChB,IAAI,GAAG,CAAC,CAAC,kBAAkB,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC;;AAE5C,oBAAA,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC;gBAExB,IAAI,SAAS,YAAYA,WAAG;AACxB,oBAAA,KAAK,GAAG,SAAS,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;;AAEhD,oBAAA,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC;AAE/B,gBAAA,IAAI,GAAG,GAAG,IAAIA,WAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjE,gBAAA,IAAI,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACtC,gBAAA,OAAO,GAAG,CAAC;aACd;SACJ;QAED,IAAI,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACjC,QAAA,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KAC9B;AAES,IAAA,SAAS,CAAC,MAAe,EAAE,MAAe,EAAE,IAAc,EAAA;AAEhE,QAAA,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3C,IAAI,EAAE,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC;QACrD,IAAI,GAAG,GAAG,IAAIA,WAAG,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AACpF,QAAA,OAAO,GAAG,CAAC;KACd;AAES,IAAA,YAAY,CAAC,MAAe,EAAE,QAAuB,EAAE,SAAwB,EAAE,WAAmB,EAAA;QAE1G,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACxF,MAAM,WAAW,GAAG,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,IAAID,YAAI,CAAC,WAAW,EAAE,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;QAEnF,IAAI,EAAW,EAAE,EAAW,CAAC;AAC7B,QAAA,IAAI,WAAW,KAAK,CAAC,EACrB;AACI,YAAA,EAAE,GAAG,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,YAAA,EAAE,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SAC9C;;SAED;YACI,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;AAChG,YAAA,EAAE,GAAG,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,eAAe,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,CAAC;SACpG;AAED,QAAA,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;AACjB,QAAA,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;AAElB,QAAA,OAAO,IAAIA,YAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;KAC3B;AACJ,CAAA;AAED,SAAS,YAAY,CAAC,CAAQ,EAAA;IAE1B,IAAI,CAAC,YAAYA,YAAI;AAAE,QAAA,OAAO,CAAC,CAAC;;AAC3B,QAAA,OAAO,CAAC,CAAC;AAClB,CAAC;AACe,SAAA,aAAa,CAAC,EAAS,EAAE,EAAS,EAAA;IAE9C,OAAO,YAAY,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;AAC/C,CAAC;AAGD,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B;AACM,SAAU,WAAW,CAAC,KAAY,EAAA;IAEpC,IAAI,KAAK,YAAYC,WAAG,IAAI,KAAK,CAAC,QAAQ,GAAG,gBAAgB;AAAE,QAAA,OAAO,KAAK,CAAC;AAC5E,IAAA,OAAO,KAAK,CAAC,MAAM,GAAG,gBAAgB,CAAC;AAC3C;;AC17BA;;;;;AAKG;AACa,SAAA,iBAAiB,CAAC,EAAY,EAAE,EAAW,EAAA;IAEvD,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,IAAI,OAAO,GAAG,IAAID,YAAI,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAIlC,aAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAElE,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,EACpC;AACI,QAAA,IAAIU,QAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,gBAAgB,CAAC;SACjD;YACI,IAAI,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAEnC,YAAA,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC;AAC9C,gBAAA,OAAO,KAAK,CAAC;;AAGjB,YAAA,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC3B,SAAS;;YAEb,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACvB,IAAIA,QAAM,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EACzB;gBACI,IAAIA,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC;AACrB,wBAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;oBAC7E,OAAO,KAAK,CAAC;gBACjB,SAAS;aACZ;;AAGD,YAAA,IAAIA,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAC5B;gBACI,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC;AAAE,oBAAA,SAAS,EAAE,CAAC;gBACzC,SAAS;aACZ;;AAED,YAAA,IAAIA,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAC5B;gBACI,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC;AAAE,oBAAA,SAAS,EAAE,CAAC;gBACzC,SAAS;aACZ;;AAGD,YAAA,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACzD,YAAA,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,EAC1B;gBACI,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACvB,gBAAA,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAEpB,gBAAA,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACpC,IAAIA,QAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC;AACxB,oBAAA,OAAO,KAAK,CAAC;AACjB,gBAAA,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC;AACX,oBAAA,SAAS,EAAE,CAAC;aACnB;SACJ;;SAED;YACI,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAQ,CAAC;AACvC,YAAA,IAAI,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC;AACxB,YAAA,IAAI,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC;AAEtB,YAAA,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC;AAC9C,gBAAA,OAAO,KAAK,CAAC;AAEjB,YAAA,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;;YAExB,IAAIA,QAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EACjD;;gBAEI,IAAIA,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;AACpE,oBAAA,OAAO,KAAK,CAAC;;AAGjB,gBAAA,IAAIA,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EACrC;oBACI,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI;AACnB,wBAAA,SAAS,EAAE,CAAC;iBACnB;AACI,qBAAA,IAAIA,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAC1C;oBACI,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI;AAClB,wBAAA,SAAS,EAAE,CAAC;iBACnB;gBACD,SAAS;aACZ;AACD,YAAA,IAAIA,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EACrC;gBACI,IAAI,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC3C,gBAAA,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI;AACb,oBAAA,SAAS,EAAE,CAAC;aACnB;AACD,YAAA,IAAIA,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EACrC;gBACI,IAAI,GAAG,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC3C,gBAAA,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI;AACZ,oBAAA,SAAS,EAAE,CAAC;aACnB;AAED,YAAA,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,EACrE;gBACI,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC;AACtB,oBAAA,OAAO,KAAK,CAAC;;gBAGjB,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC;oBACvE,SAAS;AAEb,gBAAA,SAAS,EAAE,CAAC;aACf;SACJ;KACJ;AAED,IAAA,OAAO,CAAC,SAAS,GAAG,CAAC,MAAM,CAAC,CAAC;AACjC;;;ACrJO,MAAM,gBAAgB,GAAG,KAAK;AAGxB2B,gBAAQ,GAAA,UAAA,GAAd,MAAM,QAAS,SAAQ,KAAK,CAAA;AAG/B,IAAA,WAAA,CAAoB,YAA6B,EAAE,EAAA;AAE/C,QAAA,KAAK,EAAE,CAAC;QAFQ,IAAS,CAAA,SAAA,GAAT,SAAS,CAAsB;QAD3C,IAAW,CAAA,WAAA,GAAY,KAAK,CAAC;KAIpC;AAED,IAAA,WAAW,CAAC,CAAU,EAAA;QAElB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,GAAG,IAAIrC,aAAO,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAC/C,QAAA,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAIU,QAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAClB;YACI,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,EAAE,GAAG,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AACjD,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAC5B;gBACI,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACzB,gBAAA,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AACpB,gBAAA,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;aACxB;AACD,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;YACb,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,GAAG,KAAK,MAAM;AACd,gBAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS;AACxB,oBAAA,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;SACvB;KACJ;AAED;;AAEG;IACH,IAAI,GAAA;QAEA,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,GAAG,IAAIV,aAAO,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,GAAG,IAAIA,aAAO,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,GAAG,IAAIA,aAAO,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,MAAM,EAAE,CAAC;AACX,QAAA,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;AACtB,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAE/C,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAC5B;AACI,YAAA,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACb,YAAA,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;SACf;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,QAAA,OAAO,IAAI,CAAC;KACf;;IAGD,OAAO,GAAA;AAEH,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;AAC3B,YAAA,OAAO,IAAI,CAAC;QAChB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,IAAI,GAAG,EAAE,CAAC;AACd,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAC/B;AACI,YAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClB,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACxB;AAED,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEnB,GAAG,CAAC,OAAO,EAAE,CAAC;AAEd,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,EACxD;YACI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;YACvB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;SAC5B;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC1B,YAAA,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACd,YAAA,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;SACnB;AAED,QAAA,OAAO,IAAI,CAAC;KACf;IACD,IAAI,QAAQ,CAAC,IAAqB,EAAA;QAE9B,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AACD,IAAA,IAAI,QAAQ,GAAA;QAER,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;AAED,IAAA,IAAI,gBAAgB,GAAA;AAEhB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;KAChC;AAED;;;;;;;;;AASG;IACH,WAAW,CAAC,KAAa,EAAE,EAAuB,EAAA;QAE9C,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,GAAoB,CAAC;AACzB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,EACrB;AACI,YAAA,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAG;gBAEb,OAAO;AACH,oBAAA,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE;AACb,oBAAA,GAAG,EAAE,CAAC;iBACT,CAAC;AACN,aAAC,CAAC,CAAC;SACN;;AAEG,YAAA,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AAEvC,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,cAAc,CAAC,KAAa,EAAA;QAExB,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EACjC;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,EAAE,CAAC;SACjB;AACD,QAAA,OAAO,IAAI,CAAC;KACf;IACD,cAAc,CAAC,IAAY,EAAE,EAAU,EAAA;AAEnC,QAAA,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,EAAE,GAAG,IAAI,EACjD;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;SACjB;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AAED;;;AAGG;AACH,IAAA,eAAe,CAAC,KAAa,EAAA;QAEzB,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,KAAK,CAAC;AAE1D,QAAA,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;AAC3D,YAAA,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AAEzB,QAAA,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC;AAC/D,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAChB,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE;AAChC,YAAA,GAAG,EAAE,CAAC;AACT,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,YAAY,CAAC,KAAa,EAAA;QAEtB,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK;YAC3C,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;KAC/C;AACD;;;;;;AAMG;IACH,UAAU,CAAC,KAAa,EAAE,EAAW,EAAA;QAEjC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,EACL;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACd,IAAI,CAAC,MAAM,EAAE,CAAC;SACjB;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AACS,IAAA,gBAAgB,CAAC,CAAU,EAAA;QAEjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5B,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;AACtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,EACvC;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAChC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SACpC;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AACS,IAAA,iBAAiB,CAAC,CAAU,EAAA;QAElC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACrC,QAAA,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjC,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;AACtB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EACtC;YACI,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;SAC9B;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;AACf,QAAA,OAAO,IAAI,CAAC;KACf;IAED,UAAU,CAAC,KAAa,EAAE,GAAW,EAAA;QAEjC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,EACL;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;YACZ,IAAI,CAAC,MAAM,EAAE,CAAC;SACjB;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,UAAU,CAAC,KAAa,EAAA;QAEpB,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;KACpC;IAED,SAAS,CAAC,MAAc,EAAE,MAAc,EAAA;QAEpC,IAAI,CAAC,QAAQ,GAAG;YACZ,EAAE,EAAE,EAAE,IAAIc,aAAO,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;YAC7B,EAAE,EAAE,EAAE,IAAIA,aAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;AACnC,YAAA,EAAE,EAAE,EAAE,IAAIA,aAAO,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;AAC3C,YAAA,EAAE,EAAE,EAAE,IAAIA,aAAO,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;SAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC;KACf;IAED,gBAAgB,CAAC,EAAW,EAAE,EAAW,EAAA;AAErC,QAAA,IAAI,GAAG,GAAG,IAAIT,UAAI,EAAE,CAAC;AACrB,QAAA,GAAG,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAU,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAErF,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7B,QAAA,IAAI,GAAG,GAAG,IAAIS,aAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACpC,QAAA,IAAI,GAAG,GAAG,IAAIA,aAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAEpC,IAAI,CAAC,QAAQ,GAAG;AACZ,YAAA,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AACnB,YAAA,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AACnB,YAAA,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;AACnB,YAAA,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE;SAAC,CAAC;AAEzB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,YAAY,CAAC,GAAW,EAAA;QAEpB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1B,KAAK,IAAI,CAAC,IAAI,GAAG;AACb,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,QAAA,OAAO,IAAI,CAAC;KACf;;AAGD,IAAA,IAAI,UAAU,GAAA;AAEV,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;AACzB,YAAA,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,OAAO,IAAId,aAAO,EAAE,CAAC;KACxB;IACD,IAAI,UAAU,CAAC,CAAU,EAAA;QAErB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAExC,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YAC3B,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,aAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;aAErC;YACI,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC7B,YAAA,IAAI,GAAG,KAAK,CAAC,EACb;gBACI,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAQ,CAAC;AACzC,gBAAA,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;;gBAEnB,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;aACnE;YACD,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SACpC;KACJ;AACD,IAAA,IAAI,QAAQ,GAAA;QAER,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;AAC7C,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;YACzB,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9E,OAAO,IAAIA,aAAO,EAAE,CAAC;KACxB;IACD,IAAI,QAAQ,CAAC,CAAU,EAAA;QAEnB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS;YAC3C,OAAO;QAEX,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAExC,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;AAC7C,QAAA,IAAI,GAAG,KAAK,CAAC,EACb;AACI,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAQ,CAAC;AACzD,YAAA,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,YAAA,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC;;YAEjB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;SACnF;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;KAChD;AAED,IAAA,IAAI,UAAU,GAAA;QAEV,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;AAED,IAAA,IAAI,UAAU,GAAA;AAEV,QAAA,OAAO,CAAC,CAAC;KACZ;AAED;;AAEG;AACH,IAAA,IAAI,QAAQ,GAAA;AAER,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC;;QAG1C,IAAI,IAAI,CAAC,WAAW;AAChB,YAAA,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;AAE5D,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AACjC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;KACpC;AACD,IAAA,IAAI,KAAK,GAAA;AAEL,QAAA,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC;AACjB,YAAA,OAAO,CAAC,CAAC;QAEb,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QACjC,IAAI,IAAI,GAAG,CAAC,CAAC;AACb,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EACvC;AACI,YAAA,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACtB,IAAI,GAAG,GAAG,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAE5C,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,YAAA,IAAI,GAAG,KAAK,CAAC,EACb;AACI,gBAAA,IAAI,GAAG,GAAG,IAAImC,WAAG,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AACpD,gBAAA,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;;gBAE1B,IAAI,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;;gBAE5E,GAAG,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aACvC;YACD,IAAI,IAAI,GAAG,CAAC;SACf;QACD,OAAO,IAAI,GAAG,CAAC,CAAC;KACnB;AACD,IAAA,IAAI,IAAI,GAAA;QAEJ,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC/B;;AAED,IAAA,IAAI,SAAS,GAAA;QAET,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;;AAED,IAAA,IAAI,OAAO,GAAA;QAEP,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;KACnG;IACD,IAAI,SAAS,CAAC,CAAU,EAAA;QAEpB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;IAED,kBAAkB,GAAA;AAEd,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EACjD;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAEzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gBAC5D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;SAC5E;KACJ;AAED;;;AAGG;IACH,eAAe,CAAC,IAAI,GAAG,GAAG,EAAA;QAEtB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,QAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,EACxD;AACI,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM;AACpD,gBAAA,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAACtB,UAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAC7F;gBACI,IAAI,CAAC,MAAM,EACX;oBACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC5B,MAAM,GAAG,IAAI,CAAC;iBACjB;AAED,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC5C,gBAAA,KAAK,EAAE,CAAC;aACX;AACD,YAAA,GAAG,EAAE,CAAC;SACT;QAED,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC;YACjE,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAE5D,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC;QAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AAED,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;KAC7D;AAED;;;;;;;AAOG;AACH,IAAA,eAAe,CAAC,KAAa,EAAA;AAEzB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;YACvD,OAAO,SAAS,CAAC,IAAI,CAAC,YAAY,CAACA,UAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC9G,IAAI,EAAE,GAAU,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC5C,QAAA,IAAI,EAAE;YACF,OAAO,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;AAChE,QAAA,OAAO,SAAS,CAAC;KACpB;AAED,IAAA,cAAc,CAAC,KAAa,EAAA;QAExB,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAC7C,YAAA,OAAO,GAAG,CAAC;;QAGf,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;;AAEnC,QAAA,IAAI,OAAO,GAAG,UAAU,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;QAEtE,IAAI,IAAI,GAAG,CAAC,CAAC;;AAEb,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAChC;YACI,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;SAC1C;;AAGD,QAAA,IAAI,UAAU,KAAK,OAAO,EAC1B;AACI,YAAA,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC;SACvE;AACI,aAAA,IAAI,KAAK,GAAG,UAAU,EAC3B;AACI,YAAA,IAAI,SAAS,GAAG,KAAK,GAAG,UAAU,CAAC;AACnC,YAAA,IAAI,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;SACjE;AAED,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,kBAAkB,CAAC,IAAY,EAAA;QAE3B,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACtC,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;KACtC;AAED;;;;;;AAMG;AACH,IAAA,eAAe,CAAC,EAAW,EAAA;AAEvB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AACzB,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,GAAG,CAAC;AACjC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;AACI,YAAA,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAChB,IAAI,KAAK,GAAG,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AACnC,YAAA,IAAI,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC;AACtB,gBAAA,OAAO,CAAC,GAAG,KAAK,CAAC;SACxB;;QAGD,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,GAAG,CAAC;;QAGjC,IAAI,QAAQ,GAAa,EAAE,CAAC;;QAE5B,IAAI,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC;AACpC,YAAA,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;AAE9B,QAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,QAAQ,GAAG,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;AAEhD,QAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EACxB;AACI,YAAA,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;SACtB;AACI,aAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAC7B;;AAEI,YAAA,IAAI,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;AACnC,kBAAA,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACrC,gBAAA,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;;AAEnB,gBAAA,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;SAC1B;AACD,QAAA,OAAO,GAAG,CAAC;KACd;AACD,IAAA,cAAc,CAAC,IAAY,EAAA;AAEvB,QAAA,IAAIH,QAAM,CAAC,IAAI,EAAE,CAAC,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC;QAE9B,IAAI,GAAG,GAAmB,EAAE,CAAC;AAC7B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,EACtC;YACI,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACjC,YAAA,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;YACpB,IAAI,GAAG,GAAG,IAAI;gBAAE,SAAS;AAEzB,YAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEb,IAAI,IAAI,IAAI,GAAG;gBACX,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAClC,iBAAA,IAAIA,QAAM,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,CAAC;YAEjB,IAAI,IAAI,GAAG,CAAC;SACf;QAED,IAAI,CAAC,IAAI,CAAC,WAAW;AACjB,YAAA,OAAO,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAEjE,QAAA,OAAO,GAAG,CAAC;KACd;AACD,IAAA,cAAc,CAAC,EAAW,EAAA;QAEtB,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,GAAG,CAAC;AAC1C,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;KACrC;AAED;;;;;;;;AAQG;AACH,IAAA,aAAa,CAAC,KAAuB,EAAA;QAEjC,IAAI,KAAK,YAAYV,aAAO;AACxB,YAAA,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAExC,IAAI,KAAK,CAAC,KAAK,CAAC;AACZ,YAAA,OAAO,SAAS,CAAC;QAErB,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAErC,QAAA,IAAI,CAAC,EAAE;AAAE,YAAA,OAAO,SAAS,CAAC;QAE1B,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;KAC7D;AACD,IAAA,cAAc,CAAC,KAAwB,EAAA;;AAGnC,QAAA,IAAI,MAAgB,CAAC;QACrB,IAAI,OAAO,KAAK,IAAI,QAAQ;AACxB,YAAA,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;;YAEjB,MAAM,GAAG,KAAK,CAAC;;AAGnB,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC7B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;aACzD,GAAG,CAAC,CAAC,IAAG;YAEL,IAAI,CAAC,GAAG,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAC;YACpB,IAAI,CAAC,GAAG,QAAQ;AAAE,gBAAA,OAAO,QAAQ,CAAC;AAClC,YAAA,IAAIU,QAAM,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC;gBACpC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;AAC/B,YAAA,OAAO,CAAC,CAAC;AACb,SAAC,CAAC,CAAC;;AAEP,QAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7B,IAAI,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC;;AAEtD,QAAA,IAAI,CAAC,WAAW;AACZ,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/B,QAAA,0BAA0B,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAKA,QAAM,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AACrE,QAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;AACnB,YAAA,OAAO,EAAE,CAAC;;QAGd,IAAI,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACnC,QAAA,IAAI,YAAY;YACZ,MAAM,CAAC,KAAK,EAAE,CAAC;QAEnB,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;;QAGjC,IAAI,GAAG,GAAe,EAAE,CAAC;AAEzB,QAAA,IAAI,GAAG,GAAG,CAAC,CAAC;;QAGZ,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,KAAK,IAAI,EAAE,IAAI,MAAM,EACrB;;AAEI,YAAA,IAAI,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACvE,EAAE,IAAI,GAAG,CAAC;YACV,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7B,GAAG,IAAI,OAAO,CAAC;YAEf,IAAI,MAAM,GAAoB,EAAE,CAAC;;AAGjC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAChC;AACI,gBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAACA,QAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EACxC;oBACI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBACxD;AACD,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC1C,GAAG,CAAC,KAAK,EAAE,CAAC;gBACZ,IAAI,CAAC,KAAK,EAAE,CAAC;aAChB;YAED,IAAIA,QAAM,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC;aAC7B;gBACI,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aACrD;;aAED;AACI,gBAAA,IAAI,GAAG,GAAW,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC1B,IAAI,CAACA,QAAM,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC;AACrB,oBAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,OAAO,IAAI,CAAC,KAAK,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAGtF,gBAAA,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;;gBAEzC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;;gBAG5B,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACnB;AAED,YAAA,KAAK,GAAG,EAAE,GAAG,OAAO,CAAC;AACrB,YAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EACrB;AACI,gBAAA,IAAI,EAAE,GAAG,IAAI,UAAQ,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACpD,gBAAA,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AAChC,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAChB;SACJ;;QAGD,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EACrD;YACI,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACjC,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/D,gBAAA,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;AAE3B,YAAA,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAE3C,GAAG,CAAC,KAAK,EAAE,CAAC;SACf;AACD,QAAA,OAAO,GAAG,CAAC;KACd;;IAGD,oBAAoB,CAAC,UAAkB,EAAE,QAAgB,EAAA;QAErD,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;AAC1C,QAAA,IAAIA,QAAM,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC;YAAE,UAAU,GAAG,MAAM,CAAC;;AACrD,YAAA,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;AACxC,QAAA,IAAIA,QAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC;YAAE,QAAQ,GAAG,MAAM,CAAC;;AACjD,YAAA,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAEjC,QAAA,MAAM,QAAQ,GAAG,CAAC,KAAa,KAAI;YAE/B,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC9B,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;YACrC,IAAI,CAACA,QAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC;AACvB,gBAAA,OAAO,IAAIyB,WAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;;AAEpD,gBAAA,OAAO,IAAID,YAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7D,SAAC,CAAC;QAEF,IAAI,KAAK,GAAoB,EAAE,CAAC;AAChC,QAAA,IAAI,UAAU,KAAK,MAAM,EACzB;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;SAChD;aAED;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC/B,YAAA,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1B,YAAA,IAAI,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;YACnC,IAAI,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AACrC,YAAA,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AAChB,YAAA,IAAI,CAACxB,QAAM,CAAC,GAAG,EAAE,CAAC,CAAC;AACf,gBAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AACpD,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;SAC9C;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EACxC;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;SAChD;AAED,QAAA,IAAI,MAAM,KAAK,QAAQ,EACvB;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC9B,YAAA,IAAI,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AACjC,YAAA,IAAI,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC1B,IAAI,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;AACrC,YAAA,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;YAChB,IAAI,CAACA,QAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EACnB;AACI,gBAAA,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;AAC3D,gBAAA,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;aACnD;AACD,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;SACzC;AAED,QAAA,IAAI,EAAE,GAAG,IAAI,UAAQ,CAAC,KAAK,CAAC,CAAC;AAC7B,QAAA,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;QACzB,OAAO;KACV;AAED,IAAA,MAAM,CAAC,QAAgB,EAAA;QAEnB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;YAAE,OAAO;QAE1D,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5B,QAAA,IAAI,OAAe,CAAC;AACpB,QAAA,IAAI,QAAgB,CAAC;AAErB,QAAA,IAAI,QAAQ,GAAG,CAAC,EAChB;YACI,OAAO,GAAG,CAAC,CAAC;YACZ,QAAQ,GAAG,CAAC,CAAC;SAChB;AACI,aAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,EACjC;AACI,YAAA,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;AACxB,YAAA,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC;SAC1B;;QAGD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;;QAGjG,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC;QAC1C,IAAI,MAAM,IAAI,CAAC;YACX,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;QAE1F,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;;AAGD,IAAA,cAAc,CAAC,QAAiB,EAAA;QAE5B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC;YAC9C,OAAO,IAAI,CAAC,OAAO,CAAC;QAExB,IAAI,CAAC,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAEpD,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;AACrB,QAAA,IAAI,EAAE,GAAG,IAAIV,aAAO,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACxD,IAAI,QAAQ,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;QAExC,IAAI,GAAG,GAAc,EAAE,CAAC;QACxB,IAAI,IAAI,GAAa,EAAE,CAAC;AACxB,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAC5B;AACI,YAAA,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AACnD,YAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACZ,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;SACxC;AACD,QAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;KACxB;IAED,IAAI,CAAC,EAAS,EAAE,QAAQ,GAAG,KAAK,EAAE,SAAS,GAAG,IAAI,EAAA;QAE9C,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,WAAW;YAChB,OAAOE,cAAM,CAAC,KAAK,CAAC;QAExB,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;AAExF,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEtF,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAC/B;AACI,YAAA,IAAI,EAAE,YAAYgC,YAAI,EACtB;AACI,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3C,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;aAC9C;AACI,iBAAA,IAAI,EAAE,YAAYC,WAAG,EAC1B;AACI,gBAAA,IAAI,CAAC,GAAG,IAAInC,aAAO,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAC5D,gBAAA,IAAI,CAAC,GAAG,IAAIA,aAAO,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;gBAC5D,IAAI,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAErB,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACnD,gBAAA,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC;AAEvB,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAC7C,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;aAC9C;AACI,iBAAA,IAAI,EAAE,YAAY,UAAQ,EAC/B;AACI,gBAAA,IAAI,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC;AACvB,gBAAA,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAChB,gBAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;aACpB;;gBAEG,OAAOE,cAAM,CAAC,KAAK,CAAC;SAC3B;aAED;AACI,YAAA,IAAK,QAOJ,CAAA;AAPD,YAAA,CAAA,UAAK,QAAQ,EAAA;AAET,gBAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,gBAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,gBAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,gBAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,gBAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACZ,aAAC,EAPI,QAAQ,KAAR,QAAQ,GAOZ,EAAA,CAAA,CAAA,CAAA;YAED,IAAI,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAC3C,IAAI,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAC3C,IAAI,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAC3C,IAAI,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAC3C,YAAA,IAAI,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;AAEnC,YAAA,IAAI,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;AAE7B,YAAA,IAAI,SAAS,GAAG,MAAM,EACtB;AACI,gBAAA,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;gBACzB,MAAM,GAAG,SAAS,CAAC;aACtB;AAED,YAAA,IAAI,SAAS,GAAG,MAAM,EACtB;AACI,gBAAA,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;gBACzB,MAAM,GAAG,SAAS,CAAC;aACtB;AAED,YAAA,IAAI,SAAS,GAAG,MAAM,EACtB;AACI,gBAAA,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;gBACzB,MAAM,GAAG,SAAS,CAAC;aACtB;AAED,YAAA,IAAI,SAAS,GAAG,MAAM,EACtB;AACI,gBAAA,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;gBACzB,MAAM,GAAG,SAAS,CAAC;aACtB;AAED,YAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI;gBAC1B,OAAOA,cAAM,CAAC,KAAK,CAAC;AAExB,YAAA,IAAI,EAAE,YAAYgC,YAAI,EACtB;AACI,gBAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAC9B;AACI,oBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;iBACjD;AACI,qBAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EACnC;AACI,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;iBAC9C;AACI,qBAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EACnC;AACI,oBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;iBACjD;AACI,qBAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EACnC;AACI,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;iBAC9C;aACJ;AACI,iBAAA,IAAI,EAAE,YAAYC,WAAG,EAC1B;AACI,gBAAA,IAAI,CAAC,GAAG,IAAInC,aAAO,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAC5D,gBAAA,IAAI,CAAC,GAAG,IAAIA,aAAO,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;gBAC5D,IAAI,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAErB,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACnD,gBAAA,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC;AACvB,gBAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAC9B;AACI,oBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;iBACpD;AACI,qBAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EACnC;oBACI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;AACpC,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;iBAC9C;AACI,qBAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EACnC;AACI,oBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;iBACnD;AACI,qBAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EACnC;oBACI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC;AACrC,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;iBAC9C;aACJ;AACI,iBAAA,IAAI,EAAE,YAAY,UAAQ,EAC/B;gBACI,IAAI,EAAE,CAAC,SAAS;oBAAE,OAAOE,cAAM,CAAC,KAAK,CAAC;gBAEtC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;AAEjC,gBAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAC9B;oBACI,EAAE,CAAC,OAAO,EAAE,CAAC;oBACb,IAAI,QAAQ,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3C,oBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACnB,oBAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;oBACpB,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC/B,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;iBACrC;AACI,qBAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EACnC;oBACI,GAAG,CAAC,GAAG,EAAE,CAAC;oBACV,IAAI,CAAC,GAAG,EAAE,CAAC;oBAEX,IAAI,QAAQ,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC3C,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAC/B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;iBACrC;AACI,qBAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EACnC;oBACI,IAAI,QAAQ,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3C,oBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACnB,oBAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;oBACpB,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC/B,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;iBACrC;AACI,qBAAA,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EACnC;oBACI,GAAG,CAAC,GAAG,EAAE,CAAC;oBACV,IAAI,CAAC,GAAG,EAAE,CAAC;oBAEX,EAAE,CAAC,OAAO,EAAE,CAAC;oBACb,IAAI,QAAQ,GAAG,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC3C,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAC/B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;iBACrC;AAED,gBAAA,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1B,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;oBACI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBACrD;aACJ;;gBAEG,OAAOA,cAAM,CAAC,KAAK,CAAC;SAC3B;;QAGD,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAOA,cAAM,CAAC,IAAI,CAAC;KACtB;AAED;;;;AAIG;AACH,IAAA,OAAO,OAAO,CAAC,MAAe,EAAE,SAAS,GAAG,IAAI,EAAA;AAE5C,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;AAE3C,QAAA,IAAI,EAAE,GAAG,IAAI,UAAQ,CAAC;AACtB,QAAA,EAAE,CAAC,GAAG,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAEzC,QAAA,KAAK,IAAI,EAAE,IAAI,MAAM,EACrB;AACI,YAAa,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE;;;SAGxC;AAED,QAAA,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC;AACpB,QAAA,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAChB;YACI,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACzB,YAAA,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC;gBAC/B,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACxB;AAED,QAAA,OAAO,EAAE,CAAC;KACb;;IAGD,OAAO,WAAW,CAAC,MAAe,EAAE,SAAS,GAAG,IAAI,EAAE,SAAS,GAAG,IAAI,EAAA;AAElE,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;AAE3C,QAAA,IAAI,EAAE,GAAG,IAAI,UAAQ,CAAC;AACtB,QAAA,IAAI,SAAS;AACT,YAAA,EAAE,CAAC,GAAG,GAAG,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAE7C,QAAA,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;AACvB,QAAA,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;QAEvB,IAAI,QAAQ,GAAoB,EAAE,CAAC;AACnC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EACtC;AACI,YAAA,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACnB,IAAI,GAAG,GAAG,CAAC,CAAC;AACZ,YAAA,IAAI,EAAE,YAAYiC,WAAG,EACrB;gBACI,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7D,gBAAA,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC;aACtB;YAED,QAAQ,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBACjD,GAAG;AACN,aAAA,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,EAC3B;gBACI,QAAQ,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAC/C,oBAAA,GAAG,EAAE,CAAC;AACT,iBAAA,CAAC,CAAC;aACN;SACJ;AAED,QAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EACvB;YACI,IAAI,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;AAChC,YAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC;gBACtC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAC/B;AACD,QAAA,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACvB,QAAA,OAAO,EAAE,CAAC;KACb;AAEQ,IAAA,SAAS,CAAC,EAAW,EAAE,IAAI,GAAG,IAAI,EAAA;AAEvC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,EACtC;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC;AACrB,gBAAA,OAAO,IAAI,CAAC;SACnB;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;;AAGD,IAAA,UAAU,CAAC,CAAU,EAAE,IAAI,GAAG,IAAI,EAAA;AAE9B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,EACtC;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC;AACrB,gBAAA,OAAO,IAAI,CAAC;SACnB;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAED,IAAA,SAAS,CAAC,EAAW,EAAA;QAEjB,OAAO,IAAI,CAAC,OAAO,IAAI,iBAAiB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;KACtD;IACD,iBAAiB,CAAC,EAAW,EAAE,MAAe,EAAA;QAE1C,OAAO,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;KAClF;IACD,kBAAkB,CAAC,EAAW,EAAE,OAAmB,EAAA;;AAG/C,QAAA,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC;AAAE,YAAA,OAAO,SAAS,CAAC;;QAExC,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC;;QAGhD,IAAI,GAAG,GAAG,SAAS,CAAC;;QAEpB,IAAI,OAAO,GAAG,QAAQ,CAAC;AAEvB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,EACtC;YACI,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;;AAGjC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,KAAK,IAAI,CAAC,EAC/C;gBACI,IAAI,QAAQ,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBAC9C,IAAI,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,EACrC;oBACI,GAAG,GAAG,QAAQ,CAAC;AACf,oBAAA,OAAO,GAAG,GAAG,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;iBACvC;AACD,gBAAA,IAAI,OAAO,KAAK,UAAU,CAAC,KAAK;oBAC5B,SAAS;aAChB;YAED,IAAI,UAAmB,CAAC;;YAGxB,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,IAAI,CAAC,EAChE;gBACI,IAAI,OAAO,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAC7C,gBAAA,IAAI,EAAE,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC;oBAChC,UAAU,GAAG,OAAO,CAAC;;AAErB,oBAAA,UAAU,GAAG,EAAE,CAAC,QAAQ,CAAC;aAChC;iBAED;gBACI,UAAU,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;aAChD;YAED,IAAI,OAAO,GAAG,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAC/C,YAAA,IAAI,OAAO,GAAG,OAAO,EACrB;gBACI,GAAG,GAAG,UAAU,CAAC;gBACjB,OAAO,GAAG,OAAO,CAAC;aACrB;SACJ;AAED,QAAA,OAAO,GAAG,CAAC;KACd;;AAGD,IAAA,eAAe,CAAC,UAAkB,EAAA;AAE9B,QAAA,IAAIzB,QAAM,CAAC,UAAU,EAAE,CAAC,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;QACrC,IAAI,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAC1D,QAAA,IAAI,MAAM,GAAG,cAAc,CAAC,EAAE,EAAE,CAAC;QACjC,KAAK,IAAI,EAAE,IAAI,MAAM;AACjB,YAAA,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AACpC,QAAA,OAAO,MAAM,CAAC;KACjB;AACD,IAAA,kBAAkB,CAAC,UAAkB,EAAE,YAAY,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,GAAG,EAAE,QAA6B,GAAA,gBAAgB,CAAC,KAAK,EAAA;AAE9H,QAAA,IAAIA,QAAM,CAAC,UAAU,EAAE,CAAC,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;AACrC,QAAA,IAAI,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;AACxF,QAAA,OAAO,cAAc,CAAC,EAAE,EAAE,CAAC;KAC9B;AACD;;AAEG;IACH,OAAO,GAAA;QAEH,IAAI,SAAS,GAAmB,EAAE,CAAC;AACnC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,EACtC;YACI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3C;AACD,QAAA,OAAO,SAAS,CAAC;KACpB;AAED;;;;;;;;AAQG;AACH,IAAA,eAAe,CAAC,KAAa,EAAA;QAEzB,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAC7C,YAAA,OAAO,SAAS,CAAC;QAErB,IAAI,KAAK,GAAG,CAAC;AACT,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAC9B,aAAA,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ;YAC3B,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;;YAC9C,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;KACvD;AAED;;;;;;AAMG;AACH,IAAA,oBAAoB,CAAC,KAAa,EAAA;AAE9B,QAAA,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,KAAK,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;aAClD,IAAI,KAAK,GAAG,CAAC;AAAE,YAAA,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAE/C,QAAA,OAAO,KAAK,CAAC;KAChB;AAED;;;AAGG;AACH,IAAA,eAAe,CAAC,CAAS,EAAA;AAErB,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM;AAAE,YAAA,OAAO,SAAS,CAAC;AAEjD,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;AAAE,YAAA,OAAO,SAAS,CAAC;AAE5C,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;AAAE,YAAA,OAAO,SAAS,CAAC;QAE3E,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC3B,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAACG,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAEzD,QAAA,IAAI,KAAiB,CAAC;QACtB,IAAIH,QAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,gBAAgB,CAAC;YACnC,KAAK,GAAG,IAAIwB,YAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;YAElF,KAAK,GAAG,IAAIC,WAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAEtF,QAAA,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;AAC/B,QAAA,OAAO,KAAK,CAAC;KAChB;AAEQ,IAAA,cAAc,CAAC,KAAY,EAAE,OAAwB,EAAE,SAAS,GAAG,IAAI,EAAA;QAE5E,OAAO,yBAAyB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;KACrE;;IAGD,aAAa,GAAA;AAET,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AACzB,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;QAEhC,IAAI,SAAS,GAAa,EAAE,CAAC;AAC7B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;AACI,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACf,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACvC;AACI,gBAAA,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,gBAAA,IAAI,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC,EAAE,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;AAE1D,gBAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EACjB;AACI,oBAAA,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,oBAAA,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC7C;aACJ;SACJ;AACD,QAAA,OAAO,SAAS,CAAC;KACpB;IACD,eAAe,GAAA;QAEX,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAACzB,QAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACjE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EACvC;AACI,YAAA,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,YAAA,IAAI,QAAQ,GAAG,EAAE,YAAYwB,YAAI,CAAC;AAClC,YAAA,IAAI,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAExD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACvC;AACI,gBAAA,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,gBAAA,IAAI,QAAQ,GAAG,EAAE,YAAYA,YAAI,CAAC;gBAClC,IAAI,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACzC,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EACf;AACI,oBAAA,IAAI,QAAQ,KAAK,QAAQ,EACzB;wBACI,IAAI,QAAQ,EACZ;4BACI,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC;AACxB,gCAAA,OAAO,IAAI,CAAC;4BAChB,SAAS;yBACZ;6BAED;AACI,4BAAA,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,OAAO,CAAO,EAAG,CAAC,MAAM,EAAQ,EAAG,CAAC,MAAM,CAAC;AACvE,gCAAA,OAAO,IAAI,CAAC;yBACnB;qBACJ;iBACJ;gBAED,IAAI,MAAM,GAAG,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACtC,gBAAA,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;AAE9B,gBAAA,IAAI,SAAS,GAAG,CAAC,EACjB;oBACI,IAAI,SAAS,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,EAChE;wBACI,SAAS,GAAG,CAAC,CAAC;wBACd,MAAM,CAAC,GAAG,EAAE,CAAC;qBAChB;AAED,oBAAA,IAAI,SAAS,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EACtD;AACI,wBAAA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAIxB,QAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,IAAIA,QAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;4BAC/E,SAAS;qBAChB;oBAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,SAAS,KAAK,CAAC;wBAC9B,SAAS;AACb,oBAAA,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,KAAK,CAAC;wBAClE,SAAS;AACb,oBAAA,OAAO,IAAI,CAAC;iBACf;aACJ;SAEJ;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAED,IAAA,IAAI,WAAW,GAAA;AAEX,QAAA,IAAI,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;AACxB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,EACtC;YACI,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACjC,YAAA,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;SAC7B;AACD,QAAA,OAAO,GAAG,CAAC;KACd;IAED,UAAU,CAAC,GAAc,EAAE,IAAc,EAAA;QAErC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;AACI,YAAA,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAElB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;SACpC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,QAAA,OAAO,IAAI,CAAC;KACf;AAED;;AAEG;AACH,IAAA,IAAI,OAAO,GAAA;QAEP,IAAI,GAAG,GAAc,EAAE,CAAC;QACxB,IAAI,IAAI,GAAa,EAAE,CAAC;AAExB,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC;AAC3B,YAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAEzB,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAC/B;YACI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;AAC1B,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACvB;;QAED,IAAI,IAAI,CAAC,WAAW;YAChB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAC9D;YACI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SACtB;AAED,QAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;KACxB;AACD,IAAA,IAAI,OAAO,GAAA;QAEP,IAAI,CAAC,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,KAAK,CAAC;QAEhC,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACnC,QAAA,IAAI,EAAS,CAAC;AACd,QAAA,IAAI,EAAS,CAAC;AAEd,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,EACtC;AACI,YAAA,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAC7B,YAAA,EAAE,GAAG,IAAI,CAAC,eAAe,CAACG,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE1D,YAAA,IAAI,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC;AACrB,YAAA,IAAI,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC;AACrB,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC;AAExC,YAAA,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC;AACpB,YAAA,IAAI,EAAW,CAAC;AAChB,YAAA,IAAI,EAAW,CAAC;AAEhB,YAAA,IAAI,EAAE,YAAYsB,WAAG,EACrB;AACI,gBAAA,IAAI,GAAG,GAAG,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,GAAG,KAAK,MAAM;AACd,oBAAA,OAAO,KAAK,CAAC;gBACjB,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC;aAC7C;;AAEG,gBAAA,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC;AAEvB,YAAA,IAAI,EAAE,YAAYA,WAAG,EACrB;AACI,gBAAA,IAAI,GAAG,GAAG,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClC,IAAI,GAAG,KAAK,MAAM;AACd,oBAAA,OAAO,KAAK,CAAC;AACjB,gBAAA,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;aACtC;;AAEG,gBAAA,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC;YAErB,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7B,IAAI,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrB,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAExC,YAAA,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,MAAM;AAC3B,gBAAA,OAAO,KAAK,CAAC;SACpB;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,IAAI,KAAK,GAAA;QAEL,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;AACjC,QAAA,OAAO,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;KACxC;AACD,IAAA,IAAI,GAAG,GAAA;AAEH,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;QACzB,IAAI,GAAG,GAAG,CAAA,CAAA,EAAI,EAAE,CAAC,CAAC,CAAA,CAAA,EAAI,EAAE,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC;AAC9B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,EACvC;YACI,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACjC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAChC,IAAI,GAAG,KAAK,CAAC;gBACT,GAAG,IAAI,CAAI,CAAA,EAAA,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC;iBAE7B;gBACI,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,CAAC,CAAQ,CAAC;gBAC7C,GAAG,IAAI,KAAK,GAAG,CAAC,MAAM,CAAI,CAAA,EAAA,GAAG,CAAC,MAAM,CAAA,GAAA,EAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA,CAAE,CAAC;aACnH;SACJ;AACD,QAAA,OAAO,GAAG,CAAC;KACd;AAED,IAAA,iBAAiB,CAAC,IAAmB,EAAA;AAEjC,QAAA,IAAI,IAAI,KAAK,aAAa,CAAC,IAAI,EAC/B;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,SAAS;AAAE,gBAAA,KAAK,EAAE,CAAC;AAC5B,YAAA,OAAO,KAAK,CAAC;SAChB;aAED;AACI,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAChC;KACJ;AAED,IAAA,mBAAmB,CACf,QAAwB,EACxB,SAAkB,EAClB,SAAkB,EAClB,SAAmB,EAAA;QAGnB,QAAQ,QAAQ;YAEZ,KAAK,cAAc,CAAC,GAAG;AACnB,gBAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACnC,KAAK,cAAc,CAAC,GAAG;gBACnB,IAAI,MAAM,GAAG,EAAE,CAAC;AAChB,gBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;AAC5B,gBAAA,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAClC;oBACI,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAChC,oBAAA,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACvB;AACD,gBAAA,OAAO,MAAM,CAAC;YAClB,KAAK,cAAc,CAAC,GAAG;gBACnB;oBACI,IAAI,GAAG,GAAc,EAAE,CAAC;oBACxB,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,EAC7B;AACI,wBAAA,IAAI,IAAI,GAAG,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAC7E,wBAAA,IAAI,IAAI;AACJ,4BAAA,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;qBACzB;AACD,oBAAA,OAAO,GAAG,CAAC;iBACd;YACL,KAAK,cAAc,CAAC,GAAG;gBACnB;oBACI,IAAI,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACjD,oBAAA,IAAI,EAAE;wBACF,OAAO,CAAC,EAAE,CAAC,CAAC;oBAChB,MAAM;iBACT;YACL,KAAK,cAAc,CAAC,GAAG;gBACnB,IAAI,MAAM,GAAc,EAAE,CAAC;AAC3B,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAC9C;oBACI,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC7B,IAAI,CAACzB,QAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EACxB;wBACI,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAQ,CAAC;wBACxC,IAAI,EAAE;AACF,4BAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;qBAC9B;iBACJ;AACD,gBAAA,OAAO,MAAM,CAAC;YAClB,KAAK,cAAc,CAAC,GAAG;gBACnB,IAAI,SAAS,EACb;oBACI,IAAI,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAClD,oBAAA,IAAI,CAAC,EAAE;AAAE,wBAAA,OAAO,EAAE,CAAC;oBACnB,IAAI,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;oBACtC,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;oBACtC,IAAI,EAAE,EACN;wBACI,IAAI,SAAS,GAAG,EAAE,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACtD,wBAAA,IAAI,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;4BACtC,OAAO,CAAC,SAAS,CAAC,CAAC;qBAC1B;iBACJ;YACL,KAAK,cAAc,CAAC,GAAG;gBACnB,IAAI,SAAS,EACb;oBACI,IAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACvD,oBAAA,IAAI,CAAC,OAAO;AAAE,wBAAA,OAAO,EAAE,CAAC;oBACxB,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;oBACxC,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;oBACnC,IAAI,EAAE,YAAYyB,WAAG;wBACjB,OAAO,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAClE,oBAAA,OAAO,EAAE,CAAC;iBACb;SAGR;AACD,QAAA,OAAO,EAAE,CAAC;KACb;IACD,aAAa,GAAA;QAET,IAAI,MAAM,GAAc,EAAE,CAAC;AAC3B,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;AACzB,YAAA,OAAO,MAAM,CAAC;AAElB,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5B,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,GAAG,CAAC;AACnC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAC3C;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAChC,YAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAClB;AACD,QAAA,OAAO,MAAM,CAAC;KACjB;IACD,cAAc,CAAC,SAAmB,EAAE,OAAgB,EAAA;QAEhD,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAIlC,aAAO,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEnG,IAAI,aAAa,GAAG,SAAS,CAAC;AAC9B,QAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EACxB;AACI,YAAA,IAAI,aAAa,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;AACvD,YAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;gBACxB,aAAa,GAAG,aAAa,CAAC;SACrC;AAED,QAAA,KAAK,IAAI,KAAK,IAAI,aAAa,EAC/B;AACI,YAAA,IAAI,KAAK,GAAG,CAAC,KAAK,CAAC,EACnB;AACI,gBAAA,IAAI,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC;AAExB,gBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AAEpC,gBAAA,IAAI,UAAU,GAAG,OAAO,GAAG,CAAC,CAAC;gBAC7B,IAAI,IAAI,CAAC,WAAW;AAChB,oBAAA,UAAU,GAAGY,UAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBAE/C,IAAI,UAAU,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAClD;oBACI,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAQ,CAAC;oBAClD,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBACjC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;iBAC5C;AACD,gBAAA,IAAI,CAAC,OAAO,KAAK,OAAO,GAAG,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EACzD;oBACI,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAQ,CAAC;oBAC/C,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBACjC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;iBACzC;AACD,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aAC5C;iBAED;gBACI,IAAI,OAAO,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9B,gBAAA,IAAI,SAAS,IAAIA,UAAQ,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;gBACxD,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAChC,gBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,EACf;AACI,oBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACzC,oBAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;iBAC9C;qBAED;oBACI,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAQ,CAAC;oBAC/C,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;oBACjC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;iBACzC;aACJ;SACJ;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;IAED,gBAAgB,GAAA;QAEZ,IAAI,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,GAAG,GAAc,EAAE,CAAC;AACxB,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,EAC/B;YACI,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzC,YAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACf;AACD,QAAA,OAAO,GAAG,CAAC;KACd;AAED;;;;;;AAMG;IACH,iBAAiB,CAAC,SAAwB,EAAE,GAAY,EAAA;QAEpD,IAAI,CAAC,oBAAoB,EAAE,CAAC;;QAG5B,IAAI,QAAQ,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAIZ,aAAO,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAEpF,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AAEpC,QAAA,KAAK,IAAI,KAAK,IAAI,SAAS,EAC3B;YACI,IAAI,KAAK,IAAI,OAAO;AAChB,gBAAA,MAAM,iDAAiD,CAAC;AAE5D,YAAA,IAAI,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;AAC3B,YAAA,IAAI,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;AAC1B,YAAA,IAAI,IAAI,CAAC,WAAW,EACpB;AACI,gBAAA,UAAU,GAAGY,UAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC3C,gBAAA,SAAS,GAAGA,UAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;aAC5C;AAED;;;;;;AAMG;AACH,YAAA,MAAM,SAAS,GAAG,CAAC,SAAiB,EAAE,QAAgB,KAAI;;gBAGtD,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACjC,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC;oBAAE,OAAO;;gBAG3C,IAAI,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EACvC;oBACI,IAAI,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;oBAC9C,IAAI,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;;oBAGjD,IAAI,kBAAkB,GAAG,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC;;AAGlE,oBAAA,IAAI,SAAS,GAAG,kBAAkB,GAAG,CAAC,CAAC,GAAG,CAAC;AAE3C,oBAAA,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAErB,IAAI,kBAAkB,GAAG,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC;AAElE,oBAAA,CAAC,CAAC,GAAG,GAAG,SAAS,GAAG,kBAAkB,CAAC;iBAC1C;AACL,aAAC,CAAC;AAEF,YAAA,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAClC,YAAA,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;;AAG5B,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;SACrD;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AACS,IAAA,SAAS,CAAC,IAAc,EAAA;AAE9B,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1B,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACxB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;AACI,YAAA,IAAI,CAAC,GAAG,IAAIC,aAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7C,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAEtB,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;SAC5C;QACD,IAAI,GAAG,GAAG,CAAC;AACP,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;;;;KAKtC;;AAED,IAAA,SAAS,CAAC,IAAc,EAAA;AAEpB,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACd,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAElC,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAC5B;YACI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SACrB;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KAChC;EACJ;AAvwDYuB,gBAAQ,GAAA,UAAA,GAAA,UAAA,CAAA;IADpB,OAAO;AACK,CAAA,EAAAA,gBAAQ,CAuwDpB,CAAA;AAEY,MAAA,YAAY,GAAG,IAAIA,gBAAQ;;AC5xDxC;;;;;AAKG;AACH,IAAY,eAkBX,CAAA;AAlBD,CAAA,UAAY,eAAe,EAAA;AAEvB;;AAEG;AACH,IAAA,eAAA,CAAA,eAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc,CAAA;AACd;;AAEG;AACH,IAAA,eAAA,CAAA,eAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc,CAAA;AACd;;AAEG;AACH,IAAA,eAAA,CAAA,eAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa,CAAA;AACb;;AAEG;AACH,IAAA,eAAA,CAAA,eAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc,CAAA;AAClB,CAAC,EAlBW,eAAe,KAAf,eAAe,GAkB1B,EAAA,CAAA,CAAA,CAAA;AASD;AACM,SAAU,sBAAsB,CAAC,OAAwB,EAAA;AAE3D,IAAA,IAAI,OAAO,KAAK,eAAe,CAAC,UAAU;AACtC,QAAA,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC;AACnC,SAAA,IAAI,OAAO,KAAK,eAAe,CAAC,SAAS;AAC1C,QAAA,OAAO,GAAG,eAAe,CAAC,UAAU,CAAC;AACzC,IAAA,OAAO,OAAO,CAAC;AACnB,CAAC;AACD;;;;;;;;;AASG;AACH,SAAS,iBAAiB,CAAC,MAAyB,EAAE,EAAS,EAAE,EAAS,EAAE,OAAwB,EAAE,SAAS,GAAG,IAAI,EAAA;AAElH,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAG;AAErB,QAAA,IAAI,EAAE,OAAO,GAAG,eAAe,CAAC,UAAU,CAAC;AACvC,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC;AACpD,gBAAA,OAAO,KAAK,CAAC;AAErB,QAAA,IAAI,EAAE,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC;AACtC,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC;AACnD,gBAAA,OAAO,KAAK,CAAC;AACrB,QAAA,OAAO,IAAI,CAAC;AAChB,KAAC,CAAC,CAAC;AACP,CAAC;AACK,SAAU,wBAAwB,CAAC,GAAiB,EAAE,GAAiB,EAAE,SAAS,GAAG,IAAI,EAAA;AAE3F,IAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,EAAE,CAAC;AAErC,IAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC;AAC1B,IAAA,IAAI,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC;IAE3B,IAAI,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AAChD,IAAA,IAAI,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC;AACzB,IAAA,IAAI,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC;IAEzB,IAAI,GAAG,GAAsB,EAAE,CAAC;IAChC,IAAI,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAEvC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,IAAI;AACtC,WAAA,IAAI,IAAI,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;AACpC,QAAA,OAAO,GAAG,CAAC;AACf,IAAA,IAAI3B,QAAM,CAAC,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC;AAAE,QAAA,OAAO,GAAG,CAAC;AAE3C,IAAA,IAAI,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;AACzB,IAAA,IAAI,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;AAC9B,IAAA,IAAI,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;AAE9B,IAAA,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AAC9C,IAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7C,IAAA,IAAI,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC;AACvB,IAAA,IAAI,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC;IAEvB,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAC/B,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAE/B,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,IAAI,OAAO,GAAG,EAAE,CAAC,CAAC;IACtC,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,IAAI,OAAO,GAAG,EAAE,CAAC,CAAC;IAEtC,EAAE,IAAI,OAAO,CAAC;IACd,EAAE,IAAI,OAAO,CAAC;AAEd,IAAA,IAAI,EAAE,GAAG,IAAIV,aAAO,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AAC3C,IAAA,IAAI,EAAE,GAAG,IAAIA,aAAO,CAAC,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AAC3C,IAAA,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACvB,IAAA,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAEvB,GAAG,CAAC,IAAI,CAAC;AACL,QAAA,EAAE,EAAE,EAAE;AACN,QAAA,SAAS,EAAE,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;AAClC,QAAA,QAAQ,EAAE,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;AACpC,KAAA,CAAC,CAAC;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC;QAC3B,GAAG,CAAC,IAAI,CAAC;AACL,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,SAAS,EAAE,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;AAClC,YAAA,QAAQ,EAAE,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;AACpC,SAAA,CAAC,CAAC;AAEP,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AACD;;;;;;;;AAQG;AACG,SAAU,qBAAqB,CAAC,MAAc,EAAE,GAAQ,EAAE,OAAwB,EAAE,SAAS,GAAG,IAAI,EAAA;IAEtG,IAAI,GAAG,GAAG,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAChD,IAAA,OAAO,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,eAAe,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;AAChG,CAAC;AAED;;;;;;;;AAQG;AACG,SAAU,kBAAkB,CAAC,IAAS,EAAE,IAAS,EAAE,OAAwB,EAAE,SAAS,GAAG,IAAI,EAAA;IAE/F,IAAI,GAAG,GAAG,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC1D,IAAA,OAAO,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAClE,CAAC;AAEK,SAAU,uBAAuB,CAAC,CAAO,EAAE,EAAW,EAAE,OAAwB,EAAE,SAAS,GAAG,IAAI,EAAA;IAEpG,IAAI,GAAG,GAAG,4BAA4B,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC9C,IAAA,OAAO,iBAAiB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;;AAOG;AACH,SAAS,2BAA2B,CAAC,IAAU,EAAE,MAAoB,EAAE,SAAS,GAAG,IAAI,EAAA;AAEnF,IAAA,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;IAC9B,IAAI,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC/C,IAAA,IAAI,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC;AACpC,IAAA,IAAIU,QAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAAE,QAAA,OAAO,EAAE,CAAC;AACjC,IAAA,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAEnC,IAAA,IAAI,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC9C,IAAA,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IAC7C,IAAI,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACjC,IAAA,IAAI,KAAK,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,IAAIA,QAAM,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,EAC/B;AACI,QAAA,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAExD,QAAA,OAAO,CAAC;gBACJ,EAAE;AACF,gBAAA,SAAS,EAAE,CAAC,EAAE,GAAG,MAAM;AACvB,gBAAA,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;AACvC,aAAA,CAAC,CAAC;KACN;AACI,SAAA,IAAI,KAAK,GAAG,CAAC,EAClB;QACI,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;AAC/E,QAAA,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAE/D,OAAO;AACH,YAAA;AACI,gBAAA,EAAE,EAAE,EAAE;gBACN,SAAS,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,MAAM;AAChC,gBAAA,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;aACvC,EAAE;AACC,gBAAA,EAAE,EAAE,EAAE;gBACN,SAAS,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,MAAM;AAChC,gBAAA,QAAQ,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;AACvC,aAAA;SACJ,CAAC;KACL;AACD,IAAA,OAAO,EAAE,CAAC;AACd,CAAC;AAED;AACM,SAAU,sBAAsB,CAAC,IAAU,EAAE,MAAc,EAAE,OAAwB,EAAE,SAAS,GAAG,IAAI,EAAA;IAEzG,IAAI,KAAK,GAAG,2BAA2B,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AACjE,IAAA,OAAO,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;AACvF,CAAC;AACD;AACM,SAAU,mBAAmB,CAAC,IAAU,EAAE,GAAQ,EAAE,OAAwB,EAAE,SAAS,GAAG,IAAI,EAAA;IAEhG,IAAI,KAAK,GAAG,2BAA2B,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;AAC9D,IAAA,OAAO,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AACnE,CAAC;AA8BK,SAAU,oBAAoB,CAAC,EAAW,EAAE,EAAW,EAAE,EAAW,EAAE,EAAW,EAAA;;;;IAOnF,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACtB,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACtB,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAEtB,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACtB,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACtB,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAEtB,IAAA,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;AAEpC,IAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IAEhD,IAAIA,QAAM,CAAC,GAAG,GAAG,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC;KACrC;AACI,QAAA,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,CAAC;QACrC,IAAIA,QAAM,CAAC,IAAI,GAAG,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC;YAClC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5B,QAAA,OAAO,EAAE,CAAC;KACb;AAED,IAAA,IAAI,EAAE,GAAG,IAAIV,aAAO,CAAC;AACrB,IAAA,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC;AAC9C,IAAA,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5B,IAAA,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IAE5B,OAAO,CAAC,EAAE,CAAC,CAAC;AAChB,CAAC;AAQD;;;;;;;;;;;;AAYG;AACH,SAAS,qBAAqB,CAAC,EAAW,EAAE,EAAW,EAAE,EAAW,EAAE,EAAW,EAAE,OAAO,GAAG,IAAI,EAAA;IAE7F,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC7B,IAAA,IAAI,GAAG,CAAC,QAAQ,EAAE,GAAG,OAAO;QACxB,OAAO;IACX,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC7B,IAAA,IAAI,GAAG,CAAC,QAAQ,EAAE,GAAG,OAAO;QACxB,OAAO;IAEX,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAE7B,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC1D,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC1D,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC1D,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC1D,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAE1D,IAAI,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAC1C,IAAA,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO;QACzB,OAAO;IACX,IAAI,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAE1C,IAAA,IAAI,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC;AACxB,IAAA,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC;AAE1C,IAAA,IAAI,mBAAmB,GAAG,IAAIA,aAAO,EAAE,CAAC;AACxC,IAAA,mBAAmB,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AAC3C,IAAA,mBAAmB,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AAC3C,IAAA,mBAAmB,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AAC3C,IAAA,IAAI,mBAAmB,GAAG,IAAIA,aAAO,EAAE,CAAC;AACxC,IAAA,mBAAmB,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AAC3C,IAAA,mBAAmB,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AAC3C,IAAA,mBAAmB,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;AAE3C,IAAA,OAAO,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;AACtD,CAAC;AAED;AACM,SAAU,oBAAoB,CAAC,EAAQ,EAAE,EAAQ,EAAE,OAAwB,EAAE,IAAI,GAAG,IAAI,EAAA;IAE1F,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;AAEpF,IAAA,IAAI,IAAe,CAAC;IACpB,IAAIU,QAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAIA,QAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAIA,QAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAIA,QAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EACxG;QACI,IAAI,GAAG,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;AACxC,QAAA,0BAA0B,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;KACvE;SAED;QACI,IAAI,GAAG,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,IAAI;AAAE,YAAA,OAAO,EAAE,CAAC;AACrB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YACjB,IAAI,CAAC,GAAG,EAAE,CAAC;KAClB;IAED,IAAI,IAAI,GAAsB,EAAE,CAAC;AACjC,IAAA,KAAK,IAAI,EAAE,IAAI,IAAI,EACnB;AACI,QAAA,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACtE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;AACtC,QAAA,IAAI,EAAE,OAAO,GAAG,eAAe,CAAC,UAAU,CAAC;AACvC,YAAA,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AACjF,gBAAA,OAAO,EAAE,CAAC;AAClB,QAAA,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QACtE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC;AAAE,YAAA,OAAO,EAAE,CAAC;AACtC,QAAA,IAAI,EAAE,OAAO,GAAG,eAAe,CAAC,SAAS,CAAC;AACtC,YAAA,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AACjF,gBAAA,OAAO,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;KAC1D;AACD,IAAA,OAAO,IAAI,CAAC;AAChB,CAAC;AAEK,SAAU,yBAAyB,CAAC,EAAY,EAAE,EAAS,EAAE,OAAwB,EAAE,SAAS,GAAG,IAAI,EAAA;AAEzG,IAAA,IAAI,GAAG,GAAY,EAAE,CAAC,OAAO,EAAE,CAAC;AAChC,IAAA,IAAI,IAAa,CAAC;IAClB,IAAI,EAAE,YAAY2B,gBAAQ;AACtB,QAAA,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;;AAEpB,QAAA,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,MAAM,GAAsB,EAAE,CAAC;AAEnC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;AACI,QAAA,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACjB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EACpC;AACI,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,IAAI,GAAG,GAAG,OAAO,CAAC;AAElB,YAAA,IAAI,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC;YACtB,IAAI,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AAEjC,YAAA,IAAI,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC;YACvB,IAAI,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;;YAGnC,IAAI,EAAE,CAAC,SAAS,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC;AACnC,gBAAA,GAAG,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,UAAU,CAAC;AAC5C,YAAA,IAAI,CAAC,EAAE,YAAYA,gBAAQ,IAAI,EAAE,CAAC,SAAS,KAAK,EAAE,QAAQ,IAAI,MAAM,CAAC;AACjE,gBAAA,GAAG,GAAG,GAAG,GAAG,CAAC,eAAe,CAAC,SAAS,CAAC;AAE3C,YAAA,IAAI,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;AAG9G,YAAA,IAAI,eAAe,CAAC,UAAU,GAAG,GAAG,EACpC;;AAEI,gBAAA,IAAI,OAAO,IAAI,KAAK,EACpB,CACC;qBACI,IAAI,OAAO,EAChB;;;;;;AAOI,oBAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;iBACrD;qBACI,IAAI,KAAK,EACd;;;;;;AAOI,oBAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;iBACrD;aACJ;;AAEG,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;AAClC,oBAAA,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/D,YAAA,IAAI,eAAe,CAAC,SAAS,GAAG,GAAG,EACnC;;AAEI,gBAAA,IAAI,QAAQ,IAAI,MAAM,EACtB,CACC;qBACI,IAAI,QAAQ,EACjB;AACI,oBAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;iBACnE;qBACI,IAAI,MAAM,EACf;AACI,oBAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;iBACxD;aACJ;;AAEG,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;AAClC,oBAAA,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE7D,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAG;gBAE1B,OAAO;oBACH,EAAE,EAAE,CAAC,CAAC,EAAE;AACR,oBAAA,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS;AAC1B,oBAAA,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ;iBAC3B,CAAC;aACL,CAAC,CAAC,CAAC;SACP;KACJ;IAED,IAAI,EAAE,GAAG,sBAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAClD,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,0BAA0B,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;AAEjF,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC;AAEe,SAAA,4BAA4B,CAAC,CAAO,EAAE,EAAW,EAAA;IAE7D,IAAI,KAAK,GAAG,IAAIpC,aAAO,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAC1E,IAAI,MAAM,GAAG,IAAIA,aAAO,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAE7C,IAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;AAChB,IAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;IAChB,IAAI,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,EAAES,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAIA,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAC/C;QACI,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC;SACzB;AACI,YAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACxC,YAAA,IAAI,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;gBACf,OAAO;AACH,oBAAA;AACI,wBAAA,EAAE,EAAE,CAAC;AACL,wBAAA,SAAS,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AAC/B,wBAAA,QAAQ,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;AAClC,qBAAA;iBACJ,CAAC;SACT;;AAED,QAAA,OAAO,EAAE,CAAC;KACb;IAED,IAAI,GAAG,GAAc,EAAE,CAAC;IACxB,IAAIA,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EACtB;AACI,QAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7C,QAAA,IAAIA,QAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAChB;AACI,YAAA,GAAG,GAAG,CAAC,IAAIV,aAAO,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAChC;aACI,IAAI,CAAC,GAAG,CAAC;AACV,YAAA,OAAO,EAAE,CAAC;aAEd;YACI,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvB,YAAA,GAAG,GAAG;AACF,gBAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,EAAE,CAAC;AAClB,gBAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,EAAE,CAAC;aACrB,CAAC;SACL;KACJ;SAED;QACI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1G,QAAA,IAAIU,QAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAChB;AACI,YAAA,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC5D,YAAA,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACpB,GAAG,GAAG,CAAC,IAAIV,aAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;SAC/B;aACI,IAAI,CAAC,GAAG,CAAC;AACV,YAAA,OAAO,EAAE,CAAC;aAEd;AACI,YAAA,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7E,YAAA,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpB,YAAA,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7E,YAAA,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpB,YAAA,GAAG,GAAG;AACF,gBAAA,IAAIA,aAAO,CAAC,EAAE,EAAE,EAAE,CAAC;AACnB,gBAAA,IAAIA,aAAO,CAAC,EAAE,EAAE,EAAE,CAAC;aACtB,CAAC;SACL;KACJ;AAED,IAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAG;QAEf,IAAI,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAChC,OAAO;YACH,EAAE;AACF,YAAA,SAAS,EAAE,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC;AAChC,YAAA,QAAQ,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;SACnC,CAAC;AACN,KAAC,CAAC,CAAC;AACP,CAAC;SACe,8BAA8B,CAAC,EAAW,EAAE,GAAiB,EAAE,IAAqB,EAAA;AAEhG,IAAA,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,EAAE,CAAC;AAEpC,IAAA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AACnC,IAAA,IAAI,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAE5C,IAAI,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;AAEtC,IAAA,IAAI,OAAO;AACP,QAAA,OAAO,EAAE,CAAC;IAEd,IAAI,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAClC;AACI,QAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;AAChB,QAAA,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;AAChB,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;AACnB,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1D,IAAI,GAAG,GAAc,EAAE,CAAC;AACxB,QAAA,IAAIU,QAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAIA,QAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EACrC;AACI,YAAA,IAAIA,QAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AACZ,gBAAA,GAAG,GAAG;AACF,oBAAA,IAAIV,aAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AACjB,oBAAA,IAAIA,aAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;iBACrB,CAAC;;AAEF,gBAAA,GAAG,GAAG;AACF,oBAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AACjB,oBAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBACrB,CAAC;SACT;aACI,IAAI,CAAC,GAAG,CAAC;AACV,YAAA,OAAO,EAAE,CAAC;aAEd;YACI,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,EAAE,GAAG,CAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,EAAE,GAAG,CAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,YAAA,GAAG,GAAG;AACF,gBAAA,IAAIA,aAAO,CAAC,EAAE,EAAE,EAAE,CAAC;AACnB,gBAAA,IAAIA,aAAO,CAAC,EAAE,EAAE,EAAE,CAAC;AACnB,gBAAA,IAAIA,aAAO,CAAC,EAAE,EAAE,EAAE,CAAC;AACnB,gBAAA,IAAIA,aAAO,CAAC,EAAE,EAAE,EAAE,CAAC;aACtB,CAAC;SACL;AACD,QAAA,IAAI,EAAE,GAAG,IAAIC,aAAO,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAG;AAElB,YAAA,IAAI,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACjD,OAAO;gBACH,EAAE;AACF,gBAAA,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC;AACjC,gBAAA,QAAQ,EAAE,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;aACpC,CAAC;AACN,SAAC,CAAC,CAAC;QACH,OAAO,iBAAiB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;KAChD;SAED;QACI,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAG;YAEvB,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAC7B,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,EAAE,GAAG,IAAIoC,gBAAQ,CAAC,QAAQ,CAAC,CAAC;AAChC,QAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAElD,QAAA,IAAI,IAAI,KAAK,eAAe,CAAC,UAAU;AACnC,YAAA,IAAI,GAAG,eAAe,CAAC,SAAS,CAAC;AAChC,aAAA,IAAI,IAAI,KAAK,eAAe,CAAC,SAAS;AACvC,YAAA,IAAI,GAAG,eAAe,CAAC,UAAU,CAAC;QAEtC,IAAI,MAAM,GAAG,yBAAyB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC3D,QAAA,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,QAAA,OAAO,MAAM,CAAC;KACjB;AACL,CAAC;SACe,gBAAgB,CAAC,GAAY,EAAE,GAAY,EAAE,IAAqB,EAAA;AAE9E,IAAA,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,EAAE,CAAC;IAErC,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;WACrC3B,QAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;WAC1BA,QAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;WAC1B,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;AAE/C,IAAA,IAAI,MAAM;AACN,QAAA,OAAO,EAAE,CAAC;AAEd,IAAA,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AACtC,IAAA,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AAEtC,IAAA,IAAI,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpD,IAAI,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,EACzB;AACI,QAAA,OAAO,EAAE,CAAC;KACb;IAED,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC;AAC/C,QAAA,OAAO,EAAE,CAAC;AAEd,IAAA,IAAI,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACnC,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAEnC,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAG;QAEzB,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAC7B,KAAC,CAAC,CAAC;IACH,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAG;QAEzB,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAC7B,KAAC,CAAC,CAAC;AAEH,IAAA,IAAI,GAAG,GAAG,IAAI2B,gBAAQ,CAAC,SAAS,CAAC,CAAC;AAClC,IAAA,IAAI,GAAG,GAAG,IAAIA,gBAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAEvD,IAAI,MAAM,GAAG,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACxC,IAAA,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AAChD,IAAA,OAAO,MAAM,CAAC;AAClB;;;AC5qBA;;;;;;;;AAQG;AAEUF,WAAG,GAAA,KAAA,GAAT,MAAM,GAAI,SAAQ,KAAK,CAAA;AAE1B,IAAA,WAAA,CAAY,MAAkB,GAAA,OAAO,EAAE,MAAA,GAAiB,GAAG,EAAE,UAAA,GAAqB,GAAG,EAAE,QAAmB,GAAA,CAAC,EAAE,SAAS,GAAG,IAAI,EAAA;AAEzH,QAAA,KAAK,EAAE,CAAC;AAUZ;;AAEG;QACK,IAAU,CAAA,UAAA,GAAG,IAAI,CAAC;AAZtB,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;AACtB,QAAA,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC;AACxC,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;KAC/B;AASD,IAAA,IAAI,KAAK,GAAA;AAEL,QAAA,IAAI,EAAE,GAAG,IAAI,MAAM,EAAE,CAAC;QACtB,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AACjF,QAAA,OAAO,EAAE,CAAC;KACb;AAED,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;IACD,IAAI,MAAM,CAAC,CAAU,EAAA;AAEjB,QAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;KACrB;AAED,IAAA,IAAI,MAAM,GAAA;AAEN,QAAA,OAAO,IAAInC,aAAO,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;KAC7D;IACD,IAAI,MAAM,CAAC,CAAU,EAAA;QAEjB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AAED,IAAA,IAAI,IAAI,GAAA;AAEJ,QAAA,OAAO,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;KAC1D;;AAED,IAAA,IAAI,KAAK,GAAA;AAEL,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AACzC,QAAA,OAAO,GAAG,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;KACtE;AACD,IAAA,IAAI,OAAO,GAAA;AAEP,QAAA,OAAO,KAAK,CAAC;KAChB;AAED,IAAA,IAAY,mBAAmB,GAAA;AAE3B,QAAA,IAAI,GAAG,GAAG;AACN,YAAA,KAAK,CAAC,IAAIA,aAAO,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC;AACpD,YAAA,KAAK,CAAC,IAAIA,aAAO,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;SACrD,CAAC;QAEF,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAC1C,YAAA,GAAG,CAAC,IAAI,CAAC,IAAIA,aAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AAE3C,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACpD,YAAA,GAAG,CAAC,IAAI,CAAC,IAAIA,aAAO,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAE3C,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChD,YAAA,GAAG,CAAC,IAAI,CAAC,IAAIA,aAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AAE5C,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACxD,YAAA,GAAG,CAAC,IAAI,CAAC,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5C,QAAA,OAAO,GAAG,CAAC;KACd;AAMD,IAAA,IAAI,WAAW,GAAA;QAEX,KAAG,CAAC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAC5C,QAAA,KAAK,CAAC,iBAAiB,CAAC,KAAG,CAAC,EAAE,EAAE,KAAG,CAAC,EAAE,EAAE,KAAG,CAAC,EAAE,CAAC,CAAC;QAEhD,KAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAG,CAAC,EAAE,EAAE,KAAG,CAAC,EAAE,EAAE,KAAG,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAExI,QAAA,IAAI,GAAG,GAAG;AACN,YAAA,KAAK,CAAC,IAAIA,aAAO,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC;AACpD,YAAA,KAAK,CAAC,IAAIA,aAAO,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC;SACrD,CAAC;AAEF,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AAEzB,QAAA,KAAK,IAAI,CAAC,IAAI,CAAC,IAAIA,aAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAIA,aAAO,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAIA,aAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAClI;AACI,YAAA,CAAC,CAAC,YAAY,CAAC,KAAG,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAC9C,YAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,gBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACnB;QAED,KAAK,IAAI,CAAC,IAAI,GAAG;AACb,YAAA,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEpC,OAAO,IAAI,OAAO,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;KAC3C;AAED;;AAEE;AACF,IAAA,IAAI,gBAAgB,GAAA;QAEhB,OAAO,IAAI,OAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;KAChE;AAED,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;IACD,IAAI,MAAM,CAAC,CAAS,EAAA;QAEhB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AAED,IAAA,IAAI,WAAW,GAAA;QAEX,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IACD,IAAI,WAAW,CAAC,CAAU,EAAA;AAEtB,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,EACzB;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,MAAM,EAAE,CAAC;SACjB;KACJ;AAED,IAAA,IAAI,UAAU,GAAA;QAEV,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;IACD,IAAI,UAAU,CAAC,CAAS,EAAA;;QAGpB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AAED,IAAA,IAAI,QAAQ,GAAA;QAER,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IACD,IAAI,QAAQ,CAAC,CAAS,EAAA;;QAGlB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QACnB,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;;AAGD,IAAA,IAAI,UAAU,GAAA;QAEV,OAAO,KAAK,CAAC,IAAIA,aAAO,EAAE,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACtF;IACD,IAAI,UAAU,CAAC,CAAU,EAAA;AAErB,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;KAClC;AACD,IAAA,IAAI,QAAQ,GAAA;QAER,OAAO,KAAK,CAAC,IAAIA,aAAO,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACpF;IACD,IAAI,QAAQ,CAAC,CAAU,EAAA;AAEnB,QAAA,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;KAChC;AACD,IAAA,IAAI,UAAU,GAAA;AAEV,QAAA,OAAO,CAAC,CAAC;KACZ;AACD,IAAA,IAAI,QAAQ,GAAA;AAER,QAAA,OAAO,CAAC,CAAC;KACZ;AACD,IAAA,IAAI,MAAM,GAAA;AAEN,QAAA,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;KACvC;AAED,IAAA,gBAAgB,CAAC,EAAW,EAAA;QAExB,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;KACzD;;AAED,IAAA,UAAU,CAAC,CAAU,EAAE,IAAI,GAAG,IAAI,EAAA;QAE9B,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KACzC;AAES,IAAA,gBAAgB,CAAC,CAAU,EAAA;QAEjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,iBAAiB,EAAE,CAAC;AAClD,QAAA,OAAO,IAAI,CAAC;KACf;AACS,IAAA,iBAAiB,CAAC,CAAU,EAAA;QAElC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5B,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;AACzB,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;AAEvB,QAAA,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAEjC,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AACnC,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,eAAe,CAAC,KAAa,EAAA;QAEzB,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AACrC,QAAA,OAAO,KAAK,CAAC,IAAIA,aAAO,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC/E;AACD,IAAA,kBAAkB,CAAC,QAAgB,EAAA;AAE/B,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,IAAI,GAAG,KAAK,CAAC;YAAE,OAAO;QACtB,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;KAC/C;AAED,IAAA,cAAc,CAAC,KAAa,EAAA;QAExB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;KACxC;AAED,IAAA,cAAc,CAAC,EAAW,EAAA;QAEtB,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;AACrC,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;KACrC;AAED,IAAA,eAAe,CAAC,EAAW,EAAA;AAEvB,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC;YACjB,IAAI,CAAC,QAAQ,IAAI,CAAC;AAClB,YAAA,CAACU,QAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;AACvD,YAAA,OAAO,GAAG,CAAC;QAEf,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;KACzD;AAED;;;;;;;;AAQG;AACH,IAAA,eAAe,CAAC,EAAU,EAAA;;QAGtB,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AACpC,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;;QAG1B,IAAI,gBAAgB,GAAG,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;AAE3C,QAAA,IAAI,OAAO,GAAG,KAAK,GAAG,gBAAgB;AAClC,YAAA,OAAO,CAAC,CAAC,OAAO,GAAG,KAAK,KAAK,gBAAgB,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC;;YAE5D,OAAO,OAAO,GAAG,KAAK,CAAC;KAC9B;AAED;;;;;AAKG;AACH,IAAA,gBAAgB,CAAC,EAAU,EAAE,OAAO,GAAG,IAAI,EAAA;;QAGvC,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AACpC,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;;QAG1B,IAAI,gBAAgB,GAAG,IAAI,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;QAE3C,IAAI,OAAO;AACP,YAAA,OAAO,CAAC,CAAC,OAAO,GAAG,KAAK,KAAK,gBAAgB,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC;;YAE5D,OAAO,OAAO,GAAG,KAAK,CAAC;KAC9B;AAGD,IAAA,eAAe,CAAC,EAAW,EAAA;AAEvB,QAAA,OAAO,KAAK,CAAC,KAAG,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;KACtE;AAED,IAAA,eAAe,CAAC,KAAa,EAAA;QAEzB,OAAO,QAAQ,CAAC,IAAI,CAAC,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KAC1F;AAED,IAAA,cAAc,CAAC,KAAwB,EAAA;QAEnC,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;;AAExC,QAAA,IAAI,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;;QAEnD,IAAI,IAAI,GAAU,EAAE,CAAC;AACrB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EACvC;AACI,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,EAAS,CAAC;AAC9B,YAAA,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AACjC,YAAA,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACxB,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1B,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAClB;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,eAAe,CAAC,UAAkB,EAAA;QAE9B,IAAI,IAAI,CAAC,UAAU;YAAE,UAAU,IAAI,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,IAAI,CAAC,EACnC;AACI,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,EAAS,CAAC;YAC9B,GAAG,CAAC,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,CAAC;SAChB;AACD,QAAA,OAAO,EAAE,CAAC;KACb;AACD,IAAA,MAAM,CAAC,QAAgB,EAAA;QAEnB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,QAAQ,GAAG,CAAC,EAChB;YACI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;SACrD;AACI,aAAA,IAAI,QAAQ,GAAG,CAAC,EACrB;YACI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;SACnD;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AAED,IAAA,IAAI,CAAC,EAAS,EAAA;AAEV,QAAA,IAAI,EAAE,YAAY,KAAG,EACrB;;AAEI,YAAA,IAAI,EAAE,CAAC,QAAQ,GAAG,IAAI;gBAAE,OAAOR,cAAM,CAAC,KAAK,CAAC;YAE5C,IAAI,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAIQ,QAAM,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,EACvE;gBACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,gBAAA,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC5C,gBAAA,IAAI,EAAE,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU;oBAChC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAExB,gBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC1B,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBACpC,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;gBAEpC,IAAIA,QAAM,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC;iBAChC;oBACI,IAAI,OAAO,GAAG,KAAK;AACf,wBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;oBAEvB,OAAOR,cAAM,CAAC,IAAI,CAAC;iBACtB;qBACI,IAAIQ,QAAM,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC;iBACnC;oBACI,IAAI,OAAO,GAAG,KAAK,IAAIA,QAAM,CAAC,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC;wBAC/C,OAAOR,cAAM,CAAC,cAAc,CAAC;;AAE7B,wBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;oBAEvB,OAAOA,cAAM,CAAC,IAAI,CAAC;iBACtB;qBACI,IAAIQ,QAAM,CAAC,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC;iBACpC;oBACI,IAAI,OAAO,GAAG,KAAK;wBACf,OAAOR,cAAM,CAAC,cAAc,CAAC;;AAE7B,wBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;oBACzB,OAAOA,cAAM,CAAC,IAAI,CAAC;iBACtB;qBACI,IAAIQ,QAAM,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC;iBACnC;oBACI,IAAI,OAAO,GAAG,KAAK;AACf,wBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;oBACzB,OAAOR,cAAM,CAAC,IAAI,CAAC;iBACtB;AACI,qBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,EACpD;oBACI,IAAI,OAAO,GAAG,OAAO;wBACjB,OAAOA,cAAM,CAAC,cAAc,CAAC;yBAC5B,IAAI,OAAO,GAAG,KAAK;AACpB,wBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;oBACvB,OAAOA,cAAM,CAAC,IAAI,CAAC;iBACtB;AACI,qBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,EACpD;AACI,oBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;oBACrB,OAAOA,cAAM,CAAC,IAAI,CAAC;iBACtB;;AAGD,gBAAA,IAAI,OAAe,CAAC;gBACpB,IAAI,OAAO,GAAG,KAAK;AACf,oBAAA,OAAO,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC;;AAE1C,oBAAA,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;AAE9B,gBAAA,IAAI,OAAe,CAAC;AACpB,gBAAA,IAAI,OAAO,GAAG,OAAO,IAAI,OAAO,GAAG,KAAK;AACpC,oBAAA,OAAO,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC;;AAE1C,oBAAA,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;gBAE9B,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAChC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAEhC,gBAAA,IAAI,IAAI,IAAI,IAAI,GAAG,IAAI,EACvB;oBACI,IAAI,OAAO,GAAG,CAAC;AACX,wBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;oBACzB,IAAI,OAAO,GAAG,CAAC;AACX,wBAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;oBACvB,OAAOA,cAAM,CAAC,IAAI,CAAC;iBACtB;aACJ;SACJ;QACD,OAAOA,cAAM,CAAC,KAAK,CAAC;KACvB;IAED,OAAO,GAAA;QAEH,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AACnC,QAAA,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACxE,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,cAAc,CAAC,KAAY,EAAE,OAAwB,EAAE,SAAS,GAAG,IAAI,EAAA;AAEnE,QAAA,IAAI,KAAK,YAAY,KAAG,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,aAAa,EACpE;YACI,OAAO,kBAAkB,CAAC,IAAI,EAAE,KAAY,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;SACrE;AACD,QAAA,IAAI,KAAK,YAAYgC,YAAI,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,cAAc,EACtE;AACI,YAAA,OAAO,SAAS,CAAC,mBAAmB,CAAC,KAAa,EAAE,IAAI,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;SAC1G;AACD,QAAA,IAAI,KAAK,YAAYE,cAAM,EAC3B;AACI,YAAA,OAAO,SAAS,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;SACpG;QACD,IAAI,KAAK,YAAYC,gBAAQ;AACzB,YAAA,OAAO,SAAS,CAAC,yBAAyB,CAAC,KAAK,EAAE,IAAI,EAAE,sBAAsB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;QAEzG,IAAI,KAAK,YAAY,OAAO;YACxB,OAAO,SAAS,CAAC,8BAA8B,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3E,QAAA,OAAO,EAAE,CAAC;KACb;AAED;;;;;;AAMG;AACH,IAAA,IAAI,QAAQ,GAAA;QAER,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC5C;AAED,IAAA,IAAI,GAAG,GAAA;QAEH,IAAI3B,QAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;AAClC,YAAA,OAAO,CAAC,CAAC;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KACvE;AAED;;;AAGG;AACH,IAAA,YAAY,CAAC,QAAgB,EAAA;;AAGzB,QAAA,IAAI,IAAI,CAAC,UAAU,EACnB;AACI,YAAA,IAAI,IAAI,CAAC,WAAW,GAAG,QAAQ;AAC3B,gBAAA,OAAO,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;;AAElC,gBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;SAC5D;aAED;AACI,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,WAAW;AAC3B,gBAAA,OAAO,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;;AAEnC,gBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,CAAC;SAC5D;KACJ;AAED;;;;;;AAMG;AACH,IAAA,YAAY,CAAC,EAAqB,EAAE,EAAqB,EAAE,GAAW,EAAA;QAElE,IAAI,EAAE,YAAYI,aAAO;AACrB,YAAA,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;QACvB,IAAI,EAAE,YAAYA,aAAO;AACrB,YAAA,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;AAEvB,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACrC,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;;QAGrC,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,WAAW,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAElC,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,CAAC;QAE1B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAE9C,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,cAAc,CAAC,GAAY,EAAE,GAAY,EAAE,GAAY,EAAA;AAEnD,QAAA,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC;AACpB,YAAA,OAAO,IAAI,CAAC;AAEhB,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACzB,QAAA,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/C,QAAA,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC/C,QAAA,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE/C,IAAI,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EACX;YACI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;AAC9F,YAAA,OAAO,IAAI,CAAC;SACf;AAED,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;QAEpD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;;AAEtC,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;;QAEhD,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACrC,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,mBAAmB,CACf,QAAwB,EACxB,SAAkB,EAClB,SAAkB,EAClB,SAAmB,EAAA;QAGnB,QAAQ,QAAQ;YAEZ,KAAK,cAAc,CAAC,GAAG;gBACnB,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC5C,KAAK,cAAc,CAAC,GAAG;gBACnB,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;YACvC,KAAK,cAAc,CAAC,GAAG;AACnB,gBAAA,OAAO,kBAAkB,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,CAAC;AAChD,qBAAA,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,KAAK,cAAc,CAAC,GAAG;gBACnB,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;YACrD,KAAK,cAAc,CAAC,GAAG;AACnB,gBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACzB,KAAK,cAAc,CAAC,GAAG;gBACnB,IAAI,SAAS,EACb;AACI,oBAAA,IAAIJ,QAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;AAC1D,wBAAA,OAAO,EAAE,CAAC;oBACd,IAAI,CAAC,GAAG,IAAIwB,YAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;oBACzC,OAAO,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC3F;YACL,KAAK,cAAc,CAAC,GAAG;gBACnB,IAAI,GAAG,GAAG,sBAAsB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAClD,gBAAA,IAAI,GAAG;AACH,oBAAA,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;SAGrD;AACD,QAAA,OAAO,EAAE,CAAC;KACb;IAED,aAAa,GAAA;QAET,OAAO;AACH,YAAA,IAAI,CAAC,UAAU;AACf,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AACzB,YAAA,IAAI,CAAC,QAAQ;AACb,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;SACtB,CAAC;KACL;IACD,cAAc,CAAC,SAAwB,EAAE,GAAY,EAAA;AAEjD,QAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EACxB;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YAEzB,IAAI,KAAK,GAAG,CAAC;gBACT,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBAEvC;AACI,gBAAA,IAAI,EAAE,GAAG,KAAK,CAAC,IAAIlC,aAAO,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AAC5D,gBAAA,IAAI,EAAE,GAAG,KAAK,CAAC,IAAIA,aAAO,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACrE,gBAAA,IAAI,EAAE,GAAG,KAAK,CAAC,IAAIA,aAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AAE1D,gBAAA,GAAG,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAExD,gBAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAE7B,IAAI,MAAM,GAAG,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACzC,IAAI,CAAC,MAAM;iBACX;oBACI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;oBAC5F,IAAI,CAAC,MAAM,EAAE,CAAC;oBACd,OAAO;iBACV;;AAGD,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACjD,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/C,gBAAA,IAAIU,QAAM,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;iBAClD;oBACI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;oBAC5F,IAAI,CAAC,MAAM,EAAE,CAAC;oBACd,OAAO;iBACV;;gBAGD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAErC,gBAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;gBAGpD,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC5B,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAE5B,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAErC,IAAI,CAAC,MAAM,EAAE,CAAC;aACjB;SACJ;KACJ;IACD,gBAAgB,GAAA;QAEZ,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC3C;IAED,iBAAiB,CAAC,SAAwB,EAAE,GAAY,EAAA;AAEpD,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YACtB,OAAO;QAEX,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5B,QAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;YACtB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;;AAElC,YAAA,KAAK,IAAI,KAAK,IAAI,SAAS,EAC3B;gBACI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3C,gBAAA,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC;gBAEnB,IAAI,kBAAkB,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAEjD,gBAAA,IAAI,SAAS,GAAG,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC;gBAE9C,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAEpB,IAAI,kBAAkB,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAEjD,gBAAA,IAAI,MAAM,GAAG,SAAS,GAAG,kBAAkB,CAAC;;gBAG5C,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;gBAClC,IAAI,CAAC,MAAM,EAAE,CAAC;aACjB;KACR;AAED,IAAA,cAAc,CAAC,CAAS,EAAA;AAEpB,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;KAC1B;AACD,IAAA,aAAa,CAAC,EAAoB,EAAA;AAE9B,QAAA,IAAI,EAAU,CAAC;QACf,IAAI,OAAO,EAAE,KAAK,QAAQ;AACtB,YAAA,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;;AAE9B,YAAA,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAErD,EAAE,IAAI,IAAI,CAAC,EAAE,GAAG,GAAG,IAAI,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAEjD,QAAA,IAAI,GAAG,GAAG,IAAIT,aAAO,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,QAAA,OAAO,KAAK,CAAC,IAAID,aAAO,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;KACnE;IACD,iBAAiB,CAAC,EAAW,EAAE,MAAe,EAAA;AAE1C,QAAA,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1C,QAAA,IAAI,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC;AAC1B,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAEnC,QAAA,IAAI,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QAClB,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACpC,QAAA,IAAI,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AAClC,YAAA,OAAO,KAAK,CAAC,IAAIA,aAAO,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE1E,IAAI,KAAK,GAAG,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;;AACzC,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;KACvC;;;;AAKS,IAAA,SAAS,CAAC,IAAc,EAAA;AAE9B,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACtB,QAAA,IAAI,GAAG,KAAK,CAAC,EACb;AACI,YAAA,IAAI,CAAC,MAAM,GAAG,IAAIA,aAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACnD,YAAA,IAAI,CAAC,MAAM,GAAG,IAAIA,aAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SACtD;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3B,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,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;KACrC;;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,OAAO,CAAC,CAAC;AACzB,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,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACnC;;AAlsBcmC,WAAA,CAAA,EAAE,GAAG,IAAInC,aAAP,CAAe;AACjBmC,WAAA,CAAA,EAAE,GAAG,IAAInC,aAAP,CAAe;AACjBmC,WAAA,CAAA,EAAE,GAAG,IAAInC,aAAP,CAAe;AACjBmC,WAAA,CAAA,IAAI,GAAG,IAAIlC,aAAP,CAAe;AAmOnBkC,WAAA,CAAA,aAAa,GAAG,IAAInC,aAAP,CAAe;AAxTlCmC,WAAG,GAAA,KAAA,GAAA,UAAA,CAAA;IADf,OAAO;AACK,CAAA,EAAAA,WAAG,CAsxBf;;AClzBD;;;;;;;AAOG;MACU,KAAK,CAAA;AAAlB,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,OAAO,EAAe,CAAC;KAenD;AAdG,IAAA,QAAQ,CAAC,GAAQ,EAAA;QAEb,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,EACV;YACI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC5B,KAAK,GAAG,CAAC,CAAC;SACb;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;IACD,QAAQ,CAAC,GAAQ,EAAE,GAAW,EAAA;AAE1B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;KACtD;AACJ;;ACJD;SACgB,eAAe,CAAC,GAAY,EAAE,GAAY,EAAE,GAAY,EAAA;AAEpE,IAAA,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC;QACpB,OAAO;IACX,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IACjG,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IACvB,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;;IAEjG,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAC7B,IAAA,IAAI,MAAM,GAAG,IAAInC,aAAO,EAAE,CAAC;;IAE3B,IAAIU,QAAM,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EACzB;QACI,OAAO;KACV;SAED;;AAEI,QAAA,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC;AACtC,QAAA,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC;KACzC;AAED,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC;AAgBD;AACgB,SAAA,mBAAmB,CAAC,EAAW,EAAE,EAAW,EAAA;AAExD,IAAA,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACrC,CAAC;AASD;;;;;;;;;;AAUG;SACa,cAAc,CAAC,GAAY,EAAE,aAAa,GAAG,CAAC,EAAA;;AAG1D,IAAA,IAAI,QAAQ,GAAG,IAAI,KAAK,EAAgB,CAAC;;AAGzC,IAAA,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAG;AAEjB,QAAA,IAAI,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;AACxB,QAAA,IAAI,OAAO;AACP,YAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,OAAO,CAAC,OAAO,CAAC;AACpB,KAAC,CAAC,CAAC;AACH,IAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,QAAQ,CAAC;AACtC,IAAA,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;;AAE9C,IAAA,IAAI,KAAK,GAAG,IAAI,QAAQ,CAAC,aAAa,CAAC,CAAC;AACxC,IAAA,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;;AAGzC,IAAA,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;;AAE1B,IAAA,IAAI,OAAO,GAAG,IAAI,KAAK,EAAE,CAAC;AAE1B;;;;;;AAMG;AACH,IAAA,SAAS,SAAS,CAAC,KAAc,EAAE,GAAY,EAAE,UAAmB,EAAA;AAEhE,QAAA,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,EAC9B;AACI,YAAA,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC;YACrB,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,EAC9B;gBACI,IAAI,UAAU,EACd;;AAEI,oBAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;wBAC7C,EAAE,CAAC,OAAO,EAAE,CAAC;AACjB,oBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBAChB;qBAED;;AAEI,oBAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC;wBAC3C,EAAE,CAAC,OAAO,EAAE,CAAC;AACjB,oBAAA,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;iBACnB;AAED,gBAAA,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBACxB,OAAO,KAAK,CAAC,EAAE,CAAC;aACnB;SACJ;KACJ;AAED,IAAA,KAAK,IAAI,KAAK,IAAI,MAAM,EACxB;QACI,IAAI,UAAU,GAAG,KAAK,CAAC;AACvB,QAAA,IAAI,GAAG,GAAY,EAAE,CAAC;AACtB,QAAA,OAAO,UAAU;YACb,UAAU,GAAG,SAAS,CAAC,UAAU,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAElD,QAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAClB;AACI,YAAA,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AACrD,YAAA,OAAO,UAAU;gBACb,UAAU,GAAG,SAAS,CAAC,UAAU,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;SACtD;AAED,QAAA,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;AACd,YAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAC1B;AAED,IAAA,OAAO,QAAQ,CAAC;AACpB,CAAC;AAEK,SAAU,UAAU,CAAC,GAAU,EAAE,GAAU,EAAE,SAAS,GAAG,IAAI,EAAA;AAE/D,IAAA,IAAI,CAAC,GAAG,YAAY2B,gBAAQ,MAAM,GAAG,YAAYA,gBAAQ,CAAC,EAC1D;AACI,QAAA,IAAI,GAAG,CAAC,OAAO,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;AACpE,YAAA,OAAO,KAAK,CAAC;AAEjB,QAAA,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;AACtB,QAAA,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;AAEtB,QAAA,IAAI,CAAC3B,QAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC;AAC9C,YAAA,OAAO,KAAK,CAAC;AAEjB,QAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC;AAC3B,QAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC;AAE3B,QAAA,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC;AACxB,QAAA,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC;AACxB,QAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC;AAC1B,QAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC;QAE1B,IAAI,WAAW,GAAGA,QAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EACpC;YACI,IAAI,WAAW,EACf;gBACI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;aAC7B;;AAEG,gBAAA,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;SACtC;aACI,IAAI,CAAC,WAAW,EACrB;YACI,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,KAAK,CAAC,OAAO,EAAE,CAAC;AAChB,YAAA,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;SAC7B;AAED,QAAA,IAAI,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,EAC/D;YACI,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,KAAK,CAAC,GAAG,EAAE,CAAC;SACf;AACD,QAAA,IAAI,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,EAC/D;YACI,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,KAAK,CAAC,GAAG,EAAE,CAAC;SACf;AAED,QAAA,IAAI,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAE/D,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AAC9D,QAAA,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACpC,QAAA,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAEnC,QAAA,OAAO,UAAU,CAAC,KAAK,EAAE,KAAK,EAAEA,QAAM,CAAC;AACnC,YAAA,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAW,EAAE,EAAW,KAC5C,OAAO,CACH,SAAS,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EACnC,SAAS,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EACnC,SAAS,CACZ,CACJ,CAAC;KACT;SACI,IAAI,GAAG,YAAY0B,cAAM,IAAI,GAAG,YAAYA,cAAM,EACvD;QACI,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI1B,QAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;KAClF;SACI,IAAI,GAAG,YAAYyB,WAAG,IAAI,GAAG,YAAYA,WAAG,EACjD;QACI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC;YAAE,GAAG,CAAC,OAAO,EAAE,CAAC;QAC1D,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;eAC/BzB,QAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;eACpCA,QAAM,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC;eACtCA,QAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;KAC7C;SACI,IAAI,GAAG,YAAY,OAAO,IAAI,GAAG,YAAY,OAAO,EACzD;QACI,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;eAC/BA,QAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;eAC1BA,QAAM,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC;eAC1B,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;KAClD;SACI,IAAI,GAAG,YAAYwB,YAAI,IAAI,GAAG,YAAYA,YAAI,EACnD;QACI,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KACzD;AACD,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC;AAqDK,SAAUS,wBAAsB,CAAC,GAAW,EAAA;;;;;;;;;;;;AAc9C,IAAA,IAAI,IAAI,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACxC,IAAA,IAAI,EAAE,GAAG,IAAIN,gBAAQ,EAAE,CAAC;AACxB,IAAA,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC;IACxB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACjB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACjB,IAAA,OAAO,EAAE,CAAC;AACd,CAAC;AAEe,SAAA,sBAAsB,CAAC,EAAgB,EAAE,SAAmB,EAAA;IAExE,IAAI,SAAS,EACb;;AAEI,QAAA,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;QACvB,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAE/C,QAAA,IAAI,QAAQ,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AAC5B,QAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC;AAE9B,QAAA,IAAI,QAAQ,IAAI,QAAQ,EACxB;AACI,YAAA,IAAI,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC;YACzB,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,CAAC;AAE/C,YAAA,IAAI,GAAG,GAAG;gBACN,IAAIrC,aAAO,CACP,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,KAAK,EACvD,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,KAAK,CAC1D;gBACD,IAAIA,aAAO,CACP,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,KAAK,EACvD,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,GAAG,KAAK,CAC1D;aACJ,CAAC;YACF,KAAK,IAAI,CAAC,IAAI,GAAG;AACb,gBAAA,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAC3B,YAAA,OAAO,GAAG,CAAC;SACd;KACJ;AACL,CAAC;SAiGe,kBAAkB,CAAC,EAA0B,EAAE,SAAkB,EAAE,SAAkB,EAAA;AAEjG,IAAA,IAAI,UAAU,GAAG,IAAIA,aAAO,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAEpE,IAAA,IAAI,KAAK,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;AAE/C,IAAA,IAAI,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC,IAAIiC,WAAK,CAAC,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,IAAIjC,aAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IAElH,IAAI,SAAS,EACb;AACI,QAAA,IAAI,CAAC,GAAG,IAAIA,aAAO,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACtE,QAAA,IAAI,CAAC,GAAG,IAAIA,aAAO,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEtE,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,IAAIiC,WAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,IAAIjC,aAAO,EAAE,EAAE,IAAI,CAAC,CAAC;QACtF,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,IAAIiC,WAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,EAAE,IAAIjC,aAAO,EAAE,EAAE,IAAI,CAAC,CAAC;QAEtF,IAAI,EAAE,GAAG,IAAIkC,YAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAChC,IAAI,EAAE,GAAG,IAAIA,YAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAEhC,QAAA,IAAI,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;AAC3D,QAAA,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;AAC9D,QAAA,OAAO,GAAG,CAAC;KACd;SAED;AACI,QAAA,IAAI,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,IAAIlC,aAAO,EAAE,CAAC,CAAC;AAC3D,QAAA,IAAI,EAAE,GAAG,IAAIkC,YAAI,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;QAC5D,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;KAC3D;AACL,CAAC;AAEe,SAAA,kBAAkB,CAAC,EAAW,EAAE,SAAkB,EAAA;AAE9D,IAAA,OAAO,EAAE,CAAC;AACd,CAAC;AASD;;;;;;;;;AASG;AACG,SAAU,MAAM,CAAC,EAAS,EAAA;AAE5B,IAAA,IAAI,EAAE,YAAYG,gBAAQ,EAC1B;;QAEI,IAAI,CAAC,EAAE,CAAC,OAAO;YAAE,OAAO;;AAGxB,QAAA,IAAI,EAAE,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO;;AAGnC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAC3C;YACI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI3B,QAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,gBAAgB,CAAC;gBAClC,SAAS;AACb,YAAA,IAAI,IAAI,GAAGG,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;AACxC,YAAA,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACnC,SAAS;YACb,OAAO;SACV;AAED,QAAA,IAAI,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;;AAGvC,QAAA,0BAA0B,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/D,QAAA,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1C,KAAK,CAAC,GAAG,EAAE,CAAC;;QAGhB,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAClE,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AACzB,QAAA,IAAI,IAAI,GAAG,IAAIC,aAAO,CAAC;AACvB,QAAA,IAAI,MAAM,GAAG,CAAC,CAAC;AAEf,QAAA,IAAI,IAAI,GAAc,EAAE,CAAC;AAEzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EACrC;YACI,IAAI,CAAC,UAAU,CAAC,KAAK,CAACD,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhE,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YAEpC,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAEzB,IAAIH,QAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC;AACtB,gBAAA,SAAS;AAEb,YAAA,KAAK,IAAI,IAAI,CAAC;;AAGd,YAAA,IAAI,CAACA,QAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;gBACjC,OAAO;AAEX,YAAA,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAEzB,YAAA,IAAI,CAAC,MAAM;gBACP,MAAM,GAAG,KAAK,CAAC;AACd,iBAAA,IAAI,MAAM,KAAK,KAAK;gBACrB,OAAO;YAEX,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,YAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBACf,OAAO;YAEX,IAAI,GAAG,IAAI,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;SAC5B;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM;YAC5B,OAAO;AAEX,QAAA,IAAI,OAAgB,CAAC;AAErB,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC,QAAA,IAAI,GAAG,GAAG,IAAI+B,UAAI,CAAC;QACnB,IAAI/B,QAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAIA,QAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;SACtD;AACI,YAAA,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC;AACjB,YAAA,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;SAC3B;;SAED;AACI,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,GAAG,IAAI,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpC,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAG;gBAEhB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACtB,gBAAA,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACjB,gBAAA,OAAO,CAAC,CAAC;AACb,aAAC,CAAC,CAAC;AACH,YAAA,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAExB,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAE1B,YAAA,OAAO,GAAG,IAAIT,aAAO,EAAE,CAAC,SAAS,CAC7B,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAC3B,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAC3B,KAAK,CACR,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAE7B,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;SACpD;;AAGD,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAG;AAEhB,YAAA,OAAO,CAACS,QAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAIA,QAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;AAC7D,oBAACA,QAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAIA,QAAM,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC1E,SAAC,CAAC;YACE,OAAO;QAEX,IAAI,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAII,aAAO,CAAC,CAAC;QAEpC,OAAO;AACH,YAAA,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC;AACrB,YAAA,GAAG,EAAE,IAAIT,UAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACrD,YAAA,GAAG,EAAE,OAAO;SACf,CAAC;KACL;AACL,CAAC;AAqBK,SAAU,cAAc,CAAC,GAAY,EAAA;AAEvC,IAAA,aAAa,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAE9C,IAAA,IAAI,GAAW,CAAC;IAChB,0BAA0B,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,KAAI;AAEvC,QAAA,IAAI,GAAG;AAAE,YAAA,OAAO,IAAI,CAAC;AAErB,QAAA,IAAI,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;AAC3C,QAAA,IAAI,MAAM,KAAKH,cAAM,CAAC,cAAc,EACpC;YACI,IAAI,GAAG,GAAG,EAAS,CAAC;AACpB,YAAA,GAAG,GAAG,IAAIkC,cAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;AACzC,YAAA,OAAO,IAAI,CAAC;SACf;AACD,QAAA,OAAO,MAAM,KAAKlC,cAAM,CAAC,IAAI,CAAC;AAClC,KAAC,CAAC,CAAC;IAEH,IAAI,GAAG,EACP;AACI,QAAA,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACf,QAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACjB;AACD,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAEK,SAAU,SAAS,CAAC,GAAsB,EAAA;IAE5C,KAAK,IAAI,CAAC,IAAI,GAAG;AACb,QAAA,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;AAC1D,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;SAEe,uBAAuB,CAAC,MAAe,EAAE,gBAAyB,IAAI,EAAA;AAElF,IAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;AAE3C,IAAA,MAAM,eAAe,GAAG,CAAC,CAAU,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;;AAGxE,IAAA,IAAI,MAAe,CAAC;AACpB,IAAA,IAAI,MAAe,CAAC;AACpB,IAAA,KAAK,IAAI,CAAC,IAAI,MAAM,EACpB;QACI,IAAI,CAAC,YAAYiC,WAAG,IAAI,CAAC,YAAYC,cAAM,EAC3C;AACI,YAAA,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YAClB,MAAM;SACT;aACI,IAAI,MAAM,EACf;YACI,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC3B,YAAA,IAAI,eAAe,CAAC,CAAC,CAAC,EACtB;gBACI,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC5B,gBAAA,IAAI,eAAe,CAAC,CAAC,CAAC;iBACtB;AACI,oBAAA,MAAM,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;oBACvB,MAAM;iBACT;aACJ;SACJ;aAED;AACI,YAAA,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,EAAa,CAAC;YACjC,IAAI,GAAG,GAAG,uBAAuB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC9C,YAAA,IAAI,GAAG;AACH,gBAAA,OAAO,GAAG,CAAC;YACf,IAAI,EAAE,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAC5B,YAAA,IAAI,eAAe,CAAC,EAAE,CAAC;AACnB,gBAAA,MAAM,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;SAC/B;KACJ;AAED,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC,aAAa;QAAE,OAAO;AAEtC,IAAA,IAAI,CAAC,GAAG,IAAIpC,aAAO,EAAE,CAAC;AACtB,IAAA,IAAI,CAAC,GAAG,IAAIA,aAAO,EAAE,CAAC;IACtB,IAAI,CAAC,MAAM,EACX;AACI,QAAA,IAAI,CAAC,MAAM;AACP,YAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAEzB,QAAA,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAC5B,KAAK,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACtC,QAAA,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KACnC;SAED;AACI,QAAA,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC;YAChD,MAAM,CAAC,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;KACzC;IACD,OAAO,IAAIC,aAAO,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AACnF,CAAC;AAGe,SAAA,YAAY,CAAC,GAAoB,EAAE,OAAgB,EAAA;AAE/D,IAAA,IAAI,EAAE,GAAG,IAAIoC,gBAAQ,EAAE,CAAC;AACxB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EACtC;QACI,IAAI,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3B,QAAA,IAAI,GAAe,CAAC;AACpB,QAAA,IAAI,EAAW,CAAC;AAChB,QAAA,IAAI,EAAW,CAAC;QAEhB,IAAI,OAAO,EACX;AACI,YAAA,EAAE,GAAG,SAAS,CAAC,GAAG,CAACxB,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjD,YAAA,EAAE,GAAG,SAAS,CAAC,GAAG,CAACA,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACpD;aAED;AACI,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM;YAC/B,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC3B,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAC9B;QACD,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAE5B,IAAIH,QAAM,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACzB,GAAG,GAAG,IAAIwB,YAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;;AAEvB,YAAA,GAAG,GAAG,IAAIC,WAAG,EAAE,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAC/C,QAAA,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAChB;AACD,IAAA,OAAO,EAAE,CAAC;AACd;;ACtxBA;;;AAGG;AACH;AACA,IAAY,SAMX,CAAA;AAND,CAAA,UAAY,SAAS,EAAA;AAEjB,IAAA,SAAA,CAAA,KAAA,CAAA,GAAA,QAAS,CAAA;AACT,IAAA,SAAA,CAAA,MAAA,CAAA,GAAA,cAAW,CAAA;AACX,IAAA,SAAA,CAAA,MAAA,CAAA,GAAA,kBAAe,CAAA;AACf,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,0BAAe,CAAA;AACnB,CAAC,EANW,SAAS,KAAT,SAAS,GAMpB,EAAA,CAAA,CAAA,CAAA;AAED;AACA;AACA;AACA,IAAY,aAKX,CAAA;AALD,CAAA,UAAY,aAAa,EAAA;AAErB,IAAA,aAAA,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACT,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,aAAA,CAAA,aAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACd,CAAC,EALW,aAAa,KAAb,aAAa,GAKxB,EAAA,CAAA,CAAA;;ACrBD,IAAY,OAOX,CAAA;AAPD,CAAA,UAAY,OAAO,EAAA;AAEf,IAAA,OAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,OAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,OAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,OAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,OAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACf,CAAC,EAPW,OAAO,KAAP,OAAO,GAOlB,EAAA,CAAA,CAAA,CAAA;AAIM,MAAM,mBAAmB,GAAkB,EAAE,CAAC;AAErD;SACgB,GAAG,CAAC,OAAa,EAAE,GAAG,cAAqB,EAAA;IAEvD,KAAK,IAAI,CAAC,IAAI,mBAAmB;AAC7B,QAAA,CAAC,CAAC,OAAO,EAAE,GAAG,cAAc,CAAC,CAAC;AACtC,CAAC;AAEM,MAAM,8BAA8B,GAAkB,EAAE,CAAC;AAEhE;SACgB,cAAc,CAAC,OAAa,EAAE,GAAG,cAAqB,EAAA;IAElE,KAAK,IAAI,CAAC,IAAI,8BAA8B;AACxC,QAAA,CAAC,CAAC,OAAO,EAAE,GAAG,cAAc,CAAC,CAAC;AACtC;;ACzBA,IAAI,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;AAgB5B;;;;;;AAMG;MACU,SAAS,CAAA;AAElB,IAAA,WAAA,GAAA,GAA2B;;AAG3B,IAAA,OAAO,WAAW,GAAA;AAEd,QAAA,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,YAAA,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;;QAEjC,IAAI,YAAY,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;AACpD,QAAA,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACpC,QAAA,OAAO,YAAY,CAAC;KACvB;AACJ;;SCrCe,OAAO,CAAC,GAAa,EAAE,KAAK,GAAG,IAAI,EAAA;AAE/C,IAAA,KAAK,IAAI,IAAI,IAAI,GAAG,CAAC,aAAa,EAClC;AACI,QAAA,KAAK,IAAI,GAAG,IAAI,IAAI,EACpB;AACI,YAAA,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;AACI,gBAAA,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;aAC5B;SACJ;KACJ;AACL,CAAC;SACe,QAAQ,CAAC,GAAa,EAAE,GAAY,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,GAAG,KAAK,EAAA;AAEhG,IAAA,KAAK,IAAI,IAAI,IAAI,GAAG,CAAC,aAAa,EAClC;AACI,QAAA,KAAK,IAAI,GAAG,IAAI,IAAI,EACpB;AACI,YAAA,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;AACI,gBAAA,IAAI,CAAC,GAAG,IAAInC,aAAO,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAClD,gBAAA,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACX,gBAAA,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACX,IAAI,QAAQ,EACZ;AACI,oBAAA,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC;AACf,oBAAA,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC;iBAClB;qBAED;AACI,oBAAA,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC;AACf,oBAAA,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC;iBAClB;aACJ;SACJ;KACJ;AACL;;MC5Ba,KAAK,CAAA;AAEd,IAAA,WAAA,CACY,QAAoB,GAAA,IAAI,OAAO,EAC/B,SAAoB,EAAE,EAAA;QADtB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAuB;QAC/B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAgB;KAGjC;AAED,IAAA,IAAI,OAAO,GAAA;QAEP,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;AACD,IAAA,IAAI,KAAK,GAAA;QAEL,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;AACD,IAAA,IAAI,IAAI,GAAA;AAEJ,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACrC,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3E,OAAO,WAAW,GAAG,QAAQ,CAAC;KACjC;AACD,IAAA,IAAI,WAAW,GAAA;AAEX,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;KACpC;IACD,IAAI,OAAO,CAAC,GAAY,EAAA;AAEpB,QAAA,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;KACvB;IACD,IAAI,KAAK,CAAC,KAAgB,EAAA;AAEtB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACvB;AAED,IAAA,IAAI,KAAK,GAAA;AAEL,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AAC/B,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EACzB;AACI,YAAA,IAAI,CAAC,CAAC,KAAK,YAAYqC,gBAAQ;AAC3B,gBAAA,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAEhD,YAAA,IAAI,CAAC,CAAC,KAAK,YAAYD,cAAM,EAC7B;AACI,gBAAA,IAAI,EAAE,GAAG,IAAIQ,UAAI,EAAE,CAAC;AACpB,gBAAA,IAAI,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACjE,gBAAA,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AACnF,gBAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACxB;;gBAEG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;SACjC;AAED,QAAA,OAAO,KAAK,CAAC;KAChB;AAED,IAAA,IAAI,QAAQ,GAAA;AAER,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;KACvC;IACD,IAAI,QAAQ,CAAC,CAAU,EAAA;AAEnB,QAAA,IAAI,GAAG,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;AACjC,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;AACrB,YAAA,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACpD;IACD,EAAE,GAAA;AAEE,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AACzB,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;AACrB,YAAA,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;AACjB,QAAA,OAAO,IAAI,CAAC;KACf;IAED,iBAAiB,GAAA;AAEb,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;AACxC,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;AACrB,YAAA,CAAC,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC;KACnC;AAED,IAAA,WAAW,CAAC,CAAU,EAAA;QAElB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,gBAAgB,CAAC,CAAU,EAAA;AAGvB,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;AAC5B,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAChB,QAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EACjB;AACI,YAAA,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACrB,YAAA,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AACjB,YAAA,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SAC3B;AAED,QAAA,OAAO,IAAI,CAAC;KACf;IACD,OAAO,GAAA;QAEH,IAAI,GAAG,GAAY,EAAE,CAAC;AACtB,QAAA,IAAI,QAAQ,GAAc,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1D,QAAA,KAAK,IAAI,GAAG,IAAI,QAAQ,EACxB;AACI,YAAA,IAAI,GAAG,CAAC,KAAK,YAAYP,gBAAQ;gBAC7B,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;;gBAEjC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;SACnC;AACD,QAAA,OAAO,GAAG,CAAC;KACd;IACD,KAAK,GAAA;AAED,QAAA,IAAI,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AACtC,QAAA,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7C,QAAA,OAAO,KAAK,CAAC;KAChB;AACD,IAAA,QAAQ,CAAC,KAAa,EAAA;QAElB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC;AACvC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC;KACxD;AACD,IAAA,mBAAmB,CACf,QAAwB,EACxB,SAAkB,EAClB,SAAkB,EAClB,SAAmB,EAAA;QAGnB,QAAQ,QAAQ;YAEZ,KAAK,cAAc,CAAC,GAAG;AACnB,gBAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACnC,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG;gBACnB;oBACI,IAAI,GAAG,GAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,oBAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EACzB;AACI,wBAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;qBACrB;oBACD,IAAI,GAAG,GAAc,EAAE,CAAC;AACxB,oBAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EACjB;AACI,wBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;qBACjF;AACD,oBAAA,OAAO,GAAG,CAAC;iBACd;SAGR;AACD,QAAA,OAAO,EAAE,CAAC;KACb;IACD,aAAa,GAAA;QAET,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;AAC7C,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EACzB;YACI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;SACxC;AACD,QAAA,OAAO,GAAG,CAAC;KACd;IACD,cAAc,CAAC,SAAwB,EAAE,GAAY,EAAA;AAEjD,QAAA,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACrB,QAAA,IAAI,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC;AAE9D,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAE7B,QAAA,IAAI,CAAC,IAAI,YAAY,EACrB;AACI,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EACzB;gBACI,IAAI,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC;gBACzC,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,GAAG,EACrC;oBACI,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC;AAC1C,oBAAA,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC;oBACb,MAAM;iBACT;gBACD,YAAY,IAAI,GAAG,CAAC;aACvB;SACJ;AACD,QAAA,EAAE,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;KACrC;IACD,gBAAgB,GAAA;QAEZ,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;AAChD,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EACzB;YACI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC;SAC3C;AACD,QAAA,OAAO,GAAG,CAAC;KACd;IACD,iBAAiB,CAAC,SAAwB,EAAE,GAAY,EAAA;QAEpD,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EACtE;YACI,IAAI,KAAK,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC;AACzC,YAAA,IAAI,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;YAC9B,IAAI,SAAS,GAAG,EAAE,CAAC;AACnB,YAAA,OAAO,SAAS,CAAC,MAAM,EACvB;AACI,gBAAA,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ;oBACvB,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,CAAC;;oBAE3C,MAAM;aACb;AACD,YAAA,EAAE,CAAC,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AAErC,YAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBACtB,MAAM;YAEV,MAAM,IAAI,KAAK,CAAC;SACnB;KACJ;;AAED,IAAA,yBAAyB,CAAC,WAAkB,EAAA;;;AAKxC,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAChF,IAAI,GAAG,GAAG,IAAI,CAAC,2BAA2B,CAAC,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACtH,QAAA,OAAO,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;KACxC;;AAGD,IAAA,kBAAkB,CAAC,WAAkB,EAAE,cAAc,GAAG,KAAK,EAAA;AAEzD,QAAA,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;AAEjH,QAAA,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEjF,IAAI,MAAM,GAAY,EAAE,CAAC;;QAGzB,IAAI,UAAU,GAAc,EAAE,CAAC;;QAG/B,MAAM,iBAAiB,GAAG,CAAC,QAAmB,EAAE,QAAmB,EAAE,OAAgB,KAAI;AAErF,YAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAG;AAElB,gBAAA,IAAI,WAAW,GAAG,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACpF,gBAAA,IAAI,gBAAgB,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;;gBAG1I,IAAI,gBAAgB,EACpB;oBACI,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC7H;;AACG,oBAAA,UAAU,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;AACxC,aAAC,CAAC,CAAC;AAEP,SAAC,CAAC;AACF,QAAA,iBAAiB,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClE,QAAA,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;AACzE,QAAA,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAG;AAE5B,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAG;gBAEpB,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC;AACxD,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvH,QAAA,OAAO,MAAM,CAAC;KACjB;AAED;;;AAGG;AACH,IAAA,qBAAqB,CAAC,YAAqB,EAAA;AAEvC,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC;AACjC,QAAA,IAAI,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;AACtD,QAAA,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC,4BAA4B,CAAC,cAAc,CAAC,CAAC;QACvF,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1B,IAAI,SAAS,GAAY,EAAE,CAAC;QAE5B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI3B,QAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,EACzE;AACI,YAAA,SAAS,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACpE;AACI,aAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAC3B;AACI,YAAA,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/C;aAED;YACI,KAAK,IAAI,OAAO,IAAI,QAAQ;AACxB,gBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACjG;AAED,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAElD,QAAA,KAAK,IAAI,MAAM,IAAI,YAAY,EAC/B;YACI,IAAI,YAAY,GAAc,EAAE,CAAC;AACjC,YAAA,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;AACxC,YAAA,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,KAAK,EAC7B;gBACI,IAAI,IAAI,GAAG,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC;AACzD,gBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;aAC9B;AAED,YAAA,KAAK,IAAI,EAAE,IAAI,YAAY,EAC3B;gBACI,IAAI,SAAS,GAAY,EAAE,CAAC;AAC5B,gBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;AAC7B,gBAAA,KAAK,IAAI,CAAC,IAAI,YAAY,EAC1B;oBACI,IAAI,CAAC,KAAK,MAAM;wBACZ,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;iBAC5C;AAED,gBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC;aACrE;SAEJ;AAED,QAAA,OAAO,SAAS,CAAC;KACpB;AACD,IAAA,KAAK,CAAC,WAAkB,EAAA;QAEpB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,EAC7C;YACI,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,CAAC,MAAM;mBAChD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IACnB,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAC9C,CAAC;SACT;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;IACO,sBAAsB,CAAC,YAAqB,EAAE,UAAmB,EAAA;QAErE,IAAI,YAAY,GAAY,EAAE,CAAC;AAC/B,QAAA,KAAK,IAAI,EAAE,IAAI,YAAY,EAC3B;YACI,IAAI,GAAG,GAAG,EAAE,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;AAC/C,YAAA,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;SAC7B;AACD,QAAA,OAAO,YAAY,CAAC;KAEvB;AACD;;;;;;;;AAQG;IACK,2BAA2B,CAAC,WAAsB,EAAE,KAAgB,EAAA;QAExE,IAAI,CAAC,KAAK,CAAC,MAAM;AACb,YAAA,OAAO,WAAW,CAAC;QAEvB,IAAI,cAAc,GAAc,EAAE,CAAC;AAEnC,QAAA,KAAK,IAAI,cAAc,IAAI,WAAW,EACtC;;AAEI,YAAA,IAAI,UAAU,GAAc,CAAC,cAAc,CAAC,CAAC;AAC7C,YAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EACtB;;gBAEI,IAAI,IAAI,GAAc,EAAE,CAAC;AACzB,gBAAA,UAAU,CAAC,OAAO,CAAC,CAAC,IAAG;oBAEnB,IAAI,GAAG,GAAG,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACxC,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AACtB,iBAAC,CAAC,CAAC;AACH,gBAAA,UAAU,GAAG,IAAI,CAAC;aACrB;AACD,YAAA,cAAc,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;SACtC;AAED,QAAA,OAAO,cAAc,CAAC;KACzB;;IAGD,OAAO,kBAAkB,CAAC,QAAmB,EAAA;QAEzC,IAAI,MAAM,GAAY,EAAE,CAAC;AACzB,QAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACzC,QAAA,OAAO,QAAQ,CAAC,MAAM,EACtB;;YAEI,IAAI,QAAQ,GAAc,EAAE,CAAC;AAC7B,YAAA,IAAI,OAAO,GAAY,QAAQ,CAAC,KAAK,EAAE,CAAC;;AAGxC,YAAA,aAAa,CAAC,QAAQ,EAAE,CAAC,GAAY,KAAI;AAErC,gBAAA,IAAI,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACpD,gBAAA,IAAI,KAAK;AAAE,oBAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,gBAAA,OAAO,KAAK,CAAC;AACjB,aAAC,CAAC,CAAC;YACH,IAAI,KAAK,GAAc,KAAK,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC;YAChE,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;SAC1C;AACD,QAAA,OAAO,MAAM,CAAC;KACjB;AACD;;;AAGG;AACH,IAAA,OAAO,aAAa,CAAC,KAAgB,EAAE,WAAW,GAAG,IAAI,EAAA;AAErD,QAAA,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC;AACpC,QAAA,IAAI,IAAI,GAAc,EAAE,CAAC;AACzB,QAAA,IAAI,KAAK,GAAG,IAAI,GAAG,EAAiB,CAAC;AAErC,QAAA,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EACvB;YACI,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;YACtB,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,EAAE,EACP;AACI,gBAAA,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC;AACnB,gBAAA,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;aACpB;YAED,OAAO,IAAI,EACX;;gBAEI,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,IAAG;oBAE7B,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACvB,IAAI,CAAC,EAAE,EACP;AACI,wBAAA,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC;AACpB,wBAAA,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;qBACrB;AAED,oBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC;AACtB,wBAAA,OAAO,IAAI,CAAC;oBAEhB,IAAI,MAAM,GAAG,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;oBAEtC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAC3B;AACI,wBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;;;;;;;;;;qBAYxB;oBAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;qBAChC;wBACI,IAAI,CAAC,WAAW,EAChB;4BACI,IAAIA,QAAM,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC;AACtD,gCAAA,OAAO,IAAI,CAAC;4BAChB,IAAIA,QAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC;AAC/D,gCAAA,OAAO,IAAI,CAAC;yBACnB;wBACD,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACvB,wBAAA,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC;AACnB,wBAAA,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;qBACpB;oBAED,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC;AACxC,iBAAC,CAAC,CAAC;;gBAGH,IAAI,QAAQ,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EACpC;AACI,oBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACb,oBAAA,MAAM;iBACT;;AAEG,oBAAA,KAAK,GAAG,QAAQ,CAAC;aACxB;SACJ;AAED,QAAA,OAAO,IAAI,CAAC;KACf;AAED;;;;;;;AAOG;IACK,OAAO,wBAAwB,CAAC,QAAmB,EAAA;QAEvD,IAAI,KAAK,GAAc,EAAE,CAAC;AAC1B,QAAA,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC;AAAE,YAAA,OAAO,QAAQ,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AACzC,QAAA,OAAO,QAAQ,CAAC,MAAM,EACtB;AACI,YAAA,IAAI,OAAO,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;AAC/B,YAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;;AAGpB,YAAA,aAAa,CAAC,QAAQ,EAAE,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;SACvE;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;;AAED,IAAA,QAAQ,CAAC,IAAc,EAAA;QAET,IAAI,CAAC,IAAI,GAAG;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,EAAW,CAAC,CAAC,CAAC;AAEpE,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACxB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;AACI,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CACZ,OAAO,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,UAAU,EAAW,CAAC,CAAC,CACtD,CAAC;SACL;KAEJ;;AAED,IAAA,SAAS,CAAC,IAAc,EAAA;AAEpB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACd,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;KACvD;AACJ;;MC3iBY,YAAY,CAAA;AAErB,IAAA,WAAA,CAAoB,aAAsB,EAAE,EAAA;QAAxB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAc;KAG3C;AAED,IAAA,IAAI,SAAS,GAAA;AAET,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;KAClC;AACD,IAAA,IAAI,UAAU,GAAA;AAEV,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;KACjC;AACD,IAAA,IAAI,SAAS,GAAA;AAET,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;KAC1E;AACD,IAAA,eAAe,CAAC,MAAuB,EAAA;AAEnC,QAAA,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvF,QAAA,OAAO,IAAI,CAAC;KACf;IACD,KAAK,GAAA;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;KAC9B;IACD,QAAQ,CAAC,OAAqB,EAAE,QAA2B,EAAA;QAEvD,QAAQ,QAAQ;YAEZ,KAAK8B,yBAAiB,CAAC,YAAY;AAC/B,gBAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC;YACnD,KAAKA,yBAAiB,CAAC,KAAK;AACxB,gBAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC5C,KAAKA,yBAAiB,CAAC,QAAQ;AAC3B,gBAAA,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;SAClD;KACJ;;AAED,IAAA,yBAAyB,CAAC,MAAoB,EAAA;QAE1C,IAAI,MAAM,GAAY,EAAE,CAAC;AACzB,QAAA,KAAK,IAAI,QAAQ,IAAI,IAAI,CAAC,UAAU,EACpC;AACI,YAAA,KAAK,IAAI,QAAQ,IAAI,MAAM,CAAC,UAAU,EACtC;gBACI,IAAI,SAAS,GAAG,QAAQ,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;AAC7D,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;aAC7B;SACJ;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;AACzB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;KACrC;;AAED,IAAA,kBAAkB,CAAC,QAAsB,EAAA;QAErC,IAAI,SAAS,GAAG,KAAK,CAAC;AACtB,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;AAChC,QAAA,IAAI,SAAS,GAAG,QAAQ,CAAC,UAAU,CAAC;AAEpC,QAAA,IAAI,MAAM,GAAY,EAAE,CAAC;AAEzB,QAAA,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAE,CAAC;AAE/B,QAAA,KAAK,IAAI,GAAG,IAAI,SAAS,EACzB;AACI,YAAA,IAAI,SAAS,GAAY,EAAE,CAAC;AAC5B,YAAA,IAAI,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC;AAC7B,YAAA,KAAK,IAAI,GAAG,IAAI,SAAS,EACzB;gBACI,IAAI,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC/B,IAAI,CAAC,MAAM,EACX;AACI,oBAAA,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC;AACzB,oBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;iBAC7B;gBACD,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,EAClC;AACI,oBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACpB,SAAS;iBACZ;gBACD,IAAI,MAAM,GAAG,GAAG,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;AACzC,gBAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;iBACvB;oBACI,SAAS,GAAG,IAAI,CAAC;AACjB,oBAAA,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;iBACnB;;AAEG,oBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC3B;;YAGD,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EACzC;AACI,gBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpB,SAAS,GAAG,SAAS,CAAC;aACzB;;AAEG,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACxB;QAED,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AAC3C,QAAA,OAAO,SAAS,CAAC;KACpB;AAED,IAAA,qBAAqB,CAAC,MAAoB,EAAA;QAEtC,IAAI,SAAS,GAAY,EAAE,CAAC;AAC5B,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAC7B;YACI,IAAI,EAAE,GAAG,CAAC,CAAC,qBAAqB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACnD,YAAA,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;SACzB;AACD,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAC5B,QAAA,OAAO,IAAI,CAAC;KACf;AAED;;;;;;;AAOG;AACH,IAAA,WAAW,CAAC,IAAa,EAAA;AAErB,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAC7B;YACI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAClC,YAAA,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;SACnD;KAEJ;AACD,IAAA,QAAQ,CAAC,IAAc,EAAA;QAET,IAAI,CAAC,IAAI,GAAG;AACtB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACvB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAC7B;AACI,YAAA,IAAI,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;AACtB,YAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC7B;KACJ;AACD,IAAA,SAAS,CAAC,IAAc,EAAA;AAEpB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACd,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAClC,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,EAC5B;AACI,YAAA,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SACrB;KACJ;AACJ;;;ACjJM,IAAM,MAAM,GAAA,QAAA,GAAZ,MAAM,MAAO,SAAQ,MAAM,CAAA;IAE9B,OAAO,gBAAgB,CAAC,GAA0B,EAAA;QAE9C,IAAI,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACnE,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EACrB;AACI,YAAA,IAAI,GAAG,GAAG,IAAI,QAAM,EAAE,CAAC;;AAEvB,YAAA,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC7C,YAAA,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACzC,YAAA,OAAO,GAAG,CAAC;SACd;KACJ;IAED,WAAoB,CAAA,aAAA,GAA8B,IAAI,YAAY,EAAE,EAAA;AAEhE,QAAA,KAAK,EAAE,CAAC;QAFQ,IAAa,CAAA,aAAA,GAAb,aAAa,CAAmC;KAGnE;;AAGD,IAAA,IAAI,YAAY,GAAA;QAEZ,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;AACD,IAAA,IAAI,IAAI,GAAA;AAEJ,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;KACtC;AACD,IAAA,IAAI,WAAW,GAAA;AAEX,QAAA,IAAI,GAAG,GAAG,IAAInC,UAAI,EAAE,CAAC;AACrB,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS;AACtC,YAAA,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;AAC7B,QAAA,OAAO,GAAG,CAAC;KACd;IACD,OAAO,GAAA;AAEH,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;AAC7C,QAAA,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EACzB;AACI,YAAA,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACjC;aAED;YACI,IAAI,IAAI,GAAa,EAAE,CAAC;AACxB,YAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAG;AAElB,gBAAA,IAAI,GAAG,GAAG,IAAI,QAAM,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7C,gBAAA,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACpC,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,IAAI,CAAC;SACf;KACJ;AAED;;;;;AAKG;AACH,IAAA,gBAAgB,CAAC,CAAU,EAAA;QAEvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;KACrC;AACD,IAAA,mBAAmB,CACf,QAAwB,EACxB,SAAkB,EAClB,SAAkB,EAClB,SAAmB,EAAA;QAGnB,QAAQ,QAAQ;YAEZ,KAAK,cAAc,CAAC,GAAG;AACnB,gBAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;YAChC,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG;gBACnB;oBACI,IAAI,GAAG,GAAc,EAAE,CAAC;oBACxB,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS,EAC1C;AACI,wBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;qBACjF;AACD,oBAAA,OAAO,GAAG,CAAC;iBACd;SAGR;AACD,QAAA,OAAO,EAAE,CAAC;KACb;IACD,aAAa,GAAA;QAET,IAAI,GAAG,GAAc,EAAE,CAAC;AACxB,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS;YACtC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACtC,QAAA,OAAO,GAAG,CAAC;KACd;IACD,cAAc,CAAC,SAAmB,EAAE,OAAgB,EAAA;QAEhD,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAIJ,aAAO,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC1C;AACD,IAAA,WAAW,CAAC,CAAU,EAAA;QAElB,IAAI,CAAC,oBAAoB,EAAE,CAAC;;AAE5B,QAAA,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,QAAA,OAAO,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;KAC/B;AAED,IAAA,IAAI,QAAQ,GAAA;QAER,OAAO,KAAK,CAAC,QAAQ,CAAC;KACzB;IACD,IAAI,QAAQ,CAAC,EAAW,EAAA;QAEpB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,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;AAC7C,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;AAErC,QAAA,IAAI,CAAC,GAAG,IAAIA,aAAO,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AACvD,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS;AACrC,YAAA,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAErB,QAAA,IAAI,CAAC,MAAM,CAACE,kBAAU,CAAC,MAAM,CAAC,CAAC;KAClC;AAES,IAAA,gBAAgB,CAAC,CAAU,EAAA;QAEjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS;AACtC,YAAA,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAE1B,QAAA,IAAI,CAAC,MAAM,CAACA,kBAAU,CAAC,QAAQ,CAAC,CAAC;AACjC,QAAA,OAAO,IAAI,CAAC;KACf;;IAGD,EAAE,GAAA;QAEE,KAAK,CAAC,EAAE,EAAE,CAAC;AACX,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS;YACtC,CAAC,CAAC,EAAE,EAAE,CAAC;AAEX,QAAA,OAAO,IAAI,CAAC;KACf;IACD,iBAAiB,GAAA;QAEb,KAAK,CAAC,iBAAiB,EAAE,CAAC;AAC1B,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,SAAS;YACtC,CAAC,CAAC,iBAAiB,EAAE,CAAC;AAC1B,QAAA,OAAO,IAAI,CAAC;KACf;AAES,IAAA,iBAAiB,CAAC,CAAU,EAAA;AAElC,QAAA,OAAO,IAAI,CAAC;KACf;AACD;;;;AAIG;IACH,WAAW,CAAC,WAAmB,EAAE,QAA2B,EAAA;AAExD,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EACjC;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;;AAGtB,YAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACnC,YAAA,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1C,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AACjF,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,YAAA,OAAO,SAAS,CAAC;SACpB;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAGD,IAAA,IAAI,YAAY,GAAA;QAEZ,IAAI,IAAI,CAAC,aAAa;YAClB,OAAO,IAAI,CAAC,aAAa,CAAC;QAC9B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;AAGD,IAAA,IAAY,YAAY,GAAA;QAEpB,IAAI,IAAI,CAAC,aAAa;YAClB,OAAO,IAAI,CAAC,aAAa,CAAC;QAC9B,IAAI,CAAC,cAAc,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IAEO,cAAc,GAAA;AAElB,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;QAE7C,IAAI,OAAO,GAAc,EAAE,CAAC;QAC5B,IAAI,SAAS,GAAqB,EAAE,CAAC;AAErC,QAAA,MAAM,UAAU,GAAG,CAAC,GAAc,EAAE,OAAgB,KAAI;AAEpD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;gBACI,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,gBAAA,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACxB,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAChB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC;AAC/B,oBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACvB;AACL,SAAC,CAAC;AAEF,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EACzC;AACI,YAAA,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACzB,YAAA,IAAI,QAAQ,GAAG,IAAIwB,mBAAa,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAClD,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAC3E,YAAA,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO,CAAC,QAAQ,CAAC,CAAC;AAClB,YAAA,SAAS,CAAC,IAAI,CAAC,IAAIF,oBAAc,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;YAE5D,IAAI,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAE9C,YAAA,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC;AAC1B,YAAA,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAEzB,YAAA,IAAI,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC;YAC/B,KAAK,IAAI,OAAO,IAAI,QAAQ;AACxB,gBAAA,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;SACpC;QAED,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAChE,IAAI,CAAC,aAAa,GAAGoB,mBAAoB,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;AAC3E,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AACpC,QAAA,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;KAC7C;IAED,kBAAkB,GAAA;QAEd,IAAI,IAAI,CAAC,aAAa;AAClB,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,IAAI,CAAC,aAAa;AAClB,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;KAClC;IAED,SAAS,GAAA;QAEL,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,QAAA,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC;KAC5B;AAED,IAAA,cAAc,CAAC,UAAA,GAAyB,UAAU,CAAC,SAAS,EAAA;AAExD,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,EACvC;AACI,YAAA,OAAO,IAAIC,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;SAC9F;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,UAAU,EAC7C;AACI,YAAA,OAAO,IAAInC,cAAQ,EAAE,CAAC,GAAG,CACrB,IAAImC,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EACnF,IAAIC,UAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CACpF,CAAC;SACL;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,QAAQ,EAC3C;AACI,YAAA,IAAI,IAAI,GAAG,IAAIA,UAAI,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;SACf;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,KAAK,EACxC;AACI,YAAA,OAAO,IAAID,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;SAChF;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,EAC5C;AACI,YAAA,IAAI,IAAI,GAAG,IAAIC,UAAI,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;YAC1B,OAAO,IAAIpC,cAAQ,EAAE,CAAC,GAAG,CACrB,IAAImC,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EACnF,IAAI,CACP,CAAC;SACL;KACJ;IAED,gBAAgB,CAAC,UAAsB,EAAE,GAAa,EAAA;QAElD,eAAe,CAAC,GAAG,CAAC,CAAC;QACrB,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACvB,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,EACvC;YACI,IAAI,CAAC,GAAG,GAAmB,CAAC;AAC5B,YAAA,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;YAC/B,CAAC,CAAC,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC/D;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,UAAU,EAC7C;AACI,YAAA,OAAO,GAAG,CAAC,GAAG,CACV,IAAIA,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EACnF,IAAIC,UAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CACpF,CAAC;SACL;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,QAAQ,EAC3C;YACI,IAAI,IAAI,GAAG,GAAW,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;AAClC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;SACrC;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,EAC5C;AACI,YAAA,IAAI,IAAI,GAAG,IAAIA,UAAI,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;YAC1B,OAAO,GAAG,CAAC,GAAG,CACV,IAAID,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EACnF,IAAI,CACP,CAAC;SACL;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,KAAK,EACxC;YACI,IAAI,CAAC,GAAG,GAAmB,CAAC;AAC5B,YAAA,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;YAC/B,CAAC,CAAC,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;SACjD;KACJ;AAED;;AAEE;AACF,IAAA,wBAAwB,CAAC,IAAgB,EAAE,GAAa,EAAE,QAAmB,EAAA;AAEzE,QAAA,IAAI,IAAI,KAAK,UAAU,CAAC,SAAS,IAAI,IAAI,KAAK,UAAU,CAAC,KAAK,EAC9D;YACI,IAAI,IAAI,GAAG,GAAmB,CAAC;YAC/B,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAClE;AACI,aAAA,IAAI,IAAI,KAAK,UAAU,CAAC,UAAU,EACvC;AACI,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAC5C;AACI,gBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EACf;oBACI,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAiB,CAAC;oBACxC,CAAC,CAAC,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBAC/D;qBAED;oBACI,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAS,CAAC;oBACnC,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBACxE;aACJ;SACJ;AACI,aAAA,IAAI,IAAI,KAAK,UAAU,CAAC,QAAQ,EACrC;YACI,IAAI,IAAI,GAAG,GAAW,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;SACrC;KACJ;AAES,IAAA,SAAS,CAAC,IAAc,EAAA;AAE9B,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,GAAG;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KACrC;AACD,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,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KACtC;CACJ,CAAA;AA3YY,MAAM,GAAA,QAAA,GAAA,UAAA,CAAA;IADlB,OAAO;AACK,CAAA,EAAA,MAAM,CA2YlB;;ACtZD;;AAEG;AACG,SAAU,aAAa,CAAC,EAAS,EAAA;AAEnC,IAAA,IAAI,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;IAEjB,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;IAEjC,IAAI,EAAE,YAAYV,cAAM;AACpB,QAAA,EAAE,GAAGO,wBAAsB,CAAC,EAAE,CAAC,CAAC;AAEpC,IAAA,IAAI,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACrD,IAAA,IAAI,WAAW,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;IAC9B,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACjF,IAAA,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAElC,IAAA,IAAI,OAAO,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACnD,IAAA,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AAEzB,IAAA,IAAI,UAAU,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;;AAGrC,IAAA,IAAI,KAAK,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAYT,YAAI,CAAC,CAAC;AAGxD,IAAA,KAAK,IAAI,CAAC,IAAI,KAAK,EACnB;AACI,QAAA,IAAI,MAAM,GAAG,IAAIG,gBAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,GAAG;YAAE,SAAS;QAEnB,IAAI,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;AAClB,QAAA,IAAI,CAAC,GAAG,IAAIrC,aAAO,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEzC,QAAA,IAAI,GAAG,GAAG,IAAIC,aAAO,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC1D,QAAA,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AACrB,QAAA,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACxB;AAED,IAAA,OAAO,UAAU,CAAC;AACtB;;AClDA;AACA,IAAY,aAyCX,CAAA;AAzCD,CAAA,UAAY,aAAa,EAAA;AAErB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,WAAmB,CAAA;AACnB,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;AAC3B,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,WAAmB,CAAA;AACnB,IAAA,aAAA,CAAA,KAAA,CAAA,GAAA,UAAgB,CAAA;AAChB,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,cAA6B,CAAA;AAC7B,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,YAAsB,CAAA;AACtB;;AAEG;AACH,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AACvB,IAAA,aAAA,CAAA,eAAA,CAAA,GAAA,eAA+B,CAAA;AAC/B;;AAEG;AACH,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;AAC3B,IAAA,aAAA,CAAA,UAAA,CAAA,GAAA,aAAwB,CAAA;AACxB,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,cAA6B,CAAA;AAC7B,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAA2B,CAAA;AAC3B,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC,CAAA;AACnC,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,aAAA,CAAA,cAAA,CAAA,GAAA,cAA6B,CAAA;AAC7B,IAAA,aAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,aAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC,CAAA;AACrC,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC,CAAA;AACnC,IAAA,aAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC,CAAA;AACnC,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,aAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AAC3B,CAAC,EAzCW,aAAa,KAAb,aAAa,GAyCxB,EAAA,CAAA,CAAA;;ACpCD;AACgB,SAAA,kBAAkB,CAAC,IAAc,EAAE,WAA+B,EAAA;IAE9E,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;IACnD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;AACrD,IAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC;IACzD,KAAK,IAAI,CAAC,IAAI,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,EACnD;AACI,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;KACtB;IACD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;AACnD,IAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AACrC,IAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AACpC,IAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;IAExC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACzC,IAAA,KAAK,IAAI,CAAC,IAAI,WAAW,CAAC,SAAS;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAElB,IAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AACnC,IAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACvC,IAAA,KAAK,IAAI,CAAC,IAAI,WAAW,CAAC,OAAO,EACjC;QACI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACpB;AACL,CAAC;AAED;SACgB,wBAAwB,CAAC,IAAc,EAAE,WAA+B,EAAE,GAAW,EAAA;IAEjG,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAClD,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACrD,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/C,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC7C,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/C,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/C,WAAW,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACjD,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACnD,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAEvD,IAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACxB,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACjD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;AACI,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACvB,QAAA,IAAI,GAAG,GAAG,CAAC,EACX;YACI,IAAI,CAAC,IAAI,EAAE,CAAC;SACf;AACD,QAAA,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;KACxD;IAED,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAClD,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACpD,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACpD,WAAW,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACrD,IAAA,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACvC,IAAA,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACtC,IAAA,WAAW,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAE1C,IAAA,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACpB,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAE9C,IAAA,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACrC,IAAA,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAEpC,IAAA,IAAI,GAAG,IAAI,CAAC,EACZ;AACI,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACxB,QAAA,WAAW,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;AACI,YAAA,IAAI,CAAC,GAAqB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACnB,YAAA,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC/B;KACJ;AACL,CAAC;AAEe,SAAA,2BAA2B,CAAC,IAAc,EAAE,SAAwB,EAAA;AAEhF,IAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC7B,IAAA,KAAK,IAAI,IAAI,IAAI,SAAS,EAC1B;AACI,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9B,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,EAC3B;AACI,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvB,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC/B;KACJ;AACL,CAAC;AACe,SAAA,2BAA2B,CAAC,IAAc,EAAE,SAAwB,EAAA;AAEhF,IAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC7B,IAAA,KAAK,IAAI,IAAI,IAAI,SAAS,EAC1B;QACI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EACvB;YACI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SACrB;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;KAC/B;AACL,CAAC;AAED;SACgB,iCAAiC,CAAC,IAAc,EAAE,IAAmB,EAAE,GAAW,EAAA;AAE9F,IAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAChB,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAE1B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;AACI,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,EAAc,CAAC;AACzC,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,GAAgB;YACjB,IAAI;YACJ,GAAG;AACH,YAAA,KAAK,EAAE,EAAE;SACZ,CAAC;AACF,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAE9B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAClC;AACI,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACxB,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACzB,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC1B,YAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3B,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7B,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC5B,YAAA,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;gBACT,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;AAC9F,aAAA,CAAC,CAAC;SACN;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAChB;AACL,CAAC;AACD;SACgB,iCAAiC,CAAC,IAAc,EAAE,IAAmB,EAAE,GAAW,EAAA;AAE9F,IAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAChB,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAE1B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;AACI,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,IAAI,GAAgB,EAAE,CAAC;AAC3B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAClC;AACI,YAAA,IAAI,EAAE,GAAG,IAAID,aAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC9C,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;SAC1B;AACD,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACtB,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC1B,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3B,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7B,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC;YACN,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE;AAC1F,SAAA,CAAC,CAAC;KACN;AACL;;AC1LO,IAAe,IAAI,GAAnB,MAAe,IAAK,SAAQ,MAAM,CAAA;AAAlC,IAAA,WAAA,GAAA;;AAMO,QAAA,IAAA,CAAA,IAAI,GAAkB,aAAa,CAAC,GAAG,CAAC;KAgErD;AA/DG,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;IACD,IAAI,MAAM,CAAC,CAAS,EAAA;AAEhB,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EACtB;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YACjB,IAAI,CAAC,MAAM,EAAE,CAAC;SACjB;KACJ;AAED,IAAA,IAAI,IAAI,GAAA;QAEJ,OAAO,IAAI,CAAC,IAAI,CAAC;KACpB;IACD,IAAI,IAAI,CAAC,CAAgB,EAAA;AAErB,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,EACnB;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;SACjB;KACJ;IAED,KAAK,GAAA;AAED,QAAA,IAAI,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;AACxB,QAAA,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAC7B,QAAA,OAAO,GAAG,CAAC;KACd;AACS,IAAA,SAAS,CAAC,IAAc,EAAA;AAE9B,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACtB,QAAA,IAAI,GAAG,IAAI,CAAC,EACZ;;AAEI,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;SACvB;aAED;AACI,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACnC,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACtC;AACD,QAAA,IAAI,GAAG,IAAI,CAAC,EACZ;AACI,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACpD;KAEJ;AACD,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,OAAO,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;KAClD;CACJ,CAAA;AApEe,UAAA,CAAA;IAAX,UAAU;AAAe,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,KAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACd,UAAA,CAAA;IAAX,UAAU;AAAe,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,KAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAEd,UAAA,CAAA;IAAX,UAAU;AAA6B,CAAA,EAAA,IAAA,CAAA,SAAA,EAAA,mBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AALtB,IAAI,GAAA,UAAA,CAAA;IADzB,OAAO;AACc,CAAA,EAAA,IAAI,CAsEzB;;;AClED,IAAY,aAeX,CAAA;AAfD,CAAA,UAAY,aAAa,EAAA;;AAGrB,IAAA,aAAA,CAAA,aAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;;AAEP,IAAA,aAAA,CAAA,aAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;;AAEP,IAAA,aAAA,CAAA,aAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;;AAEP,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;;AAER,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;;AAER,IAAA,aAAA,CAAA,aAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAM,CAAA;AACN,IAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACf,CAAC,EAfW,aAAa,KAAb,aAAa,GAexB,EAAA,CAAA,CAAA,CAAA;AAED,IAAI,WAAW,GAAG,IAAIoC,cAAM,EAAE,CAAC;AAC/B,IAAI,WAAW,GAAG,IAAIA,cAAM,EAAE,CAAC;AAGxB,IAAM,YAAY,GAAA,cAAA,GAAlB,MAAM,YAAa,SAAQ,IAAI,CAAA;AAGlC,IAAA,WAAA,GAAA;AAEI,QAAA,KAAK,EAAE,CAAC;QAHJ,IAAO,CAAA,OAAA,GAAW,CAAC,CAAC;AAIxB,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;KACnB;AACD,IAAA,OAAO,aAAa,CAAC,MAAc,EAAE,MAAc,EAAE,IAAmB,EAAA;AAEpE,QAAA,IAAI,KAAK,GAAG,IAAI,cAAY,EAAE,CAAC;AAC/B,QAAA,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;AACtB,QAAA,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;AACvB,QAAA,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;AAClB,QAAA,OAAO,KAAK,CAAC;KAChB;IAGD,IAAI,MAAM,CAAC,CAAS,EAAA;AAEhB,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,EACtB;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YACjB,IAAI,CAAC,MAAM,EAAE,CAAC;SACjB;KACJ;AACD,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,KAAK,CAAC,MAAM,CAAC;KACvB;IACD,IAAI,MAAM,CAAC,CAAS,EAAA;AAEhB,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,CAAC,EACtB;AACI,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,YAAA,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;SACpB;KACJ;AACD,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;AACD,IAAA,IAAI,WAAW,GAAA;QAEX,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC3D;AAED;;AAEE;AACF,IAAA,IAAI,gBAAgB,GAAA;AAEhB,QAAA,OAAO,IAAI,OAAO,CAAC,IAAIpC,aAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;KAC3H;AAGD,IAAA,IAAI,YAAY,GAAA;QAEZ,IAAI,IAAI,CAAC,aAAa;YAClB,OAAO,IAAI,CAAC,aAAa,CAAC;AAC9B,QAAA,IAAI,CAAC,aAAa,GAAG,wBAAwB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACxE,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;AAGD,IAAA,IAAY,YAAY,GAAA;QAEpB,IAAI,IAAI,CAAC,aAAa;YAClB,OAAO,IAAI,CAAC,aAAa,CAAC;AAE9B,QAAA,IAAI,CAAC,aAAa,GAAG,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACzE,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IACD,aAAa,GAAA;AAET,QAAA,IAAI,GAAG,GAAG,IAAIoC,cAAM,CAAC,IAAIpC,aAAO,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AAClD,QAAA,IAAI,GAAG,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC;AAC9B,QAAA,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,QAAA,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;KACjD;AACD,IAAA,mBAAmB,CACf,QAAwB,EACxB,SAAkB,EAClB,SAAkB,EAClB,SAAmB,EAAA;QAGnB,IAAI,GAAG,GAAc,EAAE,CAAC;AACxB,QAAA,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACjC,QAAA,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;AAC/B,QAAA,WAAW,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACjC,QAAA,WAAW,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC;QAC/B,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAEzF,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,EACxC;AACI,YAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;SACjF;AACD,QAAA,OAAO,GAAG,CAAC;KACd;IACD,KAAK,CAAC,UAAmB,IAAI,EAAA;AAEzB,QAAA,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO;YAAE,OAAO;AACrC,QAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAC7D;AACI,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAc,CAAC;AAC/C,YAAA,EAAE,CAAC,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC;AAC5B,YAAA,EAAE,CAAC,iBAAiB,GAAG,IAAI,CAAC;SAC/B;KACJ;AAED,IAAA,cAAc,CAAC,UAAsB,EAAA;AAEjC,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,CAAC;KACnD;AAEO,IAAA,uBAAuB,CAAC,UAAsB,EAAA;AAElD,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS;AACnC,YAAA,OAAO,IAAI8C,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;aAC1F,IAAI,UAAU,KAAK,UAAU,CAAC,YAAY,IAAI,UAAU,KAAK,UAAU,CAAC,WAAW;AACpF,YAAA,OAAO;;;AAGP,YAAA,OAAO,IAAIC,UAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;KAChG;IAED,gBAAgB,CAAC,IAAgB,EAAE,GAAa,EAAA;QAE5C,eAAe,CAAC,GAAG,CAAC,CAAC;QACrB,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;KAC/C;IAED,wBAAwB,CAAC,IAAgB,EAAE,GAAa,EAAA;AAEpD,QAAA,IAAI,IAAI,KAAK,UAAU,CAAC,SAAS,EACjC;YACI,IAAI,CAAC,GAAG,GAAmB,CAAC;YAC5B,CAAC,CAAC,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC/D;aAED;YACI,IAAI,IAAI,GAAG,GAAW,CAAC;YACvB,IAAI,IAAI,KAAK,UAAU,CAAC,YAAY,IAAI,IAAI,KAAK,UAAU,CAAC,WAAW;AACnE,gBAAA,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAEvC,eAAS,EAAE,IAAI,CAAC,CAAC;;gBAEtF,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC5E;KACJ;IAED,SAAS,GAAA;QAEL,IAAI,IAAI,CAAC,aAAa;AAClB,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,IAAI,CAAC,aAAa;AAClB,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAC/B,QAAA,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC;KAC5B;AAES,IAAA,SAAS,CAAC,IAAc,EAAA;AAE9B,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3B,QAAA,IAAI,GAAG,IAAI,CAAC,EACZ;;AAEI,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACnC,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;SACtC;aAED;AACI,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;SAC3B;KACJ;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,OAAO,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACzB;CACJ,CAAA;AAnMY,YAAY,GAAA,cAAA,GAAA,UAAA,CAAA;IADxB,OAAO;AACK,CAAA,EAAA,YAAY,CAmMxB,CAAA;AAED,IAAI,KAAK,GAAG,IAAI,GAAG,EAAkC,CAAC;AACtD,IAAI,EAAE,GAAG,IAAIP,aAAO,EAAE,CAAC;AACvB,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACd,SAAA,wBAAwB,CAAC,MAAc,EAAE,MAAc,EAAA;AAEnE,IAAA,IAAI,GAAG,GAAG,CAAA,EAAG,MAAM,CAAI,CAAA,EAAA,MAAM,EAAE,CAAC;AAChC,IAAA,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AACd,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC1B,IAAA,IAAI,GAAG,GAAG,IAAI+C,4BAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACnE,IAAA,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACrB,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;AAChC,IAAA,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpB,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAED,IAAI,MAAM,GAAG,IAAI,GAAG,EAA0B,CAAC;AAC/B,SAAA,wBAAwB,CAAC,MAAc,EAAE,MAAc,EAAA;AAEnE,IAAA,IAAI,GAAG,GAAG,CAAA,EAAG,MAAM,CAAI,CAAA,EAAA,MAAM,EAAE,CAAC;AAChC,IAAA,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACf,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE3B,IAAA,IAAI,EAAE,GAAG,IAAIC,WAAM,EAAE,CAAC;IACtB,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAE3D,IAAI,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC1B,IAAA,IAAI,GAAG,GAAG,IAAIxB,oBAAc,EAAE,CAAC;IAC/B,IAAI,MAAM,GAAa,EAAE,CAAC;AAC1B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;AACI,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACf,QAAA,IAAI,EAAE,GAAG,GAAG,CAACZ,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;KAC9C;AAED,IAAA,GAAG,CAAC,YAAY,CAAC,UAAU,EAAE,IAAIqC,4BAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACpE,IAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACrB,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAED,UAAU,CAAC,mBAAmB,CAAC,YAAY,EAAE,WAAW,CAAC;;ACjQlD,MAAM,MAAM,GAAG,GAAG,CAAC;AAEV,SAAA,aAAa,CAAC,GAAmB,EAAE,EAAS,EAAE,GAAY,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,GAAG,KAAK,EAAA;AAE1G,IAAA,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,GAAG;AAClE,QAAA,OAAO,IAAI,CAAC;AAEhB,IAAA,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC;AAChC,IAAA,IAAI,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;AACxB,IAAA,IAAI,GAAiB,CAAC;AACtB,IAAA,IAAI,GAAiB,CAAC;AACtB,IAAA,IAAI,GAAiB,CAAC;AACtB,IAAA,IAAI,IAAkB,CAAC;AACvB,IAAA,IAAI,OAAqB,CAAC;AAC1B,IAAA,IAAI,IAAkB,CAAC;AACvB,IAAA,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;AACI,QAAA,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;QAC1B,IAAI,EAAE,CAAC,IAAI,KAAK,aAAa,CAAC,GAAG,EACjC;AACI,YAAA,IAAI,GAAG;gBACH,IAAI,GAAG,EAAE,CAAC;;gBAEV,GAAG,GAAG,EAAE,CAAC;SAChB;AACI,aAAA,IAAI,EAAE,CAAC,IAAI,KAAK,aAAa,CAAC,GAAG;YAClC,GAAG,GAAG,EAAE,CAAC;AACR,aAAA,IAAI,EAAE,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI;YACnC,IAAI,GAAG,EAAE,CAAC;AACT,aAAA,IAAI,EAAE,CAAC,IAAI,KAAK,aAAa,CAAC,OAAO;YACtC,OAAO,GAAG,EAAE,CAAC;;YAEb,GAAG,GAAG,EAAE,CAAC;KAChB;AACD,IAAA,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAEtB,IAAA,IAAI,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IACrC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IAElC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC;AACpC,QAAA,OAAO,KAAK,CAAC;AAEjB,IAAA,IAAI,GAAG,GAAG,IAAIlD,aAAO,EAAE,CAAC;AAExB,IAAA,IAAI,GAAG;AACH,QAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACpB,SAAA,IAAI,GAAG;AACR,QAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAErB,SAAA,IAAI,IAAI;AACJ,QAAA,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAE9B,IAAA,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAIA,aAAO,CAAC,CAAC,CAAC;AAEvD,IAAA,IAAI,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,EAC5B;QACI,IAAI,GAAG,EACP;AACI,YAAA,IAAI,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpD,YAAA,IAAI,GAAG,GAAG,IAAIoC,cAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AAClD,YAAA,OAAO,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SAClF;KACJ;SAED;QACI,IAAI,GAAG,EACP;AACI,YAAA,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AACjB,YAAA,IAAI,IAAI;AACJ,gBAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpB,YAAA,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,IAAG;AAEhB,gBAAA,IAAI,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACnD,gBAAA,IAAI,GAAG,GAAG,IAAIA,cAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AAClD,gBAAA,IAAI,QAAQ,IAAI,CAAC,uBAAuB,CAAC,cAAc;oBACnD,OAAO,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;;oBAE/E,OAAO,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AACtF,aAAC,CAAC;AACE,gBAAA,OAAO,KAAK,CAAC;SACpB;QACD,IAAI,OAAO,EACX;AACI,YAAA,IAAI,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxD,YAAA,IAAI,GAAG,GAAG,IAAIA,cAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACtD,YAAA,IAAI,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;AACtE,gBAAA,OAAO,KAAK,CAAC;SACpB;QAED,IAAI,GAAG,EACP;AACI,YAAA,IAAI,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACvE,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;AACzE,YAAA,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;YAE3C,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9B,YAAA,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YACvC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAErB,YAAA,IAAI,IAAI,GAAG,IAAIC,gBAAQ,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAEnD,YAAA,IAAI,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AACtD,YAAA,IAAI,SAAS,GAAG,CAAC,KAAK,SAAS,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/D,gBAAA,OAAO,KAAK,CAAC;SACpB;QAED,IAAI,IAAI,EACR;AACI,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjD,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YAEjE,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1C,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7B,YAAA,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACtC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,EAAE,GAAG,IAAIH,YAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1B,IAAI,EAAE,GAAG,IAAIA,YAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC1B,IAAI,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;AACtF,gBAAA,OAAO,KAAK,CAAC;SACpB;KAEJ;AACD,IAAA,OAAO,IAAI,CAAC;AAChB,CAAC;AAaD;SACgB,sBAAsB,CAAC,EAAS,EAAE,oBAAwC,EAAS,EAAA;AAE/F,IAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC3C,IAAA,IAAI,UAAU,GAAG,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC;IACjD,IAAI,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAa,CAAC;AAC/C,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;AACI,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACf,QAAA,IAAI,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAElD,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EACvC;AACI,YAAA,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,gBAAA,iBAAiB,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;;AAEvC,gBAAA,iBAAiB,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;SAC5C;aAED;AACI,YAAA,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,gBAAA,iBAAiB,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;;AAExC,gBAAA,iBAAiB,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;SAC9C;KACJ;AAED,IAAA,OAAO,iBAAiB,CAAC;AAC7B,CAAC;SACe,iBAAiB,CAAC,KAAoB,EAAE,KAAY,EAAE,GAAY,EAAA;;AAG9E,IAAA,OAAO,IAAI,CAAC;AAChB,CAAC;SAEe,WAAW,CAAC,KAAa,EAAE,EAAS,EAAE,GAAa,EAAA;AAE/D,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,KAAK,CAAC;AAErC,IAAA,IAAI,KAAK,CAAC,CAAC,CAAC,YAAY,YAAY,EACpC;AACI,QAAA,OAAO,aAAa,CAAC,KAAuB,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;KACvE;SAED;AACI,QAAA,OAAO,iBAAiB,CAAC,KAAsB,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;KAC1E;AACL,CAAC;AAED;AACgB,SAAA,iCAAiC,CAAC,EAAS,EAAE,cAAkC,EAAA;AAE3F,IAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC3C,IAAA,IAAI,SAAS,GAAG,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC;IAChD,IAAI,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAa,CAAC;AAC/C,IAAA,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AACrB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;AACI,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACf,QAAA,IAAI,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAElD,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EACvC;AACI,YAAA,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,gBAAA,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;;AAEpC,gBAAA,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;SACzC;aAED;AACI,YAAA,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;AACV,gBAAA,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;;AAErC,gBAAA,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;SAC3C;KACJ;AACD,IAAA,IAAI,KAAK,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;AAC/B,IAAA,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI;AACnD,QAAA,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC7D,SAAA,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC;QACnB,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC;AACxE;;ACzOA,MAAM,gBAAgB,CAAA;IAElB,aAAa,CAAC,QAA+B,EAAE,QAAkB,EAAE,MAAc,EAAE,MAAc,EAAE,MAAc,EAAA;QAE7G,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAEnC,OAAO;AACH,YAAA,IAAIpB,aAAO,CAAC,GAAG,EAAE,GAAG,CAAC;AACrB,YAAA,IAAIA,aAAO,CAAC,GAAG,EAAE,GAAG,CAAC;AACrB,YAAA,IAAIA,aAAO,CAAC,GAAG,EAAE,GAAG,CAAC;SACxB,CAAC;KACL;IACD,kBAAkB,CAAC,QAA+B,EAAE,QAAkB,EAAE,MAAc,EAAE,MAAc,EAAE,MAAc,EAAE,MAAc,EAAA;QAElI,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACnC,QAAA,IAAI,GAAc,CAAC;QACnB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,EAC9B;AACI,YAAA,GAAG,GAAG;AACF,gBAAA,IAAIA,aAAO,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC;AACzB,gBAAA,IAAIA,aAAO,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC;AACzB,gBAAA,IAAIA,aAAO,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC;AACzB,gBAAA,IAAIA,aAAO,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC;aAC5B,CAAC;SAEL;aAED;AACI,YAAA,GAAG,GAAG;AACF,gBAAA,IAAIA,aAAO,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC;AACzB,gBAAA,IAAIA,aAAO,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC;AACzB,gBAAA,IAAIA,aAAO,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC;AACzB,gBAAA,IAAIA,aAAO,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC;aAC5B,CAAC;SACL;AACD,QAAA,OAAO,GAAG,CAAC;KACd;AACJ,CAAA;AAED,MAAM,iBAAkB,SAAQ,gBAAgB,CAAA;IAE5C,aAAa,CAAC,QAA+B,EAAE,QAAkB,EAAE,MAAc,EAAE,MAAc,EAAE,MAAc,EAAA;QAE7G,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/B,IAAI,GAAG,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAEnC,OAAO;AACH,YAAA,IAAIA,aAAO,CAAC,GAAG,EAAE,GAAG,CAAC;AACrB,YAAA,IAAIA,aAAO,CAAC,GAAG,EAAE,GAAG,CAAC;AACrB,YAAA,IAAIA,aAAO,CAAC,GAAG,EAAE,GAAG,CAAC;SACxB,CAAC;KACL;AACJ,CAAA;AAEM,IAAI,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAC9C,IAAI,iBAAiB,GAAG,IAAI,iBAAiB,EAAE;;AC/D/C,MAAM,wCAAwC,GAA+B,EAAE,CAAC;AACjF,SAAU,gBAAgB,CAAC,IAAa,EAAA;IAE1C,KAAK,IAAI,CAAC,IAAI,wCAAwC;QAClD,CAAC,CAAC,IAAI,CAAC,CAAC;AAChB;;ACnBA,IAAY,SAKX,CAAA;AALD,CAAA,UAAY,SAAS,EAAA;AAEjB,IAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACT,IAAA,SAAA,CAAA,SAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;IACZ,SAAU,CAAA,SAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA,CAAA;AACd,CAAC,EALW,SAAS,KAAT,SAAS,GAKpB,EAAA,CAAA,CAAA,CAAA;AAED;AACA,IAAY,SAQX,CAAA;AARD,CAAA,UAAY,SAAS,EAAA;;AAGjB,IAAA,SAAA,CAAA,SAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;;AAEZ,IAAA,SAAA,CAAA,SAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;;AAEX,IAAA,SAAA,CAAA,SAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAe,CAAA;AACnB,CAAC,EARW,SAAS,KAAT,SAAS,GAQpB,EAAA,CAAA,CAAA,CAAA;AAED;AACA,IAAY,aAKX,CAAA;AALD,CAAA,UAAY,aAAa,EAAA;AAErB,IAAA,aAAA,CAAA,aAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;AACZ,IAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;IACX,aAAa,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAA,CAAA;AACjB,CAAC,EALW,aAAa,KAAb,aAAa,GAKxB,EAAA,CAAA,CAAA,CAAA;AAED,IAAY,YAOX,CAAA;AAPD,CAAA,UAAY,YAAY,EAAA;AAEpB,IAAA,YAAA,CAAA,YAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,YAAA,CAAA,YAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACT,IAAA,YAAA,CAAA,YAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAM,CAAA;AACN,IAAA,YAAA,CAAA,YAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,YAAA,CAAA,YAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACZ,CAAC,EAPW,YAAY,KAAZ,YAAY,GAOvB,EAAA,CAAA,CAAA,CAAA;AAED,IAAY,aASX,CAAA;AATD,CAAA,UAAY,aAAa,EAAA;AAErB,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,aAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,aAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,aAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,aAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,aAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACf,CAAC,EATW,aAAa,KAAb,aAAa,GASxB,EAAA,CAAA,CAAA;;MCzCY,eAAe,CAAA;;IAGxB,OAAO,SAAS,CAAC,IAAY,EAAA;QAEzB,OAAO;AACH,YAAA,IAAId,aAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;AACzB,YAAA,IAAIA,aAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;AACxB,YAAA,IAAIA,aAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AACvB,YAAA,IAAIA,aAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;AACxB,YAAA,IAAIA,aAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;SAC5B,CAAC;KACL;;AAED,IAAA,OAAO,cAAc,CAAC,UAAkB,EAAE,UAAkB,EAAA;QAExD,OAAO;;AAEH,YAAA,IAAIA,aAAO,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;AAC3B,YAAA,IAAIA,aAAO,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;;AAE3B,YAAA,IAAIA,aAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AAC1B,YAAA,IAAIA,aAAO,CAAC,UAAU,EAAE,CAAC,CAAC;;AAE1B,YAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,UAAU,CAAC;AAC1B,YAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,UAAU,CAAC;;AAG1B,YAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;AAC3B,YAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;SAC9B,CAAC;KACL;;IAED,OAAO,YAAY,CAAC,UAAkB,EAAA;QAElC,OAAO;AACH,YAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC;AAC3B,YAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,UAAU,CAAC;AAE1B,YAAA,IAAIA,aAAO,CAAC,UAAU,EAAE,CAAC,CAAC;AAC1B,YAAA,IAAIA,aAAO,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;SAC9B,CAAC;KACL;IACD,OAAO,cAAc,CAAC,UAAkB,EAAA;QAEpC,OAAO;AACH,YAAA,CAAC,IAAIA,aAAO,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC3B,IAAIA,aAAO,CAAC,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAChC,CAAC,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC;AAChC,gBAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAC3B,CAAC,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC;gBACnC,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;SACjC,CAAC;KACL;IAED,OAAO,WAAW,CAAC,IAAY,EAAA;QAE3B,OAAO;AACH,YAAA,IAAIA,aAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;AACxB,YAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,IAAI,CAAC;AACpB,YAAA,IAAIA,aAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;AACzB,YAAA,IAAIA,aAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;SAC3B,CAAC;KACL;IAED,OAAO,SAAS,CAAC,IAAY,EAAA;QAEzB,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACtB,YAAA,GAAG,CAAC,IAAI,CAAC,IAAIA,aAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AAC1E,QAAA,OAAO,GAAG,CAAC;KACd;IAED,OAAO,eAAe,CAAC,IAAY,EAAA;AAE/B,QAAA,OAAO,CAAC,IAAIA,aAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAIA,aAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,IAAIA,aAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,IAAIA,aAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;KACnH;IACD,OAAO,mBAAmB,CAAC,IAAY,EAAA;AAEnC,QAAA,OAAO,CAAC,IAAIA,aAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAIA,aAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,IAAIA,aAAO,EAAE,EAAE,IAAIA,aAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,IAAIA,aAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;KAClI;IAED,OAAO,YAAY,CAAC,IAAY,EAAA;QAE5B,OAAO;AACH,YAAA,IAAIA,aAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AACvB,YAAA,IAAIA,aAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;AACxB,YAAA,IAAIA,aAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;AACxB,YAAA,IAAIA,aAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;AACzB,YAAA,IAAIA,aAAO,CAAC,IAAI,EAAE,IAAI,CAAC;SAC1B,CAAC;KACL;IAED,OAAO,UAAU,CAAC,IAAY,EAAA;AAE1B,QAAA,IAAI,GAAG,GAAG;AACN,YAAA,IAAIA,aAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;AACxB,YAAA,IAAIA,aAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AACvB,YAAA,IAAIA,aAAO,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC;SAC9B,CAAC;QACF,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;AACtB,YAAA,GAAG,CAAC,IAAI,CAAC,IAAIA,aAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACtG,QAAA,OAAO,GAAG,CAAC;KACd;IAED,OAAO,MAAM,CAAC,IAAY,EAAA;QAEtB,OAAO;AACH,YAAA,IAAIA,aAAO,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;AACxB,YAAA,IAAIA,aAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;AACzB,YAAA,IAAIA,aAAO,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC;AACxB,YAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;AACrB,YAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,CAAC;AACjB,YAAA,IAAIA,aAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SACxB,CAAC;KACL;AAED,IAAA,OAAO,WAAW,CAAC,GAAW,EAAE,KAAa,EAAE,QAAmB,EAAA;AAE9D,QAAA,IAAI,QAAQ,KAAK,SAAS,CAAC,OAAO,EAClC;YACI,OAAO;gBACH,IAAIA,aAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;gBACnE,IAAIA,aAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;AACpE,gBAAA,IAAIA,aAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,GAAG,GAAG,CAAC,CAAC;gBAC3C,IAAIA,aAAO,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC;gBACjE,IAAIA,aAAO,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;aACrE,CAAC;SACL;AACI,aAAA,IAAI,QAAQ,KAAK,SAAS,CAAC,QAAQ;YACpC,OAAO;gBACH,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;gBACvE,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;AACtE,gBAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;gBACjD,IAAIA,aAAO,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;gBACrE,IAAIA,aAAO,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;aAEvE,CAAC;aAEN;AACI,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YAElC,OAAO;AACH,gBAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;AACjD,gBAAA,IAAIA,aAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,KAAK,GAAG,CAAC,CAAC;AAE/C,gBAAA,IAAIA,aAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;gBACzD,IAAIA,aAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;AAC1D,gBAAA,IAAIA,aAAO,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC;AACvD,gBAAA,IAAIA,aAAO,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;gBAExD,IAAIA,aAAO,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;AACvD,gBAAA,IAAIA,aAAO,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;gBACtD,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;gBACzD,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;aAC3D,CAAC;SACL;KACJ;;AAGD,IAAA,OAAO,eAAe,CAAC,GAAW,EAAE,KAAa,EAAE,OAAqB,EAAA;AAEpE,QAAA,IAAI,OAAO,KAAK,YAAY,CAAC,KAAK,EAClC;YACI,OAAO;gBACH,IAAIA,aAAO,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC5D,IAAIA,aAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;aAC9D,CAAC;SACL;AACI,aAAA,IAAI,OAAO,KAAK,YAAY,CAAC,IAAI,EACtC;YACI,OAAO;gBACH,IAAIA,aAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC5D,IAAIA,aAAO,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;aAC9D,CAAC;SACL;AACI,aAAA,IAAI,OAAO,KAAK,YAAY,CAAC,EAAE,EACpC;YACI,OAAO;gBACH,IAAIA,aAAO,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;gBAC1D,IAAIA,aAAO,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;aAC5D,CAAC;SACL;AACI,aAAA,IAAI,OAAO,KAAK,YAAY,CAAC,IAAI,EACtC;YACI,OAAO;gBACH,IAAIA,aAAO,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;gBAC1D,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;aAC5D,CAAC;SACL;KACJ;AAEJ;;ACrMD;AAIA,IAAY,MAOX,CAAA;AAPD,CAAA,UAAY,MAAM,EAAA;AAEd,IAAA,MAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,MAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,MAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,MAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,MAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACrB,CAAC,EAPW,MAAM,KAAN,MAAM,GAOjB,EAAA,CAAA,CAAA,CAAA;AAaM,MAAM,sBAAsB,GAAsB,EAAE,CAAC;AAEtD,SAAU,OAAO,CAAC,MAAsB,EAAA;IAE1C,KAAK,IAAI,CAAC,IAAI,sBAAsB;QAChC,CAAC,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAWM,MAAM,mCAAmC,GAAwD,EAAE,CAAC;AACrG,SAAU,oBAAoB,CAAC,MAKpC,EAAA;IAEG,KAAK,IAAI,CAAC,IAAI,mCAAmC;QAC7C,CAAC,CAAC,MAAM,CAAC,CAAC;IAEd,IAAI,OAAO,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAU,CAAC;IAC7C,IAAI,MAAM,CAAC,GAAG;AACV,QAAA,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACjG,IAAA,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AAC7C;;ACxDM,SAAU,MAAM,CAAC,EAAU,EAAE,EAAU,EAAE,IAAI,GAAG,IAAI,EAAA;IAEtD,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC;AACrC,CAAC;AAEe,SAAA,QAAQ,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;AAED;;;AAGG;AACa,SAAA,GAAG,CAAI,GAAQ,EAAE,OAAkC,EAAA;AAE/D,IAAA,IAAI,IAAI,GAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,SAAS,GAAG,CAAC,CAAC;AAClB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;AACI,QAAA,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,QAAA,IAAI,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EACrB;YACI,IAAI,GAAG,EAAE,CAAC;YACV,SAAS,GAAG,CAAC,CAAC;SACjB;KACJ;AACD,IAAA,OAAO,SAAS,CAAC;AACrB;;ACCA,IAAY,WAIX,CAAA;AAJD,CAAA,UAAY,WAAW,EAAA;AAEnB,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,cAAa,CAAA;AACb,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,cAAW,CAAA;AACf,CAAC,EAJW,WAAW,KAAX,WAAW,GAItB,EAAA,CAAA,CAAA;;ACjCwB,CAAC,aAAa,CAAC,QAAQ,EAAE,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,UAAU,EAAE;AAiHjI,IAAY,SAcX,CAAA;AAdD,CAAA,UAAY,SAAS,EAAA;AAEjB,IAAA,SAAA,CAAA,SAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,SAAA,CAAA,SAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACV,IAAA,SAAA,CAAA,SAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAe,CAAA;AACf,IAAA,SAAA,CAAA,SAAA,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAc,CAAA;AACd,IAAA,SAAA,CAAA,SAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa,CAAA;AACb,IAAA,SAAA,CAAA,SAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAkB,CAAA;AAClB,IAAA,SAAA,CAAA,SAAA,CAAA,oBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,oBAAsB,CAAA;AACtB,IAAA,SAAA,CAAA,SAAA,CAAA,0BAAA,CAAA,GAAA,CAAA,CAAA,GAAA,0BAA4B,CAAA;AAC5B,IAAA,SAAA,CAAA,SAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAkB,CAAA;AAClB,IAAA,SAAA,CAAA,SAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAe,CAAA;AACf,IAAA,SAAA,CAAA,SAAA,CAAA,mBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,mBAAsB,CAAA;AACtB,IAAA,SAAA,CAAA,SAAA,CAAA,iBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,iBAAoB,CAAA;AACxB,CAAC,EAdW,SAAS,KAAT,SAAS,GAcpB,EAAA,CAAA,CAAA,CAAA;AAED,IAAY,YAOX,CAAA;AAPD,CAAA,UAAY,YAAY,EAAA;AAEpB,IAAA,YAAA,CAAA,OAAA,CAAA,GAAA,GAAW,CAAA;AACX,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,IAAc,CAAA;AACd,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,IAAc,CAAA;AACd,IAAA,YAAA,CAAA,MAAA,CAAA,GAAA,IAAW,CAAA;AACX,IAAA,YAAA,CAAA,SAAA,CAAA,GAAA,IAAc,CAAA;AAClB,CAAC,EAPW,YAAY,KAAZ,YAAY,GAOvB,EAAA,CAAA,CAAA;;ACnDD;AACA,IAAY,WAIX,CAAA;AAJD,CAAA,UAAY,WAAW,EAAA;AAEnB,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;AACV,CAAC,EAJW,WAAW,KAAX,WAAW,GAItB,EAAA,CAAA,CAAA,CAAA;AAED,IAAY,YAKX,CAAA;AALD,CAAA,UAAY,YAAY,EAAA;AAEpB,IAAA,YAAA,CAAA,YAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,YAAA,CAAA,YAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACT,IAAA,YAAA,CAAA,YAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACX,CAAC,EALW,YAAY,KAAZ,YAAY,GAKvB,EAAA,CAAA,CAAA,CAAA;AACD,IAAY,WAKX,CAAA;AALD,CAAA,UAAY,WAAW,EAAA;AAEnB,IAAA,WAAA,CAAA,WAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACP,IAAA,WAAA,CAAA,WAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACV,IAAA,WAAA,CAAA,WAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACX,CAAC,EALW,WAAW,KAAX,WAAW,GAKtB,EAAA,CAAA,CAAA,CAAA;AACD;AACA,IAAY,WAOX,CAAA;AAPD,CAAA,UAAY,WAAW,EAAA;AAEnB,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,IAAW,CAAA;AACX,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,IAAY,CAAA;AACZ,IAAA,WAAA,CAAA,KAAA,CAAA,GAAA,IAAU,CAAA;AACV,IAAA,WAAA,CAAA,QAAA,CAAA,GAAA,IAAa,CAAA;AACb,IAAA,WAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACjB,CAAC,EAPW,WAAW,KAAX,WAAW,GAOtB,EAAA,CAAA,CAAA;;ACpHD,IAAY,iBAIX,CAAA;AAJD,CAAA,UAAY,iBAAiB,EAAA;AAEzB,IAAA,iBAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACX,IAAA,iBAAA,CAAA,iBAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACf,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,GAI5B,EAAA,CAAA,CAAA;;ACJD,IAAY,gBAMX,CAAA;AAND,CAAA,UAAY,gBAAgB,EAAA;AAExB,IAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,gBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,gBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AAC3B,CAAC,EANW,gBAAgB,KAAhB,gBAAgB,GAM3B,EAAA,CAAA,CAAA;;ACND,IAAY,WAKX,CAAA;AALD,CAAA,UAAY,WAAW,EAAA;AAEnB,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,GAAW,CAAA;AACX,IAAA,WAAA,CAAA,OAAA,CAAA,GAAA,GAAW,CAAA;AACX,IAAA,WAAA,CAAA,KAAA,CAAA,GAAA,GAAS,CAAA;AACb,CAAC,EALW,WAAW,KAAX,WAAW,GAKtB,EAAA,CAAA,CAAA;;ACJD,IAAY,SAIX,CAAA;AAJD,CAAA,UAAY,SAAS,EAAA;AAEjB,IAAA,SAAA,CAAA,GAAA,CAAA,GAAA,GAAO,CAAA;AACP,IAAA,SAAA,CAAA,GAAA,CAAA,GAAA,GAAO,CAAA;AACX,CAAC,EAJW,SAAS,KAAT,SAAS,GAIpB,EAAA,CAAA,CAAA;;ACPD;;;;;AAKG;AACH,IAAY,mBAKX,CAAA;AALD,CAAA,UAAY,mBAAmB,EAAA;AAE3B,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,KAAc,CAAA;AACd,IAAA,mBAAA,CAAA,WAAA,CAAA,GAAA,QAAoB,CAAA;IACpB,mBAAiB,CAAA,WAAA,CAAA,GAAA,KAAA,CAAA;AACrB,CAAC,EALW,mBAAmB,KAAnB,mBAAmB,GAK9B,EAAA,CAAA,CAAA,CAAA;AACD;;;;;AAKG;AAEH,IAAY,aASX,CAAA;AATD,CAAA,UAAY,aAAa,EAAA;AAErB,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,aAAA,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACT,IAAA,aAAA,CAAA,aAAA,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAM,CAAA;AACN,IAAA,aAAA,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACT,IAAA,aAAA,CAAA,aAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACV,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,aAAA,CAAA,aAAA,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAa,CAAA;AACjB,CAAC,EATW,aAAa,KAAb,aAAa,GASxB,EAAA,CAAA,CAAA,CAAA;AAED,IAAY,gBAQX,CAAA;AARD,CAAA,UAAY,gBAAgB,EAAA;AAExB,IAAA,gBAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,gBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB,CAAA;AACzB,IAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,gBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,gBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,gBAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACf,CAAC,EARW,gBAAgB,KAAhB,gBAAgB,GAQ3B,EAAA,CAAA,CAAA,CAAA;AAED,IAAY,SAMX,CAAA;AAND,CAAA,UAAY,SAAS,EAAA;AAEjB,IAAA,SAAA,CAAA,SAAA,CAAA,GAAA,GAAa,CAAA;AACb,IAAA,SAAA,CAAA,YAAA,CAAA,GAAA,GAAgB,CAAA;AAChB,IAAA,SAAA,CAAA,UAAA,CAAA,GAAA,GAAc,CAAA;AACd,IAAA,SAAA,CAAA,aAAA,CAAA,GAAA,GAAiB,CAAA;AACrB,CAAC,EANW,SAAS,KAAT,SAAS,GAMpB,EAAA,CAAA,CAAA;;AC3CD,IAAY,aAIX,CAAA;AAJD,CAAA,UAAY,aAAa,EAAA;AAErB,IAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACX,IAAA,aAAA,CAAA,aAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACf,CAAC,EAJW,aAAa,KAAb,aAAa,GAIxB,EAAA,CAAA,CAAA,CAAA;AAED;AACA,IAAY,cAIX,CAAA;AAJD,CAAA,UAAY,cAAc,EAAA;AAEtB,IAAA,cAAA,CAAA,cAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAgB,CAAA;AAChB,IAAA,cAAA,CAAA,cAAA,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAe,CAAA;AACnB,CAAC,EAJW,cAAc,KAAd,cAAc,GAIzB,EAAA,CAAA,CAAA,CAAA;AAED,IAAY,eAKX,CAAA;AALD,CAAA,UAAY,eAAe,EAAA;AAEvB,IAAA,eAAA,CAAA,eAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACX,IAAA,eAAA,CAAA,eAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACX,IAAA,eAAA,CAAA,eAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACb,CAAC,EALW,eAAe,KAAf,eAAe,GAK1B,EAAA,CAAA,CAAA,CAAA;AAED;AACA,IAAY,SAKX,CAAA;AALD,CAAA,UAAY,SAAS,EAAA;AAEjB,IAAA,SAAA,CAAA,SAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;AACZ,IAAA,SAAA,CAAA,SAAA,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAW,CAAA;AACX,IAAA,SAAA,CAAA,SAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;AAChB,CAAC,EALW,SAAS,KAAT,SAAS,GAKpB,EAAA,CAAA,CAAA,CAAA;AAED;AACA,IAAY,QAIX,CAAA;AAJD,CAAA,UAAY,QAAQ,EAAA;AAEhB,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,QAAA,CAAA,QAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACb,CAAC,EAJW,QAAQ,KAAR,QAAQ,GAInB,EAAA,CAAA,CAAA;;ACpCD,IAAY,UAQX,CAAA;AARD,CAAA,UAAY,UAAU,EAAA;AAElB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,kBAA6B,CAAA;AAC7B,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,aAAyB,CAAA;AACzB,IAAA,UAAA,CAAA,UAAA,CAAA,GAAA,kBAA6B,CAAA;AAC7B,IAAA,UAAA,CAAA,WAAA,CAAA,GAAA,aAAyB,CAAA;AACzB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,MAAe,CAAA;AACf,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,WAAqB,CAAA;AACzB,CAAC,EARW,UAAU,KAAV,UAAU,GAQrB,EAAA,CAAA,CAAA;;ACiBM,MAAM,uBAAuB,GAAqB;AACrD,IAAA,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,SAAS,CAAC,KAAK;AACrB,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,UAAU,EAAE,GAAG;AACf,IAAA,aAAa,EAAE,IAAI;IACnB,aAAa,EAAE,aAAa,CAAC,GAAG;AAChC,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,aAAa,EAAE,GAAG;AAClB,IAAA,eAAe,EAAE,GAAG;AACpB,IAAA,cAAc,EAAE,GAAG;AACnB,IAAA,eAAe,EAAE,GAAG;CACvB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAEhC,MAAM,0BAA0B,GAAwB;AAC3D,IAAA,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,SAAS,CAAC,QAAQ;AACxB,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,UAAU,EAAE,GAAG;AACf,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE,aAAa,CAAC,GAAG;AAChC,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,aAAa,EAAE,GAAG;AAClB,IAAA,gBAAgB,EAAE,GAAG;AACrB,IAAA,eAAe,EAAE,GAAG;CACvB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAEnC,MAAM,wBAAwB,GAAsB;AACvD,IAAA,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,SAAS,CAAC,MAAM;AACtB,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,SAAS,EAAE,EAAE;IACb,aAAa,EAAE,mBAAmB,CAAC,SAAS;AAC5C,IAAA,UAAU,EAAE,GAAG;AACf,IAAA,QAAQ,EAAE,CAAC;IACX,aAAa,EAAE,aAAa,CAAC,IAAI;AACjC,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,aAAa,EAAE,GAAG;AAClB,IAAA,YAAY,EAAE,GAAG;CACpB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAEjC,MAAM,qBAAqB,GAAoB;AAClD,IAAA,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,aAAa,CAAC,OAAO;IAC3B,aAAa,EAAE,cAAc,CAAC,YAAY;IAC1C,SAAS,EAAE,eAAe,CAAC,OAAO;IAClC,QAAQ,EAAE,SAAS,CAAC,OAAO;AAC3B,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,MAAM,EAAE,KAAK;IACb,OAAO,EAAE,QAAQ,CAAC,IAAI;AACtB,IAAA,WAAW,EAAE,GAAG;AAChB,IAAA,UAAU,EAAE,GAAG;AACf,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,eAAe,EAAE,CAAC;AAClB,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,qBAAqB,EAAE,IAAI;CAC9B,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAE9B,MAAM,qBAAqB,GAAkB;AAChD,IAAA,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,SAAS,CAAC,KAAK;AACrB,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,MAAM,EAAE,CAAC;CACZ,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAE9B,MAAM,wBAAwB,GAAkB;AACnD,IAAA,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,SAAS,CAAC,KAAK;AACrB,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,aAAa,EAAE,EAAE;AACjB,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,gBAAgB,EAAE,CAAC;AACnB,IAAA,gBAAgB,EAAE,KAAK;AACvB,IAAA,qBAAqB,EAAE,KAAK;AAC5B,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,QAAQ,EAAE,CAAC;CACd,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAGjC,MAAM,sBAAsB,GAAoB;AACnD,IAAA,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,SAAS,CAAC,QAAQ;AACxB,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,WAAW,EAAE,CAAC;CACjB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAE/B,MAAM,2BAA2B,GAAyB;IAC7D,IAAI,EAAE,aAAa,CAAC,EAAE;IACtB,UAAU,EAAE,UAAU,CAAC,KAAK;AAC5B,IAAA,cAAc,EAAE,KAAK;CACxB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;AAEpC,MAAM,4BAA4B,GAA0B;IAC/D,gBAAgB,EAAE,gBAAgB,CAAC,QAAQ;IAC3C,UAAU,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;IAChD,KAAK,EAAE,aAAa,CAAC,IAAI;IACzB,KAAK,EAAE,aAAa,CAAC,EAAE;AACvB,IAAA,cAAc,EAAE,KAAK;CACxB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAErC,MAAM,4BAA4B,GAA0B;IAC/D,gBAAgB,EAAE,gBAAgB,CAAC,QAAQ;AAC3C,IAAA,UAAU,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;AAClE,IAAA,IAAI,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,aAAa,CAAC,SAAS,CAAC;AACtE,IAAA,cAAc,EAAE,KAAK;CACxB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAErC,MAAM,4BAA4B,GAA0B;AAC/D,IAAA,IAAI,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,EAAE,aAAa,CAAC,SAAS,CAAC;AAC1F,IAAA,UAAU,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC;AACpF,IAAA,cAAc,EAAE,KAAK;CACxB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAErC,MAAM,wBAAwB,GAA4B;AAC7D,IAAA,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;CACzD,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAGjC,MAAM,uBAAuB,GAAqB;AACrD,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,yBAAyB,EAAE,CAAC;AAC5B,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,gBAAgB,EAAE,CAAC;AACnB,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,UAAU,EAAE,IAAI;CACnB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAEhC,MAAM,sBAAsB,GAAoB;AACnD,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,yBAAyB,EAAE,CAAC;AAC5B,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,gBAAgB,EAAE,EAAE;AACpB,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,iBAAiB,EAAE,GAAG;AACtB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,UAAU,EAAE,IAAI;CACnB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAE/B,MAAM,0BAA0B,GAAwB;AAC3D,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,UAAU,EAAE,SAAS;AACrB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,yBAAyB,EAAE,CAAC;AAC5B,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,iBAAiB,EAAE,GAAG;AACtB,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,MAAM,EAAE,GAAG;AACX,IAAA,aAAa,EAAE,EAAE;AACjB,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,UAAU,EAAE,IAAI;CACnB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAEnC,MAAM,4BAA4B,GAA0B;AAC/D,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,aAAa,EAAE,SAAS;AACxB,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,iCAAiC,EAAE,CAAC;AACpC,IAAA,iBAAiB,EAAE,EAAE;AACrB,IAAA,iCAAiC,EAAE,CAAC;AACpC,IAAA,aAAa,EAAE,SAAS;AACxB,IAAA,mBAAmB,EAAE,IAAI;AACzB,IAAA,oBAAoB,EAAE,EAAE;AACxB,IAAA,iBAAiB,EAAE,GAAG;AACtB,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,oBAAoB,EAAE,CAAC;AACvB,IAAA,OAAO,EAAE,IAAI;CAChB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAErC,MAAM,wBAAwB,GAAsB;AACvD,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,SAAS,CAAC,KAAK;AACrB,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,UAAU,EAAE,CAAC;CAChB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAEjC,MAAM,yBAAyB,GAAuB;AACzD,IAAA,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,SAAS,CAAC,QAAQ;AACxB,IAAA,IAAI,EAAE,KAAK;IACX,SAAS,EAAE,SAAS,CAAC,CAAC;IACtB,aAAa,EAAE,aAAa,CAAC,IAAI;AACjC,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,iBAAiB,EAAE,IAAI;CAC1B,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAElC,MAAM,sBAAsB,GAAqB;AACpD,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,SAAS,EAAE;;AAEP,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,MAAM,EAAE,KAAK;AACb,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,KAAK,EAAE,KAAK;AACZ,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,aAAa,EAAE,KAAK;AACpB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,QAAQ,EAAE,KAAK;AACf,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,SAAS,EAAE,KAAK;AAChB,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,gBAAgB,EAAE,KAAK;AACvB,QAAA,UAAU,EAAE,KAAK;AACjB,QAAA,CAAC,aAAa,CAAC,QAAQ,GAAG,KAAK;AAC/B,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,cAAc,EAAE,KAAK;AACrB,QAAA,cAAc,EAAE,KAAK;AACrB,QAAA,eAAe,EAAE,KAAK;AACzB,KAAA;AACD,IAAA,WAAW,EAAE;QACT,MAAM,EAAE,YAAY,CAAC,KAAK;QAC1B,KAAK,EAAE,YAAY,CAAC,KAAK;QACzB,SAAS,EAAE,YAAY,CAAC,KAAK;QAC7B,QAAQ,EAAE,YAAY,CAAC,KAAK;QAC5B,WAAW,EAAE,YAAY,CAAC,KAAK;QAC/B,MAAM,EAAE,YAAY,CAAC,KAAK;QAC1B,YAAY,EAAE,YAAY,CAAC,KAAK;AAChC,QAAA,CAAC,aAAa,CAAC,GAAG,GAAG,YAAY,CAAC,KAAK;AACvC,QAAA,CAAC,aAAa,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK;AACzC,QAAA,CAAC,aAAa,CAAC,KAAK,GAAG,YAAY,CAAC,KAAK;QACzC,KAAK,EAAE,YAAY,CAAC,KAAK;QACzB,UAAU,EAAE,YAAY,CAAC,KAAK;QAC9B,SAAS,EAAE,YAAY,CAAC,KAAK;QAC7B,aAAa,EAAE,YAAY,CAAC,KAAK;QACjC,OAAO,EAAE,YAAY,CAAC,KAAK;AAC3B,QAAA,CAAC,aAAa,CAAC,QAAQ,GAAG,YAAY,CAAC,KAAK;AAE/C,KAAA;AACD,IAAA,SAAS,EAAE;AACP,QAAA,MAAM,EAAE,EAAE;AACV,QAAA,KAAK,EAAE,EAAE;AACT,QAAA,SAAS,EAAE,EAAE;AACb,QAAA,CAAC,aAAa,CAAC,QAAQ,GAAG,EAAE;AAC/B,KAAA;;AAED,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;AACzB,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,SAAS,CAAC,QAAQ;IACzB,UAAU,EAAE,aAAa,CAAC,KAAK;AAC/B,IAAA,SAAS,EAAE,EAAE;IACb,aAAa,EAAE,aAAa,CAAC,QAAQ;IACrC,OAAO,EAAE,YAAY,CAAC,IAAI;AAC1B,IAAA,gBAAgB,EAAE,EAAE;AACpB,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;AACzB,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACnD,IAAA,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACxD,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,CAAC,aAAa,CAAC,QAAQ,GAAG,EAAE;AAC5B,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,eAAe,EAAE,EAAE;CACtB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAE/B,MAAM,mBAAmB,GAAmB;AAC/C,IAAA,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,iBAAiB,CAAC,OAAO;AACpC,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,cAAc,EAAE,GAAG;AACnB,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,SAAS,CAAC,OAAO;AAC5B,IAAA,qBAAqB,EAAE,IAAI;CAC9B,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAE5B,MAAM,iBAAiB,GAAsB;AAChD,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,WAAW,CAAC,GAAG;AAC5B,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,aAAa,EAAE,EAAE;AACjB,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,kBAAkB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;AAC7D,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,YAAY,CAAC,KAAK;AAChC,IAAA,UAAU,EAAE,EAAE;IACd,WAAW,EAAE,WAAW,CAAC,GAAG;AAC5B,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,eAAe,EAAE,CAAC;AAClB,IAAA,cAAc,EAAE,GAAG;AACnB,IAAA,YAAY,EAAE,GAAG;AACjB,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,gCAAgC,EAAE,IAAI;AACtC,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,cAAc,EAAE,IAAI;AACpB,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,kBAAkB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;AAC7D,IAAA,qBAAqB,EAAE,IAAI;AAC3B,IAAA,wBAAwB,EAAE,KAAK;IAC/B,SAAS,EAAE,GAAG;CACjB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAC1B,MAAM,kBAAkB,GAAuB;AAClD,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,eAAe,EAAE,CAAC;AAClB,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,SAAS,EAAE,GAAG;CACjB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAC3B,MAAM,mBAAmB,GAAwB;AACpD,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,WAAW,CAAC,GAAG;AAC5B,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,WAAW,EAAE,EAAE;IACf,YAAY,EAAE,YAAY,CAAC,GAAG;AAC9B,IAAA,UAAU,EAAE,EAAE;IACd,WAAW,EAAE,WAAW,CAAC,GAAG;AAC5B,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,gBAAgB,EAAE,CAAC;AACnB,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,kBAAkB,EAAE,KAAK;AACzB,IAAA,cAAc,EAAE,GAAG;AACnB,IAAA,YAAY,EAAE,GAAG;AACjB,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,YAAY,EAAE,CAAC;AACf,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,kBAAkB,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;AAC7D,IAAA,qBAAqB,EAAE,IAAI;AAC3B,IAAA,wBAAwB,EAAE,KAAK;CAClC,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAE5B,MAAM,8BAA8B,GAA6B;AACpE,IAAA,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,WAAW,CAAC,KAAK;AACvB,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,IAAI,EAAE,CAAC;AACP,IAAA,IAAI,EAAE,CAAC;AACP,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,OAAO,EAAE,KAAK;CACjB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;AAEvC,MAAM,6BAA6B,GAA4B;AAClE,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,MAAM,EAAE,GAAG;AACX,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,SAAS,CAAC,OAAO;CAC9B,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC;AAEtC,MAAM,oBAAoB,GAAmB;AAChD,IAAA,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,iBAAiB,CAAC,OAAO;AACpC,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,UAAU,EAAE,CAAC;AACb,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,OAAO,EAAE,CAAC;IACV,SAAS,EAAE,SAAS,CAAC,OAAO;AAC5B,IAAA,qBAAqB,EAAE,IAAI;CAC9B,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAE7B,MAAM,iBAAiB,GAAoB;AAC9C,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,GAAG,EAAE,GAAG;AACR,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,KAAK,EAAE,EAAE;CACZ,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAE1B,MAAM,4BAA4B,GAAqB;AAC1D,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,GAAG,EAAE,EAAE;AACP,IAAA,MAAM,EAAE,GAAG;AACX,IAAA,IAAI,EAAE,KAAK;AACX,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,UAAU,EAAE,cAAc;AAC1B,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,MAAM,EAAE,IAAI;CACf,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;AACrC,MAAM,2BAA2B,GAAqB;AACzD,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,QAAQ,EAAE,WAAW;AACrB,IAAA,UAAU,EAAE,WAAW;AACvB,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,QAAQ,EAAE,EAAE;CACf,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;AACpC,MAAM,4BAA4B,GAAwB;AAC7D,IAAA,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,WAAW,CAAC,MAAM;AACxB,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,aAAa,EAAE,KAAK;AACpB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,QAAQ,EAAE,WAAW;AACrB,IAAA,UAAU,EAAE,WAAW;AACvB,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,IAAI,EAAE,GAAG;AACT,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,MAAM,EAAE,IAAI;CACf,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;AACrC,MAAM,0BAA0B,GAAmB;AACtD,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,IAAI,EAAE,IAAI;AACV,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,IAAI,EAAE,EAAE;AACR,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,MAAM,EAAE,GAAG;AACX,IAAA,MAAM,EAAE,KAAK;CAChB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAEnC,MAAM,yBAAyB,GAAuB;AACzD,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,SAAS,CAAC,QAAQ;IACzB,UAAU,EAAE,aAAa,CAAC,KAAK;AAC/B,IAAA,SAAS,EAAE,EAAE;IACb,aAAa,EAAE,aAAa,CAAC,SAAS;AACtC,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,UAAU,EAAE,GAAG;AACf,IAAA,UAAU,EAAE,GAAG;AACf,IAAA,WAAW,EAAE,GAAG;AAChB,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,eAAe,EAAE,EAAE;AACnB,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,qBAAqB,EAAE,IAAI;AAC3B,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,eAAe,EAAE,EAAE;AACnB,IAAA,mBAAmB,EAAE,EAAE;CAC1B,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;AAElC,MAAM,sBAAsB,GAAoB;AACnD,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,OAAO,EAAE,IAAI;AACb,IAAA,GAAG,EAAE,CAAC;AACN,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,mBAAmB,EAAE,KAAK;CAC7B,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;AAE/B,MAAM,uBAAuB,GAA4B;AAC5D,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,CAAC,aAAa,CAAC,MAAM,GAAG,EAAE;AAC1B,IAAA,CAAC,aAAa,CAAC,QAAQ,GAAG,EAAE;AAC5B,IAAA,CAAC,aAAa,CAAC,WAAW,GAAG,EAAE;AAC/B,IAAA,CAAC,aAAa,CAAC,KAAK,GAAG,SAAS,CAAC,QAAQ;AACzC,IAAA,CAAC,aAAa,CAAC,OAAO,GAAG,aAAa,CAAC,KAAK;AAC5C,IAAA,CAAC,aAAa,CAAC,SAAS,GAAG,EAAE;AAC7B,IAAA,CAAC,aAAa,CAAC,aAAa,GAAG,aAAa,CAAC,SAAS;AACtD,IAAA,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;AACzB,IAAA,CAAC,aAAa,CAAC,QAAQ,GAAG,GAAG;AAC7B,IAAA,CAAC,aAAa,CAAC,UAAU,GAAG,GAAG;AAC/B,IAAA,CAAC,aAAa,CAAC,UAAU,GAAG,GAAG;AAC/B,IAAA,CAAC,aAAa,CAAC,WAAW,GAAG,GAAG;AAChC,IAAA,CAAC,aAAa,CAAC,QAAQ,GAAG,GAAG;AAC7B,IAAA,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACnD,IAAA,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;AACzB,IAAA,CAAC,aAAa,CAAC,GAAG,GAAG,EAAE;AACvB,IAAA,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE;AACzB,IAAA,cAAc,EAAE,GAAG;AACnB,IAAA,eAAe,EAAE,GAAG;AACpB,IAAA,cAAc,EAAE,GAAG;AACnB,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,eAAe,EAAE,EAAE;AACnB,IAAA,SAAS,EAAE;AACP,QAAA,CAAC,aAAa,CAAC,MAAM,GAAG,KAAK;AAC7B,QAAA,CAAC,aAAa,CAAC,QAAQ,GAAG,KAAK;AAC/B,QAAA,CAAC,aAAa,CAAC,WAAW,GAAG,KAAK;AAClC,QAAA,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI;AAC3B,QAAA,CAAC,aAAa,CAAC,OAAO,GAAG,IAAI;AAC7B,QAAA,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI;AAC/B,QAAA,CAAC,aAAa,CAAC,aAAa,GAAG,IAAI;AACnC,QAAA,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI;AAC9B,QAAA,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI;AAChC,QAAA,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI;AAChC,QAAA,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI;AACjC,QAAA,gBAAgB,EAAE,IAAI;AACtB,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI;AAC9B,QAAA,CAAC,aAAa,CAAC,GAAG,GAAG,IAAI;AACzB,QAAA,cAAc,EAAE,IAAI;AACpB,QAAA,eAAe,EAAE,IAAI;AACrB,QAAA,cAAc,EAAE,IAAI;AACpB,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,SAAS,EAAE,IAAI;QACf,aAAa,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE;AACvD,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,cAAc,EAAE,KAAK;AACrB,QAAA,cAAc,EAAE,KAAK;AACrB,QAAA,eAAe,EAAE,KAAK;AACzB,KAAA;CACJ,CAAC;AAEF,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAEhC,MAAM,kBAAkB,GAAsB;AACjD,IAAA,UAAU,EAAE,GAAG;AACf,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,QAAQ,EAAE,CAAC;AACX,IAAA,SAAS,EAAE,CAAC;AACZ,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,QAAQ,EAAE,CAAC;CACd,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AAG3B,MAAM,2BAA2B,GAA0B;AAC9D,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,gBAAgB,EAAE,CAAC;AACnB,IAAA,aAAa,EAAE,CAAC;AAChB,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,kBAAkB,EAAE,CAAC;AACrB,IAAA,qBAAqB,EAAE,KAAK;AAC5B,IAAA,sBAAsB,EAAE,KAAK;AAC7B,IAAA,oBAAoB,EAAE,IAAI;AAC1B,IAAA,kBAAkB,EAAE,IAAI;AACxB,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,qBAAqB,EAAE,IAAI;AAC3B,IAAA,oBAAoB,EAAE,KAAK;AAC3B,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,WAAW,EAAE,EAAE;IACf,uBAAuB,EAAE,IAAI;IAC7B,4BAA4B,EAAE,KAAK;AACnC,IAAA,wBAAwB,EAAE,IAAI;AAC9B,IAAA,oBAAoB,EAAE,IAAI;IAC1B,yBAAyB,EAAE,KAAK;AAChC,IAAA,uBAAuB,EAAE,IAAI;AAC7B,IAAA,sBAAsB,EAAE,IAAI;AAC5B,IAAA,cAAc,EAAE,IAAI;IACpB,aAAa,EAAE,KAAK;IACpB,gBAAgB,EAAE,IAAI;AACtB,IAAA,aAAa,EAAE,KAAK;AACpB,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,QAAQ,EAAE,IAAI;IACd,gBAAgB,EAAE,IAAI;CACzB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC;AAEpC,MAAM,gBAAgB,GAAkB;AAC3C,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,WAAW,EAAE,GAAG;AAChB,IAAA,cAAc,EAAE,EAAE;AAClB,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,sBAAsB,EAAE,GAAG;AAC3B,IAAA,qBAAqB,EAAE,GAAG;AAC1B,IAAA,eAAe,EAAE,CAAC;AAClB,IAAA,gBAAgB,EAAE,CAAC;AACnB,IAAA,iBAAiB,EAAE,CAAC;AACpB,IAAA,cAAc,EAAE,CAAC;AACjB,IAAA,gBAAgB,EAAE,CAAC;AACnB,IAAA,GAAG,2BAA2B;AAC9B,IAAA,YAAY,EAAE;AACV,QAAA,eAAe,EAAE,GAAG;AACpB,QAAA,cAAc,EAAE,GAAG;AACnB,QAAA,cAAc,EAAE,GAAG;AACnB,QAAA,WAAW,EAAE,GAAG;AACnB,KAAA;AACD,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,KAAK,EAAE,EAAE;AACT,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,UAAU,EAAE,GAAG;AACf,IAAA,UAAU,EAAE,GAAG;AACf,IAAA,WAAW,EAAE,GAAG;AAChB,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,cAAc,EAAE,IAAI;AACpB,IAAA,gBAAgB,EAAE,EAAE;AACpB,IAAA,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACnD,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,SAAS,EAAE,IAAI;AACf,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,UAAU,EAAE,IAAI;AAChB,IAAA,gBAAgB,EAAE,KAAK;AACvB,IAAA,eAAe,EAAE,EAAE;AACnB,IAAA,mBAAmB,EAAE,EAAE;AACvB,IAAA,cAAc,EAAE,KAAK;AACrB,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,aAAa,EAAE,EAAE;AACjB,IAAA,kBAAkB,EAAE,EAAE;AACtB,IAAA,gBAAgB,EAAE,EAAE;CACvB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACzB,MAAM,iBAAiB,GAAoB;AAC9C,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,SAAS,EAAE,GAAG;AACd,IAAA,SAAS,EAAE,EAAE;AACb,IAAA,UAAU,EAAE,GAAG;AACf,IAAA,UAAU,EAAE,GAAG;AACf,IAAA,WAAW,EAAE,GAAG;AAChB,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACnD,IAAA,YAAY,EAAE,EAAE;AAChB,IAAA,WAAW,EAAE,CAAC;AACd,IAAA,aAAa,EAAE,CAAC;CACnB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;CAES;AACtC,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,IAAI,EAAE,KAAK;AACX,IAAA,IAAI,EAAE,KAAK;AACX,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,IAAI,EAAE,KAAK;AACX,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,OAAO,EAAE,KAAK;AACd,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,IAAI,EAAE,KAAK;AACX,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,MAAM,EAAE,KAAK;AACb,IAAA,eAAe,EAAE,EAAE;IACnB,SAAS,EAAE,YAAY,CAAC,KAAK;GAC/B;AAEK,MAAM,wBAAwB,GAA4B;AAC7D,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,UAAU,CAAC,QAAQ;CACjC,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAEjC,MAAM,qBAAqB,GAAyB;AACvD,IAAA,QAAQ,EAAE,EAAE;CACf,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAE9B,MAAM,uBAAuB,GAAsB;AACtD,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,KAAK,EAAE,IAAI;AACX,IAAA,GAAG,EAAE,IAAI;AACT,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,aAAa,EAAE,KAAK;AACpB,IAAA,QAAQ,EAAE,KAAK;AACf,IAAA,aAAa,EAAE,EAAE;AACjB,IAAA,eAAe,EAAE,GAAG;AACpB,IAAA,kBAAkB,EAAE,EAAE;AACtB,IAAA,cAAc,EAAE,GAAG;AACnB,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,eAAe,EAAE,EAAE;IACnB,gBAAgB,EAAE,gBAAgB,CAAC,IAAI;CAC1C,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAGhC,MAAM,wBAAwB,GAA4B;AAC7D,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,KAAK,EAAE,GAAG;AACV,IAAA,eAAe,EAAE,GAAG;AACpB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,aAAa,EAAE,KAAK;AACpB,IAAA,cAAc,EAAE,KAAK;AACrB,IAAA,OAAO,EAAE,GAAG;AACZ,IAAA,WAAW,EAAE,GAAG;AAChB,IAAA,aAAa,EAAE,GAAG;AAClB,IAAA,YAAY,EAAE,GAAG;AACjB,IAAA,cAAc,EAAE,KAAK;AACrB,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,UAAU,EAAE,EAAE;AACd,IAAA,mBAAmB,EAAE,EAAE;CAC1B,CAAC;AAEF,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;AACjC,MAAM,qBAAqB,GAAoB;AAClD,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,MAAM,EAAE,GAAG;AACX,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,MAAM,EAAE,EAAE;AACV,IAAA,MAAM,EAAE,CAAC;AACT,IAAA,OAAO,EAAE,CAAC;CACb,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAE9B,MAAM,uCAAuC,GAAqC;AACrF,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,mBAAmB,EAAE,IAAI;AACzB,IAAA,cAAc,EAAE,IAAI;AACpB,IAAA,kBAAkB,EAAE,IAAI;CAC3B,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC;AAEhD,MAAM,uCAAuC,GAAqC;AACrF,IAAA,kBAAkB,EAAE,CAAC;IACrB,WAAW,EAAE,UAAU,CAAC,UAAU;IAClC,QAAQ,EAAE,aAAa,CAAC,SAAS;AACjC,IAAA,aAAa,EAAE,IAAI;AACnB,IAAA,gBAAgB,EAAE,IAAI;AACtB,IAAA,OAAO,EAAE,IAAI;CAChB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC;AAEhD,MAAM,4BAA4B,GAA0B;AAC/D,IAAA,IAAI,EAAE,EAAE;CACX,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAErC,MAAM,uCAAuC,GAAqC;AACrF,IAAA,iBAAiB,EAAE,IAAI;AACvB,IAAA,cAAc,EAAE,IAAI;CACvB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC;AAEhD,MAAM,4BAA4B,GAA0B;AAC/D,IAAA,OAAO,EAAE,CAAC;AACV,IAAA,WAAW,EAAE,EAAE;CAClB,CAAC;AACF,MAAM,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;CAEQ;AAChD,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,oBAAoB,EAAE,CAAC;AACvB,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,uBAAuB,EAAE,EAAE;AAC3B,IAAA,yBAAyB,EAAE,KAAK;AAChC,IAAA,+BAA+B,EAAE,EAAE;IACnC,aAAa,EAAE,gBAAgB,CAAC,IAAI;;;ACjhCxC;;;AAGG;AACG,MAAO,aAAc,SAAQmD,cAAQ,CAAA;AAKvC,IAAA,WAAA,CAAY,OAAiB,EAAE,IAAqB,EAAE,qBAAgC,EAAA;AAElF,QAAA,KAAK,EAAE,CAAC;QALZ,IAAO,CAAA,OAAA,GAAa,EAAE,CAAC;QACvB,IAAc,CAAA,cAAA,GAAG,EAAE,CAAC;AAKhB,QAAA,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;AACnD,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AACnB,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;;AAE9B,YAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC7B;AAED,IAAA,IAAI,QAAQ,GAAA;AAER,QAAA,IAAI,OAAO,GAAG,IAAItB,yBAAY,EAAE,CAAC;QACjC,IAAI,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,cAAc,GAAG,IAAIuB,gCAA0B,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxE,QAAA,OAAO,CAAC,YAAY,CAAC,eAAe,EAAE,IAAIC,gCAA0B,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5F,QAAA,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,IAAIA,gCAA0B,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1F,QAAA,OAAO,OAAO,CAAC;KAClB;AAED,IAAA,IAAI,QAAQ,GAAA;AAER,QAAA,OAAO,IAAI5B,oBAAc,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,IAAIyB,4BAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;KACrG;IAED,QAAQ,CAAC,OAAiB,EAAE,IAAW,EAAA;;QAGnC,IAAI,SAAS,GAAI,IAAI,CAAC,KAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACnD,IAAI,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACvC,QAAA,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,KAAK,IAAI,CAAC,IAAI,OAAO;AACjB,YAAA,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAEpC,IAAI,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC5C,QAAA,IAAI,CAACI,gBAAU,CAAC,WAAW,CAAC,UAAU,CAAC;YAAE,UAAU,CAAC,OAAO,EAAE,CAAC;;QAG9D,IAAI,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE3C,KAAK,IAAI,CAAC,IAAI,UAAU;AACpB,YAAA,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAEvC,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC;AAE/B,QAAA,IAAI,KAAK,GAAgB,EAAE,CAAC;AAE5B,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC;;AAG7B,QAAA,IAAI,CAAC,WAAW;YACZ,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAI7F,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EACvC;YACI,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,EAC5B;AACI,gBAAA,IAAI,WAAW;oBACX,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;oBAE9F,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACzF;iBAED;AACI,gBAAA,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACrG;SACJ;AAED,QAAA,IAAI,WAAW;AACX,YAAA,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAE3C,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KACtD;IAED,SAAS,CAAC,OAAiB,EAAE,KAAc,EAAA;QAEvC,IAAI,OAAO,GAAc,EAAE,CAAC;QAC5B,IAAI,WAAW,GAAc,EAAE,CAAC;;AAGhC,QAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EACtB;YACI,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAc,CAAC;YACrD,0BAA0B,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,KAAI;AAE7C,gBAAA,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EACnB;oBACI,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC5B,oBAAA,OAAO,IAAI,CAAC;iBACf;AACD,gBAAA,OAAO,KAAK,CAAC;AACjB,aAAC,CAAC,CAAC;AAEH,YAAA,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC;gBACjB,SAAS,CAAC,KAAK,EAAE,CAAC;AAEtB,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;AAE1B,YAAA,KAAK,IAAI,CAAC,IAAI,SAAS,EACvB;AACI,gBAAA,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACpD,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC3B,gBAAA,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEjB,gBAAA,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC7B;SACJ;QAED,IAAI,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC5C,QAAA,IAAI,CAACA,gBAAU,CAAC,WAAW,CAAC,UAAU,CAAC;YAAE,UAAU,CAAC,OAAO,EAAE,CAAC;;QAG9D,IAAI,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE3C,KAAK,IAAI,CAAC,IAAI,UAAU;AACpB,YAAA,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAEvC,IAAI,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAEzE,QAAA,IAAI,KAAK,GAAgB,EAAE,CAAC;;AAE5B,QAAA,IAAI,CAAC,WAAW;YACZ,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAGjG,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EACvC;YACI,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,EAC5B;AACI,gBAAA,IAAI,WAAW;AACX,oBAAA,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;oBAElG,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7F;iBAED;AACI,gBAAA,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACzG;SACJ;AAED,QAAA,IAAI,WAAW;AACX,YAAA,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAE3C,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAA+B,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;AACjF,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;KACtD;AAED;;;;;;;;AAQG;IACO,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,GAAc,EAAE,aAAsB,EAAA;AAEnG,QAAA,IAAI,EAAE,GAAG,IAAIC,WAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;AACjE,QAAA,IAAI,EAAE,GAAG,IAAIA,WAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QACjE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;KAClI;AAED;;;AAGG;IACO,aAAa,CAAC,GAAY,EAAA,GAAK;AAE/B,IAAA,cAAc,CAAC,UAAqB,EAAE,SAAoB,EAAE,OAAkB,EAAE,KAAkB,EAAA;AAExG,QAAA,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QAC/B,KAAK,IAAI,CAAC,IAAI,UAAU;AACpB,YAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,EACf;AACI,gBAAA,QAAQ,EAAE,CAAC;gBAEX,IAAI,IAAI,CAAC,qBAAqB;AAC1B,oBAAA,CAAC,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;aACxE;QAEL,IAAI,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC;AAC5C,QAAA,IAAI,EAAE,GAAa,CAAC,CAAC,CAAC,CAAC;AACvB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE;AACtC,YAAA,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC;QAE9E,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,QAAA,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,EAC7D;AACI,YAAA,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3B,YAAA,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAEjD,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACtC,YAAA,IAAI,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACnB,YAAA,IAAI,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;AAC5B,YAAA,IAAI,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1D,YAAA,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC;AAC3C,YAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAE1B,IAAI,UAAU,GAAG,CAAC,CAAC;YAEnB,IAAI,iBAAiB,GAAG,SAAS,CAAC;AAClC,YAAA,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,EAC3E;AACI,gBAAA,IAAI,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;AAC3B,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;AAC5B,gBAAA,IAAI,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;gBAEnC,IAAI,GAAG,CAAC,QAAQ,CAAC;AACb,oBAAA,iBAAiB,GAAG,GAAG,CAAC,kBAAkB,CAAC,IAAI,iBAAiB,CAAC;AAErE,gBAAA,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;AAC9B,oBAAA,IAAI,YAAY,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC;AACnC,wBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAE9D,gBAAA,IAAI,YAAY,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC;oBACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAE3B,IAAI,SAAS,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,EAClC;AACI,oBAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACpC,oBAAA,IAAI,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC,QAAQ,GAAG,UAAU,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;AAC3E,oBAAA,IAAI,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACpC,oBAAA,IAAI,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;oBAEtC,IAAI,EAAE,GAAG,UAAU,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AAC9D,oBAAA,IAAI,EAAE,GAAG,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;oBAEvG,IAAI,EAAE,GAAG,UAAU,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AAC9D,oBAAA,IAAI,EAAE,GAAG,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;oBAExG,IAAI,YAAY,KAAK,CAAC;wBAClB,UAAU,GAAG,EAAE,CAAC;AAEpB,oBAAA,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC;AAC1B,oBAAA,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC5C,oBAAA,IAAI,GAAG,GAAG;AACN,wBAAA,IAAIzC,aAAO,CAAC,EAAE,EAAE,EAAE,CAAC;AACnB,wBAAA,IAAIA,aAAO,CAAC,EAAE,EAAE,EAAE,CAAC;AACnB,wBAAA,IAAIA,aAAO,CAAC,EAAE,EAAE,EAAE,CAAC;AACnB,wBAAA,IAAIA,aAAO,CAAC,EAAE,EAAE,EAAE,CAAC;qBACtB,CAAC;AAEF,oBAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;iBACvF;AACD,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC1B;YACD,UAAU,GAAG,UAAU,CAAC;AAExB,YAAA,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EACvD;AACI,gBAAA,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,EAC3E;AACI,oBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;AAC5B,oBAAA,IAAI,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;AACnC,oBAAA,IAAI,YAAY,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC;wBACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC3B,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAEvB,oBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAChD,oBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;iBACzD;aACJ;SACJ;KACJ;IAES,QAAQ,CAAC,UAAqB,EAAE,KAAkB,EAAA;;QAGxD,IAAI,KAAK,GAAGwC,gBAAU,CAAC,gBAAgB,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACxD,KAAK,IAAI,CAAC,IAAI,UAAU;AAAE,YAAA,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACjD,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QACrC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACnE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EACrC;AACI,YAAA,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAIC,WAAK,CAAC,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;YACxE,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAIA,WAAK,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9H,YAAA,IAAI,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;SAC1E;;AAGD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAC1C;YACI,IAAI,SAAS,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;AAE5C,YAAA,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACpB,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAEtD,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnC,YAAA,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACb,YAAA,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;SACzD;KACJ;AACJ,CAAA;AAED;;;;;;;;;AASG;AACG,SAAU,iBAAiB,CAAC,UAAqB,EAAE,MAAe,EAAE,IAAa,EAAE,IAAc,EAAE,KAAe,EAAA;AAEpH,IAAA,IAAI,GAAc,CAAC;AACnB,IAAA,IAAI,CAAC,IAAI,IAAI,KAAK,EAClB;AACI,QAAA,IAAI,GAAG,GAAG,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACxE,QAAA,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;KAC1D;AACI,SAAA,IAAI,CAAC,KAAK,IAAI,IAAI,EACvB;AACI,QAAA,IAAI,GAAG,GAAG,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACvE,QAAA,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;KAC1D;AACI,SAAA,IAAI,KAAK,IAAI,IAAI,EACtB;AACI,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;AAC7C,QAAA,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;;QAE7C,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;QAE5B,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1B,QAAA,IAAI,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;QAGnB,IAAI,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAErC,IAAI,GAAG,GAAG,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;AACpD,QAAA,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACvD,QAAA,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,IAAItB,WAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAIjC,aAAO,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;KAClG;AACD,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;;;;;AAOG;AACH,SAAS,sBAAsB,CAAC,EAAW,EAAE,IAAa,EAAE,GAAY,EAAA;IAEpE,IAAI,EAAE,GAAG,IAAI,CAAC;AACd,IAAA,IAAI,EAAE,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC;IACzB,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AAE9B,IAAA,IAAI,GAAG,GAAG,IAAIC,aAAO,EAAE,CAAC;IACxB,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAC1B,IAAA,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AACpB,IAAA,OAAO,GAAG,CAAC;AACf;;ACpYA;AACA;AACA;AAEA;AACA;AACA;AACA;MAEa,GAAG,CAAA;IAMZ,WAAmB,CAAA,GAAY,EAAS,SAAkB,EAAA;QAAvC,IAAG,CAAA,GAAA,GAAH,GAAG,CAAS;QAAS,IAAS,CAAA,SAAA,GAAT,SAAS,CAAS;QAJ1D,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC;AAMZ,QAAA,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;KACrD;AAED,IAAA,aAAa,CAAC,GAAQ,EAAE,IAAc,EAAE,MAAgB,EAAA;AAEpD,QAAA,IAAI,SAAkB,CAAC;AACvB,QAAA,IAAI,YAAqB,CAAC;AAC1B,QAAA,IAAI,EAAW,CAAC;AAChB,QAAA,IAAI,KAAc,CAAC;QACnB,IAAI,IAAI,EACR;AACI,YAAA,IAAI,IAAI,GAAG,IAAIA,aAAO,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5D,YAAA,IAAI,IAAI,GAAG,IAAIA,aAAO,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3D,EAAE,GAAG,IAAI,CAAC;YACV,KAAK,GAAG,IAAI,CAAC;AACb,YAAA,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACpB,YAAA,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACvB,YAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AACpD,YAAA,YAAY,GAAG,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;SAC5D;AACD,QAAA,IAAI,MAAM,GAAG,IAAID,aAAO,EAAE,CAAC;AAC3B,QAAA,IAAI,MAAM,GAAG,IAAIA,aAAO,EAAE,CAAC;AAC3B,QAAA,IAAI,MAAM,GAAG,IAAIA,aAAO,EAAE,CAAC;AAE3B,QAAA,IAAI,MAAM,GAAG,IAAIA,aAAO,EAAE,CAAC;AAC3B,QAAA,IAAI,MAAM,GAAG,IAAIA,aAAO,EAAE,CAAC;AAC3B,QAAA,IAAI,MAAM,GAAG,IAAIA,aAAO,EAAE,CAAC;AAE3B,QAAA,IAAI,WAAW,GAAG,IAAIA,aAAO,EAAE,CAAC;AAEhC,QAAA,IAAI,MAAM,GAAG,IAAIA,aAAO,EAAE,CAAC;QAE3B,IAAI,KAAK,GAAc,EAAE,CAAC;QAC1B,IAAI,KAAK,GAAc,EAAE,CAAC;QAC1B,IAAI,cAAc,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,iBAAiB,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAErC,IAAI,SAAiB,EAAE,SAAiB,CAAC;QACzC,IAAI,CAAS,EAAE,CAAS,CAAC;;AAGzB,QAAA,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACtD,QAAA,CAAC,KAAK,IAAI,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;;QAGxD,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;;AAGnC,QAAA,MAAM,CAAC,UAAU,CAAC,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;;;QAIxE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EACtB;AACI,YAAA,WAAW,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACrD;;;QAID,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EACtB;AACI,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC1B;AACI,gBAAA,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9C,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;aAC5E;SACJ;;QAGD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EACtB;YACI,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEtF,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAC3C,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAEtC,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,EACjE;AACI,gBAAA,OAAO,KAAK,CAAC;aAChB;SACJ;;QAGD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EACtB;YACI,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEtF,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACvC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAE1C,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7E,YAAA,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAE5B,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,EACvC;AACI,gBAAA,OAAO,KAAK,CAAC;aAChB;SACJ;;;AAKD,QAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,QAAA,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElG,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhF,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,EACvC;AACI,YAAA,OAAO,KAAK,CAAC;SAChB;;AAGD,QAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,QAAA,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElG,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhF,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,EACvC;AACI,YAAA,OAAO,KAAK,CAAC;SAChB;;AAGD,QAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,QAAA,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElG,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhF,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,EACvC;AACI,YAAA,OAAO,KAAK,CAAC;SAChB;;AAGD,QAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,QAAA,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElG,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhF,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,EACvC;AACI,YAAA,OAAO,KAAK,CAAC;SAChB;;AAGD,QAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,QAAA,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElG,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhF,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,EACvC;AACI,YAAA,OAAO,KAAK,CAAC;SAChB;;AAGD,QAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,QAAA,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElG,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhF,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,EACvC;AACI,YAAA,OAAO,KAAK,CAAC;SAChB;;AAGD,QAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,QAAA,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElG,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhF,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,EACvC;AACI,YAAA,OAAO,KAAK,CAAC;SAChB;;AAGD,QAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,QAAA,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElG,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhF,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,EACvC;AACI,YAAA,OAAO,KAAK,CAAC;SAChB;;AAGD,QAAA,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpG,QAAA,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAElG,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhF,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,SAAS,EACvC;AACI,YAAA,OAAO,KAAK,CAAC;SAChB;;AAGD,QAAA,OAAO,IAAI,CAAC;KACf;AA0BJ;;;AC9NM,IAAM,UAAU,GAAA,YAAA,GAAhB,MAAM,UAAW,SAAQ,MAAM,CAAA;IAMlC,WAAY,CAAA,OAAkB,EAAE,SAA2B,EAAA;AAEvD,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAE5B,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE;YACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QAE1C,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,EACpC;YACI,IAAI,CAAC,kBAAkB,EAAE,CAAC;;AAG1B,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,YAAA,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAEpB,YAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;YAC3B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAErC,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YACzB,KAAK,IAAI,CAAC,IAAI,KAAK;AACf,gBAAA,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;SAC7B;KACJ;IAED,OAAO,GAAA;QAEH,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAClC;AACI,YAAA,MAAM,OAAO,GAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC3E,YAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAChC;AACI,gBAAA,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;aACxD;AACD,YAAA,OAAO,OAAO,CAAC;SAClB;AACD,QAAA,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;KAC/G;AAED,IAAA,IAAI,OAAO,GAAA;QAEP,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;AACD,IAAA,IAAI,IAAI,GAAA;QAEJ,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;;AAGD,IAAA,IAAI,KAAK,GAAA;QAEL,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAC/E;IAED,OAAO,GAAA;QAEH,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAClC;AACI,YAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU;gBAC5B,IAAI,CAAC,OAAO,EAAE,CAAC;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;SAC7B;;AACI,YAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AAED;;AAEG;IACK,kBAAkB,GAAA;AAEtB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;YAAE,OAAO;QAC3C,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;YACpC,OAAO;QAEX,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC5C;;AAEI,YAAA,IAAI,YAAY,GAAG,IAAIC,aAAO,EAAE,CAAC;AACjC,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;AAC1B,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAChC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAE9B,YAAY,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACnC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAErD,IAAI,SAAS,GAAG,IAAIA,aAAO,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAErC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AACnC,YAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAID,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAC1D;gBACI,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC7D,OAAO;aACV;;AAEG,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;SAC/C;AAED,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACnE,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC5C;;AAEI,YAAA,IAAI,YAAY,GAAG,IAAIC,aAAO,EAAE,CAAC;YACjC,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,CAAC;AACnC,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAChC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAE9B,YAAY,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YACnC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAEnD,IAAI,SAAS,GAAG,IAAIA,aAAO,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACvD,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAErC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AACnC,YAAA,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAID,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAC1D;gBACI,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;AACnC,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7D,gBAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBAC1B,OAAO;aACV;;AAEG,gBAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;SAC5C;AACD,QAAA,GAAG,CAAC,kBAAkB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;KAC1C;AAID,IAAA,IAAI,YAAY,GAAA;QAEZ,IAAI,IAAI,CAAC,aAAa;YAClB,OAAO,IAAI,CAAC,aAAa,CAAC;AAC9B,QAAA,IACA;AACI,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC5B,IAAI,YAAU,CAAC,mBAAmB,IAAI,OAAO,CAAC,QAAQ,GAAG,EAAE,EAC3D;AACI,gBAAA,IAAI,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC;AAC9B,gBAAA,OAAO,GAAG,IAAIqC,gBAAQ,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;aAC/D;AAED,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACjE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;YACjD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;AAC7C,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC;YAIvC,OAAO,IAAI,CAAC,aAAa,CAAC;SAC7B;QACD,OAAO,KAAK,EACZ;YACI,OAAO,IAAImB,uBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;SAClD;KACJ;AAGD,IAAA,IAAI,YAAY,GAAA;QAEZ,IAAI,IAAI,CAAC,aAAa;YAClB,OAAO,IAAI,CAAC,aAAa,CAAC;QAE9B,IAAI,CAAC,YAAY,CAAC;QAClB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;AAED,IAAA,cAAc,CAAC,UAAsB,EAAA;AAEjC,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,IAAI,UAAU,KAAK,UAAU,CAAC,IAAI,EACzE;AACI,YAAA,IAAI,IAAI,GAAG,IAAIV,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;;;;;;;;;;AAY/F,YAAA,OAAO,IAAI,CAAC;SACf;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,UAAU,EAC7C;AACI,YAAA,OAAO,IAAInC,cAAQ,EAAE,CAAC,GAAG,CACrB,IAAIoC,UAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EACjF,IAAID,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,yBAAyB,EAAE,CAAC,CACjF,CAAC;SACL;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,QAAQ;YACvC,OAAO,IAAIC,UAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AACrD,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,KAAK,EACxC;AACI,YAAA,IAAI,IAAI,GAAG,aAAa,CAAC,0BAA0B,EAAE,CAAC;AACtD,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;YAChC,IAAI,IAAI,GAAG,IAAIA,UAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACnC,YAAA,IAAI,IAAI,GAAG,IAAIjB,WAAK,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;YACrE,OAAO,IAAInB,cAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SACzC;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,GAAG,EACtC;YACI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAClC;AACI,gBAAA,MAAM,QAAQ,GAAG,IAAIA,cAAQ,EAAE,CAAC;AAChC,gBAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU;AAC5B,oBAAA,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAClC,gBAAA,OAAO,QAAQ,CAAC;aACnB;AACD,YAAA,OAAO,IAAIA,cAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;SACzD;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,EAC5C;AACI,YAAA,OAAO,IAAIA,cAAQ,EAAE,CAAC,GAAG,CACrB,IAAIoC,UAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,EAC9C,IAAID,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,wBAAwB,EAAE,CAAC,CAChF,CAAC;SACL;KACJ;IAED,kBAAkB,GAAA;QAEd,IAAI,IAAI,CAAC,aAAa;AAClB,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,IAAI,CAAC,aAAa;AAClB,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;KAClC;IAED,SAAS,GAAA;QAEL,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,QAAA,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC;KAC5B;IAED,gBAAgB,CAAC,UAAsB,EAAE,GAAa,EAAA;QAElD,eAAe,CAAC,GAAG,CAAC,CAAC;AACrB,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,IAAI,UAAU,KAAK,UAAU,CAAC,IAAI,EACzE;YACI,IAAI,CAAC,GAAG,GAAmB,CAAC;AAC5B,YAAA,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;YAC/B,CAAC,CAAC,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;;;;;;;;;SAW/D;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,UAAU,EAC7C;YACI,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACvB,YAAA,OAAO,GAAG,CAAC,GAAG,CACV,IAAIC,UAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EACjF,IAAID,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,yBAAyB,EAAE,CAAC,CACjF,CAAC;SACL;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,QAAQ,EAC3C;YACI,IAAI,IAAI,GAAG,GAAW,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;AAClC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;SACrC;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,GAAG,EACtC;YACI,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACvB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9B,gBAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU;AAC5B,oBAAA,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;gBAE7B,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;SAC7C;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,EAC5C;YACI,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACvB,YAAA,OAAO,GAAG,CAAC,GAAG,CACV,IAAIC,UAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,EAC9C,IAAID,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,wBAAwB,EAAE,CAAC,CAChF,CAAC;SACL;KACJ;AAED;;AAEG;IACH,wBAAwB,CAAC,IAAgB,EAAE,GAAa,EAAA;AAEpD,QAAA,IAAI,IAAI,KAAK,UAAU,CAAC,SAAS,EACjC;YACI,IAAI,CAAC,GAAG,GAAY,CAAC;YACrB,CAAC,CAAC,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC/D;AACI,aAAA,IAAI,IAAI,KAAK,UAAU,CAAC,UAAU,EACvC;YACI,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAS,CAAC;YACnC,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACxE;AACI,aAAA,IAAI,IAAI,KAAK,UAAU,CAAC,SAAS,EACtC;YACI,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAS,CAAC;AACnC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;SACrC;aAED;YACI,IAAI,IAAI,GAAG,GAAW,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;SACrC;KACJ;AAED,IAAA,IAAI,WAAW,GAAA;AAEX,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC;QAE7B,IAAI,CAAC,IAAI,EACT;AACI,YAAA,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAChC,OAAO,IAAIzC,UAAI,CAAC;SACnB;QAED,IAAI,CAAC,IAAI,CAAC,WAAW;YACjB,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAE9B,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC9D;AAED,IAAA,IAAI,GAAG,GAAA;AAEH,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;QAC3B,IAAI,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAIL,aAAO,CAAC,CAAC;AACpC,QAAA,OAAO,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;KACjE;AACD,IAAA,mBAAmB,CACf,QAAwB,EACxB,SAAkB,EAClB,SAAkB,EAClB,SAAmB,EAAA;QAGnB,QAAQ,QAAQ;YAEZ,KAAK,cAAc,CAAC,GAAG;AACnB,gBAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9B,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG;gBACnB;oBACI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAClC;wBACI,MAAM,MAAM,GAAc,EAAE,CAAC;AAC7B,wBAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAChC;AACI,4BAAA,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AAC3B,4BAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,4BAAA,IAAI,GAAG,GAAG,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACjF,4BAAA,IAAI,QAAQ,KAAK,cAAc,CAAC,GAAG;AAC/B,gCAAA,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;;AAC3C,gCAAA,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;yBAC5B;AACD,wBAAA,OAAO,MAAM,CAAC;qBACjB;yBAED;wBACI,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AACtC,wBAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,wBAAA,IAAI,GAAG,GAAG,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACjF,wBAAA,IAAI,QAAQ,KAAK,cAAc,CAAC,GAAG;4BAC/B,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;AAC5C,wBAAA,OAAO,GAAG,CAAC;qBACd;iBACJ;SAGR;AACD,QAAA,OAAO,EAAE,CAAC;KACb;;IAKD,kBAAkB,GAAA;QAEd,IAAI,IAAI,CAAC,gBAAgB;YACrB,OAAO,IAAI,CAAC,gBAAgB,CAAC;QAEjC,IAAI,CAAC,aAAa,EAAE,CAAC;QAErB,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAChC;IAED,aAAa,GAAA;AAET,QAAA,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAElC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAClC;AACI,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,GAAG,CAAC;YAEhC,MAAM,MAAM,GAAc,EAAE,CAAC;AAC7B,YAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAChC;AACI,gBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AAC/B,gBAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EACjB;oBACI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAE/C,oBAAA,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBAClB;aACJ;AACD,YAAA,OAAO,MAAM,CAAC;SACjB;aAED;YACI,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;YAC1C,KAAK,IAAI,CAAC,IAAI,GAAG;AACb,gBAAA,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjC,YAAA,OAAO,GAAG,CAAC;SACd;KACJ;IAED,gBAAgB,GAAA;QAEZ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAClC;YACI,MAAM,MAAM,GAAc,EAAE,CAAC;AAC7B,YAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAChC;AACI,gBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAClC,gBAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EACjB;AACI,oBAAA,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBAClB;aACJ;AACD,YAAA,OAAO,MAAM,CAAC;SACjB;aAED;YACI,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC;YAC7C,KAAK,IAAI,CAAC,IAAI,GAAG;AACb,gBAAA,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjC,YAAA,OAAO,GAAG,CAAC;SACd;KACJ;;IAGO,WAAW,GAAA;QAEf,IAAI,OAAO,GAAc,EAAE,CAAC;QAC5B,IAAI,WAAW,GAAc,EAAE,CAAC;;QAEhC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAClC;AACI,YAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU,EAChC;AACI,gBAAA,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAClC,0BAA0B,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,KAAI;AAE3C,oBAAA,IAAI,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EACnB;wBACI,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;AAC5B,wBAAA,OAAO,IAAI,CAAC;qBACf;AACD,oBAAA,OAAO,KAAK,CAAC;AACjB,iBAAC,CAAC,CAAC;AAEH,gBAAA,IAAI,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;oBAC3B,OAAO,CAAC,KAAK,EAAE,CAAC;AAEpB,gBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;gBAE1B,KAAK,IAAI,CAAC,IAAI,OAAO;AACjB,oBAAA,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aACjC;SACJ;aAED;AACI,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;;AAE7B,YAAA,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC;gBACvE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7B,YAAA,0BAA0B,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC7C,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;YAC1B,KAAK,IAAI,CAAC,IAAI,OAAO;AACjB,gBAAA,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SACjC;QAED,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;;QAGjD,IAAI,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAEzE,QAAA,IAAI,GAAG,GAAc,EAAE,CAAC;;AAExB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EACvC;YACI,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,EAC5B;AACI,gBAAA,IAAI,WAAW;AACX,oBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;oBAEnG,GAAG,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC9F;iBAED;AACI,gBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC1G;SACJ;QAED,KAAK,IAAI,EAAE,IAAI,GAAG;AAAE,YAAA,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACrD,QAAA,OAAO,GAAG,CAAC;KACd;IAEO,YAAY,GAAA;QAEhB,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAc,EAAE,CAAC;AAC1B,QAAA,MAAM,YAAY,GAAG,CAAC,IAAW,KAAI;AAEjC,YAAA,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,EACxC;gBACI,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBAClC,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC5C,gBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACpB,gBAAA,IAAI,KAAK,GAAG,IAAIC,aAAO,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACpD,IAAI,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC3B,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,gBAAA,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACpD,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;aACrE;AACL,SAAC,CAAC;AACF,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9B,YAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,UAAU;gBAC5B,YAAY,CAAC,IAAI,CAAC,CAAC;;AAEvB,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAClC,QAAA,OAAO,GAAG,CAAC;KACd;IAED,cAAc,CAAC,SAAmB,EAAE,GAAY,EAAA;AAE5C,QAAA,IAAI,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC;YAAE,OAAO;QAElC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAClC;YACI,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAClD;gBACI,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAChC,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;AACzC,gBAAA,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC;AAE3H,gBAAA,UAAU,IAAI,WAAW,CAAC,MAAM,CAAC;AAEjC,gBAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;gBAEnC,IAAI,UAAU,IAAI,IAAI,YAAYiC,YAAI,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBACpF,IAAI,mBAAmB,GAAG,CAAC,IAAI,YAAYG,gBAAQ,KAAK,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACpG,IAAI,iBAAiB,GAAG,CAAC,IAAI,YAAYA,gBAAQ,KAAK,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;;gBAGvH,IAAI,MAAM,GAAG,UAAU,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,CAAC;gBACjE,IAAI,CAAC,MAAM,EACX;AACI,oBAAA,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE;AACZ,yBAAA,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;yBAC9C,IAAI,CAAC,CAAC,CAAC;AACP,yBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;iBACpD;;AAGD,gBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CAACxB,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAChE,gBAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAACA,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAEjE,gBAAA,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,mBAAmB;AACtD,wBAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;iBAC9D;;AAEI,oBAAA,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE;AACZ,yBAAA,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;yBACjD,IAAI,CAAC,CAAC,CAAC;AACP,yBAAA,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAEpD,oBAAA,IAAI,UAAU,IAAI,mBAAmB;AACjC,wBAAA,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;iBAEzE;AACD,gBAAA,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,iBAAiB;wBACxE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;iBAC5F;;AAEI,oBAAA,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE;AACZ,yBAAA,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;yBAClD,IAAI,CAAC,CAAC,CAAC;AACP,yBAAA,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAErD,oBAAA,IAAI,UAAU,IAAI,iBAAiB;wBAC/B,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;iBACzC;AAED,gBAAA,IAAI,MAAM;AACN,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AAEf,oBAAA,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;aACzC;SACJ;aAED;YACI,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;SAClD;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;IAED,iBAAiB,CAAC,SAAmB,EAAE,GAAY,EAAA;AAE/C,QAAA,IAAI,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC;YAAE,OAAO;QAElC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAClC;YACI,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,YAAA,IAAI,YAAY,GAAG,IAAI,GAAG,EAItB,CAAC;;AAGL,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAC/C;gBACI,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC9B,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACpC,gBAAA,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC;AAEnH,gBAAA,UAAU,IAAI,GAAG,CAAC,MAAM,CAAC;AAEzB,gBAAA,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE;AACnB,oBAAA,GAAG,EAAE,OAAO;oBACZ,KAAK,EAAE,GAAG,CAAC,MAAM;AACjB,oBAAA,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;AACxC,iBAAA,CAAC,CAAC;aACN;;AAGD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAC/C;gBACI,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC9B,gBAAA,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAEvE,gBAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAS;gBAEnC,IAAI,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACtC,IAAI,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;gBAE/C,IAAI,CAAC,MAAM;iBACX;AACI,oBAAA,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;yBAC7C,IAAI,CAAC,CAAC,CAAC;AACP,yBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;iBACpD;;AAGD,gBAAA,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,CAACA,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAChE,gBAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAACA,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;;AAGjE,gBAAA,IAAI,CAAC,MAAM,IAAI,WAAW;AACnB,wBAAC,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;wBACtD,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC;kBAE1C;;AAEI,oBAAA,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;yBAChD,IAAI,CAAC,CAAC,CAAC;AACP,yBAAA,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;iBACvD;gBACD,IACI,MAAM,IAAI,SAAS;wBACf,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;wBACpF,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC;kBAE3C;;AAEI,oBAAA,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;yBACjD,IAAI,CAAC,CAAC,CAAC;AACP,yBAAA,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;iBACxD;aACJ;;AAGD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAC/C;gBACI,IAAI,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC9B,gBAAA,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACtD,gBAAA,IAAI,MAAM;AACN,oBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AAEf,oBAAA,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;aAC5C;SACJ;aAED;YACI,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;SACrD;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AAED,IAAA,WAAW,CAAC,CAAU,EAAA;QAElB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAIH,QAAM,CAAC,CAAC,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,EACpC;AACI,YAAA,IAAI,EAAE,GAAG,IAAIV,aAAO,EAAE,CAAC;AACvB,YAAA,IAAI,EAAE,GAAG,IAAIA,aAAO,EAAE,CAAC;AACvB,YAAA,IAAI,EAAE,GAAG,IAAIA,aAAO,EAAE,CAAC;YACvB,CAAC,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC;AAC9C,gBAAA,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;iBAE9B;gBACI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC/C,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;AACnD,gBAAA,IAAI,CAAC,MAAM,CAACG,kBAAU,CAAC,MAAM,CAAC,CAAC;aAClC;SACJ;aAED;AACI,YAAA,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;SAC5B;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AACS,IAAA,iBAAiB,CAAC,CAAU,EAAA;AAElC,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,EACZ;YACI,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AAC/C,YAAA,OAAO,IAAI,CAAC;SACf;AAED,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAClC;AACI,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU;AACzB,gBAAA,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAEtE,IAAI,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC5C,YAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;SAC9B;;AAEG,YAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAEpF,QAAA,IAAI,CAAC,MAAM,CAACA,kBAAU,CAAC,QAAQ,CAAC,CAAC;AACjC,QAAA,OAAO,IAAI,CAAC;KACf;AAES,IAAA,SAAS,CAAC,IAAc,EAAA;AAE9B,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAc,CAAC;AAC9C,QAAA,IAAI,GAAG,KAAK,CAAC,EACb;AACI,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAW,CAAC;AAC7C,YAAA,IAAI,IAAI,CAAC,QAAQ,YAAY,MAAM,IAAI,IAAI,CAAC,UAAU,YAAY,MAAM,EACxE;AACI,gBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;AACrB,gBAAA,GAAG,CAAC,oBAAoB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;aAC3C;SACJ;AACI,aAAA,IAAI,GAAG,GAAG,CAAC,EAChB;AACI,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACnC,IAAI,cAAc,KAAK,CAAC;AACpB,gBAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,EAAW,CAAC;iBAEjD;AACI,gBAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,CAAC,EAAE,EACvC;oBACI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;iBAC3C;aACJ;SACJ;KACJ;AACD,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,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAClC;YACI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACnC,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU;AACzB,gBAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;SAC3B;aAED;AACI,YAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACd,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACrC;KACJ;;AAh0BM,UAAmB,CAAA,mBAAA,GAAG,KAAH,CAAS;AAF1B,UAAU,GAAA,YAAA,GAAA,UAAA,CAAA;IADtB,OAAO;AACK,CAAA,EAAA,UAAU,CAm0BtB;;AC50BM,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,UAAU,CAAA;AAAxC,IAAA,WAAA,GAAA;;AAEe,QAAA,IAAA,CAAA,cAAc,GAAmB,EAAE,GAAG,0BAA0B,EAAE,CAAC;QACzE,IAAQ,CAAA,QAAA,GAAuB,EAAE,CAAC;QACtC,IAAgB,CAAA,gBAAA,GAAG,CAAC,CAAC;KAqLhC;AApLG,IAAA,IAAI,eAAe,GAAA;QAEf,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAChC;AAED;;AAEG;AACH,IAAA,IAAI,aAAa,GAAA;;AAGb,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACjE,KAAK,IAAI,CAAC,IAAI,UAAU;YACpB,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;;QAG7C,IAAI,UAAU,GAAmB,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAClC;AACI,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAC7B;gBACI,IAAI,CAAC,YAAYkC,gBAAQ;oBACrB,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAY,CAAC,CAAC;;oBAE1C,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAU,CAAC,CAAC;aAC1C;SACJ;AAEG,aAAA,IAAI,IAAI,CAAC,UAAU,YAAYA,gBAAQ;YACnC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAY,CAAC,CAAC;;YAExD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAU,CAAC,CAAC;QAGzD,IAAI,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAGtG,QAAA,IAAI,SAAS,GAAG,IAAI,GAAG,EAAe,CAAC;AAEvC,QAAA,SAAS,YAAY,CAAC,IAAW,EAAE,GAAc,EAAA;YAE7C,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAElF,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAChE,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAEhE,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AAEnC,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;SACtB;;AAGD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAC1C;AACI,YAAA,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,WAAW,IAAI,CAAC,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC;aAC9C;AACI,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC;AACvB,gBAAA,IAAI,QAAQ,GAAG,UAAU,CAACxB,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;AACvD,gBAAA,IAAI,IAAa,CAAC;gBAClB,IAAI,IAAI,YAAYqB,YAAI;AACpB,oBAAA,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;qBAE7D;oBACI,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAClC,oBAAA,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBACvE;AACD,gBAAA,IAAI,KAAc,CAAC;gBACnB,IAAI,QAAQ,YAAYA,YAAI;AACxB,oBAAA,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;qBAElE;oBACI,IAAI,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACtC,oBAAA,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;iBAC/D;;AAGD,gBAAA,IAAI,GAAG,GAAG,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;;;;AAMtE,gBAAA,IAAI,IAAI,YAAYC,WAAG,EACvB;oBACI,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;AACnC,oBAAA,IAAI,MAAM,GAAG,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;oBAEjH,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5B,oBAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBACzB,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AACjF,oBAAA,IAAI,CAAC;AAAE,wBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACtB,IAAI,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACzD,oBAAA,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;iBAClC;AAGD,gBAAA,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACxB,gBAAA,YAAY,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;aAC/B;SACJ;AAED,QAAA,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,SAAS;AAC5B,YAAA,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC;AAErB,QAAA,OAAO,UAAU,CAAC;KACrB;AAED,IAAA,IAAI,SAAS,GAAA;QAET,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;KACnE;IACD,IAAI,eAAe,CAAC,EAAU,EAAA;AAE1B,QAAA,IAAI,EAAE,KAAK,IAAI,CAAC,gBAAgB;YAC5B,OAAO;QACX,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC;AACxC,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAC3B,IAAI,GAAG,GAAG,IAAIlC,aAAO,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AAES,IAAA,SAAS,CAAC,IAAc,EAAA;AAE9B,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,GAAG;AACtB,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAEpC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAE3C,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;AACI,YAAA,IAAI,CAAC,GAAqB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACnB,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACnB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACzB;KACJ;AACD,IAAA,SAAS,CAAC,IAAc,EAAA;AAEpB,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEd,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAElC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAEzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACjC,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAC9B;YACI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SACvB;KACJ;CACJ,CAAA;AAvLqB,UAAA,CAAA;IAAjB,gBAAgB;AAAoE,CAAA,EAAA,eAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACzE,UAAA,CAAA;IAAX,UAAU;AAAmC,CAAA,EAAA,eAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAHrC,eAAe,GAAA,UAAA,CAAA;IAD3B,OAAO;AACK,CAAA,EAAA,eAAe,CAyL3B;;AC1KD,MAAM,sBAAsB,CAAA;AAA5B,IAAA,WAAA,GAAA;AAEY,QAAA,IAAA,CAAA,YAAY,GAA0C,IAAI,GAAG,EAAE,CAAC;AAChE,QAAA,IAAA,CAAA,OAAO,GAAwB,IAAI,GAAG,EAAE,CAAC;AACzC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;AAmS9C,QAAA,IAAA,CAAA,wBAAwB,GAAG,CAAC,MAAc,KAAI;AAE1C,YAAA,OAAO,CAAC,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAI;AAE7C,gBAAA,IAAI,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC;AACpB,gBAAA,IAAI,GAAG;oBACH,OAAQ,GAA6B,CAAC,IAAI,CAAC;AACnD,aAAC,CAAC,CAAC;AACP,SAAC,CAAC;KA0CL;AAnVG,IAAA,QAAQ,CAAC,GAA8B,EAAE,OAA0B,GAAA,IAAI,EAAE,iBAA2B,EAAA;QAEhG,IAAI,UAAU,GAAiB,EAAE,CAAC;QAClC,IAAI,SAAS,GAAiB,EAAE,CAAC;QACjC,IAAI,aAAa,GAAiB,EAAE,CAAC;QACrC,IAAI,SAAS,GAAwB,EAAE,CAAC;AAExC,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;AAC7C,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC;YAC1B,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,YAAY,EACpC;AACI,gBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI;oBACpB,IAAI,CAAC,KAAK,IAAI;AACV,wBAAA,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;yBAC7C,IAAI,CAAC,KAAK,KAAK;AAChB,wBAAA,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;;AAE9C,wBAAA,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;qBAEtD;oBACI,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAoB,EAAE,aAAa,CAAC,CAAC;iBACnE;aACJ;QACL,aAAa,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;;QAE/D,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAC/B;AACI,YAAA,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;SAC3D;QAED,KAAK,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,EACjC;YACI,MAAM,OAAO,GAAG,iBAAiB,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;YACrE,SAAS,CAAC,IAAI,CAAC;AACX,gBAAA,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;gBACb,KAAK,EAAE,OAAO,CAAC,MAAM;AACrB,gBAAA,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC;AACtC,aAAA,CAAC,CAAC;SACN;QAED,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;KAC9D;;AACO,IAAA,MAAM,CAAC,GAA8B,EAAE,OAA0B,GAAA,IAAI,EAAE,iBAA2B,EAAA;;AAGtG,QAAA,MAAM,aAAa,GAAG,CAAC,SAAiB,EAAE,CAAuB,KAAI;YAEjE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC;gBACjC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBAE1C;gBACI,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC1C,gBAAA,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AACf,oBAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAClB;AACL,SAAC,CAAC;QAEF,MAAM,QAAQ,GAAY,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAoB,EAAE,CAAC;AAEtC,QAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EACjB;YACI,IAAI,CAAC,YAAY,KAAK;AAClB,gBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;AAEjB,gBAAA,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACzB;AACD,QAAA,KAAK,IAAI,CAAC,IAAI,SAAS,EACvB;AACI,YAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,cAAc,CAAC;YACnE,IAAI,IAAI,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;;AAE5C,YAAA,aAAa,CAAC,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,IAAI,IAAI,OAAO,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA,CAAA,EAAI,KAAK,CAAI,CAAA,EAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SACpI;AAED,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;;AAG9B,QAAA,KAAK,IAAI,EAAE,IAAI,QAAQ,EACvB;YACI,IAAI,CAAC,iBAAiB,IAAI,CAAC,EAAE,CAAC,SAAS;gBACnC,SAAS;;AAGb,YAAA,IAAI,KAAK,GAAG,EAAE,CAAC,SAAS,CAAC;YACzB,IAAIS,QAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,EACnC;AACI,gBAAA,oBAAoB,CAAC;AACjB,oBAAA,GAAG,EAAE,CAAG,EAAA,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAA,CAAA,EAAI,EAAE,CAAC,kBAAkB,CAAC,WAAW,IAAI,EAAE,CAAC,IAAI,CAAY,UAAA,CAAA;AAClG,oBAAA,OAAO,EAAE,IAAI;oBACb,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,oBAAA,GAAG,EAAE,EAAE;AACV,iBAAA,CAAC,CAAC;gBACH,SAAS;aACZ;YAED,KAAK,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,KAAK,EAC9B;AACI,gBAAA,KAAK,IAAI,GAAG,IAAI,MAAM,EACtB;oBACI,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAW,CAAC;AAE9D,oBAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;wBACpC,SAAS;oBAEb,IAAI,IAAI,GAAG,KAAK,CAAC;AACjB,oBAAA,IAAI,UAAkB,CAAC;AACvB,oBAAA,IAAI,IAAU,CAAC;oBACf,IAAI,QAAQ,GAAG,CAAC,CAAC;AACjB,oBAAA,QAAQ,EACR,KAAK,IAAI,KAAK,IAAI,GAAG,EACrB;AACI,wBAAA,IAAI,EAAE,GAAG,KAAK,CAAC,MAAoC,CAAC;AACpD,wBAAA,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO;4BAAE,MAAM;AAE7B,wBAAA,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,EAAE,MAAqB,CAAC;wBAEhD,IAAI,CAAC,KAAK,EACV;AACI,4BAAA,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAAA,KAAA,EAAQ,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAO,IAAA,EAAA,EAAE,CAAC,IAAI,CAA0B,wBAAA,CAAA,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAClL,4BAAA,GAAG,CAAC,CAAA,GAAA,EAAM,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAAA,KAAA,EAAQ,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAA,IAAA,EAAO,EAAE,CAAC,IAAI,CAAA,wBAAA,CAA0B,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;4BACpJ,MAAM;yBACT;AAED,wBAAA,IAAI,EAAE,YAAY,YAAY,EAC9B;AACI,4BAAA,QAAQ,EAAE,CAAC,IAAI;gCAEX,KAAK,aAAa,CAAC,GAAG;AAClB,oCAAA,QAAQ,EAAE,CAAC;oCACX,MAAM;gCACV,KAAK,aAAa,CAAC,GAAG,CAAC;gCACvB,KAAK,aAAa,CAAC,GAAG;oCAClB,MAAM;gCACV,KAAK,aAAa,CAAC,EAAE;oCACjB,IAAI,GAAG,IAAI,CAAC;oCACZ,MAAM;gCACV,KAAK,aAAa,CAAC,IAAI,CAAC;gCACxB,KAAK,aAAa,CAAC,OAAO;oCACtB,UAAU,GAAG,IAAI,CAAC;oCAClB,MAAM;AACV,gCAAA;AACI,oCAAA,MAAM,QAAQ,CAAC;6BACtB;AACD,4BAAA,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,QAAQ,CAAC,UAAU,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC,CAAC;yBACjF;6BAED;4BACI,IAAI,EAAE,CAAC,SAAS;gCACZ,IAAI,GAAG,IAAI,CAAC;yBACnB;AACD,wBAAA,IAAI,CAAC,UAAU;AACX,4BAAA,UAAU,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC;AACrC,wBAAA,IAAI,CAAC,IAAI;4BACL,IAAI,GAAG,EAAE,CAAC;qBACjB;AAED,oBAAA,IAAI,UAAU,IAAI,IAAI,EACtB;wBACI,IAAI,IAAI,IAAI,uBAAuB,CAAC,aAAa,CAAC,MAAM,EACxD;AACI,4BAAA,aAAa,CAAC,IAAI,GAAG,UAAU,EAAE,IAAI,CAAC,CAAC;yBAC1C;6BACI,IAAI,QAAQ,KAAK,CAAC,IAAI,uBAAuB,CAAC,aAAa,CAAC,MAAM,EACvE;AACI,4BAAA,aAAa,CAAC,IAAI,GAAG,UAAU,EAAE,IAAI,CAAC,CAAC;yBAC1C;6BAED;AACI,4BAAA,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;yBACnC;qBACJ;iBACJ;aACJ;;AAED,YAAA,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;AACxB,gBAAA,KAAK,IAAI,KAAK,IAAI,EAAE,CAAC,UAAU,EAC/B;oBACI,IAAI,CAAC,KAAK,EAAE,OAAO;AACf,wBAAA,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,MAAsB,CAAC,CAAC;iBAC1D;;AAGL,YAAA,KAAK,MAAM,GAAG,IAAI,EAAE,CAAC,gBAAgB,EACrC;AACI,gBAAA,IAAI,KAAK,GAAG,GAAG,EAAE,MAAuB,CAAC;gBACzC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,cAAc,EACnD;AACI,oBAAA,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,cAAc,CAAC;oBACvE,IAAI,IAAI,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC;;AAEhD,oBAAA,aAAa,CAAC,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,IAAI,IAAI,OAAO,CAAA,CAAA,EAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA,CAAA,EAAI,KAAK,CAAI,CAAA,EAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;iBAChJ;aACJ;;AAGD,YAAA,IAAI,SAAS,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,SAAS,EACd;AACI,gBAAA,oBAAoB,CAAC;oBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,oBAAA,GAAG,EAAE,kBAAkB;AACvB,oBAAA,OAAO,EAAE,KAAK;AACd,oBAAA,GAAG,EAAE,EAAE;AACV,iBAAA,CAAC,CAAC;AACH,gBAAA,MAAM,aAAa,CAAC;aACvB;YAED,IAAI,QAAQ,GAAmB+C,kBAAU,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YACnE,IAAI,KAAK,GAAG,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;;AAGvD,YAAA,IAAI,WAAW,GAAG,uBAAuB,CAAC,WAAW,GAAG,CAAC,CAAC;YAE1D,IAAI,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAE3C,YAAA,KAAK,IAAI,IAAI,IAAI,QAAQ,EACzB;AACI,gBAAA,IAAI/C,QAAM,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC;oBAAE,SAAS;AACnC,gBAAA,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC;AAE3B,gBAAA,IAAI,CAAC,GAAG,CAAA,EAAG,IAAI,CAAC,IAAI,CAAI,CAAA,EAAA,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,CAAI,CAAA,EAAA,KAAK,EAAE,CAAC;AAC9D,gBAAA,IAAI,OAAO,IAAI,OAAO,CAAC,YAAY,EACnC;oBACI,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC1C;gBACD,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC9B,gBAAA,IAAI,CAAC,GAAG;oBACJ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;;AAEjC,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;aAC/C;SACJ;KACJ;;AACD,IAAA,SAAS,CAAC,EAA2B,EAAE,IAAY,EAAE,GAAY,EAAA;QAE7D,IAAI,IAAI,GAAG,EAAE,YAAYV,aAAO,GAAG,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAIA,aAAO,CAAC,CAAC;AACjF,QAAA,MAAM,QAAQ,GAAG,uBAAuB,CAAC,aAAa,CAAC,oCAAoC,CAAC;AAC5F,QAAA,OAAO,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC;KAC3F;AACD,IAAA,kBAAkB,CAAC,CAAS,EAAE,CAAkB,EAAE,aAA2B,EAAA;AAEzE,QAAA,MAAM,QAAQ,GAAG,uBAAuB,CAAC,aAAa,CAAC,oCAAoC,CAAC;AAC5F,QAAA,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAChB;YACI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,eAAe,CAAC,EACtC;gBACI,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,CAA0B,KAAI;oBAE5D,IAAI,IAAI,GAAG,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAIA,aAAO,CAAC,CAAC;AACnD,oBAAA,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;oBACnF,OAAO,CAAC,GAAG,CAAC,CAAC;iBAChB,EAAE,CAAC,CAAC,CAAC;AACN,gBAAA,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;aACxH;iBAED;AACI,gBAAA,IAAI,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;gBACpC,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,MAAM,GAAI,CAAC,CAAC,CAAC,CAAqB,CAAC,cAAc,CAAC,MAAM,CAAC;AAC7D,gBAAA,KAAK,IAAI,CAAC,IAAI,CAAC,EACf;oBACI,IAAI,CAAC,GAAG,CAAoB,CAAC;AAC7B,oBAAA,IAAI,GAAG,GAAG,CAAC,CAAC,aAAa,CAAC;AAC1B,oBAAA,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;AACI,wBAAA,IAAI,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACjD,wBAAA,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAChB;AACI,4BAAA,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;yBAClC;6BAED;AACI,4BAAA,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;yBACnB;qBACJ;iBACJ;gBAED,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,EAC5B;AACI,oBAAA,IAAI,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;oBAC1E,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;iBAC7E;aACJ;SACJ;KACJ;AAWO,IAAA,cAAc,CAAC,GAAY,EAAA;AAE/B,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;AACtB,QAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EACjB;YACI,IAAI,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,KAAK,GAAG,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,GAAG,GAAG,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAClD,IAAI,KAAK,GAAG,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,GAAG,GAAG,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAC;YAClD,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,CAAC,IAAI,EACT;gBACI,IAAI,GAAG,EAAE,CAAC;gBACV,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;aAChC;AACD,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAChB;KACJ;AACD,IAAA,iBAAiB,CAAC,EAAS,EAAA;QAEvB,IAAI,IAAI,GAAGyD,kBAAU,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AACvC,QAAA,IAAI,IAAI;YACJ,OAAO,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;;YAE7C,OAAO,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;KAC5C;AACD,IAAA,aAAa,CAAC,GAAY,EAAA;QAEtB,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAI;YAE1B,IAAI,IAAI,GAAGA,kBAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACtC,YAAA,IAAI,EAAU,CAAC;AACf,YAAA,IAAI,IAAI;gBACJ,EAAE,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;;gBAEhD,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,MAAM,GAAG,GAAG,CAAC;YAClC,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,OAAO,IAAI,GAAG,EAAE,CAAC;SACpB,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;KACpB;AACJ,CAAA;AAEM,MAAM,sBAAsB,GAAG,IAAI,sBAAsB,EAAE;;AClX3D,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,iBAAiB,CAAA;AAI9C,IAAA,WAAA,GAAA;AAEI,QAAA,KAAK,EAAE,CAAC;AAER,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,KAAK,CAAC,EAAE,EAAE;YACzB,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;AACI,oBAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE,EAC/B;wBACI,IAAI,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,MAAM,YAAY,MAAM,EAC/D;4BACI,IAAI,CAAC,IAAI,CAAC,EAAE;AACR,gCAAA,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;;gCAErC,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC;yBACtC;qBACJ;iBACJ;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;gBAChB,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;aAC7C;AACJ,SAAA,CAAC,CAAC;KACN;AACD,IAAA,IAAI,IAAI,GAAA;QAEJ,OAAO,IAAI,CAAC,IAAI,CAAC;KACpB;IACD,IAAI,IAAI,CAAC,IAAY,EAAA;AAEjB,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,EACtB;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;SACpB;KACJ;IAED,KAAK,GAAA;AAED,QAAA,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC;KACxD;;AAGD,IAAA,QAAQ,CAAC,IAAc,EAAA;AAEnB,QAAU,IAAI,CAAC,IAAI,GAAG;AACtB,QAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrB,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAY,CAAC;AAElC,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;AACI,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AAC7B,YAAA,IAAI,EAAE;AAAE,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACjC;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;QACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAChC,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO;AACvB,YAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;KAC9B;CAEJ,CAAA;AA1Ee,UAAA,CAAA;IAAX,UAAU;AAAqB,CAAA,EAAA,WAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAFvB,WAAW,GAAA,UAAA,CAAA;IADvB,OAAO;AACK,CAAA,EAAA,WAAW,CA4EvB;;ACjFD;AACM,SAAU,mBAAmB,CAAC,GAAa,EAAE,WAAmB,EAAE,UAAA,GAAyB,UAAU,CAAC,SAAS,EAAA;IAEjH,IAAI,WAAW,GAAG,WAAW,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC;IACtE,IAAI,WAAW,CAAC,MAAM;QAClB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;;AAE/B,QAAA,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC7B;;ACVA;;AAEG;AACI,MAAM,GAAG,GAAG,IAAI;;ACJvB;AAcA;MACa,YAAY,CAAA;AAIrB,IAAA,WAAA,CAAY,aAAwB,GAAA,CAAC,EAAE,SAAA,GAAoB,GAAG,EAAA;AAE1D,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,UAAU,GAAG,GAAG,GAAG,SAAS,CAAC;KACrC;;;;;;IAOD,cAAc,CAAI,GAAa,EAAE,MAAS,EAAA;QAEtC,IAAI,IAAI,GAAG,EAAE,CAAC;AACd,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AACjC,QAAA,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;YACI,IAAI,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;AACjD,YAAA,IAAI,IAAI,cAAc,GAAG,GAAG,CAAC;SAChC;AACD,QAAA,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;aAE5D;YACI,IAAI,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,IAAG;gBAEzB,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC;AACrC,gBAAA,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAChB,gBAAA,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;AAC1C,aAAC,CAAC,CAAC;AACH,YAAA,IAAI,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC;AAC7B,YAAA,IAAI,SAAS,GAAG,CAAC,IAAI,WAAW,CAAC;AACjC,YAAA,KAAK,IAAI,QAAQ,GAAG,CAAC,EAAE,QAAQ,GAAG,SAAS,EAAE,EAAE,QAAQ,EACvD;gBACI,IAAI,eAAe,GAAG,QAAQ,CAAC;gBAC/B,IAAI,GAAG,EAAE,CAAC;AACV,gBAAA,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAG;AAEzB,oBAAA,IAAI,IAAI,QAAQ,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;oBACtC,eAAe,KAAK,CAAC,CAAC;AAC1B,iBAAC,CAAC,CAAC;AACH,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;aACnC;AACD,YAAA,OAAO,MAAM,CAAC;SACjB;KACJ;AACJ;;AC1CD,IAAY,SAKX,CAAA;AALD,CAAA,UAAY,SAAS,EAAA;AAEjB,IAAA,SAAA,CAAA,SAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;AACT,IAAA,SAAA,CAAA,SAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,SAAA,CAAA,SAAA,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAO,CAAA;AACX,CAAC,EALW,SAAS,KAAT,SAAS,GAKpB,EAAA,CAAA,CAAA,CAAA;AAEM,MAAM,kBAAkB,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAEnD;;AAEG;MACU,MAAM,CAAA;AAKf,IAAA,WAAA,CAAY,OAAgB,EACxB,KAAgB,EACT,SAAoB,EACpB,KAAa,EACb,QAAgB,EACf,GAAM,GAAA,OAAO,CAAC,WAAW,EAAA;QAH1B,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QACpB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;QACb,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAQ;QACf,IAAG,CAAA,GAAA,GAAH,GAAG,CAAsB;AAPrC,QAAA,IAAA,CAAA,SAAS,GAAiB,EAAE,CAAC;QAUzB,IAAI,CAAC,WAAW,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;QAClG,KAAK,IAAI,CAAC,IAAI,KAAK;YACf,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;QAElG,IAAI,CAAC,GAAG,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KACjD;AAED;;;AAGG;AACH,IAAA,MAAM,CAAC,MAAc,EAAE,SAAS,GAAG,IAAI,EAAA;;AAGnC,QAAA,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;YAAE,OAAO;QAE/E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;YAAE,OAAO;AAEjD,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACrB,QAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;;QAGrB,IAAI,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ;YACpF,OAAO;QAEX,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACtC,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS;AAC3B,YAAA,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAE9B,IAAI,SAAS,EACb;YACI,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACvC,YAAA,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,SAAS;AAC7B,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;SAChC;KACJ;AAEO,IAAA,OAAO,CAAC,MAAc,EAAA;AAE1B,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,GAAG;YAAE,OAAO;;QAG7C,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,EACvC;AACI,YAAA,IAAI,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK;gBACzB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;;gBAElC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SACpC;aAED;YACI,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ;gBAC1C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;;gBAElC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SACpC;KACJ;AAED,IAAA,IAAI,CAAC,aAAuB,EAAE,OAAiB,EAAE,SAA4B,EAAE,QAAiB,EAAA;QAE5F,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AACzD,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS;YAC3B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAEjD,QAAA,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,GAAG;YAAE,OAAO;QAE7C,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,KAAK,CAAC;AACjD,QAAA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC9H;AACJ,CAAA;AAmBD,SAAS,UAAU,CAAC,QAAmB,EAAE,UAAkB,EAAE,QAAgB,EAAE,KAAa,EAAE,QAAgB,EAAA;AAE1G,IAAA,IAAI,QAAQ,KAAK,SAAS,CAAC,KAAK;AAC5B,QAAA,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,GAAG,KAAK,EAAE,QAAQ,CAAC,CAAC;;QAElE,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACxD,CAAC;AAED;AACA,IAAK,aAIJ,CAAA;AAJD,CAAA,UAAK,aAAa,EAAA;AAEd,IAAA,aAAA,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAS,CAAA;IACT,aAAS,CAAA,aAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAA,CAAA;AACb,CAAC,EAJI,aAAa,KAAb,aAAa,GAIjB,EAAA,CAAA,CAAA,CAAA;AAED;MACa,eAAe,CAAA;IAMxB,WAAmB,CAAA,OAAgB,EAAS,QAAA,GAA8B,EAAE,EAAA;QAAzD,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;QAAS,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAwB;KAAK;AAEjF,IAAA,SAAS,CAAC,IAAqB,EAAA;QAE3B,IAAI,IAAI,CAAC,MAAM;AACX,YAAA,MAAM,wBAAwB,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC5B;AAED,IAAA,IAAI,KAAK,GAAA;QAEL,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,OAAO,MAAM,EACb;AACI,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAEvB,IAAI,KAAK,GAAG,EAAE;AACV,gBAAA,MAAM,wBAAwB,CAAC;SACtC;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAED,IAAA,IAAI,MAAM,GAAA;AAEN,QAAA,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;KAC/B;IAED,IAAI,CAAC,aAAuB,EAAE,OAAiB,EAAE,KAAc,EAAE,CAAS,EAAE,QAAiB,EAAE,QAAgB,EAAA;;QAG3G,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;AAehD,QAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAG;;YAG9B,IAAI,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;AAC7C,YAAAvC,gBAAc,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC9B,YAAA,OAAO,GAAG,CAAC;AACf,SAAC,CAAC,CAAC;QAEH,IAAI,KAAK,GAAGoC,gBAAU,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAEpD,QAAA,KAAK,IAAI,CAAC,IAAI,KAAK,EACnB;YACI,IAAI,KAAK,EACT;gBACI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC9B;iBAED;gBACI,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC3B,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC9B;SACJ;AAED,QAAA,SAAS,UAAU,CAAC,CAAU,EAAE,GAAG,GAAG,CAAC,EAAA;AAEnC,YAAA,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAClC,YAAA,IAAI,QAAQ;AACR,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;;AAErC,gBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;SAC5C;AAED,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAC9B;AACI,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAC3B;AACI,gBAAA,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;aAChE;SACJ;AAED,QAA0C,OAAO;KAmCpD;IAED,OAAO,gBAAgB,CAAC,YAA+B,EAAA;AAEnD,QAAA,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO;QAEpC,IAAI,EAAE,GAAG,IAAII,4BAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAC3C,QAAA,KAAK,IAAI,IAAI,IAAI,YAAY,EAC7B;YACI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;AAC9B,YAAA,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAC1E;QACD,EAAE,CAAC,MAAM,EAAE,CAAC;AAEZ,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAC5C;AACI,YAAA,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC;AAEvC,YAAA,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACxF,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;AACpE,YAAA,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;gBACI,IAAI,EAAE,KAAK,CAAC;oBAAE,SAAS;AAEvB,gBAAA,IAAI,KAAK,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;AAC7B,gBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;AAAE,oBAAA,SAAS;gBAEhE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EACpC;AACI,oBAAA,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;oBACvB,MAAM;iBACT;aACJ;SACJ;KACJ;AACJ,CAAA;AAED,MAAM,iBAAiB,CAAA;AAMnB,IAAA,WAAA,CAAmB,QAAgB,EAAA;QAAhB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAQ;QAJnC,IAAiB,CAAA,iBAAA,GAAa,EAAE,CAAC;QAEjC,IAAU,CAAA,UAAA,GAAW,EAAE,CAAC;QACxB,IAAS,CAAA,SAAA,GAAW,EAAE,CAAC;KACiB;AACxC,IAAA,UAAU,CAAC,EAAW,EAAE,EAAW,EAAE,KAAa,EAAA;AAE9C,QAAA,IAAI,KAAK,KAAK,CAAC,EACf;YACI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,IAAI,GAAG,IAAIxB,YAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC7B;AACI,aAAA,IAAI,KAAK,KAAK,IAAI,CAAC,QAAQ,EAChC;YACI,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,IAAI,GAAG,IAAIA,YAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC9B;KACJ;AAED,IAAA,QAAQ,CAAC,aAAuB,EAAE,OAAiB,EAAE,QAAiB,EAAA;QAElE,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAE5C,QAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EACtC;AACI,YAAA,IAAI,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;YACvB,IAAI,KAAK,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACtC,IAAI,YAAY,GAAsB,EAAE,CAAC;;YAGzC,IAAI,WAAW,GAAW,EAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,IAAI,KAAK;AACf,gBAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;AACtB,oBAAA,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC5B,YAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAC1B;gBACI,IAAI,MAAM,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;AAC5C,gBAAA,KAAK,IAAI,CAAC,IAAI,MAAM,EACpB;AACI,oBAAA,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;wBAAE,SAAS;AAC3B,oBAAA,IAAI,EAAE,GAAG,IAAIG,gBAAQ,EAAE,CAAC;oBACxB,EAAE,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AAChC,oBAAA,EAAE,CAAC,GAAG,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;AACpC,oBAAA,KAAK,IAAI,EAAE,IAAI,CAAC,EAChB;AACI,wBAAA,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,KAAKnC,cAAM,CAAC,IAAI;4BACvC,EAAE,CAAC,KAAK,EAAE,CAAC;qBAClB;AAED,oBAAA,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;oBACpB,IAAI,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;AAC9E,oBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,GAAG;wBACjB,YAAY,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;;AAE1C,wBAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;iBACxD;aACJ;AAED,YAAA,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC,cAAc,EACvC;AACI,gBAAA,IAAI,EAAE,GAAY,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC3C,IAAI,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,cAAc,CAAC,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAC1F,gBAAA,IAAI,CAAC;oBACD,YAAY,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;;AAE1C,oBAAA,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;aACxD;AAED,YAAA,eAAe,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;YAE/C,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,GACrC;AACI,gBAAA,IAAI,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC3B,IAAI,IAAI,CAAC,MAAM;oBAAE,SAAS;gBAE1B,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;aAClG;SACJ;KACJ;AACJ,CAAA;AAED;;AAEG;MACU,IAAI,CAAA;AAEb,IAAA,WAAA,CACW,KAAa,EACb,GAAW,EAEX,MAAc,EACd,GAAW,EAAA;QAJX,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;QACb,IAAG,CAAA,GAAA,GAAH,GAAG,CAAQ;QAEX,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QACd,IAAG,CAAA,GAAA,GAAH,GAAG,CAAQ;KAIrB;;AAGD,IAAA,IAAI,KAAK,GAAA;AAEL,QAAA,OAAO,IAAImC,gBAAQ,EAAE,CAAC,gBAAgB,CAAC,IAAIrC,aAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAIA,aAAO,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;KACjH;AAED,IAAA,IAAI,CAAC,CAAO,EAAA;QAER,IAAI,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACrE,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACnE,IAAI,EAAE,KAAK,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAG;YAEvE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACvD,SAAC,CAAC,CAAC;QAEH,IAAI,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACtE,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,EACnB;YACI,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAClD;AACD,QAAA,OAAO,GAAG,CAAC;KACd;AAED,IAAA,KAAK,CAAC,IAAc,EAAA;QAEhB,IAAI,GAAG,GAAW,EAAE,CAAC;AACrB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;AACrB,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,EAClB;AACI,YAAA,IAAI,CAAC,GAAG,GAAG,EACX;AACI,gBAAA,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG;AAAE,oBAAA,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;AAChC,gBAAA,IAAIU,QAAM,CAAC,GAAG,EAAE,CAAC,CAAC;oBAAE,SAAS;AAC7B,gBAAA,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAClD,GAAG,GAAG,CAAC,CAAC;AACR,gBAAA,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG;oBAAE,MAAM;aAC7B;SACJ;AAED,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG;YACd,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7D,QAAA,OAAO,GAAG,CAAC;KACd;AACJ,CAAA;AAED;;AAEG;MACU,cAAc,CAAA;IAKvB,WAAY,CAAA,OAAgB,EAAE,KAAgB,EAAA;QAH9C,IAAQ,CAAA,QAAA,GAAqB,EAAE,CAAC;AAK5B,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;KACtE;IAED,QAAQ,GAAA;QAEJ,IAAI,CAAC,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACjF,QAAA,OAAO,CAAC,CAAC;KACZ;AAED;;AAEG;AACH,IAAA,MAAM,CAAC,CAAiB,EAAE,MAAA,GAAkB,KAAK,EAAA;AAE7C,QAAA,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAI,IAAI,CAAC,KAAK,CAAC;AACxC,YAAA,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AAClB,gBAAA,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,MAAM,EACV;AACI,YAAA,IAAI,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;AACtB,YAAA,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC1B;KACJ;;AAGD,IAAA,OAAO,CAAC,CAAiB,EAAA;AAErB,QAAA,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAC3C;AACI,YAAA,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,EACtC;AACI,gBAAA,IAAI,GAAG,GAAG,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC7D,gBAAA,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;aACpD;SACJ;KACJ;AAED;;AAEG;AACK,IAAA,aAAa,CAAC,CAAiB,EAAA;AAEnC,QAAA,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAI,IAAI,CAAC,KAAK,CAAC;AACxC,YAAA,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;AAClB,gBAAA,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AAE3B,QAAA,OAAO,IAAI,CAAC;KACf;IAED,YAAY,GAAA;AAER,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAC7C;YACI,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC1B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EACjD;gBACI,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAE1B,gBAAA,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AACrB,gBAAA,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;aACxB;SACJ;KACJ;IAED,IAAI,CAAC,aAAuB,EAAE,OAAiB,EAAE,KAAc,EAAE,CAAS,EAAE,QAAiB,EAAE,QAAgB,EAAA;QAE3G,IAAI,CAAC,YAAY,EAAE,CAAC;AAEpB,QAAA,IAAI,SAAS,GAAe,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAEhD,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;YACpB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhC,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAC3B;YACI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACpC,YAAA,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK;gBACjB,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;SACnC;;AAGD,QAAA,IAAI,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,YAAY,GAAsB,EAAE,CAAC;AACzC,QAAA,KAAK,IAAI,GAAG,IAAI,MAAM,EACtB;YACI,IAAI,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC1C,YAAA,IAAI,CAAC;gBACD,YAAY,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;;AAE1C,gBAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC3B;AAED,QAAA,eAAe,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAE/C,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,GACrC;AACI,YAAA,IAAI,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;;YAE3B,IAAI,IAAI,CAAC,MAAM;gBAAE,SAAS;AAE1B,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;SACnE;KACJ;AACJ,CAAA;AAGD;;AAEG;AACH,MAAM,SAAS,CAAA;IAIX,WAAmB,CAAA,OAAgB,EAAS,QAAuB,EAAA;QAAhD,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;QAAS,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAe;QADnE,IAAW,CAAA,WAAA,GAAa,EAAE,CAAC;AAGvB,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;KACnD;AAED,IAAA,IAAI,MAAM,GAAA;QAEN,IAAI,OAAO,GAAa,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7D,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAC/B;YACI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;YAClCM,mBAAiB,CAAC,OAAO,CAAC,CAAC;AAC3B,YAAA,0BAA0B,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,KAAKN,QAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;SACnE;QAED,IAAI,SAAS,GAAe,EAAE,CAAC;QAE/B,SAAS,EAAE,CAAC,CAAU,EAAA;AAElB,YAAA,OAAO,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;SACvC;AAED,QAAA,MAAM,WAAW,GAAG,CAAC,CAAQ,KAAI;YAE7B,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,YAAA,KAAK,IAAI,CAAC,IAAI,OAAO,EACrB;AACI,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,SAAS;AACxB,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,MAAM;AAErB,gBAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACvD;YACD,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvD,YAAA,IAAI,EAAE,GAAG,IAAI2B,gBAAQ,CAAC,GAAG,CAAC,CAAC;AAC3B,YAAA,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACvB,SAAC,CAAC;AAEF,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,EACxB;YACI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACf;gBACI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,gBAAA,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;aACpD;;gBAEG,WAAW,CAAC,CAAC,CAAC,CAAC;SACtB;AACD,QAAA,OAAO,SAAS,CAAC;KACpB;AAED;;AAEG;AACH,IAAA,KAAK,CAAC,CAAiB,EAAA;QAEnB,IAAI,CAAC,IAAI,CAAC,GAAG,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvF,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,aAAa,CAAC,KAAK;AACrC,YAAA,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAC7B;AACI,YAAA,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EACrB;AACI,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,4BAA4B,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/E,gBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,aAAa,CAAC,KAAK;AACrC,oBAAA,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAElE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;gBAEnC,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC7F,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC5F,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;aAC9F;SACJ;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AAED;;AAEG;AACH,IAAA,MAAM,CAAC,CAAiB,EAAA;QAEpB,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEtB,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QAClF,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAEjF,QAAA,OAAO,IAAI,CAAC;KACf;AAED;;AAEG;AACH,IAAA,aAAa,CAAC,CAAiB,EAAA;QAE3B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACrC,QAAA,OAAO,IAAI,CAAC;KACf;AACJ,CAAA;AAED,MAAM,UAAU,CAAA;IAIZ,WAAmB,CAAA,KAA0B,EAClC,SAAoB,EACpB,KAAa,EACb,QAAgB,EAChB,QAAuB,EAAA;QAJf,IAAK,CAAA,KAAA,GAAL,KAAK,CAAqB;QAClC,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QACpB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;QACb,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAQ;QAChB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAe;;QAI9B,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;KAChF;AAED;;;;AAIG;AACH,IAAA,MAAM,CAAC,MAAc,EAAE,YAAY,GAAG,KAAK,EAAA;AAEvC,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,4BAA4B,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChF,IAAI,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,WAAW,CAAC,QAAQ;AAC7C,YAAA,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAC7B;AACI,YAAA,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,SAAS,EAC9B;AACI,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,4BAA4B,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;;AAGhE,gBAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ;AAC5B,oBAAA,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;;AAGtE,gBAAA,IAAI,SAA6B,CAAC;AAClC,gBAAA,IAAI,YAAY;AACZ,oBAAA,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;;AAE5B,oBAAA,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;AAExD,gBAAA,KAAK,IAAI,CAAC,IAAI,SAAS,EACvB;oBACI,IAAI,IAAI,GAAuB,EAAE,CAAC;AAClC,oBAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS;AACxB,wBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7E,oBAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;iBACzB;aACJ;SACJ;AAED,QAAA,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;AAClD,QAAA,IAAI,YAAY;YACZ,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAElC,KAAK,IAAI,CAAC,IAAI,MAAM;YAChB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;KACtE;AAED,IAAA,WAAW,CAAC,IAAU,EAAA;AAElB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,4BAA4B,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAClE,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ;YACvB,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;KAClE;AAED;;;;;;;AAOG;AACH,IAAA,aAAa,CAAC,UAAkB,EAAE,QAAgB,EAAE,QAAmB,EAAE,KAAa,EAAA;AAElF,QAAA,IAAI3B,QAAM,CAAC,UAAU,EAAE,QAAQ,CAAC;YAAE,OAAO;AACzC,QAAA,IAAI,UAAU,GAAG,QAAQ,EACzB;AACI,YAAA,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YACrE,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACjD,YAAA,OAAO,IAAI,CAAC;SACf;AAED,QAAA,IAAI,OAAO,GAAG,UAAU,CAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/E,IAAI,IAAI,GAAW,EAAE,CAAC;AACtB,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;YACnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAElC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,IAAI,CAAC,aAAuB,EAAE,OAAiB,EAAE,SAA4B,EAAA;QAEzE,IAAI,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE3C,IAAI,OAAO,GAAG,IAAI,CAAC,QAAQ,KAAK,aAAa,CAAC,KAAK,CAAC;AACpD,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE7B,SAAS,UAAU,CAAC,CAAU,EAAA;AAE1B,YAAA,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxB,YAAA,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAExB,YAAA,IAAI,OAAO,IAAI,kBAAkB,CAAC,KAAK;aACvC;AACI,gBAAA,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;AACT,oBAAA,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrB,qBAAA,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ;AACrB,oBAAA,aAAa,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;;AAEjC,oBAAA,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC/B;;AAEG,gBAAA,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/B;QAED,IAAI,KAAK,GAAW,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAChD,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI;YACtB,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACvC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EACrC;YACI,IAAI,QAAQ,GAAGG,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YACtC,IAAI,SAAS,GAAGA,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;AAEvC,YAAA,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACpB,YAAA,IAAI,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC9B,YAAA,IAAI,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;AAEhC,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClE,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAChE,YAAA,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;YAC5E,SAAS,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1C,SAAS,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;;YAGvC;AACI,gBAAA,IAAI,UAAmB,CAAC;AACxB,gBAAA,IAAI,UAAmB,CAAC;gBAExB,MAAM,SAAS,GAAG,CAAC,CAAS,KAAKH,QAAM,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAEhE,gBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAIA,QAAM,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC;oBACzD,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAE9F,oBAAA,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAE3C,IAAIA,QAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAC;oBAChC,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;;AAEhG,oBAAA,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;;gBAG3C,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAC5B,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAChB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAEhB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EACpB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CACvB,CAAC;;AAGF,gBAAA,KAAK,IAAI,KAAK,IAAI,UAAU,EAC5B;AACI,oBAAA,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAC5B,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EACpB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC7B;AACD,gBAAA,KAAK,IAAI,KAAK,IAAI,UAAU,EAC5B;AACI,oBAAA,SAAS,CAAC,iBAAiB,CAAC,IAAI,CAC5B,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EACpB,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC7B;aACJ;;;YAID,IAAI,MAAM,GAAGA,QAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;YAE5C,SAAS,KAAK,CAAC,CAAU,EAAA;AAErB,gBAAA,IAAI,MAAM;AACN,oBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;;AAE3C,oBAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;aAClD;YACD,IAAI,IAAI,CAAC,QAAQ,KAAK,aAAa,CAAC,KAAK,EACzC;AACI,gBAAA,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,gBAAA,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACb,gBAAA,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,gBAAA,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACb,gBAAA,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,gBAAA,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAEb,gBAAA,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,gBAAA,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACb,gBAAA,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,gBAAA,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACb,gBAAA,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,gBAAA,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAChB;iBAED;AACI,gBAAA,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,gBAAA,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACb,gBAAA,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,gBAAA,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACb,gBAAA,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,gBAAA,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAEb,gBAAA,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,gBAAA,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACb,gBAAA,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,gBAAA,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACb,gBAAA,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClB,gBAAA,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAChB;SACJ;KACJ;AACJ,CAAA;AA0ED;;AAEG;AACH,SAAS,4BAA4B,CAAC,GAAwB,EAAE,GAAwB,EAAE,YAAY,GAAG,KAAK,EAAA;IAE1G,IAAI,GAAG,GAAG,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpC,IAAA,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;;IAElD,0BAA0B,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IACzE,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC;QAAE,GAAG,CAAC,GAAG,EAAE,CAAC;AAElF,IAAA,IAAI,KAAK,GAA4B,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC7F,IAAA,IAAI,KAAK,GAA4B,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAC7F,IAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EACpB;AACI,QAAA,IAAI,GAAG,YAAY0B,cAAM,IAAI,GAAG,YAAYA,cAAM,IAAI1B,QAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,EACnI;YACI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5B,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5B,YAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;SACzB;QAED,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;AAEjC,QAAA,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;AACxC,YAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;;AAExC,YAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAExC,QAAA,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;AACxC,YAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;;AAExC,YAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAExC,QAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACzB;AAED,IAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EACpB;QACI,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QAEjC,IAAI,EAAE,GAAG,EAAE,IAAI,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC;AACtC,YAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;;AAExC,YAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAExC,IAAI,EAAE,GAAG,EAAE,IAAI,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC;AACtC,YAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;;AAExC,YAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAExC,QAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;KACzB;;IAWD,IAAI,QAAQ,GAAe,EAAE,CAAC;IAC9B,IAAI,QAAQ,GAAe,EAAE,CAAC;AAE9B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;AACI,QAAA,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,QAAA,IAAI,EAAE,GAAG,GAAG,CAACG,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACnC,QAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;KAC3G;AACD,IAAA,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC;AAChD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;AACI,QAAA,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,QAAA,IAAI,EAAE,GAAG,GAAG,CAACA,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACnC,QAAA,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;KACzG;;AAGD,IAAA,KAAK,IAAI,CAAC,IAAI,QAAQ,EACtB;AACI,QAAA,IAAI,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC5D,QAAA,KAAK,IAAI,EAAE,IAAI,QAAQ,EACvB;YACI,IAAI,EAAE,CAAC,IAAI;gBACP,SAAS;AAEb,YAAA,IAAI,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;YAC9D,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC;gBACtC,SAAS;AAEb,YAAA,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;AACd,YAAA,IAAI,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,UAAU;AAC3B,mBAAA,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,EACjC;AACI,gBAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChD,gBAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClD,gBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;gBACf,MAAM;aACT;AACI,iBAAA,IAAI,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,QAAQ;AAC9B,mBAAA,CAAC,CAAC,QAAQ,KAAK,EAAE,CAAC,UAAU,EACnC;AACI,gBAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC/C,gBAAA,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjD,gBAAA,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;gBACf,MAAM;aACT;;AAEG,gBAAA,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC;SACtB;AAED,QAAA,IAAI,CAAC,CAAC,CAAC,IAAI,EACX;AACI,YAAA,IAAI,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC;AACzB,gBAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;;AAEjD,gBAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;SACpD;KACJ;;AAGD,IAAA,IAAI,YAAY;AACZ,QAAA,KAAK,IAAI,CAAC,IAAI,QAAQ,EACtB;YACI,IAAI,CAAC,CAAC,IAAI;gBAAE,SAAS;AACrB,YAAA,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;AACnD,YAAA,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAChB,gBAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;;AAEjD,gBAAA,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;SACpD;AACL,IAAA,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,WAAW,CAAC,EAAuB,EAAE,KAAa,EAAE,GAAW,EAAA;IAEpE,IAAI,QAAQ,GAAG,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACxC,IAAI,MAAM,GAAG,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,GAAG,GAAG,KAAK;AACX,QAAA,OAAO,EAAE,CAAC,kBAAkB,CAAC,CAAC,MAAM,GAAG,QAAQ,IAAI,GAAG,CAAC,CAAC;AAE5D,IAAA,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;AACvB,IAAA,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,GAAG,QAAQ,IAAI,MAAM,IAAI,GAAG,CAAC;AAElD,IAAA,IAAI,QAAQ,GAAG,MAAM,IAAI,MAAM;QAC3B,OAAO,EAAE,CAAC,kBAAkB,CAAC,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;;QAEzD,OAAO,EAAE,CAAC,kBAAkB,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC;AACxD,CAAC;AA+BD;;;;;;;;AAQG;AACG,SAAU,aAAa,CAAC,QAAgB,EAAE,MAAc,EAAE,SAAiB,EAAE,OAAe,EAAE,GAAW,EAAA;IAE3G,IAAI,QAAQ,GAAG,CAAC;AACT,WAAA,MAAM,GAAG,CAAC;AACV,WAAA,MAAM,GAAG,GAAG;AACZ,WAAA,QAAQ,GAAG,GAAG;AACd,WAAA,SAAS,GAAG,CAAC;AACb,WAAA,OAAO,GAAG,CAAC;AACX,WAAA,SAAS,GAAG,GAAG;AACf,WAAA,OAAO,GAAG,GAAG;AAAE,QAAA,OAAO,EAAE,CAAC;IAEhC,IAAI,QAAQ,GAAG,MAAM;AACjB,QAAA,OAAO,aAAa,CAAC,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AAC3H,IAAA,IAAI,SAAS,GAAG,OAAO,EACvB;AACI,QAAA,IAAI,GAAG,GAAG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC/D,IAAI,GAAG,GAAuB,EAAE,CAAC;QACjC,KAAK,IAAI,CAAC,IAAI,GAAG;YACbK,gBAAc,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;AACpE,QAAA,OAAO,GAAG,CAAC;KACd;AAED,IAAA,IAAI,SAAS,IAAI,MAAM,IAAI,OAAO,IAAI,QAAQ;AAC1C,QAAA,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhC,IAAA,IAAI,SAAS,IAAI,QAAQ;KACzB;QACI,IAAI,OAAO,IAAI,MAAM;AAAE,YAAA,OAAO,EAAE,CAAC;AACjC,QAAA,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;KAC9B;IAED,IAAI,OAAO,GAAG,MAAM;AAChB,QAAA,OAAO,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AACtD,IAAA,OAAO,CAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AACnC,CAAC;SAEe,cAAc,CAAC,CAAQ,EAAE,EAAS,EAAE,GAAW,EAAA;IAE3D,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACxD,CAAC;AAGD,SAAS,cAAc,CAAC,MAAe,EAAE,SAAkB,EAAE,GAAW,EAAA;IAEpE,IAAI,IAAI,GAAY,MAAM,CAAC;AAC3B,IAAA,KAAK,IAAI,EAAE,IAAI,SAAS,EACxB;QACI,IAAI,KAAK,GAAY,EAAE,CAAC;QACxB,KAAK,IAAI,CAAC,IAAI,IAAI;AACd,YAAAA,gBAAc,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC;QACtD,IAAI,GAAG,KAAK,CAAC;KAChB;AACD,IAAA,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,GAAW,EAAA;AAE3E,IAAA,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;AAC7B,IAAA,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IAC7B,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,CAAC,CAAC;IAEX,IAAI,CAAC,GAAG,CAAC;AACL,QAAA,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAExC,IAAI,EAAE,GAAG,EAAE;QACP,OAAO;AAEX,IAAA,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,SAAS,GAAG,IAAIjB,aAAO,CAAC;MAEjB,sBAAsB,CAAA;IAO/B,WAAoB,CAAA,EAAgB,EAAE,QAAA,GAAoB,KAAK,EAAA;QAA3C,IAAE,CAAA,EAAA,GAAF,EAAE,CAAc;AALpC,QAAA,IAAA,CAAA,aAAa,GAAa,EAAE,CAAC;AAC7B,QAAA,IAAA,CAAA,OAAO,GAAa,EAAE,CAAC;AAMnB,QAAA,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;KACvC;IAES,gBAAgB,CAAC,EAAgB,EAAE,QAAiB,EAAA;AAE1D,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AAClE,QAAA,QAAQ,GAAG,QAAQ,KAAK,EAAE,YAAY,KAAK,IAAI,EAAE,CAAC,kBAAkB,CAAC,KAAK,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC;;AAGlG,QAAA,IAAI,SAAS,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;AACrJ,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AAClC,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB;AACnC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EACvC;AACI,gBAAA,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,gBAAA,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAC5B,gBAAA,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AACtC,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAC3C;AACI,oBAAA,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,oBAAA,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;iBACvB;AAED,gBAAA,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;aAC/E;AACL,QAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;;AAGzE,QAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAE5E,QAAQ,CAAC,KAAK,EAAE,CAAC;KACpB;AAED,IAAA,IAAI,YAAY,GAAA;AAEZ,QAAA,IAAI,GAAG,GAAG,IAAIwB,oBAAc,EAAE,CAAC;AAC/B,QAAA,GAAG,CAAC,YAAY,CAAC,UAAU,EAAE,IAAIyB,4BAAsB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;AAChF,QAAA,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,IAAIA,4BAAsB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACpE,GAAG,CAAC,oBAAoB,EAAE,CAAC;AAC3B,QAAA,OAAO,GAAG,CAAC;KACd;AAED,IAAA,IAAI,YAAY,GAAA;AAEZ,QAAA,IAAI,GAAG,GAAG,IAAIzB,oBAAc,EAAE,CAAC;AAC/B,QAAA,GAAG,CAAC,YAAY,CAAC,UAAU,EAAE,IAAIyB,4BAAsB,CAAC,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC;AACtG,QAAA,OAAO,GAAG,CAAC;KACd;IAES,YAAY,GAAA;AAElB,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;AACjB,QAAA,MAAM,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC;QAC3B,IAAI,OAAO,GAAa,EAAE,CAAC;;AAG3B,QAAA,IAAI,UAA0B,CAAC;QAC/B;;AAGI,YAAA,IAAI,iBAAiB,GAAG,IAAI,GAAG,EAAuB,CAAC;AACvD,YAAA,IAAI,mBAAmB,GAAG,IAAI,GAAG,EAA0B,CAAC;YAE5D,IAAI,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACrC,YAAA,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO;aACxB;AACI,gBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC5D,IAAI,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC5C,IAAI,SAAS,GAAG,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,CAAC,QAAQ,EACb;AACI,oBAAA,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;oBACrB,SAAS,GAAG,EAAE,CAAC;AACf,oBAAA,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACvC,oBAAA,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;iBAC7C;AACD,gBAAA,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,gBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;aAC/B;YAED,IAAI,YAAY,GAAmB,EAAE,CAAC;YACtC,KAAK,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,iBAAiB,EAC1C;AACI,gBAAA,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC;iBAChB;AACI,oBAAA,IAAI,CAAC,UAAU;wBACX,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;AAErC,oBAAA,IAAI,GAAG,GAAG,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAG;AAE7C,wBAAA,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AACrB,wBAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;AACrB,wBAAA,OAAO,IAAI,CAAC;AAChB,qBAAC,CAAC,CAAC;AACH,oBAAA,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;oBACtB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;AACxB,oBAAA,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;oBAE3B,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;iBACpC;qBAED;oBACI,YAAY,CAAC,IAAI,CAAC,GAAG,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;iBACxD;aACJ;YAED,IAAI,UAAU,EACd;AACI,gBAAA,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;aACpC;SACJ;AAED,QAAA,KAAK,IAAI,MAAM,IAAI,EAAE,CAAC,OAAO,EAC7B;;AAEI,YAAA,IAAI,IAAe,CAAC;YACpB,IAAIxC,QAAM,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC;AACtC,gBAAA,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC;iBAEzB;AACI,gBAAA,IAAIA,QAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACnD,oBAAA,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;;AAEtB,oBAAA,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC;aAC9B;YACD,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;;YAExD,IAAI,kBAAkB,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;AACrD,YAAA,kBAAkB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC1C,kBAAkB,CAAC,EAAE,EAAE,CAAC;YACxB,IAAI,kBAAkB,YAAY2B,gBAAQ;AAAE,gBAAA,kBAAkB,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACzF,IAAI,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;YAE9D,IAAI,kBAAkB,GAAc,EAAE,CAAC;;AAEvC,YAAA,KAAK,IAAI,WAAW,IAAI,MAAM,CAAC,OAAO,EACtC;gBACI,IAAI,uBAAuB,GAAG,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;gBAC/D,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;gBAC7D,uBAAuB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;gBACpD,IAAI,uBAAuB,YAAYA,gBAAQ;AAAE,oBAAA,uBAAuB,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;gBACnG,IAAI,kBAAkB,GAAG,OAAO,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;AACxE,gBAAA,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;aAC/C;YAED,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,aAAa,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;SACrG;QAED,IAAI,UAAU,EACd;AACI,YAAA,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;YACtB,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;SAClC;AAED,QAAA,OAAO,OAAO,CAAC;KAClB;AACJ,CAAA;AAED,IAAI,QAAQ,GAAG,IAAI,GAAG,EAAwC,CAAC;AAC/D,SAAS,eAAe,CAAC,GAAU,EAAE,GAAU,EAAA;IAE3C,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,CAAC,EACL;QACI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACnB,QAAA,IAAI,CAAC;AAAE,YAAA,OAAO,CAAC,CAAC;KACnB;;AAEG,QAAA,CAAC,GAAG,IAAI,GAAG,EAAE,CAAC;AAElB,IAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACrB,IAAA,IAAI,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAElE,IAAA,IAAI,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC/B,IAAA,IAAI,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC;AAC/B,IAAA,KAAK,IAAI,CAAC,IAAI,CAAC,EACf;AACI,QAAA,CAAC,CAAC,SAAS,GAAGzB,eAAS,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;AAC3D,QAAA,CAAC,CAAC,QAAQ,GAAGA,eAAS,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC;KAC5D;AAED,IAAA,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAEd,IAAI,EAAE,GAAsB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAG;AAElC,QAAA,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AACtE,KAAC,CAAC,CAAC;IAEH,IAAI,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE,EACP;AACI,QAAA,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC;AACf,QAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;KACzB;AACD,IAAA,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAEhB,IAAA,OAAO,CAAC,CAAC;AACb;;AC37CA,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AACrD,SAAU,UAAU,CAAC,SAAkB,EAAA;IAEzC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAEjC,IAAA,IAAI,IAAI,GAAG,CAAE,GAAG,CAAC;AACjB,IAAA,IAAI,IAAI,GAAG,IAAI,EACf;QACI,IAAI,IAAI,GAAG,IAAI;AACX,YAAA,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;AAE/B,YAAA,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACtC;SAED;QACI,IAAI,IAAI,GAAG,IAAI;AACX,YAAA,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;AAE/B,YAAA,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACtC;AACD,IAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;MAEY,aAAa,CAAA;AAA1B,IAAA,WAAA,GAAA;AAEI,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,GAAG,EAAoB,CAAC;QAEhC,IAAE,CAAA,EAAA,GAAG,IAAIZ,aAAO,CAAC;QACjB,IAAE,CAAA,EAAA,GAAG,IAAIA,aAAO,CAAC;QACjB,IAAE,CAAA,EAAA,GAAG,IAAIA,aAAO,CAAC;QACjB,IAAI,CAAA,IAAA,GAAG,IAAIK,UAAI,CAAC;QAChB,IAAK,CAAA,KAAA,GAAG,IAAIA,UAAI,CAAC;KAsG5B;AArGG,IAAA,SAAS,CAAC,OAAe,EAAE,OAAe,EAAE,OAAe,EAAA;QAEvD,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5B,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAChC,QAAA,IAAI,GAAG;AACH,YAAA,OAAO,GAAG,CAAC;AAEf,QAAA,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB,QAAA,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AACnD,QAAA,GAAG,GAAG,IAAIJ,aAAO,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AACzD,QAAA,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAEpB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC3B,QAAA,OAAO,GAAG,CAAC;KACd;AAED,IAAA,KAAK,CAAC,IAAsC,EAAA;QAExC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAChC;AACI,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,WAAW;gBAChB,GAAG,CAAC,kBAAkB,EAAE,CAAC;YAC7B,IAAI,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAoB,CAAC;YAC5D,IAAI,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,UAAU,CAAoB,CAAC;YAC1D,IAAI,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,CAAoB,CAAC;AACpD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAC7C;gBACI,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC3B,gBAAA,IAAI,GAAG,CAAC,YAAY,CAAC,EACrB;AACI,oBAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;oBACtB,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAChC,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAChC;wBACI,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AAC9B,wBAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;wBAC1E,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;qBACpC;AAED,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAChC;wBACI,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AAC9B,wBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AAEnG,wBAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AAE1E,wBAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAE1B,wBAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;;wBAG7C,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,KAAK,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;;AAEjJ,wBAAA,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,KAAK,IAAI,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;qBACxJ;AACD,oBAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;iBAC1B;aACJ;SACJ;aAGD;AACI,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;YACxB,IAAI,GAAG,CAAC,YAAY,CAAC;gBACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;SAC/C;KACJ;AAED,IAAA,QAAQ,CAAC,GAAmB,EAAE,GAAa,EAAE,KAAK,GAAG,IAAI,EAAA;QAErD,IAAI,CAAC,GAAG,CAAC,WAAW;YAChB,GAAG,CAAC,kBAAkB,EAAE,CAAC;QAE7B,IAAI,OAAO,GAAG,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAoB,CAAC;QAC5D,IAAI,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,UAAU,CAAoB,CAAC;QAC1D,IAAI,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,CAAoB,CAAC;QAEpD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC;YAAE,OAAO;AAE5C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAClC;AACI,YAAA,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;AAClB,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AAEnG,YAAA,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AAE1E,YAAA,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAE1B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAChC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;;YAG5B,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,KAAK,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;;YAEpI,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,KAAK,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;SAC3I;AAED,QAAA,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;KAC1B;AACJ;;;AC9FM,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAIhC,IAAM,YAAY,GAAA,cAAA,GAAlB,MAAM,YAAa,SAAQ,MAAM,CAAA;AAmDpC,IAAA,WAAA,GAAA;AAEI,QAAA,KAAK,EAAE,CAAC;AAnDZ;;;;;;;;AAQE;AAEQ,QAAA,IAAA,CAAA,MAAM,GAAW,CAAC,CAAC;AACnB,QAAA,IAAA,CAAA,KAAK,GAAW,CAAC,CAAC;AAE5B;;;;AAIG;QACO,IAAS,CAAA,SAAA,GAAW,CAAC,CAAC;QAEtB,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC;QAEd,IAAY,CAAA,YAAA,GAAG,KAAK,CAAC;QAE/B,IAAO,CAAA,OAAA,GAAG,KAAK,CAAC;AAchB;;AAEG;QACO,IAAO,CAAA,OAAA,GAAmB,EAAE,CAAC;QAE7B,IAAW,CAAA,WAAA,GAAW,CAAC,CAAC;QACxB,IAAgB,CAAA,gBAAA,GAAW,CAAC,CAAC;QAC7B,IAAe,CAAA,eAAA,GAAW,CAAC,CAAC;QAC5B,IAAe,CAAA,eAAA,GAAW,CAAC,CAAC;QAMlC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAI;;AAGlD,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAI;;AAGlD,SAAC,CAAC,CAAC;KACN;IAED,IAAI,QAAQ,CAAC,UAAoB,EAAA;AAE7B,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,QAAQ,CAAC;AACtE,QAAA,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QAE5B,IAAI,OAAO,GAAG,OAAO,CAAE,WAAW,EAAE,MAAiC,EAAE,MAAM,CAAC,CAAC;QAC/E,IAAI,OAAO,GAAG,OAAO,CAAE,UAAU,EAAE,MAAiC,EAAE,MAAM,CAAC,CAAC;QAC9E,IAAI,OAAO,KAAK,OAAO;YACnB,IAAI,CAAC,MAAM,EAAE,CAAC;AACb,aAAA,IAAK,UAAU,EAAE,MAAiC,EAAE,UAAU,EACnE;YACI,IAAI,IAAI,CAAC,aAAa;AAClB,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAC3C;KACJ;IAED,IAAI,QAAQ,KAAK,OAAO,KAAK,CAAC,QAAQ,CAAC,EAAE;AAEzC,IAAA,IAAI,WAAW,GAAA;QAEX,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;IACD,IAAI,WAAW,CAAC,CAAS,EAAA;QAErB,IAAI,CAACS,QAAM,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,EAChC;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;;YAGrB,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC5B;KACJ;AACD,IAAA,IAAI,WAAW,GAAA;QAEX,OAAO,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KACvD;AACD,IAAA,IAAI,gBAAgB,GAAA;AAEhB,QAAA,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC;YACvD,OAAO,IAAI,OAAO,CAAC,IAAIV,aAAO,EAAE,IAAIA,aAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;;YAEtF,OAAO,IAAI,OAAO,EAAE,CAAC,aAAa,CAAC,CAAC,IAAIA,aAAO,EAAE,IAAIA,aAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KAC/G;AAED,IAAA,IAAI,GAAG,GAAA;AAEH,QAAA,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAIA,aAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;KACtG;AAED,IAAA,IAAI,gBAAgB,GAAA;QAEhB,OAAO,IAAI,CAAC,gBAAgB,CAAC;KAChC;IAED,IAAI,gBAAgB,CAAC,CAAS,EAAA;QAE1B,IAAI,CAACU,QAAM,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,EACrC;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;;YAG1B,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC5B;KACJ;AACD,IAAA,IAAI,eAAe,GAAA;QAEf,OAAO,IAAI,CAAC,eAAe,CAAC;KAC/B;IAED,IAAI,eAAe,CAAC,CAAS,EAAA;QAEzB,IAAI,CAACA,QAAM,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,EACpC;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;;YAGzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC5B;KACJ;AACD,IAAA,IAAI,eAAe,GAAA;QAEf,OAAO,IAAI,CAAC,eAAe,CAAC;KAC/B;IAED,IAAI,eAAe,CAAC,CAAS,EAAA;QAEzB,IAAI,CAACA,QAAM,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,EACpC;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;;YAGzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;SAC5B;KACJ;IAED,KAAK,GAAA;AAED,QAAA,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;AACvB,QAAA,OAAO,EAAE,CAAC;KACb;AAED,IAAA,WAAW,CAAC,CAAU,EAAA;;AAGlB,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxB,QAAA,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAErB,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;AAElC,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAC1B;YACI,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACjC,YAAA,CAAC,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC;AAC1B,YAAA,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;;AAGjB,YAAA,IAAI,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;YACvB,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAClC;AACI,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC;gBAClE,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;aAC3C;AAED,YAAA,CAAC,CAAC,QAAQ,GAAG,SAAS,CAAC;SAC1B;AAGD,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAE5B,QAAA,IAAI,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC;AACpB,QAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7D,QAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7D,QAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;AAE/D,QAAA,IAAI,CAACA,QAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAACA,QAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAACA,QAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC;AACtF,YAAA,IAAI,CAAC,MAAM,CAACP,kBAAU,CAAC,QAAQ,CAAC,CAAC;aAChC,IAAI,IAAI,CAAC,UAAU;YACpB,IAAI,CAAC,WAAW,EAAE,CAAC;AACvB,QAAA,OAAO,IAAI,CAAC;KACf;AACS,IAAA,gBAAgB,CAAC,CAAU,EAAA;QAEjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;AAC3B,QAAA,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,QAAA,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAClB,QAAA,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,OAAO,IAAI,CAAC;KACf;;AAGS,IAAA,iBAAiB,CAAC,CAAU,EAAA;QAElC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;AAChC,QAAA,IAAI,KAAK,YAAYkC,gBAAQ,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;SAClE;AACI,YAAA,IAAI,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC;AACzB,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACrC,GAAG,CAAC,GAAG,EAAE,CAAC;AACd,YAAA,IAAI,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC;YAC3B,KAAK,IAAI,CAAC,IAAI,GAAG;AACb,gBAAA,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACnC,YAAA,KAAK,CAAC,GAAG,GAAG,YAAY,CAAC;SAC5B;AAED,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AAC1E,QAAA,IAAI3B,QAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAC9B;AACI,YAAA,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACpC,IAAI,KAAK,YAAY0B,cAAM;AACvB,gBAAA,KAAK,CAAC,WAAW,CAAC,IAAInC,aAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;;AAExD,gBAAA,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAE5C,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;SAC/B;AACI,aAAA,IAAIS,QAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACnC;AACI,YAAA,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;SAC5F;;SAED;AACI,YAAA,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACpC,IAAI,KAAK,YAAY0B,cAAM;AACvB,gBAAA,KAAK,CAAC,WAAW,CAAC,IAAInC,aAAO,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;;AAExD,gBAAA,kBAAkB,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAE5C,YAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;SAC/B;AAED,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM;AACnB,YAAA,IAAI,CAAC,MAAM,CAACE,kBAAU,CAAC,QAAQ,CAAC,CAAC;AAErC,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,IAAI,KAAK,GAAA;QAEL,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;AACD,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;AAED,IAAA,IAAI,SAAS,GAAA;QAET,OAAO,IAAI,CAAC,SAAS,CAAC;KACzB;IACD,IAAI,SAAS,CAAC,SAAiB,EAAA;AAE3B,QAAA,IAAI,CAACO,QAAM,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;SAC5C;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAE5B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAC3B;AACI,gBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;AACtB,gBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;gBAC/D,IAAI,CAAC,GAAG,IAAIT,aAAO,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAErC,gBAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAC1B;oBACI,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;oBAErC,IAAIS,QAAM,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC;AACnC,wBAAA,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC;yBACvB,IAAI,CAACA,QAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACpB,wBAAA,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;iBACxB;aACJ;AAED,YAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC3B,YAAA,IAAI,CAAC,MAAM,CAACP,kBAAU,CAAC,QAAQ,CAAC,CAAC;SACpC;KACJ;;AAGD,IAAA,IAAI,OAAO,GAAA;QAEP,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;AAED;;AAEG;AACH,IAAA,IAAI,YAAY,GAAA;QAEZ,IAAI,CAAC,IAAI,CAAC,YAAY;YAClB,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,YAAY,CAAC;KAC5B;IAED,IAAI,YAAY,CAAC,EAAuB,EAAA;AAEpC,QAAA,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;KAC5B;AAED;;AAEG;IACH,kBAAkB,GAAA;AAEd,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,IAAI,CAAC,YAAY,YAAYkC,gBAAQ,CAAC;AAC9D,YAAA,IAAI,CAAC,YAAY,GAAG,IAAIA,gBAAQ,EAAE,CAAC;AAEvC,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AACrD,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,GAAG,YAAY,CAAC;AACrC,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;KACzC;AAED;;AAEG;AACH,IAAA,iBAAiB,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC,SAAS,EAAA;QAElF,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAE3B,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QAEnB,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAE1B,QAAA,OAAO,IAAI,CAAC;KACf;AAED;;;AAGG;AACH,IAAA,eAAe,CAAC,KAA0B,EAAA;QAEtC,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO;AAE3B,QAAA,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,IAAI3B,QAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAAE,OAAO;AAErC,QAAA,IAAI,KAAK,YAAY,MAAM,IAAI,KAAK,YAAY,OAAO;AACnD,YAAA,KAAK,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;AAErC,QAAA,IAAI,KAAK,YAAY2B,gBAAQ,EAC7B;AACI,YAAA,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;AACvB,YAAA,IAAI,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC;AACzB,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACrC,GAAG,CAAC,GAAG,EAAE,CAAC;;AAGd,YAAA,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;AAEpB,YAAA,IAAI,CAAC,GAAG,IAAIrC,aAAO,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,GAAG,IAAIA,aAAO,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,GAAG,IAAIA,aAAO,EAAE,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAClD,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEpB,IAAI,QAAQ,GAAGU,QAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACrE,YAAA,IAAI,QAAQ,GAAG,CAACA,QAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAE3C,YAAA,IAAI,QAAQ,IAAI,QAAQ;aACxB;AACI,gBAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EACjB;AACI,oBAAA,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/B,oBAAA,IAAI,QAAQ;AACR,wBAAA,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;iBACnB;AACD,gBAAA,KAAK,CAAC,GAAG,GAAG,YAAY,CAAC;aAC5B;SACJ;aAED;AACI,YAAA,KAAK,CAAC,GAAG,GAAG,IAAIT,aAAO,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;SACzD;QACD,KAAK,CAAC,SAAS,EAAE,CAAC;QAElB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AAED;;;AAGG;AACH,IAAA,QAAQ,CAAC,KAAc,EAAA;AAEnB,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACzB,QAAA,IAAI,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACnE,QAAA,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;QAE3C,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5B,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7B,QAAA,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEnB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE/B,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,YAAY,YAAYoC,gBAAQ;AACrC,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAEhD,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,QAAA,OAAO,IAAI,CAAC;KACf;AAED;;;;;;AAMG;IACH,iBAAiB,GAAA;AAEb,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;QACxC,IAAI,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,IAAIrC,aAAO,EAAE,CAAC,CAAC;AACtC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;AACrB,QAAA,IAAIU,QAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAIA,QAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACtC,YAAA,GAAG,CAAC,CAAc,YAAA,CAAA,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,GAAGA,QAAM,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;;;;QAM5E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,EAC9B;AACI,YAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAErE,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5D,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAClD;KACJ;AAED,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;AAED;;AAEG;IACH,IAAI,KAAK,GAAK,EAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;IAEpC,QAAQ,CAAC,iBAAiB,GAAG,KAAK,EAAA;AAEtC,QAAA,IAAI,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;QAEtE,IAAI,KAAK,GAAc,EAAE,CAAC;AAE1B,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAC1B;YACI,IAAIA,QAAM,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG,GAAG,CAAC;AAC9F,gBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;SACxH;AACD,QAAA,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;KACpC;AAED;;AAEG;AACH,IAAA,IAAI,CAAC,MAAY,EAAA;AAEb,QAAA,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AAE3C,QAAA,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC;YACpB,OAAOR,cAAM,CAAC,KAAK,CAAC;QAExB,IAAI,WAAW,GAAG,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAEjC,QAAA,IAAI,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC,SAAS,IAAI,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxE,QAAA,CAAC,UAAU,EAAE,UAAU,CAAC,GAAGc,mBAAiB,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;QAEvE,MAAM,cAAc,GAAG,MAAK;YAExB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,OAAO;AACnC,YAAA,KAAK,IAAI,EAAE,IAAI,MAAM,CAAC,cAAc,EACpC;AACI,gBAAA,IAAI,IAAI,GAAG,EAAE,CAAC,MAAsB,CAAC;AACrC,gBAAA,IAAI,CAAC,IAAI;oBAAE,SAAS;gBACpB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEtC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjC,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACpC;AACD,YAAA,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,cAAc,EACtC;AACI,gBAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAsB,CAAC;AACzC,gBAAA,IAAI,CAAC,MAAM;oBAAE,SAAS;gBACtB,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAExC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC;AACnC,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACtC;AACL,SAAC,CAAC;QAEF,IAAIN,QAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC;AACrC,eAAAA,QAAM,CAAC,CAAC,EAAE,UAAU,CAAC,EAC5B;AACI,YAAA,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAErD,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;AAC3B,YAAA,IAAI,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,EAAE,EAAE,CAAC;YAC/D,IAAI,WAAW,GAAG,SAAS,CAAC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAClE,YAAA,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAC5B;gBACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;;gBAG5B,KAAK,IAAI,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,EACrC;AACI,oBAAA,IAAI,CAAC,GAAG,IAAI,cAAY,EAAE,CAAC;AAC3B,oBAAA,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAC7B,oBAAA,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;AAC5B,oBAAA,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAExB,oBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;iBACxB;gBAED,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;gBAEjD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACzD,gBAAA,cAAc,EAAE,CAAC;gBACjB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,EAAE,CAAC;gBAEd,OAAOR,cAAM,CAAC,IAAI,CAAC;aACtB;SACJ;aAED;AACI,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC;gBAC7D,OAAOA,cAAM,CAAC,KAAK,CAAC;AAExB,YAAA,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAErD,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC;AAClC,YAAA,IAAI,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YACzE,WAAW,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpD,YAAA,IAAI,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC,EACtC;gBACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;gBAE5B,IAAI,UAAU,GAAG,CAAC;AACd,oBAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;gBAEpE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBAEhF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAEzD,gBAAA,cAAc,EAAE,CAAC;gBAEjB,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,EAAE,CAAC;gBAEd,OAAOA,cAAM,CAAC,IAAI,CAAC;aACtB;SACJ;QACD,OAAOA,cAAM,CAAC,KAAK,CAAC;KACvB;AAED,IAAA,IAAI,MAAM,GAAA;QAEN,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;AAClD,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;AACtB,YAAA,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC;AACpB,QAAA,OAAO,GAAG,CAAC;KACd;AAED;;;;;;AAMG;IACH,QAAQ,CAAC,QAAwB,EAAE,MAAA,GAAyB,SAAS,EAAE,cAAc,GAAG,IAAI,EAAA;AAGxF,QAAA,OAAO,KAAK,CAAC;KAChB;AAED,IAAA,iBAAiB,CAAC,IAAkB,EAAE,KAAK,GAAG,KAAK,EAAA;QAE/C,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;;QAGjC,IAAI,KAAK,EACT;YACI,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YAC5E,IAAI,KAAK,KAAK,CAAC,CAAC;gBAAE,OAAO;SAC5B;QAED,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACrC;AAED;;AAEE;IACF,eAAe,GAAA;AAEX,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,EACZ;AACI,YAAA,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAChC,OAAO;SACV;AAED,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,cAAc,EAClC;AACI,YAAA,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EACrB;AACI,gBAAA,IAAI,EAAE,GAAG,EAAE,CAAC,MAAsB,CAAC;gBACnC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACnC;SACJ;AACD,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,cAAc,EAClC;AACI,YAAA,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,EACrB;AACI,gBAAA,IAAI,EAAE,GAAG,EAAE,CAAC,MAAsB,CAAC;gBACnC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACnC;SACJ;KACJ;AAED,IAAA,YAAY,CAAC,MAAoB,EAAA;QAE7B,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC7B;AAED;;AAEG;AACH,IAAA,aAAa,CAAC,OAAuB,EAAE,MAAA,GAAyB,SAAS,EAAA;AAErE,QAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;KACxC;IAEQ,mBAAmB,CACxB,QAAwB,EACxB,SAAkB,EAClB,SAAkB,EAClB,SAAmB,EACnB,OAAiB,EAAA;QAGjB,QAAQ,QAAQ;YAEZ,KAAK,cAAc,CAAC,GAAG;AACnB,gBAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACnC,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG;gBACnB;oBACI,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;AACxC,oBAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACrC,oBAAA,IAAI,GAAG,GAAG,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;oBAEjF,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACpF,oBAAA,GAAG,CAAC,IAAI,CACJ,GAAG,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAC5E,CAAC;oBACF,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;AAC9C,oBAAA,KAAK,IAAI,CAAC,IAAI,EAAE,EAChB;AACI,wBAAA,IAAI,CAAC,GAAG,IAAIgC,YAAI,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACpD,wBAAA,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/B,wBAAA,GAAG,CAAC,IAAI,CACJ,GAAG,CAAC,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CACtE,CAAC;qBACL;AAED,oBAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG;AACzB,wBAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAC1B;4BACI,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC;AAChD,gCAAA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;yBAC9F;AAEL,oBAAA,OAAO,GAAG,CAAC;iBACd;SAGR;AACD,QAAA,OAAO,EAAE,CAAC;KACb;;AAIS,IAAA,yBAAyB,CAAC,QAAuB,EAAA;AAEvD,QAAA,IAAI,MAAM,GAAa,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3E,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAC1B;AACI,YAAA,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AACvD,YAAA,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO;gBACpB,CAAC,IAAI,EAAE,CAAC,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAEzD,YAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAClB;AACD,QAAA,OAAO,MAAM,CAAC;KACjB;AACD,IAAA,sBAAsB,CAAC,QAAuB,EAAA;AAE1C,QAAA,IAAI,MAAM,GAAG,QAAQ,KAAK,aAAa,CAAC,IAAI,CAAC;QAE7C,IAAI,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;AAC5F,QAAA,IAAI,CAAC,GAAG,IAAIlC,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,QAAA,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;AAEvD,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAC1B;YACI,IAAI,IAAI,GAAG,CAAC,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;AAC9C,YAAA,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;SACrB;AACD,QAAA,OAAO,GAAG,CAAC;KACd;AACD,IAAA,uBAAuB,CAAC,SAAmB,EAAE,GAAY,EAAE,QAAuB,EAAA;QAE9E,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;AACtD,QAAA,IAAI,QAAQ,KAAK,aAAa,CAAC,OAAO,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC,EAC/E;YACI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvC,OAAO;SACV;QAEDgB,mBAAiB,CAAC,SAAS,CAAC,CAAC;AAE7B,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;AAChC,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAExB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAC7B;YACI,IAAI,CAAC,2BAA2B,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;SAC9D;aAED;YACI,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,YAAA,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;YAC9B,IAAI,MAAM,GAAG,CAAC,CAAC;AAEf,YAAA,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC;AACrB,YAAA,KAAK,IAAI,KAAK,IAAI,MAAM,EACxB;gBACI,MAAM,IAAI,KAAK,CAAC;gBAChB,IAAI,KAAK,GAAG,EAAE,CAAC;AACf,gBAAA,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EACtB;AACI,oBAAA,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM;AACrB,wBAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC;;wBAE1C,MAAM;iBACb;AAED,gBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EACpB;oBACI,IAAI,WAAW,KAAK,CAAC,CAAC;wBAClB,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;;AAEvD,wBAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,uBAAuB,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;iBAC/E;AACD,gBAAA,WAAW,EAAE,CAAC;aACjB;SACJ;AAED,QAAA,IAAI,IAAI,CAAC,QAAQ,EACjB;YACI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,YAAY,GAAW,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;YAElC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,KAAK,EACzC;AACI,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAA0B,CAAC;gBAC/C,KAAK,IAAI,CAAC,IAAI,YAAY;AACtB,oBAAA,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;aACpB;SACJ;AACD,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;IAED,aAAa,GAAA;QAET,OAAO,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KAC1D;IAED,cAAc,CAAC,SAAmB,EAAE,GAAY,EAAA;QAE5C,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;KACpE;IAGD,gBAAgB,GAAA;QAEZ,OAAO,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;KAC7D;IACD,iBAAiB,CAAC,SAAwB,EAAE,GAAY,EAAA;QAEpD,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;KACvE;AAED;;AAEG;AACH,IAAA,2BAA2B,CAAC,SAAwB,EAAE,GAAY,EAAE,QAAuB,EAAA;QAEvF,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAEjE,QAAA,IAAI,QAAQ,KAAK,aAAa,CAAC,OAAO,EACtC;;YAEI,IAAI,SAAS,CAAC,MAAM,KAAK,YAAY,GAAG,CAAC,EACzC;gBACI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvC,OAAO;aACV;;AAGD,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EACtC;gBACI,IAAI,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;AAE1C,gBAAA,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,OAAO,CAAC,EACtD;;AAEI,oBAAA,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;oBACtE,IAAI,OAAO,EACX;;AAEI,wBAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC;;AAEzB,wBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC3C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACjC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACjC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACpC;yBAED;;AAEI,wBAAA,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC,CAAC;qBAC5B;oBACD,OAAO;iBACV;aACJ;AAED,YAAA,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;SACrC;;AAGD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EACzC;AACI,YAAA,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACzB,YAAA,IAAI,KAAK,IAAI,YAAY,EACzB;gBACI,KAAK,IAAI,YAAY,CAAC;AACtB,gBAAA,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;aACxB;SACJ;QAED,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAEpC,QAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AAE1E,QAAA,IAAI,QAAQ,KAAK,aAAa,CAAC,IAAI,EACnC;AACI,YAAA,IAAI,IAAI,CAAC,YAAY,YAAYqB,gBAAQ;mBAClC,SAAS,CAAC,MAAM,KAAK,CAAC;mBACtB,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAC7B;gBACI,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7B,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EACzD;AACI,oBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;AAC7D,oBAAA,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;iBACxC;aACJ;YACD,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;SACzD;;YAEG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;KAChE;AAED,IAAA,kBAAkB,CAAC,MAAgB,EAAA;QAE/B,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC;AACxD,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAC3B;YACI,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAC5B,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;SACjD;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;;;AAMD;;;;;;;;;;;;;;;;;;;;;AAqBE;AAKF;;;AAGG;AACH,IAAA,mBAAmB,CAAC,MAAoB,EAAA;AAEpC,QAAA,IAAI,MAAM,CAAC,KAAK,GAAG,IAAI,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI;YACtE,OAAOnC,cAAM,CAAC,KAAK,CAAC;AAExB,QAAA,IAAI,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEnD,QAAA,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;QAChB,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;AACnC,QAAA,IAAI,IAAI,IAAI,IAAI;SAChB;AACI,YAAA,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAClD,IAAI,EAAEQ,QAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAClB,gBAAA,MAAM,CAAC,WAAW,CACd,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAChD,CAAC;SACT;AACI,aAAA,IAAI,IAAI,KAAK,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC;YAChD,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;;YAEzC,OAAOR,cAAM,CAAC,KAAK,CAAC;QAExB,IAAIQ,QAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;AAC9C,YAAA,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAEtC,QAAA,OAAO,MAAM,CAAC,SAAS,GAAG,IAAI,GAAGR,cAAM,CAAC,IAAI,GAAGA,cAAM,CAAC,KAAK,CAAC;KAC/D;AAED;;;AAGG;IACH,gBAAgB,CAAC,uBAAuB,GAAG,IAAI,EAAA;AAE3C,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO;;AASpC,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACzB,QAAA,IAAI,GAAG,GAAG,IAAID,aAAO,CAAC;QACtB,IAAI,EAAE,GAAG,IAAIyD,4BAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAC3C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAC5C;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACxB,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;AAC3C,YAAA,IAAI,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AACjD,YAAA,IAAI,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC;AACzB,YAAA,CAAC,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;YAC5C,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;SACtD;QACD,EAAE,CAAC,MAAM,EAAE,CAAC;AAEZ,QAAA,IAAI,KAAK,GAAmB,EAAE,CAAC;AAE/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAC5C;YACI,IAAI,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7B,YAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS;gBAC7B,SAAS;AAEb,YAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEnB,YAAA,IAAI,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC;AAErB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EACrC;AACI,gBAAA,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACjB,gBAAA,IAAI,EAAE,GAAG,CAAC,CAAC,QAAmB,CAAC;gBAE/B,IAAI,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,EAAE,IAAG;oBAE1G,IAAI,EAAE,IAAI,CAAC;wBAAE,OAAO,KAAK,CAAC;oBAC1B,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAmB,CAAC;oBAC9C,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;iBACzB,EAAE,CAAC;AAEJ,gBAAA,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;oBACI,IAAI,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;oBAC1B,IAAIhD,QAAM,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAKR,cAAM,CAAC,IAAI,EACvF;AACK,wBAAA,EAAE,CAAC,QAAoB,CAAC,IAAI,GAAG,IAAI,CAAC;AACrC,wBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;qBAClB;iBACJ;AAED,gBAAA,CAAC,CAAC,QAAQ,GAAG,SAAS,CAAC;aAC1B;SACJ;AAED,QAAA,IAAI,uBAAuB,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,EACnE;AACI,YAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;gBACtB,CAAC,CAAC,iBAAiB,EAAE,CAAC;SAC7B;KACJ;AAED;;;;;AAKE;AACM,IAAA,kBAAkB,CAAC,MAAoB,EAAA;AAE3C,QAAA,IAAI,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtD,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;;AAGhC,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAChE,IAAI,WAAW,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAEzF,IAAI,MAAM,GAAG,SAAS,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC;AAE9D,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EACvB;YACI,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;AAC9C,YAAA,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;AACvB,YAAA,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAC/B,YAAA,OAAO,OAAO,CAAC;SAClB;aAED;YACI,IAAI,OAAO,GAAmB,EAAE,CAAC;AACjC,YAAA,KAAK,IAAI,OAAO,IAAI,MAAM,EAC1B;gBACI,IAAI,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,CAAC;gBACrC,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;AACzC,gBAAA,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAC5B,gBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACrB;AACD,YAAA,OAAO,OAAO,CAAC;SAClB;KACJ;AACD;;;;;AAKG;AACH,IAAA,oBAAoB,CAAC,YAAoB,EAAA;AAErC,QAAA,IAAI,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACtC,YAAY,CAAC,eAAe,CACxB,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC,CACrE,CAAC;AACF,QAAA,IAAI,aAAa,GAAG,IAAI,YAAY,EAAE,CAAC;AAEvC,QAAA,IAAI,eAAe,GAAmB,EAAE,CAAC;AACzC,QAAA,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,IAAG;YAEjC,IAAIQ,QAAM,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,EAC5C;gBACI,IAAI,WAAW,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;AAC9C,gBAAA,IAAI,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACrD,gBAAA,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;AAEvC,gBAAA,aAAa,CAAC,eAAe,CACzB,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,CAAC,CACzD,CAAC;AAEF,gBAAA,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,gBAAA,OAAO,IAAI,CAAC;aACf;AACD,YAAA,OAAO,KAAK,CAAC;AACjB,SAAC,CAAC,CAAC;AAEH,QAAA,YAAY,CAAC,qBAAqB,CAAC,aAAa,CAAC,CAAC;AAClD,QAAA,IAAI,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC;;AAGpC,QAAA,IAAI,YAAY,CAAC,UAAU,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,eAAe,CAAC,MAAM,EACtF;;YAEI,KAAK,IAAI,CAAC,IAAI,eAAe;gBACzB,CAAC,CAAC,iBAAiB,EAAE,CAAC;YAE1B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;AACtC,YAAA,OAAO,IAAI,CAAC;SACf;;AAGD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC,EAAE,EAChD;AACI,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AACvB,YAAA,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,YAAA,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,KAAK,EAC5B;AACI,gBAAA,IAAI,MAAM,GAAG,IAAI,cAAY,EAAE,CAAC;;AAGhC,gBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC9B,IAAI,cAAc,GAAG,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1F,gBAAA,IAAI,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;AAE7D,gBAAA,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;AAC3C,gBAAA,MAAM,CAAC,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC;AACnD,gBAAA,MAAM,CAAC,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC;AACnD,gBAAA,MAAM,CAAC,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,CAAC;;AAGrD,gBAAA,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;AAC7B,gBAAA,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;AACjC,gBAAA,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAElC,gBAAA,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC5B;YACD,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AACvC,YAAA,GAAG,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;YACjC,GAAG,CAAC,MAAM,EAAE,CAAC;AACb,YAAA,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC1B;AAED,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EACrB;AACI,YAAA,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACtB,YAAA,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,KAAK,EAC5B;AACI,gBAAA,IAAI,MAAM,GAAG,IAAI,cAAY,EAAE,CAAC;;AAGhC,gBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC9B,IAAI,cAAc,GAAG,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1F,gBAAA,IAAI,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;AAE7D,gBAAA,MAAM,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;AAC3C,gBAAA,MAAM,CAAC,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC;AACnD,gBAAA,MAAM,CAAC,eAAe,GAAG,SAAS,CAAC,eAAe,CAAC;AACnD,gBAAA,MAAM,CAAC,gBAAgB,GAAG,SAAS,CAAC,gBAAgB,CAAC;;AAGrD,gBAAA,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;AAC7B,gBAAA,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;AACjC,gBAAA,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AAClC,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC7B;AAED,YAAA,IAAI,CAACA,QAAM,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;gBACnD,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAE5C,YAAA,OAAO,IAAI,CAAC;SACf;;AAEG,YAAA,OAAO,KAAK,CAAC;KACpB;AAID;;;;AAIG;AACH,IAAA,cAAc,CAAC,YAAoB,EAAA;AAE/B,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAC1B;AACI,YAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,OAAO;SACV;AACD,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,oBAAoB,EAAE,CAAC;;AAG5B,QAAA,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAG;YAE5B,OAAO,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAKR,cAAM,CAAC,KAAK,CAAC;AACxD,SAAC,CAAC,CAAC;;AAGH,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAC1B;AACI,YAAA,IAAIQ,QAAM,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAC7C;AACI;;;AAGE;AACF,gBAAA,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;aACxB;;gBAEG,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,CAACA,QAAM,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC;SACpF;;QAGD,IAAI,CAAC,gBAAgB,EAAE,CAAC;;QAExB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAIA,QAAM,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EACrE;YACI,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,EAC5C;gBACI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,OAAO;aACV;SACJ;;QAGD,IAAI,YAAY,GAAmB,EAAE,CAAC;AACtC,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACtC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAC5C;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACxB,IAAIA,QAAM,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC;AACzC,gBAAA,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBAEzB;gBACI,IAAI,EAAE,GAAG,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC;AACpC,gBAAA,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACnB;AACI,oBAAA,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACf,oBAAA,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAIA,QAAM,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,EACrE;;AAEI,wBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBAC9C,IAAIA,QAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAClB;AACI,4BAAA,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC;AAC/B,4BAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACpB,4BAAA,CAAC,CAAC,cAAc,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;4BAC/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BACjC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BACjC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;yBACpC;6BAED;AACI,4BAAA,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,CAAC;yBAClC;wBACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,wBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;wBAClC,OAAO;qBACV;iBACJ;AACD,gBAAA,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;aAC5B;SACJ;AAED,QAAA,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC;QAE5B,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;;IAGD,uBAAuB,CAAC,SAAyB,SAAS,EAAA;QAEtD,IAAI,YAAY,GAAW,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;AAElC,QAAA,IAAI,MAAM;AACN,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;AAC5B,aAAA,IAAI,IAAI,CAAC,MAAM,EACpB;AACI,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAA0B,CAAC;AACpD,YAAA,KAAK,IAAI,CAAC,IAAI,YAAY,EAC1B;AACI,gBAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACd,CAAC,CAAC,eAAe,EAAE,CAAC;aACvB;AACD,YAAA,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;SAC1C;KACJ;;IAGD,mBAAmB,CAAC,YAAoB,EAAA,GAAK;IAE7C,kBAAkB,GAAA;AAEd,QAAA,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;QAC/B,IAAI,IAAI,CAAC,iBAAiB;YACtB,IAAI,CAAC,uBAAuB,EAAE,CAAC;KACtC;;;IAKD,gBAAgB,GAAA;AAEZ,QAAA,IAAI,QAAQ,GAAG,IAAImB,yBAAY,EAAE,CAAC;AAClC,QAAA,IAAI,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjF,IAAI,cAAc,GAAG,IAAIuB,gCAA0B,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxE,QAAA,QAAQ,CAAC,YAAY,CAAC,eAAe,EAAE,IAAIC,gCAA0B,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7F,QAAA,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,IAAIA,gCAA0B,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3F,IAAI,IAAI,GAAG,IAAIvB,WAAK,CAAC,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;AAC/D,QAAA,IAAI,IAAI,GAAG,IAAIiB,UAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,0BAA0B,EAAE,CAAC,CAAC;AACnF,QAAA,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACvB;AAED,IAAA,cAAc,CAAC,UAAA,GAAyB,UAAU,CAAC,SAAS,EAAA;AAExD,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,EACvC;YACI,OAAO,IAAID,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;SAC3G;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,UAAU,EAC7C;YACI,OAAO,IAAInC,cAAQ,EAAE,CAAC,GAAG,CACrB,IAAIoC,UAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAEvC,eAAS,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAC/G,IAAIsC,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,yBAAyB,EAAE,CAAC,CACjF,CAAC;SACL;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,QAAQ,EAC3C;AACI,YAAA,IAAI,IAAI,GAAG,IAAIC,UAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAE1D,YAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE;AACtC,gBAAA,GAAG,EAAE,MAAM,IAAI,CAAC,UAAU;AAC7B,aAAA,CAAC,CAAC;AACH,YAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE;AACzC,gBAAA,GAAG,EAAE,MAAM,IAAI,CAAC,UAAU;AAC7B,aAAA,CAAC,CAAC;AAEH,YAAA,OAAO,IAAI,CAAC;SACf;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,GAAG,EACtC;AACI,YAAA,OAAO,IAAIpC,cAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;SACrD;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,KAAK,EACxC;AACI,YAAA,OAAO,IAAIA,cAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;SACzD;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,EAC5C;AACI,YAAA,IAAI,IAAI,GAAG,IAAIoC,UAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAE1D,YAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE;AACtC,gBAAA,GAAG,EAAE,MAAM,IAAI,CAAC,UAAU;AAC7B,aAAA,CAAC,CAAC;AACH,YAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE;AACzC,gBAAA,GAAG,EAAE,MAAM,IAAI,CAAC,UAAU;AAC7B,aAAA,CAAC,CAAC;YAEH,OAAO,IAAIpC,cAAQ,EAAE,CAAC,GAAG,CACrB,IAAI,EACJ,IAAImC,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,wBAAwB,EAAE,CAAC,CAChF,CAAC;SACL;KACJ;AACD,IAAA,IAAI,WAAW,GAAA;AAEX,QAAA,OAAO,gBAAgB,CAAC;KAC3B;AAGD,IAAA,IAAI,yBAAyB,GAAA;;QAGzB,IAAI,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,KAAK,CAAC;QAEhC,IAAI,CAAC,IAAI,CAAC,oBAAoB;AAAE,YAAA,OAAO,IAAI,CAAC;AAE5C,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,EACjC;AACI,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;gBAAE,SAAS;AAE9B,YAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAc,CAAC,CAAC,CAAC,MAAM,EAAG,iBAAiB;AAC7E,gBAAA,OAAO,IAAI,CAAC;SACnB;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAOD;;AAEG;IACK,mBAAmB,GAAA;;QAGvB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;AAErB,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;QAE/B,IAAI,KAAK,GAAmB,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAE/B,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EACpB;AACI,YAAA,KAAK,IAAI,CAAC,IAAI,KAAK;gBACf,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,CAAC,oBAAoB,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,oBAAoB,EAAE,OAAO,IAAI,CAAC,CAAC,iBAAiB,CAAC;AAErI,YAAA,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/B,WAAW,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,WAAW;gBACjB,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAC;AACzC,YAAA,IAAI,MAAM,GAAmB,CAAC,WAAW,CAAC,CAAC;YAC3C,IAAI,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC7C,YAAA,IAAI,CAAC,oBAAoB,GAAG,MAAgB,CAAC;YAC7C,IAAI,EAAE,EACN;AACI,gBAAA,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC;gBAC1C,IAAI,KAAK,GAAqB,EAAE,CAAC;gBACjC,IAAI,KAAK,GAAqB,EAAE,CAAC;AACjC,gBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;AACtB,gBAAA,IAAI,IAAI,GAAG,IAAI7C,aAAO,CAAC;AACvB,gBAAA,KAAK,IAAI,EAAE,IAAI,MAAM,EACrB;oBACI,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;AACvC,oBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/C,oBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/C,oBAAA,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC,MAAM,CAAC;iBAErC;AACD,gBAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EACvB;AACI,oBAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,YAAY,CAAC;AAC9C,oBAAA,IAAI,CAAC,aAAa,GAAG,WAAW,CAAC,YAAY,CAAC;iBACjD;qBAED;oBACI,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACtE,oBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;oBACpC,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;iBACzE;;gBAGD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC7D,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;;AAGpC,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC,EAAE,EACzD;oBACI,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBAC/E,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,eAAe,GAAG,IAAI,CAAC;iBACvD;aACJ;iBAED;gBACI,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,cAAc,CAAC;gBACxC,IACI,CAAC,IAAI,CAAC,WAAW;oBACjB,EAAE;AACF,oBAAA,IAAI,YAAY,KAAK;oBACrB,IAAI,CAAC,eAAe,KAAK,SAAS;oBAClC,CAACS,QAAM,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC;AAE1C,oBAAA,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,CAAG,EAAA,IAAI,CAAC,IAAI,CAAI,CAAA,EAAA,EAAE,CAAC,KAAK,GAAG,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AAChH,gBAAA,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;AAEjC,gBAAA,IAAI,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,CAAC;aACtC;SACJ;aAED;YACI,IACI,CAAC,IAAI,CAAC,WAAW;AACjB,gBAAA,IAAI,CAAC,EAAE;AACP,gBAAA,IAAI,YAAY,KAAK;gBACrB,IAAI,CAAC,eAAe,KAAK,SAAS;gBAClC,CAACA,QAAM,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC;AAE1C,gBAAA,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,CAAG,EAAA,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,KAAK,CAAG,CAAA,CAAA,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AAC1H,YAAA,IAAI,CAAC,oBAAoB,GAAG,CAAC,IAAI,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;SACpC;KACJ;AAED;;AAEG;AACH,IAAA,IAAI,aAAa,GAAA;QAEb,IAAI,IAAI,CAAC,yBAAyB;YAC9B,IAAI,CAAC,MAAM,CAACP,kBAAU,CAAC,QAAQ,CAAC,CAAC;AACrC,QAAA,IAAI,IAAI,CAAC,yBAAyB;AAC9B,YAAA,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,oBAAoB;AACzB,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,oBAAoB;AACnC,gBAAA,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACzC,OAAO,IAAI,CAAC,oBAAoB,CAAC;KACpC;AAES,IAAA,kBAAkB,CAAC,KAAqB,EAAA;AAE9C,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,EACjC;YACI,IAAI,CAAC,CAAC,CAAC,OAAO;AACV,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAsB,CAAC,CAAC;iBACpC,IAAI,IAAI,CAAC,oBAAoB;AAC9B,gBAAA,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAY,CAAC,EAAE,MAAO,EAAE,iBAAiB,CAAC;SACnF;KACJ;AAED,IAAA,cAAc,CAAC,EAAiB,EAAA;QAE5B,IAAI,EAAE,EACN;AACI,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;YACxC,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAClF,YAAA,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,MAAM;gBACrC,aAAa,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEtF,YAAA,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;YACpC,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAClF,YAAA,IAAI,MAAM,KAAK,IAAI,CAAC,cAAc,CAAC,MAAM;gBACrC,aAAa,CAAC,EAAE,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;SACzF;aAED;AACI,YAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,cAAc,EAClC;AACI,gBAAA,IAAI,EAAE,GAAG,EAAE,CAAC,MAAsB,CAAC;AACnC,gBAAA,IAAI,EAAE;oBACF,aAAa,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;aACtF;AAED,YAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,cAAc,EAClC;AACI,gBAAA,IAAI,EAAE,GAAG,EAAE,CAAC,MAAsB,CAAC;gBACnC,IAAI,EAAE,EACN;oBACI,aAAa,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;oBAC/E,EAAE,CAAC,MAAM,EAAE,CAAC;iBACf;aACJ;AACD,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;SAClC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AAGD,IAAA,IAAI,YAAY,GAAA;QAEZ,IAAI,IAAI,CAAC,aAAa;YAClB,OAAO,IAAI,CAAC,aAAa,CAAC;AAE9B,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC;YACnB,OAAO,IAAIsB,oBAAc,EAAE,CAAC;QAG5B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,aAAa;YAClB,OAAO,IAAI,CAAC,aAAa,CAAC;AAE9B,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAE/B,QAAA,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC3B,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,IAAIf,QAAM,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EACnF;YACI,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YACxC,IAAI,KAAK,GAAc,EAAE,CAAC;AAE1B,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACzB,YAAA,IAAI,SAAS,GAAG,IAAIT,aAAO,EAAE,CAAC;AAC9B,YAAA,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB;AACnC,gBAAA,KAAK,IAAI,CAAC,IAAI,OAAO,EACrB;oBACI,SAAS,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;oBACjD,IAAI,QAAQ,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;AACtC,oBAAA,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;oBAChC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;iBAC/C;AAEL,YAAA,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;AAE7D,YAAA,IAAI,eAAe,GAA2B;AAC1C,gBAAA,KAAK,EAAE,CAAC;gBACR,WAAW,EAAE,IAAI,CAAC,WAAW;AAC7B,gBAAA,KAAK,EAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS;gBAC9D,YAAY,EAAE,IAAI,CAAC,YAAY;AAC/B,gBAAA,cAAc,EAAE,CAAC;AACjB,gBAAA,SAAS,EAAE,CAAC;gBACZ,WAAW,EAAE,CAAC,CAAC;AACf,gBAAA,aAAa,EAAE,CAAC;aACnB,CAAC;YACF,IAAI,GAAG,GAAG,IAAI0D,qBAAe,CAAC,KAAK,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;AAC5D,YAAA,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAErC,IAAI,IAAI,CAAC,YAAY;gBACjB,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAE3B,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;;YAGvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAC9C,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;AAEpC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;YAGpC,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB,IAAI,CAAC,IAAI,CAAC,aAAa;aAC9D;AACI,gBAAA,IAAI,MAAM,GAAG,8BAA8B,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AACtF,gBAAA,IAAI,OAAO,GAAG,IAAIlC,oBAAc,EAAE,CAAC;AACnC,gBAAA,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,IAAIyB,4BAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACxE,gBAAA,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;aAChC;YAED,OAAO,IAAI,CAAC,aAAa,CAAC;SAC7B;AAED,QAAA,IAAI,OAAO,GAAG,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC;AAE/C,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;QAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7D,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB,IAAI,CAAC,IAAI,CAAC,aAAa;AAC1D,YAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;AAC9C,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEpC,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;;AAGD,IAAA,cAAc,CAAC,GAA8B,EAAA;AAEzC,QAAA,OAAO,GAAqB,CAAC;KAChC;AAED,IAAA,IAAc,SAAS,GAAK,EAAA,OAAO,KAAK,CAAC,EAAE;AAG3C,IAAA,IAAI,YAAY,GAAA;QAEZ,IAAI,IAAI,CAAC,aAAa;YAClB,OAAO,IAAI,CAAC,aAAa,CAAC;QAG1B,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,aAAa;YAClB,OAAO,IAAI,CAAC,aAAa,CAAC;;QAG9B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAIxC,QAAM,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAEjJ;AACI,YAAA,IAAI,MAAM,GAAG,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AACtE,YAAA,IAAI,OAAO,GAAG,IAAIe,oBAAc,EAAE,CAAC;AACnC,YAAA,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,IAAIyB,4BAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACxE,YAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;YAC7B,OAAO,IAAI,CAAC,aAAa,CAAC;SAC7B;AAED,QAAA,IAAI,IAAI,CAAC,aAAa,EACtB;AACI,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AAC7B,YAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;SAClC;QACD,IAAI,CAAC,YAAY,CAAC;QAClB,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;AAED,IAAA,QAAQ,CAAC,GAAa,EAAE,GAAY,EAAE,KAAK,GAAG,KAAK,EAAA;AAE/C,QAAA,IAAI,GAAG,GAAI,IAAI,CAAC,QAAQ,EAAE,MAAiC,IAAI,IAAI,CAAC,EAAE,EAAE,eAAe,CAAC;AAExF,QAAA,IAAI,GAAG,EAAE,MAAM,EACf;AACI,YAAA,IAAI,GAAG;AACH,gBAAA,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;;AAEnD,gBAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;SAC3C;aAED;AACI,YAAA,IAAI,GAAG;gBACH,OAAO,CAAC,GAAG,CAAC,CAAC;SACpB;KACJ;AAED,IAAA,UAAU,CAAC,GAAmB,EAAA;AAE1B,QAAA,IAAI,GAAG,GAAI,IAAI,CAAC,QAAQ,EAAE,MAAiC,IAAI,IAAI,CAAC,EAAE,EAAE,eAAe,CAAC;AAExF,QAAA,IAAI,GAAG,EAAE,UAAU,EACnB;AACI,YAAA,IAAI,GAAG,GAAG,IAAI,aAAa,CAAC;YAC5B,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;SACnC;KACJ;AAED,IAAA,uBAAuB,CAAC,KAAc,EAAA;QAElC,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;AAC3C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAClC;YACI,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;YAC1B,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC1B,YAAA,IAAI,KAAK;AACL,gBAAA,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;;AAE9C,gBAAA,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;SACrD;KACJ;IACD,WAAW,GAAA;QAEP,IAAI,IAAI,CAAC,cAAc,GAAG/C,kBAAU,CAAC,MAAM,EAC3C;;AAEI,YAAA,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;AACtD,gBAAA,IAAI,CAAC,cAAc,IAAIA,kBAAU,CAAC,QAAQ,CAAC;SAClD;QACD,KAAK,CAAC,WAAW,EAAE,CAAC;KACvB;IAID,SAAS,GAAA;QAEL,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,QAAA,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC;KAC5B;IAED,gBAAgB,CAAC,UAAsB,EAAE,GAAa,EAAA;QAElD,eAAe,CAAC,GAAG,CAAC,CAAC;QACrB,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACvB,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,EACvC;YACI,IAAI,CAAC,GAAG,GAAmB,CAAC;AAC5B,YAAA,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;AAC/B,YAAA,CAAC,CAAC,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;SAC5E;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,UAAU,EAC7C;AACI,YAAA,OAAO,GAAG,CAAC,GAAG,CACV,IAAI4C,UAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAEvC,eAAS,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAC/G,IAAIsC,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,yBAAyB,EAAE,CAAC,CACjF,CAAC;SACL;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,WAAW,EAC9C;AACI,YAAA,GAAG,CAAC,GAAG;;AAEH,YAAA,IAAIA,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,yBAAyB,EAAE,CAAC,CACjF,CAAC;YACF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;SAClC;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,QAAQ,EAC3C;YACI,IAAI,IAAI,GAAG,GAAW,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;AAClC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;SACrC;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,GAAG,EACtC;YACI,GAAG,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;SACnC;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,KAAK,EACxC;YACI,OAAO,GAAG,CAAC,GAAG,CACV,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAC7B,CAAC;SACL;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,EAC5C;AACI,YAAA,IAAI,IAAI,GAAG,IAAIC,UAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAE1D,YAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE;AACtC,gBAAA,GAAG,EAAE,MAAM,IAAI,CAAC,UAAU;AAC7B,aAAA,CAAC,CAAC;AACH,YAAA,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE;AACzC,gBAAA,GAAG,EAAE,MAAM,IAAI,CAAC,UAAU;AAC7B,aAAA,CAAC,CAAC;AAEH,YAAA,OAAO,GAAG,CAAC,GAAG,CACV,IAAI,EACJ,IAAID,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,wBAAwB,EAAE,CAAC,CAChF,CAAC;SACL;KACJ;IACD,wBAAwB,CAAC,UAAsB,EAAE,GAAa,EAAA;AAE1D,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,EACvC;YACI,IAAI,CAAC,GAAG,GAAY,CAAC;AACrB,YAAA,CAAC,CAAC,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;SAC5E;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,UAAU,EAC7C;YACI,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAS,CAAC;AACnC,YAAA,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,EAAEtC,eAAS,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;SACtG;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,EAC5C;YACI,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAS,CAAC;AACnC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;SACrC;aAED;YACI,IAAI,IAAI,GAAG,GAAW,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;SACrC;KACJ;IACO,cAAc,GAAA;QAElB,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,oBAAoB,IAAI,EAAE,EAChD;YACI,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;SAC/B;AACD,QAAA,MAAM,KAAK,GAAG,IAAIoD,WAAK,EAAE,CAAC;AAC1B,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAC5B;AACI,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;YACnC,WAAW,CAAC,kBAAkB,EAAE,CAAC;AACjC,YAAA,MAAM,GAAG,GAAG,IAAI3D,aAAO,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEvF,YAAA,MAAM,OAAO,GAAG,WAAW,CAAC,YAAY,CAAC;AACzC,YAAA,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAC1B,YAAA,MAAM,IAAI,GAAG,IAAI6C,kBAAY,CAAC,OAAO,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAEtF,YAAA,MAAM,OAAO,GAAG,WAAW,CAAC,YAAY,CAAC;AACzC,YAAA,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,IAAI,GAAG,IAAIC,UAAI,CAAC,OAAO,EAAE,aAAa,CAAC,qBAAqB,CAAC,CAAC,EAAEvC,eAAS,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1G,YAAA,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SACzB;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;IACD,iBAAiB,CAAC,KAAK,GAAG,CAAC,EAAA;KAG1B;;;AAKD;;AAEG;AACH,IAAA,YAAY,CAAC,IAAc,EAAA;AAEvB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;KACvC;AACD,IAAA,aAAa,CAAC,IAAc,EAAA;AAExB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;KACtC;AAEO,IAAA,YAAY,CAAC,IAAc,EAAA;AAE/B,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,EAAyB,CAAC;AAE7D,QAAA,IAAI,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EACpC;AACI,YAAA,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,SAAS;gBAC7B,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,cAAY,EAAE,CAAC;YAEzC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;SACtC;AAED,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACpC,QAAA,IAAI,GAAG,GAAG,CAAC,EACX;AACI,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACnC,YAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;SACtC;AAED,QAAA,IAAI,GAAG,GAAG,CAAC,EACX;AACI,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/B,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AAE/B,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAY,CAAC;AAClC,YAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,EAC1C;AACI,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACjC,gBAAA,IAAI,EAAE;AACF,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACpC;AAED,YAAA,KAAK,GAAG,IAAI,CAAC,IAAI,EAAY,CAAC;AAC9B,YAAA,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,EAC1C;AACI,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACjC,gBAAA,IAAI,EAAE;AACF,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACpC;SACJ;KACJ;AACO,IAAA,aAAa,CAAC,IAAc,EAAA;AAEhC,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvB,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,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAChC,QAAA,KAAK,IAAI,MAAM,IAAI,IAAI,CAAC,OAAO;AAC3B,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAE/B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;;QAGjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AACvC,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,cAAc;AAC9B,YAAA,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAE/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AACvC,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,cAAc;AAC9B,YAAA,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;KAClC;;AAGS,IAAA,SAAS,CAAC,IAAc,EAAA;AAE9B,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;KAC3B;;AAED,IAAA,SAAS,CAAC,IAAc,EAAA;AAEpB,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KAC5B;CAEJ,CAAA;AA1+DY,YAAY,GAAA,cAAA,GAAA,UAAA,CAAA;IADxB,OAAO;AACK,CAAA,EAAA,YAAY,CA0+DxB,CAAA;AAUD,UAAU,CAAC,mBAAmB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AAmC5D;AACuB,IAAIP,aAAO,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK;;;ACzjE3D,IAAe,eAAe,GAAA,iBAAA,GAA9B,MAAe,eAAgB,SAAQ,MAAM,CAAA;AAEhD,IAAA,WAAA,GAAA;AAEI,QAAA,KAAK,EAAE,CAAC;;QAGA,IAAO,CAAA,OAAA,GAAa,EAAE,CAAC;KAFlC;AAID;;AAEE;AACF,IAAA,IAAa,gBAAgB,GAAA;;;;;;;;;;;;;;;;;;;;;;QAuBzB;AACI,YAAA,IAAI,GAAG,GAAG,IAAI,OAAO,CAAC;AACtB,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;AACtB,gBAAA,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7D,YAAA,OAAO,GAAG,CAAC;SACd;KACJ;;;AAID;;AAEE;IACO,OAAO,GAAA;QAEZ,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAG;AAExB,YAAA,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AACvB,YAAA,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;YAC7B,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/C,SAAC,CAAC,CAAC;KACN;AACD,IAAA,QAAQ,CAAC,QAAgC,EAAA;QAErC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACf,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,EAC3B;YACI,IAAI,EAAE,YAAY,iBAAe;AAC7B,gBAAA,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;;gBAEtB,QAAQ,CAAC,EAAE,CAAC,CAAC;SACpB;KACJ;;;;;;;;;;AAYS,IAAA,cAAc,CAAC,UAAA,GAAyB,UAAU,CAAC,SAAS,EAAA;AAElE;;;AAGG;AACH,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,GAAG;YAAE,OAAO;AAE1C,QAAA,IAAI,MAAM,GAAG,IAAIU,cAAQ,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAC1C,QAAA,OAAO,MAAM,CAAC;KACjB;IAED,gBAAgB,CAAC,UAAsB,EAAE,GAAa,EAAA;QAElD,iBAAiB,CAAC,GAAG,CAAC,CAAC;AACvB,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,WAAW;YAAE,OAAO;AAClD,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAC1B;AACI,YAAA,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC;;;;YAKvB,IAAI,KAAK,GAAG,UAAU,CAAC;YACvB,IAAI,UAAU,KAAK,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC,YAAY;gBACjD,KAAK,IAAI,GAAG,CAAC;YAEjB,IAAI,CAAC,GAAG,CAAC,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,CAAC,EACL;AACI,gBAAA,CAAC,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;AACrC,gBAAA,mBAAmB,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;aACtC;SACJ;KACJ;AAED,IAAA,IAAI,UAAU,GAAA;QAEV,OAAO,KAAK,CAAC,UAAU,CAAC;KAC3B;IAED,IAAI,UAAU,CAAC,KAAa,EAAA;AAExB,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EACzB;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;AACpB,YAAA,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAG;gBAEd,IAAI,CAAC,KAAK,IAAI;oBACV,OAAO;;;;AAIX,gBAAA,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC;AACzB,aAAC,CAAC,CAAC;SACN;KACJ;AACD,IAAA,IAAI,QAAQ,GAAA;QAER,OAAO,KAAK,CAAC,QAAQ,CAAC;KACzB;IACD,IAAI,QAAQ,CAAC,EAAE,EAAA;AAEX,QAAA,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;AACpB,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAC1B;YACI,IAAI,CAAC,CAAC,CAAC,EAAE;AAAE,gBAAA,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClC,YAAA,CAAC,CAAC,QAAQ,GAAG,EAAE,CAAC;SACnB;KACJ;IAED,wBAAwB,CAAC,UAAsB,EAAE,GAAa,EAAA;AAE1D,QAAA,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;KAC1C;IAED,kBAAkB,GAAA;;KAGjB;;;AAMD;;;;;;;AAOE;AACF,IAAA,mBAAmB,CACf,QAAwB,EACxB,SAAkB,EAClB,SAAkB,EAClB,SAAmB,EAAA;QAGnB,IAAI,GAAG,GAAc,EAAE,CAAC;AACxB,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;YACtBO,gBAAc,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAC/H,QAAA,OAAO,GAAG,CAAC;KACd;IAED,aAAa,GAAA;QAET,OAAO,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KAC1D;IAED,cAAc,CAAC,SAAmB,EAAE,GAAY,EAAA;QAE5C,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;KACpE;IAED,gBAAgB,GAAA;QAEZ,OAAO,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;KAC7D;AAED;;;;;;AAMG;IACH,iBAAiB,CAAC,SAAwB,EAAE,GAAY,EAAA;QAEpD,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;KACvE;AAEO,IAAA,sBAAsB,CAAC,IAAmB,EAAA;QAE9C,IAAI,GAAG,GAAc,EAAE,CAAC;AACxB,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;YACtB,GAAG,CAAC,IAAI,CAAC,IAAK,IAAI,KAAK,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;QAC3F,KAAK,IAAI,CAAC,IAAI,GAAG;AACb,YAAA,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjC,QAAA,OAAO,GAAG,CAAC;KACd;AAEO,IAAA,yBAAyB,CAAC,QAAuB,EAAA;QAErD,IAAI,MAAM,GAAa,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAG;YAExC,OAAO,CAAC,QAAQ,KAAK,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,gBAAgB,EAAE,EAAE,MAAM,CAAC;AAC/F,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,MAAM,CAAC;KACjB;AAED,IAAA,uBAAuB,CAAC,SAAmB,EAAE,GAAY,EAAE,QAAuB,EAAA;QAE9E,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,MAAM,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;AACtD,QAAA,IAAI,QAAQ,KAAK,aAAa,CAAC,OAAO,IAAI,SAAS,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC,EAC/E;YACI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvC,OAAO;SACV;QAED,GAAG,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjEF,mBAAiB,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,QAAA,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;QAC9B,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,QAAA,KAAK,IAAI,KAAK,IAAI,MAAM,EACxB;YACI,MAAM,IAAI,KAAK,CAAC;YAChB,IAAI,KAAK,GAAG,EAAE,CAAC;AACf,YAAA,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EACtB;AACI,gBAAA,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM;AACrB,oBAAA,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC;;oBAE1C,MAAM;aACb;YAED,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,QAAQ,KAAK,aAAa,CAAC,IAAI,GAAG,GAAG,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACrG,YAAA,IAAI,GAAG,YAAY,YAAY;gBAC3B,GAAG,CAAC,iBAAiB,EAAE,CAAC;YAC5B,GAAG,CAAC,MAAM,EAAE,CAAC;AACb,YAAA,CAAC,EAAE,CAAC;SACP;QACD,IAAI,CAAC,iBAAiB,EAAE,CAAC;;;;QAKzB,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AACD,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,GAAG,EAAE,CAAC;YAClB,IAAI,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,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;YAE/B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;SAC3C;AACD,QAAA,IAAI,CAAC,cAAc,GAAGb,kBAAU,CAAC,IAAI,CAAC;KACzC;AACD,IAAA,iBAAiB,CAAC,CAAU,EAAA;QAExB,IAAI,IAAI,CAAC,EAAE;AACP,YAAA,IAAI,CAAC,MAAM,CAACA,kBAAU,CAAC,QAAQ,CAAC,CAAC;AACrC,QAAA,OAAO,IAAI,CAAC;KACf;;;AAIS,IAAA,SAAS,CAAC,IAAc,EAAA;AAE9B,QAAQ,IAAI,CAAC,IAAI,GAAG;AACpB,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;AACI,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,EAAY,CAAC;AACtC,YAAA,IAAI,GAAG;AACH,gBAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC9B;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;QACtB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAChC,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO;AACtB,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;KAC3B;CAEJ,CAAA;AAlUe,UAAA,CAAA;IAAX,UAAU;AAAwB,CAAA,EAAA,eAAA,CAAA,SAAA,EAAA,SAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAPjB,eAAe,GAAA,iBAAA,GAAA,UAAA,CAAA;IADpC,OAAO;AACc,CAAA,EAAA,eAAe,CAyUpC;;;AC/UM,IAAM,uBAAuB,GAAA,yBAAA,GAA7B,MAAM,uBAAwB,SAAQ,eAAe,CAAA;AAArD,IAAA,WAAA,GAAA;;AAEe,QAAA,IAAA,CAAA,cAAc,GAAwB,EAAE,GAAG,4BAA4B,EAAE,CAAC;AAC5F;;AAEG;QACS,IAAQ,CAAA,QAAA,GAAuB,EAAE,CAAC;QAClC,IAAe,CAAA,eAAA,GAAe,EAAE,CAAC;AACjC,QAAA,IAAA,CAAA,iBAAiB,GAAe,EAAE,CAAC;AACnC,QAAA,IAAA,CAAA,eAAe,GAAe,EAAE,CAAC;KAsJhD;AArJG;;;;;AAKG;AACH,IAAA,YAAY,CAAC,WAAA,GAAuB,KAAK,EAAE,WAAoC,EAAA;QAE3E,IAAI,KAAK,GAAa,EAAE,CAAC;AACzB,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAC1B;AACI,YAAA,IAAI,CAAC,YAAY,yBAAuB,EACxC;AACI,gBAAA,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC,cAAc,CAAC,MAAM;AACvC,oBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;aACxG;iBAED;AACI,gBAAA,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,CAAC,CAAC;AAC9B,oBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;aAC1D;SACJ;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAED,IAAA,iBAAiB,CAAC,CAAU,EAAA;AAExB,QAAA,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;;QAG3B,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;AACvC,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;aACvE,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC5C,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAE5E,QAAA,OAAO,IAAI,CAAC;KACf;AAGS,IAAA,SAAS,CAAC,IAAc,EAAA;AAE9B,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAEpB,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAChD,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC1C,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAEvC,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACzB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;AACI,YAAA,IAAI,CAAC,GAAqB;gBACtB,IAAI,CAAC,IAAI,EAAE;gBACX,IAAI,CAAC,IAAI,EAAE;aACd,CAAC;AACF,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACzB;QAED,IAAI,CAAC,GAAG,CAAC;YACL,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAE7C,QAAA,IAAI,CAAC,GAAG,CAAC,EACT;AACI,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;YAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;gBAC1B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;SAC1D;AAED,QAAA,IAAI,CAAC,GAAG,CAAC,EACT;AACI,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;gBAC1B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;SAC5D;AAED,QAAA,IAAI,CAAC,GAAG,CAAC,EACT;AACI,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;AACI,gBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AAChC,gBAAA,IAAI,KAAK;AACL,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACxC;SACJ;KACJ;;AAGD,IAAA,SAAS,CAAC,IAAc,EAAA;AAEpB,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEd,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QAC9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAErC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACjC,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,EAC9B;YACI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SACvB;QAED,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACxC,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,eAAe;AAC/B,YAAA,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAE/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1C,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,iBAAiB;AACjC,YAAA,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAE/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACxC,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,eAAe;AAC/B,YAAA,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;KAClC;CACJ,CAAA;AA7JqB,UAAA,CAAA;IAAjB,gBAAgB;AAA2E,CAAA,EAAA,uBAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAIhF,UAAA,CAAA;IAAX,UAAU;AAAmC,CAAA,EAAA,uBAAA,CAAA,SAAA,EAAA,UAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAClC,UAAA,CAAA;IAAX,UAAU;AAAkC,CAAA,EAAA,uBAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACjC,UAAA,CAAA;IAAX,UAAU;AAAoC,CAAA,EAAA,uBAAA,CAAA,SAAA,EAAA,mBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACnC,UAAA,CAAA;IAAX,UAAU;AAAkC,CAAA,EAAA,uBAAA,CAAA,SAAA,EAAA,iBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AATpC,uBAAuB,GAAA,yBAAA,GAAA,UAAA,CAAA;IADnC,OAAO;AACK,CAAA,EAAA,uBAAuB,CA+JnC;;AC9JM,MAAM,eAAe,GAAG,GAAG,CAAC;AAEnC,IAAY,aAIX,CAAA;AAJD,CAAA,UAAY,aAAa,EAAA;AAErB,IAAA,aAAA,CAAA,aAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AACR,IAAA,aAAA,CAAA,aAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AACd,CAAC,EAJW,aAAa,KAAb,aAAa,GAIxB,EAAA,CAAA,CAAA,CAAA;SA8Ie,cAAc,CAAC,EAAS,EAAE,QAAQ,GAAG,KAAK,EAAA;IAEtD,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IACxC,IAAI,CAAC,GAAG,KAAK,CAAC;IACd,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3B,IAAA,IAAI,QAAQ;QAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAEzB,IAAA,IAAI,MAAe,CAAC;IACpB,IAAI,CAACO,QAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EACpD;QACI,CAAC,CAAC,MAAM,EAAE,CAAC;AACX,QAAA,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC;KACxB;;AAEG,QAAA,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC;;IAE3B,OAAO,IAAIT,aAAO,EAAE;AACf,SAAA,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;SAClB,WAAW,CAAC,MAAM,CAAC,CAAC;AAC7B;;ACnKA,MAAM,CAAC,GAAG,IAAID,aAAO,CAAC;AACtB,MAAM,CAAC,GAAG,IAAIA,aAAO,CAAC;AAEtB,IAAI,YAAsB,CAAC;AAG3B;;;;;AAKG;SACa,cAAc,CAAC,EAAqB,EAAE,SAAS,GAAG,IAAI,EAAA;AAElE,IAAA,IAAI,OAAqB,CAAC;AAC1B,IAAA,IAAI,EAAE,YAAYoC,cAAM,EACxB;AACI,QAAA,IAAI,EAAE,GAAGO,wBAAsB,CAAC,EAAE,CAAC,CAAC;AACpC,QAAA,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;KACxB;;AAEG,QAAA,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;AAEzB,IAAA,IAAI,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC;;AAExB,IAAA,CAAC,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AAC9B,IAAA,CAAC,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9B,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACpB,IAAA,IAAI,QAAQ,GAAG,CAACjC,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAEtC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAC3C;QACI,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,QAAA,IAAI,QAAQ;YACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;KAC7B;AAED,IAAA,IAAI,SAAS,IAAI,EAAE,CAAC,OAAO,EAC3B;AACI,QAAA,YAAY,GAAG,YAAY,IAAI,IAAI2B,gBAAQ,CAAC;AAC5C,QAAA,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACjC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;YACvC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAE7E,QAAA,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,EAChB;YACI,YAAY,CAAC,OAAO,EAAE,CAAC;AACvB,YAAA,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;SAClC;AACD,QAAA,YAAY,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;KACpC;AAED,IAAA,OAAO,OAAO,CAAC;AACnB,CAAC;AAED;SACgB,iBAAiB,CAAC,GAAQ,EAAE,MAAM,GAAG,KAAK,EAAA;IAEtD,IAAI,MAAM,GAAwC,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACxE,IAAA,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;IAElB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAChC,IAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEtB,IAAI,MAAM,EACV;QACI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9B,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACvB;AAED,IAAA,OAAO,MAAM,CAAC;AAClB;;ACsEiBoB,4BAg8BhB;AAh8BD,CAAA,UAAiB,UAAU,EAAA;;AAGvB,IAAA,SAAgB,sBAAsB,CAAC,EAAS,EAAE,cAAc,GAAG,CAAC,EAAA;AAEhE,QAAA,IAAI,UAAU,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,EACf;AACI,YAAA,oBAAoB,CAAC;AACjB,gBAAA,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,sEAAsE;AACrF,gBAAA,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,gBAAA,GAAG,EAAE,EAAE,CAAC,eAAe,IAAI,EAAE;AAChC,aAAA,CAAC,CAAC;AACH,YAAA,OAAO,SAAS,CAAC;SACpB;QACD,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC;AAEzE,QAAA,IAAI,gBAAgB,GAAG,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC;QACrD,aAAa,CAAC,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACtE,IAAI,mBAAmB,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;;AAExD,QAAA,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AAC9B,QAAA,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,IAAI,GAAG,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,IAAIzD,aAAO,CAAC,CAAC;;AAG1D,QAAA,IAAI,mBAAmB,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;AACrD,QAAA,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AAC9B,QAAA,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AAE/B,QAAA,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,oBAAoB,CAAC,EAAE,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;AAE5F,QAAA,IAAI,YAA0B,CAAC;QAC/B,IAAI,YAAY,CAAC,EAAE,CAAC;YAChB,YAAY,GAAG,cAAc,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;;AAGnD,QAAA,IAAI,WAAW,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;QAE5C,IAAI,sBAAsB,GAAG,EAAE,CAAC,cAAc,GAAG,wBAAwB,CAAC,UAAU,EAAE,EAAE,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC;;AAEtI,QAAA,IAAI,UAAU,CAAC,KAAK,GAAG,CAAC;YAAE,WAAW,CAAC,OAAO,EAAE,CAAC;QAEhD,OAAO;AACH,YAAA,IAAI,EAAE,YAAY,CAAC,EAAE,EAAE,IAAI,CAAC;YAC5B,YAAY,EAAE,mBAAmB;YACjC,OAAO,EAAE,mBAAmB;YAC5B,OAAO,EAAE,WAAW;YACpB,eAAe,EAAE,sBAAsB;YACvC,QAAQ;YACR,KAAK,EAAE,iBAAiB,CAAC,EAAE,EAAE,gBAAgB,EAAE,UAAU,CAAC;YAC1D,YAAY;YACZ,gBAAgB;AAChB,YAAA,UAAU,EAAE,cAAc,CAAC,EAAE,CAAC;YAC9B,YAAY;AACZ,YAAA,UAAU,EAAE,YAAY,CAAC,EAAE,EAAE,gBAAgB,CAAC;AAC9C,YAAA,UAAU,EAAE,YAAY,CAAC,EAAE,EAAE,gBAAgB,CAAC;SACjD,CAAC;KACL;AAxDe,IAAA,UAAA,CAAA,sBAAsB,yBAwDrC,CAAA;;IAID,SAAgB,aAAa,CAAC,QAAsB,EAAA;QAEhD,IAAI,KAAK,GAAmB,EAAE,CAAC;AAC/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EACjD;YACI,IAAI,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAElC,YAAA,IAAI,KAAK,YAAYoC,cAAM,EAC3B;AACI,gBAAA,IAAI,KAAK,GAAiB;AACtB,oBAAA,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,GAAG;AAC1B,oBAAA,GAAG,KAAK;iBACX,CAAC;AAEF,gBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;AACzB,gBAAA,OAAO,KAAK,CAAC;aAChB;iBAED;AACI,gBAAA,IAAI,KAAK,YAAYC,gBAAQ;iBAC7B;oBACI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,EAChC;AACI,wBAAA,IAAI,KAAK,GAAiB;4BACtB,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,4BAAA,GAAG,KAAK;yBACX,CAAC;AACF,wBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACrB;iBACJ;;iBAED;AACI,oBAAA,IAAI,KAAK,GAAiB;wBACtB,MAAM,EAAE,KAAK,CAAC,MAAM;AACpB,wBAAA,GAAG,KAAK;qBACX,CAAC;AACF,oBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACrB;aACJ;SACJ;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AA3Ce,IAAA,UAAA,CAAA,aAAa,gBA2C5B,CAAA;AAED,IAAA,SAAgB,wBAAwB,CAAC,QAAsB,EAAE,mBAA0C,EAAA;QAEvG,IAAI,OAAO,GAA0B,EAAE,CAAC;AACxC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EACjD;YACI,IAAI,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AACjC,YAAA,IAAI,UAAU,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAExC,YAAA,IAAI,KAAK,YAAYD,cAAM,EAC3B;AACI,gBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC;AAChC,gBAAA,OAAO,OAAO,CAAC;aAClB;iBAED;AACI,gBAAA,IAAI,KAAK,YAAYC,gBAAQ;iBAC7B;oBACI,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,EAAE,EAChC;AACI,wBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;qBAC5B;iBACJ;;iBAED;AACI,oBAAA,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBAC5B;aACJ;SACJ;AACD,QAAA,OAAO,OAAO,CAAC;KAClB;AA9Be,IAAA,UAAA,CAAA,wBAAwB,2BA8BvC,CAAA;AAED,IAAA,SAAgB,YAAY,CAAC,EAAS,EAAE,IAAa,EAAA;AAEjD,QAAA,IAAI,IAAI,GAAG,EAAE,CAAC,kBAAkB,CAAC;QAEjC,IAAI,UAAU,GAAG,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC7C,IAAI,MAAM,GAAG,CAAC,CAAC,UAAU,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC;QAEhD,OAAO;AACH,YAAA,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK;YACf,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;YACtD,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;YAC5D,CAAC,aAAa,CAAC,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YAC5C,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAChD,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAChD,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YAChD,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC;AACxD,YAAA,YAAY,EAAE,UAAU,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE;AAClE,YAAA,eAAe,EAAE,UAAU,GAAG,UAAU,CAAC,eAAe,CAAC,QAAQ,EAAE,GAAG,EAAE;AACxE,YAAA,WAAW,EAAE,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,GAAG,EAAE;YAChE,MAAM;AACN,YAAA,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE;YAC7B,YAAY,EAAE,IAAI,CAAC,CAAC;YACpB,aAAa,EAAE,IAAI,CAAC,CAAC;YACrB,OAAO,EAAE,EAAE,CAAC,OAAO;SACtB,CAAC;KACL;AA1Be,IAAA,UAAA,CAAA,YAAY,eA0B3B,CAAA;IAED,SAAgB,oBAAoB,CAAC,EAA2B,EAAE,MAAM,GAAG,KAAK,EAAE,MAA+B,EAAA;QAE7G,IAAI,KAAK,GAAa,EAAE,CAAC;AACzB,QAAA,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM;AAAE,YAAA,OAAO,EAAE,CAAC;AAEnD,QAAA,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,EACxB;AACI,YAAA,IAAI,CAAC,YAAY,uBAAuB,EACxC;AACI,gBAAA,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,cAAc,CAAC,MAAM;AACnC,oBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aAC9F;iBAED;gBACI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,EACxB;AACI,oBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;iBAC7C;aACJ;SACJ;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AArBe,IAAA,UAAA,CAAA,oBAAoB,uBAqBnC,CAAA;IAED,SAAgB,0BAA0B,CAAC,EAAS,EAAA;AAEhD,QAAA,MAAM,YAAY,GAAG,CAAC,EAAe,KAA2B;YAE5D,IAAI,IAAI,GAA0B,EAAE,CAAC;AAErC,YAAA,KAAK,IAAI,CAAC,IAAI,EAAE,EAChB;gBACI,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC/B,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,YAAYD,cAAM,IAAI,EAAE,CAAC,MAAM,GAAG,uBAAuB,CAAC,aAAa,CAAC,gBAAgB,GAAG,IAAI;oBAC/H,SAAS;AACb,gBAAA,IAAI,uBAAuB,CAAC,aAAa,CAAC,aAAa;oBACnD,CAAC,CAAC,WAAW,GAAG,uBAAuB,CAAC,aAAa,CAAC,MAAM,CAAC;gBAEjE,IAAI,CAAC,IAAI,CAAC;AACN,oBAAA,OAAO,EAAE,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC;oBAClC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAC7D,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;oBAC1C,GAAG,EAAE,CAAC,CAAC,GAAG;oBACV,WAAW,EAAE,CAAC,CAAC,WAAW;AAC7B,iBAAA,CAAC,CAAC;aAEN;AACD,YAAA,OAAO,IAAI,CAAC;AAChB,SAAC,CAAC;AAEF,QAAA,IAAI,WAAW,GAAG,0BAA0B,CAAC,EAAE,CAAC,CAAC;AAEjD,QAAA,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE5E,IAAI,YAAY,GAAG,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAE1D,QAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;KACrC;AAjCe,IAAA,UAAA,CAAA,0BAA0B,6BAiCzC,CAAA;AAED;;;;AAIG;IACH,SAAgB,oBAAoB,CAAC,EAAS,EAAE,gBAAyB,EAAE,cAAc,GAAG,CAAC,EAAA;AAEzF,QAAA,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;AAC3C,QAAA,MAAM,IAAI,GAAG,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AAC3D,QAAA,MAAM,YAAY,GAAG,CAAC,EAAe,EAAE,MAAe,KAAqB;YAEvE,IAAI,IAAI,GAAoB,EAAE,CAAC;AAE/B,YAAA,KAAK,IAAI,CAAC,IAAI,EAAE,EAChB;gBACI,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC/B,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,YAAYA,cAAM,IAAI,EAAE,CAAC,MAAM,GAAG,uBAAuB,CAAC,aAAa,CAAC,gBAAgB,GAAG,IAAI;oBAC/H,SAAS;AACb,gBAAA,IAAI,uBAAuB,CAAC,aAAa,CAAC,aAAa;oBACnD,CAAC,CAAC,WAAW,GAAG,uBAAuB,CAAC,aAAa,CAAC,MAAM,CAAC;AACjE,gBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;AACzD,gBAAA,IAAI,CAAC,MAAM;AACP,oBAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;;AAGlD,gBAAA,IAAI,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAsB,KAAK,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9E,gBAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;oBAClB,IAAI,CAAC,IAAI,CAAC;wBACN,OAAO;wBACP,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC;wBAC1C,GAAG,EAAE,CAAC,CAAC,GAAG;wBACV,WAAW,EAAE,CAAC,CAAC,WAAW;AAC1B,wBAAA,MAAM,EAAE;AACJ,4BAAA,OAAO,EAAE,cAAc,CAAC,EAAE,EAAE,KAAK,CAAC;4BAClC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;4BAC7D,MAAM,EAAE,CAAC,CAAC,MAAM;4BAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ;4BACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ;AACvB,yBAAA;AACJ,qBAAA,CAAC,CAAC;qBAEP;AACI,oBAAA,OAAO,CAAC;AACJ,wBAAA,OAAO,EAAE,4CAA4C;AACrD,wBAAA,OAAO,EAAE,IAAI;wBACb,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,wBAAA,GAAG,EAAE,QAAQ;AAChB,qBAAA,CAAC,CAAC;iBACN;aACJ;AACD,YAAA,OAAO,IAAI,CAAC;AAChB,SAAC,CAAC;AAEF,QAAA,IAAI,WAAW,GAAG,0BAA0B,CAAC,EAAE,CAAC,CAAC;AAEjD,QAAA,IAAI,QAAQ,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAErH,IAAI,YAAY,GAAG,YAAY,CAAC,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAElG,QAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;KACrC;AAvDe,IAAA,UAAA,CAAA,oBAAoB,uBAuDnC,CAAA;;IAGD,SAAgB,YAAY,CAAC,EAAS,EAAA;QAElC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,kBAAkB,CAAC,YAAY,EAAE,EAAE,CAAC,kBAAkB,CAAC,WAAW,EAAE,EAAE,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;AACtJ,QAAA,MAAM,QAAQ,GAAG,uBAAuB,CAAC,aAAa,CAAC,+BAA+B,CAAC;QACvF,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC;QAE7D,IAAI,QAAQ,IAAI,QAAQ,IAAI,OAAO,IAAI,WAAW,KAAK,QAAQ,IAAI,OAAO,IAAI,WAAW,CAAC,EAC1F;YACI,QAAQ,GAAG,QAAQ,IAAI,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC5C,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACzC,WAAW,GAAG,WAAW,IAAI,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;YAErD,MAAM,YAAY,GAAG,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;YACpD,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;YAClD,MAAM,eAAe,GAAG,QAAQ,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AAE1D,YAAA,IAAI,YAAY,IAAI,WAAW,IAAI,eAAe,EAClD;gBACI,OAAO;oBACH,YAAY;oBACZ,WAAW;oBACX,eAAe;iBAClB,CAAC;aACL;SACJ;KACJ;AAzBe,IAAA,UAAA,CAAA,YAAY,eAyB3B,CAAA;;IAGD,SAAgB,4BAA4B,CAAC,EAAS,EAAA;AAElD,QAAA,IAAI,IAAI,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;AAC5B,QAAA,IAAI,IAAI;AACJ,YAAA,OAAO,IAAIC,gBAAQ,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AACzE,QAAA,OAAO,IAAI,CAAC;KACf;AANe,IAAA,UAAA,CAAA,4BAA4B,+BAM3C,CAAA;;AAGD,IAAA,SAAgB,iBAAiB,CAAC,EAAS,EAAE,gBAAyB,EAAE,aAAkC,EAAA;AAEtG,QAAA,IAAI,IAAI,GAAmB;AACvB,YAAA,cAAc,EAAE,EAAE;AAClB,YAAA,SAAS,EAAE,EAAE;SAChB,CAAC;AACF,QAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC;;;QAKzB,KAAK,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,SAAS,EAClC;AACI,YAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EACtB;AACI,gBAAA,KAAK,IAAI,GAAG,IAAI,IAAI,EACpB;AACI,oBAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO;wBACnB,SAAS;AACb,oBAAA,IAAI,CAAC,GAAG,GAAG,CAAC,MAAsB,CAAC;oBACnC,IAAI,CAAC,YAAY,WAAW;wBACxB,iBAAiB,CAAC,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;;wBAEhE,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;iBACnE;aACJ;SACJ;AAED,QAAA,IAAI,EAAE,CAAC,gBAAgB,EACvB;AACI,YAAA,KAAK,IAAI,GAAG,IAAI,EAAE,CAAC,gBAAgB,EACnC;gBACI,IAAI,GAAG,CAAC,OAAO;oBAAE,SAAS;AAC1B,gBAAA,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;gBACnB,IAAI,KAAK,GAAW,EAAE,CAAC;AACvB,gBAAA,IAAI,CAAC,YAAY,uBAAuB,EACxC;oBACI,KAAK,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,IAAI,CAAW,CAAC,CAAC;iBACpF;AACD,gBAAA,KAAK,IAAI,CAAC,IAAI,KAAK,EACnB;oBACI,IAAI,CAAC,YAAY,WAAW;AACxB,wBAAA,iBAAiB,CAAC,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;;wBAE5E,aAAa,CAAC,CAAiB,EAAE,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;iBACnF;aACJ;SACJ;AAED,QAAA,IAAI,SAAS,GAAG,EAAE,CAAC,aAAa,CAAC;AACjC,QAAA,KAAK,IAAI,GAAG,IAAI,EAAE,CAAC,UAAU,EAC7B;YACI,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO;gBAClC,SAAS;AACb,YAAA,IAAI,IAAI,GAAG,GAAG,CAAC,MAAsB,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC;gBAAE,SAAS;AAEpE,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAC/C,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAClD,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AACxD,YAAA,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YAEzD,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC;YACvG,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAEzD,IACI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI;mBAChD,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;AAErC,mBAAA,SAAS,CAAC,KAAK,CAAC,CAAC,IAAG;AAEnB,oBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS;AACtD,wBAAA,OAAO,IAAI,CAAC;;AAGhB,oBAAA,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;iBAC/C,CAAC,EAEN;AAEI,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;oBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;AACf,oBAAA,QAAQ,EAAE,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC;oBAClC,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,KAAK;oBACL,IAAI;AACJ,oBAAA,IAAI,EAAE,KAAK;AACd,iBAAA,CAAC,CAAC;aACN;SACJ;AAED,QAAA,KAAK,IAAI,CAAC,IAAI,SAAS,EACvB;YACI,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,YAAYD,cAAM,IAAI,EAAE,CAAC,MAAM,GAAG,uBAAuB,CAAC,aAAa,CAAC,gBAAgB,GAAG,IAAI,EACnI;AACI,gBAAA,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACrD,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CACpB;AACI,oBAAA,IAAI,EAAE,aAAa,CAAC,GAAG;AACvB,oBAAA,QAAQ,EAAE,MAAM;oBAChB,MAAM,EAAE,EAAE,CAAC,MAAM;oBACjB,KAAK,EAAE,CAAC,CAAC,SAAS;oBAClB,IAAI,EAAE,CAAC,CAAC,GAAa;AACrB,oBAAA,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC;AACzB,iBAAA,CACJ,CAAC;aACL;SACJ;AAED,QAAA,OAAO,IAAI,CAAC;KACf;AA/Ge,IAAA,UAAA,CAAA,iBAAiB,oBA+GhC,CAAA;;AAED,IAAA,SAAS,cAAc,CAAC,GAAY,EAAE,SAAiB,EAAA;QAEnD,GAAG,CAAC,CAAC,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC;KAC7B;IACD,SAAS,WAAW,CAAC,MAAe,EAAE,MAAc,EAAE,OAA4B,EAAE,KAAK,GAAG,KAAK,EAAA;QAE7F,IAAI,GAAG,GAAG,IAAIA,cAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;QAC9C,IAAI,KAAK,EACT;AACI,YAAA,OAAO,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SAClF;aAED;YACI,IAAI,uBAAuB,CAAC,cAAc;AACtC,gBAAA,OAAO,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;;AAE/E,gBAAA,OAAO,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;SACpF;KACJ;;IAED,SAAS,aAAa,CAAC,MAAoB,EAAE,EAAS,EAAE,gBAAyB,EAAE,IAAoB,EAAE,OAA4B,EAAA;AAEjI,QAAA,IAAI,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC;AACtB,QAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC;QACzB,IAAI,OAAO,GAAG,IAAInC,aAAO,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACnD,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;QAChC,IAAI,IAAmB,CAAC;QACxB,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,KAAc,CAAC;AACnB,QAAA,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;AAC1B,QAAA,IAAI,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,GAAG,IAAID,aAAO,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACtD,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAE9B,IAAI,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACnD,QAAA,IAAI,IAAI,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;AAEhE,QAAA,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,OAAO,EAC9E;YACI,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,EAC1D;gBACI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;uBACtE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;AAC1E,uBAAA,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;oBAAE,OAAO;AAE9E,gBAAA,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;;AAG/B,gBAAA,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;AACpB,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;gBAChB,IAAI,EAAE,GAAG,EAAE;oBAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAEjC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACzB,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;AACpC,gBAAA,IAAI,EAAE,GAAG,EAAE,GAAG,eAAe;AAAE,oBAAA,OAAO;AAEtC,gBAAA,IAAIU,QAAM,CAAC,EAAE,EAAE,CAAC,EAAE,eAAe,CAAC;AAAE,oBAAA,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;qBACzD,IAAIA,QAAM,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC;AAAE,oBAAA,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC;;AAC1E,oBAAA,OAAO;AAEZ,gBAAA,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;;gBAGhB,MAAM,GAAG,IAAI,CAAC;aACjB;SACJ;AACI,aAAA,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,GAAG,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI,EAChF;YACI,IAAI,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC;aAClE;AACI,gBAAA,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AACnB,gBAAA,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;oBAAE,OAAO;AAEjF,gBAAA,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClC,gBAAA,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACzG,IAAI,QAAQ,GAAG,IAAIwB,YAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAChC,gBAAA,IAAI,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjE,IAAI,CAAC,GAAG,EACR;AACI,oBAAA,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAK,EAAA,EAAA,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,kBAAkB,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC9H,OAAO;iBACV;AACD,gBAAA,QAAQ,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC/B,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EACtB;AACI,oBAAA,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EACxB;wBACI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAClB,MAAM;qBACT;iBACJ;gBACD,IAAI,CAAC,KAAK,EACV;AACI,oBAAA,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAK,EAAA,EAAA,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC/H,OAAO;iBACV;AAED,gBAAA,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;AACvB,gBAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChD,MAAM,GAAG,IAAI,CAAC;AACd,gBAAA,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBACnC,KAAK,GAAG,SAAS,CAAC;AAElB,gBAAA,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;AACvC,gBAAA,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;aACvC;iBACI,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI;aAC3C;AACI,gBAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAAE,OAAO;AACzD,gBAAA,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;;AAG/B,gBAAA,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;AACpB,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;gBAChB,IAAI,EAAE,GAAG,EAAE;oBAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;gBAEjC,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACzB,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;AACpC,gBAAA,IAAI,EAAE,GAAG,EAAE,GAAG,eAAe;AAAE,oBAAA,OAAO;AAEtC,gBAAA,IAAIxB,QAAM,CAAC,EAAE,EAAE,CAAC,EAAE,eAAe,CAAC;AAAE,oBAAA,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC;qBACzD,IAAIA,QAAM,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,eAAe,CAAC;AAAE,oBAAA,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC;;AAC1E,oBAAA,OAAO;AAEZ,gBAAA,KAAK,GAAG,EAAE,GAAG,EAAE,CAAC;;AAGhB,gBAAA,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;gBAC5B,MAAM,GAAG,IAAI,CAAC;aACjB;SACJ;aAED;YACI,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,EAC1D;gBACI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;uBACjF,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC;AACrF,uBAAA,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,eAAe,CAAC;AACpE,uBAAA,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;oBAAE,OAAO;AAEpF,gBAAA,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAC/B,gBAAA,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;gBAC5B,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,GAAG,aAAa,CAAC,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC;gBACrG,MAAM,GAAG,IAAI,CAAC;aACjB;SACJ;AACD,QAAA,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,YAAA,QAAQ;AACR,YAAA,KAAK;AACL,YAAA,MAAM,EAAE,MAAM,CAAC,MAAM;AACrB,YAAA,KAAK;AACL,YAAA,IAAI;YACJ,KAAK;AACL,YAAA,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC;AAC7B,SAAA,CAAC,CAAC;KACN;AAED;;;;;;AAME;AACF,IAAA,SAAS,iBAAiB,CAAC,CAAc,EAAE,EAAS,EAAE,gBAAyB,EAAE,IAAoB,EAAE,OAA4B,EAAE,aAAa,GAAG,KAAK,EAAE,kBAAkB,GAAG,KAAK,EAAA;QAElL,IAAI,CAAC,CAAC,CAAC,MAAM;YACT,OAAO;AAEX,QAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC;AACzB,QAAA,IAAI,GAAG,GAAG,CAAC,CAAC,YAAY,CAAC;AACzB,QAAA,IAAI,GAAG,YAAY0B,cAAM,EACzB;AACI,YAAA,IAAI,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACxC,YAAA,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,IAAIpC,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAC3E,YAAA,IAAI,CAAC,GAAG,IAAIA,aAAO,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;;YAEtD,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAIU,QAAM,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AAC1E,YAAA,MAAM,eAAe,GAAG,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;YAErI,IAAI,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,eAAe,CAAC;aAChD;AACI,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9B,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9B,gBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;;gBAGjD,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,CAAC;oBAAE,OAAO;AAEhF,gBAAA,IAAI,EAAE,EAAE,GAAG,eAAe,IAAI,EAAE,IAAI,EAAE,CAAC,SAAS,GAAG,eAAe,CAAC,CAAC;iBACpE;AACI,oBAAA,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAK,EAAA,EAAA,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,oBAAoB,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC3H,OAAO;iBACV;gBAED,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;iBAC3B;AACI,oBAAA,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAK,EAAA,EAAA,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,qBAAqB,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC5H,OAAO;iBACV;AAED,gBAAA,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;iBAC7C;AACI,oBAAA,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAK,EAAA,EAAA,EAAE,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,mBAAmB,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC1H,OAAO;iBACV;AAED,gBAAA,IAAI,KAAK,GAAG,EAAE,GAAG,eAAe,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC;gBAC1D,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AAC9B,gBAAA,IAAIA,QAAM,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;oBACtB,KAAK,GAAG,CAAC,CAAC;gBACd,IAAI,KAAK,GAAG,eAAe;AACvB,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;wBACrB,IAAI,EAAE,CAAC,CAAC,SAAS,GAAG,aAAa,CAAC,EAAE,IAAI,kBAAkB,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;AACxF,wBAAA,QAAQ,EAAE,EAAE,GAAG,eAAe,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC;wBACzD,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,KAAK;AACL,wBAAA,IAAI,EAAE,EAAE,GAAG,eAAe,GAAG,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,KAAK;AACrE,wBAAA,KAAK,EAAE,KAAK;AACZ,wBAAA,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;AACxB,qBAAA,CAAC,CAAC;aACV;;aAED;AACI,gBAAA,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;AAChB,gBAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7D,gBAAA,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAE7D,gBAAA,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM;uBACf,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,GAAG,GAAG,CAAC,MAAM;AAChC,uBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,kBAAkB,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;AAC/F,uBAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,kBAAkB,GAAG,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;kBAEvG;AACI,oBAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACX,oBAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACX,IAAI,IAAI,GAAG,IAAIwB,YAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5B,oBAAA,IAAI,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3C,IAAI,CAAC,EAAE,EACP;wBACI,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAK,EAAA,EAAA,EAAE,CAAC,IAAI,CAAA,CAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,kBAAkB,GAAG,IAAI,GAAG,IAAI,cAAc,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;wBACzJ,OAAO;qBACV;oBACD,IAAI,QAAQ,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACrC,oBAAA,IAAI,KAAc,CAAC;AACnB,oBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;AACnD,oBAAA,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,EAC9C;AACI,wBAAA,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EACjD;AACI,4BAAA,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BACrB,MAAM;yBACT;qBACJ;AACD,oBAAA,IAAI,CAAC,KAAK;wBACN,OAAO;oBACX,IAAI,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAEvC,oBAAA,IAAIxB,QAAM,CAAC,KAAK,EAAE,CAAC,EAAE,eAAe,CAAC;wBACjC,OAAO;AAEX,oBAAA,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;AACvC,oBAAA,cAAc,CAAC,KAAK,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;AAEpC,oBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;wBAChB,IAAI,EAAE,aAAa,CAAC,GAAG;wBACvB,KAAK;wBACL,QAAQ;wBACR,MAAM,EAAE,GAAG,CAAC,MAAM;wBAClB,KAAK;wBACL,IAAI;AACJ,wBAAA,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;AACxB,qBAAA,CAAC,CAAC;iBACN;aACJ;SACJ;KACJ;IAED,SAAS,cAAc,CAAC,EAAS,EAAA;AAE7B,QAAA,IAAI,IAAI,GAAG,EAAE,CAAC,gBAAgB,CAAC;AAC/B,QAAA,IAAI,UAAU,GAAG;AACb,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,IAAI,EAAE,CAAC;SACV,CAAC;AACF,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,EACnB;AACI,YAAA,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO;gBAAE,SAAS;AAEhC,YAAA,IAAI,MAAM,GAAG,EAAE,CAAC,MAAiC,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,cAAc;gBACtB,SAAS;YACb,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,KAAK,WAAW,CAAC,MAAM,EACrD;gBACI,UAAU,CAAC,MAAM,EAAE,CAAC;aACvB;iBAED;gBACI,UAAU,CAAC,IAAI,EAAE,CAAC;aACrB;SACJ;AACD,QAAA,OAAO,UAAU,CAAC;KACrB;IAED,SAAgB,wBAAwB,CAAC,EAA2B,EAAA;AAEhE,QAAA,MAAM,QAAQ,GAAG,uBAAuB,CAAC,aAAa,CAAC,oCAAoC,CAAC;QAC5F,IAAI,IAAI,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAIV,aAAO,CAAC,CAAC;QACpD,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,cAAc,EAAyB,CAAC;AAC3D,QAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACjF,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC;AACrE,QAAA,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AAChF,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AAClF,QAAA,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACtF,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AAClF,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,CAAC;AAEzF,QAAA,IAAI,SAAS,GAAG;AACZ,YAAA,YAAY,EAAE,IAAI;YAClB,QAAQ,EAAE,EAAE,CAAC,QAAQ;AACrB,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,IAAI,EAAE,IAAI;SACb,CAAC;AACF,QAAA,IAAI,EAAE,YAAY,uBAAuB,KAAK,EAAE,CAAC,cAAc,CAAC,QAAQ,IAAI,EAAE,CAAC,cAAc,CAAC,aAAa,CAAC,EAC5G;YACI,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,YAAY,uBAAuB,IAAI,CAAC,YAAY,eAAe,CAAC,CAAC;AAC9F,gBAAA,OAAO,SAAS,CAAC;AACrB,YAAA,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,EACxB;AACI,gBAAA,IAAI,CAAC,YAAY,uBAAuB,EACxC;AACI,oBAAA,IAAI,CAAC,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC;AACpC,oBAAA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBAC9B;AACI,qBAAA,IAAI,CAAC,YAAY,eAAe,EACrC;oBACI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;iBACzD;aACJ;SACJ;AAED,QAAA,OAAO,SAAS,CAAC;KACpB;AAtCe,IAAA,UAAA,CAAA,wBAAwB,2BAsCvC,CAAA;IAED,SAAgB,sBAAsB,CAAC,EAAmB,EAAA;QAEtD,IAAI,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,cAAc,EAAoB,CAAC;QACtD,IAAI,KAAK,GAA0B,EAAE,CAAC;AACtC,QAAA,IAAI,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;AACpC,QAAA,IAAI,MAAM,GAAG,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC;AACtC,QAAA,IAAI,GAAG,GAAG,EAAE,CAAC,aAAa,CAAC;QAC3B,IAAI,IAAI,GAAG,EAAE,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAIA,aAAO,CAAC,CAAC;AACpD,QAAA,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;AACI,YAAA,IAAI,GAAG,GAAG,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AACjD,YAAA,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAChB;AACI,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;aAClC;iBAED;AACI,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;aACnB;SACJ;QACD,KAAK,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,GAAG,EAC5B;AACI,YAAA,IAAI,WAAW,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxE,YAAA,IAAI,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAChD,YAAA,IAAI,MAAM,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACjD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;gBACI,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC;gBACjC,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;AACrF,gBAAA,CAAC,CAAC,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC;AAC/D,gBAAA,MAAM,QAAQ,GAAG,uBAAuB,CAAC,aAAa,CAAC,oCAAoC,CAAC;gBAC5F,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;gBACjF,KAAK,CAAC,IAAI,CAAC;AACP,oBAAA,YAAY,EAAE,CAAC;oBACf,QAAQ,EAAE,EAAE,CAAC,QAAQ;AACrB,oBAAA,MAAM,EAAE,WAAW;AACnB,oBAAA,QAAQ,EAAE,EAAE;oBACZ,IAAI;AACP,iBAAA,CAAC,CAAC;aACN;SACJ;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AA1Ce,IAAA,UAAA,CAAA,sBAAsB,yBA0CrC,CAAA;;IAGD,SAAgB,kBAAkB,CAAC,GAA8B,EAAA;AAE7D,QAAA,OAAO,sBAAsB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KAC/C;AAHe,IAAA,UAAA,CAAA,kBAAkB,qBAGjC,CAAA;IAED,SAAgB,UAAU,CAAC,MAAe,EAAA;AAEtC,QAAA,IAAI,KAAK,GAAyB,IAAI,GAAG,EAAE,CAAC;;AAE5C,QAAA,KAAK,IAAI,CAAC,IAAI,MAAM,EACpB;YACI,IAAI,CAAC,GAAG,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,kBAAkB,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;AAC7G,YAAA,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBACZ,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;gBAErB,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;SACzB;AAED,QAAA,IAAI,QAAQ,GAAwB,IAAI,GAAG,EAAE,CAAC;QAE9C,KAAK,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,EAC1B;YACI,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;AAChC,YAAA,IAAI,GAAG,GAAG,IAAIK,UAAI,EAAE,CAAC;AACrB,YAAA,IAAI,IAAI,GAAG,IAAIL,aAAO,EAAE,CAAC;AACzB,YAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EACjB;AACI,gBAAA,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBACtB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;aAC5C;AACD,YAAA,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACrB;AACD,QAAA,OAAO,QAAQ,CAAC;KACnB;AA5Be,IAAA,UAAA,CAAA,UAAU,aA4BzB,CAAA;AACD,IAAA,SAAgB,aAAa,CAAC,IAAkB,EAAE,OAAO,GAAG,IAAI,EAAA;QAE5D,IAAI,EAAE,GAAG,IAAIqC,gBAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,IAAIvB,aAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAClG,QAAA,IAAI,OAAO;AACP,YAAA,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC;AACxB,QAAA,OAAO,EAAE,CAAC;KACb;AANe,IAAA,UAAA,CAAA,aAAa,gBAM5B,CAAA;AAED,IAAA,SAAgB,YAAY,CAAC,EAAS,EAAE,MAAe,EAAA;QAEnD,IAAI,GAAG,GAAkB,EAAE,CAAC;AAC5B,QAAA,IAAI,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;AAC/C,QAAA,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,EAC3B;AACI,YAAA,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAa,CAAC;YACxD,GAAG,CAAC,IAAI,CAAC;AACL,gBAAA,IAAI,EAAE,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC;gBACjC,GAAG,EAAE,CAAC,CAAC,GAAG;AACV,gBAAA,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;AAC5C,aAAA,CAAC,CAAC;SACN;AACD,QAAA,OAAO,GAAG,CAAC;KACd;AAde,IAAA,UAAA,CAAA,YAAY,eAc3B,CAAA;AAED,IAAA,SAAgB,YAAY,CAAC,EAAS,EAAE,MAAe,EAAA;QAEnD,IAAI,GAAG,GAAkB,EAAE,CAAC;AAC5B,QAAA,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,EAC3B;AACI,YAAA,IAAI,CAAC,GAAgB;gBACjB,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;AAC3B,gBAAA,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE;gBACrB,GAAG,EAAE,CAAC,CAAC,GAAG;aACb,CAAC;AACF,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAC1C;gBACI,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvB,IAAIJ,QAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EACrB;oBACI,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACtB,oBAAA,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;AAChC,oBAAA,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACd,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACnB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACvB;qBAED;AACI,oBAAA,IAAI,GAAG,GAAG,IAAIyB,WAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;oBAC/F,IAAI,CAAC,GAAG,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AACtC,oBAAA,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;AACpD,oBAAA,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC1B,oBAAA,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;iBAC/B;gBACD,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAC3B;oBACI,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;AACtB,oBAAA,cAAc,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;AAChC,oBAAA,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACd,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACnB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACvB;aACJ;AACD,YAAA,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACf;AACD,QAAA,OAAO,GAAG,CAAC;KACd;AA1Ce,IAAA,UAAA,CAAA,YAAY,eA0C3B,CAAA;AAED,IAAA,SAAgB,qBAAqB,CAAC,IAAyB,EAAE,cAAc,GAAG,CAAC,EAAA;AAE/E,QAAA,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;AACpG,QAAA,IAAI,SAAS,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC;AAC5C,QAAA,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;AAC3C,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACnE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAEtC,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAC/B,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,EACnD;YACI,KAAK;YACL,SAAS;AACT,YAAA,GAAG,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ;SAC/C,EACD,cAAc,CAAC,CAAC;AAEpB,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAsB,KAAK,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;KAC1E;AAnBe,IAAA,UAAA,CAAA,qBAAqB,wBAmBpC,CAAA;IACD,SAAgB,YAAY,CAAC,GAAW,EAAA;AAEpC,QAAA,IAAI,KAAK,GAAG,GAAG,CAAC,OAAO,EAAE,MAAqB,CAAC;QAC/C,IAAI,CAAC,KAAK,IAAI,EAAE,KAAK,YAAY,WAAW,CAAC;AAAE,YAAA,OAAO,WAAW,CAAC;QAClE,OAAO,KAAK,CAAC,IAAI,CAAC;KACrB;AALe,IAAA,UAAA,CAAA,YAAY,eAK3B,CAAA;AACL,CAAC,EAh8BgBsB,kBAAU,KAAVA,kBAAU,GAg8B1B,EAAA,CAAA,CAAA;;ACxlCD;;;AAGG;AACG,SAAU,gBAAgB,CAAC,MAAe,EAAA;AAE5C,IAAA,IAAI,MAAM,GAAG,IAAIpD,UAAI,CAAC;IAGtB,IAAI,EAAE,GAAG,IAAIqD,4BAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAErC,IAAA,KAAK,IAAI,CAAC,IAAI,MAAM,EACpB;AACI,QAAA,IAAI,GAAG,GAAG,CAAC,CAAC,WAAW,CAAC;AAExB,QAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAElB,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;KACtD;IAED,EAAE,CAAC,MAAM,EAAE,CAAC;AAEZ,IAAA,IAAI,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAChG,IAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjG,IAAA,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/F,IAAA,IAAI,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAElG,IAAA,MAAM,kBAAkB,GAAG,CAAC,GAAa,EAAE,MAAe,KAAI;AAE1D,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAAE,YAAA,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;AAEpC,QAAA,IAAI,SAAS,GAAG,CAAC,QAAQ,CAAC;AAC1B,QAAA,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;AACnB,QAAA,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;AACI,YAAA,IAAI,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AACnB,YAAA,IAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,CAAC;AACnD,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACvC,YAAA,IAAI,MAAM,GAAG,SAAS,EACtB;gBACI,SAAS,GAAG,EAAE,CAAC;gBACf,SAAS,GAAG,MAAM,CAAC;aACtB;SACJ;AACD,QAAA,OAAO,SAAS,CAAC;AACrB,KAAC,CAAC;IAEF,IAAI,IAAI,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC9C,IAAI,KAAK,GAAG,kBAAkB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChD,IAAI,GAAG,GAAG,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5C,IAAI,MAAM,GAAG,kBAAkB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAElD,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AACtC;;AClCA;;;;;AAKG;AACG,SAAU,2BAA2B,CAAC,aAAsB,EAAA;IAE9D,IAAI,WAAW,GAAgB,EAAE,CAAC;AAClC,IAAA,IAAI,MAAM,GAAmB,IAAI,OAAO,EAAE,CAAC;;IAG3C,MAAM,SAAS,GAAG,CAAC,SAAgB,EAAE,QAAe,EAAE,WAAoB,EAAE,MAAe,KAAI;AAE3F,QAAA,MAAM,SAAS,GAAG,QAAQ,YAAYxB,YAAI,CAAC;AAC3C,QAAA,MAAM,UAAU,GAAG,SAAS,YAAYA,YAAI,CAAC;AAE7C,QAAA,IAAI,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;AACrB,YAAA,OAAO,KAAK,CAAC;AAEjB,QAAA,IAAI,SAAS,KAAK,UAAU;SAC5B;YACI,IAAI,SAAS,EACb;gBACI,IAAI,MAAM,EACV;oBACI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC5F,wBAAA,OAAO,KAAK,CAAC;iBACpB;qBAED;oBACI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC5F,wBAAA,OAAO,KAAK,CAAC;iBACpB;aACJ;YAED,IAAI,UAAU,EACd;gBACI,IAAI,MAAM,EACV;oBACI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC5F,wBAAA,OAAO,KAAK,CAAC;iBACpB;qBAED;oBACI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC5F,wBAAA,OAAO,KAAK,CAAC;iBACpB;aACJ;SACJ;aACI,IAAI,UAAU;SACnB;;YAEI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC5F,gBAAA,OAAO,KAAK,CAAC;YAEjB,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;AACtD,YAAA,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AACvD,gBAAA,OAAO,KAAK,CAAC;SACpB;;AAGD,QAAA,IAAI,MAAM;AACN,YAAA,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;AAE5B,YAAA,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAEnC,QAAA,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC;AAChB,KAAC,CAAC;IAEF,IAAI,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAACxB,QAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;AAE9D,IAAA,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EACzB;AACI,QAAA,IAAI,QAAQ,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;AAC/B,QAAA,IAAI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACpB,SAAS;AAEb,QAAA,IAAI,WAAW,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC7B,QAAA,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;;AAErB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EACvC;AACI,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC;gBACnD,MAAM;AACV,YAAA,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;SACzB;;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,GAAG,CAAC,EAC/C;AACI,YAAA,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;;AAE1B,YAAA,KAAK,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAC5C;AACI,gBAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC;oBACpD,MAAM;AACV,gBAAA,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;aACzB;SACJ;AACD,QAAA,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACjC;AAED,IAAA,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;;AAEzB,IAAA,KAAK,IAAI,CAAC,IAAI,WAAW,EACzB;AACI,QAAA,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;YACd,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAE7B;AACI,YAAA,IAAI,EAAE,GAAG,IAAI2B,gBAAQ,EAAE,CAAC;YACxB,KAAK,IAAI,CAAC,IAAI,CAAC;AACX,gBAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACf,YAAA,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAC1B;KACJ;AAED,IAAA,OAAO,WAAW,CAAC;AACvB,CAAC;AAGD;AACgB,SAAA,gBAAgB,CAAC,EAAS,EAAE,OAAgB,EAAA;AAExD,IAAA,IAAI,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,YAAY,CAAC;AAC9C,WAAA,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,WAAW,CAAC;WAChD,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,eAAe,CAAC,EAE3D;QACI,OAAO;YACH,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;YACtD,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAAC,EAAE;YACvD,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE;YACpD,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;SACzD,CAAC;KACL;IAED,IAAI,SAAS,GAAsB,EAAE,CAAC;AACtC,IAAA,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,kBAAkB,CAAC,UAAU;AAC1C,QAAA,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI;YACd,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;;AAGjC,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,cAAc,EAC7D;AACI,QAAA,IAAI,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3E,QAAA,IAAI,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvE,QAAA,IAAI,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3E,QAAA,IAAI,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;AAE7E,QAAA,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AACrB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC3C,QAAA,KAAK,IAAI,CAAC,IAAI,OAAO,EACrB;AACI,YAAA,IAAI,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAElD,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EACvC;AACI,gBAAA,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;oBACV,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;;oBAEnC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;aACxC;iBAED;AACI,gBAAA,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;oBACV,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;;oBAEpC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;aAC1C;SACJ;KACJ;AAED,IAAA,OAAO,SAAS,CAAC;AACrB,CAAC;AAEe,SAAA,sBAAsB,CAAC,EAAS,EAAE,OAAgB,EAAA;AAE9D,IAAA,MAAM,GAAG,GAAG,EAAE,CAAC,kBAAkB,CAAC;;AAGlC,IAAA,IAAI,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC;AAC5B,WAAA,GAAG,CAAC,aAAa,CAAC,WAAW,CAAC;AAC9B,WAAA,GAAG,CAAC,aAAa,CAAC,eAAe,CAAC,EAEzC;QACI,OAAO;AACH,YAAA,EAAE,WAAW,EAAE,GAAG,CAAC,cAAc,EAAE;AACnC,YAAA,EAAE,WAAW,EAAE,GAAG,CAAC,eAAe,EAAE;AACpC,YAAA,EAAE,WAAW,EAAE,GAAG,CAAC,YAAY,EAAE;AACjC,YAAA,EAAE,WAAW,EAAE,GAAG,CAAC,cAAc,EAAE;SACtC,CAAC;KACL;IAED,MAAM,mBAAmB,GAA0B,EAAE,CAAC;AACtD,IAAA,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,mBAAmB;AACnC,QAAA,IAAI,CAAC,CAAC,WAAW,IAAI,IAAI;YACrB,mBAAmB,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;;AAG3C,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,mBAAmB,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,cAAc,EACvE;AACI,QAAA,MAAM,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC;AAC1C,QAAA,MAAM,eAAe,GAAG,GAAG,CAAC,eAAe,CAAC;AAC5C,QAAA,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;AACtC,QAAA,MAAM,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC;AAE1C,QAAA,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC7C,QAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EACvB;AACI,YAAA,MAAM,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;AAEpD,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EACvC;AACI,gBAAA,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;oBACV,mBAAmB,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,CAAC;;oBAE1D,mBAAmB,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;aAC/D;iBAED;AACI,gBAAA,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;oBACV,mBAAmB,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC,CAAC;;oBAE3D,mBAAmB,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,CAAC;aACjE;SACJ;KACJ;AAED,IAAA,OAAO,mBAAmB,CAAC;AAC/B,CAAC;AAED;AACgB,SAAA,wBAAwB,CAAC,KAAY,EAAE,KAAY,EAAA;AAE/D,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,KAAK,CAAC;AACzB,IAAA,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ;AAAE,QAAA,OAAO,KAAK,CAAC;IACpD,IAAI,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC/C,IAAA,IAAI,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,CAAC;IACrE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;AAC7B,IAAA,IAAI,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,CAAC;AAC/D,IAAA,OAAO,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC;AAED;;;;AAIK;SACW,qBAAqB,CAAC,EAAS,EAAE,YAAY,GAAG,KAAK,EAAA;IAEjE,IAAI,SAAS,GAAwBoB,kBAAU,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;AACjF,IAAA,IAAI,SAAS;AACT,QAAA,OAAO,SAAS,CAAC,OAAO,EAAE,CAAC;AAE/B,IAAA,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC;IAC5B,IAAI,SAAS,YAAYrB,cAAM;AAC3B,QAAA,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IAE/B,IAAI,YAAY,EAChB;QACI,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACrC,QAAA,IAAI,aAAa,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAa,CAAC;AACvE,QAAA,IAAI,wBAAwB,CAAC,SAAS,EAAE,aAAa,CAAC;YAClD,SAAS,GAAG,aAAa,CAAC;KACjC;;AAGD,IAAA,IAAI,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC;IACjC,cAAc,CAAC,MAAM,CAAC,CAAC;AAEvB,IAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,YAAYA,cAAM;AAClD,QAAA,OAAO,MAAM,CAAC;AAElB,IAAA,IAAI,EAAE,CAAC,cAAc;AACjB,QAAA,2BAA2B,CAAC,MAAM,CAAC,CAAC;AAExC,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC;AAYD,MAAM,eAAgB,SAAQ,cAAc,CAAA;IAE/B,aAAa,GAAA;AAElB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,QAAA,OAAO,IAAI,CAAC;KACf;AACkB,IAAA,eAAe,MAAY;AAE3B,IAAA,wBAAwB,MAAY;IAEnC,mBAAmB,GAAA;QAEnC,KAAK,CAAC,mBAAmB,EAAE,CAAC;AAC5B,QAAA,aAAa,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;KAC3E;AAED,IAAA,aAAa,CAAC,EAAW,EAAA;QAErB,IAAI,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;QACtC,OAAO,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,IAAI,CAAC,eAAe,CAAC;KACpD;AACJ,CAAA;AAGD;;;;AAIE;AACI,SAAU,eAAe,CAAC,EAAS,EAAA;IAErC,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE;QACnC,OAAO;AAEX,IAAA,IAAI,MAAM,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAEvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,YAAYA,cAAM;AAClD,QAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAErB,IAAI,QAAQ,GAAY,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,IAAI,MAAM;QAChB,IAAI,CAAC,YAAYC,gBAAQ;YACrB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;;AAE9B,YAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzB,IAAA,IAAI,SAAS,GAAGA,gBAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAC5D,IAAA,OAAO,SAAS,CAAC;AACrB,CAAC;AAGD;;;AAGG;AACG,SAAU,qBAAqB,CAAC,EAAS,EAAA;IAE3C,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE;QACnC,OAAO;AAEX,IAAA,IAAI,MAAM,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAC;IACvC,IAAI,SAAS,GAAG,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAE7C,IAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,YAAYD,cAAM,EACtD;AACI,QAAA,IAAI,GAAG,GAAiB;AACpB,YAAA,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;AACpB,YAAA,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAW;AACzE,YAAA,QAAQ,EAAE,MAAM;YAChB,SAAS;SACZ,CAAC;AACF,QAAA,OAAO,GAAG,CAAC;KACd;IAED,IAAI,QAAQ,GAAY,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,IAAI,MAAM;QAChB,IAAI,CAAC,YAAYC,gBAAQ;YACrB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;;AAE9B,YAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACzB,IAAA,IAAI,SAAS,GAAGA,gBAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAE5D,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAErC,IAAA,IAAI,cAA0B,CAAC;IAM/B;;AAEI,QAAA,IAAI,cAAc,GAAG,IAAI,eAAe,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpG,IAAI,QAAQ,GAAG,CAAC,CAAC;AACjB,QAAA,cAAc,CAAC,mBAAmB,GAAG,EAAE,CAAC;AACxC,QAAA,cAAc,CAAC,gBAAgB,GAAG,EAAE,CAAC;AACrC,QAAA,cAAc,CAAC,kBAAkB,GAAG,EAAE,CAAC;AACvC,QAAA,cAAc,CAAC,UAAU,GAAG,EAAE,CAAC;AAC/B,QAAA,cAAc,CAAC,QAAQ,GAAG,EAAE,CAAC;AAC7B,QAAA,cAAc,CAAC,SAAS,GAAG,YAAY,CAAC;AACxC,QAAA,cAAc,CAAC,QAAQ,GAAG,IAAI,CAAC;AAE/B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EACtC;YACI,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAExB,YAAA,IAAI,OAAO,GAAG,SAAS,CAACxB,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAEjD,YAAA,IAAI,KAAK,YAAYwB,gBAAQ,EAC7B;AACI,gBAAA,IAAI,UAAU,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;AAE/D,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAC1C;AACI,oBAAA,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;oBAEtB,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;AAGlC,oBAAA,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC;AAC9C,wBAAA,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAID,cAAM,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;AAElE,wBAAA,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;AAG5C,oBAAA,IAAI,OAAO,GAAG,CAAC,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,oBAAA,IAAI,OAAO;AACP,wBAAA,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC;AACnC,4BAAA,KAAK,EAAE,QAAQ;AACf,4BAAA,KAAK,EAAE,OAAO;4BACd,IAAI,EAAE,IAAI,CAAC,IAAI;AAClB,yBAAA,CAAC,CAAC;;AAEH,wBAAA,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,IAAIF,YAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAEhH,oBAAA,QAAQ,EAAE,CAAC;iBACd;aACJ;iBAED;AACI,gBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI;oBAAE,SAAS;gBAElC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;gBAGtC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;AACvC,oBAAA,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAIE,cAAM,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;;AAEtE,oBAAA,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;;AAG5C,gBAAA,IAAI,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACzD,gBAAA,IAAI,OAAO;AACP,oBAAA,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC;AACnC,wBAAA,KAAK,EAAE,QAAQ;AACf,wBAAA,KAAK,EAAE,OAAO;wBACd,IAAI,EAAE,IAAI,CAAC,IAAI;AAClB,qBAAA,CAAC,CAAC;;AAEH,oBAAA,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,KAAK,EAAE,IAAIF,YAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAE5H,gBAAA,QAAQ,EAAE,CAAC;aACd;SACJ;AAED,QAAA,cAAc,CAAC,QAAQ,GAAG,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC;AAE3E,QAAA,cAAc,GAAG,cAAc,CAAC,EAAE,EAAE,CAAC;KACxC;;AAGD,IAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAC7B;AACI,QAAA,OAAO,CAAC;AACJ,YAAA,OAAO,EAAE,CAA8B,4BAAA,CAAA;AACvC,YAAA,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,MAAM,CAAC,OAAO;AACtB,YAAA,GAAG,EAAE,WAAW;AACnB,SAAA,CAAC,CAAC;AAEH,QAAA,cAAc,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,CAAK,EAAA,EAAA,EAAE,CAAC,IAAI,CAAA,CAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,eAAe,cAAc,CAAC,MAAM,CAAA,QAAA,CAAU,EAAE,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AAElJ,QAAA,IAAI,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5C,QAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;AAC/C,QAAA,cAAc,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC/C;;AAGD,IAAA,IAAI,aAAa,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AACtC,IAAA,IAAI,aAAa,IAAI,CAAC,aAAa,CAAC,OAAO,EAC3C;QACI,IAAI,aAAa,CAAC,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,GAAG;AACjE,YAAA,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC;;YAE/B,aAAa,GAAG,cAAc,CAAC,CAAC,aAAa,CAAC,CAAC,EAAE,KAAiB,CAAC;KAC1E;AAED,IAAA,IAAI,CAAC,aAAa;QACd,OAAO;;AAGX,IAAA,IAAI,aAAa,IAAI,aAAa,CAAC,KAAK,GAAG,CAAC;QACxC,aAAa,CAAC,OAAO,EAAE,CAAC;AAE5B,IAAA,IAAI,GAAG,GAAiB;QACpB,SAAS;QACT,aAAa;AACb,QAAA,QAAQ,EAAE,MAAM;QAChB,SAAS;KACZ,CAAC;AAEF,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AA4BD;;;;;;AAMG;AACG,SAAU,gCAAgC,CAAC,EAAS,EAAE,SAA4B,EAAE,UAAoB,EAAE,cAAoC,EAAA;AAEhJ,IAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAC/D,IAAA,UAAU,GAAG,UAAU,IAAI,qBAAqB,CAAC,EAAE,CAAC,CAAC;;;;;;;IASrD,IAAI,EAAE,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EACxC;AACI,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC1B;AACI,YAAA,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YACtD,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EACnC;AACI,gBAAA,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;AAChB,oBAAA,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;;AAE/E,oBAAA,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;aACpF;iBAED;AACI,gBAAA,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;AAChB,oBAAA,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;;AAEhF,oBAAA,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;aACtF;SACJ;KACJ;SAED;AACI,QAAA,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;AAC9D,QAAA,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClF,QAAA,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AACpF,QAAA,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC/E,QAAA,EAAE,CAAC,kBAAkB,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;KACvF;AACL,CAAC;AAEK,SAAU,sBAAsB,CAAC,EAAS,EAAE,WAAkC,EAAE,UAAoB,EAAE,cAAoC,EAAA;AAE5I,IAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAC/D,IAAA,UAAU,GAAG,UAAU,IAAI,qBAAqB,CAAC,EAAE,CAAC,CAAC;AAErD,IAAA,MAAM,GAAG,GAAG,EAAE,CAAC,kBAAkB,CAAC;IAClC,IAAI,EAAE,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EACxC;AACI,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC1B;AACI,YAAA,IAAI,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YACtD,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EACnC;AACI,gBAAA,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;oBAChB,GAAG,CAAC,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;;oBAEhD,GAAG,CAAC,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;aACrD;iBAED;AACI,gBAAA,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;oBAChB,GAAG,CAAC,eAAe,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;;oBAEjD,GAAG,CAAC,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;aACvD;SACJ;KACJ;SAED;AACI,QAAA,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QAC9D,GAAG,CAAC,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;QACnD,GAAG,CAAC,eAAe,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC;QACrD,GAAG,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;QAChD,GAAG,CAAC,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC;KACxD;AACL;;;AC3lBA;AACA,SAAS,cAAc,CAAC,IAAY,EAAA;AAEhC,IAAA,OAAO,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,uBAAuB,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrF,CAAC;AA4CD;;AAEG;AAEI,IAAM,KAAK,GAAA,OAAA,GAAX,MAAM,KAAM,SAAQ,YAAY,CAAA;AAiCnC,IAAA,WAAA,GAAA;AAEI,QAAA,KAAK,EAAE,CAAC;QAjCF,IAAiB,CAAA,iBAAA,GAAG,IAAI,CAAC;QACzB,IAAsB,CAAA,sBAAA,GAAG,IAAI,CAAC;QAC9B,IAAwB,CAAA,wBAAA,GAAG,IAAI,CAAC;AAElC,QAAA,IAAA,CAAA,SAAS,GAAG;AAChB,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,CAAC,EAAE,CAAC;SACP,CAAC;QAEM,IAAK,CAAA,KAAA,GAAG,EAAE,CAAC;;AAGX,QAAA,IAAA,CAAA,UAAU,GAAgC,IAAI,GAAG,EAAE,CAAC;QACpD,IAAW,CAAA,WAAA,GAAe,EAAE,CAAC;QACzB,IAAgB,CAAA,gBAAA,GAAe,EAAE,CAAC;AACtC,QAAA,IAAA,CAAA,QAAQ,GAAiB,YAAY,CAAC,IAAI,CAAC;QACvC,IAAc,CAAA,cAAA,GAAe,EAAE,CAAC;QACpC,IAAU,CAAA,UAAA,GAAY,IAAI,CAAC;QAC3B,IAAe,CAAA,eAAA,GAAkB,EAAE,CAAC;QACpC,IAAe,CAAA,eAAA,GAAkB,EAAE,CAAC;AACpC,QAAA,IAAA,CAAA,aAAa,GAAW,IAAI,CAAC;AAC7B,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC;AACnB,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,GAAG,EAAY,CAAC;;QAGzC,IAAY,CAAA,YAAA,GAAY,IAAI,CAAC;;AAGhC,QAAA,IAAA,CAAA,iBAAiB,GAA0B,IAAI,GAAG,EAAE,CAAC;AA8uCrD,QAAA,IAAA,CAAA,iBAAiB,GAAU,IAAI,CAAC;QAChC,IAAe,CAAA,eAAA,GAAG,KAAK,CAAC;;AAoLhC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,GAAG,EAA0C,CAAC;QA95ChE,IAAI,CAAC,aAAa,EAAE,CAAC;KACxB;AAED;;AAEG;IACK,WAAW,GAAA;AAEf,QAAA,OAAO,IAAI,KAAK,CAAC,EAAE,EAAE;YACjB,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,KAAI;gBAElC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,KAAK;oBAC5C,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAChC,gBAAA,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;aACpD;AACJ,SAAA,CAAC,CAAC;KACN;IAEO,aAAa,GAAA;AAEjB,QAAA,IAAI,WAAW,GACf;AACI,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,SAAS,CAAC,QAAQ;YACzB,UAAU,EAAE,aAAa,CAAC,KAAK;YAC/B,aAAa,EAAE,aAAa,CAAC,SAAS;AACtC,YAAA,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE;AAC9B,YAAA,QAAQ,EAAE,GAAG;AACb,YAAA,UAAU,EAAE,GAAG;AACf,YAAA,UAAU,EAAE,GAAG;AACf,YAAA,WAAW,EAAE,GAAG;AAChB,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,WAAW,EAAE,EAAE;AACf,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE;AAC7B,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,SAAS,EAAE,IAAI;AACf,YAAA,SAAS,EAAE,EAAE;AACb,YAAA,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE;AAC3B,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,cAAc,EAAE,EAAE;AAClB,YAAA,cAAc,EAAE,EAAE;AAClB,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,mBAAmB,EAAE,IAAI,CAAC,WAAW,EAAE;SAC1C,CAAC;AAEF,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,KAAK,CAAC,WAAW,EAAE;AAC9C,YAAA,GAAG,EAAE,UAAU,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAA;gBAEhC,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;aAC7C;YACD,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;AAC5B,oBAAA,IAAI,GAAG,KAAK,WAAW,IAAI,GAAG,KAAK,aAAa,CAAC,UAAU,IAAI,GAAG,KAAK,qBAAqB,EAC5F;AACI,wBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,EAAW,CAAC;AACtC,wBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;AACnB,wBAAA,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;;wBAGlB,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,GAAG,KAAK,aAAa,CAAC,UAAU,EAC7D;AACI,4BAAA,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;4BACpD,IAAI,GAAG,EACP;gCACI,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC5C,gCAAA,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;6BAC/B;yBACJ;AACD,wBAAA,OAAO,IAAI,CAAC;qBACf;AACD,oBAAA,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAEvD,oBAAA,IAAI,CAAC,IAAI,CAAC,eAAe;qBACzB;AACI,wBAAA,IAAI,GAAG,KAAK,aAAa,CAAC,KAAK;AAC3B,4BAAA,IAAI,CAAC,MAAM,CAAC/B,kBAAU,CAAC,QAAQ,CAAC,CAAC;AAChC,6BAAA,IAAI,GAAG,KAAK,aAAa,CAAC,aAAa,EAC5C;AACI,4BAAA,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;4BACzD,IAAI,GAAG,EACP;gCACI,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;AACjD,gCAAA,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;6BAC/B;yBACJ;AACI,6BAAA,IAAI,GAAG,KAAK,aAAa,CAAC,OAAO,EACtC;AACI,4BAAA,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;4BAC3D,IAAI,GAAG,EACP;gCACI,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACnD,gCAAA,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;6BAC/B;yBACJ;qBACJ;AAED,oBAAA,OAAO,MAAM,CAAC;iBACjB;AACD,gBAAA,OAAO,IAAI,CAAC;aACf;AACJ,SAAA,CAAC,CAAC;KACN;;IAGD,SAAS,CAAC,MAAc,EAAE,KAAa,EAAE,SAAiB,EAAE,SAAA,GAAuB,SAAS,CAAC,KAAK,EAAA;AAE9F,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS;AAC/B,YAAA,MAAM,gBAAgB,MAAM,CAAA,GAAA,EAAM,KAAK,CAAM,GAAA,EAAA,SAAS,EAAE,CAAC;QAE7D,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAC5B,QAAA,IAAI,SAAS,KAAK,SAAS,CAAC,KAAK,EACjC;AACI,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACrB;AACI,aAAA,IAAI,SAAS,KAAK,SAAS,CAAC,QAAQ,EACzC;AACI,YAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACrB;aAED;AACI,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACpB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;SACrB;AAED,QAAA,IAAI,KAAK,GAAG,CAAC,GAAG,uBAAuB,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QACnE,IAAI,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC5G,QAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,GAAG,IAAI,CAAC;AAC1C,QAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzD,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,MAAM,CAACA,kBAAU,CAAC,QAAQ,CAAC,CAAC;KACpC;AACD,IAAA,OAAO,WAAW,CAAC,MAAc,EAAE,KAAa,EAAE,SAAiB,EAAE,SAAA,GAAuB,SAAS,CAAC,KAAK,EAAA;AAEvG,QAAA,IAAI,KAAK,GAAG,IAAI,OAAK,EAAE,CAAC;QACxB,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AACrD,QAAA,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACnC,QAAA,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC3B,QAAA,OAAO,KAAK,CAAC;KAChB;AACD,IAAA,IAAI,SAAS,GAAA;QAET,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;AAED,IAAA,IAAI,SAAS,GAAA;QAET,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IAED,IAAI,SAAS,CAAC,CAAU,EAAA;QAEpB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;KACvB;AACD,IAAA,IAAI,sBAAsB,GAAA;;AAGtB,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,qBAAqB,EAC1C;YACI,IAAI,CAAC,CAAC,MAAM,IAAI,CAAE,CAAC,CAAC,MAAgB,CAAC,OAAO;AACxC,gBAAA,OAAO,IAAI,CAAC;SACnB;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAED,IAAA,IAAI,oBAAoB,GAAA;QAEpB,OAAO,IAAI,CAAC,qBAAqB,CAAC;KACrC;AAED,IAAA,0BAA0B,CAAC,CAAW,EAAA;QAElC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KACrC;AACD,IAAA,yBAAyB,CAAC,CAAW,EAAA;QAEjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KACxC;IACD,uBAAuB,GAAA;QAEnB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,qBAAqB,EAC1C;AACI,YAAA,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;AAElC,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EACjB;AACI,gBAAA,IAAI,EAAE,GAAG,CAAC,CAAC,MAAe,CAAC;AAC3B,gBAAA,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACzC;SACJ;KACJ;AAED,IAAA,IAAI,UAAU,GAAA;QAEV,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;AAED,IAAA,WAAW,CAAC,GAAe,EAAA;QAEvB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;KACjC;IACD,eAAe,GAAA;QAEX,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,EACjC;AACI,YAAA,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO;AAC5B,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;SAC3B;AACD,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;KAC/B;IAKD,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,aAAa,CAAC,EAAE;IACjD,IAAI,YAAY,CAAC,CAAgB,EAAA;AAE7B,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa,EAC5B;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;AAEvB,YAAA,IAAI,IAAI,CAAC,uBAAuB,EAChC;gBACI,IAAI,CAAC,uBAAuB,CAAC,UAAU,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC9D,gBAAA,IAAI,CAAC,uBAAuB,CAAC,OAAO,GAAG,IAAI,CAAC,uBAAuB,CAAC,UAAU,KAAK,EAAE,CAAC;gBACtF,IAAI,CAAC,uBAAuB,CAAC,MAAM,GAAG,uBAAuB,CAAC,2BAA2B,CAAC;aAC7F;SACJ;KACJ;AAED;;AAEG;AACH,IAAA,IAAI,kBAAkB,GAAA;QAElB,OAAO,IAAI,CAAC,mBAAmB,CAAC;KACnC;IAED,IAAI,kBAAkB,CAAC,GAAuB,EAAA;QAE1C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,GAAG,EACvC;AACI,YAAA,CAAC,aAAa,CAAC,UAAU,GAAG,GAAG,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE;AACjE,YAAA,mBAAmB,EAAE,GAAG,CAAC,mBAAmB,CAAC,KAAK,EAAE;AACvD,SAAA,CAAC,CAAC;KACV;AACD,IAAA,IAAI,yBAAyB,GAAA;QAEzB,IAAI,KAAK,CAAC,yBAAyB;AAC/B,YAAA,OAAO,IAAI,CAAC;AAEhB,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,gBAAgB,EACnC;AACI,YAAA,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;gBAAE,SAAS;AAC9B,YAAA,IAAI,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAc,CAAC,CAAC,CAAC,MAAM,EAAG,iBAAiB;AAC7E,gBAAA,OAAO,IAAI,CAAC;SACnB;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AAES,IAAA,kBAAkB,CAAC,KAAqB,EAAA;AAE9C,QAAA,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAChC,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,gBAAgB,EACnC;YACI,IAAI,CAAC,CAAC,OAAO;gBAAE,SAAS;AACxB,YAAA,IAAI,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;AACnB,YAAA,IAAI,GAAG,YAAY,uBAAuB,EAC1C;AACI,gBAAA,IAAI,GAAG,CAAC,cAAc,CAAC,MAAM,EAC7B;oBACI,IAAI,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,YAAY,WAAW,IAAI,CAAC,YAAY,YAAY,CAAmC,CAAC;AAEjI,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EACrC;AACI,wBAAA,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACjB,wBAAA,IAAI,CAAC,GAAG,CAAC,YAAY,WAAW,GAAG,CAAC,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;AAChE,wBAAA,CAAC,CAAC,oBAAoB,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,iBAAiB,EAAE,CAAC;AACjF,wBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACjB;iBACJ;aACJ;SACJ;KACJ;AAED,IAAA,cAAc,CAAC,EAAiB,EAAA;AAE5B,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,gBAAgB,EACpC;AACI,YAAA,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;AAClB,YAAA,IAAI,CAAC,YAAY,uBAAuB,EACxC;gBACI,aAAa,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;aAC1E;SACJ;AACD,QAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;AACjC,QAAA,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;KAC5B;AAED,IAAA,IAAI,WAAW,GAAA;AAEX,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC;AAE7B,QAAA,IAAI,UAAoB,CAAC;AACzB,QAAA,IAAI,MAAe,CAAC;AACpB,QAAA,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,eAAe,CAAC,EACtC;AACI,YAAA,IAAI,IAAI,CAAC,mBAAmB,CAAC,SAAS;AAC/B,mBAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;mBAC7C,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,EAC/F;AACI,gBAAA,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC;aACnD;AAED,YAAA,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;SACxB;AAED,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;QACnC,IAAI,kBAAkB,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,iBAAiB,GAAG,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;;AAGnE,QAAA,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;AACI,YAAA,IAAI,EAAE,CAAC,eAAe,EACtB;AACI,gBAAA,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACtB,gBAAA,EAAE,CAAC,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnD,EAAE,CAAC,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC;gBACvC,EAAE,CAAC,mBAAmB,GAAG,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBACvD,EAAE,CAAC,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACzD,EAAE,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;AAEtC,gBAAA,IAAI,eAAyB,CAAC;;gBAE9B,IAAI,UAAU,EACd;oBACI,EAAE,CAAC,kBAAkB,CAAC,SAAS,GAAG,EAAE,CAAC;oBACrC,eAAe,GAAG,wBAAwB,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAC7D,oBAAA,KAAK,IAAI,KAAK,IAAI,eAAe,EACjC;AACI,wBAAA,IAAI,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;wBAC5B,IAAI,GAAG,KAAK,SAAS;4BACjB,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AAE3C,4BAAA,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;qBAC/E;iBACJ;;oBAEG,EAAE,CAAC,mBAAmB,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;;AAG9G,gBAAA,EAAE,CAAC,mBAAmB,CAAC,UAAU,GAAG,EAAE,CAAC;AACvC,gBAAA,IAAI,EAAE,CAAC,MAAM,EACb;oBACI,gCAAgC,CAAC,EAAE,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,CAAC,CAAC;iBAC3F;;iBAED;AACI,oBAAA,IAAI,kBAAkB,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAC;AAEnD,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAClD;AACI,wBAAA,IAAI,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;AACjC,wBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;wBAElD,IAAI,WAAW,GAAG,CAAC,CAAC;wBACpB,IAAI,cAAc,GAAG,QAAQ,CAAC;AAE9B,wBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAClD;AACI,4BAAA,IAAI,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;AACjC,4BAAA,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACvD,4BAAA,IAAI,CAAC,GAAG,cAAc,EACtB;gCACI,WAAW,GAAG,CAAC,CAAC;gCAChB,cAAc,GAAG,CAAC,CAAC;6BACtB;yBACJ;AAED,wBAAA,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;qBAC1E;iBACJ;aACJ;SACJ;AACD,QAAA,OAAO,GAAG,CAAC;KACd;AAED,IAAA,IAAI,aAAa,GAAA;QAEb,IAAI,MAAM,GAAgB,EAAE,CAAC;AAC7B,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAC1B;YACI,IAAI,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AAChF,YAAA,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAChB,YAAA,IAAI,EAAE,YAAYiC,cAAM;AACpB,gBAAA,EAAE,CAAC,GAAG,GAAG,IAAInC,aAAO,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;YAEpD,IAAI,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;YAC/C,IAAI,KAAK,GAAc,EAAE,CAAC;AAC1B,YAAA,KAAK,IAAI,IAAI,IAAI,CAAC,CAAC,OAAO,EAC1B;gBACI,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC1F,gBAAA,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;aACpD;YAED,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAElC,MAAM,CAAC,IAAI,CAAC;AACR,gBAAA,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,CAAC,CAAC,SAAS;AACtB,gBAAA,GAAG,EAAES,QAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,KAAK;gBACxI,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,MAAM,EAAE,CAAC,CAAC,gBAAgB;gBAC1B,QAAQ,EAAE,CAAC,CAAC,eAAe;gBAC3B,QAAQ,EAAE,CAAC,CAAC,eAAe;AAC9B,aAAA,CAAC,CAAC;SACN;AACD,QAAA,OAAO,MAAM,CAAC;KACjB;IAED,IAAI,aAAa,CAAC,MAAmB,EAAA;QAEjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AAExB,QAAA,KAAK,IAAI,KAAK,IAAI,MAAM,EACxB;AACI,YAAA,IAAI,CAAC,GAAG,IAAI,YAAY,EAAE,CAAC;YAC3B,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAC3C,YAAA,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AAC9B,YAAA,CAAC,CAAC,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAC;AAClC,YAAA,CAAC,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;YAElC,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,EAClC;AACI,gBAAA,IAAI,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC;AAC9B,gBAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;AAC/B,gBAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AAEjC,gBAAA,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;aACxB;;AAID,YAAA,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAE/B,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACxB;QACD,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;;AAGD,IAAA,IAAI,UAAU,GAAA;AAEV,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;KACpC;IAED,IAAI,UAAU,CAAC,EAAiB,EAAA;QAE5B,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,CAACP,kBAAU,CAAC,QAAQ,CAAC,CAAC;KACpC;AAED,IAAA,IAAI,UAAU,GAAA;AAEV,QAAA,OAAO,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC;KACpC;IACD,IAAI,UAAU,CAAC,EAAiB,EAAA;QAE5B,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,MAAM,CAACA,kBAAU,CAAC,QAAQ,CAAC,CAAC;KACpC;IAED,mBAAmB,GAAA;AAEf,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE9C,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,CAACA,kBAAU,CAAC,QAAQ,CAAC,CAAC;KACpC;IAED,mBAAmB,GAAA;AAEf,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAE9C,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,CAACA,kBAAU,CAAC,QAAQ,CAAC,CAAC;KACpC;AAED,IAAA,IAAI,SAAS,GAAA;QAET,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IAED,IAAI,SAAS,CAAC,CAAU,EAAA;AAEpB,QAAA,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,EACzB;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AACpB,YAAA,IAAI,CAAC,MAAM,CAACA,kBAAU,CAAC,QAAQ,CAAC,CAAC;SACpC;KACJ;AAED,IAAA,IAAI,OAAO,GAAA;QAEP,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;IAED,IAAI,OAAO,CAAC,CAAe,EAAA;AAEvB,QAAA,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EACvB;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;;AAElB,YAAA,IAAI,CAAC,MAAM,CAACA,kBAAU,CAAC,QAAQ,CAAC,CAAC;SACpC;KACJ;IAED,kBAAkB,GAAA;AAEd,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEtC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,CAACA,kBAAU,CAAC,QAAQ,CAAC,CAAC;KACpC;AAED;;AAEG;IACH,eAAe,CAAC,CAAW,EAAE,GAAiB,EAAA;QAE1C,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpC,QAAA,IAAI,MAAM;YACN,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;;YAEpB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;KACnC;AACD,IAAA,cAAc,CAAC,CAAW,EAAA;QAEtB,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,KAAK,EACT;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,KAAK,IAAI,SAAS,IAAI,KAAK,EAC3B;AACI,gBAAA,KAAK,IAAI,KAAK,IAAI,SAAS,EAC3B;AACI,oBAAA,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO;AACvB,wBAAA,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;iBAC5B;aACJ;AACD,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAE1B,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,EACjB;;AAEI,gBAAA,IAAI,EAAE,GAAG,CAAC,CAAC,MAAe,CAAC;AAC3B,gBAAA,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC9B;SACJ;KACJ;IAED,iBAAiB,GAAA;QAEb,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,UAAU,EAClC;AACI,YAAA,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;SAC3B;KACJ;IACD,KAAK,CAAC,UAAmB,IAAI,EAAA;AAEzB,QAAA,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO;YAAE,OAAO;AACrC,QAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAErB,QAAA,IAAI,CAAC,OAAO;YAAE,OAAO;;QAGrB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,KAAK,MAAM,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,EACvC;YACI,KAAK,IAAI,IAAI,IAAI,KAAK;gBAClB,KAAK,IAAI,CAAC,IAAI,IAAI;AACd,oBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;AACb,wBAAA,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;SAChC;QAED,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;AACD,IAAA,IAAI,SAAS,GAAA;AAET,QAAA,IAAI,KAAK,GAAG,IAAIF,aAAO,EAAE,CAAC;AAE1B,QAAA,QAAQ,IAAI,CAAC,UAAU;YAEnB,KAAK,SAAS,CAAC,KAAK;gBAChB,KAAK,CAAC,SAAS,CACX,KAAK,EACL,MAAM,EACN,KAAK,CACR,CAAC;gBACF,MAAM;YACV,KAAK,SAAS,CAAC,QAAQ;gBACnB,KAAK,CAAC,SAAS,CACX,KAAK,EACL,KAAK,EACL,KAAK,CACR,CAAC;gBACF,MAAM;YACV,KAAK,SAAS,CAAC,MAAM;gBACjB,KAAK,CAAC,SAAS,CACX,KAAK,EACL,KAAK,EACL,MAAM,CACT,CAAC;SACT;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AACD,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;IACD,IAAI,MAAM,CAAC,CAAS,EAAA;AAEhB,QAAA,IAAI,IAAI,CAAC,YAAY,YAAYmC,cAAM;YACnC,OAAO;AAEX,QAAA,IAAI,CAAC1B,QAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EACjC;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,YAAA,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AAE3B,YAAA,IAAI,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAC9D,YAAA,IAAI,SAAS,GAAG,OAAO,CAAC,sBAAsB,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YAErE,IAAI,SAAS,EACb;AACI,gBAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;gBAChB,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;aACjB;SACJ;KACJ;AACD,IAAA,IAAI,KAAK,GAAA;QAEL,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;IACD,IAAI,KAAK,CAAC,CAAS,EAAA;AAEf,QAAA,IAAI,IAAI,CAAC,YAAY,YAAY0B,cAAM;YACnC,OAAO;AAEX,QAAA,IAAI,CAAC1B,QAAM,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAChC;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AAC7B,YAAA,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;AAC1B,YAAA,IAAI,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAC9D,YAAA,IAAI,SAAS,GAAG,OAAO,CAAC,sBAAsB,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YACnE,IAAI,SAAS,EACb;AACI,gBAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;gBACf,IAAI,CAAC,uBAAuB,EAAE,CAAC;gBAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;aACjB;SACJ;KACJ;AACD,IAAA,IAAI,SAAS,GAAA;QAET,OAAO,IAAI,CAAC,UAAU,CAAC;KAC1B;IACD,IAAI,SAAS,CAAC,IAAe,EAAA;QAEzB,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,UAAU,EAC5B;YACI,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;AACrC,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAE9B,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAEjC,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;AAE1B,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;YAE1B,IAAI,CAAC,MAAM,EAAE,CAAC;SACjB;KACJ;;AAGD,IAAA,YAAY,CAAC,IAAe,EAAA;AAExB,QAAA,IAAI,IAAI,KAAK,IAAI,CAAC,UAAU;YAAE,OAAO;QACrC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;KAC1B;;AAGD,IAAA,IAAI,QAAQ,GAAA;AAER,QAAA,QAAQ,IAAI,CAAC,UAAU;YAEnB,KAAK,SAAS,CAAC,KAAK;AAChB,gBAAA,OAAO,IAAIV,aAAO,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC9D,KAAK,SAAS,CAAC,QAAQ;gBACnB,OAAO,IAAI,CAAC,QAAQ,CAAC;YACzB,KAAK,SAAS,CAAC,MAAM;AACjB,gBAAA,OAAO,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACvE;KACJ;AACD,IAAA,IAAI,QAAQ,GAAA;AAER,QAAA,IAAI,EAAE,GAAG,IAAIA,aAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/D,QAAA,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,QAAA,OAAO,EAAE,CAAC;KACb;AAED,IAAA,IAAI,MAAM,GAAA;QAEN,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;AAED,IAAA,IAAI,cAAc,GAAA;AAEd,QAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;KACvB;AAED,IAAA,IAAI,SAAS,GAAA;AAET,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;KAClC;AAED,IAAA,IAAI,IAAI,GAAA;QAEJ,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;IACD,IAAI,IAAI,CAAC,CAAS,EAAA;AAEd,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK;YAAE,OAAO;QAC7B,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;KAClB;AAED;;AAEG;AACH,IAAA,IAAa,YAAY,GAAA;QAErB,OAAO,KAAK,CAAC,YAAY,CAAC;KAC7B;;IAGD,IAAa,YAAY,CAAC,UAA+B,EAAA;AAErD;;;;;;;AAOG;;QAGH,IAAI,WAAW,GAAuB,EAAS,CAAC;AAChD,QAAA,sBAAsB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAE1C,IAAI,kBAAkB,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,iBAAiB,GAAG,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;QACnE,IAAI,2BAA2B,GAAG,sBAAsB,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;AAEnF,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC;AAEnC,QAAA,IAAI,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC;QAC1D,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,mBAAmB,CAAC,SAAS;AACvE,YAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,mBAAmB,CAAC,SAAS;AAC/C,gBAAA,IAAI,cAAc,CAAC,IAAI,CAAC,EACxB;oBACI,gBAAgB,GAAG,IAAI,CAAC;oBACxB,MAAM;iBACT;AACT,QAAA,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC;AACjC,YAAA,gBAAgB,GAAG,uBAAuB,CAAC,YAAY,CAAC,IAAI,GAAG,uBAAuB,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC;AAEnJ,QAAA,KAAK,CAAC,YAAY,GAAG,UAAU,CAAC;;QAGhC,IAAI,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,EAAE;AAC7B,YAAA,iCAAiC,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;;SAEzD;YACI,IAAI,QAAQ,GAAa,EAAE,CAAC;AAE5B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,EAAE,EAC5C;gBACI,IAAI,CAAC,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;gBAE5C,IAAI,EAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;gBAChD,IAAI,MAAM,GAAG,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBAC7C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;aACrC;YAED,IAAI,SAAS,GAAa,EAAE,CAAC;YAC7B,KAAK,IAAI,KAAK,IAAI,QAAQ;AACtB,gBAAA,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,CAAC;AAElF,YAAA,IAAI,CAAC,mBAAmB,CAAC,SAAS,GAAG,SAAS,CAAC;SAClD;QAED,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/C,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC;;AAExD,QAAA,IAAI,IAAI,CAAC,MAAM,EACf;YACI,gCAAgC,CAAC,IAAI,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,CAAC,CAAC;YAC1F,sBAAsB,CAAC,IAAI,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,UAAU,CAAC,CAAC;SAC7F;;SAED;AACI,YAAA,IAAI,kBAAkB,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAErD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAClD;AACI,gBAAA,IAAI,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC;gBAElD,IAAI,WAAW,GAAG,CAAC,CAAC;gBACpB,IAAI,cAAc,GAAG,QAAQ,CAAC;AAE9B,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,CAAC,EAAE,EAClD;AACI,oBAAA,IAAI,IAAI,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;AACjC,oBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACvD,oBAAA,IAAI,CAAC,GAAG,cAAc,EACtB;wBACI,WAAW,GAAG,CAAC,CAAC;wBAChB,cAAc,GAAG,CAAC,CAAC;qBACtB;iBACJ;AAED,gBAAA,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,CAAC;AACzE,gBAAA,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,IAAI,CAAC,2BAA2B,CAAC,WAAW,CAAC,CAAC,CAAC;aAC/F;SACJ;KACJ;IAED,OAAO,GAAA;AAEH,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC;KAC9B;AAED;;;AAGG;AACM,IAAA,QAAQ,CAAC,KAAc,EAAE,WAAW,GAAG,KAAK,EAAA;AAEjD,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACzB,QAAA,IAAI,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AACnE,QAAA,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,CAAC;AAAE,YAAA,OAAO,IAAI,CAAC;QAE3C,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC;AAEpE,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7B,QAAA,IAAI,WAAW,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,KAAK,SAAS,CAAC,WAAW,KAAKU,QAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAIA,QAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACzH,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC;AAEtE,QAAA,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACpB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEnB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE/B,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,IAAI,IAAI,CAAC,YAAY,YAAY2B,gBAAQ;AACrC,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAEhD,QAAA,gCAAgC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAElD,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,WAAW,CAAC,GAAW,EAAE,GAAW,EAAE,GAAW,EAAA;QAE7C,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5B,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC;AAEvB,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC3B,IAAI,MAAM,GAAG,IAAIpC,aAAO,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,MAAM,GAAG,IAAIA,aAAO,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC9C,IAAI,MAAM,GAAG,IAAIA,aAAO,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAE9C,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;AACxB,aAAA,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC;aAC3B,WAAW,CAAC,MAAM,CAAC;aACnB,WAAW,CAAC,MAAM,CAAC;aACnB,WAAW,CAAC,MAAM,CAAC;aACnB,WAAW,CAAC,MAAM,CAAC,CAAC;AAEzB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;;AAGD,IAAA,IAAI,QAAQ,GAAA;AAER,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,IAAI,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAEvC,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC3D,QAAA,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7B,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/B,QAAA,IAAI,OAAO,GAAG,IAAIA,aAAO,EAAE,CAAC,qBAAqB,CAAC,IAAI4D,WAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAE1H,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAKnD,QAAM,CAAC,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,OAAO,IAAI,CAAC,SAAS,CAAC;aAE1B;AACI,YAAA,IAAI,EAAE,GAAG,IAAImD,WAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC;AACpE,YAAA,OAAO,EAAE,CAAC;SACb;KACJ;AAES,IAAA,iBAAiB,CAAC,CAAU,EAAA;AAElC,QAAA,IAAI,CAAC,IAAI,CAAC,EAAE,EACZ;;YAEI,OAAO,IAAI,CAAC;SACf;AAED,QAAA,IAAI,CAAC,YAAY,CAAC;QAElB,IAAI,YAAY,IAAI,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,YAAY,CAAC;AAChE,eAAA,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,WAAW,CAAC;eAClD,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,eAAe,CAAC,CAC5D,CAAC;AAEF,QAAA,IAAI,eAAe,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QACxD,IAAI,iBAAiB,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAEpG,QAAA,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QAE3B,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,EAC/B;AACI,YAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC5B,SAAS,CAAC,OAAO,EAAE,CAAC;YAEpB,IAAI,iBAAiB;gBACjB,SAAS,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC;AAEvC,YAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;YAE7C,IAAI,YAAY,EAChB;AACI,gBAAA;oBACI,IAAI,CAAC,kBAAkB,CAAC,QAAQ;oBAChC,IAAI,CAAC,kBAAkB,CAAC,UAAU;oBAClC,IAAI,CAAC,kBAAkB,CAAC,UAAU;oBAClC,IAAI,CAAC,kBAAkB,CAAC,WAAW;AACtC,iBAAA;;AAEG,wBAAA;4BACI,IAAI,CAAC,kBAAkB,CAAC,QAAQ;4BAChC,IAAI,CAAC,kBAAkB,CAAC,WAAW;4BACnC,IAAI,CAAC,kBAAkB,CAAC,UAAU;4BAClC,IAAI,CAAC,kBAAkB,CAAC,UAAU;yBACrC,CAAC;aACT;SACJ;;YAEG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAExG,QAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,GAAG,SAAS,CAAC;QAE/C,IAAI,CAAC,YAAY;AACb,YAAA,gCAAgC,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;;QAEtD,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI5D,aAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;;AAGxF,QAAA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AACvB,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACvC,aAAA,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;AAC5B,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;;AAG5C,QAAA,IAAI,IAAI,CAAC,OAAO,KAAK,YAAY,CAAC,IAAI;AAClC,YAAA,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC;AACjC,aAAA,IAAI,IAAI,CAAC,OAAO,KAAK,YAAY,CAAC,KAAK;AACxC,YAAA,IAAI,CAAC,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC;AAErC,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,IAAI,WAAW,GAAA;QAEX,IAAI,IAAI,CAAC,kBAAkB,CAAC,KAAK,KAAK,SAAS,CAAC,QAAQ;AACpD,YAAA,OAAO,gBAAgB,CAAC;;AAExB,YAAA,OAAO,iBAAiB,CAAC;KAChC;AAED,IAAA,QAAQ,CAAC,GAAa,EAAE,GAAY,EAAE,KAAK,GAAG,KAAK,EAAA;AAE/C,QAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC;KACjF;;AAGD,IAAA,QAAQ,CAAC,GAAU,EAAA;QAEf,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAE5B,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,EAAE,CAAC;AAC5B,QAAA,IAAI,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC;AACrC,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;AAEtB,QAAA,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAEpB,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;AAC3B,QAAA,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC;KACpC;IAED,KAAK,GAAA;AAED,QAAA,IAAI,EAAE,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;AACvB,QAAA,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;AACjC,QAAA,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AACtB,QAAA,EAAE,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AAC1B,QAAA,EAAE,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/B,QAAA,OAAO,EAAE,CAAC;KACb;AACD,IAAA,IAAI,CAAC,MAAY,EAAA;QAEb,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC7B,QAAA,IAAI,GAAG,IAAI,MAAM,CAAC,gBAAgB,EAClC;AACI,YAAA,KAAK,IAAI,EAAE,IAAI,MAAM,CAAC,gBAAgB,EACtC;gBACI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;AACnC,oBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACtC;SACJ;AAED,QAAA,OAAO,GAAG,CAAC;KACd;IACO,WAAW,GAAA;AAEf,QAAA,IAAI,CAAe,CAAC;AACpB,QAAA,IAAI,GAAW,CAAC;AAChB,QAAA,IAAI,KAAa,CAAC;AAElB,QAAA,QAAQ,IAAI,CAAC,kBAAkB,CAAC,KAAK;YAEjC,KAAK,SAAS,CAAC,QAAQ;AACnB,gBAAA,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACtB,gBAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC9C,MAAM;YACV,KAAK,SAAS,CAAC,OAAO;AAClB,gBAAA,GAAG,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACrB,gBAAA,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC9C,MAAM;YACV,KAAK,SAAS,CAAC,WAAW;AACtB,gBAAA,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACtB,gBAAA,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;SAG9B;AAED,QAAA,CAAC,GAAG,IAAI6C,kBAAY,CAChB,mBAAmB,CAAC,aAAa,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,EACzG,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CACnC,CAAC;AACF,QAAA,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QACnB,EAAE,CAAC,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAC/C,QAAA,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEjE,CAAC,CAAC,YAAY,EAAE,CAAC;QACjB,EAAE,CAAC,YAAY,EAAE,CAAC;AAElB,QAAA,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;KAClB;IAEO,eAAe,GAAA;AAEnB,QAAA,MAAM,CAAC,GAAU,IAAIf,UAAK,CACtB,mBAAmB,CAAC,aAAa,CAAC,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,EACzG,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,CAClC,CAAC;QACF,CAAC,CAAC,oBAAoB,EAAE,CAAC;AAEzB,QAAA,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;AACnB,QAAA,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACnD,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEjE,CAAC,CAAC,YAAY,EAAE,CAAC;QACjB,EAAE,CAAC,YAAY,EAAE,CAAC;AAElB,QAAA,OAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;KAClB;AAED,IAAA,IAAI,gBAAgB,GAAA;AAEhB,QAAA,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;KAC1C;IAED,IAAI,gBAAgB,CAAC,GAA0B,EAAA;AAE3C,QAAA,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC;YACnD,OAAO;QAEX,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,iBAAiB,GAAG,GAAG,CAAC;;KAGhC;IAKD,gBAAgB,GAAA;QAEZ,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;AAEhC,QAAA,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;KAClC;;IAIO,mBAAmB,GAAA;QAEvB,IAAI,IAAI,CAAC,aAAa;YAClB,OAAO,IAAI,CAAC,aAAa,CAAC;AAE9B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAIpB,cAAQ,EAAE,CAAC;QAEpC,IAAI,SAAS,GAAG,CAAC,CAAC;AAClB,QAAA,IAAI,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;AACxC,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,eAAe,EACnC;AACI,YAAA,IAAI,GAAG,GAAG,CAAG,EAAA,EAAE,CAAC,GAAG,CAAI,CAAA,EAAA,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK,EACV;gBACI,KAAK,GAAG,SAAS,CAAC;AAClB,gBAAA,SAAS,EAAE,CAAC;AACZ,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;aAC3B;AAED,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAC3C;gBACI,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxB,IAAID,QAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,EACrB;AACI,oBAAA,IAAI,GAAG,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5D,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAIqB,UAAK,CAAC,GAAG,EAAE,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAChF;qBAED;oBACI,IAAI,GAAG,GAAG,IAAII,WAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;AACvD,oBAAA,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC;AACvB,oBAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,2BAA2B,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;iBACjF;aACJ;SACJ;QAED,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;;;IAID,gBAAgB,GAAA;AAEZ,QAAA,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;AAC7B,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAC1B;AACI,YAAA,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACxC,YAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;SACtC;AACD,QAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;KAChC;AAKD;;AAEG;IAEF,aAAa,GAAA;QAEV,IAAI,IAAI,CAAC,WAAW;YAChB,OAAO,IAAI,CAAC,WAAW,CAAC;AAE5B,QAAA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QAItB,OAAO,IAAI,CAAC,WAAW,CAAC;KAC3B;;AAGD,IAAA,IAAc,SAAS,GAAA,EAAK,OAAO,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE;IAGrE,IAAI,cAAc,KAAK,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE;IAC5C,OAAO,GAAA;QAEZ,KAAK,CAAC,OAAO,EAAE,CAAC;AAChB,QAAA,gBAAgB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;KACnC;AAGD,IAAA,MAAM,aAAa,GAAA;AAEf,QAAA,OAAO,IAAI,OAAO,CAAU,CAAC,GAAG,KAAI;AAEhC,YAAA,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;AAC7B,SAAC,CAAC,CAAC;KACN;;AAIQ,IAAA,mBAAmB,CAAC,YAAoB,EAAA;QAE7C,IAAI,CAAC,YAAY,CAAC,MAAM;YAAE,OAAO;QACjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;;QAG5B,IAAI,KAAK,GAAe,EAAE,CAAC;AAC3B,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW,EACjC;AACI,YAAA,IAAI,IAAI,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO;AAC7B,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACxB;;;QAID,IAAI,IAAI,GAA+B,EAAE,CAAC;AAC1C,QAAA,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,sBAAsB,EACjG;AACI,YAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,EAC7B;AACI,gBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;gBAGb,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAe,CAAC;gBAChC,IAAI,GAAG,EACP;oBACI,GAAG,CAAC,oBAAoB,EAAE,CAAC;oBAC3B,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;iBAClC;aACJ;AAED,YAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;SAC3B;;AAGD,QAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;;QAG5B,IAAI,IAAI,GAAW,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAE/C,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,EACnB;AACI,YAAA,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;;AAEvB,YAAA,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,EAAE,IAAG;AAEtB,gBAAA,IAAI,CAAC,GAAG,EAAE,CAAC,MAAsB,CAAC;AAClC,gBAAA,IAAI,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBACvD,IAAI,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,EACvC;AACI,oBAAA,IAAI,EAAE,KAAK,IAAI,EACf;AACI,wBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B,wBAAA,OAAO,KAAK,CAAC;qBAChB;;AAED,oBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE;AACjB,wBAAA,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC;AACb,yBAAA,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE;AACtB,wBAAA,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC;;AAElB,oBAAA,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,oBAAA,OAAO,KAAK,CAAC;iBAChB;AACD,gBAAA,OAAO,IAAI,CAAC;AAChB,aAAC,CAAC,CAAC;;AAGH,YAAA,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,sBAAsB,EACjG;AACI,gBAAA,KAAK,IAAI,CAAC,IAAI,IAAI,EAClB;AACI,oBAAA,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;AACtB,oBAAA,IAAI,KAAK,GAAG,GAAG,EAAE,MAAe,CAAC;AAEjC,oBAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,IAAG;AAEzB,wBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO;AAAE,4BAAA,OAAO,KAAK,CAAC;AACpD,wBAAA,IAAI,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAmB,CAAC;AACrD,wBAAA,IAAI,KAAK,CAAC,CAAC,CAAC,YAAY,YAAY,EACpC;AACI,4BAAA,IAAI,SAAS,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;4BACpD,IAAI,SAAS,EACb;gCACI,IAAI,KAAK;oCACL,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gCAExC,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/B,gCAAA,KAAK,IAAI,CAAC,IAAI,KAAK,EACnB;;AAEI,oCAAA,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE;AACjB,wCAAA,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC;AAClB,oCAAA,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE;AACjB,wCAAA,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC;iCACrB;AACD,gCAAA,OAAO,KAAK,CAAC;6BAChB;yBACJ;6BAED;;AAEI,4BAAA,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;AACI,gCAAA,IAAI,MAAM,GAAG,EAAE,EAAE,MAAM,CAAC;AACxB,gCAAA,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO;oCACzB,MAAM,CAAC,KAAK,EAAE,CAAC;6BACtB;AACD,4BAAA,OAAO,KAAK,CAAC;yBAChB;AACD,wBAAA,OAAO,IAAI,CAAC;AAChB,qBAAC,CAAC,CAAC;AAEH,oBAAA,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;iBACjB;aAEJ;SAEJ;;AAGD,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,EAClB;AACI,YAAA,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAChB,gBAAA,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;AACI,oBAAA,IAAI,MAAM,GAAG,EAAE,EAAE,MAAM,CAAC;AACxB,oBAAA,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO;wBACzB,MAAM,CAAC,KAAK,EAAE,CAAC;iBACtB;SACR;KACJ;;IAKD,IAAY,UAAU,KAAK,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE;;IAEhE,YAAY,GAAA;QAEhB,IAAI,SAAS,GAAG,IAAIR,mBAAa,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC3D,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,aAAa,CAAC,QAAQ,CAAC;QAC9F,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACrD,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;AAClE,QAAA,IAAI,IAAI,GAAG,IAAIoB,UAAI,CAAC,SAAS,EAAE,aAAa,CAAC,0BAA0B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC1F,QAAA,OAAO,IAAI,CAAC;KACf;;IAGO,cAAc,GAAA;QAElB,IAAI,SAAS,GAAG,IAAIpB,mBAAa,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AAC3D,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,aAAa,CAAC,IAAI,CAAC;QACpF,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACrD,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;AAClE,QAAA,IAAI,IAAI,GAAG,IAAIoB,UAAI,CAAC,SAAS,EAAE,aAAa,CAAC,0BAA0B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC1F,QAAA,OAAO,IAAI,CAAC;KACf;AAKD;;;;;AAKG;IACK,2BAA2B,CAAC,UAAsB,EAAE,GAAa,EAAA;AAErE,QAAA,IAAI,CAAC,GAAG;YAAE,OAAO;AAEjB,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS;SACnB;AACI,YAAA,IAAI,UAAU,KAAK,UAAU,CAAC,UAAU,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,EAC/E;AACI,gBAAA,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACvB,gBAAA,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAU,CAAC,QAAQ,GAAG,aAAa,CAAC,2BAA2B,CAAC;aAClF;AACI,iBAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS;gBACvC,GAAY,CAAC,QAAQ,GAAG,aAAa,CAAC,2BAA2B,CAAC;SAC1E;;QAGD,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,EAC5G;;YAEI,IAAI,uBAAuB,CAAC,SAAS,IAAI,UAAU,KAAK,UAAU,CAAC,KAAK;gBACpE,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;;YAEnC,IAAI,uBAAuB,CAAC,gBAAgB,IAAI,IAAI,CAAC,OAAO,KAAK,YAAY,CAAC,IAAI;gBAC9E,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;SAC1C;AAED,QAAA,IAAI,IAAI,CAAC,QAAQ;SACjB;;AAEI,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACxC,IAAI,MAAM,CAAC,MAAM;AACb,gBAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;AAE1B,gBAAA,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;;YAGpB,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC;AACpC,YAAA,IAAI,MAAM,IAAI,uBAAuB,CAAC,cAAc,EACpD;gBACI,IAAI,MAAM,CAAC,MAAM;AACb,oBAAA,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;;AAE1B,oBAAA,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;aACvB;SACJ;KACJ;IAED,wBAAwB,CAAC,UAAsB,EAAE,GAAa,EAAA;AAE1D,QAAA,KAAK,CAAC,wBAAwB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AAEhD,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,IAAI,UAAU,KAAK,UAAU,CAAC,WAAW,EAChF;YACI,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAS,CAAC;AACnC,YAAA,IAAI,CAAC,IAAI;gBAAE,OAAO;YAClB,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,0BAA0B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC7E;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EACnB;AACI,YAAA,IAAI,UAAU,KAAK,UAAU,CAAC,UAAU,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,EAC/E;gBACK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAU,CAAC,QAAQ,GAAG,aAAa,CAAC,2BAA2B,CAAC;aAClF;AACI,iBAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,EAC5C;AACK,gBAAA,GAAY,CAAC,QAAQ,GAAG,aAAa,CAAC,2BAA2B,CAAC;aACtE;SACJ;KACJ;;AAGD,IAAA,YAAY,CAAC,GAAa,EAAA;QAEtB,IAAI,WAAW,GAAG,IAAI,GAAG,CAAC,uBAAuB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAuB,CAAC,CAAC;AACnH,QAAA,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;AACnC,QAAA,IAAI,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC5C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;YACI,IAAI,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxC,IAAI,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,KAAK,EACT;AACI,gBAAA,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI/C,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7E,gBAAA,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACzC,gBAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,UAAU,CAAC,SAAS,CAAiB,CAAC;AACjF,gBAAA,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACd;SACJ;KACJ;IAED,gBAAgB,GAAA;QAEZ,IAAI,GAAG,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;AAC7D,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,EAClC;YACI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACxJ;AACD,QAAA,OAAO,GAAG,CAAC;KACd;IAED,iBAAiB,CAAC,SAAwB,EAAE,GAAY,EAAA;AAEpD,QAAA,IAAI,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9E,IAAI,eAAe,GAAa,EAAE,CAAC;QACnC,IAAI,UAAU,GAAa,EAAE,CAAC;AAC9B,QAAA,KAAK,IAAI,CAAC,IAAI,SAAS,EACvB;YACI,IAAI,CAAC,GAAG,OAAO;AACX,gBAAA,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;AAExB,gBAAA,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC;SACpC;AAED,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC;AAEtB,QAAA,KAAK,CAAC,iBAAiB,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;QAE9C,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;QAErBgB,mBAAiB,CAAC,UAAU,CAAC,CAAC;AAC9B,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzB,IAAI,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,QAAA,IAAI,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;AAEV,QAAA,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,EAClC;AACI,YAAA,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5D,MAAM,IAAI,KAAK,CAAC;YAEhB,IAAI,KAAK,GAAa,EAAE,CAAC;AAEzB,YAAA,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EACtB;AACI,gBAAA,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM;AACtB,oBAAA,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC;;oBAE3C,MAAM;aACb;AACD,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EACpB;gBACI,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;aAC7C;AACD,YAAA,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;SAClD;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,CAACb,kBAAU,CAAC,QAAQ,CAAC,CAAC;KACpC;IAED,mBAAmB,CACf,QAAwB,EACxB,SAAkB,EAClB,SAAkB,EAClB,SAAmB,EACnB,OAAiB,EAAA;AAGjB,QAAA,IAAI,GAAG,GAAG,KAAK,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACxF,QAAA,IAAI,QAAQ,KAAK,cAAc,CAAC,GAAG,EACnC;AACI,YAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,eAAe,EACnC;gBACI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;oBAAE,SAAS;AACjD,gBAAA,KAAK,IAAI,IAAI,IAAI,EAAE,CAAC,KAAK,EACzB;AACI,oBAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;wBAAE,SAAS;AAEhC,oBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;oBAC9C,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7C,oBAAA,IAAI,CAAC,QAAQ;AAAE,wBAAA,SAAS;AAExB,oBAAA,IAAI,EAAE,GAAG,QAAQ,CAAC,gBAAgB,EAAE,CAAC;AAErC,oBAAA,KAAK,IAAI,CAAC,IAAI,EAAE,EAChB;AACI,wBAAA,IAAI,EAAE,CAAC,GAAG,KAAK,aAAa,CAAC,KAAK;AAC9B,4BAAA,CAAC,CAAC,GAAG,CAAC,IAAIH,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7C,wBAAA,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;qBAC5B;AACD,oBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;iBACnB;aACJ;SACJ;AACI,aAAA,IAAI,QAAQ,KAAK,cAAc,CAAC,GAAG,EACxC;AACI,YAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,eAAe,EACnC;AACI,gBAAA,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAChF,gBAAA,KAAK,IAAI,CAAC,IAAI,EAAE,EAChB;AACI,oBAAA,IAAI,EAAE,CAAC,GAAG,KAAK,aAAa,CAAC,KAAK;AAC9B,wBAAA,CAAC,CAAC,GAAG,CAAC,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7C,oBAAA,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBAC5B;AACD,gBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;aACnB;SACJ;AACD,QAAA,OAAO,GAAG,CAAC;KACd;IACD,WAAW,GAAA;QAEP,IAAI,IAAI,CAAC,cAAc,GAAGG,kBAAU,CAAC,MAAM,EAC3C;AACI,YAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;AAC7C,gBAAA,IAAI,CAAC,cAAc,IAAIA,kBAAU,CAAC,QAAQ,CAAC;SAClD;QACD,KAAK,CAAC,WAAW,EAAE,CAAC;KACvB;AACS,IAAA,SAAS,CAAC,IAAc,EAAA;AAE9B,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,GAAG,GAAG,CAAC;YACP,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;;AAEzB,QAAA,IAAI,GAAG,GAAG,CAAC,EACX;YACI,wBAAwB,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;SACjE;aAED;AACI,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACtB,YAAA,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAC7D,OAAO,GAAG,KAAK,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;SACxD;;AAGD,QAAA,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;AACxB,QAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;;QAGvB,IAAI,oBAAoB,GAAiB,EAAE,CAAC;AAC5C,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAC7B;AACI,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAC7B,IAAI,QAAQ,GAAiB,EAAE,CAAC;AAChC,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACxB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;gBACI,IAAI,KAAK,GAAe,EAAE,CAAC;AAC3B,gBAAA,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACzB,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAC/B;AACI,oBAAA,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACjC,oBAAA,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAChC;AACD,gBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;AAChB,oBAAA,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC5B;AAED,YAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBACrB,SAAS;AAEb,YAAA,IAAI,CAAC,EAAE;AACH,gBAAA,oBAAoB,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;;gBAEvC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;SACzC;AAED,QAAA,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC;YAC/B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;AAEzD,QAAA,IAAI,GAAG,GAAG,CAAC,EACX;AACI,YAAA,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;AAC5B,YAAA,IAAI,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC7B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EACnC;AACI,gBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AAChC,gBAAA,IAAI,KAAK;AACL,oBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACpC;SACJ;QACD,IAAI,GAAG,GAAG,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;AACxE,QAAA,IAAI,GAAG,IAAI,CAAC,EACZ;AACI,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;AACjC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;AACI,gBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AAChC,gBAAA,IAAI,KAAK;AACL,oBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACzC;SACJ;QACD,IAAI,GAAG,IAAI,CAAC;AACR,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE/B,IAAI,GAAG,IAAI,CAAC;AACR,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAElC,QAAA,IAAI,GAAG,IAAI,EAAE,EACb;YACI,iCAAiC,CAAC,IAAI,EAAE,IAAI,CAAC,eAAoB,CAAC,CAAC;YACnE,iCAAiC,CAAC,IAAI,EAAE,IAAI,CAAC,eAAoB,CAAC,CAAC;SACtE;QAED,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,IAAI,GAAG,GAAG,EAAE;AACR,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;;AAEjC,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAE9B,QAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;AAC/B,QAAA,IAAI,GAAG,GAAG,EAAE,EACZ;AACI,YAAA,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACvB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAC7B;AACI,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,gBAAA,IAAI,EAAE,GAAG,IAAI,CAAC,UAAU,EAAc,CAAC;gBACvC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;aACtC;SACJ;;;AAKD,QAAA,IAAI,GAAG,GAAG,EAAE,EACZ;AACI,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACxB,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AAC/B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;AACI,gBAAA,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AAChC,gBAAA,IAAI,KAAK;AACL,oBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACvC;SACJ;AAED,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC;AAC7C,QAAA,IAAI,GAAG,GAAG,EAAE,EACZ;AACI,YAAA,WAAW,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACvC,YAAA,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACzC,YAAA,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACzC,YAAA,WAAW,CAAC,eAAe,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC1C,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,WAAW,CAAC,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SAC3D;AAED,QAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;AACnC,QAAA,IAAI,GAAG,GAAG,EAAE,EACZ;AACI,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;;AAG9B,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACzB,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAC7B;AACI,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AAC/B,gBAAA,IAAI,EAAE;AACF,oBAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aAC1C;SACJ;KACJ;AAED,IAAA,SAAS,CAAC,IAAc,EAAA;AAEpB,QAAA,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;;AAEf,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC5B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvB,QAAA,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAEnD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACjC,KAAK,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EACxC;AACI,YAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AACvB,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC1B,YAAA,KAAK,IAAI,GAAG,IAAI,MAAM,EACtB;AACI,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACvB,KAAK,IAAI,EAAE,IAAI,GAAG;AACd,oBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;aAC9B;SACJ;QAED,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AACpC,QAAA,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,WAAW;AAC7B,YAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAEjC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAE7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;AACzC,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,gBAAgB;AAChC,YAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAE3B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAE5B,QAAA,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AACxD,QAAA,2BAA2B,CAAC,IAAI,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AAExD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxC,KAAK,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAC3C;AACI,YAAA,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;AACf,YAAA,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;SACxB;QAED,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AACvC,QAAA,KAAK,IAAI,EAAE,IAAI,IAAI,CAAC,cAAc;AAC9B,YAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAE3B,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC;AAC7C,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AACvC,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACnD,QAAA,KAAK,IAAI,CAAC,IAAI,WAAW,CAAC,mBAAmB,EAC7C;AACI,YAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACjB;;QAGD;AACI,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC5B,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC;AAC9C,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClB,YAAA,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,qBAAqB,EAC3C;AACI,gBAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;aAC1B;SACJ;KACJ;CACJ,CAAA;AAp3De,UAAA,CAAA;IAAX,UAAU;AAAmC,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,kBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAElC,UAAA,CAAA;IAAX,UAAU;AAAiC,CAAA,EAAA,KAAA,CAAA,SAAA,EAAA,gBAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAnBnC,KAAK,GAAA,OAAA,GAAA,UAAA,CAAA;IADjB,OAAO;AACK,CAAA,EAAA,KAAK,CAq4DjB,CAAA;AAED;AACA,SAAS,wBAAwB,CAAC,KAAY,EAAE,KAAY,EAAE,WAAoB,EAAA;AAE9E,IAAA,IAAI,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC;AACjC,IAAA,IAAI,OAAO,GAAG,KAAK,CAAC,YAAY,CAAC;IAEjC,IAAI,QAAQ,GAAa,EAAE,CAAC;;IAG5B,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;AAE3C,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,EACzC;AACI,QAAA,IAAI,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAEzD,IAAI,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,IAAI,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC1C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;KACrC;AAED,IAAA,OAAO,QAAQ,CAAC;AACpB;;ACx5DA;AACgB,SAAA,aAAa,CAAC,EAAgB,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,EAAA;AAElF,IAAA,KAAK,GAAG,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC;IAC/B,IAAI,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAEpD,IAAA,IAAI,SAAS,GAAG,EAAE,CAAC,SAAS,CAAC;AAE7B,IAAA,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC;AACzB,IAAA,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAE/C,IAAA,IAAI,GAAG,GAAG,IAAIsB,oBAAc,EAAE,CAAC;IAC/B,IAAI,MAAM,GAAa,EAAE,CAAC;IAC1B,IAAI,UAAU,GAAa,EAAE,CAAC;AAE9B,IAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EACjB;AACI,QAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,QAAQ,CAAC;YACX,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;KACzD;IACD,KAAK,IAAI,CAAC,IAAI,GAAG;AACb,QAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAErC,IAAA,IAAI,OAAO,GAAG,IAAIA,oBAAc,EAAE,CAAC;AACnC,IAAA,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,IAAIyB,4BAAsB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5E,IAAA,GAAG,CAAC,YAAY,CAAC,UAAU,EAAE,IAAIA,4BAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAEpE,IAAI,IAAI,GAAG,IAAIhB,UAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACnC,IAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IAEjC,IAAI,IAAI,GAAG,IAAIY,kBAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC/C,IAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;AAEjC,IAAA,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAE1B,IAAA,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;AAEvB,IAAA,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG;AACvB,QAAA,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,EACxB;AACI,YAAA,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AAC9C,YAAA,IAAI,KAAK,GAAG,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9C,YAAA,KAAK,IAAI,CAAC,IAAI,KAAK,EACnB;AACI,gBAAA,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAClB,gBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAClB;SACJ;AAEL,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC;SAEe,8BAA8B,CAAC,KAAa,EAAE,EAAU,EAAE,EAAU,EAAE,QAAQ,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,SAAmB,EAAE,EAAA;AAEpI,IAAA,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C,IAAA,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,KAAK;AACxB,QAAA,IAAI,CAAC,IAAI,CAAE,IAAe,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;IAE5D,KAAK,IAAI,GAAG,IAAI,IAAI;AAChB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;AACI,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACf,YAAA,IAAI,KAAK,GAAG,GAAG,CAACjC,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;;YAEtC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;;YAEhD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAEhD,YAAA,IAAI,CAAC,CAAC,QAAQ,CAAC;gBACX,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SAC/C;AAEL,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,IAAI,KAAK,GAAG,IAAIb,aAAO,CAAC;AACxB;AACM,SAAU,uBAAuB,CAAC,GAAiB,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,MAAmB,GAAA,EAAE,EAAE,GAAA,GAAe,SAAS,EAAA;AAE9I,IAAA,KAAK,GAAG,KAAK,IAAI,GAAG,CAAC,UAAU,CAAC;AAEhC,IAAA,IAAI,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;AAE9B,IAAA,IAAI,EAAE,GAAG,GAAG,CAAC,YAAY,CAAC;AAC1B,IAAA,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAE/C,IAAA,IAAI,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAEnC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;AACI,QAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACf,QAAA,IAAI,KAAK,GAAG,GAAG,CAACa,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;;QAEtC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;QAE9C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAE9D,QAAA,IAAI,CAAC,CAAC,QAAQ,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;KACrD;AAED,IAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,GAAG,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC;AAE/F,IAAA,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAC1B;AACI,QAAA,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AAC9B,QAAA,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EACvC;AACI,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACd,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACd,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEd,YAAA,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,YAAA,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AACtB,YAAA,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACpB,YAAA,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACpB,YAAA,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;SACvB;KACJ;IAED,IAAI,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC;IAC3D,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC;AAClC,IAAA,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,EACzB;QACI,uBAAuB,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;KACtG;AAED,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC;SAEe,cAAc,CAAC,EAAe,EAAE,KAAK,GAAG,CAAC,EAAA;AAErD,IAAA,KAAK,GAAG,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC;IAC/B,IAAI,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAEpD,IAAA,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;AAEvB,IAAA,IAAI,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC;IACzB,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAEhC,IAAA,IAAI,GAAG,GAAG,IAAIY,oBAAc,EAAE,CAAC;IAC/B,IAAI,MAAM,GAAa,EAAE,CAAC;IAC1B,IAAI,UAAU,GAAa,EAAE,CAAC;AAE9B,IAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EACjB;AACI,QAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,QAAQ,CAAC;YACX,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;KACtD;IACD,KAAK,IAAI,CAAC,IAAI,GAAG;AACb,QAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAElC,IAAA,IAAI,OAAO,GAAG,IAAIA,oBAAc,EAAE,CAAC;AACnC,IAAA,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,IAAIyB,4BAAsB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5E,IAAA,GAAG,CAAC,YAAY,CAAC,UAAU,EAAE,IAAIA,4BAAsB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAEpE,IAAI,IAAI,GAAG,IAAIhB,UAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACnC,IAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAE1B,IAAI,IAAI,GAAG,IAAIY,kBAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC/C,IAAA,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAE1B,IAAA,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAE1B,IAAA,OAAO,MAAM,CAAC;AAClB;;AClQA;AACgB,SAAA,2BAA2B,CAAC,aAA0B,EAAE,MAAc,EAAA;IAElF,IAAI,GAAG,GAAc,EAAE,CAAC;IACxB,KAAK,IAAI,EAAE,IAAI,aAAa;QACxB5B,gBAAc,CAAC,GAAG,EAAE,iCAAiC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACvE,IAAI,GAAG,GAAG,IAAIO,oBAAc,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAClD,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAED;AACA,SAAS,iCAAiC,CAAC,aAAwB,EAAE,MAAc,EAAA;AAE/E,IAAA,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;AAAE,QAAA,OAAO,EAAE,CAAC;IACxC,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;QACnD,aAAa,CAAC,GAAG,EAAE,CAAC;IACxB,IAAI,GAAG,GAAc,EAAE,CAAC;IACxB,IAAI,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,IAAIzB,aAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AACjE,IAAA,IAAI,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC;AACjC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAC9B;QACI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,CAACa,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAACA,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KACvI;AACD,IAAA,OAAO,GAAG,CAAC;AACf;;ACAO,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,IAAI,CAAA;AAA9B,IAAA,WAAA,GAAA;;AAEK,QAAA,IAAA,CAAA,aAAa,GAAwB,IAAIwB,gBAAQ,EAAE,CAAC;QAElD,IAAY,CAAA,YAAA,GAAW,CAAC,CAAC;QACvB,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC;QACd,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;KA+djC;AA7dG,IAAA,IAAI,WAAW,GAAA;QAEX,OAAO,IAAI,CAAC,YAAY,CAAC;KAC5B;IACD,IAAI,WAAW,CAAC,CAAS,EAAA;QAErB,IAAI,CAAC3B,QAAM,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,EACjC;YACI,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,YAAA,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;SACzB;KACJ;IACD,OAAO,GAAA;AAEH,QAAA,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;KAC5D;AACD,IAAA,IAAI,YAAY,GAAA;QAEZ,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IAED,IAAI,YAAY,CAAC,KAA0B,EAAA;QAEvC,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO;AAE3B,QAAA,IAAI,KAAK,YAAY2B,gBAAQ,EAC7B;AACI,YAAA,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;AACvB,YAAA,IAAI,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC;AACzB,YAAA,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACrC,GAAG,CAAC,GAAG,EAAE,CAAC;;AAGd,YAAA,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;AACpB,YAAA,IAAI,CAAC3B,QAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aAC/B;gBACI,KAAK,IAAI,CAAC,IAAI,GAAG;AACb,oBAAA,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACnC,gBAAA,KAAK,CAAC,GAAG,GAAG,IAAIT,aAAO,EAAE,CAAC;aAC7B;YACD,KAAK,CAAC,SAAS,EAAE,CAAC;SACrB;QAED,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;IACD,iBAAiB,GAAA;AAEb,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC;;QAGzC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,EAC9B;YACI,IAAI,CAAC,aAAa,CAAC,QAAQ;gBACvB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE7C,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5D,YAAA,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;SAClD;KACJ;IACD,KAAK,CAAC,UAAmB,IAAI,EAAA;AAEzB,QAAA,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO;YAAE,OAAO;AACrC,QAAA,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,IAAI,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAC7D;AACI,YAAA,IAAI,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAc,CAAC;AAC/C,YAAA,EAAE,CAAC,SAAS,GAAG,KAAK,CAAC;AACrB,YAAA,EAAE,CAAC,iBAAiB,GAAG,IAAI,CAAC;SAC/B;KACJ;AACS,IAAA,gBAAgB,CAAC,CAAU,EAAA;QAEjC,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;AAC3B,QAAA,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,QAAA,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAClB,QAAA,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,mBAAmB,CACf,QAAwB,EACxB,SAAkB,EAClB,SAAkB,EAClB,SAAmB,EAAA;QAGnB,QAAQ,QAAQ;YAEZ,KAAK,cAAc,CAAC,GAAG;AACnB,gBAAA,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACnC,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG,CAAC;YACxB,KAAK,cAAc,CAAC,GAAG;gBACnB;oBACI,IAAI,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;AACxC,oBAAA,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,oBAAA,IAAI,GAAG,GAAG,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;oBAEjF,OAAO,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AACjF,oBAAA,GAAG,CAAC,IAAI,CACJ,GAAG,OAAO,CAAC,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAC5E,CAAC;AACF,oBAAA,IAAI,QAAQ,KAAK,cAAc,CAAC,GAAG;AAC/B,wBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1G,oBAAA,OAAO,GAAG,CAAC;iBACd;SAGR;AACD,QAAA,OAAO,EAAE,CAAC;KACb;AACD,IAAA,IAAI,KAAK,GAAA;AAEL,QAAA,IAAI,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;AAEtE,QAAA,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;KAC7B;AACD,IAAA,IAAI,gBAAgB,GAAA;AAEhB,QAAA,IAAI,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AAC5D,QAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAID,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5C,QAAA,OAAO,GAAG,CAAC;KACd;AACD,IAAA,IAAI,WAAW,GAAA;AAEX,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;AACxC,QAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAIA,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC5C,QAAA,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAClC,QAAA,OAAO,GAAG,CAAC;KACd;AACD,IAAA,IAAI,YAAY,GAAA;QAEZ,IAAI,IAAI,CAAC,aAAa;YAClB,OAAO,IAAI,CAAC,aAAa,CAAC;AAE9B,QAAA,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,aAAa,GAAG,2BAA2B,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC/G,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;AAED,IAAA,IAAI,YAAY,GAAA;QAEZ,IAAI,IAAI,CAAC,aAAa;YAClB,OAAO,IAAI,CAAC,aAAa,CAAC;AAE9B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC,aAAa,CAAC;KAC7B;IACO,mBAAmB,GAAA;AAEvB,QAAA,IAAI,eAAe,GAA2B;AAC1C,YAAA,aAAa,EAAE,CAAC;AAChB,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,YAAY,EAAE,KAAK;YACnB,KAAK,EAAE,IAAI,CAAC,MAAM;SACrB,CAAC;AACF,QAAA,IAAI,GAAG,GAAG,IAAI2D,qBAAe,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;QACxE,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AAEhD,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAgC,IAAI,IAAI,CAAC,EAAE,EAAE,eAAe,CAAC;AACtF,QAAA,IAAI,GAAG,EAAE,UAAU,EACnB;YACI,IAAI,IAAI,GAAG,IAAIlC,oBAAc,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;AAClD,YAAA,IAAI,GAAG,GAAG,IAAI,aAAa,EAAE,CAAC;YAC9B,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;AACjC,YAAA,OAAO,IAAI,CAAC;SACf;;YAEG,OAAO,CAAC,GAAG,CAAC,CAAC;AACjB,QAAA,OAAO,GAAG,CAAC;KACd;AACD,IAAA,sBAAsB,CAAC,QAAuB,EAAA;AAE1C,QAAA,IAAI,MAAM,GAAG,QAAQ,KAAK,aAAa,CAAC,IAAI,CAAC;QAE7C,IAAI,GAAG,GAAG,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;AAC5F,QAAA,IAAI,CAAC,GAAG,IAAIzB,aAAO,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACvC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,QAAA,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;AAEvD,QAAA,OAAO,GAAG,CAAC;KACd;AACO,IAAA,yBAAyB,CAAC,QAAuB,EAAA;QAErD,OAAO,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KAC5D;AACD,IAAA,uBAAuB,CAAC,SAAmB,EAAE,GAAY,EAAE,QAAuB,EAAA;QAE9E,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,QAAQ,KAAK,aAAa,CAAC,OAAO,IAAI,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,EACvG;YACI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACvC,OAAO;SACV;QACDgB,mBAAiB,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,2BAA2B,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,EAAE,CAAC;KACjB;AACD,IAAA,eAAe,CAAC,MAAgB,EAAA;QAE5B,IAAI,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC;AACxD,QAAA,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAC3B;YACI,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAC5B,YAAA,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;SACjD;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AACD,IAAA,2BAA2B,CAAC,SAAwB,EAAE,GAAY,EAAE,QAAuB,EAAA;QAEvF,IAAI,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAEjE,QAAA,IAAI,QAAQ,KAAK,aAAa,CAAC,OAAO,EACtC;;YAEI,IAAI,SAAS,CAAC,MAAM,KAAK,YAAY,GAAG,CAAC,EACzC;gBACI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACvC,OAAO;aACV;;AAGD,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,EACnC;gBACI,IAAI,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC;AAE1C,gBAAA,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,OAAO,CAAC,EACtD;;AAEI,oBAAA,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;oBACtE,IAAI,OAAO,EACX;AACI,wBAAA,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC;;AAEtB,wBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBAC3C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACjC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wBACjC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACpC;yBAED;AACI,wBAAA,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC;qBACzB;oBACD,OAAO;iBACV;aACJ;AAED,YAAA,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;SACrC;;AAGD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EACzC;AACI,YAAA,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AACzB,YAAA,IAAI,KAAK,IAAI,YAAY,EACzB;gBACI,KAAK,IAAI,YAAY,CAAC;AACtB,gBAAA,SAAS,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;aACxB;SACJ;QAED,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AAEpC,QAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;AAE1E,QAAA,IAAI,QAAQ,KAAK,aAAa,CAAC,IAAI,EACnC;AACI,YAAA,IAAI,IAAI,CAAC,YAAY,YAAYqB,gBAAQ;mBAClC,SAAS,CAAC,MAAM,KAAK,CAAC;mBACtB,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAC7B;gBACI,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC7B,gBAAA,IAAI,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EACzD;AACI,oBAAA,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;AAC7D,oBAAA,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACjC,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;oBAC1B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;iBACxC;aACJ;YACD,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;SACzD;;YAEG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;KAChE;IACD,aAAa,GAAA;QAET,OAAO,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KAC1D;IACD,gBAAgB,GAAA;QAEZ,OAAO,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;KAC7D;IACD,cAAc,CAAC,SAAmB,EAAE,GAAY,EAAA;QAE5C,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;KACpE;IACD,iBAAiB,CAAC,SAAwB,EAAE,GAAY,EAAA;QAEpD,IAAI,CAAC,uBAAuB,CAAC,SAAS,EAAE,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;KACvE;IACD,oBAAoB,GAAA;AAEhB,QAAA,IAAI,CAAC,GAAG,IAAI,YAAY,EAAE,CAAC;AAC3B,QAAA,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;AACjC,QAAA,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AACrC,QAAA,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;AAC1B,QAAA,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/B,QAAA,OAAO,CAAC,CAAC;KACZ;IACD,gBAAgB,GAAA;AAEZ,QAAA,IAAI,QAAQ,GAAG,IAAIR,yBAAY,EAAE,CAAC;AAClC,QAAA,IAAI,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjF,IAAI,cAAc,GAAG,IAAIuB,gCAA0B,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACxE,QAAA,QAAQ,CAAC,YAAY,CAAC,eAAe,EAAE,IAAIC,gCAA0B,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC7F,QAAA,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,IAAIA,gCAA0B,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3F,IAAI,IAAI,GAAG,IAAIvB,WAAK,CAAC,QAAQ,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;AAC/D,QAAA,IAAI,IAAI,GAAG,IAAIiB,UAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,0BAA0B,EAAE,CAAC,CAAC;AACnF,QAAA,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACvB;AACD,IAAA,cAAc,CAAC,UAAA,GAAyB,UAAU,CAAC,SAAS,EAAA;AAExD,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,IAAI,UAAU,KAAK,UAAU,CAAC,IAAI,EACzE;AACI,YAAA,OAAO,IAAID,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;SAC9F;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,UAAU,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,EACpF;AACI,YAAA,OAAO,IAAInC,cAAQ,EAAE,CAAC,GAAG,CACrB,IAAIoC,UAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EACjF,IAAID,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CACxE,CAAC;SACL;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,QAAQ,EAC3C;AACI,YAAA,IAAI,IAAI,GAAG,IAAIC,UAAI,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;SACf;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,GAAG,EACtC;AACI,YAAA,OAAO,IAAIpC,cAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;SACtD;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,KAAK,EACxC;AACI,YAAA,OAAO,IAAIA,cAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;SACzD;KACJ;IACD,gBAAgB,CAAC,UAAsB,EAAE,GAAa,EAAA;QAElD,eAAe,CAAC,GAAG,CAAC,CAAC;AAErB,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS;YACnC,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAE3B,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAC/B,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,YAAY,CAAC;AAElB,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,IAAI,UAAU,KAAK,UAAU,CAAC,IAAI,EACzE;YACI,IAAI,CAAC,GAAG,GAAmB,CAAC;AAC5B,YAAA,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;YAC/B,CAAC,CAAC,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC/D;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,KAAK,EACxC;YACI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;SACvC;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,QAAQ,EAC3C;YACI,IAAI,IAAI,GAAG,GAAW,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;AAClC,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;SACrC;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,UAAU,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,EACpF;AACI,YAAA,GAAG,CAAC,GAAG,CACH,IAAIoC,UAAI,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EACjF,IAAID,kBAAY,CAAC,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CACxE,CAAC;SACL;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,GAAG;YAClC,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;AAErC,QAAA,OAAO,GAAG,CAAC;KACd;IACD,wBAAwB,CAAC,UAAsB,EAAE,GAAa,EAAA;AAE1D,QAAA,IAAI,UAAU,KAAK,UAAU,CAAC,SAAS,IAAI,UAAU,KAAK,UAAU,CAAC,IAAI,EACzE;YACI,IAAI,CAAC,GAAG,GAAmB,CAAC;YAC5B,CAAC,CAAC,QAAQ,GAAG,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC/D;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,QAAQ,EAC3C;YACI,IAAI,IAAI,GAAG,GAAW,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;SACrC;AACI,aAAA,IAAI,UAAU,KAAK,UAAU,CAAC,GAAG,IAAI,UAAU,KAAK,UAAU,CAAC,KAAK,EACzE;YACI,IAAI,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAS,CAAC;YACnC,IAAI,CAAC,QAAQ,GAAG,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SACxE;KACJ;IAED,SAAS,GAAA;QAEL,IAAI,IAAI,CAAC,aAAa;AAClB,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,IAAI,CAAC,aAAa;AAClB,YAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;AAC/B,QAAA,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC;KAC5B;AAED,IAAA,IAAI,GAAG,GAAA;QAEH,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI9C,aAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAChF,QAAA,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;KACtD;AACD,IAAA,QAAQ,CAAC,IAAc,EAAA;AAEnB,QAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrB,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AACtB,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,EAAyB,CAAC;AAC9D,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAChC,QAAA,IAAI,GAAG,GAAG,CAAC,EACX;AACI,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;SAC7B;QACD,IAAI,GAAG,GAAG,CAAC;AACP,YAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAEjC,IAAI,GAAG,GAAG,CAAC;AACP,YAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;;AAExB,YAAA,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC;;AAGlC,QAAA,IAAI,GAAG,GAAG,CAAC,EACX;AACI,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE;gBAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;SAC/B;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,CAAC,CAAC,CAAC;AACd,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACrC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;AAGtB,QAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACjB;CACJ,CAAA;AAhee,UAAA,CAAA;IAAX,UAAU;AAAe,CAAA,EAAA,WAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AACd,UAAA,CAAA;IAAX,UAAU;AAAmB,CAAA,EAAA,WAAA,CAAA,SAAA,EAAA,WAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AANrB,WAAW,GAAA,UAAA,CAAA;IADvB,OAAO;AACK,CAAA,EAAA,WAAW,CAqevB;;ACvfD;;;;;;AAMG;SACa,gBAAgB,CAAC,SAAkB,EAAE,WAAkB,EAAE,GAAW,EAAA;;AAGhF,IAAA,IAAI,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;IAEhC,IAAI,MAAM,GAAe,EAAE,CAAC;IAC5B,IAAI,UAAU,GAAY,EAAE,CAAC;AAC7B,IAAA,KAAK,IAAI,EAAE,IAAI,SAAS,EACxB;AACI,QAAA,IAAI,CAAC,EAAE,CAAC,OAAO,EACf;AACI,YAAA,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACpB,SAAS;SACZ;AACD,QAAA,IAAI,EAAE,YAAYqC,gBAAQ,EAC1B;;;AAGI,YAAA,IAAI,EAAE,CAAC,OAAO,EACd;gBACI,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC;oBACtD,EAAE,CAAC,OAAO,EAAE,CAAC;aACpB;AACD,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACnB;AACI,aAAA,IAAI,EAAE,YAAYD,cAAM,EAC7B;AACI,YAAA,IAAI,CAAC,GAAGO,wBAAsB,CAAC,EAAE,CAAC,CAAC;YACnC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC;gBAC3C,CAAC,CAAC,OAAO,EAAE,CAAC;AAChB,YAAA,CAAC,CAAC,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC;AAC7B,YAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAClB;;AAEG,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC5B;AAED,IAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EACzB;QACI,IAAI,MAAM,GAAY,EAAE,CAAC;AACzB,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,IAAG;YAEnB,IAAI,CAAC,YAAYN,gBAAQ;gBACrB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAa,CAAC,CAAC;;AAEvC,gBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACvB,SAAC,CAAC,CAAC;;QAEH,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAC1B,QAAA,IAAI,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AACpC,QAAA,KAAK,IAAI,CAAC,IAAI,MAAM,EACpB;YACI,IAAI,EAAE,GAAGA,gBAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC7B,EAAE,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;AACzC,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SACnB;KACJ;AACD,IAAA,IAAI,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;AACnC,IAAA,IAAI,UAAU,GAAY,CAAC,OAAO,CAAC,CAAC;AACpC,IAAA,UAAU,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;;AAGxD,IAAA,KAAK,IAAI,CAAC,IAAI,WAAW,CAAC,KAAK,EAC/B;AACI,QAAA,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,CAAC,KAAK,YAAYD,cAAM;YACzB,GAAG,GAAG,CAAC,CAAC;AACZ,QAAA,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;KACpE;;IAGD,mBAAmB,CAAC,MAAM,CAAC,CAAC;;IAE5B,eAAe,CAAC,MAAM,CAAC,CAAC;IAExB,IAAI,MAAM,GAAe,EAAE,CAAC;AAC5B,IAAA,IAAI,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB,IAAA,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;AAE1B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EACtC;AACI,QAAA,IAAI,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAI,SAAkB,CAAC;QACvB,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;YAChE,SAAS,GAAG,IAAI,CAAC;aAErB;AACI,YAAA,IAAI,OAAO,GAAG,IAAIF,YAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAClD,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;SAC5E;QAED,IAAI,SAAS,EACb;AACI,YAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACrB,YAAA,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACpB,YAAA,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC;SAC7B;aAED;AACI,YAAA,IAAI,KAAK,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YAC5D,IAAI,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AAEjC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAC5C;;gBAEI,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACxB,gBAAA,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;aAC3D;SACJ;KACJ;AACD,IAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAErB,KAAK,IAAI,EAAE,IAAI,MAAM;AACjB,QAAA,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAE7B,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;AAIE;AACF,SAAS,mBAAmB,CAAC,MAAkB,EAAA;AAE3C,IAAA,IAAI,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB,IAAA,IAAI,OAAO,CAAC,OAAO,EACnB;QACI,IAAI,IAAI,GAAG,SAAS,CAAC;AACrB,QAAA,IAAI,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC3C,KAAK,IAAI,CAAC,IAAI,OAAO,CAAC,gBAAgB,EAAE,EACxC;AACI,YAAA,IAAI,CAAC,IAAI;gBACL,IAAI,GAAG,CAAC,CAAC;AAET,iBAAA,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;gBACtB,IAAI,GAAG,CAAC,CAAC;SACpB;QACD,IAAI,GAAG,GAAG,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACxC,QAAA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;KAChC;AAED,IAAA,IAAI,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;AAElC,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EACtC;AACI,QAAA,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAEnB,QAAA,IAAI,EAAE,CAAC,OAAO,EACd;AACI,YAAA,IAAI,GAAG,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,KAAI;gBAE5C,IAAI,KAAK,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBAC3C,IAAI,KAAK,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBAE3C,OAAO,KAAK,GAAG,KAAK,CAAC;AACzB,aAAC,CAAC,CAAC;YACH,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,YAAA,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;SAC3B;aAED;AACI,YAAA,IAAI,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC;AACxB,YAAA,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC;YACtB,IAAI,KAAK,GAAG,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,KAAK,GAAG,GAAG,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC5C,IAAI,KAAK,GAAG,KAAK;gBACb,EAAE,CAAC,OAAO,EAAE,CAAC;SACpB;KACJ;AACL,CAAC;AAED;;AAEG;AACH,SAAS,eAAe,CAAC,GAAe,EAAA;AAEpC,IAAA,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;AAAE,QAAA,OAAO,GAAG,CAAC;IAEhC,IAAI,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,IAAA,IAAI,MAAM,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;IAC1B,OAAO,IAAI,EACX;AACI,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM;YAC5B,MAAM;AAEV,QAAA,IAAI,OAAiB,CAAC;QACtB,IAAI,OAAO,GAAW,QAAQ,CAAC;AAC/B,QAAA,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;AACI,YAAA,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBACd,SAAS;YACb,IAAI,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;AAC9C,YAAA,IAAI,IAAI,GAAG,OAAO,EAClB;gBACI,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,GAAG,EAAE,CAAC;aAChB;SACJ;AACD,QAAA,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;AACvB,QAAA,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACrB,QAAA,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;KACvB;AACD,IAAA,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;AACf,IAAA,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAY,EAAA;AAEnC,IAAA,IAAI,eAAe,GAAe,IAAI,GAAG,EAAE,CAAC;AAC5C,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;AACI,QAAA,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACjB,QAAA,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;AACvC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACvC;AACI,YAAA,IAAI,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACjB,YAAA,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAS;AACvC,YAAA,IAAI,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EACxB;AACI,gBAAA,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aAC5B;SACJ;KACJ;AACD,IAAA,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;SACgB,eAAe,CAAC,EAAS,EAAE,IAAY,EAAE,QAAoB,EAAA;AAEzE,IAAA,IAAI,EAAE,YAAYG,gBAAQ,EAC1B;QACI,IAAI,QAAQ,EACZ;AACI,YAAA,IAAI,CAAC,GAAG,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;SACvB;QACD,OAAO,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC3B,QAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;KAC9E;;AAEG,QAAA,OAAO,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED;AACM,SAAU,eAAe,CAAC,EAAS,EAAA;AAErC,IAAA,OAAO,EAAE,CAAC,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACnC,CAAC;AAED;SACgB,UAAU,CAAC,IAAc,EAAE,QAAmB,EAAE,IAAY,EAAA;IAExE,IAAI,CAAC,QAAQ,IAAIA,QAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAAE,OAAO;AAEzC,IAAA,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;AACvB,IAAA,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IACzB,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;IAC1B,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;AAE1B,IAAA,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;QAAE,OAAO;AAEvD,IAAA,IAAIA,QAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAClC;AACI,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;AACtC,QAAA,IAAI,GAAG,GAAG,IAAIV,aAAO,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3C,QAAA,IAAI,GAAG,GAAG,IAAIA,aAAO,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3C,QAAA,OAAO,IAAIqC,gBAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KACnH;AACI,SAAA,IAAI3B,QAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EACvC;AACI,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC;AACtC,QAAA,IAAI,GAAG,GAAG,IAAIV,aAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAI,GAAG,GAAG,IAAIA,aAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3C,QAAA,OAAO,IAAIqC,gBAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KACnH;SAED;QACI,GAAG,CAAC,GAAG,CAAC,IAAIrC,aAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACjC,QAAA,GAAG,CAAC,GAAG,CAAC,IAAIA,aAAO,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,QAAA,OAAO,IAAIqC,gBAAQ,EAAE,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;KAC9E;AACL;;ACnRA;;AAEG;AACG,MAAO,eAAgB,SAAQ,SAAS,CAAA;AAE1C;;;;;AAKG;IACK,WAAW,CAAC,KAAY,EAAE,UAAkB,EAAE,KAAc,EAAE,cAAc,GAAG,CAAC,EAAA;AAEpF,QAAA,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,KAAK;AACL,YAAA,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;AAE9B,QAAA,IAAI,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;AAEnC,QAAA,IAAI,SAAS,GAAY,CAAC,OAAO,CAAC,CAAC;;QAEnC,IAAI,KAAK,GAAc,EAAE,CAAC;;QAE1B,IAAI,aAAa,GAAY,EAAE,CAAC;AAEhC,QAAA,KAAK,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,EACzB;AACI,YAAA,IAAI,CAAC,KAAK;gBACN,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;iBAE1B;gBACI,IAAI,GAAG,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACpC,gBAAA,IAAI,GAAY,CAAC;AACjB,gBAAA,IAAI,CAAC,CAAC,KAAK,YAAYD,cAAM;oBACzB,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;;oBAEhD,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC;gBAEvD,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAExF,gBAAA,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,GAAiB,EAAE,SAAS,CAAC,CAAC,CAAC;aACjE;SACJ;QAED,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,QAAA,IAAI,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAE/B,OAAO,IAAI,EACX;YAEI,IAAI,CAAC,CAAC,KAAK,IAAI,UAAU,IAAI,UAAU,KAAK,QAAQ,EACpD;AAEI,gBAAA,UAAU,IAAI,UAAU,GAAG,CAAC,GAAG,cAAc,CAAC;aACjD;;gBAEG,UAAU,IAAI,UAAU,CAAC;;;YAI7B,IAAI,UAAU,GAAG,IAAI;AACjB,gBAAA,MAAM,2BAA2B,CAAC;YAEtC,IAAI,MAAM,GAAY,EAAE,CAAC;AAEzB,YAAA,IAAI,aAAa,GAAG,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG,GAAG,EAAE,QAAQ,CAAC,CAAC;AACzE,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;;AAG9B,YAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,IAAI,UAAU,GAAG,UAAU,EAC9D;gBACI,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;;gBAEzE,IAAI,CAAC1B,QAAM,CAAC,UAAU,EAAE,iBAAiB,EAAE,IAAI,CAAC,IAAI,UAAU,GAAG,iBAAiB,GAAG,IAAI,GAAG,UAAU,GAAG,cAAc,GAAG,CAAC,EAC3H;AACI,oBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;iBAC/E;aACJ;AAED,YAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM;;YAG/B,IAAI,KAAK,GAAG,KAAK,CAAC;AAClB,YAAA,KAAK,IAAI,CAAC,IAAI,MAAM,EACpB;AACI,gBAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EACpB;AACI,oBAAA,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAG;AAEnB,wBAAA,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxC,wBAAA,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC/D,qBAAC,CAAC,CAAC;AAEH,oBAAA,IAAI,KAAK;wBAAE,MAAM;iBACpB;AACD,gBAAA,IAAI,KAAK,IAAI,UAAU,KAAK,UAAU;oBAClC,CAAC,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACjC,gBAAA,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACrB;YACD,IAAI,KAAK,EACT;;AAEI,gBAAA,IAAI,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;AACjC,gBAAA,IAAI,KAAK;oBACL,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC9C,gBAAA,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,gBAAA,IAAI,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;gBACjC,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAoB,EAAE,SAAS,CAAC,CAAC;AAC7D,gBAAA,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;;;;;gBAQrD,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE8B,yBAAiB,CAAC,QAAQ,CAAC,CAAC;;;AAKtD,gBAAA,KAAK,IAAI,CAAC,IAAI,OAAO,CAAC,SAAS,EAC/B;AACI,oBAAA,IAAI,KAAK,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;AACjC,wBAAA,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AAC/C,oBAAA,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;iBAC7D;gBACD,MAAM;aACT;SACJ;QAED,IAAI,SAAS,GAAc,EAAE,CAAC;;QAG9B,IAAI,sBAAsB,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAY,CAAC;QAC1G,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,sBAAsB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAErE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EACrC;AACI,YAAA,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;;AAEjB,YAAA,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC;gBAC5C,SAAS;YACb,IAAI,MAAM,GAAG,IAAI,CAAC;;YAElB,IAAI,KAAK,EACT;gBACI,IAAI,eAAe,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AACvC,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,EACtD;AACI,oBAAA,IAAI,wBAAwB,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC;AACzD,oBAAA,IAAI,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EACjE;AACI,wBAAA,IAAI,EAAE,UAAU,CAAC,eAAe,EAAE,wBAAwB,CAAC,IAAI,0BAA0B,CAAC,wBAAoC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EACzI;4BACI,MAAM,GAAG,KAAK,CAAC;4BACf,MAAM;yBACT;6BACI,IAAI,0BAA0B,CAAC,CAAC,CAAC,KAAK,EAAE,wBAAoC,CAAC,EAClF;AACI,4BAAA,SAAS,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;4BACzC,MAAM,GAAG,KAAK,CAAC;4BACf,MAAM;yBACT;qBACJ;AACI,yBAAA,IAAI,eAAe,CAAC,IAAI,GAAG,OAAO,EACvC;wBACI,MAAM,GAAG,KAAK,CAAC;wBACf,MAAM;qBACT;iBACJ;aACJ;AACD,YAAA,IAAI,MAAM;AACN,gBAAA,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACzB;AAED,QAAA,SAAS,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/C,QAAA,OAAO,SAAS,CAAC;KACpB;;IAGD,YAAY,CAAC,EAAS,EAAE,IAAI,GAAG,KAAK,EAAE,EAAE,GAAG,CAAC,EAAA;AAExC,QAAA,IAAI,SAAS,GAAG,EAAE,CAAC,aAAa,CAAC;AACjC,QAAA,IAAI,WAAW,GAAG,0BAA0B,CAAC,EAAE,CAAC,CAAC;QACjD,SAAS,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AACxC,QAAA,IAAI,IAAI,IAAI,uBAAuB,CAAC,aAAa,CAAC,aAAa;AAC3D,YAAA,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,GAAG,uBAAuB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AACzF,QAAA,IAAI,IAAI;AACJ,YAAA,aAAa,CAAC,SAAS,EAAE,CAAC,IAAG;gBAEzB,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBAC9B,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,YAAYJ,cAAM,IAAI,CAAC,CAAC,MAAM,GAAG,uBAAuB,CAAC,aAAa,CAAC,gBAAgB,GAAG,IAAI;AAC7H,oBAAA,OAAO,IAAI,CAAC;AAChB,gBAAA,OAAO,KAAK,CAAC;AACjB,aAAC,CAAC,CAAC;QAEP,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;KAC3C;AAED;;AAEG;AACH,IAAA,QAAQ,CAAC,SAAsB,EAAE,EAAS,EAAE,EAAE,GAAG,CAAC,EAAA;QAE9C,IAAI,GAAG,GAAY,EAAE,CAAC;AACtB,QAAA,KAAK,IAAI,CAAC,IAAI,SAAS,EACvB;AACI,YAAA,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SACjD;AACD,QAAA,OAAO,GAAG,CAAC;KACd;;AAGD,IAAA,gBAAgB,CAAC,EAA6D,EAAE,QAAmB,EAAE,cAAc,GAAG,CAAC,EAAA;AAEnH,QAAA,MAAM,WAAW,GAAG,EAAE,CAAC,SAAS,CAAC;AACjC,QAAA,IAAI,GAAG,GAAY,EAAE,CAAC;AACtB,QAAA,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;AAC7E,QAAA,IAAI,CAAC,WAAW;YAAE,WAAW,GAAG,CAAC,CAAC;AAClC,QAAA,IAAI,QAAQ;YACR,SAAS,IAAI,QAAQ,CAAC;QAC1B,IAAI,SAAS,GAAG,IAAI;AAAE,YAAA,OAAO,GAAG,CAAC;AACjC,QAAA,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,KAAK,CAAC,EAAE,EAAE,CAAC;QACX,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5C,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;;AAG7D,QAAA,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAClC,QAAA,IAAI,OAAO,YAAYA,cAAM,IAAI1B,QAAM,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,WAAW,CAAC;AACzE,YAAA,OAAO,CAAC,IAAI2B,gBAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAElH,QAAA,IAAI,SAAS,IAAI,WAAW;SAC5B;AACI,YAAA,IAAI,GAAG,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;AACnC,YAAA,IAAI,KAAc,CAAC;YACnB,IAAI,OAAO,YAAYD,cAAM;AACzB,gBAAA,OAAO,GAAGO,wBAAsB,CAAC,OAAO,CAAC,CAAC;YAE9C,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC;AACtD,YAAA,KAAK,IAAI,IAAI,IAAI,KAAK,EACtB;gBACI,IAAI,GAAG,GAAG,CAAC;oBACP,IAAI,CAAC,OAAO,EAAE,CAAC;;;;aAKtB;AACD,YAAA,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;SACtB;aAED;AACI,YAAA,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAC3E,YAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;AACpB,gBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;SACpE;AACD,QAAA,OAAO,GAAG,CAAC;KACd;AACO,IAAA,aAAa,CAAC,KAAY,EAAE,MAAc,EAAE,QAAgB,EAAA;AAEhE,QAAA,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;QAEpE,IAAI,MAAM,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC,EAC9B;YACI,IAAI,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,QAAQ,EACZ;AACI,gBAAA,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;AACvB,gBAAA,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;gBACzB,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EACnB;AACI,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI3C,aAAO,CAAC,MAAM,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;AACnD,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAIA,aAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;iBACxD;qBAED;AACI,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAIA,aAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AACnD,oBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAIA,aAAO,CAAC,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;iBACxD;gBACD,IAAI,EAAE,GAAG,IAAIqC,gBAAQ,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACrF,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;aAC7C;SACJ;KACJ;AAED;;;;;AAKG;IACK,WAAW,CAAC,GAA0B,EAAE,MAAe,EAAA;QAE3D,IAAI,IAAI,GAAc,EAAE,CAAC;AACzB,QAAA,KAAK,IAAI,CAAC,IAAI,GAAG,EACjB;AACI,YAAA,IAAI,CAAC,CAAC,OAAO,EACb;gBACI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;aACvC;iBAED;AACI,gBAAA,IAAI,MAAM,GAAG,CAAC,CAAC,OAAO,EAAa,CAAC;AACpC,gBAAA,IAAI,QAAQ,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;;AAGvC,gBAAA,MAAM,UAAU,GAAG,CAAC,QAAwB,KAAI;AAE5C,oBAAA,KAAK,IAAI,MAAM,IAAI,QAAQ,EAC3B;AACI,wBAAA,IAAI,EAAE,GAAY,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;wBAC3C,IAAI,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AACzC,wBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI;AAClB,4BAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACpB;AACL,iBAAC,CAAC;AACF,gBAAA,UAAU,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;AACpC,gBAAA,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AACrC,gBAAA,KAAK,IAAI,CAAC,IAAI,MAAM,EACpB;oBACI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAC7B;AACI,wBAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBAClB;iBACJ;aACJ;SACJ;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AAED,IAAA,aAAa,CAAC,EAAS,EAAA;QAEnB,IAAI,WAAW,GAAa,EAAE,CAAC;AAC/B,QAAA,IAAI,SAAS,GAAG,EAAE,CAAC,aAAa,CAAC;AACjC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EACzC;AACI,YAAA,IAAI,uBAAuB,CAAC,aAAa,CAAC,aAAa;gBACnD,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,uBAAuB,CAAC,aAAa,CAAC,MAAM,CAAC;AAC5E,YAAA,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,YAAYD,cAAM,IAAI,EAAE,CAAC,MAAM,GAAG,uBAAuB,CAAC,aAAa,CAAC,gBAAgB,GAAG,IAAI;gBAC/H,SAAS;YACb,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACvC,YAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAChB,gBAAA,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAC3B;AACD,QAAA,OAAO,WAAW,CAAC;KACtB;AACD,IAAA,eAAe,CAAC,EAAS,EAAA;QAErB,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,0BAA0B,CAAC,EAAE,CAAC,CAAC;QAEhE,IAAI,QAAQ,GAAkB,EAAE,CAAC;QAEjC,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,EAAE,GAAG,YAAY,CAAC,EAC5C;YACI,IAAI,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,YAAYA,cAAM,IAAI,EAAE,CAAC,MAAM,GAAG,uBAAuB,CAAC,aAAa,CAAC,gBAAgB,GAAG,IAAI;gBAC/H,SAAS;AACb,YAAA,IAAI,uBAAuB,CAAC,aAAa,CAAC,aAAa;gBACnD,CAAC,CAAC,WAAW,GAAG,uBAAuB,CAAC,aAAa,CAAC,MAAM,CAAC;YACjE,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AACvC,YAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;AAChB,gBAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;SACjC;AAED,QAAA,OAAO,QAAQ,CAAC;KACnB;;AAGD,IAAA,kBAAkB,CAAC,KAA0B,EAAE,KAAY,EAAE,WAAmB,EAAA;AAE5E,QAAA,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAClC,IAAI,OAAO,YAAYA,cAAM;YAAE,OAAO;AAEtC,QAAA,IAAI,GAAG,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;QAC5B,cAAc,CAAC,GAAG,CAAC,CAAC;QACpB,IAAI,SAAS,GAAG,KAAK,CAAC;AACtB,QAAA,IAAI,QAAe,CAAC;AAEpB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;AACI,YAAA,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AACf,YAAA,IAAI,CAAC,YAAYF,YAAI,EACrB;gBACI,IAAI,EAAE,GAAG,CAAC,QAAQ,IAAI,CAAC,EAAE,QAAQ,CAAC;gBAClC,QAAQ,GAAG,SAAS,CAAC;gBACrB,IAAI,KAAK,GAAG,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;gBAEtC,IAAI,cAAc,GAAG,KAAK,CAAC;AAC3B,gBAAA,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAC7B;;AAEI,oBAAA,IAAI,CAAC,CAAC,MAAM,GAAG,GAAG,EAClB;wBACI,IAAI,KAAK,GAAI,KAAkB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AACvD,wBAAA,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;qBACjH;;wBAEG,cAAc,GAAG,IAAI,CAAC;iBAC7B;gBAED,IAAI,cAAc,EAClB;oBACI,SAAS,GAAG,IAAI,CAAC;oBACjB,IAAI,EAAE,GAAG,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;oBACxC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACf,oBAAA,IAAI,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;oBAE7C,IAAI,SAAS,GAAG,KAAK,CAAC;AAEtB,oBAAA,IAAI,KAAK,YAAYA,YAAI,EACzB;AACI,wBAAA,IAAI,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5C,wBAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EACvB;AACI,4BAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;4BACxB,OAAO;yBACV;AAED,wBAAA,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,EACvD;4BACI,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9B,4BAAA,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;yBACnC;6BAED;4BACI,SAAS,GAAG,IAAI,CAAC;yBACpB;qBACJ;yBAED;wBACI,SAAS,GAAG,IAAI,CAAC;qBACpB;oBAED,IAAI,SAAS,EACb;AACI,wBAAA,IAAI,OAAO,GAAG,IAAIA,YAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;AACzD,wBAAA,IAAI,CAAC,KAAK,CAAC,EACX;AACI,4BAAA,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;yBACrB;6BAED;4BACI,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1B,4BAAA,CAAC,EAAE,CAAC;yBACP;qBACJ;AAED,oBAAA,IAAI,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;oBAEhD,SAAS,GAAG,KAAK,CAAC;AAElB,oBAAA,IAAI,QAAQ,YAAYA,YAAI,EAC5B;AACI,wBAAA,IAAI,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,wBAAA,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EACvB;4BAGI,OAAO;yBACV;AAED,wBAAA,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,EACvD;AACI,4BAAA,QAAQ,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;4BAC5B,QAAQ,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACnC,4BAAA,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;yBACjC;6BAED;4BACI,SAAS,GAAG,IAAI,CAAC;yBACpB;qBACJ;yBAED;wBACI,SAAS,GAAG,IAAI,CAAC;qBACpB;oBACD,IAAI,SAAS,EACb;AACI,wBAAA,IAAI,OAAO,GAAG,IAAIA,YAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;wBAC5D,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,EACxB;AACI,4BAAA,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;yBACxB;6BAED;4BACI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9B,4BAAA,CAAC,EAAE,CAAC;yBACP;qBACJ;iBACJ;aACJ;SACJ;QAED,IAAI,SAAS,EACb;AACI,YAAA,IAAI,GAAG,GAAG,OAAO,CAAC,aAAa,CAACG,gBAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACvD,YAAA,IAAI,GAAG;AACH,gBAAA,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;;AAEpB,gBAAA,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;SACjD;KACJ;AACJ,CAAA;AAEK,SAAU,0BAA0B,CAAC,EAAS,EAAA;AAEhD,IAAA,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;AACvB,IAAA,IAAI,OAAO,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;IAElC,IAAI,QAAQ,GAA+C,EAAE,CAAC;IAC9D,IAAI,YAAY,GAA+C,EAAE,CAAC;IAElE,MAAM,KAAK,GAAkB,EAAE,CAAC;AAChC,IAAA,IAAI,IAAI,GAAG,EAAE,CAAC,gBAAgB,CAAC;AAE/B,IAAA,IAAI,UAAU,GAAG,IAAI,OAAO,EAAwB,CAAC;IAErD,KAAK,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,SAAS,EACjC;AACI,QAAA,KAAK,IAAI,GAAG,IAAI,IAAI,EACpB;AACI,YAAA,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;gBACI,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,YAAY,WAAW,IAAI,EAAE,CAAC,MAAM,CAAC,MAAM,EAC5F;oBACI,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,YAAY,YAAYD,cAAM,CAAC,EAC/C;AACI,wBAAA,IAAI,EAAE,GAAG,EAAE,CAAC,MAAqB,CAAC;wBAClC,IAAI,KAAK,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAC9C,wBAAA,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAC1B,wBAAA,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;AAC1C,4BAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;qBAC7B;iBACJ;;oBACI,MAAM;aACd;SACJ;KACJ;AAGD,IAAA,KAAK,IAAI,EAAE,IAAI,KAAK,EACpB;QACI,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC7B,QAAA,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AAClB,QAAA,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;AAClB,QAAA,IAAI,GAAkB,CAAC;AACvB,QAAA,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AACtC,QAAA,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACxB,QAAA,IAAI,SAAiB,CAAC;QACtB,IAAI,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EACnC;YACI,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,GAAG,IAAI;gBAAE,SAAS;;;YAI1C,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,GAAG,eAAe,EAC3C;AACI,gBAAA,GAAG,GAAG,aAAa,CAAC,KAAK,CAAC;AAC1B,gBAAA,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC5C,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC;aACpC;AACI,iBAAA,IAAI,GAAG,CAAC,CAAC,GAAG,eAAe,EAChC;AACI,gBAAA,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC;AACzB,gBAAA,SAAS,GAAG,GAAG,CAAC,CAAC,CAAC;aACrB;;gBAEG,SAAS;YAEb,IAAI,SAAS,GAAG,IAAI,IAAI,0BAA0B,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,EAC7F;gBACI,QAAQ,CAAC,IAAI,CAAC;oBACV,KAAK;oBACL,SAAS;oBACT,GAAG;oBACH,WAAW,EAAE,EAAE,CAAC,WAAW;AAC3B,oBAAA,MAAM,EAAE,CAAC;AACT,oBAAA,QAAQ,EAAE,EAAE;AACf,iBAAA,CAAC,CAAC;aACN;SACJ;aAED;AACI,YAAA,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS;gBAAE,SAAS;AAClD,YAAA,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEtD,YAAA,IAAI,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC;gBAAE,SAAS;AACrC,YAAA,IAAI,IAAI,GAAG,IAAIF,YAAI,CAAC,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/G,YAAA,IAAI,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,YAAA,IAAI,CAAC,EAAE;gBAAE,SAAS;AAElB,YAAA,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;YACpD,IAAI,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAE/C,YAAA,IAAI,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;AAChE,YAAA,IAAI,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YACtE,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;;YAGzC,IAAI,EAAE,GAAI,OAAoB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAEtD,YAAA,KAAK,CAAC,WAAW,CAAC,IAAIjC,aAAO,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAChE,YAAY,CAAC,IAAI,CAAC;gBACd,KAAK;gBACL,SAAS;AACT,gBAAA,GAAG,EAAE,KAAK;gBACV,WAAW,EAAE,EAAE,CAAC,WAAW;AAC3B,gBAAA,MAAM,EAAE,CAAC;AACT,gBAAA,QAAQ,EAAE,EAAE;AACf,aAAA,CAAC,CAAC;SACN;KACJ;AAED,IAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACtC;;AC5nBA;;;;;AAKG;SACa,aAAa,CAAC,QAAkB,EAAE,YAAoB,EAAE,SAAiB,EAAA;AAErF,IAAA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;AACrD,IAAA,IAAI,GAAG,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;AAC7B,IAAA,aAAa,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAEzC,IAAI,MAAM,GAAiC,EAAE,CAAC;AAE9C,IAAA,IAAI,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC;AAE/B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EACnC;AACI,QAAA,IAAI,SAAS,GAAGY,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;AAC5C,QAAA,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,QAAA,IAAI,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;AAExB,QAAA,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;AAEtC,QAAA,IAAI,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC;AAEvB,QAAA,IAAI,EAAE,YAAYsB,WAAG,EACrB;AACI,YAAA,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;AACf,YAAA,EAAE,GAAG,IAAID,YAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;SAC1F;QACD,IAAI,EAAE,YAAYC,WAAG;AACjB,YAAA,EAAE,GAAG,IAAID,YAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAE3F,QAAA,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEf,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC;SACpC;AACI,YAAA,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACzC,MAAM;SACT;;AAGD,QAAA,IAAI,YAAY,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;;;QAIrE,IAAI,KAAK,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QAC5C,IAAI,KAAK,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC5C,QAAA,IAAI,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAExE,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3E,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3E,QAAA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG;YAAE,SAAS;AAE3B,QAAA,IAAI,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC,GAAG,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC;AAE9D,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEhC,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS;;AAGrC,QAAA,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;KAC3D;IAED,IAAI,OAAO,EACX;;AAEI,QAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;KAC7C;AACD,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC;AAGK,SAAU,WAAW,CAAC,IAAkC,EAAA;IAE1D,IAAI,MAAM,GAAY,EAAE,CAAC;AACzB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EACxC;AACI,QAAA,IAAI,EAAE,GAAG,IAAIlC,aAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC/D,QAAA,IAAI,EAAE,GAAG,IAAIA,aAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,QAAA,IAAIU,QAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAC1B;YACI,MAAM,CAAC,IAAI,CAAC,IAAIwB,YAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;SACjC;aAED;YACI,MAAM,CAAC,IAAI,CAAC,IAAIC,WAAG,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SAC5D;KACJ;AACD,IAAA,OAAO,MAAM,CAAC;AAClB;;AC/FA;;;;;;AAMG;AACG,SAAU,2BAA2B,CAAC,EAAqB,EAAE,SAAS,GAAG,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAA;AAEhG,IAAA,IAAI,OAA4C,CAAC;AACjD,IAAA,IAAI,EAAE,YAAYC,cAAM,EACxB;AACI,QAAA,IAAI,EAAE,GAAG,sBAAsB,CAAC,EAAE,CAAC,CAAC;AACpC,QAAA,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;KACxB;SAED;AACI,QAAA,IAAI,SAAS,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,CAAC;YACrD,EAAE,CAAC,OAAO,EAAE,CAAC;AACjB,QAAA,IAAI,QAAQ;AACR,YAAA,OAAO,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;;AAElC,YAAA,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;KAC5B;AACD,IAAA,IAAI,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC;IACxB,IAAI,CAAC1B,QAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;WACxB,CAACA,QAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3B,WAAA,CAACA,QAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAEnC;AACI,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAC3C;YACI,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;SAClC;KACJ;AACD,IAAA,OAAO,OAAO,CAAC;AACnB,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAW,EAAA;AAEvC,IAAA,IAAI,IAAI,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AACpD,IAAA,IAAI,EAAE,GAAG,IAAI2B,gBAAQ,EAAE,CAAC;AACxB,IAAA,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC;IACxB,KAAK,IAAI,GAAG,IAAI,IAAI;AAChB,QAAA,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjB,IAAA,OAAO,EAAE,CAAC;AACd,CAAC;AAED,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACvC,SAAS,cAAc,CAAC,QAAgB,EAAA;AAEpC,IAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;AACvD,CAAC;AAED;AACA,SAAS,mBAAmB,CAAC,EAAY,EAAA;AAErC,IAAA,IAAI,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;AACzB,IAAA,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;IAEvB,IAAI,MAAM,GAAiB,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAEjD,IAAA,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC;AACxB,QAAA,OAAO,MAAM,CAAC;AAElB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAChD;QACI,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,GAAG,IAAI,EACnC;YACI,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAClC,YAAA,IAAI,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAQ,CAAC;AACvC,YAAA,IAAI,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC;AAC9B,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC;AACnD,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EACnC;AACI,gBAAA,IAAI,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC;AACzB,gBAAA,IAAI,CAAC,GAAG,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AACxD,gBAAA,IAAI,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;;gBAGtB;AACI,oBAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACpB,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC5B;aACJ;SACJ;aAED;;AAEI,YACA;AACI,gBAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAChC,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;aACrC;SACJ;KACJ;AAED,IAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,IAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,IAAA,OAAO,MAAM,CAAC;AAClB;;AC9GA;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;KACT;AACD,IAAA,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC;AACpB;;ACXM,SAAU,aAAa,CAAC,IAAa,EAAA;AAEvC,IAAA,IAAI,EAAE,GAAG,IAAIA,gBAAQ,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;;MCXa,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;QAErC,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;SAC/D;AACD,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,YAAY,CAAC,KAAa,EAAA;QAEtB,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;SAC/D;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;SACpB;aACD;AACI,YAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AACX,YAAA,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;SACd;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;SACzB;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;SAChB;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;SACf;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;SAChB;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;;AChI/C,IAAI,UAAU,GAA4C,GAAG;SACpD,cAAc,GAAA;IAE1B,IAAI,UAAU,CAAC,GAAG;QAAE,OAAO;IAC3B,IAAI,CAAC,UAAU,CAAC,QAAQ;AACpB,QAAA,UAAU,CAAC,QAAQ,GAAG,EAAS,CAAC;IACpC,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,KAAI;AAE5B,QAAAyB,qBAAU,CAAC,iCAAiC;;;QAGxCA,qBAAU,CAAC,+BAA+B,CAAC,QAAQ;;;;AAKtD,SAAA,CAAC,IAAI,CAAC,CAAC,IAAG;AAEP,YAAA,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC;AACnB,YAAA,GAAG,EAAE,CAAC;;AAEV,SAAC,CAAC,CAAC;AACP,KAAC,CAAC,CAAC;AACP;;ACjBA;;;;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;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;AACD,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACtB;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;SACzB;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;SACpB;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;YACtB,IAAI,OAAO,EACX;gBACI,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;iBACpB;qBAED;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;iBACpB;aACJ;iBAED;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;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;QAEtB,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;SACN;;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;AACtB,QAAA,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;SACN;;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;SAClD;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;SACvB;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;SAChE;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;SACtC;;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;KACd;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;KAChB;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;;ACCtD,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAEhD;;;;;;;AAOG;AACa,SAAA,kBAAkB,CAAC,OAAgB,EAAE,KAAkB,EAAE,OAAO,GAAG,QAAQ,EAAE,kBAAkB,GAAG,KAAK,EAAA;IAEnH,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,OAAO,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;IACvK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAC9B;AACI,QAAA,IAAI,kBAAkB;YAAE,OAAO;AAE/B,QAAA,IAAI,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QAChC,UAAU,GAAG,KAAK,CAAC;KACtB;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,OAAO,CAAC,CAAC;QACxC,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,IAAIzB,gBAAQ,EAAE,CAAC,gBAAgB,CAAC,IAAIrC,aAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAIA,aAAO,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;KACL;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;KACvE;AAED,IAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAC1B;;AAEI,QAAA,IAAI,kBAAkB;YAAE,OAAO;QAC/B,SAAS,GAAG,MAAM,CAAC;KACtB;AAED,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,IAAIA,aAAO,CAAC,CAAC,OAAO,EAAE,CAAC;YAClE,SAAS;SACZ;;AAED,QAAA,IAAI,CAAC,GAAG+D,6BAAS,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;AACzB,QAAA,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;SAGpB;KACJ;AAED,IAAA,IAAI,CAAC,GAAG,IAAI/D,aAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;;;;;;;;;;;;;;;;;;IAqBtC,IAAI,UAAU,EACd;QACI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;QAC5B,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;KAC/B;AACD,IAAA,OAAO,CAAC,CAAC;AACb;;ACxHA;SACgB,iBAAiB,CAAO,KAAU,EAAE,OAAU,EAAE,WAAmC,EAAA;IAE/F,IAAI,SAAS,GAAG,CAAC,CAAC;AAClB,IAAA,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;AAC9B,IAAA,OAAO,UAAU,GAAG,SAAS,EAC7B;AACI,QAAA,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,UAAU,IAAI,CAAC,CAAC,CAAC;AACzD,QAAA,IAAI,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;QACnC,IAAI,aAAa,GAAG,WAAW,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AACtD,QAAA,IAAI,aAAa,GAAG,CAAC;AACjB,YAAA,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;AACzB,aAAA,IAAI,aAAa,KAAK,CAAC;AACxB,YAAA,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;;YAE1B,UAAU,GAAG,SAAS,CAAC;KAC9B;AACD,IAAA,OAAO,SAAS,CAAC;AACrB,CAAC;AAyED;AACM,SAAU,UAAU,CAAC,MAAe,EAAA;IAEtC,0BAA0B,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,KAAI;QAE1C,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACd,YAAA,OAAO,IAAI,CAAC;QAEhB,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAClB;YACI,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACd,YAAA,OAAO,IAAI,CAAC;SACf;AAED,QAAA,OAAO,KAAK,CAAC;AACjB,KAAC,CAAC,CAAC;AAEH,IAAA,OAAO,MAAM,CAAC;AAClB;;ACxGA,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;AAC7C;AACA;AAEA;AACA,SAAS,cAAc,CAAC,CAAS,EAAE,CAAS,EAAE,GAAS,EAAA;IAEnD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACb,IAAI,IAAI,IAAI,CAAC;SACZ,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,IAAI,IAAI,KAAK,CAAC;IAElB,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACb,IAAI,IAAI,IAAI,CAAC;SACZ,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,IAAI,IAAI,GAAG,CAAC;AAEhB,IAAA,OAAO,IAAI,CAAC;AAChB,CAAC;AAGD;;AAEG;MACU,iBAAiB,CAAA;AAO1B,IAAA,WAAA,CAAY,GAAS,EAAA;AAEjB,QAAA,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC;AAClB,QAAA,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC;AAClB,QAAA,IAAI,CAAC,EAAE,GAAG,IAAIc,aAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,EAAE,GAAG,IAAIA,aAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAE5C,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;KAClB;;IAGD,eAAe,CAAC,EAAQ,EAAE,EAAQ,EAAA;AAE9B,QAAA,IAAI,KAAK,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACjD,QAAA,IAAI,KAAK,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;;QAGjD,IAAI,KAAK,GAAG,KAAK;AAAE,YAAA,OAAO,KAAK,CAAC;AAEhC,QAAA,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;AACzB,QAAA,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,EAAE;AACvD,YAAA,OAAO,IAAI,CAAC;AAEhB,QAAA,IAAI,CAAC,IAAI,GAAG,GAAG,KAAK,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;AACrD,YAAA,OAAO,IAAI,CAAC;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;AACtD,YAAA,OAAO,IAAI,CAAC;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,KAAK,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;AACvD,YAAA,OAAO,IAAI,CAAC;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,KAAK,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;AACtD,YAAA,OAAO,IAAI,CAAC;AAEhB,QAAA,OAAO,KAAK,CAAC;KAChB;;IAGD,iBAAiB,CAAC,GAAS,EAAE,MAAc,EAAA;QAEvC,IAAI,QAAQ,GAAGF,eAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtE,IAAI,QAAQ,GAAGA,eAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC;KAC7E;AACJ;;AC3FD;;;;AAIG;AAsDH;;;;AAIG;AACG,SAAU,iBAAiB,CAAI,GAAa,EAAA;AAE9C,IAAA,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;AAC5B,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AA0BD,SAAS,iBAAiB,CAAC,EAAO,EAAE,EAAO,EAAA;IAEvC,OAAO,EAAE,GAAG,EAAE,CAAC;AACnB,CAAC;AAgCD;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;;AC7HA;;;;AAIG;AACH,SAAS,YAAY,CAAC,KAAiB,EAAA;IAEnC,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,aAAa,CAAC,KAAiB,EAAA;IAEpC,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,SAAS,cAAc,CAAC,KAAiB,EAAA;IAErC,OAAO,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACnF,CAAC;AAGD;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;;;;;;;;;;;;;;;;;;;AAmBG;MACU,wBAAwB,CAAA;AAgBjC,IAAA,WAAA,GAAA;QAdA,IAAQ,CAAA,QAAA,GAAG,GAAG,CAAC;QACf,IAAS,CAAA,SAAA,GAAG,GAAG,CAAC;AAChB,QAAA,IAAA,CAAA,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC;QAKpB,IAAiB,CAAA,iBAAA,GAAkC,YAAY,CAAC;KAS/D;AAED;;;AAGG;AACH,IAAA,QAAQ,CAAC,UAAqB,EAAA;;QAG1B,IAAI,EAAE,GAAa,EAAE,CAAC;QACtB,IAAI,EAAE,GAAa,EAAE,CAAC;AAEtB,QAAA,IAAI,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;AAC7B,QAAA,IAAI,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;;QAG7B,IAAI,OAAO,GAAuB,EAAE,CAAC;QACrC,IAAI,OAAO,GAAuB,EAAE,CAAC;QAErC,IAAI,UAAU,GAAG,IAAI6B,UAAI,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AAEtD,QAAA,IAAI,GAAG,GAAG,IAAI3B,aAAO,CAAC;AAEtB,QAAA,IAAI,MAAM,GAAyB,EAAE,CAAC;;;QAItC,IAAI,KAAK,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,KAAK,GAAG,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAErC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAC1C;AACI,YAAA,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AACtB,YAAA,IAAI,EAAE,GAAG,UAAU,CAACD,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;;;;AAMjD,YAAA,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;;AAGtB,YAAA,IAAI,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAChB;AACI,gBAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACX,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACf;AAED,YAAA,IAAI,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAChB;AACI,gBAAA,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACX,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACf;;YAGD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,EAChD;gBACI,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE;AACpB,oBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAExD,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE;AACpB,oBAAA,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3D;;YAGD,IAAI,CAACH,QAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,CAACA,QAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;gBAChD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SAC5B;;;QAKD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,QAAA,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;AAC9B,QAAA,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAE9B,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACtB,iBAAiB,CAAC,EAAE,CAAC,CAAC;;AAGtB,QAAA,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACvB,QAAA,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;;QAGvB,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,QAAA,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QAErC,EAAE,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,QAAA,EAAE,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;;QAGrC,IAAI,MAAM,GAAG,IAAIgD,4BAAQ,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;;AAI7D,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EACtC;AACI,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EACtC;gBACI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;;;;aAKlD;SACJ;QAED,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,QAAA,MAAM,MAAM,GAAe,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;;QAGxG,IAAI,MAAM,GAAwB,EAAE,CAAC;AACrC,QAAA,KAAK,IAAI,IAAI,IAAI,MAAM,EACvB;YACI,IAAI,GAAG,GAAG,IAAIjB,UAAI,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACzC,YAAA,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,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;AAEpE,YAAA,KAAK,IAAI,EAAE,IAAI,GAAG,EAClB;AACI,gBAAA,IAAI,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAEvB,gBAAA,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC3C,gBAAA,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;gBAEnC,IAAI,CAAC,KAAK,EACV;oBACI,KAAK,GAAG,IAAI,iBAAiB,CAAC,IAAIA,UAAI,CAAC,IAAI3B,aAAO,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,IAAIA,aAAO,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAClI,oBAAA,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;;;iBAItB;AAED,gBAAA,IAAI,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAC3C;;;oBAGI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;iBACpB;aACJ;SACJ;;;QAID;AACI,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EACtC;AACI,gBAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;gBAElC,IAAI,KAAK,GAAG,gBAAgB,CAAC,UAAU,EAAE,IAAId,aAAO,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpF,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAEzB,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EACtC;AACI,oBAAA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;oBAClC,OAAO,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;wBAC/B,KAAK,CAAC,KAAK,EAAE,CAAC;oBAElB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAC1B;;;wBAGI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;qBACpB;iBACJ;aACJ;SACJ;;;QAID,MAAM,gBAAgB,GAAG,MAAK;AAE1B,YAAA,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;YACxB,IAAI,CAAC,KAAK,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAC;YACtB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC3B,IAAI,CAAC,KAAK,CAAC;gBAAE,OAAO;AAEpB,YAAA,MAAM,IAAI,GAAe,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAE9E,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC1B;AACI,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC1B;oBACI,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAChB;AACI,wBAAA,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;qBACnD;iBACJ;aACJ;;YAGD,IAAI,KAAK,GAAe,EAAE,CAAC;AAE3B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;aAC1B;AACI,gBAAA,MAAM,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChC,gBAAA,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAElC,IAAI,KAAK,GAAa,EAAE,CAAC;AACzB,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC1B;oBACI,OAAO,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACrE;wBACI,KAAK,CAAC,GAAG,EAAE,CAAC;qBACf;oBACD,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC1D,oBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACjB;gBACD,KAAK,GAAG,EAAE,CAAC;AACX,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAC/B;oBACI,OAAO,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACrE;wBACI,KAAK,CAAC,GAAG,EAAE,CAAC;qBACf;oBACD,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3D,oBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;iBACjB;AAED,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAC1B;AACI,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACnC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1B,oBAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM;wBAAE,SAAS;AAEjC,oBAAA,IAAI,KAAK,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AAC/C,oBAAA,IAAI,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;oBAE5C,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS;wBAAE,SAAS;;oBAG/D,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC;wBAAE,SAAS;AAEpE,oBAAA,IAAI,IAAI,GAAG,KAAK,GAAG,MAAM,CAAC;;AAG1B,oBAAA,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO;wBAAE,SAAS;oBAElC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;iBACjE;aACJ;;AAGD,YAAA,IAAI,KAAK,CAAC,MAAM,EAChB;gBACI,IAAI,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAE7C,gBAAA,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;AAEnE,gBAAA,IAAI,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBACzB,IAAI,IAAI,GAAG,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;gBAE7B,IAAI,IAAI,GAAG,EAAE,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;gBAClC,IAAI,IAAI,GAAG,EAAE,CAAC,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;gBAEtC,QAAQ,CAAC,IAAI,CAAC,IAAIyC,UAAI,CAAC,IAAI3B,aAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,IAAIA,aAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAE1E,gBAAA,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;;AAG1B,gBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAC/B;AACI,oBAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAC/B;AACI,wBAAA,MAAM,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;qBAChD;iBACJ;;;;;;;;;;;;;;;;aAiBJ;AACL,SAAC,CAAC;QAEF,IAAI,QAAQ,GAAW,EAAE,CAAC;QAC1B,OAAO,IAAI,EACX;AACI,YAAA,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;AAC5B,YAAA,gBAAgB,EAAE,CAAC;AACnB,YAAA,IAAI,KAAK,KAAK,QAAQ,CAAC,MAAM;gBAAE,MAAM;SACxC;AAED,QAAA,OAAO,QAAQ,CAAC;KACnB;;AAlTM,wBAAY,CAAA,YAAA,GAAG,YAAH,CAAgB;AAC5B,wBAAa,CAAA,aAAA,GAAG,aAAH,CAAiB;AAC9B,wBAAc,CAAA,cAAA,GAAG,cAAH,CAAkB;AAmT3C,SAAS,SAAS,CAAC,MAA0B,EAAE,KAAe,EAAA;IAE1D,IAAI,IAAI,GAAa,EAAE,CAAC;AACxB,IAAA,KAAK,IAAI,KAAK,IAAI,MAAM,EACxB;QACI,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAClC,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;AAEvC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,EAClC;AACI,YAAA,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;AAE3C,YAAA,IAAI,KAAK,GAAG,iBAAiB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAEzD,YAAA,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;gBAC9B,SAAS;YAEb,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC;gBAChE,SAAS;AAEb,YAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAChB;KACJ;AAED,IAAA,IAAI,IAAI,CAAC,MAAM,EACf;AACI,QAAA,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC5B,iBAAiB,CAAC,KAAK,CAAC,CAAC;KAC5B;AACL,CAAC;AAED;;AAEG;AACH,SAAS,gBAAgB,CAAC,OAAkB,EAAE,EAAW,EAAA;;;IAKrD,IAAI,KAAK,GAAa,EAAE,CAAC;AAEzB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EACvC;AACI,QAAA,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACpB,QAAA,IAAI,EAAE,GAAG,OAAO,CAACD,UAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;;;;;;;QAU3C,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvB,IAAIH,QAAM,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,EACzB;;;;YAII,SAAS;SACZ;;AAGD,QAAA,IAAIA,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAC5B;;AAEI,YAAA,IAAI,IAAI,GAAG,CAAC,EACZ;;AAEI,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aACpB;YACD,SAAS;SACZ;;AAGD,QAAA,IAAIA,QAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAC5B;;AAEI,YAAA,IAAI,IAAI,GAAG,CAAC,EACZ;;AAEI,gBAAA,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aACpB;YACD,SAAS;SACZ;;AAGD,QAAA,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACzD,QAAA,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,EAC1B;YACI,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACvB,YAAA,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAEpB,YAAA,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;;;AAGpC,YAAA,IAAI,IAAI,GAAG,EAAE,CAAC,CAAC,EACf;;AAEI,gBAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACpB;SACJ;KACJ;AAED,IAAA,OAAO,KAAK,CAAC;AACjB;;ACzeA;AACgB,SAAA,aAAa,CAAC,MAAc,EAAE,UAAkB,EAAE,SAAS,GAAG,EAAE,EAAE,OAAO,GAAG,KAAK,EAAA;AAE7F,IAAA,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3B,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,SAAS,CAAC;AAEjC,IAAA,IAAI,OAAO;AACP,QAAA,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC;;QAEhD,MAAM,IAAI,UAAU,CAAC;AAEzB,IAAA,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IACzB,IAAI,GAAG,GAAc,EAAE,CAAC;AACxB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAClC;AACI,QAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;KACjD;AACD,IAAA,OAAO,GAAc,CAAC;AAC1B,CAAC;AAED;;AAEG;SACa,aAAa,CAAC,EAAqB,EAAE,OAAgB,EAAE,WAAmB,EAAA;IAEtF,IAAI,EAAE,YAAY0B,cAAM;AACpB,QAAA,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,aAAa,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;;QAEhE,OAAO,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACzD,CAAC;SAEe,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;AAC3B,QAAA,IAAI,GAAG,KAAK,CAAC,EACb;YACI,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAQ,CAAC;;;;AAMvC,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;;gBAEnC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AAEhF,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;AACpB,YAAA,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;SACJ;KACJ;AAED,IAAA,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,EAAE4B,mBAAQ,CAAC,KAAK,EAAE,OAAO,EAAEC,kBAAO,CAAC,aAAa,EAAE,CAAC;SAC1G,CAAC,CAAC,CAAC,CAAC,CAAC;AACN,QAAA,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;KACxB;AACD,IAAA,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AACrB,CAAC;AAED;;;;AAIG;SACa,oBAAoB,CAAC,EAAY,EAAE,MAAM,GAAG,EAAE,EAAA;AAE1D,IAAA,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;AACvB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,EACpC;QACI,IAAI,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC7B,QAAA,IAAI,MAAM,CAAC,GAAG,EAAE,gBAAgB,CAAC;YAAE,SAAS;QAE5C,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC,CAAQ,CAAC;AAEvC,QAAA,IAAI,GAAG,CAAC,MAAM,GAAG,MAAM;YAAE,SAAS;AAElC,QAAA,IAAI,QAAQ,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChE,QAAA,IAAI,EAAE,QAAQ,YAAY/B,YAAI,CAAC;YAAE,SAAS;AAE1C,QAAA,IAAI,SAAS,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;AACjE,QAAA,IAAI,EAAE,SAAS,YAAYA,YAAI,CAAC;YAAE,SAAS;AAE3C,QAAA,IAAI,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;AAEpF,QAAA,IAAI,GAAG,GAAG,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3E,QAAA,IAAI,CAAC,GAAG;YAAE,SAAS;QAEnB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE;YAAE,SAAS;QAEhD,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACzB,QAAA,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAoB,CAAC,CAAC;KACjE;AACL;;ACvHA;AACA,SAAS,YAAY,CAAC,CAAI,EAAE,EAAK,EAAE,EAAK,EAAA;AAEpC,IAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACb,IAAA,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACb,IAAA,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;AAClB,IAAA,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAElB,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;KACxB;AACI,QAAA,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAChE,QAAA,IAAI,CAAC,GAAG,CAAC,EACT;AACI,YAAA,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACT,YAAA,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;SACZ;AACI,aAAA,IAAI,CAAC,GAAG,CAAC,EACd;AACI,YAAA,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACZ,YAAA,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;SACf;KACJ;AACD,IAAA,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACb,IAAA,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACb,IAAA,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAC7B,CAAC;AAED,SAAS,YAAY,CAAC,CAAI,EAAE,CAAI,EAAA;AAE5B,IAAA,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC;AAED;AACA,SAAS,cAAc,CAAC,MAAW,EAAE,KAAa,EAAE,IAAY,EAAE,WAAmB,EAAE,UAAe,EAAE,MAAe,EAAA;IAEnH,IAAI,SAAS,GAAG,CAAC,CAAC;AAClB,IAAA,IAAI,KAAa,CAAC;AAClB,IAAA,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,IAAA,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAEtB,IAAA,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EACrC;AACI,QAAA,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,MAAM,GAAG,YAAY,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AACrC,QAAA,IAAI,MAAM,GAAG,SAAS,EACtB;YACI,KAAK,GAAG,CAAC,CAAC;YACV,SAAS,GAAG,MAAM,CAAC;SACtB;KACJ;AAED,IAAA,IAAI,SAAS,GAAG,WAAW,EAC3B;AACI,QAAA,IAAI,KAAK,GAAG,KAAK,GAAG,CAAC;AAAE,YAAA,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAC7F,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC/B,QAAA,IAAI,IAAI,GAAG,KAAK,GAAG,CAAC;AAAE,YAAA,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;KAC9F;SAED;;QAEI,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;AAC1D,QAAA,KAAK,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EACrC;AACI,YAAA,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAClB,YAAA,IAAI,UAAU,GAAG,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACpE,YAAA,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;AACpE,YAAA,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;SACvE;KACJ;AACL,CAAC;AAED;AACgB,SAAA,sBAAsB,CAAC,MAAW,EAAE,WAAmB,EAAA;AAEnE,IAAA,IAAI,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7B,IAAI,UAAU,GAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,MAAM,GAAY,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;AAC/D,IAAA,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACjE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9B,IAAA,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAChC;;AClFA;;;AAGG;MACU,SAAS,CAAA;AAelB,IAAA,WAAA,CAAmB,KAAwB,EAAS,UAAA,GAAa,CAAC,EAAS,YAAqB,IAAI,EAAA;QAAjF,IAAK,CAAA,KAAA,GAAL,KAAK,CAAmB;QAAS,IAAU,CAAA,UAAA,GAAV,UAAU,CAAI;QAAS,IAAS,CAAA,SAAA,GAAT,SAAS,CAAgB;QAPpG,IAAI,CAAA,IAAA,GAAG,KAAK,CAAC;QACb,IAAK,CAAA,KAAA,GAAgB,EAAE,CAAC;AAQpB,QAAA,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;AAErC,QAAA,IAAI,KAAK,YAAYG,gBAAQ,EAC7B;AACI,YAAA,IAAI,GAAG,GAAG,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,sBAAsB,CAAC,GAAG,EAAE,UAAU,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;YAC/E,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAC9B;AACI,gBAAA,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC;AAC3B,gBAAA,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;gBAC1C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;gBACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;aACxC;;AAEG,gBAAA,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;SACtB;AAED,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;KACnC;AAED,IAAA,aAAa,CAAC,KAAgB,EAAA;QAE1B,IAAI,IAAI,CAAC,cAAc;AACnB,YAAA,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AACjE,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;KACvD;IAED,gBAAgB,GAAA;AAEZ,QAAA,IAAI,IAAI,CAAC,KAAK,YAAYD,cAAM,EAChC;AACI,YAAA,IAAI,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAC/D,YAAA,OAAO,GAAG,CAAC;SACd;aAGD;YACI,IAAI,EAAE,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC;AAC3C,YAAA,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;YAC7B,IAAI,IAAI,CAAC,YAAY;AACjB,gBAAA,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;AAE/C,YAAA,IAAI,MAAM,GAAG,CAAC,EACd;AACI,gBAAA,IAAI,GAAG,GAAG,EAAE,CAAC,gBAAgB,EAAa,CAAC;AAC3C,gBAAA,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC;oBAC/B,KAAK,EAAE,MAAM,GAAG,KAAK;oBACrB,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE4B,mBAAQ,CAAC,KAAK,EAAE,OAAO,EAAEC,kBAAO,CAAC,aAAa,EAAE,CAAC;iBAC5G,CAAC,CAAC,CAAC,CAAC,CAAC;AACN,gBAAA,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACvB,gBAAA,OAAO,GAAG,CAAC;aACd;;gBAGG,OAAO,IAAI,CAAC,MAAM,CAAC;SAC1B;KACJ;IAED,eAAe,GAAA;AAEX,QAAA,IAAI,IAAI,CAAC,KAAK,YAAY7B,cAAM,EAChC;AACI,YAAA,IAAI,GAAG,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;AAChE,YAAA,OAAO,GAAG,CAAC;SACd;aAGD;YACI,IAAI,EAAE,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC;AAC3C,YAAA,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9B,YAAA,IAAI,IAAI,CAAC,YAAY,EACrB;AACI,gBAAA,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC;aAC9C;AACD,YAAA,IAAI,MAAM,GAAG,CAAC,IAAI,EAClB;gBACI,IAAI,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;gBACrC,IAAI,GAAG,CAAC,MAAM;AACV,oBAAA,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;aACxC;;gBAGG,OAAO,IAAI,CAAC,MAAM,CAAC;SAC1B;KACJ;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"api.cjs.js","sources":["../src/Common/ArrayExt.ts","../src/Geometry/CoordinateSystem.ts","../src/Common/SystemEnum.ts","../src/GraphicsSystem/RenderType.ts","../src/ApplicationServices/HostApplicationServices.ts","../src/Common/Dispose.ts","../src/Common/LayerConstant.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/Common/BoardKeyList.ts","../src/UI/Components/RightPanel/RightPanelInterface.ts","../src/DatabaseServices/SymbolTableRecord.ts","../src/DatabaseServices/MaterialTableRecord.ts","../src/DatabaseServices/PhysicalMaterialRecord.ts","../src/DatabaseServices/Entity/Entity.ts","../src/Common/StoreageKeys.ts","../src/Common/eval.ts","../src/Common/Utils.ts","../src/Geometry/GeUtils.ts","../src/Common/Matrix4Utils.ts","../src/Editor/ObjectSnapMode.ts","../src/GLSL/GoochShader.ts","../src/Common/ColorPalette.ts","../src/Editor/BufferGeometry2GeometryCacheMap.ts","../src/Geometry/BufferGeometryUtils.ts","../src/Geometry/Orbit.ts","../src/GraphicsSystem/IntersectWith.ts","../src/DatabaseServices/Entity/Curve.ts","../src/Geometry/Matrix2.ts","../src/Geometry/Plane.ts","../src/Geometry/RotateUV.ts","../src/DatabaseServices/Entity/Line.ts","../src/DatabaseServices/Entity/Ellipse.ts","../src/DatabaseServices/Entity/Arc.ts","../src/DatabaseServices/Entity/DragPointType.ts","../src/DatabaseServices/Entity/Circle.ts","../src/Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams.ts","../src/DatabaseServices/Shape2.ts","../src/Geometry/CreatePolylinePath.ts","../src/Geometry/DoIntersect.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/Add-on/BoardCutting/SplitPolyline.ts","../src/Geometry/Count.ts","../src/Common/CurveUtils.ts","../src/Add-on/DrawDrilling/DrillType.ts","../src/Common/Log.ts","../src/Common/Singleton.ts","../src/DatabaseServices/Entity/BoardInterface.ts","../src/DatabaseServices/Entity/GenUVForWorld.ts","../src/DatabaseServices/Entity/GenLocalUv.ts","../src/DatabaseServices/Shape.ts","../src/csg/core/constants.ts","../src/csg/core/FuzzyFactory.ts","../src/csg/core/math/IsMirrot.ts","../src/csg/core/math/Polygon3.ts","../src/csg/core/Geometry2CSG.ts","../src/Add-on/ArcBoard/ArcBoardBuild.ts","../src/DatabaseServices/Entity/ArcBoardType.ts","../src/Add-on/ArcBoard/ArcBoardFeeding.ts","../src/Add-on/BoardCutting/LinearCuttingForSweep.ts","../src/Common/Toaster.ts","../src/Nest/Common/Util.ts","../src/DatabaseServices/3DSolid/Hole.ts","../src/DatabaseServices/3DSolid/CylinderHole.ts","../src/Add-on/DrawDrilling/HoleUtils.ts","../src/Add-on/TextStyle/FontStyleInterface.ts","../src/UI/Components/Board/BoardFindInterface.ts","../src/UI/Store/BoardFindInterface.ts","../src/UI/Store/DoorInterface.ts","../src/UI/Store/LatticeInterface.ts","../src/UI/Store/OptionInterface/AutoDimBrsOption.ts","../src/UI/Store/OptionInterface/BoardBatchCurtailOption .ts","../src/UI/Store/OptionInterface/ClosingStripOption.ts","../src/UI/Store/OptionInterface/OptionEnum.ts","../src/UI/Store/WineRackInterface.ts","../src/Editor/OrderType.ts","../src/Editor/DefaultConfig.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/DatabaseServices/GroupTableRecord.ts","../src/Common/AddEntityDrawObject.ts","../src/Common/CSGIntersect.ts","../src/Geometry/BSPGroupParse.ts","../src/Geometry/Board2DModelCSG/BoardSideModelCSGBuilder.ts","../src/Geometry/BoardUVGenerator.ts","../src/Geometry/UVUtils.ts","../src/DatabaseServices/ShapeManager.ts","../src/DatabaseServices/Entity/Region.ts","../src/Geometry/DrillParse/CanDrawHoleFuzz.ts","../src/Geometry/DrillParse/Sement1dUntils.ts","../src/Geometry/DrillParse/Face.ts","../src/Geometry/DrillParse/BoardGetFace.ts","../src/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.ts","../src/DatabaseServices/Entity/Extrude.ts","../src/DatabaseServices/Entity/CompositeEntity.ts","../src/DatabaseServices/Hardware/HardwareCompositeEntity.ts","../src/Production/Convert2PtsBul.ts","../src/Production/Product.ts","../src/GraphicsSystem/ParseEdgeSealDir.ts","../src/GraphicsSystem/CalcEdgeSealing.ts","../src/Add-on/BoardCutting/SplitBoardSideModel.ts","../src/Add-on/BoardEditor/Board2Regions.ts","../src/Add-on/BoardEditor/SerializeBoardData.ts","../src/Geometry/CSGSubtract/CSGSubtractTaskManager.ts","../src/Geometry/PointShapeUtils.ts","../src/DatabaseServices/3DSolid/SealSolid.ts","../src/DatabaseServices/FontStyle/FontStyleKeyCodeEnum.ts","../src/DatabaseServices/FontStyle/FontsStyleRecord.ts","../src/DatabaseServices/Text/Text.ts","../src/DatabaseServices/Entity/Board.ts","../src/Geometry/CreateWireframe.ts","../src/Geometry/SimpleExtrudeEdgeGeometry.ts","../src/Geometry/WordUVGenerator.ts","../src/DatabaseServices/3DSolid/ExtrudeHole.ts","../src/GraphicsSystem/ToolPath/OptimizeToolPath.ts","../src/GraphicsSystem/ToolPath/FeedingToolPath.ts","../src/GraphicsSystem/ToolPath/VKnifToolPath.ts","../src/Geometry/ConverToPolylineAndSplitArc.ts","../src/Nest/Common/Area.ts","../src/Nest/Converter/Path2Polyline.ts","../src/Nest/Common/Vector2.ts","../src/Nest/Common/Box2.ts","../src/Nest/Common/ClipperCpp.ts","../src/Nest/Core/Path.ts","../src/Nest/Core/NestCache.ts","../src/DatabaseServices/Room/ParseService/ParseRegionTextPos.ts","../src/DatabaseServices/Room/ParseService/RangeUtils.ts","../src/Geometry/CheckIntersect.ts","../src/Nest/Common/ArrayExt.ts","../src/Add-on/testEntity/LargestInteriorRectangle.ts","../src/Nest/Converter/Curves2Points.ts","../src/Nest/Converter/Simplify2.ts","../src/Nest/Converter/CurveWrap.ts"],"sourcesContent":["/**\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 * map按Key的拼音首字母排序\r\n * reverse:倒序\r\n */\r\nexport function mapSortByCN(map: Map, reverse: boolean = false): Map\r\n{\r\n return new Map([...map].sort((x1, x2) =>\r\n {\r\n return reverse ? x2[0].localeCompare(x1[0], 'zh-CN') : x1[0].localeCompare(x2[0], 'zh-CN');\r\n }));\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 { 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 six = 6\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 ConceptualTransparent = 82, // ConceptualTransparent原本的值是182,估计是写错了,不应该大于100的\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,//封边检查 OpenCabinet.UNOPENRENDERTYPE 该视图下不支持开门动作\r\n PlaceFace = 8,//排版面 OpenCabinet.UNOPENRENDERTYPE 该视图下不支持开门动作\r\n BigHoleFace = 81, //大孔面 OpenCabinet.UNOPENRENDERTYPE 该视图下不支持开门动作\r\n CustomNumber = 9,//自定义编号\r\n ModelGroove = 10,//造型槽 OpenCabinet.UNOPENRENDERTYPE 该视图下不支持开门动作\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 CustomNumberPrint = 109,\r\n}\r\n\r\n/** 实体的渲染颜色种类 */\r\nexport enum ColorInTransparent\r\n{\r\n 原始颜色 = 0,\r\n 灰度单色 = 1,\r\n}\r\n\r\n/** 渲染的状态 */\r\nexport const RenderState = {\r\n /** 概念透明下的实体颜色 */\r\n ConceptualColor: ColorInTransparent.原始颜色,\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 { Database } from '../DatabaseServices/Database';\r\nimport { LayerTableRecord } from '../DatabaseServices/LayerTableRecord';\r\nimport { ObjectId } from '../DatabaseServices/ObjectId';\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 Database: Database;//app.Db\r\n\r\n DefaultMeshMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n DefaultFloorMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n DefaultWallMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n DefaultBulkheadCeilingMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n\r\n IsRoomEntityVisible = true;//室内实体可见\r\n\r\n CurrentLayer: ObjectId;\r\n /** 当前画笔的颜色索引 */\r\n CurrentColorindex: number = 7;\r\n\r\n CurrentDimStyle: ObjectId; //标注样式\r\n CurrentFontStyle: ObjectId; //字体样式\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 @ProxyValue ConceptualOpacity = 1;//概念的透明度\r\n @ProxyValue ConceptualTransparentOpacity = 0.5;//概念(透明)的透明度\r\n @ProxyValue IsTransparentMetals: boolean = false; // 五金是否受概念(透明)影响\r\n @ProxyValue IsTransparentComp: boolean = false; // 组件是否受概念(透明)影响\r\n\r\n DrawWallBottomFace = false;//绘制底面\r\n sealReserve = 0; //封边统计留头量\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 //#region 显示纹路\r\n @ProxyValue showLines = false;\r\n //#endregion\r\n\r\n //#region 显示开门方向纹路\r\n @ProxyValue showOpenDirLines = false;\r\n //#endregion\r\n\r\n //#region 开门方向纹路配置\r\n @ProxyValue doorLinesOption = {\r\n physicalShowLines: false, //真实视图显示开门方向纹路\r\n physicalShowLines2: false, //真实视图带线框显示开门方向纹路\r\n reverseOpenDirLines: false, //反转开门方向纹路\r\n };\r\n //#endregion\r\n\r\n //#region 显示二维刀路路径线条\r\n @ProxyValue show2DPathLine = false;\r\n //#endregion\r\n\r\n //#region 显示二维刀路\r\n @ProxyValue show2DPathObject = 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 drillRemark: false,//拆单获取排钻备注\r\n checkSealType: \"1\",\r\n sealMaxValue: 10,//封边最大值\r\n sealValues: '',//封边值列表\r\n hardwareExpressionFormattingAccuracy: 2,//复合实体表达式值格式化精度\r\n partialSplitValueCanTakesEffect: false,\r\n cancelHoleProcessing: false,//填写拆单尺寸板件取消孔槽加工\r\n isCheckCustomBoardNumber: 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 boardCustomNumberTextHeight = 60; //板编号字体高度\r\n @ProxyValue lineWidth = 2; //打印线框\r\n @ProxyValue fractionDigitsType: FractionDigitsType = FractionDigitsType.two;\r\n @ProxyValue throughModelSegmentedDrill = false; //挖穿造型分段排钻\r\n @ProxyValue autoDeviation = false; //排钻碰撞智能偏移\r\n @ProxyValue autoDeviationMinDist = 200; //排钻碰撞智能偏移最小排钻面长度\r\n @ProxyValue smallGrooveThreshold = 900; //全深槽影响阈值\r\n @ProxyValue sealWidthPercentage = 1; //封边宽度百分比\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\nexport const ByLayerColorIndex = 260;\r\n","\r\n\r\n\r\nexport enum Status\r\n{\r\n False = 0,\r\n True = 1,\r\n Side = 2,\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 containsBox(box: Box3, fuzz = 1e-8): boolean\r\n {\r\n return this.min.x <= box.min.x + fuzz && box.max.x <= this.max.x + fuzz &&\r\n this.min.y <= box.min.y + fuzz && box.max.y <= this.max.y + fuzz &&\r\n this.min.z <= box.min.z + fuzz && box.max.z <= this.max.z + fuzz;\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 WriteBool(v: boolean)\r\n {\r\n this.Write(v ? 1 : 0);\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 Write2dArray(arr: [any, any][])\r\n {\r\n this._datas.push(arr.length, ...arr.flat());\r\n }\r\n\r\n Read(): any\r\n {\r\n return this._datas[this.readIndex++];\r\n }\r\n\r\n ReadBool()\r\n {\r\n return Boolean(this.Read());\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 Read2dArray(): [any, any][]\r\n {\r\n let count = this.Read();\r\n let arr = this._datas.slice(this.readIndex, this.readIndex + count * 2);\r\n this.readIndex += count * 2;\r\n\r\n let arr2d: [any, any][] = [];\r\n for (let i = 0; i < arr.length; i = i + 2)\r\n arr2d.push([arr[i], arr[i + 1]]);\r\n\r\n return arr2d;\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\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?: ISerialize)\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.ReadBool();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.WriteBool(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.ReadBool();\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.WriteBool(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\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 if (ver === 1)\r\n file.ReadObject();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n file.WriteObject(this.undoData);\r\n file.WriteObject(this.redoData);\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 = \"u_ro\";\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 PaperName = \"paperName\",\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 Remarks = \"remarks\",//备注\r\n ExtraRemarks = \"extraRemarks\",//追加备注\r\n OpenDir = \"openDir\", //开门方向\r\n GroovesAddLength = \"GroovesAddLength\", //槽加长\r\n GroovesAddWidth = \"GroovesAddWidth\", //槽加宽\r\n GroovesAddDepth = \"GroovesAddDepth\", //槽加深\r\n FrontDrill = \"frontDrill\",//正面排孔\r\n BackDrill = \"backDrill\",//反面排孔\r\n SelectRoomCabinet = \"selectRoomCabinet\", //选择的房名和柜名\r\n}\r\n","import { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { IBaseOption } from \"../../Store/OptionInterface/IOptionInterface\";\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 goodsId?: string;\r\n goodsSn?: string;\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 goodsId: string;\r\n goodsSn: string;\r\n}\r\n\r\nexport interface IToplineOption extends IHardwareOption\r\n{\r\n addLen: string;\r\n}\r\n","import { Status } from \"../Common/Status\";\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 { SymbolTable } from \"./Tables/SymbolTable\";\r\n\r\nexport abstract 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\r\n let undoData = this.UndoRecord();\r\n if (undoData)\r\n {\r\n let hr = new HistorycRecord();\r\n hr.undoData = new NameData(this.name);\r\n hr.redoData = new NameData(name);\r\n undoData.WriteObjectHistoryPath(this, hr);\r\n }\r\n\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 ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n if (undoData instanceof NameData)\r\n {\r\n if (this.name === undoData.name)\r\n return;\r\n if (this.Owner)\r\n {\r\n let symbolTable = this.Owner.Object as SymbolTable;\r\n if (!symbolTable.ChangeRecordName(this, undoData.name))\r\n return;\r\n }\r\n this.name = undoData.name;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 记录当前Name的序列化数据\r\n */\r\n@Factory\r\nexport class NameData implements ISerialize\r\n{\r\n ReadFile(file: CADFiler): this\r\n {\r\n this.name = file.Read();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.Write(this.name);\r\n return this;\r\n }\r\n constructor(public name: string) { }\r\n}\r\n","import { Factory } from \"./CADFactory\";\r\nimport { SymbolTableRecord } from \"./SymbolTableRecord\";\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 { EMetalsType } from \"../UI/Components/RightPanel/RightPanelInterface\";\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\nexport interface IHardwareItem\r\n{\r\n value: string | Array<[string, string]> | EMetalsType;\r\n checked: boolean;\r\n}\r\n\r\nexport interface IHardwareProps\r\n{\r\n name: IHardwareItem;//实体名\r\n roomName: IHardwareItem;//房间名\r\n cabinetName: IHardwareItem;//柜名\r\n factory: IHardwareItem;//厂家\r\n comments: IHardwareItem;//备注\r\n actualExpr: IHardwareItem;//价格\r\n brand: IHardwareItem;//品牌\r\n model: IHardwareItem;//型号\r\n spec: IHardwareItem;//规格\r\n count: IHardwareItem;//数量\r\n unit: IHardwareItem;//单位\r\n DataList: IHardwareItem;//特殊备注\r\n type: IHardwareItem;//类型\r\n goods: {//商品编码\r\n goodsSn: string;\r\n goodsId: string;\r\n checked: boolean;\r\n };\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 // 扩展材质的属性\r\n private _hardwareAttributeInfo: IHardwareProps = {\r\n name: {\r\n value: \"\",\r\n checked: false\r\n },\r\n roomName: {\r\n value: \"\",\r\n checked: false\r\n },\r\n cabinetName: {\r\n value: \"\",\r\n checked: false\r\n },\r\n factory: {\r\n value: \"\",\r\n checked: false\r\n },\r\n comments: {\r\n value: \"\",\r\n checked: false\r\n },\r\n actualExpr: {\r\n value: \"\",\r\n checked: false\r\n },\r\n brand: {\r\n value: \"\",\r\n checked: false\r\n },\r\n model: {\r\n value: \"\",\r\n checked: false\r\n },\r\n spec: {\r\n value: \"\",\r\n checked: false\r\n },\r\n count: {\r\n value: \"\",\r\n checked: false\r\n },\r\n unit: {\r\n value: \"\",\r\n checked: false\r\n },\r\n DataList: {\r\n value: Array.from({ length: 20 }, () => [\"\", \"\"]),\r\n checked: false\r\n },\r\n type: {\r\n value: EMetalsType.Metals,\r\n checked: false\r\n },\r\n goods: {\r\n goodsSn: \"\",\r\n goodsId: \"\",\r\n checked: false,\r\n },\r\n };\r\n\r\n private _isMaterialLock: boolean = false;//材质锁\r\n private material = new MeshPhysicalMaterial({});\r\n\r\n constructor()\r\n {\r\n super();\r\n\r\n Object.defineProperty(this.material, \"ObjectId\", {\r\n get: () =>\r\n {\r\n return this?.objectId?.Index;\r\n }\r\n });\r\n }\r\n\r\n async Update()\r\n {\r\n await this.PhysicalMaterialUpdate();\r\n }\r\n\r\n //因为Asset.tsx监听了Update的事件,然后又要去调用这个,导致重复监听,所以分离出这个函数\r\n async PhysicalMaterialUpdate()\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?.Object && !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?.Object && !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?.Object && !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 get HardwareAttributeInfo()\r\n {\r\n return this._hardwareAttributeInfo;\r\n }\r\n set HardwareAttributeInfo(info)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._hardwareAttributeInfo = JSON.parse(JSON.stringify(info));\r\n }\r\n get IsMaterialLock()\r\n {\r\n return !this.IsErase && this._isMaterialLock;\r\n }\r\n set IsMaterialLock(v)\r\n {\r\n if (this._isMaterialLock === v) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._isMaterialLock = v;\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 if (ver > 10)\r\n {\r\n this._isMaterialLock = file.Read();\r\n }\r\n if (ver > 11)\r\n {\r\n this._hardwareAttributeInfo.name.value = file.Read();\r\n this._hardwareAttributeInfo.name.checked = file.Read();\r\n this._hardwareAttributeInfo.roomName.value = file.Read();\r\n this._hardwareAttributeInfo.roomName.checked = file.Read();\r\n this._hardwareAttributeInfo.cabinetName.value = file.Read();\r\n this._hardwareAttributeInfo.cabinetName.checked = file.Read();\r\n this._hardwareAttributeInfo.factory.value = file.Read();\r\n this._hardwareAttributeInfo.factory.checked = file.Read();\r\n this._hardwareAttributeInfo.comments.value = file.Read();\r\n this._hardwareAttributeInfo.comments.checked = file.Read();\r\n this._hardwareAttributeInfo.actualExpr.value = file.Read();\r\n this._hardwareAttributeInfo.actualExpr.checked = file.Read();\r\n this._hardwareAttributeInfo.brand.value = file.Read();\r\n this._hardwareAttributeInfo.brand.checked = file.Read();\r\n this._hardwareAttributeInfo.model.value = file.Read();\r\n this._hardwareAttributeInfo.model.checked = file.Read();\r\n this._hardwareAttributeInfo.spec.value = file.Read();\r\n this._hardwareAttributeInfo.spec.checked = file.Read();\r\n this._hardwareAttributeInfo.count.value = file.Read();\r\n this._hardwareAttributeInfo.count.checked = file.Read();\r\n this._hardwareAttributeInfo.unit.value = file.Read();\r\n this._hardwareAttributeInfo.unit.checked = file.Read();\r\n\r\n let DataListCount = file.Read();\r\n for (let i = 0; i < DataListCount; i++)\r\n {\r\n let d: [string, string] = [\r\n file.Read(),\r\n file.Read()\r\n ];\r\n (this._hardwareAttributeInfo.DataList.value as [string, string][])[i] = d;\r\n }\r\n this._hardwareAttributeInfo.DataList.checked = file.Read();\r\n\r\n this._hardwareAttributeInfo.type.value = file.Read();\r\n this._hardwareAttributeInfo.type.checked = file.Read();\r\n this._hardwareAttributeInfo.goods.goodsSn = file.Read();\r\n this._hardwareAttributeInfo.goods.goodsId = file.Read();\r\n this._hardwareAttributeInfo.goods.checked = 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(12);\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 //ver11\r\n file.Write(this.IsMaterialLock);\r\n\r\n // ver12\r\n file.Write(this._hardwareAttributeInfo.name.value);\r\n file.Write(this._hardwareAttributeInfo.name.checked);\r\n file.Write(this._hardwareAttributeInfo.roomName.value);\r\n file.Write(this._hardwareAttributeInfo.roomName.checked);\r\n file.Write(this._hardwareAttributeInfo.cabinetName.value);\r\n file.Write(this._hardwareAttributeInfo.cabinetName.checked);\r\n file.Write(this._hardwareAttributeInfo.factory.value);\r\n file.Write(this._hardwareAttributeInfo.factory.checked);\r\n file.Write(this._hardwareAttributeInfo.comments.value);\r\n file.Write(this._hardwareAttributeInfo.comments.checked);\r\n file.Write(this._hardwareAttributeInfo.actualExpr.value);\r\n file.Write(this._hardwareAttributeInfo.actualExpr.checked);\r\n file.Write(this._hardwareAttributeInfo.brand.value);\r\n file.Write(this._hardwareAttributeInfo.brand.checked);\r\n file.Write(this._hardwareAttributeInfo.model.value);\r\n file.Write(this._hardwareAttributeInfo.model.checked);\r\n file.Write(this._hardwareAttributeInfo.spec.value);\r\n file.Write(this._hardwareAttributeInfo.spec.checked);\r\n file.Write(this._hardwareAttributeInfo.count.value);\r\n file.Write(this._hardwareAttributeInfo.count.checked);\r\n file.Write(this._hardwareAttributeInfo.unit.value);\r\n file.Write(this._hardwareAttributeInfo.unit.checked);\r\n\r\n const filteredDataList = (this._hardwareAttributeInfo.DataList.value as [string, string][]).filter(item => item[0] || item[1]);// 过滤掉值为空的项\r\n file.Write(filteredDataList.length);\r\n for (let i = 0; i < filteredDataList.length; i++)\r\n {\r\n file.Write(this._hardwareAttributeInfo.DataList.value[i][0]);\r\n file.Write(this._hardwareAttributeInfo.DataList.value[i][1]);\r\n }\r\n file.Write(this._hardwareAttributeInfo.DataList.checked);\r\n\r\n file.Write(this._hardwareAttributeInfo.type.value);\r\n file.Write(this._hardwareAttributeInfo.type.checked);\r\n file.Write(this._hardwareAttributeInfo.goods.goodsSn);\r\n file.Write(this._hardwareAttributeInfo.goods.goodsId);\r\n file.Write(this._hardwareAttributeInfo.goods.checked);\r\n }\r\n //#endregion\r\n}\r\n","import { Frustum, 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 { ByLayerColorIndex } from '../../Common/LayerConstant';\r\nimport { MatrixPlanarizere, matrixIsCoplane, tempMatrix1 } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { GetBox, IdentityMtx4, UpdateBoundingSphere, equaln, equalv3 } 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 { LayerTableRecord } from '../LayerTableRecord';\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 ParentEntity: Entity; //当这个实体是内嵌实体时,提供了一个访问它父亲的链接\r\n IsEmbedEntity = false;//当这个值为true时,这个实体是复合实体的内嵌实体\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 protected HasBigHoleFaceRenderType = false;//拥有大孔面绘制模式\r\n\r\n protected _CacheDrawObject = new Map();\r\n //材质id\r\n protected _MaterialId: ObjectId;\r\n protected _Color: number = HostApplicationServices.CurrentColorindex;\r\n protected _Layer: ObjectId;\r\n\r\n //自身坐标系\r\n protected _Matrix = new Matrix4();\r\n\r\n constructor()\r\n {\r\n super();\r\n if (this._drawObject)\r\n throw \"未知错误 实体内部已经有对象\";\r\n\r\n this._drawObject = undefined;\r\n }\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 protected _VisibleInRender = true;//在渲染器中显示\r\n protected _Freeze = false;//冻结(无法被选中)\r\n\r\n get Freeze() { return this._Freeze; }\r\n set Freeze(f: boolean)\r\n {\r\n if (f === this._Freeze) return;\r\n this.WriteAllObjectRecord();\r\n this._Freeze = f;\r\n this.Update(UpdateDraw.Material);\r\n }\r\n\r\n get VisibleInRender() { return this._VisibleInRender; }\r\n set VisibleInRender(v: boolean)\r\n {\r\n if (this._VisibleInRender !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._VisibleInRender = v;\r\n }\r\n }\r\n\r\n protected _LockMaterial = false;// 锁定材质\r\n\r\n get LockMaterial() { return this._LockMaterial; }\r\n set LockMaterial(f: boolean)\r\n {\r\n if (f === this._LockMaterial) return;\r\n this.WriteAllObjectRecord();\r\n this._LockMaterial = f;\r\n }\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 (this.LockMaterial)\r\n return;\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 const _obj = this._MaterialId?.Object;\r\n if (_obj?.IsMaterialLock) return;\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 if (this._MaterialId?.IsErase)\r\n return;\r\n return this._MaterialId;\r\n }\r\n\r\n GetMaterialSlots() { }\r\n\r\n IsMtlLockAtSlot(slotIndex?: number)\r\n {\r\n if (this.LockMaterial)\r\n return true;\r\n return this.Material?.Object?.IsMaterialLock;\r\n }\r\n\r\n SetMaterialAtSlot(mtl: ObjectId, slotIndex?: number)\r\n {\r\n if (this.IsMtlLockAtSlot())\r\n return;\r\n this.WriteAllObjectRecord();\r\n this.Material = mtl;\r\n }\r\n\r\n GetMtlLockedStatus()\r\n {\r\n const locked = this.Material?.Object?.IsMaterialLock;\r\n return {\r\n allMtlLocked: locked,\r\n partMtlLocked: locked,\r\n };\r\n }\r\n\r\n /**\r\n * 获取实体的 PhysicalMaterialRecord\r\n * @param {boolean} [containErased=false] 是否包含被删除的材质\r\n * @return {*} {PhysicalMaterialRecord[]}\r\n * @memberof Entity\r\n */\r\n GetPhyMtlRecords(containErased: boolean = false): PhysicalMaterialRecord[]\r\n {\r\n if (this._MaterialId)\r\n {\r\n if (containErased || !this._MaterialId.IsErase)\r\n return [this._MaterialId.Object];\r\n }\r\n return [];\r\n }\r\n\r\n get HasLayer() { return this._Layer?.Object !== undefined; }\r\n\r\n get Layer(): ObjectId\r\n {\r\n return this._Layer?.Object ? this._Layer : HostApplicationServices.Database.LayerTable.Current ?? HostApplicationServices.Database.DefaultLayer.Id;\r\n }\r\n\r\n set Layer(id: ObjectId)\r\n {\r\n if (!id || id === this._Layer) return;\r\n this.WriteAllObjectRecord();\r\n const oldLayerIsOff = this._Layer?.Object?.IsOff;\r\n const oldLayerIsLocked = this._Layer?.Object?.IsLocked;\r\n const oldLayerColorIndex = this._Layer?.Object?.ColorIndex;\r\n this._Layer = id;\r\n // 更新隐藏\r\n if (id.Object.IsOff !== oldLayerIsOff)\r\n this.UpdateVisible();\r\n // 更新锁定\r\n if (id.Object.IsLocked !== oldLayerIsLocked)\r\n {\r\n this.Freeze = id.Object.IsLocked;\r\n for (let [type, obj] of this._CacheDrawObject)\r\n this.UpdateDrawObjectMaterial(type, obj);\r\n }\r\n // 更新颜色\r\n else if (this._Color === ByLayerColorIndex && id.Object.ColorIndex !== oldLayerColorIndex)\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n this.UpdateDrawObjectMaterial(type, obj);\r\n }\r\n }\r\n SetAllMaterialAtSlot(mtl: ObjectId)\r\n {\r\n if (this.LockMaterial)\r\n return;\r\n this.SetMaterialAtSlot(mtl);\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\r\n get ColorIndex(): number\r\n {\r\n return this._Color;\r\n }\r\n\r\n get DrawColorIndex(): number\r\n {\r\n return this._Color === ByLayerColorIndex ? this.Layer.Object.ColorIndex : this._Color;\r\n }\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 isClearDraw = this._CacheDrawObject.size === 0;\r\n let box = this.BoundingBox;\r\n this._Matrix = mtxBak;\r\n if (isClearDraw)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n obj.matrix = this._Matrix;//因为使用了备份的矩阵,导致此时这个矩形是错误的,这里还原它\r\n this.Update(UpdateDraw.Matrix);//保证盒子是正确的\r\n }\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 this;\r\n tempMatrix1.identity().setPosition(v.x, v.y, v.z);\r\n this.ApplyMatrix(tempMatrix1);\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 this.Move({ x: moveX, y: moveY, z: moveZ });\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.OCSNoClone, 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 if (Array.isArray(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 = undefined;\r\n\r\n get DrawObject()\r\n {\r\n if (this.constructor.name === \"Entity\" || this.constructor.name === \"CADObject\")\r\n throw \"出错了\";\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.PlaceFace && !this.HasPlaceFaceRenderType)\r\n renderType = RenderType.Wireframe;\r\n if (renderType === RenderType.BigHoleFace && !this.HasBigHoleFaceRenderType)\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 /** 立即更新 */\r\n DeferUpdate()\r\n {\r\n let mode = this.NeedUpdateFlag;\r\n if (mode === 0) return;\r\n if (!this._CacheDrawObject) return;\r\n\r\n /**\r\n * br1 - br2 关联切割(斜的)\r\n let temp = br1.Clone() 临时的对象来计算切割后的结果\r\n temp br2 因为求交集,所以要访问temp.csg temp.MeshGeom (drawObjectsize = 0)\r\n temp.setContour update失败\r\n */\r\n if (mode & UpdateDraw.Geometry)// && this._CacheDrawObject.size > 0 因为有时提前获取了MeshGeom 如果判断绘制的个数 会导致没有刷新\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(): Material | Material[]\r\n {\r\n const mtlId = this._MaterialId;\r\n if (!mtlId?.IsErase && mtlId?.Object)\r\n return mtlId.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 get IsVisible()\r\n {\r\n return !this._isErase && this._Visible && !this.Layer.Object.IsOff;\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 frustum?: Frustum,\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(cloneDraw = true): this\r\n {\r\n let ent = super.Clone();\r\n ent._CurRenderType = this._CurRenderType;\r\n ent.Template = undefined;\r\n if (cloneDraw)\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() as ObjectId;\r\n if (!this._MaterialId)\r\n this._MaterialId = file.database?.DefaultMaterial?.Id;\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.ReadBool();\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 if (ver > 8)\r\n this._Freeze = file.ReadBool();\r\n else\r\n this._Freeze = false;\r\n\r\n if (ver > 9)\r\n this._VisibleInRender = file.ReadBool();\r\n else\r\n this._VisibleInRender = true;\r\n\r\n if (ver > 10)\r\n this._Layer = file.ReadObjectId() as ObjectId;\r\n else\r\n this._Layer = undefined;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(11);\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.WriteBool(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 file.WriteBool(this._Freeze);\r\n file.WriteBool(this._VisibleInRender);\r\n file.WriteHardObjectId(this._Layer);\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","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 ShopName = \"shopName\",\r\n ShopProps = \"ShopProps\",\r\n\r\n AgentShopName = \"AgentShopName\",//经销商名称\r\n AgentPhone = \"AgentPhone\",//经销商电话\r\n VersionName = \"VersionName\",//版本名称\r\n RegisterTime = \"RegisterTime\",//注册时间\r\n\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 { MathUtils } from \"three\";\r\nimport { equaln } from \"../Geometry/GeUtils\";\r\nimport { clamp as CLAMP, FixedNotZero } from \"./Utils\";\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 //eval_gen_code\r\n let abs = Math.abs;\r\n let acos = Math.acos;\r\n let acosh = Math.acosh;\r\n let asin = Math.asin;\r\n let asinh = Math.asinh;\r\n let atan = Math.atan;\r\n let atanh = Math.atanh;\r\n let atan2 = Math.atan2;\r\n let ceil = Math.ceil;\r\n let cbrt = Math.cbrt;\r\n let expm1 = Math.expm1;\r\n let clz32 = Math.clz32;\r\n let cos = Math.cos;\r\n let cosh = Math.cosh;\r\n let exp = Math.exp;\r\n let floor = Math.floor;\r\n let fround = Math.fround;\r\n let hypot = Math.hypot;\r\n let imul = Math.imul;\r\n let log = Math.log;\r\n let log1p = Math.log1p;\r\n let log2 = Math.log2;\r\n let log10 = Math.log10;\r\n let max = Math.max;\r\n let min = Math.min;\r\n let pow = Math.pow;\r\n let random = Math.random;\r\n let round = Math.round;\r\n let sign = Math.sign;\r\n let sin = Math.sin;\r\n let sinh = Math.sinh;\r\n let sqrt = Math.sqrt;\r\n let tan = Math.tan;\r\n let tanh = Math.tanh;\r\n let trunc = Math.trunc;\r\n let E = Math.E;\r\n let LN10 = Math.LN10;\r\n let LN2 = Math.LN2;\r\n let LOG10E = Math.LOG10E;\r\n let LOG2E = Math.LOG2E;\r\n let PI = Math.PI;\r\n let SQRT1_2 = Math.SQRT1_2;\r\n let SQRT2 = Math.SQRT2;\r\n let clamp = CLAMP;\r\n let eq = equaln;\r\n let r2d = MathUtils.radToDeg;\r\n let d2r = MathUtils.degToRad;\r\n let R2D = MathUtils.RAD2DEG;\r\n let D2R = MathUtils.DEG2RAD;\r\n let fix = FixedNotZero;\r\n //eval_gen_code\r\n\r\n let code = \"\";\r\n //模板材质变量的value默认是\"\",会导致eval报错,params[name]为\"\"时换成0\r\n if (params)\r\n for (let name in params)\r\n code += `let ${name} = ${params[name] != \"\" ? params[name] : \"0\"};`;\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 result = result();\r\n\r\n if (typeof result === \"bigint\")\r\n result = Number(result);//防止bigint乱入\r\n return result;\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, fractionDigits: number = 0, 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 {\r\n let value = safeEval(str.slice(1, -1), params);\r\n let strValue: string;\r\n if (typeof value === \"number\")\r\n strValue = FixedNotZero(value, fractionDigits, expr);\r\n else\r\n strValue = value;\r\n\r\n expr = expr.replace(str, strValue);\r\n }\r\n return expr;\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 { StoreageKeys } from \"./StoreageKeys\";\r\nimport { safeEval } from \"./eval\";\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, expr: string = undefined)\r\n{\r\n if (typeof v === \"string\")\r\n {\r\n if (expr?.includes(\"fix\"))\r\n return v;//如果表达式中有fix,则尊重表达式的格式化,不再二次格式化\r\n\r\n v = parseFloat(v);\r\n }\r\n\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 */\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 IsFreeze(obj: Object3D)\r\n{\r\n return obj[\"freeze\"];\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\r\n/** 有触摸板 */\r\nexport const isHasTouch = () =>\r\n{\r\n return ('ontouchstart' in document.documentElement);\r\n};\r\n\r\nexport function isChinese(str: string)\r\n{\r\n const reg = new RegExp(`\\^[^\\\\u4e00-\\\\u9fa5]+$`);\r\n if (reg.test(str)) return false;\r\n return true;\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\n//范围交集 [a1,a2] 与 [b1,b2] 的交集\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, fuzz = 1e-8): compareVectorFn\r\n{\r\n let cacheKey = `${sortKey}${fuzz}`;\r\n if (comparePointCache.has(cacheKey))\r\n return comparePointCache.get(cacheKey);\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, fuzz)) 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 { 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 \"opacity\": { type: \"f\", value: 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, logBuf = false, opacity = 1): ShaderMaterialParameters\r\n{\r\n return {\r\n uniforms: {\r\n \"SurfaceColor\": { value: color },\r\n \"opacity\": { value: opacity },\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\nexport const 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 ----256\r\n [135, 206, 235, 255], //-----257\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, freeze = false): LineBasicMaterial\r\n {\r\n if (freeze) color = 257;\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, enableTransparent = false)\r\n {\r\n let key = `${color},${side},${enableTransparent ? 1 : 0}`;\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, ColorMaterial.UseLogBuf);\r\n let mtl = new ShaderMaterial(shaderParams);\r\n if (enableTransparent)\r\n {\r\n Object.defineProperty(mtl, \"transparent\", {\r\n get: () => mtl.uniforms.opacity.value !== 1\r\n });\r\n Object.defineProperty(mtl.uniforms.opacity, \"value\", {\r\n get: () => HostApplicationServices.ConceptualOpacity\r\n });\r\n }\r\n this._ConceptualMaterial.set(key, mtl);\r\n return mtl;\r\n }\r\n\r\n private static _ConceptualTransparentMaterial: Map = new Map();\r\n static GetConceptualTransparentMaterial(color: number, side: Side = FrontSide)\r\n {\r\n let key = `${color},${side}`;\r\n if (this._ConceptualTransparentMaterial.has(key))\r\n return this._ConceptualTransparentMaterial.get(key);\r\n let shaderParams = GetGoodShaderSimple(new Vector3().fromArray(this.GetColor(color).toArray()), side, ColorMaterial.UseLogBuf);\r\n let mtl = new ShaderMaterial(shaderParams);\r\n Object.defineProperty(mtl, \"transparent\", {\r\n get: () => mtl.uniforms.opacity.value !== 1\r\n });\r\n Object.defineProperty(mtl.uniforms.opacity, \"value\", {\r\n get: () => HostApplicationServices.ConceptualTransparentOpacity\r\n });\r\n this._ConceptualTransparentMaterial.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), 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), 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\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\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\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 let materialOffset = 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 let count: number;\r\n if (isIndexed)\r\n count = geometry.index.count;\r\n else if (geometry.attributes.position !== undefined)\r\n count = geometry.attributes.position.count;\r\n else\r\n return null;\r\n\r\n if (geometry.groups.length === 0)\r\n {\r\n mergedGeometry.addGroup(offset, count, materialOffset);\r\n materialOffset++;\r\n }\r\n else\r\n {\r\n let maxMaterialIndex = 0;\r\n for (let g of geometry.groups)\r\n {\r\n maxMaterialIndex = Math.max(maxMaterialIndex, g.materialIndex ?? 0);\r\n mergedGeometry.addGroup(offset + g.start, g.count, materialOffset + g.materialIndex);\r\n }\r\n\r\n materialOffset += (maxMaterialIndex + 1);\r\n }\r\n offset += count;\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 { 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","import { Matrix4, Vector3 } from 'three';\r\nimport { arrayRemoveDuplicateBySort } 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 { 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, equalv2, 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, tolerance = 1e-4): IntersectResult[]\r\n{\r\n if (!cu1.IsCoplaneTo(cu2)) return [];\r\n\r\n let c1OcsInv = cu1.OCSInv;\r\n let c1Ocs = cu1.OCSNoClone;\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, tolerance)) 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, tolerance))//防止点重复\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, tolerance);\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, tolerance = 1e-6): 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, tolerance))\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, tolerance);\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, tolerance);\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 //v1 p1->p2\r\n //v2 p3->p4\r\n\r\n //v3 p2->p4\r\n\r\n let dx1 = p1.x - p2.x;//v1\r\n let dx2 = p3.x - p4.x;//v2\r\n let dx3 = p4.x - p2.x;//v3\r\n\r\n let dy1 = p1.y - p2.y;//v1\r\n let dy2 = p3.y - p4.y;//v2\r\n let dy3 = p4.y - p2.y;//v3\r\n\r\n let det = (dx2 * dy1) - (dy2 * dx1);//v1.cross(v2) 叉积 几何意义是平行四边形的面积\r\n\r\n let v2Length = Math.sqrt(dx2 * dx2 + dy2 * dy2);\r\n\r\n if (equaln(det / v2Length, 0.0, 1e-5))//平行 1e-5是平行四边形的高\r\n {\r\n let det2 = (dx2 * dy3) - (dy2 * dx3);\r\n if (equaln(det2 / v2Length, 0.0, 1e-5))//共线 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 //暂时没有必要\r\n // let cu1EndPoint = cu1.EndPoint;\r\n // for (let i = 0; i < ptPars.length; i++)\r\n // if (equalv3(ptPars[i].pt, cu1EndPoint, tolerance))\r\n // ptPars[i].thisParam = 1;//如果通过容差测试,我们认为它在终点上\r\n\r\n ptPars = ptPars.filter(res => res.thisParam <= 1);\r\n }\r\n else if (isEnd)\r\n {\r\n //暂时没有必要\r\n // let cu1StartPoint = cu1.StartPoint;\r\n // for (let i = 0; i < ptPars.length; i++)\r\n // if (equalv3(ptPars[i].pt, cu1StartPoint, tolerance))\r\n // ptPars[i].thisParam = 0;//如果通过容差测试,我们认为它在起点上\r\n\r\n ptPars = ptPars.filter(res => res.thisParam >= 0);\r\n }\r\n }\r\n else //当曲线不延伸时,它通过了容差测验,这时我们认为曲线在线上\r\n for (let i = 0; i < ptPars.length; i++)\r\n ptPars[i].thisParam = clamp(ptPars[i].thisParam, 0, 1);\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 else //当曲线不延伸时,它通过了容差测验,这时我们认为曲线在线上\r\n for (let i = 0; i < ptPars.length; i++)\r\n ptPars[i].argParam = clamp(ptPars[i].argParam, 0, 1);\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\r\n let fn = ComparePointFnGenerate(\"xyz\", tolerance);\r\n intRes.sort((p1, p2) => fn(p1.pt, p2.pt));\r\n arrayRemoveDuplicateBySort(intRes, (p1, p2) => equalv3(p1.pt, p2.pt, tolerance));\r\n\r\n return intRes;\r\n}\r\n\r\nexport function IntersectLineAndEllipseFor2D(l: Line, el: Ellipse)\r\n{\r\n let elInv = new Matrix4().makeRotationZ(-el.Rotation).multiply(el.OCSInv);\r\n let matInv = new Matrix4().getInverse(elInv);\r\n\r\n let a = el.RadX;\r\n let b = el.RadY;\r\n let sp = l.StartPoint.applyMatrix4(elInv);\r\n let ep = l.EndPoint.applyMatrix4(elInv);\r\n\r\n if (!(equaln(sp.z, 1e-6) && equaln(ep.z, 1e-6)))\r\n {\r\n if (equalv2(sp, ep, 1e-6))//如果与之垂直\r\n {\r\n let p = sp.setZ(0).applyMatrix4(matInv);\r\n if (el.PtOnCurve(p))\r\n return [\r\n {\r\n pt: p,\r\n thisParam: l.GetParamAtPoint(p),\r\n argParam: el.GetParamAtPoint(p)\r\n }\r\n ];\r\n }\r\n //todo:求交面\r\n return [];\r\n }\r\n\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 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 { BufferGeometry, Line, Material, Object3D, Curve as TCurve, Line as TLine, 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 { CADFiler } from '../CADFiler';\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 protected _RoomName: string = \"\";\r\n protected _CabinetName: string = \"\";\r\n\r\n get RoomName() { return this._RoomName; }\r\n set RoomName(value: string)\r\n {\r\n if (value === this._RoomName) return;\r\n this.WriteAllObjectRecord();\r\n this._RoomName = value;\r\n }\r\n\r\n get CabinetName() { return this._CabinetName; }\r\n set CabinetName(value: string)\r\n {\r\n if (value === this._CabinetName) return;\r\n this.WriteAllObjectRecord();\r\n this._CabinetName = value;\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, fuzz = 1e-6): number { return; }\r\n //直接提供点在线上的参数,不管点有没有在线上\r\n GetParamAtPoint2(pt: Vector3, fuzz = 1e-6): number { return this.GetParamAtPoint(pt, fuzz); }\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 GetFirstDeriv(param: number | Vector3): Vector3 { return; }\r\n GetFirstDerivAngle(param: number | Vector3): number\r\n {\r\n let d = this.GetFirstDeriv(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-5): boolean\r\n {\r\n return equalv3(this.StartPoint, pt, fuzz) || equalv3(this.EndPoint, pt, fuzz) || this.ParamOnCurve(this.GetParamAtPoint(pt, fuzz));\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\r\n /**\r\n * 偏移曲线\r\n * @param offsetDist 左边负数 右边正数\r\n * @returns 返回偏移后的曲线 可能返回多条曲线\r\n */\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 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 (pts.length === 0)\r\n pts.push(new Vector3);\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.DrawColorIndex));\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.DrawColorIndex);\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 protected ReadRoomAndCabinetName(file: CADFiler)\r\n {\r\n this._RoomName = file.Read();\r\n this._CabinetName = file.Read();\r\n }\r\n\r\n protected WriteRoomAndCabinetName(file: CADFiler)\r\n {\r\n file.Write(this._RoomName);\r\n file.Write(this._CabinetName);\r\n }\r\n}\r\n\r\nexport const DbCurve = Curve;\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 { 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.parseConstantFromPoint(constant);\r\n }\r\n\r\n parseConstantFromPoint(constant: Vector3)\r\n {\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 { Matrix2 } from './Matrix2';\r\n\r\nexport const ROTATE_MTX2 = new Matrix2().set(0, -1, 1, 0);\r\nexport function RotateUVs(geo: THREE.Geometry)\r\n{\r\n for (let uvs of geo.faceVertexUvs)\r\n {\r\n for (let uv of uvs)\r\n {\r\n for (let v of uv)\r\n ROTATE_MTX2.applyVector(v);\r\n }\r\n }\r\n geo.uvsNeedUpdate = true;\r\n}\r\n","import { Box3, BufferGeometry, Line3, Matrix3, Matrix4, Object3D, Shape, Line as TLine, 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, MoveMatrix, equaln, equalv3, isParallelTo, updateGeometry } from '../../Geometry/GeUtils';\r\nimport { PlaneExt } from '../../Geometry/Plane';\r\nimport { ROTATE_MTX2 } from '../../Geometry/RotateUV';\r\nimport { IntersectEllipseAndLine, IntersectLineAndArc, IntersectLineAndCircle, IntersectLineAndLine, IntersectOption, IntersectPolylineAndCurve, IntersectResult, 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.DrawColorIndex));\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.GetFirstDeriv(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 GetFirstDeriv(param: number | Vector3): Vector3\r\n {\r\n return this.EndPoint.sub(this.StartPoint);\r\n }\r\n\r\n /**\r\n * 需要注意的是,平行线和共线无交点\r\n * @param curve\r\n * @param intType\r\n * @param [tolerance=1e-4]\r\n * @returns\r\n */\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-4): IntersectResult[]\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.GetFirstDeriv(0).multiplyScalar(param));\r\n }\r\n override GetParamAtPoint(pt: Vector3, fuzz = 1e-5): number\r\n {\r\n let { closestPt, param } = this.GetClosestAtPoint(pt, true);\r\n if (!equalv3(closestPt, pt, fuzz))\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.GetFirstDeriv(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.GetFirstDeriv(0).normalize(), cu.GetFirstDeriv(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 offset = this._EndPoint.clone().sub(this._StartPoint).normalize().multiplyScalar(offsetDist);\r\n ROTATE_MTX2.applyVector(offset);\r\n let newLine = this.Clone() as Line;\r\n newLine.ClearDraw();\r\n newLine._StartPoint.add(offset);\r\n newLine._EndPoint.add(offset);\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 if (ver > 1)\r\n this.ReadRoomAndCabinetName(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._StartPoint.toArray());\r\n file.Write(this._EndPoint.toArray());\r\n\r\n this.WriteRoomAndCabinetName(file);\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 StartPointInOcs(): Vector3 { return this._StartPoint.clone(); }\r\n get EndPointInOcs(): Vector3 { return this._EndPoint.clone(); }\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 { Pts2Polyline, getArcOrCirNearPts, getDeterminantFor2V, getTanPtsOnEllipse } from '../../Common/CurveUtils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { AsVector2, MoveMatrix, angle, angleTo, equaln, equalv3, rotatePoint } from '../../Geometry/GeUtils';\r\nimport { Matrix2 } from '../../Geometry/Matrix2';\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._endAngle;\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\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 Extend(newParam: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (newParam < 0)\r\n this._startAngle = this.GetAngleAtParam(newParam);\r\n else if (newParam > 1)\r\n this._endAngle = this.GetAngleAtParam(newParam);\r\n this.Update();\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 return this.PtOnEllipse(pt) && this.ParamOnCurve(this.GetParamAtPoint(pt));\r\n }\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\r\n GetPointAtParam(param: number)\r\n {\r\n let an = this.TotalAngle * param + this._startAngle;\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 let mtx = new Matrix2().setRotate(this._rotate);\r\n mtx.applyVector(pt);\r\n return pt.applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n GetParamAtPoint(pt?: Vector3)\r\n {\r\n if (!this.PtOnEllipse(pt)) return NaN;\r\n\r\n let an = this.GetCircleAngleAtPoint(pt);\r\n let allAngle = this.TotalAngle;\r\n let param = an / allAngle;\r\n if (this.IsClose)\r\n return param;\r\n else\r\n {\r\n if (an >= this._startAngle)\r\n param = (an - this._startAngle) / allAngle;\r\n else\r\n param = ((Math.PI * 2) - (this._startAngle - an)) / allAngle;\r\n\r\n //剩余的参数\r\n let remParam = Math.PI * 2 / allAngle - 1;\r\n\r\n if (param > (remParam * 0.5 + 1))//一半\r\n param = (param - 1) - remParam;//返回负数\r\n\r\n return param;\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\r\n GetParamAtDist(d: number)\r\n {\r\n return d / this.Length;\r\n }\r\n\r\n GetAngleAtParam(param: number)\r\n {\r\n return this._startAngle + param * this.TotalAngle;\r\n }\r\n\r\n GetCircleAngleAtPoint(pt: Vector3): number\r\n {\r\n pt = pt.clone().applyMatrix4(this.OCSInv);\r\n let romtx = new Matrix2().setRotate(-this._rotate);\r\n romtx.applyVector(pt);\r\n //https://www.petercollingridge.co.uk/tutorials/computational-geometry/finding-angle-around-ellipse/\r\n let an = Math.atan(this.RadX * pt.y / (this.RadY * pt.x));\r\n\r\n if (pt.x < 0) an += Math.PI;\r\n else if (an < 0) an += Math.PI * 2;\r\n return an;\r\n }\r\n\r\n GetFirstDeriv(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\r\n rotatePoint(vec, this._rotate);\r\n return vec.applyMatrix4(this.OCS.setPosition(0, 0, 0));\r\n }\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.OCSNoClone);\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 return [];\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 ];\r\n for (let p of pts)\r\n p.applyMatrix4(tmpMat4).applyMatrix4(this.OCSNoClone);\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\r\n\r\n Convert2Polyline(count = 0): Polyline\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 //忽略空多段线怎么样?\r\n if (pts.length < 2)\r\n {\r\n let pl = new Polyline;\r\n return pl;\r\n }\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\r\n if (ver > 1)\r\n this.ReadRoomAndCabinetName(file);\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 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 this.WriteRoomAndCabinetName(file);\r\n }\r\n}\r\n","import { Box3, Matrix3, Matrix4, Vector2, Vector3 } from 'three';\r\nimport { GetTanPtsOnArcOrCircle, getArcOrCirNearPts, getCircleCenter } from '../../Common/CurveUtils';\r\nimport { SetMtxVector, TransformVector, reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { AsVector3, MoveMatrix, ZeroVec, angle, clampRad, equaln, equalv2, equalv3, polar } from '../../Geometry/GeUtils';\r\nimport { Orbit } from '../../Geometry/Orbit';\r\nimport { IntersectArcAndArc, IntersectCircleAndArc, IntersectEllipseAndCircleOrArc, IntersectLineAndArc, IntersectOption, IntersectPolylineAndCurve, IntersectResult, 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 private _DisplayAccuracy = 0;\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 if (this._DisplayAccuracy !== 0)\r\n {\r\n sp.DisplayAccuracy = this._DisplayAccuracy;\r\n }\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 DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\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, fuzz = 1e-6)\r\n {\r\n if (this._Radius == 0 ||\r\n this.AllAngle == 0 ||\r\n !equaln(pt.distanceTo(this.Center), this._Radius, fuzz))\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): IntersectResult[]\r\n {\r\n if (curve instanceof Arc || curve.constructor.name === \"RoomWallArc\")\r\n {\r\n return IntersectArcAndArc(this, curve as Arc, intType, tolerance);\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 * @param {number} endAngle 结束的角度\r\n */\r\n ComputeAnlge(endAngle: number): 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 GetFirstDeriv(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.ReadBool();\r\n if (ver > 2)\r\n {\r\n this._DisplayAccuracy = file.Read();\r\n }\r\n if (ver > 3)\r\n this.ReadRoomAndCabinetName(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(4);\r\n file.Write(this._Radius);\r\n file.Write(this._StartAngle);\r\n file.Write(this._EndAngle);\r\n file.WriteBool(this._Clockwise);\r\n file.Write(this._DisplayAccuracy);\r\n\r\n //ver4\r\n this.WriteRoomAndCabinetName(file);\r\n }\r\n //#endregion\r\n}\r\n","export enum DragPointType\r\n{\r\n Grip = 0,\r\n Stretch = 1,\r\n End = 2,//捕捉端点\r\n}\r\n","import { BufferGeometry, EllipseCurve, Material, Matrix3, Matrix4, Object3D, Line as TLine, 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 { GetTanPtsOnArcOrCircle, getArcOrCirNearPts } 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 { AsVector3, MoveMatrix, ZeroVec, angle, equaln, equalv2, polar } from '../../Geometry/GeUtils';\r\nimport { Orbit } from '../../Geometry/Orbit';\r\nimport { IntersectCircleAndArc, IntersectCircleAndCircle, IntersectEllipseAndCircleOrArc, IntersectLineAndCircle, IntersectOption, IntersectPolylineAndCurve, IntersectResult, 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 private _DisplayAccuracy = 0;\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 DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\r\n }\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 if (this._DisplayAccuracy !== 0)\r\n {\r\n sp.DisplayAccuracy = this._DisplayAccuracy;\r\n }\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 override IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-5): IntersectResult[]\r\n {\r\n if (curve instanceof Arc)\r\n {\r\n return IntersectCircleAndArc(this, curve, intType, tolerance);\r\n }\r\n if (curve instanceof Line)\r\n {\r\n return SwapParam(IntersectLineAndCircle(curve, this, reverseIntersectOption(intType), tolerance));\r\n }\r\n if (curve instanceof Circle)\r\n {\r\n return IntersectCircleAndCircle(this, curve, tolerance);\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), tolerance));\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.DrawColorIndex));\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.DrawColorIndex);\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 break;\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 GetFirstDeriv(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 if (ver > 1)\r\n this.ReadRoomAndCabinetName(file);\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\r\n this.WriteRoomAndCabinetName(file);\r\n }\r\n //#endregion\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 { BUL_IS_LINE_FUZZ } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector3, equaln } from \"../GeUtils\";\r\n\r\n\r\n\r\n\r\nexport const ARC_DRAW_CONFIG = {\r\n ARC_SplitLength: 0.4,//圆的分段长度\r\n ARC_RADIUS_MIN: 2.5,//大于半径25的自动优化成36等分圆 保证绘制光滑\r\n Arc_MinSplitCount: 8,//圆的最小分段个数\r\n ARC_MaxSplitCount: 90,//圆的最大分段个数\r\n};\r\n\r\n\r\nexport function GetArcDrawCount(arc: Arc | Circle | number): number\r\n{\r\n let radius = typeof arc === \"number\" ? arc : arc.Radius;\r\n let splitCount = radius / ARC_DRAW_CONFIG.ARC_SplitLength;\r\n //保证是偶数(避免奇数和Shape2计算方式一致导致的干涉)\r\n splitCount = clamp(Math.floor(splitCount * 0.5) * 2, ARC_DRAW_CONFIG.Arc_MinSplitCount, ARC_DRAW_CONFIG.ARC_MaxSplitCount);\r\n if (radius > ARC_DRAW_CONFIG.ARC_RADIUS_MIN)\r\n splitCount = Math.max(36, splitCount);\r\n return splitCount;\r\n}\r\n\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 = GetArcDrawCount(cu);\r\n if (cu.DisplayAccuracy > 0)\r\n splitCount = cu.DisplayAccuracy;\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 (!equaln(cu.GetBulgeAt(i), 0, BUL_IS_LINE_FUZZ))// is arc\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = GetArcDrawCount(arc);\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 = GetArcDrawCount(cu);\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 (!equaln(cu.GetBulgeAt(i), 0, BUL_IS_LINE_FUZZ))// is arc\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = GetArcDrawCount(arc);\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 = GetArcDrawCount(arc);\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 { EllipseCurve, Shape, Vector2 } from \"three\";\r\nimport { GetArcDrawCount } from \"../Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams\";\r\nimport { equaln, 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 private _DisplayAccuracy: number = 0;\r\n\r\n get DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n this._DisplayAccuracy = v;\r\n }\r\n getPoints(divisions: number = 12, optimizeArc = true): Vector2[]\r\n {\r\n let points: Vector2[] = [],\r\n 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 //根据圆的半径来确定绘制个数(与SplitCurveParams一致)\r\n let splitCount = GetArcDrawCount(tempArc);\r\n if (this._DisplayAccuracy > 0)\r\n {\r\n splitCount = this._DisplayAccuracy;\r\n }\r\n resolution = Math.max(1, Math.ceil(Math.abs((tempArc.AllAngle * 0.5) / Math.PI) * splitCount * 0.5)) * 2;\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 { 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[], displayAccuracy = 0): Shape2\r\n{\r\n let shape = new Shape2();\r\n shape.DisplayAccuracy = displayAccuracy;\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 { Vec2 } from \"./CheckIntersect\";\r\n/*\r\n功能:判断线段是否存在交点\r\nref:https://www.geeksforgeeks.org/check-if-two-given-line-segments-intersect/\r\n*/\r\n\r\n// Given three colinear points p, q, r, the function checks if\r\n// point q lies on line segment 'pr'\r\nfunction onSegment(p: Vec2, q: Vec2, r: Vec2): boolean\r\n{\r\n if (q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) &&\r\n q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y))\r\n return true;\r\n return false;\r\n}\r\n// To find orientation of ordered triplet (p, q, r).\r\n// The function returns following values\r\n// 0 --> p, q and r are colinear\r\n// 1 --> Clockwise\r\n// 2 --> Counterclockwise\r\nexport function orientation(p: Vec2, q: Vec2, r: Vec2): number\r\n{\r\n // See https://www.geeksforgeeks.org/orientation-3-ordered-points/\r\n // for details of below formula.\r\n let val = (q.y - p.y) * (r.x - q.x) -\r\n (q.x - p.x) * (r.y - q.y);\r\n if (val === 0)\r\n return 0; // colinear\r\n return (val > 0) ? 1 : 2; // clock or counterclock wise\r\n}\r\n/**\r\n * 判断线段`p1q1`和线段`p2q2`是否相交.\r\n */\r\nexport function doIntersect(p1: Vec2, q1: Vec2, p2: Vec2, q2: Vec2): boolean\r\n{\r\n // Find the four orientations needed for general and\r\n // special cases\r\n let o1 = orientation(p1, q1, p2);\r\n let o2 = orientation(p1, q1, q2);\r\n let o3 = orientation(p2, q2, p1);\r\n let o4 = orientation(p2, q2, q1);\r\n // General case\r\n if (o1 !== o2 && o3 !== o4)\r\n return true;\r\n // Special Cases\r\n // p1, q1 and p2 are colinear and p2 lies on segment p1q1\r\n if (o1 === 0 && onSegment(p1, p2, q1))\r\n return true;\r\n // p1, q1 and q2 are colinear and q2 lies on segment p1q1\r\n if (o2 === 0 && onSegment(p1, q2, q1))\r\n return true;\r\n // p2, q2 and p1 are colinear and p1 lies on segment p2q2\r\n if (o3 === 0 && onSegment(p2, p1, q2))\r\n return true;\r\n // p2, q2 and q1 are colinear and q1 lies on segment p2q2\r\n if (o4 === 0 && onSegment(p2, q1, q2))\r\n return true;\r\n return false; // Doesn't fall in any of the above cases\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 { TransformVector } from '../Common/Matrix4Utils';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { AsVector2, AsVector3, ZeroVec, 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].clone().applyMatrix4(this.OCSNoClone);;\r\n }\r\n get EndPoint()\r\n {\r\n return arrayLast(this._PointList).clone().applyMatrix4(this.OCSNoClone);;\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 GetPointAtParam(param: number): Vector3\r\n {\r\n const endParam = this.EndParam;\r\n if (param < 0)\r\n {\r\n const p1 = this.StartPoint;\r\n const derv = this.GetFirstDeriv(0.1);\r\n return p1.add(derv.multiplyScalar(param / endParam * this.Length));\r\n }\r\n if (param > endParam)\r\n {\r\n const p2 = this.EndPoint;\r\n const derv = this.GetFirstDeriv(endParam);\r\n return p2.add(derv.multiplyScalar((param - endParam) / endParam * this.Length));\r\n }\r\n return this.Shape.getPoint(param / endParam).applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n GetFirstDeriv(param: number | Vector3): Vector3\r\n {\r\n if (param instanceof Vector3)\r\n param = this.GetParamAtPoint(param);\r\n return this.GetPointAtParam(param).sub(this.GetPointAtParam(param - 0.1)).normalize();\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 = TransformVector(vec.clone(), this.OCSInv).setZ(0);\r\n if (equalv3(vec, ZeroVec)) return;\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 = TransformVector(vec.clone(), this.OCSInv).setZ(0);\r\n if (equalv3(vec, ZeroVec)) return;\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 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 if (ver > 2)\r\n this.ReadRoomAndCabinetName(file);\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);//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 this.WriteRoomAndCabinetName(file);\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, fuzz);\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, fuzz: number)\r\n {\r\n return c1.IntersectWith2(c2, intType, fuzz);\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 w.curve.TempData = 2;\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 return true;\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 { Matrix4, Vector3 } from \"three\";\r\nimport { arrayPushArray } from \"../Common/ArrayExt\";\r\nimport { ComputerCurvesNormalOCS } from \"../Common/CurveUtils\";\r\nimport { TransformVector } from \"../Common/Matrix4Utils\";\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 { 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 { AsVector2, equalv3, ZAxisN } from \"./GeUtils\";\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, Math.ceil(-Math.log10(fuzz)));\r\n\r\n for (let rs of parse.RegionsOutline)\r\n {\r\n const polyline = new Polyline;\r\n polyline.CloseMark = true;\r\n\r\n //获取曲线所在平面矩阵\r\n const OCS = ComputerCurvesNormalOCS(rs.map(r => r.curve));\r\n const OCSInv = new Matrix4().getInverse(OCS);\r\n\r\n for (let r of rs)\r\n {\r\n let bul = 0;\r\n if (r.curve instanceof Arc)\r\n {\r\n bul = r.curve.Bul;\r\n if (equalv3(TransformVector(r.curve.Normal, OCSInv), ZAxisN, 1e-3))\r\n bul *= -1;\r\n if (r.isReverse)\r\n bul *= -1;\r\n }\r\n polyline.LineData.push({\r\n pt: AsVector2(r.s.applyMatrix4(OCSInv)),\r\n bul\r\n });\r\n }\r\n polyline.ApplyMatrix(OCS);\r\n\r\n let contour = Contour.CreateContour(polyline, 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 { Box2, 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(bigCurve: Polyline | Circle | Ellipse, smallCurve: Curve)\r\n{\r\n //#fix fileid 2087494 使用二维的box来计算看起来没有问题\r\n if (!Box2.prototype.containsBox.apply(bigCurve.BoundingBox.expandByVector(fuzzV3), [smallCurve.BoundingBox]))\r\n return false;\r\n\r\n let cus: Curve[] = [];\r\n if (smallCurve instanceof Polyline)\r\n cus = smallCurve.Explode();\r\n else\r\n cus = [smallCurve];\r\n\r\n return cus.every(c =>\r\n {\r\n let pts = getIntPtContextPts(bigCurve, c);\r\n if (pts.length <= 1)\r\n pts.push(c.StartPoint, c.EndPoint);\r\n return IsPtsAllInOrOnReg(bigCurve, 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, IntersectResult } 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 = CurveContainerCurve(sourceOutline, targetOutline, interPts);\r\n targetContainerSource = false;\r\n }\r\n else\r\n {\r\n sourceContainerTarget = false;\r\n targetContainerSource = CurveContainerCurve(targetOutline, sourceOutline, interPts);\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, COMBINE_FUZZ);\r\n if (hasEqualCus)\r\n {\r\n //方向相同\r\n if (\r\n equalv3(cu.GetFirstDeriv(cu.MidParam).normalize(), pl.GetFirstDeriv(pl.MidParam).normalize(), 1e-2)\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 let areaState = sourceOutline.Area > targetOutline.Area;\r\n //反包含\r\n if ((!areaState && fastCurveInCurve2(targetOutline, sourceOutline, interPts[0]?.pt)) || equalCurve(targetOutline, sourceOutline))\r\n return [];\r\n //包含\r\n if ((areaState && fastCurveInCurve2(sourceOutline, targetOutline, interPts[0]?.pt)))\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.GetFirstDeriv(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.GetFirstDeriv(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\r\n /**\r\n * 计算轮廓被差集之后的结果\r\n * @param targets 切去的轮廓\r\n * @returns {holes: Polyline[] 网洞曲线列表, subtractList: Polyline[] 轮廓曲线列表}\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 curveIntParamsMap = 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 let areaState = sourceOutline.Area > targetOutline.Area;\r\n //反包含\r\n if ((!areaState && fastCurveInCurve2(targetOutline, sourceOutline, pts[0]?.pt)) || equalCurve(targetOutline, sourceOutline))\r\n return { holes, subtractList };\r\n //包含\r\n if (areaState && fastCurveInCurve2(sourceOutline, targetOutline, pts[0]?.pt))\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 curveIntParamsMap.set(targetOutline, pts.map(r => r.argParam));\r\n }\r\n }\r\n\r\n let sourceSplitCurves = sourceOutline.GetSplitCurves(intPars) as Polyline[];\r\n let targetSplitCurves: Polyline[] = [];\r\n\r\n let targetSplitCurve_CurvesMap = new WeakMap();//分裂后->原始曲线 映射\r\n\r\n for (let [curve, intParams] of curveIntParamsMap)\r\n {\r\n\r\n let splitCurves = curve.GetSplitCurves(intParams) as Polyline[];\r\n for (let splitCurve of splitCurves)\r\n {\r\n targetSplitCurve_CurvesMap.set(splitCurve, curve);\r\n targetSplitCurves.push(splitCurve);\r\n }\r\n }\r\n\r\n for (let sourceSplitcu of sourceSplitCurves)\r\n {\r\n let index = targetSplitCurves.findIndex(cu => fastEqualCurve(cu, sourceSplitcu, 0.05));\r\n if (index !== -1)\r\n {\r\n let targetSplitcu = targetSplitCurves[index];\r\n let isEqualNormal = equalv3(sourceOutline.Normal, targetSplitCurve_CurvesMap.get(targetSplitcu).Normal, 1e-3);\r\n\r\n if (isEqualNormal === !equalv3(sourceSplitcu.StartPoint, targetSplitcu.StartPoint, 0.05))//不同向\r\n {\r\n subtractList.push(sourceSplitcu);\r\n // TestDraw(sourceSplitcu.Clone(), 1);\r\n // TestDraw(targetSplitcu.Clone(), 1);\r\n }\r\n // else\r\n // TestDraw(sourceSplitcu.Clone(), 2);\r\n\r\n targetSplitCurves.splice(index, 1);\r\n\r\n continue;\r\n }\r\n\r\n if (targets.every(t => !fastCurveInCurve(t.Curve as Polyline, sourceSplitcu)))\r\n subtractList.push(sourceSplitcu);\r\n }\r\n\r\n //源对象没有被破坏\r\n let sourceNotBreak = subtractList.length === sourceSplitCurves.length;\r\n\r\n for (let pl of targetSplitCurves)\r\n if (fastCurveInCurve(sourceOutline, pl))\r\n subtractList.push(pl);\r\n\r\n if (sourceNotBreak && subtractList.length === sourceSplitCurves.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[], -Math.log10(COMBINE_FUZZ));\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, -Math.log10(tolerance)) : [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\r\n /**\r\n * 判断是否完全包含曲线\r\n * @param smallCurve 传入的这个曲线不能比本轮廓还大(这个需要自己优化?)\r\n * @returns\r\n */\r\n ContainerCurve(smallCurve: Polyline | Circle | Curve, isAreaCheckd = false, ipts: IntersectResult[] = undefined): boolean\r\n {\r\n if (!isAreaCheckd && this.Area < smallCurve.Area)\r\n return false;\r\n return CurveContainerCurve(this._Curve, smallCurve, ipts);\r\n }\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 = 5e-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 * 对于双多段线互相切割后的结果(或者交点个数为0),快速判断曲线是否在另一条曲线内部\r\n * @param bigCurve\r\n * @param smallCurve\r\n * @returns\r\n */\r\nfunction fastCurveInCurve(bigCurve: Polyline | Circle, smallCurve: Curve): boolean\r\n{\r\n return bigCurve.PtInCurve(smallCurve.Midpoint);\r\n}\r\n\r\n//当交点小于等于1时\r\nexport function fastCurveInCurve2(bigCurve: Polyline | Circle, smallCurve: Curve, iPt?: Vector3)\r\n{\r\n if (iPt)//提高准确性,避免使用交点去判断 导致的错误\r\n {\r\n let sp = smallCurve.StartPoint;;\r\n if (equalv3(sp, iPt, 1e-3))\r\n return bigCurve.PtInCurve(smallCurve.Midpoint);\r\n else\r\n return bigCurve.PtInCurve(smallCurve.StartPoint);\r\n }\r\n else\r\n return bigCurve.PtInCurve(smallCurve.Midpoint) || bigCurve.PtInCurve(smallCurve.StartPoint);\r\n}\r\n\r\n//大曲线是否完全包含小曲线(或者重合)\r\nexport function CurveContainerCurve(bigCurve: Polyline | Circle, smallCurve: Polyline | Circle | Curve, ipts: IntersectResult[] = undefined, fuzz = COMBINE_FUZZ)\r\n{\r\n if (!ipts)\r\n ipts = bigCurve.IntersectWith2(smallCurve, IntersectOption.ExtendNone, fuzz);\r\n\r\n if (ipts.length === 0)\r\n return fastCurveInCurve(bigCurve, smallCurve);\r\n else if (ipts.length === 1)\r\n return fastCurveInCurve2(bigCurve, smallCurve, ipts[0].pt);\r\n else\r\n return isTargetCurInOrOnSourceCur(bigCurve, smallCurve);\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort } 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 { AsVector2, IdentityMtx4, SelectNearP, angle, equaln, equalv2, equalv3, midPoint } 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 /**偏移距离(仅在局部偏移时提供) */\r\n dist?: number;\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.IntersectWith2(contour.Curve, IntersectOption.ExtendNone)\r\n .map(p => p.thisParam);\r\n\r\n //#region 交点参数优化,避免出现无意义长度的曲线被移除 CurveIsFine\r\n let length = this.curve.Length;\r\n if (!(this.curve instanceof Circle))\r\n iParams.push(0, 1);\r\n iParams.sort((e1, e2) => e1 - e2);\r\n if (this.curve instanceof Arc || this.curve instanceof Circle)\r\n {\r\n let allAngle = this.curve instanceof Circle ? Math.PI * 2 : this.curve.AllAngle;\r\n arrayRemoveDuplicateBySort(iParams, (p1, p2) =>\r\n {\r\n return allAngle * (p2 - p1) < ARC_MIN_ALLANGLE || length * (p2 - p1) < CURVE_MIN_LENGTH;\r\n });\r\n }\r\n else\r\n {\r\n arrayRemoveDuplicateBySort(iParams, (p1, p2) =>\r\n {\r\n return length * (p2 - p1) < CURVE_MIN_LENGTH;\r\n });\r\n }\r\n\r\n if (!(this.curve instanceof Circle))\r\n {\r\n iParams.shift();//remove 0\r\n iParams.pop(); //remove 1 or 0.9999\r\n }\r\n //#endregion\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 enum PolylineJoinType\r\n{\r\n Square = 0,\r\n Round = 1,\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 _IsTopoOffset = false;//局部偏移,允许特殊延伸,参考测试用例\r\n _AllowConverToCircle = true;\r\n\r\n /**\r\n *\r\n * @param _Polyline\r\n * @param _OffsetDist\r\n * @param [_ToolPath=false] 走刀模式(在这个模式下,我们会进行圆弧过渡(或者直线过渡)避免尖角过大)\r\n * @param [_OffsetDistSq=(_OffsetDist ** 2) * 2.1] 允许的最大尖角长度 默认值差不多是矩形的尖角大一点\r\n * @param [_JoinType=PolylineJoinType.Round] 尖角的处理方式,默认是圆弧过渡,可以切换成直线过渡\r\n */\r\n constructor(public _Polyline: Polyline, public _OffsetDist: number, public _ToolPath = false,\r\n private _OffsetDistSq = (_OffsetDist ** 2) * 2.1,//对直角走刀不进行圆弧过度\r\n private _JoinType = PolylineJoinType.Round //仅在走刀路径时生效\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\r\n // for (let c of this._SubOffsetedCurves)\r\n // {\r\n // TestDraw(c.curve.Clone(), 1);\r\n // if (c.paddingCurve)\r\n // for (let cc of c.paddingCurve)\r\n // TestDraw(cc.Clone(), 2);\r\n // }\r\n // for (let c of this._TrimPolylineContours)\r\n // {\r\n // TestDraw(c.Curve.Clone(), 3);\r\n // }\r\n\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);//TODO: 简化这个 并且生成圆 顶点 圆\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 let code1 = EntityEncode(curveNow);//1:直线 2:圆弧\r\n let code2 = EntityEncode(curveNext);\r\n let code = code1 & code2;//1:纯直线 2:纯圆弧 3:直线和圆弧\r\n //直连\r\n if (equalv3(sp, ep, 1e-3))\r\n {\r\n //参考测试用例`裁剪失败,需要连接`,在极端的情况下,如果没有连接这两条线,会导致裁剪缝隙,导致偏移错误\r\n if (!equalv2(sp, ep, 1e-6))\r\n {\r\n if (code1 === 1)//线1是直线\r\n curveNow.EndPoint = ep;\r\n else if (code2 === 1)//线2是直线\r\n curveNext.StartPoint = sp;\r\n else//都是圆弧\r\n {\r\n let mp = midPoint(sp, ep);\r\n curveNow.EndPoint = mp;\r\n curveNext.StartPoint = mp;\r\n }\r\n }\r\n continue;\r\n }\r\n\r\n let iPtsP = curveNow.IntersectWith2(curveNext, IntersectOption.ExtendBoth, 1e-6);\r\n let iPts = iPtsP.map(p => p.pt);\r\n let tPts = iPtsP.filter(p => curveNow.ParamOnCurve(p.thisParam) && curveNext.ParamOnCurve(p.argParam)).map(p => p.pt);\r\n\r\n\r\n let tp: Vector3;\r\n if (code === 1)\r\n {\r\n if (this._IsTopoOffset && tPts.length === 0 && curveResNow.dist !== curveResNext.dist)\r\n tPts = iPts;\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 && iPtsP[0].thisParam > 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 if (this._JoinType === PolylineJoinType.Round)\r\n curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)];\r\n else\r\n curveResNow.paddingCurve = [this.CreateSquare(refP, curveResNow, curveResNext, code)];//补直线\r\n\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\r\n //在局部偏移中,当偏移距离不一致时,我们总是倾向于直接连接\r\n if (this._IsTopoOffset && tPts.length === 0 && curveResNow.dist !== curveResNext.dist)\r\n {\r\n if (iPts.length)\r\n tPts = iPts;\r\n else\r\n {\r\n curveResNow.paddingCurve = [new Line(sp, ep)];//补直线\r\n continue;\r\n }\r\n }\r\n\r\n if (tPts.length > 0) //ipts = 1 or ipts = 2\r\n tp = SelectNearP(tPts, refP);\r\n else //补圆弧 或者尝试连接\r\n {\r\n if (iPts.length > 0 && !this._ToolPath && this.IsSharpCorner(curveResNow, curveResNext))//非加工刀路 并且尖角化(谷)时\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 = [this.CreateArc(refP, sp, ep)];//补圆弧\r\n }\r\n else\r\n {\r\n if (this._JoinType === PolylineJoinType.Round)\r\n curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)];//补圆弧\r\n else\r\n {\r\n curveResNow.paddingCurve = [this.CreateSquare(refP, curveResNow, curveResNext, code)];//补直线\r\n }\r\n }\r\n\r\n let circle = this._Circles[curveResNext.index];\r\n if (circle) this._TrimCircleContours.push(circle);//因为局部偏移可能未提供圆\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 circle = this._Circles[s];\r\n if (circle)//因为局部偏移可能未提供圆\r\n {\r\n this._TrimCircleContours.push(circle);\r\n padCirs.push(circle);\r\n }\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 * 在\r\n * 1.直线和圆弧,圆弧和圆弧\r\n * 2.有交点,无真交点时\r\n * 必须在正确的方向做出延伸动作,所以必须在尖角的情况下延伸,偏移的结果就像一个谷字去掉一个口的结果,上面的人就是偏移后的结果.\r\n * 如果是谷,则允许连接 #I7WKKG\r\n */\r\n private IsSharpCorner(curveResNow: IOffsetResult, curveResNext: IOffsetResult): boolean\r\n {\r\n let v1 = this._SubCurves[curveResNow.index].GetFirstDeriv(1);\r\n let v2 = this._SubCurves[curveResNext.index].GetFirstDeriv(0);\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 //起点和终点裁剪掉圆\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 //最后一段曲线裁剪掉圆\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 && this._AllowConverToCircle)\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, isJoinEnd = true): 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 minDist = 0;\r\n break;\r\n }\r\n }\r\n\r\n if (minR && Math.sqrt(minDist) < 0.085)\r\n {\r\n used.add(minR.curve);\r\n preP = minR.e;\r\n\r\n // let status = pl.Join(minR.curve, false, 8e-2);\r\n // if (status !== Status.True)\r\n // console.warn(\"连接失败\");\r\n\r\n //#region fast join (为了避免Polyline.Join 导致的顺序错误)\r\n let cu = minR.curve;\r\n\r\n //bul\r\n let bul = 0;\r\n if (cu instanceof Arc)\r\n {\r\n bul = cu.Bul;\r\n if (minR.isReverse)\r\n bul *= -1;\r\n\r\n if (!isJoinEnd)\r\n bul *= -1;\r\n }\r\n\r\n if (pl.LineData.length === 0)\r\n {\r\n pl.LineData.push({\r\n pt: AsVector2(minR.s),\r\n bul: bul\r\n });\r\n }\r\n\r\n if (isJoinEnd)\r\n {\r\n pl.LineData[pl.LineData.length - 1].bul = bul;\r\n pl.LineData.push({\r\n pt: AsVector2(minR.e),\r\n bul: 0\r\n });\r\n }\r\n else\r\n {\r\n pl.LineData.unshift({\r\n pt: AsVector2(minR.e),\r\n bul\r\n });\r\n }\r\n //#endregion\r\n\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, true);\r\n ss = s;\r\n preP = pl.StartPoint;\r\n while (ss && !pl.IsClose)\r\n ss = searchNext(ss, pl, false);\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 /**\r\n * 点在线上 或者在线内(外)\r\n * @param pt\r\n * @returns 0在线上 1 -1\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-4)) 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.GetFirstDeriv(0).normalize(), preCurve.GetFirstDeriv(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.GetFirstDeriv(1).normalize(), nextCurve.GetFirstDeriv(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.GetFirstDeriv(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 protected CreateSquare(center: Vector3, curveNow: IOffsetResult, curveNext: IOffsetResult, entTypeCode: number)\r\n {\r\n const arc = this.CreateArc(center, curveNow.curve.EndPoint, curveNext.curve.StartPoint);\r\n const centerPoint = arc.GetPointAtParam(0.5);\r\n const tangentLine = new Line(centerPoint, arc.GetFirstDeriv(0.5).add(centerPoint)); //切线\r\n\r\n let ep: Vector3, sp: Vector3;\r\n if (entTypeCode === 1)\r\n {\r\n ep = tangentLine.IntersectWith(curveNow.curve, IntersectOption.ExtendBoth)[0]; //第一条线新的终点坐标\r\n sp = centerPoint.multiplyScalar(2).sub(ep);\r\n }\r\n else// if (entTypeCode === 0)//全圆弧 直线和圆弧\r\n {\r\n ep = SelectNearP(tangentLine.IntersectWith(curveNow.curve, IntersectOption.ExtendBoth), center); //第一条线新的终点坐标\r\n sp = SelectNearP(tangentLine.IntersectWith(curveNext.curve, IntersectOption.ExtendBoth), center);\r\n }\r\n\r\n curveNow.ep = ep;\r\n curveNext.sp = sp;\r\n\r\n return new Line(ep, sp);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * @param c\r\n * @returns 1:line 2:arc\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\n\r\n/**\r\n * @returns 1:全line 2:全arc 3:line and arc\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\r\nconst CURVE_MIN_LENGTH = 5e-5;\r\nconst ARC_MIN_ALLANGLE = 2e-6;\r\n//表示这个是一个正常的曲线,不是0长度的线,也不是0长度的圆弧\r\nexport function CurveIsFine(curve: Curve)\r\n{\r\n if (curve instanceof Arc && curve.AllAngle < ARC_MIN_ALLANGLE) return false;\r\n return curve.Length > CURVE_MIN_LENGTH;\r\n}\r\n","import { Vec2, Vector3 } from 'three';\r\nimport { angle, equaln, equalv2 } from '../Geometry/GeUtils';\r\nimport { IntersectOption } from '../GraphicsSystem/IntersectWith';\r\nimport { Arc } from './Entity/Arc';\r\nimport { Line } from './Entity/Line';\r\nimport { BUL_IS_LINE_FUZZ, 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 * 判断点在多段线内外(如果点在线上 则返回false)\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, BUL_IS_LINE_FUZZ))//直线\r\n {\r\n let sp = pl.GetPointAtParam(i);\r\n let ep = pl.GetPointAtParam(i + 1);\r\n\r\n if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5))//在起点或者终点\r\n return false;\r\n\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 {\r\n if (equaln(pt.x, ep.x, 1e-5)\r\n && (pt.y > Math.min(sp.y, ep.y) - 1e-5 && pt.y < Math.max(sp.y, ep.y) + 1e-5))\r\n return false;//点在线上\r\n continue;\r\n }\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 let iptY = (pt.x - sp.x) * k + sp.y;\r\n if (equaln(iptY, pt.y, 1e-5))//点在线上 返回false\r\n return false;\r\n if (iptY > 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 if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5))//在起点或者终点\r\n return false;\r\n\r\n let center = arc.Center;\r\n //如果相切\r\n if (equaln(Math.abs(pt.x - center.x), arc.Radius))\r\n {\r\n //点在线上\r\n if (equaln(pt.y, center.y) && arc.ParamOnCurve(arc.GetParamAtPoint2(pt)))\r\n return false;\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.GetFirstDeriv(0).normalize();\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.GetFirstDeriv(1).normalize();\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 (equalv2(pti, pt, 1e-5))//点在线上 返回false\r\n return false;\r\n\r\n //交点在点下 交点在起点? 交点在终点?\r\n if (pti.y + 1e-5 < pt.y || equalv2(sp, pti, 1e-5) || equalv2(ep, pti, 1e-5))\r\n continue;\r\n\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: number;\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, 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, MatrixIsIdentityCS, equaln, equalv2, equalv3 } from '../../Geometry/GeUtils';\r\nimport { IntersectOption, IntersectPolylineAndCurve } from '../../GraphicsSystem/IntersectWith';\r\nimport { OffsetPolyline, PolylineJoinType } from '../../GraphicsSystem/OffsetPolyline';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { IsPointInPolyLine } from '../PointInPolyline';\r\nimport { Shape2 } from '../Shape2';\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\nexport const BUL_IS_LINE_FUZZ = 1e-5;\r\n\r\n@Factory\r\nexport class Polyline extends Curve\r\n{\r\n private _DisplayAccuracy = 0;\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\r\n get DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\r\n }\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 /**\r\n * 删除重复点\r\n * @param [fuzz=0.1] 容差=0.1\r\n */\r\n RemoveRepeatPos(fuzz = 0.1)\r\n {\r\n let index = 0;\r\n let pre = 0;\r\n let writed = false;\r\n for (let next = 1; next <= this._LineData.length; next++)\r\n {\r\n if ((!this._ClosedMark && next === this._LineData.length) ||//如果曲线没闭合 则总是保留最后一个点\r\n !equalv2(this._LineData[pre].pt, this._LineData[FixIndex(next, this._LineData)].pt, fuzz))\r\n {\r\n if (!writed)\r\n {\r\n this.WriteAllObjectRecord();\r\n writed = true;\r\n }\r\n\r\n this._LineData[index] = this._LineData[pre];\r\n index++;\r\n }\r\n pre++;\r\n }\r\n\r\n if (equalv2(this._LineData[0].pt, this._LineData[index - 1].pt, fuzz))\r\n this._LineData[index - 1].pt.copy(this._LineData[0].pt);\r\n\r\n this._LineData.length = index;\r\n this.Update();\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, fuzz = 1e-5): 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, fuzz);\r\n if (cu.ParamOnCurve(param, fuzz))\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, fuzz);\r\n if (!isNaN(startParam) && startParam < 0)\r\n seParams.push(startParam);\r\n //点在最后一条线上的参数\r\n let endParam = cus[cus.length - 1].GetParamAtPoint(pt, fuzz);\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: (Line | Arc)[] = [];\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let cu = this.GetCurveAtIndex(i);\r\n let len = cu.Length;\r\n if (len < 1e-6) continue;\r\n\r\n cus.push(cu);\r\n\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\r\n dist -= len;\r\n }\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 * @param pt 需要保证传入的点路径上\r\n * @returns\r\n */\r\n GetDistAtPoint2(pt: Vector3): number\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n if (param < 0)\r\n {\r\n let c1 = this.GetCurveAtIndex(0);\r\n return c1.Length * param;\r\n }\r\n else if (param > this.EndParam)\r\n {\r\n let ce = this.GetCurveAtIndex(this.EndParam - 1);\r\n return this.Length + ce.Length * (param - this.EndParam);\r\n }\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 GetFirstDeriv(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.GetFirstDeriv(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 + Math.abs(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 /**\r\n * 将多段线的OCS清除(请保证这个实体是在WCSZ0坐标系下,否则结果不正确!)\r\n */\r\n MatrixIdentity()\r\n {\r\n this.WriteAllObjectRecord();\r\n const { pts: pathPts, buls } = this.MatrixAlignTo2(new Matrix4);\r\n this.OCSNoClone.identity();\r\n for (let i = 0; i < this.LineData.length; i++)\r\n {\r\n this.LineData[i].pt.copy(pathPts[i]);\r\n this.LineData[i].bul = buls[i];\r\n }\r\n }\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 let x = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 0);\r\n let y = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 1);\r\n let cuZ = x.cross(y);\r\n\r\n let dir = equalv3(this.Normal, cuZ, 1e-4) ? 1 : -1;\r\n let bul = cu.Bul * dir;\r\n\r\n this._LineData.push({ pt: cuSp2, bul: 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 (epspDisSq < minDis)\r\n {\r\n linkType = LinkType.EpSp;\r\n minDis = epspDisSq;\r\n }\r\n\r\n if (epepDisSq < minDis)\r\n {\r\n linkType = LinkType.EpEp;\r\n minDis = epepDisSq;\r\n }\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 (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 x = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 0);\r\n let y = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 1);\r\n let cuZ = x.cross(y);\r\n\r\n let dir = equalv3(this.Normal, cuZ, 1e-4) ? 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 {\r\n let status = pl.Join(cu, false, 0.1);\r\n // if (status === Status.False)\r\n // console.log();\r\n }\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 /**首尾相连的曲线直接连接 */\r\n static FastCombine(curves: Curve[], tolerance = 1e-5, computOCS = true): Polyline | undefined\r\n {\r\n if (!curves || curves.length === 0) return;\r\n\r\n let pl = new Polyline;\r\n if (computOCS)\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 override PtOnCurve(pt: 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.PtOnCurve(pt, fuzz))\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, joinType: PolylineJoinType = PolylineJoinType.Round): Polyline[]\r\n {\r\n if (equaln(offsetDist, 0)) return [];\r\n let polyOffestUtil = new OffsetPolyline(this, offsetDist, true, offsetDistSq, joinType);\r\n return polyOffestUtil.Do();\r\n }\r\n /**\r\n * 分解\r\n */\r\n Explode(): (Line | Arc)[]\r\n {\r\n let exportCus: (Line | Arc)[] = [];\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): Line | Arc\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: Line | Arc;\r\n if (equaln(d1.bul, 0, BUL_IS_LINE_FUZZ))\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 override 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.GetFirstDeriv(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.GetFirstDeriv(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 SetPtsBuls(pts: Vector2[], buls: number[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.length = 0;\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let pt = pts[i];\r\n let bul = buls[i];\r\n\r\n this._LineData.push({ pt, bul });\r\n }\r\n this.Update();\r\n return this;\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(): Shape2\r\n {\r\n let { pts, buls } = this.PtsBuls;\r\n return CreatePolylinePath(pts, buls, this._DisplayAccuracy);\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 // if (this._LineData.length === 0)\r\n // this.Erase();\r\n\r\n if (ver > 2)\r\n this.ReadRoomAndCabinetName(file);\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._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 this.WriteRoomAndCabinetName(file);\r\n }\r\n}\r\n\r\nexport const TempPolyline = new Polyline();\r\n","import { Vector3 } from \"three\";\r\nimport { arrayLast } from \"../../Common/ArrayExt\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { ComparePointFnGenerate } from \"../../Geometry/GeUtils\";\r\nimport { RegionParse } from \"../../Geometry/RegionParse\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\n\r\n/**\r\n * 线性切割多线段\r\n * @param {Polyline} meatPl 被切割的曲线\r\n * @param {Polyline[]} knifePls 刀曲线\r\n * @param {boolean} [isSweep = false] 是否为圆弧板(被切割的曲线是否为圆弧板的轮廓)\r\n * @return {Polyline[]} 切割后的多线段\r\n */\r\nexport function SplitPolyline(meatPl: Polyline, knifePls: Polyline[], isSweep = false): Polyline[]\r\n{\r\n let allSplitPls: Polyline[] = [];\r\n let allIntersePts: Vector3[] = [];\r\n for (let pl of knifePls)\r\n {\r\n\r\n let ipts = pl.IntersectWith(meatPl, IntersectOption.ExtendThis);\r\n allIntersePts.push(...ipts);\r\n if (pl.LineData.length === 2 && ipts.length > 1) //直线切割,且有2个已经的顶点\r\n {\r\n if (ipts.length === 2)\r\n {\r\n pl.StartPoint = ipts[0];\r\n pl.EndPoint = ipts[1];\r\n }\r\n else\r\n {\r\n ipts.sort(ComparePointFnGenerate(\"xy\"));\r\n pl.StartPoint = ipts[0];\r\n pl.EndPoint = arrayLast(ipts);\r\n }\r\n }\r\n else\r\n {\r\n let iptsNotExt = ipts.filter(p => pl.PtOnCurve(p));\r\n if (iptsNotExt.length < 2 && ipts.length === 2)\r\n {\r\n let params = ipts.map(p => pl.GetParamAtPoint(p));\r\n pl.Extend(params[0]);\r\n pl.Extend(params[1]);\r\n }\r\n }\r\n\r\n let splitPls = pl.GetSplitCurvesByPts(ipts) as Polyline[];\r\n allSplitPls.push(...splitPls);\r\n }\r\n\r\n let brSplitCus = meatPl.GetSplitCurvesByPts(allIntersePts) as Polyline[];\r\n\r\n allSplitPls = allSplitPls.filter(pl =>\r\n {\r\n return meatPl.PtInCurve(pl.GetPointAtParam(pl.EndParam / 2)); //切割线必须在板内才有用\r\n });\r\n\r\n let regionParse = new RegionParse(brSplitCus.concat(allSplitPls));\r\n\r\n let cus = regionParse.RegionsInternal.map(r =>\r\n {\r\n let pl = new Polyline();\r\n for (let route of r)\r\n pl.Join(route.curve);\r\n if (pl.Area2 < 0)\r\n pl.Reverse();\r\n // 针对圆弧板特殊处理(去除多余的控制点)\r\n if (isSweep)\r\n {\r\n pl = pl.GetOffsetCurves(10)[0];\r\n pl = pl.GetOffsetCurves(-10)[0];\r\n }\r\n return pl;\r\n });\r\n return cus;\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 { Box2, Box3, Line3, Matrix3, Matrix4, Vec2, Vector2, Vector3 } from 'three';\r\nimport { SplitPolyline } from '../Add-on/BoardCutting/SplitPolyline';\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 { BUL_IS_LINE_FUZZ, 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, XAxis, YAxis, ZAxis, ZeroVec, equaln, equalv2, equalv3, isParallelTo } from '../Geometry/GeUtils';\r\nimport { Vec3 } from '../Geometry/IVec3';\r\nimport { Matrix2 } from '../Geometry/Matrix2';\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[], numdimensions = 4): 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 const fuzz = 5 * Math.pow(0.1, numdimensions);\r\n //曲线节点图\r\n let cuMap = new CurveMap(numdimensions);\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, fuzz))\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, fuzz))\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 Polyline && cu2 instanceof Circle)\r\n || (cu1 instanceof Circle && cu2 instanceof Polyline)\r\n )\r\n {\r\n if (cu1 instanceof Circle)\r\n [cu1, cu2] = [cu2, cu1];\r\n\r\n if (cu1.EndParam < 2) return false;\r\n let curves = cu1.Explode();\r\n if (curves.length < 2 || !curves.every(c => c instanceof Arc)) return false;\r\n let c1 = curves[0];\r\n\r\n if (!(equalv3(c1.Center, (cu2 as Circle).Center) && equaln(c1.Radius, (cu2 as Circle).Radius, 1e-6))) return false;\r\n\r\n for (let i = 1; i < curves.length - 1; i++)\r\n c1.Join(curves[i]);\r\n\r\n return c1.Join(curves[curves.length - 1]) === Status.ConverToCircle;\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 //最近点\r\n let cp = cu.GetClosestPointTo(pt, false);\r\n if (equalv3(cp, pt, 1e-6)) return 0;\r\n //最近点的切线\r\n let deriv = cu.GetFirstDeriv(cu.GetParamAtPoint(cp));\r\n let vec2 = pt.clone().sub(cp);\r\n let cross = deriv.cross(vec2).applyMatrix4(cu.OCSInv.setPosition(0, 0, 0));\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.OCSNoClone);\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.OCSNoClone);\r\n\r\n let [c0p0, c0p1] = GetTanPtsOnArcOrCircle(cir0, i);\r\n let [c1p0, c1p1] = GetTanPtsOnArcOrCircle(cir1, i);\r\n return [\r\n new Line(c0p0, c1p0),\r\n new Line(c0p1, c1p1),\r\n ];\r\n }\r\n}\r\n\r\n//ref https://github1s.com/ArashPartow/wykobi/blob/master/wykobi.inl#L6575-L6576\r\n//获取2个圆的外切线\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.GetFirstDeriv(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.OCSNoClone);\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 size: Vector3;\r\n box: Box3;\r\n OCS: Matrix4;\r\n}\r\n\r\n/**\r\n * 判断多段线是不是矩形\r\n * 因为用户画的垃圾图,所以我们会给容差\r\n * 1.简化点表成4个点\r\n * -得到x向量,构建二维旋转矩阵\r\n * -所有的点旋转\r\n * 2.构建box\r\n * 3.4个点都在盒子里,面积是矩形\r\n * @param cu\r\n */\r\nexport function IsRect(cu: Curve): IRectInfo | undefined\r\n{\r\n if (cu instanceof Polyline)\r\n {\r\n //如果不封闭(就不是矩形)\r\n if (!cu.IsClose) return;\r\n\r\n //如果点个数小于4(就不是矩形)\r\n if (cu.LineData.length < 4) return;\r\n\r\n //如果有圆弧(就不是矩形)\r\n for (let i = 0; i < cu.LineData.length; i++)\r\n {\r\n let d = cu.LineData[i];\r\n if (equaln(d.bul, 0, BUL_IS_LINE_FUZZ))\r\n continue;\r\n let next = FixIndex(i + 1, cu.LineData);\r\n if (equalv2(d.pt, cu.LineData[next].pt))\r\n continue;\r\n return;\r\n }\r\n\r\n let pts2d = cu.LineData.map(d => d.pt);\r\n\r\n //去除重复点\r\n arrayRemoveDuplicateBySort(pts2d, (p1, p2) => equalv2(p1, p2));\r\n if (equalv2(pts2d[0], pts2d[pts2d.length - 1]))\r\n pts2d.pop();\r\n\r\n //这里我们判断它是不是有4个90度的角,并且有4个点\r\n let preV = pts2d[0].clone().sub(pts2d[pts2d.length - 1]).negate();//preVector\r\n let preL = preV.length();//preLength\r\n let nowV = new Vector2;//nowVector\r\n let crossV = 0;//永远相同方向的90度,如果不是(就不是矩形)\r\n\r\n let pts4: Vector2[] = [];//简化成4个点\r\n\r\n for (let i = 0; i < pts2d.length; i++)\r\n {\r\n nowV.subVectors(pts2d[FixIndex(i + 1, pts2d.length)], pts2d[i]);\r\n\r\n let cross = preV.cross(nowV) / preL;\r\n\r\n let nowL = nowV.length();//nowLength\r\n\r\n if (equaln(cross, 0, 0.01))//平行 此时的cross = 三角形的高(其中preL是三角形的底边) 我们认为它移动了0.01是可以接受的\r\n continue;//TODOX:我们可能要合并这条线? 把preV preL更新一下?\r\n\r\n cross /= nowL;//此时的cross = sin@\r\n\r\n //如果不等于90度(就不是矩形)\r\n if (!equaln(Math.abs(cross), 1, 1e-5))\r\n return;\r\n\r\n cross = Math.sign(cross);\r\n\r\n if (!crossV)\r\n crossV = cross;\r\n else if (crossV !== cross)//如果方向不一致(没有绕着90度)(就不是矩形)\r\n return;\r\n\r\n pts4.push(pts2d[i]);\r\n if (pts4.length > 4)//如果超过4个点(就不是矩形)\r\n return;\r\n\r\n preL = nowL;\r\n preV.copy(nowV).negate();//翻转它 以便下一次计算\r\n }\r\n\r\n if (pts4.length !== 4 || !crossV)//没有90度 (就不是矩形)\r\n return;\r\n\r\n let rectOCS: Matrix4;\r\n\r\n preV.subVectors(pts4[1], pts4[0]);\r\n let box = new Box2;\r\n if (equaln(preV.x, 0, 1e-3) || equaln(preV.y, 0, 1e-3))//判断是不是与X轴平行或者与Y轴平行,精度容差在0.001 看起来没问题\r\n {\r\n rectOCS = cu.OCS;\r\n box.setFromPoints(pts4);\r\n }\r\n else//如果矩形不与X轴平行,我们旋转这个点表,然后变换它\r\n {\r\n let a = Math.atan2(preV.y, preV.x);\r\n let r = new Matrix2().setRotate(-a);\r\n\r\n let p0 = pts4[0];\r\n pts4 = pts4.map(p =>\r\n {\r\n p = p.clone().sub(p0);\r\n r.applyVector(p);\r\n return p;\r\n });\r\n box.setFromPoints(pts4);\r\n\r\n nowV.set(-preV.y, preV.x);//旋转90度\r\n\r\n rectOCS = new Matrix4().makeBasis(\r\n AsVector3(preV.normalize()),\r\n AsVector3(nowV.normalize()),\r\n ZAxis,\r\n ).setPosition(p0.x, p0.y, 0);\r\n\r\n rectOCS.multiplyMatrices(cu.OCSNoClone, rectOCS);\r\n }\r\n\r\n //4个点都在角上\r\n if (!pts4.every(p =>\r\n {\r\n return (equaln(p.x, box.min.x, 0.01) || equaln(p.x, box.max.x, 0.01))\r\n && (equaln(p.y, box.min.y, 0.01) || equaln(p.y, box.max.y, 0.01));\r\n }))\r\n return;\r\n\r\n let size = box.getSize(new Vector2);\r\n\r\n return {\r\n size: AsVector3(size),\r\n box: new Box3(AsVector3(box.min), AsVector3(box.max)),\r\n OCS: rectOCS,\r\n };\r\n }\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.GetFirstDeriv(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.GetFirstDeriv(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\n * 将封闭的多段线,通过和y轴平行的线,分割成多个矩形\r\n * @param outline 这个多边形是横平竖直的,否则返回自身\r\n * @param polylineParalleXYFuzz 平行x或y的容差\r\n * @returns 裁剪后的矩形集\r\n */\r\nexport function PolylineSpliteRect(outline: Polyline, polylineParalleXYFuzz = 1e-3): Polyline[]\r\n{\r\n if (!outline.IsClose || IsRect(outline))\r\n return [outline];\r\n\r\n let cus = outline.Explode();\r\n\r\n let xSet: Set = new Set();\r\n for (let c of cus)\r\n {\r\n if (c instanceof Arc) return [outline];\r\n let derv = c.GetFirstDeriv(0).normalize();\r\n if (isParallelTo(derv, YAxis, polylineParalleXYFuzz))\r\n xSet.add(c.StartPoint.x);\r\n else if (!isParallelTo(derv, XAxis, polylineParalleXYFuzz))\r\n return [outline];\r\n }\r\n\r\n //轮廓的每条线段都平行于X或Y轴 可直接按端点切割\r\n const knifePls: Polyline[] = [];\r\n const xList = Array.from(xSet).sort((a, b) => a - b);\r\n\r\n for (let x of xList)\r\n knifePls.push(new Polyline([{ pt: AsVector2({ x, y: 0 }), bul: 0 }, { pt: AsVector2({ x, y: 1 }), bul: 0 }]));\r\n\r\n //裁剪结果\r\n let rects = SplitPolyline(outline, knifePls).filter(pl => pl.IsClose);\r\n\r\n return rects;\r\n}\r\n","/**\r\n *勿随意更改属性名,若更改,需更改对应UI模态框的属性和检验方法的key\r\n *\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\n//偏心轮类型\r\n// 左右侧板 Font朝向柜内 Back朝向柜外\r\n// 顶底板 Font朝向柜外 Back两面朝下 Inside朝向柜内\r\nexport enum FaceDirection\r\n{\r\n Front = 0,\r\n Back = 1,\r\n Inside = 2\r\n}\r\n","export enum LogType\r\n{\r\n Error = \"ERROR\",\r\n Warning = \"WARNING\",\r\n Info = \"INFO\",\r\n Command = \"COMMAND\",\r\n All = \"ALL\",\r\n}\r\n\r\ntype LogFunction = (message?: any, ...optionalParams: any[]) => void;\r\n\r\nexport const _LogInjectFunctions: LogFunction[] = [];\r\n\r\n//Log(`板:${br.Name}没有提供排钻信息!`, LogType.Warning, [br]);\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 _LogInjectInteractionFunctions: LogFunction[] = [];\r\n\r\n//InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: \"侧孔与板无交点,无法加工该侧孔!\" }], LogType.Warning);\r\nexport function InteractionLog(message?: any, ...optionalParams: any[]): void\r\n{\r\n for (let f of _LogInjectInteractionFunctions)\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","\r\n\r\nlet instanceMap = new Map();\r\n\r\nexport interface PrototypeType extends Function\r\n{\r\n prototype: T;\r\n}\r\n\r\nexport interface ConstructorFunctionType extends PrototypeType\r\n{\r\n new(...args: any[]): T;\r\n}\r\n\r\nexport type ConstructorType = PrototypeType> = (ConstructorFunctionType | PrototypeType) & {\r\n [Key in keyof Static]: Static[Key];\r\n};\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 //ref:https://github.com/Microsoft/TypeScript/issues/5863\r\n static GetInstance(this: ConstructorType): 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","export enum BoardType\r\n{\r\n Layer = 0, //层板\r\n Vertical = 1, //立板\r\n Behind = 2 //背板\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 const LinesTypeNames = {\r\n [LinesType.Positive]: \"正纹\",\r\n [LinesType.Reverse]: \"反纹\",\r\n [LinesType.CanReversal]: \"可翻转\"\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\nexport enum BoardOpenDir\r\n{\r\n Left = 1,\r\n Right = 2,\r\n Up = 3,\r\n Down = 4,\r\n NoOpen = 5, //是门板 但没有开门方向\r\n None = 0,\r\n}\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 enum AddRemarkType\r\n{\r\n Cover = 1,//覆盖\r\n NoCover = 0,//不覆盖\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\nexport function 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(bGeo: BufferGeometry, mtl: Material, scale = 1e-3)\r\n {\r\n if (!bGeo.boundingBox)\r\n bGeo.computeBoundingBox();\r\n\r\n let normals = bGeo.getAttribute(\"normal\") as BufferAttribute;\r\n let pos = bGeo.getAttribute(\"position\") as BufferAttribute;\r\n let uvs = bGeo.getAttribute(\"uv\") as BufferAttribute;\r\n\r\n if (!pos || !uvs || pos.count === 0) return;\r\n\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(bGeo.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\r\n uvs.needsUpdate = true;\r\n }\r\n}\r\n","import { BufferAttribute, BufferGeometry, Float32BufferAttribute, Matrix4, Vector3 } from \"three\";\r\nimport { Orbit } from \"../../Geometry/Orbit\";\r\nimport { GetFaceDir } from \"./GenUVForWorld\";\r\n\r\n//板件的UV计算\r\nexport class GenLocalUv\r\n{\r\n private 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\r\n private GetMtxInv({ normalX, normalY, normalZ }: { normalX: number, normalY: number, normalZ: number; }, IsReverse: boolean)\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\r\n if (mtx)\r\n return mtx;\r\n\r\n this._Z.copy(n);\r\n if (n.z != 0 && !IsReverse)//正面和背面不旋转\r\n Orbit.ComputUpDirection(this._Z, this._Y, this._X);\r\n else\r\n Orbit.ComputUpDirection(this._Z, this._X, this._Y);\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 //计算uv值\r\n CalculateUv(geo: BufferGeometry, IsReverse: boolean, 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 const uvs = [];\r\n for (let y = 0; y < pos.count; y++)\r\n {\r\n let index = y * 3;\r\n const normalX = normals.array[index];\r\n const normalY = normals.array[index + 1];\r\n const normalZ = normals.array[index + 2];\r\n let mtx = this.GetMtxInv({ normalX, normalY, normalZ }, IsReverse);\r\n\r\n this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]);\r\n this._X.applyMatrix4(mtx);\r\n\r\n uvs.push(this._X.x * scale);\r\n uvs.push(this._X.y * scale);\r\n }\r\n geo.setAttribute(\"uv\", new Float32BufferAttribute(uvs, 2));\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\nimport { Shape2 } from './Shape2';\r\n\r\nexport class Shape\r\n{\r\n private _DisplayAccuracy = 0;\r\n constructor(\r\n private _Outline: Contour = new Contour,\r\n private _Holes: Contour[] = []\r\n )\r\n {\r\n }\r\n\r\n get DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n this._DisplayAccuracy = v;\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(con: Contour)\r\n {\r\n this._Outline = con;\r\n }\r\n set Holes(holes: Contour[])\r\n {\r\n this._Holes = holes;\r\n }\r\n\r\n get Shape(): TShape\r\n {\r\n let 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 shape.holes.push(sp);\r\n }\r\n else\r\n shape.holes.push(h.Shape);\r\n }\r\n (shape as Shape2).DisplayAccuracy = this._DisplayAccuracy;\r\n return shape;\r\n }\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].ContainerCurve(cu.Curve, true));\r\n\r\n //洞是否被最大的洞包含,是,则把被包含的洞都提取出来加入形状数组\r\n if (isAllContainered)\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.ContainerCurve(con.Curve, true);\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.ContainerCurve(h.Curve, true));\r\n }\r\n return holes;\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","export const _CSGDEBUG = false;\r\n\r\n/** Epsilon used during determination of near zero distances.\r\n * @default\r\n */\r\nexport const EPS = 5e-2;\r\n\r\n// Tag factory: we can request a unique tag through CSG.getTag()\r\nexport let staticTag = 1;\r\nexport const getTag = () => staticTag++;\r\n","\r\n// //////////////////////////////\r\n// ## class fuzzyFactory\r\n// This class acts as a factory for objects. We can search for an object with approximately\r\n// the desired properties (say a rectangle with width 2 and height 1)\r\n// The lookupOrCreate() method looks for an existing object (for example it may find an existing rectangle\r\n// with width 2.0001 and height 0.999. If no object is found, the user supplied callback is\r\n// called, which should generate a new object. The new object is inserted into the database\r\n// so it can be found by future lookupOrCreate() calls.\r\n// Constructor:\r\n// numdimensions: the number of parameters for each object\r\n// for example for a 2D rectangle this would be 2\r\n\r\nimport { EPS } from \"./constants\";\r\n\r\n// tolerance: The maximum difference for each parameter allowed to be considered a match\r\nexport class FuzzyFactory\r\n{\r\n lookuptable: {};\r\n multiplier: number;\r\n constructor(numdimensions: number = 3, tolerance: number = EPS)\r\n {\r\n this.lookuptable = {};\r\n this.multiplier = 1.0 / tolerance;\r\n }\r\n\r\n // let obj = f.lookupOrCreate([el1, el2, el3], function(elements) {/* create the new object */});\r\n // Performs a fuzzy lookup of the object with the specified elements.\r\n // If found, returns the existing object\r\n // If not found, calls the supplied callback function which should create a new object with\r\n // the specified properties. This object is inserted in the lookup database.\r\n lookupOrCreate(els: number[], object: T): T\r\n {\r\n let hash = \"\";\r\n let multiplier = this.multiplier;\r\n for (let el of els)\r\n {\r\n let valueQuantized = Math.round(el * multiplier);\r\n hash += valueQuantized + \"/\";\r\n }\r\n if (hash in this.lookuptable) return this.lookuptable[hash];\r\n else\r\n {\r\n let hashparts = els.map(el =>\r\n {\r\n let q0 = Math.floor(el * multiplier);\r\n let q1 = q0 + 1;\r\n return [\"\" + q0 + \"/\", \"\" + q1 + \"/\"];\r\n });\r\n let numelements = els.length;\r\n let numhashes = 1 << numelements;\r\n for (let hashmask = 0; hashmask < numhashes; ++hashmask)\r\n {\r\n let hashmaskShifted = hashmask;\r\n hash = \"\";\r\n hashparts.forEach(hashpart =>\r\n {\r\n hash += hashpart[hashmaskShifted & 1];\r\n hashmaskShifted >>= 1;\r\n });\r\n this.lookuptable[hash] = object;\r\n }\r\n return object;\r\n }\r\n }\r\n}\r\n","import { 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 retessellate from \"@jscad/modeling/src/operations/modifiers/retessellate\";\r\nimport { BufferGeometry, Face3, Geometry, Plane, 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\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 retessellate(geom3.create(polygons)) as Geom3;\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 let normal: Vector3;//面的法线\r\n //@ts-ignore\r\n if (poly.plane)\r\n //@ts-ignore\r\n 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 if (!normal && poly.vertices.length > startIndex + 2)//如果没有法线,则自己计算\r\n normal = new Plane().setFromCoplanarPoints(geo.vertices[startIndex], geo.vertices[startIndex + 1], geo.vertices[startIndex + 2]).normal;\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 geom3, { toPolygons } from \"@jscad/modeling/src/geometries/geom3\";\r\nimport { Geom3, Poly3 } 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 measureBoundingBox from \"@jscad/modeling/src/measurements/measureBoundingBox\";\r\nimport splitPolygonByPlane from \"@jscad/modeling/src/operations/booleans/trees/splitPolygonByPlane\";\r\nimport retessellate from \"@jscad/modeling/src/operations/modifiers/retessellate\";\r\nimport { transform } from \"@jscad/modeling/src/operations/transforms\";\r\nimport { BufferAttribute, BufferGeometry, Line3, Matrix4, Plane, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board, IModeling } from \"../../DatabaseServices/Entity/Board\";\r\nimport { LinesType } from \"../../DatabaseServices/Entity/BoardInterface\";\r\nimport { GenLocalUv } from \"../../DatabaseServices/Entity/GenLocalUv\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { GetArcDrawCount } from \"../../Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams\";\r\nimport { equaln, equalv2, rotatePoint } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { OffsetPolyline } from \"../../GraphicsSystem/OffsetPolyline\";\r\nimport { FuzzyFactory } from \"../../csg/core/FuzzyFactory\";\r\nimport { CSG2Geometry2, Geometry2CSG2 } from \"../../csg/core/Geometry2CSG\";\r\nimport { FaceDirection } from \"../DrawDrilling/DrillType\";\r\n\r\n\r\nexport class ArcBoardBuild\r\n{\r\n //每段放样长度\r\n private _SweepLengths: number[]; //主Path的长度表\r\n\r\n private _SweepCurves1: (Line | Arc)[];//Path 主Path(见光)\r\n private _SweepCurves2: (Line | Arc)[];//Path 副Path(不见光面)\r\n\r\n private _SweepPath1: Polyline; //主Path (见光)\r\n private _SweepPath2: Polyline; //副Path (不见光)\r\n\r\n //将OCS坐标系 转换为旋转板后的坐标系\r\n _OCS2RotateMtx: Matrix4;//当板上某个点需要变换时, 先将它转换为旋转状态 在转换映射 在使用下面的矩阵变换到OCS\r\n _Rotate2OCSMtx: Matrix4;\r\n\r\n //弃用\r\n // private _SweepParamRanges: [number, number][];//Path 每段的起点参数和终点参数 基于SweepCurves1\r\n\r\n constructor(private _board: Board,\r\n //放样路径\r\n private _SweepPath: Polyline = _board.GetSweepPath(),\r\n //路径基于板旋转\r\n private _SweepAngle: number = _board.SweepAngle,\r\n private _FaceDir = _board.SweepVisibleFace,//(见光面正面时,开槽面为反面) (总是相反)\r\n )\r\n {\r\n this.ParseContourLength();\r\n }\r\n\r\n get SweepPath1() { return this._SweepPath1; }\r\n get SweepPath2() { return this._SweepPath2; }\r\n\r\n ParseContourLength()\r\n {\r\n if (this._SweepAngle !== 0 && !this._Rotate2OCSMtx)\r\n this.ParseRotateMtx();\r\n }\r\n\r\n //针对本算法特殊定制的偏移算法 避免偏移后起点丢失(主要是圆)\r\n static OffsetPolyline(path: Polyline, dist: number): Polyline\r\n {\r\n let offset = new OffsetPolyline(path, dist);\r\n offset._AllowConverToCircle = false;\r\n return offset.Do()[0];\r\n }\r\n\r\n get OCS2RotateMtx(): Matrix4\r\n {\r\n if (!this._OCS2RotateMtx)\r\n this.ParseRotateMtx();\r\n\r\n return this._OCS2RotateMtx;\r\n\r\n\r\n }\r\n get Rotate2OCSMtx(): Matrix4\r\n {\r\n if (!this._OCS2RotateMtx)\r\n this.ParseRotateMtx();\r\n\r\n return this._Rotate2OCSMtx;\r\n }\r\n ParseRotateMtx()\r\n {\r\n if (this._SweepAngle === 0) this._OCS2RotateMtx = new Matrix4;\r\n\r\n let con = this._board.ContourCurve.Clone();\r\n let mtx = new Matrix4().makeRotationZ(-this._SweepAngle);\r\n con.ApplyMatrix(mtx);\r\n let box = con.BoundingBox;\r\n mtx.setPosition(box.min.negate());\r\n\r\n this._OCS2RotateMtx = mtx;\r\n this._Rotate2OCSMtx = new Matrix4().getInverse(mtx);\r\n }\r\n\r\n get SweepCurves1()\r\n {\r\n return this._SweepCurves1;\r\n }\r\n\r\n get SweepCurves2()\r\n {\r\n return this._SweepCurves2;\r\n }\r\n\r\n ParseSweepCurves()\r\n {\r\n let path = ArcBoardBuild.OffsetPolyline(this._SweepPath, -this._board.Thickness);\r\n if (this._FaceDir === FaceDirection.Back)\r\n {\r\n this._SweepPath1 = ArcBoardBuild.OffsetPolyline(path, this._board.Thickness);\r\n this._SweepPath2 = path;\r\n\r\n this._SweepCurves1 = this._SweepPath1.Explode();\r\n this._SweepCurves2 = this._SweepCurves1.map(c =>\r\n {\r\n let offsetC = c.GetOffsetCurves(-this._board.Thickness)[0];\r\n if (!offsetC)\r\n offsetC = new Line(c.StartPoint, c.StartPoint);\r\n return offsetC;\r\n });\r\n }\r\n else\r\n {\r\n this._SweepPath1 = path;\r\n this._SweepPath2 = ArcBoardBuild.OffsetPolyline(this._SweepPath1, this._board.Thickness);\r\n\r\n this._SweepCurves1 = this._SweepPath1.Explode();\r\n this._SweepCurves2 = this._SweepCurves1.map(c =>\r\n {\r\n let offsetC = c.GetOffsetCurves(this._board.Thickness)[0];\r\n if (!offsetC)\r\n offsetC = new Line(c.StartPoint, c.StartPoint);\r\n return offsetC;\r\n });\r\n }\r\n\r\n this._SweepLengths = this._SweepCurves1.map(c => c.Length);\r\n return this;\r\n }\r\n\r\n get SweepLengths()\r\n {\r\n if (!this._SweepLengths)\r\n this.ParseSweepCurves();\r\n return this._SweepLengths;\r\n }\r\n\r\n get SweepLength()\r\n {\r\n let length = 0;\r\n for (let l of this.SweepLengths)\r\n length += l;\r\n return length;\r\n }\r\n\r\n private _SweepEndDists: number[];\r\n get SweepEndDists()\r\n {\r\n if (this._SweepEndDists) return this._SweepEndDists;\r\n this._SweepEndDists = [];\r\n let sumLength = 0;\r\n for (let i = 0; i < this.SweepLengths.length; i++)\r\n {\r\n let length = this.SweepLengths[i];\r\n sumLength += length;\r\n this._SweepEndDists.push(sumLength);\r\n }\r\n\r\n return this._SweepEndDists;\r\n }\r\n\r\n // //稳健折弯\r\n // private ParseSweepLengths2()\r\n // {\r\n // let sweepCurves = this.SweepCurves;\r\n // let sweepCurves2 = this.SweepCurves2;\r\n // let lengths: number[] = [];\r\n // this._SweepParamRanges = [];\r\n\r\n // for (let i = 0; i < sweepCurves.length; i++)\r\n // {\r\n // let c1 = sweepCurves[i];\r\n // let c2 = sweepCurves2[i];\r\n\r\n // if (c1 instanceof Line)\r\n // {\r\n // let param = new GetLineParam(c1);\r\n\r\n // //我们这里得到了折弯处的参数 或许可以有用?\r\n // let sp = param.GetParamAtPoint(c2.StartPoint);\r\n // let ep = param.GetParamAtPoint(c2.EndPoint);\r\n\r\n // this._SweepParamRanges.push([sp, ep]);\r\n\r\n // sp = Math.min(sp, 0);\r\n // ep = Math.max(ep, 1);\r\n\r\n // lengths.push(param.Length * (ep - sp));\r\n // }\r\n // else\r\n // {\r\n // let sa = c1.GetAngleAtPoint(c2.StartPoint);\r\n // let ea = c1.GetAngleAtPoint(c2.EndPoint);\r\n\r\n // let sp = c1.GetParamAtAngle(sa);\r\n // let ep = c1.GetParamAtAngle(ea);\r\n\r\n // this._SweepParamRanges.push([sp, ep]);\r\n\r\n // sp = Math.min(sp, 0);\r\n // ep = Math.max(ep, 1);\r\n\r\n // //背面为c1 正面为c2\r\n // lengths.push((this._FaceDir === FaceDirection.Front ? c2.Length : c1.Length) * (ep - sp));\r\n // }\r\n // }\r\n\r\n // this._SweepLengths = lengths;\r\n // }\r\n\r\n //用于缓存X位置->映射点和方向\r\n _CacheFuzzXFactory = new FuzzyFactory(1, 1e-3);//唯一映射x\r\n _Cache_X_PosDirMap: Map = new Map;\r\n //拐角Fuzz\r\n _CornerFuzzFactory: FuzzyFactory;//唯一拐角x\r\n _CornerSet: Set;//所有的拐角X\r\n /** 临时板 计算平板的CSG */\r\n _csgBoard: Board;\r\n /** 切割的位置 */\r\n private _splitXList: number[];\r\n\r\n get CSGBoard()\r\n {\r\n if (!this._csgBoard)\r\n this.ParseCSGBoard();\r\n return this._csgBoard;\r\n }\r\n\r\n get SplitXList()\r\n {\r\n if (!this._splitXList)\r\n this.ParseSplitXlist();\r\n return this._splitXList;\r\n }\r\n\r\n /** 解析切割的位置 */\r\n private ParseSplitXlist()\r\n {\r\n //每段线段的结束距离\r\n let dists: number[] = [];\r\n let split_xs: number[] = [];//分割位置\r\n\r\n //解析每段长度 解析分割位置\r\n let sumLength = 0;\r\n for (let i = 0; i < this.SweepLengths.length; i++)\r\n {\r\n let length = this.SweepLengths[i];\r\n if (this._SweepCurves1[i] instanceof Arc)//在圆弧时分段切割\r\n {\r\n let splitCount = GetArcDrawCount(this._SweepCurves1[i] as Arc);\r\n let divDist = length / splitCount;\r\n for (let j = 1; j < splitCount; j++)\r\n split_xs.push(sumLength + (divDist * j));\r\n }\r\n\r\n sumLength += length;\r\n dists.push(sumLength);\r\n split_xs.push(sumLength);\r\n }\r\n split_xs.pop();//最后一段不在切割\r\n\r\n this._SweepEndDists = dists;\r\n this._splitXList = split_xs;\r\n }\r\n\r\n /** 解析临时板 */\r\n private ParseCSGBoard()\r\n {\r\n //特性坍塌 我们记录所有转角处的x位置 以便我们遇到这个位置的坐标时,求正确的dir.\r\n this.ParseCorner();\r\n\r\n //拿CSG过来分割\r\n // let br = new Board;\r\n // br.Thickness = this._board.Thickness;\r\n // br.ContourCurve = this._board.ContourCurve;\r\n let br = this._board.Clone();\r\n br.Name = \"临时板\";\r\n br.SetSweepPath(undefined, 0);\r\n\r\n let arcBoardOptions = this._board.ArcBoardOptions;\r\n\r\n //构建转角处的槽\r\n let mmm: IModeling[] = [];\r\n for (let i = 0; i < this.SweepEndDists.length - 1; i++)\r\n {\r\n const arcBoardOption = arcBoardOptions.get(-1);\r\n\r\n let c1 = this._SweepCurves1[i];\r\n let c2 = this._SweepCurves1[i + 1];\r\n\r\n let co1 = this._SweepCurves2[i];\r\n let co2 = this._SweepCurves2[i + 1];\r\n\r\n //避免多余槽\r\n if (co1.Length < 0.1 || co2.Length < 0.1 || equalv2(co1.EndPoint, co2.StartPoint, 0.1)) continue;\r\n\r\n let p = co1.IntersectWith(co2, IntersectOption.ExtendNone, 0.1);\r\n if (p.length === 1)\r\n {\r\n let cp1 = c1.GetClosestPointTo(p[0], false);\r\n let cp2 = c2.GetClosestPointTo(p[0], false);\r\n\r\n let dist1 = c1.GetDistAtPoint(cp1);\r\n let dist2 = c2.GetDistAtPoint(cp2);\r\n\r\n dist1 = this.SweepLengths[i] - dist1;\r\n\r\n if (dist1 + dist2 < 0.1) continue;\r\n\r\n let d = this.SweepEndDists[i];\r\n\r\n let zValue = arcBoardOption.retainedThickness;\r\n let thickness = br.Thickness - zValue;\r\n if (this._FaceDir === FaceDirection.Front)\r\n zValue = 0;\r\n\r\n let pl = new Polyline().Rectangle(dist1 + dist2, 10000).Move(new Vector3(d - dist1, -100, 0));\r\n\r\n if (this._SweepAngle !== 0)\r\n pl.ApplyMatrix(this.Rotate2OCSMtx);\r\n\r\n let data: IModeling = {\r\n shape: new Shape(Contour.CreateContour(pl)),\r\n thickness: thickness,\r\n dir: 1 - this._FaceDir,//见光面和开槽面相反 这里翻转它\r\n knifeRadius: 3,\r\n addLen: 0,\r\n };\r\n mmm.push(data);\r\n }\r\n else if (p.length === 0)\r\n {\r\n let d = this.SweepEndDists[i];\r\n let zValue = arcBoardOption.retainedThickness;\r\n let thickness = br.Thickness - zValue;\r\n let pl = new Polyline().Rectangle(1, 10000).Move(new Vector3(d - 0.5, -100, 0));\r\n if (this._SweepAngle !== 0)\r\n pl.ApplyMatrix(this.Rotate2OCSMtx);\r\n\r\n let data: IModeling = {\r\n shape: new Shape(Contour.CreateContour(pl)),\r\n thickness: thickness,\r\n dir: 1 - this._FaceDir,//见光面和开槽面相反 这里翻转它\r\n knifeRadius: 3,\r\n addLen: 0,\r\n };\r\n mmm.push(data);\r\n }\r\n }\r\n // mmm = [];\r\n\r\n br.BoardModeling = this._board.BoardModeling.concat(mmm);\r\n // br.Modeling2D = this._board.Modeling2D;\r\n // br.Modeling3D = this._board.Modeling3D;\r\n\r\n //TestDraw(br.Clone());\r\n this._csgBoard = br;\r\n }\r\n /** 生成圆弧板的Geometry */\r\n BuildMeshEdgeGeom(csg?: Geom3): [BufferGeometry, BufferGeometry]\r\n {\r\n let br = this.CSGBoard;\r\n if (!csg)\r\n csg = this.CSGBoard.CSG;\r\n //旋转 r+m 逆矩阵(m+r) 将板轮廓旋转后 移动到WCS0(包围盒)\r\n let min: Vec3, max: Vec3;\r\n if (this._SweepAngle !== 0)\r\n {\r\n //根据csg旋转\r\n let roMtx = mat4.create();\r\n mat4.rotateZ(roMtx, roMtx, -this._SweepAngle);\r\n csg = transform(roMtx, csg);\r\n [min, max] = measureBoundingBox(csg);\r\n let moveMtx = mat4.create();\r\n mat4.translate(moveMtx, moveMtx, min.map(v => -v) as Vec3);\r\n csg = transform(moveMtx, csg);\r\n if (max[0] > this.SweepLength)\r\n console.log(\"出错\");\r\n\r\n // let geom = CSG2Geometry2(geom3.create(toPolygons(csg)));\r\n // geom.computeVertexNormals();\r\n // TestDraw(new Mesh(geom, new MeshNormalMaterial));\r\n\r\n this._OCS2RotateMtx = new Matrix4().makeRotationZ(-this._SweepAngle).setPosition(-min[0], -min[1], -min[2]);//rotate + move\r\n this._Rotate2OCSMtx = new Matrix4().makeRotationZ(this._SweepAngle).multiply(new Matrix4().setPosition(min[0], min[1], min[2]));//move + rotate\r\n }\r\n\r\n let remPolys: Poly3[] = toPolygons(csg);\r\n let plane: [number, number, number, number] = [1, 0, 0, 0];\r\n let splitedPolys: Poly3[] = [];\r\n for (let x of this.SplitXList)\r\n {\r\n plane[3] = x;\r\n\r\n let leftPolys: Poly3[] = [];\r\n let rightPolys: Poly3[] = [];\r\n\r\n for (let poly of remPolys)\r\n {\r\n // Returns object:\r\n // .type:\r\n // 0: coplanar-front\r\n // 1: coplanar-back\r\n // 2: front\r\n // 3: back\r\n // 4: spanning\r\n // In case the polygon is spanning, returns:\r\n // .front: a Polygon3 of the front part\r\n // .back: a Polygon3 of the back part\r\n if (!poly) // 先临时处理为null的情况,以免Error\r\n continue;\r\n let res = splitPolygonByPlane(plane, poly);\r\n if (res.type === 0)\r\n leftPolys.push(poly);\r\n else if (res.type === 1)\r\n leftPolys.push(poly);\r\n else if (res.type === 2)\r\n rightPolys.push(poly);\r\n else if (res.type === 3)\r\n leftPolys.push(poly);\r\n else if (res.type === 4)\r\n {\r\n if (res.back)\r\n leftPolys.push(res.back);\r\n if (res.front)\r\n rightPolys.push(res.front);\r\n }\r\n }\r\n\r\n splitedPolys.push(...toPolygons(retessellate(geom3.create(leftPolys))));\r\n remPolys = rightPolys;\r\n }\r\n\r\n splitedPolys.push(...toPolygons(retessellate(geom3.create(remPolys))));\r\n //分割结束\r\n\r\n //生成UV\r\n let geom = CSG2Geometry2(geom3.create(splitedPolys));\r\n const bufferGeometry = new BufferGeometry().fromGeometry(geom);\r\n //旋转板先变换到原始状态计算uv\r\n if (this._SweepAngle !== 0)\r\n bufferGeometry.applyMatrix4(this._Rotate2OCSMtx);\r\n const gen = new GenLocalUv();\r\n gen.CalculateUv(bufferGeometry, this._board.BoardProcessOption.lines === LinesType.Reverse);\r\n\r\n //变换回来映射\r\n if (this._SweepAngle !== 0)\r\n bufferGeometry.applyMatrix4(this._OCS2RotateMtx);\r\n\r\n //收集所有的x\r\n let pos = bufferGeometry.getAttribute(\"position\") as BufferAttribute;\r\n let xs: number[] = [];\r\n for (let y = 0; y < pos.count; y++)\r\n xs.push(pos.array[y * 3]);\r\n\r\n arraySortByNumber(xs);\r\n arrayRemoveDuplicateBySort(xs, equaln);\r\n\r\n //映射所有的x\r\n this.ParseAllX_Map(xs);\r\n\r\n //变换所有的点\r\n let tempP = new Vector3;\r\n for (let i = 0; i < pos.count; i++)\r\n {\r\n tempP.fromArray(pos.array, i * 3);\r\n this.PosMap2ArcPos(tempP);\r\n pos.setXYZ(i, tempP.x, tempP.y, tempP.z);\r\n }\r\n\r\n //#region 构建线框\r\n let edgeGeom = br.EdgeGeometry;\r\n pos = edgeGeom.getAttribute(\"position\") as BufferAttribute;\r\n\r\n let plane2 = new Plane(new Vector3(-1, 0, 0), 0);\r\n let remLiens: Line3[] = [];\r\n\r\n for (let y = 0; y < pos.count; y += 2)\r\n {\r\n let p1 = new Vector3().fromArray(pos.array, y * 3);\r\n let p2 = new Vector3().fromArray(pos.array, (y + 1) * 3);\r\n if (this._OCS2RotateMtx)\r\n {\r\n p1.applyMatrix4(this._OCS2RotateMtx);\r\n p2.applyMatrix4(this._OCS2RotateMtx);\r\n }\r\n let line3 = new Line3(p1, p2);\r\n remLiens.push(line3);\r\n }\r\n\r\n //所有的线被切割分组\r\n let lines: Line3[] = [];\r\n for (let x of this.SplitXList)\r\n {\r\n plane2.constant = x;\r\n let rightLines: Line3[] = [];\r\n\r\n for (let line of remLiens)\r\n {\r\n let ip = plane2.intersectLine(line, tempP);\r\n if (ip)\r\n {\r\n if (line.start.x < line.end.x)\r\n {\r\n lines.push(new Line3(line.start, ip.clone()));\r\n rightLines.push(new Line3(ip.clone(), line.end));\r\n }\r\n else\r\n {\r\n lines.push(new Line3(ip.clone(), line.end));\r\n rightLines.push(new Line3(line.start, ip.clone()));\r\n }\r\n }\r\n else if (line.start.x > x)\r\n rightLines.push(line);\r\n else\r\n lines.push(line);\r\n }\r\n remLiens = rightLines;\r\n }\r\n lines = lines.concat(remLiens);\r\n\r\n //转换为点表\r\n let pts: Vector3[] = [];\r\n for (let l of lines)\r\n pts.push(l.start, l.end);\r\n\r\n xs = pts.map(p => p.x);\r\n arraySortByNumber(xs);\r\n arrayRemoveDuplicateBySort(xs, equaln);\r\n\r\n this.ParseAllX_Map(xs);\r\n\r\n //变换所有的点\r\n for (let p of pts)\r\n this.PosMap2ArcPos(p);\r\n\r\n edgeGeom = BufferGeometryUtils.CreateFromPts(pts);\r\n //#endregion 结束线框构建\r\n\r\n // TestDraw(new Mesh(bufferGeometry.clone(), new MeshNormalMaterial));\r\n\r\n if (this._SweepAngle !== 0)//将板从旋转状态转回原始状态\r\n {\r\n edgeGeom.applyMatrix4(this._Rotate2OCSMtx);\r\n bufferGeometry.applyMatrix4(this._Rotate2OCSMtx);\r\n }\r\n\r\n bufferGeometry.computeBoundingBox();\r\n bufferGeometry.computeVertexNormals();\r\n\r\n // TestDraw(new Mesh(bufferGeometry, new MeshNormalMaterial));\r\n return [bufferGeometry, edgeGeom];\r\n }\r\n\r\n /** 生成大孔面 */\r\n BuildBigHoleFace()\r\n {\r\n //每段线段的结束距离\r\n let dists: number[] = [];\r\n let split_xs: number[] = [];//分割位置\r\n\r\n //解析每段长度 解析分割位置\r\n let sumLength = 0;\r\n for (let i = 0; i < this.SweepLengths.length; i++)\r\n {\r\n let length = this.SweepLengths[i];\r\n if (this._SweepCurves1[i] instanceof Arc)//在圆弧时分段切割\r\n {\r\n let splitCount = GetArcDrawCount(this._SweepCurves1[i] as Arc);\r\n let divDist = length / splitCount;\r\n for (let j = 1; j < splitCount; j++)\r\n split_xs.push(sumLength + (divDist * j));\r\n }\r\n\r\n sumLength += length;\r\n dists.push(sumLength);\r\n split_xs.push(sumLength);\r\n }\r\n split_xs.pop();//最后一段不在切割\r\n\r\n //拿CSG过来分割\r\n let br = new Board;\r\n br.Thickness = this._board.Thickness;\r\n br.ContourCurve = this._board.ContourCurve;\r\n br.BoardProcessOption[EBoardKeyList.BigHole] = this._board.BoardProcessOption[EBoardKeyList.BigHole];\r\n let csg = Geometry2CSG2(br.BigHoleFaceGeo);\r\n\r\n //旋转 r+m 逆矩阵(m+r) 将板轮廓旋转后 移动到WCS0(包围盒)\r\n let min: Vec3, max: Vec3;\r\n let Rotate2OCSMtx = new Matrix4();\r\n if (this._SweepAngle !== 0)\r\n {\r\n //根据csg旋转\r\n let roMtx = mat4.create();\r\n mat4.rotateZ(roMtx, roMtx, -this._SweepAngle);\r\n csg = transform(roMtx, csg);\r\n [min, max] = measureBoundingBox(csg);\r\n let moveMtx = mat4.create();\r\n mat4.translate(moveMtx, moveMtx, [-min[0], -min[1], 0]);\r\n csg = transform(moveMtx, csg);\r\n if (max[0] > this.SweepLength)\r\n console.log(\"出错\");\r\n\r\n Rotate2OCSMtx = new Matrix4().makeRotationZ(this._SweepAngle).multiply(new Matrix4().setPosition(min[0], min[1], 0));//move + rotate\r\n }\r\n\r\n let remPolys: Poly3[] = toPolygons(csg);\r\n let plane: [number, number, number, number] = [1, 0, 0, 0];\r\n let splitedPolys: Poly3[] = [];\r\n for (let x of split_xs)\r\n {\r\n plane[3] = x;\r\n\r\n let leftPolys: Poly3[] = [];\r\n let rightPolys: Poly3[] = [];\r\n\r\n for (let poly of remPolys)\r\n {\r\n if (!poly) // 先临时处理为null的情况,以免Error\r\n continue;\r\n let res = splitPolygonByPlane(plane, poly);\r\n if (res.type === 0)\r\n leftPolys.push(poly);\r\n else if (res.type === 1)\r\n leftPolys.push(poly);\r\n else if (res.type === 2)\r\n rightPolys.push(poly);\r\n else if (res.type === 3)\r\n leftPolys.push(poly);\r\n else if (res.type === 4)\r\n {\r\n leftPolys.push(res.back);\r\n rightPolys.push(res.front);\r\n }\r\n }\r\n splitedPolys.push(...toPolygons(retessellate(geom3.create(leftPolys))));\r\n remPolys = rightPolys;\r\n }\r\n splitedPolys.push(...toPolygons(retessellate(geom3.create(remPolys))));\r\n //分割结束\r\n\r\n //生成UV\r\n let geom = CSG2Geometry2(geom3.create(splitedPolys));\r\n const bufferGeometry = new BufferGeometry().fromGeometry(geom);\r\n\r\n //收集所有的x\r\n let pos = bufferGeometry.getAttribute(\"position\") as BufferAttribute;\r\n let xs: number[] = [];\r\n for (let y = 0; y < pos.count; y++)\r\n xs.push(pos.array[y * 3]);\r\n\r\n arraySortByNumber(xs);\r\n arrayRemoveDuplicateBySort(xs, equaln);\r\n\r\n //映射所有的x\r\n // 为了不影响this._CacheFuzzXFactory和this._Cache_X_PosDirMap,这里重新定义(否则可能导致错误,但目前没测到)\r\n const [cacheFuzzXFactory, cache_X_PosDirMap] = this.ParseAllX_Map_BigHole(xs);\r\n\r\n //变换所有的点\r\n let tempP = new Vector3;\r\n for (let i = 0; i < pos.count; i++)\r\n {\r\n tempP.fromArray(pos.array, i * 3);\r\n this.PosMap2ArcPos(tempP, cacheFuzzXFactory, cache_X_PosDirMap);\r\n pos.setXYZ(i, tempP.x, tempP.y, tempP.z);\r\n }\r\n\r\n if (this._SweepAngle !== 0)//将板从旋转状态转回原始状态\r\n {\r\n bufferGeometry.applyMatrix4(Rotate2OCSMtx);\r\n }\r\n\r\n return bufferGeometry;\r\n }\r\n\r\n //\r\n private ParseCorner()\r\n {\r\n this._CornerSet = new Set();\r\n this._CornerFuzzFactory = new FuzzyFactory(3, 1e-3);\r\n for (let d of this.SweepEndDists)\r\n {\r\n d = this._CornerFuzzFactory.lookupOrCreate([d], d);\r\n this._CornerSet.add(d);\r\n }\r\n }\r\n\r\n ParseAllX_Map(xs: number[])\r\n {\r\n if (!this._CornerSet) this.ParseCorner();\r\n\r\n let dists = this.SweepEndDists;\r\n let fuzzX = this._CacheFuzzXFactory;\r\n let curveIndex = 0;\r\n let curSum = dists[0];\r\n let preSum = 0;\r\n let rotateAngle = this._FaceDir === FaceDirection.Back ? Math.PI / 2 : -Math.PI / 2;\r\n for (let x of xs)\r\n {\r\n while (x > curSum && curveIndex < dists.length - 1)\r\n {\r\n curveIndex++;\r\n preSum = curSum;\r\n curSum = dists[curveIndex];\r\n }\r\n\r\n let c = this._SweepCurves1[curveIndex];\r\n let param = ((x - preSum) / this._SweepLengths[curveIndex]);\r\n\r\n let onlyX = fuzzX.lookupOrCreate([x], x);\r\n let derv = c.GetFirstDeriv(param);\r\n // if (c instanceof Line)\r\n // derv.divideScalar(this._SweepLengths[curveIndex]);\r\n // else\r\n // derv.divideScalar(c.Radius);\r\n derv.normalize();\r\n rotatePoint(derv, rotateAngle);\r\n\r\n let onlyD = this._CornerFuzzFactory.lookupOrCreate([x], x);\r\n if (this._CornerSet.has(onlyD))//坍塌\r\n {\r\n // console.log(\"坍塌\");\r\n let p2 = this._SweepPath2.GetPointAtParam(curveIndex + Math.round(param));\r\n derv = p2.sub(c.GetPointAtParam(param)).divideScalar(this._board.Thickness);\r\n }\r\n\r\n this._Cache_X_PosDirMap.set(onlyX, [c.GetPointAtParam(param), derv]);\r\n }\r\n }\r\n\r\n ParseAllX_Map_BigHole(xs: number[])\r\n {\r\n const cacheFuzzXFactory = new FuzzyFactory(1, 1e-3);\r\n const cache_X_PosDirMap: Map = new Map;\r\n let dists = this.SweepEndDists;\r\n let curveIndex = 0;\r\n let curSum = dists[0];\r\n let preSum = 0;\r\n let rotateAngle = this._FaceDir === FaceDirection.Back ? Math.PI / 2 : -Math.PI / 2;\r\n for (let x of xs)\r\n {\r\n while (x > curSum && curveIndex < dists.length - 1)\r\n {\r\n curveIndex++;\r\n preSum = curSum;\r\n curSum = dists[curveIndex];\r\n }\r\n\r\n let c = this._SweepCurves1[curveIndex];\r\n let param = ((x - preSum) / this._SweepLengths[curveIndex]);\r\n\r\n let onlyX = cacheFuzzXFactory.lookupOrCreate([x], x);\r\n let derv = c.GetFirstDeriv(param);\r\n\r\n derv.normalize();\r\n rotatePoint(derv, rotateAngle);\r\n\r\n let onlyD = this._CornerFuzzFactory.lookupOrCreate([x], x);\r\n if (this._CornerSet.has(onlyD))//坍塌\r\n {\r\n let p2 = this._SweepPath2.GetPointAtParam(curveIndex + Math.round(param));\r\n derv = p2.sub(c.GetPointAtParam(param)).divideScalar(this._board.Thickness);\r\n }\r\n\r\n cache_X_PosDirMap.set(onlyX, [c.GetPointAtParam(param), derv]);\r\n }\r\n return [cacheFuzzXFactory, cache_X_PosDirMap] as [FuzzyFactory, Map];\r\n }\r\n\r\n PosMap2ArcPos(p: Vector3, cacheFuzzXFactory = this._CacheFuzzXFactory, cache_X_PosDirMap = this._Cache_X_PosDirMap)\r\n {\r\n let [x, y, z] = p.toArray();\r\n let onlyX = cacheFuzzXFactory.lookupOrCreate([x], x);\r\n let arr = cache_X_PosDirMap.get(onlyX);\r\n if (!arr)\r\n {\r\n console.error(\"未知情况?\");\r\n return;\r\n }\r\n let [pox, v] = arr;\r\n\r\n if (this._FaceDir === FaceDirection.Front)\r\n z = this._board.Thickness - z;\r\n\r\n p.copy(v).multiplyScalar(z).add(pox);\r\n [p.y, p.z] = [y, p.y];\r\n }\r\n}\r\n","export enum ArcBoardFeedProcess\r\n{\r\n Slots = 0, //间隔直槽\r\n Model = 1, //铣底加工\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { ArcBoardFeedProcess } from \"../../DatabaseServices/Entity/ArcBoardType\";\r\nimport { Board, IModeling } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { equalv2 } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { FaceDirection } from \"../DrawDrilling/DrillType\";\r\nimport { ArcBoardBuild } from \"./ArcBoardBuild\";\r\n\r\nexport interface ArcBoardOptions\r\n{\r\n arcLength: number;\r\n grooveSpacing: number;\r\n grooveWidth: number;\r\n retainedThickness: number;\r\n knifeRadius: number;\r\n grooveAddLength: number;\r\n grooveAddWidth: number;\r\n grooveAddDepth: number;\r\n arcExtension: number;\r\n};\r\n\r\n//圆弧默认的槽配置\r\nexport const defultArcBoardOption: ArcBoardOptions = {\r\n arcLength: 0,\r\n grooveSpacing: 6,\r\n grooveWidth: 6,\r\n retainedThickness: 2,\r\n knifeRadius: 3,\r\n grooveAddLength: 0,\r\n grooveAddWidth: 0,\r\n grooveAddDepth: 0,\r\n arcExtension: 0,\r\n};\r\n\r\n\r\n/**\r\n * 解析圆弧板需要的走刀数据\r\n * @param br\r\n * @param path 圆弧放样路径\r\n * @param angle 角度\r\n * @param dir 圆弧板见光面 见光面正面走刀颜色黄色,背面颜色红色\r\n * @param [onlyVert=false] 仅解析交点位置 (默认解析所有的槽)\r\n * @returns 返回需要增加的槽的数据\r\n */\r\nexport function ParseBoardArcFeed(br: Board, path: Polyline, angle: number, dir: FaceDirection, arcBoardOptions: Map, onlyVert = false): IModeling[]\r\n{\r\n const arcBoardBuild = new ArcBoardBuild(br);\r\n arcBoardBuild.ParseSweepCurves();\r\n //每段线段的起始位置\r\n const dists: number[] = [];\r\n\r\n //解析每段长度\r\n let sumLength = 0;\r\n dists.push(sumLength);\r\n let SweepLengths = arcBoardBuild.SweepLengths;\r\n for (let i = 0; i < SweepLengths.length; i++)\r\n {\r\n let length = SweepLengths[i];\r\n sumLength += length;\r\n dists.push(sumLength);\r\n }\r\n\r\n const board = new Board();\r\n board.Thickness = br.Thickness;\r\n board.ContourCurve = br.ContourCurve;\r\n\r\n //获取板形状\r\n const c1 = br.Shape;\r\n if (angle !== 0)\r\n c1.ApplyMatrix(arcBoardBuild.OCS2RotateMtx);\r\n\r\n //记录每个转角槽信息\r\n const grooveInfo = new Map();\r\n for (let i = 0; i < dists.length - 2; i++)\r\n {\r\n const arcBoardOption = arcBoardOptions.get(-1);\r\n\r\n let c1 = arcBoardBuild.SweepCurves1[i];\r\n let c2 = arcBoardBuild.SweepCurves1[i + 1];\r\n\r\n let co1 = arcBoardBuild.SweepCurves2[i];\r\n let co2 = arcBoardBuild.SweepCurves2[i + 1];\r\n\r\n //避免多余槽\r\n if (equalv2(co1.EndPoint, co2.StartPoint, 0.1)) continue;\r\n\r\n let p = co1.IntersectWith(co2, IntersectOption.ExtendNone, 0.1);\r\n if (p.length === 1)\r\n {\r\n let cp1 = c1.GetClosestPointTo(p[0], false);\r\n let cp2 = c2.GetClosestPointTo(p[0], false);\r\n\r\n let dist1 = c1.GetDistAtPoint(cp1);\r\n let dist2 = c2.GetDistAtPoint(cp2);\r\n\r\n dist1 = arcBoardBuild.SweepLengths[i] - dist1;\r\n\r\n if (dist1 + dist2 < 0.1) continue;\r\n grooveInfo.set(i, { l: dist1, r: dist2 });\r\n }\r\n else if (p.length === 0)\r\n {\r\n grooveInfo.set(i, { l: arcBoardOption.grooveWidth / 2, r: arcBoardOption.grooveWidth / 2 });\r\n }\r\n }\r\n\r\n const appendModel = (grooveWidth: number, x: number, arcBoardOption: ArcBoardOptions) =>\r\n {\r\n const pl = new Polyline().Rectangle(grooveWidth, 10000).Move(new Vector3(x, 0, 0));\r\n const c2 = new Shape(Contour.CreateContour(pl));\r\n for (const contour of c1.IntersectionBoolOperation(c2))\r\n {\r\n if (angle !== 0)\r\n contour.ApplyMatrix(arcBoardBuild.Rotate2OCSMtx);\r\n\r\n mmm.push({\r\n shape: contour,\r\n thickness: br.Thickness - arcBoardOption.retainedThickness,\r\n dir: dir === 0 ? FaceDirection.Back : FaceDirection.Front,\r\n knifeRadius: arcBoardOption.knifeRadius,\r\n addLen: arcBoardOption.grooveAddLength,\r\n addWidth: arcBoardOption.grooveAddWidth,\r\n addDepth: arcBoardOption.grooveAddDepth,\r\n });\r\n }\r\n };\r\n\r\n //判断是否可以等分\r\n const checkIsDivide = (remainLength: number, grooveWidth: number, grooveSpacing: number, firstGrooveLength: number, lastGrooveLength: number) =>\r\n {\r\n //如果前面有默认槽,则减去一个槽宽度\r\n if (!firstGrooveLength)\r\n remainLength -= grooveWidth;\r\n //如果后面有默认槽,则减去一个槽宽度\r\n if (!lastGrooveLength)\r\n remainLength -= grooveWidth;\r\n const pericycleWidth = grooveSpacing + grooveWidth; //周期宽度\r\n const length = remainLength + grooveWidth; //加一个槽宽,让槽宽和槽间距个数相等\r\n const count = Math.ceil(length / pericycleWidth); //计算挖槽个数\r\n const newSpacing = (length / count) - grooveWidth; //计算新的槽间距值\r\n return newSpacing > 0; //如果新的槽间距大于零,可等分,如果小等于零槽就会重叠\r\n };\r\n\r\n //构建槽\r\n const mmm: IModeling[] = [];\r\n for (let i = 0; i < dists.length - 1; i++)\r\n {\r\n const cu = arcBoardBuild.SweepCurves1[i];\r\n const startGroove = grooveInfo.get(i - 1);\r\n if (startGroove)\r\n {\r\n const arcBoardOption = arcBoardOptions.get(-1);\r\n const grooveWidth = startGroove.l + startGroove.r;\r\n const x = dists[i] - startGroove.l;\r\n appendModel(grooveWidth, x, arcBoardOption);\r\n }\r\n\r\n if (!onlyVert && (cu instanceof Arc))\r\n {\r\n const arcBoardOption = arcBoardOptions.get(i);\r\n const { grooveWidth, grooveSpacing, arcExtension } = arcBoardOption;\r\n\r\n const firstGrooveLength = grooveInfo.get(i - 1)?.r ?? 0; //头通用挖槽长度\r\n const lastGrooveLength = grooveInfo.get(i)?.l ?? 0; //尾通用挖槽长度\r\n\r\n if (br.arcBoardFeedProcess === ArcBoardFeedProcess.Slots)\r\n {\r\n //挖槽的规律是先挖最左右两个槽,再根据最大槽间距、槽宽和剩余长度计算出比例挖槽\r\n let remainLength = cu.Length - firstGrooveLength - lastGrooveLength; //剩余长度\r\n\r\n //更新起始距离\r\n let startDist = dists[i] + firstGrooveLength;\r\n\r\n //先计算是否可以添加槽加长\r\n const cu1 = arcBoardBuild.SweepCurves1[i - 1];\r\n const cu2 = arcBoardBuild.SweepCurves1[i + 1];\r\n if (!firstGrooveLength && arcExtension && cu1 && cu1 instanceof Line)\r\n {\r\n remainLength += arcExtension;\r\n startDist -= arcExtension;\r\n }\r\n\r\n if (!lastGrooveLength && arcExtension && cu2 && cu2 instanceof Line)\r\n remainLength += arcExtension;\r\n\r\n if (remainLength > 0)\r\n {\r\n //只能画一个槽的情况\r\n if (remainLength <= grooveWidth)\r\n {\r\n if (firstGrooveLength)\r\n {\r\n startDist += grooveSpacing;\r\n remainLength -= grooveSpacing;\r\n }\r\n if (lastGrooveLength)\r\n {\r\n remainLength -= grooveSpacing;\r\n }\r\n if (remainLength > 0)\r\n appendModel(remainLength, startDist, arcBoardOption);\r\n continue;\r\n }\r\n\r\n //这里只够分配前后两个槽,这两个槽的大小可能一大一小\r\n if (remainLength <= grooveWidth * 2 + grooveSpacing)\r\n {\r\n if (firstGrooveLength)\r\n {\r\n startDist += grooveSpacing;\r\n remainLength -= grooveSpacing;\r\n }\r\n if (lastGrooveLength)\r\n {\r\n remainLength -= grooveSpacing;\r\n }\r\n appendModel(grooveWidth, startDist, arcBoardOption);\r\n\r\n let x2 = startDist + grooveSpacing + grooveWidth;\r\n let grooveLength2 = remainLength - grooveWidth - grooveSpacing;\r\n // 如果第二个槽太小无法走刀,画一个最小刀直径的槽\r\n let knifeDiameter = arcBoardOption.knifeRadius * 2;\r\n if (grooveLength2 < knifeDiameter)\r\n appendModel(knifeDiameter, x2 - knifeDiameter + grooveLength2, arcBoardOption);\r\n else\r\n appendModel(grooveLength2, x2, arcBoardOption);\r\n continue;\r\n }\r\n\r\n //绘制多个槽\r\n if (checkIsDivide(remainLength, grooveWidth, grooveSpacing, firstGrooveLength, lastGrooveLength))\r\n {\r\n if (!firstGrooveLength)\r\n {\r\n appendModel(grooveWidth, startDist, arcBoardOption);\r\n startDist += grooveWidth;\r\n remainLength -= grooveWidth;\r\n }\r\n\r\n if (!lastGrooveLength)\r\n {\r\n const cu1 = arcBoardBuild.SweepCurves1[i + 1];\r\n remainLength -= grooveWidth;\r\n //判断是否满足尾部延伸\r\n const x = dists[i + 1] - grooveWidth + ((arcExtension && cu1 && cu1 instanceof Line) ? arcExtension : 0);\r\n appendModel(grooveWidth, x, arcBoardOption);\r\n }\r\n\r\n const pericycleWidth = grooveSpacing + grooveWidth; //周期宽度\r\n const length = remainLength + grooveWidth;\r\n const count = Math.ceil(length / pericycleWidth);\r\n // 计算新的槽位间距\r\n const newSpacing = (length / count) - grooveWidth;\r\n\r\n const newPericycleWidth = newSpacing + grooveWidth;\r\n for (let j = 0; j < count - 1; j++)\r\n {\r\n const x = startDist + j * newPericycleWidth + newSpacing;\r\n appendModel(grooveWidth, x, arcBoardOption);\r\n }\r\n }\r\n else\r\n {\r\n if (firstGrooveLength)\r\n {\r\n startDist += grooveSpacing;\r\n }\r\n //不能等分,根据指定槽大小绘制,最后补一个小槽\r\n const pericycleWidth = grooveSpacing + grooveWidth; //周期宽度\r\n const count = Math.ceil(remainLength / pericycleWidth);\r\n for (let j = 0; j < count; j++)\r\n {\r\n let x = startDist + j * pericycleWidth;\r\n if (remainLength >= pericycleWidth)\r\n {\r\n appendModel(grooveWidth, x, arcBoardOption);\r\n remainLength -= pericycleWidth;\r\n }\r\n else\r\n {\r\n // 如果最后一个槽太小无法走刀,画一个最小刀直径的槽\r\n let knifeDiameter = arcBoardOption.knifeRadius * 2;\r\n if (remainLength < knifeDiameter)\r\n appendModel(knifeDiameter, x - knifeDiameter + remainLength, arcBoardOption);\r\n else\r\n appendModel(remainLength, x, arcBoardOption);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else\r\n {\r\n let remainLength = cu.Length - firstGrooveLength - lastGrooveLength; //剩余长度\r\n if (remainLength > 0)\r\n {\r\n //更新起始距离\r\n let startDist = dists[i];\r\n if (!firstGrooveLength)\r\n {\r\n const cu1 = arcBoardBuild.SweepCurves1[i - 1];\r\n //判断是否满足头部延伸\r\n if (arcExtension && cu1 && cu1 instanceof Line)\r\n {\r\n remainLength += arcExtension;\r\n startDist -= arcExtension;\r\n }\r\n }\r\n\r\n if (!lastGrooveLength)\r\n {\r\n const cu1 = arcBoardBuild.SweepCurves1[i + 1];\r\n //判断是否满足尾部延伸\r\n if (arcExtension && cu1 && cu1 instanceof Line)\r\n {\r\n remainLength += arcExtension;\r\n }\r\n }\r\n\r\n appendModel(remainLength, startDist, arcBoardOption);\r\n }\r\n }\r\n }\r\n }\r\n return mmm;\r\n}\r\n","import { Box3, Matrix4, Vector2, Vector3 } from \"three\";\r\nimport { ComputerCurvesNormalOCS } from \"../../Common/CurveUtils\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Entity } from \"../../DatabaseServices/Entity/Entity\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline, PolylineProps } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { GetArcDrawCount } from \"../../Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams\";\r\nimport { AsVector2, AsVector3, equaln, equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { ArcBoardBuild } from \"../ArcBoard/ArcBoardBuild\";\r\nimport { FaceDirection } from \"../DrawDrilling/DrillType\";\r\nimport { BoxLine } from \"../testEntity/BoxLine\";\r\nimport { SplitPolyline } from \"./SplitPolyline\";\r\n\r\n/** 针对圆弧板的线性切割 */\r\nexport class LinearCuttingForSweep\r\n{\r\n /** 点集生成二维刀 */\r\n static CreateSplitPl(pts: Vector3[])\r\n {\r\n /** 刀(线段簇) */\r\n const splitLines: Line[] = CurveManager.PtsToLines(pts);\r\n /** 刀(多段线) */\r\n const splitPl = CurveManager.LinesToPl(splitLines);\r\n return splitPl;\r\n };\r\n\r\n /** 生成圆弧板的切割器*/\r\n constructor(public br: Board, public splitPl: Polyline)\r\n {\r\n this.br = br;\r\n this.splitPl = splitPl.Clone();\r\n }\r\n\r\n /**\r\n * 进行切割\r\n * @param {Polyline[]} clipPls 用于切割的刀\r\n * @returns {[Polyline[], Polyline[], {x:number; y:number}[]]} [切割后轮廓, 切割后路径, 切割后轮廓的偏移值]\r\n * @第一步 判断当前切割的视图类型\r\n * @第二步 根据视图类型判断切割的是路径还是面\r\n * @第三步 把被切割对象(路径与板包围盒)平移到对应视图的平面\r\n * @第四步 旋转被切割对象到XOY平面\r\n * @第五步 在XOY平面下进行切割\r\n */\r\n Split(ucs: Matrix4, clipPls?: Polyline[]): [Polyline[], Polyline[], { x: number; y: number; }[]]\r\n {\r\n /** 当前切割的视图类型 */\r\n const viewStr = this.GetViewStr(ucs);\r\n if (viewStr === ViewType.Normal && clipPls && clipPls.length > 0)\r\n {\r\n // 暂时采用旧的切割方案\r\n return this.SplitBySweep(this.br, clipPls);\r\n }\r\n const isPathOrPlane = this.IsPathOrPlane(viewStr);\r\n if (isPathOrPlane === \"路径\")\r\n {\r\n // 平移\r\n const sweepPathInWCS = this.MovePathToView(viewStr);\r\n // 切割\r\n return this.SplitInPath(sweepPathInWCS);\r\n }\r\n if (isPathOrPlane === \"面\")\r\n {\r\n // 统一\r\n const brBox = this.UnifyBrBoxAndPathBox();\r\n // 平移\r\n const sweepPathInWCS = this.MovePathToView(viewStr);\r\n const brBoxLines = this.MoveBrBoxToView(viewStr, brBox);\r\n // 旋转\r\n const pathBoxPl = this.RotateToXOY(sweepPathInWCS, brBoxLines, new Matrix4().getInverse(ucs));\r\n // 切割\r\n return this.SplitInPlane(sweepPathInWCS, brBoxLines, pathBoxPl);\r\n }\r\n // 其他情况返回空数组,表示不做切割\r\n return [[], [], []];\r\n }\r\n\r\n /**\r\n * 切割面\r\n * @param {Polyline} sweepPathInWCS 放样路径\r\n * @param {Line[]} brBoxLines 板包围盒\r\n * @param {Polyline} pathBoxPl 路径包围盒\r\n * @第一步 计算刀与板包围盒的交点,以及在盒内的顶点,记住采样点\r\n * @第二步 记录采样点在刀上的位置,并移动到路径所在的平面\r\n * @第三步 根据采样点生成垂直于XOY平面的直线\r\n * @第四步 计算这些直线与路径的交点\r\n * @第五步 将这些交点映射到展开后的路径上\r\n * @第六步 根据记录的位置排序这些点,并生成新的刀\r\n */\r\n SplitInPlane(sweepPathInWCS: Polyline, brBoxLines: Line[], pathBoxPl: Polyline)\r\n {\r\n const splitPl = this.splitPl;\r\n /** 采样点(一定在包围盒内) */\r\n const ptsInbrBox = this.GetPtsInbrBox(brBoxLines);\r\n /** 路径所在平面与X轴垂直否 */\r\n const isVerticalWithX = equaln(sweepPathInWCS.Normal.dot(new Vector3(1, 0, 0)), 0);\r\n // 细化\r\n ptsInbrBox.push(...this.Tessellate(sweepPathInWCS, brBoxLines, isVerticalWithX));\r\n // 规范超出的部分\r\n const [yLineMax, yLineMin] = this.AdjustOverBox(sweepPathInWCS, pathBoxPl);\r\n /** 构成新刀的数据集 */\r\n const splitDatasList: { pt: Vector3; index: number; }[][] = [];\r\n /** 路径上的点(用于偏移后求交) */\r\n const pathPt = pathBoxPl.GetPointAtParam(0);\r\n /** 展开后的路径 */\r\n const expandPath = CurveManager.CreateExpandPl(this.GetSweepPathInOCSWithBr());\r\n this.ToSplitPosition(expandPath);\r\n let minLength = Infinity;\r\n const inptsData: { pts: Vector3[], index: number, bias: number; }[] = [];\r\n // 移动到路径所在的平面,然后作垂线并与路径求交\r\n for (const ptInbrBox of ptsInbrBox)\r\n {\r\n /** 在刀上的位置 */\r\n const ptInbrBoxIndex = splitPl.GetParamAtPoint(ptInbrBox);\r\n let biasX = ptInbrBox.x - pathPt.x;\r\n // 往刀所在的平面移动\r\n if (isVerticalWithX)\r\n {\r\n biasX = ptInbrBox.y - pathPt.y;\r\n ptInbrBox.y = pathPt.y;\r\n }\r\n else\r\n ptInbrBox.x = pathPt.x;\r\n const zLine = CurveManager.CreateZLine(ptInbrBox);\r\n const inptsInPath = zLine.IntersectWith(sweepPathInWCS, IntersectOption.ExtendThis, 0.01).reverse();\r\n minLength = Math.min(minLength, inptsInPath.length);\r\n inptsData.push({ pts: inptsInPath, index: ptInbrBoxIndex, bias: biasX });\r\n }\r\n for (const data of inptsData)\r\n {\r\n // 点映射\r\n for (let i = 0; i < minLength; i++)\r\n {\r\n const inptInPath = data.pts[i];\r\n const param = sweepPathInWCS.GetParamAtPoint(inptInPath);\r\n const ptInExpand = expandPath.GetPointAtParam(param);\r\n // 偏移\r\n ptInExpand.y += Math.abs(data.bias);\r\n // 初始化\r\n if (!splitDatasList[i]) splitDatasList[i] = [];\r\n // 添加\r\n splitDatasList[i].push({ pt: ptInExpand, index: data.index });\r\n }\r\n }\r\n for (let splitDatas of splitDatasList)\r\n {\r\n splitDatas = splitDatas.sort((a, b) => a.index - b.index);\r\n // 修正刀\r\n for (let i = 0; i < splitDatas.length; i++)\r\n {\r\n const splitData = splitDatas[i];\r\n const basePt = splitData.pt;\r\n const backPt = splitDatas[i - 1]?.pt;\r\n const nextPt = splitDatas[i + 1]?.pt;\r\n // 目前先只针对首尾点\r\n if (backPt && nextPt)\r\n continue;\r\n /** @todo 这里先按水平延伸来修正 */\r\n if (yLineMax.PtOnCurve(basePt, 1e-3))\r\n {\r\n let sign = 1;\r\n if (backPt) sign = Math.sign(basePt.x - backPt.x);\r\n else if (nextPt) sign = Math.sign(basePt.x - nextPt.x);\r\n const pt = basePt.clone().add(new Vector3(sign * 2000, 0, 0));\r\n const index = splitData.index + ((backPt && !yLineMax.PtOnCurve(backPt)) ? 0.01 : -0.01);\r\n splitDatas.unshift({ pt, index });\r\n i++;\r\n }\r\n else if (yLineMin.PtOnCurve(basePt, 1e-3))\r\n {\r\n let sign = 1;\r\n if (backPt) sign = Math.sign(basePt.x - backPt.x);\r\n else if (nextPt) sign = Math.sign(basePt.x - nextPt.x);\r\n const pt = basePt.clone().add(new Vector3(sign * 2000, 0, 0));\r\n const index = splitData.index + ((backPt && !yLineMin.PtOnCurve(backPt)) ? 0.01 : -0.01);\r\n splitDatas.unshift({ pt, index });\r\n i++;\r\n }\r\n }\r\n // 排序\r\n splitDatas = splitDatas.sort((a, b) => a.index - b.index);\r\n }\r\n /** 新刀 */\r\n const newSplitPls: Polyline[] = [];\r\n for (const splitDatas of splitDatasList)\r\n {\r\n const newSplitPl = CurveManager.CreatePolyline(splitDatas.map(e => AsVector2(e.pt)));\r\n newSplitPls.push(newSplitPl);\r\n }\r\n // 切割板\r\n return this.SplitBrByKnifes(newSplitPls);\r\n }\r\n\r\n /** 判断视图类型 */\r\n private GetViewStr(ucs: Matrix4)\r\n {\r\n const viewType = ViewManager.MatrixIsView(ucs);\r\n if (viewType === ViewType.Unknown)\r\n {\r\n const axisUsc = CurveManager.CreateAxis(ucs);\r\n const axisBr = CurveManager.CreateAxis(this.br.OCS);\r\n const brZArrow = axisBr[2];\r\n const brZAxis = brZArrow.EndPoint.clone().sub(brZArrow.StartPoint);\r\n const uscZArrow = axisUsc[2];\r\n const uscZAxis = uscZArrow.EndPoint.clone().sub(uscZArrow.StartPoint);\r\n const isInPositive = equaln(brZAxis.angleTo(uscZAxis), 0) || equaln(brZAxis.angleTo(uscZAxis), Math.PI);\r\n if (isInPositive) return \"正视图\";\r\n }\r\n return viewType;\r\n }\r\n\r\n /** 判断切割的是路径还是面 */\r\n private IsPathOrPlane(viewStr: ViewType | \"正视图\")\r\n {\r\n /** 放样路径的包围盒 */\r\n const sweepBoxInWCS = this.br.GetSweepPathInWCS().BoundingBox;\r\n // 前视图下没有Y,说明切割的就直接是路径\r\n if (viewStr === ViewType.Front)\r\n return equaln(sweepBoxInWCS.min.y, sweepBoxInWCS.max.y) ? \"路径\" : \"面\";\r\n // 左视图下没有X,说明切割的就直接是路径\r\n if (viewStr === ViewType.Left)\r\n return equaln(sweepBoxInWCS.min.x, sweepBoxInWCS.max.x) ? \"路径\" : \"面\";\r\n // 俯视图下没有Z,说明切割的就直接是路径\r\n if (viewStr === ViewType.Down)\r\n return equaln(sweepBoxInWCS.min.z, sweepBoxInWCS.max.z) ? \"路径\" : \"面\";\r\n return undefined;\r\n }\r\n\r\n /** 获取调整角度(用于处理放样角度带来的影响) */\r\n private GetAdjustAngle()\r\n {\r\n /** @todo 角度 < 0 或 角度 > 90 会有问题 */\r\n const sweepAngle = this.br.SweepAngle;\r\n /** 调整的角度 */\r\n let angle = sweepAngle;\r\n if (equaln(sweepAngle, Math.PI))\r\n angle = 0;\r\n else if (equaln(sweepAngle, -Math.PI / 2))\r\n angle = 0;\r\n else if (sweepAngle > Math.PI / 4)\r\n angle = sweepAngle - Math.PI / 2;\r\n return angle;\r\n }\r\n\r\n /** 统一板包围盒与路径包围盒一致 */\r\n private UnifyBrBoxAndPathBox()\r\n {\r\n const br = this.br;\r\n /** 调整的角度 */\r\n const adjustAngle = this.GetAdjustAngle();\r\n const sweepPathInWCS = br.GetSweepPathInWCS();\r\n // 处理旋转情况下,路径的包围盒不在正交平面内\r\n EntityManager.RotateEntity(sweepPathInWCS, -adjustAngle);\r\n const brBox = br.BoundingBox;\r\n const pathBox = sweepPathInWCS.BoundingBox;\r\n // 约束二者的包围盒\r\n if (!equaln(pathBox.max.x, pathBox.min.x))\r\n {\r\n brBox.max.x = pathBox.max.x;\r\n brBox.min.x = pathBox.min.x;\r\n }\r\n if (!equaln(pathBox.max.y, pathBox.min.y))\r\n {\r\n brBox.max.y = pathBox.max.y;\r\n brBox.min.y = pathBox.min.y;\r\n }\r\n if (!equaln(pathBox.max.z, pathBox.min.z))\r\n {\r\n brBox.max.z = pathBox.max.z;\r\n brBox.min.z = pathBox.min.z;\r\n }\r\n return brBox;\r\n }\r\n\r\n /** 平移路径到对应视图平面 */\r\n private MovePathToView(viewStr: ViewType | \"正视图\")\r\n {\r\n /** 放样路径(世界坐标系下的) */\r\n const sweepPathInWCS = this.br.GetSweepPathInWCS();\r\n /** 偏移向量 */\r\n const biasV = new Vector3(0, 0, 0);\r\n switch (viewStr)\r\n {\r\n case ViewType.Front:\r\n biasV.y = -sweepPathInWCS.BoundingBox.min.y;\r\n break;\r\n case ViewType.Left:\r\n biasV.x = -sweepPathInWCS.BoundingBox.min.x;\r\n break;\r\n case ViewType.Down:\r\n biasV.z = -sweepPathInWCS.BoundingBox.max.z;\r\n break;\r\n }\r\n // 路径-基点归零(在世界坐标系下)\r\n sweepPathInWCS.Move(biasV);\r\n return sweepPathInWCS;\r\n }\r\n\r\n /** 平移板包围盒到对应视图平面 */\r\n private MoveBrBoxToView(viewStr: ViewType | \"正视图\", brBox: Box3Ext)\r\n {\r\n // 板包围盒-基点归零(在世界坐标系下)\r\n const brBoxLines = BoxLine(brBox);\r\n const biasV = new Vector3(0, 0, 0);\r\n switch (viewStr)\r\n {\r\n case ViewType.Front:\r\n biasV.y = -brBox.min.y;\r\n break;\r\n case ViewType.Left:\r\n biasV.x = -brBox.min.x;\r\n break;\r\n case ViewType.Down:\r\n biasV.z = -brBox.max.z;\r\n break;\r\n }\r\n brBoxLines.forEach(e => e.Move(biasV));\r\n return brBoxLines;\r\n }\r\n\r\n /** 旋转到俯视图下(即XOY平面) */\r\n private RotateToXOY(sweepPathInWCS: Polyline, brBoxLines: Line[], ucsInv: Matrix4)\r\n {\r\n const splitPl = this.splitPl;\r\n // 修改放样路径的坐标系(有时会导致sweepPathInWCS的形状都发生改变,所以先注释了,其实大概率也用不上)\r\n // sweepPathInWCS.UpdateOCSTo(new Matrix4());\r\n // 包围盒\r\n const pathBoxPl = EntityManager.GetEnBoxPl(sweepPathInWCS);\r\n // 转换到俯视图下\r\n sweepPathInWCS.ApplyMatrix(ucsInv);\r\n pathBoxPl.ApplyMatrix(ucsInv);\r\n splitPl.ApplyMatrix(ucsInv);\r\n splitPl.UpdateOCSTo(new Matrix4());\r\n brBoxLines.forEach(e => e.ApplyMatrix(ucsInv));\r\n // 依角度调整,使得路径垂直于XOY平面\r\n this.AdjustForSweepAngle(sweepPathInWCS, brBoxLines, pathBoxPl);\r\n return pathBoxPl;\r\n }\r\n\r\n /** 修正放样角度带来的影响(比如求不到交点) */\r\n private AdjustForSweepAngle(sweepPathInWCS: Polyline, brBoxLines: Line[], pathBoxPl: Polyline)\r\n {\r\n const splitPl = this.splitPl;\r\n /** 调整的角度 */\r\n const adjustAngle = this.GetAdjustAngle();\r\n const pathOCSInv = sweepPathInWCS.OCSInv;\r\n const pathOCS = sweepPathInWCS.OCS;\r\n /** 逆旋转矩阵 */\r\n const invRotateMatrix = new Matrix4().makeRotationY(-adjustAngle);\r\n // 在Three默认矩阵左乘(作行变换),故越靠右的矩阵越先运算\r\n // 所以,这里的运算顺序是先pathOCSInv,再invRotateMatrix,最后再pathOCS\r\n // en.ApplyMatrix(mtx) = en.ApplyMatrix(pathOCSInv).ApplyMatrix(invRotateMatrix).ApplyMatrix(pathOCS)\r\n const mtx = pathOCS.clone().multiply(invRotateMatrix).multiply(pathOCSInv);\r\n sweepPathInWCS.ApplyMatrix(mtx);\r\n pathBoxPl.ApplyMatrix(mtx);\r\n splitPl.ApplyMatrix(mtx);\r\n brBoxLines.forEach(e => e.ApplyMatrix(mtx));\r\n }\r\n\r\n /** 对路径进行细化 */\r\n private Tessellate(sweepPathInWCS: Polyline, brBoxLines: Line[], isVerticalWithX: boolean)\r\n {\r\n const splitPl = this.splitPl;\r\n const sweepCusInWCS = sweepPathInWCS.Explode();\r\n const brBox = EntityManager.GetEntitysBox(brBoxLines);\r\n const ptsInbrBox: Vector3[] = [];\r\n for (const sweepCuInWCS of sweepCusInWCS)\r\n {\r\n if (sweepCuInWCS instanceof Arc)\r\n {\r\n const SPET = 20;\r\n if (isVerticalWithX)\r\n {\r\n const splitPlLen = splitPl.Length;\r\n const cuBox = sweepCuInWCS.BoundingBox;\r\n for (let dist = 0; dist < splitPlLen; dist += SPET)\r\n {\r\n const pt = splitPl.GetPointAtDistance(dist);\r\n if (pt.x > cuBox.min.x && pt.x < cuBox.max.x)\r\n {\r\n if (pt.y > brBox.min.y && pt.y < brBox.max.y)\r\n ptsInbrBox.push(pt);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n const splitPlLen = splitPl.Length;\r\n const cuBox = sweepCuInWCS.BoundingBox;\r\n for (let dist = 0; dist < splitPlLen; dist += SPET)\r\n {\r\n const pt = splitPl.GetPointAtDistance(dist);\r\n if (pt.x > brBox.min.x && pt.x < brBox.max.x)\r\n {\r\n if (pt.y > cuBox.min.y && pt.y < cuBox.max.y)\r\n ptsInbrBox.push(pt);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return ptsInbrBox;\r\n }\r\n\r\n /** 规范超出的部分 */\r\n private AdjustOverBox(sweepPathInWCS: Polyline, pathBoxPl: Polyline)\r\n {\r\n const pathBoxMax = { x: -Infinity, y: -Infinity };\r\n const pathBoxMin = { x: Infinity, y: Infinity };\r\n for (let param = 0; param < pathBoxPl.LineData.length; param++)\r\n {\r\n const pt = pathBoxPl.GetPointAtParam(param);\r\n pathBoxMax.x = Math.max(pathBoxMax.x, pt.x);\r\n pathBoxMax.y = Math.max(pathBoxMax.y, pt.y);\r\n pathBoxMin.x = Math.min(pathBoxMin.x, pt.x);\r\n pathBoxMin.y = Math.min(pathBoxMin.y, pt.y);\r\n }\r\n const pathMaxPt = new Vector3(pathBoxMax.x, pathBoxMax.y, 0);\r\n const pathMinPt = new Vector3(pathBoxMin.x, pathBoxMin.y, 0);\r\n const zLineMax = CurveManager.CreateZLine(pathMaxPt);\r\n const zLineMin = CurveManager.CreateZLine(pathMinPt);\r\n const inptMax = zLineMax.IntersectWith(sweepPathInWCS, IntersectOption.ExtendThis, 0.01)[0];\r\n const inptMin = zLineMin.IntersectWith(sweepPathInWCS, IntersectOption.ExtendThis, 0.01)[0];\r\n if (!inptMax || !inptMin)\r\n return [zLineMax, zLineMin];\r\n const paramMax = sweepPathInWCS.GetParamAtPoint(inptMax);\r\n const paramMin = sweepPathInWCS.GetParamAtPoint(inptMin);\r\n /** 展开后的路径 */\r\n const expandPath = CurveManager.CreateExpandPl(this.GetSweepPathInOCS());\r\n let maxPoint = expandPath.GetPointAtParam(paramMax);\r\n let minPoint = expandPath.GetPointAtParam(paramMin);\r\n if (maxPoint.x < minPoint.x) [maxPoint, minPoint] = [minPoint, maxPoint];\r\n const yLineMax = CurveManager.CreateYLine(maxPoint);\r\n const yLineMin = CurveManager.CreateYLine(minPoint);\r\n return [yLineMax, yLineMin];\r\n }\r\n\r\n /** 获取板件坐标系下的放样路径 */\r\n private GetSweepPathInOCS()\r\n {\r\n const br = this.br;\r\n /** 放样路径(世界坐标系下的) */\r\n const sweepPathInWCS = br.GetSweepPathInWCS();\r\n /** 放样路径(板件坐标系下的) */\r\n const sweepPathInOCS = sweepPathInWCS.Clone().ApplyMatrix(sweepPathInWCS.OCSInv);\r\n return sweepPathInOCS;\r\n }\r\n\r\n /** 获取板件坐标系下的放样路径并与板件的边对齐 */\r\n private GetSweepPathInOCSWithBr()\r\n {\r\n const br = this.br;\r\n /** 放样路径(世界坐标系下的) */\r\n const sweepPathInWCS = br.GetSweepPathInWCS();\r\n /** 放样路径(板件坐标系下的) */\r\n const sweepPathInOCS = sweepPathInWCS.Clone().ApplyMatrix(br.OCSInv);\r\n return sweepPathInOCS;\r\n }\r\n\r\n /** 求得的板包围盒的交点与盒内的顶点 */\r\n private GetPtsInbrBox(brBoxLines: Line[])\r\n {\r\n const splitPl = this.splitPl;\r\n const brBox = EntityManager.GetEntitysBox(brBoxLines);\r\n const inptsInbrBox: Vector3[] = [];\r\n // 求包围盒的交\r\n for (const brBoxLine of brBoxLines)\r\n {\r\n inptsInbrBox.push(...brBoxLine.IntersectWith(splitPl, IntersectOption.ExtendNone, 0.01));\r\n }\r\n // 包围盒内的顶点\r\n for (let i = 0; i < splitPl.LineData.length; i++)\r\n {\r\n const pt = splitPl.LineData[i].pt;\r\n if (pt.x > brBox.min.x && pt.x < brBox.max.x && pt.y > brBox.min.y && pt.y < brBox.max.y)\r\n {\r\n inptsInbrBox.push(splitPl.GetPointAtParam(i));\r\n }\r\n }\r\n return inptsInbrBox;\r\n }\r\n\r\n /** 切割路径 */\r\n SplitInPath(sweepPathInWCS: Polyline)\r\n {\r\n const splitPl = this.splitPl;\r\n // 求交\r\n const inptsInPath = sweepPathInWCS.IntersectWith(splitPl, IntersectOption.ExtendNone);\r\n /** 新刀 */\r\n const newSplitPls: Polyline[] = [];\r\n /** 展开后的路径 */\r\n const expandPath = CurveManager.CreateExpandPl(this.GetSweepPathInOCSWithBr());\r\n this.ToSplitPosition(expandPath);\r\n // 生成刀\r\n for (const inptInPath of inptsInPath)\r\n {\r\n const param = sweepPathInWCS.GetParamAtPoint(inptInPath);\r\n const basePoint = expandPath.GetPointAtParam(param);\r\n const newSplitPl = CurveManager.CreatePolyline([new Vector2(basePoint.x, basePoint.y - 1000), new Vector2(basePoint.x, basePoint.y + 1000)]);\r\n newSplitPls.push(newSplitPl);\r\n }\r\n return this.SplitBrByKnifes(newSplitPls);\r\n }\r\n\r\n /** 获取原始位置与切割位置的变换信息 */\r\n private GetPositionData()\r\n {\r\n const br = this.br;\r\n /** 放样路径的旋转角度 */\r\n const sweepAngle = br.SweepAngle;\r\n /** 旋转矩阵 */\r\n const rotateMatrix = new Matrix4().makeRotationZ(sweepAngle);\r\n /** 逆旋转矩阵 */\r\n const invRotateMatrix = new Matrix4().makeRotationZ(-sweepAngle);\r\n /** 板轮廓(肉) */\r\n const brContour = br.ContourCurve.Clone() as Polyline;\r\n brContour.ApplyMatrix(invRotateMatrix);\r\n const biasV = new Vector3(-brContour.BoundingBox.min.x, 0, 0);\r\n const biasV2 = new Vector3(brContour.BoundingBox.min.x, 0, 0);\r\n brContour.ApplyMatrix(rotateMatrix);\r\n return { to: { m: invRotateMatrix, v: biasV }, re: { m: rotateMatrix, v: biasV2 } };\r\n }\r\n\r\n /** 旋转平移到切割位置 */\r\n private ToSplitPosition(pl: Polyline | Polyline[])\r\n {\r\n const { to, re } = this.GetPositionData();\r\n if (pl instanceof Polyline)\r\n {\r\n pl.ApplyMatrix(to.m);\r\n pl.Move(to.v);\r\n }\r\n else\r\n {\r\n pl = pl.map(e =>\r\n {\r\n e.ApplyMatrix(to.m);\r\n e.Move(to.v);\r\n return e;\r\n });\r\n }\r\n }\r\n\r\n /** 平移旋转到原始位置 */\r\n private ReSplitPosition(pl: Polyline | Polyline[])\r\n {\r\n const { to, re } = this.GetPositionData();\r\n if (pl instanceof Polyline)\r\n {\r\n pl.Move(re.v);\r\n pl.ApplyMatrix(re.m);\r\n }\r\n else\r\n {\r\n pl = pl.map(e =>\r\n {\r\n e.Move(re.v);\r\n e.ApplyMatrix(re.m);\r\n return e;\r\n });\r\n }\r\n }\r\n\r\n /** 用刀去切割板(包括轮廓与路径) */\r\n private SplitBrByKnifes(knifes: Polyline[])\r\n {\r\n const br = this.br;\r\n /** 放样路径(板件坐标系下的) */\r\n const sweepPathInOCS = this.GetSweepPathInOCS();\r\n /** 板轮廓(肉) */\r\n const brContour = br.ContourCurve.Clone() as Polyline;\r\n // 旋转平移到切割位置\r\n this.ToSplitPosition(brContour);\r\n // 平移旋转到原始位置\r\n this.ReSplitPosition(brContour);\r\n this.ReSplitPosition(knifes);\r\n // 切割板\r\n const cus = SplitPolyline(brContour, knifes, true);\r\n const contours = [];\r\n // 旋转平移到切割位置\r\n for (const cu of cus)\r\n {\r\n const contour = cu.Clone();\r\n this.ToSplitPosition(contour);\r\n contours.push(contour);\r\n }\r\n // 修正路径起点不为0的情况\r\n const firstPt = sweepPathInOCS.LineData[0].pt.clone();\r\n sweepPathInOCS.Move(AsVector3(firstPt.clone().negate()));\r\n /* ---- [2] 获取正确的放样路径集 ---- */\r\n const [sweepPaths, contourBiases] = this.GetSweepPaths(br, contours, sweepPathInOCS);\r\n return [cus, sweepPaths, contourBiases] as [Polyline[], Polyline[], { x: number; y: number; }[]];\r\n }\r\n\r\n /**\r\n * @todo 这个是旧方案,先临时用一用,后面再重构\r\n * 针对圆弧板进行切割\r\n * @param br 被切割的板\r\n * @param clipPls 用于切割的线\r\n * @问 圆弧板的切割与普通板有何区别?\r\n * @答 切割位置应变长(因为板弯曲了,而板轮廓没有),且放样路径也应被切割\r\n * @着手点 [1]修正板轮廓的切割位置 [2]获取正确的放样路径集\r\n * @修正位置 通过param进行逆映射,从而得到正确的切割位置\r\n * @获取路径 首先要明确一件事,路径需要改变,是因为切割后的板的基点(aabb中X最小的点)可能发生变化\r\n * 所以,我们需要根据新的基点生成新的路径,新基点沿路径方向与旧基点的差值(恒正)作为生成新路径的切割线(垂直X轴)\r\n * 若切割线与路径平行,则新旧基点一致,无需修改\r\n */\r\n private SplitBySweep(br: Board, clipPls: Polyline[])\r\n {\r\n /* ---- 前置处理:获取实际的放样路径 ---- */\r\n const SP2OP = (path: Polyline) => ArcBoardBuild.OffsetPolyline(path, -br.Thickness);\r\n const path = br.GetSweepPath();\r\n /** 路径 */\r\n const sweepPath = br.SweepVisibleFace === FaceDirection.Front ? SP2OP(path) : path;\r\n // 修正路径起点不为0的情况\r\n const firstPt = sweepPath.LineData[0].pt.clone();\r\n sweepPath.Move(AsVector3(firstPt.clone().negate()));\r\n /* ---- [1] 修正板轮廓的切割位置 ---- */\r\n /** 新的刀 */\r\n const newSplitPls = this.GetSplitPls(br, clipPls, sweepPath);\r\n /** 板轮廓(肉) */\r\n const brContour = br.ContourCurve.Clone() as Polyline;\r\n const cus = SplitPolyline(brContour, newSplitPls, true);\r\n /* ---- [2] 获取正确的放样路径集 ---- */\r\n /** 放样路径的旋转角度 */\r\n const sweepAngle = br.SweepAngle;\r\n /** 逆旋转矩阵 */\r\n const invRotateMatrix = new Matrix4().makeRotationZ(-sweepAngle);\r\n const contours: Polyline[] = [];\r\n for (const cu of cus)\r\n {\r\n const contour = cu.Clone();\r\n contour.ApplyMatrix(invRotateMatrix);\r\n contours.push(contour);\r\n }\r\n const [sweepPaths, contourBiases] = this.GetSweepPaths(br, contours, sweepPath);\r\n return [cus, sweepPaths, contourBiases] as [Polyline[], Polyline[], { x: number; y: number; }[]];;\r\n }\r\n\r\n /** 获得新的刀(多段线) */\r\n private GetSplitPls(br: Board, splitPls: Polyline[], sweepPath: Polyline)\r\n {\r\n /** 新的刀 */\r\n const newSplitPls: Polyline[] = [];\r\n /* ---- [2] 旋转:把肉和路径旋转负的放样角度 ---- */\r\n /** 放样角度 */\r\n const sweepAngle = br.SweepAngle;\r\n const rotateMatrix = new Matrix4().makeRotationZ(sweepAngle);\r\n const invRotateMatrix = new Matrix4().makeRotationZ(-sweepAngle);\r\n /* ---- [3] 展开:把路径展开 ---- */\r\n const expandPath = CurveManager.CreateExpandPl(sweepPath);\r\n /* ---- [4] 范围:生成路径X轴的包围线,并把肉包围盒收缩至包围线内 ---- */\r\n /** 包围线 */\r\n const pathBox = sweepPath.BoundingBox;\r\n const pathArcs: Arc[] = [];\r\n const cus = sweepPath.Explode();\r\n for (const cu of cus)\r\n {\r\n if (cu instanceof Arc)\r\n {\r\n pathArcs.push(cu);\r\n }\r\n }\r\n const xInPathByBox = pathBox.max.clone().sub(pathBox.min).x;\r\n const diffLen = expandPath.Length - xInPathByBox;\r\n const GetBoxContour = (box: Box3Ext, diffLen?: number) =>\r\n {\r\n const max = box.max.sub(box.min);\r\n const min = box.min.sub(box.min);\r\n if (diffLen)\r\n {\r\n max.x -= diffLen * Math.cos(sweepAngle);\r\n max.y -= diffLen * Math.sin(sweepAngle);\r\n }\r\n const pl = new Polyline([\r\n { pt: new Vector2(min.x, min.y), bul: 0 },\r\n { pt: new Vector2(max.x, min.y), bul: 0 },\r\n { pt: new Vector2(max.x, max.y), bul: 0 },\r\n { pt: new Vector2(min.x, max.y), bul: 0 },\r\n { pt: new Vector2(min.x, min.y), bul: 0 },\r\n ]);\r\n return pl;\r\n };\r\n /** 包围盒 */\r\n const brBoxContour = GetBoxContour(br.ContourCurve.BoundingBoxInOCS, diffLen);\r\n brBoxContour.ApplyMatrix(invRotateMatrix);\r\n const pathMin = pathBox.min.clone();\r\n pathMin.y = 0;\r\n brBoxContour.Move(pathMin);\r\n /* ---- [5] 求交:求得刀在包围盒和包围线上的交点 ---- */\r\n for (const splitPl of splitPls)\r\n {\r\n splitPl.ApplyMatrix(invRotateMatrix);\r\n /** 在包围线内的顶点 */\r\n const pts: Vector3[] = [];\r\n for (let i = 0; i < splitPl.LineData.length; i++)\r\n {\r\n const pt = AsVector3(splitPl.GetPointAtParam(i));\r\n if (pathBox.min.x - 1e-3 < pt.x && pt.x < pathBox.max.x + 1e-3)\r\n pts.push(pt);\r\n // 不是首尾点的顶点也算进去\r\n else if (!equalv3(pt, splitPl.StartPoint) && !equalv3(pt, splitPl.EndPoint))\r\n pts.push(pt);\r\n }\r\n /** 在包围盒的交点 */\r\n const ipts = brBoxContour.IntersectWith(splitPl, IntersectOption.ExtendNone);\r\n ipts.push(...pts);\r\n // 紧密贴合\r\n for (const pathArc of pathArcs)\r\n {\r\n const MAX_SPLIT_COUNT = 36;\r\n const SPLIT_RATE = 0.5;\r\n const splitCount = Math.min(GetArcDrawCount(pathArc) * SPLIT_RATE, MAX_SPLIT_COUNT);\r\n const divDist = pathArc.Length / splitCount;\r\n for (let i = 0; i < splitCount; i++)\r\n {\r\n const pInArc = pathArc.GetPointAtDistance(i * divDist);\r\n const vertical = CurveManager.CreateYLine(pInArc);\r\n const iptsInArc = splitPl.IntersectWith(vertical, IntersectOption.ExtendArg);\r\n for (const iptInArc of iptsInArc)\r\n {\r\n ipts.push(iptInArc);\r\n }\r\n }\r\n }\r\n /** 用于连成新的刀的点 */\r\n const splitPts: { index: number; value: Vector3; }[] = [];\r\n for (const ipt of ipts)\r\n {\r\n const index = splitPl.GetParamAtPoint(ipt);\r\n /* ---- [6] 垂直:交点作垂线垂直映射到路径上 ---- */\r\n const vertical2 = CurveManager.CreateYLine(ipt);\r\n const ipts2 = sweepPath.IntersectWith(vertical2, IntersectOption.ExtendArg);\r\n // 对于多值函数的临时处理(只去最后一次的值,强行变成单射)\r\n const ipt2 = ipts2[ipts2.length - 1];\r\n if (ipt2)\r\n {\r\n /* ---- [7] 长度:根据点在路径上的长度位置,映射到展开后的路径上 ---- */\r\n const param = sweepPath.GetParamAtPoint(ipt2);\r\n const ept = expandPath.GetPointAtParam(param);\r\n /* ---- [8] 水平:根据展开后的点与展开前的距离差,进行水平偏移 ---- */\r\n const biasPt = ipt.clone();\r\n const len = ept.x - ipt.x;\r\n biasPt.x += len;\r\n splitPts.push({ index: index, value: biasPt });\r\n // 超出则添加水平偏移点\r\n if (ipt2.x > pathBox.max.x - 1e-3)\r\n {\r\n const otherPt = biasPt.clone();\r\n otherPt.x += 1000;\r\n const line = splitPl.GetCurveAtParam(index);\r\n // 根据方向判断index的值\r\n const dir = line.EndPoint.x - line.StartPoint.x;\r\n if (dir > 0)\r\n {\r\n if (equalv3(line.EndPoint, splitPl.EndPoint))\r\n splitPts.push({ index: index + 1, value: otherPt });\r\n }\r\n else\r\n {\r\n if (equalv3(line.StartPoint, splitPl.StartPoint))\r\n splitPts.push({ index: index - 1, value: otherPt });\r\n }\r\n }\r\n // 镜像情况(todo定稿后可以与上面的if何在一起)\r\n else if (ipt2.x < pathBox.min.x + 1e-3)\r\n {\r\n const otherPt = biasPt.clone();\r\n otherPt.x -= 1000;\r\n const line = splitPl.GetCurveAtParam(index);\r\n // 根据方向判断index的值\r\n const dir = line.EndPoint.x - line.StartPoint.x;\r\n if (dir < 0)\r\n {\r\n if (equalv3(line.EndPoint, splitPl.EndPoint))\r\n splitPts.push({ index: index + 1, value: otherPt });\r\n }\r\n else\r\n {\r\n if (equalv3(line.StartPoint, splitPl.StartPoint))\r\n splitPts.push({ index: index - 1, value: otherPt });\r\n }\r\n }\r\n }\r\n else\r\n splitPts.push({ index: index, value: ipt });\r\n }\r\n /* ---- [9] 连线:将偏移后的点连成线(就是新的刀) ---- */\r\n const arr = splitPts.sort((a, b) => a.index - b.index);\r\n const newSplitPl = CurveManager.CreatePolyline(arr.map(e => AsVector2(e.value)));\r\n newSplitPl.ApplyMatrix(rotateMatrix);\r\n newSplitPls.push(newSplitPl);\r\n }\r\n return newSplitPls;\r\n }\r\n\r\n /** 获取被切割后的放样路径集 */\r\n private GetSweepPaths(br: Board, contours: Polyline[], sweepPath: Polyline): [Polyline[], { x: number; y: number; }[]]\r\n {\r\n /** 切割后的放样曲线 */\r\n const sweepPaths: Polyline[] = [];\r\n /** 用于修正轮廓位置的偏移值 */\r\n const contourBiases: { x: number, y: number; }[] = [];\r\n /** 放样角度 */\r\n const sweepAngle = br.SweepAngle;\r\n const firstPt = sweepPath.LineData[0].pt.clone();\r\n sweepPath.Move(AsVector3(firstPt));\r\n /** 展开的点映射成弯曲的点 */\r\n const FlatToCurved = (ipt: Vector3) =>\r\n {\r\n const dist = ipt.x;\r\n const p = sweepPath.GetPointAtDistance(dist);\r\n const param = sweepPath.GetParamAtDist(dist);\r\n // 这里多返回一些,可能会用到\r\n return [p, param, dist] as [Vector3, number, number];\r\n };\r\n const OP2SP = (offsetPath: Polyline) => ArcBoardBuild.OffsetPolyline(offsetPath, br.Thickness);\r\n /** 限制向量的最大值(用于修复可能产生的精度问题,如首尾相连时) */\r\n const LimitMaxInVector3 = (vec: Vector3, max: { x?: number, y?: number, z?: number; }) =>\r\n {\r\n const v = vec.clone();\r\n max.x !== undefined && (v.x = Math.min(v.x, max.x));\r\n max.y !== undefined && (v.y = Math.min(v.y, max.y));\r\n max.z !== undefined && (v.z = Math.min(v.z, max.z));\r\n return v;\r\n };\r\n for (const contour of contours)\r\n {\r\n // 切割路径\r\n const cu = contour.Clone();\r\n const box = cu.BoundingBox;\r\n const [pA, paramA, distA] = FlatToCurved(box.min);\r\n const [pB, paramB, distB] = FlatToCurved(LimitMaxInVector3(box.max, { x: sweepPath.Length }));\r\n const sweepPathCopy = sweepPath.Clone();\r\n const partPath = CurveManager.Get_Pl_InPtAtoPtB(sweepPathCopy, pA, pB);\r\n // 修正轮廓\r\n let baseLen = pA.x - box.min.x - firstPt.x;\r\n const biasX = Math.cos(sweepAngle) * baseLen;\r\n const biasY = Math.sin(sweepAngle) * baseLen;\r\n contourBiases.push({ x: biasX, y: biasY });\r\n // 修正路径(保证放样路径都是从(0,0)开始),todo也不一定是(0,0)因为见光面的原因\r\n const bias = -partPath.LineData[0].pt.x + firstPt.x;\r\n partPath.LineData.forEach(e => { e.pt.x += bias; });\r\n const factPath = br.SweepVisibleFace === FaceDirection.Front ? OP2SP(partPath) : partPath;\r\n sweepPaths.push(factPath);\r\n }\r\n return [sweepPaths, contourBiases];\r\n };\r\n}\r\n\r\n/** 视图类型 */\r\nexport enum ViewType\r\n{\r\n Normal = \"正视图\",\r\n Front = \"前视图\",\r\n Left = \"左视图\",\r\n Right = \"右视图\",\r\n Down = \"俯视图\",\r\n Unknown = \"未知视图\",\r\n}\r\n\r\n/** 视图管理器 */\r\nexport class ViewManager\r\n{\r\n /** 获取视图对应的矩阵 */\r\n static GetViewMatrix(viewType: ViewType)\r\n {\r\n if (viewType === ViewType.Front)\r\n {\r\n const frontMatrix = new Matrix4();\r\n frontMatrix.elements = [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1];\r\n return frontMatrix;\r\n }\r\n if (viewType === ViewType.Left)\r\n {\r\n const leftMatrix = new Matrix4();\r\n leftMatrix.elements = [0, -1, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0, 0, 0, 1];\r\n return leftMatrix;\r\n }\r\n if (viewType === ViewType.Down)\r\n {\r\n const downMatrix = new Matrix4();\r\n downMatrix.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\r\n return downMatrix;\r\n }\r\n if (viewType === ViewType.Right)\r\n {\r\n const rightMatrix = new Matrix4();\r\n rightMatrix.elements = [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1];\r\n return rightMatrix;\r\n }\r\n return new Matrix4();\r\n };\r\n\r\n /** 判断矩阵位于哪个视图 */\r\n static MatrixIsView(m: Matrix4)\r\n {\r\n const frontMatrix = this.GetViewMatrix(ViewType.Front);\r\n const leftMatrix = this.GetViewMatrix(ViewType.Left);\r\n const downMatrix = this.GetViewMatrix(ViewType.Down);\r\n const rightMatrix = this.GetViewMatrix(ViewType.Right);\r\n const EqualnMatrix = (m1: Matrix4, m2: Matrix4) =>\r\n {\r\n for (let i = 0; i < m1.elements.length; i++)\r\n {\r\n const e1 = m1.elements[i];\r\n const e2 = m2.elements[i];\r\n if (!equaln(e1, e2))\r\n return false;\r\n }\r\n return true;\r\n };\r\n const isFrontView = EqualnMatrix(m, frontMatrix);\r\n const isLeftView = EqualnMatrix(m, leftMatrix);\r\n const isDownView = EqualnMatrix(m, downMatrix);\r\n const isRightView = EqualnMatrix(m, rightMatrix);\r\n return isFrontView ? ViewType.Front : isLeftView ? ViewType.Left : isDownView ? ViewType.Down : isRightView ? ViewType.Right : ViewType.Unknown;\r\n };\r\n}\r\n\r\n/** 线段管理器 */\r\nexport class CurveManager\r\n{\r\n /** X轴的平行线 */\r\n static CreateXLine = (p: Vector3) => new Line(new Vector3(p.x - 1000, p.y, p.z), new Vector3(p.x + 1000, p.y, p.z));\r\n /** Y轴的平行线 */\r\n static CreateYLine = (p: Vector3) => new Line(new Vector3(p.x, p.y - 1000, p.z), new Vector3(p.x, p.y + 1000, p.z));\r\n /** Z轴的平行线 */\r\n static CreateZLine = (p: Vector3) => new Line(new Vector3(p.x, p.y, p.z - 1000), new Vector3(p.x, p.y, p.z + 1000));\r\n /** 通过点集生成多段线 */\r\n static CreatePolyline = (ps: Vector2[]) => new Polyline(ps.map(p => { return { pt: p, bul: 0 } as PolylineProps; }));\r\n /* 多段线展开直线(类型依旧是多段线) */\r\n static CreateExpandPl(pl: Polyline)\r\n {\r\n const cus = pl.Explode();\r\n let len = 0;\r\n const ps: Vector2[] = [];\r\n for (const cu of cus)\r\n {\r\n ps.push(new Vector2(len, 0));\r\n len += cu.Length;\r\n }\r\n ps.push(new Vector2(len, 0));\r\n return this.CreatePolyline(ps).ApplyMatrix(pl.OCS);\r\n };\r\n /** 绘制矩阵所表示的坐标系 */\r\n static CreateAxis(m: Matrix4)\r\n {\r\n const len = 100;\r\n const xArrow = new Line(new Vector3(0, 0, 0), new Vector3(len, 0, 0));\r\n const yArrow = new Line(new Vector3(0, 0, 0), new Vector3(0, len, 0));\r\n const zArrow = new Line(new Vector3(0, 0, 0), new Vector3(0, 0, len));\r\n xArrow.ColorIndex = 1;\r\n yArrow.ColorIndex = 3;\r\n zArrow.ColorIndex = 5;\r\n xArrow.ApplyMatrix(m);\r\n yArrow.ApplyMatrix(m);\r\n zArrow.ApplyMatrix(m);\r\n return [xArrow, yArrow, zArrow];\r\n };\r\n /** 点集转线段簇 */\r\n static PtsToLines(pts: Vector3[]): Line[]\r\n {\r\n const lines: Line[] = [];\r\n for (let i = 1; i < pts.length; i++)\r\n {\r\n const p1 = pts[i - 1];\r\n const p2 = pts[i];\r\n const line = new Line(p1, p2);\r\n lines.push(line);\r\n }\r\n return lines;\r\n };\r\n /** 线段簇转多段线 */\r\n static LinesToPl(lines: Line[]): Polyline\r\n {\r\n const pl = new Polyline();\r\n // 确保坐标系不要沿着直线方向\r\n const lines2: Line[] = [];\r\n if (lines.length === 1)\r\n {\r\n lines2.push(lines[0]);\r\n const p1 = lines[0].EndPoint;\r\n const p2 = p1.clone().add(p1.clone().normalize().multiplyScalar(1));\r\n const line = new Line(p1, p2);\r\n lines2.push(line);\r\n pl.OCS = ComputerCurvesNormalOCS(lines2);\r\n }\r\n else\r\n {\r\n pl.OCS = ComputerCurvesNormalOCS(lines);\r\n }\r\n // 转成多段线\r\n pl.ColorIndex = lines[0].ColorIndex;\r\n for (const splitLine of lines)\r\n {\r\n pl.Join(splitLine, false, 0.01);\r\n }\r\n return pl;\r\n };\r\n /** 获取pA-pB之间的曲线 */\r\n static Get_Pl_InPtAtoPtB(pl: Polyline, pA: Vector3, pB: Vector3)\r\n {\r\n // 确保pA在pB前面\r\n if (pl.GetParamAtPoint(pA) > pl.GetParamAtPoint(pB))\r\n {\r\n const temp = pA;\r\n pA = pB;\r\n pB = temp;\r\n }\r\n const paramA = pl.GetParamAtPoint(pA);\r\n const pls = pl.GetSplitCurves(paramA);\r\n pl = pls[1] || pls[0];\r\n const paramB = pl.GetParamAtPoint(pB);\r\n return pl.GetSplitCurves(paramB)[0];\r\n };\r\n}\r\n\r\n/** 实体管理器 */\r\nclass EntityManager\r\n{\r\n /** 旋转实体 */\r\n static RotateEntity(en: Entity, angle: number)\r\n {\r\n const oldOCS = en.OCS;\r\n const rotateMatrix = new Matrix4().makeRotationY(angle);\r\n en.ApplyMatrix(en.OCSInv).ApplyMatrix(rotateMatrix).ApplyMatrix(oldOCS);\r\n };\r\n /** 求实体集的包围盒 */\r\n static GetEntitysBox(ens: Entity[])\r\n {\r\n const box = new Box3;\r\n for (const en of ens)\r\n box.union(en.BoundingBox);\r\n return box;\r\n };\r\n /** 获取实体的包围盒线 */\r\n static GetEnBoxPl(en: Entity)\r\n {\r\n const box = en.BoundingBox;\r\n const boxPl = new Polyline([\r\n {\r\n pt: new Vector2(box.min.x, box.min.y),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(box.max.x, box.min.y),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(box.max.x, box.max.y),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(box.min.x, box.max.y),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(box.min.x, box.min.y),\r\n bul: 0\r\n },\r\n ]);\r\n boxPl.Z = box.min.z;\r\n return boxPl;\r\n };\r\n}\r\n","//为了避免Core对UI库的依赖,导致测试用例失败,导致外部项目引用失败,我们分离了这个函数\r\n\r\nimport { InteractionLog, LogType } from \"./Log\";\r\n\r\nexport 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\r\n\r\ninterface IToasterShowEntityErrorOption\r\n{\r\n intent: Intent,\r\n msg: string,\r\n timeout: number;\r\n ent: any;\r\n}\r\n\r\nexport const ToasterShowEntityMsgInjectFunctions: ((option: IToasterShowEntityErrorOption) => void)[] = [];\r\nexport function ToasterShowEntityMsg(option: {\r\n intent: Intent,\r\n msg: string,\r\n timeout: number;\r\n ent: any;\r\n})\r\n{\r\n for (let f of ToasterShowEntityMsgInjectFunctions)\r\n f(option);\r\n\r\n let logMsgs = [{ msg: option.msg }] as any[];\r\n if (option.ent)\r\n logMsgs.push({ msg: \"点击查看\", entity: Array.isArray(option.ent) ? option.ent : [option.ent] });\r\n InteractionLog(logMsgs, LogType.Warning);\r\n}\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","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\nimport { GangDrillType } from './CylinderHole';\r\n\r\n@Factory\r\nexport abstract 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 protected allowHoleAtBoardEdge: boolean = false; //允许大孔面在板边缘\r\n protected type: GangDrillType = GangDrillType.Pxl;\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._Height !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Height = v;\r\n this.Update();\r\n }\r\n }\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 get AllowPxl()\r\n {\r\n return this.allowHoleAtBoardEdge;\r\n }\r\n set AllowPxl(v: boolean)\r\n {\r\n if (this.allowHoleAtBoardEdge !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.allowHoleAtBoardEdge = v;\r\n }\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 > 5)\r\n {\r\n this.OtherHalfTongKong = file.ReadSoftObjectId();\r\n }\r\n if (ver > 6)\r\n {\r\n this.allowHoleAtBoardEdge = file.ReadBool();\r\n }\r\n else\r\n {\r\n this.allowHoleAtBoardEdge = false;\r\n }\r\n if (ver > 8)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(9);\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 file.WriteBool(this.allowHoleAtBoardEdge);\r\n\r\n // ver9\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n}\r\n","import { BufferGeometry, CylinderBufferGeometry, Float32BufferAttribute, FrontSide, 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 //同侧面 常规单头连杆、偏心轮、预埋件三合一排钻(原先是)是双头三合一\r\n private _SameSideHole: boolean = false;\r\n private _GoodsId: string = \"\";\r\n private _GoodsSn: string = \"\";\r\n\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\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\r\n //同侧面排钻\r\n get SameSideHole(): boolean\r\n {\r\n return this._SameSideHole;\r\n }\r\n set SameSideHole(value: boolean)\r\n {\r\n if (this._SameSideHole !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._SameSideHole = value;\r\n }\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 get GoodsId(): string\r\n {\r\n return this._GoodsId;\r\n }\r\n set GoodsId(value: string)\r\n {\r\n if (this._GoodsId !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._GoodsId = value;\r\n }\r\n }\r\n\r\n get GoodsSn(): string\r\n {\r\n return this._GoodsSn;\r\n }\r\n set GoodsSn(value: string)\r\n {\r\n if (this._GoodsSn !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._GoodsSn = value;\r\n }\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\r\n InitDrawObject(renderType: RenderType)\r\n {\r\n return this.GetObject3DByRenderType(renderType);\r\n }\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 if (renderType === RenderType.CustomNumber || renderType === RenderType.ModelGroove || renderType === RenderType.Edge)\r\n return;//不绘制了\r\n // return new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex, FrontSide, true));\r\n else\r\n return new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n }\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\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 if (type === RenderType.CustomNumber || type === RenderType.ModelGroove)\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex, FrontSide, true);\r\n else\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n\r\n ClearDraw(): this\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 return super.ClearDraw();\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 if (ver > 5)\r\n this.SameSideHole = file.Read();\r\n\r\n if (ver > 6)\r\n {\r\n this.GoodsId = file.Read();\r\n this.GoodsSn = file.Read();\r\n }\r\n }\r\n\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(7);//ver\r\n file.Write(this._Radius);\r\n file.Write(this.type);\r\n\r\n file.Write(this.SameSideHole);\r\n file.Write(this.GoodsId);\r\n file.Write(this.GoodsSn);\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 { 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 { Box3Ext } from \"../../Geometry/Box\";\r\nimport { ZAxis, isParallelTo, rotatePoint } from \"../../Geometry/GeUtils\";\r\nimport { DrillType } from \"./DrillType\";\r\n\r\nexport const SCALAR = 0.1;\r\n\r\nexport function CyHoleInBoard(cys: CylinderHole[], br: Board, ocs: Matrix4, checkAll = false)\r\n{\r\n if (!checkAll && 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 Box3Ext();\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, 1e-5))\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, 1e-4).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 {\r\n if (pxl.AllowPxl)\r\n return outline.IntersectWith(cir, 0, 1e-4).length <= 1 && !outline.PtInCurve(center);\r\n else\r\n return outline.IntersectWith(cir, 0, 1e-4).length > 0 || !outline.PtInCurve(center);\r\n }\r\n else\r\n return outline.IntersectWith(cir, 0, 1e-4).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, 1e-4).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, 1e-4).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, 1e-4).length !== 1 || l2.IntersectWith(outline, 0, 1e-4).length !== 1)\r\n return false;\r\n }\r\n\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * 板的排钻 <上下左右>\r\n */\r\nexport interface IBoardRectHoleType\r\n{\r\n up: string;\r\n down: string;\r\n left: string;\r\n right: string;\r\n}\r\n\r\n/**分析上下左右排钻 */\r\nexport function ParseBoardRectHoleType(br: Board, outBrRectHoleType: IBoardRectHoleType = {} as any)\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.GetFirstDeriv(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 outBrRectHoleType.down = hightDrill[i];\r\n else\r\n outBrRectHoleType.up = hightDrill[i];\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n outBrRectHoleType.right = hightDrill[i];\r\n else\r\n outBrRectHoleType.left = hightDrill[i];\r\n }\r\n }\r\n\r\n return outBrRectHoleType;\r\n}\r\nexport function ExtureHoleInBoard(holes: ExtrudeHole[], board: Board, ocs: Matrix4)\r\n{\r\n //TODO:自定义排钻判断\r\n return true;\r\n}\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 SetBrHighHoleTypeFromRectHoleType(br: Board, brRectHoleType: IBoardRectHoleType)\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.GetFirstDeriv(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(brRectHoleType.down);\r\n else\r\n highDrill.push(brRectHoleType.up);\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n highDrill.push(brRectHoleType.right);\r\n else\r\n highDrill.push(brRectHoleType.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","export interface FontStyleInfoOption\r\n{\r\n height: number; //文本高度\r\n fontType: FontType; //字体类型(宋体 黑体)\r\n widthFactor: number; //宽度因子\r\n}\r\n\r\nexport enum FontType\r\n{\r\n YaHei = \"yahei\",\r\n SongTi = \"songti\",\r\n KaiTi = \"KaiTi\",\r\n FangSong = \"FangSong\",\r\n LiShu = \"LiShu\",\r\n HeiTi = \"HeiTi\",\r\n HuaWenLiShu = \"HuaWenLiShu\",\r\n HuaWenXingKai = \"HuaWenXingKai\",\r\n}\r\n\r\nexport const FontTypeOption = [\r\n { label: \"宋体\", value: FontType.SongTi },\r\n { label: \"雅黑\", value: FontType.YaHei },\r\n { label: \"楷体\", value: FontType.KaiTi },\r\n { label: \"仿宋\", value: FontType.FangSong },\r\n { label: \"隶书\", value: FontType.LiShu },\r\n { label: \"黑体\", value: FontType.HeiTi },\r\n { label: \"华文隶书\", value: FontType.HuaWenLiShu },\r\n { label: \"华文行楷\", value: FontType.HuaWenXingKai }\r\n];\r\n","export enum FindModifyStyle\r\n{\r\n FuzzyQuery = 0,//模糊匹配\r\n PreciseQuery = 1, //精确匹配\r\n}\r\n","import { FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { BoardOpenDir, ComposingType, LinesType } from \"../../DatabaseServices/Entity/BoardInterface\";\r\nimport { FindModifyStyle } from \"../Components/Board/BoardFindInterface\";\r\nimport { IBaseOption } from \"./OptionInterface/IOptionInterface\";\r\n\r\nexport const DRILL_KEYS = [\"downDrill\", \"rightDrill\", \"upDrill\", \"leftDrill\"]; //这个顺序不能变\r\nexport const SEAL_KEYS = [EBoardKeyList.UpSealed, EBoardKeyList.DownSealed, EBoardKeyList.RightSealed, EBoardKeyList.LeftSealed];\r\nexport const EDGEREMARK_KEYS = [\"edgeRemarkUp\", \"edgeRemarkDown\", \"edgeRemarkLeft\", \"edgeRemarkRight\"];\r\n\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 hardwareName: 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.OpenDir]: BoardOpenDir;\r\n [EBoardKeyList.UpSealed]: string;\r\n [EBoardKeyList.DownSealed]: string;\r\n [EBoardKeyList.LeftSealed]: string;\r\n [EBoardKeyList.RightSealed]: string;\r\n hardwareDoorName: string;\r\n highDrill: string[];\r\n upDownDrill: [boolean, boolean];\r\n isClose: boolean;\r\n remarks: [string, string][];\r\n query: FindModifyStyle;\r\n extraRemarks: [string, string][];\r\n isChaidan: boolean;\r\n [EBoardKeyList.KnifeRad]: string;\r\n edgeRemarkUp: string; //板边备注上下左右\r\n edgeRemarkDown: string;\r\n edgeRemarkLeft: string;\r\n edgeRemarkRight: string;\r\n [EBoardKeyList.SpliteHeight]: string;\r\n [EBoardKeyList.SpliteWidth]: string;\r\n [EBoardKeyList.SpliteThickness]: string;\r\n appendRemark: [string, string, number][];\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 useCurve: boolean;\r\n useText: boolean;\r\n noUseBr: boolean;\r\n noUseHwd: boolean;\r\n [EBoardKeyList.RoomName]: boolean;\r\n [EBoardKeyList.CabinetName]: boolean;\r\n brName: boolean;\r\n hardwareName: 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 addRemarks: boolean;\r\n [EBoardKeyList.ComposingFace]: boolean;\r\n [EBoardKeyList.OpenDir]: 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 edgeRemarkUp: boolean;\r\n edgeRemarkDown: boolean;\r\n edgeRemarkLeft: boolean;\r\n edgeRemarkRight: boolean;\r\n [EBoardKeyList.SpliteHeight]: boolean;\r\n [EBoardKeyList.SpliteWidth]: boolean;\r\n [EBoardKeyList.SpliteThickness]: 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 hardwareName: 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.OpenDir]: ECompareType;\r\n [EBoardKeyList.KnifeRad]: ECompareType;\r\n edgeRemarkUp: ECompareType,\r\n edgeRemarkDown: ECompareType,\r\n edgeRemarkLeft: ECompareType,\r\n edgeRemarkRight: ECompareType,\r\n [EBoardKeyList.SpliteHeight]: ECompareType;\r\n [EBoardKeyList.SpliteWidth]: ECompareType;\r\n [EBoardKeyList.SpliteThickness]: 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 [EBoardKeyList.SpliteHeight]: string;\r\n [EBoardKeyList.SpliteWidth]: string;\r\n [EBoardKeyList.SpliteThickness]: 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 GetHardWareOption = 10,\r\n RemoveSplitSize = 11, //去除拆单尺寸\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 Prefix = \"前缀\",\r\n Suffix = \"后缀\",\r\n}\r\n","import { IBaseOption, IHightDrillOption } from \"./OptionInterface/IOptionInterface\";\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 verticalBoardName: string; //立板名称\r\n thickness: number; //立板厚度\r\n depth: number; //立板深度\r\n isAuto: boolean; //智能识别\r\n isFloor50?: boolean; //取整50倍(因为Door不需要该属性,故为可选)\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 lbSealedUp: number;//立板封边上下左右\r\n lbSealedDown: number;\r\n lbSealedLeft: number;\r\n lbSealedRight: number;\r\n lbHightDrillOption: IHightDrillOption; //立板高级排钻\r\n useBoardProcessOption?: boolean; //使用周围板件数据\r\n isModifyHardwareMaterial: boolean; //使用周围板件数据时五金是否应用\r\n boardMatName: string;//板材名\r\n material: string;//材料\r\n color: string;//颜色\r\n roomName: string;//房名\r\n cabinetName: 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 layerBoardName: string;\r\n cbHightDrillOption: IHightDrillOption; //层板高级排钻\r\n deviation: number; //铰链碰撞单次偏移量\r\n verticalEdgeRemarkUp: string; //立板板边备注上下左右\r\n verticalEdgeRemarkDown: string;\r\n verticalEdgeRemarkLeft: string;\r\n verticalEdgeRemarkRight: string;\r\n layerEdgeRemarkUp: string; //层板板边备注上下左右\r\n layerEdgeRemarkDown: string;\r\n layerEdgeRemarkLeft: string;\r\n layerEdgeRemarkRight: string;\r\n parseHinge: boolean;//铰链信息写入门板备注\r\n\r\n sealColorUp: string; //门板封边颜色\r\n sealColorDown: string;\r\n sealColorLeft: string;\r\n sealColorRight: string;\r\n\r\n reservedEdgeUp: string; //门板预留边\r\n reservedEdgeDown: string;\r\n reservedEdgeLeft: string;\r\n reservedEdgeRight: string;\r\n\r\n layerSealColorUp: string; //层板封边颜色\r\n layerSealColorDown: string;\r\n layerSealColorLeft: string;\r\n layerSealColorRight: string;\r\n\r\n layerReservedEdgeUp: string; //层板预留边\r\n layerReservedEdgeDown: string;\r\n layerReservedEdgeLeft: string;\r\n layerReservedEdgeRight: string;\r\n\r\n verticalSealColorUp: string; //立板封边颜色\r\n verticalSealColorDown: string;\r\n verticalSealColorLeft: string;\r\n verticalSealColorRight: string;\r\n\r\n verticalReservedEdgeUp: string; //层板预留边\r\n verticalReservedEdgeDown: string;\r\n verticalReservedEdgeLeft: string;\r\n verticalReservedEdgeRight: string;\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 deviation: number; //铰链碰撞单次偏移量\r\n parseHinge: 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 sealColorUp: string; //抽屉立板封边颜色\r\n sealColorDown: string;\r\n sealColorLeft: string;\r\n sealColorRight: string;\r\n\r\n reservedEdgeUp: string; //抽屉立板预留边\r\n reservedEdgeDown: string;\r\n reservedEdgeLeft: string;\r\n reservedEdgeRight: string;\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\nexport interface IWindowTempInfo\r\n{\r\n logo?: string;\r\n}\r\n\r\n/**选择的模板信息,temp-抽屉或门板,handletemp-拉手模板,windowTemp-窗户模板,其他是铰链模板 */\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 \"./OptionInterface/IOptionInterface\";\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 linesType: number; //纹路\r\n useBoardProcessOption?: boolean; //使用周围的板件数据\r\n boardMatName: string;//板材名\r\n material: string;//材料\r\n color: string;//颜色\r\n roomName: string;//房名\r\n cabinetName: string;//柜名\r\n}\r\n","import { IBaseOption } from \"./IOptionInterface\";\r\n\r\nexport enum ForBoardNameType\r\n{\r\n Same = \"same\",\r\n NoSame = \"nosame\",\r\n Include = \"include\",\r\n NoInclude = \"noinclude\"\r\n}\r\n\r\nexport interface IAutoDimBrsOption extends IBaseOption\r\n{\r\n total: boolean; //整体标注\r\n out: boolean; //柜外标注(前视图标注)\r\n inW: boolean; //柜内宽标注\r\n inH: boolean; //柜内高标注\r\n noRepeat: boolean; //删除重复\r\n noSmSize: boolean; //过滤小尺寸\r\n noAppointSize: boolean; //过滤指定尺寸\r\n noInSize: boolean; //空间小于该数值时 不标注内空\r\n noShowMinSize: number;\r\n noShowMinInSize: number;\r\n noShowAppointSizes: string;\r\n useParseGroups: string;\r\n forBoardName: boolean;\r\n forBoardNameStr: string;\r\n forBoardNameType: ForBoardNameType;\r\n insideOffset: boolean; //柜内标注内偏\r\n insideOffsetDist: number;//柜内标注内偏距离\r\n}\r\n\r\nexport interface IFastDimOption extends IBaseOption\r\n{\r\n filterSmallSize: boolean; //过滤小尺寸\r\n filterSmallSizeValue: number; //过滤小尺寸值\r\n filterAppointSize: boolean; //过滤指定尺寸\r\n filterAppointSizeValues: string;//过滤指定尺寸的值\r\n filterAppointForBoardName: boolean;///根据板名过滤\r\n conditionType: ForBoardNameType; //根据板名过滤条件\r\n filterAppointForBoardNameValues: string;//根据板名过滤的值\r\n}\r\n","import { IBaseOption } from \"./IOptionInterface\";\r\n\r\nexport enum CurtailType\r\n{\r\n PerBr = \"0\",\r\n Total = \"1\",\r\n OCS = \"2\"\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","import { BrRelativePos } from \"../../../DatabaseServices/Entity/BoardInterface\";\r\nimport { BoardConfigOption } from \"./IOptionInterface\";\r\n\r\nexport enum StripType\r\n{\r\n H = \"h\",\r\n V = \"v\"\r\n}\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 addSKTCabinetName: boolean; //柜名加收口名称\r\n brName: string;//收口条板名 name被辅助条占用\r\n FuZhuType: StripType;//辅助条类型\r\n fuZhuBrName: string;//辅助条板材名\r\n fuZhuMaterial: string;//辅助条材料\r\n fuZhuColor: string;//辅助条颜色\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 * @export\r\n * @enum {number}\r\n */\r\n\r\nexport enum ViewDirection\r\n{\r\n Left = 1,\r\n Right = 2,\r\n Up = 3,\r\n Front = 4,\r\n Bottom = 5,\r\n Back = 6,\r\n Southwest = 7\r\n}\r\n\r\nexport enum ViewportPosition\r\n{\r\n Vertical = \"vertical\",\r\n Horizontal = \"horizontal\",\r\n Left = \"left\",\r\n Right = \"right\",\r\n Bottom = \"bottom\",\r\n Top = \"top\"\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","import { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { IBaseOption } from \"./OptionInterface/IOptionInterface\";\r\n\r\nexport enum EWineRackType\r\n{\r\n Oblique = 0,\r\n Upright = 1,\r\n}\r\n\r\n/**酒格样式 */\r\nexport enum EWineRackStyle\r\n{\r\n WholeLattice = 0,//全格优先\r\n Semilattice = 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 wineRackStyle: EWineRackStyle,\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 useBoardProcessOption?: boolean; //使用周围的板件数据\r\n boardMatName: string;//板材名\r\n material: string;//材料\r\n color: string;//颜色\r\n roomName: string;//房名\r\n cabinetName: string;//柜名\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 { FaceDirection } from \"../Add-on/DrawDrilling/DrillType\";\r\nimport { FontStyleInfoOption, FontType } from \"../Add-on/TextStyle/FontStyleInterface\";\r\nimport { EditViewOption } from \"../Add-on/ViewortConfig/EditViewOption\";\r\nimport { 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 { ArcBoardFeedProcess } from \"../DatabaseServices/Entity/ArcBoardType\";\r\nimport { AddRemarkType, BoardOpenDir, BoardType, BrRelativePos, ComposingType, LinesType } from \"../DatabaseServices/Entity/BoardInterface\";\r\nimport { SpaceParseOption } from \"../Geometry/SpaceParse/SpaceParseOption\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { FindModifyStyle } from \"../UI/Components/Board/BoardFindInterface\";\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 { 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 { ForBoardNameType, IAutoDimBrsOption, IFastDimOption } from \"../UI/Store/OptionInterface/AutoDimBrsOption\";\r\nimport { CurtailType, IBoardBatchCurtailOption } from \"../UI/Store/OptionInterface/BoardBatchCurtailOption \";\r\nimport { BoardProcessOption } from \"../UI/Store/OptionInterface/BoardProcessOption\";\r\nimport { BulkheadCeilingOption } from \"../UI/Store/OptionInterface/BulkheadCeilingOption\";\r\nimport { ClosingStripOption, StripType } from \"../UI/Store/OptionInterface/ClosingStripOption\";\r\nimport { BehindBoardOption, BoardConfigOption, ChangeColorByBoardMaterialOption, ChangeColorByRoomOrCabinetOption, CommonPanelConfigOption, DatalistConfigOption, DoorRelatesInfoOption, IArcBoardGrooveOption, IBatchModifyPanelOption, IDimStyleOption, IHoleGrooveDimOption, LayerBoardOption, LayerNailOption, ModifyTextsConfigOption, OneClickInspectionOption, PartsAnalysisOption, RightPlaneLightOption, ShareBoardInfConfigurationOption, SideBoardOption, SingleBoardOption, TBBoardOption, VerticalBoardOption, WindowPanelConfigOption } from \"../UI/Store/OptionInterface/IOptionInterface\";\r\nimport { PointLightOption, RectAreaLightOption, SpotLightOption } from \"../UI/Store/OptionInterface/LightConfigOption\";\r\nimport { BehindHeightPositon, RadioType, ViewDirection, ViewportPosition } from \"../UI/Store/OptionInterface/OptionEnum\";\r\nimport { Viewport2ConfigOption, Viewport3ConfigOption, Viewport4ConfigOption, ViewportConfigOption } from \"../UI/Store/OptionInterface/ViewportConfigOption\";\r\nimport { EFullDir, EFullType, EWRackArrayType, EWineRackStyle, EWineRackType, IWineRackOption } from \"../UI/Store/WineRackInterface\";\r\nimport { EOrderType } from \"./OrderType\";\r\n\r\nexport const DefaultLayerBoardConfig: LayerBoardOption = {\r\n version: 4,\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 exprCount: \"1\",\r\n exprThickness: \"18\"\r\n};\r\nObject.freeze(DefaultLayerBoardConfig);\r\n\r\nexport const DefaultVerticalBoardConfig: VerticalBoardOption = {\r\n version: 4,\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 exprCount: \"1\",\r\n exprThickness: \"18\"\r\n};\r\nObject.freeze(DefaultVerticalBoardConfig);\r\n\r\nexport const DefaultBehindBoardConfig: BehindBoardOption = {\r\n version: 3,\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 exprCount: \"1\",\r\n exprThickness: \"18\"\r\n};\r\nObject.freeze(DefaultBehindBoardConfig);\r\n\r\nexport const DefaultWineRackConfig: IWineRackOption = {\r\n version: 6,\r\n type: EWineRackType.Oblique,\r\n wineRackStyle: EWineRackStyle.WholeLattice,\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 useBoardProcessOption: true,\r\n boardMatName: \"\",//板材名\r\n material: \"\",//材料\r\n color: \"\",//颜色\r\n roomName: \"\",//房名\r\n cabinetName: \"\",//柜名\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: 3,\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 bigHoleDir: FaceDirection.Front,\r\n};\r\nObject.freeze(DefaultBottomBoardOption);\r\n\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: ViewDirection.Up,\r\n renderType: RenderType.Print,\r\n revertRotation: false\r\n};\r\nObject.freeze(DefaultViewportConfigOption);\r\n\r\nexport const DefaultViewport2ConfigOption: Viewport2ConfigOption = {\r\n viewportPosition: ViewportPosition.Vertical,\r\n renderType: [RenderType.Print, RenderType.Print],\r\n view1: ViewDirection.Left,\r\n view2: ViewDirection.Up,\r\n revertRotation: false\r\n};\r\nObject.freeze(DefaultViewport2ConfigOption);\r\n\r\nexport const DefaultViewport3ConfigOption: Viewport3ConfigOption = {\r\n viewportPosition: ViewportPosition.Vertical,\r\n renderType: [RenderType.Print, RenderType.Print, RenderType.Print],\r\n view: [ViewDirection.Front, ViewDirection.Up, ViewDirection.Southwest],\r\n revertRotation: false\r\n};\r\nObject.freeze(DefaultViewport3ConfigOption);\r\n\r\nexport const DefaultViewport4ConfigOption: Viewport4ConfigOption = {\r\n view: [ViewDirection.Front, ViewDirection.Left, ViewDirection.Up, ViewDirection.Southwest],\r\n renderType: [RenderType.Print, RenderType.Print, RenderType.Print, RenderType.Print],\r\n revertRotation: false\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\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: 3,\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: 3,\r\n SpecularScale: 1,\r\n SourceRadius: 10,\r\n SoftSourceRadius: 30,\r\n SourceLength: 0,\r\n Angle: 45,\r\n InnerConeAngle: 30,\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: 3,\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: 3,\r\n ShowHemiLight: true,\r\n ShowSunLight: true,\r\n SkyLightColor: \"#FFFFFF\",\r\n SkyLightIntensity: 1,\r\n SkyLightIndirectLightingIntensity: 3,\r\n SunLightIntensity: 50,\r\n SunLightIndirectLightingIntensity: 3,\r\n SunLightColor: \"#FFFFFF\",\r\n SunLightTemperature: 6500,\r\n SunLightElevationDeg: 60,\r\n SunLightRotateDeg: 300,\r\n SunLightSourceAngle: 0.5,\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 DefaultArcBoardOption: BoardConfigOption = {\r\n version: 1,\r\n name: \"圆弧板\",\r\n type: BoardType.Layer,\r\n height: 1200,\r\n thickness: 18,\r\n};\r\nObject.freeze(DefaultArcBoardOption);\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: 6,\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 addSKTCabinetName: true,\r\n brName: \"左收口条\",\r\n FuZhuType: StripType.V,\r\n fuZhuBrName: '',\r\n fuZhuMaterial: '',\r\n fuZhuColor: '',\r\n};\r\nObject.freeze(DefaultClosingStripOption);\r\n\r\nexport const DefaultBoardFindOption: IBoardFindOption = {\r\n version: 14,\r\n condition: {\r\n // layer: false, //这个KEY看起来没用了\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 hardwareName: 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 addRemarks: false,\r\n composingFace: false,\r\n openDir: 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 edgeRemarkUp: false,\r\n edgeRemarkDown: false,\r\n edgeRemarkLeft: false,\r\n edgeRemarkRight: false,\r\n [EBoardKeyList.SpliteHeight]: false,\r\n [EBoardKeyList.SpliteWidth]: false,\r\n [EBoardKeyList.SpliteThickness]: false,\r\n useCurve: false,\r\n noUseBr: false,\r\n noUseHwd: false,\r\n useText: 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 hardwareName: 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 openDir: ECompareType.Equal,\r\n [EBoardKeyList.KnifeRad]: ECompareType.Equal,\r\n edgeRemarkUp: ECompareType.Equal,\r\n edgeRemarkDown: ECompareType.Equal,\r\n edgeRemarkLeft: ECompareType.Equal,\r\n edgeRemarkRight: ECompareType.Equal,\r\n [EBoardKeyList.SpliteHeight]: ECompareType.Equal,\r\n [EBoardKeyList.SpliteWidth]: ECompareType.Equal,\r\n [EBoardKeyList.SpliteThickness]: ECompareType.Equal,\r\n\r\n },\r\n tolerance: {\r\n height: \"\",\r\n width: \"\",\r\n thickness: \"\",\r\n [EBoardKeyList.KnifeRad]: \"\",\r\n [EBoardKeyList.SpliteHeight]: \"\",\r\n [EBoardKeyList.SpliteWidth]: \"\",\r\n [EBoardKeyList.SpliteThickness]: \"\",\r\n },\r\n // layer: \"0\", 删除无用的key\r\n height: \"\",\r\n width: \"\",\r\n thickness: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n brName: \"\",\r\n hardwareName: \"\",\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 openDir: BoardOpenDir.None,\r\n hardwareDoorName: \"\",\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 extraRemarks: Array.from({ length: 10 }, () => [\"\", \"\"]),\r\n isChaidan: false,\r\n [EBoardKeyList.KnifeRad]: \"\",\r\n edgeRemarkUp: \"\",\r\n edgeRemarkDown: \"\",\r\n edgeRemarkLeft: \"\",\r\n edgeRemarkRight: \"\",\r\n query: FindModifyStyle.FuzzyQuery,\r\n [EBoardKeyList.SpliteHeight]: \"\",\r\n [EBoardKeyList.SpliteWidth]: \"\",\r\n [EBoardKeyList.SpliteThickness]: \"\",\r\n appendRemark: Array.from({ length: 10 }, () => [\"\", \"\", AddRemarkType.Cover]),\r\n};\r\nObject.freeze(DefaultBoardFindOption);\r\n\r\nexport const DefaultLatticOption: ILatticeOption = {\r\n version: 4,\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 linesType: LinesType.Reverse,\r\n useBoardProcessOption: true,\r\n boardMatName: \"\",//板材名\r\n material: \"\",//材料\r\n color: \"\",//颜色\r\n roomName: \"\",//房名\r\n cabinetName: \"\",//柜名\r\n};\r\nObject.freeze(DefaultLatticOption);\r\n\r\nexport const DefaultDoorOption: IDoorConfigOption = {\r\n version: 13,\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 cbHightDrillOption: { up: \"\", down: \"\", left: \"\", right: \"\" },\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 verticalBoardName: \"立板\",\r\n layerBoardName: \"层板\",\r\n lbSealedUp: 1,\r\n lbSealedDown: 1,\r\n lbSealedLeft: 1,\r\n lbSealedRight: 1,\r\n lbHightDrillOption: { up: \"\", down: \"\", left: \"\", right: \"\" },\r\n useBoardProcessOption: true,\r\n isModifyHardwareMaterial: false,\r\n deviation: 100,//偏移量\r\n boardMatName: \"\",//板材名\r\n material: \"\",//材料\r\n color: \"\",//颜色\r\n roomName: \"\",//房名\r\n cabinetName: \"\",//柜名\r\n layerEdgeRemarkUp: '', //层板板边备注上下左右\r\n layerEdgeRemarkDown: '',\r\n layerEdgeRemarkLeft: '',\r\n layerEdgeRemarkRight: '',\r\n verticalEdgeRemarkUp: '', //立板板边备注上下左右\r\n verticalEdgeRemarkDown: '',\r\n verticalEdgeRemarkLeft: '',\r\n verticalEdgeRemarkRight: '',\r\n parseHinge: false,\r\n sealColorUp: \"\", //门板封边颜色\r\n sealColorDown: \"\",\r\n sealColorLeft: \"\",\r\n sealColorRight: \"\",\r\n reservedEdgeUp: \"0\", //门板预留边\r\n reservedEdgeDown: \"0\",\r\n reservedEdgeLeft: \"0\",\r\n reservedEdgeRight: \"0\",\r\n layerSealColorUp: \"\", //层板封边颜色\r\n layerSealColorDown: \"\",\r\n layerSealColorLeft: \"\",\r\n layerSealColorRight: \"\",\r\n layerReservedEdgeUp: \"0\", //层板预留边\r\n layerReservedEdgeDown: \"0\",\r\n layerReservedEdgeLeft: \"0\",\r\n layerReservedEdgeRight: \"0\",\r\n verticalSealColorUp: \"\", //立板封边颜色\r\n verticalSealColorDown: \"\",\r\n verticalSealColorLeft: \"\",\r\n verticalSealColorRight: \"\",\r\n verticalReservedEdgeUp: \"0\", //层板预留边\r\n verticalReservedEdgeDown: \"0\",\r\n verticalReservedEdgeLeft: \"0\",\r\n verticalReservedEdgeRight: \"0\",\r\n};\r\nObject.freeze(DefaultDoorOption);\r\nexport const DefaultHingeOption: IHingeConfigOption = {\r\n version: 1,\r\n hingeCount: 0,\r\n hindeTopDist: 0,\r\n hindeBottomDist: 0,\r\n useRule: false,\r\n deviation: 100,\r\n parseHinge: false,\r\n};\r\nObject.freeze(DefaultHingeOption);\r\nexport const DefaultDrawerOption: IDrawerConfigOption = {\r\n version: 10,\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 isFloor50: 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 verticalBoardName: \"立板\",\r\n lbSealedUp: 1,\r\n lbSealedDown: 1,\r\n lbSealedLeft: 1,\r\n lbSealedRight: 1,\r\n lbHightDrillOption: { up: \"\", down: \"\", left: \"\", right: \"\" },\r\n useBoardProcessOption: true,\r\n isModifyHardwareMaterial: false,\r\n boardMatName: \"\",//板材名\r\n material: \"\",//材料\r\n color: \"\",//颜色\r\n roomName: \"\",//房名\r\n cabinetName: \"\",//柜名\r\n sealColorUp: \"\", //抽屉立板封边颜色\r\n sealColorDown: \"\",\r\n sealColorLeft: \"\",\r\n sealColorRight: \"\",\r\n reservedEdgeUp: \"0\", //抽屉立板预留边\r\n reservedEdgeDown: \"0\",\r\n reservedEdgeLeft: \"0\",\r\n reservedEdgeRight: \"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 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.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 linesType: LinesType.Reverse,\r\n useBoardProcessOption: true,\r\n boardMatName: \"\",//板材名\r\n material: \"\",//材料\r\n color: \"\",//颜色\r\n roomName: \"\",//房名\r\n cabinetName: \"\",//柜名\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: 3,\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 goodsId: \"\",\r\n goodsSn: \"\"\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 goodsId: \"\",\r\n goodsSn: \"\"\r\n};\r\nObject.freeze(DefaultToplineMetalsOption);\r\n\r\nexport const DefaultBoardProcessOption: BoardProcessOption = {\r\n version: 5,\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 edgeRemarkUp: \"\",\r\n edgeRemarkDown: \"\",\r\n edgeRemarkLeft: \"\",\r\n edgeRemarkRight: \"\",\r\n highBoardEdgeRemark: [],\r\n reservedEdgeUp: \"0\",\r\n reservedEdgeDown: \"0\",\r\n reservedEdgeLeft: \"0\",\r\n reservedEdgeRight: \"0\",\r\n highReservedEdge: [],\r\n sealColorUp: \"\",\r\n sealColorDown: \"\",\r\n sealColorLeft: \"\",\r\n sealColorRight: \"\",\r\n sealColorType: \"\",\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: 3,\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 edgeRemarkUp: \"\",\r\n edgeRemarkDown: \"\",\r\n edgeRemarkLeft: \"\",\r\n edgeRemarkRight: \"\",\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 edgeRemarkUp: false,\r\n edgeRemarkDown: false,\r\n edgeRemarkLeft: false,\r\n edgeRemarkRight: false,\r\n }\r\n};\r\n\r\nObject.freeze(DefaultUpdateInfoOption);\r\n\r\nexport const DefaultKuGanOption: IKuGangDrawOption = {\r\n insertMode: \"0\",\r\n minSpacing: 50,\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: 3,\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 middleVerticalBrName: \"立板\",\r\n topMostLayerBrName: \"顶板\",\r\n middleLayerBrName: \"层板\",\r\n bottomMostLayerBrName: \"底板\",\r\n bottomMostBackBrName: \"地脚线\",\r\n stripeBrName: \"收口条\",\r\n cabinetName: \"\",\r\n isfarLeftVerticalBrName: true,//最左侧立板名称\r\n isModifyMiddleVerticalBrName: false,//是否修改中间立板名称\r\n isfarRightVerticalBrName: true,\r\n istopMostLayerBrName: true,\r\n isModifyMiddleLayerBrName: false, //是否修改中间层板名称\r\n isbottomMostLayerBrName: true,\r\n isbottomMostBackBrName: true,\r\n isstripeBrName: true,\r\n iscabinetName: false,//修改柜名\r\n isModifyRoomName: true,//修改房名\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: 8,\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 useSktTemplate: false,\r\n sktTemplate: null,\r\n sktTemplateId: \"\",\r\n rightSktTemplateId: \"\",\r\n topSktTemplateId: \"\",\r\n};\r\nObject.freeze(DefaultR2bOption);\r\nexport const DefaultR2b2Option: IRect2Br2Option = {\r\n version: 2,\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 useBoardProcessOption: true,\r\n boardMatName: \"\",//板材名\r\n material: \"\",//材料\r\n color: \"\",//颜色\r\n roomName: \"\",//房名\r\n cabinetName: \"\",//柜名\r\n};\r\nObject.freeze(DefaultR2b2Option);\r\n\r\nexport const DefaultHSOption: IHSOption = {\r\n version: 7,\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 noChaiDan: 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 visual: false,\r\n curve: false,\r\n line: false,\r\n polyline: false,\r\n circle: false,\r\n arc: false,\r\n custom: false,\r\n spotlight: false,\r\n pointLight: false,\r\n rectAreaLight: false,\r\n customBoardName: \"\",\r\n matchType: ECompareType.Equal,\r\n text: false,\r\n};\r\n\r\nexport const DefaultCommonPanelOption: CommonPanelConfigOption = {\r\n version: 1,\r\n orderMap: {},\r\n orderType: EOrderType.ByUpdate,\r\n};\r\nObject.freeze(DefaultCommonPanelOption);\r\n\r\nexport const DefaultDatalistOption: DatalistConfigOption = {\r\n resizeUI: {}\r\n};\r\nObject.freeze(DefaultDatalistOption);\r\n\r\nexport const DefaultAutoDimBrsOption: IAutoDimBrsOption = {\r\n version: 2,\r\n total: true,\r\n out: true,\r\n inW: false,\r\n inH: false,\r\n noRepeat: false,\r\n noSmSize: false,\r\n noAppointSize: false,\r\n noInSize: false,\r\n noShowMinSize: 20,\r\n noShowMinInSize: 300,\r\n noShowAppointSizes: \"\",\r\n useParseGroups: \"0\",\r\n forBoardName: false,\r\n forBoardNameStr: \"\",\r\n forBoardNameType: ForBoardNameType.Same,\r\n insideOffset: false,\r\n insideOffsetDist: 0\r\n};\r\nObject.freeze(DefaultAutoDimBrsOption);\r\n\r\n\r\nexport const DefaultWindowPanelOption: WindowPanelConfigOption = {\r\n Length: 1100,\r\n Height: 1500,\r\n Thick: 280,\r\n WindowOffGround: 900,\r\n IsBayWindow: false,\r\n BayLeftIsWall: false,\r\n BayRightIsWall: false,\r\n BayDist: 500,\r\n BayLeftDist: 600,\r\n BayMiddleDist: 600,\r\n BayRightDist: 600,\r\n HasWindowStone: false,\r\n StoneThick: 50,\r\n StoneBulge: 50,\r\n StoneLeftRightBulge: 50,\r\n};\r\n\r\nObject.freeze(DefaultWindowPanelOption);\r\nexport const DefaultDimStyleOption: IDimStyleOption = {\r\n dimFXLON: true,\r\n dimFXL: 100,\r\n dimALTD: 2,\r\n dimASZ: 10,\r\n dimGAP: 10,\r\n dimEXE: 20,\r\n dimTXT: 60,\r\n dimTAD: 2,\r\n dimADEC: 2,\r\n};\r\nObject.freeze(DefaultDimStyleOption);\r\n\r\nexport const DefaultChangeColorByBoardMaterialOption: ChangeColorByBoardMaterialOption = {\r\n version: 1,\r\n accordThickness: false,\r\n accordMaterialColor: true,\r\n accordMaterial: true,\r\n accordMaterialName: true,\r\n includeNoChaiDanBoard: true,\r\n};\r\nObject.freeze(DefaultChangeColorByBoardMaterialOption);\r\n\r\nexport const DefaultShareBoardInfConfigurationOption: ShareBoardInfConfigurationOption = {\r\n version: 2,\r\n Physical2EdgeColor: 7,\r\n VisualStyle: RenderType.Conceptual,\r\n Viewport: ViewDirection.Southwest,\r\n IsExportBoard: true,\r\n IsExportHardware: true,\r\n showBom: true,\r\n expireDays: \"\",\r\n IsExportCurve: true,\r\n IsExportDimension: true,\r\n IsExportText: true\r\n};\r\nObject.freeze(DefaultShareBoardInfConfigurationOption);\r\n\r\nexport const DefaultBulkheadCeilingOption: BulkheadCeilingOption = {\r\n Item: [],\r\n Height: 300\r\n};\r\nObject.freeze(DefaultBulkheadCeilingOption);\r\n\r\nexport const DefaultChangeColorByRoomOrCabinetOption: ChangeColorByRoomOrCabinetOption = {\r\n accordCabinetName: true,\r\n accordRoomName: true\r\n};\r\nObject.freeze(DefaultChangeColorByRoomOrCabinetOption);\r\n\r\nexport const DefaultDoorRelatesInfoOption: DoorRelatesInfoOption = {\r\n version: 3,\r\n hingeOption: [],\r\n hingeDecimal: 1,\r\n filterNoDoor: false,\r\n};\r\nObject.freeze(DefaultDoorRelatesInfoOption);\r\n\r\nexport const DefaultPartsAnalysisOption: PartsAnalysisOption = {\r\n version: 1,\r\n PartsOption: [\r\n [\"name\", true],\r\n [\"factory\", false],\r\n [\"brand\", false],\r\n [\"model\", false],\r\n [\"spec\", true],\r\n [\"material\", false],\r\n [\"color\", false],\r\n [\"unit\", false],\r\n [\"count\", true],\r\n [\"comments\", false],\r\n [\"process\", false],\r\n [\"actualExpr\", false],\r\n ]\r\n};\r\nObject.freeze(DefaultPartsAnalysisOption);\r\n\r\nexport const DefaultFastDimOption: IFastDimOption = {\r\n filterSmallSize: false,\r\n filterSmallSizeValue: 0,\r\n filterAppointSize: false,\r\n filterAppointSizeValues: \"\",\r\n filterAppointForBoardName: false,\r\n filterAppointForBoardNameValues: \"\",\r\n conditionType: ForBoardNameType.Same,\r\n};\r\nObject.freeze(DefaultFastDimOption);\r\n\r\nexport const DefaultOneClickInspectionOption: OneClickInspectionOption = {\r\n version: 2,\r\n InspectionOption: {\r\n isInterfere: true,\r\n isMaxSizeBoard: true,\r\n isMinSizeBoard: true,\r\n isModel: true,\r\n isDrill: true,\r\n isSpecialBoardContour: true,\r\n isSplitBoard: true,\r\n isDrawHole: true,\r\n },\r\n excludeDrawHoleOption: {\r\n boardName: false,\r\n boardNameValue: \"\",\r\n processingGroupName: false,\r\n processingGroupNameValue: \"\",\r\n boardThickness: false,\r\n boardThicknessValue: 18,\r\n IsSplitBoard: false,\r\n boardNameCompareType: ECompareType.Include,\r\n processingGroupNameCompareType: ECompareType.Include,\r\n boardThicknessCompareType: ECompareType.Less,\r\n },\r\n excludeInterfereOption: {\r\n boardName: false,\r\n boardNameValue: \"\",\r\n processingGroupName: false,\r\n processingGroupNameValue: \"\",\r\n hwComposityName: false,\r\n hwComposityNameValue: \"\",\r\n noChaiDanBoard: false,\r\n boardNameCompareType: ECompareType.Include,\r\n processingGroupNameCompareType: ECompareType.Include,\r\n hwComposityNameCompareType: ECompareType.Include,\r\n }\r\n};\r\nObject.freeze(DefaultOneClickInspectionOption);\r\n\r\nexport const DefaultArcBoardGrooveOption: IArcBoardGrooveOption = {\r\n version: 3,\r\n isDrawArcGroove: true,\r\n retainedThickness: \"2\",\r\n knifeRadius: \"3\",\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n grooveSpacing2: \"6\",\r\n grooveWidth2: \"6\",\r\n arcExtension2: \"0\",\r\n retainedThickness2: \"2\",\r\n knifeRadius2: \"3\",\r\n grooveAddLength2: \"0\",\r\n grooveAddWidth2: \"0\",\r\n grooveAddDepth2: \"0\",\r\n arcBoardFeedProcess: ArcBoardFeedProcess.Slots,\r\n};\r\nObject.freeze(DefaultArcBoardGrooveOption);\r\n\r\nexport const DefaultSpaceParseOption: SpaceParseOption = {\r\n autoParseDepth: false,\r\n};\r\nObject.freeze(DefaultSpaceParseOption);\r\n\r\nexport const DefaultEditViewOption: EditViewOption = {\r\n version: 1,\r\n hight: 60,\r\n renderType: false,\r\n renderTypeValue: \"概念\",\r\n viewDir: false,\r\n viewDirValue: \"左视图\",\r\n roomName: false,\r\n cabinetName: false,\r\n boardMaterialName: false,\r\n material: false,\r\n color: false,\r\n page: false,\r\n date: false,\r\n designer: false,\r\n sheetName: false,\r\n hideDoor: false,\r\n hideDrawer: false,\r\n hideDim: false,\r\n hideCurve: false,\r\n hideModel: false,\r\n hideLayer: false,\r\n hideLayerValue: \"\",\r\n showLayer: false,\r\n showLayerValue: \"\"\r\n};\r\nObject.freeze(DefaultEditViewOption);\r\n\r\nexport const DefaultFontStyleOption: FontStyleInfoOption = {\r\n height: 60,\r\n fontType: FontType.YaHei,\r\n widthFactor: 1,\r\n};\r\nObject.freeze(DefaultFontStyleOption);\r\n\r\nexport const DefaultHoleGrooveDimOption: IHoleGrooveDimOption = {\r\n isDrawBrInfo: true,\r\n brInfo: \"{房间名} - {柜名}\\n{板名称} - {板ID}\\n{材料} - {颜色} - {厚}\",\r\n isDrawSHInfo: false,\r\n sHoleInfo: \"r:{半径} - d:{深度}\",\r\n sHoleMark: \"c\", // 侧面孔标识\r\n isDrawFBHInfo: false,\r\n fBHoleInfo: \"r:{半径} - d:{深度}\",\r\n fBHoleMark: \"a\", // 正反面孔标识\r\n isDrawEdgeRemark: false,\r\n edgeRemarkMark: \"b\", // 板边备注标识\r\n isDrawSealing: false, // 是否绘制封边\r\n};\r\n","import { BufferGeometry, Face3, Float32BufferAttribute, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, Line3, Matrix4, Shape, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayRemoveDuplicateBySort } from \"../Common/ArrayExt\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { FixIndex } from \"../Nest/Common/Util\";\r\nimport { AsVector3, ZeroVec, equalv2, equalv3 } from \"./GeUtils\";\r\nimport { PlaneExt } from \"./Plane\";\r\n\r\n/**\r\n * 使用轮廓和扫描路径构建扫描几何体,实现衣柜中的顶线或者地脚线之类的实体.\r\n * 该几何体需要轮廓和路径的起始截面垂直,否则构造的实体将会错误.\r\n */\r\nexport class SweepGeometry extends Geometry\r\n{\r\n edgePts: number[] = [];\r\n polygonIndexes = [];\r\n ShapeMaterialSlotData: number[];//[0,0,0,1,2,3,0] 指定多段线轮廓的材质槽索引 每个顶点指定一个材质槽位置\r\n constructor(contour: Polyline, path: Curve[] | Curve, ShapeMaterialSlotData?: number[])\r\n {\r\n super();\r\n this.ShapeMaterialSlotData = ShapeMaterialSlotData;\r\n if (Array.isArray(path))\r\n this.AddShape2(contour, path);\r\n else\r\n this.AddShape(contour, path);\r\n this.computeVertexNormals();\r\n this.computeFaceNormals();\r\n }\r\n\r\n get LineGeom(): LineGeometry\r\n {\r\n let lineGeo = new LineGeometry();\r\n let lineSegments = new Float32Array(this.edgePts);\r\n var instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\r\n lineGeo.setAttribute('instanceStart', new InterleavedBufferAttribute(instanceBuffer, 3, 0));\r\n lineGeo.setAttribute('instanceEnd', new InterleavedBufferAttribute(instanceBuffer, 3, 3));\r\n return lineGeo;\r\n }\r\n\r\n get EdgeGeom()\r\n {\r\n return new BufferGeometry().setAttribute('position', new Float32BufferAttribute(this.edgePts, 3));\r\n }\r\n\r\n AddShape(contour: Polyline, path: Curve)\r\n {\r\n //路径点表\r\n let pathPts2d = (path.Shape as 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.OCSNoClone);\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.OCSNoClone);\r\n\r\n let isClosePath = path.IsClose;\r\n\r\n let verts: Vector3[][] = [];//所有路径上的轮廓点\r\n\r\n let pathNormal = path.Normal;\r\n\r\n //计算所有需要的几何点,本质是不断的投影\r\n if (!isClosePath)\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormal, pathPts[0], undefined, pathPts[1]));\r\n\r\n\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, pathNormal, pathPts[i], pathPts[i - 1], pathPts[1]));\r\n else\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormal, pathPts[i], pathPts[i - 1]));\r\n }\r\n else\r\n {\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormal, pathPts[i], pathPts[i - 1], pathPts[i + 1]));\r\n }\r\n }\r\n\r\n if (isClosePath)\r\n verts.unshift(verts[verts.length - 1]);\r\n\r\n this.BuildSideFaces(shapePts2d, pathPts2d, pathPts, verts);\r\n if (!isClosePath) this.BuildLid(shapePts2d, verts);\r\n }\r\n\r\n AddShape2(contour: Polyline, paths: Curve[])\r\n {\r\n let pathPts: Vector3[] = [];\r\n let pathNormals: Vector3[] = [];\r\n\r\n //路径点表\r\n for (let path of paths)\r\n {\r\n let pathPts2d = path.Shape.getPoints(4) as Vector2[];\r\n arrayRemoveDuplicateBySort(pathPts2d, (p1, p2) =>\r\n {\r\n if (equalv2(p1, p2))\r\n {\r\n p2[\"_mask_\"] = p1[\"_mask_\"];\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n if (path !== paths[0])\r\n pathPts2d.shift();\r\n\r\n let pNormal = path.Normal;\r\n\r\n for (let p of pathPts2d)\r\n {\r\n let p3 = AsVector3(p).applyMatrix4(path.OCSNoClone);\r\n p3[\"_mask_\"] = p[\"_mask_\"];\r\n pathPts.push(p3);\r\n\r\n pathNormals.push(pNormal);\r\n }\r\n }\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.OCSNoClone);\r\n\r\n let isClosePath = equalv3(pathPts[0], pathPts[pathPts.length - 1], 1e-3);\r\n\r\n let verts: Vector3[][] = [];//所有路径上的轮廓点\r\n //计算所有需要的几何点,本质是不断的投影\r\n if (!isClosePath)\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormals[0], pathPts[0], undefined, pathPts[1]));\r\n\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, pathNormals[i], pathPts[i], pathPts[i - 1], pathPts[1]));\r\n else\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1]));\r\n }\r\n else\r\n {\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1], pathPts[i + 1]));\r\n }\r\n }\r\n\r\n if (isClosePath)\r\n verts.unshift(verts[verts.length - 1]);\r\n\r\n this.BuildSideFaces(shapePts2d, pathPts as unknown as Vector2[], pathPts, verts);\r\n if (!isClosePath) this.BuildLid(shapePts2d, verts);\r\n }\r\n\r\n /**\r\n * 使用4点构建面\r\n * @param a 左下\r\n * @param b 右下\r\n * @param c 左上\r\n * @param d 右上\r\n * @param uvs\r\n * @param [materialIndex]\r\n */\r\n protected BuildFace4(a: number, b: number, c: number, d: number, uvs: Vector2[], materialIndex?: number)\r\n {\r\n let f1 = new Face3(a, b, c, undefined, undefined, materialIndex);\r\n let f2 = new Face3(b, d, c, undefined, undefined, materialIndex);\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\r\n /**\r\n * 构造边缘面开始标记\r\n * @param dir 前进方向(单位向量)\r\n */\r\n protected SideStartMark(dir: Vector3) { }\r\n\r\n protected 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)\r\n if (p[\"_mask_\"])\r\n {\r\n addCount++;\r\n\r\n if (this.ShapeMaterialSlotData)\r\n p[\"_material_index_\"] = this.ShapeMaterialSlotData[addCount - 1];\r\n }\r\n\r\n let sumCount = addCount + shapePts2d.length; //实际个数\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 this.SideStartMark(p1Dir);\r\n\r\n let tempStartX = 0;\r\n\r\n let lastMaterialIndex = undefined;\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 (p2d[\"_mask_\"])\r\n lastMaterialIndex = p2d[\"_material_index_\"] ?? lastMaterialIndex;\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\r\n this.BuildFace4(curIndex, nextIndex, curIndex2, nextIndex2, uvs, lastMaterialIndex);\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 protected 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\nexport function 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 mtx = ContourTransfromToPath(curP, normal, nextP.clone().sub(curP));\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mtx));\r\n }\r\n else if (!nextP && preP)\r\n {\r\n let mtx = ContourTransfromToPath(curP, normal, curP.clone().sub(preP));\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mtx));\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 if (equalv2(v, ZeroVec))\r\n norm.copy(dir);\r\n\r\n //角平分线的平面\r\n let plane = new PlaneExt(norm, curP);\r\n\r\n let mtx = ContourTransfromToPath(preP, normal, dir);\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mtx));\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\r\n//用索引来定义\r\ntype Polygon = number[];\r\n\r\nexport class SweepGeometrySimple extends SweepGeometry\r\n{\r\n SidePolygons: (Polygon[])[];//所有侧面的多边形\r\n private _curSidePolygons: Polygon[];//\r\n private _curDir: Vector3;\r\n\r\n TriFaces: (number[])[];//截面的三角面索引\r\n shapeVerts: Vector3[][];//所有的截面点在节点位置\r\n shapePts2d: Vector2[];\r\n override computeVertexNormals() { }\r\n override computeFaceNormals() { }\r\n\r\n override BuildFace4(a: number, b: number, c: number, d: number, uvs: Vector2[], materialIndex?: number)\r\n {\r\n let polygon = [a, b, d, c];\r\n polygon[\"dir\"] = this._curDir;\r\n this._curSidePolygons.push(polygon);\r\n }\r\n\r\n protected override SideStartMark(dir: Vector3)\r\n {\r\n this._curDir = dir;\r\n if (this._curSidePolygons?.length)\r\n this.SidePolygons.push(this._curSidePolygons);\r\n\r\n this._curSidePolygons = [];\r\n }\r\n\r\n protected override BuildSideFaces(shapePts2d: Vector2[], pathPts2d: Vector2[], pathPts: Vector3[], verts: Vector3[][])\r\n {\r\n this.shapeVerts = verts;\r\n this.shapePts2d = shapePts2d;\r\n pathPts2d[0][\"_mask_\"] = true;\r\n\r\n if (!this.TriFaces)\r\n this.TriFaces = ShapeUtils.triangulateShape(shapePts2d, []);\r\n\r\n\r\n if (!this.SidePolygons) this.SidePolygons = [];\r\n super.BuildSideFaces(shapePts2d, pathPts2d, pathPts, verts);\r\n\r\n if (this._curSidePolygons?.length)\r\n this.SidePolygons.push(this._curSidePolygons);\r\n }\r\n\r\n protected override BuildLid(shapePts2d: Vector2[], verts: Vector3[][]) { }\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, BufferAttribute, BufferGeometry, FrontSide, Frustum, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Line as TLine, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayPushArray, arrayRemoveDuplicateBySort } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { curveLinkGroup } from \"../../Common/CurveUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { Log, LogType } from \"../../Common/Log\";\r\nimport { tempMatrix1 } from \"../../Common/Matrix4Utils\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { SelectPick } from \"../../Editor/SelectPick\";\r\nimport { AsVector3, MoveMatrix, ZAxis, ZeroVec, equaln, equalv3, isParallelTo } from '../../Geometry/GeUtils';\r\nimport { ProjectionToPlane, SweepGeometry } from '../../Geometry/SweepGeometry';\r\nimport { ColorInTransparent, RenderState, RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Circle } from \"../Entity/Circle\";\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 { OBB } from './../../Geometry/OBB/obb';\r\n\r\n@Factory\r\nexport class SweepSolid extends Entity\r\n{\r\n private _DisplayAccuracy = 0;\r\n static UseRectFakerContour = false;\r\n\r\n protected _Contour: Polyline;\r\n protected _PathCurve: Curve | Curve[];\r\n constructor(contour?: Polyline, pathCurve?: Curve | 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\r\n //将OCS变换成第一个路径的OCS(合理一点)\r\n let paths = this.Paths;\r\n let path = paths[0];\r\n\r\n this.OCS = path.OCSNoClone;\r\n this._SpaceOCS.copy(path.OCSNoClone);\r\n\r\n let ocsInv = this.OCSInv;\r\n for (let p of paths)\r\n p.ApplyMatrix(ocsInv);\r\n }\r\n }\r\n\r\n Explode()\r\n {\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n const explode: Curve[] = [this._Contour.Clone().ApplyMatrix(this._Matrix)];\r\n for (let path of this._PathCurve)\r\n {\r\n explode.push(path.Clone().ApplyMatrix(this._Matrix));\r\n }\r\n return explode;\r\n }\r\n return [this._Contour.Clone().ApplyMatrix(this._Matrix), this._PathCurve.Clone().ApplyMatrix(this._Matrix)];\r\n }\r\n\r\n get DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\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\r\n //单纯的返回数组\r\n get Paths()\r\n {\r\n return Array.isArray(this._PathCurve) ? this._PathCurve : [this._PathCurve];\r\n }\r\n\r\n Reverse()\r\n {\r\n this.WriteAllObjectRecord();\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n for (let path of this._PathCurve)\r\n path.Reverse();\r\n this._PathCurve.reverse();\r\n }\r\n else this._PathCurve.Reverse();\r\n this.Update();\r\n }\r\n\r\n /**\r\n * 将轮廓变换到wcs空间,当用户选定某个与扫描线起点相切的轮廓时.\r\n */\r\n private TransfromPathToWCS()\r\n {\r\n if (Array.isArray(this._PathCurve)) return;\r\n if (equalv3(this._Contour.Normal, ZAxis))\r\n return;\r\n\r\n let fDir = this._PathCurve.GetFirstDeriv(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.GetFirstDeriv(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(\"错误:提供的轮廓没有和路径垂直!\", LogType.Error);\r\n }\r\n\r\n private _MeshGeometry: SweepGeometry | BufferGeometry;\r\n private _LineGeom: 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 if (this._PathCurve instanceof Arc || this._PathCurve instanceof Circle || this._PathCurve instanceof Polyline)\r\n {\r\n this._PathCurve.DisplayAccuracy = this._DisplayAccuracy;\r\n }\r\n this._Contour.DisplayAccuracy = this._DisplayAccuracy;\r\n this._MeshGeometry = new SweepGeometry(contour, this._PathCurve);\r\n this._EdgeGeometry = this._MeshGeometry.EdgeGeom;\r\n this._LineGeom = this._MeshGeometry.LineGeom;\r\n this._MeshGeometry.edgePts = undefined;\r\n\r\n \r\n\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\r\n private _EdgeGeometry: BufferGeometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n this.MeshGeometry;\r\n return this._EdgeGeometry;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType): Object3D\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex));\r\n\r\n // for (let p of this.Paths)\r\n // {\r\n // p.IsEmbedEntity = true;\r\n // let lineObj = p.GetDrawObjectFromRenderType(RenderType.Wireframe) as TLine;\r\n // lineObj.material = ColorMaterial.GetWallLineMtl(1);\r\n // lineObj.computeLineDistances();\r\n // lineObj.matrix.copy(p.OCSNoClone);\r\n // line.add(lineObj);\r\n // }\r\n\r\n return line;\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.DrawColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())\r\n );\r\n }\r\n // 概念透明\r\n else if (renderType === RenderType.ConceptualTransparent)\r\n {\r\n let color = this.DrawColorIndex;\r\n if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) color = 8;\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide)),\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._LineGeom, ColorMaterial.PrintLineMatrial);\r\n return new Object3D().add(line, mesh);\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n const object3d = new Object3D();\r\n for (let path of this._PathCurve)\r\n object3d.add(path.DrawObject);\r\n return object3d;\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 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 ClearDraw(): this\r\n {\r\n this.UpdateDrawGeometry();\r\n return super.ClearDraw();\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex);\r\n\r\n // Object3DRemoveAll(l);\r\n // for (let p of this.Paths)\r\n // {\r\n // p.IsEmbedEntity = true;\r\n // let lineObj = p.GetDrawObjectFromRenderType(RenderType.Wireframe) as TLine;\r\n // lineObj.material = ColorMaterial.GetWallLineMtl(1);\r\n // lineObj.computeLineDistances();\r\n // l.add(lineObj);\r\n // }\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.DrawColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())\r\n );\r\n }\r\n // 概念透明\r\n else if (renderType === RenderType.ConceptualTransparent)\r\n {\r\n Object3DRemoveAll(obj);\r\n let color = this.DrawColorIndex;\r\n if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) color = 8;\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide)),\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 if (Array.isArray(this._PathCurve))\r\n for (let path of this._PathCurve)\r\n obj.add(path.DrawObject);\r\n else\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.DrawColorIndex);\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.DrawColorIndex);\r\n }\r\n // 概念透明\r\n else if (type === RenderType.ConceptualTransparent)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n let color = this.DrawColorIndex;\r\n if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) color = 8;\r\n mesh.material = ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide);\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 frustum?: Frustum,\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 pts: Vector3[] = [];\r\n\r\n //拷贝来自圆弧板最近点捕捉\r\n if (snapMode === ObjectSnapMode.Nea)\r\n {\r\n //这里实现对线框的快速捕捉\r\n let edgeGeom = this.EdgeGeometry;\r\n let pos = edgeGeom.getAttribute(\"position\") as BufferAttribute;\r\n let p1 = new Vector3;\r\n let p2 = new Vector3;\r\n\r\n let line = new Line(p1, p2);\r\n line.ApplyMatrix(this.OCSNoClone);\r\n\r\n let sel: SelectPick = frustum[\"_select_\"];\r\n for (let y = 0; y < pos.count; y += 2)\r\n {\r\n p1.fromArray(pos.array, y * 3);\r\n p2.fromArray(pos.array, (y + 1) * 3);\r\n p1.applyMatrix4(this._Matrix);\r\n p2.applyMatrix4(this._Matrix);\r\n\r\n sel.WorldToScreenPoint(p1);\r\n sel.WorldToScreenPoint(p2);\r\n\r\n if (sel.IntersectLine(p1, p2))\r\n {\r\n p1.fromArray(pos.array, y * 3);\r\n p2.fromArray(pos.array, (y + 1) * 3);\r\n arrayPushArray(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n }\r\n return pts;\r\n }\r\n\r\n let pathArr = Array.isArray(this._PathCurve) ? this._PathCurve : [this._PathCurve];\r\n for (let path of pathArr)\r\n {\r\n let contour = path.Clone();\r\n contour.ApplyMatrix(this.OCSNoClone);\r\n arrayPushArray(pts, contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n if (snapMode === ObjectSnapMode.Mid)\r\n arrayPushArray(pts, this.GetMidPoints());\r\n }\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 //缓存夹点和子实体的索引\r\n private _GripSubIndexMap: Map;\r\n /** 获取夹点与子实体的索引 */\r\n GetGripSubIndexMap()\r\n {\r\n if (this._GripSubIndexMap)\r\n return this._GripSubIndexMap;\r\n\r\n this.GetGripPoints();\r\n\r\n return this._GripSubIndexMap;\r\n }\r\n\r\n GetGripPoints()\r\n {\r\n this._GripSubIndexMap = undefined;\r\n\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n this._GripSubIndexMap = new Map;\r\n\r\n const points: Vector3[] = [];\r\n for (let path of this._PathCurve)\r\n {\r\n let pts = path.GetGripPoints();\r\n for (let p of pts)\r\n {\r\n this._GripSubIndexMap.set(points.length, path);\r\n\r\n p.applyMatrix4(this._Matrix);\r\n points.push(p);\r\n }\r\n }\r\n return points;\r\n }\r\n else\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 }\r\n\r\n GetStretchPoints()\r\n {\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n const points: Vector3[] = [];\r\n for (let path of this._PathCurve)\r\n {\r\n let pts = path.GetStretchPoints();\r\n for (let p of pts)\r\n {\r\n p.applyMatrix4(this._Matrix);\r\n points.push(p);\r\n }\r\n }\r\n return points;\r\n }\r\n else\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 }\r\n\r\n //端点捕捉时提供端点\r\n private GetEndPoint()\r\n {\r\n let pathPts: Vector3[] = [];\r\n let pathNormals: Vector3[] = [];\r\n //路径点表\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n for (let path of this._PathCurve)\r\n {\r\n pathPts = path.GetStretchPoints();\r\n arrayRemoveDuplicateBySort(pathPts, (p1, p2) =>\r\n {\r\n if (equalv3(p1, p2))\r\n {\r\n p2[\"_mask_\"] = p1[\"_mask_\"];\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n if (path !== this._PathCurve[0])\r\n pathPts.shift();\r\n\r\n let pNormal = path.Normal;\r\n\r\n for (let p of pathPts)\r\n pathNormals.push(pNormal);\r\n }\r\n }\r\n else\r\n {\r\n const path = this._PathCurve;\r\n //路径点表\r\n pathPts = path.GetStretchPoints();\r\n if (path.IsClose && !equalv3(pathPts[0], pathPts[pathPts.length - 1], 1e-3))\r\n pathPts.push(pathPts[0]);\r\n\r\n arrayRemoveDuplicateBySort(pathPts, equalv3);\r\n let pNormal = path.Normal;\r\n for (let p of pathPts)\r\n pathNormals.push(pNormal);\r\n }\r\n\r\n let shapePts2d = this.Contour.GetStretchPoints();\r\n\r\n //轮廓点表\r\n let shapePts3d = shapePts2d.map(AsVector3);\r\n let isClosePath = equalv3(pathPts[0], pathPts[pathPts.length - 1], 1e-3);\r\n\r\n let pts: Vector3[] = [];//端点\r\n\r\n if (!isClosePath)\r\n pts.push(...ProjectionToPlane(shapePts3d, pathNormals[0], pathPts[0], undefined, pathPts[1]));\r\n\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 pts.push(...ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1], pathPts[1]));\r\n else\r\n pts.push(...ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1]));\r\n }\r\n else\r\n {\r\n pts.push(...ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1], pathPts[i + 1]));\r\n }\r\n }\r\n\r\n for (let pt of pts) pt.applyMatrix4(this.OCSNoClone);\r\n return pts;\r\n }\r\n\r\n private GetMidPoints()\r\n {\r\n let conPts = this._Contour.GetStretchPoints();\r\n const pts: Vector3[] = [];\r\n const UpdateEndMtx = (path: Curve) =>\r\n {\r\n for (let i = 0.5; i < path.EndParam; i++)\r\n {\r\n let pos = path.GetPointAtParam(i);\r\n let dir = path.GetFirstDeriv(i).normalize();\r\n let y = path.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 pts.push(...conPts.map(p => p.clone().applyMatrix4(tempMatrix1)));\r\n }\r\n };\r\n if (Array.isArray(this._PathCurve))\r\n for (let path of this._PathCurve)\r\n UpdateEndMtx(path);\r\n else\r\n UpdateEndMtx(this._PathCurve);\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n let ptsLengths = 0;\r\n for (let i = 0; i < this._PathCurve.length; i += 1)\r\n {\r\n const path = this._PathCurve[i];\r\n const pathGripPts = path.GetGripPoints();\r\n const idxList = indexList.filter(v => v >= ptsLengths && v < (ptsLengths + pathGripPts.length)).map((v) => v - ptsLengths);\r\n\r\n ptsLengths += pathGripPts.length;\r\n\r\n if (idxList.length === 0) continue;\r\n\r\n let isMoveLine = (path instanceof Line && idxList.length === 1 && idxList[0] === 1);\r\n let isMovePolylineStart = (path instanceof Polyline) && idxList.length === 1 && idxList.includes(1);\r\n let isMovePolylineEnd = (path instanceof Polyline) && idxList.length === 1 && idxList.includes(pathGripPts.length - 2);\r\n\r\n //如果不是整体移动,那么vec被限制在CURVE OCS Z0\r\n let isMove = isMoveLine || idxList.length === pathGripPts.length;\r\n if (!isMove)\r\n {\r\n vec = vec.clone()\r\n .applyMatrix4(path.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(path.OCS.setPosition(0, 0, 0));\r\n }\r\n\r\n //我们校验它的前后曲线支不支持它移动这个点\r\n let prePath = this._PathCurve[FixIndex(i - 1, this._PathCurve)];\r\n let nextPath = this._PathCurve[FixIndex(i + 1, this._PathCurve)];\r\n\r\n if ((isMoveLine || idxList.includes(0) || isMovePolylineStart)//(move line ) or (move start) or(move pl start)\r\n && (i || equalv3(prePath.EndPoint, path.StartPoint, 1e-3)))//连接到下一段\r\n {\r\n //vec限制在上一段的坐标系内 无z\r\n vec = vec.clone()\r\n .applyMatrix4(prePath.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(prePath.OCS.setPosition(0, 0, 0));\r\n\r\n if (isMoveLine || isMovePolylineStart)//顺带移动上一段\r\n prePath.MoveGripPoints([prePath.GetGripPoints().length - 1], vec);\r\n\r\n }\r\n if ((isMoveLine || idxList.includes(pathGripPts.length - 1) || isMovePolylineEnd)//(move line ) or (move end) or(move pl end)\r\n && (i < this._PathCurve.length - 2 || equalv3(path.EndPoint, nextPath.StartPoint, 1e-3)))//连接到上一段\r\n {\r\n //vec限制在下一段的坐标系内 无z\r\n vec = vec.clone()\r\n .applyMatrix4(nextPath.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(nextPath.OCS.setPosition(0, 0, 0));\r\n\r\n if (isMoveLine || isMovePolylineEnd)//顺带移动下一段\r\n nextPath.MoveGripPoints([0], vec);\r\n }\r\n\r\n if (isMove)\r\n path.Move(vec);\r\n else\r\n path.MoveGripPoints(idxList, vec);\r\n }\r\n }\r\n else\r\n {\r\n this._PathCurve.MoveGripPoints(indexList, vec);\r\n }\r\n this.Update();\r\n }\r\n\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n let ptsLengths = 0;\r\n let pathIndexMap = new Map();\r\n\r\n //1.parse\r\n for (let i = 0; i < this._PathCurve.length; i++)\r\n {\r\n let path = this._PathCurve[i];\r\n const pts = path.GetStretchPoints();\r\n const idxList = indexList.filter(v => v >= ptsLengths && v < (ptsLengths + pts.length)).map((v) => v - ptsLengths);\r\n\r\n ptsLengths += pts.length;\r\n\r\n pathIndexMap.set(path, {\r\n idx: idxList,\r\n count: pts.length,\r\n isMove: pts.length === idxList.length,\r\n });\r\n }\r\n\r\n //2.change vec\r\n for (let i = 0; i < this._PathCurve.length; i++)\r\n {\r\n let path = this._PathCurve[i];\r\n let { idx: idxList, count: ptsCount, isMove } = pathIndexMap.get(path);\r\n\r\n if (idxList.length === 0) continue;\r\n\r\n let isMoveStart = idxList.includes(0);\r\n let isMoveEnd = idxList.includes(ptsCount - 1);\r\n\r\n if (!isMove)//如果不是移动 限制在本OCS内 NO Z\r\n {\r\n vec.applyMatrix4(path.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(path.OCS.setPosition(0, 0, 0));\r\n }\r\n\r\n //我们校验它的前后曲线支不支持它移动这个点\r\n let prePath = this._PathCurve[FixIndex(i - 1, this._PathCurve)];\r\n let nextPath = this._PathCurve[FixIndex(i + 1, this._PathCurve)];\r\n\r\n //如果pre是move 则不需要过滤z\r\n if ((isMove || isMoveStart)//(move line ) or (move start) or(move pl start)\r\n && (i || equalv3(prePath.EndPoint, path.StartPoint, 1e-3))//连接到下一段\r\n && (!pathIndexMap.get(prePath).isMove)//非移动\r\n )\r\n {\r\n //vec限制在上一段的坐标系内 无z\r\n vec.applyMatrix4(prePath.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(prePath.OCS.setPosition(0, 0, 0));\r\n }\r\n if (\r\n isMove || isMoveEnd\r\n && (i < this._PathCurve.length - 2 || equalv3(path.EndPoint, nextPath.StartPoint, 1e-3))//连接到上一段\r\n && (!pathIndexMap.get(nextPath).isMove)//非移动\r\n )\r\n {\r\n //vec限制在下一段的坐标系内 无z\r\n vec.applyMatrix4(nextPath.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(nextPath.OCS.setPosition(0, 0, 0));\r\n }\r\n }\r\n\r\n //3 move\r\n for (let i = 0; i < this._PathCurve.length; i++)\r\n {\r\n let path = this._PathCurve[i];\r\n let { idx: idxList, isMove } = pathIndexMap.get(path);\r\n if (isMove)\r\n path.Move(vec);\r\n else\r\n path.MoveStretchPoints(idxList, vec);\r\n }\r\n }\r\n else\r\n {\r\n this._PathCurve.MoveStretchPoints(indexList, vec);\r\n }\r\n this.Update();\r\n }\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\r\n let ocsInv = this.OCSInv;\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n for (let p of this._PathCurve)\r\n p.ApplyMatrix(this.OCSNoClone).ApplyMatrix(m).ApplyMatrix(ocsInv);\r\n\r\n let group = curveLinkGroup(this._PathCurve);\r\n this._PathCurve = group[0];\r\n }\r\n else\r\n this._PathCurve.ApplyMatrix(this.OCSNoClone).ApplyMatrix(m).ApplyMatrix(ocsInv);\r\n\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\r\n }\r\n\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//ver\r\n this._Contour = file.ReadObject() as Polyline;\r\n if (ver === 1)\r\n {\r\n this._PathCurve = file.ReadObject() as Curve;\r\n if (this._Contour instanceof Spline || this._PathCurve instanceof Spline)\r\n {\r\n this._isErase = true;\r\n Log(\"放样实体是样条线生成的,自动删除它!\", LogType.Info);\r\n }\r\n }\r\n else if (ver > 1)\r\n {\r\n const pathCurveCount = file.Read();\r\n if (pathCurveCount === 1)\r\n this._PathCurve = file.ReadObject() as Curve;\r\n else\r\n {\r\n this._PathCurve = [];\r\n for (let i = 0; i < pathCurveCount; i++)\r\n {\r\n this._PathCurve.push(file.ReadObject());\r\n }\r\n }\r\n }\r\n\r\n if (ver > 2)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n\r\n if (ver > 3)\r\n this._DisplayAccuracy = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(4);//ver\r\n file.WriteObject(this._Contour);\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n file.Write(this._PathCurve.length);\r\n for (let c of this._PathCurve)\r\n file.WriteObject(c);\r\n }\r\n else\r\n {\r\n file.Write(1);\r\n file.WriteObject(this._PathCurve);\r\n }\r\n\r\n // ver3\r\n file.WriteBool(this._LockMaterial);\r\n // ver4\r\n file.Write(this._DisplayAccuracy);\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { DefaultToplineMetalsOption } from \"../../Editor/DefaultConfig\";\r\nimport { AsVector3, ZeroVec, equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { ProjectionToPlane } from \"../../Geometry/SweepGeometry\";\r\nimport { Max } 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 { Arc } from \"../Entity/Arc\";\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\r\n /**\r\n *延伸取最大最小轮廓每段首尾到前面线段,取最长线段作为分段长\r\n */\r\n get Segmentations(): Curve[]\r\n {\r\n //轮廓点表\r\n let contourPts = this._Contour.Shape.getPoints(4).map(AsVector3);\r\n for (let p of contourPts)\r\n p.applyMatrix4(this._Contour.OCSNoClone);\r\n\r\n //收集所有的点\r\n let pathCurves: (Line | Arc)[] = [];\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n for (let p of this._PathCurve)\r\n {\r\n if (p instanceof Polyline)\r\n pathCurves.push(...p.Explode() as Line[]);\r\n else\r\n pathCurves.push(p.Clone() as Line);\r\n }\r\n }\r\n else\r\n if (this._PathCurve instanceof Polyline)\r\n pathCurves.push(...this._PathCurve.Explode() as Line[]);\r\n else\r\n pathCurves.push(this._PathCurve.Clone() as Line);\r\n\r\n\r\n let isClosePath = equalv3(pathCurves[0].StartPoint, pathCurves[pathCurves.length - 1].EndPoint, 1e-3);\r\n\r\n\r\n let radiusMap = new Map();\r\n\r\n function ExtendsCurve(path: Curve, pts: Vector3[])\r\n {\r\n let params = pts.map(p => path.GetParamAtPoint2(path.GetClosestPointTo(p, true)));\r\n\r\n let min = Math.min(0, params[Max(params, (p1, p2) => p1 > p2)]);\r\n let max = Math.max(1, params[Max(params, (p1, p2) => p1 < p2)]);\r\n\r\n let sp = path.GetPointAtParam(min);\r\n let ep = path.GetPointAtParam(max);\r\n\r\n path.StartPoint = sp;\r\n path.EndPoint = ep;\r\n }\r\n\r\n //遍历所有的路径节点进行顶点投射\r\n for (let i = 0; i < pathCurves.length; i++)\r\n {\r\n let path = pathCurves[i];\r\n if (isClosePath || i !== pathCurves.length - 1)//与下一段\r\n {\r\n let ep = path.EndPoint;\r\n let nextPath = pathCurves[FixIndex(i + 1, pathCurves)];\r\n let preP: Vector3;\r\n if (path instanceof Line)\r\n preP = ep.clone().sub(path.GetFirstDeriv(1).normalize());\r\n else\r\n {\r\n let pts = path.Shape.getPoints(4);\r\n preP = AsVector3(pts[pts.length - 2]).applyMatrix4(path.OCSNoClone);\r\n }\r\n let nextP: Vector3;\r\n if (nextPath instanceof Line)\r\n nextP = ep.clone().add(nextPath.GetFirstDeriv(0).normalize());\r\n else\r\n {\r\n let pts = nextPath.Shape.getPoints(4);\r\n nextP = AsVector3(pts[1]).applyMatrix4(nextPath.OCSNoClone);\r\n }\r\n\r\n //投射的点表\r\n let pts = ProjectionToPlane(contourPts, path.Normal, ep, preP, nextP);\r\n\r\n // for (let j = 0; j < pts.length - 1; j++)\r\n // TestDraw(new Line(pts[j].clone(), pts[j + 1].clone()).ApplyMatrix(this.OCSNoClone), i + 1);\r\n\r\n //针对圆弧 修改它的半径\r\n if (path instanceof Arc)\r\n {\r\n let mp = path.GetPointAtParam(0.5);\r\n let arcPts = ProjectionToPlane(contourPts, path.Normal, mp, mp.clone().sub(path.GetFirstDeriv(0.5).normalize()));\r\n\r\n let r = radiusMap.get(path);\r\n let ocsInv = path.OCSInv;\r\n let radius = arcPts.map(p => p.applyMatrix4(ocsInv).setZ(0).distanceTo(ZeroVec));\r\n if (r) radius.push(r);\r\n let maxRadius = radius[Max(radius, (r1, r2) => r1 < r2)];\r\n radiusMap.set(path, maxRadius);\r\n }\r\n\r\n\r\n ExtendsCurve(path, pts);\r\n ExtendsCurve(nextPath, pts);\r\n }\r\n }\r\n\r\n for (let [arc, rad] of radiusMap)\r\n arc.Radius = rad;\r\n\r\n return pathCurves;\r\n }\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 this.WriteAllObjectRecord();\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\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\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 if (ver > 1)\r\n {\r\n this.HardwareOption.goodsId = file.Read();\r\n this.HardwareOption.goodsSn = file.Read();\r\n }\r\n\r\n if (ver > 2)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);//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 file.Write(this.HardwareOption.goodsId);\r\n file.Write(this.HardwareOption.goodsSn);\r\n\r\n // ver3\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { Log, LogType } from \"../../Common/Log\";\r\nimport { Intent, Toaster, ToasterShowEntityMsg } from \"../../Common/Toaster\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { ParseExpr, safeEval } from \"../../Common/eval\";\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 { Entity } from \"../../DatabaseServices/Entity/Entity\";\r\nimport { GroupRecord } from \"../../DatabaseServices/GroupTableRecord\";\r\nimport { HardwareCompositeEntity } from \"../../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { HardwareTopline } from \"../../DatabaseServices/Hardware/HardwareTopline\";\r\nimport { ProcessingGroupRecord } from '../../DatabaseServices/ProcessingGroup/ProcessingGroupRecord';\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { GetSealedBoardContour } from \"../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { IHardwareType, Production } from \"../../Production/Product\";\r\nimport { ISealingData } from \"../../UI/Store/OptionInterface/IHighSealedItem\";\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 goodsId?: string;\r\n goodsSn?: string;\r\n}\r\nexport type GetCountOption = { sealGruopKey: (key: string, block: Board, thickness: string, data: ISealingData) => 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\r\n GetCount(brs: (Board | IHardwareType)[], options: GetCountOption = null, IsBbsCountChaidan?: boolean)\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, IsBbsCountChaidan);\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 {\r\n for (let drill of v)\r\n {\r\n let goodsSn = (drill as CylinderHole).GoodsSn;\r\n let drillGroup = drillCount.find(d => d.name === k && d.goodsSn === goodsSn); //区分排钻商品ID\r\n if (drillGroup)\r\n drillGroup.count += 1;\r\n else\r\n drillCount.push({ name: k, count: 1, goodsSn, goodsId: (drill as CylinderHole).GoodsId });\r\n }\r\n }\r\n else if (k === \"层板钉\")\r\n drillCount.push({ name: k, count: v.length });\r\n else\r\n {\r\n for (let drill of v)\r\n {\r\n let goodsSn = (drill as CylinderHole).GoodsSn;\r\n let drillGroup = drillCount.find(d => d.name === k && d.goodsSn === goodsSn); //区分排钻商品ID\r\n if (drillGroup)\r\n drillGroup.count += 1;\r\n else\r\n drillCount.push({ name: k, count: 1, goodsSn, goodsId: (drill as CylinderHole).GoodsId });\r\n }\r\n }\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 const chaiDan = IsBbsCountChaidan ? bs : bs.filter(b => b.IsChaiDan);\r\n areaCount.push({\r\n entity: bs[0],\r\n count: chaiDan.length,\r\n count2: this.GetBoardsArea(chaiDan)\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, IsBbsCountChaidan?: boolean)\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, goodsSn } = h.HardwareOption;\r\n let tags = this.ParseProcessingGroupTags(h);\r\n // :254行 代码对关联复合实体又进行一遍分析 需同步修改\r\n addDrillToMap(`${name},${unit},${this.ParseSpec(h, factory)},${this.ParseSpec(h, spec)},${this.ParseSpec(h, model)},${this.ParseSpec(h, brand)},${tags.join(\",\")},${goodsSn}`, h);\r\n }\r\n\r\n this.UpdateBoardMap(brsProps);\r\n\r\n //统计 排钻 封边 关联的五金(排钻?)\r\n for (let br of brsProps)\r\n {\r\n if (!IsBbsCountChaidan && !br.IsChaiDan)//非拆单板我们不统计\r\n continue;\r\n\r\n //排钻 层板钉\r\n let dlist = br.DrillList;\r\n if (equaln(br.ContourCurve.Area, 0))\r\n {\r\n ToasterShowEntityMsg({\r\n msg: `${br.BoardProcessOption.roomName} ${br.BoardProcessOption.cabinetName} ${br.Name}轮廓有有问题,请检查`,\r\n timeout: 5000,\r\n intent: Intent.DANGER,\r\n ent: br\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, br))\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: `柜名:${br.BoardProcessOption.cabinetName} 房间名:${br.BoardProcessOption.roomName} 板名:${br.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, timeout: 5000, intent: Intent.DANGER });\r\n Log(`柜名:${br.BoardProcessOption.cabinetName} 房间名:${br.BoardProcessOption.roomName} 板名:${br.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, LogType.Error, [br, gd]);\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 (br.LayerNails.length > 0)\r\n for (let objId of br.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 br.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, goodsSn } = metal.HardwareOption;\r\n let tags = this.ParseProcessingGroupTags(metal);\r\n // :135行 代码对关联复合实体又进行一遍分析 需同步修改\r\n addDrillToMap(`${name},${unit},${this.ParseSpec(metal, factory)},${this.ParseSpec(metal, spec)},${this.ParseSpec(metal, model)},${this.ParseSpec(metal, brand)},${tags.join(\",\")},${goodsSn}`, metal);\r\n }\r\n }\r\n\r\n //封边\r\n let sealdData = GetSealedBoardContour(br);\r\n if (!sealdData)\r\n {\r\n ToasterShowEntityMsg({\r\n intent: Intent.DANGER,\r\n msg: \"板件扣封边失败,请检查板件轮廓!\",\r\n timeout: 10000,\r\n ent: br\r\n });\r\n throw \"错误:板扣除封边失败!\";\r\n }\r\n\r\n let { seals: sealData, reservedEdges } = Production.ParseSealData(sealdData, br.BoardProcessOption.color);\r\n //封边留头量\r\n let sealReserve = HostApplicationServices.sealReserve * 2;\r\n\r\n let thickness = this.GetBoardThickness(br);\r\n\r\n for (let data of sealData)\r\n {\r\n if (equaln(0, data.size)) continue;\r\n data.length += sealReserve;\r\n let color = data.sealColor;\r\n let k = `${data.size}-${FixedNotZero(thickness, 2)}-${color}`;\r\n if (options && options.sealGruopKey)\r\n {\r\n options.sealGruopKey(k, br, thickness, data);\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 const accuracy = HostApplicationServices.chaidanOption.hardwareExpressionFormattingAccuracy;\r\n return ParseExpr(spec, accuracy, { 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 const accuracy = HostApplicationServices.chaidanOption.hardwareExpressionFormattingAccuracy;\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, accuracy) });\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), accuracy));\r\n hardwareCount.push({ name, count, entity: v[0], count2, length: count2 });\r\n }\r\n }\r\n }\r\n }\r\n\r\n ParseProcessingGroupTags = (entity: Entity) =>\r\n {\r\n return [...entity.ProcessingGroupList].map((g) =>\r\n {\r\n let obj = g?.Object;\r\n if (obj)\r\n return (obj as ProcessingGroupRecord).Name;\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 // 显示复合实体特殊备注\r\n GetTranslatedHardwareRemarks = (entity: IHardwareType, dataLength: number) =>\r\n {\r\n return entity.DataList.map(([key, value], i) =>\r\n `${lookOverBoardInfosTool.ParseSpec(entity, key, dataLength)}:${lookOverBoardInfosTool.ParseSpec(entity, value, dataLength)}`\r\n );\r\n };\r\n GetBoardThickness(br: Board)\r\n {\r\n let size = Production.GetSpiteSize(br);\r\n if (size)\r\n return FixedNotZero(size.spliteThickness, 2);\r\n else\r\n return FixedNotZero(br.Thickness, 2);\r\n }\r\n GetBoardsArea(brs: Board[])\r\n {\r\n return brs.reduce((area, b) =>\r\n {\r\n let size = Production.GetSpiteSize(b);\r\n let ar: number;\r\n if (size)\r\n ar = size.spliteHeight * size.spliteWidth / 1e6;\r\n else\r\n ar = b.Width * b.Height / 1e6;\r\n ar = parseFloat(ar.toFixed(3));\r\n return area + ar;\r\n }, 0).toFixed(2);\r\n }\r\n}\r\n\r\nexport const lookOverBoardInfosTool = new LookOverBoardInfosTool();\r\n","import { 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 { 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 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 PolygonRes\r\n{\r\n vertices: Array,\r\n plane: [number, number, number, number];\r\n}\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): Geom3\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);\r\n}\r\n","import { Geom3, Poly3 } from \"@jscad/modeling/src/geometries/types\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport { Vector3 } from \"three\";\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?: Geom3, 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 { Geom3, transform } from \"@jscad/modeling/src/geometries/geom3\";\r\nimport { Mat4 } from \"@jscad/modeling/src/maths/mat4\";\r\nimport { Matrix4 } from \"three\";\r\nimport { MakeMirrorMtx } from \"../../Common/Matrix4Utils\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { GetBoardContour } from \"../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { Geometry2CSG2 } from \"../../csg/core/Geometry2CSG\";\r\nimport { ZAxis } from \"../GeUtils\";\r\n\r\nexport function BoardSideModelCSGBuilder(board: Board): Geom3[]\r\n{\r\n const sideModeingCsgs: Geom3[] = [];\r\n\r\n if (!(board.SideModelingMap.size || board.RelevanceSideModelMap.size))\r\n return sideModeingCsgs;\r\n\r\n let con = GetBoardContour(board);\r\n if (!con) return sideModeingCsgs;\r\n\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n const mirrorMtxZ = MakeMirrorMtx(ZAxis);\r\n\r\n for (let [index, soilds] of board.AllSideModelGrooveMap)\r\n {\r\n let cu = cus[index];\r\n if (!cu) continue;\r\n\r\n let mt4 = GetSideCuFaceMtx(cus[index], inverseZ);\r\n\r\n for (let soild of soilds)\r\n {\r\n let s = soild.Clone();\r\n let geom3 = Geometry2CSG2(s.MeshGeometry);\r\n geom3 = transform(mirrorMtxZ.elements as Mat4, geom3);\r\n geom3 = transform(mt4.clone().multiply(soild.OCS).elements as Mat4, geom3);\r\n sideModeingCsgs.push(geom3);\r\n }\r\n }\r\n\r\n return sideModeingCsgs;\r\n}\r\n\r\nexport function GetSideCuFaceMtx(cu: Curve, inverseZ = false): Matrix4\r\n{\r\n let x = cu.GetFirstDeriv(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 = cu.StartPoint;\r\n\r\n return new Matrix4().makeBasis(x, y, z).setPosition(basePt);\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 const a_x = vertices[indexA * 3];\r\n const a_y = vertices[indexA * 3 + 1];\r\n const b_x = vertices[indexB * 3];\r\n const b_y = vertices[indexB * 3 + 1];\r\n const c_x = vertices[indexC * 3];\r\n const 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 const a_x = vertices[indexA * 3];\r\n const a_y = vertices[indexA * 3 + 1];\r\n const a_z = vertices[indexA * 3 + 2];\r\n const b_x = vertices[indexB * 3];\r\n const b_y = vertices[indexB * 3 + 1];\r\n const b_z = vertices[indexB * 3 + 2];\r\n const c_x = vertices[indexC * 3];\r\n const c_y = vertices[indexC * 3 + 1];\r\n const c_z = vertices[indexC * 3 + 2];\r\n const d_x = vertices[indexD * 3];\r\n const d_y = vertices[indexD * 3 + 1];\r\n const d_z = vertices[indexD * 3 + 2];\r\n\r\n if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x))\r\n {\r\n return [\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 else\r\n {\r\n return [\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 }\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 const a_x = vertices[indexA * 3];\r\n const a_y = vertices[indexA * 3 + 1];\r\n const b_x = vertices[indexB * 3];\r\n const b_y = vertices[indexB * 3 + 1];\r\n const c_x = vertices[indexC * 3];\r\n const 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 { 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 { 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(): Shape[]\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\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[] | (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 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 ClearDraw(): this\r\n {\r\n this.UpdateDrawGeometry();\r\n return super.ClearDraw();\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.DrawColorIndex));\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.DrawColorIndex)),\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)),\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.DrawColorIndex)),\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.DrawColorIndex);\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.DrawColorIndex)),\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)),\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.DrawColorIndex)),\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.DrawColorIndex);\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.DrawColorIndex);\r\n }\r\n else\r\n {\r\n let mesh = obj.children[i] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.DrawColorIndex);\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 if (ver > 1)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n this._ShapeManager.WriteFile(file);\r\n\r\n // ver2\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n}\r\n","\r\n\r\nexport const CanDrawHoleFuzz = 0.1;\r\n","import { Segment1d } from \"../../Editor/TranstrolControl/Segment1dUtil\";\r\n\r\nconst FUZZ = 1e-5;\r\n\r\n//Segment1d列表中 合并相交的区间\r\nexport function Segment1dJoin(segment: Segment1d[]): Segment1d[]\r\n{\r\n if (segment.length < 2)\r\n return segment;\r\n\r\n segment.sort((a, b) => a[0] - b[0]);\r\n\r\n const NewSegment: Segment1d[] = [];\r\n\r\n for (let i = 0; i < segment.length; i++)\r\n {\r\n let segment1 = segment[i];\r\n\r\n if (i === segment.length - 1)\r\n {\r\n NewSegment.push(segment1);\r\n break;\r\n }\r\n\r\n for (let j = i + 1; j < segment.length; j++)\r\n {\r\n let segment2 = segment[j];\r\n if (segment2[0] < segment1[1] + FUZZ)\r\n segment1 = [segment1[0], Math.max(segment1[1], segment2[1])];\r\n else\r\n {\r\n NewSegment.push(segment1);\r\n break;\r\n }\r\n\r\n if (j === segment.length - 1)\r\n {\r\n NewSegment.push(segment1);\r\n i = segment.length - 1;\r\n }\r\n }\r\n }\r\n\r\n return NewSegment;\r\n}\r\n\r\n//获取多个区间列表相交的部分\r\nexport function IntersectSegment1ds(segment1: Segment1d[], segment2: Segment1d[]): Segment1d[]\r\n{\r\n const IntersectSegments: Segment1d[] = [];\r\n\r\n for (let s1 of segment1)\r\n {\r\n for (let s2 of segment2)\r\n {\r\n //[1,10] + [5,15] = [5,10]\r\n if ((s2[0] > s1[0] - FUZZ && s2[0] < s1[1]) || (s1[0] > s2[0] - FUZZ && s1[0] < s2[1]))\r\n {\r\n IntersectSegments.push([Math.max(s1[0], s2[0]), Math.min(s1[1], s2[1])]);\r\n }\r\n }\r\n }\r\n\r\n return IntersectSegments;\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { MatrixPlanarizere } from \"../../Common/Matrix4Utils\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\nimport { Segment1d } from \"../../Editor/TranstrolControl/Segment1dUtil\";\r\nimport { BoolOpeartionType } from \"../../GraphicsSystem/BoolOperateUtils\";\r\nimport { Box3Ext } from \"../Box\";\r\nimport { XAxis, equaln } from \"../GeUtils\";\r\nimport { BoardFaceType } from \"./BoardGetFace\";\r\nimport { IntersectSegment1ds, Segment1dJoin } from \"./Sement1dUntils\";\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 polyLineOCS?: Matrix4;\r\n CurveBoardFaceRegionPolyline?: Polyline;\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 FixedInterval: Segment1d[]; //造型、凹槽周围包围圈 厚度半个排钻宽度\r\n Segment1D: Segment1d[]; //可放置的区间\r\n PolyLineOCS: Matrix4 = new Matrix4();\r\n CurveBoardFaceRegionPolyline: Polyline; //曲线板分段面轮廓\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 if (parameters.polyLineOCS)\r\n this.PolyLineOCS = parameters.polyLineOCS;\r\n\r\n if (parameters.CurveBoardFaceRegionPolyline)\r\n this.CurveBoardFaceRegionPolyline = parameters.CurveBoardFaceRegionPolyline;\r\n }\r\n }\r\n get Region()\r\n {\r\n if (!this._Region)\r\n {\r\n let curve: Curve = this.CurveBoardFaceRegionPolyline ?? new Polyline().Rectangle(this.Length, this.Width);\r\n this._Region = Region.CreateFromCurves([curve]);\r\n }\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 if (sideFace.type === noSideFace.type)\r\n [sideFace, noSideFace] = this.Width > f.Width ? [f, this] : [this, f];\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 //注意: 排钻因为布尔运算失败的重灾区\r\n // TestDraw(sideReg.Clone(), 1);\r\n // TestDraw(toReg.Clone(), 2);\r\n\r\n isSuccess = sideReg.BooleanOper(toReg, BoolOpeartionType.Intersection);\r\n\r\n //挖穿造型分段排钻\r\n const throughModelSegmentedDrill = HostApplicationServices.throughModelSegmentedDrill;\r\n\r\n if (throughModelSegmentedDrill)\r\n {\r\n let boardModeling = noSideFace.LocalBoard.BoardModeling;\r\n if (boardModeling?.length)\r\n {\r\n let boardThickness = noSideFace.LocalBoard.Thickness;\r\n for (let modal of boardModeling)\r\n {\r\n if (boardThickness - modal.thickness > 1e-5) continue;\r\n let modalReg = Region.CreateFromCurves([modal.shape.Outline.Curve]).ApplyMatrix(diffMtx);\r\n isSuccess = sideReg.BooleanOper(modalReg, BoolOpeartionType.Subtract);\r\n }\r\n }\r\n }\r\n\r\n for (let s of sideReg.ShapeManager.ShapeList)\r\n {\r\n if (!throughModelSegmentedDrill)\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 else\r\n {\r\n //求以X轴和Y=Thickness轴上的点 相互切割形成的矩形面\r\n const XLists: Segment1d[] = [];\r\n const TLists: Segment1d[] = [];\r\n const Thickness = s.BoundingBox.getSize(new Vector3).y;\r\n\r\n for (let cu of s.Outline.Shape.curves)\r\n {\r\n let pt1 = cu.getPoint(0);\r\n let pt2 = cu.getPoint(1);\r\n\r\n let x1 = Math.abs(pt1.x);\r\n let x2 = Math.abs(pt2.x);\r\n\r\n\r\n if (equaln(pt1.y, 0) && equaln(pt2.y, 0))\r\n XLists.push([Math.min(x1, x2), Math.max(x1, x2)]);\r\n\r\n if (equaln(Math.abs(pt1.y), Thickness) && equaln(Math.abs(pt2.y), Thickness))\r\n TLists.push([Math.min(x1, x2), Math.max(x1, x2)]);\r\n }\r\n //合并可以相连的区间 如[0,100] + [100,200] = [0,200]\r\n const XJoinLists: Segment1d[] = Segment1dJoin(XLists);\r\n const TJoinLists: Segment1d[] = Segment1dJoin(TLists);\r\n //X轴和厚度轴相交的区间\r\n const IntersectSegments = IntersectSegment1ds(XJoinLists, TJoinLists);\r\n\r\n //造型切割出来会有Position点 其他都是(0,0,0)\r\n let startPt = new Vector3(s.Position.x);\r\n\r\n for (let segment of IntersectSegments)\r\n {\r\n let minV: Vector3;\r\n let maxV: Vector3;\r\n //圆弧板面宽度具有方向性\r\n if (sideFace.Width > 0)\r\n {\r\n minV = new Vector3(segment[0]);\r\n maxV = new Vector3(segment[1], Thickness);\r\n }\r\n else\r\n {\r\n minV = new Vector3(segment[0], sideFace.Width);\r\n maxV = new Vector3(segment[1]);\r\n }\r\n\r\n let box = new Box3Ext(minV.add(startPt), maxV.add(startPt));\r\n retBoxs.push(box);\r\n sizes.push(box.getSize(new Vector3));\r\n }\r\n }\r\n }\r\n\r\n if (throughModelSegmentedDrill && !retBoxs.length) isSuccess = false;\r\n }\r\n else\r\n {\r\n let minV: Vector3;\r\n let maxV: Vector3;\r\n //圆弧板面宽度具有方向性\r\n if (sideFace.Width > 0)\r\n {\r\n minV = new Vector3();\r\n maxV = new Vector3(sideFace.Length, sideFace.Width);\r\n }\r\n else\r\n {\r\n minV = new Vector3(0, sideFace.Width);\r\n maxV = new Vector3(sideFace.Length, 0);\r\n }\r\n\r\n let retBox = new Box3Ext(minV, maxV);\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 minV: Vector3;\r\n let maxV: Vector3;\r\n if (sideFace.Width > 0)\r\n {\r\n minV = new Vector3();\r\n maxV = new Vector3(sideFace.Length, sideFace.Width);\r\n }\r\n else\r\n {\r\n minV = new Vector3(0, sideFace.Width);\r\n maxV = new Vector3(sideFace.Length, 0);\r\n }\r\n\r\n let retBox = new Box3Ext(minV, maxV);\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) || Math.abs(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, Vector2, Vector3 } from \"three\";\r\nimport { ArcBoardBuild } from \"../../Add-on/ArcBoard/ArcBoardBuild\";\r\nimport { SplitPolyline } from \"../../Add-on/BoardCutting/SplitPolyline\";\r\nimport { DrillType, FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\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 { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\nimport { GetBoardContour, GetBoardHighSeal } from \"../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { IHighSealedItem } from \"../../UI/Store/OptionInterface/IHighSealedItem\";\r\nimport { GetSideCuFaceMtx } from \"../Board2DModelCSG/BoardSideModelCSGBuilder\";\r\nimport { AsVector2, ZAxis, angle, equaln, equalv3 } from \"../GeUtils\";\r\nimport { CanDrawHoleFuzz } from \"./CanDrawHoleFuzz\";\r\nimport { Face } from \"./Face\";\r\n\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 if (this.Board.IsArcBoard)\r\n {\r\n this.GetArcBoardFaces();\r\n return;\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 let throughModelSegmentedDrill = HostApplicationServices.throughModelSegmentedDrill;\r\n let isRect = throughModelSegmentedDrill ? (this.Board.IsRect && !this.Board.BoardModeling.length) : this.Board.IsRect;\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,\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,\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\r\n //获取曲线板的正反 侧面\r\n GetArcBoardFaces(faceSealingDataMap?: Map, highSealingData?: IHighSealedItem[], sealCu?: Curve[])\r\n {\r\n let br = this.Board;\r\n const opt = br.BoardProcessOption;\r\n\r\n //排钻反应器 实体渲染赋值可能延迟 手动构造ArcBoardBuild\r\n let sweepArcBoardBuild = new ArcBoardBuild(br);\r\n sweepArcBoardBuild.ParseSweepCurves();\r\n\r\n let conCus = sweepArcBoardBuild.SweepCurves1.map(c => c.Clone());\r\n\r\n //曲线路径相对曲线板\r\n const RX = new Matrix4().makeRotationX(Math.PI / 2);\r\n const PathOCS = new Matrix4().multiplyMatrices(br.OCS, RX);\r\n\r\n // //弧形板旋转角度\r\n const AMtx = new Matrix4().makeRotationY(br.SweepAngle);\r\n PathOCS.multiply(AMtx);\r\n\r\n let basePt = new Vector3().applyMatrix4(new Matrix4().multiplyMatrices(RX, sweepArcBoardBuild.OCS2RotateMtx));\r\n PathOCS.multiply(new Matrix4().setPosition(basePt));\r\n\r\n const PathOCSInv = new Matrix4().getInverse(PathOCS);\r\n\r\n for (let cu of conCus)\r\n cu.ApplyMatrix(PathOCS);\r\n\r\n const ZNormal = new Vector3().setFromMatrixColumn(PathOCS, 2);\r\n let currentLength = 0;\r\n\r\n const FaceDir = br.SweepVisibleFace === FaceDirection.Front ? -1 : 1;\r\n\r\n const ContourCurve = br.ContourCurve.Clone() as Polyline;\r\n\r\n //弧形板旋转角度\r\n ContourCurve.ApplyMatrix(sweepArcBoardBuild.OCS2RotateMtx);\r\n if (highSealingData)\r\n {\r\n let cus = (br.ContourCurve.Clone() as Polyline).Explode();\r\n highSealingData.push(...structuredClone(GetBoardHighSeal(br, cus)));\r\n sealCu.push(...cus);\r\n }\r\n\r\n let contourLength = br.ParseBoardLengthInArcSweep();\r\n\r\n for (let i = 0; i < conCus.length; i++)\r\n {\r\n if (currentLength > contourLength)\r\n continue;\r\n\r\n //按分段曲线 对板轮廓裁剪\r\n let conCu = conCus[i];\r\n let length = currentLength + conCu.Length;\r\n\r\n //跳过圆弧\r\n if (conCu instanceof Arc)\r\n {\r\n currentLength = length;\r\n continue;\r\n }\r\n\r\n let starKnifePls = new Polyline([{ pt: AsVector2({ x: currentLength, y: -1 }), bul: 0 }, { pt: AsVector2({ x: currentLength, y: 10000 }), bul: 0 }]);\r\n let endKnifePls = new Polyline([{ pt: AsVector2({ x: length, y: -1 }), bul: 0 }, { pt: AsVector2({ x: length, y: 10000 }), bul: 0 }]);\r\n\r\n //裁剪结果\r\n let faceRegions = SplitPolyline(ContourCurve, [starKnifePls, endKnifePls]);\r\n faceRegions = faceRegions.filter((faceRegion) =>\r\n {\r\n let x = faceRegion.BoundingBox.getCenter(new Vector3).x;\r\n return x > currentLength && x < length;\r\n });\r\n\r\n if (faceRegions.length)\r\n {\r\n let c = conCu.Clone().ApplyMatrix(PathOCSInv);\r\n let lineToward = c.EndPoint.clone().sub(c.StartPoint);\r\n let ro = angle(lineToward);\r\n\r\n let ocs = PathOCS.setPosition(0, 0, 0);\r\n ocs = new Matrix4().multiplyMatrices((new Matrix4().makeRotationAxis(ZNormal, ro)), ocs).setPosition(conCu.StartPoint);\r\n ocs.multiply(new Matrix4().getInverse(RX));\r\n\r\n for (let faceRegion of faceRegions)\r\n {\r\n //添加正反面\r\n for (let data of faceRegion.LineData)\r\n data.pt.add(new Vector2(-currentLength));\r\n\r\n let frontMat: Matrix4;\r\n let backMat: Matrix4;\r\n let mtx = MakeMirrorMtx(ZAxis);\r\n\r\n const faceRegionBox = faceRegion.BoundingBox;\r\n const faceRegionSize = faceRegionBox.getSize(new Vector3);\r\n\r\n if (br.SweepVisibleFace === FaceDirection.Front)\r\n {\r\n frontMat = new Matrix4().multiplyMatrices(ocs, mtx.setPosition(new Vector3(0, faceRegionBox.min.y, br.Thickness * FaceDir)));\r\n backMat = new Matrix4().multiplyMatrices(ocs, new Matrix4().setPosition(new Vector3(0, faceRegionBox.min.y)));\r\n }\r\n else\r\n {\r\n frontMat = new Matrix4().multiplyMatrices(ocs, new Matrix4().setPosition(new Vector3(0, faceRegionBox.min.y, br.Thickness * FaceDir)));\r\n backMat = new Matrix4().multiplyMatrices(ocs, mtx.setPosition(new Vector3(0, faceRegionBox.min.y)));\r\n }\r\n\r\n if (opt.frontDrill)\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.NoSide,\r\n localBoard: br,\r\n matrix4: frontMat,\r\n length: conCu.Length,\r\n width: faceRegionSize.y,\r\n CurveBoardFaceRegionPolyline: faceRegion\r\n }));\r\n\r\n if (opt.backDrill)\r\n {\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.NoSide,\r\n localBoard: br,\r\n matrix4: backMat,\r\n length: conCu.Length,\r\n width: faceRegionSize.y,\r\n CurveBoardFaceRegionPolyline: faceRegion\r\n }));\r\n }\r\n\r\n //侧面\r\n let cus = faceRegion.Explode();\r\n\r\n //应用新轮廓 计算排钻顺序\r\n let cloneBr = br.Clone();\r\n cloneBr.ContourCurve = faceRegion;\r\n const HighDrill = cloneBr.BoardProcessOption.highDrill.slice();\r\n\r\n for (let j = 0; j < cus.length; j++)\r\n {\r\n if (HighDrill.length > 0 && HighDrill[j] === DrillType.None) continue;\r\n\r\n let cu = cus[j];\r\n let mtx = GetSideFaceMtx(cu, faceRegion.IsClockWise);\r\n let ocs = PathOCS.clone().setPosition(0, 0, 0);\r\n ocs = new Matrix4().multiplyMatrices((new Matrix4().makeRotationAxis(ZNormal, ro)), ocs).setPosition(conCu.StartPoint);\r\n ocs.multiply(new Matrix4().getInverse(RX)).multiply(mtx);\r\n\r\n let f = new Face({\r\n type: BoardFaceType.Side,\r\n localBoard: br,\r\n matrix4: ocs,\r\n length: cu.Length,\r\n width: br.Thickness * FaceDir,\r\n drillType: HighDrill.length > 0 && HighDrill[j]\r\n });\r\n\r\n if (faceSealingDataMap)\r\n {\r\n let pt = cu.GetPointAtParam(0.5).add(new Vector3(currentLength));\r\n let index = Math.floor(ContourCurve.GetParamAtPoint(pt));\r\n if (!isNaN(index))\r\n faceSealingDataMap.set(f, index);\r\n }\r\n this.Faces.push(f);\r\n }\r\n }\r\n }\r\n\r\n currentLength = length;\r\n }\r\n // 测试代码\r\n // for (let f of this.Faces)\r\n // {\r\n // let r = f.Region.Clone().ApplyMatrix(f.OCS);\r\n // TestDraw(r);\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.GetFirstDeriv(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\nexport class ParseBoardSideFace extends BoardGetFace\r\n{\r\n constructor(public Board: Board)\r\n {\r\n super(Board);\r\n }\r\n\r\n ParseFaces()\r\n {\r\n this.GetSideFaces();\r\n }\r\n\r\n GetSideFaces()\r\n {\r\n let con = GetBoardContour(this.Board);\r\n if (!con) return;\r\n\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n for (let cu of cus)\r\n {\r\n let type = BoardFaceType.Side;\r\n\r\n let length = cu.Length;\r\n if (equaln(length, 0) || cu instanceof Arc)\r\n type = BoardFaceType.NoSide;\r\n\r\n let mtx = GetSideCuFaceMtx(cu, inverseZ);\r\n let face = new Face({\r\n type,\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 });\r\n this.Faces.push(face);\r\n }\r\n }\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, BufferGeometry, Float32BufferAttribute, MathUtils, Matrix4, ShapeUtils, Shape as TShape, Vector3 } from \"three\";\r\nimport { arrayPushArray, arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { ComputerCurvesNormalOCS, curveLinkGroup } from \"../../Common/CurveUtils\";\r\nimport { Status } from '../../Common/Status';\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { Contour, fastCurveInCurve2 } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { LinesType } from \"../../DatabaseServices/Entity/BoardInterface\";\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 { FuzzyFactory } from '../../csg/core/FuzzyFactory';\r\nimport { IntersectsBox } from \"../Box\";\r\nimport { CreateContour2 } from \"../CreateContour2\";\r\nimport { FastOffset } from \"../FastOffset\";\r\nimport { AsVector2, IdentityMtx4, equaln, equalv2, equalv3 } 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, displayAccuracy = 0)\r\n {\r\n this.contourWall.Draw(verticesArray, uvArray, edgeBuild, displayAccuracy);\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[], ignoreInCurve = false, checkIntersect = false): 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 //检查是否有交集\r\n if (checkIntersect && node1.contour.Curve.IntersectWith(node2.contour.Curve, IntersectOption.ExtendNone)?.length)\r\n continue;\r\n\r\n if (node2.contour.Curve.PtInCurve(p) || ignoreInCurve)\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\r\n //对于未被面域分析出来的线,我们进行join操作\r\n let unusedLines: Line[] = [];\r\n for (let l of lines)\r\n if (!parse.GetCueveUsed(l))\r\n unusedLines.push(l);\r\n if (unusedLines.length > 2)\r\n {\r\n let groups = curveLinkGroup(unusedLines, 1);\r\n for (let g of groups)\r\n {\r\n if (g.length < 2) continue;\r\n let pl = new Polyline();\r\n pl.ColorIndex = g[0].ColorIndex;\r\n pl.OCS = ComputerCurvesNormalOCS(g);\r\n for (let cu of g)\r\n {\r\n if (pl.Join(cu, false, 0.1) === Status.True)\r\n cu.Erase();\r\n }\r\n\r\n pl.CloseMark = true;\r\n let c = Contour.CreateContour(pl, false) ?? CreateContour2(pl.Explode(), 0.1);;\r\n if (c && c.Area > 0.1)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"错误:构建板件的MeshGeometry的盖子生成轮廓失败了!\");\r\n }\r\n }\r\n\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) ?? CreateContour2(cs, 0.1);\r\n if (c)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"错误:构建板件的MeshGeometry的盖子生成轮廓失败了!\");\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, displayAccuracy = 0)\r\n {\r\n this.curve.DisplayAccuracy = displayAccuracy;\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, br.DisplayAccuracy);\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\r\n //备份原始的槽,下面的代码为了合并槽,会将板的槽先清空,后续我们在还原它 (未来我们可能不强制合并板的槽 而是在这里合并? 保证板的槽的纯粹?例如矩形)\r\n let bakGrooves: ExtrudeSolid[];\r\n {\r\n //合并深度相同 但是半径不相同的槽\r\n\r\n let thicknessKnifsMap = new Map>();//深度->刀半径Set\r\n let thicknessGroovesMap = new Map();//深度->刀半径Set\r\n\r\n let fuzz = new FuzzyFactory(2, 1e-2);\r\n for (let g of br.Grooves)//准备数据 map\r\n {\r\n let thick = fuzz.lookupOrCreate([g.Thickness], g.Thickness);\r\n let knifsSet = thicknessKnifsMap.get(thick);\r\n let grooveArr = thicknessGroovesMap.get(thick);\r\n if (!knifsSet)\r\n {\r\n knifsSet = new Set();\r\n grooveArr = [];\r\n thicknessKnifsMap.set(thick, knifsSet);\r\n thicknessGroovesMap.set(thick, grooveArr);\r\n }\r\n grooveArr.push(g);\r\n knifsSet.add(g.KnifeRadius);\r\n }\r\n\r\n let mergeGrooves: ExtrudeSolid[] = [];\r\n for (let [thick, set] of thicknessKnifsMap)\r\n {\r\n if (set.size > 1)//如果深度相同的大于1\r\n {\r\n if (!bakGrooves)\r\n bakGrooves = br.Grooves.concat();//复制一个\r\n\r\n let arr = thicknessGroovesMap.get(thick).map(g =>\r\n {\r\n let newg = g.Clone();\r\n newg.KnifeRadius = 0;\r\n return newg;\r\n });\r\n br.Grooves.length = 0;\r\n br.Grooves.push(...arr);\r\n br.GrooveCheckMerge(false);\r\n\r\n mergeGrooves.push(...br.Grooves);\r\n }\r\n else\r\n {\r\n mergeGrooves.push(...thicknessGroovesMap.get(thick));\r\n }\r\n }\r\n\r\n if (bakGrooves)\r\n {\r\n br.Grooves.length = 0;\r\n br.Grooves.push(...mergeGrooves);\r\n }\r\n }\r\n\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 if (bakGrooves)\r\n {\r\n br.Grooves.length = 0;\r\n br.Grooves.push(...bakGrooves);\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, 1e-4);\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","\r\nimport Flatbush from 'flatbush';\r\nimport { Box3, BoxGeometry, BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, Float32BufferAttribute, FrontSide, Frustum, Geometry, Group, InstancedInterleavedBuffer, InterleavedBufferAttribute, LineSegments, Material, Matrix3, Matrix4, Mesh, Object3D, Line as TLine, UVGenerator, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { SplitPolyline } from '../../Add-on/BoardCutting/SplitPolyline';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { arrayClone, arrayLast, arrayRemoveIf, arraySortByNumber, arraySum } from \"../../Common/ArrayExt\";\r\nimport { CSGIntersect } from '../../Common/CSGIntersect';\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { equalCurve } from \"../../Common/CurveUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { InteractionLog, Log, LogType } from \"../../Common/Log\";\r\nimport { MakeMirrorMtx, TransformVector, Vector2ApplyMatrix4, reviseMirrorMatrix, tempMatrix1 } from \"../../Common/Matrix4Utils\";\r\nimport { Status, UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { BSPGroupParse } from '../../Geometry/BSPGroupParse';\r\nimport { GetSideCuFaceMtx } from '../../Geometry/Board2DModelCSG/BoardSideModelCSGBuilder';\r\nimport { boardUVGenerator } from \"../../Geometry/BoardUVGenerator\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { FastExtrudeEdgeGeometry, FastExtrudeEdgeGeometryOfShape, FastWireframe } from \"../../Geometry/CreateWireframe\";\r\nimport { ParseBoardSideFace } from '../../Geometry/DrillParse/BoardGetFace';\r\nimport { EdgesGeometry } from \"../../Geometry/EdgeGeometry\";\r\nimport { ExtrudeGeometryBuilder } from \"../../Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2\";\r\nimport { AsVector2, IdentityMtx4, MoveMatrix, XAxis, YAxis, ZAxis, ZeroVec, equaln, equalv2, equalv3, isIntersect, isParallelTo, isPerpendicularityTo } from \"../../Geometry/GeUtils\";\r\nimport { OBB } from \"../../Geometry/OBB/obb\";\r\nimport { ScaleUV, ScaleUV2 } from \"../../Geometry/UVUtils\";\r\nimport { GetBoardContour } from '../../GraphicsSystem/CalcEdgeSealing';\r\nimport { ColorInTransparent, RenderState, 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 { Shape2 } from '../Shape2';\r\nimport { ShapeManager } from \"../ShapeManager\";\r\nimport { Spline } from \"../Spline\";\r\nimport { Board } from \"./Board\";\r\nimport { Circle } from \"./Circle\";\r\nimport { Curve } from './Curve';\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 private _DisplayAccuracy = 0;\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 protected bevelEnabled = false;\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 */\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\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?.IsFull);\r\n let isf_new = Boolean(materialId?.Object?.IsFull);\r\n if (isf_old !== isf_new)\r\n this.Update();\r\n else if (materialId?.Object?.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 DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n get KnifeRadius()\r\n {\r\n return this.knifeRadius;\r\n }\r\n set KnifeRadius(v: number)\r\n {\r\n if (!equaln(v, this.knifeRadius))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.knifeRadius = v;\r\n\r\n //在双击板修改的时候,我们希望它能修改绘制版本,这样它的关联实体也会被刷新\r\n this.__UpdateVersion__++;\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone);\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 let normal = this.Normal.negate();\r\n\r\n for (let g of this.grooves)\r\n {\r\n g._SpaceOCS.copy(this._SpaceOCS);//因为在镜像(Extrude.ApplyMirrorMatrix)的时候 没有设置这个会导致错误(参考该函数的代码,似乎是为了实现柜子镜像) 所以拷贝一下\r\n g.objectId = new ObjectId;\r\n g.ApplyMatrix(m);\r\n\r\n //如果是镜像,如果槽的方向相反了,那么需要修正\r\n let gNormal = g.Normal;\r\n if (equalv3(normal, gNormal, 1e-3))\r\n {\r\n let p = g.Position.add(gNormal.multiplyScalar(g.thickness * 0.5));\r\n g.ApplyMatrix(MakeMirrorMtx(normal, p));\r\n }\r\n\r\n g.objectId = undefined;\r\n }\r\n\r\n \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\r\n //实现了这个函数后 实现了柜子的镜像\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n const curve = this.ContourCurve;\r\n if (curve instanceof Polyline && !equalv3(curve.Position, ZeroVec))//移除多段线的OCS(目前只判断了基点)\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 Vector2ApplyMatrix4(ocs, p.pt);\r\n curve.OCS = IdentityMtx4;\r\n }\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 curve.ApplyMatrix(new Matrix4().makeRotationX(Math.PI));\r\n else\r\n reviseMirrorMatrix(curve.OCSNoClone, 1);\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 curve.ApplyMatrix(new Matrix4().makeRotationY(Math.PI));\r\n else\r\n reviseMirrorMatrix(curve.OCSNoClone, 0);\r\n\r\n this.SetContourCurve(curve);\r\n }\r\n\r\n if (this.grooves.length)\r\n this.Update(UpdateDraw.Geometry);\r\n\r\n return this;\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-4))//避免18.0009 无法改成 18\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 //修复#I7CBHO的过程中 直接修改了这个属性\r\n get Grooves()\r\n {\r\n return this.grooves;\r\n }\r\n\r\n //侧面造型\r\n get SideModelingMap(): Map\r\n {\r\n return undefined;\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 // 默认轮廓都是白的\r\n this.contourCurve.ColorIndex = 7;\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 */\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!`, LogType.Warning);\r\n this.isRect = equaln(this.width * this.height, this.ContourCurve.Area, 0.1);\r\n\r\n // if (area2 < 0)\r\n // this.contourCurve.Reverse();//矩形板的封边与排钻不需要考虑 异形板的排钻封边可能会错误(无所谓了)\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 TransformVector(box.min, this.OCSNoClone);\r\n this._Matrix.setPosition(this.Position.add(box.min));\r\n }\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() { return this.GetShape(false); }\r\n\r\n private GetShape(filterSmallGroove = false)\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) && (!filterSmallGroove || g.ContourCurve.Area > HostApplicationServices.smallGrooveThreshold))\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, 1e-3)\r\n && equaln(0, targetZMin, 2e-3))\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\r\n if (unionShapes.length === 1)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n //防止重复添加\r\n this.grooves = this.grooves.filter((g) => !equaln(g.thickness, target.thickness, 1e-3));//过滤掉一样的 因为已经在shape里\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 for (let tg of target.grooves)\r\n if (!equaln(tg.thickness, target.thickness, 1e-3))//过滤掉一样的 因为已经在shape里\r\n this.grooves.push(tg.Clone());\r\n\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 \r\n return false;\r\n }\r\n\r\n //将相交部分转换为正反面槽或侧槽\r\n ParseGrooves(knifeExtrudes: ExtrudeSolid[])\r\n {\r\n let faces: ParseBoardSideFace;\r\n let con: ExtrudeContourCurve;\r\n let inverseZ: boolean;\r\n let cus: Curve[];\r\n let mirrorMtxZ: Matrix4;\r\n\r\n let grooves: ExtrudeSolid[] = [];\r\n let relevanceSideModelMap: Map = new Map();\r\n\r\n //切割的侧槽\r\n const GetSideModelList = (extrude: ExtrudeSolid) =>\r\n {\r\n let knifeCon = extrude.ContourCurve.Clone();\r\n let knifeConIsCircle = knifeCon instanceof Circle;\r\n\r\n if (this instanceof Board)\r\n {\r\n let intersectFaceIndex = 0;\r\n let intersectFaceIndexs: number[] = [];\r\n\r\n if (!faces)\r\n {\r\n faces = new ParseBoardSideFace(this);\r\n con = GetBoardContour(this);\r\n if (!con) return;\r\n\r\n inverseZ = con.Area2 < 0;\r\n cus = con.Explode() as Curve[];\r\n mirrorMtxZ = MakeMirrorMtx(ZAxis);\r\n }\r\n\r\n //相交SCG\r\n //使用克隆 防止正反面槽mesh丢失\r\n let cloneEnt = this.Clone();\r\n let interCSG = CSGIntersect(cloneEnt.CSG, extrude.CSG, this.OCSInv.multiply(extrude.OCS));\r\n\r\n //转换至相交面的尺寸\r\n let topology = new BSPGroupParse(interCSG as any);\r\n let ptsList = topology.Parse();\r\n\r\n for (let pts of ptsList)\r\n {\r\n // ------- 求相交面索引 begin ----------\r\n intersectFaceIndexs = [];\r\n let checkBox = new Box3Ext().setFromPoints(pts);\r\n\r\n for (let i = 0; i < faces.Faces.length; i++)\r\n {\r\n let face = faces.Faces[i];\r\n let region = face.Region.Clone();\r\n region.ApplyMatrix(this.OCSInv.multiply(face.OCS));\r\n if (checkBox.intersectsBox(region.BoundingBox, 1e-3))\r\n intersectFaceIndexs.push(i);\r\n }\r\n\r\n if (!intersectFaceIndexs.length)\r\n {\r\n InteractionLog([{ msg: `${this.Name}`, entity: [this] }, { msg: \"侧面造型切割面解析失败, 无法生成侧面造型!\" }], LogType.Error);\r\n continue;\r\n }\r\n else if (intersectFaceIndexs.length === 1)\r\n intersectFaceIndex = intersectFaceIndexs[0];\r\n else\r\n {\r\n //截面小的为正面\r\n intersectFaceIndexs.sort((i, j) =>\r\n {\r\n let faceOCSInv1 = faces.Faces[i].OCSInv;\r\n let faceOCSInv2 = faces.Faces[j].OCSInv;\r\n let box1 = checkBox.clone().applyMatrix4(this.OCS).applyMatrix4(faceOCSInv1).getSize(new Vector3);\r\n let box2 = checkBox.clone().applyMatrix4(this.OCS).applyMatrix4(faceOCSInv2).getSize(new Vector3);\r\n\r\n return knifeConIsCircle ? box1.x - box2.x : box2.x - box1.x;\r\n });\r\n intersectFaceIndex = intersectFaceIndexs[0];\r\n }\r\n\r\n intersectFaceIndexs = [];\r\n // ------- 求相交面索引 end ----------\r\n\r\n const faceMtx = GetSideCuFaceMtx(cus[intersectFaceIndex], inverseZ);\r\n const faceMtxInv = new Matrix4().getInverse(faceMtx);\r\n const faceMtxOnBoard = this.OCS.multiply(faceMtx).multiply(mirrorMtxZ);\r\n const mtx = new Matrix4().getInverse(faceMtx.clone().multiply(mirrorMtxZ));\r\n\r\n //测试绘制\r\n // TestDrawGeom3s([interCSG], 1);\r\n let sideModelCon: ExtrudeContourCurve;\r\n\r\n let yv = extrude.Normal;\r\n let zv = new Vector3().setFromMatrixColumn(faceMtxOnBoard, 2);\r\n if (isParallelTo(yv, zv))\r\n {\r\n sideModelCon = knifeCon.Clone();\r\n\r\n yv = new Vector3().setFromMatrixColumn(extrude.OCS, 0);\r\n }\r\n\r\n let xv = yv.clone().cross(zv);\r\n yv.copy(zv).cross(xv);\r\n xv.normalize();\r\n yv.normalize();\r\n zv.normalize();\r\n\r\n const grooveMtx = new Matrix4().makeBasis(xv, yv, zv).copyPosition(faceMtxOnBoard);\r\n const grooveMtxInv = new Matrix4().getInverse(grooveMtx).multiply(faceMtxOnBoard).multiply(mtx);\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(grooveMtxInv);\r\n\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 solid = new ExtrudeSolid();\r\n solid.groovesAddDepth = extrude.groovesAddDepth;\r\n solid.groovesAddLength = extrude.groovesAddLength;\r\n solid.groovesAddWidth = extrude.groovesAddWidth;\r\n solid.knifeRadius = extrude.knifeRadius;\r\n solid.ConverToRectSolid(size.x, size.y, size.z);\r\n\r\n if (sideModelCon)\r\n {\r\n if (sideModelCon instanceof Circle)\r\n {\r\n if (equaln(size.x, size.y))\r\n solid.ContourCurve = sideModelCon;\r\n else\r\n {\r\n //保留圆形切割\r\n const r = (sideModelCon as Circle).Radius * 2;\r\n const cuLength = cus[intersectFaceIndex].Length;\r\n let splitLeft = false;\r\n\r\n let intersectX = 0;\r\n if (equaln(box.min.x, 0))\r\n intersectX = r - box.max.x + sideModelCon.BoundingBox.min.x;\r\n else\r\n {\r\n splitLeft = true;\r\n intersectX = cuLength - box.min.x + sideModelCon.BoundingBox.min.x;\r\n }\r\n\r\n let starKnifePls = new Polyline([{ pt: AsVector2({ x: intersectX, y: 1 }), bul: 0 }, { pt: AsVector2({ x: intersectX, y: 0 }), bul: 0 }]);\r\n let faceRegions = SplitPolyline(sideModelCon as unknown as Polyline, [starKnifePls]);\r\n faceRegions = faceRegions.filter((faceRegion) =>\r\n {\r\n let x = faceRegion.BoundingBox.getCenter(new Vector3).x;\r\n return splitLeft ? x < intersectX : x > intersectX;\r\n });\r\n\r\n if (faceRegions.length)\r\n solid.ContourCurve = faceRegions[0];\r\n }\r\n\r\n solid.ApplyMatrix(grooveMtx.clone().setPosition(box.min.applyMatrix4(grooveMtx)).multiply(mirrorMtxZ));\r\n solid.ApplyMatrix(this.OCSInv);\r\n solid.ApplyMatrix(faceMtxInv);\r\n }\r\n else\r\n {\r\n sideModelCon.ApplyMatrix(new Matrix4().setPosition(sideModelCon.BoundingBox.min.negate()));\r\n sideModelCon.ApplyMatrix(extrude.OCS);\r\n sideModelCon.ApplyMatrix(this.OCSInv);\r\n sideModelCon.ApplyMatrix(new Matrix4().getInverse(faceMtx));\r\n solid.ContourCurve = sideModelCon;\r\n //确保侧面造型槽solid在XY平面上\r\n solid.Z0();\r\n }\r\n }\r\n else\r\n {\r\n solid.ApplyMatrix(grooveMtx.clone().setPosition(box.min.applyMatrix4(grooveMtx)).multiply(mirrorMtxZ));\r\n solid.ApplyMatrix(this.OCSInv);\r\n solid.ApplyMatrix(faceMtxInv);\r\n }\r\n\r\n let sideModelList = relevanceSideModelMap.get(intersectFaceIndex);\r\n if (sideModelList)\r\n sideModelList.push(solid);\r\n else\r\n sideModelList = [solid];\r\n\r\n relevanceSideModelMap.set(intersectFaceIndex, sideModelList);\r\n }\r\n }\r\n };\r\n\r\n for (let extrude of knifeExtrudes)\r\n {\r\n let gs = this.ConverToLocalGroove(extrude);\r\n\r\n if (gs.length)\r\n {\r\n let sideGrooves: ExtrudeSolid[] = [];\r\n for (let g of gs)\r\n {\r\n //侧槽\r\n if (this.GrooveCheckPosition(g) === Status.Side)\r\n sideGrooves.push(g);\r\n else\r\n grooves.push(g);\r\n }\r\n\r\n if (sideGrooves.length)\r\n {\r\n if (sideGrooves.length === gs.length)\r\n GetSideModelList(extrude);\r\n else\r\n {\r\n for (let g of sideGrooves)\r\n GetSideModelList(g);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return { grooves, relevanceSideModelMap };\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 /**\r\n * 添加侧面槽\r\n * 通常槽已经校验过准确性,所以不在校验\r\n */\r\n AppendRelevanceSideModel(relevanceSideModelMap: Map)\r\n {\r\n if (this instanceof Board)\r\n {\r\n this.ClearSideModelingCache();\r\n this.RelevanceSideModelMap = relevanceSideModelMap;\r\n }\r\n }\r\n\r\n AppendSideModel(relevanceSideModelMap: Map)\r\n {\r\n if (relevanceSideModelMap.size && this instanceof Board)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n const sideModelMap: Map = this.SideModelingMap;\r\n\r\n for (let [num, soilds] of relevanceSideModelMap)\r\n {\r\n let ss: ExtrudeSolid[] = this.SideModelingMap.get(num) ?? [];\r\n\r\n for (let soild of soilds)\r\n ss.push(soild);\r\n\r\n sideModelMap.set(num, ss);\r\n }\r\n this.SideModelingMap = sideModelMap;\r\n }\r\n }\r\n\r\n override GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3,\r\n frustum?: Frustum,\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripOrStretchPoints(DragPointType.End);\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 {\r\n if (!frustum || frustum.intersectsBox(g.BoundingBox))\r\n pts.push(...g.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum));\r\n }\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 pts: Vector3[];\r\n if (dragType === DragPointType.Grip)\r\n pts = this.ContourCurve.GetGripPoints();\r\n else if (dragType === DragPointType.Stretch)\r\n pts = this.ContourCurve.GetStretchPoints();\r\n else if (dragType === DragPointType.End)\r\n {\r\n if (this.contourCurve instanceof Circle)\r\n pts = this.ContourCurve.GetGripPoints();\r\n else\r\n pts = this.ContourCurve.GetStretchPoints();\r\n }\r\n else\r\n pts = [];\r\n\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 const isGrip = dragType === DragPointType.Grip;\r\n\r\n if (!isGrip && 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 && !this.HasSideModel)\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 let sideModelIndex = -1;\r\n\r\n let cus: Curve[];\r\n let baseIndexList: Set = new Set();\r\n let sideModelSealCurveMtxCache: Map = new Map();\r\n\r\n //获取侧面的OCS\r\n const GetSideModelSealCurveMtx = (num: number): Matrix4 =>\r\n {\r\n if (!cus) cus = GetBoardContour(this as unknown as Board)?.Explode() as Curve[];\r\n let mtx = sideModelSealCurveMtxCache.get(num);\r\n\r\n if (!mtx && cus?.length)\r\n {\r\n let cu = cus[num];\r\n if (!cu) return new Matrix4;\r\n\r\n let x = cu.GetFirstDeriv(0).normalize().applyMatrix4(this.OCS.setPosition(0, 0, 0));\r\n let y = this.Normal;\r\n let z = x.clone().cross(y);\r\n mtx = new Matrix4().getInverse(new Matrix4().makeBasis(x, y, z));\r\n\r\n sideModelSealCurveMtxCache.set(num, mtx);\r\n }\r\n\r\n return mtx ?? new Matrix4;\r\n };\r\n\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 {\r\n let orgCus: Curve[];\r\n\r\n if (this.HasSideModel)\r\n orgCus = GetBoardContour(this as unknown as Board)?.Explode() as Curve[];\r\n\r\n this.MoveGripOrStretchPointsOnly(ilist, vec, dragType);\r\n\r\n if (this.HasSideModel)\r\n {\r\n //修正点的索引 判断侧面造型的起点是否被移动\r\n let stretchCount = this.ContourCurve.GetDragPointCount(dragType);\r\n for (let num of ilist)\r\n {\r\n if (num < stretchCount)\r\n baseIndexList.add(num);\r\n else\r\n baseIndexList.add(num - stretchCount);\r\n }\r\n let isChangeThiness = this.IsStretchThickness(Array.from(baseIndexList));\r\n //起点被拉伸时反向移动 达到相对静止状态\r\n const sideModelingMap: Map = this.SideModelingMap;\r\n\r\n for (let [num, soilds] of sideModelingMap)\r\n {\r\n let firstIndex = num;\r\n let secondIndex = (num + 1) === stretchCount ? 0 : num + 1;\r\n\r\n if (isGrip)\r\n {\r\n firstIndex = num * 2;\r\n //拉取中点时\r\n secondIndex = (firstIndex - 1) < 0 ? (stretchCount - 1) : (firstIndex - 1);\r\n }\r\n\r\n //Grip的时候点选中点时两边相连的 也反向移动 firstIndex - 1\r\n if (\r\n !isGrip && (baseIndexList.has(firstIndex) && !baseIndexList.has(secondIndex)) ||\r\n isGrip && (baseIndexList.has(firstIndex) || baseIndexList.has(secondIndex)) ||\r\n isChangeThiness && ilist[0] < stretchCount\r\n )\r\n {\r\n for (let s of soilds)\r\n {\r\n let mtx = GetSideModelSealCurveMtx(num);\r\n let v = vec.clone().applyMatrix4(mtx).setZ(0);\r\n if (isChangeThiness)\r\n {\r\n v.setX(0);\r\n }\r\n else\r\n {\r\n if (cus?.length && cus[num] && orgCus)\r\n v = new Vector3(orgCus[num].Length - cus[num].Length);\r\n else\r\n v.setY(0);\r\n }\r\n\r\n s.ApplyMatrix(new Matrix4().setPosition(v.clone().multiplyScalar(-1)));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else if (grooveIndex < this.grooves.length)\r\n this.grooves[grooveIndex].MoveGripOrStretchPoints(ilist, vec, dragType);\r\n else\r\n {\r\n //侧面造型拉伸\r\n const sideModelingMap: Map = this.SideModelingMap;\r\n\r\n let soildCount = 0;\r\n const isMainChangeThiness = this.IsStretchThickness(Array.from(baseIndexList));\r\n\r\n for (let [num, soilds] of sideModelingMap)\r\n {\r\n soildCount += soilds.length;\r\n\r\n if (sideModelIndex < soildCount)\r\n {\r\n let mtx = GetSideModelSealCurveMtx(num);\r\n let v = vec.clone().applyMatrix4(mtx);\r\n\r\n if (isMainChangeThiness) v.setX(0);\r\n\r\n let soild = soilds[soilds.length - (soildCount - sideModelIndex)];\r\n const stretchPtLength = soild.ContourCurve.GetStretchPoints().length;\r\n const firstIndex = num;\r\n const secondIndex = (num + 1) === stretchPtLength ? 0 : num + 1;\r\n\r\n const mainSoildIList: number[] = [];\r\n const grooveSoildIList: number[] = [];\r\n\r\n for (let k of ilist)\r\n {\r\n if (k < stretchPtLength * 2)\r\n mainSoildIList.push(k);\r\n else\r\n grooveSoildIList.push(k);\r\n }\r\n\r\n //改变侧面造型厚度\r\n if (soild.IsStretchThickness(mainSoildIList))\r\n {\r\n if (mainSoildIList.every(i => i >= stretchPtLength))\r\n {\r\n //造型 底边\r\n v.setZ(-v.z);\r\n }\r\n else if ((baseIndexList.has(firstIndex) && baseIndexList.has(secondIndex)))\r\n {\r\n //造型见光面 和侧面一起移动\r\n ilist = [];\r\n for (let k = 0; k < stretchPtLength; k++)\r\n ilist.push(k + stretchPtLength);\r\n\r\n //有选中子槽端点 默认一起改变\r\n if (grooveSoildIList.length)\r\n {\r\n const grooveStretchPtLength = soild.grooves[0].ContourCurve.GetStretchPoints().length;\r\n\r\n for (let k = 0; k < grooveStretchPtLength; k++)\r\n ilist.push(k + grooveStretchPtLength + stretchPtLength * 2);\r\n }\r\n }\r\n else\r\n break;\r\n }\r\n else if (!isMainChangeThiness && baseIndexList.has(firstIndex) && baseIndexList.has(secondIndex))\r\n break;\r\n else\r\n v.setZ(0);\r\n\r\n soild.MoveGripOrStretchPoints(ilist, v, dragType);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n grooveIndex++;\r\n\r\n if (grooveIndex >= this.grooves.length)\r\n sideModelIndex++;\r\n }\r\n }\r\n\r\n if (this.objectId || this.IsEmbedEntity)\r\n {\r\n this.CheckContourCurve();\r\n let splitEntitys: this[] = [];\r\n this.GrooveCheckAll(splitEntitys);\r\n\r\n if (this.HasSideModel)\r\n {\r\n let board = (this as unknown as Board);\r\n board.SplitBoardSideModelUtil.Init(board);\r\n board.SplitBoardSideModelUtil.SpiltSideModelOfBrContour(board);\r\n board.SplitBoardSideModelUtil.SpiltSideModelOfBrThickness(board, board.Thickness);\r\n }\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.GetFirstDeriv(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\r\n /**\r\n * (步骤2)\r\n * 更新凹槽位置和厚度(校验凹槽的Z轴位置是否存在交集)\r\n */\r\n GrooveCheckPosition(target: ExtrudeSolid): Status\r\n {\r\n if (target.Width < 1e-1 || target.Height < 1e-1 || target.Thickness < 1e-1)\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-2) && minZ > 0 && (this.thickness - minZ) > 0.01)//正面\r\n target.Thickness = this.thickness - minZ;\r\n else if (minZ > 1e-2 && maxZ < (this.thickness - 1e-2))\r\n return Status.Side;\r\n else\r\n return Status.False;\r\n\r\n if (equaln(target.thickness, this.thickness, 1e-2))\r\n target.thickness = this.thickness;\r\n\r\n return target.thickness > 1e-2 ? Status.True : Status.False;\r\n }\r\n\r\n /**\r\n * (步骤3)\r\n * 计算凹槽合并\r\n */\r\n GrooveCheckMerge(checkGrooveContourCurve = true)\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 (checkGrooveContourCurve && 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 groove 凹槽(不拷贝,直接被修改)\r\n * @returns this[] 凹槽在本实体中正确的约束状态.(可能分裂成为多个)\r\n */\r\n private GrooveCheckContour(groove: ExtrudeSolid): ExtrudeSolid[]\r\n {\r\n let matrixToTarget = groove.OCSInv.multiply(this.OCS);\r\n matrixToTarget.elements[14] = 0;//z->0\r\n\r\n //理论上只有大洞才需要优化,小洞无所谓了\r\n let thisShape = this.GetShape(true).ApplyMatrix(matrixToTarget);\r\n let targetShape = new Shape(Contour.CreateContour([groove.ContourCurve.Clone()], false));\r\n\r\n let inters = thisShape.IntersectionBoolOperation(targetShape);\r\n\r\n if (inters.length === 1)\r\n {\r\n groove.ContourCurve = inters[0].Outline.Curve;\r\n let grooves = [groove];\r\n groove.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 = groove.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.1) 针对圆弧板-修正路径 */\r\n AdjustPath(ext: ExtrudeSolid, outline: Polyline | Circle) { }\r\n /** (步骤4.2.2) 针对圆弧板-修正位置 */\r\n AdjustPosition(ext: ExtrudeSolid, basePoint: Vector3) { }\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 allDepthGrooves: 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(\r\n Contour.CreateContour([grooveCurve], false),\r\n groove.grooves.filter(g => equaln(g.thickness, groove.thickness)).map(g =>\r\n {\r\n let gc = g.ContourCurve.Clone();\r\n let mtx = g.OCS.premultiply(groove.OCSInv).premultiply(matrixToLocal);\r\n gc.ApplyMatrix(mtx);\r\n return Contour.CreateContour([gc], false);\r\n })\r\n )\r\n );\r\n\r\n allDepthGrooves.push(groove);\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n // 测试绘制黄色为原始轮廓 红色为切割轮廓\r\n // TestDraw(new Region(shapeManager).Clone(), 2);\r\n // TestDraw(new Region(subtractShape).Clone(), 1);\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 === allDepthGrooves.length)\r\n {\r\n //在拉伸夹点后,全深槽如果不改原始的板的信息,那么它无法在递归检查,这个时候如果不校验,那么它将不会在被校验\r\n for (let g of allDepthGrooves)\r\n g.CheckContourCurve();\r\n\r\n this.grooves.push(...allDepthGrooves);\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\r\n //#endregion 保持旧的槽数据 (必须在这里写代码 因为下面会修改hole.Curve)\r\n let p = hole.Curve.StartPoint;\r\n let oldGrooveIndex = subtractShape.ShapeList.findIndex(s => s.Outline.Curve.PtOnCurve(p));\r\n let oldGroove = allDepthGrooves[Math.max(oldGrooveIndex, 0)];\r\n\r\n groove.knifeRadius = oldGroove.knifeRadius;\r\n groove.groovesAddWidth = oldGroove.groovesAddWidth;\r\n groove.groovesAddDepth = oldGroove.groovesAddDepth;\r\n groove.groovesAddLength = oldGroove.groovesAddLength;\r\n //#endregion\r\n\r\n groove.OCS = this.OCSNoClone;\r\n groove.ContourCurve = hole.Curve;\r\n groove.thickness = this.thickness;\r\n\r\n ext.grooves.push(groove);\r\n }\r\n const shapeOutline = shape.Outline.Curve.Clone();\r\n // 针对圆弧板-修正路径\r\n this.AdjustPath(ext, shapeOutline);\r\n const shapeBasePoint = shape.Outline.Curve.StartPoint;\r\n ext.ContourCurve = shape.Outline.Curve;\r\n ext.GrooveCheckAll(splitEntitys);\r\n // 针对圆弧板-修正位置\r\n this.AdjustPosition(ext, shapeBasePoint);\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\r\n //#endregion 保持旧的槽数据 (必须在这里写代码 因为下面会修改hole.Curve)\r\n let p = hole.Curve.StartPoint;\r\n let oldGrooveIndex = subtractShape.ShapeList.findIndex(s => s.Outline.Curve.PtOnCurve(p));\r\n let oldGroove = allDepthGrooves[Math.max(oldGrooveIndex, 0)];\r\n\r\n groove.knifeRadius = oldGroove.knifeRadius;\r\n groove.groovesAddWidth = oldGroove.groovesAddWidth;\r\n groove.groovesAddDepth = oldGroove.groovesAddDepth;\r\n groove.groovesAddLength = oldGroove.groovesAddLength;\r\n //#endregion\r\n\r\n groove.OCS = this.OCSNoClone;\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 变更:2024/4/9 现在允许全深槽的子槽 会将板分裂成2个 由于一个奇怪的用例 ref:https://gitee.com/cf-fz/WebCAD/pulls/2667\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 this.IsLazyGrooveCheck = false;\r\n if (this.IsNeedGrooveCheck)\r\n this.GrooveCheckAllAutoSplit();\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.DrawColorIndex, this.Freeze));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, this.GetConceptualMaterial()),\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 //在同步反应器中,当存在关联拉槽的实体和本实体一起被删除后,会更新本实体,然后导致同步认为它没有子实体\r\n if (this._isErase) return false;\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 protected 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 //如果是切割圆弧板或刀是圆弧板,先不切割\r\n // if (this instanceof Board && this.IsArcBoard) knifs = [];\r\n // knifs = knifs.filter(e => !(e instanceof Board && e.IsArcBoard));\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(true);\r\n tempExtrude.RelevanceKnifs.length = 0;//避免递归\r\n\r\n if (tempExtrude instanceof Board)\r\n tempExtrude.SideModelingMap.clear();\r\n\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\r\n if (tempExtrude instanceof Board)\r\n this.AppendRelevanceSideModel(tempExtrude.SideModelingMap);\r\n\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 //因为这里更新了mesh geom 所以我们必须更新它.\r\n this._MeshGeometry = this.UpdateMeshGeom(this._MeshGeometry);\r\n this._MeshGeometry[\"IsMesh\"] = true;\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 InteractionLog([{ msg: `${this.Name}(${id.Index})`, entity: [this] }, { msg: \"关联槽已逃离!\" }], LogType.Warning);\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 {\r\n InteractionLog([{ msg: `${this.Name}(${this.Id.Index})`, entity: [this] }, { msg: \"关联槽已逃离或者被清除!\" }], LogType.Warning);\r\n //清除关联侧槽\r\n this.AppendRelevanceSideModel(new Map());\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 protected _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 this._EdgeGeometry = undefined;//清理掉(以便在被csg切割后得到edgegeom)\r\n\r\n let grooves = this.Grooves;\r\n /**\r\n * 如果要板件圆造型的挖穿跟不挖穿的效果一致\r\n * 则把下段代码的判断,改为 if (grooves.length === 0)\r\n */\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 < MaxDrawGrooveCount)\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 UVGenerator: this.UCGenerator,\r\n depth: this.bevelEnabled ? this.thickness - 4 : this.thickness,\r\n bevelEnabled: this.bevelEnabled,\r\n bevelThickness: 2,\r\n bevelSize: 2,\r\n bevelOffset: -2,\r\n bevelSegments: 1,\r\n };\r\n shape.DisplayAccuracy = this._DisplayAccuracy;\r\n let geo = new ExtrudeGeometry(shape.Shape, extrudeSettings);\r\n geo.applyMatrix4(contour.OCSNoClone);\r\n\r\n if (this.bevelEnabled)\r\n geo.translate(0, 0, 2);\r\n\r\n this.UpdateUV(geo, contour.OCSNoClone);\r\n //板在某些时候需要布尔运算(二维刀路)\r\n this._MeshGeometry = this.UpdateMeshGeom(geo);\r\n this._MeshGeometry[\"IsMesh\"] = true;\r\n\r\n let mtl = this.Material?.Object as PhysicalMaterialRecord ?? this.Db?.DefaultMaterial;\r\n if (mtl?.UseWorldUV)\r\n {\r\n //类型转换\r\n if (this._MeshGeometry instanceof Geometry)\r\n this._MeshGeometry = new BufferGeometry().fromGeometry(this._MeshGeometry);\r\n let gen = new GenUVForWorld();\r\n gen.GenGeoUV(this._MeshGeometry, mtl.Material);\r\n }\r\n\r\n //edge geometry\r\n if (grooves.length < MaxDrawGrooveCount && !this._EdgeGeometry)//这个代码保证线框和概念对齐\r\n {\r\n let coords = FastExtrudeEdgeGeometryOfShape((shape.Shape as Shape2), 0, this.thickness, 12, true);\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n edgeGeo.applyMatrix4(contour.OCSNoClone);\r\n this._EdgeGeometry = edgeGeo;\r\n }\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n let builder = new ExtrudeGeometryBuilder(this);\r\n\r\n this._MeshGeometry = builder.MeshGeometry;\r\n this._MeshGeometry = this.UpdateMeshGeom(this._MeshGeometry);\r\n if (grooves.length < MaxDrawGrooveCount && !this._EdgeGeometry)\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 //子类重载,用于二次计算几何体(例如二维刀路布尔运算)\r\n UpdateMeshGeom(geo: BufferGeometry | Geometry): BufferGeometry\r\n {\r\n return geo as BufferGeometry;\r\n }\r\n\r\n protected get Has2DPath() { return false; }\r\n protected get HasSideModel() { return false; }\r\n protected _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.Has2DPath && !this.HasSideModel && (this.grooves.length === 0 || this.grooves.every(g => equaln(g.thickness, this.thickness))))\r\n )\r\n {\r\n let coords = FastExtrudeEdgeGeometry(this, this.DrawColorIndex, 12, 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 \r\n\r\n ClearDraw(): this\r\n {\r\n this.UpdateDrawGeometry();\r\n return super.ClearDraw();\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D): 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.DrawColorIndex, this.Freeze);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, this.GetConceptualMaterial()),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())\r\n );\r\n }\r\n else if (renderType === RenderType.ModelGroove)\r\n {\r\n obj.add(\r\n // new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(9, FrontSide, true, this.Freeze)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())\r\n );\r\n obj.add(this.GetModelGroove());\r\n\r\n //侧槽\r\n obj.add(this.GetSideModelGroove());\r\n }\r\n // 概念透明\r\n else if (renderType === RenderType.ConceptualTransparent)\r\n {\r\n let color = this.DrawColorIndex;\r\n if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) color = 8;\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide)),\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 return obj;\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.DrawColorIndex, this.Freeze);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = this.GetConceptualMaterial();\r\n }\r\n // 概念透明\r\n else if (renderType === RenderType.ConceptualTransparent)\r\n {\r\n let color = this.DrawColorIndex;\r\n if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) color = 8;\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide);\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 //获取概念视图材质 冻结状态使用257色号 半透明\r\n private GetConceptualMaterial()\r\n {\r\n let mtl: Material;\r\n if (this.Freeze)\r\n mtl = ColorMaterial.GetBasicMaterialTransparent2(257, 0.5);\r\n else\r\n mtl = ColorMaterial.GetConceptualMaterial(this.DrawColorIndex, FrontSide, true);\r\n\r\n return mtl;\r\n }\r\n\r\n private GetModelGroove()\r\n {\r\n const grooves: ExtrudeSolid[] = [];\r\n for (const sp of this.__CacheSplitExtrudes ?? [])\r\n {\r\n grooves.push(...sp.grooves);\r\n }\r\n const group = new Group();\r\n for (const groove of grooves)\r\n {\r\n const grooveClone = groove.Clone();\r\n grooveClone.UpdateDrawGeometry();\r\n const mtx = new Matrix4().premultiply(grooveClone.OCSNoClone).premultiply(this.OCSInv);\r\n\r\n const edgeGeo = grooveClone.EdgeGeometry;\r\n edgeGeo.applyMatrix4(mtx);\r\n const line = new LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(1, this.Freeze));\r\n\r\n const meshGeo = grooveClone.MeshGeometry;\r\n meshGeo.applyMatrix4(mtx);\r\n const mesh = new Mesh(meshGeo, ColorMaterial.GetBasicMaterialTransparent2(1, 0.6));\r\n group.add(mesh, line);\r\n }\r\n return group;\r\n }\r\n\r\n private GetSideModelGroove()\r\n {\r\n let board = this as unknown as Board;\r\n\r\n const AllSideModelGrooveMap = board.AllSideModelGrooveMap;\r\n const group = new Group();\r\n\r\n if (AllSideModelGrooveMap.size)\r\n {\r\n let con = GetBoardContour(board);\r\n if (!con) return group;\r\n\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n const mirrorMtxZ = MakeMirrorMtx(ZAxis);\r\n\r\n for (let [index, soilds] of AllSideModelGrooveMap)\r\n {\r\n let cu = cus[index];\r\n if (!cu) continue;\r\n\r\n let mt4 = GetSideCuFaceMtx(cus[index], inverseZ);\r\n\r\n for (let soild of soilds)\r\n {\r\n const edgeGeo = soild.EdgeGeometry;\r\n const line = new LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(1, this.Freeze));\r\n line.applyMatrix4(mirrorMtxZ);\r\n line.applyMatrix4(mt4.clone().multiply(soild.OCS));\r\n\r\n const meshGeo = soild.MeshGeometry;\r\n const mesh = new Mesh(meshGeo, ColorMaterial.GetBasicMaterialTransparent2(1, 0.6));\r\n mesh.applyMatrix4(mirrorMtxZ);\r\n mesh.applyMatrix4(mt4.clone().multiply(soild.OCS));\r\n group.add(mesh, line);\r\n }\r\n }\r\n }\r\n\r\n return group;\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 if (ver > 3)\r\n {\r\n this._DisplayAccuracy = file.Read();\r\n }\r\n }\r\n private WriteFileOnly(file: CADFiler)\r\n {\r\n file.Write(4);\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 file.Write(this._DisplayAccuracy);\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 { Frustum, Matrix3, Matrix4, Object3D, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\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 { EMetalsType } from \"../../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { HardwareCompositeEntity } from \"../Hardware/HardwareCompositeEntity\";\r\nimport { LayerTableRecord } from \"../LayerTableRecord\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { PhysicalMaterialRecord } from \"../PhysicalMaterialRecord\";\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 if (!e.Db && this._db)\r\n e.SetDatabase(this._db);\r\n let cloneE = e.Clone(false);\r\n if (!(cloneE instanceof CompositeEntity))\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 if (renderType === RenderType.ModelGroove || renderType === RenderType.Edge) return; //造型槽和封边模式下不显示五金\r\n for (let e of this.Entitys)\r\n {\r\n e.IsEmbedEntity = true;\r\n e.ParentEntity = this.ParentEntity || this;\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 /** 为了避免_CacheDrawObject中的key错误,这里重写了GetDrawObjectFromRenderType,而不是直接在UpdateDrawObject中修改rtype */\r\n override GetDrawObjectFromRenderType(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (renderType === RenderType.ConceptualTransparent && this instanceof HardwareCompositeEntity)\r\n {\r\n // 未开启五金透明选项时,五金的概念(透明)效果同概念\r\n if (!HostApplicationServices.IsTransparentMetals && this.HardwareOption.type === EMetalsType.Metals)\r\n {\r\n renderType = RenderType.Conceptual;\r\n }\r\n // 组件同理\r\n if (!HostApplicationServices.IsTransparentComp && this.HardwareOption.type === EMetalsType.Comp)\r\n {\r\n renderType = RenderType.Conceptual;\r\n }\r\n }\r\n return super.GetDrawObjectFromRenderType(renderType);\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 get Layer(): ObjectId\r\n {\r\n return super.Layer;\r\n }\r\n\r\n set Layer(id: ObjectId)\r\n {\r\n super.Layer = id;\r\n for (let e of this.Entitys)\r\n {\r\n if (!e.Db) e.SetDatabase(this.Db);\r\n e.Layer = id;\r\n }\r\n }\r\n\r\n SetAllMaterialAtSlot(mtl: ObjectId)\r\n {\r\n if (this.LockMaterial)\r\n return;\r\n this.WriteAllObjectRecord();\r\n this.Traverse(e =>\r\n {\r\n if (e === this)\r\n return;\r\n e.SetAllMaterialAtSlot(mtl);\r\n });\r\n\r\n this.Update(UpdateDraw.Material);\r\n }\r\n\r\n GetMtlLockedStatus()\r\n {\r\n let partMtlLocked = false;\r\n let allMtlLocked = true;\r\n this.Traverse(e =>\r\n {\r\n if (e === this)\r\n return;\r\n const res = e.GetMtlLockedStatus();\r\n if (res.partMtlLocked)\r\n {\r\n partMtlLocked = true;\r\n if (!res.allMtlLocked)\r\n allMtlLocked = false;\r\n }\r\n else\r\n allMtlLocked = false;\r\n });\r\n return {\r\n partMtlLocked,\r\n allMtlLocked,\r\n };\r\n }\r\n\r\n GetPhyMtlRecords(containErased: boolean = false)\r\n {\r\n const materials: PhysicalMaterialRecord[] = [];\r\n\r\n this.Traverse(e =>\r\n {\r\n if (e === this)\r\n return;\r\n const res = e.GetPhyMtlRecords(containErased);\r\n if (res.length)\r\n arrayPushArray(materials, res);\r\n });\r\n\r\n return materials;\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.ModelGroove) return;\r\n this.Traverse(e =>\r\n {\r\n if (e === this)\r\n return;\r\n\r\n let o = e.GetDrawObjectFromRenderType(renderType);\r\n if (o)\r\n e.UpdateDrawObjectMaterial(renderType, o);\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 frustum?: Frustum,\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, frustum));\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 ent.IsEmbedEntity = true;\r\n ent.ParentEntity = this;\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 if (v > 1)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\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.Entitys.length);\r\n for (let e of this.Entitys)\r\n file.WriteObject(e);\r\n\r\n // ver2\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n //#endregion\r\n}\r\n","import { Matrix4 } from \"three\";\r\nimport { 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 /**\r\n * 备注\r\n */\r\n @AutoRecord DataList: [string, string][] = [];\r\n @AutoRecord RelevanceBoards: ObjectId[] = [];\r\n @AutoRecord RelevanceHardware: ObjectId[] = []; //当这个实体为复合板时,关联五金的信息\r\n @AutoRecord RelevanceHandle: 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 ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n super.ApplyMirrorMatrix(m);\r\n\r\n //\"左\",\"右\"互换\r\n if (this.HardwareOption.model.includes(\"左\"))\r\n this.HardwareOption.model = this.HardwareOption.model.replace(\"左\", \"右\");\r\n else if (this.HardwareOption.model.includes(\"右\"))\r\n this.HardwareOption.model = this.HardwareOption.model.replace(\"右\", \"左\");\r\n\r\n return this;\r\n }\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 if (v > 4)\r\n {\r\n let count = file.Read();\r\n this.RelevanceHandle.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.RelevanceHandle.push(objId);\r\n }\r\n }\r\n\r\n if (v > 5)\r\n {\r\n this.HardwareOption.goodsId = file.Read();\r\n this.HardwareOption.goodsSn = file.Read();\r\n }\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\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 file.Write(this.RelevanceHandle.length);\r\n for (let id of this.RelevanceHandle)\r\n file.WriteSoftObjectId(id);\r\n\r\n file.Write(this.HardwareOption.goodsId);\r\n file.Write(this.HardwareOption.goodsSn);\r\n }\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\nconst x = new Vector3;\r\nconst y = new Vector3;\r\n\r\nlet tempPolyline: Polyline;\r\n\r\n\r\n/**\r\n * 转换成多段线点表(pts bul)\r\n * @param cu\r\n * @param [isOutline=true] 如果是外部轮廓,则返回逆时针点表\r\n * @returns pts buls\r\n */\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 ptsBuls = cu.PtsBuls;\r\n\r\n let ocs = cu.OCSNoClone;\r\n //判断是不是被镜像了\r\n x.setFromMatrixColumn(ocs, 0);\r\n y.setFromMatrixColumn(ocs, 1);\r\n let z1 = x.cross(y);\r\n let isMirror = !equaln(z1.z, 1, 1e-3);\r\n\r\n for (let i = 0; i < ptsBuls.pts.length; i++)\r\n {\r\n Vector2ApplyMatrix4(ocs, ptsBuls.pts[i]);\r\n if (isMirror)\r\n ptsBuls.buls[i] *= -1;\r\n }\r\n\r\n if (isOutline && cu.IsClose)\r\n {\r\n tempPolyline = tempPolyline || new Polyline;\r\n tempPolyline.LineData.length = 0;\r\n for (let i = 0; i < ptsBuls.pts.length; i++)\r\n tempPolyline.LineData.push({ pt: ptsBuls.pts[i], bul: ptsBuls.buls[i] });\r\n\r\n if (cu.Area2 < 0)\r\n {\r\n tempPolyline.Reverse();\r\n ptsBuls = tempPolyline.PtsBuls;\r\n }\r\n tempPolyline.LineData.length = 0;\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 { SplitPolyline } from \"../Add-on/BoardCutting/SplitPolyline\";\r\nimport { FaceDirection } from \"../Add-on/DrawDrilling/DrillType\";\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 { InteractionLog, LogType } from \"../Common/Log\";\r\nimport { Intent, Toaster, ToasterShowEntityMsg } from \"../Common/Toaster\";\r\nimport { FixedNotZero } from \"../Common/Utils\";\r\nimport { ParseExpr, safeEval } from \"../Common/eval\";\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 { BoardOpenDir } from \"../DatabaseServices/Entity/BoardInterface\";\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 { GroupRecord } from \"../DatabaseServices/GroupTableRecord\";\r\nimport { HardwareCompositeEntity } from \"../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { HardwareTopline } from \"../DatabaseServices/Hardware/HardwareTopline\";\r\nimport { Shape } from \"../DatabaseServices/Shape\";\r\nimport { ParseBoardSideFace } from \"../Geometry/DrillParse/BoardGetFace\";\r\nimport { CanDrawHoleFuzz } from \"../Geometry/DrillParse/CanDrawHoleFuzz\";\r\nimport { AsVector2, IsBetweenA2B, MoveMatrix, XAxis, angle, angleTo, equaln, equalv2, equalv3, isIntersect2, isParallelTo, isPerpendicularityTo } from \"../Geometry/GeUtils\";\r\nimport { BrSealedData, GetHighBoardEdgeRemark, GetSealedBoardContour } from \"../GraphicsSystem/CalcEdgeSealing\";\r\nimport { FeedingToolPath, GetModelingFromCustomDrill } from \"../GraphicsSystem/ToolPath/FeedingToolPath\";\r\nimport { EMetalsType, IHardwareOption, IToplineOption } from \"../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { IHighEdgeRemarkItem, IHighReservedEdgeItem, ISealingData } from \"../UI/Store/OptionInterface/IHighSealedItem\";\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\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 name: string;\r\n goodsId?: string;\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 [EBoardKeyList.Thick]: number;\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 boardEdgeRemark: IHighEdgeRemarkItem[]; //板边备注信息\r\n reservedEdge: IHighReservedEdgeItem[]; //预留边信息\r\n modeling: IModelingData[]; //造型信息\r\n curveBoardModeling: IModeling[];\r\n holes: IBoardHoleInfo; //孔信息\r\n sideModeling: IOriginSideModelingData[]; //侧面造型信息\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 isReverse: boolean; //轮廓数据是否翻转\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\nexport interface IOriginSideModelingData extends IOriginModelingData\r\n{\r\n chaiDanName: string;\r\n modelType: ModelType;\r\n}\r\n\r\nexport enum ModelType\r\n{\r\n frontBackModel = 0, //正反面造型槽\r\n sideModel = 1,//绘制的侧槽造型\r\n drill = 2, //自定义排钻生成的非圆侧孔\r\n sideHoleModel = 3,//绘制的圆侧槽\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 enum SplitOrderType\r\n{\r\n ChaiDan, // 拆单/走刀时使用\r\n HoleGrooveDim, // 孔洞槽标注时使用\r\n}\r\n\r\nexport namespace Production\r\n{\r\n /**\r\n * 获取板件拆单数据\r\n * @param {Board} br 板件\r\n * @param {number} [redundancyKnif=0] 刀冗余\r\n * @param {SplitOrderType} [splitType=SplitOrderType.ChaiDan] 拆单类型,默认为拆单\r\n * @return {*} {(ISpliteOrderData | undefined)}\r\n */\r\n export function GetBoardSplitOrderData(br: Board, redundancyKnif = 0, splitType: SplitOrderType = SplitOrderType.ChaiDan): ISpliteOrderData | undefined\r\n {\r\n let sealedData = GetSealedBoardContour(br, splitType);\r\n if (!sealedData)\r\n {\r\n ToasterShowEntityMsg({\r\n msg: br.Name + \" 轮廓错误,可能存在轮廓自交,请检查后重新拆单!(错误的板已经选中,您可以按住鼠标中键查看该板!)(使用FISC命令可以修复自交轮廓!)\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n ent: br.__OriginalEnt__ ?? br\r\n });\r\n return undefined;\r\n }\r\n let { brContour: orgContour, sealedContour: sealedOutline } = sealedData;\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 const curveBoardModeling = br.ArcBoardModeling;\r\n\r\n //正反面造型 自定义不规则排钻孔\r\n let { modeling, sideModeling } = GetBoardModelingData(br, offsetTanslation, redundancyKnif, curveBoardModeling);\r\n //侧面造型\r\n let { sideModel, sideHole } = GetBoardSideModelingData(br, true);\r\n sideModeling.push(...sideModel);\r\n\r\n let boardContour: IContourData;\r\n if (HasSpiteSize(br))\r\n boardContour = ConverToPtsBul(br.ContourCurve);//不分裂圆弧转点表\r\n\r\n let info = GetBoardInfo(br, size);\r\n\r\n //每段封边信息\r\n let { seals: perSealData, reservedEdges: perReservedEdgeData } = ParseSealData(sealedData, br.BoardProcessOption.color);\r\n\r\n let perBoardEdgeRemarkData: IHighEdgeRemarkItem[];\r\n if (splitType === SplitOrderType.HoleGrooveDim)\r\n perBoardEdgeRemarkData = GetHighBoardEdgeRemark(br, sealedData.brCurves, true); // 孔槽板边备注,按照正常的边顺序返回备注数据即可\r\n else\r\n perBoardEdgeRemarkData = ParseBoardEdgeRemarkData(sealedData, br.BoardProcessOption.highBoardEdgeRemark);// 拆单的板边备注,并且轮廓是圆的时候,需要分成两段圆弧。\r\n\r\n let isReverse = orgContour.Area2 < 0;\r\n //因为传递给拆单软件的数据是逆时针,所以是顺时针时我们翻转它\r\n if (isReverse)\r\n {\r\n perSealData.reverse();\r\n perBoardEdgeRemarkData.reverse();\r\n perReservedEdgeData.reverse();\r\n\r\n //对应sealedOutlinePtsBul顺序 解析孔时翻转orgContour\r\n orgContour.Reverse();\r\n }\r\n\r\n let holes = GetBoardHolesData(br, offsetTanslation, orgContour);\r\n holes.sideHoles.push(...sideHole);\r\n\r\n return {\r\n info,\r\n originOutlin: originOutlinePtsBul,//拼错了 未扣封边的点表\r\n outline: sealedOutlinePtsBul, //扣完封边的点表\r\n sealing: perSealData,//每段曲线的封边信息\r\n boardEdgeRemark: perBoardEdgeRemarkData, //每段曲线的板边备注信息\r\n reservedEdge: perReservedEdgeData, //每段曲线的预留边信息\r\n modeling,\r\n curveBoardModeling,\r\n holes,\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 isReverse //轮廓是否翻转\r\n };\r\n }\r\n\r\n\r\n //生产那边需要一一对应的数据\r\n export function ParseSealData(sealData: BrSealedData, defaultSealColor: string = \"\"): { seals: ISealingData[], reservedEdges: IHighReservedEdgeItem[]; }\r\n {\r\n let seals: ISealingData[] = [];\r\n let reservedEdges: IHighReservedEdgeItem[] = [];\r\n for (let i = 0; i < sealData.brCurves.length; i++)\r\n {\r\n let curve = sealData.brCurves[i];\r\n let sealD = sealData.highSeals[i];\r\n let reservedEdgeD = sealData.highReservedEdges[i];\r\n\r\n if (curve instanceof Circle)\r\n {\r\n let seal2: ISealingData = {\r\n length: curve.Length * 0.5,\r\n ...sealD,\r\n sealColor: sealD.sealColor ? sealD.sealColor : defaultSealColor\r\n };\r\n\r\n //圆型板拆单时是分成两段圆弧处理\r\n seals.push(seal2);\r\n seals.push({ ...seal2 });\r\n\r\n reservedEdges.push(reservedEdgeD);\r\n reservedEdges.push({ ...reservedEdgeD });\r\n return { seals, reservedEdges };\r\n }\r\n else\r\n {\r\n if (curve instanceof Polyline)//多段线炸开\r\n {\r\n for (let subC of curve.Explode())\r\n {\r\n let seal2: ISealingData = {\r\n length: subC.Length,\r\n ...sealD,\r\n sealColor: sealD.sealColor ? sealD.sealColor : defaultSealColor\r\n };\r\n seals.push(seal2);\r\n\r\n reservedEdges.push(reservedEdgeD);\r\n }\r\n }\r\n else//直线 圆弧直接加\r\n {\r\n let seal2: ISealingData = {\r\n length: curve.Length,\r\n ...sealD,\r\n sealColor: sealD.sealColor ? sealD.sealColor : defaultSealColor\r\n };\r\n seals.push(seal2);\r\n\r\n reservedEdges.push(reservedEdgeD);\r\n }\r\n }\r\n }\r\n return { seals, reservedEdges };\r\n }\r\n\r\n function ParseBoardEdgeRemarkData(sealData: BrSealedData, highBoardEdgeRemark: IHighEdgeRemarkItem[]): IHighEdgeRemarkItem[]\r\n {\r\n let remarks: IHighEdgeRemarkItem[] = [];\r\n for (let i = 0; i < sealData.brCurves.length; i++)\r\n {\r\n let curve = sealData.brCurves[i];\r\n let remarkData = highBoardEdgeRemark[i];\r\n\r\n if (curve instanceof Circle)\r\n {\r\n //圆型板拆单时是分成两段圆弧处理\r\n remarks.push(remarkData);\r\n remarks.push({ ...remarkData });\r\n return remarks;\r\n }\r\n else\r\n {\r\n if (curve instanceof Polyline)//多段线炸开\r\n {\r\n for (let subC of curve.Explode())\r\n {\r\n remarks.push(remarkData);\r\n }\r\n }\r\n else//直线 圆弧直接加\r\n {\r\n remarks.push(remarkData);\r\n }\r\n }\r\n }\r\n return remarks;\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 [EBoardKeyList.Thick]: br.Thickness,\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 (m.shape.Holes.length === 0 && 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, false),\r\n holes: m.shape.Holes.map(h => ConverToPtsBul(h.Curve, 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 let modeling = getModelings([...br.BoardModeling, ...allModeling.modeling]);\r\n let sideModeling = GetBoardSideModelingData(br);\r\n\r\n return { modeling, sideModeling };\r\n }\r\n\r\n /**\r\n * 计算板的造型走刀数据(包括自定义排钻的走刀 侧面走刀)\r\n * @param br\r\n * @param offsetTanslation\r\n */\r\n export function GetBoardModelingData(br: Board, offsetTanslation: Vector3, redundancyKnif = 0, curveBoardModeling: IModeling[])\r\n {\r\n const tool = FeedingToolPath.GetInstance();\r\n const tMtx = MoveMatrix(offsetTanslation.clone().negate());\r\n const getModelings = (ms: IModeling[]): 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 (m.shape.Holes.length === 0 && 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, redundancyKnif);//走刀路径\r\n paths.forEach(path => path.ApplyMatrix(tMtx));\r\n\r\n //走刀的ptsbuls\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, false),\r\n holes: m.shape.Holes.map(h => ConverToPtsBul(h.Curve, 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, ...curveBoardModeling]).filter(f => f.feeding.length > 0);\r\n // 拆单值有效的板件勾选取消孔槽加工\r\n const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption;\r\n const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness];\r\n if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing)\r\n {\r\n modeling.length = 0;\r\n allModeling.sideModeling.length = 0;\r\n }\r\n return { modeling, sideModeling: allModeling.sideModeling };\r\n }\r\n\r\n export function GetBoardSideModelingData(br: Board, toaster = false)\r\n {\r\n let sideModel: IOriginSideModelingData[] = [];\r\n let sideHole: IDrillingOption[] = [];\r\n\r\n let allSideModelGrooveMap = br.AllSideModelGrooveMap;\r\n\r\n //跳过有拆单尺寸板件 避免拆单错误\r\n if (!allSideModelGrooveMap.size || HasSpiteSize(br)) return { sideModel, sideHole };\r\n\r\n const tool = FeedingToolPath.GetInstance();\r\n let faces = new ParseBoardSideFace(br);\r\n\r\n for (let [num, solids] of allSideModelGrooveMap)\r\n {\r\n let faceContour = faces.Faces[num].Region.ShapeManager.ShapeList[0].Outline.Curve as Polyline;\r\n for (let solid of solids)\r\n {\r\n let cu = solid.Shape.Outline.Curve.Clone().ApplyMatrix(solid.OCSNoClone);\r\n let modelType = ModelType.sideModel;\r\n\r\n // 圆造型拆成孔类型\r\n if (!solid.Shape.Holes.length && cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n {\r\n let mtx = br.OCSInv.multiply(faces.Faces[num].OCS);\r\n let position = cu.Position.clone().applyMatrix4(mtx);\r\n let endPt = cu.Position.clone().setZ(-solid.Thickness).applyMatrix4(mtx);\r\n\r\n /**拆单那边需要把侧孔 z 坐标转换为从上到下 */\r\n InvertPosition(position, br.Thickness);\r\n InvertPosition(endPt, br.Thickness);\r\n // cu.ApplyMatrix(mtx);\r\n // TestDraw(cu);\r\n // TestDraw(new Point(position));\r\n // TestDraw(new Point(endPt));\r\n sideHole.push({\r\n position, //排钻开始位置\r\n endPt, //排钻结束的位置(在板的坐标系)\r\n radius: cu.Radius, //排钻半径\r\n depth: solid.Thickness, //排钻的插入深度\r\n face: num, //板在哪个边上\r\n name: \"\",\r\n type: null\r\n });\r\n\r\n continue;\r\n }\r\n\r\n let knifeRadius = solid.KnifeRadius;\r\n\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n knifeRadius = HostApplicationServices.chaidanOption.radius;\r\n let paths = tool.GetSideModelFeedPath(solid, faceContour);//走刀路径\r\n\r\n if (paths.length)\r\n {\r\n sideModel.push({\r\n thickness: solid.Thickness + (solid.GroovesAddDepth ?? 0),\r\n dir: num,\r\n knifeRadius,\r\n outline: ConverToPtsBul(cu, false),\r\n holes: solid.Shape.Holes.map((cu) => ConverToPtsBul(cu.Curve.Clone().ApplyMatrix(solid.OCSNoClone), false)),\r\n addLen: solid.GroovesAddLength,\r\n addWidth: solid.GroovesAddWidth,\r\n addDepth: solid.GroovesAddDepth,\r\n chaiDanName: \"\",\r\n modelType,\r\n });\r\n }\r\n else if (toaster)\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 }\r\n\r\n return { sideModel, sideHole };\r\n }\r\n\r\n //是否有拆单尺寸\r\n export function HasSpiteSize(br: Board): boolean\r\n {\r\n let [spHeight, spWidth, spThickness] = [br.BoardProcessOption?.spliteHeight, br.BoardProcessOption?.spliteWidth, br.BoardProcessOption?.spliteThickness];\r\n const isEffect = HostApplicationServices.chaidanOption.partialSplitValueCanTakesEffect;//局部拆单值\r\n const hasSize = (isEffect ? (spHeight || spWidth || spThickness) : (spHeight && spWidth && spThickness));\r\n return Boolean(hasSize);\r\n }\r\n\r\n //获得拆单尺寸\r\n export function GetSpiteSize(br: Board)\r\n {\r\n if (HasSpiteSize(br))\r\n {\r\n let [spHeight, spWidth, spThickness] = [br.BoardProcessOption?.spliteHeight, br.BoardProcessOption?.spliteWidth, br.BoardProcessOption?.spliteThickness];\r\n const param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n spHeight = spHeight || br.Height.toString();\r\n spWidth = spWidth || br.Width.toString();\r\n spThickness = spThickness || br.Thickness.toString();\r\n\r\n const spliteHeight = safeEval(spHeight, param, \"L\");\r\n const spliteWidth = safeEval(spWidth, param, \"W\");\r\n const spliteThickness = safeEval(spThickness, param, \"H\");\r\n\r\n if (spliteHeight && spliteWidth && spliteThickness)\r\n {\r\n return {\r\n spliteHeight,\r\n spliteWidth,\r\n spliteThickness\r\n };\r\n }\r\n }\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 if (size)\r\n return new Polyline().Rectangle(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 const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption;\r\n // 拆单值有效的板件勾选取消孔槽加工\r\n const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness];\r\n if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing)\r\n {\r\n return data;\r\n }\r\n let brNormal = br.Normal;\r\n\r\n // 性能优化的解析板件网洞类\r\n // new ParseBoardHoleData(br, offsetTanslation, sealedContour);\r\n\r\n //是弧形板件时解析排钻在路径的相对位置\r\n if (br.IsArcBoard && br.DrillList.size)\r\n {\r\n offsetTanslation = ParseArcBoardHoles(br, offsetTanslation);\r\n }\r\n\r\n for (let [key, driss] of br.DrillList)\r\n {\r\n let linkBoard = key?.Object as Board;\r\n if (cancelHoleProcessing && linkBoard)\r\n {\r\n const [L, W, H] = [linkBoard.BoardProcessOption.spliteHeight, linkBoard.BoardProcessOption.spliteWidth, linkBoard.BoardProcessOption.spliteThickness];\r\n if ((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H))\r\n {\r\n continue;\r\n }\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, 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 let linkBoard = nail.MId?.Object as Board;\r\n if (cancelHoleProcessing && linkBoard)\r\n {\r\n const [L, W, H] = [linkBoard.BoardProcessOption.spliteHeight, linkBoard.BoardProcessOption.spliteWidth, linkBoard.BoardProcessOption.spliteThickness];\r\n if ((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H))\r\n {\r\n continue;\r\n }\r\n }\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 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 if (\r\n Math.max(z0, 0) < Math.min(z1, br.Thickness) - 1e-6\r\n && br.ContourCurve.PtInCurve(sp.setZ(0))\r\n //层板钉中心点不在造型槽内\r\n && modelings.every(m =>\r\n {\r\n if (m.dir !== face && (depth + m.thickness) < br.Thickness)//不相交\r\n return true;\r\n\r\n // if (m.shape.Holes.some(h => h.Curve.PtInCurve(sp))) return true; //层板钉在孤岛内 现实中应该不会有\r\n return !m.shape.Outline.Curve.PtInCurve(sp);\r\n })\r\n )\r\n {\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 name: '层板钉'\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 (m.shape.Holes.length === 0 && 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.Ljg,//设置为偏心轮导致我们分析大孔面方向和板的大孔面一致时错误,所以改成连接杆\r\n position: center,\r\n radius: cu.Radius,\r\n depth: m.thickness,\r\n face: m.dir as number,\r\n name: GetGroupName(cu)\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, allowPxl: boolean, 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 (allowPxl || !HostApplicationServices.forceFilterPxl)\r\n return outline.IntersectWith(cir, 0).length > 1 || outline.PtInCurve(center);\r\n else\r\n return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center);\r\n }\r\n }\r\n /**分析常规排钻 */\r\n function ParseCylHoles(cyHole: CylinderHole, br: Board, offsetTanslation: Vector3, data: IBoardHoleInfo, outline: ExtrudeContourCurve)\r\n {\r\n let brInv = br.OCSInv;\r\n let brNormal = br.Normal;\r\n let outlineWidth = br.Width;\r\n let outlineHeight = br.Height;\r\n let faceRegions: Polyline[];\r\n let faceRegionsBox: Box3;\r\n\r\n let addPos: Vector3;\r\n if (br.IsArcBoard)\r\n {\r\n addPos = cyHole[\"__CacheAddPos__\"];\r\n faceRegions = cyHole[\"__CacheContour__\"];\r\n let ocs = cyHole[\"__CacheBrOCS__\"];\r\n\r\n cyHole[\"__CacheAddPos__\"] = undefined;\r\n cyHole[\"__CacheBrOCS__\"] = undefined;\r\n cyHole[\"__CacheContour__\"] = undefined;\r\n\r\n if (!ocs || !addPos || !faceRegions?.length)\r\n return;\r\n else\r\n {\r\n brInv = new Matrix4().getInverse(ocs);\r\n brNormal = new Vector3().setFromMatrixColumn(ocs, 2);\r\n\r\n faceRegionsBox = new Box3();\r\n for (let pl of faceRegions)\r\n faceRegionsBox.union(pl.BoundingBox);\r\n\r\n let boxSize = faceRegionsBox.getSize(new Vector3);\r\n outlineWidth = boxSize.x;\r\n outlineHeight = boxSize.y;\r\n\r\n let extrude = Board.CreateBoard(boxSize.y, boxSize.x, 1);\r\n outline = extrude.ContourCurve;\r\n }\r\n }\r\n\r\n let brInvRo = new Matrix4().extractRotation(brInv);\r\n let position = cyHole.Position.applyMatrix4(brInv);\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 = cyHole.Height;\r\n let diffMat = brInv.clone().multiply(cyHole.OCSNoClone);\r\n let x = new Vector3().setFromMatrixColumn(diffMat, 0);\r\n let angle = angleTo(XAxis, x);\r\n\r\n let cyNormal = cyHole.Normal.applyMatrix4(brInvRo);\r\n let pos2 = position.clone().add(cyNormal.multiplyScalar(depth));\r\n\r\n if (cyHole.Type === GangDrillType.Pxl || cyHole.Type === GangDrillType.WoodPXL)\r\n {\r\n if (isParallelTo(cyHole.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n if (!IsBetweenA2B(position.x, -cyHole.Radius, outlineWidth + cyHole.Radius, 1e-6)\r\n || !IsBetweenA2B(position.y, -cyHole.Radius, outlineHeight + cyHole.Radius, 1e-6)\r\n || !HoleInBoard(position.clone().setZ(0), cyHole.Radius, outline, cyHole.AllowPxl)) return;\r\n\r\n position.sub(offsetTanslation);\r\n\r\n //#region 求得真实的求交范围\r\n let z0 = position.z;\r\n let z1 = pos2.z;\r\n if (z0 > z1) [z0, z1] = [z1, z0];\r\n\r\n let i1 = Math.max(z0, 0);\r\n let i2 = Math.min(z1, br.Thickness);\r\n if (i2 - i1 < CanDrawHoleFuzz) return;//相交范围小于0.1\r\n\r\n if (equaln(i1, 0, CanDrawHoleFuzz)) face = FaceDirection.Back;\r\n else if (equaln(i2, br.Thickness, CanDrawHoleFuzz)) face = FaceDirection.Front;\r\n else return;//不在正面 也不在反面\r\n\r\n depth = i2 - i1;//真实的相交范围\r\n //#endregion\r\n\r\n isPush = true;\r\n }\r\n }\r\n else if (cyHole.Type === GangDrillType.Ljg || cyHole.Type === GangDrillType.Wood || cyHole.SameSideHole)\r\n {\r\n if (isPerpendicularityTo(cyHole.Normal, brNormal, CanDrawHoleFuzz))//侧孔\r\n {\r\n let z = position.z;\r\n if (!IsBetweenA2B(z, -cyHole.Radius, br.Thickness + cyHole.Radius, 1e-6)) return;\r\n\r\n let sp = position.clone().setZ(0); //真实数据\r\n let ep = position.clone().add(cyHole.Normal.multiplyScalar(cyHole.Height).applyMatrix4(brInvRo)).setZ(0); //真实数据\r\n let testLine = new Line(sp, ep);\r\n let iPt: Vector3;\r\n\r\n if (br.IsArcBoard)\r\n {\r\n if (faceRegions?.length)\r\n {\r\n for (let pl of faceRegions)\r\n {\r\n pl.UpdateOCSTo(new Matrix4().setPosition(faceRegionsBox.min));\r\n let newPl = new Polyline(pl.LineData);\r\n iPt = newPl.IntersectWith(testLine, 0, CanDrawHoleFuzz)[0];\r\n if (iPt)\r\n {\r\n outline = newPl;\r\n break;\r\n }\r\n }\r\n }\r\n else\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: \"侧孔与板无交点,无法加工该侧孔!\" }], LogType.Warning);\r\n return;\r\n }\r\n }\r\n else\r\n iPt = outline.IntersectWith(testLine, 0, CanDrawHoleFuzz)[0];\r\n\r\n if (!iPt)\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: \"侧孔与板无交点,无法加工该侧孔!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n position = iPt.clone().setZ(z);//排钻开始的位置\r\n for (let p of [sp, ep])\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 //同侧面生成常规单头排钻 连接杆在Curve边缘时不提示错误\r\n if (!cyHole.SameSideHole)\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: \"侧孔位置有问题,排钻不在板轮廓内!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n holes = data.sideHoles;\r\n face = Math.floor(outline.GetParamAtPoint(iPt));//板在那个边上\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 (cyHole.Type === GangDrillType.Wood)//木销\r\n {\r\n if (!outline.PtInCurve(position.clone().setZ(0))) return;\r\n position.sub(offsetTanslation);\r\n\r\n //#region 求得真实的求交范围\r\n let z0 = position.z;\r\n let z1 = pos2.z;\r\n if (z0 > z1) [z0, z1] = [z1, z0];\r\n\r\n let i1 = Math.max(z0, 0);\r\n let i2 = Math.min(z1, br.Thickness);\r\n if (i2 - i1 < CanDrawHoleFuzz) return;//相交范围小于0.1\r\n\r\n if (equaln(i1, 0, CanDrawHoleFuzz)) face = FaceDirection.Back;\r\n else if (equaln(i2, br.Thickness, CanDrawHoleFuzz)) face = FaceDirection.Front;\r\n else return;//不在正面 也不在反面\r\n\r\n depth = i2 - i1;//真实的相交范围\r\n //#endregion\r\n\r\n holes = data.frontBackHoles;\r\n isPush = true;\r\n }\r\n }\r\n else\r\n {\r\n if (isParallelTo(cyHole.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n if (!IsBetweenA2B(position.x, -cyHole.Radius, outlineWidth + cyHole.Radius, CanDrawHoleFuzz)\r\n || !IsBetweenA2B(position.y, -cyHole.Radius, outlineHeight + cyHole.Radius, CanDrawHoleFuzz)\r\n || !isIntersect2(0, br.Thickness, position.z, pos2.z, -CanDrawHoleFuzz)\r\n || !HoleInBoard(position.clone().setZ(0), cyHole.Radius, outline, cyHole.AllowPxl, true)) return;\r\n\r\n position.sub(offsetTanslation);\r\n holes = data.frontBackHoles;\r\n face = !equalv3(cyHole.Normal, brNormal, CanDrawHoleFuzz) ? FaceDirection.Front : FaceDirection.Back;\r\n isPush = true;\r\n }\r\n }\r\n\r\n if (isPush)\r\n {\r\n if (br.IsArcBoard)\r\n {\r\n //弧形板需要单独增加差值\r\n position = position.add(addPos);\r\n endPt = endPt?.add(addPos);\r\n\r\n if (br.SweepAngle)\r\n {\r\n let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx);\r\n position.applyMatrix4(ocsInv);\r\n endPt?.applyMatrix4(ocsInv);\r\n }\r\n }\r\n\r\n holes.push({\r\n type: cyHole.Type,\r\n position,//排钻开始位置\r\n endPt, //排钻结束的位置(在板的坐标系)\r\n radius: cyHole.Radius,//排钻半径\r\n depth,//排钻的插入深度\r\n face,//板在哪个边上\r\n angle,\r\n name: GetGroupName(cyHole),\r\n goodsId: cyHole.GoodsId, //商品编号\r\n });\r\n }\r\n }\r\n\r\n /**分析自定义圆柱排钻\r\n *\r\n * isRelativeHardware 关联的五金使用此类型误差\r\n * CanDrawHoleFuzz)//区间交集必须大于CanDrawHoleFuzz\r\n * CanDrawHoleFuzz)//区间交集必须大于CanDrawHoleFuzz\r\n *\r\n */\r\n function ParseExtrudeHoles(d: ExtrudeHole, br: Board, offsetTanslation: Vector3, data: IBoardHoleInfo, outline: ExtrudeContourCurve, isCheckGroove = false, isRelativeHardware = false)\r\n {\r\n if (!d.isHole)\r\n return;\r\n\r\n let brInv = br.OCSInv;\r\n let brNormal = br.Normal;\r\n let cir = d.ContourCurve;\r\n\r\n let outlineWidth = br.Width;\r\n let outlineHeight = br.Height;\r\n\r\n let addPos: Vector3;\r\n let faceRegions: Polyline[];\r\n let faceRegionsBox: Box3;\r\n\r\n if (br.IsArcBoard)\r\n {\r\n addPos = d[\"__CacheAddPos__\"];\r\n faceRegions = d[\"__CacheContour__\"];\r\n let ocs = d[\"__CacheBrOCS__\"];\r\n\r\n d[\"__CacheAddPos__\"] = undefined;\r\n d[\"__CacheBrOCS__\"] = undefined;\r\n d[\"__CacheContour__\"] = undefined;\r\n\r\n if (!ocs || !addPos || !faceRegions?.length)\r\n return;\r\n else\r\n {\r\n brInv = new Matrix4().getInverse(ocs);\r\n brNormal = new Vector3().setFromMatrixColumn(ocs, 2);\r\n\r\n faceRegionsBox = new Box3();\r\n for (let pl of faceRegions)\r\n faceRegionsBox.union(pl.BoundingBox);\r\n\r\n let boxSize = faceRegionsBox.getSize(new Vector3);\r\n outlineWidth = boxSize.x;\r\n outlineHeight = boxSize.y;\r\n\r\n let extrude = Board.CreateBoard(boxSize.y, boxSize.x, 1);\r\n outline = extrude.ContourCurve;\r\n }\r\n }\r\n\r\n if (cir instanceof Circle)\r\n {\r\n let diffMtx = brInv.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\r\n //检测排钻中心孔位与板轮廓outline交集关系时,不考虑offsetTanslation的差值 因为传进来的outline都不是封边轮廓\r\n let p = sp.clone().setZ(0);\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 InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: \"的孔嵌在板中间,无法加工,已经跳过!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n if (!(outline.PtInCurve(p)))//在轮廓内\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: \"的孔不在板轮廓内,无法加工,已经跳过!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n if (groovesOutlines.some(g => g.PtInCurve(p)))//在洞内\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: \"的孔在造型内,无法加工,已经跳过!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n p.sub(offsetTanslation);\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 {\r\n let position = z0 < CanDrawHoleFuzz ? p : p.setZ(br.Thickness);\r\n\r\n if (br.IsArcBoard)\r\n {\r\n //弧形板需要单独增加差值\r\n position = position.add(addPos);\r\n\r\n if (br.SweepAngle)\r\n {\r\n let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx);\r\n position.applyMatrix4(ocsInv);\r\n }\r\n }\r\n data.frontBackHoles.push({\r\n type: d.isThrough ? GangDrillType.TK : (isRelativeHardware ? GangDrillType.Ljg : d.Type),\r\n position,\r\n radius: cir.Radius,\r\n depth,\r\n face: z0 < CanDrawHoleFuzz ? FaceDirection.Back : FaceDirection.Front,\r\n angle: angle,\r\n name: GetGroupName(d)\r\n });\r\n }\r\n }\r\n else//侧孔\r\n {\r\n let oldZ = sp.z;\r\n let [minX, maxX] = sp.x < ep.x ? [sp.x, ep.x] : [ep.x, sp.x];\r\n let [minY, maxY] = sp.y < ep.y ? [sp.y, ep.y] : [ep.y, sp.y];\r\n\r\n if (sp.z > -cir.Radius\r\n && sp.z < br.Thickness + cir.Radius\r\n && Math.max(minX, 0) < (Math.min(outlineWidth, maxX) + (isRelativeHardware ? -CanDrawHoleFuzz : 1e-6))//区间交集必须大于CanDrawHoleFuzz\r\n && Math.max(minY, 0) < (Math.min(outlineHeight, maxY) + (isRelativeHardware ? -CanDrawHoleFuzz : 1e-6))//区间交集必须大于CanDrawHoleFuzz\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, 1e-5)[0];\r\n if (!pt)\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: `的${isRelativeHardware ? \"五金\" : \"排钻\"}嵌在板件内部,已经跳过!` }], LogType.Warning);\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 (!equalv2(p, 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 if (br.IsArcBoard)\r\n {\r\n //弧形板需要单独增加差值\r\n position = position.add(addPos);\r\n endPt = endPt.add(addPos);\r\n\r\n if (br.SweepAngle)\r\n {\r\n let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx);\r\n position.applyMatrix4(ocsInv);\r\n endPt.applyMatrix4(ocsInv);\r\n }\r\n }\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 name: GetGroupName(d)\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 const accuracy = HostApplicationServices.chaidanOption.hardwareExpressionFormattingAccuracy;\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 ? FixedNotZero(actualVal, 2) : data.actualExpr;\r\n data.spec = ParseExpr(data.spec, accuracy, { L: size.x, W: size.y, H: size.z });\r\n data.model = ParseExpr(data.model, accuracy, { L: size.x, W: size.y, H: size.z });\r\n data.factory = ParseExpr(data.factory, accuracy, { L: size.x, W: size.y, H: size.z });\r\n data.brand = ParseExpr(data.brand, accuracy, { 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 const accuracy = HostApplicationServices.chaidanOption.hardwareExpressionFormattingAccuracy;\r\n d.spec = ParseExpr(data.spec, accuracy, { 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\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 Get2DModeing(br: Board, offset: Vector3)\r\n {\r\n let res: I2DModeling[] = [];\r\n // 拆单值有效的板件勾选取消孔槽加工\r\n const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption;\r\n const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness];\r\n if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing)\r\n {\r\n return res;\r\n }\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, false),\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 // 拆单值有效的板件勾选取消孔槽加工\r\n const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption;\r\n const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness];\r\n if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing)\r\n {\r\n return res;\r\n }\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, redundancyKnif = 0)\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();\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(\r\n { Thickness: brThickness, ContourCurve: brContour },\r\n {\r\n shape,\r\n thickness,\r\n dir, knifeRadius, addLen, addWidth, addDepth\r\n },\r\n redundancyKnif);\r\n\r\n return paths.map((c: ExtrudeContourCurve) => ConverToPtsBul(c, false));\r\n }\r\n export function GetGroupName(ent: Entity): string\r\n {\r\n let group = ent.GroupId?.Object as GroupRecord;\r\n if (!group || !(group instanceof GroupRecord)) return \"未知(无拆单名称)\";\r\n return group.Name;\r\n }\r\n}\r\n\r\nexport function ParseArcBoardHoles(br: Board, offsetTanslation: Vector3)\r\n{\r\n const ArcBoardBuild = br.ArcBuild;\r\n ArcBoardBuild.ParseSweepCurves();\r\n let cus = ArcBoardBuild.SweepCurves1;\r\n\r\n let ContourCurve = br.Shape.Outline.Curve.Clone().ApplyMatrix(ArcBoardBuild.OCS2RotateMtx) as Polyline;\r\n let brBoxSize = ContourCurve.BoundingBox.getSize(new Vector3);\r\n let currentLength = 0;\r\n\r\n if (br.SweepAngle)\r\n offsetTanslation = offsetTanslation.clone().applyMatrix4(ArcBoardBuild.OCS2RotateMtx.clone().setPosition(0, 0, 0));\r\n\r\n for (let cu of cus)\r\n {\r\n if (currentLength > brBoxSize.x) break;\r\n\r\n if (cu instanceof Arc)\r\n {\r\n currentLength = currentLength + cu.Length;\r\n continue;\r\n }\r\n\r\n //直线所在坐标系\r\n let cuBox = new Box3(new Vector3, new Vector3(cu.Length, brBoxSize.y, br.Thickness));\r\n let an = angle(cu.EndPoint.clone().sub(cu.StartPoint));\r\n let m = new Matrix4().makeRotationY(-an);\r\n\r\n let ocs = br.OCS;\r\n if (br.SweepAngle)\r\n ocs.multiply(ArcBoardBuild.Rotate2OCSMtx);\r\n\r\n ocs.multiply(m.setPosition(cu.StartPoint.clone().applyMatrix4(new Matrix4().makeRotationX(Math.PI / 2))));\r\n\r\n //正面时翻转Z向量\r\n if (br.SweepVisibleFace === FaceDirection.Front)\r\n ocs.setPosition(new Vector3(0, 0, -br.Thickness).applyMatrix4(ocs));\r\n\r\n // 测试代码\r\n // let pt = new Vector3().applyMatrix4(ocs);\r\n // let l1 = new Line(pt, pt.clone().add(new Vector3().setFromMatrixColumn(ocs, 0).normalize().multiplyScalar(100)));\r\n // let l2 = new Line(pt, pt.clone().add(new Vector3().setFromMatrixColumn(ocs, 1).normalize().multiplyScalar(100)));\r\n // let l3 = new Line(pt, pt.clone().add(new Vector3().setFromMatrixColumn(ocs, 2).normalize().multiplyScalar(100)));\r\n // TestDraw(new Point(pt));\r\n // TestDraw(l1, 1);\r\n // TestDraw(l2, 3);\r\n // TestDraw(l3, 5);\r\n //裁剪 计算每个分段轮廓\r\n let length = currentLength + cu.Length;\r\n let starKnifePls = new Polyline([{ pt: AsVector2({ x: currentLength, y: -1 }), bul: 0 }, { pt: AsVector2({ x: currentLength, y: 10000 }), bul: 0 }]);\r\n let endKnifePls = new Polyline([{ pt: AsVector2({ x: length, y: -1 }), bul: 0 }, { pt: AsVector2({ x: length, y: 10000 }), bul: 0 }]);\r\n\r\n //裁剪结果\r\n let faceRegions = SplitPolyline(ContourCurve, [starKnifePls, endKnifePls]);\r\n faceRegions = faceRegions.filter((faceRegion) =>\r\n {\r\n let x = faceRegion.BoundingBox.getCenter(new Vector3).x;\r\n return x > currentLength && x < length;\r\n });\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 Hole;\r\n if (d[\"__CacheBrOCS__\"]) continue;\r\n let b = d.BoundingBox.applyMatrix4(new Matrix4().getInverse(ocs));\r\n\r\n if (cuBox.intersectsBox(b))\r\n {\r\n d[\"__CacheBrOCS__\"] = ocs;\r\n //记录分段路径的起点与原点差值\r\n d[\"__CacheAddPos__\"] = new Vector3(currentLength);\r\n d[\"__CacheContour__\"] = faceRegions;\r\n }\r\n }\r\n }\r\n }\r\n currentLength = length;\r\n }\r\n\r\n return offsetTanslation;\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 { Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../Common/ArrayExt\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { MergeCurvelist } from \"../Common/CurveUtils\";\r\nimport { InteractionLog, LogType } from \"../Common/Log\";\r\nimport { Intent, Toaster } from \"../Common/Toaster\";\r\nimport { FixIndex, LINK_FUZZ } from \"../Common/Utils\";\r\nimport { Contour } 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 } 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 { IdentityMtx4, XAxis, equaln, equalv3, isParallelTo } from \"../Geometry/GeUtils\";\r\nimport { Max } from \"../Nest/Common/Util\";\r\nimport { Production, SplitOrderType } from \"../Production/Product\";\r\nimport { IHighEdgeRemarkItem, IHighReservedEdgeItem, IHighSealedItem } from \"../UI/Store/OptionInterface/IHighSealedItem\";\r\nimport { OffsetPolyline } from \"./OffsetPolyline\";\r\nimport { ParseEdgeSealDir } from \"./ParseEdgeSealDir\";\r\n\r\ntype CurveGroups = (Curve[])[];\r\n\r\n/**\r\n * 将曲线分段(根据高级封边的特性 (因为圆弧无法单独使用封边,所以和圆弧在一起的曲线必须和圆弧一样的封边,否则偏移失败))\r\n * @l-arc-l,l-arc-arc-l,l-arc-l-arc-l....\r\n * @param in_out_curves 曲线组( 函数结束后 这个数组被改变 )\r\n * @returns 返回编组 curveGroups\r\n */\r\nexport function SubsectionCurvesOfHightSeal(in_out_curves: Curve[]): CurveGroups\r\n{\r\n let curveGroups: CurveGroups = [];\r\n let usedCu: WeakSet = new WeakSet();\r\n\r\n //归类曲线,返回归类是否成功\r\n const paragraph = (nextCurve: Curve, curCurve: Curve, curvesGroup: Curve[], isBack: boolean) =>\r\n {\r\n const curIsLine = curCurve instanceof Line;\r\n const nextIsLine = nextCurve instanceof Line;\r\n\r\n if (usedCu.has(nextCurve))\r\n return false;\r\n\r\n if (curIsLine !== nextIsLine)//直线和圆弧\r\n {\r\n if (curIsLine)\r\n {\r\n if (isBack)\r\n {\r\n if (!isParallelTo(curCurve.GetFirstDeriv(0).normalize(), nextCurve.GetFirstDeriv(0).normalize()))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!isParallelTo(curCurve.GetFirstDeriv(0).normalize(), nextCurve.GetFirstDeriv(1).normalize()))\r\n return false;\r\n }\r\n }\r\n\r\n if (nextIsLine)\r\n {\r\n if (isBack)\r\n {\r\n if (!isParallelTo(curCurve.GetFirstDeriv(1).normalize(), nextCurve.GetFirstDeriv(0).normalize()))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!isParallelTo(curCurve.GetFirstDeriv(0).normalize(), nextCurve.GetFirstDeriv(0).normalize()))\r\n return false;\r\n }\r\n }\r\n }\r\n else if (nextIsLine)//都是直线\r\n {\r\n //共线且相连的直线分为一组 #I11T1Z\r\n if (!isParallelTo(nextCurve.GetFirstDeriv(0).normalize(), curCurve.GetFirstDeriv(0).normalize()))\r\n return false;\r\n\r\n let pts = [curCurve.StartPoint, curCurve.EndPoint];\r\n let pts2 = [nextCurve.StartPoint, nextCurve.EndPoint];\r\n if (pts.every(p => pts2.every(p2 => !equalv3(p, p2, 1e-6))))//2条线完全分离 没有共同点\r\n return false;\r\n }\r\n //else 都是圆弧 必然成组\r\n\r\n if (isBack)\r\n curvesGroup.push(nextCurve);\r\n else\r\n curvesGroup.unshift(nextCurve);\r\n\r\n usedCu.add(nextCurve);\r\n return true;\r\n };\r\n\r\n let caclCus = in_out_curves.filter(c => !equaln(c.Length, 0));\r\n\r\n while (caclCus.length > 0)\r\n {\r\n let curCurve = caclCus.shift();\r\n if (usedCu.has(curCurve))\r\n continue;\r\n\r\n let curvesGroup = [curCurve];//编组\r\n usedCu.add(curCurve);\r\n //往后搜索\r\n for (let i = 0; i < caclCus.length; i++)\r\n {\r\n if (!paragraph(caclCus[i], curCurve, curvesGroup, true))\r\n break;\r\n curCurve = caclCus[i];\r\n }\r\n //只有第一条才需要往前搜索\r\n if (caclCus.length === in_out_curves.length - 1)\r\n {\r\n curCurve = curvesGroup[0];\r\n //往前搜索\r\n for (let i = caclCus.length - 1; i >= 0; i--)\r\n {\r\n if (!paragraph(caclCus[i], curCurve, curvesGroup, false))\r\n break;\r\n curCurve = caclCus[i];\r\n }\r\n }\r\n curveGroups.push(curvesGroup);\r\n }\r\n\r\n in_out_curves.length = 0;\r\n //同组多条曲线连接为多段线\r\n for (let g of curveGroups)\r\n {\r\n if (g.length === 1)\r\n in_out_curves.push(g[0]);\r\n else\r\n {\r\n let pl = Polyline.FastCombine(g, LINK_FUZZ, false);\r\n in_out_curves.push(pl);\r\n }\r\n }\r\n\r\n return curveGroups;\r\n}\r\n\r\n\r\n//与GetBoardSealingCurves相关\r\nexport function GetBoardHighSeal(br: Board, sealcus: Curve[]): IHighSealedItem[]\r\n{\r\n const option = br.BoardProcessOption;\r\n if (Production.HasSpiteSize(br))\r\n {\r\n return [\r\n { size: parseFloat(option.sealedDown), sealColor: option.sealColorDown },\r\n { size: parseFloat(option.sealedRight), sealColor: option.sealColorRight },\r\n { size: parseFloat(option.sealedUp), sealColor: option.sealColorUp },\r\n { size: parseFloat(option.sealedLeft), sealColor: option.sealColorLeft },\r\n ];\r\n }\r\n\r\n let highSeals: IHighSealedItem[] = [];\r\n for (let d of br.BoardProcessOption.highSealed)\r\n if (d.size != null)\r\n highSeals.push({ ...d });\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.GetFirstDeriv(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, sealColor: option.sealColorDown });\r\n else\r\n highSeals.push({ size: sealUp, sealColor: option.sealColorUp });\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n highSeals.push({ size: sealRight, sealColor: option.sealColorRight });\r\n else\r\n highSeals.push({ size: sealLeft, sealColor: option.sealColorLeft });\r\n }\r\n }\r\n }\r\n\r\n return highSeals;\r\n}\r\n\r\nexport function GetBoardHighReservedEdge(br: Board, sealcus: Curve[]): IHighReservedEdgeItem[]\r\n{\r\n if (Production.HasSpiteSize(br))\r\n {\r\n return [\r\n { size: parseFloat(br.BoardProcessOption.reservedEdgeDown) },\r\n { size: parseFloat(br.BoardProcessOption.reservedEdgeRight) },\r\n { size: parseFloat(br.BoardProcessOption.reservedEdgeUp) },\r\n { size: parseFloat(br.BoardProcessOption.reservedEdgeLeft) },\r\n ];\r\n }\r\n\r\n let highReservedEdge: IHighReservedEdgeItem[] = [];\r\n for (let d of br.BoardProcessOption.highReservedEdge)\r\n if (d.size != null)\r\n highReservedEdge.push({ ...d });\r\n\r\n //若未设置高级封边,把上下左右封边存入高级封边\r\n if (sealcus.length !== highReservedEdge.length || !br.IsSpecialShape)\r\n {\r\n let reservedEdgeDown = parseFloat(br.BoardProcessOption.reservedEdgeDown);\r\n let reservedEdgeUp = parseFloat(br.BoardProcessOption.reservedEdgeUp);\r\n let reservedEdgeLeft = parseFloat(br.BoardProcessOption.reservedEdgeLeft);\r\n let reservedEdgeRight = parseFloat(br.BoardProcessOption.reservedEdgeRight);\r\n\r\n highReservedEdge.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.GetFirstDeriv(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 highReservedEdge.push({ size: reservedEdgeDown });\r\n else\r\n highReservedEdge.push({ size: reservedEdgeUp });\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n highReservedEdge.push({ size: reservedEdgeRight });\r\n else\r\n highReservedEdge.push({ size: reservedEdgeLeft });\r\n }\r\n }\r\n }\r\n\r\n return highReservedEdge;\r\n}\r\n\r\n/**\r\n * 获取板边备注\r\n * @param br 板\r\n * @param sealcus 封边轮廓线\r\n * @param addAll 添加所有板边备注\r\n * @returns 板边备注\r\n */\r\nexport function GetHighBoardEdgeRemark(br: Board, sealcus: Curve[], addAll = false): IHighEdgeRemarkItem[]\r\n{\r\n const opt = br.BoardProcessOption;\r\n\r\n //顺序和封边一样\r\n if (Production.HasSpiteSize(br))\r\n {\r\n return [\r\n { description: opt.edgeRemarkDown },\r\n { description: opt.edgeRemarkRight },\r\n { description: opt.edgeRemarkUp },\r\n { description: opt.edgeRemarkLeft },\r\n ];\r\n }\r\n\r\n const highBoardEdgeRemark: IHighEdgeRemarkItem[] = [];\r\n for (const d of opt.highBoardEdgeRemark)\r\n if (d.description != null || addAll)\r\n highBoardEdgeRemark.push({ ...d });\r\n\r\n //若未设置高级板边备注,把上下左右板边备注存入高级板边备注\r\n if (sealcus.length !== highBoardEdgeRemark.length || !br.IsSpecialShape)\r\n {\r\n const edgeRemarkDown = opt.edgeRemarkDown;\r\n const edgeRemarkRight = opt.edgeRemarkRight;\r\n const edgeRemarkUp = opt.edgeRemarkUp;\r\n const edgeRemarkLeft = opt.edgeRemarkLeft;\r\n\r\n highBoardEdgeRemark.length = 0;\r\n const dir = Math.sign(br.ContourCurve.Area2);\r\n for (const c of sealcus)\r\n {\r\n const derv = c.GetFirstDeriv(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 highBoardEdgeRemark.push({ description: edgeRemarkDown });\r\n else\r\n highBoardEdgeRemark.push({ description: edgeRemarkUp });\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n highBoardEdgeRemark.push({ description: edgeRemarkRight });\r\n else\r\n highBoardEdgeRemark.push({ description: edgeRemarkLeft });\r\n }\r\n }\r\n }\r\n\r\n return highBoardEdgeRemark;\r\n}\r\n\r\n/**偏移前后曲线起点没改变 */\r\nexport function OffsetOutlineSpNotChange(oldcu: Curve, newCu: Curve)\r\n{\r\n if (!newCu) return false;\r\n if (oldcu.EndParam !== newCu.EndParam) return false;\r\n let sDerv = oldcu.GetFirstDeriv(0).normalize();\r\n let eDerv = oldcu.GetFirstDeriv(oldcu.EndParam).normalize().negate();\r\n sDerv.add(eDerv).normalize();\r\n let mDerv = newCu.StartPoint.sub(oldcu.StartPoint).normalize();\r\n return isParallelTo(mDerv, sDerv);\r\n}\r\n\r\n/**\r\n * 获取板件的轮廓曲线数组(合并共线了 已经对封边进行合并了 尊重原始时针)\r\n * GetBrContourCurvesBySealGrouped\r\n * @param offsetInside 向内偏移1(为了编辑封边)\r\n * */\r\nexport function GetBoardSealingCurves(br: Board, offsetInside = false): Curve[]\r\n{\r\n let brContour: ExtrudeContourCurve = Production.GetSpliteOutlineBySpliteSize(br);\r\n if (brContour)\r\n return brContour.Explode();//如果是拆单板 则直接炸开返回\r\n\r\n brContour = br.ContourCurve;\r\n if (brContour instanceof Circle)\r\n return [brContour.Clone()];\r\n\r\n if (offsetInside)\r\n {\r\n let dir = Math.sign(brContour.Area2);\r\n let offsetedCurve = brContour.GetOffsetCurves(-1 * dir)[0] as Polyline;\r\n if (OffsetOutlineSpNotChange(brContour, offsetedCurve))\r\n brContour = offsetedCurve;\r\n }\r\n\r\n //避免共线导致的侧面数据对应错误\r\n let curves = brContour.Explode();\r\n MergeCurvelist(curves);\r\n\r\n if (curves.length === 1 && curves[0] instanceof Circle)//变成一个圆\r\n return curves;\r\n\r\n if (br.IsSpecialShape)//是异形板(其实矩形板也需要分组 避免共线导致的错误) (但是如果删了这个 之前的数据会出现不兼容的问题)\r\n SubsectionCurvesOfHightSeal(curves);//分组 join 改变cus\r\n\r\n return curves;\r\n}\r\n\r\n\r\nexport interface BrSealedData\r\n{\r\n brContour: ExtrudeContourCurve;//板件轮廓(原始(没有转换为逆时针 因为Product那边会转换))\r\n sealedContour: ExtrudeContourCurve;//封边后的轮廓\r\n\r\n brCurves: Curve[];//封边轮廓(高级封边 已经成组)\r\n highSeals: IHighSealedItem[];//高级封边(一一对应)\r\n highReservedEdges: IHighReservedEdgeItem[];//高级预留边\r\n hasSealedErr?: boolean;//调用 GetSealedBoardContour 方法时判断是否有出现封边异常\r\n}\r\n\r\nclass OffsetPolyline2 extends OffsetPolyline\r\n{\r\n override InitSubCurves()\r\n {\r\n this._IsTopoOffset = true;\r\n return this;\r\n }\r\n protected override OffsetSubCurves(): void { }\r\n\r\n protected override GeneralCirclesAndVertexs(): void { }\r\n\r\n protected override GeneralTrimContours(): void\r\n {\r\n super.GeneralTrimContours();\r\n arrayRemoveIf(this._TrimPolylineContours, con => con.Curve.Area < 0.01);//因为局部偏移可能为0,产生0面积的轮廓\r\n }\r\n\r\n CheckPointDir(pt: Vector3): boolean\r\n {\r\n let dir = this.GetPointAtCurveDir(pt);\r\n return dir === 0 || dir === this._OffsetDistSign;//因为局部偏移可能为0,所以在线上的我们也保留了\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 获取板件的轮廓(没有扣封边)(拆单时表现)\r\n * 在拆单的时候 我们用这个轮廓(为了数据对应准确性)\r\n * 修改时 请注意函数 GetSealedBoardContour\r\n*/\r\nexport function GetBoardContour(br: Board): ExtrudeContourCurve | undefined\r\n{\r\n if (Math.abs(br.ContourCurve.Area) < 10)\r\n {\r\n InteractionLog([{ msg: `板件:${br.Name}`, entity: [br] }, { msg: \"板轮廓面积小于10\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n let curves = GetBoardSealingCurves(br);\r\n\r\n if (curves.length === 1 && curves[0] instanceof Circle)\r\n return curves[0];\r\n\r\n let allCurvs: Curve[] = [];\r\n for (let c of curves)\r\n if (c instanceof Polyline)\r\n allCurvs.push(...c.Explode());\r\n else\r\n allCurvs.push(c);\r\n let brContour = Polyline.FastCombine(allCurvs, LINK_FUZZ * 2, false);\r\n return brContour;\r\n}\r\n\r\n\r\n/**\r\n * 获取板件(扣封边后的)轮廓(拆单时)\r\n * 修改时 请注意函数 GetBoardContour\r\n * @param {Board} br 板件\r\n * @param {SplitOrderType} [splitType=SplitOrderType.ChaiDan] 拆单类型\r\n * @return {*} {(BrSealedData | undefined)}\r\n */\r\nexport function GetSealedBoardContour(br: Board, splitType: SplitOrderType = SplitOrderType.ChaiDan): BrSealedData | undefined\r\n{\r\n if (Math.abs(br.ContourCurve.Area) < 10)\r\n return;\r\n\r\n let curves = GetBoardSealingCurves(br);\r\n let highSeals = GetBoardHighSeal(br, curves);\r\n let highReservedEdges = GetBoardHighReservedEdge(br, curves);\r\n\r\n if (splitType === SplitOrderType.HoleGrooveDim) // 孔洞标注,不需计算预留边值\r\n for (const element of highReservedEdges)\r\n element.size = 0;\r\n\r\n if (curves.length === 1 && curves[0] instanceof Circle)\r\n {\r\n let res: BrSealedData = {\r\n brContour: curves[0],\r\n sealedContour: curves[0].GetOffsetCurves(-highSeals[0].size + highReservedEdges[0].size)[0] as Circle,\r\n brCurves: curves,\r\n highSeals,\r\n highReservedEdges,\r\n };\r\n return res;\r\n }\r\n\r\n let allCurvs: Curve[] = [];\r\n for (let c of curves)\r\n if (c instanceof Polyline)\r\n allCurvs.push(...c.Explode());\r\n else\r\n allCurvs.push(c);\r\n let brContour = Polyline.FastCombine(allCurvs, LINK_FUZZ * 2, false);\r\n\r\n let dir = Math.sign(brContour.Area2);\r\n\r\n let sealedContours: Polyline[];\r\n\r\n let maxOffset: number = 0; //正偏移(外)\r\n let minOffset: number = 0; //负偏移(内)\r\n\r\n const curOffsetValues = curves.map((c, i) =>\r\n {\r\n let seal = highSeals[i];//封边\r\n let reservedEdge = highReservedEdges[i];\r\n let offDist = -seal.size + reservedEdge.size;\r\n maxOffset = Math.max(maxOffset, offDist);\r\n minOffset = Math.min(minOffset, offDist);\r\n return offDist;\r\n });\r\n\r\n //判断偏移值全是0的情况\r\n if (minOffset === 0 && maxOffset === 0)\r\n {\r\n sealedContours = [brContour];\r\n }\r\n else if (false && curOffsetValues.every(v => equaln(v, curOffsetValues[0]), 1e-3))//判断每段偏移值是否一致\r\n {\r\n sealedContours = brContour.GetOffsetCurves(curOffsetValues[0] * dir) as Polyline[];\r\n }\r\n else\r\n {\r\n //先分解多段线生成对应线段和偏移值,防止两次偏移时启用的线段数不一致\r\n const newCurves: Curve[] = [];\r\n\r\n //----计算每段封边偏移值 begin---\r\n //封边 + 预留边(正数为封边正方向,负值为封边反方向)\r\n const offsetValues = [];\r\n for (let i = 0; i < curves.length; i++)\r\n {\r\n let seal = highSeals[i];\r\n let reservedEdge = highReservedEdges[i];\r\n let curve = curves[i];\r\n if (curve instanceof Polyline)\r\n {\r\n let curveExpds = curve.Explode().filter(c => c.Length >= 1e-4);\r\n for (const c of curveExpds)\r\n {\r\n offsetValues.push(-seal.size + reservedEdge.size);\r\n newCurves.push(c);\r\n }\r\n }\r\n else\r\n {\r\n offsetValues.push(-seal.size + reservedEdge.size);\r\n newCurves.push(curve);\r\n }\r\n }\r\n // --- 每段封边偏移值 end ----\r\n\r\n const SealedOffset = (curves: Curve[], offectValues: number[], dist: number) =>\r\n {\r\n //局部偏移\r\n let polylineOffset = new OffsetPolyline2(brContour, dir * dist);\r\n let subIndex = 0;\r\n polylineOffset._TrimCircleContours = [];\r\n polylineOffset._TrimArcContours = [];\r\n polylineOffset._SubOffsetedCurves = [];\r\n polylineOffset._SubCurves = [];\r\n polylineOffset._Circles = [];\r\n polylineOffset._CacheOCS = IdentityMtx4;\r\n polylineOffset._IsClose = true;\r\n\r\n for (let i = 0; i < curves.length; i++)\r\n {\r\n let curve = curves[i];//曲线组\r\n let offectValue = offectValues[i];\r\n if (Math.sign(offectValue) !== Math.sign(dist))\r\n offectValue = 0;\r\n\r\n let preOffectValue = offectValues[FixIndex(i - 1, curves)];\r\n\r\n if (curve.Length < 1e-4) continue;\r\n\r\n polylineOffset._SubCurves.push(curve);//sub\r\n\r\n //trim Circle\r\n if (offectValue > 0 && offectValue === preOffectValue)\r\n polylineOffset._Circles.push(new Circle(curve.StartPoint, offectValue));\r\n else\r\n polylineOffset._Circles.push(undefined);\r\n\r\n //offset\r\n let offsetC = curve.GetOffsetCurves(dir * offectValue)[0];\r\n if (offsetC)\r\n polylineOffset._SubOffsetedCurves.push({\r\n index: subIndex,\r\n curve: offsetC,\r\n dist: -offectValue,\r\n });\r\n else\r\n polylineOffset._TrimArcContours.push(Contour.CreateContour([curve, new Line(curve.StartPoint, curve.EndPoint)], false));\r\n\r\n subIndex++;\r\n }\r\n\r\n polylineOffset._Vertexs = polylineOffset._SubCurves.map(c => c.StartPoint);\r\n\r\n polylineOffset.Do();\r\n return polylineOffset;\r\n };\r\n\r\n let polylineOffset1: OffsetPolyline2;\r\n let offCurves = newCurves;\r\n //先判断负偏移,0的时候不偏移\r\n if (minOffset < 0)\r\n {\r\n polylineOffset1 = SealedOffset(newCurves, offsetValues, minOffset);\r\n offCurves = polylineOffset1._SubOffsetedCurves.map((s) => s.curve);\r\n }\r\n //如果存在正偏移,再偏移一次\r\n if (maxOffset > 0)\r\n {\r\n let polylineOffset2 = SealedOffset(offCurves, offsetValues, maxOffset);\r\n sealedContours = polylineOffset2._RetCurves;\r\n }\r\n else\r\n sealedContours = polylineOffset1._RetCurves;\r\n }\r\n\r\n let hasSealedErr = false;\r\n //如果有多个 取最大\r\n if (sealedContours.length > 1)\r\n {\r\n hasSealedErr = true;\r\n Toaster({\r\n message: `有板计算封边异常,请检查!(点击左下角提示可以查看该板)`,\r\n timeout: 15000,\r\n intent: Intent.WARNING,\r\n key: \"sealerror\"\r\n });\r\n\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板:${br.Name}`, entity: [br] }, { msg: `在扣除封边计算中,得到了${sealedContours.length}条轮廓,请检查!` }], LogType.Warning);\r\n\r\n let areas = sealedContours.map(p => p.Area);\r\n let maxIndex = Max(areas, (a1, a2) => a2 > a1);\r\n sealedContours = [sealedContours[maxIndex]];\r\n }\r\n\r\n //如果不闭合 则尝试闭合\r\n let sealedContour = sealedContours[0];\r\n if (sealedContour && !sealedContour.IsClose)\r\n {\r\n if (sealedContour.StartPoint.distanceTo(sealedContour.EndPoint) < 0.1)\r\n sealedContour.CloseMark = true;\r\n else\r\n sealedContour = CreateContour2([sealedContour])?.Curve as Polyline;\r\n }\r\n\r\n if (!sealedContour)\r\n return;\r\n\r\n //逆时针\r\n if (sealedContour && sealedContour.Area2 < 0)\r\n sealedContour.Reverse();\r\n\r\n let res: BrSealedData = {\r\n brContour,\r\n sealedContour,\r\n brCurves: curves,\r\n highSeals,\r\n highReservedEdges,\r\n hasSealedErr\r\n };\r\n\r\n return res;\r\n}\r\n\r\n\r\n/**\r\n * 将11对应的封边数值改成WebCAD的高级封边\r\n * @param seals 每段曲线的封边\r\n * @param curves 曲线表\r\n * @returns 转换成高级封边后的封边值 (圆弧会编组)\r\n */\r\nexport function ConverEachSeal2HightSealData(seals: IHighSealedItem[], curves: Curve[]): IHighSealedItem[]\r\n{\r\n curves = curves.concat();\r\n seals = seals.concat();\r\n let lastSeal = seals[seals.length - 1];\r\n\r\n for (let i = seals.length; i < curves.length; i++)\r\n seals.push(lastSeal);\r\n\r\n let map = new Map();\r\n for (let i = 0; i < curves.length; i++)\r\n map.set(curves[i], seals[i]);\r\n\r\n let groups = SubsectionCurvesOfHightSeal(curves);\r\n\r\n return groups.map(g => map.get(g[0]));\r\n}\r\n\r\n\r\n/**\r\n * 设置板的上下左右封边(解析来自高级封边)\r\n * @param br\r\n * @param sealDatas 封边数据\r\n * @param [sealCurves] 封边的曲线\r\n * @param [brContourCurve] 传递封边的曲线轮廓\r\n */\r\nexport function SetBoardTopDownLeftRightSealData(br: Board, sealDatas: IHighSealedItem[], sealCurves?: Curve[], brContourCurve?: ExtrudeContourCurve)\r\n{\r\n let dir = Math.sign((brContourCurve ?? br.ContourCurve).Area2);\r\n sealCurves = sealCurves ?? 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.IsRect && sealCurves.length === 4)\r\n {\r\n for (let i = 0; i < 4; i++)\r\n {\r\n const size = sealDatas[i].size.toString();\r\n const { sealColor: color = \"\" } = sealDatas[i];\r\n let derv = sealCurves[i].GetFirstDeriv(0).normalize();\r\n if (isParallelTo(derv, XAxis, 1e-4))\r\n {\r\n if (derv.x * dir > 0)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.DownSealed] = size;\r\n br.BoardProcessOption.sealColorDown = color;\r\n }\r\n else\r\n {\r\n br.BoardProcessOption[EBoardKeyList.UpSealed] = size;\r\n br.BoardProcessOption.sealColorUp = color;\r\n }\r\n }\r\n else\r\n {\r\n if (derv.y * dir > 0)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.RightSealed] = size;\r\n br.BoardProcessOption.sealColorRight = color;\r\n }\r\n else\r\n {\r\n br.BoardProcessOption[EBoardKeyList.LeftSealed] = size;\r\n br.BoardProcessOption.sealColorLeft = color;\r\n }\r\n }\r\n }\r\n }\r\n else\r\n {\r\n if (sealCurves.length === 0)\r\n return;\r\n let [left, right, top, bottom] = ParseEdgeSealDir(sealCurves);\r\n br.BoardProcessOption[EBoardKeyList.LeftSealed] = sealDatas[left].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.RightSealed] = sealDatas[right].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.UpSealed] = sealDatas[top].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.DownSealed] = sealDatas[bottom].size.toString();\r\n\r\n br.BoardProcessOption.sealColorLeft = sealDatas[left].sealColor ?? \"\";\r\n br.BoardProcessOption.sealColorRight = sealDatas[right].sealColor ?? \"\";\r\n br.BoardProcessOption.sealColorUp = sealDatas[top].sealColor ?? \"\";\r\n br.BoardProcessOption.sealColorDown = sealDatas[bottom].sealColor ?? \"\";\r\n }\r\n}\r\n\r\nexport function SetBoardReservedEdgeData(br: Board, sealDatas: IHighReservedEdgeItem[], sealCurves?: Curve[], brContourCurve?: ExtrudeContourCurve)\r\n{\r\n let dir = Math.sign((brContourCurve ?? br.ContourCurve).Area2);\r\n sealCurves = sealCurves ?? GetBoardSealingCurves(br);\r\n\r\n if (br.IsRect && sealCurves.length === 4)\r\n {\r\n for (let i = 0; i < 4; i++)\r\n {\r\n let derv = sealCurves[i].GetFirstDeriv(0).normalize();\r\n if (isParallelTo(derv, XAxis, 1e-4))\r\n {\r\n if (derv.x * dir > 0)\r\n br.BoardProcessOption.reservedEdgeDown = sealDatas[i].size.toString();\r\n else\r\n br.BoardProcessOption.reservedEdgeUp = sealDatas[i].size.toString();\r\n }\r\n else\r\n {\r\n if (derv.y * dir > 0)\r\n br.BoardProcessOption.reservedEdgeRight = sealDatas[i].size.toString();\r\n else\r\n br.BoardProcessOption.reservedEdgeLeft = sealDatas[i].size.toString();\r\n }\r\n }\r\n }\r\n else\r\n {\r\n if (sealCurves.length === 0)\r\n return;\r\n let [left, right, top, bottom] = ParseEdgeSealDir(sealCurves);\r\n br.BoardProcessOption.reservedEdgeLeft = sealDatas[left].size.toString();\r\n br.BoardProcessOption.reservedEdgeRight = sealDatas[right].size.toString();\r\n br.BoardProcessOption.reservedEdgeUp = sealDatas[top].size.toString();\r\n br.BoardProcessOption.reservedEdgeDown = sealDatas[bottom].size.toString();\r\n }\r\n}\r\n\r\nexport function SetBoardEdgeRemarkData(br: Board, remarkDatas: IHighEdgeRemarkItem[], sealCurves?: Curve[], brContourCurve?: ExtrudeContourCurve)\r\n{\r\n let dir = Math.sign((brContourCurve ?? br.ContourCurve).Area2);\r\n sealCurves = sealCurves ?? GetBoardSealingCurves(br);\r\n\r\n const opt = br.BoardProcessOption;\r\n if (br.IsRect && sealCurves.length === 4)\r\n {\r\n for (let i = 0; i < 4; i++)\r\n {\r\n let derv = sealCurves[i].GetFirstDeriv(0).normalize();\r\n if (isParallelTo(derv, XAxis, 1e-4))\r\n {\r\n if (derv.x * dir > 0)\r\n opt.edgeRemarkDown = remarkDatas[i].description;\r\n else\r\n opt.edgeRemarkUp = remarkDatas[i].description;\r\n }\r\n else\r\n {\r\n if (derv.y * dir > 0)\r\n opt.edgeRemarkRight = remarkDatas[i].description;\r\n else\r\n opt.edgeRemarkLeft = remarkDatas[i].description;\r\n }\r\n }\r\n }\r\n else\r\n {\r\n if (sealCurves.length === 0)\r\n return;\r\n let [left, right, top, bottom] = ParseEdgeSealDir(sealCurves);\r\n opt.edgeRemarkLeft = remarkDatas[left].description;\r\n opt.edgeRemarkRight = remarkDatas[right].description;\r\n opt.edgeRemarkUp = remarkDatas[top].description;\r\n opt.edgeRemarkDown = remarkDatas[bottom].description;\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../../Common/ArrayExt\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { ExtrudeSolid } from \"../../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { AsVector2, equaln } from \"../../Geometry/GeUtils\";\r\nimport { GetBoardSealingCurves, SubsectionCurvesOfHightSeal } from \"../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { FixIndex } from \"../../Nest/Common/Util\";\r\nimport { SplitPolyline } from \"./SplitPolyline\";\r\n\r\n//侧面造型分裂\r\nexport class SplitBoardSideModelUtil\r\n{\r\n //备份原始二维刀路在世界坐标系中\r\n private OrgBoardOCS: Matrix4 = new Matrix4();\r\n private CacheSideModel: Map = new Map();\r\n private OldSealCurves: Curve[] = [];\r\n\r\n constructor(br: Board)\r\n {\r\n this.Init(br);\r\n }\r\n\r\n Init(br: Board, isSpecialShape = false)\r\n {\r\n this.OrgBoardOCS = br.OCS;\r\n let curves = GetBoardSealingCurves(br);\r\n\r\n //取消异型操作会提前令isSpecialShape = false\r\n if (isSpecialShape)\r\n SubsectionCurvesOfHightSeal(curves);\r\n\r\n let oldSealCurves: Curve[] = [];\r\n\r\n for (let c of curves)\r\n if (c instanceof Polyline)\r\n oldSealCurves.push(...c.Explode());\r\n else\r\n oldSealCurves.push(c);\r\n\r\n this.OldSealCurves = oldSealCurves;\r\n\r\n const sideModelMap: Map = new Map();\r\n\r\n for (let [num, soilds] of br.SideModelingMap)\r\n sideModelMap.set(num, soilds);\r\n\r\n this.CacheSideModel = sideModelMap;\r\n }\r\n\r\n CheckSideModel(): boolean\r\n {\r\n let maxSideIndex = 0;\r\n for (let [num, soilds] of this.CacheSideModel)\r\n maxSideIndex = Math.max(num, maxSideIndex);\r\n\r\n return this.OldSealCurves.length >= maxSideIndex;\r\n }\r\n\r\n SetBoardSideModel(br: Board)\r\n {\r\n if (!this.CacheSideModel.size) return;\r\n\r\n if (this.CheckSideModel())\r\n {\r\n this.SpiltSideModelOfBrContour(br);\r\n }\r\n }\r\n\r\n //新轮廓切割原始轮廓\r\n SpiltSideModelOfBrContour(br: Board)\r\n {\r\n let curves = GetBoardSealingCurves(br);\r\n\r\n let newSealCurves: Curve[] = [];\r\n\r\n for (let c of curves)\r\n if (c instanceof Polyline)\r\n newSealCurves.push(...c.Explode());\r\n else\r\n newSealCurves.push(c);\r\n\r\n let sideMadelMap: Map = new Map();\r\n for (let [nmu, soilds] of this.CacheSideModel)\r\n {\r\n if (soilds?.length)\r\n {\r\n let oldCu = this.OldSealCurves[nmu]?.Clone();\r\n if (!oldCu) continue;\r\n\r\n oldCu.ApplyMatrix(this.OrgBoardOCS);\r\n for (let i = 0; i < newSealCurves.length; i++)\r\n {\r\n if (newSealCurves[i] instanceof Arc) continue;\r\n let newCu = newSealCurves[i].Clone().ApplyMatrix(br.OCSNoClone) as Line;\r\n let p = newCu.GetPointAtParam(newCu.EndParam * 0.5);\r\n\r\n let spliteEnts: ExtrudeSolid[] = [];\r\n\r\n if (oldCu.PtOnCurve(p))\r\n {\r\n let startX = oldCu.GetDistAtPoint(newCu.StartPoint);\r\n let endX = oldCu.GetDistAtPoint(newCu.EndPoint);\r\n\r\n if (startX > endX)\r\n {\r\n let backStart = startX;\r\n startX = endX;\r\n endX = backStart;\r\n }\r\n\r\n let box = new Box3Ext(new Vector3(startX), new Vector3(endX, br.Thickness));\r\n\r\n let knifePls: Polyline[] = [];\r\n\r\n for (let soild of soilds)\r\n {\r\n if (soild.Thickness <= 0) continue;\r\n\r\n let sCon = soild.ContourCurve.Clone().ApplyMatrix(soild.OCSNoClone) as Polyline;\r\n let thickness = soild.Thickness;\r\n\r\n let newNeighborCus: Curve[] = [];\r\n newNeighborCus.push(newSealCurves[FixIndex(i - 1, newSealCurves)].Clone().ApplyMatrix(br.OCSNoClone));\r\n newNeighborCus.push(newSealCurves[FixIndex(i + 1, newSealCurves)].Clone().ApplyMatrix(br.OCSNoClone));\r\n\r\n const offsetCus = newCu.GetOffsetCurves(-thickness);\r\n const xPtList: number[] = [startX, endX];\r\n\r\n for (let cu of offsetCus)\r\n {\r\n for (let nbCu of newNeighborCus)\r\n {\r\n const intersectPts = cu.IntersectWith(nbCu, IntersectOption.ExtendThis);\r\n for (let pt of intersectPts)\r\n {\r\n let { closestPt } = newCu.GetClosestAtPoint(pt, true);\r\n let ptX = oldCu.GetDistAtPoint(closestPt);\r\n xPtList.push(ptX);\r\n }\r\n }\r\n }\r\n\r\n xPtList.sort((a, b) => a - b);\r\n\r\n for (let x of [xPtList[0], arrayLast(xPtList)])\r\n knifePls.push(new Polyline([{ pt: AsVector2({ x, y: 0 }), bul: 0 }, { pt: AsVector2({ x, y: 1 }), bul: 0 }]));\r\n\r\n let splitSideModelCons = SplitPolyline(sCon, knifePls);\r\n\r\n if (!splitSideModelCons.length)\r\n splitSideModelCons.push(sCon);\r\n\r\n for (let j = 0; j < splitSideModelCons.length; j++)\r\n {\r\n let intersectBox = box.clone().intersect(splitSideModelCons[j].BoundingBox);\r\n if (box.intersectsBox(splitSideModelCons[j].BoundingBox, 1) && !equaln(intersectBox.max.x, intersectBox.min.x))\r\n {\r\n let soildClone = soild.Clone();\r\n soildClone.ContourCurve = splitSideModelCons[j].ApplyMatrix(soild.OCSInv);\r\n soildClone.GrooveCheckAllAutoSplit();\r\n soildClone.ApplyMatrix(new Matrix4().setPosition(-startX, 0, 0));\r\n spliteEnts.push(soildClone);\r\n }\r\n }\r\n }\r\n\r\n if (spliteEnts.length)\r\n sideMadelMap.set(i, spliteEnts);\r\n }\r\n }\r\n }\r\n }\r\n\r\n br.SideModelingMap = sideMadelMap;\r\n }\r\n\r\n //修改板厚度时裁剪侧面造型\r\n SpiltSideModelOfBrThickness(br: Board, thickness: number)\r\n {\r\n this.Init(br);\r\n\r\n let sideMadelMap: Map = new Map();\r\n for (let [nmu, soilds] of this.CacheSideModel)\r\n {\r\n if (soilds?.length)\r\n {\r\n let cu = this.OldSealCurves[nmu]?.Clone();\r\n if (!cu) continue;\r\n cu.ApplyMatrix(this.OrgBoardOCS);\r\n\r\n let spliteEnts: ExtrudeSolid[] = [];\r\n let knifePls: Polyline[] = [];\r\n let box = new Box3Ext(new Vector3(), new Vector3(cu.Length, thickness));\r\n\r\n for (let soild of soilds)\r\n {\r\n if (soild.Thickness <= 0) continue;\r\n\r\n let sCon = soild.ContourCurve.Clone().ApplyMatrix(soild.OCSNoClone) as Polyline;\r\n\r\n knifePls.push(new Polyline([{ pt: AsVector2({ x: 0, y: 0 }), bul: 0 }, { pt: AsVector2({ x: 1, y: 0 }), bul: 0 }]));\r\n knifePls.push(new Polyline([{ pt: AsVector2({ x: 0, y: thickness }), bul: 0 }, { pt: AsVector2({ x: 1, y: thickness }), bul: 0 }]));\r\n\r\n let splitSideModelCons = SplitPolyline(sCon, knifePls);\r\n\r\n if (!splitSideModelCons.length)\r\n splitSideModelCons.push(sCon);\r\n\r\n for (let con of splitSideModelCons)\r\n {\r\n let intersectBox = box.clone().intersect(con.BoundingBox);\r\n if (box.intersectsBox(con.BoundingBox, 1) && !equaln(intersectBox.max.y, intersectBox.min.y))\r\n {\r\n let soildClone = soild.Clone();\r\n soildClone.ContourCurve = con.ApplyMatrix(soild.OCSInv);\r\n soildClone.GrooveCheckAllAutoSplit();\r\n spliteEnts.push(soildClone);\r\n }\r\n }\r\n }\r\n\r\n if (spliteEnts.length)\r\n sideMadelMap.set(nmu, spliteEnts);\r\n }\r\n }\r\n\r\n br.SideModelingMap = sideMadelMap;\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.GetFirstDeriv(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","import { Vector3 } from \"three\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { CADFiler } from \"../../DatabaseServices/CADFiler\";\r\nimport { I2DModeling, I3DModeling, IPathItem } from \"../../DatabaseServices/Entity/Board\";\r\nimport { ExtrudeSolid } from \"../../DatabaseServices/Entity/Extrude\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { BoardProcessOption } from \"../../UI/Store/OptionInterface/BoardProcessOption\";\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 file.Write(n.sealColor);\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 let sealColor = \"\";\r\n if (ver > 23)\r\n {\r\n sealColor = file.Read();\r\n }\r\n\r\n if (ver < 4)\r\n {\r\n file.Read();\r\n }\r\n\r\n processData[EBoardKeyList.HighSealed].push({ size, sealColor });\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 file.Write(item.depthExpr);\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 let depthExpr: string;\r\n if (ver > 19)\r\n {\r\n depthExpr = file.Read();\r\n }\r\n else\r\n {\r\n depthExpr = depth.toString();\r\n }\r\n m.items.push({\r\n depth, offset, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName }, depthExpr\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\r\nexport function SerializeBoardSideModeingData(file: CADFiler, sideModelingMap: Map)\r\n{\r\n file.Write(sideModelingMap.size);\r\n\r\n for (let [index, sideModelingList] of sideModelingMap)\r\n {\r\n file.Write(index);\r\n file.Write(sideModelingList.length);\r\n\r\n for (let data of sideModelingList)\r\n file.WriteObject(data);\r\n }\r\n}\r\n\r\nexport function DeserializationBoardSideModeingData(file: CADFiler, sideModelingMap: Map)\r\n{\r\n sideModelingMap.clear();\r\n\r\n const count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let index = file.Read();\r\n let listCount = file.Read();\r\n let sideModelingList: ExtrudeSolid[] = [];\r\n\r\n for (let j = 0; j < listCount; j++)\r\n {\r\n let obj = file.ReadObject() as ExtrudeSolid;\r\n sideModelingList.push(obj);\r\n }\r\n\r\n sideModelingMap.set(index, sideModelingList);\r\n }\r\n}\r\n","import { Task } from \"../../Common/ThreadPool/Task\";\r\n\r\nexport type CSGTask = Pick;\r\n\r\ntype CSGSubtractFunction = (task: CSGTask) => void;\r\nexport const _CSGSubtractInjectInteractionFunctions: CSGSubtractFunction[] = [];\r\nexport function AddCSGSubtractTask(task: CSGTask)\r\n{\r\n for (let f of _CSGSubtractInjectInteractionFunctions)\r\n f(task);\r\n}\r\n\r\nexport type TaskKey = Pick;\r\ntype TerminateCSGTaskFunction = (task: TaskKey) => void;\r\nexport const _TerminateTaskInjectInteractionFunctions: TerminateCSGTaskFunction[] = [];\r\nexport function TerminateCSGTask(task: TaskKey)\r\n{\r\n for (let f of _TerminateTaskInjectInteractionFunctions)\r\n f(task);\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { BoardOpenDir, LinesType } from \"../DatabaseServices/Entity/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 //开门方向纹路\r\n static LinesOpenDirPts(len: number, width: number, openDir: BoardOpenDir)\r\n {\r\n if (openDir === BoardOpenDir.Right)\r\n {\r\n return [\r\n new Vector3(-width / 2, -len / 2), new Vector3(width / 2, 0),\r\n new Vector3(width / 2, 0), new Vector3(-width / 2, len / 2)\r\n ];\r\n }\r\n else if (openDir === BoardOpenDir.Left)\r\n {\r\n return [\r\n new Vector3(width / 2, -len / 2), new Vector3(-width / 2, 0),\r\n new Vector3(-width / 2, 0), new Vector3(width / 2, len / 2)\r\n ];\r\n }\r\n else if (openDir === BoardOpenDir.Up)\r\n {\r\n return [\r\n new Vector3(-width / 2, -len / 2), new Vector3(0, len / 2),\r\n new Vector3(0, len / 2), new Vector3(width / 2, -len / 2)\r\n ];\r\n }\r\n else if (openDir === BoardOpenDir.Down)\r\n {\r\n return [\r\n new Vector3(-width / 2, len / 2), new Vector3(0, -len / 2),\r\n new Vector3(0, -len / 2), new Vector3(width / 2, len / 2)\r\n ];\r\n }\r\n }\r\n\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, LineSegments, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { equaln, equalv3 } from '../../Geometry/GeUtils';\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Curve } from \"../Entity/Curve\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { Shape2 } from \"../Shape2\";\r\n\r\n\r\n/**\r\n * 封边视图下和修改封边时显示的实体\r\n */\r\nexport class SealSolid extends Entity\r\n{\r\n protected OnlyRenderType: boolean = true;\r\n protected _PathCurve: Curve;\r\n private _SealWidth: number;\r\n constructor(pathCurve: Curve, sealWidth: number)\r\n {\r\n super();\r\n this._PathCurve = pathCurve;\r\n this._SealWidth = sealWidth;\r\n\r\n if (this._PathCurve)\r\n {\r\n let path = this._PathCurve;\r\n\r\n this.OCS = path.OCSNoClone;\r\n this._SpaceOCS.copy(path.OCSNoClone);\r\n\r\n let ocsInv = this.OCSInv;\r\n this._PathCurve.ApplyMatrix(ocsInv);\r\n }\r\n }\r\n\r\n private _MeshGeometry: BufferGeometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n let z0 = 0;\r\n let z1 = this._SealWidth;\r\n let coords = [];\r\n let pts = (this._PathCurve.Shape as Shape2).getPoints();\r\n\r\n for (let i = 0; i < pts.length - 1; i++)\r\n {\r\n let p = pts[i];\r\n let nextp = pts[FixIndex(i + 1, pts)];\r\n coords.push(\r\n p.x, p.y, z0,\r\n nextp.x, nextp.y, z1,\r\n nextp.x, nextp.y, z0,\r\n\r\n p.x, p.y, z0,\r\n p.x, p.y, z1,\r\n nextp.x, nextp.y, z1\r\n );\r\n }\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n edgeGeo.computeVertexNormals();\r\n this._MeshGeometry = edgeGeo;\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: BufferGeometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n let z0 = 0;\r\n let z1 = this._SealWidth;\r\n let coords: number[] = [];\r\n const pl = this._PathCurve;\r\n\r\n let pts = (pl.Shape as Shape2).getPoints();\r\n\r\n for (let i = 0; i < pts.length - 1; i++)\r\n {\r\n let p = pts[i];\r\n let nextp = pts[FixIndex(i + 1, pts)];\r\n coords.push(p.x, p.y, z0, nextp.x, nextp.y, z0);\r\n coords.push(p.x, p.y, z1, nextp.x, nextp.y, z1);\r\n if (p[\"_mask_\"])\r\n coords.push(p.x, p.y, z0, p.x, p.y, z1);\r\n }\r\n\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n edgeGeo.computeVertexNormals();\r\n this._EdgeGeometry = edgeGeo;\r\n\r\n return this._EdgeGeometry;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType): Object3D\r\n {\r\n const mtl = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex);\r\n mtl.transparent = true;\r\n mtl.opacity = 0.3;\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, mtl),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex))\r\n );\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 ClearDraw(): this\r\n {\r\n this.UpdateDrawGeometry();\r\n return super.ClearDraw();\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n const mtl = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex);\r\n mtl.transparent = true;\r\n mtl.opacity = 0.3;\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, mtl),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex))\r\n );\r\n }\r\n\r\n /**\r\n * 当实体需要被更新时,更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n const mtl = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex);\r\n mtl.transparent = true;\r\n mtl.opacity = 0.3;\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, mtl),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)),\r\n );\r\n }\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}\r\n","export enum FontStyleKeyCode\r\n{\r\n Height = 1,\r\n WidthFactor = 2,\r\n FontType = 3\r\n}\r\n","import { FontType } from \"../../Add-on/TextStyle/FontStyleInterface\";\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 FontStyleRecord extends SymbolTableRecord\r\n{\r\n /** 字体高度 1 */\r\n @AutoRecord Height: number = 60;//1\r\n\r\n /** 宽度因子 2 字符串间距 */\r\n @AutoRecord WidthFactor: number = 1;\r\n\r\n /** 样式类型 3 */\r\n @AutoRecord FontType: FontType = FontType.YaHei;\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n override ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n\r\n this.Height = file.Read();\r\n this.WidthFactor = file.Read();\r\n this.FontType = file.Read();\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.Height);\r\n file.Write(this.WidthFactor);\r\n file.Write(this.FontType);\r\n }\r\n //#endregion\r\n}\r\n","import { BufferGeometry, Geometry, Matrix3, Matrix4, Mesh, Object3D, ShapeGeometry, Vector3 } from 'three';\r\nimport { FontType } from '../../Add-on/TextStyle/FontStyleInterface';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { GetBox, MoveMatrix, XAxis, XAxisN, YAxis, YAxisN, ZAxisN } from '../../Geometry/GeUtils';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Entity } from '../Entity/Entity';\r\nimport { FontStyleKeyCode } from '../FontStyle/FontStyleKeyCodeEnum';\r\nimport { FontStyleRecord } from '../FontStyle/FontsStyleRecord';\r\nimport { ObjectId } from '../ObjectId';\r\n\r\nexport const TEXT_HEIGHT_SCALE = 1.35;\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\n// 多层lineHeight比例计算方式:\r\n// src\\DatabaseServices\\Text\\FontExt.ts createPaths函数中\r\n// textHeight * (textType.boundingBox.yMax - textType.boundingBox.yMin + textType.underlineThickness) / textType.resolution\r\nconst LineHeightScaleMap =\r\n{\r\n [FontType.YaHei]: 1.875, // (1439+355+81) / 1000\r\n [FontType.SongTi]: 1.834, // (1369+437+28) / 1000\r\n [FontType.KaiTi]: 1.514, // (1194 +255 + 65) / 1000\r\n [FontType.FangSong]: 1.487, // (1194 +228 + 65) / 1000\r\n [FontType.LiShu]: 1.58, // (1194 +315 + 71) / 1000\r\n [FontType.HeiTi]: 1.476, // (1194 +217 +65 ) / 1000\r\n [FontType.HuaWenLiShu]: 1.499, // (1111 +360 +28 ) / 1000\r\n [FontType.HuaWenXingKai]: 1.543, // (1114 +401 +28 ) / 1000\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 protected _FontStyle: ObjectId;//字体样式\r\n protected _FontStyleOverride: Map = new Map;//字体样式替代\r\n protected _RoomName: string = \"\";\r\n protected _CabinetName: string = \"\";\r\n private _Align: TextAligen = TextAligen.LeftDown;\r\n IsDoubleMesh = false;//文字使用双面网格体\r\n IsFsText = false;//文字写在俯视图上\r\n\r\n constructor(pos?: Vector3,\r\n private _TextString: string = \"\",\r\n private _TextRotation: number = 0,\r\n fontName?: FontType,\r\n widthFactor?: number)\r\n {\r\n super();\r\n pos && this._Matrix.setPosition(pos);\r\n\r\n this.FontStyle = HostApplicationServices.CurrentFontStyle;\r\n\r\n if (fontName)\r\n this.FontName = fontName;\r\n\r\n if (widthFactor)\r\n this.WidthFactor = widthFactor;\r\n\r\n }\r\n\r\n get RoomName() { return this._RoomName; }\r\n set RoomName(value: string)\r\n {\r\n if (value === this._RoomName) return;\r\n this.WriteAllObjectRecord();\r\n this._RoomName = value;\r\n }\r\n\r\n get CabinetName() { return this._CabinetName; }\r\n set CabinetName(value: string)\r\n {\r\n if (value === this._CabinetName) return;\r\n this.WriteAllObjectRecord();\r\n this._CabinetName = value;\r\n }\r\n\r\n get TextRotation()\r\n {\r\n return this._TextRotation;\r\n }\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\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 /**设置字体样式 */\r\n set FontStyle(styleId: ObjectId)\r\n {\r\n if (styleId === this._FontStyle) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n this._FontStyle = styleId;\r\n\r\n this.Update();\r\n }\r\n\r\n /**大概多行文字的高度 */\r\n get MultiHeight()\r\n {\r\n // this.Height 为用户初始化设置的高度。\r\n // 但是this.Height和实际渲染高度不一致。所以使用高度乘以比例scale,这样行高会精确一点。\r\n // 如果需要精确的,可以绘制完后,再获取实际高度。\r\n const scale = LineHeightScaleMap[this.FontName] || LineHeightScaleMap[FontType.SongTi];\r\n if (this._TextString.includes(\"\\n\"))\r\n {\r\n let texts = this._TextString.split(\"\\n\");\r\n const scale = LineHeightScaleMap[this.FontName] || LineHeightScaleMap[FontType.SongTi];\r\n return texts.length * this.Height * scale;\r\n };\r\n return this.Height * scale;\r\n }\r\n\r\n get FontStyle() { return this._FontStyle; }\r\n\r\n //字体样式名称\r\n get FontName()\r\n {\r\n return this.GetFontStyleValue(FontStyleKeyCode.FontType);\r\n }\r\n set FontName(fontName: FontType)\r\n {\r\n this.SetFontStyleOverrideValue(FontStyleKeyCode.FontType, fontName);\r\n }\r\n\r\n //字体尺寸大小\r\n get Height(): number\r\n {\r\n return this.GetFontStyleValue(FontStyleKeyCode.Height);\r\n }\r\n set Height(value: number)\r\n {\r\n this.SetFontStyleOverrideValue(FontStyleKeyCode.Height, value);\r\n }\r\n\r\n //字体间距\r\n get WidthFactor(): number\r\n {\r\n return this.GetFontStyleValue(FontStyleKeyCode.WidthFactor);\r\n }\r\n set WidthFactor(value: number)\r\n {\r\n this.SetFontStyleOverrideValue(FontStyleKeyCode.WidthFactor, value);\r\n }\r\n\r\n get FontStyleOverride()\r\n {\r\n return this._FontStyleOverride;\r\n }\r\n\r\n GetFontStyleOverrideValue(key: FontStyleKeyCode): any { return this._FontStyleOverride.get(key); }\r\n\r\n GetFontStyleValue(key: FontStyleKeyCode)\r\n {\r\n let value = this.GetFontStyleOverrideValue(key);\r\n if (value !== undefined) return value;\r\n\r\n if (this._FontStyle?.Object)\r\n return this._FontStyle.Object[FontStyleKeyCode[key]];\r\n\r\n if (HostApplicationServices.CurrentFontStyle && HostApplicationServices.CurrentFontStyle.Object instanceof FontStyleRecord)\r\n return HostApplicationServices.CurrentFontStyle.Object[FontStyleKeyCode[key]];\r\n }\r\n\r\n //设置覆盖的样式\r\n SetFontStyleOverrideValue(key: FontStyleKeyCode, value: any)\r\n {\r\n if (this.GetFontStyleOverrideValue(key) === value) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let oldV = this.GetFontStyleValue(key);\r\n\r\n this._FontStyleOverride.set(key, value);\r\n\r\n if (oldV !== value)\r\n this.Update();\r\n }\r\n\r\n ClearFontStyleOverride()\r\n {\r\n if (this._FontStyleOverride.size === 0) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._FontStyleOverride.clear();\r\n this.Update();\r\n }\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 const textStr = this._TextString.split(\"\\n\");\r\n for (const txt of textStr)\r\n {\r\n let cTemp = 0;\r\n for (let i = 0; i < txt.length; i++)\r\n {\r\n const code = txt.charCodeAt(i);\r\n if (code > 255)\r\n cTemp++;\r\n else\r\n cTemp += 0.5;\r\n }\r\n count = Math.max(count, cTemp);\r\n }\r\n\r\n return count * this.Height * TEXT_HEIGHT_SCALE * this.WidthFactor;\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(new Matrix4().makeRotationZ(this.TextRotation)).applyMatrix4((this.OCSNoClone));\r\n }\r\n\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let width = this.Width;\r\n let height = this.MultiHeight;\r\n\r\n let obj = this._CacheDrawObject.get(RenderType.Wireframe);\r\n if (obj && obj.children.length === 1)\r\n {\r\n let geo = (obj.children[0] as Mesh).geometry as BufferGeometry;\r\n if (geo)\r\n {\r\n if (!geo.boundingBox)\r\n geo.computeBoundingBox();\r\n\r\n width = geo.boundingBox.max.x - geo.boundingBox.min.x;\r\n height = geo.boundingBox.max.y - geo.boundingBox.min.y;\r\n }\r\n }\r\n\r\n let w = Math.max(Math.abs(width / 2), 1);\r\n let h = Math.max(Math.abs(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 > 0)\r\n {\r\n let [mesh, mesh2] = obj.children as [Mesh, 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 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 if (mesh2 && this.IsDoubleMesh)\r\n {\r\n //左右视图时应该这样,俯视图是X,-Y,-Z(y+=(xxx)\r\n if (this.IsFsText)\r\n {\r\n p.y += (box.max.y - box.min.y);\r\n mesh2.matrix = new Matrix4().makeBasis(XAxis, YAxisN, ZAxisN).premultiply(\r\n new Matrix4().makeRotationZ(this.TextRotation).multiply(\r\n new Matrix4().setPosition(p)\r\n )\r\n );\r\n }\r\n else\r\n {\r\n p.x += (box.max.x - box.min.x);\r\n mesh2.matrix = new Matrix4().makeBasis(XAxisN, YAxis, ZAxisN).premultiply(\r\n new Matrix4().makeRotationZ(this.TextRotation).multiply(\r\n new Matrix4().setPosition(p)\r\n )\r\n );\r\n }\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.DrawColorIndex;\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.DrawColorIndex;\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 GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n if (snapMode === ObjectSnapMode.End)\r\n {\r\n let box = this.BoundingBoxInOCS;\r\n let p2 = new Vector3(box.min.x, box.max.y);\r\n let p3 = new Vector3(box.max.x, box.min.y);\r\n let pts = [box.min, p2, p3, box.max];\r\n for (let p of pts)\r\n p.applyMatrix4(this.OCSNoClone);\r\n return pts;\r\n }\r\n return [];\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 protected ReadFontStyle(file: CADFiler)\r\n {\r\n this._FontStyleOverride.clear();\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let k = file.Read();\r\n let v = file.Read();\r\n this._FontStyleOverride.set(k, v);\r\n }\r\n }\r\n protected WriteFontStyle(file: CADFiler)\r\n {\r\n file.Write(this._FontStyleOverride.size);\r\n for (let [k, v] of this._FontStyleOverride)\r\n {\r\n file.Write(k);\r\n file.Write(v);\r\n }\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._TextString = file.Read();\r\n\r\n if (ver < 2)\r\n this.Height = file.Read();\r\n\r\n this.TextRotation = file.Read();\r\n\r\n if (ver < 2)\r\n this.FontName = file.Read();\r\n\r\n this._Align = file.Read();\r\n\r\n //从版本2开始使用FontStyle\r\n if (ver >= 2)\r\n {\r\n this.ReadFontStyle(file);\r\n this._FontStyle = file.ReadHardObjectId() ?? HostApplicationServices.CurrentFontStyle;\r\n }\r\n\r\n if (ver > 2)\r\n {\r\n this._RoomName = file.Read();\r\n this._CabinetName = file.Read();\r\n }\r\n }\r\n\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);//ver\r\n\r\n file.Write(this._TextString);\r\n file.Write(this.TextRotation);\r\n file.Write(this._Align);\r\n\r\n this.WriteFontStyle(file);\r\n file.WriteHardObjectId(this._FontStyle);\r\n\r\n file.Write(this._RoomName);\r\n file.Write(this._CabinetName);\r\n }\r\n //#endregion-----------------------------File End-----------------------------\r\n}\r\n\r\n\r\nexport const DbText = Text;\r\n","import Geom3 from '@jscad/modeling/src/geometries/geom3/type';\r\nimport { BufferAttribute, BufferGeometry, Euler, FrontSide, Frustum, Geometry, LineSegments, Matrix3, Matrix4, Mesh, Object3D, ShapeBufferGeometry, Line as TLine, UVGenerator, Vector3 } from 'three';\r\nimport { ArcBoardBuild } from '../../Add-on/ArcBoard/ArcBoardBuild';\r\nimport { ArcBoardOptions, ParseBoardArcFeed, defultArcBoardOption } from '../../Add-on/ArcBoard/ArcBoardFeeding';\r\nimport { CurveManager } from '../../Add-on/BoardCutting/LinearCuttingForSweep';\r\nimport { SplitBoardSideModelUtil } from '../../Add-on/BoardCutting/SplitBoardSideModel';\r\nimport { Board2Regions } from '../../Add-on/BoardEditor/Board2Regions';\r\nimport { DeserializationBoard2DModeingData, DeserializationBoard3DModeingData, DeserializationBoardSideModeingData, SerializeBoard2DModeingData, SerializeBoard3DModeingData, SerializeBoardSideModeingData, deserializationBoardData, serializeBoardData } from '../../Add-on/BoardEditor/SerializeBoardData';\r\nimport { DrillType, FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { CyHoleInBoard, IBoardRectHoleType, ParseBoardRectHoleType, SetBrHighHoleTypeFromRectHoleType } from '../../Add-on/DrawDrilling/HoleUtils';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { AddEntityDrawObject } from '../../Common/AddEntityDrawObject';\r\nimport { arrayLast, arrayPushArray, arrayRemoveDuplicateBySort, arrayRemoveIf, arraySortByNumber, arraySum } from '../../Common/ArrayExt';\r\nimport { EBoardKeyList } from '../../Common/BoardKeyList';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { MakeMirrorMtx, TransformVector, tempMatrix1 } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { FixedNotZero } from '../../Common/Utils';\r\nimport { safeEval } from '../../Common/eval';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { SelectPick } from '../../Editor/SelectPick';\r\nimport { BoardSideModelCSGBuilder, GetSideCuFaceMtx } from '../../Geometry/Board2DModelCSG/BoardSideModelCSGBuilder';\r\nimport { boardUVGenerator, boardUVGenerator2 } from '../../Geometry/BoardUVGenerator';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { TerminateCSGTask } from '../../Geometry/CSGSubtract/CSGSubtractTaskManager';\r\nimport { AsVector2, AsVector3, IdentityMtx4, UpdateBoundingSphere, XAxis, XAxisN, YAxis, YAxisN, ZAxis, ZeroVec, equaln, equalv2, equalv3 } from '../../Geometry/GeUtils';\r\nimport { PointShapeUtils } from '../../Geometry/PointShapeUtils';\r\nimport { GetBoardContour, GetBoardHighReservedEdge, GetBoardHighSeal, GetBoardSealingCurves, GetHighBoardEdgeRemark, SetBoardEdgeRemarkData, SetBoardReservedEdgeData, SetBoardTopDownLeftRightSealData } from '../../GraphicsSystem/CalcEdgeSealing';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { BoardProcessOption } from \"../../UI/Store/OptionInterface/BoardProcessOption\";\r\nimport { CylinderHole } from '../3DSolid/CylinderHole';\r\nimport { ExtrudeHole } from '../3DSolid/ExtrudeHole';\r\nimport { SealSolid } from '../3DSolid/SealSolid';\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 { HistorycRecord } from '../HistorycRecord';\r\nimport { ObjectId } from '../ObjectId';\r\nimport { Shape } from '../Shape';\r\nimport { Text as DbText, TextAligen } from \"../Text/Text\";\r\nimport { Arc } from './Arc';\r\nimport { ArcBoardFeedProcess } from './ArcBoardType';\r\nimport { BoardOpenDir, BoardType, ComposingType, LinesType } from './BoardInterface';\r\nimport { Circle } from './Circle';\r\nimport { Curve } from './Curve';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Entity } from './Entity';\r\nimport { ExtrudeContourCurve, ExtrudeSolid } from './Extrude';\r\nimport { Line } from './Line';\r\nimport { Polyline } from './Polyline';\r\n\r\n//排钻配置名是合法的 可用的\r\nfunction IsValidDriName(name: string): boolean\r\n{\r\n return name === DrillType.None || 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 depthExpr: string;\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\nexport interface ObjectIdArr extends Array\r\n{\r\n Name?: string;\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 protected HasBigHoleFaceRenderType = 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 private _OpenDir: BoardOpenDir = BoardOpenDir.None;\r\n @AutoRecord RelativeHandle: ObjectId[] = [];\r\n private _IsChaiDan: boolean = true;\r\n private _2DModelingList: I2DModeling[] = [];\r\n private _3DModelingList: I3DModeling[] = [];\r\n //侧面造型\r\n private _SideModelingMap: Map = new Map();\r\n private _CustomNumber: number = null;//自定义编号\r\n private _DrillLock = false; //排钻独立锁\r\n private _DrillAssociationLock = new Set(); //排钻关联锁\r\n @AutoRecord AlignLineObject: ObjectId; //对纹组\r\n\r\n //放样路径 基于OPt X Z -Y 坐标系为基准的路径\r\n private _SweepPath: Polyline = undefined;\r\n private _SweepAngle: number = 0;\r\n /** 见光面 */\r\n private _SweepVisibleFace: FaceDirection = FaceDirection.Front;\r\n\r\n _SweepArcBoardBuild: ArcBoardBuild = undefined;//用于建模和计算的类 不保证其正确性(绘制更新可能存在延迟)\r\n //圆弧板每一段圆弧的槽配置\r\n private _ArcBoardOptions: Map = new Map();\r\n private _isDrawArcGroove: boolean = true;\r\n\r\n arcBoardFeedProcess: ArcBoardFeedProcess = ArcBoardFeedProcess.Slots; //圆弧板槽加工工艺\r\n\r\n //仅在渲染器中使用倒角\r\n protected bevelEnabled: boolean = true;\r\n\r\n //二维刀路 id -> polyline\r\n private _KnifePolylineMap: Map = new Map();\r\n\r\n private _jigSweepPath: Polyline; // 拖拽时见光面的SweepPath\r\n private _jigPath2WCSMtx: Matrix4; // 拖拽时路径转世界坐标系矩阵\r\n\r\n constructor()\r\n {\r\n super();\r\n this.InitBoardData();\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n if (this._SweepPath)\r\n return new Box3Ext().copy(this.MeshGeometry.boundingBox);\r\n return super.BoundingBoxInOCS;\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n if (this._SweepPath)\r\n {\r\n let geom = this.MeshGeometry;\r\n const position = geom.attributes.position;\r\n if (position)\r\n {\r\n let vec = new Vector3;\r\n let box = new Box3Ext;\r\n for (let i = 0, il = position.count; i < il; i++)\r\n {\r\n vec.fromBufferAttribute(position, i);\r\n vec.applyMatrix4(this.OCSNoClone);\r\n box.expandByPoint(vec);\r\n }\r\n return box;\r\n }\r\n }\r\n return super.BoundingBox;\r\n }\r\n\r\n get IsDrawArcGroove()\r\n {\r\n return this._isDrawArcGroove;\r\n }\r\n\r\n set IsDrawArcGroove(v: boolean)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._isDrawArcGroove = v;\r\n }\r\n\r\n /**\r\n * path 发生改变,更新圆弧配置\r\n * @param {{ key: number, arc: Arc; }[]} oldArcs 旧圆弧和对应的board options key\r\n * @param {Polyline} nPath 新路径(未进行起点偏移)\r\n * @return {*} {void}\r\n */\r\n private UpdateArcBoardOptionsByPath(oldArcs: { key: number, arc: Arc; }[], nPath: Polyline): void\r\n {\r\n if (oldArcs.length === 0) return;\r\n\r\n const nCurves = nPath.Explode();\r\n const newArcs: { key: number, arc: Arc; }[] = [];\r\n for (let i = 0; i < nCurves.length; i++)\r\n if (nCurves[i] instanceof Arc)\r\n newArcs.push({ key: i, arc: nCurves[i] as Arc });\r\n\r\n const newOpts = new Map();\r\n const oldOpts = this._ArcBoardOptions;\r\n newOpts.set(-1, oldOpts.get(-1));\r\n\r\n // 设置新圆弧对应的原始配置\r\n for (let i = 0; i < newArcs.length; i++)\r\n for (const item of oldArcs)\r\n {\r\n const oldArc = item.arc;\r\n const oldKey = item.key;\r\n const newArc = newArcs[i].arc;\r\n const newKey = newArcs[i].key;\r\n if (equalv3(newArc.StartPoint, oldArc.StartPoint, 1e-5) || equalv3(newArc.EndPoint, oldArc.EndPoint, 1e-5)) // 若圆弧的头或尾部位置相同,说明是同一段圆弧\r\n {\r\n newOpts.set(newKey, { ...oldOpts.get(oldKey), arcLength: parseFloat(FixedNotZero(newArc.Length, 5)) });\r\n break;\r\n }\r\n }\r\n\r\n // 曲线从头拉到尾部后面,或者从尾拉到头部前面\r\n if (newArcs.length === 1 && newOpts.size === 1)\r\n {\r\n let oldArcIndex = 0;// 第一个圆弧\r\n if (equalv3(newArcs[0].arc.StartPoint, arrayLast(oldArcs).arc.EndPoint, 1e-3)) // 从头拉伸到尾部后面,则新圆弧的起点和旧圆弧的尾点相等。\r\n oldArcIndex = oldArcs.length - 1; // 最后一个圆弧\r\n const oldKey = oldArcs[oldArcIndex].key;\r\n const newKey = newArcs[0].key;\r\n newOpts.set(newKey, { ...oldOpts.get(oldKey), arcLength: parseFloat(FixedNotZero(newArcs[0].arc.Length, 5)) });\r\n }\r\n\r\n this._ArcBoardOptions.clear();\r\n this._ArcBoardOptions = newOpts;\r\n }\r\n\r\n get ArcBoardOptions()\r\n {\r\n if (this._ArcBoardOptions.size > 0)\r\n return this._ArcBoardOptions;\r\n\r\n let cus = new ArcBoardBuild(this).ParseSweepCurves().SweepCurves1;\r\n\r\n //key=-1 为通用转角槽配置\r\n this._ArcBoardOptions.set(-1, { ...defultArcBoardOption });\r\n cus.forEach((cu, i) =>\r\n {\r\n if (cu instanceof Arc)\r\n this._ArcBoardOptions.set(i, { ...defultArcBoardOption, arcLength: parseFloat(FixedNotZero(cu.Length, 5)) });\r\n });\r\n\r\n return this._ArcBoardOptions;\r\n }\r\n\r\n set ArcBoardOptions(opt: Map)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ArcBoardOptions = opt;\r\n this.UpdateArcBoardOptions(false);\r\n this.Update();\r\n }\r\n\r\n UpdateArcBoardOptions(isNewPath: boolean): void\r\n {\r\n //更新ArcBuild曲线数据\r\n this._SweepArcBoardBuild = new ArcBoardBuild(this).ParseSweepCurves();\r\n let cus = this.GetSweepPathInWCS().Explode();\r\n\r\n let newOpts = new Map();\r\n newOpts.set(-1, this._ArcBoardOptions.get(-1));\r\n //如果是新的多段线信息,就更新全部数据\r\n if (isNewPath)\r\n {\r\n cus.forEach((cu, i) =>\r\n {\r\n if (cu instanceof Arc)\r\n newOpts.set(i, { ...this._ArcBoardOptions.get(i), arcLength: parseFloat(FixedNotZero(cu.Length, 5)) });\r\n });\r\n }\r\n else if (cus.filter(cu => cu instanceof Arc).length <= this._ArcBoardOptions.size - 1)\r\n {\r\n cus.forEach((cu, i) =>\r\n {\r\n if (cu instanceof Arc && this._ArcBoardOptions.has(i))\r\n newOpts.set(i, { ...this._ArcBoardOptions.get(i), arcLength: parseFloat(FixedNotZero(cu.Length, 5)) });\r\n });\r\n }\r\n this._ArcBoardOptions = newOpts;\r\n }\r\n\r\n get IsArcBoard()\r\n {\r\n return this._SweepPath != undefined;\r\n }\r\n\r\n get ArcBuild()\r\n {\r\n if (!this._SweepArcBoardBuild) this._SweepArcBoardBuild = new ArcBoardBuild(this);\r\n return this._SweepArcBoardBuild;\r\n }\r\n\r\n SetSweepPath(path: Polyline, sweepAngle: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._SweepPath = path;\r\n this._SweepAngle = sweepAngle;\r\n this.Update();\r\n }\r\n\r\n private _FixContourByArcSweepPath_Ing = false;\r\n FixContourByArcSweepPath()\r\n {\r\n if (!this._SweepPath) return;\r\n\r\n //标记正在修改轮廓 避免重复进入\r\n this._FixContourByArcSweepPath_Ing = true;\r\n\r\n let build = new ArcBoardBuild(this);\r\n let length = build.SweepLength;\r\n if (this._SweepAngle === 0)\r\n {\r\n if (!equaln(length, this.width, 1e-3))\r\n this.Width = length;//直接拉大拉小\r\n }\r\n else if (equaln(Math.abs(this._SweepAngle), Math.PI / 2))\r\n {\r\n if (!equaln(length, this.height, 1e-3))\r\n this.Height = length;//直接拉大拉小\r\n }\r\n else\r\n {\r\n let con = this.ContourCurve.Clone();\r\n let ro = new Matrix4().makeRotationZ(-this._SweepAngle);\r\n con.ApplyMatrix(ro);\r\n con.Move(con.StartPoint.negate());\r\n\r\n let box = con.BoundingBox;\r\n let size = box.max.x - box.min.x;\r\n if (!equaln(size, length))\r\n {\r\n let contour = Contour.CreateContour(con, false);\r\n let isSuccess = contour.UnEqualProportionScale(size / 2, length - size, \"x\");\r\n\r\n let ro = new Matrix4().makeRotationZ(this._SweepAngle);\r\n contour.Curve.ApplyMatrix(ro);\r\n contour.Curve.Move(contour.Curve.BoundingBox.min.negate());\r\n\r\n this.SetContourCurve(contour.Curve);\r\n }\r\n }\r\n\r\n this._FixContourByArcSweepPath_Ing = false;\r\n }\r\n\r\n FixArcSweepPathLength()\r\n {\r\n if (!this._SweepPath) return;\r\n\r\n let build = new ArcBoardBuild(this);\r\n let length = build.SweepLength;\r\n\r\n let brLength: number = this.ParseBoardLengthInArcSweep();\r\n\r\n if (equaln(brLength, length, 1e-3)) return;\r\n\r\n if (brLength > length)\r\n {\r\n //延伸路径\r\n let endp = this._SweepPath.EndPoint;\r\n let derv = this._SweepPath.GetFirstDeriv(this._SweepPath.EndParam).normalize();\r\n if (this._SweepPath.GetCurveAtParam(this._SweepPath.EndParam - 0.5) instanceof Arc)\r\n this._SweepPath.AddVertexAt(this._SweepPath.LineData.length, AsVector2(endp.add(derv.multiplyScalar(brLength - length))));\r\n else\r\n this._SweepPath.LineData[this._SweepPath.LineData.length - 1].pt.copy(AsVector2(endp.add(derv.multiplyScalar(brLength - length))));\r\n }\r\n else\r\n {\r\n if (this._SweepVisibleFace === FaceDirection.Back)\r\n {\r\n //裁剪路径\r\n let param = this._SweepPath.GetParamAtDist(brLength);\r\n this._SweepPath = this._SweepPath.GetSplitCurves(param)[0];\r\n }\r\n else\r\n {\r\n //裁剪路径\r\n let param = build.SweepPath1.GetParamAtDist(brLength);\r\n let path = build.SweepPath1.GetSplitCurves(param)[0];\r\n this._SweepPath = ArcBoardBuild.OffsetPolyline(path, this.thickness);\r\n }\r\n }\r\n }\r\n\r\n ParseBoardLengthInArcSweep(): number\r\n {\r\n let brLength: number;\r\n if (this._SweepAngle === 0)\r\n brLength = this.width;\r\n else if (equaln(Math.abs(this._SweepAngle), Math.PI / 2))\r\n brLength = this.height;\r\n\r\n else\r\n {\r\n let con = this.ContourCurve.Clone();\r\n let ro = new Matrix4().makeRotationZ(-this._SweepAngle);\r\n con.ApplyMatrix(ro);\r\n let box = con.BoundingBox;\r\n brLength = box.max.x - box.min.x;\r\n }\r\n return brLength;\r\n }\r\n\r\n ClearSweepPath()\r\n {\r\n this.WriteAllObjectRecord();\r\n this._SweepPath = undefined;\r\n this._SweepAngle = 0;\r\n this.Update();\r\n }\r\n GetSweepPath(): Polyline\r\n {\r\n return this._SweepPath;\r\n }\r\n\r\n //获得见光path\r\n GetSweepPathInWCS(): Polyline\r\n {\r\n if (!this._SweepPath) return;\r\n let path = this.ArcBuild.SweepPath1.Clone();\r\n let mtx = new Matrix4().makeBasis(XAxis, ZAxis, YAxisN)\r\n .premultiply(this.ArcBuild.Rotate2OCSMtx)\r\n .premultiply(this.OCSNoClone);\r\n path.ApplyMatrix(mtx);\r\n\r\n return path;\r\n }\r\n\r\n //背面\r\n GetSweepPath1InWCS(): Polyline\r\n {\r\n if (!this._SweepPath) return;\r\n let path = this._SweepPath.Clone();\r\n let mtx = new Matrix4().makeBasis(XAxis, ZAxis, YAxisN)\r\n .premultiply(this.ArcBuild.Rotate2OCSMtx)\r\n .premultiply(this.OCSNoClone);\r\n path.ApplyMatrix(mtx);\r\n return path;\r\n }\r\n //正面\r\n GetSweepPath2InWCS(): Polyline\r\n {\r\n if (!this._SweepPath) return;\r\n let path = this._SweepVisibleFace === FaceDirection.Back ? this.ArcBuild.SweepPath2.Clone() : this.ArcBuild.SweepPath1.Clone();\r\n let mtx = new Matrix4().makeBasis(XAxis, ZAxis, YAxisN)\r\n .premultiply(this.ArcBuild.Rotate2OCSMtx)\r\n .premultiply(this.OCSNoClone);\r\n path.ApplyMatrix(mtx);\r\n return path;\r\n }\r\n\r\n /** 获取见光面 */\r\n get SweepVisibleFace()\r\n {\r\n return this._SweepVisibleFace;\r\n }\r\n /** 设置见光面 */\r\n set SweepVisibleFace(dir: FaceDirection)\r\n {\r\n if (dir === this._SweepVisibleFace) return;\r\n this.WriteAllObjectRecord();\r\n this._SweepVisibleFace = dir;\r\n this.FixContourByArcSweepPath();\r\n this.Update();\r\n }\r\n\r\n get SweepAngle(): number\r\n {\r\n return this._SweepAngle;\r\n }\r\n set SweepAngle(v: number)\r\n {\r\n if (equaln(v, this._SweepAngle)) return;\r\n this.WriteAllObjectRecord();\r\n this._SweepAngle = v;\r\n this.FixArcSweepPathLength();\r\n this.Update();\r\n }\r\n\r\n override AdjustPath(br: Board, outline: Polyline | Circle)\r\n {\r\n if (this.IsArcBoard)\r\n {\r\n const path = this.GetSweepPath();\r\n // 1.将放样路径展开\r\n const pathWCS = this.GetSweepPathInWCS();\r\n pathWCS.ApplyMatrix(pathWCS.OCSInv);\r\n const expandPath = CurveManager.CreateExpandPl(pathWCS);\r\n // 2.将轮廓进行旋转\r\n outline.ApplyMatrix(new Matrix4().makeRotationZ(-this.SweepAngle));\r\n // 3.根据轮廓的左右两侧,截取取对应的放样路径\r\n const leftParam = expandPath.GetParamAtDist(outline.BoundingBox.min.x);\r\n const rightParam = expandPath.GetParamAtDist(outline.BoundingBox.max.x);\r\n const leftPt = path.GetPointAtParam(leftParam);\r\n const rightPt = path.GetPointAtParam(rightParam);\r\n const newPath = CurveManager.Get_Pl_InPtAtoPtB(path, leftPt, rightPt);\r\n // 4.路径起点为原点\r\n newPath.Move(newPath.StartPoint.negate());\r\n br.SetSweepPath(newPath, this.SweepAngle);\r\n }\r\n }\r\n\r\n override AdjustPosition(br: Board, basePoint: Vector3)\r\n {\r\n if (this.IsArcBoard)\r\n {\r\n // 映射shape上的基点\r\n basePoint.applyMatrix4(this.ArcBuild.OCS2RotateMtx);\r\n this.ArcBuild.ParseAllX_Map([basePoint.x]);\r\n this.ArcBuild.PosMap2ArcPos(basePoint);\r\n basePoint.applyMatrix4(this.ArcBuild.Rotate2OCSMtx);\r\n basePoint.applyMatrix4(this.OCSNoClone);\r\n // 映射board上的基点\r\n const basePointInBoard = br.ContourCurve.StartPoint;\r\n basePointInBoard.applyMatrix4(br.ArcBuild.OCS2RotateMtx);\r\n br.ArcBuild.ParseAllX_Map([basePointInBoard.x]);\r\n br.ArcBuild.PosMap2ArcPos(basePointInBoard);\r\n basePointInBoard.applyMatrix4(br.ArcBuild.Rotate2OCSMtx);\r\n basePointInBoard.applyMatrix4(br.OCSNoClone);\r\n // 移动(boardBasePoint -> basePoint)\r\n br.Move(basePoint.sub(basePointInBoard));\r\n }\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 edgeRemarkUp: \"\",\r\n edgeRemarkDown: \"\",\r\n edgeRemarkLeft: \"\",\r\n edgeRemarkRight: \"\",\r\n highBoardEdgeRemark: this.CreateArray(),\r\n reservedEdgeUp: \"0\",\r\n reservedEdgeDown: \"0\",\r\n reservedEdgeRight: \"0\",\r\n reservedEdgeLeft: \"0\",\r\n highReservedEdge: this.CreateArray(),\r\n sealColorUp: \"\",\r\n sealColorDown: \"\",\r\n sealColorLeft: \"\",\r\n sealColorRight: \"\",\r\n sealColorType: \"\",\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 || key === \"highBoardEdgeRemark\" || key === \"highReservedEdge\")\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 else if (key === EBoardKeyList.BigHole)\r\n {\r\n let obj = this.CacheDrawObject.get(RenderType.BigHoleFace);\r\n if (obj)\r\n {\r\n this.UpdateDrawObject(RenderType.BigHoleFace, 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 if (!length || !width || !thickness)\r\n throw `无法使用该尺寸构建板,长:${length},宽:${width},厚:${thickness}`;\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 return this;\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 DrillLock()\r\n {\r\n return this._DrillLock;\r\n }\r\n\r\n set DrillLock(v: boolean)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DrillLock = v;\r\n }\r\n get isDrillAssociationLock()\r\n {\r\n //有一块关联的板就返回true\r\n for (const o of this._DrillAssociationLock)\r\n {\r\n if (o.Object && !(o.Object as Board).IsErase)\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n get DrillAssociationLock(): Set\r\n {\r\n return this._DrillAssociationLock;\r\n }\r\n\r\n AppendDrillAssociationLock(o: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DrillAssociationLock.add(o);\r\n }\r\n ClearDrillAssociationLock(o: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DrillAssociationLock.delete(o);\r\n }\r\n ClearAllAssociDrillLock()\r\n {\r\n this.WriteAllObjectRecord();\r\n for (const o of this._DrillAssociationLock)\r\n {\r\n this.ClearDrillAssociationLock(o);\r\n\r\n if (o && o.Object)\r\n {\r\n let br = o.Object as Board;\r\n br.ClearDrillAssociationLock(this.Id);\r\n }\r\n }\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 private _CustomNumberTextEntity: DbText;\r\n private _AsyncIngTextEntity: DbText;\r\n\r\n get CustomNumber() { return this._CustomNumber; }\r\n set CustomNumber(n: number | null)\r\n {\r\n if (n !== this._CustomNumber)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._CustomNumber = n;\r\n\r\n if (this._CustomNumberTextEntity)\r\n {\r\n this._CustomNumberTextEntity.TextString = n?.toString() ?? \"\";\r\n this._CustomNumberTextEntity.Visible = this._CustomNumberTextEntity.TextString !== \"\";\r\n this._CustomNumberTextEntity.Height = HostApplicationServices.boardCustomNumberTextHeight;\r\n }\r\n }\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,\r\n {\r\n [EBoardKeyList.HighSealed]: (obj[EBoardKeyList.HighSealed]).slice(),\r\n highBoardEdgeRemark: (obj.highBoardEdgeRemark).slice(),\r\n highReservedEdge: (obj.highReservedEdge).slice()\r\n });\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)\r\n {\r\n this.__CacheKnifVersion__[e.Index] = (e?.Object)?.__UpdateVersion__;\r\n continue;\r\n }\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 else\r\n {\r\n this.__CacheKnifVersion__[e.Index] = (e?.Object)?.__UpdateVersion__;\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, ...this.RelativeHandle])\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 this.RelativeHandle.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 highDrills: 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 {\r\n highDrills = this._BoardProcessOption.highDrill;\r\n }\r\n\r\n ocsInv = this.OCSInv;\r\n }\r\n\r\n let oldContour = this.ContourCurve;//旧的轮廓\r\n let oldHightSealCurves = GetBoardSealingCurves(this);//旧的封边轮廓\r\n let oldHightSealDatas = GetBoardHighSeal(this, oldHightSealCurves);//旧的封边数据\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.AlignLineObject = this.AlignLineObject;\r\n br._BoardProcessOption = { ...this._BoardProcessOption };\r\n br._CustomNumber = this._CustomNumber;//因为CustomNumber不会刷新绘制,所以拷贝这个\r\n br._DrillLock = this._DrillLock; //!2726 关联切割后的引用实体需要复制这个属性,否则反应器无法更新\r\n br._SideModelingMap = this.SideModelingMap;\r\n br.RelevanceSideModelMap = this.RelevanceSideModelMap; //关联切割侧槽\r\n\r\n let new2old_edgeMap: number[];\r\n //修正排钻边的数据\r\n if (highDrills)\r\n {\r\n br.BoardProcessOption.highDrill = [];//因为上面用了拷贝,所以这里不能直接改它的数据(我们新建一个数组来改它,否则原始板件的数据就被改掉了)\r\n new2old_edgeMap = ParseNewBr2OldBr_EdgeMap(br, this, ocsInv);\r\n for (let index of new2old_edgeMap)\r\n {\r\n let dri = highDrills[index];\r\n if (dri !== undefined)\r\n br._BoardProcessOption.highDrill.push(dri);\r\n else\r\n br._BoardProcessOption.highDrill.push(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 //保持封边属性(代码来自SetContourCurve)\r\n br._BoardProcessOption.highSealed = [];\r\n if (br.isRect)\r\n {\r\n SetBoardTopDownLeftRightSealData(br, oldHightSealDatas, oldHightSealCurves, oldContour);\r\n }\r\n else//变成了异形\r\n {\r\n let newhightSealCurves = GetBoardSealingCurves(br);\r\n\r\n for (let i = 0; i < newhightSealCurves.length; i++)\r\n {\r\n let newC = newhightSealCurves[i];\r\n let p = newC.GetPointAtParam(newC.EndParam * 0.5);\r\n\r\n let closesIndex = 0;\r\n let closesDistance = Infinity;\r\n\r\n for (let j = 0; j < oldHightSealCurves.length; j++)\r\n {\r\n let oldC = oldHightSealCurves[j];\r\n let d = oldC.GetClosestPointTo(p, false).distanceTo(p);\r\n if (d < closesDistance)\r\n {\r\n closesIndex = j;\r\n closesDistance = d;\r\n }\r\n }\r\n\r\n br._BoardProcessOption.highSealed.push(oldHightSealDatas[closesIndex]);\r\n }\r\n }\r\n }\r\n }\r\n return brs;\r\n }\r\n get ArcBoardModeling()\r\n {\r\n if (!this.IsArcBoard || !this.IsDrawArcGroove) return [];\r\n const { _SweepPath: path, _SweepAngle: angle, SweepVisibleFace: dir, ArcBoardOptions } = this;\r\n return ParseBoardArcFeed(this, path, angle, dir, ArcBoardOptions, false);\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 let gz = 0;//槽的z轴位置 (由于旋转轮廓或者镜像轮廓在Set时会被清除掉坐标系,我们还是需要正确的搞定z轴)\r\n if (model.dir === FaceDirection.Front)\r\n gz = this.thickness - g.Thickness;\r\n let moveZ = gz - g.Position.z;\r\n if (!equaln(moveZ, 0))\r\n g.Move({ x: 0, y: 0, z: moveZ });\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 //二维刀路\r\n get Modeling2D()\r\n {\r\n for (const m of this._2DModelingList)\r\n {\r\n for (const item of m.items)\r\n {\r\n let d = safeEval(item.depthExpr, { BH: this.thickness });\r\n if (!isNaN(d) && d != item.depth)\r\n {\r\n item.depth = d;\r\n }\r\n }\r\n }\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.Clear2DPathCache();\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.Clear3DPathCache();\r\n this._3DModelingList = ms;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n //侧面关联槽\r\n RelevanceSideModelMap: Map = new Map();\r\n\r\n //侧面造型\r\n get SideModelingMap()\r\n {\r\n return this._SideModelingMap;\r\n }\r\n\r\n set SideModelingMap(sideModelingMap: Map)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.ClearSideModelingCache();\r\n this._SideModelingMap = sideModelingMap;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n //获取侧面关联槽和侧面造型\r\n get AllSideModelGrooveMap(): Map\r\n {\r\n let allSideModelGrooveMap: Map = new Map();\r\n\r\n for (let [n, soilds] of this._SideModelingMap)\r\n allSideModelGrooveMap.set(n, [...soilds]);\r\n\r\n for (let [n, soilds] of this.RelevanceSideModelMap)\r\n {\r\n let ss = allSideModelGrooveMap.get(n) ?? [];\r\n\r\n for (let soild of soilds)\r\n ss.push(soild);\r\n\r\n allSideModelGrooveMap.set(n, ss);\r\n }\r\n\r\n return allSideModelGrooveMap;\r\n }\r\n\r\n ClearSideModeling()\r\n {\r\n if (!this._SideModelingMap.size) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this.ClearSideModelingCache();\r\n this._SideModelingMap.clear();\r\n this.Update(UpdateDraw.Geometry);\r\n }\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.Clear2DPathCache();\r\n this.Update(UpdateDraw.Geometry);\r\n }\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.Clear3DPathCache();\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n get IsChaiDan()\r\n {\r\n return this._IsChaiDan;\r\n }\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\r\n get OpenDir()\r\n {\r\n return this._OpenDir;\r\n }\r\n\r\n set OpenDir(v: BoardOpenDir)\r\n {\r\n if (this._OpenDir !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._OpenDir = v;\r\n //开门方向改变更新\r\n this.Update(UpdateDraw.Geometry);\r\n }\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: ObjectIdArr[])\r\n {\r\n this.WriteAllObjectRecord();\r\n let oldDrs = this._DrillList.get(k);\r\n\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\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\r\n if (this._SweepPath && !this._FixContourByArcSweepPath_Ing)\r\n this.FixArcSweepPathLength();\r\n\r\n if (this.HasSideModel)\r\n this.SplitBoardSideModelUtil.SpiltSideModelOfBrContour(this);\r\n\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\r\n if (this._SweepPath && !this._FixContourByArcSweepPath_Ing)\r\n this.FixArcSweepPathLength();\r\n\r\n if (this.HasSideModel)\r\n this.SplitBoardSideModelUtil.SpiltSideModelOfBrContour(this);\r\n\r\n this.Update();\r\n }\r\n }\r\n }\r\n\r\n get Thickness() { return super.Thickness; }\r\n set Thickness(thickness: number)\r\n {\r\n if (!equaln(thickness, this.thickness, 1e-4))//避免18.0009 无法改成 18\r\n {\r\n if (this.HasSideModel)\r\n this.SplitBoardSideModelUtil.SpiltSideModelOfBrThickness(this, thickness);\r\n\r\n super.Thickness = thickness;\r\n if (this._SweepPath && !this._FixContourByArcSweepPath_Ing)\r\n this.FixContourByArcSweepPath();\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 private UpdateSplitBoardSideModelUtil = true;\r\n private _SplitBoardSideModelUtil: SplitBoardSideModelUtil;\r\n\r\n get SplitBoardSideModelUtil(): SplitBoardSideModelUtil\r\n {\r\n if (!this._SplitBoardSideModelUtil)\r\n this._SplitBoardSideModelUtil = new SplitBoardSideModelUtil(this);\r\n\r\n return this._SplitBoardSideModelUtil;\r\n }\r\n\r\n override GeneralRectContour()\r\n {\r\n //取消异型时,强制使用矩形轮廓 导致原始轮廓数据丢失\r\n if (this.HasSideModel)\r\n {\r\n this.UpdateSplitBoardSideModelUtil = false;\r\n this.SplitBoardSideModelUtil.Init(this, true);\r\n super.GeneralRectContour();\r\n this.UpdateSplitBoardSideModelUtil = true;\r\n }\r\n else\r\n super.GeneralRectContour();\r\n }\r\n\r\n /**\r\n * 板件的轮廓,在板件坐标系中的表现方式.\r\n */\r\n override get ContourCurve()\r\n {\r\n return super.ContourCurve;\r\n }\r\n\r\n //设置新的板件轮廓,这里重载为了保持正确的排钻封边映射\r\n override set ContourCurve(newContour: ExtrudeContourCurve)\r\n {\r\n /**\r\n * 保持排钻边和封边数据对应正确性\r\n * (2x2种可能性)\r\n * 矩形->矩形\r\n * 矩形->异形\r\n * 异形->异形\r\n * 异形->矩形\r\n */\r\n\r\n //上下左右排钻属性(在矩形时生效)\r\n let rectHoleOpt: IBoardRectHoleType = {} as any;\r\n ParseBoardRectHoleType(this, rectHoleOpt);//分析旧的上下左右排钻\r\n\r\n let oldHightSealCurves = GetBoardSealingCurves(this);//旧的封边轮廓\r\n let oldHightSealDatas = GetBoardHighSeal(this, oldHightSealCurves);//旧的封边数据\r\n let oldHighBoardEdgeRemarkDatas = GetHighBoardEdgeRemark(this, oldHightSealCurves);//旧的板边备注数据\r\n let oldHighReservedEdgeDatas = GetBoardHighReservedEdge(this, oldHightSealCurves);//旧的预留边数据\r\n\r\n let splitSideModel = false;\r\n\r\n if (this.UpdateSplitBoardSideModelUtil && this.HasSideModel)\r\n {\r\n this.SplitBoardSideModelUtil.Init(this); //旧的侧面造型\r\n\r\n //记录侧面造型后清空 防止在分裂侧面造型时带入更新mesh\r\n this.WriteAllObjectRecord();\r\n this._SideModelingMap.clear();\r\n splitSideModel = true;\r\n }\r\n\r\n let oldContour = this.ContourCurve;//旧的轮廓\r\n\r\n let defaultDrillType = this._BoardProcessOption.drillType;\r\n if (!IsValidDriName(defaultDrillType) && this._BoardProcessOption.highDrill)\r\n for (let name of this._BoardProcessOption.highDrill)\r\n if (IsValidDriName(name))\r\n {\r\n defaultDrillType = name;\r\n break;\r\n }\r\n if (!IsValidDriName(defaultDrillType))\r\n defaultDrillType = HostApplicationServices.DrillConfigs.size ? HostApplicationServices.DrillConfigs.entries().next().value[0] : DrillType.None;\r\n\r\n super.ContourCurve = newContour;//设置新的轮廓\r\n\r\n //保持排钻边属性\r\n if (this.isRect && rectHoleOpt.up)//矩形->矩形\r\n SetBrHighHoleTypeFromRectHoleType(this, rectHoleOpt);//直接应用旧的矩形数据\r\n else//异形->矩形 矩形->异形 异形->异形\r\n {\r\n let indexMap: number[] = [];\r\n\r\n for (let i = 0; i < newContour.EndParam; i++)\r\n {\r\n let p = newContour.GetPointAtParam(i + 0.5);\r\n\r\n let cp = oldContour.GetClosestPointTo(p, false);\r\n let cparam = oldContour.GetParamAtPoint2(cp);\r\n indexMap.push(Math.floor(cparam));\r\n }\r\n\r\n let highDrill: string[] = [];\r\n for (let index of indexMap)\r\n highDrill.push(this._BoardProcessOption.highDrill[index] ?? defaultDrillType);\r\n\r\n this._BoardProcessOption.highDrill = highDrill;\r\n }\r\n\r\n this._BoardProcessOption.highSealed.length = 0;\r\n this._BoardProcessOption.highBoardEdgeRemark.length = 0;\r\n this._BoardProcessOption.highReservedEdge.length = 0;\r\n //保持封边属性\r\n if (this.isRect)\r\n {\r\n SetBoardTopDownLeftRightSealData(this, oldHightSealDatas, oldHightSealCurves, oldContour);\r\n SetBoardEdgeRemarkData(this, oldHighBoardEdgeRemarkDatas, oldHightSealCurves, oldContour);\r\n SetBoardReservedEdgeData(this, oldHighReservedEdgeDatas, oldHightSealCurves, oldContour);\r\n }\r\n else//变成了异形\r\n {\r\n let newhightSealCurves = GetBoardSealingCurves(this);\r\n\r\n for (let i = 0; i < newhightSealCurves.length; i++)\r\n {\r\n let newC = newhightSealCurves[i];\r\n let p = newC.GetPointAtParam(newC.EndParam * 0.5);\r\n\r\n let closesIndex = 0;\r\n let closesDistance = Infinity;\r\n\r\n for (let j = 0; j < oldHightSealCurves.length; j++)\r\n {\r\n let oldC = oldHightSealCurves[j];\r\n let d = oldC.GetClosestPointTo(p, false).distanceTo(p);\r\n if (d < closesDistance)\r\n {\r\n closesIndex = j;\r\n closesDistance = d;\r\n }\r\n }\r\n\r\n this._BoardProcessOption.highSealed.push(oldHightSealDatas[closesIndex]);\r\n this._BoardProcessOption.highBoardEdgeRemark.push(oldHighBoardEdgeRemarkDatas[closesIndex]);\r\n this._BoardProcessOption.highReservedEdge.push(oldHighReservedEdgeDatas[closesIndex]);\r\n }\r\n }\r\n\r\n //分裂侧面造型\r\n if (splitSideModel || this.HasSideModel)\r\n this.SplitBoardSideModelUtil.SetBoardSideModel(this);\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 = 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 SetBoardTopDownLeftRightSealData(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\r\n /**实际上这个值可能被改变,应该适当的去校验它(仅在重新设计模块时,这个值会被改变!) */\r\n get Rotation()\r\n {\r\n let roMtx = this.RotateMat;\r\n let roMtxInv = roMtx.getInverse(roMtx);\r\n\r\n let csInSpace = this.SpaceOCSInv.multiply(this.OCSNoClone);//逆到模块坐标系\r\n csInSpace.multiply(roMtxInv);//(正确)\r\n csInSpace.setPosition(0, 0, 0);\r\n\r\n let euRoMtx = new Matrix4().makeRotationFromEuler(new Euler(this._Rotation.x, this._Rotation.y, this._Rotation.z, \"ZYX\"));\r\n\r\n if (euRoMtx.elements.every((v, i) => equaln(v, csInSpace.elements[i])))\r\n return this._Rotation;\r\n else\r\n {\r\n let eu = new Euler(0, 0, 0, \"ZYX\").setFromRotationMatrix(csInSpace);\r\n return eu;\r\n }\r\n }\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;//为了优化性能,在jig模式下不去计算封边排钻等属性,不重绘板\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 highSealsCurves = GetBoardSealingCurves(this);\r\n let highSeals = GetBoardHighSeal(this, highSealsCurves);\r\n let isStartSealToBack = !equalv3(highSealsCurves[0].StartPoint, this.contourCurve.StartPoint, 1e-4);//第一段封边往后搜索了\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\r\n if (isStartSealToBack)//如果第一段封边往后搜索了,那么封边在镜像后 第一段封边保持不变\r\n highSeals.unshift(highSeals.pop());\r\n\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 SetBoardTopDownLeftRightSealData(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 //开门方向\"左\",\"右\"互换\r\n if (this.OpenDir === BoardOpenDir.Left)\r\n this.OpenDir = BoardOpenDir.Right;\r\n else if (this.OpenDir === BoardOpenDir.Right)\r\n this.OpenDir = BoardOpenDir.Left;\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(cloneDraw = true): this\r\n {\r\n let br = super.Clone(cloneDraw);\r\n br._DrillAssociationLock.clear();\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 let brWidth = this.width;\r\n let brHeight = this.height;\r\n\r\n switch (this.BoardProcessOption.lines)\r\n {\r\n case LinesType.Positive:\r\n len = brHeight / 3;\r\n width = Math.min(brWidth, brHeight) / 8;\r\n break;\r\n case LinesType.Reverse:\r\n len = brWidth / 2;\r\n width = Math.min(brWidth, brHeight) / 8;\r\n break;\r\n case LinesType.CanReversal:\r\n len = brHeight / 3;\r\n width = brWidth / 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(brWidth / 2, brHeight / 2, 0);\r\n l1.position.set(brWidth / 2, brHeight / 2, this.thickness);\r\n\r\n if (this._SweepPath)\r\n {\r\n let pts = [l.position, l1.position];\r\n\r\n let x: Vector3, y: Vector3;\r\n\r\n if (this._SweepAngle !== 0)\r\n {\r\n l.position.z -= 1;\r\n l1.position.z += 1;\r\n\r\n x = l.position.clone().add(XAxis);\r\n y = l.position.clone().add(YAxis);\r\n pts.push(x, y);\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(this.ArcBuild.OCS2RotateMtx);\r\n }\r\n else\r\n {\r\n x = l.position.clone().add(XAxis);\r\n y = l.position.clone().add(YAxis);\r\n pts.push(x, y);\r\n }\r\n\r\n let xs: number[] = pts.map(p => p.x);\r\n arraySortByNumber(xs);\r\n arrayRemoveDuplicateBySort(xs, equaln);\r\n\r\n this.ArcBuild.ParseAllX_Map(xs);\r\n for (let p of pts)\r\n this.ArcBuild.PosMap2ArcPos(p);\r\n\r\n if (this._SweepAngle !== 0)\r\n for (let p of pts)\r\n p.applyMatrix4(this.ArcBuild.Rotate2OCSMtx);\r\n\r\n x.sub(l.position).normalize();\r\n y.sub(l.position).normalize();\r\n let z = new Vector3().crossVectors(x, y);\r\n let mtx = new Matrix4().makeBasis(x, y, z);\r\n\r\n l.rotation.setFromRotationMatrix(mtx);\r\n l1.rotation.setFromRotationMatrix(mtx);\r\n }\r\n\r\n l.updateMatrix();\r\n l1.updateMatrix();\r\n\r\n return [l, l1];\r\n }\r\n\r\n private GetLinesOpenDir(renderType: RenderType)\r\n {\r\n const openDirReverse = {\r\n 1: BoardOpenDir.Right,\r\n 2: BoardOpenDir.Left,\r\n 3: BoardOpenDir.Down,\r\n 4: BoardOpenDir.Up,\r\n 5: BoardOpenDir.NoOpen,\r\n };\r\n\r\n const openDir = HostApplicationServices.doorLinesOption.reverseOpenDirLines ? openDirReverse[this.OpenDir] : this.OpenDir;\r\n\r\n const mtl = (renderType === RenderType.Physical || renderType === RenderType.Physical2) ? ColorMaterial.GetPhysical2EdgeMaterial() : ColorMaterial.GetWallLineMtl(9);\r\n const l: TLine = new TLine(\r\n BufferGeometryUtils.CreateFromPts(PointShapeUtils.LinesOpenDirPts(this.height, this.width, openDir)),\r\n mtl\r\n );\r\n l.computeLineDistances();\r\n\r\n let l1 = l.clone();\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\r\n get KnifePolylineMap()\r\n {\r\n return new Map(this._KnifePolylineMap);\r\n }\r\n\r\n set KnifePolylineMap(map: Map)\r\n {\r\n if (map.size === 0 && this._KnifePolylineMap.size === 0)\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._KnifePolylineMap = map;\r\n\r\n //不进行更新 通常由其他的方法更新\r\n }\r\n\r\n //三维刀路绘制对象\r\n private _3DPathObject: Object3D;\r\n\r\n Clear3DPathCache()\r\n {\r\n if (!this._3DPathObject) return;\r\n\r\n DisposeThreeObj(this._3DPathObject);\r\n this._3DPathObject = undefined;\r\n }\r\n\r\n\r\n //获取三维刀路的绘制对象\r\n private Get3DPathDrawObject(): Object3D\r\n {\r\n if (this._3DPathObject)\r\n return this._3DPathObject;\r\n\r\n this._3DPathObject = new Object3D();\r\n\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 this._3DPathObject.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 this._3DPathObject.add(arc.GetDrawObjectFromRenderType(RenderType.Wireframe));\r\n }\r\n }\r\n }\r\n\r\n return this._3DPathObject;\r\n }\r\n\r\n //#region 二维刀路缓存\r\n //清除二维刀路的缓存\r\n Clear2DPathCache()\r\n {\r\n this._2DPathCsgs = undefined;\r\n if (this._2DPathDrawObject)\r\n {\r\n DisposeThreeObj(this._2DPathDrawObject);\r\n this._2DPathDrawObject = undefined;\r\n }\r\n this.OffsetPathCache.clear();\r\n }\r\n\r\n _2DPathCsgs: Geom3[];//二维刀路的csg数组\r\n _2DPathDrawObject: Object3D;//二维刀路提刀线框显示对象\r\n\r\n /**\r\n * 这个函数生成了二维刀路的csg数组,并且同时生成了_2DPathDrawObject(二维刀路提刀线框显示对象)\r\n */\r\n \r\n Get2DPathCsgs(): Geom3[]\r\n {\r\n if (this._2DPathCsgs)\r\n return this._2DPathCsgs;\r\n\r\n this._2DPathCsgs = [];\r\n\r\n \r\n\r\n return this._2DPathCsgs;\r\n }\r\n //#endregion\r\n\r\n //#region 侧面造型\r\n _SideModeingCsgs: Geom3[];\r\n ;\r\n GetSideModeingCsgs(): Geom3[]\r\n {\r\n if (this._SideModeingCsgs)\r\n return this._SideModeingCsgs;\r\n\r\n this._SideModeingCsgs = [];\r\n\r\n if (!this._SideModelingMap.size && !this.RelevanceSideModelMap.size)\r\n return this._SideModeingCsgs;\r\n\r\n this._SideModeingCsgs = BoardSideModelCSGBuilder(this);\r\n\r\n return this._SideModeingCsgs;\r\n }\r\n\r\n //清除侧面造型Csgs的缓存\r\n ClearSideModelingCache()\r\n {\r\n this._SideModeingCsgs = undefined;\r\n }\r\n //#endregion 侧面造型\r\n\r\n get HasSideModel() { return this._SideModelingMap.size > 0; }\r\n private _asyncSideModelIng = false;\r\n get AsyncSideModeling() { return this._asyncSideModelIng; }\r\n\r\n protected get Has2DPath() { return this._2DModelingList.length > 0; }\r\n private _workerCalcedGeom: Geom3 = null;//worker计算后,暂时存入到这里\r\n private _async2DPathIng = false; //二维刀路构建进行中\r\n\r\n get Async2DPathing() { return this._async2DPathIng; }\r\n override GoodBye(): void\r\n {\r\n super.GoodBye();\r\n TerminateCSGTask({ key: this });\r\n }\r\n\r\n private _Promise2DPathRes: (res: boolean) => void;//回调函数\r\n private _2DPathBuildPromise: Promise;\r\n async Load2DPathPromise()\r\n {\r\n if (!this._2DPathBuildPromise)\r\n this._2DPathBuildPromise = new Promise((res) =>\r\n {\r\n this._Promise2DPathRes = res;\r\n });\r\n\r\n return this._2DPathBuildPromise;\r\n }\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 || this.DrillLock || this.isDrillAssociationLock)\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 || this.DrillLock || this.isDrillAssociationLock)\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 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 arrayRemoveIf(this.RelativeHardware, (hwdObjId) =>\r\n {\r\n if (!hwdObjId || hwdObjId.IsErase) return true;\r\n for (let ent of splitEntitys)\r\n {\r\n let hwd = (hwdObjId.Object as HardwareCompositeEntity);\r\n if (ent.BoundingBox.intersectsBox(hwd.BoundingBox))\r\n {\r\n //原始板件删除这个五金\r\n arrayRemoveIf(hwd.RelevanceBoards, (rbr) => rbr?.Object === this);\r\n\r\n //五金与分裂的板关联\r\n hwd.RelevanceBoards.push(ent.objectId);\r\n ent.RelativeHardware.push(hwdObjId);\r\n\r\n //如果五金是把手 写入分裂的板的RelativeHandle\r\n if (this.RelativeHandle.includes(hwdObjId))\r\n {\r\n arrayRemoveIf(this.RelativeHandle, (handle) => handle === hwdObjId);\r\n ent.RelativeHandle.push(hwdObjId);\r\n }\r\n return true;\r\n }\r\n }\r\n });\r\n }\r\n\r\n private BuildArcGeometry()\r\n {\r\n //针对圆弧板\r\n let build = new ArcBoardBuild(this);\r\n [this._MeshGeometry, this._EdgeGeometry] = build.BuildMeshEdgeGeom();\r\n // 圆弧板的二维刀路与侧面造型\r\n if (build.CSGBoard.Async2DPathing || build.CSGBoard.AsyncSideModeling)\r\n {\r\n build.CSGBoard.Load2DPathPromise().then(() =>\r\n {\r\n /** @todo 圆弧板暂时先不显示二维刀路的线框吧 */\r\n this._2DPathDrawObject = undefined;\r\n // 完毕后,不再显示二维刀路/侧面造型建模中的文字\r\n this._async2DPathIng = false;\r\n this._asyncSideModelIng = false;\r\n this.UpdateDrawGeometry();//销毁旧的\r\n [this._MeshGeometry, this._EdgeGeometry] = build.BuildMeshEdgeGeom();\r\n // 更新\r\n for (let [type, obj] of this.CacheDrawObject)\r\n {\r\n this.UpdateDrawObject(type, obj);\r\n obj.updateMatrixWorld(true);\r\n obj.traverse(UpdateBoundingSphere);\r\n }\r\n });\r\n }\r\n this._SweepArcBoardBuild = build;//记录\r\n }\r\n\r\n \r\n\r\n \r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n // 圆弧板和复合实体内的圆弧板,Jig时,实时显示见光面路径\r\n if (this._SweepPath && (renderType === RenderType.Jig))\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n\r\n if (this._jigSweepPath)\r\n {\r\n const path2BoardMtx = new Matrix4();\r\n const invMtx = new Matrix4().getInverse(this._Matrix);\r\n path2BoardMtx.multiplyMatrices(invMtx, this._jigPath2WCSMtx);\r\n const pts = this._jigSweepPath.Shape.getPoints().map(AsVector3);\r\n const geo = new BufferGeometry().setFromPoints(pts);\r\n const line = new TLine(geo, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n line.matrix = path2BoardMtx;\r\n obj.add(line);\r\n this._jigSweepPath = undefined;\r\n this._jigPath2WCSMtx = undefined;\r\n return;\r\n }\r\n }\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 else if (renderType === RenderType.BigHoleFace)\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 obj.add(this.GetBigHoleFace());\r\n }\r\n\r\n else if (renderType === RenderType.CustomNumber || renderType === RenderType.CustomNumberPrint)\r\n {\r\n if (renderType === RenderType.CustomNumberPrint)\r\n obj.add(...this.GetPrintObject3D());\r\n else\r\n obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex, FrontSide, true)));\r\n\r\n //#region 添加文字\r\n if (!this._CustomNumberTextEntity)\r\n {\r\n this._CustomNumberTextEntity = new DbText();\r\n this._CustomNumberTextEntity.TextAligen = TextAligen.Mid;\r\n this._CustomNumberTextEntity.IsDoubleMesh = true;\r\n this._CustomNumberTextEntity.IsFsText = this._BoardType === BoardType.Layer;\r\n\r\n this._CustomNumberTextEntity.IsEmbedEntity = true;\r\n }\r\n if (this._BoardType === BoardType.Layer)\r\n this._CustomNumberTextEntity.OCSNoClone.makeRotationZ(-Math.PI / 2).setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5);\r\n else\r\n this._CustomNumberTextEntity.OCSNoClone.identity().setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5);\r\n\r\n this._CustomNumberTextEntity.TextString = this._CustomNumber?.toString() ?? (this.objectId?.Index > 0 ? \"未编号\" : \" \");\r\n\r\n if (this._CustomNumberTextEntity.TextString === \"未编号\")\r\n this._CustomNumberTextEntity.Height = 60;\r\n else\r\n this._CustomNumberTextEntity.Height = HostApplicationServices.boardCustomNumberTextHeight;\r\n\r\n let o = this._CustomNumberTextEntity.GetDrawObjectFromRenderType(RenderType.Conceptual);\r\n if (o)\r\n {\r\n o.traverse(obj => obj.userData = {});\r\n AddEntityDrawObject(obj, this._CustomNumberTextEntity, RenderType.Conceptual);\r\n }\r\n //#endregion\r\n }\r\n\r\n this.UpdateDrawObjectByBoardInfo(renderType, obj);\r\n\r\n this.DrawAsyncText(obj);\r\n\r\n return o;\r\n }\r\n\r\n private DrawAsyncText(obj: Object3D)\r\n {\r\n if (this._async2DPathIng || this._asyncSideModelIng)\r\n {\r\n //#region 添加文字\r\n if (!this._AsyncIngTextEntity)\r\n {\r\n this._AsyncIngTextEntity = new DbText();\r\n this._AsyncIngTextEntity.TextAligen = TextAligen.Mid;\r\n this._AsyncIngTextEntity.IsDoubleMesh = true;\r\n this._AsyncIngTextEntity.IsFsText = this._BoardType === BoardType.Layer;\r\n\r\n this._AsyncIngTextEntity.IsEmbedEntity = true;\r\n }\r\n if (this._BoardType === BoardType.Layer)\r\n this._AsyncIngTextEntity.OCSNoClone.makeRotationZ(-Math.PI / 2).setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5);\r\n\r\n else\r\n this._AsyncIngTextEntity.OCSNoClone.identity().setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5);\r\n\r\n if (this._async2DPathIng)\r\n this._AsyncIngTextEntity.TextString = \"二维刀路建模中!\";\r\n else if (this._asyncSideModelIng)\r\n this._AsyncIngTextEntity.TextString = \"侧面造型建模中!\";\r\n\r\n let o = this._AsyncIngTextEntity.GetDrawObjectFromRenderType(RenderType.Conceptual);\r\n if (o)\r\n {\r\n o.traverse(obj => obj.userData = {});\r\n AddEntityDrawObject(obj, this._AsyncIngTextEntity, RenderType.Conceptual);\r\n }\r\n //#endregion\r\n }\r\n }\r\n //del_exp2_end\r\n\r\n //绘制排版面时使用的颜色\r\n private get PlaceColor() { return this._Color === 8 ? 9 : this.DrawColorIndex; }\r\n //排版面网格\r\n private GetPlaceFace(): Mesh\r\n {\r\n let shapeGeom = new ShapeBufferGeometry(this.contourCurve.Shape);\r\n let isBack = this._BoardProcessOption[EBoardKeyList.ComposingFace] !== ComposingType.Positive;\r\n if (isBack)\r\n {\r\n const indices = Array.from(shapeGeom.getIndex().array);\r\n\r\n // 翻转面片索引的顺序\r\n const flippedIndices: number[] = [];\r\n for (let i = 0; i < indices.length; i += 3)\r\n flippedIndices.push(indices[i], indices[i + 2], indices[i + 1]);\r\n\r\n // 创建新的面片索引属性\r\n const newIndices = new BufferAttribute(new Uint16Array(flippedIndices), 1);\r\n\r\n // 更新面片索引属性\r\n shapeGeom.setIndex(newIndices);\r\n }\r\n\r\n shapeGeom.applyMatrix4(this.contourCurve.OCSNoClone);\r\n shapeGeom.translate(0, 0, isBack ? -1e-3 : this.thickness + 1e-3);\r\n let mesh = new Mesh(shapeGeom, ColorMaterial.GetBasicMaterial(this.PlaceColor));\r\n return mesh;\r\n }\r\n\r\n /** 获取大孔面的几何体 */\r\n get BigHoleFaceGeo()\r\n {\r\n let shapeGeom = new ShapeBufferGeometry(this.contourCurve.Shape);\r\n let isBack = this._BoardProcessOption[EBoardKeyList.BigHole] === FaceDirection.Back;\r\n if (isBack)\r\n {\r\n const indices = Array.from(shapeGeom.getIndex().array);\r\n\r\n // 翻转面片索引的顺序\r\n const flippedIndices: number[] = [];\r\n\r\n for (let i = 0; i < indices.length; i += 3)\r\n flippedIndices.push(indices[i], indices[i + 2], indices[i + 1]);\r\n\r\n // 创建新的面片索引属性\r\n const newIndices = new BufferAttribute(new Uint16Array(flippedIndices), 1);\r\n\r\n // 更新面片索引属性\r\n shapeGeom.setIndex(newIndices);\r\n }\r\n shapeGeom.applyMatrix4(this.contourCurve.OCSNoClone);\r\n shapeGeom.translate(0, 0, isBack ? -1e-3 : this.thickness + 1e-3);\r\n return shapeGeom;\r\n }\r\n\r\n //大孔面网格\r\n private GetBigHoleFace(): Mesh\r\n {\r\n if (this._SweepPath) //针对圆弧板\r\n {\r\n const geometry = this._SweepArcBoardBuild.BuildBigHoleFace();\r\n let mesh = new Mesh(geometry, ColorMaterial.GetBasicMaterial(this.PlaceColor));\r\n return mesh;\r\n }\r\n let shapeGeom = this.BigHoleFaceGeo;\r\n let mesh = new Mesh(shapeGeom, ColorMaterial.GetBasicMaterial(this.PlaceColor));\r\n return mesh;\r\n }\r\n\r\n //偏移缓存\r\n OffsetPathCache = new Map();\r\n\r\n /**\r\n * 根据板的信息修改绘制的实体\r\n * 1.非拆单板 灰色\r\n * 2.纹路 开门方向纹路\r\n * 3.二维 三维刀路\r\n */\r\n private UpdateDrawObjectByBoardInfo(renderType: RenderType, obj: Object3D)\r\n {\r\n if (!obj) return;\r\n\r\n if (!this.IsChaiDan)//非拆单板绘制更新\r\n {\r\n if (renderType === RenderType.Conceptual || renderType === RenderType.ConceptualTransparent || 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)// renderType === RenderType.Physical(理论上只有这个)\r\n (obj as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;//灰色半透明(会不会有bug?)\r\n }\r\n\r\n //线框及概念且可拆单\r\n if (([RenderType.Wireframe, RenderType.Conceptual, RenderType.ConceptualTransparent, RenderType.Print].includes(renderType)) && this.IsChaiDan)\r\n {\r\n //绘制纹路\r\n if (HostApplicationServices.showLines && renderType !== RenderType.Print)\r\n obj.add(...this.GetLinesDir());\r\n //绘制开门方向纹路\r\n if (HostApplicationServices.showOpenDirLines && this.OpenDir !== BoardOpenDir.None && this.OpenDir !== BoardOpenDir.NoOpen)\r\n obj.add(...this.GetLinesOpenDir(renderType));\r\n }\r\n\r\n const doorLinesOption = HostApplicationServices.doorLinesOption;\r\n if (doorLinesOption.physicalShowLines && renderType === RenderType.Physical\r\n || doorLinesOption.physicalShowLines2 && renderType === RenderType.Physical2)\r\n {\r\n //绘制开门方向纹路\r\n if (HostApplicationServices.showOpenDirLines && this.OpenDir !== BoardOpenDir.None && this.OpenDir !== BoardOpenDir.NoOpen)\r\n obj.add(...this.GetLinesOpenDir(renderType));\r\n }\r\n\r\n if (this.objectId)//二维和三维刀路\r\n {\r\n //三维刀路\r\n let path3d = this.Get3DPathDrawObject();\r\n if (path3d.parent)\r\n obj.children.push(path3d);\r\n else\r\n obj.add(path3d);\r\n\r\n //二维刀路\r\n this.Get2DPathCsgs();\r\n let path2d = this._2DPathDrawObject;\r\n if (path2d && HostApplicationServices.show2DPathLine)\r\n {\r\n if (path2d.parent)\r\n obj.children.push(path2d);\r\n else\r\n obj.add(path2d);\r\n }\r\n\r\n this.GetSideModeingCsgs();\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 || renderType === RenderType.BigHoleFace)\r\n {\r\n let face = obj.children[2] as Mesh;\r\n if (!face) return;\r\n face.material = ColorMaterial.GetBasicMaterial(this.PlaceColor);\r\n }\r\n\r\n if (!this.IsChaiDan)\r\n {\r\n if (renderType === RenderType.Conceptual || renderType === RenderType.ConceptualTransparent || 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 //封边检查(为obj 对象添加封边检查的曲线)\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\r\n const thickness = this.Thickness;\r\n const sealWidth = thickness * (HostApplicationServices.sealWidthPercentage ?? 1) / 100;\r\n\r\n const sealSolids = cus.map((c) =>\r\n {\r\n const sealSolid = new SealSolid(c, sealWidth);\r\n sealSolid.Move({ x: 0, y: 0, z: (thickness - sealWidth) / 2 });\r\n return sealSolid;\r\n });\r\n for (let i = 0; i < sealSolids.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 sealSolids[i].ColorIndex = parseInt(color) ?? 7;\r\n let l = sealSolids[i].GetDrawObjectFromRenderType(RenderType.Conceptual);\r\n obj.add(l);\r\n }\r\n }\r\n }\r\n\r\n private AddSideModelGripPoints(pts: Vector3[], dragPointType: DragPointType)\r\n {\r\n let con = GetBoardContour(this);\r\n if (!con) return;\r\n\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n\r\n for (let [index, soilds] of this.SideModelingMap)\r\n {\r\n let cu = cus[index];\r\n if (!cu) continue;\r\n\r\n let mt4 = GetSideCuFaceMtx(cus[index], inverseZ);\r\n\r\n for (let soild of soilds)\r\n {\r\n const MirrorMtxZ = MakeMirrorMtx(ZAxis);\r\n let s = soild.Clone();\r\n s.ApplyMatrix(MirrorMtxZ);\r\n s.ApplyMatrix(mt4);\r\n s.ApplyMatrix(this.OCSNoClone);\r\n pts.push(...s.GetGripOrStretchPoints(dragPointType));\r\n }\r\n }\r\n }\r\n\r\n override GetStrectchPointCountList(dragType: DragPointType): number[]\r\n {\r\n let counts = super.GetStrectchPointCountList(dragType);\r\n if (this.HasSideModel)\r\n {\r\n for (let [num, soilds] of this.SideModelingMap)\r\n {\r\n for (let soild of soilds)\r\n {\r\n let c = soild.ContourCurve.GetDragPointCount(dragType) * 2;\r\n for (let g of soild.Grooves)\r\n c += g.ContourCurve.GetDragPointCount(dragType) * 2;\r\n\r\n counts.push(c);\r\n }\r\n }\r\n }\r\n return counts;\r\n }\r\n\r\n //因为圆弧板 我们重载了它\r\n override GetGripPoints(): Vector3[]\r\n {\r\n let pts = super.GetGripPoints();\r\n pts = this.MapToArcPoints(pts, DragPointType.Grip);\r\n return pts;\r\n }\r\n\r\n private MapToArcPoints(pts: Vector3[], dragPointType: DragPointType): Vector3[]\r\n {\r\n if (this._SweepPath)\r\n {\r\n if (!this._SweepArcBoardBuild)\r\n this._SweepArcBoardBuild = new ArcBoardBuild(this);\r\n\r\n let inv = this.OCSInv;\r\n let mtx = this.OCSNoClone;\r\n if (this._SweepArcBoardBuild._OCS2RotateMtx)\r\n {\r\n inv.multiplyMatrices(this._SweepArcBoardBuild._OCS2RotateMtx, inv);\r\n mtx = new Matrix4().multiplyMatrices(mtx, this._SweepArcBoardBuild._Rotate2OCSMtx);\r\n }\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(inv);\r\n\r\n let xs = pts.map(p => p.x);\r\n arraySortByNumber(xs);\r\n arrayRemoveDuplicateBySort(xs);\r\n this._SweepArcBoardBuild.ParseAllX_Map(xs);\r\n\r\n for (let p of pts)\r\n {\r\n this._SweepArcBoardBuild.PosMap2ArcPos(p);\r\n p.applyMatrix4(mtx);\r\n }\r\n } else if (this.HasSideModel)\r\n this.AddSideModelGripPoints(pts, dragPointType);\r\n\r\n return pts;\r\n }\r\n\r\n override MoveGripPoints(indexList: number[], vec: Vector3): void\r\n {\r\n if (indexList.length === 0) return;\r\n this.ClearSideModelingCache();\r\n if (this._SweepPath)\r\n {\r\n this.MoveArcBoardPoints(indexList, vec, DragPointType.Grip);\r\n this.Update();\r\n }\r\n else\r\n super.MoveGripPoints(indexList, vec);\r\n }\r\n\r\n GetStretchPoints()\r\n {\r\n let pts = this.GetGripOrStretchPoints(DragPointType.Stretch);\r\n pts = this.MapToArcPoints(pts, 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.OCSNoClone)));\r\n }\r\n\r\n return pts;\r\n }\r\n\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length === 0)\r\n {\r\n let undoData = this.UndoRecord();\r\n if (undoData)\r\n undoData.WriteObjectHistoryPath(this, new HistorycRecord);\r\n return;\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\r\n let oldOcs = this.OCS;\r\n\r\n if (this._SweepPath)\r\n this.MoveArcBoardPoints(originIndexList, vec, DragPointType.Stretch);\r\n else\r\n super.MoveStretchPoints(originIndexList, vec);\r\n\r\n if (!this.Id) return;\r\n\r\n arraySortByNumber(mIndexList);\r\n let ocsInv = this.OCSInv;\r\n let localVec = TransformVector(vec.clone(), ocsInv);\r\n let offset = 0;\r\n let icount = mIndexList.length;\r\n let i = 0;\r\n\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(ocsInv);\r\n }\r\n\r\n this.Clear2DPathCache();\r\n this.Clear3DPathCache();\r\n this.ClearSideModelingCache();\r\n this.Update(UpdateDraw.Geometry);\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 frustum?: Frustum,\r\n ): Vector3[]\r\n {\r\n if (this._SweepPath)\r\n {\r\n if (snapMode === ObjectSnapMode.Nea)\r\n {\r\n let pts: Vector3[] = [];\r\n //这里实现对线框的快速捕捉\r\n let edgeGeom = this.EdgeGeometry;\r\n let pos = edgeGeom.getAttribute(\"position\") as BufferAttribute;\r\n let p1 = new Vector3;\r\n let p2 = new Vector3;\r\n\r\n let line = new Line(p1, p2);\r\n line.ApplyMatrix(this.OCSNoClone);\r\n\r\n let sel: SelectPick = frustum[\"_select_\"];\r\n for (let y = 0; y < pos.count; y += 2)\r\n {\r\n p1.fromArray(pos.array, y * 3);\r\n p2.fromArray(pos.array, (y + 1) * 3);\r\n p1.applyMatrix4(this._Matrix);\r\n p2.applyMatrix4(this._Matrix);\r\n\r\n sel.WorldToScreenPoint(p1);\r\n sel.WorldToScreenPoint(p2);\r\n\r\n if (sel.IntersectLine(p1, p2))\r\n {\r\n p1.fromArray(pos.array, y * 3);\r\n p2.fromArray(pos.array, (y + 1) * 3);\r\n arrayPushArray(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n }\r\n return pts;\r\n }\r\n }\r\n\r\n let pts = super.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum);\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\r\n //为圆弧板映射新的点表\r\n if (this._SweepPath)\r\n {\r\n let inv = this.OCSInv;\r\n let mtx = this._Matrix;\r\n\r\n if (this._SweepAngle !== 0)\r\n {\r\n inv.multiplyMatrices(this.ArcBuild.OCS2RotateMtx, inv);\r\n mtx = new Matrix4().multiplyMatrices(mtx, this.ArcBuild.Rotate2OCSMtx);\r\n }\r\n\r\n for (let p of pts) p.applyMatrix4(inv);\r\n\r\n let xs = pts.map(p => p.x);\r\n arraySortByNumber(xs);\r\n arrayRemoveDuplicateBySort(xs, equaln);\r\n this.ArcBuild.ParseAllX_Map(xs);\r\n\r\n for (let p of pts)\r\n {\r\n this.ArcBuild.PosMap2ArcPos(p);\r\n p.applyMatrix4(mtx);\r\n }\r\n }\r\n\r\n return pts;\r\n }\r\n\r\n private MoveArcBoardPoints(indexList: Array, vec: Vector3, dragType: DragPointType)\r\n {\r\n this.WriteAllObjectRecord();\r\n const isGrip = dragType === DragPointType.Grip;\r\n const oldPts = isGrip ? this.GetGripPoints() : this.GetStretchPoints();\r\n const MoveBack = () => isGrip ? super.MoveGripPoints(indexList, offsetVec.clone().negate()) : super.MoveStretchPoints(indexList, offsetVec.clone().negate());\r\n\r\n let path = this.ArcBuild.SweepPath1.Clone();\r\n\r\n // 1、计算沿着SweepPath偏移的向量\r\n const offsetVec = this.GetOffsetVecAlongPath(oldPts[indexList[0]].clone(), vec, path);\r\n\r\n const oldPos = this.Position;\r\n const oldCon = this.ContourCurve.Clone();\r\n const ocs2rot = this.ArcBuild.OCS2RotateMtx;\r\n oldCon.ApplyMatrix(ocs2rot);\r\n const oldBox = oldCon.BoundingBox;\r\n\r\n // 2、移动平板上的点\r\n isGrip ? super.MoveGripPoints(indexList, offsetVec) : super.MoveStretchPoints(indexList, offsetVec);\r\n\r\n const newPos = this.Position;\r\n const conMoveVec = TransformVector(newPos.clone().sub(oldPos), this.OCSInv);//轮廓在OCS中移动的向量\r\n const newCon = this.ContourCurve.Clone();\r\n newCon.Move(conMoveVec);\r\n newCon.ApplyMatrix(ocs2rot);\r\n const newBox = newCon.BoundingBox;\r\n\r\n this._jigSweepPath = path.Clone();\r\n\r\n // 特殊场景:闭合SweepPath,其对应的首尾不能发生变化,否者会发生path和Contour映射错误。\r\n if (path.CloseMark && !(equaln(newBox.min.x, oldBox.min.x) && equaln(newBox.max.x, oldBox.max.x)))\r\n {\r\n MoveBack();// 若头尾被拖拽过,需要恢复回去\r\n return;\r\n }\r\n\r\n // 特殊场景:某些操作,对弧形板进行移动(如当拖拽中间点),未发生路径改变,则重新移动回去\r\n const newSize = newBox.getSize(new Vector3);\r\n const oldSize = oldBox.getSize(new Vector3);\r\n if (equaln(newSize.x, oldSize.x, 1e-3))\r\n {\r\n const newPts = isGrip ? this.GetGripPoints() : this.GetStretchPoints();\r\n if (oldPts.length === newPts.length)\r\n {\r\n const vec = oldPts[0].clone().sub(newPts[0]);\r\n const isMoveArcBoard = oldPts.every((pt, i) => equalv3(pt.clone().sub(newPts[i]), vec));\r\n if (isMoveArcBoard)\r\n {\r\n MoveBack();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n // 3、修正SweepPath\r\n path = this.FixSweepPathByContourBondingbox(newBox, oldBox, path);\r\n // 特殊场景:path 计算发生错误,需要恢复板的状态\r\n if (!path)\r\n {\r\n MoveBack();\r\n return;\r\n }\r\n\r\n // 4、计算弧形板偏移矩阵\r\n if (this.objectId || (this.IsEmbedEntity))\r\n {\r\n const pts1 = isGrip ? newCon.GetGripPoints() : newCon.GetStretchPoints();\r\n const pts2 = isGrip ? oldCon.GetGripPoints() : oldCon.GetStretchPoints();\r\n const count = Math.min(pts1.length, pts2.length);\r\n this._SweepArcBoardBuild = undefined;\r\n for (let i = 0; i < count; i++)\r\n {\r\n if (equalv2(pts1[i], pts2[i], 1e-3)) // 找到新板和旧板上不变的点,计算出偏移矩阵\r\n {\r\n const pts = isGrip ? this.GetGripPoints() : this.GetStretchPoints();\r\n this.Move(oldPts[i].sub(pts[i]));\r\n break;\r\n }\r\n }\r\n this._SweepArcBoardBuild = undefined;\r\n }\r\n }\r\n\r\n private GetOffsetVecAlongPath(oldP: Vector3, vec: Vector3, path: Polyline): Vector3\r\n {\r\n const p = oldP.clone().add(vec);//拉伸后的点 在世界坐标系中\r\n\r\n const path2WCSMtx = new Matrix4().makeBasis(XAxis, ZAxis, YAxisN);\r\n if (this._SweepAngle !== 0)\r\n path2WCSMtx.premultiply(this.ArcBuild.Rotate2OCSMtx);\r\n path2WCSMtx.premultiply(this.OCSNoClone);\r\n const wcs2PathMtx = new Matrix4().getInverse(path2WCSMtx);\r\n this._jigPath2WCSMtx = path2WCSMtx.clone();\r\n\r\n //变换到路径坐标系\r\n p.applyMatrix4(wcs2PathMtx);\r\n oldP.applyMatrix4(wcs2PathMtx);\r\n\r\n // 限制p, 在见光面的曲面中,计算偏移向量\r\n const cp = path.GetClosestPointTo(p, true);\r\n\r\n const oldZ = oldP.z;\r\n const newZ = p.z;\r\n\r\n const oldPCp = path.GetClosestPointTo(oldP.setZ(0), false);//旧的最近点\r\n const oldDist = path.GetDistAtPoint2(oldPCp);// 移动前的Dist\r\n const movedDist = path.GetDistAtPoint2(cp);// 移动后的Dist\r\n\r\n const moveVec = new Vector3(movedDist - oldDist, - newZ + oldZ, 0);\r\n\r\n //将moveVec转换到世界坐标系\r\n if (this._SweepAngle !== 0)\r\n TransformVector(moveVec, this.ArcBuild.Rotate2OCSMtx);\r\n TransformVector(moveVec, this.OCSNoClone);\r\n\r\n return moveVec;\r\n }\r\n\r\n /**\r\n * @private 通过新旧轮廓的Bondingbox修正路径\r\n * @param {Box3Ext} newBox 路径坐标系下,新轮廓的Bondingbox\r\n * @param {Box3Ext} oldBox 路径坐标系下,旧轮廓的Bondingbox\r\n * @param {Polyline} path 见光面路径\r\n * @return {*} {Polyline} 修正好的路径\r\n */\r\n private FixSweepPathByContourBondingbox(newBox: Box3Ext, oldBox: Box3Ext, path: Polyline): Polyline\r\n {\r\n // 若头部和尾部重合,则直接不处理\r\n if (equaln(newBox.min.x, newBox.max.x, 0.1))\r\n return;\r\n\r\n const GetArcAndKeys = (): { key: number, arc: Arc; }[] =>\r\n {\r\n const curves = path.Explode();\r\n const arcs: { key: number, arc: Arc; }[] = [];\r\n for (let i = 0; i < curves.length; i++)\r\n if (curves[i] instanceof Arc)\r\n arcs.push({ key: i, arc: curves[i].Clone() as Arc });\r\n return arcs;\r\n };\r\n const arcKeys = GetArcAndKeys();\r\n\r\n const MovePath = (pathToMove: Polyline, mVec: Vector3) =>\r\n {\r\n // 修正SWeepPath\r\n pathToMove.Move(mVec);\r\n const { pts: pathPts, buls } = pathToMove.MatrixAlignTo2(new Matrix4);\r\n pathToMove.OCSNoClone.identity();\r\n for (let i = 0; i < pathToMove.LineData.length; i++)\r\n {\r\n pathToMove.LineData[i].pt.copy(pathPts[i]);\r\n pathToMove.LineData[i].bul = buls[i];\r\n }\r\n };\r\n\r\n let jigSpt: Vector3 = undefined;\r\n const FixHead = () =>\r\n {\r\n if (!equaln(newBox.min.x, 0, 1e-3)) // 头部\r\n {\r\n const c1 = path.GetCurveAtIndex(0);\r\n if (newBox.min.x < 0)\r\n path.Extend(newBox.min.x / c1.Length); // 延伸\r\n else\r\n path = path.GetSplitCurves(path.GetParamAtDist(newBox.min.x))[1]; // 裁剪\r\n\r\n jigSpt = path.StartPoint.clone();\r\n MovePath(path, path.StartPoint.clone().negate());// 修正Path\r\n }\r\n };\r\n\r\n const FixTail = () =>\r\n {\r\n if (!equaln(newBox.max.x, oldBox.max.x, 1e-3)) // 尾部\r\n {\r\n const dist = newBox.max.x - oldBox.max.x;\r\n const ce = path.GetCurveAtIndex(path.EndParam - 1);\r\n if (dist > 0)\r\n path.Extend(path.EndParam + ((dist) / ce.Length)); // 延伸\r\n else\r\n path = path.GetSplitCurves(path.GetParamAtDist(newBox.max.x - newBox.min.x))[0]; // 裁剪, PS: 从尾部点拉伸到头部点之前,newBox.min.x不为零\r\n }\r\n };\r\n\r\n /**\r\n * 某些异形板左侧头部拉伸到尾部后面示意图:\r\n * ___________\r\n * A | |\r\n * |_______ |\r\n * | |\r\n * old B |___|\r\n * _____\r\n * | | A\r\n * ___|_____|\r\n * | |\r\n * new B |___|\r\n */\r\n const outofTail = newBox.min.x >= oldBox.max.x\r\n || equaln(newBox.min.x, oldBox.max.x, 1e-3) // 矩形板:拉伸后,新板头和旧板尾部相同\r\n || newBox.min.x > oldBox.min.x && newBox.max.x > oldBox.max.x; // 某些异形板:新板头会在旧板中间某处,新板尾超过旧版尾\r\n if (outofTail)\r\n {\r\n // 头部拉伸在超过尾部,即新头部大于等于原尾部。则先对尾部延伸,再裁剪头部(若先裁剪头部,则path可能会为空)\r\n FixTail();\r\n FixHead();\r\n } else\r\n {\r\n FixHead();\r\n FixTail();\r\n }\r\n\r\n // 计算 this._SweepPath\r\n let sweepPath = undefined;\r\n if (this._SweepVisibleFace === FaceDirection.Back)\r\n {\r\n sweepPath = path;\r\n // 做offset偏移,查看path是否会被裁剪。若被裁剪,会破坏板和路径的映射关系,则不能继续其他操作\r\n if (this.objectId || (this.IsEmbedEntity && this.ParentEntity.objectId))\r\n {\r\n const frontPath = ArcBoardBuild.OffsetPolyline(sweepPath, -this.thickness); // 正面path\r\n const backPath = ArcBoardBuild.OffsetPolyline(frontPath, this.thickness); // 背面path\r\n if (!equaln(backPath.Length, sweepPath.Length, 1e-3))\r\n return;\r\n }\r\n }\r\n else\r\n {\r\n sweepPath = ArcBoardBuild.OffsetPolyline(path, this.thickness);\r\n // 做offset偏移,查看path是否会被裁剪。若被裁剪,会破坏板和路径的映射关系,则不能继续其他操作\r\n if (this.objectId || (this.IsEmbedEntity && this.ParentEntity.objectId))\r\n {\r\n const frontPath = ArcBoardBuild.OffsetPolyline(sweepPath, -this.thickness);// 正面path\r\n if (!equaln(frontPath.Length, path.Length, 1e-3))\r\n return;\r\n }\r\n }\r\n this._SweepPath = sweepPath;\r\n\r\n this._jigSweepPath = path.Clone();\r\n if (jigSpt)\r\n MovePath(this._jigSweepPath, jigSpt);// 新路径,但是未进行起始点偏移。方便拖拽时,实时显示当前路径\r\n\r\n // 更新圆弧配置\r\n if (this.objectId || (this.IsEmbedEntity && this.ParentEntity.objectId))\r\n this.UpdateArcBoardOptionsByPath(arcKeys, this._jigSweepPath);\r\n\r\n return path;\r\n }\r\n\r\n DeferUpdate()\r\n {\r\n if (this.NeedUpdateFlag & UpdateDraw.Matrix)\r\n {\r\n if (this.RelativeHardware.some(id => !id.IsErase))\r\n this.NeedUpdateFlag |= UpdateDraw.Geometry;\r\n }\r\n super.DeferUpdate();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n if (ver < 6)\r\n this._SpaceOCS.fromArray(file.Read());\r\n this._BoardType = file.Read();\r\n this._Name = file.Read();\r\n //兼容旧版本\r\n if (ver > 2)\r\n {\r\n deserializationBoardData(file, this._BoardProcessOption, ver);\r\n }\r\n else\r\n {\r\n let opt = file.Read();\r\n this._BoardProcessOption = Object.assign(this._BoardProcessOption,\r\n typeof opt === \"string\" ? JSON.parse(opt) : opt);\r\n }\r\n\r\n //读取排钻列表\r\n this._DrillList.clear();\r\n let size = file.Read();\r\n\r\n //没有与任何板件关联的排钻\r\n let noRelevancyDrillings: ObjectId[][] = [];\r\n for (let i = 0; i < size; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let drIdList: ObjectId[][] = [];\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let drIDs: ObjectIdArr = [];\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\r\n if (ver > 21)\r\n drIDs.Name = file.Read();\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.Clear2DPathCache();\r\n this.Clear3DPathCache();\r\n\r\n if (ver > 10)\r\n this._CustomNumber = file.Read();\r\n else\r\n this._CustomNumber = null;\r\n\r\n this._KnifePolylineMap.clear();\r\n if (ver > 11)\r\n {\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let id = file.Read();\r\n let pl = file.ReadObject() as Polyline;\r\n this._KnifePolylineMap.set(id, pl);\r\n }\r\n }\r\n\r\n // if (this.width === 0 || this.height === 0) //板件变成0长度,无法绘制\r\n // this._isErase = true;\r\n\r\n if (ver > 12)\r\n {\r\n let count = file.Read();\r\n this.RelativeHandle.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.RelativeHandle.push(objId);\r\n }\r\n }\r\n\r\n const processData = this._BoardProcessOption;\r\n if (ver > 13)\r\n {\r\n processData.edgeRemarkUp = file.Read();\r\n processData.edgeRemarkDown = file.Read();\r\n processData.edgeRemarkLeft = file.Read();\r\n processData.edgeRemarkRight = file.Read();\r\n let count = file.Read();\r\n processData.highBoardEdgeRemark.length = 0;\r\n processData.highBoardEdgeRemark = file.ReadArray(count);\r\n }\r\n\r\n this._DrillAssociationLock.clear();\r\n if (ver > 14)\r\n {\r\n this._DrillLock = file.Read();\r\n\r\n //读取关联排钻锁映射\r\n const size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n const id = file.ReadObjectId();\r\n if (id)\r\n this._DrillAssociationLock.add(id);\r\n }\r\n }\r\n\r\n if (ver > 15)\r\n {\r\n this._SweepPath = file.ReadObject();\r\n if (this._SweepPath)\r\n {\r\n this._SweepAngle = file.Read();\r\n if (ver > 16)\r\n this._SweepVisibleFace = file.Read();\r\n if (ver > 17)\r\n this._isDrawArcGroove = file.Read();\r\n this._ArcBoardOptions.clear();\r\n const count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let key = file.Read();\r\n let opt: ArcBoardOptions = {\r\n arcLength: file.Read(),\r\n grooveSpacing: file.Read(),\r\n grooveWidth: file.Read(),\r\n retainedThickness: file.Read(),\r\n grooveAddDepth: file.Read(),\r\n grooveAddLength: file.Read(),\r\n grooveAddWidth: file.Read(),\r\n knifeRadius: file.Read(),\r\n arcExtension: 0,\r\n };\r\n if (ver > 18)\r\n opt.arcExtension = file.Read();\r\n this._ArcBoardOptions.set(key, opt);\r\n }\r\n }\r\n }\r\n\r\n if (ver > 19)\r\n this.AlignLineObject = file.ReadHardObjectId();\r\n\r\n if (ver > 20)\r\n DeserializationBoardSideModeingData(file, this._SideModelingMap);\r\n this.ClearSideModelingCache();\r\n\r\n if (ver > 22)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n\r\n if (ver > 23)\r\n {\r\n processData.reservedEdgeUp = file.Read();\r\n processData.reservedEdgeDown = file.Read();\r\n processData.reservedEdgeLeft = file.Read();\r\n processData.reservedEdgeRight = file.Read();\r\n let count = file.Read();\r\n processData.highReservedEdge.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let size = file.Read();\r\n processData.highReservedEdge.push({ size });\r\n }\r\n\r\n processData.sealColorUp = file.Read();\r\n processData.sealColorDown = file.Read();\r\n processData.sealColorLeft = file.Read();\r\n processData.sealColorRight = file.Read();\r\n\r\n processData.sealColorType = file.Read();\r\n }\r\n\r\n if (ver > 24)\r\n this.arcBoardFeedProcess = file.Read();\r\n }\r\n\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(25);\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 file.Write(ids.Name);\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 file.Write(this._CustomNumber);\r\n\r\n file.Write(this._KnifePolylineMap.size);\r\n for (let [id, pl] of this._KnifePolylineMap)\r\n {\r\n file.Write(id);\r\n file.WriteObject(pl);\r\n }\r\n\r\n file.Write(this.RelativeHandle.length);\r\n for (let id of this.RelativeHandle)\r\n file.WriteObjectId(id);\r\n\r\n const processData = this._BoardProcessOption;\r\n file.Write(processData.edgeRemarkUp);\r\n file.Write(processData.edgeRemarkDown);\r\n file.Write(processData.edgeRemarkLeft);\r\n file.Write(processData.edgeRemarkRight);\r\n file.Write(processData.highBoardEdgeRemark.length);\r\n for (let r of processData.highBoardEdgeRemark)\r\n {\r\n file.Write(r);\r\n }\r\n\r\n //ver>14\r\n {\r\n file.Write(this._DrillLock);\r\n const count = this._DrillAssociationLock.size;\r\n file.Write(count);\r\n for (const id of this._DrillAssociationLock)\r\n {\r\n file.WriteObjectId(id);\r\n }\r\n }\r\n\r\n //ver 16\r\n file.WriteObject(this._SweepPath);\r\n if (this._SweepPath)\r\n {\r\n file.Write(this._SweepAngle);\r\n file.Write(this._SweepVisibleFace);\r\n file.Write(this._isDrawArcGroove);\r\n file.Write(this._ArcBoardOptions.size);\r\n for (const [k, v] of this._ArcBoardOptions)\r\n {\r\n file.Write(k);\r\n file.Write(v.arcLength);\r\n file.Write(v.grooveSpacing);\r\n file.Write(v.grooveWidth);\r\n file.Write(v.retainedThickness);\r\n file.Write(v.grooveAddDepth);\r\n file.Write(v.grooveAddLength);\r\n file.Write(v.grooveAddWidth);\r\n file.Write(v.knifeRadius);\r\n file.Write(v.arcExtension);\r\n }\r\n }\r\n\r\n //ver 20\r\n file.WriteHardObjectId(this.AlignLineObject);\r\n\r\n //ver 21\r\n SerializeBoardSideModeingData(file, this._SideModelingMap);\r\n\r\n // ver 23\r\n file.WriteBool(this._LockMaterial);\r\n\r\n //ver 24\r\n file.Write(processData.reservedEdgeUp);\r\n file.Write(processData.reservedEdgeDown);\r\n file.Write(processData.reservedEdgeLeft);\r\n file.Write(processData.reservedEdgeRight);\r\n file.Write(processData.highReservedEdge.length);\r\n for (let r of processData.highReservedEdge)\r\n {\r\n file.Write(r.size);\r\n }\r\n file.Write(processData.sealColorUp);\r\n file.Write(processData.sealColorDown);\r\n file.Write(processData.sealColorLeft);\r\n file.Write(processData.sealColorRight);\r\n\r\n file.Write(processData.sealColorType);\r\n\r\n // ver 25\r\n file.Write(this.arcBoardFeedProcess);\r\n }\r\n}\r\n\r\n//解析新的板的边映射到旧板边的映射情况\r\nfunction ParseNewBr2OldBr_EdgeMap(newBr: Board, oldBr: Board, oldBrOcsInv: Matrix4): number[]\r\n{\r\n let newBrCu = newBr.ContourCurve;\r\n let oldBrCu = oldBr.ContourCurve;\r\n\r\n let indexMap: number[] = [];\r\n\r\n //矩阵对齐\r\n let m = newBr.OCS.premultiply(oldBrOcsInv);\r\n\r\n for (let i = 0; i < newBrCu.EndParam; i++)\r\n {\r\n let p = newBrCu.GetPointAtParam(i + 0.5).applyMatrix4(m);\r\n\r\n let cp = oldBrCu.GetClosestPointTo(p, false);\r\n let cparam = oldBrCu.GetParamAtPoint2(cp);\r\n indexMap.push(Math.floor(cparam));\r\n }\r\n\r\n return indexMap;\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, Geometry, Line, LineBasicMaterial, LineSegments, Matrix4, Object3D, Vector3 } from \"three\";\r\nimport { FaceDirection } from \"../Add-on/DrawDrilling/DrillType\";\r\nimport { ColorMaterial } from \"../Common/ColorPalette\";\r\nimport { MakeMirrorMtx } from \"../Common/Matrix4Utils\";\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 { Shape2 } from \"../DatabaseServices/Shape2\";\r\nimport { GetBoardContour } from \"../GraphicsSystem/CalcEdgeSealing\";\r\nimport { GetSideCuFaceMtx } from \"./Board2DModelCSG/BoardSideModelCSGBuilder\";\r\nimport { MatrixIsIdentityCS, MoveMatrix, ZAxis } 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 if (br instanceof Board && br.HasSideModel)\r\n {\r\n let con = GetBoardContour(br);\r\n if (con)\r\n {\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n const mirrorMtxZ = MakeMirrorMtx(ZAxis);\r\n\r\n for (let [index, soilds] of br.SideModelingMap)\r\n {\r\n let cu = cus[index];\r\n if (!cu) continue;\r\n\r\n let mt4 = GetSideCuFaceMtx(cus[index], inverseZ);\r\n for (let soild of soilds)\r\n {\r\n let lines = FastWireframe(soild, color, 3, false);\r\n for (let line of lines)\r\n {\r\n line.applyMatrix4(mirrorMtxZ);\r\n line.applyMatrix4(soild.OCSNoClone);\r\n line.applyMatrix4(mt4);\r\n result.push(line);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function FastExtrudeEdgeGeometryOfShape(shape: Shape2, z0: number, z1: number, divCount = 6, optArc = true, coords: number[] = [])\r\n{\r\n let ptss = [shape.getPoints(divCount, optArc)];\r\n for (let hole of shape.holes)\r\n ptss.push((hole as Shape2).getPoints(divCount, optArc));\r\n\r\n for (let pts of ptss)\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, z0, nextp.x, nextp.y, z0);\r\n //顶面\r\n coords.push(p.x, p.y, z1, nextp.x, nextp.y, z1);\r\n\r\n if (p[\"_mask_\"])//侧面\r\n coords.push(p.x, p.y, z0, p.x, p.y, z1);\r\n }\r\n\r\n return coords;\r\n}\r\n\r\nlet tempP = new Vector3;\r\n//这个代码天生不和Mesh对齐,因为独立坐标系的原因,槽的坐标系可能和主题的坐标系不一致导致的\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 { ExtrudeBufferGeometry, UVGenerator, Vector2 } from \"three\";\r\n\r\n//https://github.com/mrdoob/three.js/blob/master/src/geometries/ExtrudeGeometry.js#L727\r\nclass WorldUVGenerator implements UVGenerator\r\n{\r\n generateTopUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number)\r\n {\r\n const a_x = vertices[indexA * 3];\r\n const a_y = vertices[indexA * 3 + 1];\r\n const b_x = vertices[indexB * 3];\r\n const b_y = vertices[indexB * 3 + 1];\r\n const c_x = vertices[indexC * 3];\r\n const 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\r\n generateSideWallUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number, indexD: number)\r\n {\r\n const a_x = vertices[indexA * 3];\r\n const a_y = vertices[indexA * 3 + 1];\r\n const a_z = vertices[indexA * 3 + 2];\r\n const b_x = vertices[indexB * 3];\r\n const b_y = vertices[indexB * 3 + 1];\r\n const b_z = vertices[indexB * 3 + 2];\r\n const c_x = vertices[indexC * 3];\r\n const c_y = vertices[indexC * 3 + 1];\r\n const c_z = vertices[indexC * 3 + 2];\r\n const d_x = vertices[indexD * 3];\r\n const d_y = vertices[indexD * 3 + 1];\r\n const d_z = vertices[indexD * 3 + 2];\r\n\r\n if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x))\r\n {\r\n return [\r\n new Vector2(a_x, 1 - a_z),\r\n new Vector2(b_x, 1 - b_z),\r\n new Vector2(c_x, 1 - c_z),\r\n new Vector2(d_x, 1 - d_z)\r\n ];\r\n }\r\n else\r\n {\r\n return [\r\n new Vector2(a_y, 1 - a_z),\r\n new Vector2(b_y, 1 - b_z),\r\n new Vector2(c_y, 1 - c_z),\r\n new Vector2(d_y, 1 - d_z)\r\n ];\r\n }\r\n }\r\n}\r\n\r\nexport const worldUVGenerator = new WorldUVGenerator();\r\n","import { BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, FrontSide, 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, ZeroVec, equaln, equalv2, equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { GenerateExtrudeEdgeGeometry } from \"../../Geometry/SimpleExtrudeEdgeGeometry\";\r\nimport { ScaleUV } from \"../../Geometry/UVUtils\";\r\nimport { worldUVGenerator } from \"../../Geometry/WordUVGenerator\";\r\nimport { ColorInTransparent, RenderState, 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 { Circle } from \"../Entity/Circle\";\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 { GangDrillType } from \"./CylinderHole\";\r\nimport { Hole } from \"./Hole\";\r\n\r\n@Factory\r\nexport class ExtrudeHole extends Hole\r\n{\r\n private _DisplayAccuracy = 0;\r\n private _contourCurve: ExtrudeContourCurve = new Polyline();\r\n private _EdgeGeometry: BufferGeometry;\r\n protected _knifeRadius: number = 3;\r\n private _GoodsId: string = \"\";\r\n private _GoodsSn: string = \"\";\r\n @AutoRecord isHole = true;\r\n @AutoRecord isThrough = false;\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\r\n get GoodsId(): string\r\n {\r\n return this._GoodsId;\r\n }\r\n set GoodsId(value: string)\r\n {\r\n if (this._GoodsId !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._GoodsId = value;\r\n }\r\n }\r\n\r\n get GoodsSn(): string\r\n {\r\n return this._GoodsSn;\r\n }\r\n set GoodsSn(value: string)\r\n {\r\n if (this._GoodsSn !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._GoodsSn = value;\r\n }\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 if (this._contourCurve instanceof Circle)\r\n return this.GetGripPoints();\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 DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\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 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 UVGenerator: worldUVGenerator,\r\n };\r\n if (this.ContourCurve instanceof Circle || this.ContourCurve instanceof Polyline)\r\n {\r\n this.ContourCurve.DisplayAccuracy = this._DisplayAccuracy;\r\n }\r\n let geo = new ExtrudeGeometry(this.ContourCurve.Shape, extrudeSettings);\r\n geo.applyMatrix4(this._contourCurve.OCSNoClone);\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.OCSNoClone); });\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.GetFirstDeriv(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)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex));\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.DrawColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n // 概念透明\r\n else if (renderType === RenderType.ConceptualTransparent)\r\n {\r\n let color = this.DrawColorIndex;\r\n if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) color = 8;\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\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 new Object3D().add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())\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)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex);\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.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 else if (renderType === RenderType.Conceptual)\r\n {\r\n obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n // 概念透明\r\n else if (renderType === RenderType.ConceptualTransparent)\r\n {\r\n let color = this.DrawColorIndex;\r\n if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) color = 8;\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Jig)\r\n obj.add(...FastWireframe2(this));\r\n\r\n return obj;\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex);\r\n }\r\n // 概念透明\r\n else if (renderType === RenderType.ConceptualTransparent)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n let color = this.DrawColorIndex;\r\n if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) color = 8;\r\n mesh.material = ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide);\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.Physical2)\r\n {\r\n let mesh = obj.children[0] 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.DrawColorIndex);\r\n }\r\n }\r\n\r\n ClearDraw(): this\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 return super.ClearDraw();\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\r\n if (ver > 3)\r\n this.type = file.Read();\r\n else\r\n this.type = GangDrillType.Ljg;\r\n\r\n //回退版本5弃用\r\n if (ver > 4)\r\n {\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n file.ReadSoftObjectId();\r\n }\r\n\r\n if (ver > 5)\r\n {\r\n this._GoodsId = file.Read();\r\n this._GoodsSn = file.Read();\r\n }\r\n\r\n if (ver > 6)\r\n {\r\n this._DisplayAccuracy = 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(7);\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 file.Write(this.type);\r\n\r\n //ver = 5 弃用\r\n file.Write(0);\r\n\r\n //ver = 6\r\n file.Write(this._GoodsId);\r\n file.Write(this._GoodsSn);\r\n\r\n //ver = 7\r\n file.Write(this._DisplayAccuracy);\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 ((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\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 ChangePlListStartPt(plList);\r\n //对多段线进行排序,按最起始点远近排序\r\n SortPlByStartPt(plList);\r\n\r\n let result: Polyline[] = [];\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 j = 0; j < cuPtsBul.pts.length; j++)\r\n {\r\n //坐标系对齐\r\n let p = cuPtsBul.pts[j];\r\n p.copy(AsVector2(AsVector3(p).applyMatrix4(alMat)));\r\n firstPl.LineData.push({ pt: p, bul: cuPtsBul.buls[j] });\r\n }\r\n }\r\n }\r\n result.push(firstPl);\r\n\r\n for (let pl of result)\r\n pl.RemoveRepeatPos(1e-3);\r\n\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)\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, rectInfo: IRectInfo, dist: number)\r\n{\r\n if (!rectInfo || equaln(dist, 0)) return;\r\n\r\n let box = rectInfo.box;\r\n let size = rectInfo.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(rectInfo.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(rectInfo.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(rectInfo.OCS);\r\n }\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline, IsRect, MergeCurvelist, equalCurve } from \"../../Common/CurveUtils\";\r\nimport { LogEnable } from \"../../Common/Log\";\r\nimport { MakeMirrorMtx } from \"../../Common/Matrix4Utils\";\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, ExtrudeSolid } 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 { GetSideCuFaceMtx } from \"../../Geometry/Board2DModelCSG/BoardSideModelCSGBuilder\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { Route } from \"../../Geometry/CurveMap\";\r\nimport { ParseBoardSideFace } from \"../../Geometry/DrillParse/BoardGetFace\";\r\nimport { CanDrawHoleFuzz } from \"../../Geometry/DrillParse/CanDrawHoleFuzz\";\r\nimport { AsVector2, ZAxis, equaln, isParallelTo } from \"../../Geometry/GeUtils\";\r\nimport { RegionParse } from \"../../Geometry/RegionParse\";\r\nimport { FixIndex } from \"../../Nest/Common/Util\";\r\nimport { ConverToPtsBul } from \"../../Production/Convert2PtsBul\";\r\nimport { IOriginSideModelingData, ModelType, ParseArcBoardHoles } from \"../../Production/Product\";\r\nimport { BoolOpeartionType, isTargetCurInOrOnSourceCur } from \"../BoolOperateUtils\";\r\nimport { GetBoardContour } from \"../CalcEdgeSealing\";\r\nimport { IntersectOption } from \"../IntersectWith\";\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, redundancyKnif = 0): 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 let hasRedK = false;\r\n if ((!isOut || offsetDist >= knifRadius) && rectInfo)\r\n {\r\n hasRedK = true;\r\n offsetDist += knifRadius * 2 - redundancyKnif;\r\n }\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 && offsetDist > knifRadius)\r\n {\r\n const rectMinLengthHalf = Math.min(rectInfo.size.x, rectInfo.size.y) / 2;\r\n //如果最后一个矩形最小边区间一半小于刀半径减去冗余值的一半,则偏移到中心处切一次\r\n if (!equaln(offsetDist, rectMinLengthHalf, 1e-5) && offsetDist - rectMinLengthHalf - 1e-5 < knifRadius - redundancyKnif / 2)\r\n {\r\n retCus.push(...GetOffsetCurves(outline, rectMinLengthHalf * dir, rectInfo));\r\n }\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 =>\r\n {\r\n let ipts = h.Curve.IntersectWith2(c, 0);\r\n return ipts.length > 0 || h.ContainerCurve(c, false, ipts);\r\n });\r\n\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\r\n //testcode\r\n // let reg = new Region(shapeMg).Clone();\r\n // let reg2 = new Region(holesMg).Clone();\r\n // TestDraw(reg, 1);\r\n // TestDraw(reg2, 2);\r\n\r\n shapeMg.BoolOper(holesMg, BoolOpeartionType.Subtract);\r\n\r\n // let reg3 = new Region(shapeMg).Clone();\r\n // TestDraw(reg3, 3);\r\n\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, rk = 0)\r\n {\r\n let modelings = br.BoardModeling;\r\n let { modeling } = GetModelingFromCustomDrill(br);\r\n modelings.push(...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 (m.shape.Holes.length === 0 && 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, rk);\r\n }\r\n\r\n /**\r\n * 计算走刀路径\r\n */\r\n CalcPath(modelings: IModeling[], br: Board, rk = 0): 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, rk));\r\n }\r\n return cus;\r\n }\r\n\r\n //获取造型走刀\r\n GetModelFeedPath(br: { Thickness: number, ContourCurve: ExtrudeContourCurve; }, modeling: IModeling, redundancyKnif = 0): 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 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, redundancyKnif);\r\n if (offsetCus.length > 1)\r\n cus.push(...OptimizeToolPath(offsetCus, shape, knifeRadius));\r\n }\r\n return cus;\r\n }\r\n\r\n //获取侧面造型走刀\r\n GetSideModelFeedPath(solid: ExtrudeSolid, faceContour: Polyline, redundancyKnif = 0): Curve[]\r\n {\r\n let cus: Curve[] = [];//返回走刀路径\r\n\r\n let shape = solid.Shape;\r\n let thickness = solid.Thickness;\r\n let knifeRadius = solid.KnifeRadius;\r\n let addLen = solid.GroovesAddLength;\r\n let addDepth = solid.GroovesAddDepth;\r\n let addWidth = solid.GroovesAddWidth;\r\n\r\n if (!knifeRadius) knifeRadius = 3;\r\n\r\n if (addDepth)\r\n thickness += addDepth;\r\n\r\n if (thickness < 1e-5) return cus;\r\n shape = shape.Clone().ApplyMatrix(solid.OCSNoClone);\r\n shape.Z0();\r\n this.GrooveAddSize(shape, addLen, addWidth);\r\n this.HandleThoughGroove(faceContour, shape, knifeRadius);\r\n\r\n //造型半径和刀半径相等,返回重合点的线\r\n let outline = shape.Outline.Curve;\r\n if (outline instanceof Circle && equaln(outline.Radius, knifeRadius))\r\n return [new Polyline([{ pt: AsVector2(outline.Center), bul: 0 }, { pt: AsVector2(outline.Center), bul: 0 }])];\r\n\r\n // {\r\n // todo 全深槽\r\n // }\r\n\r\n let offsetCus = this.HandleShape(shape, knifeRadius, true, redundancyKnif);\r\n if (offsetCus.length > 1)\r\n cus.push(...OptimizeToolPath(offsetCus, shape, knifeRadius));\r\n\r\n return cus;\r\n }\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 //addWidth可能为undefined 导致box计算错误\r\n let length = addLen ?? 0;\r\n let width = addWidth ?? 0;\r\n\r\n //若是矩形,应用槽加长\r\n if (length != 0 || width != 0)\r\n {\r\n let rectInfo = IsRect(shape.Outline.Curve);\r\n if (rectInfo)\r\n {\r\n let box = rectInfo.box;\r\n let size = rectInfo.size;\r\n if (size.x > size.y)\r\n {\r\n box.max.add(new Vector3(length / 2, width / 2));\r\n box.min.add(new Vector3(-length / 2, -width / 2));\r\n }\r\n else\r\n {\r\n box.max.add(new Vector3(width / 2, length / 2));\r\n box.min.add(new Vector3(-width / 2, -length / 2));\r\n }\r\n let pl = new Polyline().RectangleFrom2Pt(box.min, box.max).ApplyMatrix(rectInfo.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 //检查正反面造型\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 (m.shape.Holes.length === 0 && 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\r\n //检查侧面造型\r\n CheckSideModeling(br: Board)\r\n {\r\n let allSideModelGrooveMap = br.AllSideModelGrooveMap;\r\n if (!allSideModelGrooveMap?.size) return [];\r\n\r\n let errorSideModel: ExtrudeSolid[] = [];\r\n\r\n let faces = new ParseBoardSideFace(br);\r\n\r\n let con = GetBoardContour(br);\r\n if (!con) return errorSideModel;\r\n\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n const mirrorMtxZ = MakeMirrorMtx(ZAxis);\r\n\r\n for (let [n, solids] of allSideModelGrooveMap)\r\n {\r\n let faceContour = faces.Faces[n].Region.ShapeManager.ShapeList[0].Outline.Curve as Polyline;\r\n let mt4 = GetSideCuFaceMtx(cus[n], inverseZ);\r\n\r\n for (let solid of solids)\r\n {\r\n // 圆造型拆成孔\r\n // let cu = solid.Shape.Outline.Curve;\r\n // if (!solid.Shape.Holes.length && cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n // continue;\r\n\r\n let paths = this.GetSideModelFeedPath(solid, faceContour);//走刀路径\r\n if (!paths.length)\r\n {\r\n let s = solid.Clone();\r\n s.ApplyMatrix(mirrorMtxZ);\r\n s.ApplyMatrix(mt4);\r\n s.ApplyMatrix(br.OCS);\r\n errorSideModel.push(s);\r\n }\r\n }\r\n }\r\n return errorSideModel;\r\n }\r\n\r\n CheckCustomHole(br: Board)\r\n {\r\n let { modeling } = GetModelingFromCustomDrill(br);\r\n\r\n let errHoles: ExtrudeHole[] = [];\r\n\r\n for (let m of modeling)\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (m.shape.Holes.length === 0 && 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\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 let param = brCon.GetParamAtPoint(mp);\r\n\r\n let curveOnContour = false;\r\n if (brCon.ParamOnCurve(param))\r\n {\r\n //#I7MYN9 在长的槽里面,我们防止它加长,短的槽就无所谓了\r\n if (c.Length > 100)\r\n {\r\n let curve = (brCon as Polyline).GetCurveAtParam(param);\r\n curveOnContour = curve.PtOnCurve(c.GetPointAtParam(0.2), 0.1) && curve.PtOnCurve(c.GetPointAtParam(0.8), 0.1);\r\n }\r\n else\r\n curveOnContour = true;\r\n }\r\n\r\n if (curveOnContour)\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\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\n\r\nexport function GetModelingFromCustomDrill(br: Board)\r\n{\r\n let normal = br.Normal;\r\n let brInv = br.OCSInv;\r\n let originOutline = GetBoardContour(br) as Polyline;\r\n let outline = originOutline;\r\n\r\n let modeling: (IModeling & { originEn: ExtrudeHole; })[] = [];\r\n let sideModeling: IOriginSideModelingData[] = [];\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 if (br.IsArcBoard && br.DrillList.size)\r\n ParseArcBoardHoles(br, new Vector3);\r\n\r\n const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption;\r\n\r\n for (let [objetId, idss] of br.DrillList)\r\n {\r\n let linkBoard = objetId?.Object as Board;\r\n if (cancelHoleProcessing && linkBoard)\r\n {\r\n const [L, W, H] = [linkBoard.BoardProcessOption.spliteHeight, linkBoard.BoardProcessOption.spliteWidth, linkBoard.BoardProcessOption.spliteThickness];\r\n if ((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H))\r\n continue;\r\n }\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)\r\n continue;\r\n\r\n let hole = id.Object;\r\n\r\n if (hole instanceof ExtrudeHole && hole.isHole)\r\n {\r\n if (!(hole.ContourCurve instanceof Circle))\r\n {\r\n hole[\"__CacheChaiDanName__\"] = ids.Name;\r\n if (br.IsArcBoard)\r\n {\r\n let ocs = hole[\"__CacheBrOCS__\"];\r\n if (!ocs) continue;\r\n\r\n brInv = new Matrix4().getInverse(ocs);\r\n let holeBox = hole.GetBoundingBoxInMtx(brInv);\r\n holeBoxMap.set(hole, holeBox);\r\n if (hole.BoundingBox.clone().intersect(br.BoundingBox).isSolid(0.1))\r\n holes.push(hole);\r\n }\r\n else\r\n {\r\n let holeBox = hole.GetBoundingBoxInMtx(brInv);\r\n holeBoxMap.set(hole, holeBox);\r\n if (holeBox.clone().intersect(bbox).isSolid(0.1))\r\n holes.push(hole);\r\n }\r\n continue;\r\n }\r\n }\r\n\r\n hole[\"__CacheAddPos__\"] = undefined;\r\n hole[\"__CacheBrOCS__\"] = undefined;\r\n hole[\"__CacheContour__\"] = undefined;\r\n }\r\n }\r\n }\r\n\r\n\r\n for (let hole of holes)\r\n {\r\n let box = holeBoxMap.get(hole);\r\n let max = box.max;\r\n let min = box.min;\r\n let dir: FaceDirection;\r\n let shape = hole.Shape;\r\n\r\n let faceRegions: Polyline[];\r\n let faceRegionsBox: Box3;\r\n let addPos: Vector3;\r\n\r\n let chaiDanName: string = hole[\"__CacheChaiDanName__\"];\r\n hole[\"__CacheChaiDanName__\"] = undefined;\r\n\r\n if (br.IsArcBoard)\r\n {\r\n addPos = hole[\"__CacheAddPos__\"];\r\n faceRegions = hole[\"__CacheContour__\"];\r\n let ocs = hole[\"__CacheBrOCS__\"];\r\n\r\n hole[\"__CacheAddPos__\"] = undefined;\r\n hole[\"__CacheBrOCS__\"] = undefined;\r\n hole[\"__CacheContour__\"] = undefined;\r\n\r\n if (!ocs || !addPos || !faceRegions?.length)\r\n return;\r\n else\r\n {\r\n brInv = new Matrix4().getInverse(ocs);\r\n normal = new Vector3().setFromMatrixColumn(ocs, 2);\r\n\r\n faceRegionsBox = new Box3();\r\n for (let pl of faceRegions)\r\n faceRegionsBox.union(pl.BoundingBox);\r\n\r\n let boxSize = faceRegionsBox.getSize(new Vector3);\r\n let extrude = Board.CreateBoard(boxSize.y, boxSize.x, 1);\r\n outline = extrude.ContourCurve as Polyline;\r\n }\r\n }\r\n\r\n let diff = brInv.clone().multiply(hole.OCS);\r\n shape.ApplyMatrix(diff);\r\n let thickness: number;\r\n if (isParallelTo(normal, hole.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 - CanDrawHoleFuzz)\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 < CanDrawHoleFuzz)\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 if (br.IsArcBoard)\r\n {\r\n //弧形板需要单独增加差值\r\n shape.Position = shape.Position.add(addPos);\r\n\r\n if (br.SweepAngle)\r\n {\r\n let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx);\r\n shape.ApplyMatrix(ocsInv);\r\n }\r\n }\r\n\r\n modeling.push({\r\n shape,\r\n thickness,\r\n dir,\r\n knifeRadius: hole.KnifeRadius,\r\n addLen: 0,\r\n addDepth: 0,\r\n addWidth: 0,\r\n originEn: hole,\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 = hole.Position.applyMatrix4(brInv).setZ(0);\r\n // 有可能Z向量朝向轮廓内部\r\n // if (outline.PtOnCurve(spt)) continue;\r\n\r\n let line = new Line(spt, hole.Position.add(hole.Normal.multiplyScalar(hole.Height)).applyMatrix4(brInv).setZ(0));\r\n let pt = outline.IntersectWith(line, IntersectOption.ExtendNone, 1e-5)[0];\r\n if (!pt) continue;\r\n\r\n let thickness = 0;\r\n for (let p of [line.StartPoint, line.EndPoint])\r\n {\r\n if (outline.PtInCurve(p))\r\n {\r\n thickness = p.distanceTo(pt);\r\n break;\r\n }\r\n }\r\n\r\n //漏网之鱼 过滤掉不在板内的排钻 :677计算的弧形板包围盒不准确导致\r\n if (thickness < 1e-3) continue;\r\n\r\n let index = Math.floor(outline.GetParamAtPoint(pt));\r\n\r\n let vec = line.GetFirstDeriv(0).normalize().multiplyScalar(thickness);\r\n shape.Position = shape.Position.add(vec);\r\n\r\n if (br.IsArcBoard)\r\n {\r\n //弧形板需要单独增加差值\r\n shape.Position = shape.Position.add(addPos);\r\n pt = pt.add(addPos);\r\n\r\n if (br.SweepAngle)\r\n {\r\n let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx);\r\n pt.applyMatrix4(ocsInv);\r\n shape.ApplyMatrix(ocsInv);\r\n }\r\n }\r\n\r\n if (br.IsArcBoard)\r\n {\r\n //侧面造型仅在多段线直线上\r\n //因为侧面造型起点特殊性 要处理一下\r\n index = Math.floor(originOutline.GetParamAtPoint(pt));\r\n let cu = originOutline.GetCurveAtIndex(index);\r\n\r\n if (cu)\r\n shape.ApplyMatrix(new Matrix4().getInverse(GetSideCuFaceMtx(cu)));\r\n else\r\n {\r\n console.error(\"圆弧板非圆侧孔求交失败\");\r\n continue;\r\n }\r\n }\r\n else\r\n {\r\n let cu = outline.GetCurveAtIndex(index);\r\n shape.ApplyMatrix(new Matrix4().getInverse(GetSideCuFaceMtx(cu)));\r\n }\r\n\r\n sideModeling.push({\r\n outline: ConverToPtsBul(shape.Outline.Curve, false),\r\n holes: shape.Holes.map((cu) => ConverToPtsBul(cu.Curve, false)),\r\n thickness,\r\n dir: index,\r\n knifeRadius: hole.KnifeRadius,\r\n addLen: 0,\r\n addDepth: 0,\r\n addWidth: 0,\r\n chaiDanName,\r\n modelType: ModelType.drill\r\n });\r\n }\r\n }\r\n\r\n return { modeling, sideModeling };\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.GetFirstDeriv(1).multiplyScalar(100)), curP.clone());\r\n }\r\n if (c2 instanceof Arc)\r\n c2 = new Line(curP.clone(), curP.clone().add(c2.GetFirstDeriv(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 let derv1 = c1.GetFirstDeriv(0).normalize();\r\n let derv2 = c2.GetFirstDeriv(0).normalize();\r\n //圆弧与直线相切,此时不要提刀\r\n if (isParallelTo(derv1, derv2, 1e-6)) continue;\r\n\r\n //计算提刀部分:\r\n //向量与平分线,参照倒角代码\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 { Vector2 } from \"three\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\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 { IContourData } from \"../Production/Convert2PtsBul\";\r\nimport { AsVector2, equaln, equalv2 } from \"./GeUtils\";\r\n\r\n/**\r\n * 转换成多段线点表,并且将圆弧打断(大于1/4的话) API仅用于开料生产\r\n * @param cu 多段线或者圆弧\r\n * @param [isOutline=true] 如果为外部轮廓,则将其转换为逆时针\r\n * @param [isSplite=true] 如果为true,则对大圆弧进行切割\r\n * @returns 点表+凸度表\r\n */\r\nexport function ConverToPolylineAndSplitArc(cu: Polyline | Circle, isOutline = true, isSplite = true): IContourData\r\n{\r\n let ptsBuls: { pts: Vector2[]; buls: number[]; };\r\n if (cu instanceof Circle)\r\n {\r\n let pl = ConverCircleToPolyline(cu);\r\n ptsBuls = pl.PtsBuls;\r\n }\r\n else\r\n {\r\n if (isOutline && cu.IsClose && cu.Normal.z * cu.Area2 < 0)\r\n cu.Reverse();\r\n if (isSplite)\r\n ptsBuls = SplitePolylineAtArc(cu);\r\n else\r\n ptsBuls = cu.PtsBuls;\r\n }\r\n let ocs = cu.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\nfunction ConverCircleToPolyline(cir: Circle): Polyline\r\n{\r\n let arcs = cir.GetSplitCurves([0, 0.25, 0.5, 0.75]);\r\n let pl = new Polyline();\r\n pl.OCS = cir.OCSNoClone;\r\n for (let arc of arcs)\r\n pl.Join(arc);\r\n return pl;\r\n}\r\n\r\nconst SPLITBUL = Math.tan(Math.PI / 8);\r\nfunction GetSpliteCount(allAngle: number)\r\n{\r\n return Math.ceil(Math.abs(allAngle) / Math.PI * 2);\r\n}\r\n\r\n/** 打断多段线超过1/4圆的圆弧*/\r\nfunction SplitePolylineAtArc(cu: Polyline): IContourData\r\n{\r\n let ptsBuls = cu.PtsBuls;\r\n let ocsInv = cu.OCSInv;\r\n\r\n let result: IContourData = { pts: [], buls: [] };\r\n\r\n if (ptsBuls.pts.length === 0)\r\n return result;\r\n\r\n for (let i = 0; i < ptsBuls.buls.length - 1; i++)\r\n {\r\n let bul = ptsBuls.buls[i];\r\n if (Math.abs(bul) > SPLITBUL + 1e-8)\r\n {\r\n let allAngle = Math.atan(bul) * 4;\r\n let splitCount = GetSpliteCount(allAngle);\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let paramDiv = 1 / splitCount;\r\n let newBul = Math.tan((allAngle / splitCount) / 4);\r\n for (let i = 0; i < splitCount; i++)\r\n {\r\n let param = i * paramDiv;\r\n let p = arc.GetPointAtParam(param).applyMatrix4(ocsInv);\r\n let p2 = AsVector2(p);\r\n //暂时不处理0长度段\r\n if (true || result.pts.length === 0 || !equalv2(p2, arrayLast(result.pts), 1e-2))\r\n {\r\n result.pts.push(p2);\r\n result.buls.push(newBul);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n //暂时不处理0长度段\r\n if (true || result.pts.length === 0 || !equalv2(ptsBuls.pts[i], arrayLast(result.pts), 1e-2))\r\n {\r\n result.pts.push(ptsBuls.pts[i]);\r\n result.buls.push(ptsBuls.buls[i]);\r\n }\r\n }\r\n }\r\n\r\n result.pts.push(arrayLast(ptsBuls.pts));\r\n result.buls.push(arrayLast(ptsBuls.buls));\r\n return result;\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 \"../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 { 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 * 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 //del_ue_exp_start\r\n clipperLib.NativeClipperLibRequestedFormat.WasmOnly\r\n //del_ue_exp_end\r\n //del_ue_exp_start\r\n //del_ue_exp_end 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 { 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 PathTranslate(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 PathTranslate_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\nconst MAX_CACHE_LEN = 100000;\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 private static _PositionCache: { [key: string]: Point; } = {};\r\n private static _PosCacheCount: 0;//缓存个数\r\n private static _NoPutCache: { [key: string]: Set; } = {};\r\n private static _NoPutCacheCount: 0;//缓存个数\r\n\r\n static SetPos(key: string, value: Point)\r\n {\r\n if (this._PosCacheCount > MAX_CACHE_LEN)\r\n {\r\n // this._PosCacheCount = 0;\r\n // this._PositionCache = {};\r\n return;\r\n }\r\n\r\n this._PositionCache[key] = value;\r\n this._PosCacheCount++;\r\n }\r\n\r\n static GetPos(key: string): Point\r\n {\r\n return this._PositionCache[key];\r\n }\r\n\r\n static SetNoPut(key: string, value: Set)\r\n {\r\n if (this._NoPutCacheCount > MAX_CACHE_LEN)\r\n {\r\n // this._NoPutCacheCount = 0;\r\n // this._NoPutCache = {};\r\n return;\r\n }\r\n\r\n this._NoPutCache[key] = value;\r\n this._NoPutCacheCount++;\r\n }\r\n\r\n static GetNoPut(key: string): Set\r\n {\r\n return this._NoPutCache[key];\r\n }\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._PositionCache = {};\r\n this._PosCacheCount = 0;\r\n this._NoPutCache = {};\r\n this._NoPutCacheCount = 0;\r\n }\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, PathTranslate_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\nconst TEXT_BOX = NestCache.CreatePath(570, 110);\r\n\r\n/**\r\n * 分析文字放置位置\r\n * @param contour 轮廓点表\r\n * @param holes 网洞点表\r\n * @param [textBox=TEXT_BOX] 标签盒子\r\n * @param [allowReturnNullPos=false] 允许返回null 当没有找到合适的位置返回null\r\n * @returns Vector3\r\n */\r\nexport function ParseRegionTextPos(contour: Point[], holes: (Point[])[], textBox = TEXT_BOX, allowReturnNullPos = false): Vector3 | undefined\r\n{\r\n let hasTextBox = true;\r\n let path = new Path(contour);\r\n let nfps: Polyline[] = path.GetInsideNFP(textBox)?.map(nfp => Path2Polyline(PathTranslate_Self(PathScale(nfp, 1e-4), path.OrigionMinPoint.x, path.OrigionMinPoint.y))); //可能无法获得\r\n if (!nfps || nfps.length === 0)\r\n {\r\n if (allowReturnNullPos) return;\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(textBox);\r\n let nfp = nfps[Max(nfps, (n1, n2) => Area(n2) > Area(n1))];\r\n\r\n let pl = Path2Polyline(PathTranslate_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 {\r\n //允许返回空的点 因为无法放置\r\n if (allowReturnNullPos) return;\r\n resShapes = shapes;\r\n }\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 += textBox.Size.x * 0.5;\r\n p.y += textBox.Size.y * 0.5;\r\n }\r\n return p;\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 { Box2, Vector2, MathUtils } from \"three\";\r\nimport { doIntersect } from \"./DoIntersect\";\r\n\r\n/*\r\n功能:盒子相交检测,快速判断正矩形(未旋转的)与直线和圆是否有交点.\r\n1.使用裁剪算法优化判断速度.\r\n参考:https://zh.wikipedia.org/wiki/%E7%A7%91%E6%81%A9%EF%BC%8D%E8%8B%8F%E6%B3%BD%E5%85%B0%E7%AE%97%E6%B3%95\r\n2.使用快速判断直线是否有交点提高速度.\r\n参考:doIntersect方法.\r\n*/\r\n\r\nexport interface Vec2\r\n{\r\n x: number;\r\n y: number;\r\n}\r\n\r\nconst LEFT = 1, RIGHT = 2, DOWN = 4, TOP = 8;\r\n// Compute the bit code for a point (x, y) using the clip rectangle\r\n// bounded diagonally by (xmin, ymin), and (xmax, ymax)\r\n\r\n// ASSUME THAT xmax, xmin, ymax and ymin are global constants.\r\nfunction ComputeOutCode(x: number, y: number, box: Box2): number\r\n{\r\n let code = 0;\r\n if (x < box.min.x) // to the left of clip window\r\n code |= LEFT;\r\n else if (x > box.max.x) // to the right of clip window\r\n code |= RIGHT;\r\n\r\n if (y < box.min.y) // below the clip window\r\n code |= DOWN;\r\n else if (y > box.max.y) // above the clip window\r\n code |= TOP;\r\n\r\n return code;\r\n}\r\n\r\n\r\n/**\r\n * 盒子相交测试,快速判断盒子和直线或者圆是否有相交\r\n */\r\nexport class BoxCheckIntersect\r\n{\r\n p1: Vec2;\r\n p2: Vec2;\r\n p3: Vec2;\r\n p4: Vec2;\r\n box: Box2;\r\n constructor(box: Box2)\r\n {\r\n this.p1 = box.min;\r\n this.p3 = box.max;\r\n this.p2 = new Vector2(this.p3.x, this.p1.y);\r\n this.p4 = new Vector2(this.p1.x, this.p3.y);\r\n\r\n this.box = box;\r\n }\r\n\r\n //直线与盒子相交,或者被盒子包含. Cohen–Sutherland裁剪算法\r\n IsIntersectLine(p1: Vec2, p2: Vec2): boolean\r\n {\r\n let code1 = ComputeOutCode(p1.x, p1.y, this.box);\r\n let code2 = ComputeOutCode(p2.x, p2.y, this.box);\r\n\r\n //按位AND不为0:两个点共享一个外部区域(LEFT,RIGHT,TOP或BOTTOM),因此两个点都必须在窗口外部\r\n if (code1 & code2) return false;\r\n\r\n let code = code1 | code2;\r\n if (code1 === 0 || code2 === 0 || code === 3 || code === 12)//点1点2在矩形内,或者竖直贯穿,水平贯穿\r\n return true;\r\n\r\n if ((code & TOP) && doIntersect(p1, p2, this.p3, this.p4))\r\n return true;\r\n if ((code & LEFT) && doIntersect(p1, p2, this.p1, this.p4))\r\n return true;\r\n if ((code & RIGHT) && doIntersect(p1, p2, this.p2, this.p3))\r\n return true;\r\n if ((code & DOWN) && doIntersect(p1, p2, this.p3, this.p1))\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n //ref https://yal.cc/rectangle-circle-intersection-test/\r\n IsIntersectCircle(cen: Vec2, radius: number): boolean\r\n {\r\n let nearestX = MathUtils.clamp(cen.x, this.box.min.x, this.box.max.x);\r\n let nearestY = MathUtils.clamp(cen.y, this.box.min.y, this.box.max.y);\r\n return ((nearestX - cen.x) ** 2 + (nearestY - cen.y) ** 2) <= radius ** 2;\r\n }\r\n}\r\n\r\n//https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm\r\nfunction CohenSutherlandLineClip(box: Box2, p1: Vec2, p2: Vec2)\r\n{\r\n let [x0, y0] = [p1.x, p1.y];\r\n let [x1, y1] = [p2.x, p2.y];\r\n\r\n let xmin = box.min.x;\r\n let ymin = box.min.y;\r\n\r\n let xmax = box.max.x;\r\n let ymax = box.max.y;\r\n\r\n // compute outcodes for P0, P1, and whatever point lies outside the clip rectangle\r\n let outcode0 = ComputeOutCode(x0, y0, box);\r\n let outcode1 = ComputeOutCode(x1, y1, box);\r\n let accept = false;\r\n\r\n while (true)\r\n {\r\n if (!(outcode0 | outcode1))\r\n {\r\n // bitwise OR is 0: both points inside window; trivially accept and exit loop\r\n accept = true;\r\n break;\r\n }\r\n else if (outcode0 & outcode1)\r\n {\r\n // bitwise AND is not 0: both points share an outside zone (LEFT, RIGHT, TOP,\r\n // or BOTTOM), so both must be outside window; exit loop (accept is false)\r\n break;\r\n }\r\n else\r\n {\r\n // failed both tests, so calculate the line segment to clip\r\n // from an outside point to an intersection with clip edge\r\n let x: number, y: number;\r\n\r\n // At least one endpoint is outside the clip rectangle; pick it.\r\n let outcodeOut = outcode1 > outcode0 ? outcode1 : outcode0;\r\n\r\n // Now find the intersection point;\r\n // use formulas:\r\n // slope = (y1 - y0) / (x1 - x0)\r\n // x = x0 + (1 / slope) * (ym - y0), where ym is ymin or ymax\r\n // y = y0 + slope * (xm - x0), where xm is xmin or xmax\r\n // No need to worry about divide-by-zero because, in each case, the\r\n // outcode bit being tested guarantees the denominator is non-zero\r\n if (outcodeOut & TOP)\r\n { // point is above the clip window\r\n x = x0 + (x1 - x0) * (ymax - y0) / (y1 - y0);\r\n y = ymax;\r\n }\r\n else if (outcodeOut & DOWN)\r\n { // point is below the clip window\r\n x = x0 + (x1 - x0) * (ymin - y0) / (y1 - y0);\r\n y = ymin;\r\n }\r\n else if (outcodeOut & RIGHT)\r\n { // point is to the right of clip window\r\n y = y0 + (y1 - y0) * (xmax - x0) / (x1 - x0);\r\n x = xmax;\r\n }\r\n else if (outcodeOut & LEFT)\r\n { // point is to the left of clip window\r\n y = y0 + (y1 - y0) * (xmin - x0) / (x1 - x0);\r\n x = xmin;\r\n }\r\n\r\n // Now we move outside point to intersection point to clip\r\n // and get ready for next pass.\r\n if (outcodeOut === outcode0)\r\n {\r\n x0 = x;\r\n y0 = y;\r\n outcode0 = ComputeOutCode(x0, y0, box);\r\n }\r\n else\r\n {\r\n x1 = x;\r\n y1 = y;\r\n outcode1 = ComputeOutCode(x1, y1, box);\r\n }\r\n }\r\n }\r\n}\r\n","/**\r\n * 删除数组中指定的元素,返回数组本身\r\n * @param {Array} arr 需要操作的数组\r\n * @param {*} el 需要移除的元素\r\n */\r\nexport function arrayRemove(arr: Array, el: T): Array\r\n{\r\n let j = 0;\r\n for (let i = 0, l = arr.length; i < l; i++)\r\n {\r\n if (arr[i] !== el)\r\n {\r\n arr[j++] = arr[i];\r\n }\r\n }\r\n arr.length = j;\r\n\r\n return arr;\r\n}\r\n\r\n\r\nexport function arrayRemoveOnce(arr: Array, el: T): Array\r\n{\r\n let index = arr.indexOf(el);\r\n if (index !== -1)\r\n arr.splice(index, 1);\r\n return arr;\r\n}\r\n\r\n/**\r\n * 删除通过函数校验的元素\r\n * @param {(e: T) => boolean} checkFuntion 校验函数\r\n */\r\nexport function arrayRemoveIf(arr: Array, checkFuntion: (e: T) => boolean): Array\r\n{\r\n let j = 0;\r\n for (let i = 0, l = arr.length; i < l; i++)\r\n {\r\n if (!checkFuntion(arr[i]))\r\n {\r\n arr[j++] = arr[i];\r\n }\r\n }\r\n arr.length = j;\r\n\r\n return arr;\r\n}\r\n\r\nexport function arrayFirst(arr: Array): T\r\n{\r\n return arr[0];\r\n}\r\n\r\nexport function arrayLast(arr: { [key: number]: T, length: number; }): T\r\n{\r\n return arr[arr.length - 1];\r\n}\r\n\r\n/**\r\n * 根据数值从小到大排序数组\r\n * @param {Array} arr\r\n * @returns {Array} 返回自身\r\n */\r\nexport function arraySortByNumber(arr: Array): Array\r\n{\r\n arr.sort(sortNumberCompart);\r\n return arr;\r\n}\r\n\r\n/**\r\n * 对排序好的数组进行去重操作\r\n * @param {(e1, e2) => boolean} [checkFuction] 校验对象相等函数\r\n * @returns {Array} 返回自身\r\n */\r\nexport function arrayRemoveDuplicateBySort(arr: Array, checkFuction: (e1: T, e2: T) => boolean = checkEqual): Array\r\n{\r\n if (arr.length < 2) return arr;\r\n let j = 1;\r\n for (let i = 1, l = arr.length; i < l; i++)\r\n if (!checkFuction(arr[j - 1], arr[i]))\r\n arr[j++] = arr[i];\r\n arr.length = j;\r\n return arr;\r\n}\r\n\r\n//原地更新数组,注意这个函数并不会比map快.\r\nexport function arrayMap(arr: Array, mapFunc: (v: T) => T): Array\r\n{\r\n for (let i = 0, count = arr.length; i < count; i++)\r\n arr[i] = mapFunc(arr[i]);\r\n return arr;\r\n}\r\n\r\nfunction sortNumberCompart(e1: any, e2: any)\r\n{\r\n return e1 - e2;\r\n}\r\n\r\nfunction checkEqual(e1: any, e2: any): boolean\r\n{\r\n return e1 === e2;\r\n}\r\n\r\n/**\r\n * 改变数组的值顺序\r\n * @param arr 需要改变初始值位置的数组\r\n * @param index //将index位置以后的值放到起始位置\r\n */\r\nexport function changeArrayStartIndex(arr: T[], index: number): T[]\r\n{\r\n arr.unshift(...arr.splice(index));\r\n return arr;\r\n}\r\n\r\nexport function equalArray(a: T[], b: T[], checkF = checkEqual)\r\n{\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n for (var i = 0; i < a.length; ++i)\r\n if (!checkF(a[i], b[i])) return false;\r\n return true;\r\n}\r\n\r\nexport function arrayClone(arr: T[]): T[]\r\n{\r\n return arr.slice();\r\n}\r\n\r\n//https://jsperf.com/merge-array-implementations/30\r\nexport function arrayPushArray(arr1: T[], arr2: T[]): T[]\r\n{\r\n let arr1Length = arr1.length;\r\n let arr2Length = arr2.length;\r\n arr1.length = arr1Length + arr2Length;\r\n for (let i = 0; i < arr2Length; i++)\r\n arr1[arr1Length + i] = arr2[i];\r\n\r\n return arr1;\r\n}\r\n\r\nexport function arraySum(arr: number[])\r\n{\r\n let sum = 0;\r\n for (let n of arr) sum += n;\r\n return sum;\r\n}\r\n\r\nexport function FilterSet(s: Set, fn: (el: T) => boolean): Set\r\n{\r\n let ns = new Set();\r\n for (let el of s)\r\n {\r\n if (fn(el))\r\n ns.add(el);\r\n }\r\n return ns;\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box2, Vector2, Vector3 } from \"three\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { InsertSortedIndex, RangeUnion } from \"../../DatabaseServices/Room/ParseService/RangeUtils\";\r\nimport { BoxCheckIntersect } from '../../Geometry/CheckIntersect';\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { arrayPushArray, arraySortByNumber } from \"../../Nest/Common/ArrayExt\";\r\nimport { Max } from '../../Nest/Common/Util';\r\nimport { FuzzyFactory } from '../../csg/core/FuzzyFactory';\r\n\r\n/** [area maxXIndex maxYIndex xCount yCount,width,height] */\r\nexport type RectData = [number, number, number, number, number, number, number];\r\n\r\n/**\r\n * 获取面积最大的矩形\r\n * @param rects\r\n * @returns\r\n */\r\nfunction GetMaxAreaFn(rects: RectData[]): number\r\n{\r\n return Max(rects, (t1, t2) => t2[0] > t1[0]);\r\n}\r\n\r\nfunction GetMaxWidthFn(rects: RectData[]): number\r\n{\r\n return Max(rects, (t1, t2) => t2[5] === t1[5] ? t2[6] > t1[6] : t2[5] > t1[5]);\r\n}\r\n\r\nfunction GetMaxHeightFn(rects: RectData[]): number\r\n{\r\n return Max(rects, (t1, t2) => t2[6] === t1[6] ? t2[6] > t1[6] : t2[5] > t1[5]);\r\n}\r\n\r\n\r\n//最大内接矩形\r\n//1.分析盒子\r\n// 1.默认我们使用顶点坐标进行一维展开\r\n// 2.当存在斜线时, 我们精确展开(当跨度大于(100/50)时,我们精确产开另一条轴)\r\n// (1).获取需要精确展开的区间 随后合并区间\r\n// (2).对区间进行展开数值,使用二分搜索,如果在已有的顶点附近,则不进行增项\r\n\r\n//2.标记轮廓内的矩形\r\n// (1).我们收集多边形所有的斜线,与矩形盒子求交,如果相交,则矩形盒子无效化\r\n// (2).矩形终点在轮廓内(使用单条射线检测,因为我们始终在端点增加锚点的关系 我们似乎不会在顶点位置得到(交点? 稳妥起见 实现标准的射线检测算法)\r\n\r\n//3.获取最大内接矩形\r\n// 迭代开始\r\n// 动态规划 存储每个方块得到的最大矩形\r\n// 获取最大的(根据规则)\r\n// 对池子里的结果进行生存选择(如果被占用了方块,则该结果已经不可用)\r\n// 取剩下可用的最大的(因为我们已经是在合理的情况下拿最大的了,所以不需要在重新迭代)\r\n// 重复迭代\r\n\r\n\r\n/**\r\n * @example\r\n *\r\n * //1. 设置过滤条件(舍弃掉一些无用的矩形)\r\n * let lir = new LargestInteriorRectangle;\r\n * lir.MinWidth = 200;//设置最小可以接受的矩形宽度\r\n * lir.MinHeight = 200;//设置最小可以接受的矩形宽度\r\n * lir.MinArea = 200 * 200;//设置最小可以接受的矩形面积\r\n *\r\n * //除了变量 也可以设置过滤函数\r\n * //例如:\r\n * lir.FilterRectFn = (w,h)=> !(w>500 || h>500) //这样将对长或者宽不足500的矩形板过滤(舍弃)\r\n *\r\n * //2. 可以设置优先模式,默认提供了面积优先,你也可以使用宽度优先或者高度优先,或许默认规则可能不好用,可以自定义传入自定义函数.\r\n * lir.GetMaxRectIndexFn = LargestInteriorRectangle.GetMaxAreaFn; //或者 LargestInteriorRectangle.GetMaxWidthFn / LargestInteriorRectangle.GetMaxHeightFn\r\n *\r\n * //3. 你已经设置好解析器,你现在可以进行解析了\r\n * let rects = lir.ParseLir([ new Vector3(0,0,0) , new Vector3(100,0,0) , new Vector3(50,100,0)]) //首尾不需要重复,首尾重复可能造成错误,程序不再校验\r\n *\r\n */\r\nexport class LargestInteriorRectangle\r\n{\r\n MinWidth = 100;\r\n MinHeight = 100;\r\n MinArea = 200 * 200;\r\n\r\n /** 可以自定义过滤函数,以便过滤掉某些不需要的矩形,当返回true时,我们会过滤它 */\r\n FilterRectFn: (width: number, height: number) => boolean;\r\n\r\n GetMaxRectIndexFn: (rects: RectData[]) => number = GetMaxAreaFn;\r\n\r\n\r\n static GetMaxAreaFn = GetMaxAreaFn;\r\n static GetMaxWidthFn = GetMaxWidthFn;\r\n static GetMaxHeightFn = GetMaxHeightFn;\r\n\r\n constructor()\r\n {\r\n }\r\n\r\n /**\r\n * 分析最大内接矩形\r\n * @param polygonPts 多边形点表,首尾不要相等\r\n */\r\n ParseLIR(polygonPts: Vector2[]): Box2[]\r\n {\r\n //端点列表\r\n let xs: number[] = [];\r\n let ys: number[] = [];\r\n\r\n let xset = new Set();\r\n let yset = new Set();\r\n\r\n //需要展开的范围\r\n let xranges: [number, number][] = [];\r\n let yranges: [number, number][] = [];\r\n\r\n let polygonBox = new Box2().setFromPoints(polygonPts);\r\n\r\n let vec = new Vector2;\r\n\r\n let klines: [Vector2, Vector2][] = []; //所有的斜线\r\n // let linesP: [Vector2, Vector2][] = []; //所有的线点\r\n // let linesFb = new Flatbush(pts.length);//所有的线的索引\r\n\r\n let fuzzX = new FuzzyFactory(1, 0.1);\r\n let fuzzY = new FuzzyFactory(1, 0.1);\r\n\r\n for (let i = 0; i < polygonPts.length; i++)\r\n {\r\n let p = polygonPts[i];\r\n let p2 = polygonPts[FixIndex(i + 1, polygonPts)];\r\n\r\n // linesP.push([p, p2]);\r\n // let box = new Box2().setFromPoints([p, p2]);\r\n // linesFb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n\r\n vec.subVectors(p2, p);\r\n\r\n //收集端点\r\n let x = fuzzX.lookupOrCreate([p.x], p.x);\r\n if (!xset.has(x))\r\n {\r\n xs.push(x);\r\n xset.add(x);\r\n }\r\n\r\n let y = fuzzY.lookupOrCreate([p.y], p.y);\r\n if (!yset.has(y))\r\n {\r\n ys.push(y);\r\n yset.add(y);\r\n }\r\n\r\n //展开斜线 每20分段\r\n if (Math.abs(vec.x) > 20 && Math.abs(vec.y) > 20)\r\n {\r\n if (Math.abs(vec.x) > 20)\r\n yranges.push(vec.y > 0 ? [p.y, p2.y] : [p2.y, p.y]);\r\n\r\n if (Math.abs(vec.y) > 20)\r\n xranges.push(vec.x > 0 ? [p.x, p2.x] : [p2.x, p.x]);\r\n }\r\n\r\n //收集所有的斜线\r\n if (!equaln(vec.x, 0, 0.1) && !equaln(vec.y, 0, 0.1))\r\n klines.push([p, p2]);\r\n }\r\n\r\n // linesFb.finish();\r\n\r\n //合并展开区间\r\n xranges.sort((a, b) => a[0] - b[0]);\r\n yranges.sort((a, b) => a[0] - b[0]);\r\n xranges = RangeUnion(xranges);\r\n yranges = RangeUnion(yranges);\r\n\r\n arraySortByNumber(xs);\r\n arraySortByNumber(ys);\r\n\r\n //展开\r\n RangesAdd(xranges, xs);\r\n RangesAdd(yranges, ys);\r\n\r\n //最大化\r\n xs[0] = polygonBox.min.x;\r\n xs[xs.length - 1] = polygonBox.max.x;\r\n\r\n ys[0] = polygonBox.min.y;\r\n ys[ys.length - 1] = polygonBox.max.y;\r\n\r\n //所有网格的索引\r\n let gridFb = new Flatbush((xs.length - 1) * (ys.length - 1));\r\n\r\n // let pls: Polyline[] = [];\r\n\r\n for (let i = 0; i < xs.length - 1; i++)\r\n {\r\n for (let j = 0; j < ys.length - 1; j++)\r\n {\r\n gridFb.add(xs[i], ys[j], xs[i + 1], ys[j + 1]);\r\n\r\n // let pl = new Polyline().RectangleFrom2Pt(new Vector3(xs[i], ys[j]), new Vector3(xs[i + 1], ys[j + 1]));\r\n // if (false) TestDraw(pl);\r\n // pls.push(pl);\r\n }\r\n }\r\n\r\n gridFb.finish();\r\n\r\n const matrix: number[][] = new Array(xs.length - 1).fill(1).map(() => new Array(ys.length - 1).fill(1));\r\n\r\n //矩形与斜线相交\r\n let checks: BoxCheckIntersect[] = [];\r\n for (let line of klines)\r\n {\r\n let box = new Box2().setFromPoints(line);\r\n let ids = gridFb.search(box.min.x, box.min.y, box.max.x, box.max.y);\r\n\r\n for (let id of ids)\r\n {\r\n let check = checks[id];\r\n\r\n let i = Math.floor((id) / (ys.length - 1));\r\n let j = id - (i * (ys.length - 1));\r\n\r\n if (!check)\r\n {\r\n check = new BoxCheckIntersect(new Box2(new Vector2(xs[i] + 0.01, ys[j] + 0.01), new Vector2(xs[i + 1] - 0.01, ys[j + 1] - 0.01)));\r\n checks[id] = check;\r\n\r\n // let pl = new Polyline().RectangleFrom2Pt(new Vector3(xs[i], ys[j]), new Vector3(xs[i + 1], ys[j + 1]));\r\n // TestDraw(pl, 2);\r\n }\r\n\r\n if (check.IsIntersectLine(line[0], line[1]))\r\n {\r\n // pls[id].ColorIndex = 1;\r\n // pls[id].Erase();\r\n matrix[i][j] = 0;\r\n }\r\n }\r\n }\r\n\r\n //y轴扫描线(矩形在多边形外)\r\n // if (xs.length < ys.length)\r\n {\r\n for (let i = 0; i < xs.length - 1; i++)\r\n {\r\n let x = (xs[i + 1] + xs[i]) * 0.5;\r\n\r\n let iPtYs = IsPointInPolygon(polygonPts, new Vector3(x, polygonBox.min.y - 0.1, 0));\r\n arraySortByNumber(iPtYs);\r\n\r\n for (let j = 0; j < ys.length - 1; j++)\r\n {\r\n let y = (ys[j + 1] + ys[j]) * 0.5;\r\n while (iPtYs.length && iPtYs[0] < y)\r\n iPtYs.shift();\r\n\r\n if (iPtYs.length % 2 !== 1)\r\n {\r\n // pls[i * (ys.length - 1) + j].ColorIndex = 3;\r\n // pls[i * (ys.length - 1) + j].Erase();\r\n matrix[i][j] = 0;\r\n }\r\n }\r\n }\r\n }\r\n // else//x轴扫描线\r\n\r\n //ref https://leetcode.cn/problems/maximal-rectangle/solutions/535672/zui-da-ju-xing-by-leetcode-solution-bjlu/\r\n const maximalRectangle = () =>\r\n {\r\n const m = matrix.length;//m个竖条 xlist\r\n if (m === 0) return 0;\r\n const n = matrix[0].length;//n个横条 ylist\r\n if (n === 0) return;\r\n\r\n const left: number[][] = new Array(m).fill(0).map(() => new Array(n).fill(0));\r\n\r\n for (let i = 0; i < m; i++)\r\n {\r\n for (let j = 0; j < n; j++)\r\n {\r\n if (matrix[i][j])\r\n {\r\n left[i][j] = (j === 0 ? 0 : left[i][j - 1]) + 1;\r\n }\r\n }\r\n }\r\n\r\n //area maxXIndex maxYIndex xcount ycount,width,height\r\n let rects: RectData[] = [];\r\n\r\n for (let j = 0; j < n; j++) // 对于每一列,使用基于柱状图的方法\r\n {\r\n const up = new Array(m).fill(0);\r\n const down = new Array(m).fill(0);\r\n\r\n let stack: number[] = [];\r\n for (let i = 0; i < m; i++)\r\n {\r\n while (stack.length && left[stack[stack.length - 1]][j] >= left[i][j])\r\n {\r\n stack.pop();\r\n }\r\n up[i] = stack.length === 0 ? -1 : stack[stack.length - 1];\r\n stack.push(i);\r\n }\r\n stack = [];\r\n for (let i = m - 1; i >= 0; i--)\r\n {\r\n while (stack.length && left[stack[stack.length - 1]][j] >= left[i][j])\r\n {\r\n stack.pop();\r\n }\r\n down[i] = stack.length === 0 ? m : stack[stack.length - 1];\r\n stack.push(i);\r\n }\r\n\r\n for (let i = 0; i < m; i++)\r\n {\r\n const xCount = down[i] - up[i] - 1;\r\n const yCount = left[i][j];\r\n\r\n if (!yCount || !xCount) continue;\r\n\r\n let width = xs[down[i]] - xs[down[i] - xCount];\r\n let height = ys[j + 1] - ys[j + 1 - yCount];\r\n\r\n if (width < this.MinWidth || height < this.MinHeight) continue;\r\n\r\n //自定义过滤函数\r\n if (this.FilterRectFn && this.FilterRectFn(width, height)) continue;\r\n\r\n let area = width * height;\r\n\r\n //面积小于最小允许面积\r\n if (area < this.MinArea) continue;\r\n\r\n rects.push([area, down[i], j, xCount, yCount, width, height]);\r\n }\r\n }\r\n\r\n // while (rects.length)\r\n if (rects.length)\r\n {\r\n let maxIndex = this.GetMaxRectIndexFn(rects);\r\n\r\n let [area, maxXIndex, maxYIndex, xCount, yCount] = rects[maxIndex];\r\n\r\n let xMax = xs[maxXIndex];\r\n let yMax = ys[maxYIndex + 1];\r\n\r\n let xMin = xs[maxXIndex - xCount];\r\n let yMin = ys[maxYIndex + 1 - yCount];\r\n\r\n maxRects.push(new Box2(new Vector2(xMin, yMin), new Vector2(xMax, yMax)));\r\n\r\n rects.splice(maxIndex, 1);\r\n\r\n //对方块进行标记\r\n for (let i = 0; i < xCount; i++)\r\n {\r\n for (let j = 0; j < yCount; j++)\r\n {\r\n matrix[maxXIndex - 1 - i][maxYIndex - j] = 0;\r\n }\r\n }\r\n\r\n //如果有被标记的方块,则删除它\r\n //某些情况不适合这个算法,移除了它,保证结果正确性\r\n // arrayRemoveIf(rects, rect =>\r\n // {\r\n // let [area, maxX, maxY, xCount, yCount] = rect;\r\n // for (let i = 0; i < xCount; i++)\r\n // {\r\n // for (let j = 0; j < yCount; j++)\r\n // {\r\n // if (!matrix[maxX - 1 - i][maxY - j])\r\n // return true;\r\n // }\r\n // }\r\n // return false;\r\n // });\r\n }\r\n };\r\n\r\n let maxRects: Box2[] = [];\r\n while (true)\r\n {\r\n let count = maxRects.length;\r\n maximalRectangle();\r\n if (count === maxRects.length) break;\r\n }\r\n\r\n return maxRects;\r\n }\r\n}\r\n\r\nfunction RangesAdd(ranges: [number, number][], vList: number[])\r\n{\r\n let adds: number[] = [];\r\n for (let range of ranges)\r\n {\r\n let dist = range[1] - range[0];\r\n let count = Math.floor(dist / 20);\r\n let divDist = Math.floor(dist / count);\r\n\r\n for (let i = 1; i < count - 1; i++)\r\n {\r\n let d = Math.floor(range[0] + divDist * i);\r\n\r\n let index = InsertSortedIndex(vList, d, (a, b) => a - b);\r\n\r\n if (Math.abs(vList[index] - d) < 5)\r\n continue;\r\n\r\n if (index !== vList.length - 1 && Math.abs(vList[index + 1] - d) < 5)\r\n continue;\r\n\r\n adds.push(d);\r\n }\r\n }\r\n\r\n if (adds.length)\r\n {\r\n arrayPushArray(vList, adds);\r\n arraySortByNumber(vList);\r\n }\r\n}\r\n\r\n/**\r\n * 判断点在多段线内外 这是为了LIR实现的优化算法,返回交点的Y轴列表\r\n */\r\nfunction IsPointInPolygon(polyPts: Vector2[], pt: Vector3): number[]\r\n{\r\n // let crossings = 0;\r\n // let insLine = new Line(pt, p2);\r\n\r\n let iPtYs: number[] = [];\r\n\r\n for (let i = 0; i < polyPts.length; i++)\r\n {\r\n let sp = polyPts[i];\r\n let ep = polyPts[FixIndex(i + 1, polyPts)];\r\n\r\n // if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5))//在起点或者终点\r\n // return false;\r\n\r\n //点位于线上面\r\n // if (pt.y > Math.max(sp.y, ep.y))\r\n // continue;\r\n\r\n //线垂直Y轴\r\n let derX = ep.x - sp.x;\r\n if (equaln(derX, 0, 5e-6))\r\n {\r\n // if (equaln(pt.x, ep.x, 1e-5)\r\n // && (pt.y > Math.min(sp.y, ep.y) - 1e-5 && pt.y < Math.max(sp.y, ep.y) + 1e-5))\r\n // return false;//点在线上\r\n continue;\r\n }\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)\r\n if (derX < 0)\r\n {\r\n // crossings++;\r\n iPtYs.push(sp.y);\r\n }\r\n continue;\r\n }\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)\r\n if (derX > 0)\r\n {\r\n // crossings++;\r\n iPtYs.push(ep.y);\r\n }\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 let iptY = (pt.x - sp.x) * k + sp.y;\r\n // if (equaln(iptY, pt.y, 1e-5))//点在线上 返回false\r\n // return false;\r\n if (iptY > pt.y)\r\n {\r\n // crossings++;\r\n iPtYs.push(iptY);\r\n }\r\n }\r\n }\r\n\r\n return iPtYs;\r\n}\r\n","import { EndType, JoinType } from \"js-angusj-clipper/web\";\r\nimport { Vec2, Vector2, Vector3 } from \"three\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { BUL_IS_LINE_FUZZ, Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { polar } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { clipperCpp } from \"../Common/ClipperCpp\";\r\nimport { Point } from \"../Common/Point\";\r\nimport { FixIndex, equaln } from \"../Common/Util\";\r\nimport { PathScale } from \"../Core/Path\";\r\n\r\n/** 内外接多边形 */\r\nexport function Circle2Points(circle: Circle, knifRadius: number, splitSize = 10, outside = false): Point[]\r\n{\r\n let radius = circle.Radius;\r\n let an = Math.PI * 2 / splitSize;\r\n\r\n if (outside)\r\n radius = radius / Math.cos(an / 2) + knifRadius;\r\n else\r\n radius -= knifRadius;\r\n\r\n let cenP = circle.Center;\r\n let pts: Vector3[] = [];\r\n for (let i = 0; i < splitSize; i++)\r\n {\r\n pts.push(polar(cenP.clone(), an * i, radius));\r\n }\r\n return pts as Point[];\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 // //小圆弧内嵌时忽略小圆(直线连接) 有可能产生自交 放弃这个\r\n // if (!outside && arc.Radius < 30 && bul > 0) continue;\r\n // if (outside && arc.Radius < 30 && bul < 0) continue;\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(Math.floor(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\r\n/**\r\n * 移除小圆弧,使用尖角直连(有可能产生自交 概率不大)\r\n * @param pl 请传入逆时针多段线(我们将直接修改这个多段线,如果你不想被修改 你应该拷贝一个)\r\n * @param [radius=30]\r\n */\r\nexport function PolylineFilletMinArc(pl: Polyline, radius = 30)\r\n{\r\n let ocsInv = pl.OCSInv;\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n let bul = pl.LineData[i].bul;\r\n if (equaln(bul, BUL_IS_LINE_FUZZ)) continue;\r\n\r\n let arc = pl.GetCurveAtIndex(i) as Arc;\r\n\r\n if (arc.Radius > radius) continue;\r\n\r\n let preCurve = pl.GetCurveAtIndex(FixIndex(i - 1, pl.EndParam));\r\n if (!(preCurve instanceof Line)) continue;\r\n\r\n let nextCurve = pl.GetCurveAtIndex(FixIndex(i + 1, pl.EndParam));\r\n if (!(nextCurve instanceof Line)) continue;\r\n\r\n if (preCurve.IntersectWith2(arc, IntersectOption.ExtendThis).length === 2) continue;\r\n\r\n let ipt = nextCurve.IntersectWith(preCurve, IntersectOption.ExtendBoth)[0];\r\n\r\n if (!ipt) continue;\r\n\r\n if (ipt.distanceTo(arc.Midpoint) > 50) continue;\r\n\r\n pl.LineData.splice(i, 1);\r\n pl.SetPointAt(i, ipt.applyMatrix4(ocsInv) as Vec2 as Vector2);\r\n }\r\n}\r\n","import { Vector2 } from \"../Common/Vector2\";\r\n\r\ninterface P\r\n{\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface IOffset\r\n{\r\n negativeOffset: number;\r\n positiveOffset: number;\r\n}\r\n\r\n/** 点p到线段P1P2 的最短距离的平方,线段不延伸 */\r\nfunction GetSqSegDist(p: P, p1: P, p2: P): number\r\n{\r\n let x = p1.x;\r\n let y = p1.y;\r\n let dx = p2.x - x;\r\n let dy = p2.y - y;\r\n\r\n if (dx !== 0 || dy !== 0)//不是0长度线\r\n {\r\n let t = ((p.x - x) * dx + (p.y - y) * dy) / (dx * dx + dy * dy);\r\n if (t > 1)\r\n {\r\n x = p2.x;\r\n y = p2.y;\r\n }\r\n else if (t > 0)\r\n {\r\n x += dx * t;\r\n y += dy * t;\r\n }\r\n }\r\n dx = p.x - x;\r\n dy = p.y - y;\r\n return dx * dx + dy * dy;\r\n}\r\n\r\nfunction CrossVector2(a: P, b: P)\r\n{\r\n return a.x * b.y - a.y * b.x;\r\n}\r\n\r\n//Ramer-Douglas-Peucker algorithm\r\nfunction SimplifyDPStep(points: P[], first: number, last: number, sqTolerance: number, simplified: P[], offset: IOffset): void\r\n{\r\n let maxSqDist = 0;\r\n let index: number;\r\n let fp = points[first];\r\n let lp = points[last];\r\n\r\n for (let i = first + 1; i < last; i++)\r\n {\r\n let p = points[i];\r\n let sqDist = GetSqSegDist(p, fp, lp);\r\n if (sqDist > maxSqDist)\r\n {\r\n index = i;\r\n maxSqDist = sqDist;\r\n }\r\n }\r\n\r\n if (maxSqDist > sqTolerance)\r\n {\r\n if (index - first > 1) SimplifyDPStep(points, first, index, sqTolerance, simplified, offset);\r\n simplified.push(points[index]);\r\n if (last - index > 1) SimplifyDPStep(points, index, last, sqTolerance, simplified, offset);\r\n }\r\n else\r\n {\r\n //记录偏移\r\n let v = new Vector2(lp.x - fp.x, lp.y - fp.y).normalize();\r\n for (let i = first + 1; i < last; i++)\r\n {\r\n let p = points[i];\r\n let offsetDist = -CrossVector2(v, { x: p.x - fp.x, y: p.y - fp.y });\r\n offset.positiveOffset = Math.max(offset.positiveOffset, offsetDist);\r\n offset.negativeOffset = Math.min(offset.negativeOffset, offsetDist);\r\n }\r\n }\r\n}\r\n\r\n// Ramer-Douglas-Peucker 算法\r\nexport function SimplifyDouglasPeucker(points: P[], sqTolerance: number): [P[], IOffset]\r\n{\r\n let last = points.length - 1;\r\n let simplified: P[] = [points[0]];\r\n let offset: IOffset = { negativeOffset: 0, positiveOffset: 0 };\r\n SimplifyDPStep(points, 0, last, sqTolerance, simplified, offset);\r\n simplified.push(points[last]);\r\n return [simplified, offset];\r\n}\r\n","import { EndType, JoinType } from \"js-angusj-clipper/web\";\r\nimport { Box3 } from \"three\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { clipperCpp } from \"../Common/ClipperCpp\";\r\nimport { Point } from \"../Common/Point\";\r\nimport { PathScale } from \"../Core/Path\";\r\nimport { Circle2Points, Polyline2Points } from \"./Curves2Points\";\r\nimport { Path2Polyline } from \"./Path2Polyline\";\r\nimport { IOffset, SimplifyDouglasPeucker } from \"./Simplify2\";\r\n\r\n\r\n/**\r\n * 运用此代码将曲线转换为点,并且精简它.\r\n * @class CurveWrap\r\n */\r\nexport class CurveWrap\r\n{\r\n BoundingBox: Box3;\r\n\r\n Area: number;\r\n\r\n SimplyPolyline: Polyline;\r\n SimplyOffset: IOffset;\r\n Used = false;\r\n Holes: CurveWrap[] = [];\r\n\r\n Points: Point[];\r\n\r\n _OrgCurve: Polyline | Circle;\r\n\r\n constructor(public Curve: Polyline | Circle, public KnifRadius = 3, public IsOutside: boolean = true)\r\n {\r\n this._OrgCurve = Curve;\r\n this.BoundingBox = Curve.BoundingBox;\r\n\r\n if (Curve instanceof Polyline)\r\n {\r\n let pts = Polyline2Points(Curve, IsOutside, 0)[1];\r\n let [spts, offset] = SimplifyDouglasPeucker(pts, KnifRadius ** 2 + KnifRadius);\r\n if (spts.length !== pts.length)\r\n {\r\n this.SimplyOffset = offset;\r\n this.SimplyPolyline = Path2Polyline(spts);\r\n this.Curve = this.SimplyPolyline; //保险起见,也更新它\r\n this.Area = this.SimplyPolyline.Area;\r\n }\r\n else //此处更新多段线\r\n this.Curve = Path2Polyline(pts);\r\n this.Points = spts;\r\n }\r\n\r\n if (this.Area === undefined)\r\n this.Area = this.Curve.Area;\r\n }\r\n\r\n ContainsCurve(curve: CurveWrap): boolean\r\n {\r\n if (this.SimplyPolyline)\r\n return this.SimplyPolyline.PtInCurve(curve.Curve.StartPoint);\r\n return this.Curve.PtInCurve(curve.Curve.StartPoint);\r\n }\r\n\r\n GetOutsidePoints(): Point[]\r\n {\r\n if (this.Curve instanceof Circle)\r\n {\r\n let pts = Circle2Points(this.Curve, this.KnifRadius, 10, true);\r\n return pts;\r\n }\r\n\r\n else\r\n {\r\n let pl = this.SimplyPolyline || this.Curve;\r\n let offset = this.KnifRadius;\r\n if (this.SimplyOffset)\r\n offset += this.SimplyOffset.positiveOffset;\r\n\r\n if (offset > 0)\r\n {\r\n let pts = pl.GetStretchPoints() as Point[];\r\n pts = clipperCpp.lib.offsetToPaths({\r\n delta: offset * 10000,\r\n offsetInputs: [{ data: PathScale(pts, 10000), joinType: JoinType.Miter, endType: EndType.ClosedPolygon }]\r\n })[0];\r\n PathScale(pts, 0.0001);\r\n return pts;\r\n }\r\n\r\n else\r\n return this.Points;\r\n }\r\n }\r\n\r\n GetInsidePoints(): Point[]\r\n {\r\n if (this.Curve instanceof Circle)\r\n {\r\n let pts = Circle2Points(this.Curve, this.KnifRadius, 10, false);\r\n return pts;\r\n }\r\n\r\n else\r\n {\r\n let pl = this.SimplyPolyline || this.Curve;\r\n let offset = -this.KnifRadius;\r\n if (this.SimplyOffset)\r\n {\r\n offset += this.SimplyOffset.negativeOffset;\r\n }\r\n if (offset < -0.01)\r\n {\r\n let pls = pl.GetOffsetCurves(offset);\r\n if (pls.length)\r\n return pls[0].GetStretchPoints();\r\n }\r\n\r\n else\r\n return this.Points;\r\n }\r\n }\r\n}\r\n"],"names":["arraySortByNumber","sortNumberCompart","arrayPushArray","Vector3","Matrix4","Status","UpdateDraw","DuplicateRecordCloning","Box3","iaop","Color","FrontSide","MeshPhysicalMaterial","equaln","Object3D","MathUtils","FixIndex","Vector2","Quaternion","LineBasicMaterial","DoubleSide","LineDashedMaterial","MeshBasicMaterial","ShaderMaterial","LineMaterial","BufferGeometry","Shape","ShapeGeometry","BufferAttribute","Polyline","LineGeometry","Line2","TLine","Plane","Line3","Line","Arc","Circle","EllipseCurve","CatmullRomCurve3","BoolOpeartionType","Box2","cache","ConverCircleToPolyline","Float32BufferAttribute","Path","Geometry","Face3","create","retessellate","geom3","mat4","transform","measureBoundingBox","toPolygons","splitPolygonByPlane","LineSegments","Mesh","CylinderBufferGeometry","TShape","InstancedInterleavedBuffer","InterleavedBufferAttribute","ShapeUtils","BoxBufferGeometry","Production","intersect","BufferGeometryUtils2","Flatbush","ExtrudeGeometry","Group","ModelType","SplitOrderType","Euler","DbText","ShapeBufferGeometry","clipperLib","polylabel","JoinType","EndType"],"mappings":"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,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IA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"} \ No newline at end of file diff --git a/api.esm.js b/api.esm.js index 2b6c0a3..1e54fb1 100644 --- a/api.esm.js +++ b/api.esm.js @@ -1,13 +1,117 @@ -import { Vector3, Matrix4, Box3, Color, FrontSide, MeshPhysicalMaterial, Object3D, MathUtils, Vector2 as Vector2$1, Quaternion, LineDashedMaterial, DoubleSide, MeshBasicMaterial, LineBasicMaterial, ShaderMaterial, BufferGeometry, Shape as Shape$1, ShapeGeometry, BufferAttribute, Line as Line$1, Plane, Line3, EllipseCurve, CatmullRomCurve3, Box2 as Box2$1, Path as Path$1, LineSegments, Mesh, CylinderBufferGeometry, Float32BufferAttribute, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, ShapeUtils, Face3, BoxBufferGeometry, ExtrudeGeometry, Group, Euler } from 'three'; +import { Vector3, Matrix4, Box3, Color, FrontSide, MeshPhysicalMaterial, Object3D, MathUtils, Vector2 as Vector2$1, Quaternion, LineDashedMaterial, DoubleSide, MeshBasicMaterial, LineBasicMaterial, ShaderMaterial, BufferGeometry, Shape as Shape$1, ShapeGeometry, BufferAttribute, Line as Line$1, Plane, Line3, EllipseCurve, CatmullRomCurve3, Box2 as Box2$1, Float32BufferAttribute, Path as Path$1, Geometry, Face3, LineSegments, Mesh, CylinderBufferGeometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, ShapeUtils, BoxBufferGeometry, ExtrudeGeometry, Group, Euler, ShapeBufferGeometry } from 'three'; function iaop() { }; import { Line2 } from 'three/examples/jsm/lines/Line2'; import { LineGeometry } from 'three/examples/jsm/lines/LineGeometry'; import { LineMaterial } from 'three/examples/jsm/lines/LineMaterial'; +import geom3, { toPolygons, transform as transform$1 } from '@jscad/modeling/src/geometries/geom3'; +import mat4 from '@jscad/modeling/src/maths/mat4'; +import measureBoundingBox from '@jscad/modeling/src/measurements/measureBoundingBox'; +import splitPolygonByPlane from '@jscad/modeling/src/operations/booleans/trees/splitPolygonByPlane'; +import retessellate from '@jscad/modeling/src/operations/modifiers/retessellate'; +import { transform } from '@jscad/modeling/src/operations/transforms'; +import { create } from '@jscad/modeling/src/geometries/poly3'; import Flatbush from 'flatbush'; +import { intersect } from '@jscad/modeling/src/operations/booleans'; import polylabel from 'polylabel'; import * as clipperLib from 'js-angusj-clipper/web'; import { JoinType, EndType } from 'js-angusj-clipper/web'; +/** + * 删除数组中指定的元素,返回数组本身 + * @param {Array} arr 需要操作的数组 + * @param {*} el 需要移除的元素 + */ +function arrayRemoveOnce(arr, el) { + let index = arr.indexOf(el); + if (index !== -1) + arr.splice(index, 1); + return arr; +} +/** + * 删除通过函数校验的元素 + * @param {(e: T) => boolean} checkFuntion 校验函数 + */ +function arrayRemoveIf(arr, checkFuntion) { + let j = 0; + for (let i = 0, l = arr.length; i < l; i++) { + if (!checkFuntion(arr[i])) { + arr[j++] = arr[i]; + } + } + arr.length = j; + return arr; +} +function arrayLast(arr) { + return arr[arr.length - 1]; +} +/** + * 根据数值从小到大排序数组 + * @param {Array} arr + * @returns {Array} 返回自身 + */ +function arraySortByNumber$1(arr) { + arr.sort(sortNumberCompart$1); + return arr; +} +/** + * 对排序好的数组进行去重操作 + * @param {(e1, e2) => boolean} [checkFuction] 校验对象相等函数,如果相等 则删除e2 + * @returns {Array} 返回自身 + */ +function arrayRemoveDuplicateBySort(arr, checkFuction = checkEqual) { + if (arr.length < 2) + return arr; + let j = 1; + for (let i = 1, l = arr.length; i < l; i++) + if (!checkFuction(arr[j - 1], arr[i])) + arr[j++] = arr[i]; + arr.length = j; + return arr; +} +function sortNumberCompart$1(e1, e2) { + return e1 - e2; +} +function checkEqual(e1, e2) { + return e1 === e2; +} +/** + * 改变数组的值顺序 + * @param arr 需要改变初始值位置的数组 + * @param index //将index位置以后的值放到起始位置 + */ +function changeArrayStartIndex(arr, index) { + arr.unshift(...arr.splice(index)); + return arr; +} +function equalArray(a, b, checkF = checkEqual) { + if (a === b) + return true; + if (a.length !== b.length) + return false; + for (var i = 0; i < a.length; ++i) + if (!checkF(a[i], b[i])) + return false; + return true; +} +function arrayClone(arr) { + return arr.slice(); +} +//https://jsperf.com/merge-array-implementations/30 +function arrayPushArray$1(arr1, arr2) { + let arr1Length = arr1.length; + let arr2Length = arr2.length; + arr1.length = arr1Length + arr2Length; + for (let i = 0; i < arr2Length; i++) + arr1[arr1Length + i] = arr2[i]; + return arr1; +} +function arraySum(arr) { + let sum = 0; + for (let n of arr) + sum += n; + return sum; +} + /****************************************************************************** Copyright (c) Microsoft Corporation. @@ -124,6 +228,8 @@ var RenderType; * 概念 */ RenderType[RenderType["Conceptual"] = 2] = "Conceptual"; + /** 概念(透明)*/ + RenderType[RenderType["ConceptualTransparent"] = 82] = "ConceptualTransparent"; /** * 物理着色PBR */ @@ -155,8 +261,18 @@ var RenderType; /**真实带线框 */ RenderType[RenderType["Physical2Print"] = 106] = "Physical2Print"; RenderType[RenderType["CustomNumberPrint"] = 109] = "CustomNumberPrint"; - RenderType[RenderType["ConceptualTransparent"] = 182] = "ConceptualTransparent"; //概念透明 })(RenderType || (RenderType = {})); +/** 实体的渲染颜色种类 */ +var ColorInTransparent; +(function (ColorInTransparent) { + ColorInTransparent[ColorInTransparent["\u539F\u59CB\u989C\u8272"] = 0] = "\u539F\u59CB\u989C\u8272"; + ColorInTransparent[ColorInTransparent["\u7070\u5EA6\u5355\u8272"] = 1] = "\u7070\u5EA6\u5355\u8272"; +})(ColorInTransparent || (ColorInTransparent = {})); +/** 渲染的状态 */ +const RenderState = { + /** 概念透明下的实体颜色 */ + ConceptualColor: ColorInTransparent.原始颜色, +}; class IHostApplicationServices { get ProxyObject() { return this.__ProxyObject__; } @@ -170,11 +286,16 @@ class IHostApplicationServices { } constructor() { this.IsRoomEntityVisible = true; //室内实体可见 + /** 当前画笔的颜色索引 */ + this.CurrentColorindex = 7; this.isShowLightShadow = true; //灯光阴影 (除太阳光外) this.ShowHistoryLog = true; this.Physical2EdgeColor = 7; //真实视图带线框的线框颜色 默认白色 this.ConceptualEdgeColor = 7; //概念线框的颜色 - this.ConceptualOpacity = 1; //概念透明的透明度 + this.ConceptualOpacity = 1; //概念的透明度 + this.ConceptualTransparentOpacity = 0.5; //概念(透明)的透明度 + this.IsTransparentMetals = false; // 五金是否受概念(透明)影响 + this.IsTransparentComp = false; // 组件是否受概念(透明)影响 this.DrawWallBottomFace = false; //绘制底面 this.sealReserve = 0; //封边统计留头量 //#region _RenderType 渲染类型 @@ -195,6 +316,13 @@ class IHostApplicationServices { //#region 显示开门方向纹路 this.showOpenDirLines = false; //#endregion + //#region 开门方向纹路配置 + this.doorLinesOption = { + physicalShowLines: false, //真实视图显示开门方向纹路 + physicalShowLines2: false, //真实视图带线框显示开门方向纹路 + reverseOpenDirLines: false, //反转开门方向纹路 + }; + //#endregion //#region 显示二维刀路路径线条 this.show2DPathLine = false; //#endregion @@ -220,6 +348,8 @@ class IHostApplicationServices { sealValues: '', //封边值列表 hardwareExpressionFormattingAccuracy: 2, //复合实体表达式值格式化精度 partialSplitValueCanTakesEffect: false, + cancelHoleProcessing: false, //填写拆单尺寸板件取消孔槽加工 + isCheckCustomBoardNumber: false, //是否开启自动板件编号校验 }; this.viewSize = { minViewHeight: 1e-3, @@ -235,6 +365,11 @@ class IHostApplicationServices { this.boardCustomNumberTextHeight = 60; //板编号字体高度 this.lineWidth = 2; //打印线框 this.fractionDigitsType = FractionDigitsType.two; + this.throughModelSegmentedDrill = false; //挖穿造型分段排钻 + this.autoDeviation = false; //排钻碰撞智能偏移 + this.autoDeviationMinDist = 200; //排钻碰撞智能偏移最小排钻面长度 + this.smallGrooveThreshold = 900; //全深槽影响阈值 + this.sealWidthPercentage = 1; //封边宽度百分比 } ; static GetInstance() { @@ -260,6 +395,15 @@ __decorate([ __decorate([ ProxyValue ], IHostApplicationServices.prototype, "ConceptualOpacity", void 0); +__decorate([ + ProxyValue +], IHostApplicationServices.prototype, "ConceptualTransparentOpacity", void 0); +__decorate([ + ProxyValue +], IHostApplicationServices.prototype, "IsTransparentMetals", void 0); +__decorate([ + ProxyValue +], IHostApplicationServices.prototype, "IsTransparentComp", void 0); __decorate([ ProxyValue ], IHostApplicationServices.prototype, "_renderType", void 0); @@ -278,6 +422,9 @@ __decorate([ __decorate([ ProxyValue ], IHostApplicationServices.prototype, "showOpenDirLines", void 0); +__decorate([ + ProxyValue +], IHostApplicationServices.prototype, "doorLinesOption", void 0); __decorate([ ProxyValue ], IHostApplicationServices.prototype, "show2DPathLine", void 0); @@ -311,6 +458,21 @@ __decorate([ __decorate([ ProxyValue ], IHostApplicationServices.prototype, "fractionDigitsType", void 0); +__decorate([ + ProxyValue +], IHostApplicationServices.prototype, "throughModelSegmentedDrill", void 0); +__decorate([ + ProxyValue +], IHostApplicationServices.prototype, "autoDeviation", void 0); +__decorate([ + ProxyValue +], IHostApplicationServices.prototype, "autoDeviationMinDist", void 0); +__decorate([ + ProxyValue +], IHostApplicationServices.prototype, "smallGrooveThreshold", void 0); +__decorate([ + ProxyValue +], IHostApplicationServices.prototype, "sealWidthPercentage", void 0); let HostApplicationServices = IHostApplicationServices.GetInstance(); //将属性字段指向代理对象 function ProxyValue(target, propertyKey, descriptor) { @@ -368,10 +530,14 @@ function Object3DRemoveAll(obj) { return obj; } +/** 用于表示跟随图层的颜色索引 */ +const ByLayerColorIndex = 260; + var Status; (function (Status) { Status[Status["False"] = 0] = "False"; Status[Status["True"] = 1] = "True"; + Status[Status["Side"] = 2] = "Side"; Status[Status["Canel"] = -1] = "Canel"; Status[Status["ConverToCircle"] = 101] = "ConverToCircle"; Status[Status["DuplicateRecordName"] = 102] = "DuplicateRecordName"; @@ -436,6 +602,11 @@ class Box3Ext extends Box3 { interBox.max.setComponent(splitType, Math.max(this.min.getComponent(splitType), b2.min.getComponent(splitType))); return interBox; } + containsBox(box, fuzz = 1e-8) { + return this.min.x <= box.min.x + fuzz && box.max.x <= this.max.x + fuzz && + this.min.y <= box.min.y + fuzz && box.max.y <= this.max.y + fuzz && + this.min.z <= box.min.z + fuzz && box.max.z <= this.max.z + fuzz; + } intersectsBox(box, fuzz = 1e-8) { return IntersectsBox(this, box, fuzz); } @@ -1043,6 +1214,57 @@ const U_WORLD_MOVE = "u_w_move"; const V_WORLD_MOVE = "v_w_move"; const U_WORLD_RO = "v_w_ro"; +/**统一板件属性key的命名,修改值会导致无法 .xxx该属性 */ +var EBoardKeyList; +(function (EBoardKeyList) { + EBoardKeyList["Height"] = "height"; + EBoardKeyList["Width"] = "width"; + EBoardKeyList["Thick"] = "thickness"; + EBoardKeyList["RoomName"] = "roomName"; + EBoardKeyList["CabinetName"] = "cabinetName"; + EBoardKeyList["PaperName"] = "paperName"; + EBoardKeyList["BrName"] = "brName"; + EBoardKeyList["BrMat"] = "boardName"; + EBoardKeyList["Mat"] = "material"; + EBoardKeyList["Color"] = "color"; + EBoardKeyList["Lines"] = "lines"; + EBoardKeyList["ProcessGroup"] = "ProcessGroup"; + EBoardKeyList["BigHole"] = "bigHoleDir"; + /** + * 排钻类型,当没有定义每个边的排钻数据时,使用统一的排钻类型 + */ + EBoardKeyList["DrillType"] = "drillType"; + EBoardKeyList["ComposingFace"] = "composingFace"; + /** + * 封边数组,定义每个边的封边信息 + */ + EBoardKeyList["HighSealed"] = "highSealed"; + EBoardKeyList["UpSealed"] = "sealedUp"; + EBoardKeyList["DownSealed"] = "sealedDown"; + EBoardKeyList["LeftSealed"] = "sealedLeft"; + EBoardKeyList["RightSealed"] = "sealedRight"; + EBoardKeyList["KnifeRad"] = "knifeRadius"; + EBoardKeyList["SpliteHeight"] = "spliteHeight"; + EBoardKeyList["SpliteWidth"] = "spliteWidth"; + EBoardKeyList["SpliteThickness"] = "spliteThickness"; + EBoardKeyList["DrawNumber"] = "drawNumber"; + EBoardKeyList["Remarks"] = "remarks"; + EBoardKeyList["ExtraRemarks"] = "extraRemarks"; + EBoardKeyList["OpenDir"] = "openDir"; + EBoardKeyList["GroovesAddLength"] = "GroovesAddLength"; + EBoardKeyList["GroovesAddWidth"] = "GroovesAddWidth"; + EBoardKeyList["GroovesAddDepth"] = "GroovesAddDepth"; + EBoardKeyList["FrontDrill"] = "frontDrill"; + EBoardKeyList["BackDrill"] = "backDrill"; + EBoardKeyList["SelectRoomCabinet"] = "selectRoomCabinet"; +})(EBoardKeyList || (EBoardKeyList = {})); + +var EMetalsType; +(function (EMetalsType) { + EMetalsType["Metals"] = "\u4E94\u91D1"; + EMetalsType["Comp"] = "\u7EC4\u4EF6"; +})(EMetalsType || (EMetalsType = {})); + class SymbolTableRecord extends CADObject { constructor() { super(...arguments); @@ -1054,7 +1276,13 @@ class SymbolTableRecord extends CADObject { set Name(name) { if (this.name === name) return; - this.WriteAllObjectRecord(); + let undoData = this.UndoRecord(); + if (undoData) { + let hr = new HistorycRecord(); + hr.undoData = new NameData(this.name); + hr.redoData = new NameData(name); + undoData.WriteObjectHistoryPath(this, hr); + } if (this.Owner) { let symbolTable = this.Owner.Object; if (!symbolTable.ChangeRecordName(this, name)) @@ -1075,7 +1303,40 @@ class SymbolTableRecord extends CADObject { file.Read(); this.name = file.Read(); } + //局部撤销 + ApplyPartialUndo(undoData) { + super.ApplyPartialUndo(undoData); + if (undoData instanceof NameData) { + if (this.name === undoData.name) + return; + if (this.Owner) { + let symbolTable = this.Owner.Object; + if (!symbolTable.ChangeRecordName(this, undoData.name)) + return; + } + this.name = undoData.name; + } + } } +/** + * 记录当前Name的序列化数据 + */ +let NameData = class NameData { + ReadFile(file) { + this.name = file.Read(); + return this; + } + WriteFile(file) { + file.Write(this.name); + return this; + } + constructor(name) { + this.name = name; + } +}; +NameData = __decorate([ + Factory +], NameData); let MaterialTableRecord = class MaterialTableRecord extends SymbolTableRecord { }; @@ -1147,6 +1408,67 @@ let PhysicalMaterialRecord = class PhysicalMaterialRecord extends MaterialTableR color: "", material: "", }; + // 扩展材质的属性 + this._hardwareAttributeInfo = { + name: { + value: "", + checked: false + }, + roomName: { + value: "", + checked: false + }, + cabinetName: { + value: "", + checked: false + }, + factory: { + value: "", + checked: false + }, + comments: { + value: "", + checked: false + }, + actualExpr: { + value: "", + checked: false + }, + brand: { + value: "", + checked: false + }, + model: { + value: "", + checked: false + }, + spec: { + value: "", + checked: false + }, + count: { + value: "", + checked: false + }, + unit: { + value: "", + checked: false + }, + DataList: { + value: Array.from({ length: 20 }, () => ["", ""]), + checked: false + }, + type: { + value: EMetalsType.Metals, + checked: false + }, + goods: { + goodsSn: "", + goodsId: "", + checked: false, + }, + }; + this._isMaterialLock = false; //材质锁 this.material = new MeshPhysicalMaterial({}); Object.defineProperty(this.material, "ObjectId", { get: () => { @@ -1155,6 +1477,10 @@ let PhysicalMaterialRecord = class PhysicalMaterialRecord extends MaterialTableR }); } async Update() { + await this.PhysicalMaterialUpdate(); + } + //因为Asset.tsx监听了Update的事件,然后又要去调用这个,导致重复监听,所以分离出这个函数 + async PhysicalMaterialUpdate() { this.material[USE_WORLD_UV] = this.UseWorldUV; if (this.material[USE_WORLD_UV]) { this.material[U_WORLD_REP] = this.UWroldRep; @@ -1244,6 +1570,22 @@ let PhysicalMaterialRecord = class PhysicalMaterialRecord extends MaterialTableR this.WriteAllObjectRecord(); Object.assign(this._goodsInfo, info); } + get HardwareAttributeInfo() { + return this._hardwareAttributeInfo; + } + set HardwareAttributeInfo(info) { + this.WriteAllObjectRecord(); + this._hardwareAttributeInfo = JSON.parse(JSON.stringify(info)); + } + get IsMaterialLock() { + return !this.IsErase && this._isMaterialLock; + } + set IsMaterialLock(v) { + if (this._isMaterialLock === v) + return; + this.WriteAllObjectRecord(); + this._isMaterialLock = v; + } //#region -------------------------File------------------------- ReadFile(file) { super.ReadFile(file); @@ -1314,13 +1656,54 @@ let PhysicalMaterialRecord = class PhysicalMaterialRecord extends MaterialTableR this.refraction = file.Read(); this.side = file.Read(); } + if (ver > 10) { + this._isMaterialLock = file.Read(); + } + if (ver > 11) { + this._hardwareAttributeInfo.name.value = file.Read(); + this._hardwareAttributeInfo.name.checked = file.Read(); + this._hardwareAttributeInfo.roomName.value = file.Read(); + this._hardwareAttributeInfo.roomName.checked = file.Read(); + this._hardwareAttributeInfo.cabinetName.value = file.Read(); + this._hardwareAttributeInfo.cabinetName.checked = file.Read(); + this._hardwareAttributeInfo.factory.value = file.Read(); + this._hardwareAttributeInfo.factory.checked = file.Read(); + this._hardwareAttributeInfo.comments.value = file.Read(); + this._hardwareAttributeInfo.comments.checked = file.Read(); + this._hardwareAttributeInfo.actualExpr.value = file.Read(); + this._hardwareAttributeInfo.actualExpr.checked = file.Read(); + this._hardwareAttributeInfo.brand.value = file.Read(); + this._hardwareAttributeInfo.brand.checked = file.Read(); + this._hardwareAttributeInfo.model.value = file.Read(); + this._hardwareAttributeInfo.model.checked = file.Read(); + this._hardwareAttributeInfo.spec.value = file.Read(); + this._hardwareAttributeInfo.spec.checked = file.Read(); + this._hardwareAttributeInfo.count.value = file.Read(); + this._hardwareAttributeInfo.count.checked = file.Read(); + this._hardwareAttributeInfo.unit.value = file.Read(); + this._hardwareAttributeInfo.unit.checked = file.Read(); + let DataListCount = file.Read(); + for (let i = 0; i < DataListCount; i++) { + let d = [ + file.Read(), + file.Read() + ]; + this._hardwareAttributeInfo.DataList.value[i] = d; + } + this._hardwareAttributeInfo.DataList.checked = file.Read(); + this._hardwareAttributeInfo.type.value = file.Read(); + this._hardwareAttributeInfo.type.checked = file.Read(); + this._hardwareAttributeInfo.goods.goodsSn = file.Read(); + this._hardwareAttributeInfo.goods.goodsId = file.Read(); + this._hardwareAttributeInfo.goods.checked = file.Read(); + } } this.Update(); } //对象将自身数据写入到文件. WriteFile(file) { super.WriteFile(file); - file.Write(10); + file.Write(12); file.Write(this.color); file.Write(this.transparent); file.Write(this.matalness); @@ -1378,6 +1761,43 @@ let PhysicalMaterialRecord = class PhysicalMaterialRecord extends MaterialTableR //ver10 file.Write(this.refraction); file.Write(this.side); + //ver11 + file.Write(this.IsMaterialLock); + // ver12 + file.Write(this._hardwareAttributeInfo.name.value); + file.Write(this._hardwareAttributeInfo.name.checked); + file.Write(this._hardwareAttributeInfo.roomName.value); + file.Write(this._hardwareAttributeInfo.roomName.checked); + file.Write(this._hardwareAttributeInfo.cabinetName.value); + file.Write(this._hardwareAttributeInfo.cabinetName.checked); + file.Write(this._hardwareAttributeInfo.factory.value); + file.Write(this._hardwareAttributeInfo.factory.checked); + file.Write(this._hardwareAttributeInfo.comments.value); + file.Write(this._hardwareAttributeInfo.comments.checked); + file.Write(this._hardwareAttributeInfo.actualExpr.value); + file.Write(this._hardwareAttributeInfo.actualExpr.checked); + file.Write(this._hardwareAttributeInfo.brand.value); + file.Write(this._hardwareAttributeInfo.brand.checked); + file.Write(this._hardwareAttributeInfo.model.value); + file.Write(this._hardwareAttributeInfo.model.checked); + file.Write(this._hardwareAttributeInfo.spec.value); + file.Write(this._hardwareAttributeInfo.spec.checked); + file.Write(this._hardwareAttributeInfo.count.value); + file.Write(this._hardwareAttributeInfo.count.checked); + file.Write(this._hardwareAttributeInfo.unit.value); + file.Write(this._hardwareAttributeInfo.unit.checked); + const filteredDataList = this._hardwareAttributeInfo.DataList.value.filter(item => item[0] || item[1]); // 过滤掉值为空的项 + file.Write(filteredDataList.length); + for (let i = 0; i < filteredDataList.length; i++) { + file.Write(this._hardwareAttributeInfo.DataList.value[i][0]); + file.Write(this._hardwareAttributeInfo.DataList.value[i][1]); + } + file.Write(this._hardwareAttributeInfo.DataList.checked); + file.Write(this._hardwareAttributeInfo.type.value); + file.Write(this._hardwareAttributeInfo.type.checked); + file.Write(this._hardwareAttributeInfo.goods.goodsSn); + file.Write(this._hardwareAttributeInfo.goods.goodsId); + file.Write(this._hardwareAttributeInfo.goods.checked); } }; __decorate([ @@ -1511,7 +1931,7 @@ var Entity_1; let Entity = Entity_1 = class Entity extends CADObject { constructor() { super(); - this.IsEmbedEntity = false; + this.IsEmbedEntity = false; //当这个值为true时,这个实体是复合实体的内嵌实体 /** * 该实体的只有一个渲染类型,任何渲染类型都一个样 */ @@ -1520,7 +1940,7 @@ let Entity = Entity_1 = class Entity extends CADObject { this.HasPlaceFaceRenderType = false; //拥有排版面绘制模式 this.HasBigHoleFaceRenderType = false; //拥有大孔面绘制模式 this._CacheDrawObject = new Map(); - this._Color = 7; + this._Color = HostApplicationServices.CurrentColorindex; //自身坐标系 this._Matrix = new Matrix4(); //模块空间的标系 @@ -1528,6 +1948,7 @@ let Entity = Entity_1 = class Entity extends CADObject { this._Visible = true; this._VisibleInRender = true; //在渲染器中显示 this._Freeze = false; //冻结(无法被选中) + this._LockMaterial = false; // 锁定材质 //加工组 this.ProcessingGroupList = []; /** @@ -1570,7 +1991,16 @@ let Entity = Entity_1 = class Entity extends CADObject { this._VisibleInRender = v; } } + get LockMaterial() { return this._LockMaterial; } + set LockMaterial(f) { + if (f === this._LockMaterial) + return; + this.WriteAllObjectRecord(); + this._LockMaterial = f; + } set Material(materialId) { + if (this.LockMaterial) + return; if (materialId === this._MaterialId) return; if (this._db && materialId?.Object) //我们放宽校验,当图形未加入到图纸时,我们允许它任意设置材质 @@ -1580,16 +2010,83 @@ let Entity = Entity_1 = class Entity extends CADObject { if (materialId.Object.Db !== this.Db) throw "程序内部错误!设置材质错误:不同图纸间材质"; } + const _obj = this._MaterialId?.Object; + if (_obj?.IsMaterialLock) + return; this.WriteAllObjectRecord(); this._MaterialId = materialId; for (let [type, obj] of this._CacheDrawObject) this.UpdateDrawObjectMaterial(type, obj); } - get Material() { return this._MaterialId; } + get Material() { + if (this._MaterialId?.IsErase) + return; + return this._MaterialId; + } GetMaterialSlots() { } + IsMtlLockAtSlot(slotIndex) { + if (this.LockMaterial) + return true; + return this.Material?.Object?.IsMaterialLock; + } SetMaterialAtSlot(mtl, slotIndex) { + if (this.IsMtlLockAtSlot()) + return; + this.WriteAllObjectRecord(); this.Material = mtl; } + GetMtlLockedStatus() { + const locked = this.Material?.Object?.IsMaterialLock; + return { + allMtlLocked: locked, + partMtlLocked: locked, + }; + } + /** + * 获取实体的 PhysicalMaterialRecord + * @param {boolean} [containErased=false] 是否包含被删除的材质 + * @return {*} {PhysicalMaterialRecord[]} + * @memberof Entity + */ + GetPhyMtlRecords(containErased = false) { + if (this._MaterialId) { + if (containErased || !this._MaterialId.IsErase) + return [this._MaterialId.Object]; + } + return []; + } + get HasLayer() { return this._Layer?.Object !== undefined; } + get Layer() { + return this._Layer?.Object ? this._Layer : HostApplicationServices.Database.LayerTable.Current ?? HostApplicationServices.Database.DefaultLayer.Id; + } + set Layer(id) { + if (!id || id === this._Layer) + return; + this.WriteAllObjectRecord(); + const oldLayerIsOff = this._Layer?.Object?.IsOff; + const oldLayerIsLocked = this._Layer?.Object?.IsLocked; + const oldLayerColorIndex = this._Layer?.Object?.ColorIndex; + this._Layer = id; + // 更新隐藏 + if (id.Object.IsOff !== oldLayerIsOff) + this.UpdateVisible(); + // 更新锁定 + if (id.Object.IsLocked !== oldLayerIsLocked) { + this.Freeze = id.Object.IsLocked; + for (let [type, obj] of this._CacheDrawObject) + this.UpdateDrawObjectMaterial(type, obj); + } + // 更新颜色 + else if (this._Color === ByLayerColorIndex && id.Object.ColorIndex !== oldLayerColorIndex) { + for (let [type, obj] of this._CacheDrawObject) + this.UpdateDrawObjectMaterial(type, obj); + } + } + SetAllMaterialAtSlot(mtl) { + if (this.LockMaterial) + return; + this.SetMaterialAtSlot(mtl); + } set ColorIndex(color) { if (color !== this._Color) { let undoRec = this.UndoRecord(); @@ -1606,6 +2103,9 @@ let Entity = Entity_1 = class Entity extends CADObject { get ColorIndex() { return this._Color; } + get DrawColorIndex() { + return this._Color === ByLayerColorIndex ? this.Layer.Object.ColorIndex : this._Color; + } /** * 炸开实体 */ @@ -1658,7 +2158,7 @@ let Entity = Entity_1 = class Entity extends CADObject { } Move(v) { if (equaln$1(v.x, 0) && equaln$1(v.y, 0) && equaln$1(v.z, 0)) - return; + return this; tempMatrix1.identity().setPosition(v.x, v.y, v.z); this.ApplyMatrix(tempMatrix1); return this; @@ -1796,8 +2296,6 @@ let Entity = Entity_1 = class Entity extends CADObject { else renderType = RenderType.WireframePrint; } - if (renderType === RenderType.Edge && !this.HasEdgeRenderType) - renderType = RenderType.Conceptual; if (renderType === RenderType.PlaceFace && !this.HasPlaceFaceRenderType) renderType = RenderType.Wireframe; if (renderType === RenderType.BigHoleFace && !this.HasBigHoleFaceRenderType) @@ -1849,7 +2347,15 @@ let Entity = Entity_1 = class Entity extends CADObject { let mode = this.NeedUpdateFlag; if (mode === 0) return; - if (mode & UpdateDraw.Geometry && this._CacheDrawObject.size > 0) + if (!this._CacheDrawObject) + return; + /** + * br1 - br2 关联切割(斜的) + let temp = br1.Clone() 临时的对象来计算切割后的结果 + temp br2 因为求交集,所以要访问temp.csg temp.MeshGeom (drawObjectsize = 0) + temp.setContour update失败 + */ + if (mode & UpdateDraw.Geometry) // && this._CacheDrawObject.size > 0 因为有时提前获取了MeshGeom 如果判断绘制的个数 会导致没有刷新 this.UpdateDrawGeometry(); this.UpdateVisible(); let isJigIng = this._CacheDrawObject.has(RenderType.Jig); @@ -1892,8 +2398,9 @@ let Entity = Entity_1 = class Entity extends CADObject { UpdateDrawObjectMaterial(type, obj, material) { } get MeshMaterial() { - if (this._MaterialId && this._MaterialId.Object) - return this._MaterialId.Object.Material; + const mtlId = this._MaterialId; + if (!mtlId?.IsErase && mtlId?.Object) + return mtlId.Object.Material; return HostApplicationServices.DefaultMeshMaterial; } /** @@ -1916,7 +2423,7 @@ let Entity = Entity_1 = class Entity extends CADObject { } } get IsVisible() { - return !this._isErase && this._Visible; + return !this._isErase && this._Visible && !this.Layer.Object.IsOff; } UpdateVisible() { if (this._drawObject) { @@ -2066,10 +2573,14 @@ let Entity = Entity_1 = class Entity extends CADObject { this._VisibleInRender = file.ReadBool(); else this._VisibleInRender = true; + if (ver > 10) + this._Layer = file.ReadObjectId(); + else + this._Layer = undefined; } //对象将自身数据写入到文件. WriteFile(file) { - file.Write(10); + file.Write(11); super.WriteFile(file); file.Write(this._Color); file.WriteHardObjectId(this._MaterialId); @@ -2083,6 +2594,7 @@ let Entity = Entity_1 = class Entity extends CADObject { file.WriteHardObjectId(id); file.WriteBool(this._Freeze); file.WriteBool(this._VisibleInRender); + file.WriteHardObjectId(this._Layer); } //局部撤销 ApplyPartialUndo(undoData) { @@ -2175,7 +2687,7 @@ function eval2(expr, params, defaultParam) { MathUtils.degToRad; MathUtils.RAD2DEG; MathUtils.DEG2RAD; - //eval_gen_code + let abs = Math.abs; let acos = Math.acos; let acosh = Math.acosh; @@ -2226,11 +2738,12 @@ function eval2(expr, params, defaultParam) { let R2D = MathUtils.RAD2DEG; let D2R = MathUtils.DEG2RAD; let fix = FixedNotZero; - //eval_gen_code + let code = ""; + //模板材质变量的value默认是"",会导致eval报错,params[name]为""时换成0 if (params) for (let name in params) - code += `let ${name} = ${params[name]};`; + code += `let ${name} = ${params[name] != "" ? params[name] : "0"};`; if (defaultParam) { expr = expr.trimLeft(); if (expr[0] && OPERATORS.has(expr[0])) @@ -2239,9 +2752,9 @@ function eval2(expr, params, defaultParam) { code += expr; let result = eval(code); if (typeof result === "function") - return result(); + result = result(); if (typeof result === "bigint") - return Number(result); //防止bigint乱入 + result = Number(result); //防止bigint乱入 return result; } function safeEval(expr, params, defaultParam) { @@ -2300,6 +2813,16 @@ function FixedNotZero(v, fractionDigits = 0, expr = undefined) { else return v.toFixed(fractionDigits).replace(/[.]?0+$/, ""); } +/** + * To fixed + * @param v + * @param [fractionDigits] + */ +function ToFixed(v, fractionDigits = 5) { + if (equaln$1(v, 0, Math.pow(0.1, fractionDigits))) + return "0"; + return v.toFixed(fractionDigits); +} const IdentityMtx4 = new Matrix4(); const ZeroVec = new Vector3(); @@ -2437,6 +2960,9 @@ function isParallelTo(v1, v2, fuzz = 1e-8) { function isPerpendicularityTo(v1, v2, fuzz = 1e-8) { return equaln$1(v1.dot(v2), 0, fuzz); } +function midPoint(v1, v2) { + return v1.clone().add(v2).multiplyScalar(0.5); +} let tempBox = new Box3(); /** * 获得Three对象的包围盒. @@ -2684,164 +3210,6 @@ var ObjectSnapMode; ObjectSnapMode[ObjectSnapMode["All"] = 31743] = "All"; })(ObjectSnapMode || (ObjectSnapMode = {})); -/** - * 轨道控制的数学类,观察向量和角度的互相转换 - * 当x当抬头或者低头到90度时,触发万向锁. - */ -class Orbit { - constructor() { - //抬头低头 正数抬头 负数低头 - this.phi = 0; //Φ - //身体旋转 0为正右边 逆时针旋转 - this.theta = 0; //θ - } - get RoX() { - return this.phi; - } - set RoX(v) { - this.phi = MathUtils.clamp(v, Math.PI * -0.49, Math.PI * 0.49); - } - /** - * 使用旋转角度 计算观察向量 - * @param [outDirection] 引用传入,如果传入,那么就不构造新的向量 - * @returns 返回观察向量 - */ - UpdateDirection(outDirection = new Vector3()) { - outDirection.z = Math.sin(this.phi); - //归一化专用. - let d = Math.abs(Math.cos(this.phi)); - outDirection.x = Math.cos(this.theta) * d; - outDirection.y = Math.sin(this.theta) * d; - return outDirection; - } - /** - * 使用观察向量,计算旋转角度 - * @param dir 这个向量会被修改成单位向量. - */ - SetFromDirection(dir) { - dir.normalize(); - this.phi = Math.asin(dir.z); - if (equaln$1(dir.x, 0) && equaln$1(dir.y, 0)) - if (dir.z > 0) - this.theta = Math.PI * -0.5; - else - this.theta = Math.PI * 0.5; - else - this.theta = Math.atan2(dir.y, dir.x); - } - /** - * 参考任意轴坐标系算法. - * http://help.autodesk.com/view/ACD/2017/CHS/?guid=GUID-E19E5B42-0CC7-4EBA-B29F-5E1D595149EE - */ - static ComputUpDirection(n, ay = new Vector3(), ax = new Vector3()) { - n.normalize(); - if (Math.abs(n.x) < 0.015625 && Math.abs(n.y) < 0.015625) - ax.crossVectors(YAxis, n); - else - ax.crossVectors(ZAxis, n); - ay.crossVectors(n, ax); - ax.normalize(); - ay.normalize(); - return ay; - } -} - -/** - * 删除数组中指定的元素,返回数组本身 - * @param {Array} arr 需要操作的数组 - * @param {*} el 需要移除的元素 - */ -function arrayRemoveOnce(arr, el) { - let index = arr.indexOf(el); - if (index !== -1) - arr.splice(index, 1); - return arr; -} -/** - * 删除通过函数校验的元素 - * @param {(e: T) => boolean} checkFuntion 校验函数 - */ -function arrayRemoveIf(arr, checkFuntion) { - let j = 0; - for (let i = 0, l = arr.length; i < l; i++) { - if (!checkFuntion(arr[i])) { - arr[j++] = arr[i]; - } - } - arr.length = j; - return arr; -} -function arrayLast(arr) { - return arr[arr.length - 1]; -} -/** - * 根据数值从小到大排序数组 - * @param {Array} arr - * @returns {Array} 返回自身 - */ -function arraySortByNumber$1(arr) { - arr.sort(sortNumberCompart$1); - return arr; -} -/** - * 对排序好的数组进行去重操作 - * @param {(e1, e2) => boolean} [checkFuction] 校验对象相等函数,如果相等 则删除e2 - * @returns {Array} 返回自身 - */ -function arrayRemoveDuplicateBySort(arr, checkFuction = checkEqual) { - if (arr.length < 2) - return arr; - let j = 1; - for (let i = 1, l = arr.length; i < l; i++) - if (!checkFuction(arr[j - 1], arr[i])) - arr[j++] = arr[i]; - arr.length = j; - return arr; -} -function sortNumberCompart$1(e1, e2) { - return e1 - e2; -} -function checkEqual(e1, e2) { - return e1 === e2; -} -/** - * 改变数组的值顺序 - * @param arr 需要改变初始值位置的数组 - * @param index //将index位置以后的值放到起始位置 - */ -function changeArrayStartIndex(arr, index) { - arr.unshift(...arr.splice(index)); - return arr; -} -function equalArray(a, b, checkF = checkEqual) { - if (a === b) - return true; - if (a.length !== b.length) - return false; - for (var i = 0; i < a.length; ++i) - if (!checkF(a[i], b[i])) - return false; - return true; -} -function arrayClone(arr) { - return arr.slice(); -} -//https://jsperf.com/merge-array-implementations/30 -function arrayPushArray$1(arr1, arr2) { - let arr1Length = arr1.length; - let arr2Length = arr2.length; - arr1.length = arr1Length + arr2Length; - for (let i = 0; i < arr2Length; i++) - arr1[arr1Length + i] = arr2[i]; - return arr1; -} -function arraySum(arr) { - let sum = 0; - for (let n of arr) - sum += n; - return sum; -} - function GetGoodShaderSimple(color = new Vector3, side = FrontSide, logBuf = false, opacity = 1) { return { uniforms: { @@ -3158,9 +3526,7 @@ class ColorMaterial { this._BasicDoubleSideMaterialMap.set(color, mtl); return mtl; } - static GetConceptualMaterial(color, side = FrontSide, enableTransparent = false, freeze = false, opacity) { - if (freeze) - color = 257; + static GetConceptualMaterial(color, side = FrontSide, enableTransparent = false) { let key = `${color},${side},${enableTransparent ? 1 : 0}`; if (this._ConceptualMaterial.has(key)) return this._ConceptualMaterial.get(key); @@ -3171,19 +3537,27 @@ class ColorMaterial { get: () => mtl.uniforms.opacity.value !== 1 }); Object.defineProperty(mtl.uniforms.opacity, "value", { - get: () => { - let conceptualOpacity = HostApplicationServices.ConceptualOpacity; - if (freeze) - conceptualOpacity = 0.5; - else if (opacity) - conceptualOpacity = opacity; - return conceptualOpacity; - } + get: () => HostApplicationServices.ConceptualOpacity }); } this._ConceptualMaterial.set(key, mtl); return mtl; } + static GetConceptualTransparentMaterial(color, side = FrontSide) { + let key = `${color},${side}`; + if (this._ConceptualTransparentMaterial.has(key)) + return this._ConceptualTransparentMaterial.get(key); + let shaderParams = GetGoodShaderSimple(new Vector3().fromArray(this.GetColor(color).toArray()), side, ColorMaterial.UseLogBuf); + let mtl = new ShaderMaterial(shaderParams); + Object.defineProperty(mtl, "transparent", { + get: () => mtl.uniforms.opacity.value !== 1 + }); + Object.defineProperty(mtl.uniforms.opacity, "value", { + get: () => HostApplicationServices.ConceptualTransparentOpacity + }); + this._ConceptualTransparentMaterial.set(key, mtl); + return mtl; + } static UpdateConceptualMaterial(useLogBuf) { } static GetPrintConceptualMaterial() { @@ -3249,6 +3623,7 @@ ColorMaterial.UseLogBuf = false; ColorMaterial._WallLineMtlMap = new Map(); ColorMaterial._BasicDoubleSideMaterialMap = new Map(); ColorMaterial._ConceptualMaterial = new Map(); +ColorMaterial._ConceptualTransparentMaterial = new Map(); ColorMaterial._BasicTransparentMaterialMap = new Map(); ColorMaterial._BasicTransparentMaterialMap2 = new Map(); //橡皮筋材质: 黄色 点划线 @@ -3384,7 +3759,7 @@ var BufferGeometryUtils; maxMaterialIndex = Math.max(maxMaterialIndex, g.materialIndex ?? 0); mergedGeometry.addGroup(offset + g.start, g.count, materialOffset + g.materialIndex); } - materialOffset += maxMaterialIndex; + materialOffset += (maxMaterialIndex + 1); } offset += count; } @@ -3462,5473 +3837,68 @@ var BufferGeometryUtils; BufferGeometryUtils.MergeBufferAttributes = MergeBufferAttributes; })(BufferGeometryUtils || (BufferGeometryUtils = {})); -var ExtendType; -(function (ExtendType) { - /** - * 前后都不延伸 - */ - ExtendType[ExtendType["None"] = 0] = "None"; - /** - * 只允许延伸前面 - */ - ExtendType[ExtendType["Front"] = 1] = "Front"; - /** - * 只允许延伸后面 - */ - ExtendType[ExtendType["Back"] = 2] = "Back"; - /** - * 前后延伸 - */ - ExtendType[ExtendType["Both"] = 3] = "Both"; -})(ExtendType || (ExtendType = {})); /** - * 曲线的基类,子类请实现以下方法. + * 轨道控制的数学类,观察向量和角度的互相转换 + * 当x当抬头或者低头到90度时,触发万向锁. */ -let Curve = class Curve extends Entity { +class Orbit { constructor() { - super(); - //------------------绘制相关------------------ - //重载 - this.OnlyRenderType = true; + //抬头低头 正数抬头 负数低头 + this.phi = 0; //Φ + //身体旋转 0为正右边 逆时针旋转 + this.theta = 0; //θ } - get Is2D() { - return equaln$1(this._Matrix.elements[14], 0); + get RoX() { + return this.phi; } - get StartPoint() { return; } - set StartPoint(v) { return; } - get StartParam() { return; } - get EndPoint() { return; } - set EndPoint(v) { return; } - /** 曲线中点 */ - get Midpoint() { - return this.GetPointAtParam(this.MidParam); + set RoX(v) { + this.phi = MathUtils.clamp(v, Math.PI * -0.49, Math.PI * 0.49); } - get MidParam() { - if (this.EndParam === 1) - return 0.5; - else - return this.GetParamAtDist(this.Length * 0.5); - } - get EndParam() { return; } - get Area() { return 0; } /** - *获得曲线的面积,逆时针为正,顺时针为负. + * 使用旋转角度 计算观察向量 + * @param [outDirection] 引用传入,如果传入,那么就不构造新的向量 + * @returns 返回观察向量 */ - get Area2() { return 0; } - get Length() { return 0; } - get IsClose() { return false; } - /** 曲线为顺时针 */ - get IsClockWise() { return this.Area2 < 0; } - get Shape() { throw "未实现"; } - GetPointAtParam(param) { return; } - GetPointAtDistance(distance) { return; } - GetDistAtParam(param) { return; } - GetDistAtPoint(pt) { return; } - GetParamAtPoint(pt, fuzz = 1e-6) { return; } - GetParamAtPoint2(pt, fuzz = 1e-6) { return this.GetParamAtPoint(pt, fuzz); } - GetParamAtDist(d) { return; } + UpdateDirection(outDirection = new Vector3()) { + outDirection.z = Math.sin(this.phi); + //归一化专用. + let d = Math.abs(Math.cos(this.phi)); + outDirection.x = Math.cos(this.theta) * d; + outDirection.y = Math.sin(this.theta) * d; + return outDirection; + } /** - * 返回曲线在指定位置的一阶导数(在wcs内) - * @param {(number | Vector3)} param + * 使用观察向量,计算旋转角度 + * @param dir 这个向量会被修改成单位向量. */ - GetFirstDeriv(param) { return; } - GetFirstDerivAngle(param) { - let d = this.GetFirstDeriv(param); - return Math.atan2(d.y, d.x); - } - /** - * 返回切割曲线后的结果.总是从起点开始切割,并且按顺序返回曲线. - * @param {(number[] | number)} param - */ - GetSplitCurves(param) { return; } - //未完善 - GetCurveAtParamRange(startParam, EndParam) { return; } - GetSplitCurvesByPts(pt) { - let pts = Array.isArray(pt) ? pt : [pt]; - let pars = pts.map(p => this.GetParamAtPoint(p)); - return this.GetSplitCurves(pars); - } - SplitParamSort(param) { - if (Array.isArray(param)) { - param = param.filter(p => this.ParamOnCurve(p)); - if (param.length === 0) - return []; - param.push(0, this.EndParam); - arraySortByNumber$1(param); - arrayRemoveDuplicateBySort(param, (e1, e2) => equaln$1(e1, e2, 1e-7)); - return param; - } - else if (this.ParamOnCurve(param)) - return [0, param, this.EndParam]; - else - return []; - } - Extend(newParam) { } - /** - * 连接曲线到本曲线,如果成功返回true - * @param {Curve} cu 需要连接的曲线 - * @returns {boolean} 连接成功 - * @memberof Curve - */ - Join(cu, allowGap = false, tolerance = 1e-4) { return Status.False; } - //翻转曲线.首尾调换. - Reverse() { return this; } - //点在曲线上 - PtOnCurve(pt, fuzz = 1e-5) { - return equalv3(this.StartPoint, pt, fuzz) || equalv3(this.EndPoint, pt, fuzz) || this.ParamOnCurve(this.GetParamAtPoint(pt, fuzz)); - } - //点在曲线中,不在起点或者终点. - PtOnCurve2(pt) { - return !(equalv3(this.StartPoint, pt, 1e-6) || equalv3(this.EndPoint, pt, 1e-6)) && this.ParamOnCurve(this.GetParamAtPoint(pt), 0); - } - //点在曲线上,已经确定点在曲线的延伸线上 - PtOnCurve3(p, fuzz = 1e-6) { - return this.PtOnCurve(p, fuzz); - } - //参数在曲线上 容差,1e-6 - ParamOnCurve(param, fuzz = 1e-6) { return !isNaN(param) && param >= -fuzz && param <= this.EndParam + fuzz; } - GetOffsetCurves(offsetDist) { return; } - GetClosestPointTo(pt, extend) { return; } - /** - * 曲线相交点 - */ - IntersectWith(curve, intType, tolerance = 1e-6) { - return this.IntersectWith2(curve, intType, tolerance).map(r => r.pt); - } - /** - * 曲线相交点和点的参数 - */ - IntersectWith2(curve, intType, tolerance = 1e-6) { return []; } - /** - * 拽托点个数 - */ - GetDragPointCount(drag) { return 0; } - //样条线重载了这个,得到了更高的绘制精度 - GetDrawCount() { return 30; } - /** - * @param {RenderType} [renderType=RenderType.Wireframe] - */ - InitDrawObject(renderType = RenderType.Wireframe) { - let pts = this.Shape.getPoints(this.GetDrawCount()); - if (pts.length === 0) - pts.push(new Vector3); - if (renderType === RenderType.WireframePrint) { - let array = []; - for (let p of pts) - array.push(p.x, p.y, 0); - let geometry = new LineGeometry().setPositions(array); - return new Line2(geometry, ColorMaterial.PrintLineMatrial); - } - let geo = new BufferGeometry().setFromPoints(pts); - return new Line$1(geo, ColorMaterial.GetLineMaterial(this._Color)); - } - /** - * 重载:更新绘制的实体 - * @param {RenderType} type - * @param {Object3D} obj - */ - UpdateDrawObject(type, obj) { - let pts = this.Shape.getPoints(this.GetDrawCount()); - let plObj = obj; - let geo = plObj.geometry; - if (geo instanceof LineGeometry) { - let array = []; - for (let p of pts) - array.push(p.x, p.y, 0); - geo.setPositions(array); - } - else { - //@ts-ignore - for (let p of pts) - p.z = 0; - if (!BufferGeometryUtils.UpdatePts(geo, pts)) - updateGeometry(plObj, new BufferGeometry().setFromPoints(pts)); - } - } - /** - * 重载:更新实体材质 - */ - UpdateDrawObjectMaterial(type, obj, material) { - if (type === RenderType.WireframePrint) ; - else { - let m = obj; - m.material = material || ColorMaterial.GetLineMaterial(this._Color); - } - } - UpdateJigMaterial(color = 8) { - for (let [type, obj] of this._CacheDrawObject) { - this.UpdateDrawObjectMaterial(type, obj, ColorMaterial.GetLineMaterial(color)); - } - } -}; -Curve = __decorate([ - Factory -], Curve); - -var DragPointType; -(function (DragPointType) { - DragPointType[DragPointType["Grip"] = 0] = "Grip"; - DragPointType[DragPointType["Stretch"] = 1] = "Stretch"; -})(DragPointType || (DragPointType = {})); - -class Matrix2 { - constructor() { - //column-major - this.el = [1, 0, 0, 1]; //ix iy jx jy [a c b d] - } - set(ix, iy, jx, jy) { - this.el[0] = ix; - this.el[1] = iy; - this.el[2] = jx; - this.el[3] = jy; - return this; - } - applyVector(vec) { - let x = vec.x; - let y = vec.y; - let e = this.el; - vec.x = e[0] * x + e[2] * y; - vec.y = e[1] * x + e[3] * y; - return this; - } - fromMatrix4(mtx4) { - this.set(mtx4.elements[0], mtx4.elements[1], mtx4.elements[3], mtx4.elements[4]); - } - setRotate(theta) { - let c = Math.cos(theta); - let s = Math.sin(theta); - this.set(c, s, -s, c); - return this; - } - //自我求逆矩阵,返回自身 - invert() { - //ref:https://www.mathsisfun.com/algebra/matrix-inverse.html - let [a, c, b, d] = this.el; - let det = 1 / (a * d - b * c); - this.set(d * det, -c * det, -b * det, a * det); - return this; - } -} - -class PlaneExt extends Plane { - constructor(normal = new Vector3(0, 0, 1), constant) { - super(normal); - if (typeof constant === "number") - this.constant = constant; - else if (constant) - this.parseConstantFromPoint(constant); - } - parseConstantFromPoint(constant) { - this.constant = -this.normal.dot(constant); - } - intersectLine(line, optionalTarget = new Vector3(), extendLine = false) { - let v1 = new Vector3(); - let direction = line.delta(v1); - let denominator = this.normal.dot(direction); - if (denominator === 0) { - // line is coplanar, return origin - if (this.distanceToPoint(line.start) === 0) { - return optionalTarget.copy(line.start); - } - // Unsure if this is the correct method to handle this case. - return undefined; - } - let t = -(line.start.dot(this.normal) + this.constant) / denominator; - //If you not extendLine,check intersect point in Line - if (!extendLine && (t < -1e-6 || t > 1)) { - return undefined; - } - return optionalTarget.copy(direction).multiplyScalar(t).add(line.start); - } - intersectRay(ray, optionalTarget, extendLine) { - // 从射线初始位置 - let line = new Line3(ray.origin.clone(), ray.origin.clone().add(ray.direction)); - return this.intersectLine(line, optionalTarget, extendLine); - } -} - -const ROTATE_MTX2 = new Matrix2().set(0, -1, 1, 0); - -var Line_1; -let Line = Line_1 = class Line extends Curve { - constructor(_StartPoint = new Vector3, _EndPoint = new Vector3) { - super(); - this._StartPoint = _StartPoint; - this._EndPoint = _EndPoint; - } - get Is2D() { - return super.Is2D && equaln$1(this._StartPoint.z, 0) && equaln$1(this._EndPoint.z, 0); - } - get Shape() { - return new Shape$1([AsVector2(this._StartPoint), AsVector2(this._EndPoint)]); - } - Z0() { - this.WriteAllObjectRecord(); - let ocsInv = this.OCSInv; - let sp = this.StartPoint.setZ(0).applyMatrix4(ocsInv); - let ep = this.EndPoint.setZ(0).applyMatrix4(ocsInv); - this._StartPoint.copy(sp); - this._EndPoint.copy(ep); - this.Update(); - return this; - } - ApplyScaleMatrix(m) { - this.WriteAllObjectRecord(); - this.StartPoint = this.StartPoint.applyMatrix4(m); - this.EndPoint = this.EndPoint.applyMatrix4(m); - return this; - } - ApplyMirrorMatrix(m) { - this.WriteAllObjectRecord(); - let sp = this.StartPoint; - let ep = this.EndPoint; - reviseMirrorMatrix(this._Matrix); - this.StartPoint = sp; - this.EndPoint = ep; - return this; - } - InitDrawObject(renderType = RenderType.Wireframe) { - let pts = [this._StartPoint, this._EndPoint]; - if (renderType === RenderType.WireframePrint) { - let array = []; - for (let p of pts) - array.push(p.x, p.y, p.z); - let geometry = new LineGeometry().setPositions(array); - return new Line2(geometry, ColorMaterial.PrintLineMatrial); - } - let geo = new BufferGeometry().setFromPoints(pts); - return new Line$1(geo, ColorMaterial.GetLineMaterial(this._Color)); - } - /** - * 重载:更新绘制的实体 - * @param {RenderType} type - * @param {Object3D} obj - */ - UpdateDrawObject(type, obj) { - let pts = [this._StartPoint, this._EndPoint]; - let plObj = obj; - let geo = plObj.geometry; - if (geo instanceof LineGeometry) { - let array = []; - for (let p of pts) - array.push(p.x, p.y, p.z); - geo.setPositions(array); - } - else { - if (!BufferGeometryUtils.UpdatePts(geo, pts)) - updateGeometry(plObj, new BufferGeometry().setFromPoints(pts)); - } - } - GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { - switch (snapMode) { - case ObjectSnapMode.End: - return [this.StartPoint, this.EndPoint]; - case ObjectSnapMode.Mid: - return [this.GetPointAtParam(0.5)]; - case ObjectSnapMode.Nea: - { - let derv = this.GetFirstDeriv(0).normalize(); - let viewNormal = new Vector3().fromArray(viewXform.elements, 2 * 3); - //平行不捕捉 - if (isParallelTo(viewNormal, derv)) - return []; - let fNormal = new Vector3().crossVectors(viewNormal, derv); - fNormal.crossVectors(derv, fNormal); - let plane = new PlaneExt(fNormal, this.StartPoint); - let plocal = plane.intersectLine(new Line3(pickPoint, pickPoint.clone().add(viewNormal)), new Vector3(), true); - let pclosest = this.GetClosestPointTo(plocal, false); - return [pclosest]; - } - case ObjectSnapMode.Ext: - return [this.GetClosestPointTo(pickPoint, true)]; - case ObjectSnapMode.Per: - if (lastPoint) { - let { closestPt, param } = this.GetClosestAtPoint(lastPoint, true); - if (this.ParamOnCurve(param)) - return [closestPt]; - } - } - return []; - } - GetGripPoints() { - return [this.StartPoint, this.GetPointAtParam(0.5), this.EndPoint]; - } - MoveGripPoints(indexList, vec) { - this.WriteAllObjectRecord(); - for (let index of indexList) { - if (index === 0) - this.StartPoint = this.StartPoint.add(vec); - else if (index === 2) - this.EndPoint = this.EndPoint.add(vec); - else { - let m = MoveMatrix(vec); - this.ApplyMatrix(m); - } - } - } - GetStretchPoints() { - return [this.StartPoint, this.EndPoint]; - } - MoveStretchPoints(indexList, vec) { - this.WriteAllObjectRecord(); - for (let index of indexList) { - if (index === 0) - this.StartPoint = this.StartPoint.add(vec); + SetFromDirection(dir) { + dir.normalize(); + this.phi = Math.asin(dir.z); + if (equaln$1(dir.x, 0) && equaln$1(dir.y, 0)) + if (dir.z > 0) + this.theta = Math.PI * -0.5; else - this.EndPoint = this.EndPoint.add(vec); - } - } - GetFirstDeriv(param) { - return this.EndPoint.sub(this.StartPoint); - } - /** - * 需要注意的是,平行线和共线无交点 - * @param curve - * @param intType - * @param [tolerance=1e-4] - * @returns - */ - IntersectWith2(curve, intType, tolerance = 1e-4) { - if (curve instanceof Line_1 || curve.constructor.name === "RoomWallLine") { - return IntersectLineAndLine(this, curve, intType, tolerance); - } - if (curve instanceof Arc || curve.constructor.name === "RoomWallArc") { - return IntersectLineAndArc(this, curve, intType, tolerance); - } - if (curve instanceof Circle) { - return IntersectLineAndCircle(this, curve, intType, tolerance); - } - if (curve instanceof Polyline) { - return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType), tolerance)); - } - if (curve instanceof Ellipse) - return IntersectEllipseAndLine(this, curve, intType, tolerance); - //其他的尚未实现. - return []; - } - //Param - GetPointAtParam(param) { - return this.StartPoint.add(this.GetFirstDeriv(0).multiplyScalar(param)); - } - GetParamAtPoint(pt, fuzz = 1e-5) { - let { closestPt, param } = this.GetClosestAtPoint(pt, true); - if (!equalv3(closestPt, pt, fuzz)) - return NaN; - return param; - } - GetParamAtDist(d) { - return d / this.Length; - } - GetPointAtDistance(distance) { - return this.GetPointAtParam(this.GetParamAtDist(distance)); - } - GetDistAtParam(param) { - return this.Length * param; - } - GetDistAtPoint(pt) { - return this.GetDistAtParam(this.GetParamAtPoint(pt)); - } - GetSplitCurves(param) { - let params = this.SplitParamSort(param); - let pts = params.map(param => this.GetPointAtParam(param)); - let ret = new Array(); - if (pts.length >= 2) { - for (let i = 0; i < pts.length - 1; i++) { - let newLine = this.Clone(); - newLine.ColorIndex = this.ColorIndex; - newLine.SetStartEndPoint(pts[i], pts[i + 1]); - ret.push(newLine); - } - } - return ret; - } - GetParamAtPoint2(pt) { - let { param } = this.GetClosestAtPoint(pt, true); - return param; - } - //点在曲线上,已经确定点在曲线的延伸线上 - PtOnCurve3(p, fuzz = 1e-6) { - let { param } = this.GetClosestAtPoint(p, true); - return this.ParamOnCurve(param, fuzz); - } - GetClosestAtPoint(pt, extend) { - let sp = this.StartPoint; - let ep = this.EndPoint; - if (equalv3(pt, sp, 1e-8)) - return { closestPt: sp, param: 0 }; - else if (equalv3(pt, ep, 1e-8)) - return { closestPt: ep, param: 1 }; - let direction = this.GetFirstDeriv(0); - let length = direction.length(); - if (length === 0) { - let param = NaN; - if (equalv3(pt, this.StartPoint, 1e-6)) - param = 0; - return { closestPt: sp, param: param }; - } - direction.divideScalar(length); - let diff = pt.clone().sub(sp); - let param = direction.dot(diff); - let closestPt; - if (extend) - closestPt = sp.add(direction.multiplyScalar(param)); - else if (param < 0) { - closestPt = sp; - param = 0; - } - else if (param > length) { - closestPt = this.EndPoint; - param = length; - } + this.theta = Math.PI * 0.5; else - closestPt = sp.add(direction.multiplyScalar(param)); - return { - closestPt: closestPt, - param: param / length - }; - } - GetClosestPointTo(pt, extend) { - return this.GetClosestAtPoint(pt, extend).closestPt; - } - Extend(newParam) { - this.WriteAllObjectRecord(); - if (newParam < this.StartParam) { - this.StartPoint = this.GetPointAtParam(newParam); - } - else if (newParam > this.EndParam) { - this.EndPoint = this.GetPointAtParam(newParam); - } - } - Join(cu, allowGap = false, tolerance = 1e-5) { - if (cu instanceof Line_1 || cu.constructor.name === "RoomWallLine") { - //平行 - if (!isParallelTo(this.GetFirstDeriv(0).normalize(), cu.GetFirstDeriv(0).normalize())) - return Status.False; - let sp = cu.StartPoint; - let { closestPt: cp1, param: param1 } = this.GetClosestAtPoint(sp, true); - if (!equalv3(sp, cp1, tolerance)) //点在曲线上,允许较低的精度 - return Status.False; - let ep = cu.EndPoint; - let { closestPt: cp2, param: param2 } = this.GetClosestAtPoint(ep, true); - if (!equalv3(ep, cp2, tolerance)) - return Status.False; - if (param1 > param2) { - [param1, param2] = [param2, param1]; - [sp, ep] = [ep, sp]; - } - if (allowGap || Math.max(0, param1) < Math.min(1, param2) + tolerance / this.Length) //这里的容差是值容差,但是我们用它来判断参数,所以进行转换 - { - if (param1 < 0) - this.StartPoint = sp; - if (param2 > 1) - this.EndPoint = ep; - return Status.True; - } - } - return Status.False; - } - Reverse() { - this.WriteAllObjectRecord(); - [this._StartPoint, this._EndPoint] = [this._EndPoint, this._StartPoint]; - return this; - } - GetOffsetCurves(offsetDist) { - let offset = this._EndPoint.clone().sub(this._StartPoint).normalize().multiplyScalar(offsetDist); - ROTATE_MTX2.applyVector(offset); - let newLine = this.Clone(); - newLine.ClearDraw(); - newLine._StartPoint.add(offset); - newLine._EndPoint.add(offset); - return [newLine]; - } - get BoundingBox() { - return new Box3().setFromPoints([this.StartPoint, this.EndPoint]); + this.theta = Math.atan2(dir.y, dir.x); } /** - * 返回对象在自身坐标系下的Box + * 参考任意轴坐标系算法. + * http://help.autodesk.com/view/ACD/2017/CHS/?guid=GUID-E19E5B42-0CC7-4EBA-B29F-5E1D595149EE */ - get BoundingBoxInOCS() { - return new Box3Ext().setFromPoints([this._StartPoint, this._EndPoint]); - } - get StartParam() { - return 0; - } - get EndParam() { - return 1; - } - //属性 - get Length() { return this._StartPoint.distanceTo(this._EndPoint); } - //#region -----------------------------File----------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - //对象从文件中读取数据,初始化自身 - _ReadFile(file) { - super._ReadFile(file); - file.Read(); //1 - this._StartPoint.fromArray(file.Read()); - this._EndPoint.fromArray(file.Read()); - } - //对象将自身数据写入到文件. - WriteFile(file) { - super.WriteFile(file); - file.Write(1); //ver - file.Write(this._StartPoint.toArray()); - file.Write(this._EndPoint.toArray()); - } - //#endregion-----------------------------File End----------------------------- - //#region 属性 - set StartPoint(p) { - this.WriteAllObjectRecord(); - this._StartPoint.copy(p).applyMatrix4(this.OCSInv); - this.Update(); - } - get StartPoint() { - return this._StartPoint.clone().applyMatrix4(this.OCSNoClone); - } - get EndPoint() { - return this._EndPoint.clone().applyMatrix4(this.OCSNoClone); - } - set EndPoint(p) { - this.WriteAllObjectRecord(); - this._EndPoint.copy(p).applyMatrix4(this.OCSInv); - this.Update(); - } - SetStartEndPoint(s, e) { - this.WriteAllObjectRecord(); - let inv = this.OCSInv; - this._StartPoint.copy(s).applyMatrix4(inv); - this._EndPoint.copy(e).applyMatrix4(inv); - this.Update(); - } -}; -Line = Line_1 = __decorate([ - Factory -], Line); - -var Ellipse_1; -let Ellipse = Ellipse_1 = class Ellipse extends Curve { - constructor(center, radX = 1e-3, radY = 1e-3, angle = 0) { - super(); - this._startAngle = 0; - this._endAngle = Math.PI * 2; - center && this._Matrix.setPosition(center); - this._radX = radX; - this._radY = radY; - this._rotate = angle; - } - get StartParam() { - return 0; - } - get EndParam() { - return 1; - } - get StartPoint() { - return this.GetPointAtParam(0); - } - get EndPoint() { - return this.GetPointAtParam(1); - } - get Shape() { - let sp = new Shape$1(); - sp.ellipse(0, 0, this._radX, this._radY, this._startAngle, this._endAngle, false, this._rotate); - return sp; - } - get IsClose() { - return equaln$1(this.TotalAngle, Math.PI * 2); - } - get Center() { - return new Vector3().setFromMatrixPosition(this._Matrix); - } - set Center(v) { - this.WriteAllObjectRecord(); - this._Matrix.setPosition(v); - this.Update(); - } - get RadX() { - return this._radX; - } - set RadX(v) { - this.WriteAllObjectRecord(); - this._radX = v; - this.Update(); - } - get RadY() { - return this._radY; - } - set RadY(v) { - this.WriteAllObjectRecord(); - this._radY = v; - this.Update(); - } - get Rotation() { - return this._rotate; - } - set Rotation(v) { - this.WriteAllObjectRecord(); - this._rotate = v; - this.Update(); - } - get StartAngle() { - return this._startAngle; - } - get EndAngle() { - return this._endAngle; - } - set StartAngle(v) { - this.WriteAllObjectRecord(); - this._startAngle = v; - this.Update(); - } - set EndAngle(v) { - this.WriteAllObjectRecord(); - this._endAngle = v; - this.Update(); - } - get Length() { - let a = this._radX; - let b = this._radY; - return Math.PI * Math.abs(3 * (a + b) - Math.sqrt((3 * a + b) * (a + 3 * b))) * this.TotalAngle / Math.PI * 0.5; - } - get Area() { - let area = Math.PI * this._radX * this._radY; - let an = this._endAngle - this._startAngle; - if (an < 0) - an = Math.PI * 2 + an; - area *= an / Math.PI * 0.5; - let area2 = Math.abs(getDeterminantFor2V(AsVector2(this.StartPoint.sub(this.Center)), AsVector2(this.EndPoint.sub(this.Center)))) / 2; - if (an < Math.PI) - area -= area2; + static ComputUpDirection(n, ay = new Vector3(), ax = new Vector3()) { + n.normalize(); + if (Math.abs(n.x) < 0.015625 && Math.abs(n.y) < 0.015625) + ax.crossVectors(YAxis, n); else - area += area2; - return area; - } - get TotalAngle() { - let totolAngle = this._endAngle - this._startAngle; - if (totolAngle <= 0) - totolAngle = Math.PI * 2 + totolAngle; - return totolAngle; - } - ApplyScaleMatrix(m) { - //或许我们应该在缩放一下轴尺寸 但是先不做了 - let p = this.Position; - p.applyMatrix4(m); - this.Position = p; - return this; - } - Extend(newParam) { - this.WriteAllObjectRecord(); - if (newParam < 0) - this._startAngle = this.GetAngleAtParam(newParam); - else if (newParam > 1) - this._endAngle = this.GetAngleAtParam(newParam); - this.Update(); - } - PtInCurve(pt) { - let p = rotatePoint(pt.clone().sub(this.Center), -this.Rotation); - return p.x ** 2 / this.RadX ** 2 + p.y ** 2 / this.RadY ** 2 < 1; - } - PtOnCurve(pt) { - return this.PtOnEllipse(pt) && this.ParamOnCurve(this.GetParamAtPoint(pt)); - } - PtOnEllipse(pt) { - let p = rotatePoint(pt.clone().applyMatrix4(this.OCSInv), -this.Rotation); - return equaln$1(p.x ** 2 / this.RadX ** 2 + p.y ** 2 / this.RadY ** 2, 1, 1e-3); - } - GetPointAtParam(param) { - let an = this.TotalAngle * param + this._startAngle; - let a = this.RadX; - let b = this.RadY; - let pt = new Vector3(a * Math.cos(an), b * Math.sin(an), 0); - let mtx = new Matrix2().setRotate(this._rotate); - mtx.applyVector(pt); - return pt.applyMatrix4(this.OCSNoClone); - } - GetParamAtPoint(pt) { - if (!this.PtOnEllipse(pt)) - return NaN; - let an = this.GetCircleAngleAtPoint(pt); - let allAngle = this.TotalAngle; - let param = an / allAngle; - if (this.IsClose) - return param; - else { - if (an >= this._startAngle) - param = (an - this._startAngle) / allAngle; - else - param = ((Math.PI * 2) - (this._startAngle - an)) / allAngle; - //剩余的参数 - let remParam = Math.PI * 2 / allAngle - 1; - if (param > (remParam * 0.5 + 1)) //一半 - param = (param - 1) - remParam; //返回负数 - return param; - } - } - GetPointAtDistance(distance) { - let param = distance / this.Length; - return this.GetPointAtParam(param); - } - GetDistAtParam(param) { - return this.Length * param; - } - GetDistAtPoint(pt) { - let param = this.GetParamAtPoint(pt); - return this.GetDistAtParam(param); - } - GetParamAtDist(d) { - return d / this.Length; - } - GetAngleAtParam(param) { - return this._startAngle + param * this.TotalAngle; - } - GetCircleAngleAtPoint(pt) { - pt = pt.clone().applyMatrix4(this.OCSInv); - let romtx = new Matrix2().setRotate(-this._rotate); - romtx.applyVector(pt); - //https://www.petercollingridge.co.uk/tutorials/computational-geometry/finding-angle-around-ellipse/ - let an = Math.atan(this.RadX * pt.y / (this.RadY * pt.x)); - if (pt.x < 0) - an += Math.PI; - else if (an < 0) - an += Math.PI * 2; - return an; - } - GetFirstDeriv(pt) { - if (typeof pt === "number") - pt = this.GetPointAtParam(pt); - else - pt = pt.clone(); - let refPts = this.GetGripPoints(); - let p = pt.clone().applyMatrix4(this.OCSInv).applyMatrix4(new Matrix4().makeRotationZ(-this._rotate)); - let vec = new Vector3(); - if (equalv3(pt, refPts[0])) - vec.set(0, 1, 0); - else if (equalv3(pt, refPts[1])) - vec.set(0, -1, 0); - else if (p.y > 0) { - let k = -(this._radY ** 2 * p.x) / (this._radX ** 2 * p.y); - vec.set(-1, -k, 0); - } - else { - let k = -(this._radY ** 2 * p.x) / (this._radX ** 2 * p.y); - vec.set(1, k, 0); - } - rotatePoint(vec, this._rotate); - return vec.applyMatrix4(this.OCS.setPosition(0, 0, 0)); - } - GetClosestPointTo(p, extend) { - //参考:https://wet-robots.ghost.io/simple-method-for-distance-to-ellipse/ - let ro = new Matrix4().makeRotationZ(this._rotate); - let roInv = new Matrix4().getInverse(ro); - let pt = p.clone().applyMatrix4(this.OCSInv).setZ(0).applyMatrix4(roInv); - let px = pt.x; - let py = pt.y; - let t = angle(pt); - let a = this._radX; - let b = this._radY; - let x, y; - for (let i = 0; i < 3; i++) { - x = a * Math.cos(t); - y = b * Math.sin(t); - let ex = (a ** 2 - b ** 2) * Math.cos(t) ** 3 / a; - let ey = (b * b - a * a) * Math.sin(t) ** 3 / b; - let rx = x - ex; - let ry = y - ey; - let qx = px - ex; - let qy = py - ey; - let r = Math.sqrt(ry ** 2 + rx ** 2); - let q = Math.sqrt(qy ** 2 + qx ** 2); - let dc = r * Math.asin((rx * qy - ry * qx) / (r * q)); - let dt = dc / Math.sqrt(a * a + b * b - x * x - y * y); - t += dt; - } - let retPt = new Vector3(x, y).applyMatrix4(ro).applyMatrix4(this.OCSNoClone); - if (this.IsClose || extend) { - return retPt; - } - else if (this.PtOnCurve(retPt)) { - return retPt; - } - else { - let d1 = p.distanceToSquared(this.StartPoint); - let d2 = p.distanceToSquared(this.EndPoint); - return d1 < d2 ? this.StartPoint : this.EndPoint; - } - } - GetOffsetCurves(offsetDist) { - if ((offsetDist + Math.min(this._radX, this._radY)) > 0) { - let el = this.Clone(); - el.RadX = this._radX + offsetDist; - el.RadY = this._radY + offsetDist; - return [el]; - } - return []; - } - GetSplitCurves(param) { - let params; - if (param instanceof Array) { - params = param.filter(p => this.ParamOnCurve(p)); - params.sort((a1, a2) => a2 - a1); //从大到小 - } - else - params = [param]; - //补上最后一个到第一个的弧 - if (this.IsClose) - params.unshift(arrayLast(params)); - else { - params.unshift(1); - params.push(0); - } - arrayRemoveDuplicateBySort(params); - let anglelist = params.map(param => this.TotalAngle * param + this._startAngle); - let elllist = []; - for (let i = 0; i < anglelist.length - 1; i++) { - let sa = anglelist[i]; - let ea = anglelist[i + 1]; - let el = this.Clone(); - if (!equaln$1(sa, ea, 1e-6)) { - el.StartAngle = ea; - el.EndAngle = equaln$1(sa, 0) ? Math.PI * 2 : sa; - elllist.push(el); - } - } - return elllist; - } - Join(el) { - if (this.IsClose || el.IsClose || !this.IsCoplaneTo(el) || !equalv3(el.Center, this.Center)) - return Status.False; - let status = Status.False; - if (equaln$1(this._endAngle, this._startAngle)) { - this.EndAngle = this._endAngle; - status = Status.True; - } - else if (equaln$1(this._startAngle, el._endAngle)) { - this.StartAngle = el._startAngle; - status = Status.True; - } - if (status === Status.True && !this.IsClose && equaln$1(this._startAngle, this._endAngle)) { - this.StartAngle = 0; - this.EndAngle = Math.PI * 2; - } - return status; - } - GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { - switch (snapMode) { - case ObjectSnapMode.End: - { - let pts = this.GetGripPoints(); - return pts; - } - case ObjectSnapMode.Cen: - return [this.Center]; - case ObjectSnapMode.Nea: - { - return getArcOrCirNearPts(this, pickPoint, viewXform); - } - case ObjectSnapMode.Per: - if (lastPoint) { - if (equaln$1(lastPoint.distanceToSquared(this.Center), 0, 1e-10)) - return []; - return [this.GetClosestPointTo(lastPoint, false)]; - } - case ObjectSnapMode.Tan: - { - //TODO:过某点获取椭圆全部切点 - if (lastPoint) { - return getTanPtsOnEllipse(); - } - } - default: - return []; - } - } - IntersectWith2(curve, intType) { - //TODO:优化椭圆和椭圆,椭圆和圆相交 - if (curve instanceof Line) { - return SwapParam(IntersectEllipseAndLine(curve, this, reverseIntersectOption(intType))); - } - else if (curve instanceof Circle || curve instanceof Arc) { - return IntersectEllipseAndCircleOrArc(this, curve, intType); - } - else if (curve instanceof Polyline) { - return SwapParam(IntersectPolylineAndCurve(curve, this, intType)); - } - else if (curve instanceof Ellipse_1) { - return IntersectEllipse(this, curve); - } - else - return []; - } - GetStretchPoints() { - return this.GetGripPoints(); - } - GetGripPoints() { - let tmpMat4 = new Matrix4().makeRotationZ(this.Rotation); - let pts = [ - new Vector3(this._radX, 0), - new Vector3(-this._radX, 0), - new Vector3(0, this._radY), - new Vector3(0, -this._radY) - ]; - for (let p of pts) - p.applyMatrix4(tmpMat4).applyMatrix4(this.OCSNoClone); - if (!equaln$1(0, this._startAngle)) - pts.push(this.StartPoint); - if (!equaln$1(0, this._endAngle)) - pts.push(this.EndPoint); - pts.push(this.Center); - return pts; - } - MoveStretchPoints(indexList, vec) { - this.ApplyMatrix(MoveMatrix(vec)); - } - MoveGripPoints(indexList, vec) { - let pts = this.GetStretchPoints(); - if (indexList.length > 0) { - let p = pts[indexList[0]].clone(); - p.add(vec); - if (indexList[0] <= 1) - this.RadX = p.distanceTo(this.Center); - else if (indexList[0] <= 3) - this.RadY = p.distanceTo(this.Center); - else { - let p1 = pts[indexList[0]]; - //TODO:跟cad不一致待优化 - if (equalv3(p1, this.StartPoint)) { - let v1 = p1.clone().sub(this.Center); - let v2 = p.clone().sub(this.Center); - let an = angleTo(v1, v2); - this.StartAngle = this.StartAngle + an; - } - else if (equalv3(p1, this.EndPoint)) { - let v1 = p1.clone().sub(this.Center); - let v2 = p.clone().sub(this.Center); - let an = angleTo(v2, v1); - this.EndAngle = this.EndAngle + an; - } - else - this.Center = p; - } - } - } - Convert2Polyline(count = 0) { - const MIN_LEN = 80; - const par = this.TotalAngle / Math.PI * 0.5; - if (!count) { - count = Math.floor(this.Length / par / MIN_LEN); - count = MathUtils.clamp(count, 15, 80); - } - count = Math.floor(count * par); - if ((count & 1) === 0) - count++; - let pts = this.Shape.getPoints(count); - if (this.IsClose) - pts.pop(); - let pl = Pts2Polyline(pts, this.IsClose); - pl.ColorIndex = this.ColorIndex; - pl.ApplyMatrix(this.OCS); - if (this.IsClose) - pl.CloseMark = true; - return pl; - } - _ReadFile(file) { - super._ReadFile(file); - file.Read(); - this._radX = file.Read(); - this._radY = file.Read(); - this._rotate = file.Read(); - this._startAngle = file.Read(); - this._endAngle = file.Read(); - this.Update(); - } - //对象将自身数据写入到文件. - WriteFile(file) { - super.WriteFile(file); - file.Write(1); - file.Write(this.RadX); - file.Write(this.RadY); - file.Write(this.Rotation); - file.Write(this._startAngle); - file.Write(this._endAngle); - } -}; -Ellipse = Ellipse_1 = __decorate([ - Factory -], Ellipse); - -var Circle_1; -let circleGeometry; -function GetCircleGeometry() { - if (!circleGeometry) - circleGeometry = BufferGeometryUtils.CreateFromPts(new EllipseCurve(0, 0, 1, 1, 0, 2 * Math.PI, false, 0).getPoints(360).map(AsVector3)); - return circleGeometry; -} -let Circle = Circle_1 = class Circle extends Curve { - constructor(center, radius = 1e-6) { - super(); - center && this._Matrix.setPosition(center); - this._Radius = radius; - } - get Shape() { - let sp = new Shape2(); - sp.ellipse(0, 0, this._Radius, this._Radius, 0, 2 * Math.PI, false, 0); - return sp; - } - get Center() { - return new Vector3().setFromMatrixPosition(this._Matrix); - } - set Center(v) { - this.WriteAllObjectRecord(); - this._Matrix.setPosition(v); - this.Update(); - } - get Radius() { - return this._Radius; - } - set Radius(v) { - this.WriteAllObjectRecord(); - this._Radius = clamp(v, 1e-9, 1e19); - this.Update(); - } - ApplyScaleMatrix(m) { - this.WriteAllObjectRecord(); - this.Center = this.Center.applyMatrix4(m); - this.Radius = this.Radius * m.getMaxScaleOnAxis(); - return this; - } - ApplyMirrorMatrix(m) { - this.WriteAllObjectRecord(); - reviseMirrorMatrix(this._Matrix); - return this; - } - //******************** Curve function start*****************// - get StartPoint() { - return this.GetPointAtParam(0); - } - get StartParam() { - return 0; - } - get EndPoint() { - return this.GetPointAtParam(0); - } - get EndParam() { - return 1; - } - PtInCurve(pt) { - return pt.distanceToSquared(this.Center) < Math.pow(this.Radius, 2); - } - get Area() { - return Math.PI * this._Radius ** 2; - } - get Area2() { - return Math.PI * this._Radius ** 2; - } - get Length() { - return Math.PI * 2 * this._Radius; - } - get IsClose() { - return true; - } - //曲线为顺时针 - get IsClockWise() { return false; } - GetPointAtParam(param) { - return polar(new Vector3(), param * 2 * Math.PI, this._Radius).applyMatrix4(this._Matrix); - } - GetPointAtDistance(distance) { - let param = distance / (Math.PI * 2 * this._Radius); - return this.GetPointAtParam(param); - } - GetDistAtParam(param) { - return Math.PI * 2 * this._Radius * param; - } - GetDistAtPoint(pt) { - let param = this.GetParamAtPoint(pt); - return this.GetDistAtParam(param); - } - GetParamAtDist(d) { - return d / (Math.PI * 2 * this._Radius); - } - GetSplitCurves(param) { - let params; - if (param instanceof Array) { - params = param.filter(p => this.ParamOnCurve(p)); - params.sort((a1, a2) => a2 - a1); //从大到小 - arrayRemoveDuplicateBySort(params); - if (params.length < 2) - return []; - } - else //圆不能被单个参数切割 - return []; - //补上最后一个到第一个的弧 - params.unshift(arrayLast(params)); - let anglelist = params.map(param => Math.PI * 2 * param); - let curvelist = new Array(); - for (let i = 0; i < anglelist.length - 1; i++) { - let sa = anglelist[i]; - let ea = anglelist[i + 1]; - if (!equaln$1(sa, ea, 1e-6)) { - let arc = new Arc(new Vector3(), this._Radius, ea, sa, false); - arc.ColorIndex = this.ColorIndex; - arc.ApplyMatrix(this.OCS); - curvelist.push(arc); - } - } - return curvelist; - } - GetParamAtPoint(pt) { - if (!this.PtOnCurve(pt)) - return NaN; - return angle(pt.clone().applyMatrix4(this.OCSInv)) / (Math.PI * 2); - } - PtOnCurve(pt, fuzz = 1e-5) { - return equaln$1(pt.distanceToSquared(this.Center), this._Radius * this._Radius, fuzz); - } - GetOffsetCurves(offsetDist) { - if ((offsetDist + this._Radius) > 0) { - let circle = this.Clone(); - circle.Radius = this._Radius + offsetDist; - return [circle]; - } - return []; - } - IntersectWith2(curve, intType, tolerance = 1e-5) { - if (curve instanceof Arc) { - return IntersectCircleAndArc(this, curve, intType, tolerance); - } - if (curve instanceof Line) { - return SwapParam(IntersectLineAndCircle(curve, this, reverseIntersectOption(intType), tolerance)); - } - if (curve instanceof Circle_1) { - return IntersectCircleAndCircle(this, curve, tolerance); - } - if (curve instanceof Ellipse) { - return SwapParam(IntersectEllipseAndCircleOrArc(curve, this, intType)); - } - if (curve instanceof Polyline) - return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType), tolerance)); - return []; - } - //******************** Curve function end*****************// - get BoundingBoxInOCS() { - return new Box3Ext(new Vector3(-this.Radius, -this.Radius), new Vector3(this.Radius, this.Radius)); - } - get BoundingBox() { - let z = this.Normal; - let x = new Vector3; - let y = new Vector3; - Orbit.ComputUpDirection(z, y, x); - let m = new Matrix4().makeBasis(x, y, z).setPosition(this.Center); - //使用任意轴坐标系 以便我们正确的对齐世界坐标系 - return this.BoundingBoxInOCS.applyMatrix4(m); - } - InitDrawObject(renderType = RenderType.Wireframe) { - let obj = new Object3D(); - let cirGeo = GetCircleGeometry(); - if (renderType === RenderType.WireframePrint) { - let geometry = new LineGeometry().setPositions(cirGeo.attributes.position.array); - obj.add(new Line2(geometry, ColorMaterial.PrintLineMatrial)); - } - else { - let line = new Line$1(cirGeo, ColorMaterial.GetLineMaterial(this._Color)); - obj.add(line); - } - this.UpdateDrawObject(renderType, obj); - return obj; - } - UpdateDrawObject(type, obj) { - obj.children[0].scale.set(this._Radius, this._Radius, this._Radius); - obj.children[0].updateMatrix(); - } - UpdateDrawObjectMaterial(type, obj, material) { - if (type === RenderType.WireframePrint) ; - else { - let m = obj.children[0]; - m.material = material ? material : ColorMaterial.GetLineMaterial(this._Color); - return obj; - } - } - GetDragPointCount(drag) { - if (drag === DragPointType.Grip) - return 5; - else - return 1; - } - GetGripPoints() { - let pts = [ - new Vector3(), - new Vector3(0, this._Radius), - new Vector3(0, -this._Radius), - new Vector3(-this._Radius, 0), - new Vector3(this._Radius, 0), - ]; - let ocs = this.OCS; - pts.forEach(p => p.applyMatrix4(ocs)); - return pts; - } - GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { - switch (snapMode) { - case ObjectSnapMode.Nea: - { - return getArcOrCirNearPts(this, pickPoint, viewXform); - } - case ObjectSnapMode.Cen: - return [this.Center]; - case ObjectSnapMode.Per: - if (lastPoint) { - if (equaln$1(lastPoint.distanceToSquared(this.Center), 0, 1e-10)) - return []; - let l = new Line(this.Center, lastPoint); - return l.IntersectWith(this, IntersectOption.ExtendBoth); - } - case ObjectSnapMode.Tan: - let pts = GetTanPtsOnArcOrCircle(this, lastPoint); - if (pts) - return pts; - case ObjectSnapMode.End: - { - let pts = this.GetGripPoints(); - pts.shift(); - return pts; - } - } - return []; - } - MoveGripPoints(indexList, vec) { - let pts = this.GetGripPoints(); - if (indexList.length > 0) { - let index = indexList[0]; - let p = pts[index]; - if (p) { - if (index > 0) { - p.add(vec); - this.Radius = p.distanceTo(this.Center); - } - else { - this.Center = this.Center.add(vec); - } - } - } - } - GetStretchPoints() { - let pts = [new Vector3()]; - let ocs = this.OCS; - pts.forEach(p => p.applyMatrix4(ocs)); - return pts; - } - MoveStretchPoints(indexList, vec) { - if (indexList.length > 0) { - let mat = MoveMatrix(vec); - this.ApplyMatrix(mat); - } - } - GetFirstDeriv(pt) { - if (typeof pt === "number") - pt = this.GetPointAtParam(pt); - else - pt = pt.clone(); - pt.applyMatrix4(this.OCSInv); - let an = angle(pt) + Math.PI * 0.5; - return polar(new Vector3(), an, 1).applyMatrix4(new Matrix4().extractRotation(this.OCS)); - } - GetClosestPointTo(pt, extend) { - pt = pt.clone().applyMatrix4(this.OCSInv); - if (equalv2(pt, ZeroVec, 1e-8)) - return this.GetPointAtParam(0); - let a = Math.atan2(pt.y, pt.x); - return polar(new Vector3, a, this._Radius).applyMatrix4(this._Matrix); - } - //#region -------------------------File------------------------- - //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 - //对象从文件中读取数据,初始化自身 - _ReadFile(file) { - super._ReadFile(file); - file.Read(); - this._Radius = file.Read(); - } - //对象将自身数据写入到文件. - WriteFile(file) { - super.WriteFile(file); - file.Write(1); - file.Write(this._Radius); - } -}; -Circle = Circle_1 = __decorate([ - Factory -], Circle); - -const ARC_DRAW_CONFIG = { - ARC_SplitLength: 0.4, //圆的分段长度 - ARC_RADIUS_MIN: 2.5, //大于半径25的自动优化成36等分圆 保证绘制光滑 - Arc_MinSplitCount: 8, //圆的最小分段个数 - ARC_MaxSplitCount: 90, //圆的最大分段个数 -}; -function GetArcDrawCount(arc) { - let radius = typeof arc === "number" ? arc : arc.Radius; - let splitCount = radius / ARC_DRAW_CONFIG.ARC_SplitLength; - //保证是偶数(避免奇数和Shape2计算方式一致导致的干涉) - splitCount = clamp(Math.floor(splitCount * 0.5) * 2, ARC_DRAW_CONFIG.Arc_MinSplitCount, ARC_DRAW_CONFIG.ARC_MaxSplitCount); - if (radius > ARC_DRAW_CONFIG.ARC_RADIUS_MIN) - splitCount = Math.max(36, splitCount); - return splitCount; -} -/** - * - * @param cu - */ -function SplitCurveParams(cu) { - let xparams = []; - if (cu instanceof Circle) { - let splitCount = GetArcDrawCount(cu); - for (let i = 0; i < splitCount; i++) - xparams.push(i / splitCount); - } - else - //分段1 - for (let i = 0; i < cu.EndParam; i++) { - xparams.push(i); - if (!equaln$1(cu.GetBulgeAt(i), 0, BUL_IS_LINE_FUZZ)) // is arc - { - let arc = cu.GetCurveAtIndex(i); - let splitCount = GetArcDrawCount(arc); - if (splitCount === 0) - continue; - let a = Math.PI * 2 / splitCount; - let params = []; - for (let j = 0; j < splitCount; j++) { - let param = arc.GetParamAtAngle(a * j); - if (arc.ParamOnCurve(param)) - params.push(param); - } - arraySortByNumber$1(params); - if (params.length === 0) - continue; - for (let p of params) { - if (p > 1e-5 && p < 0.99999) - xparams.push(p + i); - } - } - } - xparams.push(cu.EndParam); - return xparams; -} - -let tempArc; -class Shape2 extends Shape$1 { - getPoints(divisions = 12, optimizeArc = true) { - let points = [], last; - for (let i = 0, curves = this.curves; i < curves.length; i++) { - let curve = curves[i]; - let resolution = divisions; - //@ts-ignore - if (curve && curve.isEllipseCurve) { - if (optimizeArc) { - if (!tempArc) - tempArc = new Arc; - else - tempArc.ClearDraw(); - tempArc.IsClockWise = curve.aClockwise; - tempArc.StartAngle = curve.aStartAngle; - tempArc.EndAngle = curve.aEndAngle; - tempArc.Radius = Math.abs(curve.xRadius); - //根据圆的半径来确定绘制个数(与SplitCurveParams一致) - let splitCount = GetArcDrawCount(tempArc); - resolution = Math.max(1, Math.ceil(Math.abs((tempArc.AllAngle * 0.5) / Math.PI) * splitCount * 0.5)) * 2; - } - else - resolution = divisions * 2; - } - else { - //@ts-ignore - resolution = (curve && (curve.isLineCurve || curve.isLineCurve3)) ? 1 - //@ts-ignore - : (curve && curve.isSplineCurve) ? divisions * curve.points.length - : divisions; - } - let pts = curve.getPoints(resolution); - for (let j = 0; j < pts.length; j++) { - let point = pts[j]; - if (last && equalv2(last, point, 1e-4)) - continue; // ensures no consecutive points are duplicates - points.push(point); - last = point; - if (j === pts.length - 1) - point["_mask_"] = true; - } - } - if (this.autoClose - && points.length > 1 - && !points[points.length - 1].equals(points[0])) { - points.push(points[0]); - } - return points; - } - absellipse(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation) { - let curve = new EllipseCurve(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation); - /* - if (this.curves.length > 0) - { - // if a previous curve is present, attempt to join - let firstPoint = curve.getPoint(0); - if (!equalv2(firstPoint, this.currentPoint)) - { - this.lineTo(firstPoint.x, firstPoint.y); - } - } - */ - this.curves.push(curve); - let lastPoint = curve.getPoint(1); - this.currentPoint.copy(lastPoint); - return this; + ax.crossVectors(ZAxis, n); + ay.crossVectors(n, ax); + ax.normalize(); + ay.normalize(); + return ay; } } -//解析二维圆弧 -class Arc2d { - constructor(p1, p2, bul) { - p1 = p1.clone(); - p2 = p2.clone(); - //a (* 2 (atan b)) - let a = Math.atan(bul) * 2; - //r (/ (distance p1 p2) 2 (sin a)) - let r = p1.distanceTo(p2) / 2 / Math.sin(a); - //c (polar p1 (+ (- (/ pi 2) a) (angle p1 p2)) r) - let c = polar(p1.clone(), Math.PI / 2 - a + angle(p2.clone().sub(p1)), r); - this._Radius = Math.abs(r); - this._StartAn = angle(p1.sub(c)); - this._EndAn = angle(p2.sub(c)); - this._Center = c; - } -} -//创建轮廓 通过点表和凸度 -function CreatePolylinePath(pts, buls) { - let shape = new Shape2(); - if (pts.length === 0) - return shape; - let firstPt = pts[0]; - shape.moveTo(firstPt.x, firstPt.y); - for (let i = 0; i < pts.length - 1; i++) { - let prePt = pts[i]; - let nextPt = pts[i + 1]; - if (equaln$1(buls[i], 0, 1e-8) || equalv2(prePt, nextPt, 1e-2)) { - shape.lineTo(nextPt.x, nextPt.y); - } - else { - //参考 - //http://www.dorodnic.com/blog/tag/three-js/ 绘制一个齿轮 - //https://www.kirupa.com/html5/drawing_circles_canvas.htm //html5 - let arc2 = new Arc2d(prePt, nextPt, buls[i]); - let cen = arc2._Center; - shape.absarc(cen.x, cen.y, arc2._Radius, arc2._StartAn, arc2._EndAn, buls[i] < 0); - } - } - return shape; -} - -/* -功能:判断线段是否存在交点 -ref:https://www.geeksforgeeks.org/check-if-two-given-line-segments-intersect/ -*/ -// Given three colinear points p, q, r, the function checks if -// point q lies on line segment 'pr' -function onSegment(p, q, r) { - if (q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && - q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y)) - return true; - return false; -} -// To find orientation of ordered triplet (p, q, r). -// The function returns following values -// 0 --> p, q and r are colinear -// 1 --> Clockwise -// 2 --> Counterclockwise -function orientation(p, q, r) { - // See https://www.geeksforgeeks.org/orientation-3-ordered-points/ - // for details of below formula. - let val = (q.y - p.y) * (r.x - q.x) - - (q.x - p.x) * (r.y - q.y); - if (val === 0) - return 0; // colinear - return (val > 0) ? 1 : 2; // clock or counterclock wise -} -/** - * 判断线段`p1q1`和线段`p2q2`是否相交. - */ -function doIntersect(p1, q1, p2, q2) { - // Find the four orientations needed for general and - // special cases - let o1 = orientation(p1, q1, p2); - let o2 = orientation(p1, q1, q2); - let o3 = orientation(p2, q2, p1); - let o4 = orientation(p2, q2, q1); - // General case - if (o1 !== o2 && o3 !== o4) - return true; - // Special Cases - // p1, q1 and p2 are colinear and p2 lies on segment p1q1 - if (o1 === 0 && onSegment(p1, p2, q1)) - return true; - // p1, q1 and q2 are colinear and q2 lies on segment p1q1 - if (o2 === 0 && onSegment(p1, q2, q1)) - return true; - // p2, q2 and p1 are colinear and p1 lies on segment p2q2 - if (o3 === 0 && onSegment(p2, p1, q2)) - return true; - // p2, q2 and q1 are colinear and q1 lies on segment p2q2 - if (o4 === 0 && onSegment(p2, q1, q2)) - return true; - return false; // Doesn't fall in any of the above cases -} - -function SplineConver2Polyline(spl, tolerance = 0.1) { - let cu = spl.Shape; - let cacheParam = new Map(); - let cacheTange = new Map(); - const GetPointAtParam = (param) => { - let p = cacheParam.get(param); - if (p) - return p; - p = cu.getPoint(param); - cacheParam.set(param, p); - return p; - }; - const GetTangentAtParam = (param) => { - let t = cacheTange.get(param); - if (t) - return t; - if (equaln$1(param, 1)) { - if (spl.CloseMark) - t = cu.getPoint(1e-4).sub(GetPointAtParam(param)).normalize(); - else - t = GetPointAtParam(param).clone().sub(cu.getPoint(1 - 1e-4)).normalize(); - } - else - t = cu.getPoint(param + 1e-4).sub(GetPointAtParam(param)).normalize(); - cacheTange.set(param, t); - return t; - }; - let count = spl.EndParam; - let stepx = 1 / count; - let curves = []; - for (let i = 0; i < 1;) { - let step = 0.25 * stepx; //0.5的时候也可以有不错的收敛,但是在0.25的时候会有比较贴合的效果 - while (true) { - let param1 = i; - let param2 = Math.min(1, i + step); - let x = param2 - param1; - let midp1 = GetPointAtParam(param1 + x * 0.25); - let midp2 = GetPointAtParam(param1 + x * 0.75); - let p1 = GetPointAtParam(param1); - let p2 = GetPointAtParam(param2); - let t1 = GetTangentAtParam(param1); - let t2 = GetTangentAtParam(param2); - let [c1, c2] = ComputeBiarc(p1, p2, t1, t2); - // TestDraw(new Point(midp1)); - // TestDraw(new Point(midp2)); - // TestDraw(new Point(c1.GetPointAtParam(0.5))); - // TestDraw(new Point(c2.GetPointAtParam(0.5))); - if (c1.GetClosestPointTo(midp1, false).distanceTo(midp1) < tolerance && - c2.GetClosestPointTo(midp2, false).distanceTo(midp2) < tolerance) { - curves.push(c1, c2); - break; - } - else - step = step * 0.5; - } - i += step; - } - let polyline = Polyline.Combine(curves, 1e-3); - polyline.ApplyMatrix(spl.OCSNoClone); - polyline.ColorIndex = spl.ColorIndex; - return polyline; -} -//传入的一定是碎点,不是碎点,没有6个点请不要进来 -function PointsSimplify2Polyline(pts, tolerance = 0.1) { - let tolSq = tolerance * tolerance; - let cacheTange = new Map(); - let ptsCount = pts.length; - const GetIndexAtParam = (param) => { - if (param === 1) - return pts.length - 1; - return Math.floor(ptsCount * param); - }; - const GetPointAtParam = (param) => { - return pts[GetIndexAtParam(param)]; - }; - const GetTangentAtParam = (param) => { - let t = cacheTange.get(param); - if (t) - return t; - let index = Math.floor(ptsCount * param); - if (equaln$1(param, 1) || index + 1 >= pts.length) - t = arrayLast(pts).clone().sub(pts[pts.length - 1]).normalize(); - else - t = pts[index + 1].clone().sub(pts[index]).normalize(); - cacheTange.set(param, t); - return t; - }; - let stepx = 1; - let curves = []; - for (let i = 0; i < 1;) { - let step = 0.25 * stepx; //0.5的时候也可以有不错的收敛,但是在0.25的时候会有比较贴合的效果 - while (true) { - let param1 = i; - let param2 = Math.min(1, i + step); - let index1 = GetIndexAtParam(param1); - let index2 = GetIndexAtParam(param2); - if ((index2 - index1) < 4) //当点个数等于4时,我们计算双圆弧插值必然成功.(但是也失去了意义) - { - if (index2 - index1 > 0) { - let lineD = []; - for (let i = index1; i <= index2; i++) - lineD.push({ pt: AsVector2(pts[i]), bul: 0 }); - curves.push(new Polyline(lineD)); - } - break; - } - let x = param2 - param1; - let midp1 = GetPointAtParam(param1 + x * 0.25); - let midp2 = GetPointAtParam(param1 + x * 0.75); - let p1 = pts[index1]; - let p2 = pts[index2]; - let t1 = GetTangentAtParam(param1); - let t2 = GetTangentAtParam(param2); - let [c1, c2] = ComputeBiarc(p1, p2, t1, t2); - if (c1.GetClosestPointTo(midp1, false).distanceToSquared(midp1) < tolSq && - c2.GetClosestPointTo(midp2, false).distanceToSquared(midp2) < tolSq) { - curves.push(c1, c2); - break; - } - else - step = step * 0.5; - } - i += step; - } - let polyline = Polyline.Combine(curves, 1e-3); - return polyline; -} -/** - * 将碎点简化为多段线,(尝试转换为简单圆弧,或者使用双圆弧插值) - * @param pts 点表 - * @param [tolerance=0.1] 容差 - * @param [parseArc=true] 解析成简单圆弧 - * @param [lineLengthSq=2000] - * @returns 多段线 - */ -function PointsSimplify2PolylineAndParseArc(pts, buls = undefined, tolerance = 0.1, parseArc = true, lineLengthSq = 2000) { - let tolSq = tolerance * tolerance; - let ptsCount = pts.length; - const CreateLineOrArc = (startIndex, endIndex) => { - if (!buls || equaln$1(buls[startIndex], 0, 1e-4)) - return new Line(AsVector3(pts[startIndex]), AsVector3(pts[endIndex])); - else - return new Arc().ParseFromBul(AsVector3(pts[startIndex]), AsVector3(pts[endIndex]), buls[startIndex]); - }; - let retPolyline = new Polyline; - let start = 0; - for (let next = start + 1; next <= ptsCount; next++) { - if (next === ptsCount || pts[next].distanceToSquared(pts[next - 1]) > lineLengthSq || (buls && !equaln$1(buls[next - 1], 0, 1e-4))) //长度大于50,我们才认为它是一条直线 - { - //1.将start->next-1部分组成圆弧 - if (parseArc || (next - start) < 6) - while (start < next - 1) { - if ((next - 1) - start === 1) //直线 - { - retPolyline.Join(CreateLineOrArc(start, next - 1)); - break; - } - //第一个三角形的方向 - let firstDir = orientation(pts[start], pts[start + 1], pts[start + 2]); - let to = start; - for (; to + 3 < next; to++) { - let dir = orientation(pts[to + 1], pts[to + 2], pts[to + 3]); - if (dir !== firstDir) - break; - } - if (start === to) //三个点 - { - retPolyline.Join(CreateLineOrArc(start, start + 1)); - retPolyline.Join(CreateLineOrArc(start + 1, start + 2)); - start = to + 2; - continue; - } - else if ((to - start) < 3) { - retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, to + 2 + 1).map(AsVector3))); - } - else { - let sp = pts[start]; - let ep = pts[to + 2]; - let mp = pts[Math.floor((start + to + 2) / 2)]; - let arc = new Arc().FromThreePoint(AsVector3(sp), AsVector3(mp), AsVector3(ep)); - let c = to + 2 - start; - let p1 = AsVector3(pts[start + Math.floor(c * 0.25)]); - let p2 = AsVector3(pts[start + Math.floor(c * 0.75)]); - if (arc.GetClosestPointTo(p1, false).distanceToSquared(p1) < tolSq - && arc.GetClosestPointTo(p2, false).distanceToSquared(p2) < tolSq) - retPolyline.Join(arc); - else - retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, to + 2 + 1).map(AsVector3))); - } - start = to + 2; //闪烁到圆弧终点 - if (start === next - 2) { - retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, next).map(AsVector3))); - start = next; - break; - } - } - else - retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, next).map(AsVector3))); - //2.加入直线 - if (next !== ptsCount) - retPolyline.Join(CreateLineOrArc(next - 1, next)); - start = next; - } - } - return retPolyline; -} -function SmartPointsSimply2Polyline(pts, buls = undefined, tolerance = 0.1, lineLengthSq = 2000) { - let pl1 = PointsSimplify2PolylineAndParseArc(pts, buls, tolerance, true, lineLengthSq); - let pl2 = PointsSimplify2PolylineAndParseArc(pts, buls, tolerance, false, lineLengthSq); - if (pl1.EndParam < pl2.EndParam) - return pl1; - else - return pl2; -} -/** - * 简化多段线,返回结果比较好的多段线 - * @param pl - * @param [tolerance=0.1] - * @param [lineLengthSq=2000] - * @returns 返回undefined时,简化失败 - */ -function SmartPolylineSimply2Polyline(pl, tolerance = 0.1, lineLengthSq = 2000) { - if (pl.EndParam < 3) - return; - let ld = pl.LineData; - let pts = [ld[0].pt]; - let buls = [ld[0].bul]; - let prep = pts[0]; - for (let i = 1; i < ld.length; i++) { - let d = ld[i]; - let p = d.pt; - if (!equalv2(p, prep, 1e-3)) { - pts.push(p); - buls.push(d.bul); - prep = p; - } - } - if (pl.CloseMark && !equalv2(pts[0], arrayLast(pts))) - pts.push(pts[0].clone()); - let npl = SmartPointsSimply2Polyline(pts, pl.LineData.map(p => p.bul), tolerance, lineLengthSq); - npl.ApplyMatrix(pl.OCSNoClone); - npl.ColorIndex = pl.ColorIndex; - return npl; -} -//types -function Vec2(x, y) { - this.x = x; - this.y = y; -} -let c_Epsilon = 0.0001; -// math functions -function Sqr(val) { - return val * val; -} -function IsEqualEps(lhs, rhs) { - return Math.abs(lhs - rhs) <= c_Epsilon; -} -function Vec2_Add(lhs, rhs) { - return new Vec2(lhs.x + rhs.x, lhs.y + rhs.y); -} -function Vec2_Sub(lhs, rhs) { - return new Vec2(lhs.x - rhs.x, lhs.y - rhs.y); -} -function Vec2_Scale(lhs, scale) { - return new Vec2(lhs.x * scale, lhs.y * scale); -} -function Vec2_AddScaled(lhs, rhs, scale) { - return new Vec2(lhs.x + rhs.x * scale, lhs.y + rhs.y * scale); -} -function Vec2_Dot(lhs, rhs) { - return lhs.x * rhs.x + lhs.y * rhs.y; -} -function Vec2_MagSqr(val) { - return val.x * val.x + val.y * val.y; -} -function CreateArcFromEdge(p1, t1, p2, fromP1) { - let chord = Vec2_Sub(p2, p1); - let n1 = new Vec2(-t1.y, t1.x); - let chordDotN1 = Vec2_Dot(chord, n1); - if (IsEqualEps(chordDotN1, 0)) - return new Line(AsVector3(p1), AsVector3(p2)); - else { - let radius = Vec2_MagSqr(chord) / (2 * chordDotN1); - let center = Vec2_AddScaled(p1, n1, radius); - let p1Offset = Vec2_Sub(p1, center); - let p2Offset = Vec2_Sub(p2, center); - let p1Ang1 = Math.atan2(p1Offset.y, p1Offset.x); - let p2Ang1 = Math.atan2(p2Offset.y, p2Offset.x); - if (p1Offset.x * t1.y - p1Offset.y * t1.x > 0) - return new Arc(AsVector3(center), Math.abs(radius), p1Ang1, p2Ang1, !fromP1); - else - return new Arc(AsVector3(center), Math.abs(radius), p1Ang1, p2Ang1, fromP1); - } -} -/** - * 计算双圆弧插值的圆弧 - * @param p1 起点 - * @param p2 终点 - * @param t1 起点切线 - * @param t2 终点切线 - * @returns 两个圆弧(或者其中一个是直线) - */ -function ComputeBiarc(p1, p2, t1, t2) { - let v = Vec2_Sub(p2, p1); - let vMagSqr = Vec2_MagSqr(v); - let vDotT1 = Vec2_Dot(v, t1); - { - let t = Vec2_Add(t1, t2); - let tMagSqr = Vec2_MagSqr(t); - let equalTangents = IsEqualEps(tMagSqr, 4.0); - let perpT1 = IsEqualEps(vDotT1, 0.0); - if (equalTangents && perpT1) //2个半圆 - { - let angle = Math.atan2(v.y, v.x); - let center1 = Vec2_AddScaled(p1, v, 0.25); - let center2 = Vec2_AddScaled(p1, v, 0.75); - let radius = Math.sqrt(vMagSqr) * 0.25; - let cross = v.x * t1.y - v.y * t1.x; - return [ - new Arc(AsVector3(center1), radius, angle, angle + Math.PI, cross < 0), - new Arc(AsVector3(center2), radius, angle, angle + Math.PI, cross > 0) - ]; - } - else { - let vDotT = Vec2_Dot(v, t); - let d1; - if (equalTangents) - d1 = vMagSqr / (4 * vDotT1); - else { - let denominator = 2 - 2 * Vec2_Dot(t1, t2); - let discriminant = Sqr(vDotT) + denominator * vMagSqr; - d1 = (Math.sqrt(discriminant) - vDotT) / denominator; - } - let joint = Vec2_Scale(Vec2_Sub(t1, t2), d1); - joint = Vec2_Add(joint, p1); - joint = Vec2_Add(joint, p2); - joint = Vec2_Scale(joint, 0.5); - return [ - CreateArcFromEdge(p1, t1, joint, true), - CreateArcFromEdge(p2, t2, joint, false) - ]; - } - } -} - -var Spline_1; -const DrawSplitCount = 120; -let Spline = Spline_1 = class Spline extends Curve { - constructor(_PointList = []) { - super(); - this._PointList = _PointList; - this._ClosedMark = false; - } - get Shape() { - return new CatmullRomCurve3(this.Points, this._ClosedMark); - } - get Length() { - //TODO:这个的性能挺低的(因为还需要重新获取一遍点表(如果我们有绘制对象,应该用绘制对象的点表来计算长度)) - return this.Shape.getLength(); - } - get Points() { - return this._PointList; - } - set Points(pts) { - if (pts.length < 2) - return; - this.WriteAllObjectRecord(); - let ocsInv = this.OCSInv; - this._PointList = pts.map(p => p.clone().applyMatrix4(ocsInv)); - if (pts.length > 2 && equalv3(this._PointList[0], arrayLast(this._PointList), 1e-3)) { - this._PointList.pop(); - this._ClosedMark = true; - } - this.Update(); - } - //闭合标志 - get CloseMark() { - return this._ClosedMark; - } - //曲线是否闭合 - get IsClose() { - return this.CloseMark || (equalv3(this.StartPoint, this.EndPoint, 1e-4)) && this.EndParam > 1; - } - set CloseMark(v) { - if (this._ClosedMark === v) - return; - this.WriteAllObjectRecord(); - this._ClosedMark = v; - this.Update(); - } - get StartPoint() { - return this._PointList[0]; - } - get EndPoint() { - return arrayLast(this._PointList); - } - get StartParam() { - return 0; - } - get EndParam() { - return this._ClosedMark ? this._PointList.length : this._PointList.length - 1; - } - GetClosestPointTo(pt, extend) { - return this.Convert2Polyline().GetClosestPointTo(pt, extend); - } - GetOffsetCurves(offsetDist) { - if (offsetDist === 0) - return []; - let pld = this._PointList.map(p => { - return { pt: AsVector2(p), bul: 0 }; - }); - let pl = new Polyline(pld); - let pls = pl.GetOffsetCurves(offsetDist); - return pls.map(pl => { - let pts = pl.LineData.map(p => AsVector3(p.pt)); - let spl = new Spline_1(pts); - spl.OCS = this._Matrix; - spl._ClosedMark = this._ClosedMark; - return spl; - }); - } - GetGripPoints() { - return this._PointList.map(p => p.clone().applyMatrix4(this.OCSNoClone)); - } - GetStretchPoints() { - return this.GetGripPoints(); - } - MoveGripPoints(indexList, vec) { - vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0)).setZ(0); - this.WriteAllObjectRecord(); - for (let index of indexList) - this._PointList[index].add(vec); - this.Update(); - } - MoveStretchPoints(indexList, vec) { - vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0)).setZ(0); - this.WriteAllObjectRecord(); - for (let index of indexList) - this._PointList[index].add(vec); - this.Update(); - } - GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { - switch (snapMode) { - case ObjectSnapMode.End: - return this.GetStretchPoints(); - case ObjectSnapMode.Mid: - case ObjectSnapMode.Nea: - case ObjectSnapMode.Ext: - case ObjectSnapMode.Cen: - case ObjectSnapMode.Per: - case ObjectSnapMode.Tan: - } - return []; - } - GetDrawCount() { - return this.EndParam * DrawSplitCount; - } - Convert2Polyline() { - return SplineConver2Polyline(this); - } - _ReadFile(file) { - super._ReadFile(file); - let ver = file.Read(); //1 - let count = file.Read(); - this._PointList.length = 0; - for (let i = 0; i < count; i++) - this._PointList.push(new Vector3().fromArray(file.Read())); - if (ver > 1) - this._ClosedMark = file.Read(); - } - WriteFile(file) { - super.WriteFile(file); - file.Write(2); //ver - file.Write(this._PointList.length); - this._PointList.forEach(p => file.Write(p.toArray())); - file.Write(this._ClosedMark); - } -}; -Spline = Spline_1 = __decorate([ - Factory -], Spline); - -/** - * 简化优化版本的曲线求交, 优化版本可以参考(算法导论33.2 确定任意一对线段是否相交 p599) - */ -class CurveIntersection { - /** - * @param {Curve[]} cus 请注意数组的顺序会被更改,如果你在意数组的顺序,请拷贝数组后传进来 - * @memberof CurveIntersection - */ - constructor(cus, parseIntersectionParam = false, intType = IntersectOption.ExtendNone, fuzz = 1e-6, parseRecord = false) { - this.fuzz = fuzz; - //用来缓存的曲线包围盒 - this.boxMap = new Map(); - /** - * 交点数据集,key 为曲线 value 为和它相交的(曲线和交点的Map) - */ - this.intersect = new Map(); - //交点参数集 - this.intersect2 = new Map(); - this.intersect3 = []; - this.GenBox(cus); - //按x排序 - this.SortCurve(cus); - let count = cus.length; - for (let i = 0; i < count; i++) { - let c1 = cus[i]; - let c1d = this.GetIntersect(c1); - let c1b = this.boxMap.get(c1); - for (let j = i + 1; j < count; j++) { - let c2 = cus[j]; - //过滤掉不需要计算的曲线 - let c2b = this.boxMap.get(c2); - if (c2b.min.x - c1b.max.x > fuzz) - break; - if (c2b.min.y - c1b.max.y > fuzz) - continue; - let ints = this.IntersectWith2(c1, c2, intType); - if (ints.length > 0) { - let pts = ints.map(i => i.pt); - c1d.set(c2, pts); - this.GetIntersect(c2).set(c1, pts); - if (parseRecord) - this.intersect3.push([c1, c2, pts]); - if (parseIntersectionParam) { - this.AppendIntersectionParams(c1, ints.map(i => [i.thisParam, i.pt])); - this.AppendIntersectionParams(c2, ints.map(i => [i.argParam, i.pt])); - } - } - } - } - } - IntersectWith2(c1, c2, intType) { - return c1.IntersectWith2(c2, intType); - } - AppendIntersectionParams(curve, params) { - let arr = this.intersect2.get(curve); - if (!arr) { - arr = []; - this.intersect2.set(curve, arr); - } - arrayPushArray$1(arr, params); - } - GenBox(cus) { - for (let c of cus) - this.boxMap.set(c, c.BoundingBox); - } - SortCurve(cus) { - cus.sort((c1, c2) => { - return this.boxMap.get(c1).min.x - this.boxMap.get(c2).min.x; - }); - } - GetIntersect(cu) { - if (this.intersect.has(cu)) - return this.intersect.get(cu); - let m = new Map(); - this.intersect.set(cu, m); - return m; - } -} -class CurveIntersection2 extends CurveIntersection { - /** - * Curve2Polyline使用这个时,为了避免多余的交点导致曲线切割过度,过滤掉无关的点 - */ - IntersectWith2(c1, c2, intType) { - let pts = c1.IntersectWith2(c2, intType); - return pts.filter(p => { - let inC1 = c1.ParamOnCurve(p.thisParam) || (p.thisParam < 0 ? c1.StartPoint.distanceTo(p.pt) < this.fuzz : c1.EndPoint.distanceTo(p.pt) < this.fuzz); - if (!inC1) - return false; - let inC2 = c2.ParamOnCurve(p.argParam) || (p.argParam < 0 ? c2.StartPoint.distanceTo(p.pt) < this.fuzz : c2.EndPoint.distanceTo(p.pt) < this.fuzz); - return inC2; - }); - } -} - -/** - * 曲线连接图 - * 所有的顶点和边的关系 - */ -class CurveMap { - constructor(numdimensions = 4, _RemoveSortLine = false, multiplier = 10 ** numdimensions) { - this.numdimensions = numdimensions; - this._RemoveSortLine = _RemoveSortLine; - this.multiplier = multiplier; - /* - 节点图. - 每个节点对应下一个路口的路线表. - 路口表使用逆时针排序,起始角度使用正x轴. - */ - this._VerticeMap = new Map(); - this._Vertices = []; - this._LookupTable = {}; - } - /** - * 得到节点图的所有站点列表 - */ - get Stands() { - return this._Vertices; - } - /** - * @param curve - * @param [isArc=curve instanceof Arc] - * @param [removeDuplicate=false] - * @returns 加入成功? - */ - AddCurveToMap(curve, isArc = curve instanceof Arc, removeDuplicate = false, parseAngle = false) { - let sp = curve.StartPoint; - let ep = curve.EndPoint; - let startS = this.GetOnlyVertice(sp); - let endS = this.GetOnlyVertice(ep); - //在面域分析中,路线指向同一个顶点已经没有意义了 - if (this._RemoveSortLine && startS === endS) - return false; - if (removeDuplicate) //删除重复 - { - let index = startS.routes.findIndex(r => { - if (r.to === endS && r.curve.constructor.name === curve.constructor.name) { - if (isArc) - return equalv3(curve.GetPointAtParam(0.5), r.curve.GetPointAtParam(0.5)); - return true; - } - }); - if (index !== -1) - return false; - } - let length = curve.Length; - curve.TempData = 0; - let routeS2E = { curve, isReverse: false, length, from: startS, to: endS, s: sp, e: ep }; - let routeE2S = { curve, isReverse: true, length, from: endS, to: startS, e: sp, s: ep }; - if (!isArc && parseAngle) { - let an = angle(endS.position.clone().sub(startS.position)); - routeS2E.an = an; - routeE2S.an = clampRad(an + Math.PI); - } - startS.routes.push(routeS2E); - endS.routes.push(routeE2S); - return true; - } - /** - * 获得唯一的顶点 - */ - GetOnlyVertice(p) { - let gp = this.GenerateP(p); - if (this._VerticeMap.has(gp)) - return this._VerticeMap.get(gp); - let vertice = { position: gp, routes: [] }; - this._VerticeMap.set(p, vertice); - this._Vertices.push(vertice); - return vertice; - } - /** - * 生成一个唯一的向量. - */ - GenerateP(p) { - let key = ""; - let els = p.toArray(); - for (let n of els) { - let valueQuantized = Math.round(n * this.multiplier); - key += valueQuantized + '/'; - } - if (key in this._LookupTable) - return this._LookupTable[key]; - let hashparts = els.map((el) => { - let q0 = Math.floor(el * this.multiplier); - let q1 = q0 + 1; - return ['' + q0 + '/', '' + q1 + '/']; - }); - let numelements = els.length; - let numhashes = 1 << numelements; - for (let hashmask = 0; hashmask < numhashes; ++hashmask) { - let hashmaskShifted = hashmask; - key = ''; - for (let hashpart of hashparts) { - key += hashpart[hashmaskShifted & 1]; - hashmaskShifted >>= 1; - } - this._LookupTable[key] = p; - } - return p; - } -} - -const _overlap_ = "_overlap_"; -/** -面域分析,基于最小循环图重新实现的版本,拓展了实现求最大轮廓。 -当最大轮廓=最小轮廓时,只绘制最大轮廓(独立轮廓无分裂)。 - -算法只实现去重模式,业务场景应该没有非去重模式。 -如果需要非去重模式,那么应该获取到多个CurveMap,然后对多个CurveMap进行面域分析,得出多个重叠的面域。 - */ -class RegionParse { - /** - * @param cuList 请不要传递圆和椭圆. - * @param [numDimensions=3] 精度:小数点后个数 - * @param [removeDuplicate=true] 删除重复(现在必须是true,请不要修改它) - */ - constructor(cuList, numDimensions = 3, removeDuplicate = true) { - this.numDimensions = numDimensions; - this.removeDuplicate = removeDuplicate; - //区域列表 通常是外轮廓 - this.RegionsOutline = []; //外轮廓和内轮廓重叠时,只有外轮廓有数据,可以使用RegionParse.RegionsIsOverlap来取得 - //区域列表 通常是内轮廓 - this.RegionsInternal = []; - //碎线 曲线进入到这里会被炸开. - this.ExpLineMap = new Map(); - //需要搜索的站 - let vertices = this.GenerateVerticeMap(cuList); - //移除细丝 - while (true) { - let v = vertices.find(v => v.routes.length < 2); - if (v) - this.RemoveFilamentAt(v, vertices); - else - break; - } - let lowerVertice; - while (vertices.length > 0) { - lowerVertice = lowerVertice?.routes.length > 1 ? lowerVertice : this.FindLowerLeftStand(vertices); - let minWalk = ClosedWalkFrom(lowerVertice, this._CurveCount, WalkType.Min); - let maxWalk = ClosedWalkFrom(lowerVertice, this._CurveCount, WalkType.Max); - this.RemoveEdge(minWalk[0]); - this.RemoveFilamentAt(minWalk[0].from, vertices); - this.RemoveFilamentAt(minWalk[0].to, vertices); - minWalk = ReduceWalk(minWalk); - maxWalk = ReduceWalk(maxWalk); - if (maxWalk.length > 1) { - this.RegionsOutline.push(maxWalk); - if (minWalk.length === maxWalk.length && minWalk.every((w1, index) => w1 === maxWalk[index])) //大小重叠 - { - //直接remove,不用计算引用个数 - for (let w of minWalk) { - w.curve.TempData = 2; - this.RemoveEdge(w); - this.RemoveFilamentAt(w.from, vertices); - this.RemoveFilamentAt(w.to, vertices); - } - maxWalk[_overlap_] = true; - continue; //继续循环 - } - else - for (let w of maxWalk) - w.curve.TempData = 1; - } - if (minWalk.length > 1) // && minWalk.every(w => (w.curve.TempData) < 2) 没有重复线应该不会被用2次 - { - this.RegionsInternal.push(minWalk); - for (let w of minWalk) { - w.curve.TempData++; - if (w.curve.TempData === 2) { - this.RemoveEdge(w); - this.RemoveFilamentAt(w.from, vertices); - this.RemoveFilamentAt(w.to, vertices); - } - } - } - } - } - //大小圈重叠 - static RegionsIsOverlap(Route) { - return Boolean(Route[_overlap_]); - } - RemoveFilamentAt(v, vertices) { - let current = v; - while (current && current.routes.length < 2) { - vertices = arrayRemoveOnce(vertices, current); - let r = current.routes[0]; - if (r) { - this.RemoveEdge(r); - current = r.to; - } - else - current = undefined; - } - } - RemoveEdge(r) { - let index = r.from.routes.findIndex(rr => rr.curve === r.curve); - if (index !== -1) - r.from.routes.splice(index, 1); - index = r.to.routes.findIndex(rr => rr.curve === r.curve); - if (index !== -1) - r.to.routes.splice(index, 1); - } - /** - * 找到最下方并且最左边的站 yx - */ - FindLowerLeftStand(vertices) { - return vertices.reduce((m, v) => { - let dy = v.position.y - m.position.y; - if (dy < 0) - return v; - if (dy > 0) - return m; - return v.position.x - m.position.x < 0 ? v : m; - }); - } - /** - * 构造路线图. 每个节点对应下一个路口的路线表. 路口表使用逆时针排序,起始角度使用正x轴. - * @returns 所有的顶点 - */ - GenerateVerticeMap(curveList) { - let curveMap = new CurveMap(this.numDimensions, true); - //将多段线炸开 - let plcus = []; - arrayRemoveIf(curveList, c => { - if (c instanceof Polyline) { - let cus = c.Explode(); - //如果为圆弧,提前打断 - let arcs = []; - arrayRemoveIf(cus, c => { - if (c.Length < 1e-5) - return true; - if (c instanceof Arc) { - let arcBrs = this.BreakArc(c); - for (let arc of arcBrs) - arcs.push(arc); - } - return false; - }); - //加入到计算 - cus.push(...arcs); - this.ExpLineMap.set(c, cus); - plcus.push(...cus); - return true; - } - return false; - }); - curveList.push(...plcus); - this._CurveCount = curveList.length; - for (let cu of curveList) { - //由于圆弧可能导致最低点计算错误的问题. - if (cu instanceof Arc) { - let arcs = this.BreakArc(cu); - if (arcs.length > 1) { - arcs.forEach(a => curveMap.AddCurveToMap(a, true, this.removeDuplicate, true)); - this.ExpLineMap.set(cu, arcs); - continue; - } - else - curveMap.AddCurveToMap(cu, true, this.removeDuplicate, true); - } - else - curveMap.AddCurveToMap(cu, false, this.removeDuplicate, true); - } - //排序,根据角度逆时针排序. - for (let v of curveMap._Vertices) { - let minLength = Infinity; - for (let r of v.routes) - if (r.length < minLength) - minLength = r.length; - for (let r of v.routes) - CalcRouteAngle(r, minLength * 0.2); - v.routes.sort((r1, r2) => r1.an - r2.an); - } - return curveMap.Stands; - } - BreakArc(arc) { - let underPt = arc.Center.add(new Vector3(0, -arc.Radius)); - let param = arc.GetParamAtPoint(underPt); - if (param > 1e-4 && param < 0.9999) - return arc.GetSplitCurves(param); - else - return [arc]; - } - /** - * 曲线是否已经被算法使用 - */ - GetCueveUsed(cu) { - if (this.ExpLineMap.has(cu)) { - let use = this.ExpLineMap.get(cu).some(c => c.TempData > 0); - if (!use) - this.ExpLineMap.delete(cu); - return use; - } - else - return cu.TempData > 0; - } -} -function CalcRouteAngle(r, length) { - if (r.an !== undefined) - return; - let cu = r.curve; - let p = r.isReverse ? - cu.GetPointAtParam(cu.GetParamAtDist(r.length - length)) - : cu.GetPointAtParam(cu.GetParamAtDist(length)); - r.an = angle(p.sub(r.from.position)); -} -var WalkType; -(function (WalkType) { - WalkType[WalkType["Min"] = 1] = "Min"; - WalkType[WalkType["Max"] = -1] = "Max"; -})(WalkType || (WalkType = {})); -function ClosedWalkFrom(startVertice, maxRoute, type = WalkType.Min) { - let walk = []; - let curVertice = startVertice; - let preRoute; - // console.log("start", type, startVertice.position.toArray()); - do { - let route = GetNextRoute(curVertice, preRoute, type); - if (type === WalkType.Max && route.curve.TempData > 0) - return []; - // console.log(route.to.position.toArray()); - walk.push(route); - [curVertice, preRoute] = [route.to, route]; - if (walk.length > maxRoute * 2) - throw "超过计算次数限制"; - } while (curVertice !== startVertice); - return walk; -} -/** - * 删除中途回路 - */ -function ReduceWalk(w) { - if (w.length === 0) - return w; - //未构成回路,直接回家 - if (w[0].curve === arrayLast(w).curve) - return []; - for (let i = 0; i < w.length; i++) { - let r1 = w[i]; - for (let j = w.length; j--;) { - if (i === j) - break; - let r2 = w[j]; - if (r1.to === r2.to) { - if (j > i) - w.splice(i + 1, j - i); - break; - } - } - } - return w; -} -function GetNextRoute(v, prev, type = WalkType.Min) { - if (!prev) - return arrayLast(v.routes); //顺时针 cw \|/ 从左往右 - //逆时针 ccw 往左 - let index = v.routes.findIndex(r => r.curve === prev.curve); - let newIndex = FixIndex$1(index + 1 * type, v.routes); - return v.routes[newIndex]; -} - -/** - * 某些时候我们不能创建轮廓,此时我们使用类似c2r的方法来构建一个外部轮廓. - */ -function CreateContours(curves, fuzz = 1e-4) { - let contours = []; - let extendsMinDistSq = fuzz * fuzz; - //炸开多段线(防止自交多段线) - let newCurves = []; - for (let cu of curves) { - if (cu instanceof Circle) - contours.push(Contour.CreateContour(cu.Clone())); //避免将原始曲线传递给板,导致撤销这个圆失败 - else if (cu instanceof Polyline) - arrayPushArray$1(newCurves, cu.Explode()); - else if (cu instanceof Spline) { - let pl = cu.Convert2Polyline(); - if (pl.IsClose) - contours.push(Contour.CreateContour(pl, false)); - else - newCurves.push(pl); - } - else if (cu instanceof Ellipse) - Contour.CreateContour(cu.Convert2Polyline(), false); - else - newCurves.push(cu); - } - let intersect = new CurveIntersection2(newCurves, false, IntersectOption.ExtendBoth, fuzz); - let curves2 = []; - //延伸+打断 - for (let [cu, pmap] of intersect.intersect) { - let sp = cu.StartPoint; - let ep = cu.EndPoint; - let epExtend; - let epDist = Infinity; - let spExtend; - let spDist = Infinity; - let isClose = cu.IsClose; - let ipts = []; - for (let [, pts] of pmap) { - arrayPushArray$1(ipts, pts); - if (!isClose) - for (let p of pts) { - let d = p.distanceToSquared(ep); - if (d < epDist) { - epDist = d; - epExtend = p; - } - d = p.distanceToSquared(sp); - if (d < spDist) { - spDist = d; - spExtend = p; - } - } - } - if (!isClose) { - //延伸 - if (epDist > 0 && epDist < extendsMinDistSq) { - let param = cu.GetParamAtPoint(epExtend); - if (param > cu.EndParam) - cu.Extend(param); - } - if (spDist > 0 && spDist < extendsMinDistSq) { - let param = cu.GetParamAtPoint(spExtend); - if (param < 0) - cu.Extend(param); - } - } - //打断 - let curves; - if (ipts.length > 0) - curves = cu.GetSplitCurvesByPts(ipts); - else - curves = [cu]; - let tempCus = []; - for (let c of curves) { - if (c instanceof Polyline) - arrayPushArray$1(tempCus, c.Explode()); - else - tempCus.push(c); - } - arrayPushArray$1(curves2, tempCus); - } - let parse = new RegionParse(curves2); - for (let rs of parse.RegionsOutline) { - let curves = rs.map(r => r.curve); - let contour = Contour.CreateContour(curves, false); - if (contour) - contours.push(contour); - } - return contours; -} -function CreateContour2(curves, fuzz = 1e-4) { - return CreateContours(curves, fuzz)[0]; -} - -var BoolOpeartionType; -(function (BoolOpeartionType) { - BoolOpeartionType[BoolOpeartionType["Intersection"] = 0] = "Intersection"; - BoolOpeartionType[BoolOpeartionType["Union"] = 1] = "Union"; - BoolOpeartionType[BoolOpeartionType["Subtract"] = 2] = "Subtract"; -})(BoolOpeartionType || (BoolOpeartionType = {})); -const fuzz = 1e-3; -let fuzzV3 = new Vector3(fuzz, fuzz, fuzz); -//判断小曲线是不是被大曲线包含(或者重叠?) -function isTargetCurInOrOnSourceCur(bigCurve, smallCurve) { - //#fix fileid 2087494 使用二维的box来计算看起来没有问题 - if (!Box2$1.prototype.containsBox.apply(bigCurve.BoundingBox.expandByVector(fuzzV3), [smallCurve.BoundingBox])) - return false; - let cus = []; - if (smallCurve instanceof Polyline) - cus = smallCurve.Explode(); - else - cus = [smallCurve]; - return cus.every(c => { - let pts = getIntPtContextPts(bigCurve, c); - if (pts.length <= 1) - pts.push(c.StartPoint, c.EndPoint); - return IsPtsAllInOrOnReg(bigCurve, pts); - }); -} -//获取交点处上下距0.01par的点 -function getIntPtContextPts(sourceCur, cu, pts = []) { - let interPts = cu.IntersectWith(sourceCur, IntersectOption.ExtendNone); - if (interPts.length > 0) { - let pars = interPts.map(pt => cu.GetParamAtPoint(pt)); - for (let par of pars) { - if (par >= 0.02) - pts.push(cu.GetPointAtParam(par - 0.01)); - if (par <= (cu.EndParam - 0.02)) - pts.push(cu.GetPointAtParam(par + 0.01)); - } - } - return pts; -} -//判断点点是否全部都在封闭区域内或者在曲线上 -function IsPtsAllInOrOnReg(sourceReg, pts) { - return pts.every(pt => { - //是否点在封闭曲线内 - return sourceReg.PtOnCurve(pt) || sourceReg.PtInCurve(pt); - }); -} -//判断点是否全部都在封闭区域外或者在曲线上 -function IsPtsAllOutOrOnReg(sourceReg, pts) { - return pts.every(pt => { - //是否点在封闭曲线内 - return sourceReg.PtOnCurve(pt) || !sourceReg.PtInCurve(pt); - }); -} - -let cache$1 = new WeakMap(); -const COMBINE_FUZZ = 1e-2; -class Contour { - SetCurve(cu) { - if (cu instanceof Polyline) { - if (cu.Area2 < 0) - cu.Reverse(); - } - this._Curve = cu; - } - /**会将传入的闭合轮廓改为逆时针 */ - static CreateContour(cus, needLink = true) { - if (cus instanceof Curve) { - if (cus.IsClose) { - let c = new Contour(); - c.SetCurve(cus); - return c; - } - return; - } - let closeCurve = Contour.Combine(cus, needLink, COMBINE_FUZZ); - if (closeCurve && closeCurve.IsClose) { - if (closeCurve instanceof Polyline && closeCurve.CloseMark === false) { - closeCurve.CloseMark = true; - closeCurve.RemoveVertexAt(closeCurve.NumberOfVertices - 1); - } - let c = new Contour(); - c.SetCurve(closeCurve); - return c; - } - } - get Curve() { - return this._Curve; - } - get Area() { - return this._Curve.Area; - } - get BoundingBox() { - return this._Curve.BoundingBox; - } - /** - * 不等比例缩放 - * @param {number} ref 缩放参考值,大于该值的点缩放 - * @param {number} dist 缩放距离 - * @param {string} dir x y z - */ - UnEqualProportionScale(ref, dist, dir) { - let cu = this._Curve; - if (cu instanceof Polyline) { - let lineData = cu.LineData; - let length = lineData.length; - let p = cu.Position[dir]; - let moveIndexs = []; - for (let i = 0; i < length; i++) { - if (lineData[i].pt[dir] + p > ref) - moveIndexs.push(i); - } - let moveVec = new Vector3(); - moveVec[dir] = dist; - cu.MoveStretchPoints(moveIndexs, moveVec); - return true; - } - return false; - } - Clone() { - return Contour.CreateContour([this._Curve.Clone()]); - } - //交集:结果数组为空则失败 - IntersectionBoolOperation(target) { - if (!IntersectBox2(this.BoundingBox, target.BoundingBox)) - return []; - let resultCus = this.GetIntersetAndUnionList(target); - return Contour.GetAllContour(resultCus.intersectionList); - } - //并集:结果轮廓数组长度大于2,则失败.等于1则成功. - UnionBoolOperation(target) { - let resultCus = this.GetIntersetAndUnionList(target); - //快速 - if (resultCus.unionList.every(c => c.IsClose)) - return { - contours: Contour.GetAllContour(resultCus.unionList), - holes: [], - }; - //并集后的线段表如果有共线的直接合并起来 - let cus = []; - for (let pl of resultCus.unionList) { - if (pl instanceof Polyline) - cus.push(...pl.Explode()); - else - cus.push(pl); - } - let cuGroups = curveLinkGroup(cus); - for (let g of cuGroups) { - for (let i = 0; i < g.length; i++) { - let c1 = g[i]; - let nextI = FixIndex$1(i + 1, g); - let c2 = g[nextI]; - let status = c1.Join(c2); - if (status === Status.True) { - g.splice(nextI, 1); - i--; - } - else if (status === Status.ConverToCircle) { - g.length = 0; - let a = c1; - g.push(new Circle(a.Center, a.Radius)); - break; - } - } - } - let allContour = Contour.GetAllContour(cuGroups); - if (allContour.length < 2) { - return { - contours: allContour, - holes: [], - }; - } - else { - let cache = new WeakMap(); - for (let c of allContour) - cache.set(c, c.Area); - allContour.sort((a, b) => cache.get(b) - cache.get(a)); - return { - contours: [allContour[0]], - holes: allContour.slice(1) - }; - } - } - //差集:等于0完全被减去 - SubstactBoolOperation(target) { - let subtractList = this.GetSubtractList(target); - //纯网洞 - if (subtractList.every(c => c.IsClose)) - return Contour.GetAllContour(subtractList); - let regParse = new RegionParse(subtractList, 2); - let contours = []; - //分析封闭包围区域 - const parseRoute = (routeSet) => { - for (let routes of routeSet) { - let cs = routes.map(r => r.curve); - let c = Contour.CreateContour(cs, false); - if (c - && !equalCurve(c.Curve, this.Curve) - && !equalCurve(c.Curve, target.Curve) - && c.Area > 1e-3) - contours.push(c); - } - }; - parseRoute(regParse.RegionsOutline); - parseRoute(regParse.RegionsInternal); - return contours; - } - /** - * 计算与目标轮廓布尔运算后的结果曲线. - */ - GetIntersetAndUnionList(target) { - //同心圆 - if (this._Curve instanceof Circle && target._Curve instanceof Circle && equalv2(this._Curve.Center, target._Curve.Center, 1e-3)) { - if (this._Curve.Radius > target._Curve.Radius) - return { intersectionList: [target._Curve], unionList: [this._Curve] }; - else - return { intersectionList: [this._Curve], unionList: [target._Curve] }; - } - let intersectionList = []; - let unionList = []; - let sourceOutline = this._Curve; - let targetOutline = target.Curve; - let isEqualNormal = equalv3(sourceOutline.Normal, targetOutline.Normal, 1e-3); - //可能会有提升,但是好像不大(并且还有更慢的趋势) - // if (!sourceOutline.BoundingBox.intersectsBox(targetOutline.BoundingBox, 1e-3)) - // return { intersectionList, unionList }; - let interPts = sourceOutline.IntersectWith2(targetOutline, IntersectOption.ExtendNone, COMBINE_FUZZ); - let sourceContainerTarget; - let targetContainerSource; - if (sourceOutline.Area > targetOutline.Area) { - sourceContainerTarget = CurveContainerCurve(sourceOutline, targetOutline, interPts); - targetContainerSource = false; - } - else { - sourceContainerTarget = false; - targetContainerSource = CurveContainerCurve(targetOutline, sourceOutline, interPts); - } - //包含.相交.分离(三种状态) - if (sourceContainerTarget) //源包含目标 - { - intersectionList.push(targetOutline); - unionList.push(sourceOutline); - } - else if (targetContainerSource) //目标包含源 - { - unionList.push(targetOutline); - intersectionList.push(sourceOutline); - } - else if (interPts.length <= 1) //分离 - { - unionList.push(sourceOutline, targetOutline); - } - else //相交 interPts.length > 0 - { - let pars1 = interPts.map(r => r.thisParam); - let pars2 = interPts.map(r => r.argParam); - let sourceCus = sourceOutline.GetSplitCurves(pars1); - let targetCus = targetOutline.GetSplitCurves(pars2); - for (let pl of sourceCus) { - let hasEqualCus = false; - for (let i = 0; i < targetCus.length; i++) { - let cu = targetCus[i]; - hasEqualCus = fastEqualCurve(cu, pl, COMBINE_FUZZ); - if (hasEqualCus) { - //方向相同 - if (equalv3(cu.GetFirstDeriv(cu.MidParam).normalize(), pl.GetFirstDeriv(pl.MidParam).normalize(), 1e-2) - === isEqualNormal) { - unionList.push(pl); - intersectionList.push(pl); - } - targetCus.splice(i, 1); - break; - } - } - if (hasEqualCus) - continue; - if (fastCurveInCurve(targetOutline, pl)) - intersectionList.push(pl); - else - unionList.push(pl); - } - for (let pl of targetCus) { - if (fastCurveInCurve(sourceOutline, pl)) - intersectionList.push(pl); - else - unionList.push(pl); - } - //特殊的分离 - if (intersectionList.length === 0 && unionList.length === (sourceCus.length + targetCus.length)) { - return { intersectionList, unionList: [sourceOutline, targetOutline] }; - } - } - return { intersectionList, unionList }; - } - GetSubtractList(target) { - let sourceOutline = this._Curve; - let targetOutline = target.Curve; - let isEqualNormal = equalv3(sourceOutline.Normal, targetOutline.Normal, 1e-3); - let interPts = sourceOutline.IntersectWith2(targetOutline, IntersectOption.ExtendNone, COMBINE_FUZZ); - if (interPts.length <= 1) { - let areaState = sourceOutline.Area > targetOutline.Area; - //反包含 - if ((!areaState && fastCurveInCurve2(targetOutline, sourceOutline, interPts[0]?.pt)) || equalCurve(targetOutline, sourceOutline)) - return []; - //包含 - if ((areaState && fastCurveInCurve2(sourceOutline, targetOutline, interPts[0]?.pt))) - return [sourceOutline, targetOutline]; - else //分离 - return [sourceOutline]; - } - //相交 - let subtractList = []; - let sourceCus = sourceOutline.GetSplitCurves(interPts.map(r => r.thisParam)); - let targetCus = targetOutline.GetSplitCurves(interPts.map(r => r.argParam)); - for (let pl of sourceCus) { - let plMidParam = pl.MidParam; - let plDir = pl.GetFirstDeriv(plMidParam).normalize(); - let index = targetCus.findIndex(cu => fastEqualCurve(cu, pl)); - if (index !== -1) { - let cu = targetCus[index]; - let cuMidParam = cu.MidParam; - let cuDir = cu.GetFirstDeriv(cuMidParam).normalize(); - if (isEqualNormal === !equalv3(cuDir, plDir, 1e-3)) //不同向 - subtractList.push(pl); - targetCus.splice(index, 1); - continue; - } - if (!fastCurveInCurve(targetOutline, pl)) - subtractList.push(pl); - } - //源对象没有被破坏 - let sourceNotBreak = subtractList.length === sourceCus.length; - for (let pl of targetCus) - if (fastCurveInCurve(sourceOutline, pl)) - subtractList.push(pl); - if (sourceNotBreak && subtractList.length === sourceCus.length) - return [sourceOutline]; - return subtractList; - } - GetSubtractListByMoreTargets(targets) { - let { holes, subtractList } = this.GetSubListWithCus(targets); - //纯网洞 - if (subtractList.every(c => c.IsClose)) - return { - holes: holes.map(h => Contour.CreateContour(h)), - outlines: Contour.GetAllContour(subtractList) - }; - let regParse = new RegionParse(subtractList, 2); - let contours = []; - //分析封闭包围区域 - const parseRoute = (routeSet) => { - for (let routes of routeSet) { - let cs = routes.map(r => r.curve); - let c = Contour.CreateContour(cs, false) ?? CreateContour2(cs); - if (c - && !equalCurve(c.Curve, this.Curve) - && targets.every(target => !equalCurve(c.Curve, target.Curve)) - && c.Area > 1e-3) - contours.push(c); - } - }; - parseRoute(regParse.RegionsOutline); - parseRoute(regParse.RegionsInternal); - return { - holes: holes.map(h => Contour.CreateContour(h)), - outlines: contours - }; - } - GetSubListWithCus(targets) { - let sourceOutline = this._Curve; - let subtractList = []; - let holes = []; - let intPars = []; - let curveIntParamsMap = new Map(); - let outBox = sourceOutline.BoundingBox; - for (let con of targets) { - const targetOutline = con.Curve; - if (!IntersectBox2(outBox, targetOutline.BoundingBox)) - continue; - let pts = sourceOutline.IntersectWith2(con.Curve, IntersectOption.ExtendNone, COMBINE_FUZZ); - if (pts.length <= 1) { - let areaState = sourceOutline.Area > targetOutline.Area; - //反包含 - if ((!areaState && fastCurveInCurve2(targetOutline, sourceOutline, pts[0]?.pt)) || equalCurve(targetOutline, sourceOutline)) - return { holes, subtractList }; - //包含 - if (areaState && fastCurveInCurve2(sourceOutline, targetOutline, pts[0]?.pt)) - holes.push(targetOutline); - } - else { - intPars.push(...pts.map(r => r.thisParam)); - curveIntParamsMap.set(targetOutline, pts.map(r => r.argParam)); - } - } - let sourceSplitCurves = sourceOutline.GetSplitCurves(intPars); - let targetSplitCurves = []; - let targetSplitCurve_CurvesMap = new WeakMap(); //分裂后->原始曲线 映射 - for (let [curve, intParams] of curveIntParamsMap) { - let splitCurves = curve.GetSplitCurves(intParams); - for (let splitCurve of splitCurves) { - targetSplitCurve_CurvesMap.set(splitCurve, curve); - targetSplitCurves.push(splitCurve); - } - } - for (let sourceSplitcu of sourceSplitCurves) { - let index = targetSplitCurves.findIndex(cu => fastEqualCurve(cu, sourceSplitcu, 0.05)); - if (index !== -1) { - let targetSplitcu = targetSplitCurves[index]; - let isEqualNormal = equalv3(sourceOutline.Normal, targetSplitCurve_CurvesMap.get(targetSplitcu).Normal, 1e-3); - if (isEqualNormal === !equalv3(sourceSplitcu.StartPoint, targetSplitcu.StartPoint, 0.05)) //不同向 - { - subtractList.push(sourceSplitcu); - // TestDraw(sourceSplitcu.Clone(), 1); - // TestDraw(targetSplitcu.Clone(), 1); - } - // else - // TestDraw(sourceSplitcu.Clone(), 2); - targetSplitCurves.splice(index, 1); - continue; - } - if (targets.every(t => !fastCurveInCurve(t.Curve, sourceSplitcu))) - subtractList.push(sourceSplitcu); - } - //源对象没有被破坏 - let sourceNotBreak = subtractList.length === sourceSplitCurves.length; - for (let pl of targetSplitCurves) - if (fastCurveInCurve(sourceOutline, pl)) - subtractList.push(pl); - if (sourceNotBreak && subtractList.length === sourceSplitCurves.length) - return { subtractList: [sourceOutline], holes }; - return { subtractList, holes }; - } - /** - * 获得全部闭合曲线 - * @若传入二维曲线数据,将默认子数组为闭合曲线段 - */ - static GetAllContour(cus) { - if (cus.length === 0) - return []; - let cuGroups; - if (Array.isArray(cus[0])) - cuGroups = cus; - else - cuGroups = curveLinkGroup(cus, -Math.log10(COMBINE_FUZZ)); - let contours = []; - for (let g of cuGroups) - contours.push(Contour.CreateContour(g, false)); - return contours.filter(c => c !== undefined && !equaln$1(c.Area, 0, 1e-6)); - } - /** - * 合并曲线组成为多段线 - * @param cus 曲线组 - * @param [needLink=true] 需要解析成首尾连接状态 - * @returns 单一曲线,如果返回超过1个,其他的将被遗弃. - */ - static Combine(cus, needLink = true, tolerance = 1e-3) { - if (cus.length === 0) - return undefined; - let groups = needLink ? curveLinkGroup(cus, -Math.log10(tolerance)) : [cus]; - for (let g of groups) { - if (g.length === 1) - return g[0].Clone(); - else { - if (cache$1.has(g)) - return cache$1.get(g); - let gclone = g.map(c => c.Clone()); - arrayRemoveDuplicateBySort(gclone, (cu1, cu2) => cu1.Join(cu2, false, tolerance) === Status.True); - if (gclone.length > 1 && gclone[0].Join(arrayLast(gclone), false, tolerance)) - gclone.pop(); - let pl = Polyline.Combine(gclone, tolerance); - cache$1.set(g, pl); - return pl; - } - } - } - get Shape() { - return this._Curve.Shape; - } - /** - * 判断是否完全包含曲线 - * @param smallCurve 传入的这个曲线不能比本轮廓还大(这个需要自己优化?) - * @returns - */ - ContainerCurve(smallCurve, isAreaCheckd = false, ipts = undefined) { - if (!isAreaCheckd && this.Area < smallCurve.Area) - return false; - return CurveContainerCurve(this._Curve, smallCurve, ipts); - } - Equal(tar) { - return equalCurve(this._Curve, tar._Curve); - } -} -/** - * 对于轮廓切割后的曲线判断相同,使用这个函数进行快速判断 - */ -function fastEqualCurve(c1, c2, tolerance = 5e-3) { - let sp1 = c1.StartPoint; - let ep1 = c1.EndPoint; - let sp2 = c2.StartPoint; - let ep2 = c2.EndPoint; - if (!((equalv3(sp1, sp2, tolerance) && equalv3(ep1, ep2, tolerance)) - || (equalv3(sp1, ep2, tolerance) && equalv3(ep1, sp2, tolerance)))) - return false; - return equalv3(c1.Midpoint, c2.Midpoint, tolerance); -} -/** - * 对于双多段线互相切割后的结果(或者交点个数为0),快速判断曲线是否在另一条曲线内部 - * @param bigCurve - * @param smallCurve - * @returns - */ -function fastCurveInCurve(bigCurve, smallCurve) { - return bigCurve.PtInCurve(smallCurve.Midpoint); -} -//当交点小于等于1时 -function fastCurveInCurve2(bigCurve, smallCurve, iPt) { - if (iPt) //提高准确性,避免使用交点去判断 导致的错误 - { - let sp = smallCurve.StartPoint; - if (equalv3(sp, iPt, 1e-3)) - return bigCurve.PtInCurve(smallCurve.Midpoint); - else - return bigCurve.PtInCurve(smallCurve.StartPoint); - } - else - return bigCurve.PtInCurve(smallCurve.Midpoint) || bigCurve.PtInCurve(smallCurve.StartPoint); -} -//大曲线是否完全包含小曲线(或者重合) -function CurveContainerCurve(bigCurve, smallCurve, ipts = undefined, fuzz = COMBINE_FUZZ) { - if (!ipts) - ipts = bigCurve.IntersectWith2(smallCurve, IntersectOption.ExtendNone, fuzz); - if (ipts.length === 0) - return fastCurveInCurve(bigCurve, smallCurve); - else if (ipts.length === 1) - return fastCurveInCurve2(bigCurve, smallCurve, ipts[0].pt); - else - return isTargetCurInOrOnSourceCur(bigCurve, smallCurve); -} - -class CurveTreeNode { - Create(curve, box) { return new this.constructor(curve, box); } - constructor(curve, box) { - this.curve = curve; - this.box = box || curve.BoundingBox; - } - TrimBy(contour, box) { - if (IntersectsBox(box, this.box)) { - if (this.children !== undefined) { - for (let c of this.children) - c.TrimBy(contour, box); - } - else { - if (contour.Curve instanceof Circle && this.curve instanceof Arc) { - if (equalv3(contour.Curve.Center, this.curve.Center)) { - if (contour.Curve.Radius > this.curve.Radius + 1e-4) - this.children = []; - return; - } - } - //交点参数列表 - let iParams = this.curve.IntersectWith2(contour.Curve, IntersectOption.ExtendNone) - .map(p => p.thisParam); - //#region 交点参数优化,避免出现无意义长度的曲线被移除 CurveIsFine - let length = this.curve.Length; - if (!(this.curve instanceof Circle)) - iParams.push(0, 1); - iParams.sort((e1, e2) => e1 - e2); - if (this.curve instanceof Arc || this.curve instanceof Circle) { - let allAngle = this.curve instanceof Circle ? Math.PI * 2 : this.curve.AllAngle; - arrayRemoveDuplicateBySort(iParams, (p1, p2) => { - return allAngle * (p2 - p1) < ARC_MIN_ALLANGLE || length * (p2 - p1) < CURVE_MIN_LENGTH; - }); - } - else { - arrayRemoveDuplicateBySort(iParams, (p1, p2) => { - return length * (p2 - p1) < CURVE_MIN_LENGTH; - }); - } - if (!(this.curve instanceof Circle)) { - iParams.shift(); //remove 0 - iParams.pop(); //remove 1 or 0.9999 - } - //#endregion - let cus = this.curve.GetSplitCurves(iParams); - if (cus.length === 0) { - let p = this.curve.GetPointAtParam(0.5); - if (box.containsPoint(p) && (contour.Curve.PtInCurve(p) && !contour.Curve.PtOnCurve(p))) - this.children = []; - } - else { - this.children = []; - for (let c of cus) { - let p = c.GetPointAtParam(0.5); - if (CurveIsFine(c) && (!(box.containsPoint(p) && contour.Curve.PtInCurve(p)) || contour.Curve.PtOnCurve(p))) - this.children.push(this.Create(c)); - } - if (this.children.length === cus.length) - this.children = undefined; - } - } - } - } - get Nodes() { - if (!this.children) - return [this]; - else { - let cus = []; - for (let c of this.children) - cus.push(...c.Nodes); - return cus; - } - } -} -var PolylineJoinType; -(function (PolylineJoinType) { - PolylineJoinType[PolylineJoinType["Square"] = 0] = "Square"; - PolylineJoinType[PolylineJoinType["Round"] = 1] = "Round"; -})(PolylineJoinType || (PolylineJoinType = {})); -class OffsetPolyline { - /** - * - * @param _Polyline - * @param _OffsetDist - * @param [_ToolPath=false] 走刀模式(在这个模式下,我们会进行圆弧过渡(或者直线过渡)避免尖角过大) - * @param [_OffsetDistSq=(_OffsetDist ** 2) * 2.1] 允许的最大尖角长度 默认值差不多是矩形的尖角大一点 - * @param [_JoinType=PolylineJoinType.Round] 尖角的处理方式,默认是圆弧过渡,可以切换成直线过渡 - */ - constructor(_Polyline, _OffsetDist, _ToolPath = false, _OffsetDistSq = (_OffsetDist ** 2) * 2.1, //对直角走刀不进行圆弧过度 - _JoinType = PolylineJoinType.Round //仅在走刀路径时生效 - ) { - this._Polyline = _Polyline; - this._OffsetDist = _OffsetDist; - this._ToolPath = _ToolPath; - this._OffsetDistSq = _OffsetDistSq; - this._JoinType = _JoinType; - this._IsTopoOffset = false; //局部偏移,允许特殊延伸,参考测试用例 - } - Do() { - this._OffsetDistSign = Math.sign(this._OffsetDist); - this._TrimPolylineContours = []; - this._TrimCircleContours = []; - this._TrimArcContours = []; - this._RetCurves = []; - this._CurveTreeNodes = []; - this.InitSubCurves(); - if (this._SubCurves.length === 0) - return this._RetCurves; - this.GeneralCirclesAndVertexs(); - this.OffsetSubCurves(); - this.LinkSubCurves(); - if (this._SubOffsetedCurves.length === 0) { - this._SubOffsetedCurves.push({ curve: this._Circles[0], index: 0, paddingCurve: this._Circles.slice(1) }); - this._TrimPolylineContours.push(...this._Circles.map(c => Contour.CreateContour(c, false)), ...this._SubCurves.map(c => Contour.CreateContour([c, new Line(c.StartPoint, c.EndPoint)], false))); - } - else - this.GeneralTrimContours(); - // for (let c of this._SubOffsetedCurves) - // { - // TestDraw(c.curve.Clone(), 1); - // if (c.paddingCurve) - // for (let cc of c.paddingCurve) - // TestDraw(cc.Clone(), 2); - // } - // for (let c of this._TrimPolylineContours) - // { - // TestDraw(c.Curve.Clone(), 3); - // } - this.TrimByContours(); - this.FilterInvalidCurve(); - this.JoinCollinear(); - this.LinkResultPolyline(); - this.RepairResultPolylineClosemark(); - return this._RetCurves; - } - InitSubCurves() { - this._CacheOCS = this._Polyline.OCS; - this._IsClose = this._Polyline.IsClose; - this._Polyline.OCS = IdentityMtx4; - this._SubCurves = this._Polyline.Explode().filter(c => c.Length > 1e-4); //TODO: 简化这个 并且生成圆 顶点 圆 - this._Polyline.OCS = this._CacheOCS; - return this; - } - GeneralCirclesAndVertexs() { - this._Vertexs = this._SubCurves.map(c => c.StartPoint); - let lastCu = arrayLast(this._SubCurves); - if (!equalv3(lastCu.EndPoint, this._Vertexs[0], 1e-3)) - this._Vertexs.push(lastCu.EndPoint); - let radius = Math.abs(this._OffsetDist); - this._Circles = this._Vertexs.map(p => new Circle(p, radius)); - } - OffsetSubCurves() { - this._SubOffsetedCurves = []; - for (let index = 0; index < this._SubCurves.length; index++) { - let curveOld = this._SubCurves[index]; - if (curveOld.Length > 1e-6) { - let curve = curveOld.GetOffsetCurves(this._OffsetDist)[0]; - if (curve) - this._SubOffsetedCurves.push({ curve, index }); - else - this._TrimArcContours.push(Contour.CreateContour([curveOld, new Line(curveOld.StartPoint, curveOld.EndPoint)], false)); - } - } - } - //连接(延伸)曲线,或者补(圆弧,直线) - LinkSubCurves() { - let count = this._SubOffsetedCurves.length; - if (!this._IsClose) - count--; - for (let i = 0; i < count; i++) { - let curveResNow = this._SubOffsetedCurves[i]; - let iNext = FixIndex$1(i + 1, this._SubOffsetedCurves); - let curveResNext = this._SubOffsetedCurves[iNext]; - let curveNow = curveResNow.curve; - let curveNext = curveResNext.curve; - let isNeighbor = FixIndex$1(curveResNow.index + 1, this._SubCurves) === curveResNext.index; - if (isNeighbor) { - let sp = curveNow.EndPoint; - let ep = curveNext.StartPoint; - //直连 - if (equalv3(sp, ep, 1e-3)) - continue; - let iPtsP = curveNow.IntersectWith2(curveNext, IntersectOption.ExtendBoth, 1e-6); - let iPts = iPtsP.map(p => p.pt); - let tPts = iPtsP.filter(p => curveNow.ParamOnCurve(p.thisParam) && curveNext.ParamOnCurve(p.argParam)).map(p => p.pt); - let code = EntityEncode2(curveNow, curveNext); - let tp; - if (code === 1) { - if (this._IsTopoOffset && tPts.length === 0 && curveResNow.dist !== curveResNext.dist) - tPts = iPts; - if (tPts.length > 0) //不走刀或者有真交点 this._ToolPath === false || - tp = iPts[0]; - else { - if (iPts.length > 0 && iPtsP[0].thisParam > 1) { - let refP = this._Vertexs[curveResNext.index]; - let distSq = iPts[0].distanceToSquared(refP); - if (this._ToolPath && distSq > this._OffsetDistSq) { - if (this._JoinType === PolylineJoinType.Round) - curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)]; - else - curveResNow.paddingCurve = [this.CreateSquare(refP, curveResNow, curveResNext, code)]; //补直线 - this._TrimCircleContours.push(this._Circles[curveResNext.index]); - } - else - tp = iPts[0]; - } - // else - // curveResNow.paddingCurve = [new Line(sp, ep)]; - } - } - else //直线和圆弧 圆弧和圆弧 - { - let refP = this._Vertexs[curveResNext.index]; - //在局部偏移中,当偏移距离不一致时,我们总是倾向于直接连接 - if (this._IsTopoOffset && tPts.length === 0 && curveResNow.dist !== curveResNext.dist) { - if (iPts.length) - tPts = iPts; - else { - curveResNow.paddingCurve = [new Line(sp, ep)]; //补直线 - continue; - } - } - if (tPts.length > 0) //ipts = 1 or ipts = 2 - tp = SelectNearP(tPts, refP); - else //补圆弧 或者尝试连接 - { - if (iPts.length > 0 && !this._ToolPath && this.IsSharpCorner(curveResNow, curveResNext)) //非加工刀路 并且尖角化(谷)时 - { - //设置新的连接点,并且备份旧点 - let oldp; - if (curveResNow.sp) { - oldp = curveNow.StartPoint; - curveNow.StartPoint = curveResNow.sp; - } - let oldp2; - if (curveResNext.ep) { - oldp2 = curveNext.EndPoint; - curveNext.EndPoint = curveResNext.ep; - } - let p; - if (code === 2 && iPts.length === 2) { - let c = curveNow; - let minArc = new Arc(c.Center, c.Radius, c.EndAngle, 0, c.IsClockWise); - let p1 = iPts[0]; - let a1 = minArc.GetAngleAtPoint(p1); - let anAll1 = c.ParamOnCurve(c.GetParamAtAngle(a1)) ? Infinity : minArc.ComputeAnlge(a1); - let p2 = iPts[1]; - let a2 = minArc.GetAngleAtPoint(p2); - let anAll2 = c.ParamOnCurve(c.GetParamAtAngle(a2)) ? Infinity : minArc.ComputeAnlge(a2); - if (anAll2 < anAll1) - p = p2; - else - p = p1; - } - else - p = SelectNearP(iPts, refP); - let onPre; - let param = curveNow.GetParamAtPoint2(p); - if (curveNow instanceof Line) - onPre = param > 1; - else - onPre = param < 0 || param > 1; - let onNext = false; - if (onPre) { - let param2 = curveNext.GetParamAtPoint2(p); - if (curveNext instanceof Line) - onNext = param2 < 0; - else - onNext = param2 < 0 || param2 > 1; - } - if (curveResNow.sp) - curveNow.StartPoint = oldp; - if (curveResNext.ep) - curveNext.EndPoint = oldp2; - if (onPre && onNext) - tp = p; - else - curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)]; //补圆弧 - } - else { - if (this._JoinType === PolylineJoinType.Round) - curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)]; //补圆弧 - else { - curveResNow.paddingCurve = [this.CreateSquare(refP, curveResNow, curveResNext, code)]; //补直线 - } - } - let circle = this._Circles[curveResNext.index]; - if (circle) - this._TrimCircleContours.push(circle); //因为局部偏移可能未提供圆 - } - } - if (tp) { - curveResNow.ep = tp; - curveResNext.sp = tp; - curveResNow.nextCurve = curveNext; - curveResNext.preCurve = curveNow; - } - } - else { - let padCirs = []; - for (let s = FixIndex$1(curveResNow.index + 1, this._Circles);; s = FixIndex$1(s + 1, this._Circles)) { - let circle = this._Circles[s]; - if (circle) //因为局部偏移可能未提供圆 - { - this._TrimCircleContours.push(circle); - padCirs.push(circle); - } - if (s === curveResNext.index) - break; - } - curveResNow.paddingCurve = padCirs; - } - } - } - /** - * 判断两曲线是否尖角化 - * 在 - * 1.直线和圆弧,圆弧和圆弧 - * 2.有交点,无真交点时 - * 必须在正确的方向做出延伸动作,所以必须在尖角的情况下延伸,偏移的结果就像一个谷字去掉一个口的结果,上面的人就是偏移后的结果. - * 如果是谷,则允许连接 #I7WKKG - */ - IsSharpCorner(curveResNow, curveResNext) { - let v1 = this._SubCurves[curveResNow.index].GetFirstDeriv(1); - let v2 = this._SubCurves[curveResNext.index].GetFirstDeriv(0); - v1.cross(v2); - return Math.sign(v1.z) === this._OffsetDistSign; - } - GeneralTrimContours() { - for (let d of this._SubOffsetedCurves) { - let cu2 = d.curve; - if (d.sp && d.ep) { - let param1 = cu2.GetParamAtPoint(d.sp); - let param2 = cu2.GetParamAtPoint(d.ep); - if (cu2.ParamOnCurve(param1) && cu2.ParamOnCurve(param2) && param1 > param2) - [d.sp, d.ep] = [d.ep, d.sp]; - } - if (d.sp) - cu2.StartPoint = d.sp; - if (d.ep) - cu2.EndPoint = d.ep; - //这是极端情况,圆弧被压缩成0长度圆弧,本质是空圆弧(我们会在下面判断它)(因为精度的问题) - //因为精度的问题,这种0圆心角的圆弧会被当成全圆,但是偏移算法中,应该不可能出现全圆弧的圆弧,所以我们压扁它 - if (cu2 instanceof Arc - && equaln$1(cu2.StartAngle, cu2.EndAngle, 1e-6) - // && !equaln((this._SubCurves[d.index]).AllAngle, Math.PI * 2, 1e-3) 应该不会出现 - ) { - if (cu2.IsClockWise) - cu2.StartAngle = cu2.EndAngle + 1e-6; - else - cu2.EndAngle = cu2.StartAngle + 1e-6; - } - } - for (let d of this._SubOffsetedCurves) { - let cu1 = this._SubCurves[d.index]; - let cu2 = d.curve; - let [p1, p2, p3, p4] = [cu1.StartPoint, cu2.StartPoint, cu1.EndPoint, cu2.EndPoint]; - let l1 = new Line(p1, p2); - let l2 = new Line(p3, p4); - let ipts = l1.IntersectWith(l2, IntersectOption.ExtendNone, 1e-8); - if (ipts.length > 0) { - let p = ipts[0]; - l1.EndPoint = p; - l2.EndPoint = p; - let cus = [cu1, l1, l2]; - let contour = Contour.CreateContour(cus, false); - if (contour) { - this._TrimPolylineContours.push(contour); - continue; - } - else { - console.error("未预料到的错误,构建轮廓失败" + this._OffsetDist); - } - } - //真理1:针脚线不可能同时被两个圆弧所切割 - let l1Intact = true; - let l2Intact = true; - if (cu2 instanceof Arc) { - if (Math.sign(cu2.Bul) !== this._OffsetDistSign) { - let ipts1 = cu2.IntersectWith(l1, IntersectOption.ExtendNone); - let ipts2 = cu2.IntersectWith(l2, IntersectOption.ExtendNone); - let sp; - let ep; - if (ipts1.length === 2) - sp = SelectNearP(ipts1, p1); - if (ipts2.length === 2) - ep = SelectNearP(ipts2, p3); - if (sp || ep) - cu2 = cu2.Clone(); - if (sp) { - l1.EndPoint = sp; - cu2.StartPoint = sp; - l1Intact = false; - } - if (ep) { - l2.EndPoint = ep; - cu2.EndPoint = ep; - l2Intact = false; - } - } - } - let l1PadArc; - let l2PadArc; - //真理2:隔壁的圆弧不可能破坏当前的圆弧,只能破坏当前的针脚 - if (l1Intact && d.preCurve && d.preCurve instanceof Arc) { - let a = d.preCurve; - if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6) { - let ipts = a.IntersectWith(l1, IntersectOption.ExtendNone); - if (ipts.length === 2) { - let sp = SelectNearP(ipts, p1); - l1.EndPoint = sp; - l1PadArc = a.Clone(); - l1PadArc.StartPoint = sp; - } - } - } - if (l2Intact && d.nextCurve && d.nextCurve instanceof Arc) { - let a = d.nextCurve; - if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6) { - let ipts = a.IntersectWith(l2, IntersectOption.ExtendNone); - if (ipts.length === 2) { - let ep = SelectNearP(ipts, p3); - l2.EndPoint = ep; - l2PadArc = a.Clone(); - l2PadArc.EndPoint = ep; - } - } - } - let pl = new Polyline(); - let cus = [cu1, l1]; - if (l1PadArc) - cus.push(l1PadArc); - cus.push(cu2, l2); - if (l2PadArc) - cus.push(l2PadArc); - for (let c of cus) - pl.Join(c); - let contour = Contour.CreateContour(pl, false); - if (contour) - this._TrimPolylineContours.push(contour); - else - console.error("未预料到的错误,构建轮廓失败" + this._OffsetDist); - } - if (!this._IsClose) { - if (this._TrimCircleContours[0] !== this._Circles[0]) - this._TrimCircleContours.push(this._Circles[0]); - let lastTrimCircle = arrayLast(this._TrimCircleContours); - let lastCircle = arrayLast(this._Circles); - if (lastTrimCircle !== lastCircle) - this._TrimCircleContours.push(lastCircle); - if (this._SubOffsetedCurves[0].index !== 0) - this._TrimCircleContours.push(this._Circles[this._SubOffsetedCurves[0].index]); - let lastIndex = this._Circles.length - 1; - let lastD = arrayLast(this._SubOffsetedCurves); - if (lastIndex !== lastD.index) - this._TrimCircleContours.push(this._Circles[lastD.index + 1]); - } - this._TrimPolylineContours.push(...this._TrimCircleContours.map(c => Contour.CreateContour(c, false)), ...this._TrimArcContours); - } - // 通过构建的轮廓对偏移曲线进行裁剪 - TrimByContours() { - for (let d of this._SubOffsetedCurves) { - let c = d.curve; - if (CurveIsFine(c)) - this._CurveTreeNodes.push(new CurveTreeNode(c)); - if (d.paddingCurve) - this._CurveTreeNodes.push(...d.paddingCurve.map(c => new CurveTreeNode(c))); - } - for (let i = 0; i < this._TrimPolylineContours.length; i++) { - let c = this._TrimPolylineContours[i]; - let cbox = c.BoundingBox; - for (let curveNode of this._CurveTreeNodes) - curveNode.TrimBy(c, cbox); - } - } - //过滤方向相反和0长度线 - FilterInvalidCurve() { - this._CurveTrimedTreeNodes = []; - for (let n of this._CurveTreeNodes) { - let ns = n.Nodes; - for (let sn of ns) { - if (this.CheckPointDir(sn.curve.GetPointAtParam(0.5))) - this._CurveTrimedTreeNodes.push(sn); - } - } - } - //合并共线 - JoinCollinear() { - for (let i = 0; i < this._CurveTrimedTreeNodes.length; i++) { - let n = this._CurveTrimedTreeNodes[i]; - if (n.used) - continue; - let sp = n.curve.StartPoint; - for (let j = i + 1; j < this._CurveTrimedTreeNodes.length; j++) { - let n2 = this._CurveTrimedTreeNodes[j]; - if (n2.used) - continue; - let status = n.curve.Join(n2.curve); - if (status === Status.ConverToCircle) { - n.used = true; - n2.used = true; - let circle = new Circle(n.curve.Center, n.curve.Radius); - n.curve = circle; - this._RetCurves.push(ConverCircleToPolyline$1(circle).ApplyMatrix(this._CacheOCS)); - } - else if (status === Status.True) { - if (equalv3(sp, n.curve.StartPoint)) - n2.used = true; - else { - n.used = true; - n2.curve = n.curve; - break; - } - } - } - } - } - //连接结果曲线,返回最终多段线 - LinkResultPolyline() { - let used = new Set(); - let cuMap = new CurveMap(1); - for (let n of this._CurveTrimedTreeNodes) { - if (!n.used) - cuMap.AddCurveToMap(n.curve); - } - let preP; - let searchNext = (s, pl, isJoinEnd = true) => { - let minDist = Infinity; - let minR; - for (let r of s.routes) { - if (used.has(r.curve)) - continue; - if (preP) { - let d = r.s.distanceToSquared(preP); - if (d < minDist) { - minR = r; - minDist = d; - } - } - else { - minR = r; - minDist = 0; - break; - } - } - if (minR && Math.sqrt(minDist) < 0.085) { - used.add(minR.curve); - preP = minR.e; - // let status = pl.Join(minR.curve, false, 8e-2); - // if (status !== Status.True) - // console.warn("连接失败"); - //#region fast join (为了避免Polyline.Join 导致的顺序错误) - let cu = minR.curve; - //bul - let bul = 0; - if (cu instanceof Arc) { - bul = cu.Bul; - if (minR.isReverse) - bul *= -1; - if (!isJoinEnd) - bul *= -1; - } - if (pl.LineData.length === 0) { - pl.LineData.push({ - pt: AsVector2(minR.s), - bul: bul - }); - } - if (isJoinEnd) { - pl.LineData[pl.LineData.length - 1].bul = bul; - pl.LineData.push({ - pt: AsVector2(minR.e), - bul: 0 - }); - } - else { - pl.LineData.unshift({ - pt: AsVector2(minR.e), - bul - }); - } - //#endregion - return minR.to; - } - }; - for (let s of cuMap.Stands) { - preP = undefined; - let pl = new Polyline(); - let ss = s; - while (ss && !pl.IsClose) - ss = searchNext(ss, pl, true); - ss = s; - preP = pl.StartPoint; - while (ss && !pl.IsClose) - ss = searchNext(ss, pl, false); - if (pl.NumberOfVertices > 1) { - //避免0长度的线 - if (pl.NumberOfVertices === 2 && pl.Length < 1e-6) - continue; - let d = pl.LineData; - let ld = arrayLast(d); - if (equalv2(d[0].pt, ld.pt, 1e-2)) - ld.pt.copy(d[0].pt); - this._RetCurves.push(pl.ApplyMatrix(this._CacheOCS)); - } - } - } - RepairResultPolylineClosemark() { - if (!this._RetCurves.length) - return; - if (this._Polyline.CloseMark) { - if (!equalv2(this._Polyline.LineData[0].pt, arrayLast(this._Polyline.LineData).pt, 8e-2)) //缺省一个点 - { - for (let pl of this._RetCurves) { - if (pl.IsClose && //封闭 - equaln$1(arrayLast(pl.LineData).bul, 0, 1e-5) && //是直线 - equalv2(pl.LineData[0].pt, arrayLast(pl.LineData).pt, 8e-2)) //首尾重复(一般已经是了) - { - pl.LineData.pop(); //移除最后一点 - pl.CloseMark = true; - } - } - } - else { - for (let pl of this._RetCurves) { - if (pl.IsClose) - pl.CloseMark = true; - } - } - } - else if (this._IsClose) { - for (let pl of this._RetCurves) { - let firstP = pl.LineData[0].pt; - let lastP = arrayLast(pl.LineData).pt; - if (equalv2(firstP, lastP, 8e-2)) - lastP.copy(firstP); - } - } - } - CheckPointDir(pt) { - return this.GetPointAtCurveDir(pt) === this._OffsetDistSign; - } - GetPointAtCurveDir(pt) { - let minIndex = Infinity; - let minDist = Infinity; - let minCp; - for (let i = 0; i < this._SubCurves.length; i++) { - let c = this._SubCurves[i]; - let cp = c.GetClosestPointTo(pt, false); - if (equalv3(cp, pt, 1e-5)) - return 0; - let dist = cp.distanceToSquared(pt); - if (dist < minDist) { - minDist = dist; - minIndex = i; - minCp = cp; - } - } - let c = this._SubCurves[minIndex]; - let param = c.GetParamAtPoint(minCp); - if (equaln$1(param, 0) && ((minIndex === 0) ? this._IsClose : true)) { - let preIndex = FixIndex$1(minIndex - 1, this._SubCurves); - let preCurve = this._SubCurves[preIndex]; - if (!equalv3(c.GetFirstDeriv(0).normalize(), preCurve.GetFirstDeriv(1).normalize())) { - let p = c.StartPoint; - let l1 = c.Length; - let l2 = preCurve.Length; - let minLength = Math.min(l1, l2) * 0.2; - let nextP; - let preP; - if (c instanceof Arc) - nextP = c.GetPointAtDistance(minLength); - else - nextP = c.EndPoint; - if (preCurve instanceof Arc) - preP = preCurve.GetPointAtDistance(l2 - minLength); - else - preP = preCurve.StartPoint; - let arc = new Arc(p, 1, angle(preP.sub(p)), angle(nextP.sub(p))); - let dir = arc.PtOnCurve3(pt) ? -1 : 1; - return dir; - } - } - else if (equaln$1(param, 1) && ((minIndex === this._SubCurves.length - 1) ? this._IsClose : true)) { - let nextIndex = FixIndex$1(minIndex + 1, this._SubCurves); - let nextCurve = this._SubCurves[nextIndex]; - if (!equalv3(c.GetFirstDeriv(1).normalize(), nextCurve.GetFirstDeriv(0).normalize())) { - let p = c.EndPoint; - let l1 = c.Length; - let l2 = nextCurve.Length; - let minLength = Math.min(l1, l2) * 0.2; - let nextP; - let preP; - if (c instanceof Arc) - preP = c.GetPointAtDistance(l1 - minLength); - else - preP = c.StartPoint; - if (nextCurve instanceof Arc) - nextP = nextCurve.GetPointAtDistance(minLength); - else - nextP = nextCurve.EndPoint; - let arc = new Arc(p, 1, angle(preP.sub(p)), angle(nextP.sub(p))); - let dir = arc.PtOnCurve3(pt) ? -1 : 1; - return dir; - } - } - let dri = c.GetFirstDeriv(param); - let cross = dri.cross(pt.clone().sub(minCp)); - return -Math.sign(cross.z); - } - CreateArc(center, startP, endP) { - let sa = angle(startP.clone().sub(center)); - let ea = endP ? angle(endP.clone().sub(center)) : sa; - let arc = new Arc(center, Math.abs(this._OffsetDist), sa, ea, this._OffsetDist < 0); - return arc; - } - CreateSquare(center, curveNow, curveNext, entTypeCode) { - const arc = this.CreateArc(center, curveNow.curve.EndPoint, curveNext.curve.StartPoint); - const centerPoint = arc.GetPointAtParam(0.5); - const tangentLine = new Line(centerPoint, arc.GetFirstDeriv(0.5).add(centerPoint)); //切线 - let ep, sp; - if (entTypeCode === 1) { - ep = tangentLine.IntersectWith(curveNow.curve, IntersectOption.ExtendBoth)[0]; //第一条线新的终点坐标 - sp = centerPoint.multiplyScalar(2).sub(ep); - } - else // if (entTypeCode === 0)//全圆弧 直线和圆弧 - { - ep = SelectNearP(tangentLine.IntersectWith(curveNow.curve, IntersectOption.ExtendBoth), center); //第一条线新的终点坐标 - sp = SelectNearP(tangentLine.IntersectWith(curveNext.curve, IntersectOption.ExtendBoth), center); - } - curveNow.ep = ep; - curveNext.sp = sp; - return new Line(ep, sp); - } -} -function EntityEncode(c) { - if (c instanceof Line) - return 1; - else - return 2; -} -function EntityEncode2(c1, c2) { - return EntityEncode(c1) & EntityEncode(c2); -} -const CURVE_MIN_LENGTH = 5e-5; -const ARC_MIN_ALLANGLE = 2e-6; -//表示这个是一个正常的曲线,不是0长度的线,也不是0长度的圆弧 -function CurveIsFine(curve) { - if (curve instanceof Arc && curve.AllAngle < ARC_MIN_ALLANGLE) - return false; - return curve.Length > CURVE_MIN_LENGTH; -} - -/** - * 判断点在多段线内外(如果点在线上 则返回false) - * @param pl 多段线 - * @param pt 点 - * @returns 点在多段线内部 - */ -function IsPointInPolyLine(pl, pt) { - let crossings = 0; - let insLine = new Line(pt, pt.clone().add(new Vector3(0, 10, 0))); - for (let i = 0; i < pl.EndParam; i++) { - if (equaln$1(pl.GetBulgeAt(i), 0, BUL_IS_LINE_FUZZ)) //直线 - { - let sp = pl.GetPointAtParam(i); - let ep = pl.GetPointAtParam(i + 1); - if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5)) //在起点或者终点 - return false; - //点位于线上面 - if (pt.y > Math.max(sp.y, ep.y)) - continue; - //线垂直Y轴 - let derX = ep.x - sp.x; - if (equaln$1(derX, 0, 5e-6)) { - if (equaln$1(pt.x, ep.x, 1e-5) - && (pt.y > Math.min(sp.y, ep.y) - 1e-5 && pt.y < Math.max(sp.y, ep.y) + 1e-5)) - return false; //点在线上 - continue; - } - //起点 - if (equaln$1(sp.x, pt.x, 5e-6)) { - if (sp.y > pt.y && derX < 0) - crossings++; - continue; - } - //终点 - if (equaln$1(ep.x, pt.x, 5e-6)) { - if (ep.y > pt.y && derX > 0) - crossings++; - continue; - } - //快速求交,只验证有没有交点 - let [x1, x2] = sp.x > ep.x ? [ep.x, sp.x] : [sp.x, ep.x]; - if (pt.x > x1 && pt.x < x2) { - let derY = ep.y - sp.y; - let k = derY / derX; - let iptY = (pt.x - sp.x) * k + sp.y; - if (equaln$1(iptY, pt.y, 1e-5)) //点在线上 返回false - return false; - if (iptY > pt.y) - crossings++; - } - } - else //圆弧 - { - let arc = pl.GetCurveAtIndex(i); - let sp = arc.StartPoint; - let ep = arc.EndPoint; - if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5)) //在起点或者终点 - return false; - let center = arc.Center; - //如果相切 - if (equaln$1(Math.abs(pt.x - center.x), arc.Radius)) { - //点在线上 - if (equaln$1(pt.y, center.y) && arc.ParamOnCurve(arc.GetParamAtPoint2(pt))) - return false; - //当点和起点或者终点和点相切时 - if (equaln$1(sp.x, pt.x) && sp.y > pt.y) { - if (ep.x - sp.x < -1e-5) - crossings++; - } - else if (equaln$1(ep.x, pt.x) && ep.y > pt.y) { - if (ep.x - sp.x > 1e-5) - crossings++; - } - continue; - } - if (equaln$1(sp.x, pt.x) && sp.y > pt.y) { - let der = arc.GetFirstDeriv(0).normalize(); - if (der.x < -1e-5) - crossings++; - } - if (equaln$1(ep.x, pt.x) && ep.y > pt.y) { - let der = arc.GetFirstDeriv(1).normalize(); - if (der.x > 1e-5) - crossings++; - } - for (let pti of arc.IntersectWith(insLine, IntersectOption.ExtendArg)) { - if (equalv2(pti, pt, 1e-5)) //点在线上 返回false - return false; - //交点在点下 交点在起点? 交点在终点? - if (pti.y + 1e-5 < pt.y || equalv2(sp, pti, 1e-5) || equalv2(ep, pti, 1e-5)) - continue; - crossings++; - } - } - } - return (crossings % 2) === 1; -} - -var Polyline_1; -const BUL_IS_LINE_FUZZ = 1e-5; -let Polyline = Polyline_1 = class Polyline extends Curve { - constructor(_LineData = []) { - super(); - this._LineData = _LineData; - this._ClosedMark = false; - } - UpdateOCSTo(m) { - this.WriteAllObjectRecord(); - let p = new Vector3().setFromMatrixPosition(m); - p.applyMatrix4(this.OCSInv); - if (equaln$1(p.z, 0)) { - let dir = Math.sign(this.Area2); - let tm = matrixAlignCoordSys(this.OCSNoClone, m); - for (let p of this._LineData) { - let p3 = AsVector3(p.pt); - p3.applyMatrix4(tm); - p.pt.set(p3.x, p3.y); - } - this.OCS = m; - let newDir = Math.sign(this.Area2); - if (dir !== newDir) - for (let p of this._LineData) - p.bul *= -1; - } - } - /** - * 原地翻转,仅改变法向量 - */ - Flip() { - this.WriteAllObjectRecord(); - let x = new Vector3(); - let y = new Vector3(); - let z = new Vector3(); - this._Matrix.extractBasis(x, y, z); - z.negate(); - y.crossVectors(z, x); - let p = this.Position; - this._Matrix.makeBasis(x, y, z).setPosition(p); - for (let d of this._LineData) { - d.pt.y *= -1; - d.bul *= -1; - } - this.Update(); - return this; - } - //翻转曲线,首尾调换 - Reverse() { - if (this._LineData.length === 0) - return this; - this.WriteAllObjectRecord(); - let pts = []; - let buls = []; - for (let data of this._LineData) { - pts.push(data.pt); - buls.push(-data.bul); - } - let lastBul = buls.pop(); - buls.reverse(); - buls.push(lastBul); - pts.reverse(); - if (this._ClosedMark && !equalv2(pts[0], arrayLast(pts))) { - pts.unshift(pts.pop()); - buls.unshift(buls.pop()); - } - for (let i = 0; i < pts.length; i++) { - let d = this._LineData[i]; - d.pt = pts[i]; - d.bul = buls[i]; - } - return this; - } - set LineData(data) { - this.WriteAllObjectRecord(); - this._LineData = data; - this.Update(); - } - get LineData() { - return this._LineData; - } - get NumberOfVertices() { - return this._LineData.length; - } - /** - * 在指定位置插入点. - * 例如: - * pl.AddVertexAt(pl.NumberOfVertices,p);//在末尾插入一个点 - * - * @param {number} index 索引位置 - * @param {Vector2} pt 点 - * @returns {this} - * @memberof Polyline - */ - AddVertexAt(index, pt) { - this.WriteAllObjectRecord(); - let pts; - if (Array.isArray(pt)) { - pts = pt.map(p => { - return { - pt: p.clone(), - bul: 0 - }; - }); - } - else - pts = [{ pt: pt.clone(), bul: 0 }]; - this._LineData.splice(index, 0, ...pts); - this.Update(); - return this; - } - RemoveVertexAt(index) { - if (index < this._LineData.length) { - this.WriteAllObjectRecord(); - this._LineData.splice(index, 1); - this.Update(); - } - return this; - } - RemoveVertexIn(from, to) { - if (from + 1 < this._LineData.length && to > from) { - this.WriteAllObjectRecord(); - this._LineData.splice(from + 1, to - from - 1); - this.Update(); - } - return this; - } - /** - * 重设闭合多段线的起点 - * @param index 起始index,如果index非整数,将用最接近的整数作为起始索引 - */ - ResetStartPoint(index) { - if (!this.IsClose || index >= this.EndParam) - return false; - if (equalv2(this._LineData[0].pt, arrayLast(this._LineData).pt)) - this._LineData.pop(); - changeArrayStartIndex(this._LineData, Math.floor(index + 0.5)); - this._LineData.push({ - pt: this._LineData[0].pt.clone(), - bul: 0 - }); - return true; - } - GetPoint2dAt(index) { - if (index >= 0 && this._LineData.length > index) - return this._LineData[index].pt.clone(); - } - /** - * 设置指定点的位置 - * - * @param {number} index - * @param {Vector2} pt - * @memberof Polyline - */ - SetPointAt(index, pt) { - let d = this._LineData[index]; - if (d) { - this.WriteAllObjectRecord(); - d.pt.copy(pt); - this.Update(); - } - return this; - } - ApplyScaleMatrix(m) { - this.WriteAllObjectRecord(); - let inv = this.OCSInv; - for (let i = 0; i <= this.EndParam; i++) { - let p = this.GetPointAtParam(i); - p.applyMatrix4(m).applyMatrix4(inv); - this.SetPointAt(i, AsVector2(p)); - } - return this; - } - ApplyMirrorMatrix(m) { - this.WriteAllObjectRecord(); - let oldPts = this.GetStretchPoints(); - reviseMirrorMatrix(this._Matrix); - let inv = this.OCSInv; - for (let i = 0; i < oldPts.length; i++) { - let newP = oldPts[i].applyMatrix4(inv); - let newBul = -this.GetBulgeAt(i); - this.SetPointAt(i, AsVector2(newP)); - this.SetBulgeAt(i, newBul); - } - this.Reverse(); - return this; - } - SetBulgeAt(index, bul) { - let d = this._LineData[index]; - if (d) { - this.WriteAllObjectRecord(); - d.bul = bul; - this.Update(); - } - return this; - } - GetBulgeAt(index) { - return this._LineData[index].bul; - } - Rectangle(length, height) { - this.LineData = [ - { pt: new Vector2$1(), bul: 0 }, - { pt: new Vector2$1(length), bul: 0 }, - { pt: new Vector2$1(length, height), bul: 0 }, - { pt: new Vector2$1(0, height), bul: 0 } - ]; - this.CloseMark = true; - return this; - } - RectangleFrom2Pt(p1, p2) { - let box = new Box3(); - box.setFromPoints([p2, p1].map((p) => p.clone().applyMatrix4(this.OCSInv))); - let px1 = AsVector2(box.min); - let px3 = AsVector2(box.max); - let px2 = new Vector2$1(px3.x, px1.y); - let px4 = new Vector2$1(px1.x, px3.y); - this.LineData = [ - { pt: px1, bul: 0 }, - { pt: px2, bul: 0 }, - { pt: px3, bul: 0 }, - { pt: px4, bul: 0 } - ]; - this.CloseMark = true; - return this; - } - FromPoints2d(pts) { - this.WriteAllObjectRecord(); - this._LineData.length = 0; - for (let p of pts) - this._LineData.push({ pt: AsVector2(p), bul: 0 }); - this.Update(); - return this; - } - //多段线起点 - get StartPoint() { - if (this._LineData.length > 0) - return AsVector3(this._LineData[0].pt).applyMatrix4(this.OCS); - return new Vector3(); - } - set StartPoint(p) { - this.WriteAllObjectRecord(); - p = p.clone().applyMatrix4(this.OCSInv); - if (this._LineData.length === 0) - this.AddVertexAt(0, AsVector2(p)); - else if (this._LineData.length === 1) - this.SetPointAt(0, AsVector2(p)); - else { - let bul = this.GetBulgeAt(0); - if (bul !== 0) { - let arc = this.GetCurveAtParam(0); - arc.StartPoint = p; - //前面线的凸度调整 - this.SetBulgeAt(0, Math.tan(arc.AllAngle / 4) * Math.sign(bul)); - } - this.SetPointAt(0, AsVector2(p)); - } - } - get EndPoint() { - if (this._ClosedMark) - return this.StartPoint; - if (this._LineData.length > 0) - return AsVector3(this._LineData[this.EndParam].pt).applyMatrix4(this.OCS); - return new Vector3(); - } - set EndPoint(p) { - if (this._LineData.length < 2 || this.CloseMark) - return; - this.WriteAllObjectRecord(); - p = p.clone().applyMatrix4(this.OCSInv); - let bul = this.GetBulgeAt(this.EndParam - 1); - if (bul !== 0) { - let arc = this.GetCurveAtParam(this.EndParam - 1); - arc.ApplyMatrix(this.OCSInv); - arc.EndPoint = p; - //前面线的凸度调整 - this.SetBulgeAt(this.EndParam - 1, Math.tan(arc.AllAngle / 4) * Math.sign(bul)); - } - this.SetPointAt(this.EndParam, AsVector2(p)); - } - get CurveCount() { - return this.EndParam; - } - get StartParam() { - return 0; - } - /** - * 表示最后一条曲线的终止参数,使用该参数可以直接遍历到多段线的所有子线段. for(i 1 && (equalv3(this.StartPoint, this.EndPoint, 1e-4))); - } - set CloseMark(v) { - this.WriteAllObjectRecord(); - this._ClosedMark = v; - this.Update(); - } - DigestionCloseMark() { - if (this._ClosedMark && this._LineData.length > 1) { - this.WriteAllObjectRecord(); - this._ClosedMark = false; - if (!equalv2(this._LineData[0].pt, arrayLast(this._LineData).pt)) - this._LineData.push({ pt: AsVector2(this._LineData[0].pt), bul: 0 }); - } - } - /** - * 删除重复点 - * @param [fuzz=0.1] 容差=0.1 - */ - RemoveRepeatPos(fuzz = 0.1) { - let index = 0; - let pre = 0; - let writed = false; - for (let next = 1; next <= this._LineData.length; next++) { - if ((!this._ClosedMark && next === this._LineData.length) || //如果曲线没闭合 则总是保留最后一个点 - !equalv2(this._LineData[pre].pt, this._LineData[FixIndex$1(next, this._LineData)].pt, fuzz)) { - if (!writed) { - this.WriteAllObjectRecord(); - writed = true; - } - this._LineData[index] = this._LineData[pre]; - index++; - } - pre++; - } - if (equalv2(this._LineData[0].pt, this._LineData[index - 1].pt, fuzz)) - this._LineData[index - 1].pt.copy(this._LineData[0].pt); - this._LineData.length = index; - this.Update(); - } - get Length() { - return this.Explode().reduce((l, cu) => l + cu.Length, 0); - } - /** - * 获得指定参数所在的点. - * 当曲线存在闭合标志时,参数必须在曲线内部. - * 当曲线不存在闭合标志时,参数允许延伸出曲线. - * - * @param {number} param 参数 - * @returns {Vector3} 三维点,可为空 - */ - GetPointAtParam(param) { - if (param === Math.floor(param) && this.ParamOnCurve(param)) - return AsVector3(this.GetPoint2dAt(FixIndex$1(param, this.NumberOfVertices))).applyMatrix4(this.OCSNoClone); - let cu = this.GetCurveAtParam(param); - if (cu) - return cu.GetPointAtParam(this.GetCurveParamAtParam(param)); - return undefined; - } - GetDistAtParam(param) { - if (this._ClosedMark && !this.ParamOnCurve(param)) - return NaN; - //参数 整数 - let paramFloor = Math.floor(param); - //需要计算的曲线个数 - let cuCount = paramFloor > this.EndParam ? this.EndParam : paramFloor; - let dist = 0; - //首先计算完整曲线的长度 - for (let i = 0; i < cuCount; i++) { - dist += this.GetCurveAtIndex(i).Length; - } - //参数已经大于索引,证明参数在线外. - if (paramFloor !== cuCount) { - dist += this.GetCurveAtParam(param).GetDistAtParam(param - cuCount); - } - else if (param > paramFloor) { - let lastParam = param - paramFloor; - dist += this.GetCurveAtParam(param).GetDistAtParam(lastParam); - } - return dist; - } - GetPointAtDistance(dist) { - let param = this.GetParamAtDist(dist); - return this.GetPointAtParam(param); - } - /** - * 返回参数所在的点. 如果曲线不闭合,会试图返回延伸点参数 - * - * @param {Vector3} pt - * @returns {number} - * @memberof Polyline - */ - GetParamAtPoint(pt) { - let cus = this.Explode(); - if (cus.length === 0) - return NaN; - for (let i = 0; i < cus.length; i++) { - let cu = cus[i]; - let param = cu.GetParamAtPoint(pt); - if (cu.ParamOnCurve(param)) - return i + param; //返回点在曲线内部的参数 - } - //当曲线闭合时,不需要延伸首尾去判断参数 - if (this._ClosedMark) - return NaN; - //起点终点参数集合 - let seParams = []; - //点在第一条曲线上的参数 - let startParam = cus[0].GetParamAtPoint(pt); - if (!isNaN(startParam) && startParam < 0) - seParams.push(startParam); - //点在最后一条线上的参数 - let endParam = cus[cus.length - 1].GetParamAtPoint(pt); - if (!isNaN(endParam) && endParam > 0) - seParams.push(endParam + this.EndParam - 1); - if (seParams.length == 1) { - return seParams[0]; - } - else if (seParams.length == 2) { - //返回较近的参数 - if (pt.distanceToSquared(this.StartPoint) - < pt.distanceToSquared(this.EndPoint)) - return seParams[0]; - else - return seParams[1]; - } - return NaN; - } - GetParamAtDist(dist) { - if (equaln$1(dist, 0)) - return 0; - let cus = []; - for (let i = 0; i < this.EndParam; i++) { - let cu = this.GetCurveAtIndex(i); - let len = cu.Length; - if (len < 1e-6) - continue; - cus.push(cu); - if (dist <= len) - return i + cu.GetParamAtDist(dist); - else if (equaln$1(dist, len, 1e-8)) - return i + 1; - dist -= len; - } - if (!this._ClosedMark) - return cus.length + cus[cus.length - 1].GetParamAtDist(dist); - return NaN; - } - GetDistAtPoint(pt) { - let param = this.GetParamAtPoint(pt); - if (!this.ParamOnCurve(param)) - return NaN; - return this.GetDistAtParam(param); - } - /** - * 返回曲线的一阶导数. - * 当曲线闭合(标志)且点不在曲线上. - * 或者曲线不闭合(标志) 且点不在曲线上也不在延伸上 - * - * @param {(number | Vector3)} param - * @returns {Vector3} - * @memberof Polyline - */ - GetFirstDeriv(param) { - if (param instanceof Vector3) - param = this.GetParamAtPoint(param); - if (isNaN(param)) - return undefined; - let cu = this.GetCurveAtParam(param); - if (!cu) - return undefined; - return cu.GetFirstDeriv(this.GetCurveParamAtParam(param)); - } - GetSplitCurves(param) { - //参数需要转化为参数数组 - let params; - if (typeof param == "number") - params = [param]; - else - params = param; - //校验参数在曲线中,修正参数 - let endParam = this.EndParam; - params = params.filter(p => this.ParamOnCurve(p) && p > -1e-6) - .map(a => { - if (a < 0) - return 0; - if (a > endParam) - return endParam; - if (equaln$1(a, Math.floor(a + 0.5), 1e-8)) - return Math.floor(a + 0.5); - return a; - }); - //排序 - params.sort((a, b) => a - b); - let hasEndParam = arrayLast(params) === this.EndParam; - //必须加入最后一个参数,保证切割后的曲线完整 - if (!hasEndParam) - params.push(this.EndParam); - arrayRemoveDuplicateBySort(params, (e1, e2) => equaln$1(e1, e2, 1e-8)); - params = params.filter(p => this.ParamOnCurve(p)); - if (params.length === 0) - return []; - //判断是否存在0参数 - let hasZeroParam = params[0] === 0; - if (hasZeroParam) - params.shift(); - let { pts, buls } = this.PtsBuls; - //返回的多段线集合 - let pls = []; - let len = 0; //已经走过的参数长度(整数) - //上一个切割参数的位置 0-1 - let prePa = 0; - for (let pa of params) { - //参数所在点 - let pt = AsVector2(this.GetPointAtParam(pa).applyMatrix4(this.OCSInv)); - pa -= len; - let pafloor = Math.floor(pa); - len += pafloor; - let plData = []; - //添加点 - for (let i = 0; i < pafloor; i++) { - if (i === 0 && !equaln$1(buls[0], 0, 1e-8)) { - buls[0] = Math.tan((1 - prePa) * Math.atan(buls[0])); - } - plData.push({ pt: pts[0], bul: buls[0] }); - pts.shift(); - buls.shift(); - } - if (equaln$1(pa, pafloor, 1e-8)) //如果pa在点上 - { - plData.push({ pt: pts[0].clone(), bul: buls[0] }); - } - else //在曲线上 - { - let bul = buls[0]; - if (!equaln$1(bul, 0, 1e-6)) - bul = Math.tan((pa - pafloor - (0 === pafloor ? prePa : 0)) * Math.atan(buls[0])); //->凸度 - //加入顶点+凸度 - plData.push({ pt: pts[0].clone(), bul }); - //终点 - plData.push({ pt, bul: 0 }); - //修正剩余的点表和凸度表 - pts[0].copy(pt); - } - prePa = pa - pafloor; - if (plData.length > 1) { - let pl = new Polyline_1(plData).ApplyMatrix(this.OCS); - pl.ColorIndex = this.ColorIndex; - pls.push(pl); - } - } - //当曲线为闭合曲线,并且不存在0切割参数时,首尾连接曲线 - if (this._ClosedMark && !hasZeroParam && !hasEndParam) { - let lastPl = pls[pls.length - 1]; - if (equalv2(arrayLast(lastPl._LineData).pt, pls[0]._LineData[0].pt)) - lastPl._LineData.pop(); - lastPl._LineData.push(...pls[0]._LineData); - pls.shift(); - } - return pls; - } - //未完善 - GetCurveAtParamRange(startParam, endParam) { - let sfloor = Math.floor(startParam + 0.5); - if (equaln$1(sfloor, startParam, 1e-8)) - startParam = sfloor; - else - sfloor = Math.floor(startParam); - let efloor = Math.floor(endParam + 0.5); - if (equaln$1(efloor, endParam, 1e-8)) - endParam = efloor; - else - efloor = Math.floor(efloor); - const GetCurve = (index) => { - let d = this._LineData[index]; - let next = this._LineData[index + 1]; - if (!equaln$1(d.bul, 0, 1e-8)) - return new Arc().ParseFromBul(d.pt, next.pt, d.bul); - else - return new Line(AsVector3(d.pt), AsVector3(next.pt)); - }; - let lined = []; - if (startParam === sfloor) { - let d = this._LineData[sfloor]; - lined.push({ pt: d.pt.clone(), bul: d.bul }); - } - else { - let d = this._LineData[sfloor]; - let cu = GetCurve(sfloor); - let remParam = startParam - sfloor; - let p = cu.GetPointAtParam(remParam); - let bul = d.bul; - if (!equaln$1(bul, 0)) - bul = Math.tan(Math.atan(bul) * (1 - remParam)); - lined.push({ pt: AsVector2(p), bul: bul }); - } - for (let i = sfloor + 1; i < efloor; i++) { - let d = this._LineData[i]; - lined.push({ pt: d.pt.clone(), bul: d.bul }); - } - if (efloor !== endParam) { - let d = this.LineData[efloor]; - let remParam = endParam - efloor; - let cu = GetCurve(efloor); - let p = cu.GetPointAtParam(remParam); - let bul = d.bul; - if (!equaln$1(bul, 0)) { - arrayLast(lined).bul = Math.tan(Math.atan(bul) * remParam); - bul = Math.tan(Math.atan(bul) * (1 - remParam)); - } - lined.push({ pt: AsVector2(p), bul }); - } - let pl = new Polyline_1(lined); - pl.OCS = this.OCSNoClone; - return; - } - Extend(newParam) { - if (this.CloseMark || this.ParamOnCurve(newParam)) - return; - this.WriteAllObjectRecord(); - let ptIndex; - let bulIndex; - if (newParam < 0) { - ptIndex = 0; - bulIndex = 0; - } - else if (newParam > this.EndParam) { - ptIndex = this.EndParam; - bulIndex = ptIndex - 1; - } - //修改顶点 - this._LineData[ptIndex].pt = AsVector2(this.GetPointAtParam(newParam).applyMatrix4(this.OCSInv)); - //修改凸度 - let oldBul = this._LineData[bulIndex].bul; - if (oldBul != 0) - this._LineData[bulIndex].bul = Math.tan(Math.atan(oldBul) * (1 + newParam - ptIndex)); - this.Update(); - } - //const this - MatrixAlignTo2(toMatrix) { - if (!matrixIsCoplane(this._Matrix, toMatrix, 1e-4)) - return this.PtsBuls; - let m = matrixAlignCoordSys(this._Matrix, toMatrix); - let z1 = this.Normal; - let z2 = new Vector3().setFromMatrixColumn(toMatrix, 2); - let isMirror = equalv3(z1, z2.negate()); - let pts = []; - let buls = []; - for (let d of this._LineData) { - let p = AsVector2(AsVector3(d.pt).applyMatrix4(m)); - pts.push(p); - buls.push(isMirror ? -d.bul : d.bul); - } - return { pts, buls }; - } - Join(cu, allowGap = false, tolerance = 1e-4) { - this.WriteAllObjectRecord(); - if (this._ClosedMark) - return Status.False; - let [sp, ep, cuSp, cuEp] = [this.StartPoint, this.EndPoint, cu.StartPoint, cu.EndPoint]; - let ocsInv = this.OCSInv; - let [cuSp2, cuEp2] = [cuSp, cuEp].map(p => AsVector2(p.clone().applyMatrix4(ocsInv))); - if (this._LineData.length === 0) { - if (cu instanceof Line) { - this._LineData.push({ pt: cuSp2, bul: 0 }); - this._LineData.push({ pt: cuEp2, bul: 0 }); - } - else if (cu instanceof Arc) { - let x = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 0); - let y = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 1); - let cuZ = x.cross(y); - let dir = equalv3(this.Normal, cuZ, 1e-4) ? 1 : -1; - let bul = cu.Bul * dir; - this._LineData.push({ pt: cuSp2, bul: bul }); - this._LineData.push({ pt: cuEp2, bul: 0 }); - } - else if (cu instanceof Polyline_1) { - let f = new CADFiler(); - cu.WriteFile(f); - this.ReadFile(f); - } - else - return Status.False; - } - else { - let LinkType; - (function (LinkType) { - LinkType[LinkType["None"] = 0] = "None"; - LinkType[LinkType["SpSp"] = 1] = "SpSp"; - LinkType[LinkType["SpEp"] = 2] = "SpEp"; - LinkType[LinkType["EpSp"] = 3] = "EpSp"; - LinkType[LinkType["EpEp"] = 4] = "EpEp"; - })(LinkType || (LinkType = {})); - let spspDisSq = cuSp.distanceToSquared(sp); - let spepDisSq = cuSp.distanceToSquared(ep); - let epspDisSq = cuEp.distanceToSquared(sp); - let epepDisSq = cuEp.distanceToSquared(ep); - let minDis = tolerance * tolerance; - let linkType = LinkType.None; - if (epspDisSq < minDis) { - linkType = LinkType.EpSp; - minDis = epspDisSq; - } - if (epepDisSq < minDis) { - linkType = LinkType.EpEp; - minDis = epepDisSq; - } - if (spspDisSq < minDis) { - linkType = LinkType.SpSp; - minDis = spspDisSq; - } - if (spepDisSq < minDis) { - linkType = LinkType.SpEp; - minDis = spepDisSq; - } - if (linkType === LinkType.None) - return Status.False; - if (cu instanceof Line) { - if (linkType === LinkType.SpSp) { - this._LineData.unshift({ pt: cuEp2, bul: 0 }); - } - else if (linkType === LinkType.SpEp) { - this._LineData.push({ pt: cuEp2, bul: 0 }); - } - else if (linkType === LinkType.EpSp) { - this._LineData.unshift({ pt: cuSp2, bul: 0 }); - } - else if (linkType === LinkType.EpEp) { - this._LineData.push({ pt: cuSp2, bul: 0 }); - } - } - else if (cu instanceof Arc) { - let x = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 0); - let y = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 1); - let cuZ = x.cross(y); - let dir = equalv3(this.Normal, cuZ, 1e-4) ? 1 : -1; - let bul = cu.Bul * dir; - if (linkType === LinkType.SpSp) { - this._LineData.unshift({ pt: cuEp2, bul: -bul }); - } - else if (linkType === LinkType.SpEp) { - arrayLast(this._LineData).bul = bul; - this._LineData.push({ pt: cuEp2, bul: 0 }); - } - else if (linkType === LinkType.EpSp) { - this._LineData.unshift({ pt: cuSp2, bul: bul }); - } - else if (linkType === LinkType.EpEp) { - arrayLast(this._LineData).bul = -bul; - this._LineData.push({ pt: cuSp2, bul: 0 }); - } - } - else if (cu instanceof Polyline_1) { - if (cu.CloseMark) - return Status.False; - let { pts, buls } = this.PtsBuls; - if (linkType === LinkType.SpSp) { - cu.Reverse(); - let cuPtsBul = cu.MatrixAlignTo2(this.OCS); - cuPtsBul.pts.pop(); - cuPtsBul.buls.pop(); - pts = cuPtsBul.pts.concat(pts); - buls = cuPtsBul.buls.concat(buls); - } - else if (linkType === LinkType.SpEp) { - pts.pop(); - buls.pop(); - let cuPtsBul = cu.MatrixAlignTo2(this.OCS); - pts = pts.concat(cuPtsBul.pts); - buls = buls.concat(cuPtsBul.buls); - } - else if (linkType === LinkType.EpSp) { - let cuPtsBul = cu.MatrixAlignTo2(this.OCS); - cuPtsBul.pts.pop(); - cuPtsBul.buls.pop(); - pts = cuPtsBul.pts.concat(pts); - buls = cuPtsBul.buls.concat(buls); - } - else if (linkType === LinkType.EpEp) { - pts.pop(); - buls.pop(); - cu.Reverse(); - let cuPtsBul = cu.MatrixAlignTo2(this.OCS); - pts = pts.concat(cuPtsBul.pts); - buls = buls.concat(cuPtsBul.buls); - } - this._LineData.length = 0; - for (let i = 0; i < pts.length; i++) { - this._LineData.push({ pt: pts[i], bul: buls[i] }); - } - } - else - return Status.False; - } - //在上面的其他分支已经返回了假 所以这里直接返回真. - this.Update(); - return Status.True; - } - /** - * 将曲线数组组合成多段线 - * @param curves 已经使用CurveLinked的数组,总是首尾相连 - * @returns - */ - static Combine(curves, tolerance = 1e-5) { - if (!curves || curves.length === 0) - return; - let pl = new Polyline_1; - pl.OCS = ComputerCurvesNormalOCS(curves); - for (let cu of curves) { - pl.Join(cu, false, 0.1); - // if (status === Status.False) - // console.log(); - } - let d = pl.LineData; - if (d.length > 1) { - let ld = arrayLast(d).pt; - if (equalv2(d[0].pt, ld, tolerance)) - ld.copy(d[0].pt); - } - return pl; - } - /**首尾相连的曲线直接连接 */ - static FastCombine(curves, tolerance = 1e-5, computOCS = true) { - if (!curves || curves.length === 0) - return; - let pl = new Polyline_1; - if (computOCS) - pl.OCS = ComputerCurvesNormalOCS(curves); - let ocsInv = pl.OCSInv; - let normal = pl.Normal; - let lineData = []; - for (let i = 0; i < curves.length; i++) { - let cu = curves[i]; - let bul = 0; - if (cu instanceof Arc) { - let dir = equalv3(normal, cu.Normal.negate(), 1e-3) ? -1 : 1; - bul = cu.Bul * dir; - } - lineData.push({ - pt: AsVector2(cu.StartPoint.applyMatrix4(ocsInv)), - bul - }); - if (i === curves.length - 1) { - lineData.push({ - pt: AsVector2(cu.EndPoint.applyMatrix4(ocsInv)), - bul: 0 - }); - } - } - if (lineData.length > 1) { - let ld = arrayLast(lineData).pt; - if (equalv2(lineData[0].pt, ld, tolerance)) - ld.copy(lineData[0].pt); - } - pl.LineData = lineData; - return pl; - } - PtOnCurve(pt, fuzz = 1e-6) { - for (let i = 0; i < this.EndParam; i++) { - let c = this.GetCurveAtIndex(i); - if (c.PtOnCurve(pt, fuzz)) - return true; - } - return false; - } - //点在曲线上,已经确定点在曲线的延伸线上 - PtOnCurve3(p, fuzz = 1e-6) { - for (let i = 0; i < this.EndParam; i++) { - let c = this.GetCurveAtIndex(i); - if (c.PtOnCurve3(p, fuzz)) - return true; - } - return false; - } - PtInCurve(pt) { - return this.IsClose && IsPointInPolyLine(this, pt); - } - GetClosestPointTo(pt, extend) { - return this.GetClosestPointTo2(pt, extend ? ExtendType.Both : ExtendType.None); - } - GetClosestPointTo2(pt, extType) { - //当曲线空时,返回空 - if (this.EndParam < 1) - return undefined; - //当有闭合标志时,曲线在任何位置都不延伸 - if (this._ClosedMark) - extType = ExtendType.None; - //最近点 - let ptC = undefined; - //最近点的距离 - let ptCDist = Infinity; - for (let i = 0; i < this.EndParam; i++) { - let cu = this.GetCurveAtIndex(i); - //前延伸 - if (i === 0 && (extType & ExtendType.Front) > 0) { - let ptCFirst = cu.GetClosestPointTo(pt, true); - if (cu.GetParamAtPoint(ptCFirst) <= 1) { - ptC = ptCFirst; - ptCDist = ptC.distanceToSquared(pt); - } - if (extType === ExtendType.Front) - continue; - } - let ptCloseNew; //新的最近点 - //后延伸 (此处与前延伸分开if 如果线只有一段,那么前后延伸都能同时触发) - if (i === (this.EndParam - 1) && (extType & ExtendType.Back) > 0) { - let ptCLast = cu.GetClosestPointTo(pt, true); - if (cu.GetParamAtPoint(ptCLast) >= 0) - ptCloseNew = ptCLast; - else //如果延伸之后并不在曲线或者曲线的后延伸上 - ptCloseNew = cu.EndPoint; - } - else { - ptCloseNew = cu.GetClosestPointTo(pt, false); - } - let newDist = ptCloseNew.distanceToSquared(pt); - if (newDist < ptCDist) { - ptC = ptCloseNew; - ptCDist = newDist; - } - } - return ptC; - } - //偏移 - GetOffsetCurves(offsetDist) { - if (equaln$1(offsetDist, 0)) - return []; - let polyOffestUtil = new OffsetPolyline(this, offsetDist); - let curves = polyOffestUtil.Do(); - for (let cu of curves) - cu.ColorIndex = this.ColorIndex; - return curves; - } - GetFeedingToolPath(offsetDist, offsetDistSq = (offsetDist ** 2) * 2.1, joinType = PolylineJoinType.Round) { - if (equaln$1(offsetDist, 0)) - return []; - let polyOffestUtil = new OffsetPolyline(this, offsetDist, true, offsetDistSq, joinType); - return polyOffestUtil.Do(); - } - /** - * 分解 - */ - Explode() { - let exportCus = []; - for (let i = 0; i < this.EndParam; i++) { - exportCus.push(this.GetCurveAtIndex(i)); - } - return exportCus; - } - /** - * 根据参数得到参数所在的子曲线. - * - * 当曲线存在闭合标志时,参数必须在曲线内部,否则返回空. - * - * @param {number} param 参数值 - * @returns {Curve} 曲线(直线或者圆弧) 或空 - * @memberof Polyline - */ - GetCurveAtParam(param) { - if (this._ClosedMark && !this.ParamOnCurve(param)) - return undefined; - if (param < 0) - return this.GetCurveAtIndex(0); - else if (param >= this.EndParam) - return this.GetCurveAtIndex(this.EndParam - 1); - else - return this.GetCurveAtIndex(Math.floor(param)); - } - /** - * 得到参数在子曲线中的表示 - * - * @param {number} param 参数在多段线中表示 - * @returns {number} 参数在子曲线中表示 - * @memberof Polyline - */ - GetCurveParamAtParam(param) { - if (param >= this.EndParam) - param -= this.EndParam - 1; - else if (param > 0) - param -= Math.floor(param); - return param; - } - /** - * 获得曲线,来自索引位置. - * @param {number} i 索引位置 整数 - */ - GetCurveAtIndex(i) { - if (i >= this._LineData.length) - return undefined; - if (!this.ParamOnCurve(i)) - return undefined; - if (!this._ClosedMark && i === this._LineData.length - 1) - return undefined; - let d1 = this._LineData[i]; - let d2 = this._LineData[FixIndex$1(i + 1, this._LineData)]; - let curve; - if (equaln$1(d1.bul, 0, BUL_IS_LINE_FUZZ)) - curve = new Line(AsVector3(d1.pt), AsVector3(d2.pt)).ApplyMatrix(this.OCSNoClone); - else - curve = new Arc().ParseFromBul(d1.pt, d2.pt, d1.bul).ApplyMatrix(this.OCSNoClone); - curve.ColorIndex = this._Color; - return curve; - } - IntersectWith2(curve, intType, tolerance = 1e-5) { - return IntersectPolylineAndCurve(this, curve, intType, tolerance); - } - //计算自交点. - IntersectSelf() { - let cus = this.Explode(); - if (cus.length === 0) - return []; - let intParams = []; - for (let i = 0; i < cus.length; i++) { - let c = cus[i]; - for (let j = i + 2; j < cus.length; j++) { - let c2 = cus[j]; - let pts = c.IntersectWith(c2, IntersectOption.ExtendNone); - for (let p of pts) { - intParams.push(i + c.GetParamAtPoint(p)); - intParams.push(j + c2.GetParamAtPoint(p)); - } - } - } - return intParams; - } - IsIntersectSelf() { - let cus = this.Explode().filter(c => !equaln$1(c.Length, 0, 1e-3)); - for (let i = 0; i < cus.length - 1; i++) { - let c1 = cus[i]; - let c1IsLine = c1 instanceof Line; - let d1 = c1.GetFirstDeriv(c1IsLine ? 0 : 1).normalize(); - for (let j = i + 1; j < cus.length; j++) { - let c2 = cus[j]; - let c2IsLine = c2 instanceof Line; - let d2 = c2.GetFirstDeriv(0).normalize(); - if (j === i + 1) { - if (c1IsLine === c2IsLine) { - if (c1IsLine) { - if (equalv3(d1, d2.negate())) - return true; - continue; - } - else { - if (equalv3(d1, d2.negate()) && equalv3(c1.Center, c2.Center)) - return true; - } - } - } - let intPts = c1.IntersectWith2(c2, 0); - let intPtsLen = intPts.length; - if (intPtsLen > 0) { - if (intPtsLen === 2 && equalv3(intPts[0].pt, intPts[1].pt, 1e-3)) { - intPtsLen = 1; - intPts.pop(); - } - if (intPtsLen === 2 && j === i + 1 && cus.length === 2) { - if (intPts.every(r => equaln$1(r.thisParam, 0, 1e-3) || equaln$1(r.thisParam, 1, 1e-3))) - continue; - } - if (j === i + 1 && intPtsLen === 1) - continue; - if (this.IsClose && i === 0 && j === cus.length - 1 && intPtsLen === 1) - continue; - return true; - } - } - } - return false; - } - get BoundingBox() { - let box = new Box3Ext(); - for (let i = 0; i < this.EndParam; i++) { - let cu = this.GetCurveAtIndex(i); - box.union(cu.BoundingBox); - } - return box; - } - SetPtsBuls(pts, buls) { - this.WriteAllObjectRecord(); - this._LineData.length = 0; - for (let i = 0; i < pts.length; i++) { - let pt = pts[i]; - let bul = buls[i]; - this._LineData.push({ pt, bul }); - } - this.Update(); - return this; - } - /** - * 得到曲线有用的点表和凸度(闭合曲线首尾重复) - */ - get PtsBuls() { - let pts = []; - let buls = []; - if (this._LineData.length === 0) - return { pts, buls }; - for (let data of this._LineData) { - pts.push(data.pt.clone()); - buls.push(data.bul); - } - //闭合且起点不等于终点 - if (this._ClosedMark && - !this._LineData[0].pt.equals(arrayLast(this._LineData).pt)) { - pts.push(pts[0].clone()); - buls.push(buls[0]); - } - return { pts, buls }; - } - get IsBulge() { - if (!this.IsClose) - return false; - let refDir = Math.sign(this.Area2); - let c1; - let c2; - for (let i = 0; i < this.EndParam; i++) { - c1 = this.GetCurveAtIndex(i); - c2 = this.GetCurveAtIndex(FixIndex$1(i + 1, this.EndParam)); - let len1 = c1.Length; - let len2 = c2.Length; - let minLen = Math.min(len1, len2) * 0.2; - let p = c1.EndPoint; - let p1; - let p2; - if (c1 instanceof Arc) { - let dir = c1.IsClockWise ? -1 : 1; - if (dir !== refDir) - return false; - p1 = c1.GetPointAtDistance(len1 - minLen); - } - else - p1 = c1.StartPoint; - if (c2 instanceof Arc) { - let dir = c2.IsClockWise ? -1 : 1; - if (dir !== refDir) - return false; - p2 = c2.GetPointAtDistance(minLen); - } - else - p2 = c2.EndPoint; - let vec1 = p.clone().sub(p1); - let vec2 = p2.sub(p); - let dir = Math.sign(vec1.cross(vec2).z); - if (dir !== 0 && dir !== refDir) - return false; - } - return true; - } - get Shape() { - let { pts, buls } = this.PtsBuls; - return CreatePolylinePath(pts, buls); - } - get SVG() { - let sp = this.StartPoint; - let str = `M${sp.x} ${sp.y} `; - for (let i = 1; i <= this.EndParam; i++) { - let bul = this.GetBulgeAt(i - 1); - let p = this.GetPointAtParam(i); - if (bul === 0) - str += `L${p.x} ${p.y} `; - else { - let arc = this.GetCurveAtIndex(i - 1); - str += `A ${arc.Radius} ${arc.Radius} 0 ${Math.abs(bul) >= 1 ? 1 : 0} ${arc.IsClockWise ? 0 : 1} ${p.x} ${p.y}`; - } - } - return str; - } - GetDragPointCount(drag) { - if (drag === DragPointType.Grip) { - let count = this.EndParam * 2 + 1; - if (this.CloseMark) - count--; - return count; - } - else { - return this._LineData.length; - } - } - GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { - switch (snapMode) { - case ObjectSnapMode.End: - return this.GetStretchPoints(); - case ObjectSnapMode.Mid: - let midPts = []; - let enParam = this.EndParam; - for (let i = 0.5; i < enParam; i++) { - let p = this.GetPointAtParam(i); - p && midPts.push(p); - } - return midPts; - case ObjectSnapMode.Nea: - { - let nea = []; - for (let cu of this.Explode()) { - let neaa = cu.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform); - if (neaa) - nea.push(...neaa); - } - return nea; - } - case ObjectSnapMode.Ext: - { - let cp = this.GetClosestPointTo(pickPoint, true); - if (cp) - return [cp]; - break; - } - case ObjectSnapMode.Cen: - let cenPts = []; - for (let i = 0; i < this._LineData.length; i++) { - let data = this._LineData[i]; - if (!equaln$1(data.bul, 0)) { - let cu = this.GetCurveAtIndex(i); - if (cu) //end bul !== 0 但是并没有圆弧 - cenPts.push(cu.Center); - } - } - return cenPts; - case ObjectSnapMode.Per: - if (lastPoint) { - let cp = this.GetClosestPointTo(pickPoint, false); - if (!cp) - return []; - let cparam = this.GetParamAtPoint(cp); - let cu = this.GetCurveAtParam(cparam); - if (cu) { - let closestPt = cu.GetClosestPointTo(lastPoint, true); - if (closestPt && this.PtOnCurve(closestPt)) - return [closestPt]; - } - } - case ObjectSnapMode.Tan: - if (lastPoint) { - let clostPt = this.GetClosestPointTo(pickPoint, false); - if (!clostPt) - return []; - let par = this.GetParamAtPoint(clostPt); - let cu = this.GetCurveAtParam(par); - if (cu instanceof Arc) - return cu.GetObjectSnapPoints(snapMode, pickPoint, lastPoint); - return []; - } - } - return []; - } - GetGripPoints() { - let ptList = []; - if (this._LineData.length < 2) - return ptList; - let enParam = this.EndParam; - if (this.CloseMark) - enParam -= 0.5; - for (let i = 0; i < enParam + 0.5; i += 0.5) { - let p = this.GetPointAtParam(i); - ptList.push(p); - } - return ptList; - } - MoveGripPoints(indexList, moveVec) { - this.WriteAllObjectRecord(); - let moveVLoc = AsVector2(moveVec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv))); - let calcIndexList = indexList; - if (indexList.length > 1) { - let centerIndexes = indexList.filter(i => i % 2 === 0); - if (centerIndexes.length > 0) - calcIndexList = centerIndexes; - } - for (let index of calcIndexList) { - if (index % 2 === 0) { - let cuIndex = index / 2; - let ptCount = this._LineData.length; - let frontIndex = cuIndex - 1; - if (this._ClosedMark) - frontIndex = FixIndex$1(frontIndex, ptCount); - if (frontIndex >= 0 && this.GetBulgeAt(frontIndex)) { - let arc = this.GetCurveAtIndex(frontIndex); - arc.MoveGripPoints([2], moveVec); - this._LineData[frontIndex].bul = arc.Bul; - } - if ((cuIndex !== ptCount - 1) && this.GetBulgeAt(cuIndex)) { - let arc = this.GetCurveAtIndex(cuIndex); - arc.MoveGripPoints([0], moveVec); - this._LineData[cuIndex].bul = arc.Bul; - } - this._LineData[cuIndex].pt.add(moveVLoc); - } - else { - let ptIndex = (index - 1) / 2; - let nextIndex = (FixIndex$1(ptIndex + 1, this._LineData)); - let d = this._LineData[ptIndex]; - if (d.bul === 0) { - this._LineData[ptIndex].pt.add(moveVLoc); - this._LineData[nextIndex].pt.add(moveVLoc); - } - else { - let arc = this.GetCurveAtIndex(ptIndex); - arc.MoveGripPoints([1], moveVec); - this._LineData[ptIndex].bul = arc.Bul; - } - } - } - this.Update(); - } - GetStretchPoints() { - let iswcs = MatrixIsIdentityCS(this._Matrix); - let pts = []; - for (let data of this._LineData) { - let p = AsVector3(data.pt); - if (!iswcs) - p.applyMatrix4(this._Matrix); - pts.push(p); - } - return pts; - } - /** - * 范围拉伸(stretch),对夹点进行拉伸. - * 如果对圆弧的一侧进行拉伸,那么修改bul - * - * @param {Array} indexList - * @param {Vector3} vec - */ - MoveStretchPoints(indexList, vec) { - this.WriteAllObjectRecord(); - //本地坐标系移动向量 - let moveVLoc = vec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv)); - let ptCount = this._LineData.length; - for (let index of indexList) { - if (index >= ptCount) - throw "在拉伸多段线顶点时,尝试拉伸不存在的顶点!(通常是因为模块中的板轮廓被破坏,导致的顶点丢失!)"; - let frontIndex = index - 1; - let nextIndex = index + 1; - if (this._ClosedMark) { - frontIndex = FixIndex$1(frontIndex, ptCount); - nextIndex = FixIndex$1(nextIndex, ptCount); - } - /** - * 根据新的拉伸点修改凸度. - * - * @param {number} nextIndex 隔壁点索引 - * @param {number} bulIndex 需要修改凸度位置的索引 - * @returns - */ - const ChangeBul = (nextIndex, bulIndex) => { - //需要修改的点的数据 - let d = this._LineData[bulIndex]; - if (d === undefined || d.bul === 0) - return; - //如果隔壁点不在拉伸列表中 - if (indexList.indexOf(nextIndex) === -1) { - let needChangeP = this.GetPointAtParam(index); - let notChangeP = this.GetPointAtParam(nextIndex); - //原先的弦长的一半 - let oldChordLengthHalf = needChangeP.distanceTo(notChangeP) * 0.5; - //弓高 - let arcHeight = oldChordLengthHalf * d.bul; - needChangeP.add(vec); - let newChordLengthHalf = needChangeP.distanceTo(notChangeP) * 0.5; - d.bul = arcHeight / newChordLengthHalf; - } - }; - ChangeBul(frontIndex, frontIndex); - ChangeBul(nextIndex, index); - //修改顶点 - this._LineData[index].pt.add(AsVector2(moveVLoc)); - } - this.Update(); - } - _ReadFile(file) { - super._ReadFile(file); - let ver = file.Read(); - this._LineData.length = 0; - let count = file.Read(); - for (let i = 0; i < count; i++) { - let v = new Vector2$1().fromArray(file.Read()); - let bul = file.Read(); - this._LineData.push({ pt: v, bul: bul }); - } - if (ver > 1) - this._ClosedMark = file.Read(); - // 某些时候会画出这样的多段线 尚未知道是为什么画出的 - // if (this._LineData.length === 0) - // this.Erase(); - } - //对象将自身数据写入到文件. - WriteFile(file) { - super.WriteFile(file); - file.Write(2); - file.Write(this._LineData.length); - for (let l of this._LineData) { - file.Write(l.pt.toArray()); - file.Write(l.bul); - } - file.Write(this._ClosedMark); - } -}; -Polyline = Polyline_1 = __decorate([ - Factory -], Polyline); -const TempPolyline = new Polyline(); - /** * 相交延伸选项. * @@ -9462,6 +4432,1136 @@ function IntersectEllipse(el1, el2, type) { return intPts; } +var ExtendType; +(function (ExtendType) { + /** + * 前后都不延伸 + */ + ExtendType[ExtendType["None"] = 0] = "None"; + /** + * 只允许延伸前面 + */ + ExtendType[ExtendType["Front"] = 1] = "Front"; + /** + * 只允许延伸后面 + */ + ExtendType[ExtendType["Back"] = 2] = "Back"; + /** + * 前后延伸 + */ + ExtendType[ExtendType["Both"] = 3] = "Both"; +})(ExtendType || (ExtendType = {})); +/** + * 曲线的基类,子类请实现以下方法. + */ +let Curve = class Curve extends Entity { + constructor() { + super(); + this._RoomName = ""; + this._CabinetName = ""; + //------------------绘制相关------------------ + //重载 + this.OnlyRenderType = true; + } + get RoomName() { return this._RoomName; } + set RoomName(value) { + if (value === this._RoomName) + return; + this.WriteAllObjectRecord(); + this._RoomName = value; + } + get CabinetName() { return this._CabinetName; } + set CabinetName(value) { + if (value === this._CabinetName) + return; + this.WriteAllObjectRecord(); + this._CabinetName = value; + } + get Is2D() { + return equaln$1(this._Matrix.elements[14], 0); + } + get StartPoint() { return; } + set StartPoint(v) { return; } + get StartParam() { return; } + get EndPoint() { return; } + set EndPoint(v) { return; } + /** 曲线中点 */ + get Midpoint() { + return this.GetPointAtParam(this.MidParam); + } + get MidParam() { + if (this.EndParam === 1) + return 0.5; + else + return this.GetParamAtDist(this.Length * 0.5); + } + get EndParam() { return; } + get Area() { return 0; } + /** + *获得曲线的面积,逆时针为正,顺时针为负. + */ + get Area2() { return 0; } + get Length() { return 0; } + get IsClose() { return false; } + /** 曲线为顺时针 */ + get IsClockWise() { return this.Area2 < 0; } + get Shape() { throw "未实现"; } + GetPointAtParam(param) { return; } + GetPointAtDistance(distance) { return; } + GetDistAtParam(param) { return; } + GetDistAtPoint(pt) { return; } + GetParamAtPoint(pt, fuzz = 1e-6) { return; } + //直接提供点在线上的参数,不管点有没有在线上 + GetParamAtPoint2(pt, fuzz = 1e-6) { return this.GetParamAtPoint(pt, fuzz); } + GetParamAtDist(d) { return; } + /** + * 返回曲线在指定位置的一阶导数(在wcs内) + * @param {(number | Vector3)} param + */ + GetFirstDeriv(param) { return; } + GetFirstDerivAngle(param) { + let d = this.GetFirstDeriv(param); + return Math.atan2(d.y, d.x); + } + /** + * 返回切割曲线后的结果.总是从起点开始切割,并且按顺序返回曲线. + * @param {(number[] | number)} param + */ + GetSplitCurves(param) { return; } + //未完善 + GetCurveAtParamRange(startParam, EndParam) { return; } + GetSplitCurvesByPts(pt) { + let pts = Array.isArray(pt) ? pt : [pt]; + let pars = pts.map(p => this.GetParamAtPoint(p)); + return this.GetSplitCurves(pars); + } + SplitParamSort(param) { + if (Array.isArray(param)) { + param = param.filter(p => this.ParamOnCurve(p)); + if (param.length === 0) + return []; + param.push(0, this.EndParam); + arraySortByNumber$1(param); + arrayRemoveDuplicateBySort(param, (e1, e2) => equaln$1(e1, e2, 1e-7)); + return param; + } + else if (this.ParamOnCurve(param)) + return [0, param, this.EndParam]; + else + return []; + } + Extend(newParam) { } + /** + * 连接曲线到本曲线,如果成功返回true + * @param {Curve} cu 需要连接的曲线 + * @returns {boolean} 连接成功 + * @memberof Curve + */ + Join(cu, allowGap = false, tolerance = 1e-4) { return Status.False; } + //翻转曲线.首尾调换. + Reverse() { return this; } + //点在曲线上 + PtOnCurve(pt, fuzz = 1e-5) { + return equalv3(this.StartPoint, pt, fuzz) || equalv3(this.EndPoint, pt, fuzz) || this.ParamOnCurve(this.GetParamAtPoint(pt, fuzz)); + } + //点在曲线中,不在起点或者终点. + PtOnCurve2(pt) { + return !(equalv3(this.StartPoint, pt, 1e-6) || equalv3(this.EndPoint, pt, 1e-6)) && this.ParamOnCurve(this.GetParamAtPoint(pt), 0); + } + //点在曲线上,已经确定点在曲线的延伸线上 + PtOnCurve3(p, fuzz = 1e-6) { + return this.PtOnCurve(p, fuzz); + } + //参数在曲线上 容差,1e-6 + ParamOnCurve(param, fuzz = 1e-6) { return !isNaN(param) && param >= -fuzz && param <= this.EndParam + fuzz; } + /** + * 偏移曲线 + * @param offsetDist 左边负数 右边正数 + * @returns 返回偏移后的曲线 可能返回多条曲线 + */ + GetOffsetCurves(offsetDist) { return; } + GetClosestPointTo(pt, extend) { return; } + /** + * 曲线相交点 + */ + IntersectWith(curve, intType, tolerance = 1e-6) { + return this.IntersectWith2(curve, intType, tolerance).map(r => r.pt); + } + /** + * 曲线相交点和点的参数 + */ + IntersectWith2(curve, intType, tolerance = 1e-6) { return []; } + /** + * 拽托点个数 + */ + GetDragPointCount(drag) { return 0; } + //样条线重载了这个,得到了更高的绘制精度 + GetDrawCount() { return 30; } + /** + * @param {RenderType} [renderType=RenderType.Wireframe] + */ + InitDrawObject(renderType = RenderType.Wireframe) { + let pts = this.Shape.getPoints(this.GetDrawCount()); + if (pts.length === 0) + pts.push(new Vector3); + if (renderType === RenderType.WireframePrint) { + let array = []; + for (let p of pts) + array.push(p.x, p.y, 0); + let geometry = new LineGeometry().setPositions(array); + return new Line2(geometry, ColorMaterial.PrintLineMatrial); + } + let geo = new BufferGeometry().setFromPoints(pts); + return new Line$1(geo, ColorMaterial.GetLineMaterial(this.DrawColorIndex)); + } + /** + * 重载:更新绘制的实体 + * @param {RenderType} type + * @param {Object3D} obj + */ + UpdateDrawObject(type, obj) { + let pts = this.Shape.getPoints(this.GetDrawCount()); + let plObj = obj; + let geo = plObj.geometry; + if (geo instanceof LineGeometry) { + let array = []; + for (let p of pts) + array.push(p.x, p.y, 0); + geo.setPositions(array); + } + else { + //@ts-ignore + for (let p of pts) + p.z = 0; + if (!BufferGeometryUtils.UpdatePts(geo, pts)) + updateGeometry(plObj, new BufferGeometry().setFromPoints(pts)); + } + } + /** + * 重载:更新实体材质 + */ + UpdateDrawObjectMaterial(type, obj, material) { + if (type === RenderType.WireframePrint) ; + else { + let m = obj; + m.material = material || ColorMaterial.GetLineMaterial(this.DrawColorIndex); + } + } + UpdateJigMaterial(color = 8) { + for (let [type, obj] of this._CacheDrawObject) { + this.UpdateDrawObjectMaterial(type, obj, ColorMaterial.GetLineMaterial(color)); + } + } + ReadRoomAndCabinetName(file) { + this._RoomName = file.Read(); + this._CabinetName = file.Read(); + } + WriteRoomAndCabinetName(file) { + file.Write(this._RoomName); + file.Write(this._CabinetName); + } +}; +Curve = __decorate([ + Factory +], Curve); + +class Matrix2 { + constructor() { + //column-major + this.el = [1, 0, 0, 1]; //ix iy jx jy [a c b d] + } + set(ix, iy, jx, jy) { + this.el[0] = ix; + this.el[1] = iy; + this.el[2] = jx; + this.el[3] = jy; + return this; + } + applyVector(vec) { + let x = vec.x; + let y = vec.y; + let e = this.el; + vec.x = e[0] * x + e[2] * y; + vec.y = e[1] * x + e[3] * y; + return this; + } + fromMatrix4(mtx4) { + this.set(mtx4.elements[0], mtx4.elements[1], mtx4.elements[3], mtx4.elements[4]); + } + setRotate(theta) { + let c = Math.cos(theta); + let s = Math.sin(theta); + this.set(c, s, -s, c); + return this; + } + //自我求逆矩阵,返回自身 + invert() { + //ref:https://www.mathsisfun.com/algebra/matrix-inverse.html + let [a, c, b, d] = this.el; + let det = 1 / (a * d - b * c); + this.set(d * det, -c * det, -b * det, a * det); + return this; + } +} + +class PlaneExt extends Plane { + constructor(normal = new Vector3(0, 0, 1), constant) { + super(normal); + if (typeof constant === "number") + this.constant = constant; + else if (constant) + this.parseConstantFromPoint(constant); + } + parseConstantFromPoint(constant) { + this.constant = -this.normal.dot(constant); + } + intersectLine(line, optionalTarget = new Vector3(), extendLine = false) { + let v1 = new Vector3(); + let direction = line.delta(v1); + let denominator = this.normal.dot(direction); + if (denominator === 0) { + // line is coplanar, return origin + if (this.distanceToPoint(line.start) === 0) { + return optionalTarget.copy(line.start); + } + // Unsure if this is the correct method to handle this case. + return undefined; + } + let t = -(line.start.dot(this.normal) + this.constant) / denominator; + //If you not extendLine,check intersect point in Line + if (!extendLine && (t < -1e-6 || t > 1)) { + return undefined; + } + return optionalTarget.copy(direction).multiplyScalar(t).add(line.start); + } + intersectRay(ray, optionalTarget, extendLine) { + // 从射线初始位置 + let line = new Line3(ray.origin.clone(), ray.origin.clone().add(ray.direction)); + return this.intersectLine(line, optionalTarget, extendLine); + } +} + +const ROTATE_MTX2 = new Matrix2().set(0, -1, 1, 0); + +var Line_1; +let Line = Line_1 = class Line extends Curve { + constructor(_StartPoint = new Vector3, _EndPoint = new Vector3) { + super(); + this._StartPoint = _StartPoint; + this._EndPoint = _EndPoint; + } + get Is2D() { + return super.Is2D && equaln$1(this._StartPoint.z, 0) && equaln$1(this._EndPoint.z, 0); + } + get Shape() { + return new Shape$1([AsVector2(this._StartPoint), AsVector2(this._EndPoint)]); + } + Z0() { + this.WriteAllObjectRecord(); + let ocsInv = this.OCSInv; + let sp = this.StartPoint.setZ(0).applyMatrix4(ocsInv); + let ep = this.EndPoint.setZ(0).applyMatrix4(ocsInv); + this._StartPoint.copy(sp); + this._EndPoint.copy(ep); + this.Update(); + return this; + } + ApplyScaleMatrix(m) { + this.WriteAllObjectRecord(); + this.StartPoint = this.StartPoint.applyMatrix4(m); + this.EndPoint = this.EndPoint.applyMatrix4(m); + return this; + } + ApplyMirrorMatrix(m) { + this.WriteAllObjectRecord(); + let sp = this.StartPoint; + let ep = this.EndPoint; + reviseMirrorMatrix(this._Matrix); + this.StartPoint = sp; + this.EndPoint = ep; + return this; + } + InitDrawObject(renderType = RenderType.Wireframe) { + let pts = [this._StartPoint, this._EndPoint]; + if (renderType === RenderType.WireframePrint) { + let array = []; + for (let p of pts) + array.push(p.x, p.y, p.z); + let geometry = new LineGeometry().setPositions(array); + return new Line2(geometry, ColorMaterial.PrintLineMatrial); + } + let geo = new BufferGeometry().setFromPoints(pts); + return new Line$1(geo, ColorMaterial.GetLineMaterial(this.DrawColorIndex)); + } + /** + * 重载:更新绘制的实体 + * @param {RenderType} type + * @param {Object3D} obj + */ + UpdateDrawObject(type, obj) { + let pts = [this._StartPoint, this._EndPoint]; + let plObj = obj; + let geo = plObj.geometry; + if (geo instanceof LineGeometry) { + let array = []; + for (let p of pts) + array.push(p.x, p.y, p.z); + geo.setPositions(array); + } + else { + if (!BufferGeometryUtils.UpdatePts(geo, pts)) + updateGeometry(plObj, new BufferGeometry().setFromPoints(pts)); + } + } + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + switch (snapMode) { + case ObjectSnapMode.End: + return [this.StartPoint, this.EndPoint]; + case ObjectSnapMode.Mid: + return [this.GetPointAtParam(0.5)]; + case ObjectSnapMode.Nea: + { + let derv = this.GetFirstDeriv(0).normalize(); + let viewNormal = new Vector3().fromArray(viewXform.elements, 2 * 3); + //平行不捕捉 + if (isParallelTo(viewNormal, derv)) + return []; + let fNormal = new Vector3().crossVectors(viewNormal, derv); + fNormal.crossVectors(derv, fNormal); + let plane = new PlaneExt(fNormal, this.StartPoint); + let plocal = plane.intersectLine(new Line3(pickPoint, pickPoint.clone().add(viewNormal)), new Vector3(), true); + let pclosest = this.GetClosestPointTo(plocal, false); + return [pclosest]; + } + case ObjectSnapMode.Ext: + return [this.GetClosestPointTo(pickPoint, true)]; + case ObjectSnapMode.Per: + if (lastPoint) { + let { closestPt, param } = this.GetClosestAtPoint(lastPoint, true); + if (this.ParamOnCurve(param)) + return [closestPt]; + } + } + return []; + } + GetGripPoints() { + return [this.StartPoint, this.GetPointAtParam(0.5), this.EndPoint]; + } + MoveGripPoints(indexList, vec) { + this.WriteAllObjectRecord(); + for (let index of indexList) { + if (index === 0) + this.StartPoint = this.StartPoint.add(vec); + else if (index === 2) + this.EndPoint = this.EndPoint.add(vec); + else { + let m = MoveMatrix(vec); + this.ApplyMatrix(m); + } + } + } + GetStretchPoints() { + return [this.StartPoint, this.EndPoint]; + } + MoveStretchPoints(indexList, vec) { + this.WriteAllObjectRecord(); + for (let index of indexList) { + if (index === 0) + this.StartPoint = this.StartPoint.add(vec); + else + this.EndPoint = this.EndPoint.add(vec); + } + } + GetFirstDeriv(param) { + return this.EndPoint.sub(this.StartPoint); + } + /** + * 需要注意的是,平行线和共线无交点 + * @param curve + * @param intType + * @param [tolerance=1e-4] + * @returns + */ + IntersectWith2(curve, intType, tolerance = 1e-4) { + if (curve instanceof Line_1 || curve.constructor.name === "RoomWallLine") { + return IntersectLineAndLine(this, curve, intType, tolerance); + } + if (curve instanceof Arc || curve.constructor.name === "RoomWallArc") { + return IntersectLineAndArc(this, curve, intType, tolerance); + } + if (curve instanceof Circle) { + return IntersectLineAndCircle(this, curve, intType, tolerance); + } + if (curve instanceof Polyline) { + return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType), tolerance)); + } + if (curve instanceof Ellipse) + return IntersectEllipseAndLine(this, curve, intType, tolerance); + //其他的尚未实现. + return []; + } + //Param + GetPointAtParam(param) { + return this.StartPoint.add(this.GetFirstDeriv(0).multiplyScalar(param)); + } + GetParamAtPoint(pt, fuzz = 1e-5) { + let { closestPt, param } = this.GetClosestAtPoint(pt, true); + if (!equalv3(closestPt, pt, fuzz)) + return NaN; + return param; + } + GetParamAtDist(d) { + return d / this.Length; + } + GetPointAtDistance(distance) { + return this.GetPointAtParam(this.GetParamAtDist(distance)); + } + GetDistAtParam(param) { + return this.Length * param; + } + GetDistAtPoint(pt) { + return this.GetDistAtParam(this.GetParamAtPoint(pt)); + } + GetSplitCurves(param) { + let params = this.SplitParamSort(param); + let pts = params.map(param => this.GetPointAtParam(param)); + let ret = new Array(); + if (pts.length >= 2) { + for (let i = 0; i < pts.length - 1; i++) { + let newLine = this.Clone(); + newLine.ColorIndex = this.ColorIndex; + newLine.SetStartEndPoint(pts[i], pts[i + 1]); + ret.push(newLine); + } + } + return ret; + } + GetParamAtPoint2(pt) { + let { param } = this.GetClosestAtPoint(pt, true); + return param; + } + //点在曲线上,已经确定点在曲线的延伸线上 + PtOnCurve3(p, fuzz = 1e-6) { + let { param } = this.GetClosestAtPoint(p, true); + return this.ParamOnCurve(param, fuzz); + } + GetClosestAtPoint(pt, extend) { + let sp = this.StartPoint; + let ep = this.EndPoint; + if (equalv3(pt, sp, 1e-8)) + return { closestPt: sp, param: 0 }; + else if (equalv3(pt, ep, 1e-8)) + return { closestPt: ep, param: 1 }; + let direction = this.GetFirstDeriv(0); + let length = direction.length(); + if (length === 0) { + let param = NaN; + if (equalv3(pt, this.StartPoint, 1e-6)) + param = 0; + return { closestPt: sp, param: param }; + } + direction.divideScalar(length); + let diff = pt.clone().sub(sp); + let param = direction.dot(diff); + let closestPt; + if (extend) + closestPt = sp.add(direction.multiplyScalar(param)); + else if (param < 0) { + closestPt = sp; + param = 0; + } + else if (param > length) { + closestPt = this.EndPoint; + param = length; + } + else + closestPt = sp.add(direction.multiplyScalar(param)); + return { + closestPt: closestPt, + param: param / length + }; + } + GetClosestPointTo(pt, extend) { + return this.GetClosestAtPoint(pt, extend).closestPt; + } + Extend(newParam) { + this.WriteAllObjectRecord(); + if (newParam < this.StartParam) { + this.StartPoint = this.GetPointAtParam(newParam); + } + else if (newParam > this.EndParam) { + this.EndPoint = this.GetPointAtParam(newParam); + } + } + Join(cu, allowGap = false, tolerance = 1e-5) { + if (cu instanceof Line_1 || cu.constructor.name === "RoomWallLine") { + //平行 + if (!isParallelTo(this.GetFirstDeriv(0).normalize(), cu.GetFirstDeriv(0).normalize())) + return Status.False; + let sp = cu.StartPoint; + let { closestPt: cp1, param: param1 } = this.GetClosestAtPoint(sp, true); + if (!equalv3(sp, cp1, tolerance)) //点在曲线上,允许较低的精度 + return Status.False; + let ep = cu.EndPoint; + let { closestPt: cp2, param: param2 } = this.GetClosestAtPoint(ep, true); + if (!equalv3(ep, cp2, tolerance)) + return Status.False; + if (param1 > param2) { + [param1, param2] = [param2, param1]; + [sp, ep] = [ep, sp]; + } + if (allowGap || Math.max(0, param1) < Math.min(1, param2) + tolerance / this.Length) //这里的容差是值容差,但是我们用它来判断参数,所以进行转换 + { + if (param1 < 0) + this.StartPoint = sp; + if (param2 > 1) + this.EndPoint = ep; + return Status.True; + } + } + return Status.False; + } + Reverse() { + this.WriteAllObjectRecord(); + [this._StartPoint, this._EndPoint] = [this._EndPoint, this._StartPoint]; + return this; + } + GetOffsetCurves(offsetDist) { + let offset = this._EndPoint.clone().sub(this._StartPoint).normalize().multiplyScalar(offsetDist); + ROTATE_MTX2.applyVector(offset); + let newLine = this.Clone(); + newLine.ClearDraw(); + newLine._StartPoint.add(offset); + newLine._EndPoint.add(offset); + return [newLine]; + } + get BoundingBox() { + return new Box3().setFromPoints([this.StartPoint, this.EndPoint]); + } + /** + * 返回对象在自身坐标系下的Box + */ + get BoundingBoxInOCS() { + return new Box3Ext().setFromPoints([this._StartPoint, this._EndPoint]); + } + get StartParam() { + return 0; + } + get EndParam() { + return 1; + } + //属性 + get Length() { return this._StartPoint.distanceTo(this._EndPoint); } + //#region -----------------------------File----------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + _ReadFile(file) { + super._ReadFile(file); + let ver = file.Read(); //1 + this._StartPoint.fromArray(file.Read()); + this._EndPoint.fromArray(file.Read()); + if (ver > 1) + this.ReadRoomAndCabinetName(file); + } + //对象将自身数据写入到文件. + WriteFile(file) { + super.WriteFile(file); + file.Write(2); //ver + file.Write(this._StartPoint.toArray()); + file.Write(this._EndPoint.toArray()); + this.WriteRoomAndCabinetName(file); + } + //#endregion-----------------------------File End----------------------------- + //#region 属性 + set StartPoint(p) { + this.WriteAllObjectRecord(); + this._StartPoint.copy(p).applyMatrix4(this.OCSInv); + this.Update(); + } + get StartPoint() { + return this._StartPoint.clone().applyMatrix4(this.OCSNoClone); + } + get StartPointInOcs() { return this._StartPoint.clone(); } + get EndPointInOcs() { return this._EndPoint.clone(); } + get EndPoint() { + return this._EndPoint.clone().applyMatrix4(this.OCSNoClone); + } + set EndPoint(p) { + this.WriteAllObjectRecord(); + this._EndPoint.copy(p).applyMatrix4(this.OCSInv); + this.Update(); + } + SetStartEndPoint(s, e) { + this.WriteAllObjectRecord(); + let inv = this.OCSInv; + this._StartPoint.copy(s).applyMatrix4(inv); + this._EndPoint.copy(e).applyMatrix4(inv); + this.Update(); + } +}; +Line = Line_1 = __decorate([ + Factory +], Line); + +var Ellipse_1; +let Ellipse = Ellipse_1 = class Ellipse extends Curve { + constructor(center, radX = 1e-3, radY = 1e-3, angle = 0) { + super(); + this._startAngle = 0; + this._endAngle = Math.PI * 2; + center && this._Matrix.setPosition(center); + this._radX = radX; + this._radY = radY; + this._rotate = angle; + } + get StartParam() { + return 0; + } + get EndParam() { + return 1; + } + get StartPoint() { + return this.GetPointAtParam(0); + } + get EndPoint() { + return this.GetPointAtParam(1); + } + get Shape() { + let sp = new Shape$1(); + sp.ellipse(0, 0, this._radX, this._radY, this._startAngle, this._endAngle, false, this._rotate); + return sp; + } + get IsClose() { + return equaln$1(this.TotalAngle, Math.PI * 2); + } + get Center() { + return new Vector3().setFromMatrixPosition(this._Matrix); + } + set Center(v) { + this.WriteAllObjectRecord(); + this._Matrix.setPosition(v); + this.Update(); + } + get RadX() { + return this._radX; + } + set RadX(v) { + this.WriteAllObjectRecord(); + this._radX = v; + this.Update(); + } + get RadY() { + return this._radY; + } + set RadY(v) { + this.WriteAllObjectRecord(); + this._radY = v; + this.Update(); + } + get Rotation() { + return this._rotate; + } + set Rotation(v) { + this.WriteAllObjectRecord(); + this._rotate = v; + this.Update(); + } + get StartAngle() { + return this._startAngle; + } + get EndAngle() { + return this._endAngle; + } + set StartAngle(v) { + this.WriteAllObjectRecord(); + this._startAngle = v; + this.Update(); + } + set EndAngle(v) { + this.WriteAllObjectRecord(); + this._endAngle = v; + this.Update(); + } + get Length() { + let a = this._radX; + let b = this._radY; + return Math.PI * Math.abs(3 * (a + b) - Math.sqrt((3 * a + b) * (a + 3 * b))) * this.TotalAngle / Math.PI * 0.5; + } + get Area() { + let area = Math.PI * this._radX * this._radY; + let an = this._endAngle - this._startAngle; + if (an < 0) + an = Math.PI * 2 + an; + area *= an / Math.PI * 0.5; + let area2 = Math.abs(getDeterminantFor2V(AsVector2(this.StartPoint.sub(this.Center)), AsVector2(this.EndPoint.sub(this.Center)))) / 2; + if (an < Math.PI) + area -= area2; + else + area += area2; + return area; + } + get TotalAngle() { + let totolAngle = this._endAngle - this._startAngle; + if (totolAngle <= 0) + totolAngle = Math.PI * 2 + totolAngle; + return totolAngle; + } + ApplyScaleMatrix(m) { + //或许我们应该在缩放一下轴尺寸 但是先不做了 + let p = this.Position; + p.applyMatrix4(m); + this.Position = p; + return this; + } + Extend(newParam) { + this.WriteAllObjectRecord(); + if (newParam < 0) + this._startAngle = this.GetAngleAtParam(newParam); + else if (newParam > 1) + this._endAngle = this.GetAngleAtParam(newParam); + this.Update(); + } + PtInCurve(pt) { + let p = rotatePoint(pt.clone().sub(this.Center), -this.Rotation); + return p.x ** 2 / this.RadX ** 2 + p.y ** 2 / this.RadY ** 2 < 1; + } + PtOnCurve(pt) { + return this.PtOnEllipse(pt) && this.ParamOnCurve(this.GetParamAtPoint(pt)); + } + PtOnEllipse(pt) { + let p = rotatePoint(pt.clone().applyMatrix4(this.OCSInv), -this.Rotation); + return equaln$1(p.x ** 2 / this.RadX ** 2 + p.y ** 2 / this.RadY ** 2, 1, 1e-3); + } + GetPointAtParam(param) { + let an = this.TotalAngle * param + this._startAngle; + let a = this.RadX; + let b = this.RadY; + let pt = new Vector3(a * Math.cos(an), b * Math.sin(an), 0); + let mtx = new Matrix2().setRotate(this._rotate); + mtx.applyVector(pt); + return pt.applyMatrix4(this.OCSNoClone); + } + GetParamAtPoint(pt) { + if (!this.PtOnEllipse(pt)) + return NaN; + let an = this.GetCircleAngleAtPoint(pt); + let allAngle = this.TotalAngle; + let param = an / allAngle; + if (this.IsClose) + return param; + else { + if (an >= this._startAngle) + param = (an - this._startAngle) / allAngle; + else + param = ((Math.PI * 2) - (this._startAngle - an)) / allAngle; + //剩余的参数 + let remParam = Math.PI * 2 / allAngle - 1; + if (param > (remParam * 0.5 + 1)) //一半 + param = (param - 1) - remParam; //返回负数 + return param; + } + } + GetPointAtDistance(distance) { + let param = distance / this.Length; + return this.GetPointAtParam(param); + } + GetDistAtParam(param) { + return this.Length * param; + } + GetDistAtPoint(pt) { + let param = this.GetParamAtPoint(pt); + return this.GetDistAtParam(param); + } + GetParamAtDist(d) { + return d / this.Length; + } + GetAngleAtParam(param) { + return this._startAngle + param * this.TotalAngle; + } + GetCircleAngleAtPoint(pt) { + pt = pt.clone().applyMatrix4(this.OCSInv); + let romtx = new Matrix2().setRotate(-this._rotate); + romtx.applyVector(pt); + //https://www.petercollingridge.co.uk/tutorials/computational-geometry/finding-angle-around-ellipse/ + let an = Math.atan(this.RadX * pt.y / (this.RadY * pt.x)); + if (pt.x < 0) + an += Math.PI; + else if (an < 0) + an += Math.PI * 2; + return an; + } + GetFirstDeriv(pt) { + if (typeof pt === "number") + pt = this.GetPointAtParam(pt); + else + pt = pt.clone(); + let refPts = this.GetGripPoints(); + let p = pt.clone().applyMatrix4(this.OCSInv).applyMatrix4(new Matrix4().makeRotationZ(-this._rotate)); + let vec = new Vector3(); + if (equalv3(pt, refPts[0])) + vec.set(0, 1, 0); + else if (equalv3(pt, refPts[1])) + vec.set(0, -1, 0); + else if (p.y > 0) { + let k = -(this._radY ** 2 * p.x) / (this._radX ** 2 * p.y); + vec.set(-1, -k, 0); + } + else { + let k = -(this._radY ** 2 * p.x) / (this._radX ** 2 * p.y); + vec.set(1, k, 0); + } + rotatePoint(vec, this._rotate); + return vec.applyMatrix4(this.OCS.setPosition(0, 0, 0)); + } + GetClosestPointTo(p, extend) { + //参考:https://wet-robots.ghost.io/simple-method-for-distance-to-ellipse/ + let ro = new Matrix4().makeRotationZ(this._rotate); + let roInv = new Matrix4().getInverse(ro); + let pt = p.clone().applyMatrix4(this.OCSInv).setZ(0).applyMatrix4(roInv); + let px = pt.x; + let py = pt.y; + let t = angle(pt); + let a = this._radX; + let b = this._radY; + let x, y; + for (let i = 0; i < 3; i++) { + x = a * Math.cos(t); + y = b * Math.sin(t); + let ex = (a ** 2 - b ** 2) * Math.cos(t) ** 3 / a; + let ey = (b * b - a * a) * Math.sin(t) ** 3 / b; + let rx = x - ex; + let ry = y - ey; + let qx = px - ex; + let qy = py - ey; + let r = Math.sqrt(ry ** 2 + rx ** 2); + let q = Math.sqrt(qy ** 2 + qx ** 2); + let dc = r * Math.asin((rx * qy - ry * qx) / (r * q)); + let dt = dc / Math.sqrt(a * a + b * b - x * x - y * y); + t += dt; + } + let retPt = new Vector3(x, y).applyMatrix4(ro).applyMatrix4(this.OCSNoClone); + if (this.IsClose || extend) { + return retPt; + } + else if (this.PtOnCurve(retPt)) { + return retPt; + } + else { + let d1 = p.distanceToSquared(this.StartPoint); + let d2 = p.distanceToSquared(this.EndPoint); + return d1 < d2 ? this.StartPoint : this.EndPoint; + } + } + GetOffsetCurves(offsetDist) { + if ((offsetDist + Math.min(this._radX, this._radY)) > 0) { + let el = this.Clone(); + el.RadX = this._radX + offsetDist; + el.RadY = this._radY + offsetDist; + return [el]; + } + return []; + } + GetSplitCurves(param) { + let params; + if (param instanceof Array) { + params = param.filter(p => this.ParamOnCurve(p)); + params.sort((a1, a2) => a2 - a1); //从大到小 + } + else + params = [param]; + //补上最后一个到第一个的弧 + if (this.IsClose) + params.unshift(arrayLast(params)); + else { + params.unshift(1); + params.push(0); + } + arrayRemoveDuplicateBySort(params); + let anglelist = params.map(param => this.TotalAngle * param + this._startAngle); + let elllist = []; + for (let i = 0; i < anglelist.length - 1; i++) { + let sa = anglelist[i]; + let ea = anglelist[i + 1]; + let el = this.Clone(); + if (!equaln$1(sa, ea, 1e-6)) { + el.StartAngle = ea; + el.EndAngle = equaln$1(sa, 0) ? Math.PI * 2 : sa; + elllist.push(el); + } + } + return elllist; + } + Join(el) { + if (this.IsClose || el.IsClose || !this.IsCoplaneTo(el) || !equalv3(el.Center, this.Center)) + return Status.False; + let status = Status.False; + if (equaln$1(this._endAngle, this._startAngle)) { + this.EndAngle = this._endAngle; + status = Status.True; + } + else if (equaln$1(this._startAngle, el._endAngle)) { + this.StartAngle = el._startAngle; + status = Status.True; + } + if (status === Status.True && !this.IsClose && equaln$1(this._startAngle, this._endAngle)) { + this.StartAngle = 0; + this.EndAngle = Math.PI * 2; + } + return status; + } + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + switch (snapMode) { + case ObjectSnapMode.End: + { + let pts = this.GetGripPoints(); + return pts; + } + case ObjectSnapMode.Cen: + return [this.Center]; + case ObjectSnapMode.Nea: + { + return getArcOrCirNearPts(this, pickPoint, viewXform); + } + case ObjectSnapMode.Per: + if (lastPoint) { + if (equaln$1(lastPoint.distanceToSquared(this.Center), 0, 1e-10)) + return []; + return [this.GetClosestPointTo(lastPoint, false)]; + } + case ObjectSnapMode.Tan: + { + //TODO:过某点获取椭圆全部切点 + if (lastPoint) { + return getTanPtsOnEllipse(); + } + return []; + } + default: + return []; + } + } + IntersectWith2(curve, intType) { + //TODO:优化椭圆和椭圆,椭圆和圆相交 + if (curve instanceof Line) { + return SwapParam(IntersectEllipseAndLine(curve, this, reverseIntersectOption(intType))); + } + else if (curve instanceof Circle || curve instanceof Arc) { + return IntersectEllipseAndCircleOrArc(this, curve, intType); + } + else if (curve instanceof Polyline) { + return SwapParam(IntersectPolylineAndCurve(curve, this, intType)); + } + else if (curve instanceof Ellipse_1) { + return IntersectEllipse(this, curve); + } + else + return []; + } + GetStretchPoints() { + return this.GetGripPoints(); + } + GetGripPoints() { + let tmpMat4 = new Matrix4().makeRotationZ(this.Rotation); + let pts = [ + new Vector3(this._radX, 0), + new Vector3(-this._radX, 0), + new Vector3(0, this._radY), + new Vector3(0, -this._radY) + ]; + for (let p of pts) + p.applyMatrix4(tmpMat4).applyMatrix4(this.OCSNoClone); + if (!equaln$1(0, this._startAngle)) + pts.push(this.StartPoint); + if (!equaln$1(0, this._endAngle)) + pts.push(this.EndPoint); + pts.push(this.Center); + return pts; + } + MoveStretchPoints(indexList, vec) { + this.ApplyMatrix(MoveMatrix(vec)); + } + MoveGripPoints(indexList, vec) { + let pts = this.GetStretchPoints(); + if (indexList.length > 0) { + let p = pts[indexList[0]].clone(); + p.add(vec); + if (indexList[0] <= 1) + this.RadX = p.distanceTo(this.Center); + else if (indexList[0] <= 3) + this.RadY = p.distanceTo(this.Center); + else { + let p1 = pts[indexList[0]]; + //TODO:跟cad不一致待优化 + if (equalv3(p1, this.StartPoint)) { + let v1 = p1.clone().sub(this.Center); + let v2 = p.clone().sub(this.Center); + let an = angleTo(v1, v2); + this.StartAngle = this.StartAngle + an; + } + else if (equalv3(p1, this.EndPoint)) { + let v1 = p1.clone().sub(this.Center); + let v2 = p.clone().sub(this.Center); + let an = angleTo(v2, v1); + this.EndAngle = this.EndAngle + an; + } + else + this.Center = p; + } + } + } + Convert2Polyline(count = 0) { + const MIN_LEN = 80; + const par = this.TotalAngle / Math.PI * 0.5; + if (!count) { + count = Math.floor(this.Length / par / MIN_LEN); + count = MathUtils.clamp(count, 15, 80); + } + count = Math.floor(count * par); + if ((count & 1) === 0) + count++; + let pts = this.Shape.getPoints(count); + if (this.IsClose) + pts.pop(); + //忽略空多段线怎么样? + if (pts.length < 2) { + let pl = new Polyline; + return pl; + } + let pl = Pts2Polyline(pts, this.IsClose); + pl.ColorIndex = this.ColorIndex; + pl.ApplyMatrix(this.OCS); + if (this.IsClose) + pl.CloseMark = true; + return pl; + } + _ReadFile(file) { + super._ReadFile(file); + let ver = file.Read(); + this._radX = file.Read(); + this._radY = file.Read(); + this._rotate = file.Read(); + this._startAngle = file.Read(); + this._endAngle = file.Read(); + if (ver > 1) + this.ReadRoomAndCabinetName(file); + this.Update(); + } + //对象将自身数据写入到文件. + WriteFile(file) { + super.WriteFile(file); + file.Write(2); + file.Write(this.RadX); + file.Write(this.RadY); + file.Write(this.Rotation); + file.Write(this._startAngle); + file.Write(this._endAngle); + this.WriteRoomAndCabinetName(file); + } +}; +Ellipse = Ellipse_1 = __decorate([ + Factory +], Ellipse); + var Arc_1; /** * 圆弧实体类 @@ -9475,6 +5575,7 @@ var Arc_1; let Arc = Arc_1 = class Arc extends Curve { constructor(center = ZeroVec, radius = 0.1, startAngle = 0.1, endAngle = 0, clockwise = true) { super(); + this._DisplayAccuracy = 0; /** * 曲线为顺时针 */ @@ -9488,6 +5589,9 @@ let Arc = Arc_1 = class Arc extends Curve { get Shape() { let sp = new Shape2(); sp.absarc(0, 0, this._Radius, this._StartAngle, this._EndAngle, this._Clockwise); + if (this._DisplayAccuracy !== 0) { + sp.DisplayAccuracy = this._DisplayAccuracy; + } return sp; } get Center() { @@ -9504,6 +5608,16 @@ let Arc = Arc_1 = class Arc extends Curve { SetMtxVector(this._Matrix, 2, v); this.Update(); } + get DisplayAccuracy() { + return this._DisplayAccuracy; + } + set DisplayAccuracy(v) { + if (!equaln$1(v, this._DisplayAccuracy)) { + this.WriteAllObjectRecord(); + this._DisplayAccuracy = v; + this.Update(); + } + } get Area() { return 0.5 * this.AllAngle * this.Radius * this.Radius; } @@ -9655,10 +5769,10 @@ let Arc = Arc_1 = class Arc extends Curve { let param = this.GetParamAtPoint(pt); return this.GetDistAtParam(param); } - GetParamAtPoint(pt) { + GetParamAtPoint(pt, fuzz = 1e-6) { if (this._Radius == 0 || this.AllAngle == 0 || - !equaln$1(pt.distanceTo(this.Center), this._Radius, 1e-6)) + !equaln$1(pt.distanceTo(this.Center), this._Radius, fuzz)) return NaN; return this.GetParamAtAngle(this.GetAngleAtPoint(pt)); } @@ -10061,15 +6175,23 @@ let Arc = Arc_1 = class Arc extends Curve { this._StartAngle = file.Read(); this._EndAngle = file.Read(); this._Clockwise = file.ReadBool(); + if (ver > 2) { + this._DisplayAccuracy = file.Read(); + } + if (ver > 3) + this.ReadRoomAndCabinetName(file); } //对象将自身数据写入到文件. WriteFile(file) { super.WriteFile(file); - file.Write(2); + file.Write(4); file.Write(this._Radius); file.Write(this._StartAngle); file.Write(this._EndAngle); file.WriteBool(this._Clockwise); + file.Write(this._DisplayAccuracy); + //ver4 + this.WriteRoomAndCabinetName(file); } }; Arc._X = new Vector3; @@ -10081,6 +6203,4599 @@ Arc = Arc_1 = __decorate([ Factory ], Arc); +var DragPointType; +(function (DragPointType) { + DragPointType[DragPointType["Grip"] = 0] = "Grip"; + DragPointType[DragPointType["Stretch"] = 1] = "Stretch"; + DragPointType[DragPointType["End"] = 2] = "End"; +})(DragPointType || (DragPointType = {})); + +var Circle_1; +let circleGeometry; +function GetCircleGeometry() { + if (!circleGeometry) + circleGeometry = BufferGeometryUtils.CreateFromPts(new EllipseCurve(0, 0, 1, 1, 0, 2 * Math.PI, false, 0).getPoints(360).map(AsVector3)); + return circleGeometry; +} +let Circle = Circle_1 = class Circle extends Curve { + constructor(center, radius = 1e-6) { + super(); + this._DisplayAccuracy = 0; + center && this._Matrix.setPosition(center); + this._Radius = radius; + } + get DisplayAccuracy() { + return this._DisplayAccuracy; + } + set DisplayAccuracy(v) { + if (!equaln$1(v, this._DisplayAccuracy)) { + this.WriteAllObjectRecord(); + this._DisplayAccuracy = v; + this.Update(); + } + } + get Shape() { + let sp = new Shape2(); + sp.ellipse(0, 0, this._Radius, this._Radius, 0, 2 * Math.PI, false, 0); + if (this._DisplayAccuracy !== 0) { + sp.DisplayAccuracy = this._DisplayAccuracy; + } + return sp; + } + get Center() { + return new Vector3().setFromMatrixPosition(this._Matrix); + } + set Center(v) { + this.WriteAllObjectRecord(); + this._Matrix.setPosition(v); + this.Update(); + } + get Radius() { + return this._Radius; + } + set Radius(v) { + this.WriteAllObjectRecord(); + this._Radius = clamp(v, 1e-9, 1e19); + this.Update(); + } + ApplyScaleMatrix(m) { + this.WriteAllObjectRecord(); + this.Center = this.Center.applyMatrix4(m); + this.Radius = this.Radius * m.getMaxScaleOnAxis(); + return this; + } + ApplyMirrorMatrix(m) { + this.WriteAllObjectRecord(); + reviseMirrorMatrix(this._Matrix); + return this; + } + //******************** Curve function start*****************// + get StartPoint() { + return this.GetPointAtParam(0); + } + get StartParam() { + return 0; + } + get EndPoint() { + return this.GetPointAtParam(0); + } + get EndParam() { + return 1; + } + PtInCurve(pt) { + return pt.distanceToSquared(this.Center) < Math.pow(this.Radius, 2); + } + get Area() { + return Math.PI * this._Radius ** 2; + } + get Area2() { + return Math.PI * this._Radius ** 2; + } + get Length() { + return Math.PI * 2 * this._Radius; + } + get IsClose() { + return true; + } + //曲线为顺时针 + get IsClockWise() { return false; } + GetPointAtParam(param) { + return polar(new Vector3(), param * 2 * Math.PI, this._Radius).applyMatrix4(this._Matrix); + } + GetPointAtDistance(distance) { + let param = distance / (Math.PI * 2 * this._Radius); + return this.GetPointAtParam(param); + } + GetDistAtParam(param) { + return Math.PI * 2 * this._Radius * param; + } + GetDistAtPoint(pt) { + let param = this.GetParamAtPoint(pt); + return this.GetDistAtParam(param); + } + GetParamAtDist(d) { + return d / (Math.PI * 2 * this._Radius); + } + GetSplitCurves(param) { + let params; + if (param instanceof Array) { + params = param.filter(p => this.ParamOnCurve(p)); + params.sort((a1, a2) => a2 - a1); //从大到小 + arrayRemoveDuplicateBySort(params); + if (params.length < 2) + return []; + } + else //圆不能被单个参数切割 + return []; + //补上最后一个到第一个的弧 + params.unshift(arrayLast(params)); + let anglelist = params.map(param => Math.PI * 2 * param); + let curvelist = new Array(); + for (let i = 0; i < anglelist.length - 1; i++) { + let sa = anglelist[i]; + let ea = anglelist[i + 1]; + if (!equaln$1(sa, ea, 1e-6)) { + let arc = new Arc(new Vector3(), this._Radius, ea, sa, false); + arc.ColorIndex = this.ColorIndex; + arc.ApplyMatrix(this.OCS); + curvelist.push(arc); + } + } + return curvelist; + } + GetParamAtPoint(pt) { + if (!this.PtOnCurve(pt)) + return NaN; + return angle(pt.clone().applyMatrix4(this.OCSInv)) / (Math.PI * 2); + } + PtOnCurve(pt, fuzz = 1e-5) { + return equaln$1(pt.distanceToSquared(this.Center), this._Radius * this._Radius, fuzz); + } + GetOffsetCurves(offsetDist) { + if ((offsetDist + this._Radius) > 0) { + let circle = this.Clone(); + circle.Radius = this._Radius + offsetDist; + return [circle]; + } + return []; + } + IntersectWith2(curve, intType, tolerance = 1e-5) { + if (curve instanceof Arc) { + return IntersectCircleAndArc(this, curve, intType, tolerance); + } + if (curve instanceof Line) { + return SwapParam(IntersectLineAndCircle(curve, this, reverseIntersectOption(intType), tolerance)); + } + if (curve instanceof Circle_1) { + return IntersectCircleAndCircle(this, curve, tolerance); + } + if (curve instanceof Ellipse) { + return SwapParam(IntersectEllipseAndCircleOrArc(curve, this, intType)); + } + if (curve instanceof Polyline) + return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType), tolerance)); + return []; + } + //******************** Curve function end*****************// + get BoundingBoxInOCS() { + return new Box3Ext(new Vector3(-this.Radius, -this.Radius), new Vector3(this.Radius, this.Radius)); + } + get BoundingBox() { + let z = this.Normal; + let x = new Vector3; + let y = new Vector3; + Orbit.ComputUpDirection(z, y, x); + let m = new Matrix4().makeBasis(x, y, z).setPosition(this.Center); + //使用任意轴坐标系 以便我们正确的对齐世界坐标系 + return this.BoundingBoxInOCS.applyMatrix4(m); + } + InitDrawObject(renderType = RenderType.Wireframe) { + let obj = new Object3D(); + let cirGeo = GetCircleGeometry(); + if (renderType === RenderType.WireframePrint) { + let geometry = new LineGeometry().setPositions(cirGeo.attributes.position.array); + obj.add(new Line2(geometry, ColorMaterial.PrintLineMatrial)); + } + else { + let line = new Line$1(cirGeo, ColorMaterial.GetLineMaterial(this.DrawColorIndex)); + obj.add(line); + } + this.UpdateDrawObject(renderType, obj); + return obj; + } + UpdateDrawObject(type, obj) { + obj.children[0].scale.set(this._Radius, this._Radius, this._Radius); + obj.children[0].updateMatrix(); + } + UpdateDrawObjectMaterial(type, obj, material) { + if (type === RenderType.WireframePrint) ; + else { + let m = obj.children[0]; + m.material = material ? material : ColorMaterial.GetLineMaterial(this.DrawColorIndex); + return obj; + } + } + GetDragPointCount(drag) { + if (drag === DragPointType.Grip) + return 5; + else + return 1; + } + GetGripPoints() { + let pts = [ + new Vector3(), + new Vector3(0, this._Radius), + new Vector3(0, -this._Radius), + new Vector3(-this._Radius, 0), + new Vector3(this._Radius, 0), + ]; + let ocs = this.OCS; + pts.forEach(p => p.applyMatrix4(ocs)); + return pts; + } + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + switch (snapMode) { + case ObjectSnapMode.Nea: + { + return getArcOrCirNearPts(this, pickPoint, viewXform); + } + case ObjectSnapMode.Cen: + return [this.Center]; + case ObjectSnapMode.Per: + if (lastPoint) { + if (equaln$1(lastPoint.distanceToSquared(this.Center), 0, 1e-10)) + return []; + let l = new Line(this.Center, lastPoint); + return l.IntersectWith(this, IntersectOption.ExtendBoth); + } + case ObjectSnapMode.Tan: + let pts = GetTanPtsOnArcOrCircle(this, lastPoint); + if (pts) + return pts; + break; + case ObjectSnapMode.End: + { + let pts = this.GetGripPoints(); + pts.shift(); + return pts; + } + } + return []; + } + MoveGripPoints(indexList, vec) { + let pts = this.GetGripPoints(); + if (indexList.length > 0) { + let index = indexList[0]; + let p = pts[index]; + if (p) { + if (index > 0) { + p.add(vec); + this.Radius = p.distanceTo(this.Center); + } + else { + this.Center = this.Center.add(vec); + } + } + } + } + GetStretchPoints() { + let pts = [new Vector3()]; + let ocs = this.OCS; + pts.forEach(p => p.applyMatrix4(ocs)); + return pts; + } + MoveStretchPoints(indexList, vec) { + if (indexList.length > 0) { + let mat = MoveMatrix(vec); + this.ApplyMatrix(mat); + } + } + GetFirstDeriv(pt) { + if (typeof pt === "number") + pt = this.GetPointAtParam(pt); + else + pt = pt.clone(); + pt.applyMatrix4(this.OCSInv); + let an = angle(pt) + Math.PI * 0.5; + return polar(new Vector3(), an, 1).applyMatrix4(new Matrix4().extractRotation(this.OCS)); + } + GetClosestPointTo(pt, extend) { + pt = pt.clone().applyMatrix4(this.OCSInv); + if (equalv2(pt, ZeroVec, 1e-8)) + return this.GetPointAtParam(0); + let a = Math.atan2(pt.y, pt.x); + return polar(new Vector3, a, this._Radius).applyMatrix4(this._Matrix); + } + //#region -------------------------File------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + //对象从文件中读取数据,初始化自身 + _ReadFile(file) { + super._ReadFile(file); + let ver = file.Read(); + this._Radius = file.Read(); + if (ver > 1) + this.ReadRoomAndCabinetName(file); + } + //对象将自身数据写入到文件. + WriteFile(file) { + super.WriteFile(file); + file.Write(2); + file.Write(this._Radius); + this.WriteRoomAndCabinetName(file); + } +}; +Circle = Circle_1 = __decorate([ + Factory +], Circle); + +const ARC_DRAW_CONFIG = { + ARC_SplitLength: 0.4, //圆的分段长度 + ARC_RADIUS_MIN: 2.5, //大于半径25的自动优化成36等分圆 保证绘制光滑 + Arc_MinSplitCount: 8, //圆的最小分段个数 + ARC_MaxSplitCount: 90, //圆的最大分段个数 +}; +function GetArcDrawCount(arc) { + let radius = typeof arc === "number" ? arc : arc.Radius; + let splitCount = radius / ARC_DRAW_CONFIG.ARC_SplitLength; + //保证是偶数(避免奇数和Shape2计算方式一致导致的干涉) + splitCount = clamp(Math.floor(splitCount * 0.5) * 2, ARC_DRAW_CONFIG.Arc_MinSplitCount, ARC_DRAW_CONFIG.ARC_MaxSplitCount); + if (radius > ARC_DRAW_CONFIG.ARC_RADIUS_MIN) + splitCount = Math.max(36, splitCount); + return splitCount; +} +/** + * + * @param cu + */ +function SplitCurveParams(cu) { + let xparams = []; + if (cu instanceof Circle) { + let splitCount = GetArcDrawCount(cu); + if (cu.DisplayAccuracy > 0) + splitCount = cu.DisplayAccuracy; + for (let i = 0; i < splitCount; i++) + xparams.push(i / splitCount); + } + else + //分段1 + for (let i = 0; i < cu.EndParam; i++) { + xparams.push(i); + if (!equaln$1(cu.GetBulgeAt(i), 0, BUL_IS_LINE_FUZZ)) // is arc + { + let arc = cu.GetCurveAtIndex(i); + let splitCount = GetArcDrawCount(arc); + if (splitCount === 0) + continue; + let a = Math.PI * 2 / splitCount; + let params = []; + for (let j = 0; j < splitCount; j++) { + let param = arc.GetParamAtAngle(a * j); + if (arc.ParamOnCurve(param)) + params.push(param); + } + arraySortByNumber$1(params); + if (params.length === 0) + continue; + for (let p of params) { + if (p > 1e-5 && p < 0.99999) + xparams.push(p + i); + } + } + } + xparams.push(cu.EndParam); + return xparams; +} + +let tempArc; +class Shape2 extends Shape$1 { + constructor() { + super(...arguments); + this._DisplayAccuracy = 0; + } + get DisplayAccuracy() { + return this._DisplayAccuracy; + } + set DisplayAccuracy(v) { + if (!equaln$1(v, this._DisplayAccuracy)) + this._DisplayAccuracy = v; + } + getPoints(divisions = 12, optimizeArc = true) { + let points = [], last; + for (let i = 0, curves = this.curves; i < curves.length; i++) { + let curve = curves[i]; + let resolution = divisions; + //@ts-ignore + if (curve && curve.isEllipseCurve) { + if (optimizeArc) { + if (!tempArc) + tempArc = new Arc; + else + tempArc.ClearDraw(); + tempArc.IsClockWise = curve.aClockwise; + tempArc.StartAngle = curve.aStartAngle; + tempArc.EndAngle = curve.aEndAngle; + tempArc.Radius = Math.abs(curve.xRadius); + //根据圆的半径来确定绘制个数(与SplitCurveParams一致) + let splitCount = GetArcDrawCount(tempArc); + if (this._DisplayAccuracy > 0) { + splitCount = this._DisplayAccuracy; + } + resolution = Math.max(1, Math.ceil(Math.abs((tempArc.AllAngle * 0.5) / Math.PI) * splitCount * 0.5)) * 2; + } + else + resolution = divisions * 2; + } + else { + //@ts-ignore + resolution = (curve && (curve.isLineCurve || curve.isLineCurve3)) ? 1 + //@ts-ignore + : (curve && curve.isSplineCurve) ? divisions * curve.points.length + : divisions; + } + let pts = curve.getPoints(resolution); + for (let j = 0; j < pts.length; j++) { + let point = pts[j]; + if (last && equalv2(last, point, 1e-4)) + continue; // ensures no consecutive points are duplicates + points.push(point); + last = point; + if (j === pts.length - 1) + point["_mask_"] = true; + } + } + if (this.autoClose + && points.length > 1 + && !points[points.length - 1].equals(points[0])) { + points.push(points[0]); + } + return points; + } + absellipse(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation) { + let curve = new EllipseCurve(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation); + /* + if (this.curves.length > 0) + { + // if a previous curve is present, attempt to join + let firstPoint = curve.getPoint(0); + if (!equalv2(firstPoint, this.currentPoint)) + { + this.lineTo(firstPoint.x, firstPoint.y); + } + } + */ + this.curves.push(curve); + let lastPoint = curve.getPoint(1); + this.currentPoint.copy(lastPoint); + return this; + } +} + +//解析二维圆弧 +class Arc2d { + constructor(p1, p2, bul) { + p1 = p1.clone(); + p2 = p2.clone(); + //a (* 2 (atan b)) + let a = Math.atan(bul) * 2; + //r (/ (distance p1 p2) 2 (sin a)) + let r = p1.distanceTo(p2) / 2 / Math.sin(a); + //c (polar p1 (+ (- (/ pi 2) a) (angle p1 p2)) r) + let c = polar(p1.clone(), Math.PI / 2 - a + angle(p2.clone().sub(p1)), r); + this._Radius = Math.abs(r); + this._StartAn = angle(p1.sub(c)); + this._EndAn = angle(p2.sub(c)); + this._Center = c; + } +} +//创建轮廓 通过点表和凸度 +function CreatePolylinePath(pts, buls, displayAccuracy = 0) { + let shape = new Shape2(); + shape.DisplayAccuracy = displayAccuracy; + if (pts.length === 0) + return shape; + let firstPt = pts[0]; + shape.moveTo(firstPt.x, firstPt.y); + for (let i = 0; i < pts.length - 1; i++) { + let prePt = pts[i]; + let nextPt = pts[i + 1]; + if (equaln$1(buls[i], 0, 1e-8) || equalv2(prePt, nextPt, 1e-2)) { + shape.lineTo(nextPt.x, nextPt.y); + } + else { + //参考 + //http://www.dorodnic.com/blog/tag/three-js/ 绘制一个齿轮 + //https://www.kirupa.com/html5/drawing_circles_canvas.htm //html5 + let arc2 = new Arc2d(prePt, nextPt, buls[i]); + let cen = arc2._Center; + shape.absarc(cen.x, cen.y, arc2._Radius, arc2._StartAn, arc2._EndAn, buls[i] < 0); + } + } + return shape; +} + +/* +功能:判断线段是否存在交点 +ref:https://www.geeksforgeeks.org/check-if-two-given-line-segments-intersect/ +*/ +// Given three colinear points p, q, r, the function checks if +// point q lies on line segment 'pr' +function onSegment(p, q, r) { + if (q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && + q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y)) + return true; + return false; +} +// To find orientation of ordered triplet (p, q, r). +// The function returns following values +// 0 --> p, q and r are colinear +// 1 --> Clockwise +// 2 --> Counterclockwise +function orientation(p, q, r) { + // See https://www.geeksforgeeks.org/orientation-3-ordered-points/ + // for details of below formula. + let val = (q.y - p.y) * (r.x - q.x) - + (q.x - p.x) * (r.y - q.y); + if (val === 0) + return 0; // colinear + return (val > 0) ? 1 : 2; // clock or counterclock wise +} +/** + * 判断线段`p1q1`和线段`p2q2`是否相交. + */ +function doIntersect(p1, q1, p2, q2) { + // Find the four orientations needed for general and + // special cases + let o1 = orientation(p1, q1, p2); + let o2 = orientation(p1, q1, q2); + let o3 = orientation(p2, q2, p1); + let o4 = orientation(p2, q2, q1); + // General case + if (o1 !== o2 && o3 !== o4) + return true; + // Special Cases + // p1, q1 and p2 are colinear and p2 lies on segment p1q1 + if (o1 === 0 && onSegment(p1, p2, q1)) + return true; + // p1, q1 and q2 are colinear and q2 lies on segment p1q1 + if (o2 === 0 && onSegment(p1, q2, q1)) + return true; + // p2, q2 and p1 are colinear and p1 lies on segment p2q2 + if (o3 === 0 && onSegment(p2, p1, q2)) + return true; + // p2, q2 and q1 are colinear and q1 lies on segment p2q2 + if (o4 === 0 && onSegment(p2, q1, q2)) + return true; + return false; // Doesn't fall in any of the above cases +} + +function SplineConver2Polyline(spl, tolerance = 0.1) { + let cu = spl.Shape; + let cacheParam = new Map(); + let cacheTange = new Map(); + const GetPointAtParam = (param) => { + let p = cacheParam.get(param); + if (p) + return p; + p = cu.getPoint(param); + cacheParam.set(param, p); + return p; + }; + const GetTangentAtParam = (param) => { + let t = cacheTange.get(param); + if (t) + return t; + if (equaln$1(param, 1)) { + if (spl.CloseMark) + t = cu.getPoint(1e-4).sub(GetPointAtParam(param)).normalize(); + else + t = GetPointAtParam(param).clone().sub(cu.getPoint(1 - 1e-4)).normalize(); + } + else + t = cu.getPoint(param + 1e-4).sub(GetPointAtParam(param)).normalize(); + cacheTange.set(param, t); + return t; + }; + let count = spl.EndParam; + let stepx = 1 / count; + let curves = []; + for (let i = 0; i < 1;) { + let step = 0.25 * stepx; //0.5的时候也可以有不错的收敛,但是在0.25的时候会有比较贴合的效果 + while (true) { + let param1 = i; + let param2 = Math.min(1, i + step); + let x = param2 - param1; + let midp1 = GetPointAtParam(param1 + x * 0.25); + let midp2 = GetPointAtParam(param1 + x * 0.75); + let p1 = GetPointAtParam(param1); + let p2 = GetPointAtParam(param2); + let t1 = GetTangentAtParam(param1); + let t2 = GetTangentAtParam(param2); + let [c1, c2] = ComputeBiarc(p1, p2, t1, t2); + // TestDraw(new Point(midp1)); + // TestDraw(new Point(midp2)); + // TestDraw(new Point(c1.GetPointAtParam(0.5))); + // TestDraw(new Point(c2.GetPointAtParam(0.5))); + if (c1.GetClosestPointTo(midp1, false).distanceTo(midp1) < tolerance && + c2.GetClosestPointTo(midp2, false).distanceTo(midp2) < tolerance) { + curves.push(c1, c2); + break; + } + else + step = step * 0.5; + } + i += step; + } + let polyline = Polyline.Combine(curves, 1e-3); + polyline.ApplyMatrix(spl.OCSNoClone); + polyline.ColorIndex = spl.ColorIndex; + return polyline; +} +//传入的一定是碎点,不是碎点,没有6个点请不要进来 +function PointsSimplify2Polyline(pts, tolerance = 0.1) { + let tolSq = tolerance * tolerance; + let cacheTange = new Map(); + let ptsCount = pts.length; + const GetIndexAtParam = (param) => { + if (param === 1) + return pts.length - 1; + return Math.floor(ptsCount * param); + }; + const GetPointAtParam = (param) => { + return pts[GetIndexAtParam(param)]; + }; + const GetTangentAtParam = (param) => { + let t = cacheTange.get(param); + if (t) + return t; + let index = Math.floor(ptsCount * param); + if (equaln$1(param, 1) || index + 1 >= pts.length) + t = arrayLast(pts).clone().sub(pts[pts.length - 1]).normalize(); + else + t = pts[index + 1].clone().sub(pts[index]).normalize(); + cacheTange.set(param, t); + return t; + }; + let stepx = 1; + let curves = []; + for (let i = 0; i < 1;) { + let step = 0.25 * stepx; //0.5的时候也可以有不错的收敛,但是在0.25的时候会有比较贴合的效果 + while (true) { + let param1 = i; + let param2 = Math.min(1, i + step); + let index1 = GetIndexAtParam(param1); + let index2 = GetIndexAtParam(param2); + if ((index2 - index1) < 4) //当点个数等于4时,我们计算双圆弧插值必然成功.(但是也失去了意义) + { + if (index2 - index1 > 0) { + let lineD = []; + for (let i = index1; i <= index2; i++) + lineD.push({ pt: AsVector2(pts[i]), bul: 0 }); + curves.push(new Polyline(lineD)); + } + break; + } + let x = param2 - param1; + let midp1 = GetPointAtParam(param1 + x * 0.25); + let midp2 = GetPointAtParam(param1 + x * 0.75); + let p1 = pts[index1]; + let p2 = pts[index2]; + let t1 = GetTangentAtParam(param1); + let t2 = GetTangentAtParam(param2); + let [c1, c2] = ComputeBiarc(p1, p2, t1, t2); + if (c1.GetClosestPointTo(midp1, false).distanceToSquared(midp1) < tolSq && + c2.GetClosestPointTo(midp2, false).distanceToSquared(midp2) < tolSq) { + curves.push(c1, c2); + break; + } + else + step = step * 0.5; + } + i += step; + } + let polyline = Polyline.Combine(curves, 1e-3); + return polyline; +} +/** + * 将碎点简化为多段线,(尝试转换为简单圆弧,或者使用双圆弧插值) + * @param pts 点表 + * @param [tolerance=0.1] 容差 + * @param [parseArc=true] 解析成简单圆弧 + * @param [lineLengthSq=2000] + * @returns 多段线 + */ +function PointsSimplify2PolylineAndParseArc(pts, buls = undefined, tolerance = 0.1, parseArc = true, lineLengthSq = 2000) { + let tolSq = tolerance * tolerance; + let ptsCount = pts.length; + const CreateLineOrArc = (startIndex, endIndex) => { + if (!buls || equaln$1(buls[startIndex], 0, 1e-4)) + return new Line(AsVector3(pts[startIndex]), AsVector3(pts[endIndex])); + else + return new Arc().ParseFromBul(AsVector3(pts[startIndex]), AsVector3(pts[endIndex]), buls[startIndex]); + }; + let retPolyline = new Polyline; + let start = 0; + for (let next = start + 1; next <= ptsCount; next++) { + if (next === ptsCount || pts[next].distanceToSquared(pts[next - 1]) > lineLengthSq || (buls && !equaln$1(buls[next - 1], 0, 1e-4))) //长度大于50,我们才认为它是一条直线 + { + //1.将start->next-1部分组成圆弧 + if (parseArc || (next - start) < 6) + while (start < next - 1) { + if ((next - 1) - start === 1) //直线 + { + retPolyline.Join(CreateLineOrArc(start, next - 1)); + break; + } + //第一个三角形的方向 + let firstDir = orientation(pts[start], pts[start + 1], pts[start + 2]); + let to = start; + for (; to + 3 < next; to++) { + let dir = orientation(pts[to + 1], pts[to + 2], pts[to + 3]); + if (dir !== firstDir) + break; + } + if (start === to) //三个点 + { + retPolyline.Join(CreateLineOrArc(start, start + 1)); + retPolyline.Join(CreateLineOrArc(start + 1, start + 2)); + start = to + 2; + continue; + } + else if ((to - start) < 3) { + retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, to + 2 + 1).map(AsVector3))); + } + else { + let sp = pts[start]; + let ep = pts[to + 2]; + let mp = pts[Math.floor((start + to + 2) / 2)]; + let arc = new Arc().FromThreePoint(AsVector3(sp), AsVector3(mp), AsVector3(ep)); + let c = to + 2 - start; + let p1 = AsVector3(pts[start + Math.floor(c * 0.25)]); + let p2 = AsVector3(pts[start + Math.floor(c * 0.75)]); + if (arc.GetClosestPointTo(p1, false).distanceToSquared(p1) < tolSq + && arc.GetClosestPointTo(p2, false).distanceToSquared(p2) < tolSq) + retPolyline.Join(arc); + else + retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, to + 2 + 1).map(AsVector3))); + } + start = to + 2; //闪烁到圆弧终点 + if (start === next - 2) { + retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, next).map(AsVector3))); + start = next; + break; + } + } + else + retPolyline.Join(PointsSimplify2Polyline(pts.slice(start, next).map(AsVector3))); + //2.加入直线 + if (next !== ptsCount) + retPolyline.Join(CreateLineOrArc(next - 1, next)); + start = next; + } + } + return retPolyline; +} +function SmartPointsSimply2Polyline(pts, buls = undefined, tolerance = 0.1, lineLengthSq = 2000) { + let pl1 = PointsSimplify2PolylineAndParseArc(pts, buls, tolerance, true, lineLengthSq); + let pl2 = PointsSimplify2PolylineAndParseArc(pts, buls, tolerance, false, lineLengthSq); + if (pl1.EndParam < pl2.EndParam) + return pl1; + else + return pl2; +} +/** + * 简化多段线,返回结果比较好的多段线 + * @param pl + * @param [tolerance=0.1] + * @param [lineLengthSq=2000] + * @returns 返回undefined时,简化失败 + */ +function SmartPolylineSimply2Polyline(pl, tolerance = 0.1, lineLengthSq = 2000) { + if (pl.EndParam < 3) + return; + let ld = pl.LineData; + let pts = [ld[0].pt]; + let buls = [ld[0].bul]; + let prep = pts[0]; + for (let i = 1; i < ld.length; i++) { + let d = ld[i]; + let p = d.pt; + if (!equalv2(p, prep, 1e-3)) { + pts.push(p); + buls.push(d.bul); + prep = p; + } + } + if (pl.CloseMark && !equalv2(pts[0], arrayLast(pts))) + pts.push(pts[0].clone()); + let npl = SmartPointsSimply2Polyline(pts, pl.LineData.map(p => p.bul), tolerance, lineLengthSq); + npl.ApplyMatrix(pl.OCSNoClone); + npl.ColorIndex = pl.ColorIndex; + return npl; +} +//types +function Vec2(x, y) { + this.x = x; + this.y = y; +} +let c_Epsilon = 0.0001; +// math functions +function Sqr(val) { + return val * val; +} +function IsEqualEps(lhs, rhs) { + return Math.abs(lhs - rhs) <= c_Epsilon; +} +function Vec2_Add(lhs, rhs) { + return new Vec2(lhs.x + rhs.x, lhs.y + rhs.y); +} +function Vec2_Sub(lhs, rhs) { + return new Vec2(lhs.x - rhs.x, lhs.y - rhs.y); +} +function Vec2_Scale(lhs, scale) { + return new Vec2(lhs.x * scale, lhs.y * scale); +} +function Vec2_AddScaled(lhs, rhs, scale) { + return new Vec2(lhs.x + rhs.x * scale, lhs.y + rhs.y * scale); +} +function Vec2_Dot(lhs, rhs) { + return lhs.x * rhs.x + lhs.y * rhs.y; +} +function Vec2_MagSqr(val) { + return val.x * val.x + val.y * val.y; +} +function CreateArcFromEdge(p1, t1, p2, fromP1) { + let chord = Vec2_Sub(p2, p1); + let n1 = new Vec2(-t1.y, t1.x); + let chordDotN1 = Vec2_Dot(chord, n1); + if (IsEqualEps(chordDotN1, 0)) + return new Line(AsVector3(p1), AsVector3(p2)); + else { + let radius = Vec2_MagSqr(chord) / (2 * chordDotN1); + let center = Vec2_AddScaled(p1, n1, radius); + let p1Offset = Vec2_Sub(p1, center); + let p2Offset = Vec2_Sub(p2, center); + let p1Ang1 = Math.atan2(p1Offset.y, p1Offset.x); + let p2Ang1 = Math.atan2(p2Offset.y, p2Offset.x); + if (p1Offset.x * t1.y - p1Offset.y * t1.x > 0) + return new Arc(AsVector3(center), Math.abs(radius), p1Ang1, p2Ang1, !fromP1); + else + return new Arc(AsVector3(center), Math.abs(radius), p1Ang1, p2Ang1, fromP1); + } +} +/** + * 计算双圆弧插值的圆弧 + * @param p1 起点 + * @param p2 终点 + * @param t1 起点切线 + * @param t2 终点切线 + * @returns 两个圆弧(或者其中一个是直线) + */ +function ComputeBiarc(p1, p2, t1, t2) { + let v = Vec2_Sub(p2, p1); + let vMagSqr = Vec2_MagSqr(v); + let vDotT1 = Vec2_Dot(v, t1); + { + let t = Vec2_Add(t1, t2); + let tMagSqr = Vec2_MagSqr(t); + let equalTangents = IsEqualEps(tMagSqr, 4.0); + let perpT1 = IsEqualEps(vDotT1, 0.0); + if (equalTangents && perpT1) //2个半圆 + { + let angle = Math.atan2(v.y, v.x); + let center1 = Vec2_AddScaled(p1, v, 0.25); + let center2 = Vec2_AddScaled(p1, v, 0.75); + let radius = Math.sqrt(vMagSqr) * 0.25; + let cross = v.x * t1.y - v.y * t1.x; + return [ + new Arc(AsVector3(center1), radius, angle, angle + Math.PI, cross < 0), + new Arc(AsVector3(center2), radius, angle, angle + Math.PI, cross > 0) + ]; + } + else { + let vDotT = Vec2_Dot(v, t); + let d1; + if (equalTangents) + d1 = vMagSqr / (4 * vDotT1); + else { + let denominator = 2 - 2 * Vec2_Dot(t1, t2); + let discriminant = Sqr(vDotT) + denominator * vMagSqr; + d1 = (Math.sqrt(discriminant) - vDotT) / denominator; + } + let joint = Vec2_Scale(Vec2_Sub(t1, t2), d1); + joint = Vec2_Add(joint, p1); + joint = Vec2_Add(joint, p2); + joint = Vec2_Scale(joint, 0.5); + return [ + CreateArcFromEdge(p1, t1, joint, true), + CreateArcFromEdge(p2, t2, joint, false) + ]; + } + } +} + +var Spline_1; +const DrawSplitCount = 120; +let Spline = Spline_1 = class Spline extends Curve { + constructor(_PointList = []) { + super(); + this._PointList = _PointList; + this._ClosedMark = false; + } + get Shape() { + return new CatmullRomCurve3(this.Points, this._ClosedMark); + } + get Length() { + //TODO:这个的性能挺低的(因为还需要重新获取一遍点表(如果我们有绘制对象,应该用绘制对象的点表来计算长度)) + return this.Shape.getLength(); + } + get Points() { + return this._PointList; + } + set Points(pts) { + if (pts.length < 2) + return; + this.WriteAllObjectRecord(); + let ocsInv = this.OCSInv; + this._PointList = pts.map(p => p.clone().applyMatrix4(ocsInv)); + if (pts.length > 2 && equalv3(this._PointList[0], arrayLast(this._PointList), 1e-3)) { + this._PointList.pop(); + this._ClosedMark = true; + } + this.Update(); + } + //闭合标志 + get CloseMark() { + return this._ClosedMark; + } + //曲线是否闭合 + get IsClose() { + return this.CloseMark || (equalv3(this.StartPoint, this.EndPoint, 1e-4)) && this.EndParam > 1; + } + set CloseMark(v) { + if (this._ClosedMark === v) + return; + this.WriteAllObjectRecord(); + this._ClosedMark = v; + this.Update(); + } + get StartPoint() { + return this._PointList[0].clone().applyMatrix4(this.OCSNoClone); + } + get EndPoint() { + return arrayLast(this._PointList).clone().applyMatrix4(this.OCSNoClone); + } + get StartParam() { + return 0; + } + get EndParam() { + return this._ClosedMark ? this._PointList.length : this._PointList.length - 1; + } + GetPointAtParam(param) { + const endParam = this.EndParam; + if (param < 0) { + const p1 = this.StartPoint; + const derv = this.GetFirstDeriv(0.1); + return p1.add(derv.multiplyScalar(param / endParam * this.Length)); + } + if (param > endParam) { + const p2 = this.EndPoint; + const derv = this.GetFirstDeriv(endParam); + return p2.add(derv.multiplyScalar((param - endParam) / endParam * this.Length)); + } + return this.Shape.getPoint(param / endParam).applyMatrix4(this.OCSNoClone); + } + GetFirstDeriv(param) { + if (param instanceof Vector3) + param = this.GetParamAtPoint(param); + return this.GetPointAtParam(param).sub(this.GetPointAtParam(param - 0.1)).normalize(); + } + GetClosestPointTo(pt, extend) { + return this.Convert2Polyline().GetClosestPointTo(pt, extend); + } + GetOffsetCurves(offsetDist) { + if (offsetDist === 0) + return []; + let pld = this._PointList.map(p => { + return { pt: AsVector2(p), bul: 0 }; + }); + let pl = new Polyline(pld); + let pls = pl.GetOffsetCurves(offsetDist); + return pls.map(pl => { + let pts = pl.LineData.map(p => AsVector3(p.pt)); + let spl = new Spline_1(pts); + spl.OCS = this._Matrix; + spl._ClosedMark = this._ClosedMark; + return spl; + }); + } + GetGripPoints() { + return this._PointList.map(p => p.clone().applyMatrix4(this.OCSNoClone)); + } + GetStretchPoints() { + return this.GetGripPoints(); + } + MoveGripPoints(indexList, vec) { + vec = TransformVector(vec.clone(), this.OCSInv).setZ(0); + if (equalv3(vec, ZeroVec)) + return; + this.WriteAllObjectRecord(); + for (let index of indexList) + this._PointList[index].add(vec); + this.Update(); + } + MoveStretchPoints(indexList, vec) { + vec = TransformVector(vec.clone(), this.OCSInv).setZ(0); + if (equalv3(vec, ZeroVec)) + return; + this.WriteAllObjectRecord(); + for (let index of indexList) + this._PointList[index].add(vec); + this.Update(); + } + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + switch (snapMode) { + case ObjectSnapMode.End: + return this.GetStretchPoints(); + case ObjectSnapMode.Mid: + case ObjectSnapMode.Nea: + case ObjectSnapMode.Ext: + case ObjectSnapMode.Cen: + case ObjectSnapMode.Per: + case ObjectSnapMode.Tan: + } + return []; + } + GetDrawCount() { + return this.EndParam * DrawSplitCount; + } + Convert2Polyline() { + return SplineConver2Polyline(this); + } + _ReadFile(file) { + super._ReadFile(file); + let ver = file.Read(); //1 + let count = file.Read(); + this._PointList.length = 0; + for (let i = 0; i < count; i++) + this._PointList.push(new Vector3().fromArray(file.Read())); + if (ver > 1) + this._ClosedMark = file.Read(); + if (ver > 2) + this.ReadRoomAndCabinetName(file); + } + WriteFile(file) { + super.WriteFile(file); + file.Write(3); //ver + file.Write(this._PointList.length); + this._PointList.forEach(p => file.Write(p.toArray())); + file.Write(this._ClosedMark); + this.WriteRoomAndCabinetName(file); + } +}; +Spline = Spline_1 = __decorate([ + Factory +], Spline); + +/** + * 简化优化版本的曲线求交, 优化版本可以参考(算法导论33.2 确定任意一对线段是否相交 p599) + */ +class CurveIntersection { + /** + * @param {Curve[]} cus 请注意数组的顺序会被更改,如果你在意数组的顺序,请拷贝数组后传进来 + * @memberof CurveIntersection + */ + constructor(cus, parseIntersectionParam = false, intType = IntersectOption.ExtendNone, fuzz = 1e-6, parseRecord = false) { + this.fuzz = fuzz; + //用来缓存的曲线包围盒 + this.boxMap = new Map(); + /** + * 交点数据集,key 为曲线 value 为和它相交的(曲线和交点的Map) + */ + this.intersect = new Map(); + //交点参数集 + this.intersect2 = new Map(); + this.intersect3 = []; + this.GenBox(cus); + //按x排序 + this.SortCurve(cus); + let count = cus.length; + for (let i = 0; i < count; i++) { + let c1 = cus[i]; + let c1d = this.GetIntersect(c1); + let c1b = this.boxMap.get(c1); + for (let j = i + 1; j < count; j++) { + let c2 = cus[j]; + //过滤掉不需要计算的曲线 + let c2b = this.boxMap.get(c2); + if (c2b.min.x - c1b.max.x > fuzz) + break; + if (c2b.min.y - c1b.max.y > fuzz) + continue; + let ints = this.IntersectWith2(c1, c2, intType, fuzz); + if (ints.length > 0) { + let pts = ints.map(i => i.pt); + c1d.set(c2, pts); + this.GetIntersect(c2).set(c1, pts); + if (parseRecord) + this.intersect3.push([c1, c2, pts]); + if (parseIntersectionParam) { + this.AppendIntersectionParams(c1, ints.map(i => [i.thisParam, i.pt])); + this.AppendIntersectionParams(c2, ints.map(i => [i.argParam, i.pt])); + } + } + } + } + } + IntersectWith2(c1, c2, intType, fuzz) { + return c1.IntersectWith2(c2, intType, fuzz); + } + AppendIntersectionParams(curve, params) { + let arr = this.intersect2.get(curve); + if (!arr) { + arr = []; + this.intersect2.set(curve, arr); + } + arrayPushArray$1(arr, params); + } + GenBox(cus) { + for (let c of cus) + this.boxMap.set(c, c.BoundingBox); + } + SortCurve(cus) { + cus.sort((c1, c2) => { + return this.boxMap.get(c1).min.x - this.boxMap.get(c2).min.x; + }); + } + GetIntersect(cu) { + if (this.intersect.has(cu)) + return this.intersect.get(cu); + let m = new Map(); + this.intersect.set(cu, m); + return m; + } +} +class CurveIntersection2 extends CurveIntersection { + /** + * Curve2Polyline使用这个时,为了避免多余的交点导致曲线切割过度,过滤掉无关的点 + */ + IntersectWith2(c1, c2, intType) { + let pts = c1.IntersectWith2(c2, intType); + return pts.filter(p => { + let inC1 = c1.ParamOnCurve(p.thisParam) || (p.thisParam < 0 ? c1.StartPoint.distanceTo(p.pt) < this.fuzz : c1.EndPoint.distanceTo(p.pt) < this.fuzz); + if (!inC1) + return false; + let inC2 = c2.ParamOnCurve(p.argParam) || (p.argParam < 0 ? c2.StartPoint.distanceTo(p.pt) < this.fuzz : c2.EndPoint.distanceTo(p.pt) < this.fuzz); + return inC2; + }); + } +} + +/** + * 曲线连接图 + * 所有的顶点和边的关系 + */ +class CurveMap { + constructor(numdimensions = 4, _RemoveSortLine = false, multiplier = 10 ** numdimensions) { + this.numdimensions = numdimensions; + this._RemoveSortLine = _RemoveSortLine; + this.multiplier = multiplier; + /* + 节点图. + 每个节点对应下一个路口的路线表. + 路口表使用逆时针排序,起始角度使用正x轴. + */ + this._VerticeMap = new Map(); + this._Vertices = []; + this._LookupTable = {}; + } + /** + * 得到节点图的所有站点列表 + */ + get Stands() { + return this._Vertices; + } + /** + * @param curve + * @param [isArc=curve instanceof Arc] + * @param [removeDuplicate=false] + * @returns 加入成功? + */ + AddCurveToMap(curve, isArc = curve instanceof Arc, removeDuplicate = false, parseAngle = false) { + let sp = curve.StartPoint; + let ep = curve.EndPoint; + let startS = this.GetOnlyVertice(sp); + let endS = this.GetOnlyVertice(ep); + //在面域分析中,路线指向同一个顶点已经没有意义了 + if (this._RemoveSortLine && startS === endS) + return false; + if (removeDuplicate) //删除重复 + { + let index = startS.routes.findIndex(r => { + if (r.to === endS && r.curve.constructor.name === curve.constructor.name) { + if (isArc) + return equalv3(curve.GetPointAtParam(0.5), r.curve.GetPointAtParam(0.5)); + return true; + } + }); + if (index !== -1) + return false; + } + let length = curve.Length; + curve.TempData = 0; + let routeS2E = { curve, isReverse: false, length, from: startS, to: endS, s: sp, e: ep }; + let routeE2S = { curve, isReverse: true, length, from: endS, to: startS, e: sp, s: ep }; + if (!isArc && parseAngle) { + let an = angle(endS.position.clone().sub(startS.position)); + routeS2E.an = an; + routeE2S.an = clampRad(an + Math.PI); + } + startS.routes.push(routeS2E); + endS.routes.push(routeE2S); + return true; + } + /** + * 获得唯一的顶点 + */ + GetOnlyVertice(p) { + let gp = this.GenerateP(p); + if (this._VerticeMap.has(gp)) + return this._VerticeMap.get(gp); + let vertice = { position: gp, routes: [] }; + this._VerticeMap.set(p, vertice); + this._Vertices.push(vertice); + return vertice; + } + /** + * 生成一个唯一的向量. + */ + GenerateP(p) { + let key = ""; + let els = p.toArray(); + for (let n of els) { + let valueQuantized = Math.round(n * this.multiplier); + key += valueQuantized + '/'; + } + if (key in this._LookupTable) + return this._LookupTable[key]; + let hashparts = els.map((el) => { + let q0 = Math.floor(el * this.multiplier); + let q1 = q0 + 1; + return ['' + q0 + '/', '' + q1 + '/']; + }); + let numelements = els.length; + let numhashes = 1 << numelements; + for (let hashmask = 0; hashmask < numhashes; ++hashmask) { + let hashmaskShifted = hashmask; + key = ''; + for (let hashpart of hashparts) { + key += hashpart[hashmaskShifted & 1]; + hashmaskShifted >>= 1; + } + this._LookupTable[key] = p; + } + return p; + } +} + +const _overlap_ = "_overlap_"; +/** +面域分析,基于最小循环图重新实现的版本,拓展了实现求最大轮廓。 +当最大轮廓=最小轮廓时,只绘制最大轮廓(独立轮廓无分裂)。 + +算法只实现去重模式,业务场景应该没有非去重模式。 +如果需要非去重模式,那么应该获取到多个CurveMap,然后对多个CurveMap进行面域分析,得出多个重叠的面域。 + */ +class RegionParse { + /** + * @param cuList 请不要传递圆和椭圆. + * @param [numDimensions=3] 精度:小数点后个数 + * @param [removeDuplicate=true] 删除重复(现在必须是true,请不要修改它) + */ + constructor(cuList, numDimensions = 3, removeDuplicate = true) { + this.numDimensions = numDimensions; + this.removeDuplicate = removeDuplicate; + //区域列表 通常是外轮廓 + this.RegionsOutline = []; //外轮廓和内轮廓重叠时,只有外轮廓有数据,可以使用RegionParse.RegionsIsOverlap来取得 + //区域列表 通常是内轮廓 + this.RegionsInternal = []; + //碎线 曲线进入到这里会被炸开. + this.ExpLineMap = new Map(); + //需要搜索的站 + let vertices = this.GenerateVerticeMap(cuList); + //移除细丝 + while (true) { + let v = vertices.find(v => v.routes.length < 2); + if (v) + this.RemoveFilamentAt(v, vertices); + else + break; + } + let lowerVertice; + while (vertices.length > 0) { + lowerVertice = lowerVertice?.routes.length > 1 ? lowerVertice : this.FindLowerLeftStand(vertices); + let minWalk = ClosedWalkFrom(lowerVertice, this._CurveCount, WalkType.Min); + let maxWalk = ClosedWalkFrom(lowerVertice, this._CurveCount, WalkType.Max); + this.RemoveEdge(minWalk[0]); + this.RemoveFilamentAt(minWalk[0].from, vertices); + this.RemoveFilamentAt(minWalk[0].to, vertices); + minWalk = ReduceWalk(minWalk); + maxWalk = ReduceWalk(maxWalk); + if (maxWalk.length > 1) { + this.RegionsOutline.push(maxWalk); + if (minWalk.length === maxWalk.length && minWalk.every((w1, index) => w1 === maxWalk[index])) //大小重叠 + { + //直接remove,不用计算引用个数 + for (let w of minWalk) { + w.curve.TempData = 2; + this.RemoveEdge(w); + this.RemoveFilamentAt(w.from, vertices); + this.RemoveFilamentAt(w.to, vertices); + } + maxWalk[_overlap_] = true; + continue; //继续循环 + } + else + for (let w of maxWalk) + w.curve.TempData = 1; + } + if (minWalk.length > 1) // && minWalk.every(w => (w.curve.TempData) < 2) 没有重复线应该不会被用2次 + { + this.RegionsInternal.push(minWalk); + for (let w of minWalk) { + w.curve.TempData++; + if (w.curve.TempData === 2) { + this.RemoveEdge(w); + this.RemoveFilamentAt(w.from, vertices); + this.RemoveFilamentAt(w.to, vertices); + } + } + } + } + } + //大小圈重叠 + static RegionsIsOverlap(Route) { + return Boolean(Route[_overlap_]); + } + RemoveFilamentAt(v, vertices) { + let current = v; + while (current && current.routes.length < 2) { + vertices = arrayRemoveOnce(vertices, current); + let r = current.routes[0]; + if (r) { + this.RemoveEdge(r); + current = r.to; + } + else + current = undefined; + } + } + RemoveEdge(r) { + let index = r.from.routes.findIndex(rr => rr.curve === r.curve); + if (index !== -1) + r.from.routes.splice(index, 1); + index = r.to.routes.findIndex(rr => rr.curve === r.curve); + if (index !== -1) + r.to.routes.splice(index, 1); + } + /** + * 找到最下方并且最左边的站 yx + */ + FindLowerLeftStand(vertices) { + return vertices.reduce((m, v) => { + let dy = v.position.y - m.position.y; + if (dy < 0) + return v; + if (dy > 0) + return m; + return v.position.x - m.position.x < 0 ? v : m; + }); + } + /** + * 构造路线图. 每个节点对应下一个路口的路线表. 路口表使用逆时针排序,起始角度使用正x轴. + * @returns 所有的顶点 + */ + GenerateVerticeMap(curveList) { + let curveMap = new CurveMap(this.numDimensions, true); + //将多段线炸开 + let plcus = []; + arrayRemoveIf(curveList, c => { + if (c instanceof Polyline) { + let cus = c.Explode(); + //如果为圆弧,提前打断 + let arcs = []; + arrayRemoveIf(cus, c => { + if (c.Length < 1e-5) + return true; + if (c instanceof Arc) { + let arcBrs = this.BreakArc(c); + for (let arc of arcBrs) + arcs.push(arc); + return true; + } + return false; + }); + //加入到计算 + cus.push(...arcs); + this.ExpLineMap.set(c, cus); + plcus.push(...cus); + return true; + } + return false; + }); + curveList.push(...plcus); + this._CurveCount = curveList.length; + for (let cu of curveList) { + //由于圆弧可能导致最低点计算错误的问题. + if (cu instanceof Arc) { + let arcs = this.BreakArc(cu); + if (arcs.length > 1) { + arcs.forEach(a => curveMap.AddCurveToMap(a, true, this.removeDuplicate, true)); + this.ExpLineMap.set(cu, arcs); + continue; + } + else + curveMap.AddCurveToMap(cu, true, this.removeDuplicate, true); + } + else + curveMap.AddCurveToMap(cu, false, this.removeDuplicate, true); + } + //排序,根据角度逆时针排序. + for (let v of curveMap._Vertices) { + let minLength = Infinity; + for (let r of v.routes) + if (r.length < minLength) + minLength = r.length; + for (let r of v.routes) + CalcRouteAngle(r, minLength * 0.2); + v.routes.sort((r1, r2) => r1.an - r2.an); + } + return curveMap.Stands; + } + BreakArc(arc) { + let underPt = arc.Center.add(new Vector3(0, -arc.Radius)); + let param = arc.GetParamAtPoint(underPt); + if (param > 1e-4 && param < 0.9999) + return arc.GetSplitCurves(param); + else + return [arc]; + } + /** + * 曲线是否已经被算法使用 + */ + GetCueveUsed(cu) { + if (this.ExpLineMap.has(cu)) { + let use = this.ExpLineMap.get(cu).some(c => c.TempData > 0); + if (!use) + this.ExpLineMap.delete(cu); + return use; + } + else + return cu.TempData > 0; + } +} +function CalcRouteAngle(r, length) { + if (r.an !== undefined) + return; + let cu = r.curve; + let p = r.isReverse ? + cu.GetPointAtParam(cu.GetParamAtDist(r.length - length)) + : cu.GetPointAtParam(cu.GetParamAtDist(length)); + r.an = angle(p.sub(r.from.position)); +} +var WalkType; +(function (WalkType) { + WalkType[WalkType["Min"] = 1] = "Min"; + WalkType[WalkType["Max"] = -1] = "Max"; +})(WalkType || (WalkType = {})); +function ClosedWalkFrom(startVertice, maxRoute, type = WalkType.Min) { + let walk = []; + let curVertice = startVertice; + let preRoute; + // console.log("start", type, startVertice.position.toArray()); + do { + let route = GetNextRoute(curVertice, preRoute, type); + if (type === WalkType.Max && route.curve.TempData > 0) + return []; + // console.log(route.to.position.toArray()); + walk.push(route); + [curVertice, preRoute] = [route.to, route]; + if (walk.length > maxRoute * 2) + throw "超过计算次数限制"; + } while (curVertice !== startVertice); + return walk; +} +/** + * 删除中途回路 + */ +function ReduceWalk(w) { + if (w.length === 0) + return w; + //未构成回路,直接回家 + if (w[0].curve === arrayLast(w).curve) + return []; + for (let i = 0; i < w.length; i++) { + let r1 = w[i]; + for (let j = w.length; j--;) { + if (i === j) + break; + let r2 = w[j]; + if (r1.to === r2.to) { + if (j > i) + w.splice(i + 1, j - i); + break; + } + } + } + return w; +} +function GetNextRoute(v, prev, type = WalkType.Min) { + if (!prev) + return arrayLast(v.routes); //顺时针 cw \|/ 从左往右 + //逆时针 ccw 往左 + let index = v.routes.findIndex(r => r.curve === prev.curve); + let newIndex = FixIndex$1(index + 1 * type, v.routes); + return v.routes[newIndex]; +} + +/** + * 某些时候我们不能创建轮廓,此时我们使用类似c2r的方法来构建一个外部轮廓. + */ +function CreateContours(curves, fuzz = 1e-4) { + let contours = []; + let extendsMinDistSq = fuzz * fuzz; + //炸开多段线(防止自交多段线) + let newCurves = []; + for (let cu of curves) { + if (cu instanceof Circle) + contours.push(Contour.CreateContour(cu.Clone())); //避免将原始曲线传递给板,导致撤销这个圆失败 + else if (cu instanceof Polyline) + arrayPushArray$1(newCurves, cu.Explode()); + else if (cu instanceof Spline) { + let pl = cu.Convert2Polyline(); + if (pl.IsClose) + contours.push(Contour.CreateContour(pl, false)); + else + newCurves.push(pl); + } + else if (cu instanceof Ellipse) + Contour.CreateContour(cu.Convert2Polyline(), false); + else + newCurves.push(cu); + } + let intersect = new CurveIntersection2(newCurves, false, IntersectOption.ExtendBoth, fuzz); + let curves2 = []; + //延伸+打断 + for (let [cu, pmap] of intersect.intersect) { + let sp = cu.StartPoint; + let ep = cu.EndPoint; + let epExtend; + let epDist = Infinity; + let spExtend; + let spDist = Infinity; + let isClose = cu.IsClose; + let ipts = []; + for (let [, pts] of pmap) { + arrayPushArray$1(ipts, pts); + if (!isClose) + for (let p of pts) { + let d = p.distanceToSquared(ep); + if (d < epDist) { + epDist = d; + epExtend = p; + } + d = p.distanceToSquared(sp); + if (d < spDist) { + spDist = d; + spExtend = p; + } + } + } + if (!isClose) { + //延伸 + if (epDist > 0 && epDist < extendsMinDistSq) { + let param = cu.GetParamAtPoint(epExtend); + if (param > cu.EndParam) + cu.Extend(param); + } + if (spDist > 0 && spDist < extendsMinDistSq) { + let param = cu.GetParamAtPoint(spExtend); + if (param < 0) + cu.Extend(param); + } + } + //打断 + let curves; + if (ipts.length > 0) + curves = cu.GetSplitCurvesByPts(ipts); + else + curves = [cu]; + let tempCus = []; + for (let c of curves) { + if (c instanceof Polyline) + arrayPushArray$1(tempCus, c.Explode()); + else + tempCus.push(c); + } + arrayPushArray$1(curves2, tempCus); + } + let parse = new RegionParse(curves2, Math.ceil(-Math.log10(fuzz))); + for (let rs of parse.RegionsOutline) { + const polyline = new Polyline; + polyline.CloseMark = true; + //获取曲线所在平面矩阵 + const OCS = ComputerCurvesNormalOCS(rs.map(r => r.curve)); + const OCSInv = new Matrix4().getInverse(OCS); + for (let r of rs) { + let bul = 0; + if (r.curve instanceof Arc) { + bul = r.curve.Bul; + if (equalv3(TransformVector(r.curve.Normal, OCSInv), ZAxisN, 1e-3)) + bul *= -1; + if (r.isReverse) + bul *= -1; + } + polyline.LineData.push({ + pt: AsVector2(r.s.applyMatrix4(OCSInv)), + bul + }); + } + polyline.ApplyMatrix(OCS); + let contour = Contour.CreateContour(polyline, false); + if (contour) + contours.push(contour); + } + return contours; +} +function CreateContour2(curves, fuzz = 1e-4) { + return CreateContours(curves, fuzz)[0]; +} + +var BoolOpeartionType; +(function (BoolOpeartionType) { + BoolOpeartionType[BoolOpeartionType["Intersection"] = 0] = "Intersection"; + BoolOpeartionType[BoolOpeartionType["Union"] = 1] = "Union"; + BoolOpeartionType[BoolOpeartionType["Subtract"] = 2] = "Subtract"; +})(BoolOpeartionType || (BoolOpeartionType = {})); +const fuzz = 1e-3; +let fuzzV3 = new Vector3(fuzz, fuzz, fuzz); +//判断小曲线是不是被大曲线包含(或者重叠?) +function isTargetCurInOrOnSourceCur(bigCurve, smallCurve) { + //#fix fileid 2087494 使用二维的box来计算看起来没有问题 + if (!Box2$1.prototype.containsBox.apply(bigCurve.BoundingBox.expandByVector(fuzzV3), [smallCurve.BoundingBox])) + return false; + let cus = []; + if (smallCurve instanceof Polyline) + cus = smallCurve.Explode(); + else + cus = [smallCurve]; + return cus.every(c => { + let pts = getIntPtContextPts(bigCurve, c); + if (pts.length <= 1) + pts.push(c.StartPoint, c.EndPoint); + return IsPtsAllInOrOnReg(bigCurve, pts); + }); +} +//获取交点处上下距0.01par的点 +function getIntPtContextPts(sourceCur, cu, pts = []) { + let interPts = cu.IntersectWith(sourceCur, IntersectOption.ExtendNone); + if (interPts.length > 0) { + let pars = interPts.map(pt => cu.GetParamAtPoint(pt)); + for (let par of pars) { + if (par >= 0.02) + pts.push(cu.GetPointAtParam(par - 0.01)); + if (par <= (cu.EndParam - 0.02)) + pts.push(cu.GetPointAtParam(par + 0.01)); + } + } + return pts; +} +//判断点点是否全部都在封闭区域内或者在曲线上 +function IsPtsAllInOrOnReg(sourceReg, pts) { + return pts.every(pt => { + //是否点在封闭曲线内 + return sourceReg.PtOnCurve(pt) || sourceReg.PtInCurve(pt); + }); +} +//判断点是否全部都在封闭区域外或者在曲线上 +function IsPtsAllOutOrOnReg(sourceReg, pts) { + return pts.every(pt => { + //是否点在封闭曲线内 + return sourceReg.PtOnCurve(pt) || !sourceReg.PtInCurve(pt); + }); +} + +let cache$1 = new WeakMap(); +const COMBINE_FUZZ = 1e-2; +class Contour { + SetCurve(cu) { + if (cu instanceof Polyline) { + if (cu.Area2 < 0) + cu.Reverse(); + } + this._Curve = cu; + } + /**会将传入的闭合轮廓改为逆时针 */ + static CreateContour(cus, needLink = true) { + if (cus instanceof Curve) { + if (cus.IsClose) { + let c = new Contour(); + c.SetCurve(cus); + return c; + } + return; + } + let closeCurve = Contour.Combine(cus, needLink, COMBINE_FUZZ); + if (closeCurve && closeCurve.IsClose) { + if (closeCurve instanceof Polyline && closeCurve.CloseMark === false) { + closeCurve.CloseMark = true; + closeCurve.RemoveVertexAt(closeCurve.NumberOfVertices - 1); + } + let c = new Contour(); + c.SetCurve(closeCurve); + return c; + } + } + get Curve() { + return this._Curve; + } + get Area() { + return this._Curve.Area; + } + get BoundingBox() { + return this._Curve.BoundingBox; + } + /** + * 不等比例缩放 + * @param {number} ref 缩放参考值,大于该值的点缩放 + * @param {number} dist 缩放距离 + * @param {string} dir x y z + */ + UnEqualProportionScale(ref, dist, dir) { + let cu = this._Curve; + if (cu instanceof Polyline) { + let lineData = cu.LineData; + let length = lineData.length; + let p = cu.Position[dir]; + let moveIndexs = []; + for (let i = 0; i < length; i++) { + if (lineData[i].pt[dir] + p > ref) + moveIndexs.push(i); + } + let moveVec = new Vector3(); + moveVec[dir] = dist; + cu.MoveStretchPoints(moveIndexs, moveVec); + return true; + } + return false; + } + Clone() { + return Contour.CreateContour([this._Curve.Clone()]); + } + //交集:结果数组为空则失败 + IntersectionBoolOperation(target) { + if (!IntersectBox2(this.BoundingBox, target.BoundingBox)) + return []; + let resultCus = this.GetIntersetAndUnionList(target); + return Contour.GetAllContour(resultCus.intersectionList); + } + //并集:结果轮廓数组长度大于2,则失败.等于1则成功. + UnionBoolOperation(target) { + let resultCus = this.GetIntersetAndUnionList(target); + //快速 + if (resultCus.unionList.every(c => c.IsClose)) + return { + contours: Contour.GetAllContour(resultCus.unionList), + holes: [], + }; + //并集后的线段表如果有共线的直接合并起来 + let cus = []; + for (let pl of resultCus.unionList) { + if (pl instanceof Polyline) + cus.push(...pl.Explode()); + else + cus.push(pl); + } + let cuGroups = curveLinkGroup(cus); + for (let g of cuGroups) { + for (let i = 0; i < g.length; i++) { + let c1 = g[i]; + let nextI = FixIndex$1(i + 1, g); + let c2 = g[nextI]; + let status = c1.Join(c2); + if (status === Status.True) { + g.splice(nextI, 1); + i--; + } + else if (status === Status.ConverToCircle) { + g.length = 0; + let a = c1; + g.push(new Circle(a.Center, a.Radius)); + break; + } + } + } + let allContour = Contour.GetAllContour(cuGroups); + if (allContour.length < 2) { + return { + contours: allContour, + holes: [], + }; + } + else { + let cache = new WeakMap(); + for (let c of allContour) + cache.set(c, c.Area); + allContour.sort((a, b) => cache.get(b) - cache.get(a)); + return { + contours: [allContour[0]], + holes: allContour.slice(1) + }; + } + } + //差集:等于0完全被减去 + SubstactBoolOperation(target) { + let subtractList = this.GetSubtractList(target); + //纯网洞 + if (subtractList.every(c => c.IsClose)) + return Contour.GetAllContour(subtractList); + let regParse = new RegionParse(subtractList, 2); + let contours = []; + //分析封闭包围区域 + const parseRoute = (routeSet) => { + for (let routes of routeSet) { + let cs = routes.map(r => r.curve); + let c = Contour.CreateContour(cs, false); + if (c + && !equalCurve(c.Curve, this.Curve) + && !equalCurve(c.Curve, target.Curve) + && c.Area > 1e-3) + contours.push(c); + } + }; + parseRoute(regParse.RegionsOutline); + parseRoute(regParse.RegionsInternal); + return contours; + } + /** + * 计算与目标轮廓布尔运算后的结果曲线. + */ + GetIntersetAndUnionList(target) { + //同心圆 + if (this._Curve instanceof Circle && target._Curve instanceof Circle && equalv2(this._Curve.Center, target._Curve.Center, 1e-3)) { + if (this._Curve.Radius > target._Curve.Radius) + return { intersectionList: [target._Curve], unionList: [this._Curve] }; + else + return { intersectionList: [this._Curve], unionList: [target._Curve] }; + } + let intersectionList = []; + let unionList = []; + let sourceOutline = this._Curve; + let targetOutline = target.Curve; + let isEqualNormal = equalv3(sourceOutline.Normal, targetOutline.Normal, 1e-3); + //可能会有提升,但是好像不大(并且还有更慢的趋势) + // if (!sourceOutline.BoundingBox.intersectsBox(targetOutline.BoundingBox, 1e-3)) + // return { intersectionList, unionList }; + let interPts = sourceOutline.IntersectWith2(targetOutline, IntersectOption.ExtendNone, COMBINE_FUZZ); + let sourceContainerTarget; + let targetContainerSource; + if (sourceOutline.Area > targetOutline.Area) { + sourceContainerTarget = CurveContainerCurve(sourceOutline, targetOutline, interPts); + targetContainerSource = false; + } + else { + sourceContainerTarget = false; + targetContainerSource = CurveContainerCurve(targetOutline, sourceOutline, interPts); + } + //包含.相交.分离(三种状态) + if (sourceContainerTarget) //源包含目标 + { + intersectionList.push(targetOutline); + unionList.push(sourceOutline); + } + else if (targetContainerSource) //目标包含源 + { + unionList.push(targetOutline); + intersectionList.push(sourceOutline); + } + else if (interPts.length <= 1) //分离 + { + unionList.push(sourceOutline, targetOutline); + } + else //相交 interPts.length > 0 + { + let pars1 = interPts.map(r => r.thisParam); + let pars2 = interPts.map(r => r.argParam); + let sourceCus = sourceOutline.GetSplitCurves(pars1); + let targetCus = targetOutline.GetSplitCurves(pars2); + for (let pl of sourceCus) { + let hasEqualCus = false; + for (let i = 0; i < targetCus.length; i++) { + let cu = targetCus[i]; + hasEqualCus = fastEqualCurve(cu, pl, COMBINE_FUZZ); + if (hasEqualCus) { + //方向相同 + if (equalv3(cu.GetFirstDeriv(cu.MidParam).normalize(), pl.GetFirstDeriv(pl.MidParam).normalize(), 1e-2) + === isEqualNormal) { + unionList.push(pl); + intersectionList.push(pl); + } + targetCus.splice(i, 1); + break; + } + } + if (hasEqualCus) + continue; + if (fastCurveInCurve(targetOutline, pl)) + intersectionList.push(pl); + else + unionList.push(pl); + } + for (let pl of targetCus) { + if (fastCurveInCurve(sourceOutline, pl)) + intersectionList.push(pl); + else + unionList.push(pl); + } + //特殊的分离 + if (intersectionList.length === 0 && unionList.length === (sourceCus.length + targetCus.length)) { + return { intersectionList, unionList: [sourceOutline, targetOutline] }; + } + } + return { intersectionList, unionList }; + } + GetSubtractList(target) { + let sourceOutline = this._Curve; + let targetOutline = target.Curve; + let isEqualNormal = equalv3(sourceOutline.Normal, targetOutline.Normal, 1e-3); + let interPts = sourceOutline.IntersectWith2(targetOutline, IntersectOption.ExtendNone, COMBINE_FUZZ); + if (interPts.length <= 1) { + let areaState = sourceOutline.Area > targetOutline.Area; + //反包含 + if ((!areaState && fastCurveInCurve2(targetOutline, sourceOutline, interPts[0]?.pt)) || equalCurve(targetOutline, sourceOutline)) + return []; + //包含 + if ((areaState && fastCurveInCurve2(sourceOutline, targetOutline, interPts[0]?.pt))) + return [sourceOutline, targetOutline]; + else //分离 + return [sourceOutline]; + } + //相交 + let subtractList = []; + let sourceCus = sourceOutline.GetSplitCurves(interPts.map(r => r.thisParam)); + let targetCus = targetOutline.GetSplitCurves(interPts.map(r => r.argParam)); + for (let pl of sourceCus) { + let plMidParam = pl.MidParam; + let plDir = pl.GetFirstDeriv(plMidParam).normalize(); + let index = targetCus.findIndex(cu => fastEqualCurve(cu, pl)); + if (index !== -1) { + let cu = targetCus[index]; + let cuMidParam = cu.MidParam; + let cuDir = cu.GetFirstDeriv(cuMidParam).normalize(); + if (isEqualNormal === !equalv3(cuDir, plDir, 1e-3)) //不同向 + subtractList.push(pl); + targetCus.splice(index, 1); + continue; + } + if (!fastCurveInCurve(targetOutline, pl)) + subtractList.push(pl); + } + //源对象没有被破坏 + let sourceNotBreak = subtractList.length === sourceCus.length; + for (let pl of targetCus) + if (fastCurveInCurve(sourceOutline, pl)) + subtractList.push(pl); + if (sourceNotBreak && subtractList.length === sourceCus.length) + return [sourceOutline]; + return subtractList; + } + GetSubtractListByMoreTargets(targets) { + let { holes, subtractList } = this.GetSubListWithCus(targets); + //纯网洞 + if (subtractList.every(c => c.IsClose)) + return { + holes: holes.map(h => Contour.CreateContour(h)), + outlines: Contour.GetAllContour(subtractList) + }; + let regParse = new RegionParse(subtractList, 2); + let contours = []; + //分析封闭包围区域 + const parseRoute = (routeSet) => { + for (let routes of routeSet) { + let cs = routes.map(r => r.curve); + let c = Contour.CreateContour(cs, false) ?? CreateContour2(cs); + if (c + && !equalCurve(c.Curve, this.Curve) + && targets.every(target => !equalCurve(c.Curve, target.Curve)) + && c.Area > 1e-3) + contours.push(c); + } + }; + parseRoute(regParse.RegionsOutline); + parseRoute(regParse.RegionsInternal); + return { + holes: holes.map(h => Contour.CreateContour(h)), + outlines: contours + }; + } + /** + * 计算轮廓被差集之后的结果 + * @param targets 切去的轮廓 + * @returns {holes: Polyline[] 网洞曲线列表, subtractList: Polyline[] 轮廓曲线列表} + */ + GetSubListWithCus(targets) { + let sourceOutline = this._Curve; + let subtractList = []; + let holes = []; + let intPars = []; + let curveIntParamsMap = new Map(); + let outBox = sourceOutline.BoundingBox; + for (let con of targets) { + const targetOutline = con.Curve; + if (!IntersectBox2(outBox, targetOutline.BoundingBox)) + continue; + let pts = sourceOutline.IntersectWith2(con.Curve, IntersectOption.ExtendNone, COMBINE_FUZZ); + if (pts.length <= 1) { + let areaState = sourceOutline.Area > targetOutline.Area; + //反包含 + if ((!areaState && fastCurveInCurve2(targetOutline, sourceOutline, pts[0]?.pt)) || equalCurve(targetOutline, sourceOutline)) + return { holes, subtractList }; + //包含 + if (areaState && fastCurveInCurve2(sourceOutline, targetOutline, pts[0]?.pt)) + holes.push(targetOutline); + } + else { + intPars.push(...pts.map(r => r.thisParam)); + curveIntParamsMap.set(targetOutline, pts.map(r => r.argParam)); + } + } + let sourceSplitCurves = sourceOutline.GetSplitCurves(intPars); + let targetSplitCurves = []; + let targetSplitCurve_CurvesMap = new WeakMap(); //分裂后->原始曲线 映射 + for (let [curve, intParams] of curveIntParamsMap) { + let splitCurves = curve.GetSplitCurves(intParams); + for (let splitCurve of splitCurves) { + targetSplitCurve_CurvesMap.set(splitCurve, curve); + targetSplitCurves.push(splitCurve); + } + } + for (let sourceSplitcu of sourceSplitCurves) { + let index = targetSplitCurves.findIndex(cu => fastEqualCurve(cu, sourceSplitcu, 0.05)); + if (index !== -1) { + let targetSplitcu = targetSplitCurves[index]; + let isEqualNormal = equalv3(sourceOutline.Normal, targetSplitCurve_CurvesMap.get(targetSplitcu).Normal, 1e-3); + if (isEqualNormal === !equalv3(sourceSplitcu.StartPoint, targetSplitcu.StartPoint, 0.05)) //不同向 + { + subtractList.push(sourceSplitcu); + // TestDraw(sourceSplitcu.Clone(), 1); + // TestDraw(targetSplitcu.Clone(), 1); + } + // else + // TestDraw(sourceSplitcu.Clone(), 2); + targetSplitCurves.splice(index, 1); + continue; + } + if (targets.every(t => !fastCurveInCurve(t.Curve, sourceSplitcu))) + subtractList.push(sourceSplitcu); + } + //源对象没有被破坏 + let sourceNotBreak = subtractList.length === sourceSplitCurves.length; + for (let pl of targetSplitCurves) + if (fastCurveInCurve(sourceOutline, pl)) + subtractList.push(pl); + if (sourceNotBreak && subtractList.length === sourceSplitCurves.length) + return { subtractList: [sourceOutline], holes }; + return { subtractList, holes }; + } + /** + * 获得全部闭合曲线 + * @若传入二维曲线数据,将默认子数组为闭合曲线段 + */ + static GetAllContour(cus) { + if (cus.length === 0) + return []; + let cuGroups; + if (Array.isArray(cus[0])) + cuGroups = cus; + else + cuGroups = curveLinkGroup(cus, -Math.log10(COMBINE_FUZZ)); + let contours = []; + for (let g of cuGroups) + contours.push(Contour.CreateContour(g, false)); + return contours.filter(c => c !== undefined && !equaln$1(c.Area, 0, 1e-6)); + } + /** + * 合并曲线组成为多段线 + * @param cus 曲线组 + * @param [needLink=true] 需要解析成首尾连接状态 + * @returns 单一曲线,如果返回超过1个,其他的将被遗弃. + */ + static Combine(cus, needLink = true, tolerance = 1e-3) { + if (cus.length === 0) + return undefined; + let groups = needLink ? curveLinkGroup(cus, -Math.log10(tolerance)) : [cus]; + for (let g of groups) { + if (g.length === 1) + return g[0].Clone(); + else { + if (cache$1.has(g)) + return cache$1.get(g); + let gclone = g.map(c => c.Clone()); + arrayRemoveDuplicateBySort(gclone, (cu1, cu2) => cu1.Join(cu2, false, tolerance) === Status.True); + if (gclone.length > 1 && gclone[0].Join(arrayLast(gclone), false, tolerance)) + gclone.pop(); + let pl = Polyline.Combine(gclone, tolerance); + cache$1.set(g, pl); + return pl; + } + } + } + get Shape() { + return this._Curve.Shape; + } + /** + * 判断是否完全包含曲线 + * @param smallCurve 传入的这个曲线不能比本轮廓还大(这个需要自己优化?) + * @returns + */ + ContainerCurve(smallCurve, isAreaCheckd = false, ipts = undefined) { + if (!isAreaCheckd && this.Area < smallCurve.Area) + return false; + return CurveContainerCurve(this._Curve, smallCurve, ipts); + } + Equal(tar) { + return equalCurve(this._Curve, tar._Curve); + } +} +/** + * 对于轮廓切割后的曲线判断相同,使用这个函数进行快速判断 + */ +function fastEqualCurve(c1, c2, tolerance = 5e-3) { + let sp1 = c1.StartPoint; + let ep1 = c1.EndPoint; + let sp2 = c2.StartPoint; + let ep2 = c2.EndPoint; + if (!((equalv3(sp1, sp2, tolerance) && equalv3(ep1, ep2, tolerance)) + || (equalv3(sp1, ep2, tolerance) && equalv3(ep1, sp2, tolerance)))) + return false; + return equalv3(c1.Midpoint, c2.Midpoint, tolerance); +} +/** + * 对于双多段线互相切割后的结果(或者交点个数为0),快速判断曲线是否在另一条曲线内部 + * @param bigCurve + * @param smallCurve + * @returns + */ +function fastCurveInCurve(bigCurve, smallCurve) { + return bigCurve.PtInCurve(smallCurve.Midpoint); +} +//当交点小于等于1时 +function fastCurveInCurve2(bigCurve, smallCurve, iPt) { + if (iPt) //提高准确性,避免使用交点去判断 导致的错误 + { + let sp = smallCurve.StartPoint; + if (equalv3(sp, iPt, 1e-3)) + return bigCurve.PtInCurve(smallCurve.Midpoint); + else + return bigCurve.PtInCurve(smallCurve.StartPoint); + } + else + return bigCurve.PtInCurve(smallCurve.Midpoint) || bigCurve.PtInCurve(smallCurve.StartPoint); +} +//大曲线是否完全包含小曲线(或者重合) +function CurveContainerCurve(bigCurve, smallCurve, ipts = undefined, fuzz = COMBINE_FUZZ) { + if (!ipts) + ipts = bigCurve.IntersectWith2(smallCurve, IntersectOption.ExtendNone, fuzz); + if (ipts.length === 0) + return fastCurveInCurve(bigCurve, smallCurve); + else if (ipts.length === 1) + return fastCurveInCurve2(bigCurve, smallCurve, ipts[0].pt); + else + return isTargetCurInOrOnSourceCur(bigCurve, smallCurve); +} + +class CurveTreeNode { + Create(curve, box) { return new this.constructor(curve, box); } + constructor(curve, box) { + this.curve = curve; + this.box = box || curve.BoundingBox; + } + TrimBy(contour, box) { + if (IntersectsBox(box, this.box)) { + if (this.children !== undefined) { + for (let c of this.children) + c.TrimBy(contour, box); + } + else { + if (contour.Curve instanceof Circle && this.curve instanceof Arc) { + if (equalv3(contour.Curve.Center, this.curve.Center)) { + if (contour.Curve.Radius > this.curve.Radius + 1e-4) + this.children = []; + return; + } + } + //交点参数列表 + let iParams = this.curve.IntersectWith2(contour.Curve, IntersectOption.ExtendNone) + .map(p => p.thisParam); + //#region 交点参数优化,避免出现无意义长度的曲线被移除 CurveIsFine + let length = this.curve.Length; + if (!(this.curve instanceof Circle)) + iParams.push(0, 1); + iParams.sort((e1, e2) => e1 - e2); + if (this.curve instanceof Arc || this.curve instanceof Circle) { + let allAngle = this.curve instanceof Circle ? Math.PI * 2 : this.curve.AllAngle; + arrayRemoveDuplicateBySort(iParams, (p1, p2) => { + return allAngle * (p2 - p1) < ARC_MIN_ALLANGLE || length * (p2 - p1) < CURVE_MIN_LENGTH; + }); + } + else { + arrayRemoveDuplicateBySort(iParams, (p1, p2) => { + return length * (p2 - p1) < CURVE_MIN_LENGTH; + }); + } + if (!(this.curve instanceof Circle)) { + iParams.shift(); //remove 0 + iParams.pop(); //remove 1 or 0.9999 + } + //#endregion + let cus = this.curve.GetSplitCurves(iParams); + if (cus.length === 0) { + let p = this.curve.GetPointAtParam(0.5); + if (box.containsPoint(p) && (contour.Curve.PtInCurve(p) && !contour.Curve.PtOnCurve(p))) + this.children = []; + } + else { + this.children = []; + for (let c of cus) { + let p = c.GetPointAtParam(0.5); + if (CurveIsFine(c) && (!(box.containsPoint(p) && contour.Curve.PtInCurve(p)) || contour.Curve.PtOnCurve(p))) + this.children.push(this.Create(c)); + } + if (this.children.length === cus.length) + this.children = undefined; + } + } + } + } + get Nodes() { + if (!this.children) + return [this]; + else { + let cus = []; + for (let c of this.children) + cus.push(...c.Nodes); + return cus; + } + } +} +var PolylineJoinType; +(function (PolylineJoinType) { + PolylineJoinType[PolylineJoinType["Square"] = 0] = "Square"; + PolylineJoinType[PolylineJoinType["Round"] = 1] = "Round"; +})(PolylineJoinType || (PolylineJoinType = {})); +class OffsetPolyline { + /** + * + * @param _Polyline + * @param _OffsetDist + * @param [_ToolPath=false] 走刀模式(在这个模式下,我们会进行圆弧过渡(或者直线过渡)避免尖角过大) + * @param [_OffsetDistSq=(_OffsetDist ** 2) * 2.1] 允许的最大尖角长度 默认值差不多是矩形的尖角大一点 + * @param [_JoinType=PolylineJoinType.Round] 尖角的处理方式,默认是圆弧过渡,可以切换成直线过渡 + */ + constructor(_Polyline, _OffsetDist, _ToolPath = false, _OffsetDistSq = (_OffsetDist ** 2) * 2.1, //对直角走刀不进行圆弧过度 + _JoinType = PolylineJoinType.Round //仅在走刀路径时生效 + ) { + this._Polyline = _Polyline; + this._OffsetDist = _OffsetDist; + this._ToolPath = _ToolPath; + this._OffsetDistSq = _OffsetDistSq; + this._JoinType = _JoinType; + this._IsTopoOffset = false; //局部偏移,允许特殊延伸,参考测试用例 + this._AllowConverToCircle = true; + } + Do() { + this._OffsetDistSign = Math.sign(this._OffsetDist); + this._TrimPolylineContours = []; + this._TrimCircleContours = []; + this._TrimArcContours = []; + this._RetCurves = []; + this._CurveTreeNodes = []; + this.InitSubCurves(); + if (this._SubCurves.length === 0) + return this._RetCurves; + this.GeneralCirclesAndVertexs(); + this.OffsetSubCurves(); + this.LinkSubCurves(); + if (this._SubOffsetedCurves.length === 0) { + this._SubOffsetedCurves.push({ curve: this._Circles[0], index: 0, paddingCurve: this._Circles.slice(1) }); + this._TrimPolylineContours.push(...this._Circles.map(c => Contour.CreateContour(c, false)), ...this._SubCurves.map(c => Contour.CreateContour([c, new Line(c.StartPoint, c.EndPoint)], false))); + } + else + this.GeneralTrimContours(); + // for (let c of this._SubOffsetedCurves) + // { + // TestDraw(c.curve.Clone(), 1); + // if (c.paddingCurve) + // for (let cc of c.paddingCurve) + // TestDraw(cc.Clone(), 2); + // } + // for (let c of this._TrimPolylineContours) + // { + // TestDraw(c.Curve.Clone(), 3); + // } + this.TrimByContours(); + this.FilterInvalidCurve(); + this.JoinCollinear(); + this.LinkResultPolyline(); + this.RepairResultPolylineClosemark(); + return this._RetCurves; + } + InitSubCurves() { + this._CacheOCS = this._Polyline.OCS; + this._IsClose = this._Polyline.IsClose; + this._Polyline.OCS = IdentityMtx4; + this._SubCurves = this._Polyline.Explode().filter(c => c.Length > 1e-4); //TODO: 简化这个 并且生成圆 顶点 圆 + this._Polyline.OCS = this._CacheOCS; + return this; + } + GeneralCirclesAndVertexs() { + this._Vertexs = this._SubCurves.map(c => c.StartPoint); + let lastCu = arrayLast(this._SubCurves); + if (!equalv3(lastCu.EndPoint, this._Vertexs[0], 1e-3)) + this._Vertexs.push(lastCu.EndPoint); + let radius = Math.abs(this._OffsetDist); + this._Circles = this._Vertexs.map(p => new Circle(p, radius)); + } + OffsetSubCurves() { + this._SubOffsetedCurves = []; + for (let index = 0; index < this._SubCurves.length; index++) { + let curveOld = this._SubCurves[index]; + if (curveOld.Length > 1e-6) { + let curve = curveOld.GetOffsetCurves(this._OffsetDist)[0]; + if (curve) + this._SubOffsetedCurves.push({ curve, index }); + else + this._TrimArcContours.push(Contour.CreateContour([curveOld, new Line(curveOld.StartPoint, curveOld.EndPoint)], false)); + } + } + } + //连接(延伸)曲线,或者补(圆弧,直线) + LinkSubCurves() { + let count = this._SubOffsetedCurves.length; + if (!this._IsClose) + count--; + for (let i = 0; i < count; i++) { + let curveResNow = this._SubOffsetedCurves[i]; + let iNext = FixIndex$1(i + 1, this._SubOffsetedCurves); + let curveResNext = this._SubOffsetedCurves[iNext]; + let curveNow = curveResNow.curve; + let curveNext = curveResNext.curve; + let isNeighbor = FixIndex$1(curveResNow.index + 1, this._SubCurves) === curveResNext.index; + if (isNeighbor) { + let sp = curveNow.EndPoint; + let ep = curveNext.StartPoint; + let code1 = EntityEncode(curveNow); //1:直线 2:圆弧 + let code2 = EntityEncode(curveNext); + let code = code1 & code2; //1:纯直线 2:纯圆弧 3:直线和圆弧 + //直连 + if (equalv3(sp, ep, 1e-3)) { + //参考测试用例`裁剪失败,需要连接`,在极端的情况下,如果没有连接这两条线,会导致裁剪缝隙,导致偏移错误 + if (!equalv2(sp, ep, 1e-6)) { + if (code1 === 1) //线1是直线 + curveNow.EndPoint = ep; + else if (code2 === 1) //线2是直线 + curveNext.StartPoint = sp; + else //都是圆弧 + { + let mp = midPoint(sp, ep); + curveNow.EndPoint = mp; + curveNext.StartPoint = mp; + } + } + continue; + } + let iPtsP = curveNow.IntersectWith2(curveNext, IntersectOption.ExtendBoth, 1e-6); + let iPts = iPtsP.map(p => p.pt); + let tPts = iPtsP.filter(p => curveNow.ParamOnCurve(p.thisParam) && curveNext.ParamOnCurve(p.argParam)).map(p => p.pt); + let tp; + if (code === 1) { + if (this._IsTopoOffset && tPts.length === 0 && curveResNow.dist !== curveResNext.dist) + tPts = iPts; + if (tPts.length > 0) //不走刀或者有真交点 this._ToolPath === false || + tp = iPts[0]; + else { + if (iPts.length > 0 && iPtsP[0].thisParam > 1) { + let refP = this._Vertexs[curveResNext.index]; + let distSq = iPts[0].distanceToSquared(refP); + if (this._ToolPath && distSq > this._OffsetDistSq) { + if (this._JoinType === PolylineJoinType.Round) + curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)]; + else + curveResNow.paddingCurve = [this.CreateSquare(refP, curveResNow, curveResNext, code)]; //补直线 + this._TrimCircleContours.push(this._Circles[curveResNext.index]); + } + else + tp = iPts[0]; + } + // else + // curveResNow.paddingCurve = [new Line(sp, ep)]; + } + } + else //直线和圆弧 圆弧和圆弧 + { + let refP = this._Vertexs[curveResNext.index]; + //在局部偏移中,当偏移距离不一致时,我们总是倾向于直接连接 + if (this._IsTopoOffset && tPts.length === 0 && curveResNow.dist !== curveResNext.dist) { + if (iPts.length) + tPts = iPts; + else { + curveResNow.paddingCurve = [new Line(sp, ep)]; //补直线 + continue; + } + } + if (tPts.length > 0) //ipts = 1 or ipts = 2 + tp = SelectNearP(tPts, refP); + else //补圆弧 或者尝试连接 + { + if (iPts.length > 0 && !this._ToolPath && this.IsSharpCorner(curveResNow, curveResNext)) //非加工刀路 并且尖角化(谷)时 + { + //设置新的连接点,并且备份旧点 + let oldp; + if (curveResNow.sp) { + oldp = curveNow.StartPoint; + curveNow.StartPoint = curveResNow.sp; + } + let oldp2; + if (curveResNext.ep) { + oldp2 = curveNext.EndPoint; + curveNext.EndPoint = curveResNext.ep; + } + let p; + if (code === 2 && iPts.length === 2) { + let c = curveNow; + let minArc = new Arc(c.Center, c.Radius, c.EndAngle, 0, c.IsClockWise); + let p1 = iPts[0]; + let a1 = minArc.GetAngleAtPoint(p1); + let anAll1 = c.ParamOnCurve(c.GetParamAtAngle(a1)) ? Infinity : minArc.ComputeAnlge(a1); + let p2 = iPts[1]; + let a2 = minArc.GetAngleAtPoint(p2); + let anAll2 = c.ParamOnCurve(c.GetParamAtAngle(a2)) ? Infinity : minArc.ComputeAnlge(a2); + if (anAll2 < anAll1) + p = p2; + else + p = p1; + } + else + p = SelectNearP(iPts, refP); + let onPre; + let param = curveNow.GetParamAtPoint2(p); + if (curveNow instanceof Line) + onPre = param > 1; + else + onPre = param < 0 || param > 1; + let onNext = false; + if (onPre) { + let param2 = curveNext.GetParamAtPoint2(p); + if (curveNext instanceof Line) + onNext = param2 < 0; + else + onNext = param2 < 0 || param2 > 1; + } + if (curveResNow.sp) + curveNow.StartPoint = oldp; + if (curveResNext.ep) + curveNext.EndPoint = oldp2; + if (onPre && onNext) + tp = p; + else + curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)]; //补圆弧 + } + else { + if (this._JoinType === PolylineJoinType.Round) + curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)]; //补圆弧 + else { + curveResNow.paddingCurve = [this.CreateSquare(refP, curveResNow, curveResNext, code)]; //补直线 + } + } + let circle = this._Circles[curveResNext.index]; + if (circle) + this._TrimCircleContours.push(circle); //因为局部偏移可能未提供圆 + } + } + if (tp) { + curveResNow.ep = tp; + curveResNext.sp = tp; + curveResNow.nextCurve = curveNext; + curveResNext.preCurve = curveNow; + } + } + else { + let padCirs = []; + for (let s = FixIndex$1(curveResNow.index + 1, this._Circles);; s = FixIndex$1(s + 1, this._Circles)) { + let circle = this._Circles[s]; + if (circle) //因为局部偏移可能未提供圆 + { + this._TrimCircleContours.push(circle); + padCirs.push(circle); + } + if (s === curveResNext.index) + break; + } + curveResNow.paddingCurve = padCirs; + } + } + } + /** + * 判断两曲线是否尖角化 + * 在 + * 1.直线和圆弧,圆弧和圆弧 + * 2.有交点,无真交点时 + * 必须在正确的方向做出延伸动作,所以必须在尖角的情况下延伸,偏移的结果就像一个谷字去掉一个口的结果,上面的人就是偏移后的结果. + * 如果是谷,则允许连接 #I7WKKG + */ + IsSharpCorner(curveResNow, curveResNext) { + let v1 = this._SubCurves[curveResNow.index].GetFirstDeriv(1); + let v2 = this._SubCurves[curveResNext.index].GetFirstDeriv(0); + v1.cross(v2); + return Math.sign(v1.z) === this._OffsetDistSign; + } + GeneralTrimContours() { + for (let d of this._SubOffsetedCurves) { + let cu2 = d.curve; + if (d.sp && d.ep) { + let param1 = cu2.GetParamAtPoint(d.sp); + let param2 = cu2.GetParamAtPoint(d.ep); + if (cu2.ParamOnCurve(param1) && cu2.ParamOnCurve(param2) && param1 > param2) + [d.sp, d.ep] = [d.ep, d.sp]; + } + if (d.sp) + cu2.StartPoint = d.sp; + if (d.ep) + cu2.EndPoint = d.ep; + //这是极端情况,圆弧被压缩成0长度圆弧,本质是空圆弧(我们会在下面判断它)(因为精度的问题) + //因为精度的问题,这种0圆心角的圆弧会被当成全圆,但是偏移算法中,应该不可能出现全圆弧的圆弧,所以我们压扁它 + if (cu2 instanceof Arc + && equaln$1(cu2.StartAngle, cu2.EndAngle, 1e-6) + // && !equaln((this._SubCurves[d.index]).AllAngle, Math.PI * 2, 1e-3) 应该不会出现 + ) { + if (cu2.IsClockWise) + cu2.StartAngle = cu2.EndAngle + 1e-6; + else + cu2.EndAngle = cu2.StartAngle + 1e-6; + } + } + for (let d of this._SubOffsetedCurves) { + let cu1 = this._SubCurves[d.index]; + let cu2 = d.curve; + let [p1, p2, p3, p4] = [cu1.StartPoint, cu2.StartPoint, cu1.EndPoint, cu2.EndPoint]; + let l1 = new Line(p1, p2); + let l2 = new Line(p3, p4); + let ipts = l1.IntersectWith(l2, IntersectOption.ExtendNone, 1e-8); + if (ipts.length > 0) { + let p = ipts[0]; + l1.EndPoint = p; + l2.EndPoint = p; + let cus = [cu1, l1, l2]; + let contour = Contour.CreateContour(cus, false); + if (contour) { + this._TrimPolylineContours.push(contour); + continue; + } + else { + console.error("未预料到的错误,构建轮廓失败" + this._OffsetDist); + } + } + //真理1:针脚线不可能同时被两个圆弧所切割 + let l1Intact = true; + let l2Intact = true; + if (cu2 instanceof Arc) { + if (Math.sign(cu2.Bul) !== this._OffsetDistSign) { + let ipts1 = cu2.IntersectWith(l1, IntersectOption.ExtendNone); + let ipts2 = cu2.IntersectWith(l2, IntersectOption.ExtendNone); + let sp; + let ep; + if (ipts1.length === 2) + sp = SelectNearP(ipts1, p1); + if (ipts2.length === 2) + ep = SelectNearP(ipts2, p3); + if (sp || ep) + cu2 = cu2.Clone(); + if (sp) { + l1.EndPoint = sp; + cu2.StartPoint = sp; + l1Intact = false; + } + if (ep) { + l2.EndPoint = ep; + cu2.EndPoint = ep; + l2Intact = false; + } + } + } + let l1PadArc; + let l2PadArc; + //真理2:隔壁的圆弧不可能破坏当前的圆弧,只能破坏当前的针脚 + if (l1Intact && d.preCurve && d.preCurve instanceof Arc) { + let a = d.preCurve; + if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6) { + let ipts = a.IntersectWith(l1, IntersectOption.ExtendNone); + if (ipts.length === 2) { + let sp = SelectNearP(ipts, p1); + l1.EndPoint = sp; + l1PadArc = a.Clone(); + l1PadArc.StartPoint = sp; + } + } + } + if (l2Intact && d.nextCurve && d.nextCurve instanceof Arc) { + let a = d.nextCurve; + if (Math.sign(a.Bul) !== this._OffsetDistSign && a.AllAngle > 1e-6) { + let ipts = a.IntersectWith(l2, IntersectOption.ExtendNone); + if (ipts.length === 2) { + let ep = SelectNearP(ipts, p3); + l2.EndPoint = ep; + l2PadArc = a.Clone(); + l2PadArc.EndPoint = ep; + } + } + } + let pl = new Polyline(); + let cus = [cu1, l1]; + if (l1PadArc) + cus.push(l1PadArc); + cus.push(cu2, l2); + if (l2PadArc) + cus.push(l2PadArc); + for (let c of cus) + pl.Join(c); + let contour = Contour.CreateContour(pl, false); + if (contour) + this._TrimPolylineContours.push(contour); + else + console.error("未预料到的错误,构建轮廓失败" + this._OffsetDist); + } + if (!this._IsClose) { + //起点和终点裁剪掉圆 + if (this._TrimCircleContours[0] !== this._Circles[0]) + this._TrimCircleContours.push(this._Circles[0]); + let lastTrimCircle = arrayLast(this._TrimCircleContours); + let lastCircle = arrayLast(this._Circles); + if (lastTrimCircle !== lastCircle) + this._TrimCircleContours.push(lastCircle); + if (this._SubOffsetedCurves[0].index !== 0) + this._TrimCircleContours.push(this._Circles[this._SubOffsetedCurves[0].index]); + //最后一段曲线裁剪掉圆 + let lastIndex = this._Circles.length - 1; + let lastD = arrayLast(this._SubOffsetedCurves); + if (lastIndex !== lastD.index) + this._TrimCircleContours.push(this._Circles[lastD.index + 1]); + } + this._TrimPolylineContours.push(...this._TrimCircleContours.map(c => Contour.CreateContour(c, false)), ...this._TrimArcContours); + } + // 通过构建的轮廓对偏移曲线进行裁剪 + TrimByContours() { + for (let d of this._SubOffsetedCurves) { + let c = d.curve; + if (CurveIsFine(c)) + this._CurveTreeNodes.push(new CurveTreeNode(c)); + if (d.paddingCurve) + this._CurveTreeNodes.push(...d.paddingCurve.map(c => new CurveTreeNode(c))); + } + for (let i = 0; i < this._TrimPolylineContours.length; i++) { + let c = this._TrimPolylineContours[i]; + let cbox = c.BoundingBox; + for (let curveNode of this._CurveTreeNodes) + curveNode.TrimBy(c, cbox); + } + } + //过滤方向相反和0长度线 + FilterInvalidCurve() { + this._CurveTrimedTreeNodes = []; + for (let n of this._CurveTreeNodes) { + let ns = n.Nodes; + for (let sn of ns) { + if (this.CheckPointDir(sn.curve.GetPointAtParam(0.5))) + this._CurveTrimedTreeNodes.push(sn); + } + } + } + //合并共线 + JoinCollinear() { + for (let i = 0; i < this._CurveTrimedTreeNodes.length; i++) { + let n = this._CurveTrimedTreeNodes[i]; + if (n.used) + continue; + let sp = n.curve.StartPoint; + for (let j = i + 1; j < this._CurveTrimedTreeNodes.length; j++) { + let n2 = this._CurveTrimedTreeNodes[j]; + if (n2.used) + continue; + let status = n.curve.Join(n2.curve); + if (status === Status.ConverToCircle && this._AllowConverToCircle) { + n.used = true; + n2.used = true; + let circle = new Circle(n.curve.Center, n.curve.Radius); + n.curve = circle; + this._RetCurves.push(ConverCircleToPolyline$1(circle).ApplyMatrix(this._CacheOCS)); + } + else if (status === Status.True) { + if (equalv3(sp, n.curve.StartPoint)) + n2.used = true; + else { + n.used = true; + n2.curve = n.curve; + break; + } + } + } + } + } + //连接结果曲线,返回最终多段线 + LinkResultPolyline() { + let used = new Set(); + let cuMap = new CurveMap(1); + for (let n of this._CurveTrimedTreeNodes) { + if (!n.used) + cuMap.AddCurveToMap(n.curve); + } + let preP; + let searchNext = (s, pl, isJoinEnd = true) => { + let minDist = Infinity; + let minR; + for (let r of s.routes) { + if (used.has(r.curve)) + continue; + if (preP) { + let d = r.s.distanceToSquared(preP); + if (d < minDist) { + minR = r; + minDist = d; + } + } + else { + minR = r; + minDist = 0; + break; + } + } + if (minR && Math.sqrt(minDist) < 0.085) { + used.add(minR.curve); + preP = minR.e; + // let status = pl.Join(minR.curve, false, 8e-2); + // if (status !== Status.True) + // console.warn("连接失败"); + //#region fast join (为了避免Polyline.Join 导致的顺序错误) + let cu = minR.curve; + //bul + let bul = 0; + if (cu instanceof Arc) { + bul = cu.Bul; + if (minR.isReverse) + bul *= -1; + if (!isJoinEnd) + bul *= -1; + } + if (pl.LineData.length === 0) { + pl.LineData.push({ + pt: AsVector2(minR.s), + bul: bul + }); + } + if (isJoinEnd) { + pl.LineData[pl.LineData.length - 1].bul = bul; + pl.LineData.push({ + pt: AsVector2(minR.e), + bul: 0 + }); + } + else { + pl.LineData.unshift({ + pt: AsVector2(minR.e), + bul + }); + } + //#endregion + return minR.to; + } + }; + for (let s of cuMap.Stands) { + preP = undefined; + let pl = new Polyline(); + let ss = s; + while (ss && !pl.IsClose) + ss = searchNext(ss, pl, true); + ss = s; + preP = pl.StartPoint; + while (ss && !pl.IsClose) + ss = searchNext(ss, pl, false); + if (pl.NumberOfVertices > 1) { + //避免0长度的线 + if (pl.NumberOfVertices === 2 && pl.Length < 1e-6) + continue; + let d = pl.LineData; + let ld = arrayLast(d); + if (equalv2(d[0].pt, ld.pt, 1e-2)) + ld.pt.copy(d[0].pt); + this._RetCurves.push(pl.ApplyMatrix(this._CacheOCS)); + } + } + } + RepairResultPolylineClosemark() { + if (!this._RetCurves.length) + return; + if (this._Polyline.CloseMark) { + if (!equalv2(this._Polyline.LineData[0].pt, arrayLast(this._Polyline.LineData).pt, 8e-2)) //缺省一个点 + { + for (let pl of this._RetCurves) { + if (pl.IsClose && //封闭 + equaln$1(arrayLast(pl.LineData).bul, 0, 1e-5) && //是直线 + equalv2(pl.LineData[0].pt, arrayLast(pl.LineData).pt, 8e-2)) //首尾重复(一般已经是了) + { + pl.LineData.pop(); //移除最后一点 + pl.CloseMark = true; + } + } + } + else { + for (let pl of this._RetCurves) { + if (pl.IsClose) + pl.CloseMark = true; + } + } + } + else if (this._IsClose) { + for (let pl of this._RetCurves) { + let firstP = pl.LineData[0].pt; + let lastP = arrayLast(pl.LineData).pt; + if (equalv2(firstP, lastP, 8e-2)) + lastP.copy(firstP); + } + } + } + CheckPointDir(pt) { + return this.GetPointAtCurveDir(pt) === this._OffsetDistSign; + } + /** + * 点在线上 或者在线内(外) + * @param pt + * @returns 0在线上 1 -1 + */ + GetPointAtCurveDir(pt) { + let minIndex = Infinity; + let minDist = Infinity; + let minCp; + for (let i = 0; i < this._SubCurves.length; i++) { + let c = this._SubCurves[i]; + let cp = c.GetClosestPointTo(pt, false); + if (equalv3(cp, pt, 1e-4)) + return 0; + let dist = cp.distanceToSquared(pt); + if (dist < minDist) { + minDist = dist; + minIndex = i; + minCp = cp; + } + } + let c = this._SubCurves[minIndex]; + let param = c.GetParamAtPoint(minCp); + if (equaln$1(param, 0) && ((minIndex === 0) ? this._IsClose : true)) { + let preIndex = FixIndex$1(minIndex - 1, this._SubCurves); + let preCurve = this._SubCurves[preIndex]; + if (!equalv3(c.GetFirstDeriv(0).normalize(), preCurve.GetFirstDeriv(1).normalize())) { + let p = c.StartPoint; + let l1 = c.Length; + let l2 = preCurve.Length; + let minLength = Math.min(l1, l2) * 0.2; + let nextP; + let preP; + if (c instanceof Arc) + nextP = c.GetPointAtDistance(minLength); + else + nextP = c.EndPoint; + if (preCurve instanceof Arc) + preP = preCurve.GetPointAtDistance(l2 - minLength); + else + preP = preCurve.StartPoint; + let arc = new Arc(p, 1, angle(preP.sub(p)), angle(nextP.sub(p))); + let dir = arc.PtOnCurve3(pt) ? -1 : 1; + return dir; + } + } + else if (equaln$1(param, 1) && ((minIndex === this._SubCurves.length - 1) ? this._IsClose : true)) { + let nextIndex = FixIndex$1(minIndex + 1, this._SubCurves); + let nextCurve = this._SubCurves[nextIndex]; + if (!equalv3(c.GetFirstDeriv(1).normalize(), nextCurve.GetFirstDeriv(0).normalize())) { + let p = c.EndPoint; + let l1 = c.Length; + let l2 = nextCurve.Length; + let minLength = Math.min(l1, l2) * 0.2; + let nextP; + let preP; + if (c instanceof Arc) + preP = c.GetPointAtDistance(l1 - minLength); + else + preP = c.StartPoint; + if (nextCurve instanceof Arc) + nextP = nextCurve.GetPointAtDistance(minLength); + else + nextP = nextCurve.EndPoint; + let arc = new Arc(p, 1, angle(preP.sub(p)), angle(nextP.sub(p))); + let dir = arc.PtOnCurve3(pt) ? -1 : 1; + return dir; + } + } + let dri = c.GetFirstDeriv(param); + let cross = dri.cross(pt.clone().sub(minCp)); + return -Math.sign(cross.z); + } + CreateArc(center, startP, endP) { + let sa = angle(startP.clone().sub(center)); + let ea = endP ? angle(endP.clone().sub(center)) : sa; + let arc = new Arc(center, Math.abs(this._OffsetDist), sa, ea, this._OffsetDist < 0); + return arc; + } + CreateSquare(center, curveNow, curveNext, entTypeCode) { + const arc = this.CreateArc(center, curveNow.curve.EndPoint, curveNext.curve.StartPoint); + const centerPoint = arc.GetPointAtParam(0.5); + const tangentLine = new Line(centerPoint, arc.GetFirstDeriv(0.5).add(centerPoint)); //切线 + let ep, sp; + if (entTypeCode === 1) { + ep = tangentLine.IntersectWith(curveNow.curve, IntersectOption.ExtendBoth)[0]; //第一条线新的终点坐标 + sp = centerPoint.multiplyScalar(2).sub(ep); + } + else // if (entTypeCode === 0)//全圆弧 直线和圆弧 + { + ep = SelectNearP(tangentLine.IntersectWith(curveNow.curve, IntersectOption.ExtendBoth), center); //第一条线新的终点坐标 + sp = SelectNearP(tangentLine.IntersectWith(curveNext.curve, IntersectOption.ExtendBoth), center); + } + curveNow.ep = ep; + curveNext.sp = sp; + return new Line(ep, sp); + } +} +/** + * @param c + * @returns 1:line 2:arc + */ +function EntityEncode(c) { + if (c instanceof Line) + return 1; + else + return 2; +} +const CURVE_MIN_LENGTH = 5e-5; +const ARC_MIN_ALLANGLE = 2e-6; +//表示这个是一个正常的曲线,不是0长度的线,也不是0长度的圆弧 +function CurveIsFine(curve) { + if (curve instanceof Arc && curve.AllAngle < ARC_MIN_ALLANGLE) + return false; + return curve.Length > CURVE_MIN_LENGTH; +} + +/** + * 判断点在多段线内外(如果点在线上 则返回false) + * @param pl 多段线 + * @param pt 点 + * @returns 点在多段线内部 + */ +function IsPointInPolyLine(pl, pt) { + let crossings = 0; + let insLine = new Line(pt, pt.clone().add(new Vector3(0, 10, 0))); + for (let i = 0; i < pl.EndParam; i++) { + if (equaln$1(pl.GetBulgeAt(i), 0, BUL_IS_LINE_FUZZ)) //直线 + { + let sp = pl.GetPointAtParam(i); + let ep = pl.GetPointAtParam(i + 1); + if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5)) //在起点或者终点 + return false; + //点位于线上面 + if (pt.y > Math.max(sp.y, ep.y)) + continue; + //线垂直Y轴 + let derX = ep.x - sp.x; + if (equaln$1(derX, 0, 5e-6)) { + if (equaln$1(pt.x, ep.x, 1e-5) + && (pt.y > Math.min(sp.y, ep.y) - 1e-5 && pt.y < Math.max(sp.y, ep.y) + 1e-5)) + return false; //点在线上 + continue; + } + //起点 + if (equaln$1(sp.x, pt.x, 5e-6)) { + if (sp.y > pt.y && derX < 0) + crossings++; + continue; + } + //终点 + if (equaln$1(ep.x, pt.x, 5e-6)) { + if (ep.y > pt.y && derX > 0) + crossings++; + continue; + } + //快速求交,只验证有没有交点 + let [x1, x2] = sp.x > ep.x ? [ep.x, sp.x] : [sp.x, ep.x]; + if (pt.x > x1 && pt.x < x2) { + let derY = ep.y - sp.y; + let k = derY / derX; + let iptY = (pt.x - sp.x) * k + sp.y; + if (equaln$1(iptY, pt.y, 1e-5)) //点在线上 返回false + return false; + if (iptY > pt.y) + crossings++; + } + } + else //圆弧 + { + let arc = pl.GetCurveAtIndex(i); + let sp = arc.StartPoint; + let ep = arc.EndPoint; + if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5)) //在起点或者终点 + return false; + let center = arc.Center; + //如果相切 + if (equaln$1(Math.abs(pt.x - center.x), arc.Radius)) { + //点在线上 + if (equaln$1(pt.y, center.y) && arc.ParamOnCurve(arc.GetParamAtPoint2(pt))) + return false; + //当点和起点或者终点和点相切时 + if (equaln$1(sp.x, pt.x) && sp.y > pt.y) { + if (ep.x - sp.x < -1e-5) + crossings++; + } + else if (equaln$1(ep.x, pt.x) && ep.y > pt.y) { + if (ep.x - sp.x > 1e-5) + crossings++; + } + continue; + } + if (equaln$1(sp.x, pt.x) && sp.y > pt.y) { + let der = arc.GetFirstDeriv(0).normalize(); + if (der.x < -1e-5) + crossings++; + } + if (equaln$1(ep.x, pt.x) && ep.y > pt.y) { + let der = arc.GetFirstDeriv(1).normalize(); + if (der.x > 1e-5) + crossings++; + } + for (let pti of arc.IntersectWith(insLine, IntersectOption.ExtendArg)) { + if (equalv2(pti, pt, 1e-5)) //点在线上 返回false + return false; + //交点在点下 交点在起点? 交点在终点? + if (pti.y + 1e-5 < pt.y || equalv2(sp, pti, 1e-5) || equalv2(ep, pti, 1e-5)) + continue; + crossings++; + } + } + } + return (crossings % 2) === 1; +} + +var Polyline_1; +const BUL_IS_LINE_FUZZ = 1e-5; +let Polyline = Polyline_1 = class Polyline extends Curve { + constructor(_LineData = []) { + super(); + this._LineData = _LineData; + this._DisplayAccuracy = 0; + this._ClosedMark = false; + } + UpdateOCSTo(m) { + this.WriteAllObjectRecord(); + let p = new Vector3().setFromMatrixPosition(m); + p.applyMatrix4(this.OCSInv); + if (equaln$1(p.z, 0)) { + let dir = Math.sign(this.Area2); + let tm = matrixAlignCoordSys(this.OCSNoClone, m); + for (let p of this._LineData) { + let p3 = AsVector3(p.pt); + p3.applyMatrix4(tm); + p.pt.set(p3.x, p3.y); + } + this.OCS = m; + let newDir = Math.sign(this.Area2); + if (dir !== newDir) + for (let p of this._LineData) + p.bul *= -1; + } + } + /** + * 原地翻转,仅改变法向量 + */ + Flip() { + this.WriteAllObjectRecord(); + let x = new Vector3(); + let y = new Vector3(); + let z = new Vector3(); + this._Matrix.extractBasis(x, y, z); + z.negate(); + y.crossVectors(z, x); + let p = this.Position; + this._Matrix.makeBasis(x, y, z).setPosition(p); + for (let d of this._LineData) { + d.pt.y *= -1; + d.bul *= -1; + } + this.Update(); + return this; + } + //翻转曲线,首尾调换 + Reverse() { + if (this._LineData.length === 0) + return this; + this.WriteAllObjectRecord(); + let pts = []; + let buls = []; + for (let data of this._LineData) { + pts.push(data.pt); + buls.push(-data.bul); + } + let lastBul = buls.pop(); + buls.reverse(); + buls.push(lastBul); + pts.reverse(); + if (this._ClosedMark && !equalv2(pts[0], arrayLast(pts))) { + pts.unshift(pts.pop()); + buls.unshift(buls.pop()); + } + for (let i = 0; i < pts.length; i++) { + let d = this._LineData[i]; + d.pt = pts[i]; + d.bul = buls[i]; + } + return this; + } + get DisplayAccuracy() { + return this._DisplayAccuracy; + } + set DisplayAccuracy(v) { + if (!equaln$1(v, this._DisplayAccuracy)) { + this.WriteAllObjectRecord(); + this._DisplayAccuracy = v; + this.Update(); + } + } + set LineData(data) { + this.WriteAllObjectRecord(); + this._LineData = data; + this.Update(); + } + get LineData() { + return this._LineData; + } + get NumberOfVertices() { + return this._LineData.length; + } + /** + * 在指定位置插入点. + * 例如: + * pl.AddVertexAt(pl.NumberOfVertices,p);//在末尾插入一个点 + * + * @param {number} index 索引位置 + * @param {Vector2} pt 点 + * @returns {this} + * @memberof Polyline + */ + AddVertexAt(index, pt) { + this.WriteAllObjectRecord(); + let pts; + if (Array.isArray(pt)) { + pts = pt.map(p => { + return { + pt: p.clone(), + bul: 0 + }; + }); + } + else + pts = [{ pt: pt.clone(), bul: 0 }]; + this._LineData.splice(index, 0, ...pts); + this.Update(); + return this; + } + RemoveVertexAt(index) { + if (index < this._LineData.length) { + this.WriteAllObjectRecord(); + this._LineData.splice(index, 1); + this.Update(); + } + return this; + } + RemoveVertexIn(from, to) { + if (from + 1 < this._LineData.length && to > from) { + this.WriteAllObjectRecord(); + this._LineData.splice(from + 1, to - from - 1); + this.Update(); + } + return this; + } + /** + * 重设闭合多段线的起点 + * @param index 起始index,如果index非整数,将用最接近的整数作为起始索引 + */ + ResetStartPoint(index) { + if (!this.IsClose || index >= this.EndParam) + return false; + if (equalv2(this._LineData[0].pt, arrayLast(this._LineData).pt)) + this._LineData.pop(); + changeArrayStartIndex(this._LineData, Math.floor(index + 0.5)); + this._LineData.push({ + pt: this._LineData[0].pt.clone(), + bul: 0 + }); + return true; + } + GetPoint2dAt(index) { + if (index >= 0 && this._LineData.length > index) + return this._LineData[index].pt.clone(); + } + /** + * 设置指定点的位置 + * + * @param {number} index + * @param {Vector2} pt + * @memberof Polyline + */ + SetPointAt(index, pt) { + let d = this._LineData[index]; + if (d) { + this.WriteAllObjectRecord(); + d.pt.copy(pt); + this.Update(); + } + return this; + } + ApplyScaleMatrix(m) { + this.WriteAllObjectRecord(); + let inv = this.OCSInv; + for (let i = 0; i <= this.EndParam; i++) { + let p = this.GetPointAtParam(i); + p.applyMatrix4(m).applyMatrix4(inv); + this.SetPointAt(i, AsVector2(p)); + } + return this; + } + ApplyMirrorMatrix(m) { + this.WriteAllObjectRecord(); + let oldPts = this.GetStretchPoints(); + reviseMirrorMatrix(this._Matrix); + let inv = this.OCSInv; + for (let i = 0; i < oldPts.length; i++) { + let newP = oldPts[i].applyMatrix4(inv); + let newBul = -this.GetBulgeAt(i); + this.SetPointAt(i, AsVector2(newP)); + this.SetBulgeAt(i, newBul); + } + this.Reverse(); + return this; + } + SetBulgeAt(index, bul) { + let d = this._LineData[index]; + if (d) { + this.WriteAllObjectRecord(); + d.bul = bul; + this.Update(); + } + return this; + } + GetBulgeAt(index) { + return this._LineData[index].bul; + } + Rectangle(length, height) { + this.LineData = [ + { pt: new Vector2$1(), bul: 0 }, + { pt: new Vector2$1(length), bul: 0 }, + { pt: new Vector2$1(length, height), bul: 0 }, + { pt: new Vector2$1(0, height), bul: 0 } + ]; + this.CloseMark = true; + return this; + } + RectangleFrom2Pt(p1, p2) { + let box = new Box3(); + box.setFromPoints([p2, p1].map((p) => p.clone().applyMatrix4(this.OCSInv))); + let px1 = AsVector2(box.min); + let px3 = AsVector2(box.max); + let px2 = new Vector2$1(px3.x, px1.y); + let px4 = new Vector2$1(px1.x, px3.y); + this.LineData = [ + { pt: px1, bul: 0 }, + { pt: px2, bul: 0 }, + { pt: px3, bul: 0 }, + { pt: px4, bul: 0 } + ]; + this.CloseMark = true; + return this; + } + FromPoints2d(pts) { + this.WriteAllObjectRecord(); + this._LineData.length = 0; + for (let p of pts) + this._LineData.push({ pt: AsVector2(p), bul: 0 }); + this.Update(); + return this; + } + //多段线起点 + get StartPoint() { + if (this._LineData.length > 0) + return AsVector3(this._LineData[0].pt).applyMatrix4(this.OCS); + return new Vector3(); + } + set StartPoint(p) { + this.WriteAllObjectRecord(); + p = p.clone().applyMatrix4(this.OCSInv); + if (this._LineData.length === 0) + this.AddVertexAt(0, AsVector2(p)); + else if (this._LineData.length === 1) + this.SetPointAt(0, AsVector2(p)); + else { + let bul = this.GetBulgeAt(0); + if (bul !== 0) { + let arc = this.GetCurveAtParam(0); + arc.StartPoint = p; + //前面线的凸度调整 + this.SetBulgeAt(0, Math.tan(arc.AllAngle / 4) * Math.sign(bul)); + } + this.SetPointAt(0, AsVector2(p)); + } + } + get EndPoint() { + if (this._ClosedMark) + return this.StartPoint; + if (this._LineData.length > 0) + return AsVector3(this._LineData[this.EndParam].pt).applyMatrix4(this.OCS); + return new Vector3(); + } + set EndPoint(p) { + if (this._LineData.length < 2 || this.CloseMark) + return; + this.WriteAllObjectRecord(); + p = p.clone().applyMatrix4(this.OCSInv); + let bul = this.GetBulgeAt(this.EndParam - 1); + if (bul !== 0) { + let arc = this.GetCurveAtParam(this.EndParam - 1); + arc.ApplyMatrix(this.OCSInv); + arc.EndPoint = p; + //前面线的凸度调整 + this.SetBulgeAt(this.EndParam - 1, Math.tan(arc.AllAngle / 4) * Math.sign(bul)); + } + this.SetPointAt(this.EndParam, AsVector2(p)); + } + get CurveCount() { + return this.EndParam; + } + get StartParam() { + return 0; + } + /** + * 表示最后一条曲线的终止参数,使用该参数可以直接遍历到多段线的所有子线段. for(i 1 && (equalv3(this.StartPoint, this.EndPoint, 1e-4))); + } + set CloseMark(v) { + this.WriteAllObjectRecord(); + this._ClosedMark = v; + this.Update(); + } + DigestionCloseMark() { + if (this._ClosedMark && this._LineData.length > 1) { + this.WriteAllObjectRecord(); + this._ClosedMark = false; + if (!equalv2(this._LineData[0].pt, arrayLast(this._LineData).pt)) + this._LineData.push({ pt: AsVector2(this._LineData[0].pt), bul: 0 }); + } + } + /** + * 删除重复点 + * @param [fuzz=0.1] 容差=0.1 + */ + RemoveRepeatPos(fuzz = 0.1) { + let index = 0; + let pre = 0; + let writed = false; + for (let next = 1; next <= this._LineData.length; next++) { + if ((!this._ClosedMark && next === this._LineData.length) || //如果曲线没闭合 则总是保留最后一个点 + !equalv2(this._LineData[pre].pt, this._LineData[FixIndex$1(next, this._LineData)].pt, fuzz)) { + if (!writed) { + this.WriteAllObjectRecord(); + writed = true; + } + this._LineData[index] = this._LineData[pre]; + index++; + } + pre++; + } + if (equalv2(this._LineData[0].pt, this._LineData[index - 1].pt, fuzz)) + this._LineData[index - 1].pt.copy(this._LineData[0].pt); + this._LineData.length = index; + this.Update(); + } + get Length() { + return this.Explode().reduce((l, cu) => l + cu.Length, 0); + } + /** + * 获得指定参数所在的点. + * 当曲线存在闭合标志时,参数必须在曲线内部. + * 当曲线不存在闭合标志时,参数允许延伸出曲线. + * + * @param {number} param 参数 + * @returns {Vector3} 三维点,可为空 + */ + GetPointAtParam(param) { + if (param === Math.floor(param) && this.ParamOnCurve(param)) + return AsVector3(this.GetPoint2dAt(FixIndex$1(param, this.NumberOfVertices))).applyMatrix4(this.OCSNoClone); + let cu = this.GetCurveAtParam(param); + if (cu) + return cu.GetPointAtParam(this.GetCurveParamAtParam(param)); + return undefined; + } + GetDistAtParam(param) { + if (this._ClosedMark && !this.ParamOnCurve(param)) + return NaN; + //参数 整数 + let paramFloor = Math.floor(param); + //需要计算的曲线个数 + let cuCount = paramFloor > this.EndParam ? this.EndParam : paramFloor; + let dist = 0; + //首先计算完整曲线的长度 + for (let i = 0; i < cuCount; i++) { + dist += this.GetCurveAtIndex(i).Length; + } + //参数已经大于索引,证明参数在线外. + if (paramFloor !== cuCount) { + dist += this.GetCurveAtParam(param).GetDistAtParam(param - cuCount); + } + else if (param > paramFloor) { + let lastParam = param - paramFloor; + dist += this.GetCurveAtParam(param).GetDistAtParam(lastParam); + } + return dist; + } + GetPointAtDistance(dist) { + let param = this.GetParamAtDist(dist); + return this.GetPointAtParam(param); + } + /** + * 返回参数所在的点. 如果曲线不闭合,会试图返回延伸点参数 + * + * @param {Vector3} pt + * @returns {number} + * @memberof Polyline + */ + GetParamAtPoint(pt, fuzz = 1e-5) { + let cus = this.Explode(); + if (cus.length === 0) + return NaN; + for (let i = 0; i < cus.length; i++) { + let cu = cus[i]; + let param = cu.GetParamAtPoint(pt, fuzz); + if (cu.ParamOnCurve(param, fuzz)) + return i + param; //返回点在曲线内部的参数 + } + //当曲线闭合时,不需要延伸首尾去判断参数 + if (this._ClosedMark) + return NaN; + //起点终点参数集合 + let seParams = []; + //点在第一条曲线上的参数 + let startParam = cus[0].GetParamAtPoint(pt, fuzz); + if (!isNaN(startParam) && startParam < 0) + seParams.push(startParam); + //点在最后一条线上的参数 + let endParam = cus[cus.length - 1].GetParamAtPoint(pt, fuzz); + if (!isNaN(endParam) && endParam > 0) + seParams.push(endParam + this.EndParam - 1); + if (seParams.length == 1) { + return seParams[0]; + } + else if (seParams.length == 2) { + //返回较近的参数 + if (pt.distanceToSquared(this.StartPoint) + < pt.distanceToSquared(this.EndPoint)) + return seParams[0]; + else + return seParams[1]; + } + return NaN; + } + GetParamAtDist(dist) { + if (equaln$1(dist, 0)) + return 0; + let cus = []; + for (let i = 0; i < this.EndParam; i++) { + let cu = this.GetCurveAtIndex(i); + let len = cu.Length; + if (len < 1e-6) + continue; + cus.push(cu); + if (dist <= len) + return i + cu.GetParamAtDist(dist); + else if (equaln$1(dist, len, 1e-8)) + return i + 1; + dist -= len; + } + if (!this._ClosedMark) + return cus.length + cus[cus.length - 1].GetParamAtDist(dist); + return NaN; + } + GetDistAtPoint(pt) { + let param = this.GetParamAtPoint(pt); + if (!this.ParamOnCurve(param)) + return NaN; + return this.GetDistAtParam(param); + } + /** + * 这个方法允许点在曲线的延伸线上 + * @param pt 需要保证传入的点路径上 + * @returns + */ + GetDistAtPoint2(pt) { + let param = this.GetParamAtPoint(pt); + if (param < 0) { + let c1 = this.GetCurveAtIndex(0); + return c1.Length * param; + } + else if (param > this.EndParam) { + let ce = this.GetCurveAtIndex(this.EndParam - 1); + return this.Length + ce.Length * (param - this.EndParam); + } + return this.GetDistAtParam(param); + } + /** + * 返回曲线的一阶导数. + * 当曲线闭合(标志)且点不在曲线上. + * 或者曲线不闭合(标志) 且点不在曲线上也不在延伸上 + * + * @param {(number | Vector3)} param + * @returns {Vector3} + * @memberof Polyline + */ + GetFirstDeriv(param) { + if (param instanceof Vector3) + param = this.GetParamAtPoint(param); + if (isNaN(param)) + return undefined; + let cu = this.GetCurveAtParam(param); + if (!cu) + return undefined; + return cu.GetFirstDeriv(this.GetCurveParamAtParam(param)); + } + GetSplitCurves(param) { + //参数需要转化为参数数组 + let params; + if (typeof param == "number") + params = [param]; + else + params = param; + //校验参数在曲线中,修正参数 + let endParam = this.EndParam; + params = params.filter(p => this.ParamOnCurve(p) && p > -1e-6) + .map(a => { + if (a < 0) + return 0; + if (a > endParam) + return endParam; + if (equaln$1(a, Math.floor(a + 0.5), 1e-8)) + return Math.floor(a + 0.5); + return a; + }); + //排序 + params.sort((a, b) => a - b); + let hasEndParam = arrayLast(params) === this.EndParam; + //必须加入最后一个参数,保证切割后的曲线完整 + if (!hasEndParam) + params.push(this.EndParam); + arrayRemoveDuplicateBySort(params, (e1, e2) => equaln$1(e1, e2, 1e-8)); + params = params.filter(p => this.ParamOnCurve(p)); + if (params.length === 0) + return []; + //判断是否存在0参数 + let hasZeroParam = params[0] === 0; + if (hasZeroParam) + params.shift(); + let { pts, buls } = this.PtsBuls; + //返回的多段线集合 + let pls = []; + let len = 0; //已经走过的参数长度(整数) + //上一个切割参数的位置 0-1 + let prePa = 0; + for (let pa of params) { + //参数所在点 + let pt = AsVector2(this.GetPointAtParam(pa).applyMatrix4(this.OCSInv)); + pa -= len; + let pafloor = Math.floor(pa); + len += pafloor; + let plData = []; + //添加点 + for (let i = 0; i < pafloor; i++) { + if (i === 0 && !equaln$1(buls[0], 0, 1e-8)) { + buls[0] = Math.tan((1 - prePa) * Math.atan(buls[0])); + } + plData.push({ pt: pts[0], bul: buls[0] }); + pts.shift(); + buls.shift(); + } + if (equaln$1(pa, pafloor, 1e-8)) //如果pa在点上 + { + plData.push({ pt: pts[0].clone(), bul: buls[0] }); + } + else //在曲线上 + { + let bul = buls[0]; + if (!equaln$1(bul, 0, 1e-6)) + bul = Math.tan((pa - pafloor - (0 === pafloor ? prePa : 0)) * Math.atan(buls[0])); //->凸度 + //加入顶点+凸度 + plData.push({ pt: pts[0].clone(), bul }); + //终点 + plData.push({ pt, bul: 0 }); + //修正剩余的点表和凸度表 + pts[0].copy(pt); + } + prePa = pa - pafloor; + if (plData.length > 1) { + let pl = new Polyline_1(plData).ApplyMatrix(this.OCS); + pl.ColorIndex = this.ColorIndex; + pls.push(pl); + } + } + //当曲线为闭合曲线,并且不存在0切割参数时,首尾连接曲线 + if (this._ClosedMark && !hasZeroParam && !hasEndParam) { + let lastPl = pls[pls.length - 1]; + if (equalv2(arrayLast(lastPl._LineData).pt, pls[0]._LineData[0].pt)) + lastPl._LineData.pop(); + lastPl._LineData.push(...pls[0]._LineData); + pls.shift(); + } + return pls; + } + //未完善 + GetCurveAtParamRange(startParam, endParam) { + let sfloor = Math.floor(startParam + 0.5); + if (equaln$1(sfloor, startParam, 1e-8)) + startParam = sfloor; + else + sfloor = Math.floor(startParam); + let efloor = Math.floor(endParam + 0.5); + if (equaln$1(efloor, endParam, 1e-8)) + endParam = efloor; + else + efloor = Math.floor(efloor); + const GetCurve = (index) => { + let d = this._LineData[index]; + let next = this._LineData[index + 1]; + if (!equaln$1(d.bul, 0, 1e-8)) + return new Arc().ParseFromBul(d.pt, next.pt, d.bul); + else + return new Line(AsVector3(d.pt), AsVector3(next.pt)); + }; + let lined = []; + if (startParam === sfloor) { + let d = this._LineData[sfloor]; + lined.push({ pt: d.pt.clone(), bul: d.bul }); + } + else { + let d = this._LineData[sfloor]; + let cu = GetCurve(sfloor); + let remParam = startParam - sfloor; + let p = cu.GetPointAtParam(remParam); + let bul = d.bul; + if (!equaln$1(bul, 0)) + bul = Math.tan(Math.atan(bul) * (1 - remParam)); + lined.push({ pt: AsVector2(p), bul: bul }); + } + for (let i = sfloor + 1; i < efloor; i++) { + let d = this._LineData[i]; + lined.push({ pt: d.pt.clone(), bul: d.bul }); + } + if (efloor !== endParam) { + let d = this.LineData[efloor]; + let remParam = endParam - efloor; + let cu = GetCurve(efloor); + let p = cu.GetPointAtParam(remParam); + let bul = d.bul; + if (!equaln$1(bul, 0)) { + arrayLast(lined).bul = Math.tan(Math.atan(bul) * remParam); + bul = Math.tan(Math.atan(bul) * (1 - remParam)); + } + lined.push({ pt: AsVector2(p), bul }); + } + let pl = new Polyline_1(lined); + pl.OCS = this.OCSNoClone; + return; + } + Extend(newParam) { + if (this.CloseMark || this.ParamOnCurve(newParam)) + return; + this.WriteAllObjectRecord(); + let ptIndex; + let bulIndex; + if (newParam < 0) { + ptIndex = 0; + bulIndex = 0; + } + else if (newParam > this.EndParam) { + ptIndex = this.EndParam; + bulIndex = ptIndex - 1; + } + //修改顶点 + this._LineData[ptIndex].pt = AsVector2(this.GetPointAtParam(newParam).applyMatrix4(this.OCSInv)); + //修改凸度 + let oldBul = this._LineData[bulIndex].bul; + if (oldBul !== 0) + this._LineData[bulIndex].bul = Math.tan(Math.atan(oldBul) * (1 + Math.abs(newParam - ptIndex))); + this.Update(); + } + //const this + MatrixAlignTo2(toMatrix) { + if (!matrixIsCoplane(this._Matrix, toMatrix, 1e-4)) + return this.PtsBuls; + let m = matrixAlignCoordSys(this._Matrix, toMatrix); + let z1 = this.Normal; + let z2 = new Vector3().setFromMatrixColumn(toMatrix, 2); + let isMirror = equalv3(z1, z2.negate()); + let pts = []; + let buls = []; + for (let d of this._LineData) { + let p = AsVector2(AsVector3(d.pt).applyMatrix4(m)); + pts.push(p); + buls.push(isMirror ? -d.bul : d.bul); + } + return { pts, buls }; + } + /** + * 将多段线的OCS清除(请保证这个实体是在WCSZ0坐标系下,否则结果不正确!) + */ + MatrixIdentity() { + this.WriteAllObjectRecord(); + const { pts: pathPts, buls } = this.MatrixAlignTo2(new Matrix4); + this.OCSNoClone.identity(); + for (let i = 0; i < this.LineData.length; i++) { + this.LineData[i].pt.copy(pathPts[i]); + this.LineData[i].bul = buls[i]; + } + } + Join(cu, allowGap = false, tolerance = 1e-4) { + this.WriteAllObjectRecord(); + if (this._ClosedMark) + return Status.False; + let [sp, ep, cuSp, cuEp] = [this.StartPoint, this.EndPoint, cu.StartPoint, cu.EndPoint]; + let ocsInv = this.OCSInv; + let [cuSp2, cuEp2] = [cuSp, cuEp].map(p => AsVector2(p.clone().applyMatrix4(ocsInv))); + if (this._LineData.length === 0) { + if (cu instanceof Line) { + this._LineData.push({ pt: cuSp2, bul: 0 }); + this._LineData.push({ pt: cuEp2, bul: 0 }); + } + else if (cu instanceof Arc) { + let x = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 0); + let y = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 1); + let cuZ = x.cross(y); + let dir = equalv3(this.Normal, cuZ, 1e-4) ? 1 : -1; + let bul = cu.Bul * dir; + this._LineData.push({ pt: cuSp2, bul: bul }); + this._LineData.push({ pt: cuEp2, bul: 0 }); + } + else if (cu instanceof Polyline_1) { + let f = new CADFiler(); + cu.WriteFile(f); + this.ReadFile(f); + } + else + return Status.False; + } + else { + let LinkType; + (function (LinkType) { + LinkType[LinkType["None"] = 0] = "None"; + LinkType[LinkType["SpSp"] = 1] = "SpSp"; + LinkType[LinkType["SpEp"] = 2] = "SpEp"; + LinkType[LinkType["EpSp"] = 3] = "EpSp"; + LinkType[LinkType["EpEp"] = 4] = "EpEp"; + })(LinkType || (LinkType = {})); + let spspDisSq = cuSp.distanceToSquared(sp); + let spepDisSq = cuSp.distanceToSquared(ep); + let epspDisSq = cuEp.distanceToSquared(sp); + let epepDisSq = cuEp.distanceToSquared(ep); + let minDis = tolerance * tolerance; + let linkType = LinkType.None; + if (epspDisSq < minDis) { + linkType = LinkType.EpSp; + minDis = epspDisSq; + } + if (epepDisSq < minDis) { + linkType = LinkType.EpEp; + minDis = epepDisSq; + } + if (spspDisSq < minDis) { + linkType = LinkType.SpSp; + minDis = spspDisSq; + } + if (spepDisSq < minDis) { + linkType = LinkType.SpEp; + minDis = spepDisSq; + } + if (linkType === LinkType.None) + return Status.False; + if (cu instanceof Line) { + if (linkType === LinkType.SpSp) { + this._LineData.unshift({ pt: cuEp2, bul: 0 }); + } + else if (linkType === LinkType.SpEp) { + this._LineData.push({ pt: cuEp2, bul: 0 }); + } + else if (linkType === LinkType.EpSp) { + this._LineData.unshift({ pt: cuSp2, bul: 0 }); + } + else if (linkType === LinkType.EpEp) { + this._LineData.push({ pt: cuSp2, bul: 0 }); + } + } + else if (cu instanceof Arc) { + let x = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 0); + let y = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 1); + let cuZ = x.cross(y); + let dir = equalv3(this.Normal, cuZ, 1e-4) ? 1 : -1; + let bul = cu.Bul * dir; + if (linkType === LinkType.SpSp) { + this._LineData.unshift({ pt: cuEp2, bul: -bul }); + } + else if (linkType === LinkType.SpEp) { + arrayLast(this._LineData).bul = bul; + this._LineData.push({ pt: cuEp2, bul: 0 }); + } + else if (linkType === LinkType.EpSp) { + this._LineData.unshift({ pt: cuSp2, bul: bul }); + } + else if (linkType === LinkType.EpEp) { + arrayLast(this._LineData).bul = -bul; + this._LineData.push({ pt: cuSp2, bul: 0 }); + } + } + else if (cu instanceof Polyline_1) { + if (cu.CloseMark) + return Status.False; + let { pts, buls } = this.PtsBuls; + if (linkType === LinkType.SpSp) { + cu.Reverse(); + let cuPtsBul = cu.MatrixAlignTo2(this.OCS); + cuPtsBul.pts.pop(); + cuPtsBul.buls.pop(); + pts = cuPtsBul.pts.concat(pts); + buls = cuPtsBul.buls.concat(buls); + } + else if (linkType === LinkType.SpEp) { + pts.pop(); + buls.pop(); + let cuPtsBul = cu.MatrixAlignTo2(this.OCS); + pts = pts.concat(cuPtsBul.pts); + buls = buls.concat(cuPtsBul.buls); + } + else if (linkType === LinkType.EpSp) { + let cuPtsBul = cu.MatrixAlignTo2(this.OCS); + cuPtsBul.pts.pop(); + cuPtsBul.buls.pop(); + pts = cuPtsBul.pts.concat(pts); + buls = cuPtsBul.buls.concat(buls); + } + else if (linkType === LinkType.EpEp) { + pts.pop(); + buls.pop(); + cu.Reverse(); + let cuPtsBul = cu.MatrixAlignTo2(this.OCS); + pts = pts.concat(cuPtsBul.pts); + buls = buls.concat(cuPtsBul.buls); + } + this._LineData.length = 0; + for (let i = 0; i < pts.length; i++) { + this._LineData.push({ pt: pts[i], bul: buls[i] }); + } + } + else + return Status.False; + } + //在上面的其他分支已经返回了假 所以这里直接返回真. + this.Update(); + return Status.True; + } + /** + * 将曲线数组组合成多段线 + * @param curves 已经使用CurveLinked的数组,总是首尾相连 + * @returns + */ + static Combine(curves, tolerance = 1e-5) { + if (!curves || curves.length === 0) + return; + let pl = new Polyline_1; + pl.OCS = ComputerCurvesNormalOCS(curves); + for (let cu of curves) { + pl.Join(cu, false, 0.1); + // if (status === Status.False) + // console.log(); + } + let d = pl.LineData; + if (d.length > 1) { + let ld = arrayLast(d).pt; + if (equalv2(d[0].pt, ld, tolerance)) + ld.copy(d[0].pt); + } + return pl; + } + /**首尾相连的曲线直接连接 */ + static FastCombine(curves, tolerance = 1e-5, computOCS = true) { + if (!curves || curves.length === 0) + return; + let pl = new Polyline_1; + if (computOCS) + pl.OCS = ComputerCurvesNormalOCS(curves); + let ocsInv = pl.OCSInv; + let normal = pl.Normal; + let lineData = []; + for (let i = 0; i < curves.length; i++) { + let cu = curves[i]; + let bul = 0; + if (cu instanceof Arc) { + let dir = equalv3(normal, cu.Normal.negate(), 1e-3) ? -1 : 1; + bul = cu.Bul * dir; + } + lineData.push({ + pt: AsVector2(cu.StartPoint.applyMatrix4(ocsInv)), + bul + }); + if (i === curves.length - 1) { + lineData.push({ + pt: AsVector2(cu.EndPoint.applyMatrix4(ocsInv)), + bul: 0 + }); + } + } + if (lineData.length > 1) { + let ld = arrayLast(lineData).pt; + if (equalv2(lineData[0].pt, ld, tolerance)) + ld.copy(lineData[0].pt); + } + pl.LineData = lineData; + return pl; + } + PtOnCurve(pt, fuzz = 1e-6) { + for (let i = 0; i < this.EndParam; i++) { + let c = this.GetCurveAtIndex(i); + if (c.PtOnCurve(pt, fuzz)) + return true; + } + return false; + } + //点在曲线上,已经确定点在曲线的延伸线上 + PtOnCurve3(p, fuzz = 1e-6) { + for (let i = 0; i < this.EndParam; i++) { + let c = this.GetCurveAtIndex(i); + if (c.PtOnCurve3(p, fuzz)) + return true; + } + return false; + } + PtInCurve(pt) { + return this.IsClose && IsPointInPolyLine(this, pt); + } + GetClosestPointTo(pt, extend) { + return this.GetClosestPointTo2(pt, extend ? ExtendType.Both : ExtendType.None); + } + GetClosestPointTo2(pt, extType) { + //当曲线空时,返回空 + if (this.EndParam < 1) + return undefined; + //当有闭合标志时,曲线在任何位置都不延伸 + if (this._ClosedMark) + extType = ExtendType.None; + //最近点 + let ptC = undefined; + //最近点的距离 + let ptCDist = Infinity; + for (let i = 0; i < this.EndParam; i++) { + let cu = this.GetCurveAtIndex(i); + //前延伸 + if (i === 0 && (extType & ExtendType.Front) > 0) { + let ptCFirst = cu.GetClosestPointTo(pt, true); + if (cu.GetParamAtPoint(ptCFirst) <= 1) { + ptC = ptCFirst; + ptCDist = ptC.distanceToSquared(pt); + } + if (extType === ExtendType.Front) + continue; + } + let ptCloseNew; //新的最近点 + //后延伸 (此处与前延伸分开if 如果线只有一段,那么前后延伸都能同时触发) + if (i === (this.EndParam - 1) && (extType & ExtendType.Back) > 0) { + let ptCLast = cu.GetClosestPointTo(pt, true); + if (cu.GetParamAtPoint(ptCLast) >= 0) + ptCloseNew = ptCLast; + else //如果延伸之后并不在曲线或者曲线的后延伸上 + ptCloseNew = cu.EndPoint; + } + else { + ptCloseNew = cu.GetClosestPointTo(pt, false); + } + let newDist = ptCloseNew.distanceToSquared(pt); + if (newDist < ptCDist) { + ptC = ptCloseNew; + ptCDist = newDist; + } + } + return ptC; + } + //偏移 + GetOffsetCurves(offsetDist) { + if (equaln$1(offsetDist, 0)) + return []; + let polyOffestUtil = new OffsetPolyline(this, offsetDist); + let curves = polyOffestUtil.Do(); + for (let cu of curves) + cu.ColorIndex = this.ColorIndex; + return curves; + } + GetFeedingToolPath(offsetDist, offsetDistSq = (offsetDist ** 2) * 2.1, joinType = PolylineJoinType.Round) { + if (equaln$1(offsetDist, 0)) + return []; + let polyOffestUtil = new OffsetPolyline(this, offsetDist, true, offsetDistSq, joinType); + return polyOffestUtil.Do(); + } + /** + * 分解 + */ + Explode() { + let exportCus = []; + for (let i = 0; i < this.EndParam; i++) { + exportCus.push(this.GetCurveAtIndex(i)); + } + return exportCus; + } + /** + * 根据参数得到参数所在的子曲线. + * + * 当曲线存在闭合标志时,参数必须在曲线内部,否则返回空. + * + * @param {number} param 参数值 + * @returns {Curve} 曲线(直线或者圆弧) 或空 + * @memberof Polyline + */ + GetCurveAtParam(param) { + if (this._ClosedMark && !this.ParamOnCurve(param)) + return undefined; + if (param < 0) + return this.GetCurveAtIndex(0); + else if (param >= this.EndParam) + return this.GetCurveAtIndex(this.EndParam - 1); + else + return this.GetCurveAtIndex(Math.floor(param)); + } + /** + * 得到参数在子曲线中的表示 + * + * @param {number} param 参数在多段线中表示 + * @returns {number} 参数在子曲线中表示 + * @memberof Polyline + */ + GetCurveParamAtParam(param) { + if (param >= this.EndParam) + param -= this.EndParam - 1; + else if (param > 0) + param -= Math.floor(param); + return param; + } + /** + * 获得曲线,来自索引位置. + * @param {number} i 索引位置 整数 + */ + GetCurveAtIndex(i) { + if (i >= this._LineData.length) + return undefined; + if (!this.ParamOnCurve(i)) + return undefined; + if (!this._ClosedMark && i === this._LineData.length - 1) + return undefined; + let d1 = this._LineData[i]; + let d2 = this._LineData[FixIndex$1(i + 1, this._LineData)]; + let curve; + if (equaln$1(d1.bul, 0, BUL_IS_LINE_FUZZ)) + curve = new Line(AsVector3(d1.pt), AsVector3(d2.pt)).ApplyMatrix(this.OCSNoClone); + else + curve = new Arc().ParseFromBul(d1.pt, d2.pt, d1.bul).ApplyMatrix(this.OCSNoClone); + curve.ColorIndex = this._Color; + return curve; + } + IntersectWith2(curve, intType, tolerance = 1e-5) { + return IntersectPolylineAndCurve(this, curve, intType, tolerance); + } + //计算自交点. + IntersectSelf() { + let cus = this.Explode(); + if (cus.length === 0) + return []; + let intParams = []; + for (let i = 0; i < cus.length; i++) { + let c = cus[i]; + for (let j = i + 2; j < cus.length; j++) { + let c2 = cus[j]; + let pts = c.IntersectWith(c2, IntersectOption.ExtendNone); + for (let p of pts) { + intParams.push(i + c.GetParamAtPoint(p)); + intParams.push(j + c2.GetParamAtPoint(p)); + } + } + } + return intParams; + } + IsIntersectSelf() { + let cus = this.Explode().filter(c => !equaln$1(c.Length, 0, 1e-3)); + for (let i = 0; i < cus.length - 1; i++) { + let c1 = cus[i]; + let c1IsLine = c1 instanceof Line; + let d1 = c1.GetFirstDeriv(c1IsLine ? 0 : 1).normalize(); + for (let j = i + 1; j < cus.length; j++) { + let c2 = cus[j]; + let c2IsLine = c2 instanceof Line; + let d2 = c2.GetFirstDeriv(0).normalize(); + if (j === i + 1) { + if (c1IsLine === c2IsLine) { + if (c1IsLine) { + if (equalv3(d1, d2.negate())) + return true; + continue; + } + else { + if (equalv3(d1, d2.negate()) && equalv3(c1.Center, c2.Center)) + return true; + } + } + } + let intPts = c1.IntersectWith2(c2, 0); + let intPtsLen = intPts.length; + if (intPtsLen > 0) { + if (intPtsLen === 2 && equalv3(intPts[0].pt, intPts[1].pt, 1e-3)) { + intPtsLen = 1; + intPts.pop(); + } + if (intPtsLen === 2 && j === i + 1 && cus.length === 2) { + if (intPts.every(r => equaln$1(r.thisParam, 0, 1e-3) || equaln$1(r.thisParam, 1, 1e-3))) + continue; + } + if (j === i + 1 && intPtsLen === 1) + continue; + if (this.IsClose && i === 0 && j === cus.length - 1 && intPtsLen === 1) + continue; + return true; + } + } + } + return false; + } + get BoundingBox() { + let box = new Box3Ext(); + for (let i = 0; i < this.EndParam; i++) { + let cu = this.GetCurveAtIndex(i); + box.union(cu.BoundingBox); + } + return box; + } + SetPtsBuls(pts, buls) { + this.WriteAllObjectRecord(); + this._LineData.length = 0; + for (let i = 0; i < pts.length; i++) { + let pt = pts[i]; + let bul = buls[i]; + this._LineData.push({ pt, bul }); + } + this.Update(); + return this; + } + /** + * 得到曲线有用的点表和凸度(闭合曲线首尾重复) + */ + get PtsBuls() { + let pts = []; + let buls = []; + if (this._LineData.length === 0) + return { pts, buls }; + for (let data of this._LineData) { + pts.push(data.pt.clone()); + buls.push(data.bul); + } + //闭合且起点不等于终点 + if (this._ClosedMark && + !this._LineData[0].pt.equals(arrayLast(this._LineData).pt)) { + pts.push(pts[0].clone()); + buls.push(buls[0]); + } + return { pts, buls }; + } + get IsBulge() { + if (!this.IsClose) + return false; + let refDir = Math.sign(this.Area2); + let c1; + let c2; + for (let i = 0; i < this.EndParam; i++) { + c1 = this.GetCurveAtIndex(i); + c2 = this.GetCurveAtIndex(FixIndex$1(i + 1, this.EndParam)); + let len1 = c1.Length; + let len2 = c2.Length; + let minLen = Math.min(len1, len2) * 0.2; + let p = c1.EndPoint; + let p1; + let p2; + if (c1 instanceof Arc) { + let dir = c1.IsClockWise ? -1 : 1; + if (dir !== refDir) + return false; + p1 = c1.GetPointAtDistance(len1 - minLen); + } + else + p1 = c1.StartPoint; + if (c2 instanceof Arc) { + let dir = c2.IsClockWise ? -1 : 1; + if (dir !== refDir) + return false; + p2 = c2.GetPointAtDistance(minLen); + } + else + p2 = c2.EndPoint; + let vec1 = p.clone().sub(p1); + let vec2 = p2.sub(p); + let dir = Math.sign(vec1.cross(vec2).z); + if (dir !== 0 && dir !== refDir) + return false; + } + return true; + } + get Shape() { + let { pts, buls } = this.PtsBuls; + return CreatePolylinePath(pts, buls, this._DisplayAccuracy); + } + get SVG() { + let sp = this.StartPoint; + let str = `M${sp.x} ${sp.y} `; + for (let i = 1; i <= this.EndParam; i++) { + let bul = this.GetBulgeAt(i - 1); + let p = this.GetPointAtParam(i); + if (bul === 0) + str += `L${p.x} ${p.y} `; + else { + let arc = this.GetCurveAtIndex(i - 1); + str += `A ${arc.Radius} ${arc.Radius} 0 ${Math.abs(bul) >= 1 ? 1 : 0} ${arc.IsClockWise ? 0 : 1} ${p.x} ${p.y}`; + } + } + return str; + } + GetDragPointCount(drag) { + if (drag === DragPointType.Grip) { + let count = this.EndParam * 2 + 1; + if (this.CloseMark) + count--; + return count; + } + else { + return this._LineData.length; + } + } + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + switch (snapMode) { + case ObjectSnapMode.End: + return this.GetStretchPoints(); + case ObjectSnapMode.Mid: + let midPts = []; + let enParam = this.EndParam; + for (let i = 0.5; i < enParam; i++) { + let p = this.GetPointAtParam(i); + p && midPts.push(p); + } + return midPts; + case ObjectSnapMode.Nea: + { + let nea = []; + for (let cu of this.Explode()) { + let neaa = cu.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform); + if (neaa) + nea.push(...neaa); + } + return nea; + } + case ObjectSnapMode.Ext: + { + let cp = this.GetClosestPointTo(pickPoint, true); + if (cp) + return [cp]; + break; + } + case ObjectSnapMode.Cen: + let cenPts = []; + for (let i = 0; i < this._LineData.length; i++) { + let data = this._LineData[i]; + if (!equaln$1(data.bul, 0)) { + let cu = this.GetCurveAtIndex(i); + if (cu) //end bul !== 0 但是并没有圆弧 + cenPts.push(cu.Center); + } + } + return cenPts; + case ObjectSnapMode.Per: + if (lastPoint) { + let cp = this.GetClosestPointTo(pickPoint, false); + if (!cp) + return []; + let cparam = this.GetParamAtPoint(cp); + let cu = this.GetCurveAtParam(cparam); + if (cu) { + let closestPt = cu.GetClosestPointTo(lastPoint, true); + if (closestPt && this.PtOnCurve(closestPt)) + return [closestPt]; + } + } + case ObjectSnapMode.Tan: + if (lastPoint) { + let clostPt = this.GetClosestPointTo(pickPoint, false); + if (!clostPt) + return []; + let par = this.GetParamAtPoint(clostPt); + let cu = this.GetCurveAtParam(par); + if (cu instanceof Arc) + return cu.GetObjectSnapPoints(snapMode, pickPoint, lastPoint); + return []; + } + } + return []; + } + GetGripPoints() { + let ptList = []; + if (this._LineData.length < 2) + return ptList; + let enParam = this.EndParam; + if (this.CloseMark) + enParam -= 0.5; + for (let i = 0; i < enParam + 0.5; i += 0.5) { + let p = this.GetPointAtParam(i); + ptList.push(p); + } + return ptList; + } + MoveGripPoints(indexList, moveVec) { + this.WriteAllObjectRecord(); + let moveVLoc = AsVector2(moveVec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv))); + let calcIndexList = indexList; + if (indexList.length > 1) { + let centerIndexes = indexList.filter(i => i % 2 === 0); + if (centerIndexes.length > 0) + calcIndexList = centerIndexes; + } + for (let index of calcIndexList) { + if (index % 2 === 0) { + let cuIndex = index / 2; + let ptCount = this._LineData.length; + let frontIndex = cuIndex - 1; + if (this._ClosedMark) + frontIndex = FixIndex$1(frontIndex, ptCount); + if (frontIndex >= 0 && this.GetBulgeAt(frontIndex)) { + let arc = this.GetCurveAtIndex(frontIndex); + arc.MoveGripPoints([2], moveVec); + this._LineData[frontIndex].bul = arc.Bul; + } + if ((cuIndex !== ptCount - 1) && this.GetBulgeAt(cuIndex)) { + let arc = this.GetCurveAtIndex(cuIndex); + arc.MoveGripPoints([0], moveVec); + this._LineData[cuIndex].bul = arc.Bul; + } + this._LineData[cuIndex].pt.add(moveVLoc); + } + else { + let ptIndex = (index - 1) / 2; + let nextIndex = (FixIndex$1(ptIndex + 1, this._LineData)); + let d = this._LineData[ptIndex]; + if (d.bul === 0) { + this._LineData[ptIndex].pt.add(moveVLoc); + this._LineData[nextIndex].pt.add(moveVLoc); + } + else { + let arc = this.GetCurveAtIndex(ptIndex); + arc.MoveGripPoints([1], moveVec); + this._LineData[ptIndex].bul = arc.Bul; + } + } + } + this.Update(); + } + GetStretchPoints() { + let iswcs = MatrixIsIdentityCS(this._Matrix); + let pts = []; + for (let data of this._LineData) { + let p = AsVector3(data.pt); + if (!iswcs) + p.applyMatrix4(this._Matrix); + pts.push(p); + } + return pts; + } + /** + * 范围拉伸(stretch),对夹点进行拉伸. + * 如果对圆弧的一侧进行拉伸,那么修改bul + * + * @param {Array} indexList + * @param {Vector3} vec + */ + MoveStretchPoints(indexList, vec) { + this.WriteAllObjectRecord(); + //本地坐标系移动向量 + let moveVLoc = vec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv)); + let ptCount = this._LineData.length; + for (let index of indexList) { + if (index >= ptCount) + throw "在拉伸多段线顶点时,尝试拉伸不存在的顶点!(通常是因为模块中的板轮廓被破坏,导致的顶点丢失!)"; + let frontIndex = index - 1; + let nextIndex = index + 1; + if (this._ClosedMark) { + frontIndex = FixIndex$1(frontIndex, ptCount); + nextIndex = FixIndex$1(nextIndex, ptCount); + } + /** + * 根据新的拉伸点修改凸度. + * + * @param {number} nextIndex 隔壁点索引 + * @param {number} bulIndex 需要修改凸度位置的索引 + * @returns + */ + const ChangeBul = (nextIndex, bulIndex) => { + //需要修改的点的数据 + let d = this._LineData[bulIndex]; + if (d === undefined || d.bul === 0) + return; + //如果隔壁点不在拉伸列表中 + if (indexList.indexOf(nextIndex) === -1) { + let needChangeP = this.GetPointAtParam(index); + let notChangeP = this.GetPointAtParam(nextIndex); + //原先的弦长的一半 + let oldChordLengthHalf = needChangeP.distanceTo(notChangeP) * 0.5; + //弓高 + let arcHeight = oldChordLengthHalf * d.bul; + needChangeP.add(vec); + let newChordLengthHalf = needChangeP.distanceTo(notChangeP) * 0.5; + d.bul = arcHeight / newChordLengthHalf; + } + }; + ChangeBul(frontIndex, frontIndex); + ChangeBul(nextIndex, index); + //修改顶点 + this._LineData[index].pt.add(AsVector2(moveVLoc)); + } + this.Update(); + } + _ReadFile(file) { + super._ReadFile(file); + let ver = file.Read(); + this._LineData.length = 0; + let count = file.Read(); + for (let i = 0; i < count; i++) { + let v = new Vector2$1().fromArray(file.Read()); + let bul = file.Read(); + this._LineData.push({ pt: v, bul: bul }); + } + if (ver > 1) + this._ClosedMark = file.Read(); + // 某些时候会画出这样的多段线 尚未知道是为什么画出的 + // if (this._LineData.length === 0) + // this.Erase(); + if (ver > 2) + this.ReadRoomAndCabinetName(file); + } + //对象将自身数据写入到文件. + WriteFile(file) { + super.WriteFile(file); + file.Write(3); + file.Write(this._LineData.length); + for (let l of this._LineData) { + file.Write(l.pt.toArray()); + file.Write(l.bul); + } + file.Write(this._ClosedMark); + this.WriteRoomAndCabinetName(file); + } +}; +Polyline = Polyline_1 = __decorate([ + Factory +], Polyline); +const TempPolyline = new Polyline(); + +/** + * 线性切割多线段 + * @param {Polyline} meatPl 被切割的曲线 + * @param {Polyline[]} knifePls 刀曲线 + * @param {boolean} [isSweep = false] 是否为圆弧板(被切割的曲线是否为圆弧板的轮廓) + * @return {Polyline[]} 切割后的多线段 + */ +function SplitPolyline(meatPl, knifePls, isSweep = false) { + let allSplitPls = []; + let allIntersePts = []; + for (let pl of knifePls) { + let ipts = pl.IntersectWith(meatPl, IntersectOption.ExtendThis); + allIntersePts.push(...ipts); + if (pl.LineData.length === 2 && ipts.length > 1) //直线切割,且有2个已经的顶点 + { + if (ipts.length === 2) { + pl.StartPoint = ipts[0]; + pl.EndPoint = ipts[1]; + } + else { + ipts.sort(ComparePointFnGenerate("xy")); + pl.StartPoint = ipts[0]; + pl.EndPoint = arrayLast(ipts); + } + } + else { + let iptsNotExt = ipts.filter(p => pl.PtOnCurve(p)); + if (iptsNotExt.length < 2 && ipts.length === 2) { + let params = ipts.map(p => pl.GetParamAtPoint(p)); + pl.Extend(params[0]); + pl.Extend(params[1]); + } + } + let splitPls = pl.GetSplitCurvesByPts(ipts); + allSplitPls.push(...splitPls); + } + let brSplitCus = meatPl.GetSplitCurvesByPts(allIntersePts); + allSplitPls = allSplitPls.filter(pl => { + return meatPl.PtInCurve(pl.GetPointAtParam(pl.EndParam / 2)); //切割线必须在板内才有用 + }); + let regionParse = new RegionParse(brSplitCus.concat(allSplitPls)); + let cus = regionParse.RegionsInternal.map(r => { + let pl = new Polyline(); + for (let route of r) + pl.Join(route.curve); + if (pl.Area2 < 0) + pl.Reverse(); + // 针对圆弧板特殊处理(去除多余的控制点) + if (isSweep) { + pl = pl.GetOffsetCurves(10)[0]; + pl = pl.GetOffsetCurves(-10)[0]; + } + return pl; + }); + return cus; +} + /** * 一个简单的计数器实现,本质是使用一个Map来保存元素的个数 * @@ -10253,6 +10968,22 @@ function equalCurve(cu1, cu2, tolerance = 1e-4) { return equalArray(buls1, buls2, equaln$1) && equalArray(pts1, pts2, (p1, p2) => equalv3(AsVector3(p1).applyMatrix4(cu1.OCS), AsVector3(p2).applyMatrix4(cu2.OCS), tolerance)); } + else if ((cu1 instanceof Polyline && cu2 instanceof Circle) + || (cu1 instanceof Circle && cu2 instanceof Polyline)) { + if (cu1 instanceof Circle) + [cu1, cu2] = [cu2, cu1]; + if (cu1.EndParam < 2) + return false; + let curves = cu1.Explode(); + if (curves.length < 2 || !curves.every(c => c instanceof Arc)) + return false; + let c1 = curves[0]; + if (!(equalv3(c1.Center, cu2.Center) && equaln$1(c1.Radius, cu2.Radius, 1e-6))) + return false; + for (let i = 1; i < curves.length - 1; i++) + c1.Join(curves[i]); + return c1.Join(curves[curves.length - 1]) === Status.ConverToCircle; + } else if (cu1 instanceof Circle && cu2 instanceof Circle) { return equalv3(cu1.Center, cu2.Center) && equaln$1(cu1.Radius, cu2.Radius, 1e-6); } @@ -10311,7 +11042,7 @@ function GetTanPtsOnArcOrCircle(cu, lastPoint) { new Vector3(cu.Radius * (cu.Radius * v.x + v.y * deltaDist) * ratio, cu.Radius * (cu.Radius * v.y - v.x * deltaDist) * ratio), ]; for (let p of pts) - p.applyMatrix4(cu.OCS); + p.applyMatrix4(cu.OCSNoClone); return pts; } } @@ -10607,32 +11338,209 @@ class Singleton { } } -function ScaleUV(geo, scale = 1e-3) { - for (let uvsg of geo.faceVertexUvs) { - for (let uvs of uvsg) { - for (let uv of uvs) { - uv.multiplyScalar(scale); +var BoardType; +(function (BoardType) { + BoardType[BoardType["Layer"] = 0] = "Layer"; + BoardType[BoardType["Vertical"] = 1] = "Vertical"; + BoardType[BoardType["Behind"] = 2] = "Behind"; //背板 +})(BoardType || (BoardType = {})); +//纹路类型 +var LinesType; +(function (LinesType) { + /** 正纹 */ + LinesType[LinesType["Positive"] = 0] = "Positive"; + /** 反纹 */ + LinesType[LinesType["Reverse"] = 1] = "Reverse"; + /** 可翻转 */ + LinesType[LinesType["CanReversal"] = 2] = "CanReversal"; +})(LinesType || (LinesType = {})); +//映射对应的名称 +({ + [LinesType.Positive]: "正纹", + [LinesType.Reverse]: "反纹", + [LinesType.CanReversal]: "可翻转" +}); +// 排版面 +var ComposingType; +(function (ComposingType) { + ComposingType[ComposingType["Positive"] = 0] = "Positive"; + ComposingType[ComposingType["Reverse"] = 1] = "Reverse"; + ComposingType[ComposingType["Arbitrary"] = 2] = "Arbitrary"; //任意 +})(ComposingType || (ComposingType = {})); +var BoardOpenDir; +(function (BoardOpenDir) { + BoardOpenDir[BoardOpenDir["Left"] = 1] = "Left"; + BoardOpenDir[BoardOpenDir["Right"] = 2] = "Right"; + BoardOpenDir[BoardOpenDir["Up"] = 3] = "Up"; + BoardOpenDir[BoardOpenDir["Down"] = 4] = "Down"; + BoardOpenDir[BoardOpenDir["NoOpen"] = 5] = "NoOpen"; + BoardOpenDir[BoardOpenDir["None"] = 0] = "None"; +})(BoardOpenDir || (BoardOpenDir = {})); +var BrRelativePos; +(function (BrRelativePos) { + BrRelativePos["Front"] = "front"; + BrRelativePos["Back"] = "back"; + BrRelativePos["Top"] = "top"; + BrRelativePos["Bottom"] = "bottom"; + BrRelativePos["Left"] = "left"; + BrRelativePos["Right"] = "right"; + BrRelativePos["Div"] = "div"; +})(BrRelativePos || (BrRelativePos = {})); +// 追加备注 +var AddRemarkType; +(function (AddRemarkType) { + AddRemarkType[AddRemarkType["Cover"] = 1] = "Cover"; + AddRemarkType[AddRemarkType["NoCover"] = 0] = "NoCover"; +})(AddRemarkType || (AddRemarkType = {})); + +const DIRS = [XAxis, YAxis, ZAxis, XAxisN, YAxisN, ZAxisN]; +function GetFaceDir(direction) { + let absx = Math.abs(direction.x); + let absy = Math.abs(direction.y); + let absz = Math.abs(direction.z); + let face = -1.0; + if (absx > absz) { + if (absx > absy) + face = direction.x > 0 ? 0 : 3; + else + face = direction.y > 0 ? 1 : 4; + } + else { + if (absz > absy) + face = direction.z > 0 ? 2 : 5; + else + face = direction.y > 0 ? 1 : 4; + } + return DIRS[face]; +} +class GenUVForWorld { + constructor() { + this.InvMtxMap = new Map(); + this._Z = new Vector3; + this._X = new Vector3; + this._Y = new Vector3; + this._Box = new Box3; + this._Box2 = new Box3; + } + GetMtxInv(normalX, normalY, normalZ) { + this._Z.set(normalX, normalY, normalZ); + let n = GetFaceDir(this._Z); + let mtx = this.InvMtxMap.get(n); + if (mtx) + return mtx; + this._Z.copy(n); + Orbit.ComputUpDirection(this._Z, this._Y, this._X); + mtx = new Matrix4().makeBasis(this._X, this._Y, this._Z); + mtx.getInverse(mtx); + this.InvMtxMap.set(n, mtx); + return mtx; + } + GenUV(mesh) { + if (Array.isArray(mesh.material)) { + let geo = mesh.geometry; + if (!geo.boundingBox) + geo.computeBoundingBox(); + let normals = geo.getAttribute("normal"); + let pos = geo.getAttribute("position"); + let uvs = geo.getAttribute("uv"); + for (let i = 0; i < mesh.material.length; i++) { + let mtl = mesh.material[i]; + if (mtl[USE_WORLD_UV]) { + this._Box.makeEmpty(); + let g = mesh.geometry.groups[i]; + for (let y = 0; y < g.count; y++) { + let index = (y + g.start) * 3; + this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]); + this._Box.expandByPoint(this._X); + } + for (let y = 0; y < g.count; y++) { + let index = (y + g.start) * 3; + let mtx = this.GetMtxInv(normals.array[index], normals.array[index + 1], normals.array[index + 2]); + this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]); + this._X.applyMatrix4(mtx); + this._Box2.copy(this._Box).applyMatrix4(mtx); + //@ts-ignore + 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; + //@ts-ignore + 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; + } + uvs.needsUpdate = true; + } } } + else { + let mtl = mesh.material; + if (mtl[USE_WORLD_UV]) + this.GenGeoUV(mesh.geometry, mtl, 1e-2); + } } -} -function ScaleUV2(geo, ocs, xScale = 1e-3, yScale = 1e-3, isInvert = false) { - for (let uvsg of geo.faceVertexUvs) { - for (let uvs of uvsg) { - for (let uv of uvs) { - let p = new Vector3(uv.x, uv.y).applyMatrix4(ocs); - uv.x = p.x; - uv.y = p.y; - if (isInvert) { - uv.x /= yScale; - uv.y /= xScale; - } - else { - uv.x /= xScale; - uv.y /= yScale; - } - } + GenGeoUV(bGeo, mtl, scale = 1e-3) { + if (!bGeo.boundingBox) + bGeo.computeBoundingBox(); + let normals = bGeo.getAttribute("normal"); + let pos = bGeo.getAttribute("position"); + let uvs = bGeo.getAttribute("uv"); + if (!pos || !uvs || pos.count === 0) + return; + for (let y = 0; y < pos.count; y++) { + let index = y * 3; + let mtx = this.GetMtxInv(normals.array[index], normals.array[index + 1], normals.array[index + 2]); + this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]); + this._X.applyMatrix4(mtx); + this._Box.copy(bGeo.boundingBox); + this._Box.applyMatrix4(mtx); + //@ts-ignore + 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; + //@ts-ignore + 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; } + uvs.needsUpdate = true; + } +} + +//板件的UV计算 +class GenLocalUv { + constructor() { + this.InvMtxMap = new Map(); + this._Z = new Vector3; + this._X = new Vector3; + this._Y = new Vector3; + } + GetMtxInv({ normalX, normalY, normalZ }, IsReverse) { + this._Z.set(normalX, normalY, normalZ); + let n = GetFaceDir(this._Z); + let mtx = this.InvMtxMap.get(n); + if (mtx) + return mtx; + this._Z.copy(n); + if (n.z != 0 && !IsReverse) //正面和背面不旋转 + Orbit.ComputUpDirection(this._Z, this._Y, this._X); + else + Orbit.ComputUpDirection(this._Z, this._X, this._Y); + mtx = new Matrix4().makeBasis(this._X, this._Y, this._Z); + mtx.getInverse(mtx); + this.InvMtxMap.set(n, mtx); + return mtx; + } + //计算uv值 + CalculateUv(geo, IsReverse, scale = 1e-3) { + if (!geo.boundingBox) + geo.computeBoundingBox(); + let normals = geo.getAttribute("normal"); + let pos = geo.getAttribute("position"); + const uvs = []; + for (let y = 0; y < pos.count; y++) { + let index = y * 3; + const normalX = normals.array[index]; + const normalY = normals.array[index + 1]; + const normalZ = normals.array[index + 2]; + let mtx = this.GetMtxInv({ normalX, normalY, normalZ }, IsReverse); + this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]); + this._X.applyMatrix4(mtx); + uvs.push(this._X.x * scale); + uvs.push(this._X.y * scale); + } + geo.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); } } @@ -10640,6 +11548,14 @@ class Shape { constructor(_Outline = new Contour, _Holes = []) { this._Outline = _Outline; this._Holes = _Holes; + this._DisplayAccuracy = 0; + } + get DisplayAccuracy() { + return this._DisplayAccuracy; + } + set DisplayAccuracy(v) { + if (!equaln$1(v, this._DisplayAccuracy)) + this._DisplayAccuracy = v; } get Outline() { return this._Outline; @@ -10675,6 +11591,7 @@ class Shape { else shape.holes.push(h.Shape); } + shape.DisplayAccuracy = this._DisplayAccuracy; return shape; } get Position() { @@ -10829,9 +11746,8 @@ class Shape { let tmpContours = cu.SubstactBoolOperation(outline).sort((a, b) => b.Area - a.Area); //面积从大到校 let isAllContainered = tmpContours.length > 1 && tmpContours.slice(1).every((cu, index) => tmpContours[0].ContainerCurve(cu.Curve, true)); //洞是否被最大的洞包含,是,则把被包含的洞都提取出来加入形状数组 - if (isAllContainered) { + if (isAllContainered) shapes.push(...this.targetOutlinesSubHoles(tmpContours.slice(1).map(c => new Shape(c)), tarHoles.map(c => new Shape(c)))); - } else unionHoles.push(...tmpContours); }); @@ -11055,664 +11971,1100 @@ class Shape { } } -class ShapeManager { - constructor(_ShapeList = []) { - this._ShapeList = _ShapeList; +/** Epsilon used during determination of near zero distances. + * @default + */ +const EPS = 5e-2; + +// ////////////////////////////// +// tolerance: The maximum difference for each parameter allowed to be considered a match +class FuzzyFactory { + constructor(numdimensions = 3, tolerance = EPS) { + this.lookuptable = {}; + this.multiplier = 1.0 / tolerance; } - get ShapeList() { - return this._ShapeList.slice(); - } - get ShapeCount() { - return this._ShapeList.length; - } - get ShapeArea() { - return this._ShapeList.map(s => s.Area).reduce((a1, a2) => a1 + a2, 0); - } - AppendShapeList(shapes) { - Array.isArray(shapes) ? this._ShapeList.push(...shapes) : this._ShapeList.push(shapes); - return this; - } - Clear() { - this._ShapeList.length = 0; - } - BoolOper(otherMg, booltype) { - switch (booltype) { - case BoolOpeartionType.Intersection: - return this.IntersectionBoolOperation(otherMg); - case BoolOpeartionType.Union: - return this.UnionBoolOperation(otherMg); - case BoolOpeartionType.Subtract: - return this.SubstactBoolOperation(otherMg); + // let obj = f.lookupOrCreate([el1, el2, el3], function(elements) {/* create the new object */}); + // Performs a fuzzy lookup of the object with the specified elements. + // If found, returns the existing object + // If not found, calls the supplied callback function which should create a new object with + // the specified properties. This object is inserted in the lookup database. + lookupOrCreate(els, object) { + let hash = ""; + let multiplier = this.multiplier; + for (let el of els) { + let valueQuantized = Math.round(el * multiplier); + hash += valueQuantized + "/"; } - } - //交集 如果成功返回一个面域 失败返回0个 - IntersectionBoolOperation(target) { - let shapes = []; - for (let srcShape of this._ShapeList) { - for (let tarShape of target._ShapeList) { - let tmpShapes = srcShape.IntersectionBoolOperation(tarShape); - shapes.push(...tmpShapes); + if (hash in this.lookuptable) + return this.lookuptable[hash]; + else { + let hashparts = els.map(el => { + let q0 = Math.floor(el * multiplier); + let q1 = q0 + 1; + return ["" + q0 + "/", "" + q1 + "/"]; + }); + let numelements = els.length; + let numhashes = 1 << numelements; + for (let hashmask = 0; hashmask < numhashes; ++hashmask) { + let hashmaskShifted = hashmask; + hash = ""; + hashparts.forEach(hashpart => { + hash += hashpart[hashmaskShifted & 1]; + hashmaskShifted >>= 1; + }); + this.lookuptable[hash] = object; } - } - this.Clear(); - this._ShapeList = shapes; - return this._ShapeList.length > 0; - } - //并集,如果有一个形状并集成功,就成功 - UnionBoolOperation(targetMg) { - let isSuccess = false; - let srcShapes = this._ShapeList; - let tarShapes = targetMg._ShapeList; - let alones = []; //孤立的形状 - const boxCache = new WeakMap(); - for (let src of srcShapes) { - let notUnions = []; //未被合并的形状列表 来自tarShapes - let srcBox = src.BoundingBox; - for (let tar of tarShapes) { - let tarBox = boxCache.get(tar); - if (!tarBox) { - tarBox = tar.BoundingBox; - boxCache.set(tar, tarBox); - } - if (!IntersectBox2(srcBox, tarBox)) { - notUnions.push(tar); - continue; - } - let unions = src.UnionBoolOperation(tar); - if (unions.length === 1) //并集成功 - { - isSuccess = true; - src = unions[0]; //src设置为 合并完的形状 - } - else //并集失败 - notUnions.push(tar); //设置为未计算 - } - //如果发现src和任意一个形状并集成功,那么 - if (notUnions.length !== tarShapes.length) { - notUnions.push(src); //加入src 进行下一轮 - tarShapes = notUnions; - } - else - alones.push(src); //它是孤独的一个形状 - } - this._ShapeList = alones.concat(tarShapes); - return isSuccess; - } - SubstactBoolOperation(target) { - let newShapes = []; - for (let s of this._ShapeList) { - let ss = s.SubstactBoolOperation(target.ShapeList); - newShapes.push(...ss); - } - this._ShapeList = newShapes; - return true; - } - /** - * 与region.ApplyMatrix不同的是,这个是直接操作内部对象. - * 通常用来计算布尔运算时需要真实的移动这个位置. - * 并且将不会刷新显示 - * - * @param {Matrix4} mat4 - * @memberof ShapeManager - */ - ApplyMatrix(mat4) { - for (let s of this._ShapeList) { - s.Outline.Curve.ApplyMatrix(mat4); - s.Holes.forEach(o => o.Curve.ApplyMatrix(mat4)); - } - } - ReadFile(file) { - file.Read(); //1 - let cout = file.Read(); - for (let i = 0; i < cout; i++) { - let obj = new Shape(); - obj.ReadFile(file); - this._ShapeList.push(obj); - } - } - WriteFile(file) { - file.Write(1); //ver - file.Write(this.ShapeList.length); - for (let s of this.ShapeList) { - s.WriteFile(file); + return object; } } } -var Region_1; -let Region = Region_1 = class Region extends Entity { - static CreateFromCurves(cus) { - let shapes = Contour.GetAllContour(cus).map(out => new Shape(out)); - if (shapes.length > 0) { - let reg = new Region_1(); - //MarkX:曲线同面域一起移动 - reg.ApplyMatrix(shapes[0].Outline.Curve.OCS); - reg.ShapeManager.AppendShapeList(shapes); - return reg; +new Vector3(); +new Vector3(); +new Vector3(); + +var Type; +(function (Type) { + Type[Type["CoplanarFront"] = 0] = "CoplanarFront"; + Type[Type["CoplanarBack"] = 1] = "CoplanarBack"; + Type[Type["Front"] = 2] = "Front"; + Type[Type["Back"] = 3] = "Back"; + Type[Type["Spanning"] = 4] = "Spanning"; +})(Type || (Type = {})); + +function Geometry2CSG2(geometry) { + if (geometry instanceof BufferGeometry) + geometry = new Geometry().fromBufferGeometry(geometry); + let polygons = []; + for (let i = 0; i < geometry.faces.length; i++) { + let face = geometry.faces[i]; + let vertices = []; + if (face instanceof Face3) { + vertices.push(geometry.vertices[face.a].toArray()); + vertices.push(geometry.vertices[face.b].toArray()); + vertices.push(geometry.vertices[face.c].toArray()); + } + polygons.push(create(vertices)); + } + return retessellate(geom3.create(polygons)); +} +function CSG2Geometry2(csg) { + let geo = new Geometry; + for (let poly of csg.polygons) { + let normal; //面的法线 + //@ts-ignore + if (poly.plane) + //@ts-ignore + normal = new Vector3().fromArray(poly.plane); + let startIndex = geo.vertices.length; + for (let v of poly.vertices) + geo.vertices.push(new Vector3().fromArray(v)); + if (!normal && poly.vertices.length > startIndex + 2) //如果没有法线,则自己计算 + normal = new Plane().setFromCoplanarPoints(geo.vertices[startIndex], geo.vertices[startIndex + 1], geo.vertices[startIndex + 2]).normal; + for (let i = poly.vertices.length - 3; i >= 0; i--) { + let f = new Face3(startIndex, startIndex + i + 1, startIndex + i + 2, normal); + geo.faces.push(f); } } - constructor(_ShapeManager = new ShapeManager()) { - super(); - this._ShapeManager = _ShapeManager; + return geo; +} + +class ArcBoardBuild { + //弃用 + // private _SweepParamRanges: [number, number][];//Path 每段的起点参数和终点参数 基于SweepCurves1 + constructor(_board, + //放样路径 + _SweepPath = _board.GetSweepPath(), + //路径基于板旋转 + _SweepAngle = _board.SweepAngle, _FaceDir = _board.SweepVisibleFace) { + this._board = _board; + this._SweepPath = _SweepPath; + this._SweepAngle = _SweepAngle; + this._FaceDir = _FaceDir; + // //稳健折弯 + // private ParseSweepLengths2() + // { + // let sweepCurves = this.SweepCurves; + // let sweepCurves2 = this.SweepCurves2; + // let lengths: number[] = []; + // this._SweepParamRanges = []; + // for (let i = 0; i < sweepCurves.length; i++) + // { + // let c1 = sweepCurves[i]; + // let c2 = sweepCurves2[i]; + // if (c1 instanceof Line) + // { + // let param = new GetLineParam(c1); + // //我们这里得到了折弯处的参数 或许可以有用? + // let sp = param.GetParamAtPoint(c2.StartPoint); + // let ep = param.GetParamAtPoint(c2.EndPoint); + // this._SweepParamRanges.push([sp, ep]); + // sp = Math.min(sp, 0); + // ep = Math.max(ep, 1); + // lengths.push(param.Length * (ep - sp)); + // } + // else + // { + // let sa = c1.GetAngleAtPoint(c2.StartPoint); + // let ea = c1.GetAngleAtPoint(c2.EndPoint); + // let sp = c1.GetParamAtAngle(sa); + // let ep = c1.GetParamAtAngle(ea); + // this._SweepParamRanges.push([sp, ep]); + // sp = Math.min(sp, 0); + // ep = Math.max(ep, 1); + // //背面为c1 正面为c2 + // lengths.push((this._FaceDir === FaceDirection.Front ? c2.Length : c1.Length) * (ep - sp)); + // } + // } + // this._SweepLengths = lengths; + // } + //用于缓存X位置->映射点和方向 + this._CacheFuzzXFactory = new FuzzyFactory(1, 1e-3); //唯一映射x + this._Cache_X_PosDirMap = new Map; + this.ParseContourLength(); } - //如果需要修改获取到的属性,需要Clone后进行操作,否则会对原实体进行破坏 - get ShapeManager() { - return this._ShapeManager; + get SweepPath1() { return this._SweepPath1; } + get SweepPath2() { return this._SweepPath2; } + ParseContourLength() { + if (this._SweepAngle !== 0 && !this._Rotate2OCSMtx) + this.ParseRotateMtx(); } - get Area() { - return this.ShapeManager.ShapeArea; + //针对本算法特殊定制的偏移算法 避免偏移后起点丢失(主要是圆) + static OffsetPolyline(path, dist) { + let offset = new OffsetPolyline(path, dist); + offset._AllowConverToCircle = false; + return offset.Do()[0]; } - get BoundingBox() { - let box = new Box3(); - for (let s of this._ShapeManager.ShapeList) - box.union(s.BoundingBox); - return box; + get OCS2RotateMtx() { + if (!this._OCS2RotateMtx) + this.ParseRotateMtx(); + return this._OCS2RotateMtx; } - Explode() { - let shapeList = this._ShapeManager.ShapeList; - if (shapeList.length <= 1) { - return shapeList[0].Explode(); + get Rotate2OCSMtx() { + if (!this._OCS2RotateMtx) + this.ParseRotateMtx(); + return this._Rotate2OCSMtx; + } + ParseRotateMtx() { + if (this._SweepAngle === 0) + this._OCS2RotateMtx = new Matrix4; + let con = this._board.ContourCurve.Clone(); + let mtx = new Matrix4().makeRotationZ(-this._SweepAngle); + con.ApplyMatrix(mtx); + let box = con.BoundingBox; + mtx.setPosition(box.min.negate()); + this._OCS2RotateMtx = mtx; + this._Rotate2OCSMtx = new Matrix4().getInverse(mtx); + } + get SweepCurves1() { + return this._SweepCurves1; + } + get SweepCurves2() { + return this._SweepCurves2; + } + ParseSweepCurves() { + let path = ArcBoardBuild.OffsetPolyline(this._SweepPath, -this._board.Thickness); + if (this._FaceDir === FaceDirection.Back) { + this._SweepPath1 = ArcBoardBuild.OffsetPolyline(path, this._board.Thickness); + this._SweepPath2 = path; + this._SweepCurves1 = this._SweepPath1.Explode(); + this._SweepCurves2 = this._SweepCurves1.map(c => { + let offsetC = c.GetOffsetCurves(-this._board.Thickness)[0]; + if (!offsetC) + offsetC = new Line(c.StartPoint, c.StartPoint); + return offsetC; + }); } else { - let regs = []; - shapeList.forEach(s => { - let reg = new Region_1().ApplyMatrix(this.OCS); - reg.ShapeManager.AppendShapeList(s); - regs.push(reg); + this._SweepPath1 = path; + this._SweepPath2 = ArcBoardBuild.OffsetPolyline(this._SweepPath1, this._board.Thickness); + this._SweepCurves1 = this._SweepPath1.Explode(); + this._SweepCurves2 = this._SweepCurves1.map(c => { + let offsetC = c.GetOffsetCurves(this._board.Thickness)[0]; + if (!offsetC) + offsetC = new Line(c.StartPoint, c.StartPoint); + return offsetC; }); - return regs; } + this._SweepLengths = this._SweepCurves1.map(c => c.Length); + return this; } - /** - * 对于布尔操作,这个将会变换内部轮廓到对方坐标系. - * 并且这个变换不会更新图形绘制. - * @param {Matrix4} m - * @memberof Region - */ - ShapeApplyMatrix(m) { - this.WriteAllObjectRecord(); - this._ShapeManager.ApplyMatrix(m); + get SweepLengths() { + if (!this._SweepLengths) + this.ParseSweepCurves(); + return this._SweepLengths; } - GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { - switch (snapMode) { - case ObjectSnapMode.End: - return this.GetGripPoints(); - case ObjectSnapMode.Mid: - case ObjectSnapMode.Cen: - case ObjectSnapMode.Nea: - case ObjectSnapMode.Ext: - case ObjectSnapMode.Per: - case ObjectSnapMode.Tan: - { - let pts = []; - for (let s of this._ShapeManager.ShapeList) { - pts.push(...s.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)); + get SweepLength() { + let length = 0; + for (let l of this.SweepLengths) + length += l; + return length; + } + get SweepEndDists() { + if (this._SweepEndDists) + return this._SweepEndDists; + this._SweepEndDists = []; + let sumLength = 0; + for (let i = 0; i < this.SweepLengths.length; i++) { + let length = this.SweepLengths[i]; + sumLength += length; + this._SweepEndDists.push(sumLength); + } + return this._SweepEndDists; + } + get CSGBoard() { + if (!this._csgBoard) + this.ParseCSGBoard(); + return this._csgBoard; + } + get SplitXList() { + if (!this._splitXList) + this.ParseSplitXlist(); + return this._splitXList; + } + /** 解析切割的位置 */ + ParseSplitXlist() { + //每段线段的结束距离 + let dists = []; + let split_xs = []; //分割位置 + //解析每段长度 解析分割位置 + let sumLength = 0; + for (let i = 0; i < this.SweepLengths.length; i++) { + let length = this.SweepLengths[i]; + if (this._SweepCurves1[i] instanceof Arc) //在圆弧时分段切割 + { + let splitCount = GetArcDrawCount(this._SweepCurves1[i]); + let divDist = length / splitCount; + for (let j = 1; j < splitCount; j++) + split_xs.push(sumLength + (divDist * j)); + } + sumLength += length; + dists.push(sumLength); + split_xs.push(sumLength); + } + split_xs.pop(); //最后一段不在切割 + this._SweepEndDists = dists; + this._splitXList = split_xs; + } + /** 解析临时板 */ + ParseCSGBoard() { + //特性坍塌 我们记录所有转角处的x位置 以便我们遇到这个位置的坐标时,求正确的dir. + this.ParseCorner(); + //拿CSG过来分割 + // let br = new Board; + // br.Thickness = this._board.Thickness; + // br.ContourCurve = this._board.ContourCurve; + let br = this._board.Clone(); + br.Name = "临时板"; + br.SetSweepPath(undefined, 0); + let arcBoardOptions = this._board.ArcBoardOptions; + //构建转角处的槽 + let mmm = []; + for (let i = 0; i < this.SweepEndDists.length - 1; i++) { + const arcBoardOption = arcBoardOptions.get(-1); + let c1 = this._SweepCurves1[i]; + let c2 = this._SweepCurves1[i + 1]; + let co1 = this._SweepCurves2[i]; + let co2 = this._SweepCurves2[i + 1]; + //避免多余槽 + if (co1.Length < 0.1 || co2.Length < 0.1 || equalv2(co1.EndPoint, co2.StartPoint, 0.1)) + continue; + let p = co1.IntersectWith(co2, IntersectOption.ExtendNone, 0.1); + if (p.length === 1) { + let cp1 = c1.GetClosestPointTo(p[0], false); + let cp2 = c2.GetClosestPointTo(p[0], false); + let dist1 = c1.GetDistAtPoint(cp1); + let dist2 = c2.GetDistAtPoint(cp2); + dist1 = this.SweepLengths[i] - dist1; + if (dist1 + dist2 < 0.1) + continue; + let d = this.SweepEndDists[i]; + let zValue = arcBoardOption.retainedThickness; + let thickness = br.Thickness - zValue; + if (this._FaceDir === FaceDirection.Front) + zValue = 0; + let pl = new Polyline().Rectangle(dist1 + dist2, 10000).Move(new Vector3(d - dist1, -100, 0)); + if (this._SweepAngle !== 0) + pl.ApplyMatrix(this.Rotate2OCSMtx); + let data = { + shape: new Shape(Contour.CreateContour(pl)), + thickness: thickness, + dir: 1 - this._FaceDir, //见光面和开槽面相反 这里翻转它 + knifeRadius: 3, + addLen: 0, + }; + mmm.push(data); + } + else if (p.length === 0) { + let d = this.SweepEndDists[i]; + let zValue = arcBoardOption.retainedThickness; + let thickness = br.Thickness - zValue; + let pl = new Polyline().Rectangle(1, 10000).Move(new Vector3(d - 0.5, -100, 0)); + if (this._SweepAngle !== 0) + pl.ApplyMatrix(this.Rotate2OCSMtx); + let data = { + shape: new Shape(Contour.CreateContour(pl)), + thickness: thickness, + dir: 1 - this._FaceDir, //见光面和开槽面相反 这里翻转它 + knifeRadius: 3, + addLen: 0, + }; + mmm.push(data); + } + } + // mmm = []; + br.BoardModeling = this._board.BoardModeling.concat(mmm); + // br.Modeling2D = this._board.Modeling2D; + // br.Modeling3D = this._board.Modeling3D; + //TestDraw(br.Clone()); + this._csgBoard = br; + } + /** 生成圆弧板的Geometry */ + BuildMeshEdgeGeom(csg) { + let br = this.CSGBoard; + if (!csg) + csg = this.CSGBoard.CSG; + //旋转 r+m 逆矩阵(m+r) 将板轮廓旋转后 移动到WCS0(包围盒) + let min, max; + if (this._SweepAngle !== 0) { + //根据csg旋转 + let roMtx = mat4.create(); + mat4.rotateZ(roMtx, roMtx, -this._SweepAngle); + csg = transform(roMtx, csg); + [min, max] = measureBoundingBox(csg); + let moveMtx = mat4.create(); + mat4.translate(moveMtx, moveMtx, min.map(v => -v)); + csg = transform(moveMtx, csg); + if (max[0] > this.SweepLength) + console.log("出错"); + // let geom = CSG2Geometry2(geom3.create(toPolygons(csg))); + // geom.computeVertexNormals(); + // TestDraw(new Mesh(geom, new MeshNormalMaterial)); + this._OCS2RotateMtx = new Matrix4().makeRotationZ(-this._SweepAngle).setPosition(-min[0], -min[1], -min[2]); //rotate + move + this._Rotate2OCSMtx = new Matrix4().makeRotationZ(this._SweepAngle).multiply(new Matrix4().setPosition(min[0], min[1], min[2])); //move + rotate + } + let remPolys = toPolygons(csg); + let plane = [1, 0, 0, 0]; + let splitedPolys = []; + for (let x of this.SplitXList) { + plane[3] = x; + let leftPolys = []; + let rightPolys = []; + for (let poly of remPolys) { + // Returns object: + // .type: + // 0: coplanar-front + // 1: coplanar-back + // 2: front + // 3: back + // 4: spanning + // In case the polygon is spanning, returns: + // .front: a Polygon3 of the front part + // .back: a Polygon3 of the back part + if (!poly) // 先临时处理为null的情况,以免Error + continue; + let res = splitPolygonByPlane(plane, poly); + if (res.type === 0) + leftPolys.push(poly); + else if (res.type === 1) + leftPolys.push(poly); + else if (res.type === 2) + rightPolys.push(poly); + else if (res.type === 3) + leftPolys.push(poly); + else if (res.type === 4) { + if (res.back) + leftPolys.push(res.back); + if (res.front) + rightPolys.push(res.front); + } + } + splitedPolys.push(...toPolygons(retessellate(geom3.create(leftPolys)))); + remPolys = rightPolys; + } + splitedPolys.push(...toPolygons(retessellate(geom3.create(remPolys)))); + //分割结束 + //生成UV + let geom = CSG2Geometry2(geom3.create(splitedPolys)); + const bufferGeometry = new BufferGeometry().fromGeometry(geom); + //旋转板先变换到原始状态计算uv + if (this._SweepAngle !== 0) + bufferGeometry.applyMatrix4(this._Rotate2OCSMtx); + const gen = new GenLocalUv(); + gen.CalculateUv(bufferGeometry, this._board.BoardProcessOption.lines === LinesType.Reverse); + //变换回来映射 + if (this._SweepAngle !== 0) + bufferGeometry.applyMatrix4(this._OCS2RotateMtx); + //收集所有的x + let pos = bufferGeometry.getAttribute("position"); + let xs = []; + for (let y = 0; y < pos.count; y++) + xs.push(pos.array[y * 3]); + arraySortByNumber$1(xs); + arrayRemoveDuplicateBySort(xs, equaln$1); + //映射所有的x + this.ParseAllX_Map(xs); + //变换所有的点 + let tempP = new Vector3; + for (let i = 0; i < pos.count; i++) { + tempP.fromArray(pos.array, i * 3); + this.PosMap2ArcPos(tempP); + pos.setXYZ(i, tempP.x, tempP.y, tempP.z); + } + //#region 构建线框 + let edgeGeom = br.EdgeGeometry; + pos = edgeGeom.getAttribute("position"); + let plane2 = new Plane(new Vector3(-1, 0, 0), 0); + let remLiens = []; + for (let y = 0; y < pos.count; y += 2) { + let p1 = new Vector3().fromArray(pos.array, y * 3); + let p2 = new Vector3().fromArray(pos.array, (y + 1) * 3); + if (this._OCS2RotateMtx) { + p1.applyMatrix4(this._OCS2RotateMtx); + p2.applyMatrix4(this._OCS2RotateMtx); + } + let line3 = new Line3(p1, p2); + remLiens.push(line3); + } + //所有的线被切割分组 + let lines = []; + for (let x of this.SplitXList) { + plane2.constant = x; + let rightLines = []; + for (let line of remLiens) { + let ip = plane2.intersectLine(line, tempP); + if (ip) { + if (line.start.x < line.end.x) { + lines.push(new Line3(line.start, ip.clone())); + rightLines.push(new Line3(ip.clone(), line.end)); + } + else { + lines.push(new Line3(ip.clone(), line.end)); + rightLines.push(new Line3(line.start, ip.clone())); } - return pts; } + else if (line.start.x > x) + rightLines.push(line); + else + lines.push(line); + } + remLiens = rightLines; } - return []; - } - GetGripPoints() { + lines = lines.concat(remLiens); + //转换为点表 let pts = []; - for (let s of this._ShapeManager.ShapeList) - pts.push(...s.GetStretchPoints()); - return pts; - } - MoveGripPoints(indexList, moveVec) { - this.WriteAllObjectRecord(); - let moveVLoc = moveVec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv)); - this.ApplyMatrix(MoveMatrix(moveVLoc)); - } - ApplyMatrix(m) { - this.WriteAllObjectRecord(); - //面域移动,组成面域的曲线也要移动 MarkX:曲线同面域一起移动 - this._ShapeManager.ShapeList.forEach(s => s.ApplyMatrix(m)); - return super.ApplyMatrix(m); - } - get Position() { - return super.Position; - } - set Position(pt) { - this.WriteAllObjectRecord(); - let moveX = pt.x - this._Matrix.elements[12]; - let moveY = pt.y - this._Matrix.elements[13]; - let moveZ = pt.z - this._Matrix.elements[14]; - this._Matrix.setPosition(pt); - this._SpaceOCS.elements[12] += moveX; - this._SpaceOCS.elements[13] += moveY; - this._SpaceOCS.elements[14] += moveZ; - let m = new Matrix4().setPosition(moveX, moveY, moveZ); - for (let s of this.ShapeManager.ShapeList) - s.ApplyMatrix(m); - this.Update(UpdateDraw.Matrix); - } - ApplyScaleMatrix(m) { - this.WriteAllObjectRecord(); - for (let s of this._ShapeManager.ShapeList) - s.ApplyScaleMatrix(m); - this.Update(UpdateDraw.Geometry); - return this; - } - //Z轴归0 - Z0() { - super.Z0(); - for (let s of this._ShapeManager.ShapeList) - s.Z0(); - return this; - } - MatrixPlanarizere() { - super.MatrixPlanarizere(); - for (let s of this._ShapeManager.ShapeList) - s.MatrixPlanarizere(); - return this; - } - ApplyMirrorMatrix(m) { - return this; - } - /** - * 请注意:该计算会操作otherRegion的矩阵 - * @param {Region} otherRegion - * @param {BoolOpeartionType} boolType - */ - BooleanOper(otherRegion, boolType) { - if (this.IsCoplaneTo(otherRegion)) { - this.WriteAllObjectRecord(); - let oldOcs = this.OCS; - //把形状曲线转移到二维屏幕计算后还原回来 - this.ShapeApplyMatrix(this.OCSInv); - otherRegion.ShapeApplyMatrix(this.OCSInv); - let isSuccess = this._ShapeManager.BoolOper(otherRegion._ShapeManager, boolType); - this.ShapeApplyMatrix(oldOcs); - this.Update(); - return isSuccess; + for (let l of lines) + pts.push(l.start, l.end); + xs = pts.map(p => p.x); + arraySortByNumber$1(xs); + arrayRemoveDuplicateBySort(xs, equaln$1); + this.ParseAllX_Map(xs); + //变换所有的点 + for (let p of pts) + this.PosMap2ArcPos(p); + edgeGeom = BufferGeometryUtils.CreateFromPts(pts); + //#endregion 结束线框构建 + // TestDraw(new Mesh(bufferGeometry.clone(), new MeshNormalMaterial)); + if (this._SweepAngle !== 0) //将板从旋转状态转回原始状态 + { + edgeGeom.applyMatrix4(this._Rotate2OCSMtx); + bufferGeometry.applyMatrix4(this._Rotate2OCSMtx); } - return false; + bufferGeometry.computeBoundingBox(); + bufferGeometry.computeVertexNormals(); + // TestDraw(new Mesh(bufferGeometry, new MeshNormalMaterial)); + return [bufferGeometry, edgeGeom]; } - get MeshGeometry() { - if (this._MeshGeometry) - return this._MeshGeometry; - this.UpdateGeometry(); - return this._MeshGeometry; - } - get EdgeGeometry() { - if (this._EdgeGeometry) - return this._EdgeGeometry; - this.UpdateGeometry(); - return this._EdgeGeometry; - } - UpdateGeometry() { - let shapeList = this._ShapeManager.ShapeList; - let edgePts = []; - let meshGeoms = []; - const AddEdgePts = (pts, diffMat) => { - for (let i = 0; i < pts.length; i++) { - let p = AsVector3(pts[i]); - p.applyMatrix4(diffMat); - edgePts.push(p); - if (i !== 0 && i !== pts.length - 1) - edgePts.push(p); + /** 生成大孔面 */ + BuildBigHoleFace() { + let split_xs = []; //分割位置 + //解析每段长度 解析分割位置 + let sumLength = 0; + for (let i = 0; i < this.SweepLengths.length; i++) { + let length = this.SweepLengths[i]; + if (this._SweepCurves1[i] instanceof Arc) //在圆弧时分段切割 + { + let splitCount = GetArcDrawCount(this._SweepCurves1[i]); + let divDist = length / splitCount; + for (let j = 1; j < splitCount; j++) + split_xs.push(sumLength + (divDist * j)); } - }; - for (let i = 0; i < shapeList.length; i++) { - let shape = shapeList[i]; - let geometry = new ShapeGeometry(shape.Shape, 60); //60 可以优化. - let diffMat = this.OCSInv.clone().multiply(shape.Outline.Curve.OCSNoClone); - geometry.applyMatrix4(diffMat); - ScaleUV(geometry); - meshGeoms.push(new BufferGeometry().fromGeometry(geometry)); - let shapeInfo = shape.Shape.extractPoints(60); - let pts = shapeInfo.shape; - AddEdgePts(pts, diffMat); - let holePtss = shapeInfo.holes; - for (let holePts of holePtss) - AddEdgePts(holePts, diffMat); + sumLength += length; + split_xs.push(sumLength); } - this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(edgePts); - this._MeshGeometry = BufferGeometryUtils.MergeBufferGeometries(meshGeoms); - this._MeshGeometry["IsMesh"] = true; - this._MeshGeometry.computeVertexNormals(); - } - UpdateDrawGeometry() { - if (this._EdgeGeometry) - this._EdgeGeometry.dispose(); - this._EdgeGeometry = undefined; - if (this._MeshGeometry) - this._MeshGeometry.dispose(); - this._MeshGeometry = undefined; - } - ClearDraw() { - this.UpdateDrawGeometry(); - return super.ClearDraw(); - } - InitDrawObject(renderType = RenderType.Wireframe) { - if (renderType === RenderType.Wireframe) { - return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)); + split_xs.pop(); //最后一段不在切割 + //拿CSG过来分割 + let br = new Board; + br.Thickness = this._board.Thickness; + br.ContourCurve = this._board.ContourCurve; + br.BoardProcessOption[EBoardKeyList.BigHole] = this._board.BoardProcessOption[EBoardKeyList.BigHole]; + let csg = Geometry2CSG2(br.BigHoleFaceGeo); + //旋转 r+m 逆矩阵(m+r) 将板轮廓旋转后 移动到WCS0(包围盒) + let min, max; + let Rotate2OCSMtx = new Matrix4(); + if (this._SweepAngle !== 0) { + //根据csg旋转 + let roMtx = mat4.create(); + mat4.rotateZ(roMtx, roMtx, -this._SweepAngle); + csg = transform(roMtx, csg); + [min, max] = measureBoundingBox(csg); + let moveMtx = mat4.create(); + mat4.translate(moveMtx, moveMtx, [-min[0], -min[1], 0]); + csg = transform(moveMtx, csg); + if (max[0] > this.SweepLength) + console.log("出错"); + Rotate2OCSMtx = new Matrix4().makeRotationZ(this._SweepAngle).multiply(new Matrix4().setPosition(min[0], min[1], 0)); //move + rotate } - else if (renderType === RenderType.Conceptual) { - return new Object3D().add(new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)), new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex))); - } - else if (renderType === RenderType.Physical) { - let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial); - mesh.castShadow = true; - mesh.receiveShadow = true; - return mesh; - } - else if (renderType === RenderType.Print) { - return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(0)); - } - else if (renderType === RenderType.Physical2) { - let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial); - mesh.castShadow = true; - mesh.receiveShadow = true; - return new Object3D().add(new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)), mesh); - } - } - UpdateDrawObject(renderType, obj) { - DisposeThreeObj(obj); - Object3DRemoveAll(obj); - if (renderType === RenderType.Wireframe) { - let l = obj; - l.geometry = this.EdgeGeometry; - l.material = ColorMaterial.GetLineMaterial(this.ColorIndex); - } - else if (renderType === RenderType.Conceptual) { - return obj.add(new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)), new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex))); - } - else if (renderType === RenderType.Physical) { - let mesh = obj; - mesh.geometry = this.MeshGeometry; - mesh.material = this.MeshMaterial; - } - else if (renderType === RenderType.Physical2) { - let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial); - mesh.castShadow = true; - mesh.receiveShadow = true; - return obj.add(new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)), mesh); - } - else if (renderType === RenderType.Print) { - let l = obj; - l.geometry = this.EdgeGeometry; - l.material = ColorMaterial.GetLineMaterial(0); - } - } - /** - * 当实体需要被更新时,更新实体材质 - */ - UpdateDrawObjectMaterial(type, obj, material) { - if (type === RenderType.Wireframe || type === RenderType.Print) { - let line = obj; - line.material = ColorMaterial.GetLineMaterial(this.ColorIndex); - } - else if (type === RenderType.Conceptual) { - for (let i = 0; i < obj.children.length; i++) { - if (i % 2 === 0) { - let l = obj.children[i]; - l.material = ColorMaterial.GetLineMaterial(this.ColorIndex); - } - else { - let mesh = obj.children[i]; - mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex); + let remPolys = toPolygons(csg); + let plane = [1, 0, 0, 0]; + let splitedPolys = []; + for (let x of split_xs) { + plane[3] = x; + let leftPolys = []; + let rightPolys = []; + for (let poly of remPolys) { + if (!poly) // 先临时处理为null的情况,以免Error + continue; + let res = splitPolygonByPlane(plane, poly); + if (res.type === 0) + leftPolys.push(poly); + else if (res.type === 1) + leftPolys.push(poly); + else if (res.type === 2) + rightPolys.push(poly); + else if (res.type === 3) + leftPolys.push(poly); + else if (res.type === 4) { + leftPolys.push(res.back); + rightPolys.push(res.front); } } + splitedPolys.push(...toPolygons(retessellate(geom3.create(leftPolys)))); + remPolys = rightPolys; } - else if (type === RenderType.Physical) { - let mesh = obj; - mesh.material = this.MeshMaterial; + splitedPolys.push(...toPolygons(retessellate(geom3.create(remPolys)))); + //分割结束 + //生成UV + let geom = CSG2Geometry2(geom3.create(splitedPolys)); + const bufferGeometry = new BufferGeometry().fromGeometry(geom); + //收集所有的x + let pos = bufferGeometry.getAttribute("position"); + let xs = []; + for (let y = 0; y < pos.count; y++) + xs.push(pos.array[y * 3]); + arraySortByNumber$1(xs); + arrayRemoveDuplicateBySort(xs, equaln$1); + //映射所有的x + // 为了不影响this._CacheFuzzXFactory和this._Cache_X_PosDirMap,这里重新定义(否则可能导致错误,但目前没测到) + const [cacheFuzzXFactory, cache_X_PosDirMap] = this.ParseAllX_Map_BigHole(xs); + //变换所有的点 + let tempP = new Vector3; + for (let i = 0; i < pos.count; i++) { + tempP.fromArray(pos.array, i * 3); + this.PosMap2ArcPos(tempP, cacheFuzzXFactory, cache_X_PosDirMap); + pos.setXYZ(i, tempP.x, tempP.y, tempP.z); + } + if (this._SweepAngle !== 0) //将板从旋转状态转回原始状态 + { + bufferGeometry.applyMatrix4(Rotate2OCSMtx); + } + return bufferGeometry; + } + // + ParseCorner() { + this._CornerSet = new Set(); + this._CornerFuzzFactory = new FuzzyFactory(3, 1e-3); + for (let d of this.SweepEndDists) { + d = this._CornerFuzzFactory.lookupOrCreate([d], d); + this._CornerSet.add(d); } } - _ReadFile(file) { - super._ReadFile(file); - file.Read(); //1 - this._ShapeManager.Clear(); - this._ShapeManager.ReadFile(file); + ParseAllX_Map(xs) { + if (!this._CornerSet) + this.ParseCorner(); + let dists = this.SweepEndDists; + let fuzzX = this._CacheFuzzXFactory; + let curveIndex = 0; + let curSum = dists[0]; + let preSum = 0; + let rotateAngle = this._FaceDir === FaceDirection.Back ? Math.PI / 2 : -Math.PI / 2; + for (let x of xs) { + while (x > curSum && curveIndex < dists.length - 1) { + curveIndex++; + preSum = curSum; + curSum = dists[curveIndex]; + } + let c = this._SweepCurves1[curveIndex]; + let param = ((x - preSum) / this._SweepLengths[curveIndex]); + let onlyX = fuzzX.lookupOrCreate([x], x); + let derv = c.GetFirstDeriv(param); + // if (c instanceof Line) + // derv.divideScalar(this._SweepLengths[curveIndex]); + // else + // derv.divideScalar(c.Radius); + derv.normalize(); + rotatePoint(derv, rotateAngle); + let onlyD = this._CornerFuzzFactory.lookupOrCreate([x], x); + if (this._CornerSet.has(onlyD)) //坍塌 + { + // console.log("坍塌"); + let p2 = this._SweepPath2.GetPointAtParam(curveIndex + Math.round(param)); + derv = p2.sub(c.GetPointAtParam(param)).divideScalar(this._board.Thickness); + } + this._Cache_X_PosDirMap.set(onlyX, [c.GetPointAtParam(param), derv]); + } } - WriteFile(file) { - super.WriteFile(file); - file.Write(1); //ver - this._ShapeManager.WriteFile(file); + ParseAllX_Map_BigHole(xs) { + const cacheFuzzXFactory = new FuzzyFactory(1, 1e-3); + const cache_X_PosDirMap = new Map; + let dists = this.SweepEndDists; + let curveIndex = 0; + let curSum = dists[0]; + let preSum = 0; + let rotateAngle = this._FaceDir === FaceDirection.Back ? Math.PI / 2 : -Math.PI / 2; + for (let x of xs) { + while (x > curSum && curveIndex < dists.length - 1) { + curveIndex++; + preSum = curSum; + curSum = dists[curveIndex]; + } + let c = this._SweepCurves1[curveIndex]; + let param = ((x - preSum) / this._SweepLengths[curveIndex]); + let onlyX = cacheFuzzXFactory.lookupOrCreate([x], x); + let derv = c.GetFirstDeriv(param); + derv.normalize(); + rotatePoint(derv, rotateAngle); + let onlyD = this._CornerFuzzFactory.lookupOrCreate([x], x); + if (this._CornerSet.has(onlyD)) //坍塌 + { + let p2 = this._SweepPath2.GetPointAtParam(curveIndex + Math.round(param)); + derv = p2.sub(c.GetPointAtParam(param)).divideScalar(this._board.Thickness); + } + cache_X_PosDirMap.set(onlyX, [c.GetPointAtParam(param), derv]); + } + return [cacheFuzzXFactory, cache_X_PosDirMap]; } + PosMap2ArcPos(p, cacheFuzzXFactory = this._CacheFuzzXFactory, cache_X_PosDirMap = this._Cache_X_PosDirMap) { + let [x, y, z] = p.toArray(); + let onlyX = cacheFuzzXFactory.lookupOrCreate([x], x); + let arr = cache_X_PosDirMap.get(onlyX); + if (!arr) { + console.error("未知情况?"); + return; + } + let [pox, v] = arr; + if (this._FaceDir === FaceDirection.Front) + z = this._board.Thickness - z; + p.copy(v).multiplyScalar(z).add(pox); + [p.y, p.z] = [y, p.y]; + } +} + +var ArcBoardFeedProcess; +(function (ArcBoardFeedProcess) { + ArcBoardFeedProcess[ArcBoardFeedProcess["Slots"] = 0] = "Slots"; + ArcBoardFeedProcess[ArcBoardFeedProcess["Model"] = 1] = "Model"; +})(ArcBoardFeedProcess || (ArcBoardFeedProcess = {})); + +//圆弧默认的槽配置 +const defultArcBoardOption = { + arcLength: 0, + grooveSpacing: 6, + grooveWidth: 6, + retainedThickness: 2, + knifeRadius: 3, + grooveAddLength: 0, + grooveAddWidth: 0, + grooveAddDepth: 0, + arcExtension: 0, }; -Region = Region_1 = __decorate([ - Factory -], Region); - /** - * 把板件炸开成面域,0,1为正反面,其余的为边面(没有圆弧面) - */ -function Board2Regions(br) { - let ocs = br.OCS; - let cu = br.ContourCurve.Clone(); - if (cu instanceof Circle) - cu = ConverCircleToPolyline$1(cu); - let frontReg = Region.CreateFromCurves([cu.Clone()]); - let regFrontOcs = ocs.clone(); - regFrontOcs.setPosition(br.Position.add(br.Normal.multiplyScalar(br.Thickness))); - frontReg.ApplyMatrix(regFrontOcs); - let backReg = Region.CreateFromCurves([cu.Flip()]); - backReg.ApplyMatrix(ocs); - let resultRegs = [frontReg, backReg]; - //edges - let lines = cu.Explode().filter(c => c instanceof Line); - for (let l of lines) { - let rectPl = new Polyline().Rectangle(l.Length, br.Thickness); - let reg = Region.CreateFromCurves([rectPl]); - if (!reg) + * 解析圆弧板需要的走刀数据 + * @param br + * @param path 圆弧放样路径 + * @param angle 角度 + * @param dir 圆弧板见光面 见光面正面走刀颜色黄色,背面颜色红色 + * @param [onlyVert=false] 仅解析交点位置 (默认解析所有的槽) + * @returns 返回需要增加的槽的数据 + */ +function ParseBoardArcFeed(br, path, angle, dir, arcBoardOptions, onlyVert = false) { + const arcBoardBuild = new ArcBoardBuild(br); + arcBoardBuild.ParseSweepCurves(); + //每段线段的起始位置 + const dists = []; + //解析每段长度 + let sumLength = 0; + dists.push(sumLength); + let SweepLengths = arcBoardBuild.SweepLengths; + for (let i = 0; i < SweepLengths.length; i++) { + let length = SweepLengths[i]; + sumLength += length; + dists.push(sumLength); + } + const board = new Board(); + board.Thickness = br.Thickness; + board.ContourCurve = br.ContourCurve; + //获取板形状 + const c1 = br.Shape; + if (angle !== 0) + c1.ApplyMatrix(arcBoardBuild.OCS2RotateMtx); + //记录每个转角槽信息 + const grooveInfo = new Map(); + for (let i = 0; i < dists.length - 2; i++) { + const arcBoardOption = arcBoardOptions.get(-1); + let c1 = arcBoardBuild.SweepCurves1[i]; + let c2 = arcBoardBuild.SweepCurves1[i + 1]; + let co1 = arcBoardBuild.SweepCurves2[i]; + let co2 = arcBoardBuild.SweepCurves2[i + 1]; + //避免多余槽 + if (equalv2(co1.EndPoint, co2.StartPoint, 0.1)) continue; - let p = l.StartPoint.applyMatrix4(ocs); - let x = l.GetFirstDeriv(0).transformDirection(ocs); - let y = br.Normal; - let z = new Vector3().crossVectors(x, y); - let mtx = new Matrix4().makeBasis(x, y, z).setPosition(p); - reg.ApplyMatrix(mtx); - resultRegs.push(reg); - } - return resultRegs; -} - -/**统一板件属性key的命名,修改值会导致无法 .xxx该属性 */ -var EBoardKeyList; -(function (EBoardKeyList) { - EBoardKeyList["Height"] = "height"; - EBoardKeyList["Width"] = "width"; - EBoardKeyList["Thick"] = "thickness"; - EBoardKeyList["RoomName"] = "roomName"; - EBoardKeyList["CabinetName"] = "cabinetName"; - EBoardKeyList["PaperName"] = "paperName"; - EBoardKeyList["BrName"] = "brName"; - EBoardKeyList["BrMat"] = "boardName"; - EBoardKeyList["Mat"] = "material"; - EBoardKeyList["Color"] = "color"; - EBoardKeyList["Lines"] = "lines"; - EBoardKeyList["ProcessGroup"] = "ProcessGroup"; - EBoardKeyList["BigHole"] = "bigHoleDir"; - /** - * 排钻类型,当没有定义每个边的排钻数据时,使用统一的排钻类型 - */ - EBoardKeyList["DrillType"] = "drillType"; - EBoardKeyList["ComposingFace"] = "composingFace"; - /** - * 封边数组,定义每个边的封边信息 - */ - EBoardKeyList["HighSealed"] = "highSealed"; - EBoardKeyList["UpSealed"] = "sealedUp"; - EBoardKeyList["DownSealed"] = "sealedDown"; - EBoardKeyList["LeftSealed"] = "sealedLeft"; - EBoardKeyList["RightSealed"] = "sealedRight"; - EBoardKeyList["KnifeRad"] = "knifeRadius"; - EBoardKeyList["SpliteHeight"] = "spliteHeight"; - EBoardKeyList["SpliteWidth"] = "spliteWidth"; - EBoardKeyList["SpliteThickness"] = "spliteThickness"; - EBoardKeyList["DrawNumber"] = "drawNumber"; - EBoardKeyList["Remarks"] = "remarks"; - EBoardKeyList["ExtraRemarks"] = "extraRemarks"; - EBoardKeyList["OpenDir"] = "openDir"; - EBoardKeyList["GroovesAddLength"] = "GroovesAddLength"; - EBoardKeyList["GroovesAddWidth"] = "GroovesAddWidth"; - EBoardKeyList["GroovesAddDepth"] = "GroovesAddDepth"; - EBoardKeyList["FrontDrill"] = "frontDrill"; - EBoardKeyList["BackDrill"] = "backDrill"; -})(EBoardKeyList || (EBoardKeyList = {})); - -/**序列化板件数据 */ -function serializeBoardData(file, processData) { - file.Write(processData[EBoardKeyList.RoomName]); - file.Write(processData[EBoardKeyList.CabinetName]); - file.Write(processData[EBoardKeyList.BrMat]); - file.Write(processData[EBoardKeyList.Mat]); - file.Write(processData[EBoardKeyList.Color]); - file.Write(processData[EBoardKeyList.Lines]); - file.Write(processData[EBoardKeyList.BigHole]); - file.Write(processData[EBoardKeyList.DrillType]); - file.Write(processData[EBoardKeyList.ComposingFace]); - file.Write(processData[EBoardKeyList.HighSealed].length); - for (let n of processData[EBoardKeyList.HighSealed]) { - file.Write(n.size); - } - file.Write(processData[EBoardKeyList.UpSealed]); - file.Write(processData[EBoardKeyList.DownSealed]); - file.Write(processData[EBoardKeyList.LeftSealed]); - file.Write(processData[EBoardKeyList.RightSealed]); - file.Write(processData.spliteHeight); - file.Write(processData.spliteWidth); - file.Write(processData.spliteThickness); - file.Write(processData.highDrill.length); - for (let n of processData.highDrill) - file.Write(n); - file.Write(processData.frontDrill); - file.Write(processData.backDrill); - file.Write(processData.remarks.length); - for (let d of processData.remarks) { - file.Write(d[0]); - file.Write(d[1]); - } -} -//反序列化板件数据 -function deserializationBoardData(file, processData, ver) { - processData[EBoardKeyList.RoomName] = file.Read(); - processData[EBoardKeyList.CabinetName] = file.Read(); - processData[EBoardKeyList.BrMat] = file.Read(); - processData[EBoardKeyList.Mat] = file.Read(); - processData[EBoardKeyList.Color] = file.Read(); - processData[EBoardKeyList.Lines] = file.Read(); - processData[EBoardKeyList.BigHole] = file.Read(); - processData[EBoardKeyList.DrillType] = file.Read(); - processData[EBoardKeyList.ComposingFace] = file.Read(); - let count = file.Read(); - processData[EBoardKeyList.HighSealed].length = 0; - for (let i = 0; i < count; i++) { - let size = file.Read(); - if (ver < 4) { - file.Read(); + let p = co1.IntersectWith(co2, IntersectOption.ExtendNone, 0.1); + if (p.length === 1) { + let cp1 = c1.GetClosestPointTo(p[0], false); + let cp2 = c2.GetClosestPointTo(p[0], false); + let dist1 = c1.GetDistAtPoint(cp1); + let dist2 = c2.GetDistAtPoint(cp2); + dist1 = arcBoardBuild.SweepLengths[i] - dist1; + if (dist1 + dist2 < 0.1) + continue; + grooveInfo.set(i, { l: dist1, r: dist2 }); } - processData[EBoardKeyList.HighSealed].push({ size }); - } - processData[EBoardKeyList.UpSealed] = file.Read(); - processData[EBoardKeyList.DownSealed] = file.Read(); - processData[EBoardKeyList.LeftSealed] = file.Read(); - processData[EBoardKeyList.RightSealed] = file.Read(); - processData.spliteHeight = file.Read(); - processData.spliteWidth = file.Read(); - processData.spliteThickness = file.Read(); - count = file.Read(); - processData.highDrill = file.ReadArray(count); - processData.frontDrill = file.Read(); - processData.backDrill = file.Read(); - if (ver >= 7) { - let count = file.Read(); - processData.remarks.length = 0; - for (let i = 0; i < count; i++) { - let d = ["", ""]; - d[0] = file.Read(); - d[1] = file.Read(); - processData.remarks.push(d); + else if (p.length === 0) { + grooveInfo.set(i, { l: arcBoardOption.grooveWidth / 2, r: arcBoardOption.grooveWidth / 2 }); } } -} -function SerializeBoard2DModeingData(file, modelList) { - file.Write(modelList.length); - for (let data of modelList) { - file.WriteObject(data.path); - file.Write(data.dir); - file.Write(data.items.length); - for (let item of data.items) { - file.Write(item.depth); - file.Write(item.offset); - file.Write(item.knife.id); - file.Write(item.knife.radius); - file.Write(item.knife.angle); - file.Write(item.knife.name); - } - } -} -function SerializeBoard3DModeingData(file, modelList) { - file.Write(modelList.length); - for (let item of modelList) { - file.Write(item.path.length); - for (let d of item.path) { - file.Write(d.pt.toArray()); - file.Write(d.bul); - } - file.Write(item.dir); - file.Write(item.knife.id); - file.Write(item.knife.radius); - file.Write(item.knife.angle); - file.Write(item.knife.name); - } -} -//反序列化板件数据 -function DeserializationBoard2DModeingData(file, data, ver) { - data.length = 0; - const count = file.Read(); - for (let i = 0; i < count; i++) { - let path = file.ReadObject(); - let dir = file.Read(); - let m = { - path, - dir, - items: [] - }; - const itemCount = file.Read(); - for (let j = 0; j < itemCount; j++) { - let depth = file.Read(); - let offset = file.Read(); - let knifeId = file.Read(); - let knifeRad = file.Read(); - let knifeAngle = file.Read(); - let knifeName = file.Read(); - m.items.push({ - depth, offset, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName } + const appendModel = (grooveWidth, x, arcBoardOption) => { + const pl = new Polyline().Rectangle(grooveWidth, 10000).Move(new Vector3(x, 0, 0)); + const c2 = new Shape(Contour.CreateContour(pl)); + for (const contour of c1.IntersectionBoolOperation(c2)) { + if (angle !== 0) + contour.ApplyMatrix(arcBoardBuild.Rotate2OCSMtx); + mmm.push({ + shape: contour, + thickness: br.Thickness - arcBoardOption.retainedThickness, + dir: dir === 0 ? FaceDirection.Back : FaceDirection.Front, + knifeRadius: arcBoardOption.knifeRadius, + addLen: arcBoardOption.grooveAddLength, + addWidth: arcBoardOption.grooveAddWidth, + addDepth: arcBoardOption.grooveAddDepth, }); } - data.push(m); - } -} -//反序列化板件数据 -function DeserializationBoard3DModeingData(file, data, ver) { - data.length = 0; - const count = file.Read(); - for (let i = 0; i < count; i++) { - let pathCount = file.Read(); - let path = []; - for (let i = 0; i < pathCount; i++) { - let pt = new Vector3().fromArray(file.Read()); - let bul = file.Read(); - path.push({ pt, bul }); + }; + //判断是否可以等分 + const checkIsDivide = (remainLength, grooveWidth, grooveSpacing, firstGrooveLength, lastGrooveLength) => { + //如果前面有默认槽,则减去一个槽宽度 + if (!firstGrooveLength) + remainLength -= grooveWidth; + //如果后面有默认槽,则减去一个槽宽度 + if (!lastGrooveLength) + remainLength -= grooveWidth; + const pericycleWidth = grooveSpacing + grooveWidth; //周期宽度 + const length = remainLength + grooveWidth; //加一个槽宽,让槽宽和槽间距个数相等 + const count = Math.ceil(length / pericycleWidth); //计算挖槽个数 + const newSpacing = (length / count) - grooveWidth; //计算新的槽间距值 + return newSpacing > 0; //如果新的槽间距大于零,可等分,如果小等于零槽就会重叠 + }; + //构建槽 + const mmm = []; + for (let i = 0; i < dists.length - 1; i++) { + const cu = arcBoardBuild.SweepCurves1[i]; + const startGroove = grooveInfo.get(i - 1); + if (startGroove) { + const arcBoardOption = arcBoardOptions.get(-1); + const grooveWidth = startGroove.l + startGroove.r; + const x = dists[i] - startGroove.l; + appendModel(grooveWidth, x, arcBoardOption); + } + if (!onlyVert && (cu instanceof Arc)) { + const arcBoardOption = arcBoardOptions.get(i); + const { grooveWidth, grooveSpacing, arcExtension } = arcBoardOption; + const firstGrooveLength = grooveInfo.get(i - 1)?.r ?? 0; //头通用挖槽长度 + const lastGrooveLength = grooveInfo.get(i)?.l ?? 0; //尾通用挖槽长度 + if (br.arcBoardFeedProcess === ArcBoardFeedProcess.Slots) { + //挖槽的规律是先挖最左右两个槽,再根据最大槽间距、槽宽和剩余长度计算出比例挖槽 + let remainLength = cu.Length - firstGrooveLength - lastGrooveLength; //剩余长度 + //更新起始距离 + let startDist = dists[i] + firstGrooveLength; + //先计算是否可以添加槽加长 + const cu1 = arcBoardBuild.SweepCurves1[i - 1]; + const cu2 = arcBoardBuild.SweepCurves1[i + 1]; + if (!firstGrooveLength && arcExtension && cu1 && cu1 instanceof Line) { + remainLength += arcExtension; + startDist -= arcExtension; + } + if (!lastGrooveLength && arcExtension && cu2 && cu2 instanceof Line) + remainLength += arcExtension; + if (remainLength > 0) { + //只能画一个槽的情况 + if (remainLength <= grooveWidth) { + if (firstGrooveLength) { + startDist += grooveSpacing; + remainLength -= grooveSpacing; + } + if (lastGrooveLength) { + remainLength -= grooveSpacing; + } + if (remainLength > 0) + appendModel(remainLength, startDist, arcBoardOption); + continue; + } + //这里只够分配前后两个槽,这两个槽的大小可能一大一小 + if (remainLength <= grooveWidth * 2 + grooveSpacing) { + if (firstGrooveLength) { + startDist += grooveSpacing; + remainLength -= grooveSpacing; + } + if (lastGrooveLength) { + remainLength -= grooveSpacing; + } + appendModel(grooveWidth, startDist, arcBoardOption); + let x2 = startDist + grooveSpacing + grooveWidth; + let grooveLength2 = remainLength - grooveWidth - grooveSpacing; + // 如果第二个槽太小无法走刀,画一个最小刀直径的槽 + let knifeDiameter = arcBoardOption.knifeRadius * 2; + if (grooveLength2 < knifeDiameter) + appendModel(knifeDiameter, x2 - knifeDiameter + grooveLength2, arcBoardOption); + else + appendModel(grooveLength2, x2, arcBoardOption); + continue; + } + //绘制多个槽 + if (checkIsDivide(remainLength, grooveWidth, grooveSpacing, firstGrooveLength, lastGrooveLength)) { + if (!firstGrooveLength) { + appendModel(grooveWidth, startDist, arcBoardOption); + startDist += grooveWidth; + remainLength -= grooveWidth; + } + if (!lastGrooveLength) { + const cu1 = arcBoardBuild.SweepCurves1[i + 1]; + remainLength -= grooveWidth; + //判断是否满足尾部延伸 + const x = dists[i + 1] - grooveWidth + ((arcExtension && cu1 && cu1 instanceof Line) ? arcExtension : 0); + appendModel(grooveWidth, x, arcBoardOption); + } + const pericycleWidth = grooveSpacing + grooveWidth; //周期宽度 + const length = remainLength + grooveWidth; + const count = Math.ceil(length / pericycleWidth); + // 计算新的槽位间距 + const newSpacing = (length / count) - grooveWidth; + const newPericycleWidth = newSpacing + grooveWidth; + for (let j = 0; j < count - 1; j++) { + const x = startDist + j * newPericycleWidth + newSpacing; + appendModel(grooveWidth, x, arcBoardOption); + } + } + else { + if (firstGrooveLength) { + startDist += grooveSpacing; + } + //不能等分,根据指定槽大小绘制,最后补一个小槽 + const pericycleWidth = grooveSpacing + grooveWidth; //周期宽度 + const count = Math.ceil(remainLength / pericycleWidth); + for (let j = 0; j < count; j++) { + let x = startDist + j * pericycleWidth; + if (remainLength >= pericycleWidth) { + appendModel(grooveWidth, x, arcBoardOption); + remainLength -= pericycleWidth; + } + else { + // 如果最后一个槽太小无法走刀,画一个最小刀直径的槽 + let knifeDiameter = arcBoardOption.knifeRadius * 2; + if (remainLength < knifeDiameter) + appendModel(knifeDiameter, x - knifeDiameter + remainLength, arcBoardOption); + else + appendModel(remainLength, x, arcBoardOption); + } + } + } + } + } + else { + let remainLength = cu.Length - firstGrooveLength - lastGrooveLength; //剩余长度 + if (remainLength > 0) { + //更新起始距离 + let startDist = dists[i]; + if (!firstGrooveLength) { + const cu1 = arcBoardBuild.SweepCurves1[i - 1]; + //判断是否满足头部延伸 + if (arcExtension && cu1 && cu1 instanceof Line) { + remainLength += arcExtension; + startDist -= arcExtension; + } + } + if (!lastGrooveLength) { + const cu1 = arcBoardBuild.SweepCurves1[i + 1]; + //判断是否满足尾部延伸 + if (arcExtension && cu1 && cu1 instanceof Line) { + remainLength += arcExtension; + } + } + appendModel(remainLength, startDist, arcBoardOption); + } + } } - let dir = file.Read(); - let knifeId = file.Read(); - let knifeRad = file.Read(); - let knifeAngle = file.Read(); - let knifeName = file.Read(); - data.push({ - path, dir, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName } - }); } + return mmm; +} + +/** 视图类型 */ +var ViewType; +(function (ViewType) { + ViewType["Normal"] = "\u6B63\u89C6\u56FE"; + ViewType["Front"] = "\u524D\u89C6\u56FE"; + ViewType["Left"] = "\u5DE6\u89C6\u56FE"; + ViewType["Right"] = "\u53F3\u89C6\u56FE"; + ViewType["Down"] = "\u4FEF\u89C6\u56FE"; + ViewType["Unknown"] = "\u672A\u77E5\u89C6\u56FE"; +})(ViewType || (ViewType = {})); +/** 线段管理器 */ +class CurveManager { + /* 多段线展开直线(类型依旧是多段线) */ + static CreateExpandPl(pl) { + const cus = pl.Explode(); + let len = 0; + const ps = []; + for (const cu of cus) { + ps.push(new Vector2$1(len, 0)); + len += cu.Length; + } + ps.push(new Vector2$1(len, 0)); + return this.CreatePolyline(ps).ApplyMatrix(pl.OCS); + } + ; + /** 绘制矩阵所表示的坐标系 */ + static CreateAxis(m) { + const len = 100; + const xArrow = new Line(new Vector3(0, 0, 0), new Vector3(len, 0, 0)); + const yArrow = new Line(new Vector3(0, 0, 0), new Vector3(0, len, 0)); + const zArrow = new Line(new Vector3(0, 0, 0), new Vector3(0, 0, len)); + xArrow.ColorIndex = 1; + yArrow.ColorIndex = 3; + zArrow.ColorIndex = 5; + xArrow.ApplyMatrix(m); + yArrow.ApplyMatrix(m); + zArrow.ApplyMatrix(m); + return [xArrow, yArrow, zArrow]; + } + ; + /** 点集转线段簇 */ + static PtsToLines(pts) { + const lines = []; + for (let i = 1; i < pts.length; i++) { + const p1 = pts[i - 1]; + const p2 = pts[i]; + const line = new Line(p1, p2); + lines.push(line); + } + return lines; + } + ; + /** 线段簇转多段线 */ + static LinesToPl(lines) { + const pl = new Polyline(); + // 确保坐标系不要沿着直线方向 + const lines2 = []; + if (lines.length === 1) { + lines2.push(lines[0]); + const p1 = lines[0].EndPoint; + const p2 = p1.clone().add(p1.clone().normalize().multiplyScalar(1)); + const line = new Line(p1, p2); + lines2.push(line); + pl.OCS = ComputerCurvesNormalOCS(lines2); + } + else { + pl.OCS = ComputerCurvesNormalOCS(lines); + } + // 转成多段线 + pl.ColorIndex = lines[0].ColorIndex; + for (const splitLine of lines) { + pl.Join(splitLine, false, 0.01); + } + return pl; + } + ; + /** 获取pA-pB之间的曲线 */ + static Get_Pl_InPtAtoPtB(pl, pA, pB) { + // 确保pA在pB前面 + if (pl.GetParamAtPoint(pA) > pl.GetParamAtPoint(pB)) { + const temp = pA; + pA = pB; + pB = temp; + } + const paramA = pl.GetParamAtPoint(pA); + const pls = pl.GetSplitCurves(paramA); + pl = pls[1] || pls[0]; + const paramB = pl.GetParamAtPoint(pB); + return pl.GetSplitCurves(paramB)[0]; + } + ; +} +/** X轴的平行线 */ +CurveManager.CreateXLine = (p) => new Line(new Vector3(p.x - 1000, p.y, p.z), new Vector3(p.x + 1000, p.y, p.z)); +/** Y轴的平行线 */ +CurveManager.CreateYLine = (p) => new Line(new Vector3(p.x, p.y - 1000, p.z), new Vector3(p.x, p.y + 1000, p.z)); +/** Z轴的平行线 */ +CurveManager.CreateZLine = (p) => new Line(new Vector3(p.x, p.y, p.z - 1000), new Vector3(p.x, p.y, p.z + 1000)); +/** 通过点集生成多段线 */ +CurveManager.CreatePolyline = (ps) => new Polyline(ps.map(p => { return { pt: p, bul: 0 }; })); + +//为了避免Core对UI库的依赖,导致测试用例失败,导致外部项目引用失败,我们分离了这个函数 +var Intent; +(function (Intent) { + Intent["NONE"] = "none"; + Intent["PRIMARY"] = "primary"; + Intent["SUCCESS"] = "success"; + Intent["WARNING"] = "warning"; + Intent["DANGER"] = "danger"; +})(Intent || (Intent = {})); +const ToasterInjectFunctions = []; +function Toaster(option) { + for (let f of ToasterInjectFunctions) + f(option); +} +const ToasterShowEntityMsgInjectFunctions = []; +function ToasterShowEntityMsg(option) { + for (let f of ToasterShowEntityMsgInjectFunctions) + f(option); + let logMsgs = [{ msg: option.msg }]; + if (option.ent) + logMsgs.push({ msg: "点击查看", entity: Array.isArray(option.ent) ? option.ent : [option.ent] }); + InteractionLog(logMsgs, LogType.Warning); +} + +function equaln(v1, v2, fuzz = 1e-5) { + return Math.abs(v1 - v2) <= fuzz; +} +function FixIndex(index, arr) { + let count = (arr instanceof Array) ? arr.length : arr; + if (index < 0) + return count + index; + else if (index >= count) + return index - count; + else + return index; +} +/** + * @param compart true => t2 , false => t1 + * @returns 索引 + */ +function Max(arr, compart) { + let best = arr[0]; + let bestIndex = 0; + for (let i = 1; i < arr.length; i++) { + let t1 = arr[i]; + if (compart(best, t1)) { + best = t1; + bestIndex = i; + } + } + return bestIndex; } let Hole = class Hole extends Entity { constructor() { super(...arguments); + this.allowHoleAtBoardEdge = false; //允许大孔面在板边缘 this.type = GangDrillType.Pxl; } get Height() { @@ -11734,6 +13086,15 @@ let Hole = class Hole extends Entity { this.type = t; } } + get AllowPxl() { + return this.allowHoleAtBoardEdge; + } + set AllowPxl(v) { + if (this.allowHoleAtBoardEdge !== v) { + this.WriteAllObjectRecord(); + this.allowHoleAtBoardEdge = v; + } + } Clone() { let ent = super.Clone(); ent.OtherHalfTongKong = null; @@ -11751,17 +13112,30 @@ let Hole = class Hole extends Entity { this.FId = file.ReadSoftObjectId(); this.MId = file.ReadSoftObjectId(); } - if (ver >= 6) { + if (ver > 5) { this.OtherHalfTongKong = file.ReadSoftObjectId(); } + if (ver > 6) { + this.allowHoleAtBoardEdge = file.ReadBool(); + } + else { + this.allowHoleAtBoardEdge = false; + } + if (ver > 8) + this._LockMaterial = file.ReadBool(); + else + this._LockMaterial = false; } WriteFile(file) { super.WriteFile(file); - file.Write(6); //ver + file.Write(9); file.Write(this._Height); file.WriteSoftObjectId(this.FId); file.WriteSoftObjectId(this.MId); file.WriteSoftObjectId(this.OtherHalfTongKong); + file.WriteBool(this.allowHoleAtBoardEdge); + // ver9 + file.WriteBool(this._LockMaterial); } }; __decorate([ @@ -11800,6 +13174,10 @@ let CylinderHole = CylinderHole_1 = class CylinderHole extends Hole { constructor() { super(); this._Radius = 1; + //同侧面 常规单头连杆、偏心轮、预埋件三合一排钻(原先是)是双头三合一 + this._SameSideHole = false; + this._GoodsId = ""; + this._GoodsSn = ""; this._Color = 1; } static CreateCylHole(radius, height, type) { @@ -11828,12 +13206,40 @@ let CylinderHole = CylinderHole_1 = class CylinderHole extends Hole { super.Height = v; } } + //同侧面排钻 + get SameSideHole() { + return this._SameSideHole; + } + set SameSideHole(value) { + if (this._SameSideHole !== value) { + this.WriteAllObjectRecord(); + this._SameSideHole = value; + } + } get Radius() { return this._Radius; } get BoundingBox() { return this.BoundingBoxInOCS.applyMatrix4(this._Matrix); } + get GoodsId() { + return this._GoodsId; + } + set GoodsId(value) { + if (this._GoodsId !== value) { + this.WriteAllObjectRecord(); + this._GoodsId = value; + } + } + get GoodsSn() { + return this._GoodsSn; + } + set GoodsSn(value) { + if (this._GoodsSn !== value) { + this.WriteAllObjectRecord(); + this._GoodsSn = value; + } + } /** * 返回对象在自身坐标系下的Box */ @@ -11888,7 +13294,7 @@ let CylinderHole = CylinderHole_1 = class CylinderHole extends Hole { GetObject3DByRenderType(renderType) { if (renderType === RenderType.Wireframe) return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)); - else if (renderType === RenderType.CustomNumber || renderType === RenderType.ModelGroove) + else if (renderType === RenderType.CustomNumber || renderType === RenderType.ModelGroove || renderType === RenderType.Edge) return; //不绘制了 // return new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex, FrontSide, true)); else @@ -11935,12 +13341,21 @@ let CylinderHole = CylinderHole_1 = class CylinderHole extends Hole { else { this.type = file.Read(); } + if (ver > 5) + this.SameSideHole = file.Read(); + if (ver > 6) { + this.GoodsId = file.Read(); + this.GoodsSn = file.Read(); + } } WriteFile(file) { super.WriteFile(file); - file.Write(5); //ver + file.Write(7); //ver file.Write(this._Radius); file.Write(this.type); + file.Write(this.SameSideHole); + file.Write(this.GoodsId); + file.Write(this.GoodsSn); } }; CylinderHole = CylinderHole_1 = __decorate([ @@ -11983,7 +13398,7 @@ function FastDrillingEdgeGeometry(radius, height) { CADFactory.RegisterObjectAlias(CylinderHole, "GangDrill"); const SCALAR = 0.1; -function CyHoleInBoard(cys, br, ocs, checkAll = false, allowPxl = false) { +function CyHoleInBoard(cys, br, ocs, checkAll = false) { if (!checkAll && cys.length === 1 && cys[0].Type === GangDrillType.Ymj) return true; const outline = br.ContourCurve; @@ -12028,7 +13443,7 @@ function CyHoleInBoard(cys, br, ocs, checkAll = false, allowPxl = false) { if (ymj) { let center = ymj.Position.applyMatrix4(ocs).setZ(0); let cir = new Circle(center, ymj.Radius - SCALAR); - return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center); + return outline.IntersectWith(cir, 0, 1e-4).length === 0 && outline.PtInCurve(center); } } else { @@ -12039,17 +13454,21 @@ function CyHoleInBoard(cys, br, ocs, checkAll = false, allowPxl = false) { if (plxs.every(cy => { let center = cy.Position.applyMatrix4(ocs).setZ(0); let cir = new Circle(center, pxl.Radius - SCALAR); - if (allowPxl || !HostApplicationServices.forceFilterPxl) - return outline.IntersectWith(cir, 0).length <= 1 && !outline.PtInCurve(center); + if (HostApplicationServices.forceFilterPxl) { + if (pxl.AllowPxl) + return outline.IntersectWith(cir, 0, 1e-4).length <= 1 && !outline.PtInCurve(center); + else + return outline.IntersectWith(cir, 0, 1e-4).length > 0 || !outline.PtInCurve(center); + } else - return outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center); + return outline.IntersectWith(cir, 0, 1e-4).length <= 1 && !outline.PtInCurve(center); })) return false; } if (woodPXL) { let center = woodPXL.Position.applyMatrix4(ocs).setZ(0); let cir = new Circle(center, woodPXL.Radius - SCALAR); - if (outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center)) + if (outline.IntersectWith(cir, 0, 1e-4).length > 0 || !outline.PtInCurve(center)) return false; } if (ljg) { @@ -12061,7 +13480,7 @@ function CyHoleInBoard(cys, br, ocs, checkAll = false, allowPxl = false) { c1.add(nor.multiplyScalar(ljg.Radius)); c2.add(nor.negate()); let rect = new Polyline().RectangleFrom2Pt(c1, c2); - let intPtsLen = outline.IntersectWith(rect, 0).length; + let intPtsLen = outline.IntersectWith(rect, 0, 1e-4).length; if (intPtsLen > 2 || (intPtsLen === 0 && !outline.PtInCurve(minPt))) return false; } @@ -12076,7 +13495,7 @@ function CyHoleInBoard(cys, br, ocs, checkAll = false, allowPxl = false) { let p4 = c2.clone().add(dir); let l1 = new Line(p1, p2); let l2 = new Line(p3, p4); - if (l1.IntersectWith(outline, 0).length !== 1 || l2.IntersectWith(outline, 0).length !== 1) + if (l1.IntersectWith(outline, 0, 1e-4).length !== 1 || l2.IntersectWith(outline, 0, 1e-4).length !== 1) return false; } } @@ -12148,338 +13567,33 @@ function SetBrHighHoleTypeFromRectHoleType(br, brRectHoleType) { br.BoardProcessOption[EBoardKeyList.DrillType] = DrillType.More; } -class BoardUVGenerator { - generateTopUV(geometry, vertices, indexA, indexB, indexC) { - var a_x = vertices[indexA * 3]; - var a_y = vertices[indexA * 3 + 1]; - var b_x = vertices[indexB * 3]; - var b_y = vertices[indexB * 3 + 1]; - var c_x = vertices[indexC * 3]; - var c_y = vertices[indexC * 3 + 1]; - return [ - new Vector2$1(a_x, a_y), - new Vector2$1(b_x, b_y), - new Vector2$1(c_x, c_y) - ]; - } - generateSideWallUV(geometry, vertices, indexA, indexB, indexC, indexD) { - var a_x = vertices[indexA * 3]; - var a_y = vertices[indexA * 3 + 1]; - var a_z = vertices[indexA * 3 + 2]; - var b_x = vertices[indexB * 3]; - var b_y = vertices[indexB * 3 + 1]; - var b_z = vertices[indexB * 3 + 2]; - var c_x = vertices[indexC * 3]; - var c_y = vertices[indexC * 3 + 1]; - var c_z = vertices[indexC * 3 + 2]; - var d_x = vertices[indexD * 3]; - var d_y = vertices[indexD * 3 + 1]; - var d_z = vertices[indexD * 3 + 2]; - let pts; - if (Math.abs(a_y - b_y) < 0.01) { - pts = [ - new Vector2$1(a_z - 1, a_x), - new Vector2$1(b_z - 1, b_x), - new Vector2$1(c_z - 1, c_x), - new Vector2$1(d_z - 1, d_x) - ]; - } - else { - pts = [ - new Vector2$1(a_z - 1, a_y), - new Vector2$1(b_z - 1, b_y), - new Vector2$1(c_z - 1, c_y), - new Vector2$1(d_z - 1, d_y) - ]; - } - return pts; - } -} -class BoardUVGenerator2 extends BoardUVGenerator { - generateTopUV(geometry, vertices, indexA, indexB, indexC) { - var a_x = vertices[indexA * 3]; - var a_y = vertices[indexA * 3 + 1]; - var b_x = vertices[indexB * 3]; - var b_y = vertices[indexB * 3 + 1]; - var c_x = vertices[indexC * 3]; - var c_y = vertices[indexC * 3 + 1]; - return [ - new Vector2$1(a_y, a_x), - new Vector2$1(b_y, b_x), - new Vector2$1(c_y, c_x) - ]; - } -} -let boardUVGenerator = new BoardUVGenerator(); -let boardUVGenerator2 = new BoardUVGenerator2(); +var FontType; +(function (FontType) { + FontType["YaHei"] = "yahei"; + FontType["SongTi"] = "songti"; + FontType["KaiTi"] = "KaiTi"; + FontType["FangSong"] = "FangSong"; + FontType["LiShu"] = "LiShu"; + FontType["HeiTi"] = "HeiTi"; + FontType["HuaWenLiShu"] = "HuaWenLiShu"; + FontType["HuaWenXingKai"] = "HuaWenXingKai"; +})(FontType || (FontType = {})); +[ + { label: "宋体", value: FontType.SongTi }, + { label: "雅黑", value: FontType.YaHei }, + { label: "楷体", value: FontType.KaiTi }, + { label: "仿宋", value: FontType.FangSong }, + { label: "隶书", value: FontType.LiShu }, + { label: "黑体", value: FontType.HeiTi }, + { label: "华文隶书", value: FontType.HuaWenLiShu }, + { label: "华文行楷", value: FontType.HuaWenXingKai } +]; -const _TerminateTaskInjectInteractionFunctions = []; -function TerminateCSGTask(task) { - for (let f of _TerminateTaskInjectInteractionFunctions) - f(task); -} - -var BoardType; -(function (BoardType) { - BoardType[BoardType["Layer"] = 0] = "Layer"; - BoardType[BoardType["Vertical"] = 1] = "Vertical"; - BoardType[BoardType["Behind"] = 2] = "Behind"; //背板 -})(BoardType || (BoardType = {})); -//纹路类型 -var LinesType; -(function (LinesType) { - /** 正纹 */ - LinesType[LinesType["Positive"] = 0] = "Positive"; - /** 反纹 */ - LinesType[LinesType["Reverse"] = 1] = "Reverse"; - /** 可翻转 */ - LinesType[LinesType["CanReversal"] = 2] = "CanReversal"; -})(LinesType || (LinesType = {})); -// 排版面 -var ComposingType; -(function (ComposingType) { - ComposingType[ComposingType["Positive"] = 0] = "Positive"; - ComposingType[ComposingType["Reverse"] = 1] = "Reverse"; - ComposingType[ComposingType["Arbitrary"] = 2] = "Arbitrary"; //任意 -})(ComposingType || (ComposingType = {})); -var BoardOpenDir; -(function (BoardOpenDir) { - BoardOpenDir[BoardOpenDir["Left"] = 1] = "Left"; - BoardOpenDir[BoardOpenDir["Right"] = 2] = "Right"; - BoardOpenDir[BoardOpenDir["Up"] = 3] = "Up"; - BoardOpenDir[BoardOpenDir["Down"] = 4] = "Down"; - BoardOpenDir[BoardOpenDir["None"] = 0] = "None"; -})(BoardOpenDir || (BoardOpenDir = {})); -var BrRelativePos; -(function (BrRelativePos) { - BrRelativePos["Front"] = "front"; - BrRelativePos["Back"] = "back"; - BrRelativePos["Top"] = "top"; - BrRelativePos["Bottom"] = "bottom"; - BrRelativePos["Left"] = "left"; - BrRelativePos["Right"] = "right"; - BrRelativePos["Div"] = "div"; -})(BrRelativePos || (BrRelativePos = {})); - -class PointShapeUtils { - //方形点表 - static SquarePts(size) { - return [ - new Vector3(-size, -size), - new Vector3(size, -size), - new Vector3(size, size), - new Vector3(-size, size), - new Vector3(-size, -size), - ]; - } - //方形外圈十字直线点表 - static OutsideLinePts(squareSize, lineLength) { - return [ - //-X - new Vector3(-squareSize, 0), - new Vector3(-lineLength, 0), - //X - new Vector3(squareSize, 0), - new Vector3(lineLength, 0), - //Y - new Vector3(0, squareSize), - new Vector3(0, lineLength), - //-Y - new Vector3(0, -squareSize), - new Vector3(0, -lineLength), - ]; - } - //十字直线点表 - static CrossLinePts(lineLength) { - return [ - new Vector3(0, -lineLength), - new Vector3(0, lineLength), - new Vector3(lineLength, 0), - new Vector3(-lineLength, 0), - ]; - } - static CrossLine3DPts(lineLength) { - return [ - [new Vector3(lineLength, 0), - new Vector3(-lineLength / 2, 0)], - [new Vector3(0, -lineLength / 2), - new Vector3(0, lineLength)], - [new Vector3(0, 0, -lineLength / 2), - new Vector3(0, 0, lineLength)], - ]; - } - static TrianglePts(size) { - return [ - new Vector3(size, -size), - new Vector3(0, size), - new Vector3(-size, -size), - new Vector3(size, -size), - ]; - } - static CirclePts(size) { - let pts = []; - let a = Math.PI * 2 / 8; - for (let i = 0; i < 9; i++) - pts.push(new Vector3(Math.sin(a * i) * size, Math.cos(a * i) * size)); - return pts; - } - static ObliqueCrossPts(size) { - return [new Vector3(-size, size), new Vector3(size, -size), new Vector3(-size, -size), new Vector3(size, size)]; - } - static ObliqueCrossLinePts(size) { - return [new Vector3(-size, size), new Vector3(size, -size), new Vector3(), new Vector3(-size, -size), new Vector3(size, size)]; - } - static SandClockPts(size) { - return [ - new Vector3(size, size), - new Vector3(-size, size), - new Vector3(size, -size), - new Vector3(-size, -size), - new Vector3(size, size), - ]; - } - static TangentPts(size) { - let pts = [ - new Vector3(-size, size), - new Vector3(size, size), - new Vector3(size / 2, size), - ]; - let a = Math.PI * 2 / 8; - for (let i = 0; i < 9; i++) - pts.push(new Vector3(Math.sin(a * i + Math.PI / 2) * size, Math.cos(a * i + Math.PI / 2) * size)); - return pts; - } - static PerPts(size) { - return [ - new Vector3(-size, size), - new Vector3(-size, -size), - new Vector3(size, -size), - new Vector3(0, -size), - new Vector3(0, 0), - new Vector3(-size, 0), - ]; - } - static LinesDirPts(len, width, lineType) { - if (lineType === LinesType.Reverse) { - return [ - new Vector3(-len / 2), new Vector3(-len / 2 + width / 2, width / 2), - new Vector3(-len / 2), new Vector3(-len / 2 + width / 2, -width / 2), - new Vector3(-len / 2), new Vector3(len / 2), - new Vector3(len / 2), new Vector3(len / 2 - width / 2, width / 2), - new Vector3(len / 2), new Vector3(len / 2 - width / 2, -width / 2), - ]; - } - else if (lineType === LinesType.Positive) - return [ - new Vector3(0, -len / 2), new Vector3(-width / 2, -len / 2 + width / 2), - new Vector3(0, -len / 2), new Vector3(width / 2, -len / 2 + width / 2), - new Vector3(0, -len / 2), new Vector3(0, len / 2), - new Vector3(0, len / 2), new Vector3(-width / 2, len / 2 - width / 2), - new Vector3(0, len / 2), new Vector3(width / 2, len / 2 - width / 2), - ]; - else { - let w1 = Math.min(len, width) / 5; - return [ - new Vector3(0, len / 2), new Vector3(0, -len / 2), - new Vector3(-width / 2), new Vector3(width / 2), - new Vector3(-width / 2), new Vector3(-width / 2 + w1, w1), - new Vector3(-width / 2), new Vector3(-width / 2 + w1, -w1), - new Vector3(width / 2), new Vector3(width / 2 - w1, w1), - new Vector3(width / 2), new Vector3(width / 2 - w1, -w1), - new Vector3(0, len / 2), new Vector3(-w1, len / 2 - w1), - new Vector3(0, len / 2), new Vector3(w1, len / 2 - w1), - new Vector3(0, -len / 2), new Vector3(-w1, -len / 2 + w1), - new Vector3(0, -len / 2), new Vector3(w1, -len / 2 + w1), - ]; - } - } - //开门方向纹路 - static LinesOpenDirPts(len, width, openDir) { - if (openDir === BoardOpenDir.Right) { - return [ - new Vector3(-width / 2, -len / 2), new Vector3(width / 2, 0), - new Vector3(width / 2, 0), new Vector3(-width / 2, len / 2) - ]; - } - else if (openDir === BoardOpenDir.Left) { - return [ - new Vector3(width / 2, -len / 2), new Vector3(-width / 2, 0), - new Vector3(-width / 2, 0), new Vector3(width / 2, len / 2) - ]; - } - else if (openDir === BoardOpenDir.Up) { - return [ - new Vector3(-width / 2, -len / 2), new Vector3(0, len / 2), - new Vector3(0, len / 2), new Vector3(width / 2, -len / 2) - ]; - } - else if (openDir === BoardOpenDir.Down) { - return [ - new Vector3(-width / 2, len / 2), new Vector3(0, -len / 2), - new Vector3(0, -len / 2), new Vector3(width / 2, len / 2) - ]; - } - } -} - -//为了避免Core对UI库的依赖,导致测试用例失败,导致外部项目引用失败,我们分离了这个函数 -var Intent; -(function (Intent) { - Intent["NONE"] = "none"; - Intent["PRIMARY"] = "primary"; - Intent["SUCCESS"] = "success"; - Intent["WARNING"] = "warning"; - Intent["DANGER"] = "danger"; -})(Intent || (Intent = {})); -const ToasterInjectFunctions = []; -function Toaster(option) { - for (let f of ToasterInjectFunctions) - f(option); -} -const ToasterShowEntityMsgInjectFunctions = []; -function ToasterShowEntityMsg(option) { - for (let f of ToasterShowEntityMsgInjectFunctions) - f(option); - let logMsgs = [{ msg: option.msg }]; - if (option.ent) - logMsgs.push({ msg: "点击查看", entity: Array.isArray(option.ent) ? option.ent : [option.ent] }); - InteractionLog(logMsgs, LogType.Warning); -} - -function equaln(v1, v2, fuzz = 1e-5) { - return Math.abs(v1 - v2) <= fuzz; -} -function FixIndex(index, arr) { - let count = (arr instanceof Array) ? arr.length : arr; - if (index < 0) - return count + index; - else if (index >= count) - return index - count; - else - return index; -} -/** - * @param compart true => t2 , false => t1 - * @returns 索引 - */ -function Max(arr, compart) { - let best = arr[0]; - let bestIndex = 0; - for (let i = 1; i < arr.length; i++) { - let t1 = arr[i]; - if (compart(best, t1)) { - best = t1; - bestIndex = i; - } - } - return bestIndex; -} - -var EMetalsType; -(function (EMetalsType) { - EMetalsType["Metals"] = "\u4E94\u91D1"; - EMetalsType["Comp"] = "\u7EC4\u4EF6"; -})(EMetalsType || (EMetalsType = {})); +var FindModifyStyle; +(function (FindModifyStyle) { + FindModifyStyle[FindModifyStyle["FuzzyQuery"] = 0] = "FuzzyQuery"; + FindModifyStyle[FindModifyStyle["PreciseQuery"] = 1] = "PreciseQuery"; +})(FindModifyStyle || (FindModifyStyle = {})); [EBoardKeyList.UpSealed, EBoardKeyList.DownSealed, EBoardKeyList.RightSealed, EBoardKeyList.LeftSealed]; var EFindType; @@ -12504,6 +13618,8 @@ var ECompareType; ECompareType["Greater"] = ">="; ECompareType["Less"] = "<="; ECompareType["Include"] = "//"; + ECompareType["Prefix"] = "\u524D\u7F00"; + ECompareType["Suffix"] = "\u540E\u7F00"; })(ECompareType || (ECompareType = {})); //门板位置类型 @@ -12648,7 +13764,7 @@ var EOrderType; })(EOrderType || (EOrderType = {})); const DefaultLayerBoardConfig = { - version: 3, + version: 4, type: BoardType.Layer, name: "层板", frontShrink: 0, @@ -12665,10 +13781,12 @@ const DefaultLayerBoardConfig = { calcFrontShrink: "0", calcLeftShrink: "0", calcRightShrink: "0", + exprCount: "1", + exprThickness: "18" }; Object.freeze(DefaultLayerBoardConfig); const DefaultVerticalBoardConfig = { - version: 3, + version: 4, type: BoardType.Vertical, name: "立板", frontShrink: 0, @@ -12684,10 +13802,12 @@ const DefaultVerticalBoardConfig = { calcSpaceSize: "0", calcBottomShrink: "0", calcFrontShrink: "0", + exprCount: "1", + exprThickness: "18" }; Object.freeze(DefaultVerticalBoardConfig); const DefaultBehindBoardConfig = { - version: 2, + version: 3, type: BoardType.Behind, name: "背板", leftExt: 0, @@ -12703,10 +13823,12 @@ const DefaultBehindBoardConfig = { count: 1, calcSpaceSize: "0", calcMoveDist: "0", + exprCount: "1", + exprThickness: "18" }; Object.freeze(DefaultBehindBoardConfig); const DefaultWineRackConfig = { - version: 5, + version: 6, type: EWineRackType.Oblique, wineRackStyle: EWineRackStyle.WholeLattice, arrayType: EWRackArrayType.ByWidth, @@ -12736,7 +13858,12 @@ const DefaultWineRackConfig = { brThick2: 18, isExtendsBH2: false, followNarrow: false, - useBoardProcessOption: true + useBoardProcessOption: true, + boardMatName: "", //板材名 + material: "", //材料 + color: "", //颜色 + roomName: "", //房名 + cabinetName: "", //柜名 }; Object.freeze(DefaultWineRackConfig); const DefaultTopBoardOption = { @@ -12755,7 +13882,7 @@ const DefaultTopBoardOption = { }; Object.freeze(DefaultTopBoardOption); const DefaultBottomBoardOption = { - version: 2, + version: 3, type: BoardType.Layer, name: "底板", isDraw: true, @@ -12774,6 +13901,7 @@ const DefaultBottomBoardOption = { isDrawStrengthenStrip: false, footerOffset: 0, divCount: 1, + bigHoleDir: FaceDirection.Front, }; Object.freeze(DefaultBottomBoardOption); const DefaultSideBoardOption = { @@ -12824,7 +13952,7 @@ const DefaultPointLightOption = { lightColor: "#FFFFFF", temperature: 6500, Intensity: 100, - IndirectLightingIntensity: 1, + IndirectLightingIntensity: 3, SpecularScale: 1, SourceRadius: 10, SoftSourceRadius: 0, @@ -12837,13 +13965,13 @@ const DefaultSpotLightOption = { lightColor: "#FFFFFF", temperature: 6500, Intensity: 100, - IndirectLightingIntensity: 1, + IndirectLightingIntensity: 3, SpecularScale: 1, - SourceRadius: 0, + SourceRadius: 10, SoftSourceRadius: 30, SourceLength: 0, Angle: 45, - InnerConeAngle: 0, + InnerConeAngle: 30, AttenuationRadius: 300, CaseShadow: true, ShowHelper: true, @@ -12854,7 +13982,7 @@ const DefaultRectAreaLightOption = { lightColor: "#FFFFFF", temperature: 6500, Intensity: 100, - IndirectLightingIntensity: 1, + IndirectLightingIntensity: 3, SpecularScale: 1, AttenuationRadius: 300, Width: 150, @@ -12866,24 +13994,33 @@ const DefaultRectAreaLightOption = { }; Object.freeze(DefaultRectAreaLightOption); const DefaultRightPlaneLightOption = { - version: 2, + version: 3, ShowHemiLight: true, ShowSunLight: true, SkyLightColor: "#FFFFFF", SkyLightIntensity: 1, - SkyLightIndirectLightingIntensity: 1, + SkyLightIndirectLightingIntensity: 3, SunLightIntensity: 50, - SunLightIndirectLightingIntensity: 1, + SunLightIndirectLightingIntensity: 3, SunLightColor: "#FFFFFF", SunLightTemperature: 6500, SunLightElevationDeg: 60, SunLightRotateDeg: 300, + SunLightSourceAngle: 0.5, ShowExposure: true, AutoExposure: false, ExposureCompensation: 0, SunTime: "默认", }; Object.freeze(DefaultRightPlaneLightOption); +const DefaultArcBoardOption = { + version: 1, + name: "圆弧板", + type: BoardType.Layer, + height: 1200, + thickness: 18, +}; +Object.freeze(DefaultArcBoardOption); const DefaultSingleBoardOption = { version: 1, name: "层板", @@ -12898,9 +14035,9 @@ const DefaultSingleBoardOption = { }; Object.freeze(DefaultSingleBoardOption); const DefaultClosingStripOption = { - version: 3, + version: 6, type: BoardType.Vertical, - name: "收口条", + name: "收口条", //辅助条占用 striptype: StripType.H, boardRelative: BrRelativePos.Left, width: 54, @@ -12909,11 +14046,16 @@ const DefaultClosingStripOption = { isDrawFuZhu: true, fzWidth: 80, fzThickness: 18, - addSKTCabinetName: true + addSKTCabinetName: true, + brName: "左收口条", + FuZhuType: StripType.V, + fuZhuBrName: '', + fuZhuMaterial: '', + fuZhuColor: '', }; Object.freeze(DefaultClosingStripOption); const DefaultBoardFindOption = { - version: 9, + version: 14, condition: { // layer: false, //这个KEY看起来没用了 height: false, @@ -12953,6 +14095,13 @@ const DefaultBoardFindOption = { edgeRemarkDown: false, edgeRemarkLeft: false, edgeRemarkRight: false, + [EBoardKeyList.SpliteHeight]: false, + [EBoardKeyList.SpliteWidth]: false, + [EBoardKeyList.SpliteThickness]: false, + useCurve: false, + noUseBr: false, + noUseHwd: false, + useText: false, }, compareType: { height: ECompareType.Equal, @@ -12971,12 +14120,22 @@ const DefaultBoardFindOption = { composingFace: ECompareType.Equal, openDir: ECompareType.Equal, [EBoardKeyList.KnifeRad]: ECompareType.Equal, + edgeRemarkUp: ECompareType.Equal, + edgeRemarkDown: ECompareType.Equal, + edgeRemarkLeft: ECompareType.Equal, + edgeRemarkRight: ECompareType.Equal, + [EBoardKeyList.SpliteHeight]: ECompareType.Equal, + [EBoardKeyList.SpliteWidth]: ECompareType.Equal, + [EBoardKeyList.SpliteThickness]: ECompareType.Equal, }, tolerance: { height: "", width: "", thickness: "", [EBoardKeyList.KnifeRad]: "", + [EBoardKeyList.SpliteHeight]: "", + [EBoardKeyList.SpliteWidth]: "", + [EBoardKeyList.SpliteThickness]: "", }, // layer: "0", 删除无用的key height: "", @@ -13010,10 +14169,15 @@ const DefaultBoardFindOption = { edgeRemarkDown: "", edgeRemarkLeft: "", edgeRemarkRight: "", + query: FindModifyStyle.FuzzyQuery, + [EBoardKeyList.SpliteHeight]: "", + [EBoardKeyList.SpliteWidth]: "", + [EBoardKeyList.SpliteThickness]: "", + appendRemark: Array.from({ length: 10 }, () => ["", "", AddRemarkType.Cover]), }; Object.freeze(DefaultBoardFindOption); const DefaultLatticOption = { - version: 3, + version: 4, arrayType: ELatticeArrayType.ByWidth, gripWidth: 100, gripDepth: 100, @@ -13036,10 +14200,15 @@ const DefaultLatticOption = { downCut: 4, linesType: LinesType.Reverse, useBoardProcessOption: true, + boardMatName: "", //板材名 + material: "", //材料 + color: "", //颜色 + roomName: "", //房名 + cabinetName: "", //柜名 }; Object.freeze(DefaultLatticOption); const DefaultDoorOption = { - version: 9, + version: 13, col: 2, row: 1, isAllSelect: true, @@ -13092,19 +14261,59 @@ const DefaultDoorOption = { lbHightDrillOption: { up: "", down: "", left: "", right: "" }, useBoardProcessOption: true, isModifyHardwareMaterial: false, - deviation: 100 //偏移量 + deviation: 100, //偏移量 + boardMatName: "", //板材名 + material: "", //材料 + color: "", //颜色 + roomName: "", //房名 + cabinetName: "", //柜名 + layerEdgeRemarkUp: '', //层板板边备注上下左右 + layerEdgeRemarkDown: '', + layerEdgeRemarkLeft: '', + layerEdgeRemarkRight: '', + verticalEdgeRemarkUp: '', //立板板边备注上下左右 + verticalEdgeRemarkDown: '', + verticalEdgeRemarkLeft: '', + verticalEdgeRemarkRight: '', + parseHinge: false, + sealColorUp: "", //门板封边颜色 + sealColorDown: "", + sealColorLeft: "", + sealColorRight: "", + reservedEdgeUp: "0", //门板预留边 + reservedEdgeDown: "0", + reservedEdgeLeft: "0", + reservedEdgeRight: "0", + layerSealColorUp: "", //层板封边颜色 + layerSealColorDown: "", + layerSealColorLeft: "", + layerSealColorRight: "", + layerReservedEdgeUp: "0", //层板预留边 + layerReservedEdgeDown: "0", + layerReservedEdgeLeft: "0", + layerReservedEdgeRight: "0", + verticalSealColorUp: "", //立板封边颜色 + verticalSealColorDown: "", + verticalSealColorLeft: "", + verticalSealColorRight: "", + verticalReservedEdgeUp: "0", //层板预留边 + verticalReservedEdgeDown: "0", + verticalReservedEdgeLeft: "0", + verticalReservedEdgeRight: "0", }; Object.freeze(DefaultDoorOption); const DefaultHingeOption = { + version: 1, hingeCount: 0, hindeTopDist: 0, hindeBottomDist: 0, useRule: false, - deviation: 100 + deviation: 100, + parseHinge: false, }; Object.freeze(DefaultHingeOption); const DefaultDrawerOption = { - version: 7, + version: 10, col: 1, row: 1, isAllSelect: true, @@ -13124,6 +14333,7 @@ const DefaultDrawerOption = { thickness: 18, depth: 0, isAuto: true, + isFloor50: true, boardName: "", handleAngle: 90, handleHorPos: HandleHorPos.Mid, @@ -13145,6 +14355,19 @@ const DefaultDrawerOption = { lbHightDrillOption: { up: "", down: "", left: "", right: "" }, useBoardProcessOption: true, isModifyHardwareMaterial: false, + boardMatName: "", //板材名 + material: "", //材料 + color: "", //颜色 + roomName: "", //房名 + cabinetName: "", //柜名 + sealColorUp: "", //抽屉立板封边颜色 + sealColorDown: "", + sealColorLeft: "", + sealColorRight: "", + reservedEdgeUp: "0", //抽屉立板预留边 + reservedEdgeDown: "0", + reservedEdgeLeft: "0", + reservedEdgeRight: "0", }; Object.freeze(DefaultDrawerOption); const DefaultBoardBatchCurtailOption = { @@ -13188,7 +14411,12 @@ const DefaultLatticeConfig = { upCut: 0, downCut: 4, linesType: LinesType.Reverse, - useBoardProcessOption: true + useBoardProcessOption: true, + boardMatName: "", //板材名 + material: "", //材料 + color: "", //颜色 + roomName: "", //房名 + cabinetName: "", //柜名 }; Object.freeze(DefaultLatticeConfig); const DefaultNailOption = { @@ -13203,7 +14431,7 @@ const DefaultNailOption = { count: 2, rad: 2.5, length: 34, - depth: 11 + depth: 11, }; Object.freeze(DefaultNailOption); const DefaultCylinederMetalsOption = { @@ -13246,7 +14474,7 @@ const DefaultExtruderMetalsOption = { }; Object.freeze(DefaultExtruderMetalsOption); const DefaultCompositeMetalsOption = { - version: 2, + version: 3, type: EMetalsType.Metals, isSplite: false, isSplitePrice: false, @@ -13265,6 +14493,8 @@ const DefaultCompositeMetalsOption = { material: "", comments: "", isHole: true, + goodsId: "", + goodsSn: "" }; Object.freeze(DefaultCompositeMetalsOption); const DefaultToplineMetalsOption = { @@ -13282,10 +14512,12 @@ const DefaultToplineMetalsOption = { comments: "", addLen: "0", isHole: false, + goodsId: "", + goodsSn: "" }; Object.freeze(DefaultToplineMetalsOption); const DefaultBoardProcessOption = { - version: 4, + version: 5, roomName: "", cabinetName: "", boardName: "", @@ -13313,6 +14545,16 @@ const DefaultBoardProcessOption = { edgeRemarkLeft: "", edgeRemarkRight: "", highBoardEdgeRemark: [], + reservedEdgeUp: "0", + reservedEdgeDown: "0", + reservedEdgeLeft: "0", + reservedEdgeRight: "0", + highReservedEdge: [], + sealColorUp: "", + sealColorDown: "", + sealColorLeft: "", + sealColorRight: "", + sealColorType: "", }; Object.freeze(DefaultBoardProcessOption); const DefaultCurve2RecOption = { @@ -13479,7 +14721,7 @@ const DefaultR2bOption = { }; Object.freeze(DefaultR2bOption); const DefaultR2b2Option = { - version: 1, + version: 2, depthExpr: "W", drillType: "", sealedDown: "1", @@ -13490,10 +14732,16 @@ const DefaultR2b2Option = { maxThickness: 20, layerShrink: 0, vertialShrink: 0, + useBoardProcessOption: true, + boardMatName: "", //板材名 + material: "", //材料 + color: "", //颜色 + roomName: "", //房名 + cabinetName: "", //柜名 }; Object.freeze(DefaultR2b2Option); ({ - version: 5, + version: 7, isAll: true, isHide: true, isDelete: false, @@ -13524,8 +14772,12 @@ Object.freeze(DefaultR2b2Option); circle: false, arc: false, custom: false, + spotlight: false, + pointLight: false, + rectAreaLight: false, customBoardName: "", - matchType: ECompareType.Equal + matchType: ECompareType.Equal, + text: false, }); const DefaultCommonPanelOption = { version: 1, @@ -13538,7 +14790,7 @@ const DefaultDatalistOption = { }; Object.freeze(DefaultDatalistOption); const DefaultAutoDimBrsOption = { - version: 1, + version: 2, total: true, out: true, inW: false, @@ -13554,6 +14806,8 @@ const DefaultAutoDimBrsOption = { forBoardName: false, forBoardNameStr: "", forBoardNameType: ForBoardNameType.Same, + insideOffset: false, + insideOffsetDist: 0 }; Object.freeze(DefaultAutoDimBrsOption); const DefaultWindowPanelOption = { @@ -13587,23 +14841,31 @@ const DefaultDimStyleOption = { }; Object.freeze(DefaultDimStyleOption); const DefaultChangeColorByBoardMaterialOption = { + version: 1, accordThickness: false, accordMaterialColor: true, accordMaterial: true, - accordMaterialName: true + accordMaterialName: true, + includeNoChaiDanBoard: true, }; Object.freeze(DefaultChangeColorByBoardMaterialOption); const DefaultShareBoardInfConfigurationOption = { + version: 2, Physical2EdgeColor: 7, VisualStyle: RenderType.Conceptual, Viewport: ViewDirection.Southwest, IsExportBoard: true, IsExportHardware: true, showBom: true, + expireDays: "", + IsExportCurve: true, + IsExportDimension: true, + IsExportText: true }; Object.freeze(DefaultShareBoardInfConfigurationOption); const DefaultBulkheadCeilingOption = { - Item: [] + Item: [], + Height: 300 }; Object.freeze(DefaultBulkheadCeilingOption); const DefaultChangeColorByRoomOrCabinetOption = { @@ -13612,11 +14874,31 @@ const DefaultChangeColorByRoomOrCabinetOption = { }; Object.freeze(DefaultChangeColorByRoomOrCabinetOption); const DefaultDoorRelatesInfoOption = { - version: 1, - hingeOption: [] + version: 3, + hingeOption: [], + hingeDecimal: 1, + filterNoDoor: false, }; Object.freeze(DefaultDoorRelatesInfoOption); -({ +const DefaultPartsAnalysisOption = { + version: 1, + PartsOption: [ + ["name", true], + ["factory", false], + ["brand", false], + ["model", false], + ["spec", true], + ["material", false], + ["color", false], + ["unit", false], + ["count", true], + ["comments", false], + ["process", false], + ["actualExpr", false], + ] +}; +Object.freeze(DefaultPartsAnalysisOption); +const DefaultFastDimOption = { filterSmallSize: false, filterSmallSizeValue: 0, filterAppointSize: false, @@ -13624,7 +14906,102 @@ Object.freeze(DefaultDoorRelatesInfoOption); filterAppointForBoardName: false, filterAppointForBoardNameValues: "", conditionType: ForBoardNameType.Same, -}); +}; +Object.freeze(DefaultFastDimOption); +const DefaultOneClickInspectionOption = { + version: 2, + InspectionOption: { + isInterfere: true, + isMaxSizeBoard: true, + isMinSizeBoard: true, + isModel: true, + isDrill: true, + isSpecialBoardContour: true, + isSplitBoard: true, + isDrawHole: true, + }, + excludeDrawHoleOption: { + boardName: false, + boardNameValue: "", + processingGroupName: false, + processingGroupNameValue: "", + boardThickness: false, + boardThicknessValue: 18, + IsSplitBoard: false, + boardNameCompareType: ECompareType.Include, + processingGroupNameCompareType: ECompareType.Include, + boardThicknessCompareType: ECompareType.Less, + }, + excludeInterfereOption: { + boardName: false, + boardNameValue: "", + processingGroupName: false, + processingGroupNameValue: "", + hwComposityName: false, + hwComposityNameValue: "", + noChaiDanBoard: false, + boardNameCompareType: ECompareType.Include, + processingGroupNameCompareType: ECompareType.Include, + hwComposityNameCompareType: ECompareType.Include, + } +}; +Object.freeze(DefaultOneClickInspectionOption); +const DefaultArcBoardGrooveOption = { + version: 3, + isDrawArcGroove: true, + retainedThickness: "2", + knifeRadius: "3", + grooveAddLength: "0", + grooveAddWidth: "0", + grooveAddDepth: "0", + grooveSpacing2: "6", + grooveWidth2: "6", + arcExtension2: "0", + retainedThickness2: "2", + knifeRadius2: "3", + grooveAddLength2: "0", + grooveAddWidth2: "0", + grooveAddDepth2: "0", + arcBoardFeedProcess: ArcBoardFeedProcess.Slots, +}; +Object.freeze(DefaultArcBoardGrooveOption); +const DefaultSpaceParseOption = { + autoParseDepth: false, +}; +Object.freeze(DefaultSpaceParseOption); +const DefaultEditViewOption = { + version: 1, + hight: 60, + renderType: false, + renderTypeValue: "概念", + viewDir: false, + viewDirValue: "左视图", + roomName: false, + cabinetName: false, + boardMaterialName: false, + material: false, + color: false, + page: false, + date: false, + designer: false, + sheetName: false, + hideDoor: false, + hideDrawer: false, + hideDim: false, + hideCurve: false, + hideModel: false, + hideLayer: false, + hideLayerValue: "", + showLayer: false, + showLayerValue: "" +}; +Object.freeze(DefaultEditViewOption); +const DefaultFontStyleOption = { + height: 60, + fontType: FontType.YaHei, + widthFactor: 1, +}; +Object.freeze(DefaultFontStyleOption); /** * 使用轮廓和扫描路径构建扫描几何体,实现衣柜中的顶线或者地脚线之类的实体. @@ -14081,6 +15458,7 @@ var SweepSolid_1; let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { constructor(contour, pathCurve) { super(); + this._DisplayAccuracy = 0; this._Contour = contour; this._PathCurve = pathCurve; if (this._Contour && this._Contour.Id) @@ -14107,6 +15485,16 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { } return [this._Contour.Clone().ApplyMatrix(this._Matrix), this._PathCurve.Clone().ApplyMatrix(this._Matrix)]; } + get DisplayAccuracy() { + return this._DisplayAccuracy; + } + set DisplayAccuracy(v) { + if (!equaln$1(v, this._DisplayAccuracy)) { + this.WriteAllObjectRecord(); + this._DisplayAccuracy = v; + this.Update(); + } + } get Contour() { return this._Contour; } @@ -14188,6 +15576,10 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { let box = contour.BoundingBox; contour = new Polyline().RectangleFrom2Pt(box.min, box.max); } + if (this._PathCurve instanceof Arc || this._PathCurve instanceof Circle || this._PathCurve instanceof Polyline) { + this._PathCurve.DisplayAccuracy = this._DisplayAccuracy; + } + this._Contour.DisplayAccuracy = this._DisplayAccuracy; this._MeshGeometry = new SweepGeometry(contour, this._PathCurve); this._EdgeGeometry = this._MeshGeometry.EdgeGeom; this._LineGeom = this._MeshGeometry.LineGeom; @@ -14205,8 +15597,8 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { return this._EdgeGeometry; } InitDrawObject(renderType) { - if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) { - let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)); + if (renderType === RenderType.Wireframe) { + let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex)); // for (let p of this.Paths) // { // p.IsEmbedEntity = true; @@ -14219,7 +15611,14 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { return line; } else if (renderType === RenderType.Conceptual) { - return new Object3D().add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); + return new Object3D().add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); + } + // 概念透明 + else if (renderType === RenderType.ConceptualTransparent) { + let color = this.DrawColorIndex; + if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) + color = 8; + return new Object3D().add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); } else if (renderType === RenderType.Physical) return new Mesh(this.MeshGeometry, this.MeshMaterial); @@ -14257,10 +15656,10 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { } UpdateDrawObject(renderType, obj) { DisposeThreeObj(obj); - if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) { + if (renderType === RenderType.Wireframe) { let l = obj; l.geometry = this.EdgeGeometry; - l.material = ColorMaterial.GetLineMaterial(this.ColorIndex); + l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex); // Object3DRemoveAll(l); // for (let p of this.Paths) // { @@ -14273,7 +15672,15 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { } else if (renderType === RenderType.Conceptual) { Object3DRemoveAll(obj); - return obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); + return obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); + } + // 概念透明 + else if (renderType === RenderType.ConceptualTransparent) { + Object3DRemoveAll(obj); + let color = this.DrawColorIndex; + if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) + color = 8; + return obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); } else if (renderType === RenderType.Physical) { let mesh = obj; @@ -14299,11 +15706,19 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { UpdateDrawObjectMaterial(type, obj) { if (type === RenderType.Wireframe) { let l = obj; - l.material = ColorMaterial.GetLineMaterial(this.ColorIndex); + l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex); } else if (type === RenderType.Conceptual) { let mesh = obj.children[0]; - mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex); + mesh.material = ColorMaterial.GetConceptualMaterial(this.DrawColorIndex); + } + // 概念透明 + else if (type === RenderType.ConceptualTransparent) { + let mesh = obj.children[0]; + let color = this.DrawColorIndex; + if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) + color = 8; + mesh.material = ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide); } else if (type === RenderType.Physical2) { let mesh = obj.children[0]; @@ -14329,7 +15744,7 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { let size = box.getSize(new Vector3); return new OBB(MoveMatrix(box.min), size.multiplyScalar(0.5)); } - GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum) { switch (snapMode) { case ObjectSnapMode.End: return this.GetEndPoint(); @@ -14340,27 +15755,41 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { case ObjectSnapMode.Per: case ObjectSnapMode.Tan: { - if (Array.isArray(this._PathCurve)) { - const points = []; - for (let path of this._PathCurve) { - let contour = path.Clone(); - contour.ApplyMatrix(this.OCS); - let pts = contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform); - if (snapMode === ObjectSnapMode.Mid) - points.push(...pts, ...this.GetMidPoints()); - else - points.push(...pts); + let pts = []; + //拷贝来自圆弧板最近点捕捉 + if (snapMode === ObjectSnapMode.Nea) { + //这里实现对线框的快速捕捉 + let edgeGeom = this.EdgeGeometry; + let pos = edgeGeom.getAttribute("position"); + let p1 = new Vector3; + let p2 = new Vector3; + let line = new Line(p1, p2); + line.ApplyMatrix(this.OCSNoClone); + let sel = frustum["_select_"]; + for (let y = 0; y < pos.count; y += 2) { + p1.fromArray(pos.array, y * 3); + p2.fromArray(pos.array, (y + 1) * 3); + p1.applyMatrix4(this._Matrix); + p2.applyMatrix4(this._Matrix); + sel.WorldToScreenPoint(p1); + sel.WorldToScreenPoint(p2); + if (sel.IntersectLine(p1, p2)) { + p1.fromArray(pos.array, y * 3); + p2.fromArray(pos.array, (y + 1) * 3); + arrayPushArray$1(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)); + } } - return points; - } - else { - let contour = this._PathCurve.Clone(); - contour.ApplyMatrix(this.OCS); - let pts = contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform); - if (snapMode === ObjectSnapMode.Mid) - return [...pts, ...this.GetMidPoints()]; return pts; } + let pathArr = Array.isArray(this._PathCurve) ? this._PathCurve : [this._PathCurve]; + for (let path of pathArr) { + let contour = path.Clone(); + contour.ApplyMatrix(this.OCSNoClone); + arrayPushArray$1(pts, contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)); + if (snapMode === ObjectSnapMode.Mid) + arrayPushArray$1(pts, this.GetMidPoints()); + } + return pts; } } return []; @@ -14451,6 +15880,8 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { let shapePts3d = shapePts2d.map(AsVector3); let isClosePath = equalv3(pathPts[0], pathPts[pathPts.length - 1], 1e-3); let pts = []; //端点 + if (!isClosePath) + pts.push(...ProjectionToPlane(shapePts3d, pathNormals[0], pathPts[0], undefined, pathPts[1])); //遍历所有的路径节点进行顶点投射 for (let i = 1; i < pathPts.length; i++) { if (i === pathPts.length - 1) { @@ -14682,10 +16113,16 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { } } } + if (ver > 2) + this._LockMaterial = file.ReadBool(); + else + this._LockMaterial = false; + if (ver > 3) + this._DisplayAccuracy = file.Read(); } WriteFile(file) { super.WriteFile(file); - file.Write(2); //ver + file.Write(4); //ver file.WriteObject(this._Contour); if (Array.isArray(this._PathCurve)) { file.Write(this._PathCurve.length); @@ -14696,6 +16133,10 @@ let SweepSolid = SweepSolid_1 = class SweepSolid extends Entity { file.Write(1); file.WriteObject(this._PathCurve); } + // ver3 + file.WriteBool(this._LockMaterial); + // ver4 + file.Write(this._DisplayAccuracy); } }; SweepSolid.UseRectFakerContour = false; @@ -14806,7 +16247,7 @@ let HardwareTopline = class HardwareTopline extends SweepSolid { } _ReadFile(file) { super._ReadFile(file); - file.Read(); //1 + let ver = file.Read(); //1 this._contourRotation = file.Read(); this.HardwareOption.addLen = file.Read(); this.HardwareOption.name = file.Read(); @@ -14827,10 +16268,18 @@ let HardwareTopline = class HardwareTopline extends SweepSolid { d[1] = file.Read(); this.DataList.push(d); } + if (ver > 1) { + this.HardwareOption.goodsId = file.Read(); + this.HardwareOption.goodsSn = file.Read(); + } + if (ver > 2) + this._LockMaterial = file.ReadBool(); + else + this._LockMaterial = false; } WriteFile(file) { super.WriteFile(file); - file.Write(1); //ver + file.Write(3); //ver file.Write(this._contourRotation); file.Write(this.HardwareOption.addLen); file.Write(this.HardwareOption.name); @@ -14848,6 +16297,10 @@ let HardwareTopline = class HardwareTopline extends SweepSolid { file.Write(data[0]); file.Write(data[1]); } + file.Write(this.HardwareOption.goodsId); + file.Write(this.HardwareOption.goodsSn); + // ver3 + file.WriteBool(this._LockMaterial); } }; __decorate([ @@ -14872,6 +16325,10 @@ class LookOverBoardInfosTool { return obj.Name; }); }; + // 显示复合实体特殊备注 + this.GetTranslatedHardwareRemarks = (entity, dataLength) => { + return entity.DataList.map(([key, value], i) => `${lookOverBoardInfosTool.ParseSpec(entity, key, dataLength)}:${lookOverBoardInfosTool.ParseSpec(entity, value, dataLength)}`); + }; } GetCount(brs, options = null, IsBbsCountChaidan) { let drillCount = []; @@ -14884,12 +16341,28 @@ class LookOverBoardInfosTool { if (this.drillTypeMap.size > 0) for (let [k, v] of this.drillTypeMap) { if (v[0] instanceof Hole) - if (k === "木销") - drillCount.push({ name: k, count: v.length }); + if (k === "木销") { + for (let drill of v) { + let goodsSn = drill.GoodsSn; + let drillGroup = drillCount.find(d => d.name === k && d.goodsSn === goodsSn); //区分排钻商品ID + if (drillGroup) + drillGroup.count += 1; + else + drillCount.push({ name: k, count: 1, goodsSn, goodsId: drill.GoodsId }); + } + } else if (k === "层板钉") drillCount.push({ name: k, count: v.length }); - else - drillCount.push({ name: k, count: v.length }); + else { + for (let drill of v) { + let goodsSn = drill.GoodsSn; + let drillGroup = drillCount.find(d => d.name === k && d.goodsSn === goodsSn); //区分排钻商品ID + if (drillGroup) + drillGroup.count += 1; + else + drillCount.push({ name: k, count: 1, goodsSn, goodsId: drill.GoodsId }); + } + } else { this.ParseHardwareCount(k, v, hardwareCount); } @@ -14930,10 +16403,10 @@ class LookOverBoardInfosTool { hardwares.push(e); } for (let h of hardwares) { - let { name, unit, factory, spec, model, brand } = h.HardwareOption; + let { name, unit, factory, spec, model, brand, goodsSn } = h.HardwareOption; let tags = this.ParseProcessingGroupTags(h); - // :230行 代码对关联复合实体又进行一遍分析 需同步修改 - addDrillToMap(`${name},${unit},${factory},${this.ParseSpec(h, spec)},${this.ParseSpec(h, model)},${brand},${tags.join(",")}`, h); + // :254行 代码对关联复合实体又进行一遍分析 需同步修改 + addDrillToMap(`${name},${unit},${this.ParseSpec(h, factory)},${this.ParseSpec(h, spec)},${this.ParseSpec(h, model)},${this.ParseSpec(h, brand)},${tags.join(",")},${goodsSn}`, h); } this.UpdateBoardMap(brsProps); //统计 排钻 封边 关联的五金(排钻?) @@ -15022,10 +16495,10 @@ class LookOverBoardInfosTool { for (const mId of br.RelativeHardware) { let metal = mId?.Object; if (metal && !metal.IsErase && metal.HardwareOption) { - let { name, unit, factory, spec, model, brand } = metal.HardwareOption; + let { name, unit, factory, spec, model, brand, goodsSn } = metal.HardwareOption; let tags = this.ParseProcessingGroupTags(metal); - // :113行 代码对关联复合实体又进行一遍分析 需同步修改 - addDrillToMap(`${name},${unit},${factory},${this.ParseSpec(metal, spec)},${this.ParseSpec(metal, model)},${brand},${tags.join(",")}`, metal); + // :135行 代码对关联复合实体又进行一遍分析 需同步修改 + addDrillToMap(`${name},${unit},${this.ParseSpec(metal, factory)},${this.ParseSpec(metal, spec)},${this.ParseSpec(metal, model)},${this.ParseSpec(metal, brand)},${tags.join(",")},${goodsSn}`, metal); } } //封边 @@ -15039,8 +16512,7 @@ class LookOverBoardInfosTool { }); throw "错误:板扣除封边失败!"; } - let sealData = Production.ParseSealData(sealdData); - let color = br.BoardProcessOption[EBoardKeyList.Color]; + let { seals: sealData, reservedEdges } = Production.ParseSealData(sealdData, br.BoardProcessOption.color); //封边留头量 let sealReserve = HostApplicationServices.sealReserve * 2; let thickness = this.GetBoardThickness(br); @@ -15048,9 +16520,10 @@ class LookOverBoardInfosTool { if (equaln$1(0, data.size)) continue; data.length += sealReserve; + let color = data.sealColor; let k = `${data.size}-${FixedNotZero(thickness, 2)}-${color}`; if (options && options.sealGruopKey) { - options.sealGruopKey(k, br, data.size); + options.sealGruopKey(k, br, thickness, data); } let len = this.sealMap.get(k); if (!len) @@ -15212,50 +16685,1276 @@ function AddEntityDrawObject(obj, embedEntity, renderType = RenderType.Wireframe obj.add(embedObject); } -/** Epsilon used during determination of near zero distances. - * @default - */ -const EPS = 5e-2; +function CSGIntersect(csg1, csg2, csg2tranfrom) { + //因为内部使用geom3进行box cache 所以我们新建了一个geom3 避免被cache导致错误 + let csg1Clone = geom3.create(csg1.polygons.concat()); + let csg2Clone = geom3.create(csg2.polygons.concat()); + csg2Clone.transforms = csg2tranfrom.elements; + return intersect(csg1Clone, csg2Clone); +} -// ////////////////////////////// -// tolerance: The maximum difference for each parameter allowed to be considered a match -class FuzzyFactory { - constructor(numdimensions = 3, tolerance = EPS) { - this.lookuptable = {}; - this.multiplier = 1.0 / tolerance; +/** + * 解决 THREEBSP(CSG) 产生的结果没有办法得到分裂的个数. + * 本类分析了THREEBSP的组合情况. + * + * Example: + * + * let topology = new BSPGroupParse(csg); + * topology.parse(); + */ +class BSPGroupParse { + constructor(bsp, fractionDigits = 1) { + this.fractionDigits = fractionDigits; + this.map = new Map(); + this.vecMap = new Map(); + if (bsp) + for (let poly of bsp.polygons) + this.Add(poly); } - // let obj = f.lookupOrCreate([el1, el2, el3], function(elements) {/* create the new object */}); - // Performs a fuzzy lookup of the object with the specified elements. - // If found, returns the existing object - // If not found, calls the supplied callback function which should create a new object with - // the specified properties. This object is inserted in the lookup database. - lookupOrCreate(els, object) { - let hash = ""; - let multiplier = this.multiplier; - for (let el of els) { - let valueQuantized = Math.round(el * multiplier); - hash += valueQuantized + "/"; + Add(poly) { + let strs = poly.vertices.map(p => this.GenerateP(p)); + let str0 = strs[0]; + let s0 = this.Get(str0); + for (let i = 1; i < strs.length; i++) { + let stri = strs[i]; + s0.add(stri); + this.Get(stri).add(str0); } - if (hash in this.lookuptable) - return this.lookuptable[hash]; - else { - let hashparts = els.map(el => { - let q0 = Math.floor(el * multiplier); - let q1 = q0 + 1; - return ["" + q0 + "/", "" + q1 + "/"]; + } + /** + * 返回组合点 + */ + Parse() { + let set = new Set([...this.map.keys()]); + let res = []; + while (set.size > 0) { + let fp = set[Symbol.iterator]().next().value; + set.delete(fp); + let cset = new Set(); + cset.add(fp); + this.GetPts(fp, cset, set); + let pts = [...cset].map(str => { + let v3 = this.vecMap.get(str); + return new Vector3().fromArray(v3); }); - let numelements = els.length; - let numhashes = 1 << numelements; - for (let hashmask = 0; hashmask < numhashes; ++hashmask) { - let hashmaskShifted = hashmask; - hash = ""; - hashparts.forEach(hashpart => { - hash += hashpart[hashmaskShifted & 1]; - hashmaskShifted >>= 1; - }); - this.lookuptable[hash] = object; + res.push(pts); + } + return res; + } + Get(vstr) { + if (!this.map.has(vstr)) { + let s = new Set(); + this.map.set(vstr, s); + return s; + } + return this.map.get(vstr); + } + GetPts(p, cset, oset) { + let strs = this.map.get(p); + for (let str of strs) { + if (!cset.has(str)) { + cset.add(str); + oset.delete(str); + this.GetPts(str, cset, oset); } - return object; + } + } + GenerateP(v) { + let str = v.map(n => ToFixed(n, this.fractionDigits)).join(","); + this.vecMap.set(str, v); + return str; + } +} + +function BoardSideModelCSGBuilder(board) { + const sideModeingCsgs = []; + if (!(board.SideModelingMap.size || board.RelevanceSideModelMap.size)) + return sideModeingCsgs; + let con = GetBoardContour(board); + if (!con) + return sideModeingCsgs; + let inverseZ = con.Area2 < 0; + let cus = con.Explode(); + const mirrorMtxZ = MakeMirrorMtx(ZAxis); + for (let [index, soilds] of board.AllSideModelGrooveMap) { + let cu = cus[index]; + if (!cu) + continue; + let mt4 = GetSideCuFaceMtx(cus[index], inverseZ); + for (let soild of soilds) { + let s = soild.Clone(); + let geom3 = Geometry2CSG2(s.MeshGeometry); + geom3 = transform$1(mirrorMtxZ.elements, geom3); + geom3 = transform$1(mt4.clone().multiply(soild.OCS).elements, geom3); + sideModeingCsgs.push(geom3); + } + } + return sideModeingCsgs; +} +function GetSideCuFaceMtx(cu, inverseZ = false) { + let x = cu.GetFirstDeriv(0).normalize(); + let y = ZAxis; + let z = x.clone().cross(y); + if (inverseZ) + z.negate(); + let basePt = cu.StartPoint; + return new Matrix4().makeBasis(x, y, z).setPosition(basePt); +} + +class BoardUVGenerator { + generateTopUV(geometry, vertices, indexA, indexB, indexC) { + const a_x = vertices[indexA * 3]; + const a_y = vertices[indexA * 3 + 1]; + const b_x = vertices[indexB * 3]; + const b_y = vertices[indexB * 3 + 1]; + const c_x = vertices[indexC * 3]; + const c_y = vertices[indexC * 3 + 1]; + return [ + new Vector2$1(a_x, a_y), + new Vector2$1(b_x, b_y), + new Vector2$1(c_x, c_y) + ]; + } + generateSideWallUV(geometry, vertices, indexA, indexB, indexC, indexD) { + const a_x = vertices[indexA * 3]; + const a_y = vertices[indexA * 3 + 1]; + const a_z = vertices[indexA * 3 + 2]; + const b_x = vertices[indexB * 3]; + const b_y = vertices[indexB * 3 + 1]; + const b_z = vertices[indexB * 3 + 2]; + const c_x = vertices[indexC * 3]; + const c_y = vertices[indexC * 3 + 1]; + const c_z = vertices[indexC * 3 + 2]; + const d_x = vertices[indexD * 3]; + const d_y = vertices[indexD * 3 + 1]; + const d_z = vertices[indexD * 3 + 2]; + if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x)) { + return [ + new Vector2$1(a_z - 1, a_x), + new Vector2$1(b_z - 1, b_x), + new Vector2$1(c_z - 1, c_x), + new Vector2$1(d_z - 1, d_x) + ]; + } + else { + return [ + new Vector2$1(a_z - 1, a_y), + new Vector2$1(b_z - 1, b_y), + new Vector2$1(c_z - 1, c_y), + new Vector2$1(d_z - 1, d_y) + ]; + } + } +} +class BoardUVGenerator2 extends BoardUVGenerator { + generateTopUV(geometry, vertices, indexA, indexB, indexC) { + const a_x = vertices[indexA * 3]; + const a_y = vertices[indexA * 3 + 1]; + const b_x = vertices[indexB * 3]; + const b_y = vertices[indexB * 3 + 1]; + const c_x = vertices[indexC * 3]; + const c_y = vertices[indexC * 3 + 1]; + return [ + new Vector2$1(a_y, a_x), + new Vector2$1(b_y, b_x), + new Vector2$1(c_y, c_x) + ]; + } +} +let boardUVGenerator = new BoardUVGenerator(); +let boardUVGenerator2 = new BoardUVGenerator2(); + +function ScaleUV(geo, scale = 1e-3) { + for (let uvsg of geo.faceVertexUvs) { + for (let uvs of uvsg) { + for (let uv of uvs) { + uv.multiplyScalar(scale); + } + } + } +} +function ScaleUV2(geo, ocs, xScale = 1e-3, yScale = 1e-3, isInvert = false) { + for (let uvsg of geo.faceVertexUvs) { + for (let uvs of uvsg) { + for (let uv of uvs) { + let p = new Vector3(uv.x, uv.y).applyMatrix4(ocs); + uv.x = p.x; + uv.y = p.y; + if (isInvert) { + uv.x /= yScale; + uv.y /= xScale; + } + else { + uv.x /= xScale; + uv.y /= yScale; + } + } + } + } +} + +class ShapeManager { + constructor(_ShapeList = []) { + this._ShapeList = _ShapeList; + } + get ShapeList() { + return this._ShapeList.slice(); + } + get ShapeCount() { + return this._ShapeList.length; + } + get ShapeArea() { + return this._ShapeList.map(s => s.Area).reduce((a1, a2) => a1 + a2, 0); + } + AppendShapeList(shapes) { + Array.isArray(shapes) ? this._ShapeList.push(...shapes) : this._ShapeList.push(shapes); + return this; + } + Clear() { + this._ShapeList.length = 0; + } + BoolOper(otherMg, booltype) { + switch (booltype) { + case BoolOpeartionType.Intersection: + return this.IntersectionBoolOperation(otherMg); + case BoolOpeartionType.Union: + return this.UnionBoolOperation(otherMg); + case BoolOpeartionType.Subtract: + return this.SubstactBoolOperation(otherMg); + } + } + //交集 如果成功返回一个面域 失败返回0个 + IntersectionBoolOperation(target) { + let shapes = []; + for (let srcShape of this._ShapeList) { + for (let tarShape of target._ShapeList) { + let tmpShapes = srcShape.IntersectionBoolOperation(tarShape); + shapes.push(...tmpShapes); + } + } + this.Clear(); + this._ShapeList = shapes; + return this._ShapeList.length > 0; + } + //并集,如果有一个形状并集成功,就成功 + UnionBoolOperation(targetMg) { + let isSuccess = false; + let srcShapes = this._ShapeList; + let tarShapes = targetMg._ShapeList; + let alones = []; //孤立的形状 + const boxCache = new WeakMap(); + for (let src of srcShapes) { + let notUnions = []; //未被合并的形状列表 来自tarShapes + let srcBox = src.BoundingBox; + for (let tar of tarShapes) { + let tarBox = boxCache.get(tar); + if (!tarBox) { + tarBox = tar.BoundingBox; + boxCache.set(tar, tarBox); + } + if (!IntersectBox2(srcBox, tarBox)) { + notUnions.push(tar); + continue; + } + let unions = src.UnionBoolOperation(tar); + if (unions.length === 1) //并集成功 + { + isSuccess = true; + src = unions[0]; //src设置为 合并完的形状 + } + else //并集失败 + notUnions.push(tar); //设置为未计算 + } + //如果发现src和任意一个形状并集成功,那么 + if (notUnions.length !== tarShapes.length) { + notUnions.push(src); //加入src 进行下一轮 + tarShapes = notUnions; + } + else + alones.push(src); //它是孤独的一个形状 + } + this._ShapeList = alones.concat(tarShapes); + return isSuccess; + } + SubstactBoolOperation(target) { + let newShapes = []; + for (let s of this._ShapeList) { + let ss = s.SubstactBoolOperation(target.ShapeList); + newShapes.push(...ss); + } + this._ShapeList = newShapes; + return true; + } + /** + * 与region.ApplyMatrix不同的是,这个是直接操作内部对象. + * 通常用来计算布尔运算时需要真实的移动这个位置. + * 并且将不会刷新显示 + * + * @param {Matrix4} mat4 + * @memberof ShapeManager + */ + ApplyMatrix(mat4) { + for (let s of this._ShapeList) { + s.Outline.Curve.ApplyMatrix(mat4); + s.Holes.forEach(o => o.Curve.ApplyMatrix(mat4)); + } + } + ReadFile(file) { + file.Read(); //1 + let cout = file.Read(); + for (let i = 0; i < cout; i++) { + let obj = new Shape(); + obj.ReadFile(file); + this._ShapeList.push(obj); + } + } + WriteFile(file) { + file.Write(1); //ver + file.Write(this.ShapeList.length); + for (let s of this.ShapeList) { + s.WriteFile(file); + } + } +} + +var Region_1; +let Region = Region_1 = class Region extends Entity { + static CreateFromCurves(cus) { + let shapes = Contour.GetAllContour(cus).map(out => new Shape(out)); + if (shapes.length > 0) { + let reg = new Region_1(); + //MarkX:曲线同面域一起移动 + reg.ApplyMatrix(shapes[0].Outline.Curve.OCS); + reg.ShapeManager.AppendShapeList(shapes); + return reg; + } + } + constructor(_ShapeManager = new ShapeManager()) { + super(); + this._ShapeManager = _ShapeManager; + } + //如果需要修改获取到的属性,需要Clone后进行操作,否则会对原实体进行破坏 + get ShapeManager() { + return this._ShapeManager; + } + get Area() { + return this.ShapeManager.ShapeArea; + } + get BoundingBox() { + let box = new Box3(); + for (let s of this._ShapeManager.ShapeList) + box.union(s.BoundingBox); + return box; + } + Explode() { + let shapeList = this._ShapeManager.ShapeList; + if (shapeList.length <= 1) { + return shapeList[0].Explode(); + } + else { + let regs = []; + shapeList.forEach(s => { + let reg = new Region_1().ApplyMatrix(this.OCS); + reg.ShapeManager.AppendShapeList(s); + regs.push(reg); + }); + return regs; + } + } + /** + * 对于布尔操作,这个将会变换内部轮廓到对方坐标系. + * 并且这个变换不会更新图形绘制. + * @param {Matrix4} m + * @memberof Region + */ + ShapeApplyMatrix(m) { + this.WriteAllObjectRecord(); + this._ShapeManager.ApplyMatrix(m); + } + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + switch (snapMode) { + case ObjectSnapMode.End: + return this.GetGripPoints(); + case ObjectSnapMode.Mid: + case ObjectSnapMode.Cen: + case ObjectSnapMode.Nea: + case ObjectSnapMode.Ext: + case ObjectSnapMode.Per: + case ObjectSnapMode.Tan: + { + let pts = []; + for (let s of this._ShapeManager.ShapeList) { + pts.push(...s.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)); + } + return pts; + } + } + return []; + } + GetGripPoints() { + let pts = []; + for (let s of this._ShapeManager.ShapeList) + pts.push(...s.GetStretchPoints()); + return pts; + } + MoveGripPoints(indexList, moveVec) { + this.WriteAllObjectRecord(); + let moveVLoc = moveVec.clone().applyMatrix4(new Matrix4().extractRotation(this.OCSInv)); + this.ApplyMatrix(MoveMatrix(moveVLoc)); + } + ApplyMatrix(m) { + this.WriteAllObjectRecord(); + //面域移动,组成面域的曲线也要移动 MarkX:曲线同面域一起移动 + this._ShapeManager.ShapeList.forEach(s => s.ApplyMatrix(m)); + return super.ApplyMatrix(m); + } + get Position() { + return super.Position; + } + set Position(pt) { + this.WriteAllObjectRecord(); + let moveX = pt.x - this._Matrix.elements[12]; + let moveY = pt.y - this._Matrix.elements[13]; + let moveZ = pt.z - this._Matrix.elements[14]; + this._Matrix.setPosition(pt); + this._SpaceOCS.elements[12] += moveX; + this._SpaceOCS.elements[13] += moveY; + this._SpaceOCS.elements[14] += moveZ; + let m = new Matrix4().setPosition(moveX, moveY, moveZ); + for (let s of this.ShapeManager.ShapeList) + s.ApplyMatrix(m); + this.Update(UpdateDraw.Matrix); + } + ApplyScaleMatrix(m) { + this.WriteAllObjectRecord(); + for (let s of this._ShapeManager.ShapeList) + s.ApplyScaleMatrix(m); + this.Update(UpdateDraw.Geometry); + return this; + } + //Z轴归0 + Z0() { + super.Z0(); + for (let s of this._ShapeManager.ShapeList) + s.Z0(); + return this; + } + MatrixPlanarizere() { + super.MatrixPlanarizere(); + for (let s of this._ShapeManager.ShapeList) + s.MatrixPlanarizere(); + return this; + } + ApplyMirrorMatrix(m) { + return this; + } + /** + * 请注意:该计算会操作otherRegion的矩阵 + * @param {Region} otherRegion + * @param {BoolOpeartionType} boolType + */ + BooleanOper(otherRegion, boolType) { + if (this.IsCoplaneTo(otherRegion)) { + this.WriteAllObjectRecord(); + let oldOcs = this.OCS; + //把形状曲线转移到二维屏幕计算后还原回来 + this.ShapeApplyMatrix(this.OCSInv); + otherRegion.ShapeApplyMatrix(this.OCSInv); + let isSuccess = this._ShapeManager.BoolOper(otherRegion._ShapeManager, boolType); + this.ShapeApplyMatrix(oldOcs); + this.Update(); + return isSuccess; + } + return false; + } + get MeshGeometry() { + if (this._MeshGeometry) + return this._MeshGeometry; + this.UpdateGeometry(); + return this._MeshGeometry; + } + get EdgeGeometry() { + if (this._EdgeGeometry) + return this._EdgeGeometry; + this.UpdateGeometry(); + return this._EdgeGeometry; + } + UpdateGeometry() { + let shapeList = this._ShapeManager.ShapeList; + let edgePts = []; + let meshGeoms = []; + const AddEdgePts = (pts, diffMat) => { + for (let i = 0; i < pts.length; i++) { + let p = AsVector3(pts[i]); + p.applyMatrix4(diffMat); + edgePts.push(p); + if (i !== 0 && i !== pts.length - 1) + edgePts.push(p); + } + }; + for (let i = 0; i < shapeList.length; i++) { + let shape = shapeList[i]; + let geometry = new ShapeGeometry(shape.Shape, 60); //60 可以优化. + let diffMat = this.OCSInv.clone().multiply(shape.Outline.Curve.OCSNoClone); + geometry.applyMatrix4(diffMat); + ScaleUV(geometry); + meshGeoms.push(new BufferGeometry().fromGeometry(geometry)); + let shapeInfo = shape.Shape.extractPoints(60); + let pts = shapeInfo.shape; + AddEdgePts(pts, diffMat); + let holePtss = shapeInfo.holes; + for (let holePts of holePtss) + AddEdgePts(holePts, diffMat); + } + this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(edgePts); + this._MeshGeometry = BufferGeometryUtils.MergeBufferGeometries(meshGeoms); + this._MeshGeometry["IsMesh"] = true; + this._MeshGeometry.computeVertexNormals(); + } + UpdateDrawGeometry() { + if (this._EdgeGeometry) + this._EdgeGeometry.dispose(); + this._EdgeGeometry = undefined; + if (this._MeshGeometry) + this._MeshGeometry.dispose(); + this._MeshGeometry = undefined; + } + ClearDraw() { + this.UpdateDrawGeometry(); + return super.ClearDraw(); + } + InitDrawObject(renderType = RenderType.Wireframe) { + if (renderType === RenderType.Wireframe) { + return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex)); + } + else if (renderType === RenderType.Conceptual) { + return new Object3D().add(new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex)), new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex))); + } + else if (renderType === RenderType.Physical) { + let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial); + mesh.castShadow = true; + mesh.receiveShadow = true; + return mesh; + } + else if (renderType === RenderType.Print) { + return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(0)); + } + else if (renderType === RenderType.Physical2) { + let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial); + mesh.castShadow = true; + mesh.receiveShadow = true; + return new Object3D().add(new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex)), mesh); + } + } + UpdateDrawObject(renderType, obj) { + DisposeThreeObj(obj); + Object3DRemoveAll(obj); + if (renderType === RenderType.Wireframe) { + let l = obj; + l.geometry = this.EdgeGeometry; + l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex); + } + else if (renderType === RenderType.Conceptual) { + return obj.add(new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex)), new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex))); + } + else if (renderType === RenderType.Physical) { + let mesh = obj; + mesh.geometry = this.MeshGeometry; + mesh.material = this.MeshMaterial; + } + else if (renderType === RenderType.Physical2) { + let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial); + mesh.castShadow = true; + mesh.receiveShadow = true; + return obj.add(new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex)), mesh); + } + else if (renderType === RenderType.Print) { + let l = obj; + l.geometry = this.EdgeGeometry; + l.material = ColorMaterial.GetLineMaterial(0); + } + } + /** + * 当实体需要被更新时,更新实体材质 + */ + UpdateDrawObjectMaterial(type, obj, material) { + if (type === RenderType.Wireframe || type === RenderType.Print) { + let line = obj; + line.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex); + } + else if (type === RenderType.Conceptual) { + for (let i = 0; i < obj.children.length; i++) { + if (i % 2 === 0) { + let l = obj.children[i]; + l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex); + } + else { + let mesh = obj.children[i]; + mesh.material = ColorMaterial.GetConceptualMaterial(this.DrawColorIndex); + } + } + } + else if (type === RenderType.Physical) { + let mesh = obj; + mesh.material = this.MeshMaterial; + } + } + _ReadFile(file) { + super._ReadFile(file); + let ver = file.Read(); //1 + this._ShapeManager.Clear(); + this._ShapeManager.ReadFile(file); + if (ver > 1) + this._LockMaterial = file.ReadBool(); + else + this._LockMaterial = false; + } + WriteFile(file) { + super.WriteFile(file); + file.Write(2); //ver + this._ShapeManager.WriteFile(file); + // ver2 + file.WriteBool(this._LockMaterial); + } +}; +Region = Region_1 = __decorate([ + Factory +], Region); + +const CanDrawHoleFuzz = 0.1; + +const FUZZ = 1e-5; +//Segment1d列表中 合并相交的区间 +function Segment1dJoin(segment) { + if (segment.length < 2) + return segment; + segment.sort((a, b) => a[0] - b[0]); + const NewSegment = []; + for (let i = 0; i < segment.length; i++) { + let segment1 = segment[i]; + if (i === segment.length - 1) { + NewSegment.push(segment1); + break; + } + for (let j = i + 1; j < segment.length; j++) { + let segment2 = segment[j]; + if (segment2[0] < segment1[1] + FUZZ) + segment1 = [segment1[0], Math.max(segment1[1], segment2[1])]; + else { + NewSegment.push(segment1); + break; + } + if (j === segment.length - 1) { + NewSegment.push(segment1); + i = segment.length - 1; + } + } + } + return NewSegment; +} +//获取多个区间列表相交的部分 +function IntersectSegment1ds(segment1, segment2) { + const IntersectSegments = []; + for (let s1 of segment1) { + for (let s2 of segment2) { + //[1,10] + [5,15] = [5,10] + if ((s2[0] > s1[0] - FUZZ && s2[0] < s1[1]) || (s1[0] > s2[0] - FUZZ && s1[0] < s2[1])) { + IntersectSegments.push([Math.max(s1[0], s2[0]), Math.min(s1[1], s2[1])]); + } + } + } + return IntersectSegments; +} + +class Face { + constructor(parameters) { + this.isEqualType = false; + this.OCS = new Matrix4(); + this.IsRect = true; + this.PolyLineOCS = new Matrix4(); + if (parameters) { + this.type = parameters.type; + this._Region = parameters.region; + this.LocalBoard = parameters.localBoard; + this.OCS = parameters.matrix4; + this.Length = parameters.length; + this.Width = parameters.width; + if (parameters.isRect !== undefined) + this.IsRect = parameters.isRect; + if (parameters.drillType) + this.DrillType = parameters.drillType; + else + this.DrillType = this.LocalBoard.BoardProcessOption.drillType; + if (parameters.polyLineOCS) + this.PolyLineOCS = parameters.polyLineOCS; + if (parameters.CurveBoardFaceRegionPolyline) + this.CurveBoardFaceRegionPolyline = parameters.CurveBoardFaceRegionPolyline; + } + } + get Region() { + if (!this._Region) { + let curve = this.CurveBoardFaceRegionPolyline ?? new Polyline().Rectangle(this.Length, this.Width); + this._Region = Region.CreateFromCurves([curve]); + } + return this._Region; + } + get OCSInv() { + return new Matrix4().getInverse(this.OCS); + } + get Normal() { + return new Vector3().setFromMatrixColumn(this.OCS, 2); + } + Intersect(f) { + //获得侧面和非侧面 + let [sideFace, noSideFace] = this.type === BoardFaceType.Side ? [this, f] : [f, this]; + //同侧面排钻时 厚度小的那块当做第一块 + if (sideFace.type === noSideFace.type) + [sideFace, noSideFace] = this.Width > f.Width ? [f, this] : [this, f]; + //布尔面和被布尔面得差异矩阵 + let diffMtx = sideFace.OCSInv.multiply(noSideFace.OCS); + MatrixPlanarizere(diffMtx); + let isSuccess = false; + let x = new Vector3().setFromMatrixColumn(diffMtx, 0); + let ang = x.angleTo(XAxis); + //盒子旋转0,90,180度不会被破坏 + let canUseBoxCalc = equaln$1(ang, 0) || equaln$1(ang, Math.PI / 2) || equaln$1(ang, Math.PI); + let retBoxs = []; + let sizes = []; + //如果不是矩形,用布尔运算,如果 + if (!noSideFace.IsRect || !canUseBoxCalc) { + let sideReg = sideFace.Region?.Clone(); + if (!sideReg || !noSideFace.Region) + return []; + let toReg = noSideFace.Region.Clone().ApplyMatrix(diffMtx); + //注意: 排钻因为布尔运算失败的重灾区 + // TestDraw(sideReg.Clone(), 1); + // TestDraw(toReg.Clone(), 2); + isSuccess = sideReg.BooleanOper(toReg, BoolOpeartionType.Intersection); + //挖穿造型分段排钻 + const throughModelSegmentedDrill = HostApplicationServices.throughModelSegmentedDrill; + if (throughModelSegmentedDrill) { + let boardModeling = noSideFace.LocalBoard.BoardModeling; + if (boardModeling?.length) { + let boardThickness = noSideFace.LocalBoard.Thickness; + for (let modal of boardModeling) { + if (boardThickness - modal.thickness > 1e-5) + continue; + let modalReg = Region.CreateFromCurves([modal.shape.Outline.Curve]).ApplyMatrix(diffMtx); + isSuccess = sideReg.BooleanOper(modalReg, BoolOpeartionType.Subtract); + } + } + } + for (let s of sideReg.ShapeManager.ShapeList) { + if (!throughModelSegmentedDrill) { + let box = s.BoundingBox; + retBoxs.push(box); + sizes.push(box.getSize(new Vector3())); + } + else { + //求以X轴和Y=Thickness轴上的点 相互切割形成的矩形面 + const XLists = []; + const TLists = []; + const Thickness = s.BoundingBox.getSize(new Vector3).y; + for (let cu of s.Outline.Shape.curves) { + let pt1 = cu.getPoint(0); + let pt2 = cu.getPoint(1); + let x1 = Math.abs(pt1.x); + let x2 = Math.abs(pt2.x); + if (equaln$1(pt1.y, 0) && equaln$1(pt2.y, 0)) + XLists.push([Math.min(x1, x2), Math.max(x1, x2)]); + if (equaln$1(Math.abs(pt1.y), Thickness) && equaln$1(Math.abs(pt2.y), Thickness)) + TLists.push([Math.min(x1, x2), Math.max(x1, x2)]); + } + //合并可以相连的区间 如[0,100] + [100,200] = [0,200] + const XJoinLists = Segment1dJoin(XLists); + const TJoinLists = Segment1dJoin(TLists); + //X轴和厚度轴相交的区间 + const IntersectSegments = IntersectSegment1ds(XJoinLists, TJoinLists); + //造型切割出来会有Position点 其他都是(0,0,0) + let startPt = new Vector3(s.Position.x); + for (let segment of IntersectSegments) { + let minV; + let maxV; + //圆弧板面宽度具有方向性 + if (sideFace.Width > 0) { + minV = new Vector3(segment[0]); + maxV = new Vector3(segment[1], Thickness); + } + else { + minV = new Vector3(segment[0], sideFace.Width); + maxV = new Vector3(segment[1]); + } + let box = new Box3Ext(minV.add(startPt), maxV.add(startPt)); + retBoxs.push(box); + sizes.push(box.getSize(new Vector3)); + } + } + } + if (throughModelSegmentedDrill && !retBoxs.length) + isSuccess = false; + } + else { + let minV; + let maxV; + //圆弧板面宽度具有方向性 + if (sideFace.Width > 0) { + minV = new Vector3(); + maxV = new Vector3(sideFace.Length, sideFace.Width); + } + else { + minV = new Vector3(0, sideFace.Width); + maxV = new Vector3(sideFace.Length, 0); + } + let retBox = new Box3Ext(minV, maxV); + let p1 = new Vector3().setFromMatrixPosition(diffMtx); + let p2 = new Vector3(noSideFace.Length, noSideFace.Width).applyMatrix4(diffMtx); + let box3 = new Box3Ext().setFromPoints([p1, p2]); + if (retBox.intersectsBox(box3)) { + retBox.intersect(box3); + let size = retBox.getSize(new Vector3()); + isSuccess = !equaln$1(size.x * size.y, 0); + retBoxs = [retBox]; + sizes = [size]; + } + } + let newFaces = []; + if (isSuccess) { + for (let i = 0; i < sizes.length; i++) { + let newFace = new Face(); + //提供侧面的板件作为相交面 + newFace.LocalBoard = noSideFace.LocalBoard; + newFace.InterBoard = sideFace.LocalBoard; + newFace.Length = sizes[i].x; + newFace.Width = sizes[i].y; + let min = retBoxs[i].min; + min.applyMatrix4(sideFace.OCS); + //构建碰撞面坐标系 + newFace.OCS = sideFace.OCS.clone().setPosition(min); + newFace.DrillType = sideFace.DrillType; + //都是侧面 + if (this.type === f.type) + newFace.isEqualType = true; + newFaces.push(newFace); + } + } + return newFaces; + } + IsIntersect(f, fuzz = 1e-6, currentCoverBoxes = []) { + //获得侧面和非侧面 + let [sideFace, noSideFace] = this.type === BoardFaceType.Side ? [this, f] : [f, this]; + //布尔面和被布尔面得差异矩阵 + let diffMtx = sideFace.OCSInv.multiply(noSideFace.OCS); + MatrixPlanarizere(diffMtx); + let x = new Vector3().setFromMatrixColumn(diffMtx, 0); + let ang = x.angleTo(XAxis); + //盒子旋转0,90,180度不会被破坏 + let canUseBoxCalc = equaln$1(ang, 0) || equaln$1(ang, Math.PI / 2) || equaln$1(ang, Math.PI); + //如果不是矩形,用布尔运算,如果 + if (!noSideFace.IsRect || !canUseBoxCalc) { + let c1 = new Polyline().Rectangle(sideFace.Length, sideFace.Width); + let c2 = noSideFace.LocalBoard.ContourCurve.Clone().ApplyMatrix(diffMtx); + let box = c1.BoundingBox.intersect(c2.BoundingBox); + let size = box.getSize(new Vector3); + if (equaln$1(size.x * size.y, 0)) + return { isInt: false, coverBoxesList: currentCoverBoxes }; + let con1 = Contour.CreateContour(c1); + let con2 = Contour.CreateContour(c2); + let cs = con1.IntersectionBoolOperation(con2); + let width = 0; + let boxList = []; + //当前碰撞区域如果遮光直接退出 + for (let c of cs) { + let b = c.BoundingBox; + b.getSize(size); + width += size.x; + if (width / sideFace.Length > fuzz) + return { isInt: true }; + boxList.push(b); + } + if (currentCoverBoxes.length === 0) { + return { isInt: false, coverBoxesList: boxList }; + } + //与旧盒子合并后测试是否遮光 + width = 0; + while (currentCoverBoxes.length > 0) { + let b = currentCoverBoxes.pop(); + let isInt = false; + for (let box of boxList) { + if (box.intersectsBox(b)) { + isInt = true; + box.union(b); + break; + } + } + if (!isInt) + boxList.push(b); + } + for (let b of boxList) { + b.getSize(size); + width += size.x; + if (width / sideFace.Length > fuzz) + return { isInt: true }; + } + return { isInt: false, coverBoxesList: boxList }; + } + else { + let minV; + let maxV; + if (sideFace.Width > 0) { + minV = new Vector3(); + maxV = new Vector3(sideFace.Length, sideFace.Width); + } + else { + minV = new Vector3(0, sideFace.Width); + maxV = new Vector3(sideFace.Length, 0); + } + let retBox = new Box3Ext(minV, maxV); + let p1 = new Vector3().setFromMatrixPosition(diffMtx); + let p2 = new Vector3(noSideFace.Length, noSideFace.Width).applyMatrix4(diffMtx); + let box3 = new Box3Ext().setFromPoints([p1, p2]); + if (retBox.intersectsBox(box3)) { + retBox.intersect(box3); + let size = retBox.getSize(new Vector3()); + if (equaln$1(size.x * size.y, 0) || Math.abs(size.y / sideFace.Width) <= fuzz) + return { isInt: false, coverBoxesList: currentCoverBoxes }; + if (size.x / sideFace.Length > fuzz) + return { isInt: true }; + if (currentCoverBoxes.length === 0) { + return { isInt: false, coverBoxesList: [retBox] }; + } + for (let b of currentCoverBoxes) { + if (b.intersectsBox(retBox)) { + b.union(retBox); + retBox = null; + break; + } + } + if (retBox) + currentCoverBoxes.push(retBox); + let width = 0; + for (let b of currentCoverBoxes) { + b.getSize(size); + width += size.x; + if (width / sideFace.Length > fuzz) + return { isInt: true }; + } + return { isInt: false, coverBoxesList: currentCoverBoxes }; + } + return { isInt: false, coverBoxesList: currentCoverBoxes }; + } + } +} + +var BoardFaceType; +(function (BoardFaceType) { + BoardFaceType[BoardFaceType["Side"] = 0] = "Side"; + BoardFaceType[BoardFaceType["NoSide"] = 1] = "NoSide"; +})(BoardFaceType || (BoardFaceType = {})); +class BoardGetFace { + constructor(Board) { + this.Board = Board; + this.Faces = []; + this.ParseFaces(); + } + ParseFaces() { + if (this.Board.IsArcBoard) { + this.GetArcBoardFaces(); + return; + } + //正反面 + this.GetTopAndBottomFace(); + //侧面 + this.GetSideFaces(); + } + GetTopAndBottomFace(isEdgeFace = false) { + let curve = this.Board.ContourCurve; + let reg; + if (this.Board.IsSpecialShape) + reg = Region.CreateFromCurves([curve]); + let thickness = this.Board.Thickness; + let ocs = this.Board.OCS; + const opt = this.Board.BoardProcessOption; + //挖穿造型分段排钻 + let throughModelSegmentedDrill = HostApplicationServices.throughModelSegmentedDrill; + let isRect = throughModelSegmentedDrill ? (this.Board.IsRect && !this.Board.BoardModeling.length) : this.Board.IsRect; + //正反面 + if (opt.frontDrill || isEdgeFace) + this.Faces.push(new Face({ + type: BoardFaceType.NoSide, + region: reg, + isRect, + localBoard: this.Board, + matrix4: ocs.clone().multiply(new Matrix4().setPosition(new Vector3(0, 0, thickness))), + length: this.Board.Width, + width: this.Board.Height + })); + if (opt.backDrill || isEdgeFace) { + let mtx = MakeMirrorMtx(ZAxis); + this.Faces.push(new Face({ + type: BoardFaceType.NoSide, + localBoard: this.Board, + isRect, + region: reg ? reg.Clone() : undefined, + matrix4: new Matrix4().multiplyMatrices(ocs, mtx), + length: this.Board.Width, + width: this.Board.Height + })); + } + } + GetSideFaces() { + let con = this.Board.ContourCurve.Clone(); + let inverseZ = con.Area2 < 0; + let cus = con.Explode(); + const highDrill = this.Board.BoardProcessOption.highDrill.slice(); + for (let i = 0; i < cus.length; i++) { + let cu = cus[i]; + let length = cu.Length; + if ((highDrill.length > 0 && highDrill[i] === DrillType.None) + || equaln$1(length, 0) + || cu instanceof Arc) + continue; + let mtx = GetSideFaceMtx(cu, inverseZ); + this.Faces.push(new Face({ + type: BoardFaceType.Side, + localBoard: this.Board, + matrix4: new Matrix4().multiplyMatrices(this.Board.OCS.clone(), mtx), + length, + width: this.Board.Thickness, + drillType: highDrill.length > 0 && highDrill[i] + })); + } + } + //获取曲线板的正反 侧面 + GetArcBoardFaces(faceSealingDataMap, highSealingData, sealCu) { + let br = this.Board; + const opt = br.BoardProcessOption; + //排钻反应器 实体渲染赋值可能延迟 手动构造ArcBoardBuild + let sweepArcBoardBuild = new ArcBoardBuild(br); + sweepArcBoardBuild.ParseSweepCurves(); + let conCus = sweepArcBoardBuild.SweepCurves1.map(c => c.Clone()); + //曲线路径相对曲线板 + const RX = new Matrix4().makeRotationX(Math.PI / 2); + const PathOCS = new Matrix4().multiplyMatrices(br.OCS, RX); + // //弧形板旋转角度 + const AMtx = new Matrix4().makeRotationY(br.SweepAngle); + PathOCS.multiply(AMtx); + let basePt = new Vector3().applyMatrix4(new Matrix4().multiplyMatrices(RX, sweepArcBoardBuild.OCS2RotateMtx)); + PathOCS.multiply(new Matrix4().setPosition(basePt)); + const PathOCSInv = new Matrix4().getInverse(PathOCS); + for (let cu of conCus) + cu.ApplyMatrix(PathOCS); + const ZNormal = new Vector3().setFromMatrixColumn(PathOCS, 2); + let currentLength = 0; + const FaceDir = br.SweepVisibleFace === FaceDirection.Front ? -1 : 1; + const ContourCurve = br.ContourCurve.Clone(); + //弧形板旋转角度 + ContourCurve.ApplyMatrix(sweepArcBoardBuild.OCS2RotateMtx); + if (highSealingData) { + let cus = br.ContourCurve.Clone().Explode(); + highSealingData.push(...structuredClone(GetBoardHighSeal(br, cus))); + sealCu.push(...cus); + } + let contourLength = br.ParseBoardLengthInArcSweep(); + for (let i = 0; i < conCus.length; i++) { + if (currentLength > contourLength) + continue; + //按分段曲线 对板轮廓裁剪 + let conCu = conCus[i]; + let length = currentLength + conCu.Length; + //跳过圆弧 + if (conCu instanceof Arc) { + currentLength = length; + continue; + } + let starKnifePls = new Polyline([{ pt: AsVector2({ x: currentLength, y: -1 }), bul: 0 }, { pt: AsVector2({ x: currentLength, y: 10000 }), bul: 0 }]); + let endKnifePls = new Polyline([{ pt: AsVector2({ x: length, y: -1 }), bul: 0 }, { pt: AsVector2({ x: length, y: 10000 }), bul: 0 }]); + //裁剪结果 + let faceRegions = SplitPolyline(ContourCurve, [starKnifePls, endKnifePls]); + faceRegions = faceRegions.filter((faceRegion) => { + let x = faceRegion.BoundingBox.getCenter(new Vector3).x; + return x > currentLength && x < length; + }); + if (faceRegions.length) { + let c = conCu.Clone().ApplyMatrix(PathOCSInv); + let lineToward = c.EndPoint.clone().sub(c.StartPoint); + let ro = angle(lineToward); + let ocs = PathOCS.setPosition(0, 0, 0); + ocs = new Matrix4().multiplyMatrices((new Matrix4().makeRotationAxis(ZNormal, ro)), ocs).setPosition(conCu.StartPoint); + ocs.multiply(new Matrix4().getInverse(RX)); + for (let faceRegion of faceRegions) { + //添加正反面 + for (let data of faceRegion.LineData) + data.pt.add(new Vector2$1(-currentLength)); + let frontMat; + let backMat; + let mtx = MakeMirrorMtx(ZAxis); + const faceRegionBox = faceRegion.BoundingBox; + const faceRegionSize = faceRegionBox.getSize(new Vector3); + if (br.SweepVisibleFace === FaceDirection.Front) { + frontMat = new Matrix4().multiplyMatrices(ocs, mtx.setPosition(new Vector3(0, faceRegionBox.min.y, br.Thickness * FaceDir))); + backMat = new Matrix4().multiplyMatrices(ocs, new Matrix4().setPosition(new Vector3(0, faceRegionBox.min.y))); + } + else { + frontMat = new Matrix4().multiplyMatrices(ocs, new Matrix4().setPosition(new Vector3(0, faceRegionBox.min.y, br.Thickness * FaceDir))); + backMat = new Matrix4().multiplyMatrices(ocs, mtx.setPosition(new Vector3(0, faceRegionBox.min.y))); + } + if (opt.frontDrill) + this.Faces.push(new Face({ + type: BoardFaceType.NoSide, + localBoard: br, + matrix4: frontMat, + length: conCu.Length, + width: faceRegionSize.y, + CurveBoardFaceRegionPolyline: faceRegion + })); + if (opt.backDrill) { + this.Faces.push(new Face({ + type: BoardFaceType.NoSide, + localBoard: br, + matrix4: backMat, + length: conCu.Length, + width: faceRegionSize.y, + CurveBoardFaceRegionPolyline: faceRegion + })); + } + //侧面 + let cus = faceRegion.Explode(); + //应用新轮廓 计算排钻顺序 + let cloneBr = br.Clone(); + cloneBr.ContourCurve = faceRegion; + const HighDrill = cloneBr.BoardProcessOption.highDrill.slice(); + for (let j = 0; j < cus.length; j++) { + if (HighDrill.length > 0 && HighDrill[j] === DrillType.None) + continue; + let cu = cus[j]; + let mtx = GetSideFaceMtx(cu, faceRegion.IsClockWise); + let ocs = PathOCS.clone().setPosition(0, 0, 0); + ocs = new Matrix4().multiplyMatrices((new Matrix4().makeRotationAxis(ZNormal, ro)), ocs).setPosition(conCu.StartPoint); + ocs.multiply(new Matrix4().getInverse(RX)).multiply(mtx); + let f = new Face({ + type: BoardFaceType.Side, + localBoard: br, + matrix4: ocs, + length: cu.Length, + width: br.Thickness * FaceDir, + drillType: HighDrill.length > 0 && HighDrill[j] + }); + if (faceSealingDataMap) { + let pt = cu.GetPointAtParam(0.5).add(new Vector3(currentLength)); + let index = Math.floor(ContourCurve.GetParamAtPoint(pt)); + if (!isNaN(index)) + faceSealingDataMap.set(f, index); + } + this.Faces.push(f); + } + } + } + currentLength = length; + } + // 测试代码 + // for (let f of this.Faces) + // { + // let r = f.Region.Clone().ApplyMatrix(f.OCS); + // TestDraw(r); + // } + } + IntersectFace(br, bInsEqual = false) { + let collisionFaces = []; + for (let f1 of this.Faces) { + for (let f2 of br.Faces) { + //都是正面,或者不允许侧面同侧面并且2板件类型不一样就跳过 + if (f1.type === f2.type + && (f1.type === BoardFaceType.NoSide || !bInsEqual || br.Board.BoardType !== this.Board.BoardType)) + continue; + //不共面 + if (!MatrixIsCoplane2(f1.OCS, f2.OCS, CanDrawHoleFuzz)) + continue; + collisionFaces.push(...f1.Intersect(f2)); + } + } + return collisionFaces; + } + static GetAllSidesFaces(br, isMergeFace = false) { + let faces = []; + let con = br.ContourCurve; + let inverseZ = con.Area2 < 0; + let cus = con.Explode(); + if (isMergeFace) + MergeCurvelist(cus); + for (let i = 0; i < cus.length; i++) { + let cu = cus[i]; + let length = cu.Length; + let mtx = GetSideFaceMtx(cu, inverseZ); + faces.push(new Face({ + type: BoardFaceType.Side, + localBoard: br, + matrix4: new Matrix4().multiplyMatrices(br.OCS.clone(), mtx), + length, + width: br.Thickness, + })); + } + return faces; + } +} +//坐标系共面且法线相反 +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-4)) + return false; + //高共面 + let pt = new Vector3().setFromMatrixPosition(matrixTo); + //变换到自身对象坐标系. + pt.applyMatrix4(new Matrix4().getInverse(matrixFrom)); + return equaln$1(pt.z, 0, zFuzz); +} +function GetSideFaceMtx(cu, inverseZ = false) { + let x = cu.GetFirstDeriv(0).normalize(); + let y = ZAxis; + let z = x.clone().cross(y); + if (inverseZ) + z.negate(); + let basePt; + if ((equaln$1(x.x, 0, 1e-5) && x.y > 0) || x.x < -1e-5) { + x.negate(); + basePt = cu.EndPoint; + } + else + basePt = cu.StartPoint; + //构建面矩阵 + return new Matrix4() + .makeBasis(x, y, z) + .setPosition(basePt); +} +class ParseBoardSideFace extends BoardGetFace { + constructor(Board) { + super(Board); + this.Board = Board; + } + ParseFaces() { + this.GetSideFaces(); + } + GetSideFaces() { + let con = GetBoardContour(this.Board); + if (!con) + return; + let inverseZ = con.Area2 < 0; + let cus = con.Explode(); + for (let cu of cus) { + let type = BoardFaceType.Side; + let length = cu.Length; + if (equaln$1(length, 0) || cu instanceof Arc) + type = BoardFaceType.NoSide; + let mtx = GetSideCuFaceMtx(cu, inverseZ); + let face = new Face({ + type, + localBoard: this.Board, + matrix4: new Matrix4().multiplyMatrices(this.Board.OCS.clone(), mtx), + length, + width: this.Board.Thickness, + }); + this.Faces.push(face); } } } @@ -15323,8 +18022,8 @@ class Groove { this.lid.SplitTo(groove.lid); } } - Draw(verticesArray, uvArray, edgeBuild, rotateUv) { - this.contourWall.Draw(verticesArray, uvArray, edgeBuild); + Draw(verticesArray, uvArray, edgeBuild, rotateUv, displayAccuracy = 0) { + this.contourWall.Draw(verticesArray, uvArray, edgeBuild, displayAccuracy); for (let wall of this.holeWalls) wall.Draw(verticesArray, uvArray, edgeBuild); if (this.depthType === DepthType.All) @@ -15408,7 +18107,7 @@ class ContourTreeNode { } return; //如果不倒角 就不执行下面的代码 } - static ParseContourTree(contourNodes) { + static ParseContourTree(contourNodes, ignoreInCurve = false, checkIntersect = false) { if (contourNodes.length < 2) return; let fb = new Flatbush(contourNodes.length); @@ -15429,7 +18128,10 @@ class ContourTreeNode { let node2 = contourNodes[id]; if (node2.parent === node1 || node2.area < node1.area) continue; //避免自己的儿子成为自己的父亲 - if (node2.contour.Curve.PtInCurve(p)) { + //检查是否有交集 + if (checkIntersect && node1.contour.Curve.IntersectWith(node2.contour.Curve, IntersectOption.ExtendNone)?.length) + continue; + if (node2.contour.Curve.PtInCurve(p) || ignoreInCurve) { node1.SetParent(node2); break; } @@ -15796,7 +18498,8 @@ class ExtudeWall { this.Tape = taps; return this; } - Draw(verticesArray, uvArray, edgeBuild) { + Draw(verticesArray, uvArray, edgeBuild, displayAccuracy = 0) { + this.curve.DisplayAccuracy = displayAccuracy; let xparams = SplitCurveParams(this.curve); let isOuter = this.wallType === DirectionType.Outer; let allDepth = this.allDepth; @@ -16094,7 +18797,7 @@ class ExtrudeGeometryBuilder { let s2 = grooves[j]; s1.ClipTo(s2, true); } - s1.Draw(this.verticesArray, this.uvArray, this.edgeAndLidBuilder, rotateUv); + s1.Draw(this.verticesArray, this.uvArray, this.edgeAndLidBuilder, rotateUv, br.DisplayAccuracy); } outerWall.Draw(this.verticesArray, this.uvArray, this.edgeAndLidBuilder); //这里构建盖子 @@ -16233,116 +18936,12 @@ function GetIntersection(cu1, cu2) { return r; } -const DIRS = [XAxis, YAxis, ZAxis, XAxisN, YAxisN, ZAxisN]; -function GetFaceDir(direction) { - let absx = Math.abs(direction.x); - let absy = Math.abs(direction.y); - let absz = Math.abs(direction.z); - let face = -1.0; - if (absx > absz) { - if (absx > absy) - face = direction.x > 0 ? 0 : 3; - else - face = direction.y > 0 ? 1 : 4; - } - else { - if (absz > absy) - face = direction.z > 0 ? 2 : 5; - else - face = direction.y > 0 ? 1 : 4; - } - return DIRS[face]; -} -class GenUVForWorld { - constructor() { - this.InvMtxMap = new Map(); - this._Z = new Vector3; - this._X = new Vector3; - this._Y = new Vector3; - this._Box = new Box3; - this._Box2 = new Box3; - } - GetMtxInv(normalX, normalY, normalZ) { - this._Z.set(normalX, normalY, normalZ); - let n = GetFaceDir(this._Z); - let mtx = this.InvMtxMap.get(n); - if (mtx) - return mtx; - this._Z.copy(n); - Orbit.ComputUpDirection(this._Z, this._Y, this._X); - mtx = new Matrix4().makeBasis(this._X, this._Y, this._Z); - mtx.getInverse(mtx); - this.InvMtxMap.set(n, mtx); - return mtx; - } - GenUV(mesh) { - if (Array.isArray(mesh.material)) { - let geo = mesh.geometry; - if (!geo.boundingBox) - geo.computeBoundingBox(); - let normals = geo.getAttribute("normal"); - let pos = geo.getAttribute("position"); - let uvs = geo.getAttribute("uv"); - for (let i = 0; i < mesh.material.length; i++) { - let mtl = mesh.material[i]; - if (mtl[USE_WORLD_UV]) { - this._Box.makeEmpty(); - let g = mesh.geometry.groups[i]; - for (let y = 0; y < g.count; y++) { - let index = (y + g.start) * 3; - this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]); - this._Box.expandByPoint(this._X); - } - for (let y = 0; y < g.count; y++) { - let index = (y + g.start) * 3; - let mtx = this.GetMtxInv(normals.array[index], normals.array[index + 1], normals.array[index + 2]); - this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]); - this._X.applyMatrix4(mtx); - this._Box2.copy(this._Box).applyMatrix4(mtx); - //@ts-ignore - 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; - //@ts-ignore - 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; - } - uvs.needsUpdate = true; - } - } - } - else { - let mtl = mesh.material; - if (mtl[USE_WORLD_UV]) - this.GenGeoUV(mesh.geometry, mtl, 1e-2); - } - } - GenGeoUV(geo, mtl, scale = 1e-3) { - if (!geo.boundingBox) - geo.computeBoundingBox(); - let normals = geo.getAttribute("normal"); - let pos = geo.getAttribute("position"); - let uvs = geo.getAttribute("uv"); - if (!pos || !uvs || pos.count === 0) - return; - for (let y = 0; y < pos.count; y++) { - let index = y * 3; - let mtx = this.GetMtxInv(normals.array[index], normals.array[index + 1], normals.array[index + 2]); - this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]); - this._X.applyMatrix4(mtx); - this._Box.copy(geo.boundingBox); - this._Box.applyMatrix4(mtx); - //@ts-ignore - 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; - //@ts-ignore - 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; - } - uvs.needsUpdate = true; - } -} - var ExtrudeSolid_1; const MaxDrawGrooveCount = 1000; //最大的绘制槽个数(但是还是会绘制线) let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { constructor() { super(); + this._DisplayAccuracy = 0; /* y----------- ^ | @@ -16379,7 +18978,7 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { }); } set Material(materialId) { - let oldMaterial = this.Material ?? this._db?.DefaultMaterial.objectId; + let oldMaterial = this.Material ?? this._db?.DefaultMaterial?.objectId; super.Material = materialId; let isf_old = Boolean(oldMaterial?.Object?.IsFull); let isf_new = Boolean(materialId?.Object?.IsFull); @@ -16391,6 +18990,16 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { } } get Material() { return super.Material; } + get DisplayAccuracy() { + return this._DisplayAccuracy; + } + set DisplayAccuracy(v) { + if (!equaln$1(v, this._DisplayAccuracy)) { + this.WriteAllObjectRecord(); + this._DisplayAccuracy = v; + this.Update(); + } + } get KnifeRadius() { return this.knifeRadius; } @@ -16403,7 +19012,7 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { } } get BoundingBox() { - return this.BoundingBoxInOCS.applyMatrix4(this.OCS); + return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone); } get BoundingBoxInOCS() { if (this.width > 0 && this.height > 0 && this.thickness > 0) @@ -16447,10 +19056,11 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { this.__UpdateVersion__++; } } - Clone() { - let en = super.Clone(); - return en; - } + // Clone() + // { + // let en = super.Clone(); + // return en; + // } ApplyMatrix(m) { //暂时关闭更新,避免内部实体还没有更新位置时,先更新了实体的Geometry,导致后续没有进行更新 let updateBak = this.AutoUpdate; @@ -16564,12 +19174,18 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { get Grooves() { return this.grooves; } + //侧面造型 + get SideModelingMap() { + return undefined; + } /** * 返回未拷贝的轮廓曲线 */ get ContourCurve() { if (!this.contourCurve) this.GeneralRectContour(); + // 默认轮廓都是白的 + this.contourCurve.ColorIndex = 7; return this.contourCurve; } set ContourCurve(cu) { @@ -16688,8 +19304,8 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { //修正轮廓基点 if (!equalv3(box.min, ZeroVec)) { this.contourCurve.Position = this.contourCurve.Position.sub(box.min); - let v = box.min.applyMatrix4(this.OCS.setPosition(ZeroVec)); - this._Matrix.setPosition(this.Position.add(v)); + TransformVector(box.min, this.OCSNoClone); + this._Matrix.setPosition(this.Position.add(box.min)); } } get IsRect() { @@ -16703,7 +19319,7 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { let contour = Contour.CreateContour(this.ContourCurve.Clone(), false); let holes = []; for (let g of this.grooves) { - if (equaln$1(g.thickness, this.thickness, 1e-3) && (!filterSmallGroove || g.ContourCurve.Area > 900)) + if (equaln$1(g.thickness, this.thickness, 1e-3) && (!filterSmallGroove || g.ContourCurve.Area > HostApplicationServices.smallGrooveThreshold)) holes.push(Contour.CreateContour(g.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(g.OCSNoClone)), false)); } return new Shape(contour, holes); @@ -16741,14 +19357,16 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { this.RelevanceMeats.push(meat); } }; - if (equaln$1(this.thickness, target.thickness) - && equaln$1(0, targetZMin)) { + if (equaln$1(this.thickness, target.thickness, 1e-3) + && equaln$1(0, targetZMin, 2e-3)) { let matrixToLocal = this.OCSInv.multiply(target.OCS); let thisShape = this.Shape; let targetShape = target.Shape.ApplyMatrix(matrixToLocal).Z0(); let unionShapes = thisShape.UnionBoolOperation(targetShape, true); if (unionShapes.length === 1) { this.WriteAllObjectRecord(); + //防止重复添加 + this.grooves = this.grooves.filter((g) => !equaln$1(g.thickness, target.thickness, 1e-3)); //过滤掉一样的 因为已经在shape里 // [ + ] 产生网洞. for (let hole of unionShapes[0].Holes) { let g = new ExtrudeSolid_1(); @@ -16758,7 +19376,9 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { this.AppendGroove(g); } this.ContourCurve = unionShapes[0].Outline.Curve; - this.grooves.push(...target.grooves.map(g => g.Clone())); + for (let tg of target.grooves) + if (!equaln$1(tg.thickness, target.thickness, 1e-3)) //过滤掉一样的 因为已经在shape里 + this.grooves.push(tg.Clone()); MergeRelevance(); this.GrooveCheckMerge(); this.Update(); @@ -16802,6 +19422,176 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { Subtract(extrudes, output = undefined, checkIntersect = true) { return false; } + //将相交部分转换为正反面槽或侧槽 + ParseGrooves(knifeExtrudes) { + let faces; + let con; + let inverseZ; + let cus; + let mirrorMtxZ; + let grooves = []; + let relevanceSideModelMap = new Map(); + //切割的侧槽 + const GetSideModelList = (extrude) => { + let knifeCon = extrude.ContourCurve.Clone(); + let knifeConIsCircle = knifeCon instanceof Circle; + if (this instanceof Board) { + let intersectFaceIndex = 0; + let intersectFaceIndexs = []; + if (!faces) { + faces = new ParseBoardSideFace(this); + con = GetBoardContour(this); + if (!con) + return; + inverseZ = con.Area2 < 0; + cus = con.Explode(); + mirrorMtxZ = MakeMirrorMtx(ZAxis); + } + //相交SCG + //使用克隆 防止正反面槽mesh丢失 + let cloneEnt = this.Clone(); + let interCSG = CSGIntersect(cloneEnt.CSG, extrude.CSG, this.OCSInv.multiply(extrude.OCS)); + //转换至相交面的尺寸 + let topology = new BSPGroupParse(interCSG); + let ptsList = topology.Parse(); + for (let pts of ptsList) { + // ------- 求相交面索引 begin ---------- + intersectFaceIndexs = []; + let checkBox = new Box3Ext().setFromPoints(pts); + for (let i = 0; i < faces.Faces.length; i++) { + let face = faces.Faces[i]; + let region = face.Region.Clone(); + region.ApplyMatrix(this.OCSInv.multiply(face.OCS)); + if (checkBox.intersectsBox(region.BoundingBox, 1e-3)) + intersectFaceIndexs.push(i); + } + if (!intersectFaceIndexs.length) { + InteractionLog([{ msg: `${this.Name}`, entity: [this] }, { msg: "侧面造型切割面解析失败, 无法生成侧面造型!" }], LogType.Error); + continue; + } + else if (intersectFaceIndexs.length === 1) + intersectFaceIndex = intersectFaceIndexs[0]; + else { + //截面小的为正面 + intersectFaceIndexs.sort((i, j) => { + let faceOCSInv1 = faces.Faces[i].OCSInv; + let faceOCSInv2 = faces.Faces[j].OCSInv; + let box1 = checkBox.clone().applyMatrix4(this.OCS).applyMatrix4(faceOCSInv1).getSize(new Vector3); + let box2 = checkBox.clone().applyMatrix4(this.OCS).applyMatrix4(faceOCSInv2).getSize(new Vector3); + return knifeConIsCircle ? box1.x - box2.x : box2.x - box1.x; + }); + intersectFaceIndex = intersectFaceIndexs[0]; + } + intersectFaceIndexs = []; + // ------- 求相交面索引 end ---------- + const faceMtx = GetSideCuFaceMtx(cus[intersectFaceIndex], inverseZ); + const faceMtxInv = new Matrix4().getInverse(faceMtx); + const faceMtxOnBoard = this.OCS.multiply(faceMtx).multiply(mirrorMtxZ); + const mtx = new Matrix4().getInverse(faceMtx.clone().multiply(mirrorMtxZ)); + //测试绘制 + // TestDrawGeom3s([interCSG], 1); + let sideModelCon; + let yv = extrude.Normal; + let zv = new Vector3().setFromMatrixColumn(faceMtxOnBoard, 2); + if (isParallelTo(yv, zv)) { + sideModelCon = knifeCon.Clone(); + yv = new Vector3().setFromMatrixColumn(extrude.OCS, 0); + } + let xv = yv.clone().cross(zv); + yv.copy(zv).cross(xv); + xv.normalize(); + yv.normalize(); + zv.normalize(); + const grooveMtx = new Matrix4().makeBasis(xv, yv, zv).copyPosition(faceMtxOnBoard); + const grooveMtxInv = new Matrix4().getInverse(grooveMtx).multiply(faceMtxOnBoard).multiply(mtx); + for (let p of pts) + p.applyMatrix4(grooveMtxInv); + let box = new Box3Ext().setFromPoints(pts); + if (!box.isSolid(0.1)) + continue; + let size = box.getSize(new Vector3()); + let solid = new ExtrudeSolid_1(); + solid.groovesAddDepth = extrude.groovesAddDepth; + solid.groovesAddLength = extrude.groovesAddLength; + solid.groovesAddWidth = extrude.groovesAddWidth; + solid.knifeRadius = extrude.knifeRadius; + solid.ConverToRectSolid(size.x, size.y, size.z); + if (sideModelCon) { + if (sideModelCon instanceof Circle) { + if (equaln$1(size.x, size.y)) + solid.ContourCurve = sideModelCon; + else { + //保留圆形切割 + const r = sideModelCon.Radius * 2; + const cuLength = cus[intersectFaceIndex].Length; + let splitLeft = false; + let intersectX = 0; + if (equaln$1(box.min.x, 0)) + intersectX = r - box.max.x + sideModelCon.BoundingBox.min.x; + else { + splitLeft = true; + intersectX = cuLength - box.min.x + sideModelCon.BoundingBox.min.x; + } + let starKnifePls = new Polyline([{ pt: AsVector2({ x: intersectX, y: 1 }), bul: 0 }, { pt: AsVector2({ x: intersectX, y: 0 }), bul: 0 }]); + let faceRegions = SplitPolyline(sideModelCon, [starKnifePls]); + faceRegions = faceRegions.filter((faceRegion) => { + let x = faceRegion.BoundingBox.getCenter(new Vector3).x; + return splitLeft ? x < intersectX : x > intersectX; + }); + if (faceRegions.length) + solid.ContourCurve = faceRegions[0]; + } + solid.ApplyMatrix(grooveMtx.clone().setPosition(box.min.applyMatrix4(grooveMtx)).multiply(mirrorMtxZ)); + solid.ApplyMatrix(this.OCSInv); + solid.ApplyMatrix(faceMtxInv); + } + else { + sideModelCon.ApplyMatrix(new Matrix4().setPosition(sideModelCon.BoundingBox.min.negate())); + sideModelCon.ApplyMatrix(extrude.OCS); + sideModelCon.ApplyMatrix(this.OCSInv); + sideModelCon.ApplyMatrix(new Matrix4().getInverse(faceMtx)); + solid.ContourCurve = sideModelCon; + //确保侧面造型槽solid在XY平面上 + solid.Z0(); + } + } + else { + solid.ApplyMatrix(grooveMtx.clone().setPosition(box.min.applyMatrix4(grooveMtx)).multiply(mirrorMtxZ)); + solid.ApplyMatrix(this.OCSInv); + solid.ApplyMatrix(faceMtxInv); + } + let sideModelList = relevanceSideModelMap.get(intersectFaceIndex); + if (sideModelList) + sideModelList.push(solid); + else + sideModelList = [solid]; + relevanceSideModelMap.set(intersectFaceIndex, sideModelList); + } + } + }; + for (let extrude of knifeExtrudes) { + let gs = this.ConverToLocalGroove(extrude); + if (gs.length) { + let sideGrooves = []; + for (let g of gs) { + //侧槽 + if (this.GrooveCheckPosition(g) === Status.Side) + sideGrooves.push(g); + else + grooves.push(g); + } + if (sideGrooves.length) { + if (sideGrooves.length === gs.length) + GetSideModelList(extrude); + else { + for (let g of sideGrooves) + GetSideModelList(g); + } + } + } + } + return { grooves, relevanceSideModelMap }; + } RelevanceSubtract(knif, check = false) { if (!this.Id || !knif.Id) return; @@ -16849,10 +19639,33 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { this.grooves.push(...grooves); this.GrooveCheckAllAutoSplit(output); } + /** + * 添加侧面槽 + * 通常槽已经校验过准确性,所以不在校验 + */ + AppendRelevanceSideModel(relevanceSideModelMap) { + if (this instanceof Board) { + this.ClearSideModelingCache(); + this.RelevanceSideModelMap = relevanceSideModelMap; + } + } + AppendSideModel(relevanceSideModelMap) { + if (relevanceSideModelMap.size && this instanceof Board) { + this.WriteAllObjectRecord(); + const sideModelMap = this.SideModelingMap; + for (let [num, soilds] of relevanceSideModelMap) { + let ss = this.SideModelingMap.get(num) ?? []; + for (let soild of soilds) + ss.push(soild); + sideModelMap.set(num, ss); + } + this.SideModelingMap = sideModelMap; + } + } GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum) { switch (snapMode) { case ObjectSnapMode.End: - return this.GetStretchPoints(); + return this.GetGripOrStretchPoints(DragPointType.End); case ObjectSnapMode.Mid: case ObjectSnapMode.Cen: case ObjectSnapMode.Nea: @@ -16893,8 +19706,19 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { return counts; } GetGripOrStretchPoints(dragType) { - let isGrip = dragType === DragPointType.Grip; - let pts = isGrip ? this.ContourCurve.GetGripPoints() : this.ContourCurve.GetStretchPoints(); + let pts; + if (dragType === DragPointType.Grip) + pts = this.ContourCurve.GetGripPoints(); + else if (dragType === DragPointType.Stretch) + pts = this.ContourCurve.GetStretchPoints(); + else if (dragType === DragPointType.End) { + if (this.contourCurve instanceof Circle) + pts = this.ContourCurve.GetGripPoints(); + else + pts = this.ContourCurve.GetStretchPoints(); + } + else + pts = []; let v = new Vector3(0, 0, this.thickness); pts.push(...pts.map(p => p.clone().add(v))); pts.forEach(p => { p.applyMatrix4(this.OCSNoClone); }); @@ -16907,14 +19731,15 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { MoveGripOrStretchPoints(indexList, vec, dragType) { this.WriteAllObjectRecord(); let counts = this.GetStrectchPointCountList(dragType); - if (dragType === DragPointType.Stretch && indexList.length === arraySum(counts)) { + const isGrip = dragType === DragPointType.Grip; + if (!isGrip && indexList.length === arraySum(counts)) { this.Position = this.Position.add(vec); return; } arraySortByNumber$1(indexList); let updateBak = this.AutoUpdate; this.AutoUpdate = false; - if (this.grooves.length === 0) { + if (!this.grooves.length && !this.HasSideModel) { this.MoveGripOrStretchPointsOnly(indexList, vec, dragType); } else { @@ -16922,6 +19747,27 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { let icount = indexList.length; let offset = 0; let grooveIndex = -1; + let sideModelIndex = -1; + let cus; + let baseIndexList = new Set(); + let sideModelSealCurveMtxCache = new Map(); + //获取侧面的OCS + const GetSideModelSealCurveMtx = (num) => { + if (!cus) + cus = GetBoardContour(this)?.Explode(); + let mtx = sideModelSealCurveMtxCache.get(num); + if (!mtx && cus?.length) { + let cu = cus[num]; + if (!cu) + return new Matrix4; + let x = cu.GetFirstDeriv(0).normalize().applyMatrix4(this.OCS.setPosition(0, 0, 0)); + let y = this.Normal; + let z = x.clone().cross(y); + mtx = new Matrix4().getInverse(new Matrix4().makeBasis(x, y, z)); + sideModelSealCurveMtxCache.set(num, mtx); + } + return mtx ?? new Matrix4; + }; for (let count of counts) { offset += count; let ilist = []; @@ -16932,18 +19778,125 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { break; } if (ilist.length > 0) { - if (grooveIndex === -1) + if (grooveIndex === -1) { + let orgCus; + if (this.HasSideModel) + orgCus = GetBoardContour(this)?.Explode(); this.MoveGripOrStretchPointsOnly(ilist, vec, dragType); - else + if (this.HasSideModel) { + //修正点的索引 判断侧面造型的起点是否被移动 + let stretchCount = this.ContourCurve.GetDragPointCount(dragType); + for (let num of ilist) { + if (num < stretchCount) + baseIndexList.add(num); + else + baseIndexList.add(num - stretchCount); + } + let isChangeThiness = this.IsStretchThickness(Array.from(baseIndexList)); + //起点被拉伸时反向移动 达到相对静止状态 + const sideModelingMap = this.SideModelingMap; + for (let [num, soilds] of sideModelingMap) { + let firstIndex = num; + let secondIndex = (num + 1) === stretchCount ? 0 : num + 1; + if (isGrip) { + firstIndex = num * 2; + //拉取中点时 + secondIndex = (firstIndex - 1) < 0 ? (stretchCount - 1) : (firstIndex - 1); + } + //Grip的时候点选中点时两边相连的 也反向移动 firstIndex - 1 + if (!isGrip && (baseIndexList.has(firstIndex) && !baseIndexList.has(secondIndex)) || + isGrip && (baseIndexList.has(firstIndex) || baseIndexList.has(secondIndex)) || + isChangeThiness && ilist[0] < stretchCount) { + for (let s of soilds) { + let mtx = GetSideModelSealCurveMtx(num); + let v = vec.clone().applyMatrix4(mtx).setZ(0); + if (isChangeThiness) { + v.setX(0); + } + else { + if (cus?.length && cus[num] && orgCus) + v = new Vector3(orgCus[num].Length - cus[num].Length); + else + v.setY(0); + } + s.ApplyMatrix(new Matrix4().setPosition(v.clone().multiplyScalar(-1))); + } + } + } + } + } + else if (grooveIndex < this.grooves.length) this.grooves[grooveIndex].MoveGripOrStretchPoints(ilist, vec, dragType); + else { + //侧面造型拉伸 + const sideModelingMap = this.SideModelingMap; + let soildCount = 0; + const isMainChangeThiness = this.IsStretchThickness(Array.from(baseIndexList)); + for (let [num, soilds] of sideModelingMap) { + soildCount += soilds.length; + if (sideModelIndex < soildCount) { + let mtx = GetSideModelSealCurveMtx(num); + let v = vec.clone().applyMatrix4(mtx); + if (isMainChangeThiness) + v.setX(0); + let soild = soilds[soilds.length - (soildCount - sideModelIndex)]; + const stretchPtLength = soild.ContourCurve.GetStretchPoints().length; + const firstIndex = num; + const secondIndex = (num + 1) === stretchPtLength ? 0 : num + 1; + const mainSoildIList = []; + const grooveSoildIList = []; + for (let k of ilist) { + if (k < stretchPtLength * 2) + mainSoildIList.push(k); + else + grooveSoildIList.push(k); + } + //改变侧面造型厚度 + if (soild.IsStretchThickness(mainSoildIList)) { + if (mainSoildIList.every(i => i >= stretchPtLength)) { + //造型 底边 + v.setZ(-v.z); + } + else if ((baseIndexList.has(firstIndex) && baseIndexList.has(secondIndex))) { + //造型见光面 和侧面一起移动 + ilist = []; + for (let k = 0; k < stretchPtLength; k++) + ilist.push(k + stretchPtLength); + //有选中子槽端点 默认一起改变 + if (grooveSoildIList.length) { + const grooveStretchPtLength = soild.grooves[0].ContourCurve.GetStretchPoints().length; + for (let k = 0; k < grooveStretchPtLength; k++) + ilist.push(k + grooveStretchPtLength + stretchPtLength * 2); + } + } + else + break; + } + else if (!isMainChangeThiness && baseIndexList.has(firstIndex) && baseIndexList.has(secondIndex)) + break; + else + v.setZ(0); + soild.MoveGripOrStretchPoints(ilist, v, dragType); + break; + } + } + } } grooveIndex++; + if (grooveIndex >= this.grooves.length) + sideModelIndex++; } } - if (this.objectId) { + if (this.objectId || this.IsEmbedEntity) { this.CheckContourCurve(); let splitEntitys = []; this.GrooveCheckAll(splitEntitys); + if (this.HasSideModel) { + let board = this; + board.SplitBoardSideModelUtil.Init(board); + board.SplitBoardSideModelUtil.SpiltSideModelOfBrContour(board); + board.SplitBoardSideModelUtil.SpiltSideModelOfBrThickness(board, board.Thickness); + } if (splitEntitys.length > 0 && this.Owner) { let ms = this.Owner.Object; for (let e of splitEntitys) @@ -17075,8 +20028,10 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { if (!(equaln$1(minZ, 0))) target.ApplyMatrix(MoveMatrix(this.Normal.multiplyScalar(-minZ))); } - else if (maxZ >= (this.thickness - 1e-2) && minZ > 0) //正面 + else if (maxZ >= (this.thickness - 1e-2) && minZ > 0 && (this.thickness - minZ) > 0.01) //正面 target.Thickness = this.thickness - minZ; + else if (minZ > 1e-2 && maxZ < (this.thickness - 1e-2)) + return Status.Side; else return Status.False; if (equaln$1(target.thickness, this.thickness, 1e-2)) @@ -17165,6 +20120,10 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { return grooves; } } + /** (步骤4.2.1) 针对圆弧板-修正路径 */ + AdjustPath(ext, outline) { } + /** (步骤4.2.2) 针对圆弧板-修正位置 */ + AdjustPosition(ext, basePoint) { } /** * (步骤4.2) * 计算本实体被全身的凹槽差集后正确的实体轮廓,和有可能的分裂实体 @@ -17181,12 +20140,20 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { let grooveCurve = groove.ContourCurve.Clone(); let matrixToLocal = this.OCSInv.multiply(groove.OCS); grooveCurve.ApplyMatrix(matrixToLocal); - subtractShape.AppendShapeList(new Shape(Contour.CreateContour([grooveCurve], false))); + subtractShape.AppendShapeList(new Shape(Contour.CreateContour([grooveCurve], false), groove.grooves.filter(g => equaln$1(g.thickness, groove.thickness)).map(g => { + let gc = g.ContourCurve.Clone(); + let mtx = g.OCS.premultiply(groove.OCSInv).premultiply(matrixToLocal); + gc.ApplyMatrix(mtx); + return Contour.CreateContour([gc], false); + }))); allDepthGrooves.push(groove); return true; } return false; }); + // 测试绘制黄色为原始轮廓 红色为切割轮廓 + // TestDraw(new Region(shapeManager).Clone(), 2); + // TestDraw(new Region(subtractShape).Clone(), 1); shapeManager.SubstactBoolOperation(subtractShape); let shapes = shapeManager.ShapeList; //不做任何改变 @@ -17217,8 +20184,14 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { groove.thickness = this.thickness; ext.grooves.push(groove); } + const shapeOutline = shape.Outline.Curve.Clone(); + // 针对圆弧板-修正路径 + this.AdjustPath(ext, shapeOutline); + const shapeBasePoint = shape.Outline.Curve.StartPoint; ext.ContourCurve = shape.Outline.Curve; ext.GrooveCheckAll(splitEntitys); + // 针对圆弧板-修正位置 + this.AdjustPosition(ext, shapeBasePoint); ext.Update(); splitEntitys.push(ext); } @@ -17265,13 +20238,7 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { }); //清除全深洞的子槽 for (let g of this.grooves) { - if (equaln$1(g.thickness, this.thickness, 1e-3)) { - /* - 此刻我们直接将它的子槽清空,虽然子槽可能将这个槽分裂成2个, - 但是这样的情况只能在造型应用中才会产生 - */ - g.grooves.length = 0; - } + if (equaln$1(g.thickness, this.thickness, 1e-3)) ; else arrayRemoveIf(g.grooves, subg => !equaln$1(g.thickness, subg.thickness, 1e-3)); } @@ -17356,10 +20323,10 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { } InitDrawObject(renderType = RenderType.Wireframe) { if (renderType === RenderType.Wireframe) { - return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex, this.Freeze)); + return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex, this.Freeze)); } else if (renderType === RenderType.Conceptual) { - return new Object3D().add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex, FrontSide, true, this.Freeze)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); + return new Object3D().add(new Mesh(this.MeshGeometry, this.GetConceptualMaterial()), new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); } else if (renderType === RenderType.Physical) { let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial); @@ -17415,16 +20382,23 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { this.__CacheKnifVersion__ = {}; let knifs = []; this.GetRelevanceKnifes(knifs); + //如果是切割圆弧板或刀是圆弧板,先不切割 + // if (this instanceof Board && this.IsArcBoard) knifs = []; + // knifs = knifs.filter(e => !(e instanceof Board && e.IsArcBoard)); if (knifs.length > 0) { for (let k of knifs) //复合实体(五金)的子实体没有id this.__CacheKnifVersion__[k.Id?.Index ?? k.__TempIndexVersion__?.Index] = k.__TempIndexVersion__?.Version ?? k.__UpdateVersion__; - let tempExtrude = this.Clone(); + let tempExtrude = this.Clone(true); tempExtrude.RelevanceKnifs.length = 0; //避免递归 + if (tempExtrude instanceof Board) + tempExtrude.SideModelingMap.clear(); if (!this.ReadFileIng) tempExtrude.__OriginalId__ = this.Id; //在读取文件时不打印日志 let output = [tempExtrude]; let ok = tempExtrude.Subtract(knifs, output); this.__CacheSplitExtrudes = output; + if (tempExtrude instanceof Board) + this.AppendRelevanceSideModel(tempExtrude.SideModelingMap); if (ok) { this.__CacheVolume__ = tempExtrude.Volume; let meshs = []; @@ -17472,8 +20446,11 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { this.Id && this instanceof Board && this.__CacheVolume__ !== undefined && - !equaln$1(this.__CacheVolume__, this.Volume)) + !equaln$1(this.__CacheVolume__, this.Volume)) { InteractionLog([{ msg: `${this.Name}(${this.Id.Index})`, entity: [this] }, { msg: "关联槽已逃离或者被清除!" }], LogType.Warning); + //清除关联侧槽 + this.AppendRelevanceSideModel(new Map()); + } this.__CacheSplitExtrudes = [this]; this.__CacheVolume__ = undefined; } @@ -17538,6 +20515,10 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { return this._MeshGeometry; this._EdgeGeometry = undefined; //清理掉(以便在被csg切割后得到edgegeom) let grooves = this.Grooves; + /** + * 如果要板件圆造型的挖穿跟不挖穿的效果一致 + * 则把下段代码的判断,改为 if (grooves.length === 0) + */ if (grooves.every(g => equaln$1(g.thickness, this.thickness)) || grooves.length === 0) { let contour = this.ContourCurve.Clone(); let holes = []; @@ -17561,6 +20542,7 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { bevelOffset: -2, bevelSegments: 1, }; + shape.DisplayAccuracy = this._DisplayAccuracy; let geo = new ExtrudeGeometry(shape.Shape, extrudeSettings); geo.applyMatrix4(contour.OCSNoClone); if (this.bevelEnabled) @@ -17569,7 +20551,14 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { //板在某些时候需要布尔运算(二维刀路) this._MeshGeometry = this.UpdateMeshGeom(geo); this._MeshGeometry["IsMesh"] = true; - this.GenWorldUV(this._MeshGeometry); + let mtl = this.Material?.Object ?? this.Db?.DefaultMaterial; + if (mtl?.UseWorldUV) { + //类型转换 + if (this._MeshGeometry instanceof Geometry) + this._MeshGeometry = new BufferGeometry().fromGeometry(this._MeshGeometry); + let gen = new GenUVForWorld(); + gen.GenGeoUV(this._MeshGeometry, mtl.Material); + } //edge geometry if (grooves.length < MaxDrawGrooveCount && !this._EdgeGeometry) //这个代码保证线框和概念对齐 { @@ -17595,6 +20584,7 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { return geo; } get Has2DPath() { return false; } + get HasSideModel() { return false; } get EdgeGeometry() { if (this._EdgeGeometry) return this._EdgeGeometry; @@ -17602,8 +20592,8 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { if (this._EdgeGeometry) return this._EdgeGeometry; //这里我们超过100就用这个,为了性能 和MaxDrawGrooveCount不一致 - if (this.grooves.length > 100 || (!this.Has2DPath && (this.grooves.length === 0 || this.grooves.every(g => equaln$1(g.thickness, this.thickness))))) { - let coords = FastExtrudeEdgeGeometry(this, this.ColorIndex, 12, true); + if (this.grooves.length > 100 || (!this.Has2DPath && !this.HasSideModel && (this.grooves.length === 0 || this.grooves.every(g => equaln$1(g.thickness, this.thickness))))) { + let coords = FastExtrudeEdgeGeometry(this, this.DrawColorIndex, 12, true); let edgeGeo = new BufferGeometry(); edgeGeo.setAttribute('position', new Float32BufferAttribute(coords, 3)); this._EdgeGeometry = edgeGeo; @@ -17665,16 +20655,25 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { if (renderType === RenderType.Wireframe) { let l = obj; l.geometry = this.EdgeGeometry; - l.material = ColorMaterial.GetLineMaterial(this.ColorIndex, this.Freeze); + l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex, this.Freeze); } else if (renderType === RenderType.Conceptual) { - return obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex, FrontSide, true, this.Freeze)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); + return obj.add(new Mesh(this.MeshGeometry, this.GetConceptualMaterial()), new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); } else if (renderType === RenderType.ModelGroove) { obj.add( // new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(9, FrontSide, true, this.Freeze)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); obj.add(this.GetModelGroove()); + //侧槽 + obj.add(this.GetSideModelGroove()); + } + // 概念透明 + else if (renderType === RenderType.ConceptualTransparent) { + let color = this.DrawColorIndex; + if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) + color = 8; + return obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())); } else if (renderType === RenderType.Physical) { let mesh = obj; @@ -17697,15 +20696,24 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { }); return obj.add(mesh, new LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())); } + return obj; } UpdateDrawObjectMaterial(renderType, obj) { if (renderType === RenderType.Wireframe) { let l = obj; - l.material = ColorMaterial.GetLineMaterial(this.ColorIndex, this.Freeze); + l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex, this.Freeze); } else if (renderType === RenderType.Conceptual) { let mesh = obj.children[0]; - mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex, FrontSide, true, this.Freeze); + mesh.material = this.GetConceptualMaterial(); + } + // 概念透明 + else if (renderType === RenderType.ConceptualTransparent) { + let color = this.DrawColorIndex; + if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) + color = 8; + let mesh = obj.children[0]; + mesh.material = ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide); } else if (renderType === RenderType.Physical2) { let mesh = obj.children[0]; @@ -17716,6 +20724,15 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { mesh.material = this.MeshMaterial; } } + //获取概念视图材质 冻结状态使用257色号 半透明 + GetConceptualMaterial() { + let mtl; + if (this.Freeze) + mtl = ColorMaterial.GetBasicMaterialTransparent2(257, 0.5); + else + mtl = ColorMaterial.GetConceptualMaterial(this.DrawColorIndex, FrontSide, true); + return mtl; + } GetModelGroove() { const grooves = []; for (const sp of this.__CacheSplitExtrudes ?? []) { @@ -17731,11 +20748,42 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { const line = new LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(1, this.Freeze)); const meshGeo = grooveClone.MeshGeometry; meshGeo.applyMatrix4(mtx); - const mesh = new Mesh(meshGeo, ColorMaterial.GetConceptualMaterial(1, FrontSide, true, this.Freeze, 0.6)); + const mesh = new Mesh(meshGeo, ColorMaterial.GetBasicMaterialTransparent2(1, 0.6)); group.add(mesh, line); } return group; } + GetSideModelGroove() { + let board = this; + const AllSideModelGrooveMap = board.AllSideModelGrooveMap; + const group = new Group(); + if (AllSideModelGrooveMap.size) { + let con = GetBoardContour(board); + if (!con) + return group; + let inverseZ = con.Area2 < 0; + let cus = con.Explode(); + const mirrorMtxZ = MakeMirrorMtx(ZAxis); + for (let [index, soilds] of AllSideModelGrooveMap) { + let cu = cus[index]; + if (!cu) + continue; + let mt4 = GetSideCuFaceMtx(cus[index], inverseZ); + for (let soild of soilds) { + const edgeGeo = soild.EdgeGeometry; + const line = new LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(1, this.Freeze)); + line.applyMatrix4(mirrorMtxZ); + line.applyMatrix4(mt4.clone().multiply(soild.OCS)); + const meshGeo = soild.MeshGeometry; + const mesh = new Mesh(meshGeo, ColorMaterial.GetBasicMaterialTransparent2(1, 0.6)); + mesh.applyMatrix4(mirrorMtxZ); + mesh.applyMatrix4(mt4.clone().multiply(soild.OCS)); + group.add(mesh, line); + } + } + } + return group; + } UpdateJigMaterial(color = 8) { } //#endregion @@ -17787,9 +20835,12 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { this.RelevanceKnifs.push(id); } } + if (ver > 3) { + this._DisplayAccuracy = file.Read(); + } } WriteFileOnly(file) { - file.Write(3); + file.Write(4); file.Write(this.height); file.Write(this.width); file.Write(this.thickness); @@ -17809,6 +20860,7 @@ let ExtrudeSolid = ExtrudeSolid_1 = class ExtrudeSolid extends Entity { file.Write(this.RelevanceKnifs.length); for (let id of this.RelevanceKnifs) file.WriteSoftObjectId(id); + file.Write(this._DisplayAccuracy); } //对象从文件中读取数据,初始化自身 _ReadFile(file) { @@ -17874,8 +20926,11 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { */ Explode() { return this.Entitys.map(e => { - let cloneE = e.Clone(); - cloneE.Material = e.Material; + if (!e.Db && this._db) + e.SetDatabase(this._db); + let cloneE = e.Clone(false); + if (!(cloneE instanceof CompositeEntity_1)) + cloneE.Material = e.Material; return cloneE.ApplyMatrix(this.OCSNoClone); }); } @@ -17910,10 +20965,11 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { } UpdateDrawObject(renderType, obj) { Object3DRemoveAll(obj); - if (renderType === RenderType.ModelGroove) - return; + if (renderType === RenderType.ModelGroove || renderType === RenderType.Edge) + return; //造型槽和封边模式下不显示五金 for (let e of this.Entitys) { e.IsEmbedEntity = true; + e.ParentEntity = this.ParentEntity || this; // //内嵌实体在某些时候可能被清理,修复它 // if (e.DrawObject.children.length === 0) // e.ClearDraw(); @@ -17927,6 +20983,20 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { } } } + /** 为了避免_CacheDrawObject中的key错误,这里重写了GetDrawObjectFromRenderType,而不是直接在UpdateDrawObject中修改rtype */ + GetDrawObjectFromRenderType(renderType = RenderType.Wireframe) { + if (renderType === RenderType.ConceptualTransparent && this instanceof HardwareCompositeEntity) { + // 未开启五金透明选项时,五金的概念(透明)效果同概念 + if (!HostApplicationServices.IsTransparentMetals && this.HardwareOption.type === EMetalsType.Metals) { + renderType = RenderType.Conceptual; + } + // 组件同理 + if (!HostApplicationServices.IsTransparentComp && this.HardwareOption.type === EMetalsType.Comp) { + renderType = RenderType.Conceptual; + } + } + return super.GetDrawObjectFromRenderType(renderType); + } get ColorIndex() { return super.ColorIndex; } @@ -17955,7 +21025,69 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { e.Material = id; } } + get Layer() { + return super.Layer; + } + set Layer(id) { + super.Layer = id; + for (let e of this.Entitys) { + if (!e.Db) + e.SetDatabase(this.Db); + e.Layer = id; + } + } + SetAllMaterialAtSlot(mtl) { + if (this.LockMaterial) + return; + this.WriteAllObjectRecord(); + this.Traverse(e => { + if (e === this) + return; + e.SetAllMaterialAtSlot(mtl); + }); + this.Update(UpdateDraw.Material); + } + GetMtlLockedStatus() { + let partMtlLocked = false; + let allMtlLocked = true; + this.Traverse(e => { + if (e === this) + return; + const res = e.GetMtlLockedStatus(); + if (res.partMtlLocked) { + partMtlLocked = true; + if (!res.allMtlLocked) + allMtlLocked = false; + } + else + allMtlLocked = false; + }); + return { + partMtlLocked, + allMtlLocked, + }; + } + GetPhyMtlRecords(containErased = false) { + const materials = []; + this.Traverse(e => { + if (e === this) + return; + const res = e.GetPhyMtlRecords(containErased); + if (res.length) + arrayPushArray$1(materials, res); + }); + return materials; + } UpdateDrawObjectMaterial(renderType, obj) { + if (renderType === RenderType.ModelGroove) + return; + this.Traverse(e => { + if (e === this) + return; + let o = e.GetDrawObjectFromRenderType(renderType); + if (o) + e.UpdateDrawObjectMaterial(renderType, o); + }); this.UpdateDrawObject(renderType, obj); } RestoreJigMaterial() { @@ -17971,10 +21103,10 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { * @param viewXform const 最近点捕捉需要这个变量 * @returns object snap points */ - GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum) { let pts = []; for (let e of this.Entitys) - arrayPushArray$1(pts, e.Clone().ApplyMatrix(this.OCSNoClone).GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)); + arrayPushArray$1(pts, e.Clone().ApplyMatrix(this.OCSNoClone).GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum)); return pts; } GetGripPoints() { @@ -18035,6 +21167,8 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { break; } let ent = this.Entitys[j]; + ent.IsEmbedEntity = true; + ent.ParentEntity = this; dragType === DragPointType.Grip ? ent.MoveGripPoints(ilist, vec) : ent.MoveStretchPoints(ilist, vec); if (ent instanceof ExtrudeSolid) //取消优化判断this.Objectid,因为这个实体可能被复合在另一个实体中,导致这个id是不存在的,所以我们无法判断它在拽拖. ent.CheckContourCurve(); @@ -18069,7 +21203,7 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { //#endregion //#region 文件序列化 _ReadFile(file) { - file.Read(); + let v = file.Read(); super._ReadFile(file); let count = file.Read(); this.Entitys.length = 0; @@ -18078,14 +21212,20 @@ let CompositeEntity = CompositeEntity_1 = class CompositeEntity extends Entity { if (ent) this.Entitys.push(ent); } + if (v > 1) + this._LockMaterial = file.ReadBool(); + else + this._LockMaterial = false; } //对象将自身数据写入到文件. WriteFile(file) { - file.Write(1); + file.Write(2); super.WriteFile(file); file.Write(this.Entitys.length); for (let e of this.Entitys) file.WriteObject(e); + // ver2 + file.WriteBool(this._LockMaterial); } }; __decorate([ @@ -18189,11 +21329,15 @@ let HardwareCompositeEntity = HardwareCompositeEntity_1 = class HardwareComposit this.RelevanceHandle.push(objId); } } + if (v > 5) { + this.HardwareOption.goodsId = file.Read(); + this.HardwareOption.goodsSn = file.Read(); + } } //对象将自身数据写入到文件. WriteFile(file) { super.WriteFile(file); - file.Write(5); + file.Write(6); file.Write(this.HardwareOption.type); file.Write(this.HardwareOption.isSplite); file.Write(this.HardwareOption.isSplitePrice); @@ -18226,6 +21370,8 @@ let HardwareCompositeEntity = HardwareCompositeEntity_1 = class HardwareComposit file.Write(this.RelevanceHandle.length); for (let id of this.RelevanceHandle) file.WriteSoftObjectId(id); + file.Write(this.HardwareOption.goodsId); + file.Write(this.HardwareOption.goodsSn); } }; __decorate([ @@ -18247,31 +21393,6 @@ HardwareCompositeEntity = HardwareCompositeEntity_1 = __decorate([ Factory ], HardwareCompositeEntity); -const CanDrawHoleFuzz = 0.1; -var BoardFaceType; -(function (BoardFaceType) { - BoardFaceType[BoardFaceType["Side"] = 0] = "Side"; - BoardFaceType[BoardFaceType["NoSide"] = 1] = "NoSide"; -})(BoardFaceType || (BoardFaceType = {})); -function GetSideFaceMtx(cu, inverseZ = false) { - let x = cu.GetFirstDeriv(0).normalize(); - let y = ZAxis; - let z = x.clone().cross(y); - if (inverseZ) - z.negate(); - let basePt; - if ((equaln$1(x.x, 0, 1e-5) && x.y > 0) || x.x < -1e-5) { - x.negate(); - basePt = cu.EndPoint; - } - else - basePt = cu.StartPoint; - //构建面矩阵 - return new Matrix4() - .makeBasis(x, y, z) - .setPosition(basePt); -} - const x = new Vector3; const y = new Vector3; let tempPolyline; @@ -18326,11 +21447,29 @@ function ConverArcToPtsBul(arc, hasEnd = false) { return result; } +var ModelType; +(function (ModelType) { + ModelType[ModelType["frontBackModel"] = 0] = "frontBackModel"; + ModelType[ModelType["sideModel"] = 1] = "sideModel"; + ModelType[ModelType["drill"] = 2] = "drill"; + ModelType[ModelType["sideHoleModel"] = 3] = "sideHoleModel"; +})(ModelType || (ModelType = {})); +var SplitOrderType; +(function (SplitOrderType) { + SplitOrderType[SplitOrderType["ChaiDan"] = 0] = "ChaiDan"; + SplitOrderType[SplitOrderType["HoleGrooveDim"] = 1] = "HoleGrooveDim"; +})(SplitOrderType || (SplitOrderType = {})); var Production; (function (Production) { - /**获取板件拆单数据 */ - function GetBoardSplitOrderData(br, redundancyKnif = 0) { - let sealedData = GetSealedBoardContour(br); + /** + * 获取板件拆单数据 + * @param {Board} br 板件 + * @param {number} [redundancyKnif=0] 刀冗余 + * @param {SplitOrderType} [splitType=SplitOrderType.ChaiDan] 拆单类型,默认为拆单 + * @return {*} {(ISpliteOrderData | undefined)} + */ + function GetBoardSplitOrderData(br, redundancyKnif = 0, splitType = SplitOrderType.ChaiDan) { + let sealedData = GetSealedBoardContour(br, splitType); if (!sealedData) { ToasterShowEntityMsg({ msg: br.Name + " 轮廓错误,可能存在轮廓自交,请检查后重新拆单!(错误的板已经选中,您可以按住鼠标中键查看该板!)(使用FISC命令可以修复自交轮廓!)", @@ -18352,47 +21491,74 @@ var Production; let originOutlinePtsBul = ConverToPtsBul(orgContour); originOutlinePtsBul.pts.pop(); originOutlinePtsBul.buls.pop(); - let { modeling, sideModeling } = GetBoardModelingData(br, offsetTanslation, redundancyKnif); + const curveBoardModeling = br.ArcBoardModeling; + //正反面造型 自定义不规则排钻孔 + let { modeling, sideModeling } = GetBoardModelingData(br, offsetTanslation, redundancyKnif, curveBoardModeling); + //侧面造型 + let { sideModel, sideHole } = GetBoardSideModelingData(br, true); + sideModeling.push(...sideModel); let boardContour; - if (GetSpiteSize(br)) + if (HasSpiteSize(br)) boardContour = ConverToPtsBul(br.ContourCurve); //不分裂圆弧转点表 + let info = GetBoardInfo(br, size); //每段封边信息 - let perSealData = ParseSealData(sealedData); - let perBoardEdgeRemarkData = br.IsSpecialShape ? ParseBoardEdgeRemarkData(sealedData, br.BoardProcessOption.highBoardEdgeRemark) : []; - //因为传递给拆单软件的数据是逆时针,所以我们翻转它 - if (orgContour.Area2 < 0) + let { seals: perSealData, reservedEdges: perReservedEdgeData } = ParseSealData(sealedData, br.BoardProcessOption.color); + let perBoardEdgeRemarkData; + if (splitType === SplitOrderType.HoleGrooveDim) + perBoardEdgeRemarkData = GetHighBoardEdgeRemark(br, sealedData.brCurves, true); // 孔槽板边备注,按照正常的边顺序返回备注数据即可 + else + perBoardEdgeRemarkData = ParseBoardEdgeRemarkData(sealedData, br.BoardProcessOption.highBoardEdgeRemark); // 拆单的板边备注,并且轮廓是圆的时候,需要分成两段圆弧。 + let isReverse = orgContour.Area2 < 0; + //因为传递给拆单软件的数据是逆时针,所以是顺时针时我们翻转它 + if (isReverse) { perSealData.reverse(); + perBoardEdgeRemarkData.reverse(); + perReservedEdgeData.reverse(); + //对应sealedOutlinePtsBul顺序 解析孔时翻转orgContour + orgContour.Reverse(); + } + let holes = GetBoardHolesData(br, offsetTanslation, orgContour); + holes.sideHoles.push(...sideHole); return { - info: GetBoardInfo(br, size), + info, originOutlin: originOutlinePtsBul, //拼错了 未扣封边的点表 outline: sealedOutlinePtsBul, //扣完封边的点表 sealing: perSealData, //每段曲线的封边信息 boardEdgeRemark: perBoardEdgeRemarkData, //每段曲线的板边备注信息 + reservedEdge: perReservedEdgeData, //每段曲线的预留边信息 modeling, - holes: GetBoardHolesData(br, offsetTanslation, orgContour), + curveBoardModeling, + holes, sideModeling, offsetTanslation, metalsData: GetBoardMetals(br), boardContour, modeling2D: Get2DModeing(br, offsetTanslation), modeling3D: Get3DModeing(br, offsetTanslation), + isReverse //轮廓是否翻转 }; } Production.GetBoardSplitOrderData = GetBoardSplitOrderData; //生产那边需要一一对应的数据 - function ParseSealData(sealData) { + function ParseSealData(sealData, defaultSealColor = "") { let seals = []; + let reservedEdges = []; for (let i = 0; i < sealData.brCurves.length; i++) { let curve = sealData.brCurves[i]; let sealD = sealData.highSeals[i]; + let reservedEdgeD = sealData.highReservedEdges[i]; if (curve instanceof Circle) { let seal2 = { length: curve.Length * 0.5, - ...sealD + ...sealD, + sealColor: sealD.sealColor ? sealD.sealColor : defaultSealColor }; + //圆型板拆单时是分成两段圆弧处理 seals.push(seal2); seals.push({ ...seal2 }); - return seals; + reservedEdges.push(reservedEdgeD); + reservedEdges.push({ ...reservedEdgeD }); + return { seals, reservedEdges }; } else { if (curve instanceof Polyline) //多段线炸开 @@ -18400,22 +21566,26 @@ var Production; for (let subC of curve.Explode()) { let seal2 = { length: subC.Length, - ...sealD + ...sealD, + sealColor: sealD.sealColor ? sealD.sealColor : defaultSealColor }; seals.push(seal2); + reservedEdges.push(reservedEdgeD); } } else //直线 圆弧直接加 { let seal2 = { length: curve.Length, - ...sealD + ...sealD, + sealColor: sealD.sealColor ? sealD.sealColor : defaultSealColor }; seals.push(seal2); + reservedEdges.push(reservedEdgeD); } } } - return seals; + return { seals, reservedEdges }; } Production.ParseSealData = ParseSealData; function ParseBoardEdgeRemarkData(sealData, highBoardEdgeRemark) { @@ -18424,6 +21594,7 @@ var Production; let curve = sealData.brCurves[i]; let remarkData = highBoardEdgeRemark[i]; if (curve instanceof Circle) { + //圆型板拆单时是分成两段圆弧处理 remarks.push(remarkData); remarks.push({ ...remarkData }); return remarks; @@ -18443,7 +21614,6 @@ var Production; } return remarks; } - Production.ParseBoardEdgeRemarkData = ParseBoardEdgeRemarkData; function GetBoardInfo(br, size) { let data = br.BoardProcessOption; let spliteSize = Production.GetSpiteSize(br); @@ -18458,6 +21628,7 @@ var Production; [EBoardKeyList.Color]: data[EBoardKeyList.Color], [EBoardKeyList.Lines]: data[EBoardKeyList.Lines], [EBoardKeyList.DrillType]: data[EBoardKeyList.DrillType], + [EBoardKeyList.Thick]: br.Thickness, spliteHeight: spliteSize ? spliteSize.spliteHeight.toString() : "", spliteThickness: spliteSize ? spliteSize.spliteThickness.toString() : "", spliteWidth: spliteSize ? spliteSize.spliteWidth.toString() : "", @@ -18508,7 +21679,7 @@ var Production; }; let allModeling = GetModelingFromCustomDrill(br); let modeling = getModelings([...br.BoardModeling, ...allModeling.modeling]); - let sideModeling = getModelings(allModeling.sideModeling); + let sideModeling = GetBoardSideModelingData(br); return { modeling, sideModeling }; } Production.GetOriginBoardModelingData = GetOriginBoardModelingData; @@ -18517,10 +21688,10 @@ var Production; * @param br * @param offsetTanslation */ - function GetBoardModelingData(br, offsetTanslation, redundancyKnif = 0) { + function GetBoardModelingData(br, offsetTanslation, redundancyKnif = 0, curveBoardModeling) { const tool = FeedingToolPath.GetInstance(); const tMtx = MoveMatrix(offsetTanslation.clone().negate()); - const getModelings = (ms, isSide) => { + const getModelings = (ms) => { let data = []; for (let m of ms) { let cu = m.shape.Outline.Curve; @@ -18529,8 +21700,7 @@ var Production; if (HostApplicationServices.chaidanOption.useDefaultRad) m.knifeRadius = HostApplicationServices.chaidanOption.radius; let paths = tool.GetModelFeedPath(br, m, redundancyKnif); //走刀路径 - if (!isSide) - paths.forEach(path => path.ApplyMatrix(tMtx)); + paths.forEach(path => path.ApplyMatrix(tMtx)); //走刀的ptsbuls let feeding = paths.map((c) => ConverToPtsBul(c, false)); if (feeding.length > 0) @@ -18559,17 +21729,98 @@ var Production; return data; }; let allModeling = GetModelingFromCustomDrill(br); - let modeling = getModelings([...br.BoardModeling, ...allModeling.modeling], false).filter(f => f.feeding.length > 0); - let sideModeling = getModelings(allModeling.sideModeling, true).filter(f => f.feeding.length > 0); - return { modeling, sideModeling }; + let modeling = getModelings([...br.BoardModeling, ...allModeling.modeling, ...curveBoardModeling]).filter(f => f.feeding.length > 0); + // 拆单值有效的板件勾选取消孔槽加工 + const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption; + const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness]; + if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing) { + modeling.length = 0; + allModeling.sideModeling.length = 0; + } + return { modeling, sideModeling: allModeling.sideModeling }; } Production.GetBoardModelingData = GetBoardModelingData; + function GetBoardSideModelingData(br, toaster = false) { + let sideModel = []; + let sideHole = []; + let allSideModelGrooveMap = br.AllSideModelGrooveMap; + //跳过有拆单尺寸板件 避免拆单错误 + if (!allSideModelGrooveMap.size || HasSpiteSize(br)) + return { sideModel, sideHole }; + const tool = FeedingToolPath.GetInstance(); + let faces = new ParseBoardSideFace(br); + for (let [num, solids] of allSideModelGrooveMap) { + let faceContour = faces.Faces[num].Region.ShapeManager.ShapeList[0].Outline.Curve; + for (let solid of solids) { + let cu = solid.Shape.Outline.Curve.Clone().ApplyMatrix(solid.OCSNoClone); + let modelType = ModelType.sideModel; + // 圆造型拆成孔类型 + if (!solid.Shape.Holes.length && cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6) { + let mtx = br.OCSInv.multiply(faces.Faces[num].OCS); + let position = cu.Position.clone().applyMatrix4(mtx); + let endPt = cu.Position.clone().setZ(-solid.Thickness).applyMatrix4(mtx); + /**拆单那边需要把侧孔 z 坐标转换为从上到下 */ + InvertPosition(position, br.Thickness); + InvertPosition(endPt, br.Thickness); + // cu.ApplyMatrix(mtx); + // TestDraw(cu); + // TestDraw(new Point(position)); + // TestDraw(new Point(endPt)); + sideHole.push({ + position, //排钻开始位置 + endPt, //排钻结束的位置(在板的坐标系) + radius: cu.Radius, //排钻半径 + depth: solid.Thickness, //排钻的插入深度 + face: num, //板在哪个边上 + name: "", + type: null + }); + continue; + } + let knifeRadius = solid.KnifeRadius; + if (HostApplicationServices.chaidanOption.useDefaultRad) + knifeRadius = HostApplicationServices.chaidanOption.radius; + let paths = tool.GetSideModelFeedPath(solid, faceContour); //走刀路径 + if (paths.length) { + sideModel.push({ + thickness: solid.Thickness + (solid.GroovesAddDepth ?? 0), + dir: num, + knifeRadius, + outline: ConverToPtsBul(cu, false), + holes: solid.Shape.Holes.map((cu) => ConverToPtsBul(cu.Curve.Clone().ApplyMatrix(solid.OCSNoClone), false)), + addLen: solid.GroovesAddLength, + addWidth: solid.GroovesAddWidth, + addDepth: solid.GroovesAddDepth, + chaiDanName: "", + modelType, + }); + } + else if (toaster) { + Toaster({ + message: "板件有侧面造型或者自定义排钻无法加工,请运行造型检测命令确认", + timeout: 5000, + intent: Intent.DANGER, + key: "侧面造型加工错误" + }); + } + } + } + return { sideModel, sideHole }; + } + Production.GetBoardSideModelingData = GetBoardSideModelingData; + //是否有拆单尺寸 + function HasSpiteSize(br) { + let [spHeight, spWidth, spThickness] = [br.BoardProcessOption?.spliteHeight, br.BoardProcessOption?.spliteWidth, br.BoardProcessOption?.spliteThickness]; + const isEffect = HostApplicationServices.chaidanOption.partialSplitValueCanTakesEffect; //局部拆单值 + const hasSize = (isEffect ? (spHeight || spWidth || spThickness) : (spHeight && spWidth && spThickness)); + return Boolean(hasSize); + } + Production.HasSpiteSize = HasSpiteSize; //获得拆单尺寸 function GetSpiteSize(br) { - let [spHeight, spWidth, spThickness] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness]; - const isEffect = HostApplicationServices.chaidanOption.partialSplitValueCanTakesEffect; - const param = { L: br.Height, W: br.Width, H: br.Thickness }; - if (isEffect ? (spHeight || spWidth || spThickness) : (spHeight && spWidth && spThickness)) { + if (HasSpiteSize(br)) { + let [spHeight, spWidth, spThickness] = [br.BoardProcessOption?.spliteHeight, br.BoardProcessOption?.spliteWidth, br.BoardProcessOption?.spliteThickness]; + const param = { L: br.Height, W: br.Width, H: br.Thickness }; spHeight = spHeight || br.Height.toString(); spWidth = spWidth || br.Width.toString(); spThickness = spThickness || br.Thickness.toString(); @@ -18600,10 +21851,27 @@ var Production; frontBackHoles: [], sideHoles: [] }; + const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption; + // 拆单值有效的板件勾选取消孔槽加工 + const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness]; + if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing) { + return data; + } let brNormal = br.Normal; // 性能优化的解析板件网洞类 // new ParseBoardHoleData(br, offsetTanslation, sealedContour); - for (let [, driss] of br.DrillList) { + //是弧形板件时解析排钻在路径的相对位置 + if (br.IsArcBoard && br.DrillList.size) { + offsetTanslation = ParseArcBoardHoles(br, offsetTanslation); + } + for (let [key, driss] of br.DrillList) { + let linkBoard = key?.Object; + if (cancelHoleProcessing && linkBoard) { + const [L, W, H] = [linkBoard.BoardProcessOption.spliteHeight, linkBoard.BoardProcessOption.spliteWidth, linkBoard.BoardProcessOption.spliteThickness]; + if ((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) { + continue; + } + } for (let dris of driss) { for (let dId of dris) { if (!dId || dId.IsErase) @@ -18638,6 +21906,13 @@ var Production; if (!nid || !nid.Object || nid.IsErase) continue; let nail = nid.Object; + let linkBoard = nail.MId?.Object; + if (cancelHoleProcessing && linkBoard) { + const [L, W, H] = [linkBoard.BoardProcessOption.spliteHeight, linkBoard.BoardProcessOption.spliteWidth, linkBoard.BoardProcessOption.spliteThickness]; + if ((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) { + continue; + } + } if (!isParallelTo(nail.Normal, brNormal, CanDrawHoleFuzz)) continue; let sp = nail.Position.applyMatrix4(br.OCSInv); @@ -18686,22 +21961,49 @@ var Production; function InvertPosition(pos, thickness) { pos.z = thickness - pos.z; } - function HoleInBoard(center, radius, outline, isYMJ = false) { + function HoleInBoard(center, radius, outline, allowPxl, isYMJ = false) { let cir = new Circle(center, radius - SCALAR); if (isYMJ) { return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center); } else { - if (HostApplicationServices.forceFilterPxl) - return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center); - else + if (allowPxl || !HostApplicationServices.forceFilterPxl) return outline.IntersectWith(cir, 0).length > 1 || outline.PtInCurve(center); + else + return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center); } } /**分析常规排钻 */ function ParseCylHoles(cyHole, br, offsetTanslation, data, outline) { let brInv = br.OCSInv; let brNormal = br.Normal; + let outlineWidth = br.Width; + let outlineHeight = br.Height; + let faceRegions; + let faceRegionsBox; + let addPos; + if (br.IsArcBoard) { + addPos = cyHole["__CacheAddPos__"]; + faceRegions = cyHole["__CacheContour__"]; + let ocs = cyHole["__CacheBrOCS__"]; + cyHole["__CacheAddPos__"] = undefined; + cyHole["__CacheBrOCS__"] = undefined; + cyHole["__CacheContour__"] = undefined; + if (!ocs || !addPos || !faceRegions?.length) + return; + else { + brInv = new Matrix4().getInverse(ocs); + brNormal = new Vector3().setFromMatrixColumn(ocs, 2); + faceRegionsBox = new Box3(); + for (let pl of faceRegions) + faceRegionsBox.union(pl.BoundingBox); + let boxSize = faceRegionsBox.getSize(new Vector3); + outlineWidth = boxSize.x; + outlineHeight = boxSize.y; + let extrude = Board.CreateBoard(boxSize.y, boxSize.x, 1); + outline = extrude.ContourCurve; + } + } let brInvRo = new Matrix4().extractRotation(brInv); let position = cyHole.Position.applyMatrix4(brInv); let holes = data.frontBackHoles; @@ -18716,9 +22018,9 @@ var Production; let pos2 = position.clone().add(cyNormal.multiplyScalar(depth)); if (cyHole.Type === GangDrillType.Pxl || cyHole.Type === GangDrillType.WoodPXL) { if (isParallelTo(cyHole.Normal, brNormal, CanDrawHoleFuzz)) { - if (!IsBetweenA2B(position.x, -cyHole.Radius, br.Width + cyHole.Radius, 1e-6) - || !IsBetweenA2B(position.y, -cyHole.Radius, br.Height + cyHole.Radius, 1e-6) - || !HoleInBoard(position.clone().setZ(0), cyHole.Radius, outline)) + if (!IsBetweenA2B(position.x, -cyHole.Radius, outlineWidth + cyHole.Radius, 1e-6) + || !IsBetweenA2B(position.y, -cyHole.Radius, outlineHeight + cyHole.Radius, 1e-6) + || !HoleInBoard(position.clone().setZ(0), cyHole.Radius, outline, cyHole.AllowPxl)) return; position.sub(offsetTanslation); //#region 求得真实的求交范围 @@ -18741,7 +22043,7 @@ var Production; isPush = true; } } - else if (cyHole.Type === GangDrillType.Ljg || cyHole.Type === GangDrillType.Wood) { + else if (cyHole.Type === GangDrillType.Ljg || cyHole.Type === GangDrillType.Wood || cyHole.SameSideHole) { if (isPerpendicularityTo(cyHole.Normal, brNormal, CanDrawHoleFuzz)) //侧孔 { let z = position.z; @@ -18750,7 +22052,26 @@ var Production; let sp = position.clone().setZ(0); //真实数据 let ep = position.clone().add(cyHole.Normal.multiplyScalar(cyHole.Height).applyMatrix4(brInvRo)).setZ(0); //真实数据 let testLine = new Line(sp, ep); - let iPt = outline.IntersectWith(testLine, 0, CanDrawHoleFuzz)[0]; + let iPt; + if (br.IsArcBoard) { + if (faceRegions?.length) { + for (let pl of faceRegions) { + pl.UpdateOCSTo(new Matrix4().setPosition(faceRegionsBox.min)); + let newPl = new Polyline(pl.LineData); + iPt = newPl.IntersectWith(testLine, 0, CanDrawHoleFuzz)[0]; + if (iPt) { + outline = newPl; + break; + } + } + } + else { + InteractionLog([{ msg: "警告:" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: "侧孔与板无交点,无法加工该侧孔!" }], LogType.Warning); + return; + } + } + else + iPt = outline.IntersectWith(testLine, 0, CanDrawHoleFuzz)[0]; if (!iPt) { InteractionLog([{ msg: "警告:" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: "侧孔与板无交点,无法加工该侧孔!" }], LogType.Warning); return; @@ -18763,7 +22084,9 @@ var Production; } } if (!endPt) { - InteractionLog([{ msg: "警告:" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: "侧孔位置有问题,排钻不在板轮廓内!" }], LogType.Warning); + //同侧面生成常规单头排钻 连接杆在Curve边缘时不提示错误 + if (!cyHole.SameSideHole) + InteractionLog([{ msg: "警告:" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: "侧孔位置有问题,排钻不在板轮廓内!" }], LogType.Warning); return; } holes = data.sideHoles; @@ -18802,10 +22125,10 @@ var Production; } else { if (isParallelTo(cyHole.Normal, brNormal, CanDrawHoleFuzz)) { - if (!IsBetweenA2B(position.x, -cyHole.Radius, br.Width + cyHole.Radius, CanDrawHoleFuzz) - || !IsBetweenA2B(position.y, -cyHole.Radius, br.Height + cyHole.Radius, CanDrawHoleFuzz) + if (!IsBetweenA2B(position.x, -cyHole.Radius, outlineWidth + cyHole.Radius, CanDrawHoleFuzz) + || !IsBetweenA2B(position.y, -cyHole.Radius, outlineHeight + cyHole.Radius, CanDrawHoleFuzz) || !isIntersect2(0, br.Thickness, position.z, pos2.z, -CanDrawHoleFuzz) - || !HoleInBoard(position.clone().setZ(0), cyHole.Radius, outline, true)) + || !HoleInBoard(position.clone().setZ(0), cyHole.Radius, outline, cyHole.AllowPxl, true)) return; position.sub(offsetTanslation); holes = data.frontBackHoles; @@ -18813,16 +22136,29 @@ var Production; isPush = true; } } - isPush && holes.push({ - type: cyHole.Type, - position, //排钻开始位置 - endPt, //排钻结束的位置(在板的坐标系) - radius: cyHole.Radius, //排钻半径 - depth, //排钻的插入深度 - face, //板在哪个边上 - angle, - name: GetGroupName(cyHole) - }); + if (isPush) { + if (br.IsArcBoard) { + //弧形板需要单独增加差值 + position = position.add(addPos); + endPt = endPt?.add(addPos); + if (br.SweepAngle) { + let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx); + position.applyMatrix4(ocsInv); + endPt?.applyMatrix4(ocsInv); + } + } + holes.push({ + type: cyHole.Type, + position, //排钻开始位置 + endPt, //排钻结束的位置(在板的坐标系) + radius: cyHole.Radius, //排钻半径 + depth, //排钻的插入深度 + face, //板在哪个边上 + angle, + name: GetGroupName(cyHole), + goodsId: cyHole.GoodsId, //商品编号 + }); + } } /**分析自定义圆柱排钻 * @@ -18834,10 +22170,38 @@ var Production; function ParseExtrudeHoles(d, br, offsetTanslation, data, outline, isCheckGroove = false, isRelativeHardware = false) { if (!d.isHole) return; + let brInv = br.OCSInv; let brNormal = br.Normal; let cir = d.ContourCurve; + let outlineWidth = br.Width; + let outlineHeight = br.Height; + let addPos; + let faceRegions; + let faceRegionsBox; + if (br.IsArcBoard) { + addPos = d["__CacheAddPos__"]; + faceRegions = d["__CacheContour__"]; + let ocs = d["__CacheBrOCS__"]; + d["__CacheAddPos__"] = undefined; + d["__CacheBrOCS__"] = undefined; + d["__CacheContour__"] = undefined; + if (!ocs || !addPos || !faceRegions?.length) + return; + else { + brInv = new Matrix4().getInverse(ocs); + brNormal = new Vector3().setFromMatrixColumn(ocs, 2); + faceRegionsBox = new Box3(); + for (let pl of faceRegions) + faceRegionsBox.union(pl.BoundingBox); + let boxSize = faceRegionsBox.getSize(new Vector3); + outlineWidth = boxSize.x; + outlineHeight = boxSize.y; + let extrude = Board.CreateBoard(boxSize.y, boxSize.x, 1); + outline = extrude.ContourCurve; + } + } if (cir instanceof Circle) { - let diffMtx = br.OCSInv.multiply(d.OCS); + let diffMtx = brInv.multiply(d.OCS); let nor = d.Normal; let sp = cir.Center.applyMatrix4(diffMtx); let ep = cir.Center.add(new Vector3(0, 0, d.Height)).applyMatrix4(diffMtx); @@ -18849,7 +22213,8 @@ var Production; { let z0 = Math.min(sp.z, ep.z); let z1 = Math.max(sp.z, ep.z); - let p = sp.clone().setZ(0).sub(offsetTanslation); + //检测排钻中心孔位与板轮廓outline交集关系时,不考虑offsetTanslation的差值 因为传进来的outline都不是封边轮廓 + let p = sp.clone().setZ(0); //区间没有交集 if (!(Math.max(z0, 0) < (Math.min(z1, br.Thickness) - CanDrawHoleFuzz))) return; @@ -18868,20 +22233,31 @@ var Production; InteractionLog([{ msg: "警告:" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: "的孔在造型内,无法加工,已经跳过!" }], LogType.Warning); return; } + p.sub(offsetTanslation); let depth = z0 < CanDrawHoleFuzz ? z1 : br.Thickness - z0; let angle = angleTo(XAxis, x); if (equaln$1(angle, Math.PI)) angle = 0; - if (depth > CanDrawHoleFuzz) + if (depth > CanDrawHoleFuzz) { + let position = z0 < CanDrawHoleFuzz ? p : p.setZ(br.Thickness); + if (br.IsArcBoard) { + //弧形板需要单独增加差值 + position = position.add(addPos); + if (br.SweepAngle) { + let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx); + position.applyMatrix4(ocsInv); + } + } data.frontBackHoles.push({ type: d.isThrough ? GangDrillType.TK : (isRelativeHardware ? GangDrillType.Ljg : d.Type), - position: z0 < CanDrawHoleFuzz ? p : p.setZ(br.Thickness), + position, radius: cir.Radius, depth, face: z0 < CanDrawHoleFuzz ? FaceDirection.Back : FaceDirection.Front, angle: angle, name: GetGroupName(d) }); + } } else //侧孔 { @@ -18890,13 +22266,13 @@ var Production; let [minY, maxY] = sp.y < ep.y ? [sp.y, ep.y] : [ep.y, sp.y]; if (sp.z > -cir.Radius && sp.z < br.Thickness + cir.Radius - && Math.max(minX, 0) < (Math.min(br.Width, maxX) + (isRelativeHardware ? -CanDrawHoleFuzz : 1e-6)) //区间交集必须大于CanDrawHoleFuzz - && Math.max(minY, 0) < (Math.min(br.Height, maxY) + (isRelativeHardware ? -CanDrawHoleFuzz : 1e-6)) //区间交集必须大于CanDrawHoleFuzz + && Math.max(minX, 0) < (Math.min(outlineWidth, maxX) + (isRelativeHardware ? -CanDrawHoleFuzz : 1e-6)) //区间交集必须大于CanDrawHoleFuzz + && Math.max(minY, 0) < (Math.min(outlineHeight, maxY) + (isRelativeHardware ? -CanDrawHoleFuzz : 1e-6)) //区间交集必须大于CanDrawHoleFuzz ) { sp.setZ(0); ep.setZ(0); let line = new Line(sp, ep); - let pt = outline.IntersectWith(line, 0)[0]; + let pt = outline.IntersectWith(line, 0, 1e-5)[0]; if (!pt) { InteractionLog([{ msg: "警告:" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: `的${isRelativeHardware ? "五金" : "排钻"}嵌在板件内部,已经跳过!` }], LogType.Warning); return; @@ -18917,6 +22293,16 @@ var Production; return; InvertPosition(position, br.Thickness); InvertPosition(endPt, br.Thickness); + if (br.IsArcBoard) { + //弧形板需要单独增加差值 + position = position.add(addPos); + endPt = endPt.add(addPos); + if (br.SweepAngle) { + let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx); + position.applyMatrix4(ocsInv); + endPt.applyMatrix4(ocsInv); + } + } data.sideHoles.push({ type: GangDrillType.Ljg, endPt, @@ -18956,7 +22342,7 @@ var Production; let size = en.BoundingBoxInOCS.getSize(new Vector3); let data = { ...en.HardwareOption }; const actualVal = safeEval(data.actualExpr, { L: size.x, W: size.y, H: size.z }); - data.actualExpr = actualVal ? actualVal.toString() : data.actualExpr; + data.actualExpr = actualVal ? FixedNotZero(actualVal, 2) : data.actualExpr; data.spec = ParseExpr(data.spec, accuracy, { L: size.x, W: size.y, H: size.z }); data.model = ParseExpr(data.model, accuracy, { L: size.x, W: size.y, H: size.z }); data.factory = ParseExpr(data.factory, accuracy, { L: size.x, W: size.y, H: size.z }); @@ -19060,6 +22446,12 @@ var Production; Production.Data2Polyline = Data2Polyline; function Get2DModeing(br, offset) { let res = []; + // 拆单值有效的板件勾选取消孔槽加工 + const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption; + const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness]; + if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing) { + return res; + } let tmtx = MoveMatrix(offset.clone().negate()); for (let m of br.Modeling2D) { let path = m.path.Clone().ApplyMatrix(tmtx); @@ -19074,6 +22466,12 @@ var Production; Production.Get2DModeing = Get2DModeing; function Get3DModeing(br, offset) { let res = []; + // 拆单值有效的板件勾选取消孔槽加工 + const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption; + const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness]; + if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing) { + return res; + } for (let m of br.Modeling3D) { let d = { path: { pts: [], buls: [] }, @@ -19133,6 +22531,74 @@ var Production; } Production.GetGroupName = GetGroupName; })(Production || (Production = {})); +function ParseArcBoardHoles(br, offsetTanslation) { + const ArcBoardBuild = br.ArcBuild; + ArcBoardBuild.ParseSweepCurves(); + let cus = ArcBoardBuild.SweepCurves1; + let ContourCurve = br.Shape.Outline.Curve.Clone().ApplyMatrix(ArcBoardBuild.OCS2RotateMtx); + let brBoxSize = ContourCurve.BoundingBox.getSize(new Vector3); + let currentLength = 0; + if (br.SweepAngle) + offsetTanslation = offsetTanslation.clone().applyMatrix4(ArcBoardBuild.OCS2RotateMtx.clone().setPosition(0, 0, 0)); + for (let cu of cus) { + if (currentLength > brBoxSize.x) + break; + if (cu instanceof Arc) { + currentLength = currentLength + cu.Length; + continue; + } + //直线所在坐标系 + let cuBox = new Box3(new Vector3, new Vector3(cu.Length, brBoxSize.y, br.Thickness)); + let an = angle(cu.EndPoint.clone().sub(cu.StartPoint)); + let m = new Matrix4().makeRotationY(-an); + let ocs = br.OCS; + if (br.SweepAngle) + ocs.multiply(ArcBoardBuild.Rotate2OCSMtx); + ocs.multiply(m.setPosition(cu.StartPoint.clone().applyMatrix4(new Matrix4().makeRotationX(Math.PI / 2)))); + //正面时翻转Z向量 + if (br.SweepVisibleFace === FaceDirection.Front) + ocs.setPosition(new Vector3(0, 0, -br.Thickness).applyMatrix4(ocs)); + // 测试代码 + // let pt = new Vector3().applyMatrix4(ocs); + // let l1 = new Line(pt, pt.clone().add(new Vector3().setFromMatrixColumn(ocs, 0).normalize().multiplyScalar(100))); + // let l2 = new Line(pt, pt.clone().add(new Vector3().setFromMatrixColumn(ocs, 1).normalize().multiplyScalar(100))); + // let l3 = new Line(pt, pt.clone().add(new Vector3().setFromMatrixColumn(ocs, 2).normalize().multiplyScalar(100))); + // TestDraw(new Point(pt)); + // TestDraw(l1, 1); + // TestDraw(l2, 3); + // TestDraw(l3, 5); + //裁剪 计算每个分段轮廓 + let length = currentLength + cu.Length; + let starKnifePls = new Polyline([{ pt: AsVector2({ x: currentLength, y: -1 }), bul: 0 }, { pt: AsVector2({ x: currentLength, y: 10000 }), bul: 0 }]); + let endKnifePls = new Polyline([{ pt: AsVector2({ x: length, y: -1 }), bul: 0 }, { pt: AsVector2({ x: length, y: 10000 }), bul: 0 }]); + //裁剪结果 + let faceRegions = SplitPolyline(ContourCurve, [starKnifePls, endKnifePls]); + faceRegions = faceRegions.filter((faceRegion) => { + let x = faceRegion.BoundingBox.getCenter(new Vector3).x; + return x > currentLength && x < length; + }); + for (let [, driss] of br.DrillList) { + for (let dris of driss) { + for (let dId of dris) { + if (!dId || dId.IsErase) + continue; + let d = dId.Object; + if (d["__CacheBrOCS__"]) + continue; + let b = d.BoundingBox.applyMatrix4(new Matrix4().getInverse(ocs)); + if (cuBox.intersectsBox(b)) { + d["__CacheBrOCS__"] = ocs; + //记录分段路径的起点与原点差值 + d["__CacheAddPos__"] = new Vector3(currentLength); + d["__CacheContour__"] = faceRegions; + } + } + } + } + currentLength = length; + } + return offsetTanslation; +} /** * 分析曲线的上下左右位置的线 @@ -19261,9 +22727,7 @@ function SubsectionCurvesOfHightSeal(in_out_curves) { if (g.length === 1) in_out_curves.push(g[0]); else { - let pl = new Polyline(); - for (let c of g) - pl.Join(c); + let pl = Polyline.FastCombine(g, LINK_FUZZ, false); in_out_curves.push(pl); } } @@ -19271,14 +22735,13 @@ function SubsectionCurvesOfHightSeal(in_out_curves) { } //与GetBoardSealingCurves相关 function GetBoardHighSeal(br, sealcus) { - if (br.BoardProcessOption[EBoardKeyList.SpliteHeight] - && br.BoardProcessOption[EBoardKeyList.SpliteWidth] - && br.BoardProcessOption[EBoardKeyList.SpliteThickness]) { + const option = br.BoardProcessOption; + if (Production.HasSpiteSize(br)) { return [ - { size: parseFloat(br.BoardProcessOption.sealedDown) }, - { size: parseFloat(br.BoardProcessOption.sealedRight) }, - { size: parseFloat(br.BoardProcessOption.sealedUp) }, - { size: parseFloat(br.BoardProcessOption.sealedLeft) }, + { size: parseFloat(option.sealedDown), sealColor: option.sealColorDown }, + { size: parseFloat(option.sealedRight), sealColor: option.sealColorRight }, + { size: parseFloat(option.sealedUp), sealColor: option.sealColorUp }, + { size: parseFloat(option.sealedLeft), sealColor: option.sealColorLeft }, ]; } let highSeals = []; @@ -19297,26 +22760,70 @@ function GetBoardHighSeal(br, sealcus) { let derv = c.GetFirstDeriv(0).multiplyScalar(dir); if (Math.abs(derv.x) > Math.abs(derv.y)) { if (derv.x > 0) - highSeals.push({ size: sealDown }); + highSeals.push({ size: sealDown, sealColor: option.sealColorDown }); else - highSeals.push({ size: sealUp }); + highSeals.push({ size: sealUp, sealColor: option.sealColorUp }); } else { if (derv.y > 0) - highSeals.push({ size: sealRight }); + highSeals.push({ size: sealRight, sealColor: option.sealColorRight }); else - highSeals.push({ size: sealLeft }); + highSeals.push({ size: sealLeft, sealColor: option.sealColorLeft }); } } } return highSeals; } -function GetHighBoardEdgeRemark(br, sealcus) { +function GetBoardHighReservedEdge(br, sealcus) { + if (Production.HasSpiteSize(br)) { + return [ + { size: parseFloat(br.BoardProcessOption.reservedEdgeDown) }, + { size: parseFloat(br.BoardProcessOption.reservedEdgeRight) }, + { size: parseFloat(br.BoardProcessOption.reservedEdgeUp) }, + { size: parseFloat(br.BoardProcessOption.reservedEdgeLeft) }, + ]; + } + let highReservedEdge = []; + for (let d of br.BoardProcessOption.highReservedEdge) + if (d.size != null) + highReservedEdge.push({ ...d }); + //若未设置高级封边,把上下左右封边存入高级封边 + if (sealcus.length !== highReservedEdge.length || !br.IsSpecialShape) { + let reservedEdgeDown = parseFloat(br.BoardProcessOption.reservedEdgeDown); + let reservedEdgeUp = parseFloat(br.BoardProcessOption.reservedEdgeUp); + let reservedEdgeLeft = parseFloat(br.BoardProcessOption.reservedEdgeLeft); + let reservedEdgeRight = parseFloat(br.BoardProcessOption.reservedEdgeRight); + highReservedEdge.length = 0; + let dir = Math.sign(br.ContourCurve.Area2); + for (let c of sealcus) { + let derv = c.GetFirstDeriv(0).multiplyScalar(dir); + if (Math.abs(derv.x) > Math.abs(derv.y)) { + if (derv.x > 0) + highReservedEdge.push({ size: reservedEdgeDown }); + else + highReservedEdge.push({ size: reservedEdgeUp }); + } + else { + if (derv.y > 0) + highReservedEdge.push({ size: reservedEdgeRight }); + else + highReservedEdge.push({ size: reservedEdgeLeft }); + } + } + } + return highReservedEdge; +} +/** + * 获取板边备注 + * @param br 板 + * @param sealcus 封边轮廓线 + * @param addAll 添加所有板边备注 + * @returns 板边备注 + */ +function GetHighBoardEdgeRemark(br, sealcus, addAll = false) { const opt = br.BoardProcessOption; //顺序和封边一样 - if (opt[EBoardKeyList.SpliteHeight] - && opt[EBoardKeyList.SpliteWidth] - && opt[EBoardKeyList.SpliteThickness]) { + if (Production.HasSpiteSize(br)) { return [ { description: opt.edgeRemarkDown }, { description: opt.edgeRemarkRight }, @@ -19326,7 +22833,7 @@ function GetHighBoardEdgeRemark(br, sealcus) { } const highBoardEdgeRemark = []; for (const d of opt.highBoardEdgeRemark) - if (d.description != null) + if (d.description != null || addAll) highBoardEdgeRemark.push({ ...d }); //若未设置高级板边备注,把上下左右板边备注存入高级板边备注 if (sealcus.length !== highBoardEdgeRemark.length || !br.IsSpecialShape) { @@ -19415,8 +22922,10 @@ class OffsetPolyline2 extends OffsetPolyline { * 修改时 请注意函数 GetSealedBoardContour */ function GetBoardContour(br) { - if (Math.abs(br.ContourCurve.Area) < 10) + if (Math.abs(br.ContourCurve.Area) < 10) { + InteractionLog([{ msg: `板件:${br.Name}`, entity: [br] }, { msg: "板轮廓面积小于10" }], LogType.Warning); return; + } let curves = GetBoardSealingCurves(br); if (curves.length === 1 && curves[0] instanceof Circle) return curves[0]; @@ -19426,24 +22935,32 @@ function GetBoardContour(br) { allCurvs.push(...c.Explode()); else allCurvs.push(c); - let brContour = Polyline.FastCombine(allCurvs, 1e-4, false); + let brContour = Polyline.FastCombine(allCurvs, LINK_FUZZ * 2, false); return brContour; } /** * 获取板件(扣封边后的)轮廓(拆单时) * 修改时 请注意函数 GetBoardContour + * @param {Board} br 板件 + * @param {SplitOrderType} [splitType=SplitOrderType.ChaiDan] 拆单类型 + * @return {*} {(BrSealedData | undefined)} */ -function GetSealedBoardContour(br) { +function GetSealedBoardContour(br, splitType = SplitOrderType.ChaiDan) { if (Math.abs(br.ContourCurve.Area) < 10) return; let curves = GetBoardSealingCurves(br); let highSeals = GetBoardHighSeal(br, curves); + let highReservedEdges = GetBoardHighReservedEdge(br, curves); + if (splitType === SplitOrderType.HoleGrooveDim) // 孔洞标注,不需计算预留边值 + for (const element of highReservedEdges) + element.size = 0; if (curves.length === 1 && curves[0] instanceof Circle) { let res = { brContour: curves[0], - sealedContour: curves[0].GetOffsetCurves(-highSeals[0].size)[0], + sealedContour: curves[0].GetOffsetCurves(-highSeals[0].size + highReservedEdges[0].size)[0], brCurves: curves, highSeals, + highReservedEdges, }; return res; } @@ -19453,74 +22970,106 @@ function GetSealedBoardContour(br) { allCurvs.push(...c.Explode()); else allCurvs.push(c); - let brContour = Polyline.FastCombine(allCurvs, 1e-4, false); + let brContour = Polyline.FastCombine(allCurvs, LINK_FUZZ * 2, false); let dir = Math.sign(brContour.Area2); let sealedContours; - { - //局部偏移 - let polylineOffset = new OffsetPolyline2(brContour, dir * -Math.max(...highSeals.map(s => s.size))); - let subIndex = 0; - polylineOffset._TrimCircleContours = []; - polylineOffset._TrimArcContours = []; - polylineOffset._SubOffsetedCurves = []; - polylineOffset._SubCurves = []; - polylineOffset._Circles = []; - polylineOffset._CacheOCS = IdentityMtx4; - polylineOffset._IsClose = true; + let maxOffset = 0; //正偏移(外) + let minOffset = 0; //负偏移(内) + curves.map((c, i) => { + let seal = highSeals[i]; //封边 + let reservedEdge = highReservedEdges[i]; + let offDist = -seal.size + reservedEdge.size; + maxOffset = Math.max(maxOffset, offDist); + minOffset = Math.min(minOffset, offDist); + return offDist; + }); + //判断偏移值全是0的情况 + if (minOffset === 0 && maxOffset === 0) { + sealedContours = [brContour]; + } + else { + //先分解多段线生成对应线段和偏移值,防止两次偏移时启用的线段数不一致 + const newCurves = []; + //----计算每段封边偏移值 begin--- + //封边 + 预留边(正数为封边正方向,负值为封边反方向) + const offsetValues = []; for (let i = 0; i < curves.length; i++) { - let curve = curves[i]; //曲线组 - let seal = highSeals[i]; //封边 - let preSeal = highSeals[FixIndex$1(i - 1, curves)]; + let seal = highSeals[i]; + let reservedEdge = highReservedEdges[i]; + let curve = curves[i]; if (curve instanceof Polyline) { let curveExpds = curve.Explode().filter(c => c.Length >= 1e-4); - for (let j = 0; j < curveExpds.length; j++) { - let c = curveExpds[j]; - polylineOffset._SubCurves.push(c); //sub - //trim Circle - if (seal.size && (j || seal.size === preSeal.size)) - polylineOffset._Circles.push(new Circle(c.StartPoint, seal.size)); - else - polylineOffset._Circles.push(undefined); - //offset - let offsetC = c.GetOffsetCurves(dir * -seal.size)[0]; - if (offsetC) - polylineOffset._SubOffsetedCurves.push({ - index: subIndex, - curve: offsetC, - dist: seal.size, - }); - else - polylineOffset._TrimArcContours.push(Contour.CreateContour([c, new Line(c.StartPoint, c.EndPoint)], false)); - subIndex++; + for (const c of curveExpds) { + offsetValues.push(-seal.size + reservedEdge.size); + newCurves.push(c); } } else { + offsetValues.push(-seal.size + reservedEdge.size); + newCurves.push(curve); + } + } + // --- 每段封边偏移值 end ---- + const SealedOffset = (curves, offectValues, dist) => { + //局部偏移 + let polylineOffset = new OffsetPolyline2(brContour, dir * dist); + let subIndex = 0; + polylineOffset._TrimCircleContours = []; + polylineOffset._TrimArcContours = []; + polylineOffset._SubOffsetedCurves = []; + polylineOffset._SubCurves = []; + polylineOffset._Circles = []; + polylineOffset._CacheOCS = IdentityMtx4; + polylineOffset._IsClose = true; + for (let i = 0; i < curves.length; i++) { + let curve = curves[i]; //曲线组 + let offectValue = offectValues[i]; + if (Math.sign(offectValue) !== Math.sign(dist)) + offectValue = 0; + let preOffectValue = offectValues[FixIndex$1(i - 1, curves)]; if (curve.Length < 1e-4) continue; polylineOffset._SubCurves.push(curve); //sub //trim Circle - if (seal.size && seal.size === preSeal.size) - polylineOffset._Circles.push(new Circle(curve.StartPoint, seal.size)); + if (offectValue > 0 && offectValue === preOffectValue) + polylineOffset._Circles.push(new Circle(curve.StartPoint, offectValue)); else polylineOffset._Circles.push(undefined); //offset - let offsetC = curve.GetOffsetCurves(dir * -seal.size)[0]; + let offsetC = curve.GetOffsetCurves(dir * offectValue)[0]; if (offsetC) polylineOffset._SubOffsetedCurves.push({ index: subIndex, curve: offsetC, - dist: seal.size, + dist: -offectValue, }); else polylineOffset._TrimArcContours.push(Contour.CreateContour([curve, new Line(curve.StartPoint, curve.EndPoint)], false)); subIndex++; } + polylineOffset._Vertexs = polylineOffset._SubCurves.map(c => c.StartPoint); + polylineOffset.Do(); + return polylineOffset; + }; + let polylineOffset1; + let offCurves = newCurves; + //先判断负偏移,0的时候不偏移 + if (minOffset < 0) { + polylineOffset1 = SealedOffset(newCurves, offsetValues, minOffset); + offCurves = polylineOffset1._SubOffsetedCurves.map((s) => s.curve); } - polylineOffset._Vertexs = polylineOffset._SubCurves.map(c => c.StartPoint); - sealedContours = polylineOffset.Do(); + //如果存在正偏移,再偏移一次 + if (maxOffset > 0) { + let polylineOffset2 = SealedOffset(offCurves, offsetValues, maxOffset); + sealedContours = polylineOffset2._RetCurves; + } + else + sealedContours = polylineOffset1._RetCurves; } + let hasSealedErr = false; //如果有多个 取最大 if (sealedContours.length > 1) { + hasSealedErr = true; Toaster({ message: `有板计算封边异常,请检查!(点击左下角提示可以查看该板)`, timeout: 15000, @@ -19550,6 +23099,8 @@ function GetSealedBoardContour(br) { sealedContour, brCurves: curves, highSeals, + highReservedEdges, + hasSealedErr }; return res; } @@ -19571,27 +23122,73 @@ function SetBoardTopDownLeftRightSealData(br, sealDatas, sealCurves, brContourCu // if ((spliteHeight && spliteWidth && spliteThickness) || !br.IsSpecialShape && cus.length === 4) if (br.IsRect && sealCurves.length === 4) { for (let i = 0; i < 4; i++) { + const size = sealDatas[i].size.toString(); + const { sealColor: color = "" } = sealDatas[i]; let derv = sealCurves[i].GetFirstDeriv(0).normalize(); if (isParallelTo(derv, XAxis, 1e-4)) { - if (derv.x * dir > 0) - br.BoardProcessOption[EBoardKeyList.DownSealed] = sealDatas[i].size.toString(); - else - br.BoardProcessOption[EBoardKeyList.UpSealed] = sealDatas[i].size.toString(); + if (derv.x * dir > 0) { + br.BoardProcessOption[EBoardKeyList.DownSealed] = size; + br.BoardProcessOption.sealColorDown = color; + } + else { + br.BoardProcessOption[EBoardKeyList.UpSealed] = size; + br.BoardProcessOption.sealColorUp = color; + } } else { - if (derv.y * dir > 0) - br.BoardProcessOption[EBoardKeyList.RightSealed] = sealDatas[i].size.toString(); - else - br.BoardProcessOption[EBoardKeyList.LeftSealed] = sealDatas[i].size.toString(); + if (derv.y * dir > 0) { + br.BoardProcessOption[EBoardKeyList.RightSealed] = size; + br.BoardProcessOption.sealColorRight = color; + } + else { + br.BoardProcessOption[EBoardKeyList.LeftSealed] = size; + br.BoardProcessOption.sealColorLeft = color; + } } } } else { + if (sealCurves.length === 0) + return; let [left, right, top, bottom] = ParseEdgeSealDir(sealCurves); br.BoardProcessOption[EBoardKeyList.LeftSealed] = sealDatas[left].size.toString(); br.BoardProcessOption[EBoardKeyList.RightSealed] = sealDatas[right].size.toString(); br.BoardProcessOption[EBoardKeyList.UpSealed] = sealDatas[top].size.toString(); br.BoardProcessOption[EBoardKeyList.DownSealed] = sealDatas[bottom].size.toString(); + br.BoardProcessOption.sealColorLeft = sealDatas[left].sealColor ?? ""; + br.BoardProcessOption.sealColorRight = sealDatas[right].sealColor ?? ""; + br.BoardProcessOption.sealColorUp = sealDatas[top].sealColor ?? ""; + br.BoardProcessOption.sealColorDown = sealDatas[bottom].sealColor ?? ""; + } +} +function SetBoardReservedEdgeData(br, sealDatas, sealCurves, brContourCurve) { + let dir = Math.sign((brContourCurve ?? br.ContourCurve).Area2); + sealCurves = sealCurves ?? GetBoardSealingCurves(br); + if (br.IsRect && sealCurves.length === 4) { + for (let i = 0; i < 4; i++) { + let derv = sealCurves[i].GetFirstDeriv(0).normalize(); + if (isParallelTo(derv, XAxis, 1e-4)) { + if (derv.x * dir > 0) + br.BoardProcessOption.reservedEdgeDown = sealDatas[i].size.toString(); + else + br.BoardProcessOption.reservedEdgeUp = sealDatas[i].size.toString(); + } + else { + if (derv.y * dir > 0) + br.BoardProcessOption.reservedEdgeRight = sealDatas[i].size.toString(); + else + br.BoardProcessOption.reservedEdgeLeft = sealDatas[i].size.toString(); + } + } + } + else { + if (sealCurves.length === 0) + return; + let [left, right, top, bottom] = ParseEdgeSealDir(sealCurves); + br.BoardProcessOption.reservedEdgeLeft = sealDatas[left].size.toString(); + br.BoardProcessOption.reservedEdgeRight = sealDatas[right].size.toString(); + br.BoardProcessOption.reservedEdgeUp = sealDatas[top].size.toString(); + br.BoardProcessOption.reservedEdgeDown = sealDatas[bottom].size.toString(); } } function SetBoardEdgeRemarkData(br, remarkDatas, sealCurves, brContourCurve) { @@ -19616,6 +23213,8 @@ function SetBoardEdgeRemarkData(br, remarkDatas, sealCurves, brContourCurve) { } } else { + if (sealCurves.length === 0) + return; let [left, right, top, bottom] = ParseEdgeSealDir(sealCurves); opt.edgeRemarkLeft = remarkDatas[left].description; opt.edgeRemarkRight = remarkDatas[right].description; @@ -19624,6 +23223,1104 @@ function SetBoardEdgeRemarkData(br, remarkDatas, sealCurves, brContourCurve) { } } +//侧面造型分裂 +class SplitBoardSideModelUtil { + constructor(br) { + //备份原始二维刀路在世界坐标系中 + this.OrgBoardOCS = new Matrix4(); + this.CacheSideModel = new Map(); + this.OldSealCurves = []; + this.Init(br); + } + Init(br, isSpecialShape = false) { + this.OrgBoardOCS = br.OCS; + let curves = GetBoardSealingCurves(br); + //取消异型操作会提前令isSpecialShape = false + if (isSpecialShape) + SubsectionCurvesOfHightSeal(curves); + let oldSealCurves = []; + for (let c of curves) + if (c instanceof Polyline) + oldSealCurves.push(...c.Explode()); + else + oldSealCurves.push(c); + this.OldSealCurves = oldSealCurves; + const sideModelMap = new Map(); + for (let [num, soilds] of br.SideModelingMap) + sideModelMap.set(num, soilds); + this.CacheSideModel = sideModelMap; + } + CheckSideModel() { + let maxSideIndex = 0; + for (let [num, soilds] of this.CacheSideModel) + maxSideIndex = Math.max(num, maxSideIndex); + return this.OldSealCurves.length >= maxSideIndex; + } + SetBoardSideModel(br) { + if (!this.CacheSideModel.size) + return; + if (this.CheckSideModel()) { + this.SpiltSideModelOfBrContour(br); + } + } + //新轮廓切割原始轮廓 + SpiltSideModelOfBrContour(br) { + let curves = GetBoardSealingCurves(br); + let newSealCurves = []; + for (let c of curves) + if (c instanceof Polyline) + newSealCurves.push(...c.Explode()); + else + newSealCurves.push(c); + let sideMadelMap = new Map(); + for (let [nmu, soilds] of this.CacheSideModel) { + if (soilds?.length) { + let oldCu = this.OldSealCurves[nmu]?.Clone(); + if (!oldCu) + continue; + oldCu.ApplyMatrix(this.OrgBoardOCS); + for (let i = 0; i < newSealCurves.length; i++) { + if (newSealCurves[i] instanceof Arc) + continue; + let newCu = newSealCurves[i].Clone().ApplyMatrix(br.OCSNoClone); + let p = newCu.GetPointAtParam(newCu.EndParam * 0.5); + let spliteEnts = []; + if (oldCu.PtOnCurve(p)) { + let startX = oldCu.GetDistAtPoint(newCu.StartPoint); + let endX = oldCu.GetDistAtPoint(newCu.EndPoint); + if (startX > endX) { + let backStart = startX; + startX = endX; + endX = backStart; + } + let box = new Box3Ext(new Vector3(startX), new Vector3(endX, br.Thickness)); + let knifePls = []; + for (let soild of soilds) { + if (soild.Thickness <= 0) + continue; + let sCon = soild.ContourCurve.Clone().ApplyMatrix(soild.OCSNoClone); + let thickness = soild.Thickness; + let newNeighborCus = []; + newNeighborCus.push(newSealCurves[FixIndex(i - 1, newSealCurves)].Clone().ApplyMatrix(br.OCSNoClone)); + newNeighborCus.push(newSealCurves[FixIndex(i + 1, newSealCurves)].Clone().ApplyMatrix(br.OCSNoClone)); + const offsetCus = newCu.GetOffsetCurves(-thickness); + const xPtList = [startX, endX]; + for (let cu of offsetCus) { + for (let nbCu of newNeighborCus) { + const intersectPts = cu.IntersectWith(nbCu, IntersectOption.ExtendThis); + for (let pt of intersectPts) { + let { closestPt } = newCu.GetClosestAtPoint(pt, true); + let ptX = oldCu.GetDistAtPoint(closestPt); + xPtList.push(ptX); + } + } + } + xPtList.sort((a, b) => a - b); + for (let x of [xPtList[0], arrayLast(xPtList)]) + knifePls.push(new Polyline([{ pt: AsVector2({ x, y: 0 }), bul: 0 }, { pt: AsVector2({ x, y: 1 }), bul: 0 }])); + let splitSideModelCons = SplitPolyline(sCon, knifePls); + if (!splitSideModelCons.length) + splitSideModelCons.push(sCon); + for (let j = 0; j < splitSideModelCons.length; j++) { + let intersectBox = box.clone().intersect(splitSideModelCons[j].BoundingBox); + if (box.intersectsBox(splitSideModelCons[j].BoundingBox, 1) && !equaln$1(intersectBox.max.x, intersectBox.min.x)) { + let soildClone = soild.Clone(); + soildClone.ContourCurve = splitSideModelCons[j].ApplyMatrix(soild.OCSInv); + soildClone.GrooveCheckAllAutoSplit(); + soildClone.ApplyMatrix(new Matrix4().setPosition(-startX, 0, 0)); + spliteEnts.push(soildClone); + } + } + } + if (spliteEnts.length) + sideMadelMap.set(i, spliteEnts); + } + } + } + } + br.SideModelingMap = sideMadelMap; + } + //修改板厚度时裁剪侧面造型 + SpiltSideModelOfBrThickness(br, thickness) { + this.Init(br); + let sideMadelMap = new Map(); + for (let [nmu, soilds] of this.CacheSideModel) { + if (soilds?.length) { + let cu = this.OldSealCurves[nmu]?.Clone(); + if (!cu) + continue; + cu.ApplyMatrix(this.OrgBoardOCS); + let spliteEnts = []; + let knifePls = []; + let box = new Box3Ext(new Vector3(), new Vector3(cu.Length, thickness)); + for (let soild of soilds) { + if (soild.Thickness <= 0) + continue; + let sCon = soild.ContourCurve.Clone().ApplyMatrix(soild.OCSNoClone); + knifePls.push(new Polyline([{ pt: AsVector2({ x: 0, y: 0 }), bul: 0 }, { pt: AsVector2({ x: 1, y: 0 }), bul: 0 }])); + knifePls.push(new Polyline([{ pt: AsVector2({ x: 0, y: thickness }), bul: 0 }, { pt: AsVector2({ x: 1, y: thickness }), bul: 0 }])); + let splitSideModelCons = SplitPolyline(sCon, knifePls); + if (!splitSideModelCons.length) + splitSideModelCons.push(sCon); + for (let con of splitSideModelCons) { + let intersectBox = box.clone().intersect(con.BoundingBox); + if (box.intersectsBox(con.BoundingBox, 1) && !equaln$1(intersectBox.max.y, intersectBox.min.y)) { + let soildClone = soild.Clone(); + soildClone.ContourCurve = con.ApplyMatrix(soild.OCSInv); + soildClone.GrooveCheckAllAutoSplit(); + spliteEnts.push(soildClone); + } + } + } + if (spliteEnts.length) + sideMadelMap.set(nmu, spliteEnts); + } + } + br.SideModelingMap = sideMadelMap; + } +} + +/** + * 把板件炸开成面域,0,1为正反面,其余的为边面(没有圆弧面) + */ +function Board2Regions(br) { + let ocs = br.OCS; + let cu = br.ContourCurve.Clone(); + if (cu instanceof Circle) + cu = ConverCircleToPolyline$1(cu); + let frontReg = Region.CreateFromCurves([cu.Clone()]); + let regFrontOcs = ocs.clone(); + regFrontOcs.setPosition(br.Position.add(br.Normal.multiplyScalar(br.Thickness))); + frontReg.ApplyMatrix(regFrontOcs); + let backReg = Region.CreateFromCurves([cu.Flip()]); + backReg.ApplyMatrix(ocs); + let resultRegs = [frontReg, backReg]; + //edges + let lines = cu.Explode().filter(c => c instanceof Line); + for (let l of lines) { + let rectPl = new Polyline().Rectangle(l.Length, br.Thickness); + let reg = Region.CreateFromCurves([rectPl]); + if (!reg) + continue; + let p = l.StartPoint.applyMatrix4(ocs); + let x = l.GetFirstDeriv(0).transformDirection(ocs); + let y = br.Normal; + let z = new Vector3().crossVectors(x, y); + let mtx = new Matrix4().makeBasis(x, y, z).setPosition(p); + reg.ApplyMatrix(mtx); + resultRegs.push(reg); + } + return resultRegs; +} + +/**序列化板件数据 */ +function serializeBoardData(file, processData) { + file.Write(processData[EBoardKeyList.RoomName]); + file.Write(processData[EBoardKeyList.CabinetName]); + file.Write(processData[EBoardKeyList.BrMat]); + file.Write(processData[EBoardKeyList.Mat]); + file.Write(processData[EBoardKeyList.Color]); + file.Write(processData[EBoardKeyList.Lines]); + file.Write(processData[EBoardKeyList.BigHole]); + file.Write(processData[EBoardKeyList.DrillType]); + file.Write(processData[EBoardKeyList.ComposingFace]); + file.Write(processData[EBoardKeyList.HighSealed].length); + for (let n of processData[EBoardKeyList.HighSealed]) { + file.Write(n.size); + file.Write(n.sealColor); + } + file.Write(processData[EBoardKeyList.UpSealed]); + file.Write(processData[EBoardKeyList.DownSealed]); + file.Write(processData[EBoardKeyList.LeftSealed]); + file.Write(processData[EBoardKeyList.RightSealed]); + file.Write(processData.spliteHeight); + file.Write(processData.spliteWidth); + file.Write(processData.spliteThickness); + file.Write(processData.highDrill.length); + for (let n of processData.highDrill) + file.Write(n); + file.Write(processData.frontDrill); + file.Write(processData.backDrill); + file.Write(processData.remarks.length); + for (let d of processData.remarks) { + file.Write(d[0]); + file.Write(d[1]); + } +} +//反序列化板件数据 +function deserializationBoardData(file, processData, ver) { + processData[EBoardKeyList.RoomName] = file.Read(); + processData[EBoardKeyList.CabinetName] = file.Read(); + processData[EBoardKeyList.BrMat] = file.Read(); + processData[EBoardKeyList.Mat] = file.Read(); + processData[EBoardKeyList.Color] = file.Read(); + processData[EBoardKeyList.Lines] = file.Read(); + processData[EBoardKeyList.BigHole] = file.Read(); + processData[EBoardKeyList.DrillType] = file.Read(); + processData[EBoardKeyList.ComposingFace] = file.Read(); + let count = file.Read(); + processData[EBoardKeyList.HighSealed].length = 0; + for (let i = 0; i < count; i++) { + let size = file.Read(); + let sealColor = ""; + if (ver > 23) { + sealColor = file.Read(); + } + if (ver < 4) { + file.Read(); + } + processData[EBoardKeyList.HighSealed].push({ size, sealColor }); + } + processData[EBoardKeyList.UpSealed] = file.Read(); + processData[EBoardKeyList.DownSealed] = file.Read(); + processData[EBoardKeyList.LeftSealed] = file.Read(); + processData[EBoardKeyList.RightSealed] = file.Read(); + processData.spliteHeight = file.Read(); + processData.spliteWidth = file.Read(); + processData.spliteThickness = file.Read(); + count = file.Read(); + processData.highDrill = file.ReadArray(count); + processData.frontDrill = file.Read(); + processData.backDrill = file.Read(); + if (ver >= 7) { + let count = file.Read(); + processData.remarks.length = 0; + for (let i = 0; i < count; i++) { + let d = ["", ""]; + d[0] = file.Read(); + d[1] = file.Read(); + processData.remarks.push(d); + } + } +} +function SerializeBoard2DModeingData(file, modelList) { + file.Write(modelList.length); + for (let data of modelList) { + file.WriteObject(data.path); + file.Write(data.dir); + file.Write(data.items.length); + for (let item of data.items) { + file.Write(item.depth); + file.Write(item.offset); + file.Write(item.knife.id); + file.Write(item.knife.radius); + file.Write(item.knife.angle); + file.Write(item.knife.name); + file.Write(item.depthExpr); + } + } +} +function SerializeBoard3DModeingData(file, modelList) { + file.Write(modelList.length); + for (let item of modelList) { + file.Write(item.path.length); + for (let d of item.path) { + file.Write(d.pt.toArray()); + file.Write(d.bul); + } + file.Write(item.dir); + file.Write(item.knife.id); + file.Write(item.knife.radius); + file.Write(item.knife.angle); + file.Write(item.knife.name); + } +} +//反序列化板件数据 +function DeserializationBoard2DModeingData(file, data, ver) { + data.length = 0; + const count = file.Read(); + for (let i = 0; i < count; i++) { + let path = file.ReadObject(); + let dir = file.Read(); + let m = { + path, + dir, + items: [] + }; + const itemCount = file.Read(); + for (let j = 0; j < itemCount; j++) { + let depth = file.Read(); + let offset = file.Read(); + let knifeId = file.Read(); + let knifeRad = file.Read(); + let knifeAngle = file.Read(); + let knifeName = file.Read(); + let depthExpr; + if (ver > 19) { + depthExpr = file.Read(); + } + else { + depthExpr = depth.toString(); + } + m.items.push({ + depth, offset, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName }, depthExpr + }); + } + data.push(m); + } +} +//反序列化板件数据 +function DeserializationBoard3DModeingData(file, data, ver) { + data.length = 0; + const count = file.Read(); + for (let i = 0; i < count; i++) { + let pathCount = file.Read(); + let path = []; + for (let i = 0; i < pathCount; i++) { + let pt = new Vector3().fromArray(file.Read()); + let bul = file.Read(); + path.push({ pt, bul }); + } + let dir = file.Read(); + let knifeId = file.Read(); + let knifeRad = file.Read(); + let knifeAngle = file.Read(); + let knifeName = file.Read(); + data.push({ + path, dir, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName } + }); + } +} +function SerializeBoardSideModeingData(file, sideModelingMap) { + file.Write(sideModelingMap.size); + for (let [index, sideModelingList] of sideModelingMap) { + file.Write(index); + file.Write(sideModelingList.length); + for (let data of sideModelingList) + file.WriteObject(data); + } +} +function DeserializationBoardSideModeingData(file, sideModelingMap) { + sideModelingMap.clear(); + const count = file.Read(); + for (let i = 0; i < count; i++) { + let index = file.Read(); + let listCount = file.Read(); + let sideModelingList = []; + for (let j = 0; j < listCount; j++) { + let obj = file.ReadObject(); + sideModelingList.push(obj); + } + sideModelingMap.set(index, sideModelingList); + } +} + +const _TerminateTaskInjectInteractionFunctions = []; +function TerminateCSGTask(task) { + for (let f of _TerminateTaskInjectInteractionFunctions) + f(task); +} + +class PointShapeUtils { + //方形点表 + static SquarePts(size) { + return [ + new Vector3(-size, -size), + new Vector3(size, -size), + new Vector3(size, size), + new Vector3(-size, size), + new Vector3(-size, -size), + ]; + } + //方形外圈十字直线点表 + static OutsideLinePts(squareSize, lineLength) { + return [ + //-X + new Vector3(-squareSize, 0), + new Vector3(-lineLength, 0), + //X + new Vector3(squareSize, 0), + new Vector3(lineLength, 0), + //Y + new Vector3(0, squareSize), + new Vector3(0, lineLength), + //-Y + new Vector3(0, -squareSize), + new Vector3(0, -lineLength), + ]; + } + //十字直线点表 + static CrossLinePts(lineLength) { + return [ + new Vector3(0, -lineLength), + new Vector3(0, lineLength), + new Vector3(lineLength, 0), + new Vector3(-lineLength, 0), + ]; + } + static CrossLine3DPts(lineLength) { + return [ + [new Vector3(lineLength, 0), + new Vector3(-lineLength / 2, 0)], + [new Vector3(0, -lineLength / 2), + new Vector3(0, lineLength)], + [new Vector3(0, 0, -lineLength / 2), + new Vector3(0, 0, lineLength)], + ]; + } + static TrianglePts(size) { + return [ + new Vector3(size, -size), + new Vector3(0, size), + new Vector3(-size, -size), + new Vector3(size, -size), + ]; + } + static CirclePts(size) { + let pts = []; + let a = Math.PI * 2 / 8; + for (let i = 0; i < 9; i++) + pts.push(new Vector3(Math.sin(a * i) * size, Math.cos(a * i) * size)); + return pts; + } + static ObliqueCrossPts(size) { + return [new Vector3(-size, size), new Vector3(size, -size), new Vector3(-size, -size), new Vector3(size, size)]; + } + static ObliqueCrossLinePts(size) { + return [new Vector3(-size, size), new Vector3(size, -size), new Vector3(), new Vector3(-size, -size), new Vector3(size, size)]; + } + static SandClockPts(size) { + return [ + new Vector3(size, size), + new Vector3(-size, size), + new Vector3(size, -size), + new Vector3(-size, -size), + new Vector3(size, size), + ]; + } + static TangentPts(size) { + let pts = [ + new Vector3(-size, size), + new Vector3(size, size), + new Vector3(size / 2, size), + ]; + let a = Math.PI * 2 / 8; + for (let i = 0; i < 9; i++) + pts.push(new Vector3(Math.sin(a * i + Math.PI / 2) * size, Math.cos(a * i + Math.PI / 2) * size)); + return pts; + } + static PerPts(size) { + return [ + new Vector3(-size, size), + new Vector3(-size, -size), + new Vector3(size, -size), + new Vector3(0, -size), + new Vector3(0, 0), + new Vector3(-size, 0), + ]; + } + static LinesDirPts(len, width, lineType) { + if (lineType === LinesType.Reverse) { + return [ + new Vector3(-len / 2), new Vector3(-len / 2 + width / 2, width / 2), + new Vector3(-len / 2), new Vector3(-len / 2 + width / 2, -width / 2), + new Vector3(-len / 2), new Vector3(len / 2), + new Vector3(len / 2), new Vector3(len / 2 - width / 2, width / 2), + new Vector3(len / 2), new Vector3(len / 2 - width / 2, -width / 2), + ]; + } + else if (lineType === LinesType.Positive) + return [ + new Vector3(0, -len / 2), new Vector3(-width / 2, -len / 2 + width / 2), + new Vector3(0, -len / 2), new Vector3(width / 2, -len / 2 + width / 2), + new Vector3(0, -len / 2), new Vector3(0, len / 2), + new Vector3(0, len / 2), new Vector3(-width / 2, len / 2 - width / 2), + new Vector3(0, len / 2), new Vector3(width / 2, len / 2 - width / 2), + ]; + else { + let w1 = Math.min(len, width) / 5; + return [ + new Vector3(0, len / 2), new Vector3(0, -len / 2), + new Vector3(-width / 2), new Vector3(width / 2), + new Vector3(-width / 2), new Vector3(-width / 2 + w1, w1), + new Vector3(-width / 2), new Vector3(-width / 2 + w1, -w1), + new Vector3(width / 2), new Vector3(width / 2 - w1, w1), + new Vector3(width / 2), new Vector3(width / 2 - w1, -w1), + new Vector3(0, len / 2), new Vector3(-w1, len / 2 - w1), + new Vector3(0, len / 2), new Vector3(w1, len / 2 - w1), + new Vector3(0, -len / 2), new Vector3(-w1, -len / 2 + w1), + new Vector3(0, -len / 2), new Vector3(w1, -len / 2 + w1), + ]; + } + } + //开门方向纹路 + static LinesOpenDirPts(len, width, openDir) { + if (openDir === BoardOpenDir.Right) { + return [ + new Vector3(-width / 2, -len / 2), new Vector3(width / 2, 0), + new Vector3(width / 2, 0), new Vector3(-width / 2, len / 2) + ]; + } + else if (openDir === BoardOpenDir.Left) { + return [ + new Vector3(width / 2, -len / 2), new Vector3(-width / 2, 0), + new Vector3(-width / 2, 0), new Vector3(width / 2, len / 2) + ]; + } + else if (openDir === BoardOpenDir.Up) { + return [ + new Vector3(-width / 2, -len / 2), new Vector3(0, len / 2), + new Vector3(0, len / 2), new Vector3(width / 2, -len / 2) + ]; + } + else if (openDir === BoardOpenDir.Down) { + return [ + new Vector3(-width / 2, len / 2), new Vector3(0, -len / 2), + new Vector3(0, -len / 2), new Vector3(width / 2, len / 2) + ]; + } + } +} + +/** + * 封边视图下和修改封边时显示的实体 + */ +class SealSolid extends Entity { + constructor(pathCurve, sealWidth) { + super(); + this.OnlyRenderType = true; + this._PathCurve = pathCurve; + this._SealWidth = sealWidth; + if (this._PathCurve) { + let path = this._PathCurve; + this.OCS = path.OCSNoClone; + this._SpaceOCS.copy(path.OCSNoClone); + let ocsInv = this.OCSInv; + this._PathCurve.ApplyMatrix(ocsInv); + } + } + get MeshGeometry() { + if (this._MeshGeometry) + return this._MeshGeometry; + let z0 = 0; + let z1 = this._SealWidth; + let coords = []; + let pts = this._PathCurve.Shape.getPoints(); + for (let i = 0; i < pts.length - 1; i++) { + let p = pts[i]; + let nextp = pts[FixIndex$1(i + 1, pts)]; + coords.push(p.x, p.y, z0, nextp.x, nextp.y, z1, nextp.x, nextp.y, z0, p.x, p.y, z0, p.x, p.y, z1, nextp.x, nextp.y, z1); + } + let edgeGeo = new BufferGeometry(); + edgeGeo.setAttribute('position', new Float32BufferAttribute(coords, 3)); + edgeGeo.computeVertexNormals(); + this._MeshGeometry = edgeGeo; + return this._MeshGeometry; + } + get EdgeGeometry() { + if (this._EdgeGeometry) + return this._EdgeGeometry; + let z0 = 0; + let z1 = this._SealWidth; + let coords = []; + const pl = this._PathCurve; + let pts = pl.Shape.getPoints(); + for (let i = 0; i < pts.length - 1; i++) { + let p = pts[i]; + let nextp = pts[FixIndex$1(i + 1, pts)]; + coords.push(p.x, p.y, z0, nextp.x, nextp.y, z0); + coords.push(p.x, p.y, z1, nextp.x, nextp.y, z1); + if (p["_mask_"]) + coords.push(p.x, p.y, z0, p.x, p.y, z1); + } + let edgeGeo = new BufferGeometry(); + edgeGeo.setAttribute('position', new Float32BufferAttribute(coords, 3)); + edgeGeo.computeVertexNormals(); + this._EdgeGeometry = edgeGeo; + return this._EdgeGeometry; + } + InitDrawObject(renderType) { + const mtl = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex); + mtl.transparent = true; + mtl.opacity = 0.3; + return new Object3D().add(new Mesh(this.MeshGeometry, mtl), new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex))); + } + UpdateDrawGeometry() { + if (this._EdgeGeometry) + this._EdgeGeometry.dispose(); + this._EdgeGeometry = undefined; + if (this._MeshGeometry) + this._MeshGeometry.dispose(); + this._MeshGeometry = undefined; + } + ClearDraw() { + this.UpdateDrawGeometry(); + return super.ClearDraw(); + } + UpdateDrawObject(renderType, obj) { + DisposeThreeObj(obj); + Object3DRemoveAll(obj); + const mtl = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex); + mtl.transparent = true; + mtl.opacity = 0.3; + return obj.add(new Mesh(this.MeshGeometry, mtl), new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex))); + } + /** + * 当实体需要被更新时,更新实体材质 + */ + UpdateDrawObjectMaterial(renderType, obj) { + const mtl = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex); + mtl.transparent = true; + mtl.opacity = 0.3; + return obj.add(new Mesh(this.MeshGeometry, mtl), new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex))); + } + ApplyMatrix(m) { + this.WriteAllObjectRecord(); + if (equaln$1(m.getMaxScaleOnAxis(), 1)) { + let xA = new Vector3(); + let yA = new Vector3(); + let zA = new Vector3(); + m.extractBasis(xA, yA, zA); + if (!equalv3(xA.clone().cross(yA).normalize(), zA)) + this.ApplyMirrorMatrix(m); + else { + this._Matrix.multiplyMatrices(m, this._Matrix); + this._SpaceOCS.multiplyMatrices(m, this._SpaceOCS); + this.Update(UpdateDraw.Matrix); + } + } + else { + this.ApplyScaleMatrix(m); + } + return this; + } +} + +var FontStyleKeyCode; +(function (FontStyleKeyCode) { + FontStyleKeyCode[FontStyleKeyCode["Height"] = 1] = "Height"; + FontStyleKeyCode[FontStyleKeyCode["WidthFactor"] = 2] = "WidthFactor"; + FontStyleKeyCode[FontStyleKeyCode["FontType"] = 3] = "FontType"; +})(FontStyleKeyCode || (FontStyleKeyCode = {})); + +/** + * 字体样式 + */ +let FontStyleRecord = class FontStyleRecord extends SymbolTableRecord { + constructor() { + super(...arguments); + /** 字体高度 1 */ + this.Height = 60; //1 + /** 宽度因子 2 字符串间距 */ + this.WidthFactor = 1; + /** 样式类型 3 */ + this.FontType = FontType.YaHei; + //#endregion + } + //#region -------------------------File------------------------- + //对象从文件中读取数据,初始化自身 + ReadFile(file) { + file.Read(); + super.ReadFile(file); + this.Height = file.Read(); + this.WidthFactor = file.Read(); + this.FontType = file.Read(); + } + //对象将自身数据写入到文件. + WriteFile(file) { + file.Write(1); + super.WriteFile(file); + file.Write(this.Height); + file.Write(this.WidthFactor); + file.Write(this.FontType); + } +}; +__decorate([ + AutoRecord +], FontStyleRecord.prototype, "Height", void 0); +__decorate([ + AutoRecord +], FontStyleRecord.prototype, "WidthFactor", void 0); +__decorate([ + AutoRecord +], FontStyleRecord.prototype, "FontType", void 0); +FontStyleRecord = __decorate([ + Factory +], FontStyleRecord); + +const TEXT_HEIGHT_SCALE = 1.35; +var TextAligen; +(function (TextAligen) { + TextAligen[TextAligen["LeftTop"] = 3] = "LeftTop"; + TextAligen[TextAligen["Top"] = 1] = "Top"; + TextAligen[TextAligen["RightTop"] = 5] = "RightTop"; + TextAligen[TextAligen["LeftMid"] = 2] = "LeftMid"; + TextAligen[TextAligen["Mid"] = 0] = "Mid"; + TextAligen[TextAligen["RightMid"] = 4] = "RightMid"; + TextAligen[TextAligen["LeftDown"] = 10] = "LeftDown"; + TextAligen[TextAligen["Down"] = 8] = "Down"; + TextAligen[TextAligen["RightDown"] = 12] = "RightDown"; +})(TextAligen || (TextAligen = {})); +// 多层lineHeight比例计算方式: +// src\DatabaseServices\Text\FontExt.ts createPaths函数中 +// textHeight * (textType.boundingBox.yMax - textType.boundingBox.yMin + textType.underlineThickness) / textType.resolution +const LineHeightScaleMap = { + [FontType.YaHei]: 1.875, // (1439+355+81) / 1000 + [FontType.SongTi]: 1.834, // (1369+437+28) / 1000 + [FontType.KaiTi]: 1.514, // (1194 +255 + 65) / 1000 + [FontType.FangSong]: 1.487, // (1194 +228 + 65) / 1000 + [FontType.LiShu]: 1.58, // (1194 +315 + 71) / 1000 + [FontType.HeiTi]: 1.476, // (1194 +217 +65 ) / 1000 + [FontType.HuaWenLiShu]: 1.499, // (1111 +360 +28 ) / 1000 + [FontType.HuaWenXingKai]: 1.543, // (1114 +401 +28 ) / 1000 +}; +/** + * 单/多行文字实体 + */ +let Text = class Text extends Entity { + constructor(pos, _TextString = "", _TextRotation = 0, fontName, widthFactor) { + super(); + this._TextString = _TextString; + this._TextRotation = _TextRotation; + this.OnlyRenderType = true; + this._FontStyleOverride = new Map; //字体样式替代 + this._RoomName = ""; + this._CabinetName = ""; + this._Align = TextAligen.LeftDown; + this.IsDoubleMesh = false; //文字使用双面网格体 + this.IsFsText = false; //文字写在俯视图上 + pos && this._Matrix.setPosition(pos); + this.FontStyle = HostApplicationServices.CurrentFontStyle; + if (fontName) + this.FontName = fontName; + if (widthFactor) + this.WidthFactor = widthFactor; + } + get RoomName() { return this._RoomName; } + set RoomName(value) { + if (value === this._RoomName) + return; + this.WriteAllObjectRecord(); + this._RoomName = value; + } + get CabinetName() { return this._CabinetName; } + set CabinetName(value) { + if (value === this._CabinetName) + return; + this.WriteAllObjectRecord(); + this._CabinetName = value; + } + get TextRotation() { + return this._TextRotation; + } + set TextRotation(v) { + if (this._TextRotation === v) + return; + this.WriteAllObjectRecord(); + this._TextRotation = v; + this.UpdateTranslate(); + } + get TextString() { + return this._TextString; + } + set TextString(str) { + if (str !== this._TextString) { + this.WriteAllObjectRecord(); + this._TextString = str; + this.Update(); + } + } + set TextAligen(al) { + if (al === this._Align) + return; + this.WriteAllObjectRecord(); + this._Align = al; + this.UpdateTranslate(); + } + get TextAligen() { + return this._Align; + } + /**设置字体样式 */ + set FontStyle(styleId) { + if (styleId === this._FontStyle) + return; + this.WriteAllObjectRecord(); + this._FontStyle = styleId; + this.Update(); + } + /**大概多行文字的高度 */ + get MultiHeight() { + // this.Height 为用户初始化设置的高度。 + // 但是this.Height和实际渲染高度不一致。所以使用高度乘以比例scale,这样行高会精确一点。 + // 如果需要精确的,可以绘制完后,再获取实际高度。 + const scale = LineHeightScaleMap[this.FontName] || LineHeightScaleMap[FontType.SongTi]; + if (this._TextString.includes("\n")) { + let texts = this._TextString.split("\n"); + const scale = LineHeightScaleMap[this.FontName] || LineHeightScaleMap[FontType.SongTi]; + return texts.length * this.Height * scale; + } + return this.Height * scale; + } + get FontStyle() { return this._FontStyle; } + //字体样式名称 + get FontName() { + return this.GetFontStyleValue(FontStyleKeyCode.FontType); + } + set FontName(fontName) { + this.SetFontStyleOverrideValue(FontStyleKeyCode.FontType, fontName); + } + //字体尺寸大小 + get Height() { + return this.GetFontStyleValue(FontStyleKeyCode.Height); + } + set Height(value) { + this.SetFontStyleOverrideValue(FontStyleKeyCode.Height, value); + } + //字体间距 + get WidthFactor() { + return this.GetFontStyleValue(FontStyleKeyCode.WidthFactor); + } + set WidthFactor(value) { + this.SetFontStyleOverrideValue(FontStyleKeyCode.WidthFactor, value); + } + get FontStyleOverride() { + return this._FontStyleOverride; + } + GetFontStyleOverrideValue(key) { return this._FontStyleOverride.get(key); } + GetFontStyleValue(key) { + let value = this.GetFontStyleOverrideValue(key); + if (value !== undefined) + return value; + if (this._FontStyle?.Object) + return this._FontStyle.Object[FontStyleKeyCode[key]]; + if (HostApplicationServices.CurrentFontStyle && HostApplicationServices.CurrentFontStyle.Object instanceof FontStyleRecord) + return HostApplicationServices.CurrentFontStyle.Object[FontStyleKeyCode[key]]; + } + //设置覆盖的样式 + SetFontStyleOverrideValue(key, value) { + if (this.GetFontStyleOverrideValue(key) === value) + return; + this.WriteAllObjectRecord(); + let oldV = this.GetFontStyleValue(key); + this._FontStyleOverride.set(key, value); + if (oldV !== value) + this.Update(); + } + ClearFontStyleOverride() { + if (this._FontStyleOverride.size === 0) + return; + this.WriteAllObjectRecord(); + this._FontStyleOverride.clear(); + this.Update(); + } + //创建字体对象 + async AsyncUpdateDrawObject(obj, renderType) { + } + /**大概宽度 */ + get Width() { + let count = 0; + const textStr = this._TextString.split("\n"); + for (const txt of textStr) { + let cTemp = 0; + for (let i = 0; i < txt.length; i++) { + const code = txt.charCodeAt(i); + if (code > 255) + cTemp++; + else + cTemp += 0.5; + } + count = Math.max(count, cTemp); + } + return count * this.Height * TEXT_HEIGHT_SCALE * this.WidthFactor; + } + get HasBoundingBox() { return this._CacheDrawObject.has(RenderType.Wireframe); } + get BoundingBox() { + let obj = this._CacheDrawObject.get(RenderType.Wireframe); + if (obj && obj.children.length === 1) + return GetBox(obj); + return this.BoundingBoxInOCS.applyMatrix4(new Matrix4().makeRotationZ(this.TextRotation)).applyMatrix4((this.OCSNoClone)); + } + get BoundingBoxInOCS() { + let width = this.Width; + let height = this.MultiHeight; + let obj = this._CacheDrawObject.get(RenderType.Wireframe); + if (obj && obj.children.length === 1) { + let geo = obj.children[0].geometry; + if (geo) { + if (!geo.boundingBox) + geo.computeBoundingBox(); + width = geo.boundingBox.max.x - geo.boundingBox.min.x; + height = geo.boundingBox.max.y - geo.boundingBox.min.y; + } + } + let w = Math.max(Math.abs(width / 2), 1); + let h = Math.max(Math.abs(height / 2), 1); + let box = new Box3Ext(new Vector3(-w, -h, 0), new Vector3(w, h, 0)); + let offset = new Vector3; + if (this.TextAligen & TextAligen.LeftMid) + offset.x = w; + if (this.TextAligen & TextAligen.RightMid) + offset.x = -w; + if (this.TextAligen & TextAligen.Top) + offset.y = -h; + if (this.TextAligen & TextAligen.Down) + offset.y = h; + box.translate(offset); + return box; + } + UpdateTranslate() { + for (let [type, obj] of this._CacheDrawObject) { + this.UpdateObjectTranslate(obj); + } + } + UpdateObjectTranslate(obj) { + if (obj.children.length > 0) { + let [mesh, mesh2] = obj.children; + let box = mesh.geometry.boundingBox; + let p = new Vector3(); + if (this._Align & TextAligen.LeftMid) + p.x = box.min.x; + else if (this._Align & TextAligen.RightMid) + p.x = box.max.x; + else + p.x = (box.min.x + box.max.x) / 2; + if (this._Align & TextAligen.Top) + p.y = box.max.y; + else if (this._Align & TextAligen.Down) + p.y = box.min.y; + else + p.y = (box.min.y + box.max.y) / 2; + mesh.matrix = new Matrix4().makeRotationZ(this.TextRotation).multiply(new Matrix4().setPosition(p.negate())); + if (mesh2 && this.IsDoubleMesh) { + //左右视图时应该这样,俯视图是X,-Y,-Z(y+=(xxx) + if (this.IsFsText) { + p.y += (box.max.y - box.min.y); + mesh2.matrix = new Matrix4().makeBasis(XAxis, YAxisN, ZAxisN).premultiply(new Matrix4().makeRotationZ(this.TextRotation).multiply(new Matrix4().setPosition(p))); + } + else { + p.x += (box.max.x - box.min.x); + mesh2.matrix = new Matrix4().makeBasis(XAxisN, YAxis, ZAxisN).premultiply(new Matrix4().makeRotationZ(this.TextRotation).multiply(new Matrix4().setPosition(p))); + } + } + obj.updateMatrixWorld(true); + } + } + ApplyMatrix(m) { + super.ApplyMatrix(m); + return this; + } + ApplyScaleMatrix(m) { + this.WriteAllObjectRecord(); + let p1 = this.Position; + let p2 = new Vector3(0, this.Height).applyMatrix4(this.OCS); + [p1, p2].forEach(p => p.applyMatrix4(m)); + this.Position = p1; + this.Height = p1.distanceTo(p2); + return this; + } + InitDrawObject(renderType = RenderType.Wireframe) { + let g = new Object3D(); + if (renderType !== RenderType.Wireframe) { + let obj = this.CacheDrawObject.get(RenderType.Wireframe); + if (obj && obj.children.length === 1 && obj.children[0].geometry) { + let color = (renderType > 100 || renderType === RenderType.Print) ? 0 : this.DrawColorIndex; + let mesh = new Mesh(obj.children[0].geometry, ColorMaterial.GetBasicMaterial(color)); + g.add((mesh)); + g.updateMatrixWorld(true); + this.UpdateObjectTranslate(g); + return g; + } + } + this.AsyncUpdateDrawObject(g, renderType); + return g; + } + UpdateDrawObject(type, obj) { + this.AsyncUpdateDrawObject(obj, type); + } + UpdateDrawObjectMaterial(renderType, en) { + if (en && en.children.length === 1) { + let mesh = en.children[0]; + //因为我们是OnlyRnderType 所以Print会变成WireframePrint,所以要用下面的写法 + let color = (renderType > 100 || renderType === RenderType.Print) ? 0 : this.DrawColorIndex; + mesh.material = ColorMaterial.GetBasicMaterialDoubleSide(color); + } + } + GetGripPoints() { + return [this.Position, new Vector3(0, this.Height).applyMatrix4(this.OCS)]; + } + MoveGripPoints(indexList, vec) { + if (indexList[0] === 0) + this.Position = this.Position.add(vec); + else { + let v = vec.clone().applyMatrix4(this.OCSInv.setPosition(new Vector3)); + this.Height = this.Height + v.y; + } + } + //捕捉点 + GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { + if (snapMode === ObjectSnapMode.End) { + let box = this.BoundingBoxInOCS; + let p2 = new Vector3(box.min.x, box.max.y); + let p3 = new Vector3(box.max.x, box.min.y); + let pts = [box.min, p2, p3, box.max]; + for (let p of pts) + p.applyMatrix4(this.OCSNoClone); + return pts; + } + return []; + } + GetStretchPoints() { + return [this.Position]; + } + MoveStretchPoints(indexList, vec) { + this.ApplyMatrix(MoveMatrix(vec)); + } + //#region -----------------------------File----------------------------- + //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化 + ReadFontStyle(file) { + this._FontStyleOverride.clear(); + let size = file.Read(); + for (let i = 0; i < size; i++) { + let k = file.Read(); + let v = file.Read(); + this._FontStyleOverride.set(k, v); + } + } + WriteFontStyle(file) { + file.Write(this._FontStyleOverride.size); + for (let [k, v] of this._FontStyleOverride) { + file.Write(k); + file.Write(v); + } + } + //对象从文件中读取数据,初始化自身 + _ReadFile(file) { + super._ReadFile(file); + let ver = file.Read(); //1 + this._TextString = file.Read(); + if (ver < 2) + this.Height = file.Read(); + this.TextRotation = file.Read(); + if (ver < 2) + this.FontName = file.Read(); + this._Align = file.Read(); + //从版本2开始使用FontStyle + if (ver >= 2) { + this.ReadFontStyle(file); + this._FontStyle = file.ReadHardObjectId() ?? HostApplicationServices.CurrentFontStyle; + } + if (ver > 2) { + this._RoomName = file.Read(); + this._CabinetName = file.Read(); + } + } + //对象将自身数据写入到文件. + WriteFile(file) { + super.WriteFile(file); + file.Write(3); //ver + file.Write(this._TextString); + file.Write(this.TextRotation); + file.Write(this._Align); + this.WriteFontStyle(file); + file.WriteHardObjectId(this._FontStyle); + file.Write(this._RoomName); + file.Write(this._CabinetName); + } +}; +Text = __decorate([ + Factory +], Text); + var Board_1; //排钻配置名是合法的 可用的 function IsValidDriName(name) { @@ -19653,19 +24350,344 @@ let Board = Board_1 = class Board extends ExtrudeSolid { this._IsChaiDan = true; this._2DModelingList = []; this._3DModelingList = []; + //侧面造型 + this._SideModelingMap = new Map(); this._CustomNumber = null; //自定义编号 this._DrillLock = false; //排钻独立锁 this._DrillAssociationLock = new Set(); //排钻关联锁 + //放样路径 基于OPt X Z -Y 坐标系为基准的路径 + this._SweepPath = undefined; + this._SweepAngle = 0; + /** 见光面 */ + this._SweepVisibleFace = FaceDirection.Front; + this._SweepArcBoardBuild = undefined; //用于建模和计算的类 不保证其正确性(绘制更新可能存在延迟) + //圆弧板每一段圆弧的槽配置 + this._ArcBoardOptions = new Map(); + this._isDrawArcGroove = true; + this.arcBoardFeedProcess = ArcBoardFeedProcess.Slots; //圆弧板槽加工工艺 //仅在渲染器中使用倒角 this.bevelEnabled = true; //二维刀路 id -> polyline this._KnifePolylineMap = new Map(); + this._FixContourByArcSweepPath_Ing = false; + //侧面关联槽 + this.RelevanceSideModelMap = new Map(); + this.UpdateSplitBoardSideModelUtil = true; + this._asyncSideModelIng = false; this._workerCalcedGeom = null; //worker计算后,暂时存入到这里 - this._async2DPathIng = false; + this._async2DPathIng = false; //二维刀路构建进行中 //偏移缓存 this.OffsetPathCache = new Map(); this.InitBoardData(); } + get BoundingBoxInOCS() { + if (this._SweepPath) + return new Box3Ext().copy(this.MeshGeometry.boundingBox); + return super.BoundingBoxInOCS; + } + get BoundingBox() { + if (this._SweepPath) { + let geom = this.MeshGeometry; + const position = geom.attributes.position; + if (position) { + let vec = new Vector3; + let box = new Box3Ext; + for (let i = 0, il = position.count; i < il; i++) { + vec.fromBufferAttribute(position, i); + vec.applyMatrix4(this.OCSNoClone); + box.expandByPoint(vec); + } + return box; + } + } + return super.BoundingBox; + } + get IsDrawArcGroove() { + return this._isDrawArcGroove; + } + set IsDrawArcGroove(v) { + this.WriteAllObjectRecord(); + this._isDrawArcGroove = v; + } + /** + * path 发生改变,更新圆弧配置 + * @param {{ key: number, arc: Arc; }[]} oldArcs 旧圆弧和对应的board options key + * @param {Polyline} nPath 新路径(未进行起点偏移) + * @return {*} {void} + */ + UpdateArcBoardOptionsByPath(oldArcs, nPath) { + if (oldArcs.length === 0) + return; + const nCurves = nPath.Explode(); + const newArcs = []; + for (let i = 0; i < nCurves.length; i++) + if (nCurves[i] instanceof Arc) + newArcs.push({ key: i, arc: nCurves[i] }); + const newOpts = new Map(); + const oldOpts = this._ArcBoardOptions; + newOpts.set(-1, oldOpts.get(-1)); + // 设置新圆弧对应的原始配置 + for (let i = 0; i < newArcs.length; i++) + for (const item of oldArcs) { + const oldArc = item.arc; + const oldKey = item.key; + const newArc = newArcs[i].arc; + const newKey = newArcs[i].key; + if (equalv3(newArc.StartPoint, oldArc.StartPoint, 1e-5) || equalv3(newArc.EndPoint, oldArc.EndPoint, 1e-5)) // 若圆弧的头或尾部位置相同,说明是同一段圆弧 + { + newOpts.set(newKey, { ...oldOpts.get(oldKey), arcLength: parseFloat(FixedNotZero(newArc.Length, 5)) }); + break; + } + } + // 曲线从头拉到尾部后面,或者从尾拉到头部前面 + if (newArcs.length === 1 && newOpts.size === 1) { + let oldArcIndex = 0; // 第一个圆弧 + if (equalv3(newArcs[0].arc.StartPoint, arrayLast(oldArcs).arc.EndPoint, 1e-3)) // 从头拉伸到尾部后面,则新圆弧的起点和旧圆弧的尾点相等。 + oldArcIndex = oldArcs.length - 1; // 最后一个圆弧 + const oldKey = oldArcs[oldArcIndex].key; + const newKey = newArcs[0].key; + newOpts.set(newKey, { ...oldOpts.get(oldKey), arcLength: parseFloat(FixedNotZero(newArcs[0].arc.Length, 5)) }); + } + this._ArcBoardOptions.clear(); + this._ArcBoardOptions = newOpts; + } + get ArcBoardOptions() { + if (this._ArcBoardOptions.size > 0) + return this._ArcBoardOptions; + let cus = new ArcBoardBuild(this).ParseSweepCurves().SweepCurves1; + //key=-1 为通用转角槽配置 + this._ArcBoardOptions.set(-1, { ...defultArcBoardOption }); + cus.forEach((cu, i) => { + if (cu instanceof Arc) + this._ArcBoardOptions.set(i, { ...defultArcBoardOption, arcLength: parseFloat(FixedNotZero(cu.Length, 5)) }); + }); + return this._ArcBoardOptions; + } + set ArcBoardOptions(opt) { + this.WriteAllObjectRecord(); + this._ArcBoardOptions = opt; + this.UpdateArcBoardOptions(false); + this.Update(); + } + UpdateArcBoardOptions(isNewPath) { + //更新ArcBuild曲线数据 + this._SweepArcBoardBuild = new ArcBoardBuild(this).ParseSweepCurves(); + let cus = this.GetSweepPathInWCS().Explode(); + let newOpts = new Map(); + newOpts.set(-1, this._ArcBoardOptions.get(-1)); + //如果是新的多段线信息,就更新全部数据 + if (isNewPath) { + cus.forEach((cu, i) => { + if (cu instanceof Arc) + newOpts.set(i, { ...this._ArcBoardOptions.get(i), arcLength: parseFloat(FixedNotZero(cu.Length, 5)) }); + }); + } + else if (cus.filter(cu => cu instanceof Arc).length <= this._ArcBoardOptions.size - 1) { + cus.forEach((cu, i) => { + if (cu instanceof Arc && this._ArcBoardOptions.has(i)) + newOpts.set(i, { ...this._ArcBoardOptions.get(i), arcLength: parseFloat(FixedNotZero(cu.Length, 5)) }); + }); + } + this._ArcBoardOptions = newOpts; + } + get IsArcBoard() { + return this._SweepPath != undefined; + } + get ArcBuild() { + if (!this._SweepArcBoardBuild) + this._SweepArcBoardBuild = new ArcBoardBuild(this); + return this._SweepArcBoardBuild; + } + SetSweepPath(path, sweepAngle) { + this.WriteAllObjectRecord(); + this._SweepPath = path; + this._SweepAngle = sweepAngle; + this.Update(); + } + FixContourByArcSweepPath() { + if (!this._SweepPath) + return; + //标记正在修改轮廓 避免重复进入 + this._FixContourByArcSweepPath_Ing = true; + let build = new ArcBoardBuild(this); + let length = build.SweepLength; + if (this._SweepAngle === 0) { + if (!equaln$1(length, this.width, 1e-3)) + this.Width = length; //直接拉大拉小 + } + else if (equaln$1(Math.abs(this._SweepAngle), Math.PI / 2)) { + if (!equaln$1(length, this.height, 1e-3)) + this.Height = length; //直接拉大拉小 + } + else { + let con = this.ContourCurve.Clone(); + let ro = new Matrix4().makeRotationZ(-this._SweepAngle); + con.ApplyMatrix(ro); + con.Move(con.StartPoint.negate()); + let box = con.BoundingBox; + let size = box.max.x - box.min.x; + if (!equaln$1(size, length)) { + let contour = Contour.CreateContour(con, false); + contour.UnEqualProportionScale(size / 2, length - size, "x"); + let ro = new Matrix4().makeRotationZ(this._SweepAngle); + contour.Curve.ApplyMatrix(ro); + contour.Curve.Move(contour.Curve.BoundingBox.min.negate()); + this.SetContourCurve(contour.Curve); + } + } + this._FixContourByArcSweepPath_Ing = false; + } + FixArcSweepPathLength() { + if (!this._SweepPath) + return; + let build = new ArcBoardBuild(this); + let length = build.SweepLength; + let brLength = this.ParseBoardLengthInArcSweep(); + if (equaln$1(brLength, length, 1e-3)) + return; + if (brLength > length) { + //延伸路径 + let endp = this._SweepPath.EndPoint; + let derv = this._SweepPath.GetFirstDeriv(this._SweepPath.EndParam).normalize(); + if (this._SweepPath.GetCurveAtParam(this._SweepPath.EndParam - 0.5) instanceof Arc) + this._SweepPath.AddVertexAt(this._SweepPath.LineData.length, AsVector2(endp.add(derv.multiplyScalar(brLength - length)))); + else + this._SweepPath.LineData[this._SweepPath.LineData.length - 1].pt.copy(AsVector2(endp.add(derv.multiplyScalar(brLength - length)))); + } + else { + if (this._SweepVisibleFace === FaceDirection.Back) { + //裁剪路径 + let param = this._SweepPath.GetParamAtDist(brLength); + this._SweepPath = this._SweepPath.GetSplitCurves(param)[0]; + } + else { + //裁剪路径 + let param = build.SweepPath1.GetParamAtDist(brLength); + let path = build.SweepPath1.GetSplitCurves(param)[0]; + this._SweepPath = ArcBoardBuild.OffsetPolyline(path, this.thickness); + } + } + } + ParseBoardLengthInArcSweep() { + let brLength; + if (this._SweepAngle === 0) + brLength = this.width; + else if (equaln$1(Math.abs(this._SweepAngle), Math.PI / 2)) + brLength = this.height; + else { + let con = this.ContourCurve.Clone(); + let ro = new Matrix4().makeRotationZ(-this._SweepAngle); + con.ApplyMatrix(ro); + let box = con.BoundingBox; + brLength = box.max.x - box.min.x; + } + return brLength; + } + ClearSweepPath() { + this.WriteAllObjectRecord(); + this._SweepPath = undefined; + this._SweepAngle = 0; + this.Update(); + } + GetSweepPath() { + return this._SweepPath; + } + //获得见光path + GetSweepPathInWCS() { + if (!this._SweepPath) + return; + let path = this.ArcBuild.SweepPath1.Clone(); + let mtx = new Matrix4().makeBasis(XAxis, ZAxis, YAxisN) + .premultiply(this.ArcBuild.Rotate2OCSMtx) + .premultiply(this.OCSNoClone); + path.ApplyMatrix(mtx); + return path; + } + //背面 + GetSweepPath1InWCS() { + if (!this._SweepPath) + return; + let path = this._SweepPath.Clone(); + let mtx = new Matrix4().makeBasis(XAxis, ZAxis, YAxisN) + .premultiply(this.ArcBuild.Rotate2OCSMtx) + .premultiply(this.OCSNoClone); + path.ApplyMatrix(mtx); + return path; + } + //正面 + GetSweepPath2InWCS() { + if (!this._SweepPath) + return; + let path = this._SweepVisibleFace === FaceDirection.Back ? this.ArcBuild.SweepPath2.Clone() : this.ArcBuild.SweepPath1.Clone(); + let mtx = new Matrix4().makeBasis(XAxis, ZAxis, YAxisN) + .premultiply(this.ArcBuild.Rotate2OCSMtx) + .premultiply(this.OCSNoClone); + path.ApplyMatrix(mtx); + return path; + } + /** 获取见光面 */ + get SweepVisibleFace() { + return this._SweepVisibleFace; + } + /** 设置见光面 */ + set SweepVisibleFace(dir) { + if (dir === this._SweepVisibleFace) + return; + this.WriteAllObjectRecord(); + this._SweepVisibleFace = dir; + this.FixContourByArcSweepPath(); + this.Update(); + } + get SweepAngle() { + return this._SweepAngle; + } + set SweepAngle(v) { + if (equaln$1(v, this._SweepAngle)) + return; + this.WriteAllObjectRecord(); + this._SweepAngle = v; + this.FixArcSweepPathLength(); + this.Update(); + } + AdjustPath(br, outline) { + if (this.IsArcBoard) { + const path = this.GetSweepPath(); + // 1.将放样路径展开 + const pathWCS = this.GetSweepPathInWCS(); + pathWCS.ApplyMatrix(pathWCS.OCSInv); + const expandPath = CurveManager.CreateExpandPl(pathWCS); + // 2.将轮廓进行旋转 + outline.ApplyMatrix(new Matrix4().makeRotationZ(-this.SweepAngle)); + // 3.根据轮廓的左右两侧,截取取对应的放样路径 + const leftParam = expandPath.GetParamAtDist(outline.BoundingBox.min.x); + const rightParam = expandPath.GetParamAtDist(outline.BoundingBox.max.x); + const leftPt = path.GetPointAtParam(leftParam); + const rightPt = path.GetPointAtParam(rightParam); + const newPath = CurveManager.Get_Pl_InPtAtoPtB(path, leftPt, rightPt); + // 4.路径起点为原点 + newPath.Move(newPath.StartPoint.negate()); + br.SetSweepPath(newPath, this.SweepAngle); + } + } + AdjustPosition(br, basePoint) { + if (this.IsArcBoard) { + // 映射shape上的基点 + basePoint.applyMatrix4(this.ArcBuild.OCS2RotateMtx); + this.ArcBuild.ParseAllX_Map([basePoint.x]); + this.ArcBuild.PosMap2ArcPos(basePoint); + basePoint.applyMatrix4(this.ArcBuild.Rotate2OCSMtx); + basePoint.applyMatrix4(this.OCSNoClone); + // 映射board上的基点 + const basePointInBoard = br.ContourCurve.StartPoint; + basePointInBoard.applyMatrix4(br.ArcBuild.OCS2RotateMtx); + br.ArcBuild.ParseAllX_Map([basePointInBoard.x]); + br.ArcBuild.PosMap2ArcPos(basePointInBoard); + basePointInBoard.applyMatrix4(br.ArcBuild.Rotate2OCSMtx); + basePointInBoard.applyMatrix4(br.OCSNoClone); + // 移动(boardBasePoint -> basePoint) + br.Move(basePoint.sub(basePointInBoard)); + } + } /** * 创建一个代理数组,数组改变时被监听 */ @@ -19706,6 +24728,16 @@ let Board = Board_1 = class Board extends ExtrudeSolid { edgeRemarkLeft: "", edgeRemarkRight: "", highBoardEdgeRemark: this.CreateArray(), + reservedEdgeUp: "0", + reservedEdgeDown: "0", + reservedEdgeRight: "0", + reservedEdgeLeft: "0", + highReservedEdge: this.CreateArray(), + sealColorUp: "", + sealColorDown: "", + sealColorLeft: "", + sealColorRight: "", + sealColorType: "", }; this._BoardProcessOption = new Proxy(defaultData, { get: function (target, key, receiver) { @@ -19714,7 +24746,7 @@ let Board = Board_1 = class Board extends ExtrudeSolid { set: (target, key, value, receiver) => { if (Reflect.get(target, key, receiver) !== value) { this.WriteAllObjectRecord(); - if (key === "highDrill" || key === EBoardKeyList.HighSealed || key === "highBoardEdgeRemark") { + if (key === "highDrill" || key === EBoardKeyList.HighSealed || key === "highBoardEdgeRemark" || key === "highReservedEdge") { let arr = this.CreateArray(); arr.push(...value); target[key] = arr; @@ -19778,6 +24810,7 @@ let Board = Board_1 = class Board extends ExtrudeSolid { this._BoardProcessOption.highDrill = Array(4).fill(type); this.ConverToRectSolid(width, length, thickness); this.Update(UpdateDraw.Geometry); + return this; } static CreateBoard(length, width, thickness, boardType = BoardType.Layer) { let board = new Board_1(); @@ -19860,8 +24893,9 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } set BoardProcessOption(obj) { Object.assign(this._BoardProcessOption, obj, { - [EBoardKeyList.HighSealed]: obj[EBoardKeyList.HighSealed].slice(), - highBoardEdgeRemark: obj.highBoardEdgeRemark.slice(), + [EBoardKeyList.HighSealed]: (obj[EBoardKeyList.HighSealed]).slice(), + highBoardEdgeRemark: (obj.highBoardEdgeRemark).slice(), + highReservedEdge: (obj.highReservedEdge).slice() }); } get NeedUpdateRelevanceGroove() { @@ -19878,30 +24912,36 @@ let Board = Board_1 = class Board extends ExtrudeSolid { GetRelevanceKnifes(knifs) { super.GetRelevanceKnifes(knifs); for (let e of this.RelativeHardware) { - if (e.IsErase) + if (e.IsErase) { + this.__CacheKnifVersion__[e.Index] = e?.Object?.__UpdateVersion__; continue; - let ent = e.Object; - if (ent instanceof HardwareCompositeEntity) { - if (ent.HardwareOption.isHole) { - let holes = ent.GetAllEntity(true, e => e instanceof ExtrudeHole || e instanceof ExtrudeSolid); + } + let hardware = e.Object; + if (hardware instanceof HardwareCompositeEntity) { + if (hardware.HardwareOption.isHole) { + let holes = hardware.GetAllEntity(true, e => e instanceof ExtrudeHole || e instanceof ExtrudeSolid); for (let i = 0; i < holes.length; i++) { let h = holes[i]; let g = h instanceof ExtrudeHole ? h.Convert2ExtrudeSolid() : h; - g.__TempIndexVersion__ = { Index: ent.Id.Index, Version: ent.__UpdateVersion__ }; + g.__TempIndexVersion__ = { Index: hardware.Id.Index, Version: hardware.__UpdateVersion__ }; knifs.push(g); } } + else { + this.__CacheKnifVersion__[e.Index] = e?.Object?.__UpdateVersion__; + } } } } ClearRelevance(en) { - for (let id of this.RelativeHardware) { + for (let id of [...this.RelativeHardware, ...this.RelativeHandle]) { let e = id.Object; if (e instanceof HardwareCompositeEntity) { arrayRemoveIf(e.RelevanceBoards, i => !i || i.Index === this.Id.Index); } } this.RelativeHardware.length = 0; + this.RelativeHandle.length = 0; super.ClearRelevance(en); } get SplitBoards() { @@ -19926,8 +24966,12 @@ let Board = Board_1 = class Board extends ExtrudeSolid { br._DrillList = new Map(this._DrillList.entries()); br._LayerNails = [...this._LayerNails]; br.ProcessingGroupList = [...this.ProcessingGroupList]; + br.AlignLineObject = this.AlignLineObject; br._BoardProcessOption = { ...this._BoardProcessOption }; br._CustomNumber = this._CustomNumber; //因为CustomNumber不会刷新绘制,所以拷贝这个 + br._DrillLock = this._DrillLock; //!2726 关联切割后的引用实体需要复制这个属性,否则反应器无法更新 + br._SideModelingMap = this.SideModelingMap; + br.RelevanceSideModelMap = this.RelevanceSideModelMap; //关联切割侧槽 let new2old_edgeMap; //修正排钻边的数据 if (highDrills) { @@ -19971,6 +25015,12 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } return brs; } + get ArcBoardModeling() { + if (!this.IsArcBoard || !this.IsDrawArcGroove) + return []; + const { _SweepPath: path, _SweepAngle: angle, SweepVisibleFace: dir, ArcBoardOptions } = this; + return ParseBoardArcFeed(this, path, angle, dir, ArcBoardOptions, false); + } get BoardModeling() { let models = []; for (let g of this.grooves) { @@ -20012,7 +25062,12 @@ let Board = Board_1 = class Board extends ExtrudeSolid { subG.Thickness = model.thickness; g.AppendGroove(subG); } - //不需要处理正反面的原因是因为Get时保留了曲线的高度,导致生成的槽位置已经在指定位置 + let gz = 0; //槽的z轴位置 (由于旋转轮廓或者镜像轮廓在Set时会被清除掉坐标系,我们还是需要正确的搞定z轴) + if (model.dir === FaceDirection.Front) + gz = this.thickness - g.Thickness; + let moveZ = gz - g.Position.z; + if (!equaln$1(moveZ, 0)) + g.Move({ x: 0, y: 0, z: moveZ }); g.ApplyMatrix(this.OCSNoClone); this.grooves.push(g); } @@ -20021,6 +25076,14 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } //二维刀路 get Modeling2D() { + for (const m of this._2DModelingList) { + for (const item of m.items) { + let d = safeEval(item.depthExpr, { BH: this.thickness }); + if (!isNaN(d) && d != item.depth) { + item.depth = d; + } + } + } return [...this._2DModelingList]; } set Modeling2D(ms) { @@ -20038,6 +25101,37 @@ let Board = Board_1 = class Board extends ExtrudeSolid { this._3DModelingList = ms; this.Update(UpdateDraw.Geometry); } + //侧面造型 + get SideModelingMap() { + return this._SideModelingMap; + } + set SideModelingMap(sideModelingMap) { + this.WriteAllObjectRecord(); + this.ClearSideModelingCache(); + this._SideModelingMap = sideModelingMap; + this.Update(UpdateDraw.Geometry); + } + //获取侧面关联槽和侧面造型 + get AllSideModelGrooveMap() { + let allSideModelGrooveMap = new Map(); + for (let [n, soilds] of this._SideModelingMap) + allSideModelGrooveMap.set(n, [...soilds]); + for (let [n, soilds] of this.RelevanceSideModelMap) { + let ss = allSideModelGrooveMap.get(n) ?? []; + for (let soild of soilds) + ss.push(soild); + allSideModelGrooveMap.set(n, ss); + } + return allSideModelGrooveMap; + } + ClearSideModeling() { + if (!this._SideModelingMap.size) + return; + this.WriteAllObjectRecord(); + this.ClearSideModelingCache(); + this._SideModelingMap.clear(); + this.Update(UpdateDraw.Geometry); + } ClearModeling2DList() { if (this._2DModelingList.length === 0) return; @@ -20161,6 +25255,10 @@ let Board = Board_1 = class Board extends ExtrudeSolid { if (isSuccess) { this.height = v; this.GrooveCheckAllAutoSplit(); + if (this._SweepPath && !this._FixContourByArcSweepPath_Ing) + this.FixArcSweepPathLength(); + if (this.HasSideModel) + this.SplitBoardSideModelUtil.SpiltSideModelOfBrContour(this); this.Update(); } } @@ -20180,10 +25278,25 @@ let Board = Board_1 = class Board extends ExtrudeSolid { if (isSuccess) { this.width = v; this.GrooveCheckAllAutoSplit(); + if (this._SweepPath && !this._FixContourByArcSweepPath_Ing) + this.FixArcSweepPathLength(); + if (this.HasSideModel) + this.SplitBoardSideModelUtil.SpiltSideModelOfBrContour(this); this.Update(); } } } + get Thickness() { return super.Thickness; } + set Thickness(thickness) { + if (!equaln$1(thickness, this.thickness, 1e-4)) //避免18.0009 无法改成 18 + { + if (this.HasSideModel) + this.SplitBoardSideModelUtil.SpiltSideModelOfBrThickness(this, thickness); + super.Thickness = thickness; + if (this._SweepPath && !this._FixContourByArcSweepPath_Ing) + this.FixContourByArcSweepPath(); + } + } get BoardType() { return this._BoardType; } @@ -20240,6 +25353,22 @@ let Board = Board_1 = class Board extends ExtrudeSolid { this.WriteAllObjectRecord(); this._Name = n; } + get SplitBoardSideModelUtil() { + if (!this._SplitBoardSideModelUtil) + this._SplitBoardSideModelUtil = new SplitBoardSideModelUtil(this); + return this._SplitBoardSideModelUtil; + } + GeneralRectContour() { + //取消异型时,强制使用矩形轮廓 导致原始轮廓数据丢失 + if (this.HasSideModel) { + this.UpdateSplitBoardSideModelUtil = false; + this.SplitBoardSideModelUtil.Init(this, true); + super.GeneralRectContour(); + this.UpdateSplitBoardSideModelUtil = true; + } + else + super.GeneralRectContour(); + } /** * 板件的轮廓,在板件坐标系中的表现方式. */ @@ -20261,7 +25390,16 @@ let Board = Board_1 = class Board extends ExtrudeSolid { ParseBoardRectHoleType(this, rectHoleOpt); //分析旧的上下左右排钻 let oldHightSealCurves = GetBoardSealingCurves(this); //旧的封边轮廓 let oldHightSealDatas = GetBoardHighSeal(this, oldHightSealCurves); //旧的封边数据 - let oldHighBoardEdgeRemarkDatas = GetHighBoardEdgeRemark(this, oldHightSealCurves); //旧的封边数据 + let oldHighBoardEdgeRemarkDatas = GetHighBoardEdgeRemark(this, oldHightSealCurves); //旧的板边备注数据 + let oldHighReservedEdgeDatas = GetBoardHighReservedEdge(this, oldHightSealCurves); //旧的预留边数据 + let splitSideModel = false; + if (this.UpdateSplitBoardSideModelUtil && this.HasSideModel) { + this.SplitBoardSideModelUtil.Init(this); //旧的侧面造型 + //记录侧面造型后清空 防止在分裂侧面造型时带入更新mesh + this.WriteAllObjectRecord(); + this._SideModelingMap.clear(); + splitSideModel = true; + } let oldContour = this.ContourCurve; //旧的轮廓 let defaultDrillType = this._BoardProcessOption.drillType; if (!IsValidDriName(defaultDrillType) && this._BoardProcessOption.highDrill) @@ -20292,10 +25430,12 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } this._BoardProcessOption.highSealed.length = 0; this._BoardProcessOption.highBoardEdgeRemark.length = 0; + this._BoardProcessOption.highReservedEdge.length = 0; //保持封边属性 if (this.isRect) { SetBoardTopDownLeftRightSealData(this, oldHightSealDatas, oldHightSealCurves, oldContour); SetBoardEdgeRemarkData(this, oldHighBoardEdgeRemarkDatas, oldHightSealCurves, oldContour); + SetBoardReservedEdgeData(this, oldHighReservedEdgeDatas, oldHightSealCurves, oldContour); } else //变成了异形 { @@ -20315,8 +25455,12 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } this._BoardProcessOption.highSealed.push(oldHightSealDatas[closesIndex]); this._BoardProcessOption.highBoardEdgeRemark.push(oldHighBoardEdgeRemarkDatas[closesIndex]); + this._BoardProcessOption.highReservedEdge.push(oldHighReservedEdgeDatas[closesIndex]); } } + //分裂侧面造型 + if (splitSideModel || this.HasSideModel) + this.SplitBoardSideModelUtil.SetBoardSideModel(this); } Explode() { return Board2Regions(this); @@ -20459,8 +25603,8 @@ let Board = Board_1 = class Board extends ExtrudeSolid { this._DrillList = drillBak; this._LayerNails = layerNailsBak; } - Clone() { - let br = super.Clone(); + Clone(cloneDraw = true) { + let br = super.Clone(cloneDraw); br._DrillAssociationLock.clear(); br._DrillList.clear(); br._LayerNails.length = 0; @@ -20481,30 +25625,74 @@ let Board = Board_1 = class Board extends ExtrudeSolid { let l; let len; let width; + let brWidth = this.width; + let brHeight = this.height; switch (this.BoardProcessOption.lines) { case LinesType.Positive: - len = this.height / 3; - width = Math.min(this.width, this.height) / 8; + len = brHeight / 3; + width = Math.min(brWidth, brHeight) / 8; break; case LinesType.Reverse: - len = this.width / 2; - width = Math.min(this.width, this.height) / 8; + len = brWidth / 2; + width = Math.min(brWidth, brHeight) / 8; break; case LinesType.CanReversal: - len = this.height / 3; - width = this.width / 2; + len = brHeight / 3; + width = brWidth / 2; } l = new LineSegments(BufferGeometryUtils.CreateFromPts(PointShapeUtils.LinesDirPts(len, width, this.BoardProcessOption.lines)), ColorMaterial.GetLineMaterial(8)); let l1 = l.clone(); l1.material = ColorMaterial.GetLineMaterial(7); - l.position.set(this.width / 2, this.height / 2, 0); - l1.position.set(this.width / 2, this.height / 2, this.thickness); + l.position.set(brWidth / 2, brHeight / 2, 0); + l1.position.set(brWidth / 2, brHeight / 2, this.thickness); + if (this._SweepPath) { + let pts = [l.position, l1.position]; + let x, y; + if (this._SweepAngle !== 0) { + l.position.z -= 1; + l1.position.z += 1; + x = l.position.clone().add(XAxis); + y = l.position.clone().add(YAxis); + pts.push(x, y); + for (let p of pts) + p.applyMatrix4(this.ArcBuild.OCS2RotateMtx); + } + else { + x = l.position.clone().add(XAxis); + y = l.position.clone().add(YAxis); + pts.push(x, y); + } + let xs = pts.map(p => p.x); + arraySortByNumber$1(xs); + arrayRemoveDuplicateBySort(xs, equaln$1); + this.ArcBuild.ParseAllX_Map(xs); + for (let p of pts) + this.ArcBuild.PosMap2ArcPos(p); + if (this._SweepAngle !== 0) + for (let p of pts) + p.applyMatrix4(this.ArcBuild.Rotate2OCSMtx); + x.sub(l.position).normalize(); + y.sub(l.position).normalize(); + let z = new Vector3().crossVectors(x, y); + let mtx = new Matrix4().makeBasis(x, y, z); + l.rotation.setFromRotationMatrix(mtx); + l1.rotation.setFromRotationMatrix(mtx); + } l.updateMatrix(); l1.updateMatrix(); return [l, l1]; } - GetLinesOpenDir() { - const l = new Line$1(BufferGeometryUtils.CreateFromPts(PointShapeUtils.LinesOpenDirPts(this.height, this.width, this.OpenDir)), ColorMaterial.GetWallLineMtl(9)); + GetLinesOpenDir(renderType) { + const openDirReverse = { + 1: BoardOpenDir.Right, + 2: BoardOpenDir.Left, + 3: BoardOpenDir.Down, + 4: BoardOpenDir.Up, + 5: BoardOpenDir.NoOpen, + }; + const openDir = HostApplicationServices.doorLinesOption.reverseOpenDirLines ? openDirReverse[this.OpenDir] : this.OpenDir; + const mtl = (renderType === RenderType.Physical || renderType === RenderType.Physical2) ? ColorMaterial.GetPhysical2EdgeMaterial() : ColorMaterial.GetWallLineMtl(9); + const l = new Line$1(BufferGeometryUtils.CreateFromPts(PointShapeUtils.LinesOpenDirPts(this.height, this.width, openDir)), mtl); l.computeLineDistances(); let l1 = l.clone(); l.position.set(this.width / 2, this.height / 2, 0); @@ -20579,19 +25767,37 @@ let Board = Board_1 = class Board extends ExtrudeSolid { this._2DPathCsgs = []; return this._2DPathCsgs; } - //#endregion + ; + GetSideModeingCsgs() { + if (this._SideModeingCsgs) + return this._SideModeingCsgs; + this._SideModeingCsgs = []; + if (!this._SideModelingMap.size && !this.RelevanceSideModelMap.size) + return this._SideModeingCsgs; + this._SideModeingCsgs = BoardSideModelCSGBuilder(this); + return this._SideModeingCsgs; + } + //清除侧面造型Csgs的缓存 + ClearSideModelingCache() { + this._SideModeingCsgs = undefined; + } + //#endregion 侧面造型 + get HasSideModel() { return this._SideModelingMap.size > 0; } + get AsyncSideModeling() { return this._asyncSideModelIng; } get Has2DPath() { return this._2DModelingList.length > 0; } get Async2DPathing() { return this._async2DPathIng; } GoodBye() { super.GoodBye(); TerminateCSGTask({ key: this }); } - async Load2DPathIng() { - return new Promise((res) => { - this.promise2DPath = res; - }); + async Load2DPathPromise() { + if (!this._2DPathBuildPromise) + this._2DPathBuildPromise = new Promise((res) => { + this._Promise2DPathRes = res; + }); + return this._2DPathBuildPromise; } - //分裂后重新将排钻实体设置给不同的实体 + //分裂后重新将排钻实体 关联五金 设置给不同的实体 HandleSpliteEntitys(splitEntitys) { if (!splitEntitys.length) return; @@ -20692,25 +25898,197 @@ let Board = Board_1 = class Board extends ExtrudeSolid { object.Erase(); } } + //重新关联复合实体 + arrayRemoveIf(this.RelativeHardware, (hwdObjId) => { + if (!hwdObjId || hwdObjId.IsErase) + return true; + for (let ent of splitEntitys) { + let hwd = hwdObjId.Object; + if (ent.BoundingBox.intersectsBox(hwd.BoundingBox)) { + //原始板件删除这个五金 + arrayRemoveIf(hwd.RelevanceBoards, (rbr) => rbr?.Object === this); + //五金与分裂的板关联 + hwd.RelevanceBoards.push(ent.objectId); + ent.RelativeHardware.push(hwdObjId); + //如果五金是把手 写入分裂的板的RelativeHandle + if (this.RelativeHandle.includes(hwdObjId)) { + arrayRemoveIf(this.RelativeHandle, (handle) => handle === hwdObjId); + ent.RelativeHandle.push(hwdObjId); + } + return true; + } + } + }); } + BuildArcGeometry() { + //针对圆弧板 + let build = new ArcBoardBuild(this); + [this._MeshGeometry, this._EdgeGeometry] = build.BuildMeshEdgeGeom(); + // 圆弧板的二维刀路与侧面造型 + if (build.CSGBoard.Async2DPathing || build.CSGBoard.AsyncSideModeling) { + build.CSGBoard.Load2DPathPromise().then(() => { + /** @todo 圆弧板暂时先不显示二维刀路的线框吧 */ + this._2DPathDrawObject = undefined; + // 完毕后,不再显示二维刀路/侧面造型建模中的文字 + this._async2DPathIng = false; + this._asyncSideModelIng = false; + this.UpdateDrawGeometry(); //销毁旧的 + [this._MeshGeometry, this._EdgeGeometry] = build.BuildMeshEdgeGeom(); + // 更新 + for (let [type, obj] of this.CacheDrawObject) { + this.UpdateDrawObject(type, obj); + obj.updateMatrixWorld(true); + obj.traverse(UpdateBoundingSphere); + } + }); + } + this._SweepArcBoardBuild = build; //记录 + } + UpdateDrawObject(renderType, obj) { + // 圆弧板和复合实体内的圆弧板,Jig时,实时显示见光面路径 + if (this._SweepPath && (renderType === RenderType.Jig)) { + DisposeThreeObj(obj); + Object3DRemoveAll(obj); + if (this._jigSweepPath) { + const path2BoardMtx = new Matrix4(); + const invMtx = new Matrix4().getInverse(this._Matrix); + path2BoardMtx.multiplyMatrices(invMtx, this._jigPath2WCSMtx); + const pts = this._jigSweepPath.Shape.getPoints().map(AsVector3); + const geo = new BufferGeometry().setFromPoints(pts); + const line = new Line$1(geo, ColorMaterial.GetLineMaterial(this.ColorIndex)); + line.matrix = path2BoardMtx; + obj.add(line); + this._jigSweepPath = undefined; + this._jigPath2WCSMtx = undefined; + return; + } + } + let o = super.UpdateDrawObject(renderType, obj); + if (renderType === RenderType.Edge) { + obj.add(new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(8))); + this.CheckSealing(obj); + } + else if (renderType === RenderType.PlaceFace) { + let isArbitrary = this._BoardProcessOption[EBoardKeyList.ComposingFace] === ComposingType.Arbitrary; + obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(8)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))); + if (!isArbitrary) //如果不是任意面 + obj.add(this.GetPlaceFace()); + } + else if (renderType === RenderType.BigHoleFace) { + obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(8)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))); + obj.add(this.GetBigHoleFace()); + } + else if (renderType === RenderType.CustomNumber || renderType === RenderType.CustomNumberPrint) { + if (renderType === RenderType.CustomNumberPrint) + obj.add(...this.GetPrintObject3D()); + else + obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex, FrontSide, true))); + //#region 添加文字 + if (!this._CustomNumberTextEntity) { + this._CustomNumberTextEntity = new Text(); + this._CustomNumberTextEntity.TextAligen = TextAligen.Mid; + this._CustomNumberTextEntity.IsDoubleMesh = true; + this._CustomNumberTextEntity.IsFsText = this._BoardType === BoardType.Layer; + this._CustomNumberTextEntity.IsEmbedEntity = true; + } + if (this._BoardType === BoardType.Layer) + this._CustomNumberTextEntity.OCSNoClone.makeRotationZ(-Math.PI / 2).setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5); + else + this._CustomNumberTextEntity.OCSNoClone.identity().setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5); + this._CustomNumberTextEntity.TextString = this._CustomNumber?.toString() ?? (this.objectId?.Index > 0 ? "未编号" : " "); + if (this._CustomNumberTextEntity.TextString === "未编号") + this._CustomNumberTextEntity.Height = 60; + else + this._CustomNumberTextEntity.Height = HostApplicationServices.boardCustomNumberTextHeight; + let o = this._CustomNumberTextEntity.GetDrawObjectFromRenderType(RenderType.Conceptual); + if (o) { + o.traverse(obj => obj.userData = {}); + AddEntityDrawObject(obj, this._CustomNumberTextEntity, RenderType.Conceptual); + } + //#endregion + } + this.UpdateDrawObjectByBoardInfo(renderType, obj); + this.DrawAsyncText(obj); + return o; + } + DrawAsyncText(obj) { + if (this._async2DPathIng || this._asyncSideModelIng) { + //#region 添加文字 + if (!this._AsyncIngTextEntity) { + this._AsyncIngTextEntity = new Text(); + this._AsyncIngTextEntity.TextAligen = TextAligen.Mid; + this._AsyncIngTextEntity.IsDoubleMesh = true; + this._AsyncIngTextEntity.IsFsText = this._BoardType === BoardType.Layer; + this._AsyncIngTextEntity.IsEmbedEntity = true; + } + if (this._BoardType === BoardType.Layer) + this._AsyncIngTextEntity.OCSNoClone.makeRotationZ(-Math.PI / 2).setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5); + else + this._AsyncIngTextEntity.OCSNoClone.identity().setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5); + if (this._async2DPathIng) + this._AsyncIngTextEntity.TextString = "二维刀路建模中!"; + else if (this._asyncSideModelIng) + this._AsyncIngTextEntity.TextString = "侧面造型建模中!"; + let o = this._AsyncIngTextEntity.GetDrawObjectFromRenderType(RenderType.Conceptual); + if (o) { + o.traverse(obj => obj.userData = {}); + AddEntityDrawObject(obj, this._AsyncIngTextEntity, RenderType.Conceptual); + } + //#endregion + } + } + //del_exp2_end //绘制排版面时使用的颜色 - get PlaceColor() { return this._Color === 8 ? 9 : this._Color; } + get PlaceColor() { return this._Color === 8 ? 9 : this.DrawColorIndex; } //排版面网格 GetPlaceFace() { - let shapeGeom = new ShapeGeometry(this.contourCurve.Shape); + let shapeGeom = new ShapeBufferGeometry(this.contourCurve.Shape); let isBack = this._BoardProcessOption[EBoardKeyList.ComposingFace] !== ComposingType.Positive; + if (isBack) { + const indices = Array.from(shapeGeom.getIndex().array); + // 翻转面片索引的顺序 + const flippedIndices = []; + for (let i = 0; i < indices.length; i += 3) + flippedIndices.push(indices[i], indices[i + 2], indices[i + 1]); + // 创建新的面片索引属性 + const newIndices = new BufferAttribute(new Uint16Array(flippedIndices), 1); + // 更新面片索引属性 + shapeGeom.setIndex(newIndices); + } shapeGeom.applyMatrix4(this.contourCurve.OCSNoClone); shapeGeom.translate(0, 0, isBack ? -1e-3 : this.thickness + 1e-3); - let mesh = new Mesh(shapeGeom, ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor)); + let mesh = new Mesh(shapeGeom, ColorMaterial.GetBasicMaterial(this.PlaceColor)); return mesh; } + /** 获取大孔面的几何体 */ + get BigHoleFaceGeo() { + let shapeGeom = new ShapeBufferGeometry(this.contourCurve.Shape); + let isBack = this._BoardProcessOption[EBoardKeyList.BigHole] === FaceDirection.Back; + if (isBack) { + const indices = Array.from(shapeGeom.getIndex().array); + // 翻转面片索引的顺序 + const flippedIndices = []; + for (let i = 0; i < indices.length; i += 3) + flippedIndices.push(indices[i], indices[i + 2], indices[i + 1]); + // 创建新的面片索引属性 + const newIndices = new BufferAttribute(new Uint16Array(flippedIndices), 1); + // 更新面片索引属性 + shapeGeom.setIndex(newIndices); + } + shapeGeom.applyMatrix4(this.contourCurve.OCSNoClone); + shapeGeom.translate(0, 0, isBack ? -1e-3 : this.thickness + 1e-3); + return shapeGeom; + } //大孔面网格 GetBigHoleFace() { - let shapeGeom = new ShapeGeometry(this.contourCurve.Shape); - let isBack = this._BoardProcessOption[EBoardKeyList.BigHole] === FaceDirection.Back; - shapeGeom.applyMatrix4(this.contourCurve.OCSNoClone); - shapeGeom.translate(0, 0, isBack ? -1e-3 : this.thickness + 1e-3); - let mesh = new Mesh(shapeGeom, ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor)); + if (this._SweepPath) //针对圆弧板 + { + const geometry = this._SweepArcBoardBuild.BuildBigHoleFace(); + let mesh = new Mesh(geometry, ColorMaterial.GetBasicMaterial(this.PlaceColor)); + return mesh; + } + let shapeGeom = this.BigHoleFaceGeo; + let mesh = new Mesh(shapeGeom, ColorMaterial.GetBasicMaterial(this.PlaceColor)); return mesh; } /** @@ -20724,7 +26102,7 @@ let Board = Board_1 = class Board extends ExtrudeSolid { return; if (!this.IsChaiDan) //非拆单板绘制更新 { - if (renderType === RenderType.Conceptual || renderType === RenderType.Physical2) { + if (renderType === RenderType.Conceptual || renderType === RenderType.ConceptualTransparent || renderType === RenderType.Physical2) { obj.children.length = 1; obj.children[0].material = ColorMaterial.GrayTransparentMeshMaterial; //灰色半透明 } @@ -20732,13 +26110,20 @@ let Board = Board_1 = class Board extends ExtrudeSolid { obj.material = ColorMaterial.GrayTransparentMeshMaterial; //灰色半透明(会不会有bug?) } //线框及概念且可拆单 - if (([RenderType.Wireframe, RenderType.Conceptual, RenderType.Print].includes(renderType)) && this.IsChaiDan) { + if (([RenderType.Wireframe, RenderType.Conceptual, RenderType.ConceptualTransparent, RenderType.Print].includes(renderType)) && this.IsChaiDan) { //绘制纹路 if (HostApplicationServices.showLines && renderType !== RenderType.Print) obj.add(...this.GetLinesDir()); //绘制开门方向纹路 - if (HostApplicationServices.showOpenDirLines && this.OpenDir !== BoardOpenDir.None) - obj.add(...this.GetLinesOpenDir()); + if (HostApplicationServices.showOpenDirLines && this.OpenDir !== BoardOpenDir.None && this.OpenDir !== BoardOpenDir.NoOpen) + obj.add(...this.GetLinesOpenDir(renderType)); + } + const doorLinesOption = HostApplicationServices.doorLinesOption; + if (doorLinesOption.physicalShowLines && renderType === RenderType.Physical + || doorLinesOption.physicalShowLines2 && renderType === RenderType.Physical2) { + //绘制开门方向纹路 + if (HostApplicationServices.showOpenDirLines && this.OpenDir !== BoardOpenDir.None && this.OpenDir !== BoardOpenDir.NoOpen) + obj.add(...this.GetLinesOpenDir(renderType)); } if (this.objectId) //二维和三维刀路 { @@ -20757,6 +26142,7 @@ let Board = Board_1 = class Board extends ExtrudeSolid { else obj.add(path2d); } + this.GetSideModeingCsgs(); } } UpdateDrawObjectMaterial(renderType, obj) { @@ -20765,10 +26151,10 @@ let Board = Board_1 = class Board extends ExtrudeSolid { let face = obj.children[2]; if (!face) return; - face.material = ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor); + face.material = ColorMaterial.GetBasicMaterial(this.PlaceColor); } if (!this.IsChaiDan) { - if (renderType === RenderType.Conceptual || renderType === RenderType.Physical2) { + if (renderType === RenderType.Conceptual || renderType === RenderType.ConceptualTransparent || renderType === RenderType.Physical2) { obj.children[0].material = ColorMaterial.GrayTransparentMeshMaterial; } else if (renderType !== RenderType.Wireframe) { @@ -20783,25 +26169,115 @@ let Board = Board_1 = class Board extends ExtrudeSolid { return; let cus = GetBoardSealingCurves(this); let highSeals = GetBoardHighSeal(this, cus); - for (let i = 0; i < cus.length; i++) { + const thickness = this.Thickness; + const sealWidth = thickness * (HostApplicationServices.sealWidthPercentage ?? 1) / 100; + const sealSolids = cus.map((c) => { + const sealSolid = new SealSolid(c, sealWidth); + sealSolid.Move({ x: 0, y: 0, z: (thickness - sealWidth) / 2 }); + return sealSolid; + }); + for (let i = 0; i < sealSolids.length; i++) { let size = highSeals[i].size.toString(); let color = sealingInfo.get(size); if (color) { - cus[i].Position = cus[i].Position.add(new Vector3(0, 0, this.thickness / 2)); - cus[i].ColorIndex = parseInt(color) ?? 7; - let l = cus[i].GetDrawObjectFromRenderType(RenderType.Wireframe); + sealSolids[i].ColorIndex = parseInt(color) ?? 7; + let l = sealSolids[i].GetDrawObjectFromRenderType(RenderType.Conceptual); obj.add(l); } } } + AddSideModelGripPoints(pts, dragPointType) { + let con = GetBoardContour(this); + if (!con) + return; + let inverseZ = con.Area2 < 0; + let cus = con.Explode(); + for (let [index, soilds] of this.SideModelingMap) { + let cu = cus[index]; + if (!cu) + continue; + let mt4 = GetSideCuFaceMtx(cus[index], inverseZ); + for (let soild of soilds) { + const MirrorMtxZ = MakeMirrorMtx(ZAxis); + let s = soild.Clone(); + s.ApplyMatrix(MirrorMtxZ); + s.ApplyMatrix(mt4); + s.ApplyMatrix(this.OCSNoClone); + pts.push(...s.GetGripOrStretchPoints(dragPointType)); + } + } + } + GetStrectchPointCountList(dragType) { + let counts = super.GetStrectchPointCountList(dragType); + if (this.HasSideModel) { + for (let [num, soilds] of this.SideModelingMap) { + for (let soild of soilds) { + let c = soild.ContourCurve.GetDragPointCount(dragType) * 2; + for (let g of soild.Grooves) + c += g.ContourCurve.GetDragPointCount(dragType) * 2; + counts.push(c); + } + } + } + return counts; + } + //因为圆弧板 我们重载了它 + GetGripPoints() { + let pts = super.GetGripPoints(); + pts = this.MapToArcPoints(pts, DragPointType.Grip); + return pts; + } + MapToArcPoints(pts, dragPointType) { + if (this._SweepPath) { + if (!this._SweepArcBoardBuild) + this._SweepArcBoardBuild = new ArcBoardBuild(this); + let inv = this.OCSInv; + let mtx = this.OCSNoClone; + if (this._SweepArcBoardBuild._OCS2RotateMtx) { + inv.multiplyMatrices(this._SweepArcBoardBuild._OCS2RotateMtx, inv); + mtx = new Matrix4().multiplyMatrices(mtx, this._SweepArcBoardBuild._Rotate2OCSMtx); + } + for (let p of pts) + p.applyMatrix4(inv); + let xs = pts.map(p => p.x); + arraySortByNumber$1(xs); + arrayRemoveDuplicateBySort(xs); + this._SweepArcBoardBuild.ParseAllX_Map(xs); + for (let p of pts) { + this._SweepArcBoardBuild.PosMap2ArcPos(p); + p.applyMatrix4(mtx); + } + } + else if (this.HasSideModel) + this.AddSideModelGripPoints(pts, dragPointType); + return pts; + } + MoveGripPoints(indexList, vec) { + if (indexList.length === 0) + return; + this.ClearSideModelingCache(); + if (this._SweepPath) { + this.MoveArcBoardPoints(indexList, vec, DragPointType.Grip); + this.Update(); + } + else + super.MoveGripPoints(indexList, vec); + } GetStretchPoints() { let pts = this.GetGripOrStretchPoints(DragPointType.Stretch); + pts = this.MapToArcPoints(pts, DragPointType.Stretch); for (let m of this._2DModelingList) { - pts.push(...m.path.GetStretchPoints().map(p => p.add(new Vector3(0, 0, m.dir === FaceDirection.Front ? this.thickness : 0)).applyMatrix4(this.OCS))); + pts.push(...m.path.GetStretchPoints().map(p => p.add(new Vector3(0, 0, m.dir === FaceDirection.Front ? this.thickness : 0)).applyMatrix4(this.OCSNoClone))); } return pts; } MoveStretchPoints(indexList, vec) { + if (indexList.length === 0) { + let undoData = this.UndoRecord(); + if (undoData) + undoData.WriteObjectHistoryPath(this, new HistorycRecord); + return; + } let exCount = arraySum(this.GetStrectchPointCountList(DragPointType.Stretch)); let originIndexList = []; let mIndexList = []; @@ -20812,7 +26288,10 @@ let Board = Board_1 = class Board extends ExtrudeSolid { mIndexList.push(i - exCount); } let oldOcs = this.OCS; - super.MoveStretchPoints(originIndexList, vec); + if (this._SweepPath) + this.MoveArcBoardPoints(originIndexList, vec, DragPointType.Stretch); + else + super.MoveStretchPoints(originIndexList, vec); if (!this.Id) return; arraySortByNumber$1(mIndexList); @@ -20838,9 +26317,37 @@ let Board = Board_1 = class Board extends ExtrudeSolid { } this.Clear2DPathCache(); this.Clear3DPathCache(); + this.ClearSideModelingCache(); this.Update(UpdateDraw.Geometry); } GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum) { + if (this._SweepPath) { + if (snapMode === ObjectSnapMode.Nea) { + let pts = []; + //这里实现对线框的快速捕捉 + let edgeGeom = this.EdgeGeometry; + let pos = edgeGeom.getAttribute("position"); + let p1 = new Vector3; + let p2 = new Vector3; + let line = new Line(p1, p2); + line.ApplyMatrix(this.OCSNoClone); + let sel = frustum["_select_"]; + for (let y = 0; y < pos.count; y += 2) { + p1.fromArray(pos.array, y * 3); + p2.fromArray(pos.array, (y + 1) * 3); + p1.applyMatrix4(this._Matrix); + p2.applyMatrix4(this._Matrix); + sel.WorldToScreenPoint(p1); + sel.WorldToScreenPoint(p2); + if (sel.IntersectLine(p1, p2)) { + p1.fromArray(pos.array, y * 3); + p2.fromArray(pos.array, (y + 1) * 3); + arrayPushArray$1(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)); + } + } + return pts; + } + } let pts = super.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum); if (snapMode === ObjectSnapMode.End) { for (let vm of this._2DModelingList) { @@ -20874,8 +26381,226 @@ let Board = Board_1 = class Board extends ExtrudeSolid { pts.push(...ps); } } + //为圆弧板映射新的点表 + if (this._SweepPath) { + let inv = this.OCSInv; + let mtx = this._Matrix; + if (this._SweepAngle !== 0) { + inv.multiplyMatrices(this.ArcBuild.OCS2RotateMtx, inv); + mtx = new Matrix4().multiplyMatrices(mtx, this.ArcBuild.Rotate2OCSMtx); + } + for (let p of pts) + p.applyMatrix4(inv); + let xs = pts.map(p => p.x); + arraySortByNumber$1(xs); + arrayRemoveDuplicateBySort(xs, equaln$1); + this.ArcBuild.ParseAllX_Map(xs); + for (let p of pts) { + this.ArcBuild.PosMap2ArcPos(p); + p.applyMatrix4(mtx); + } + } return pts; } + MoveArcBoardPoints(indexList, vec, dragType) { + this.WriteAllObjectRecord(); + const isGrip = dragType === DragPointType.Grip; + const oldPts = isGrip ? this.GetGripPoints() : this.GetStretchPoints(); + const MoveBack = () => isGrip ? super.MoveGripPoints(indexList, offsetVec.clone().negate()) : super.MoveStretchPoints(indexList, offsetVec.clone().negate()); + let path = this.ArcBuild.SweepPath1.Clone(); + // 1、计算沿着SweepPath偏移的向量 + const offsetVec = this.GetOffsetVecAlongPath(oldPts[indexList[0]].clone(), vec, path); + const oldPos = this.Position; + const oldCon = this.ContourCurve.Clone(); + const ocs2rot = this.ArcBuild.OCS2RotateMtx; + oldCon.ApplyMatrix(ocs2rot); + const oldBox = oldCon.BoundingBox; + // 2、移动平板上的点 + isGrip ? super.MoveGripPoints(indexList, offsetVec) : super.MoveStretchPoints(indexList, offsetVec); + const newPos = this.Position; + const conMoveVec = TransformVector(newPos.clone().sub(oldPos), this.OCSInv); //轮廓在OCS中移动的向量 + const newCon = this.ContourCurve.Clone(); + newCon.Move(conMoveVec); + newCon.ApplyMatrix(ocs2rot); + const newBox = newCon.BoundingBox; + this._jigSweepPath = path.Clone(); + // 特殊场景:闭合SweepPath,其对应的首尾不能发生变化,否者会发生path和Contour映射错误。 + if (path.CloseMark && !(equaln$1(newBox.min.x, oldBox.min.x) && equaln$1(newBox.max.x, oldBox.max.x))) { + MoveBack(); // 若头尾被拖拽过,需要恢复回去 + return; + } + // 特殊场景:某些操作,对弧形板进行移动(如当拖拽中间点),未发生路径改变,则重新移动回去 + const newSize = newBox.getSize(new Vector3); + const oldSize = oldBox.getSize(new Vector3); + if (equaln$1(newSize.x, oldSize.x, 1e-3)) { + const newPts = isGrip ? this.GetGripPoints() : this.GetStretchPoints(); + if (oldPts.length === newPts.length) { + const vec = oldPts[0].clone().sub(newPts[0]); + const isMoveArcBoard = oldPts.every((pt, i) => equalv3(pt.clone().sub(newPts[i]), vec)); + if (isMoveArcBoard) { + MoveBack(); + return; + } + } + } + // 3、修正SweepPath + path = this.FixSweepPathByContourBondingbox(newBox, oldBox, path); + // 特殊场景:path 计算发生错误,需要恢复板的状态 + if (!path) { + MoveBack(); + return; + } + // 4、计算弧形板偏移矩阵 + if (this.objectId || (this.IsEmbedEntity)) { + const pts1 = isGrip ? newCon.GetGripPoints() : newCon.GetStretchPoints(); + const pts2 = isGrip ? oldCon.GetGripPoints() : oldCon.GetStretchPoints(); + const count = Math.min(pts1.length, pts2.length); + this._SweepArcBoardBuild = undefined; + for (let i = 0; i < count; i++) { + if (equalv2(pts1[i], pts2[i], 1e-3)) // 找到新板和旧板上不变的点,计算出偏移矩阵 + { + const pts = isGrip ? this.GetGripPoints() : this.GetStretchPoints(); + this.Move(oldPts[i].sub(pts[i])); + break; + } + } + this._SweepArcBoardBuild = undefined; + } + } + GetOffsetVecAlongPath(oldP, vec, path) { + const p = oldP.clone().add(vec); //拉伸后的点 在世界坐标系中 + const path2WCSMtx = new Matrix4().makeBasis(XAxis, ZAxis, YAxisN); + if (this._SweepAngle !== 0) + path2WCSMtx.premultiply(this.ArcBuild.Rotate2OCSMtx); + path2WCSMtx.premultiply(this.OCSNoClone); + const wcs2PathMtx = new Matrix4().getInverse(path2WCSMtx); + this._jigPath2WCSMtx = path2WCSMtx.clone(); + //变换到路径坐标系 + p.applyMatrix4(wcs2PathMtx); + oldP.applyMatrix4(wcs2PathMtx); + // 限制p, 在见光面的曲面中,计算偏移向量 + const cp = path.GetClosestPointTo(p, true); + const oldZ = oldP.z; + const newZ = p.z; + const oldPCp = path.GetClosestPointTo(oldP.setZ(0), false); //旧的最近点 + const oldDist = path.GetDistAtPoint2(oldPCp); // 移动前的Dist + const movedDist = path.GetDistAtPoint2(cp); // 移动后的Dist + const moveVec = new Vector3(movedDist - oldDist, -newZ + oldZ, 0); + //将moveVec转换到世界坐标系 + if (this._SweepAngle !== 0) + TransformVector(moveVec, this.ArcBuild.Rotate2OCSMtx); + TransformVector(moveVec, this.OCSNoClone); + return moveVec; + } + /** + * @private 通过新旧轮廓的Bondingbox修正路径 + * @param {Box3Ext} newBox 路径坐标系下,新轮廓的Bondingbox + * @param {Box3Ext} oldBox 路径坐标系下,旧轮廓的Bondingbox + * @param {Polyline} path 见光面路径 + * @return {*} {Polyline} 修正好的路径 + */ + FixSweepPathByContourBondingbox(newBox, oldBox, path) { + // 若头部和尾部重合,则直接不处理 + if (equaln$1(newBox.min.x, newBox.max.x, 0.1)) + return; + const GetArcAndKeys = () => { + const curves = path.Explode(); + const arcs = []; + for (let i = 0; i < curves.length; i++) + if (curves[i] instanceof Arc) + arcs.push({ key: i, arc: curves[i].Clone() }); + return arcs; + }; + const arcKeys = GetArcAndKeys(); + const MovePath = (pathToMove, mVec) => { + // 修正SWeepPath + pathToMove.Move(mVec); + const { pts: pathPts, buls } = pathToMove.MatrixAlignTo2(new Matrix4); + pathToMove.OCSNoClone.identity(); + for (let i = 0; i < pathToMove.LineData.length; i++) { + pathToMove.LineData[i].pt.copy(pathPts[i]); + pathToMove.LineData[i].bul = buls[i]; + } + }; + let jigSpt = undefined; + const FixHead = () => { + if (!equaln$1(newBox.min.x, 0, 1e-3)) // 头部 + { + const c1 = path.GetCurveAtIndex(0); + if (newBox.min.x < 0) + path.Extend(newBox.min.x / c1.Length); // 延伸 + else + path = path.GetSplitCurves(path.GetParamAtDist(newBox.min.x))[1]; // 裁剪 + jigSpt = path.StartPoint.clone(); + MovePath(path, path.StartPoint.clone().negate()); // 修正Path + } + }; + const FixTail = () => { + if (!equaln$1(newBox.max.x, oldBox.max.x, 1e-3)) // 尾部 + { + const dist = newBox.max.x - oldBox.max.x; + const ce = path.GetCurveAtIndex(path.EndParam - 1); + if (dist > 0) + path.Extend(path.EndParam + ((dist) / ce.Length)); // 延伸 + else + path = path.GetSplitCurves(path.GetParamAtDist(newBox.max.x - newBox.min.x))[0]; // 裁剪, PS: 从尾部点拉伸到头部点之前,newBox.min.x不为零 + } + }; + /** + * 某些异形板左侧头部拉伸到尾部后面示意图: + * ___________ + * A | | + * |_______ | + * | | + * old B |___| + * _____ + * | | A + * ___|_____| + * | | + * new B |___| + */ + const outofTail = newBox.min.x >= oldBox.max.x + || equaln$1(newBox.min.x, oldBox.max.x, 1e-3) // 矩形板:拉伸后,新板头和旧板尾部相同 + || newBox.min.x > oldBox.min.x && newBox.max.x > oldBox.max.x; // 某些异形板:新板头会在旧板中间某处,新板尾超过旧版尾 + if (outofTail) { + // 头部拉伸在超过尾部,即新头部大于等于原尾部。则先对尾部延伸,再裁剪头部(若先裁剪头部,则path可能会为空) + FixTail(); + FixHead(); + } + else { + FixHead(); + FixTail(); + } + // 计算 this._SweepPath + let sweepPath = undefined; + if (this._SweepVisibleFace === FaceDirection.Back) { + sweepPath = path; + // 做offset偏移,查看path是否会被裁剪。若被裁剪,会破坏板和路径的映射关系,则不能继续其他操作 + if (this.objectId || (this.IsEmbedEntity && this.ParentEntity.objectId)) { + const frontPath = ArcBoardBuild.OffsetPolyline(sweepPath, -this.thickness); // 正面path + const backPath = ArcBoardBuild.OffsetPolyline(frontPath, this.thickness); // 背面path + if (!equaln$1(backPath.Length, sweepPath.Length, 1e-3)) + return; + } + } + else { + sweepPath = ArcBoardBuild.OffsetPolyline(path, this.thickness); + // 做offset偏移,查看path是否会被裁剪。若被裁剪,会破坏板和路径的映射关系,则不能继续其他操作 + if (this.objectId || (this.IsEmbedEntity && this.ParentEntity.objectId)) { + const frontPath = ArcBoardBuild.OffsetPolyline(sweepPath, -this.thickness); // 正面path + if (!equaln$1(frontPath.Length, path.Length, 1e-3)) + return; + } + } + this._SweepPath = sweepPath; + this._jigSweepPath = path.Clone(); + if (jigSpt) + MovePath(this._jigSweepPath, jigSpt); // 新路径,但是未进行起始点偏移。方便拖拽时,实时显示当前路径 + // 更新圆弧配置 + if (this.objectId || (this.IsEmbedEntity && this.ParentEntity.objectId)) + this.UpdateArcBoardOptionsByPath(arcKeys, this._jigSweepPath); + return path; + } DeferUpdate() { if (this.NeedUpdateFlag & UpdateDraw.Matrix) { if (this.RelativeHardware.some(id => !id.IsErase)) @@ -20914,6 +26639,8 @@ let Board = Board_1 = class Board extends ExtrudeSolid { let fileId = file.ReadObjectId(); fileId && drIDs.push(fileId); } + if (ver > 21) + drIDs.Name = file.Read(); if (drIDs.length > 0) drIdList.push(drIDs); } @@ -20951,7 +26678,7 @@ let Board = Board_1 = class Board extends ExtrudeSolid { if (ver >= 9) this._IsChaiDan = file.Read(); if (ver >= 10) { - DeserializationBoard2DModeingData(file, this._2DModelingList); + DeserializationBoard2DModeingData(file, this._2DModelingList, ver); DeserializationBoard3DModeingData(file, this._3DModelingList); } this.Clear2DPathCache(); @@ -20987,6 +26714,7 @@ let Board = Board_1 = class Board extends ExtrudeSolid { processData.edgeRemarkLeft = file.Read(); processData.edgeRemarkRight = file.Read(); let count = file.Read(); + processData.highBoardEdgeRemark.length = 0; processData.highBoardEdgeRemark = file.ReadArray(count); } this._DrillAssociationLock.clear(); @@ -21000,10 +26728,67 @@ let Board = Board_1 = class Board extends ExtrudeSolid { this._DrillAssociationLock.add(id); } } + if (ver > 15) { + this._SweepPath = file.ReadObject(); + if (this._SweepPath) { + this._SweepAngle = file.Read(); + if (ver > 16) + this._SweepVisibleFace = file.Read(); + if (ver > 17) + this._isDrawArcGroove = file.Read(); + this._ArcBoardOptions.clear(); + const count = file.Read(); + for (let i = 0; i < count; i++) { + let key = file.Read(); + let opt = { + arcLength: file.Read(), + grooveSpacing: file.Read(), + grooveWidth: file.Read(), + retainedThickness: file.Read(), + grooveAddDepth: file.Read(), + grooveAddLength: file.Read(), + grooveAddWidth: file.Read(), + knifeRadius: file.Read(), + arcExtension: 0, + }; + if (ver > 18) + opt.arcExtension = file.Read(); + this._ArcBoardOptions.set(key, opt); + } + } + } + if (ver > 19) + this.AlignLineObject = file.ReadHardObjectId(); + if (ver > 20) + DeserializationBoardSideModeingData(file, this._SideModelingMap); + this.ClearSideModelingCache(); + if (ver > 22) + this._LockMaterial = file.ReadBool(); + else + this._LockMaterial = false; + if (ver > 23) { + processData.reservedEdgeUp = file.Read(); + processData.reservedEdgeDown = file.Read(); + processData.reservedEdgeLeft = file.Read(); + processData.reservedEdgeRight = file.Read(); + let count = file.Read(); + processData.highReservedEdge.length = 0; + for (let i = 0; i < count; i++) { + let size = file.Read(); + processData.highReservedEdge.push({ size }); + } + processData.sealColorUp = file.Read(); + processData.sealColorDown = file.Read(); + processData.sealColorLeft = file.Read(); + processData.sealColorRight = file.Read(); + processData.sealColorType = file.Read(); + } + if (ver > 24) + this.arcBoardFeedProcess = file.Read(); } WriteFile(file) { super.WriteFile(file); - file.Write(15); + file.Write(25); // file.Write(this._SpaceOCS.toArray()); ver < 6 file.Write(this._BoardType); file.Write(this._Name); @@ -21016,6 +26801,7 @@ let Board = Board_1 = class Board extends ExtrudeSolid { file.Write(ids.length); for (let id of ids) file.WriteObjectId(id); + file.Write(ids.Name); } } file.Write(this._LayerNails.length); @@ -21058,6 +26844,48 @@ let Board = Board_1 = class Board extends ExtrudeSolid { file.WriteObjectId(id); } } + //ver 16 + file.WriteObject(this._SweepPath); + if (this._SweepPath) { + file.Write(this._SweepAngle); + file.Write(this._SweepVisibleFace); + file.Write(this._isDrawArcGroove); + file.Write(this._ArcBoardOptions.size); + for (const [k, v] of this._ArcBoardOptions) { + file.Write(k); + file.Write(v.arcLength); + file.Write(v.grooveSpacing); + file.Write(v.grooveWidth); + file.Write(v.retainedThickness); + file.Write(v.grooveAddDepth); + file.Write(v.grooveAddLength); + file.Write(v.grooveAddWidth); + file.Write(v.knifeRadius); + file.Write(v.arcExtension); + } + } + //ver 20 + file.WriteHardObjectId(this.AlignLineObject); + //ver 21 + SerializeBoardSideModeingData(file, this._SideModelingMap); + // ver 23 + file.WriteBool(this._LockMaterial); + //ver 24 + file.Write(processData.reservedEdgeUp); + file.Write(processData.reservedEdgeDown); + file.Write(processData.reservedEdgeLeft); + file.Write(processData.reservedEdgeRight); + file.Write(processData.highReservedEdge.length); + for (let r of processData.highReservedEdge) { + file.Write(r.size); + } + file.Write(processData.sealColorUp); + file.Write(processData.sealColorDown); + file.Write(processData.sealColorLeft); + file.Write(processData.sealColorRight); + file.Write(processData.sealColorType); + // ver 25 + file.Write(this.arcBoardFeedProcess); } }; __decorate([ @@ -21066,6 +26894,9 @@ __decorate([ __decorate([ AutoRecord ], Board.prototype, "RelativeHandle", void 0); +__decorate([ + AutoRecord +], Board.prototype, "AlignLineObject", void 0); Board = Board_1 = __decorate([ Factory ], Board); @@ -21120,6 +26951,29 @@ function FastWireframe(br, color = 0, divCount = 6, optArc = true) { result.push(l); } } + if (br instanceof Board && br.HasSideModel) { + let con = GetBoardContour(br); + if (con) { + let inverseZ = con.Area2 < 0; + let cus = con.Explode(); + const mirrorMtxZ = MakeMirrorMtx(ZAxis); + for (let [index, soilds] of br.SideModelingMap) { + let cu = cus[index]; + if (!cu) + continue; + let mt4 = GetSideCuFaceMtx(cus[index], inverseZ); + for (let soild of soilds) { + let lines = FastWireframe(soild, color, 3, false); + for (let line of lines) { + line.applyMatrix4(mirrorMtxZ); + line.applyMatrix4(soild.OCSNoClone); + line.applyMatrix4(mt4); + result.push(line); + } + } + } + } + } return result; } function FastExtrudeEdgeGeometryOfShape(shape, z0, z1, divCount = 6, optArc = true, coords = []) { @@ -21228,11 +27082,62 @@ function GenerateExtrudeEdgeGeometryPoints(contourPoints, height) { return pts; } +//https://github.com/mrdoob/three.js/blob/master/src/geometries/ExtrudeGeometry.js#L727 +class WorldUVGenerator { + generateTopUV(geometry, vertices, indexA, indexB, indexC) { + const a_x = vertices[indexA * 3]; + const a_y = vertices[indexA * 3 + 1]; + const b_x = vertices[indexB * 3]; + const b_y = vertices[indexB * 3 + 1]; + const c_x = vertices[indexC * 3]; + const c_y = vertices[indexC * 3 + 1]; + return [ + new Vector2$1(a_x, a_y), + new Vector2$1(b_x, b_y), + new Vector2$1(c_x, c_y) + ]; + } + generateSideWallUV(geometry, vertices, indexA, indexB, indexC, indexD) { + const a_x = vertices[indexA * 3]; + const a_y = vertices[indexA * 3 + 1]; + const a_z = vertices[indexA * 3 + 2]; + const b_x = vertices[indexB * 3]; + const b_y = vertices[indexB * 3 + 1]; + const b_z = vertices[indexB * 3 + 2]; + const c_x = vertices[indexC * 3]; + const c_y = vertices[indexC * 3 + 1]; + const c_z = vertices[indexC * 3 + 2]; + const d_x = vertices[indexD * 3]; + const d_y = vertices[indexD * 3 + 1]; + const d_z = vertices[indexD * 3 + 2]; + if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x)) { + return [ + new Vector2$1(a_x, 1 - a_z), + new Vector2$1(b_x, 1 - b_z), + new Vector2$1(c_x, 1 - c_z), + new Vector2$1(d_x, 1 - d_z) + ]; + } + else { + return [ + new Vector2$1(a_y, 1 - a_z), + new Vector2$1(b_y, 1 - b_z), + new Vector2$1(c_y, 1 - c_z), + new Vector2$1(d_y, 1 - d_z) + ]; + } + } +} +const worldUVGenerator = new WorldUVGenerator(); + let ExtrudeHole = class ExtrudeHole extends Hole { constructor() { super(...arguments); + this._DisplayAccuracy = 0; this._contourCurve = new Polyline(); this._knifeRadius = 3; + this._GoodsId = ""; + this._GoodsSn = ""; this.isHole = true; this.isThrough = false; } @@ -21245,6 +27150,24 @@ let ExtrudeHole = class ExtrudeHole extends Hole { this._knifeRadius = v; } } + get GoodsId() { + return this._GoodsId; + } + set GoodsId(value) { + if (this._GoodsId !== value) { + this.WriteAllObjectRecord(); + this._GoodsId = value; + } + } + get GoodsSn() { + return this._GoodsSn; + } + set GoodsSn(value) { + if (this._GoodsSn !== value) { + this.WriteAllObjectRecord(); + this._GoodsSn = value; + } + } Explode() { return [this.ContourCurve.Clone().ApplyMatrix(this.OCS)]; } @@ -21309,6 +27232,8 @@ let ExtrudeHole = class ExtrudeHole extends Hole { GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform) { switch (snapMode) { case ObjectSnapMode.End: + if (this._contourCurve instanceof Circle) + return this.GetGripPoints(); return this.GetStretchPoints(); case ObjectSnapMode.Mid: case ObjectSnapMode.Cen: @@ -21329,6 +27254,16 @@ let ExtrudeHole = class ExtrudeHole extends Hole { } return []; } + get DisplayAccuracy() { + return this._DisplayAccuracy; + } + set DisplayAccuracy(v) { + if (!equaln$1(v, this._DisplayAccuracy)) { + this.WriteAllObjectRecord(); + this._DisplayAccuracy = v; + this.Update(); + } + } get Shape() { let contour = Contour.CreateContour(this.ContourCurve.Clone(), false); return new Shape(contour); @@ -21363,7 +27298,11 @@ let ExtrudeHole = class ExtrudeHole extends Hole { steps: 1, bevelEnabled: false, depth: this.Height, + UVGenerator: worldUVGenerator, }; + if (this.ContourCurve instanceof Circle || this.ContourCurve instanceof Polyline) { + this.ContourCurve.DisplayAccuracy = this._DisplayAccuracy; + } let geo = new ExtrudeGeometry(this.ContourCurve.Shape, extrudeSettings); geo.applyMatrix4(this._contourCurve.OCSNoClone); let mtl = this.Material?.Object ?? this.Db?.DefaultMaterial; @@ -21495,11 +27434,28 @@ let ExtrudeHole = class ExtrudeHole extends Hole { return [line, mesh]; } InitDrawObject(renderType = RenderType.Wireframe) { - if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) { - return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)); + if (renderType === RenderType.Wireframe) { + return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex)); } - else if (renderType === RenderType.Conceptual || renderType === RenderType.Physical2) { - return new Object3D().add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))); + else if (renderType === RenderType.Conceptual) { + return new Object3D().add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))); + } + // 概念透明 + else if (renderType === RenderType.ConceptualTransparent) { + let color = this.DrawColorIndex; + if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) + color = 8; + return new Object3D().add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))); + } + else if (renderType === RenderType.Physical2) { + let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial); + Object.defineProperty(mesh, "castShadow", { + get: () => this.CaseShadow + }); + Object.defineProperty(mesh, "receiveShadow", { + get: () => this.CaseShadow + }); + return new Object3D().add(mesh, new LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())); } else if (renderType === RenderType.Physical) { let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial); @@ -21521,10 +27477,10 @@ let ExtrudeHole = class ExtrudeHole extends Hole { this._EdgeGeometry = undefined; this._MeshGeometry = undefined; this.MeshGeometry; - if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) { + if (renderType === RenderType.Wireframe) { let l = obj; l.geometry = this.EdgeGeometry; - l.material = ColorMaterial.GetLineMaterial(this.ColorIndex); + l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex); } else if (renderType === RenderType.Print) { obj.add(...this.GetPrintObject3D()); @@ -21534,25 +27490,54 @@ let ExtrudeHole = class ExtrudeHole extends Hole { mesh.geometry = this.MeshGeometry; mesh.material = this.MeshMaterial; } - else if (renderType === RenderType.Conceptual || renderType === RenderType.Physical2) { - obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))); + else if (renderType === RenderType.Physical2) { + let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial); + Object.defineProperty(mesh, "castShadow", { + get: () => this.CaseShadow + }); + Object.defineProperty(mesh, "receiveShadow", { + get: () => this.CaseShadow + }); + return obj.add(mesh, new LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())); + } + else if (renderType === RenderType.Conceptual) { + obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))); + } + // 概念透明 + else if (renderType === RenderType.ConceptualTransparent) { + let color = this.DrawColorIndex; + if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) + color = 8; + return obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide)), new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))); } else if (renderType === RenderType.Jig) obj.add(...FastWireframe2(this)); return obj; } UpdateDrawObjectMaterial(renderType, obj) { - if (renderType === RenderType.Wireframe || renderType === RenderType.Edge) { + if (renderType === RenderType.Wireframe) { let l = obj; - l.material = ColorMaterial.GetLineMaterial(this.ColorIndex); + l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex); + } + // 概念透明 + else if (renderType === RenderType.ConceptualTransparent) { + let mesh = obj.children[0]; + let color = this.DrawColorIndex; + if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) + color = 8; + mesh.material = ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide); } else if (renderType === RenderType.Physical) { let mesh = obj; mesh.material = this.MeshMaterial; } + else if (renderType === RenderType.Physical2) { + let mesh = obj.children[0]; + mesh.material = this.MeshMaterial; + } else if (renderType !== RenderType.Jig && renderType !== RenderType.Print) { let mesh = obj.children[0]; - mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex); + mesh.material = ColorMaterial.GetConceptualMaterial(this.DrawColorIndex); } } ClearDraw() { @@ -21588,19 +27573,31 @@ let ExtrudeHole = class ExtrudeHole extends Hole { for (let i = 0; i < count; i++) file.ReadSoftObjectId(); } + if (ver > 5) { + this._GoodsId = file.Read(); + this._GoodsSn = file.Read(); + } + if (ver > 6) { + this._DisplayAccuracy = file.Read(); + } this.Update(); } //对象将自身数据写入到文件. WriteFile(file) { super.WriteFile(file); - file.Write(5); + file.Write(7); file.WriteObject(this._contourCurve); file.Write(this._knifeRadius); file.Write(this.isHole); file.Write(this.isThrough); file.Write(this.type); - //ver= 5 弃用 + //ver = 5 弃用 file.Write(0); + //ver = 6 + file.Write(this._GoodsId); + file.Write(this._GoodsSn); + //ver = 7 + file.Write(this._DisplayAccuracy); } }; __decorate([ @@ -21986,8 +27983,8 @@ class FeedingToolPath extends Singleton { /**用于测试走刀路径 */ TestCalcPath(br, isCd = false, rk = 0) { let modelings = br.BoardModeling; - let allModeling = GetModelingFromCustomDrill(br); - modelings.push(...allModeling.modeling); + let { modeling } = GetModelingFromCustomDrill(br); + modelings.push(...modeling); if (isCd && HostApplicationServices.chaidanOption.useDefaultRad) modelings.forEach(m => m.knifeRadius = HostApplicationServices.chaidanOption.radius); if (isCd) @@ -22051,21 +28048,55 @@ class FeedingToolPath extends Singleton { } return cus; } + //获取侧面造型走刀 + GetSideModelFeedPath(solid, faceContour, redundancyKnif = 0) { + let cus = []; //返回走刀路径 + let shape = solid.Shape; + let thickness = solid.Thickness; + let knifeRadius = solid.KnifeRadius; + let addLen = solid.GroovesAddLength; + let addDepth = solid.GroovesAddDepth; + let addWidth = solid.GroovesAddWidth; + if (!knifeRadius) + knifeRadius = 3; + if (addDepth) + thickness += addDepth; + if (thickness < 1e-5) + return cus; + shape = shape.Clone().ApplyMatrix(solid.OCSNoClone); + shape.Z0(); + this.GrooveAddSize(shape, addLen, addWidth); + this.HandleThoughGroove(faceContour, shape, knifeRadius); + //造型半径和刀半径相等,返回重合点的线 + let outline = shape.Outline.Curve; + if (outline instanceof Circle && equaln$1(outline.Radius, knifeRadius)) + return [new Polyline([{ pt: AsVector2(outline.Center), bul: 0 }, { pt: AsVector2(outline.Center), bul: 0 }])]; + // { + // todo 全深槽 + // } + let offsetCus = this.HandleShape(shape, knifeRadius, true, redundancyKnif); + if (offsetCus.length > 1) + cus.push(...OptimizeToolPath(offsetCus, shape, knifeRadius)); + return cus; + } GrooveAddSize(shape, addLen, addWidth) { shape.Outline.Curve.Position = shape.Outline.Curve.Position.setZ(0); + //addWidth可能为undefined 导致box计算错误 + let length = addLen ?? 0; + let width = addWidth ?? 0; //若是矩形,应用槽加长 - if (addLen > 0 || addWidth > 0) { + if (length != 0 || width != 0) { let rectInfo = IsRect(shape.Outline.Curve); if (rectInfo) { let box = rectInfo.box; let size = rectInfo.size; if (size.x > size.y) { - box.max.add(new Vector3(addLen / 2, addWidth / 2)); - box.min.add(new Vector3(-addLen / 2, -addWidth / 2)); + box.max.add(new Vector3(length / 2, width / 2)); + box.min.add(new Vector3(-length / 2, -width / 2)); } else { - box.max.add(new Vector3(addWidth / 2, addLen / 2)); - box.min.add(new Vector3(-addWidth / 2, -addLen / 2)); + box.max.add(new Vector3(width / 2, length / 2)); + box.min.add(new Vector3(-width / 2, -length / 2)); } let pl = new Polyline().RectangleFrom2Pt(box.min, box.max).ApplyMatrix(rectInfo.OCS); shape.Outline = Contour.CreateContour(pl); @@ -22107,6 +28138,7 @@ class FeedingToolPath extends Singleton { } return cons; } + //检查正反面造型 CheckModeling(br) { let errorIndexs = []; let modelings = br.BoardModeling; @@ -22123,10 +28155,43 @@ class FeedingToolPath extends Singleton { } return errorIndexs; } + //检查侧面造型 + CheckSideModeling(br) { + let allSideModelGrooveMap = br.AllSideModelGrooveMap; + if (!allSideModelGrooveMap?.size) + return []; + let errorSideModel = []; + let faces = new ParseBoardSideFace(br); + let con = GetBoardContour(br); + if (!con) + return errorSideModel; + let inverseZ = con.Area2 < 0; + let cus = con.Explode(); + const mirrorMtxZ = MakeMirrorMtx(ZAxis); + for (let [n, solids] of allSideModelGrooveMap) { + let faceContour = faces.Faces[n].Region.ShapeManager.ShapeList[0].Outline.Curve; + let mt4 = GetSideCuFaceMtx(cus[n], inverseZ); + for (let solid of solids) { + // 圆造型拆成孔 + // let cu = solid.Shape.Outline.Curve; + // if (!solid.Shape.Holes.length && cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6) + // continue; + let paths = this.GetSideModelFeedPath(solid, faceContour); //走刀路径 + if (!paths.length) { + let s = solid.Clone(); + s.ApplyMatrix(mirrorMtxZ); + s.ApplyMatrix(mt4); + s.ApplyMatrix(br.OCS); + errorSideModel.push(s); + } + } + } + return errorSideModel; + } CheckCustomHole(br) { - let { modeling, sideModeling } = GetModelingFromCustomDrill(br); + let { modeling } = GetModelingFromCustomDrill(br); let errHoles = []; - for (let m of [...modeling, ...sideModeling]) { + for (let m of modeling) { let cu = m.shape.Outline.Curve; if (m.shape.Holes.length === 0 && cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6) continue; @@ -22239,39 +28304,92 @@ class FeedingToolPath extends Singleton { } function GetModelingFromCustomDrill(br) { let normal = br.Normal; - let outline = GetBoardContour(br); + let brInv = br.OCSInv; + let originOutline = GetBoardContour(br); + let outline = originOutline; let modeling = []; let sideModeling = []; const holes = []; let bbox = br.BoundingBoxInOCS; let holeBoxMap = new WeakMap(); - for (let [, idss] of br.DrillList) { + if (br.IsArcBoard && br.DrillList.size) + ParseArcBoardHoles(br, new Vector3); + const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption; + for (let [objetId, idss] of br.DrillList) { + let linkBoard = objetId?.Object; + if (cancelHoleProcessing && linkBoard) { + const [L, W, H] = [linkBoard.BoardProcessOption.spliteHeight, linkBoard.BoardProcessOption.spliteWidth, linkBoard.BoardProcessOption.spliteThickness]; + if ((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) + continue; + } for (let ids of idss) { for (let id of ids) { - if (id?.Object && !id.Object.IsErase && id.Object instanceof ExtrudeHole && id.Object.isHole) { - if (!(id.Object.ContourCurve instanceof Circle)) { - let en = id.Object; - let enBox = en.GetBoundingBoxInMtx(br.OCSInv); - holeBoxMap.set(en, enBox); - if (enBox.clone().intersect(bbox).isSolid(0.1)) - holes.push(id.Object); + if (!id?.Object || id.Object.IsErase) + continue; + let hole = id.Object; + if (hole instanceof ExtrudeHole && hole.isHole) { + if (!(hole.ContourCurve instanceof Circle)) { + hole["__CacheChaiDanName__"] = ids.Name; + if (br.IsArcBoard) { + let ocs = hole["__CacheBrOCS__"]; + if (!ocs) + continue; + brInv = new Matrix4().getInverse(ocs); + let holeBox = hole.GetBoundingBoxInMtx(brInv); + holeBoxMap.set(hole, holeBox); + if (hole.BoundingBox.clone().intersect(br.BoundingBox).isSolid(0.1)) + holes.push(hole); + } + else { + let holeBox = hole.GetBoundingBoxInMtx(brInv); + holeBoxMap.set(hole, holeBox); + if (holeBox.clone().intersect(bbox).isSolid(0.1)) + holes.push(hole); + } + continue; } } - else - break; + hole["__CacheAddPos__"] = undefined; + hole["__CacheBrOCS__"] = undefined; + hole["__CacheContour__"] = undefined; } } } - for (let en of holes) { - let box = holeBoxMap.get(en); + for (let hole of holes) { + let box = holeBoxMap.get(hole); let max = box.max; let min = box.min; let dir; - let shape = en.Shape; - let diff = br.OCSInv.multiply(en.OCS); + let shape = hole.Shape; + let faceRegions; + let faceRegionsBox; + let addPos; + let chaiDanName = hole["__CacheChaiDanName__"]; + hole["__CacheChaiDanName__"] = undefined; + if (br.IsArcBoard) { + addPos = hole["__CacheAddPos__"]; + faceRegions = hole["__CacheContour__"]; + let ocs = hole["__CacheBrOCS__"]; + hole["__CacheAddPos__"] = undefined; + hole["__CacheBrOCS__"] = undefined; + hole["__CacheContour__"] = undefined; + if (!ocs || !addPos || !faceRegions?.length) + return; + else { + brInv = new Matrix4().getInverse(ocs); + normal = new Vector3().setFromMatrixColumn(ocs, 2); + faceRegionsBox = new Box3(); + for (let pl of faceRegions) + faceRegionsBox.union(pl.BoundingBox); + let boxSize = faceRegionsBox.getSize(new Vector3); + let extrude = Board.CreateBoard(boxSize.y, boxSize.x, 1); + outline = extrude.ContourCurve; + } + } + let diff = brInv.clone().multiply(hole.OCS); shape.ApplyMatrix(diff); let thickness; - if (isParallelTo(normal, en.Normal)) { + if (isParallelTo(normal, hole.Normal)) { if (min.z > br.Thickness - 1e-6) continue; //在板件的世界,0.01的误差应该不能被看出来,所以我们允许0.01的容差(这样应该是没问题的) @@ -22288,41 +28406,86 @@ function GetModelingFromCustomDrill(br) { else continue; if (thickness > 1e-6 && isTargetCurInOrOnSourceCur(outline, shape.Outline.Curve.Clone().Z0())) { + if (br.IsArcBoard) { + //弧形板需要单独增加差值 + shape.Position = shape.Position.add(addPos); + if (br.SweepAngle) { + let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx); + shape.ApplyMatrix(ocsInv); + } + } modeling.push({ shape, thickness, dir, - knifeRadius: en.KnifeRadius, + knifeRadius: hole.KnifeRadius, addLen: 0, - originEn: en, + addDepth: 0, + addWidth: 0, + originEn: hole, }); } } else { if (min.z <= 0 || max.z >= br.Thickness) continue; - let spt = en.Position.applyMatrix4(br.OCSInv).setZ(0); - if (outline.PtOnCurve(spt)) - continue; - let line = new Line(spt, en.Position.add(en.Normal.multiplyScalar(en.Height)).applyMatrix4(br.OCSInv).setZ(0)); - let pt = outline.IntersectWith(line, 0)[0]; + let spt = hole.Position.applyMatrix4(brInv).setZ(0); + // 有可能Z向量朝向轮廓内部 + // if (outline.PtOnCurve(spt)) continue; + let line = new Line(spt, hole.Position.add(hole.Normal.multiplyScalar(hole.Height)).applyMatrix4(brInv).setZ(0)); + let pt = outline.IntersectWith(line, IntersectOption.ExtendNone, 1e-5)[0]; if (!pt) continue; + let thickness = 0; + for (let p of [line.StartPoint, line.EndPoint]) { + if (outline.PtInCurve(p)) { + thickness = p.distanceTo(pt); + break; + } + } + //漏网之鱼 过滤掉不在板内的排钻 :677计算的弧形板包围盒不准确导致 + if (thickness < 1e-3) + continue; let index = Math.floor(outline.GetParamAtPoint(pt)); - let thickness = line.StartPoint.distanceTo(pt); - let shape = en.Shape.ApplyMatrix(en.OCS).ApplyMatrix(br.OCSInv); let vec = line.GetFirstDeriv(0).normalize().multiplyScalar(thickness); shape.Position = shape.Position.add(vec); - //侧面造型仅在多段线直线上 - let cu = outline.GetCurveAtIndex(index); - shape.ApplyMatrix(new Matrix4().getInverse(GetSideFaceMtx(cu))); + if (br.IsArcBoard) { + //弧形板需要单独增加差值 + shape.Position = shape.Position.add(addPos); + pt = pt.add(addPos); + if (br.SweepAngle) { + let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx); + pt.applyMatrix4(ocsInv); + shape.ApplyMatrix(ocsInv); + } + } + if (br.IsArcBoard) { + //侧面造型仅在多段线直线上 + //因为侧面造型起点特殊性 要处理一下 + index = Math.floor(originOutline.GetParamAtPoint(pt)); + let cu = originOutline.GetCurveAtIndex(index); + if (cu) + shape.ApplyMatrix(new Matrix4().getInverse(GetSideCuFaceMtx(cu))); + else { + console.error("圆弧板非圆侧孔求交失败"); + continue; + } + } + else { + let cu = outline.GetCurveAtIndex(index); + shape.ApplyMatrix(new Matrix4().getInverse(GetSideCuFaceMtx(cu))); + } sideModeling.push({ - shape, + outline: ConverToPtsBul(shape.Outline.Curve, false), + holes: shape.Holes.map((cu) => ConverToPtsBul(cu.Curve, false)), thickness, dir: index, - knifeRadius: en.KnifeRadius, + knifeRadius: hole.KnifeRadius, addLen: 0, - originEn: en, + addDepth: 0, + addWidth: 0, + chaiDanName, + modelType: ModelType.drill }); } } @@ -22359,13 +28522,13 @@ function VKnifToolPath(polyline, feedingDepth, knifAngle) { ptsbul.push({ pt: c1.EndPoint, bul: 0 }); break; } + let derv1 = c1.GetFirstDeriv(0).normalize(); + let derv2 = c2.GetFirstDeriv(0).normalize(); //圆弧与直线相切,此时不要提刀 - if (isParallelTo(c1.GetFirstDeriv(0), c2.GetFirstDeriv(0))) + if (isParallelTo(derv1, derv2, 1e-6)) continue; //计算提刀部分: //向量与平分线,参照倒角代码 - let derv1 = c1.GetFirstDeriv(0).normalize(); - let derv2 = c2.GetFirstDeriv(0).normalize(); let bisectorVec = derv1.clone().negate().add(derv2).multiplyScalar(0.5); let co1 = c1.GetOffsetCurves(x * Math.sign(derv1.cross(bisectorVec).z))[0]; let co2 = c2.GetOffsetCurves(x * Math.sign(derv2.cross(bisectorVec).z))[0]; @@ -23148,7 +29311,32 @@ function PathScale(pts, scale) { return pts; } +const MAX_CACHE_LEN = 100000; class NestCache { + static SetPos(key, value) { + if (this._PosCacheCount > MAX_CACHE_LEN) { + // this._PosCacheCount = 0; + // this._PositionCache = {}; + return; + } + this._PositionCache[key] = value; + this._PosCacheCount++; + } + static GetPos(key) { + return this._PositionCache[key]; + } + static SetNoPut(key, value) { + if (this._NoPutCacheCount > MAX_CACHE_LEN) { + // this._NoPutCacheCount = 0; + // this._NoPutCache = {}; + return; + } + this._NoPutCache[key] = value; + this._NoPutCacheCount++; + } + static GetNoPut(key) { + return this._NoPutCache[key]; + } /** * 用于创建原点在0点的矩形路径 */ @@ -23167,17 +29355,18 @@ class NestCache { static Clear() { this.CachePartPosCount = 0; this.CacheNoSetCount = 0; - this.CacheRect.clear(); - this.PositionCache = {}; + this._PositionCache = {}; + this._PosCacheCount = 0; + this._NoPutCache = {}; + this._NoPutCacheCount = 0; } } //放置零件时,命中缓存的次数 NestCache.CachePartPosCount = 0; //放置零件时,命中无法放置缓存的次数 NestCache.CacheNoSetCount = 0; //noset -NestCache.PositionCache = {}; -NestCache.NoPutCache = {}; -NestCache.CacheRect = new Map(); +NestCache._PositionCache = {}; +NestCache._NoPutCache = {}; const TEXT_BOX = NestCache.CreatePath(570, 110); /** @@ -23987,5 +30176,5 @@ class CurveWrap { } } -export { Arc, BUL_IS_LINE_FUZZ, BoolOpeartionType, CADFiler, Circle, Circle2Points, ComputeBiarc, Contour, ConverToPolylineAndSplitArc, CurveContainerCurve, CurveWrap, Curves2Points, DuplicateRecordCloning, FeedingToolPath, InitClipperCpp, IsPtsAllOutOrOnReg, IsRect, LargestInteriorRectangle, Line, ParseRegionTextPos, PointsSimplify2PolylineAndParseArc, Polyline, Polyline2Points, PolylineFilletMinArc, Production, Shape, ShapeManager, SmartPointsSimply2Polyline, SmartPolylineSimply2Polyline, SplineConver2Polyline, Status, TempPolyline, UpdateDraw, VData2Curve, VKnifToolPath, clipperCpp, fastCurveInCurve2, isTargetCurInOrOnSourceCur }; +export { Arc, BUL_IS_LINE_FUZZ, BoolOpeartionType, CADFiler, Circle, Circle2Points, ComputeBiarc, Contour, ConverToPolylineAndSplitArc, CurveContainerCurve, CurveWrap, Curves2Points, DuplicateRecordCloning, FeedingToolPath, InitClipperCpp, IsPtsAllOutOrOnReg, IsRect, LargestInteriorRectangle, Line, ModelType, ParseArcBoardHoles, ParseRegionTextPos, PointsSimplify2PolylineAndParseArc, Polyline, Polyline2Points, PolylineFilletMinArc, Production, Shape, ShapeManager, SmartPointsSimply2Polyline, SmartPolylineSimply2Polyline, SplineConver2Polyline, SplitOrderType, Status, TempPolyline, UpdateDraw, VData2Curve, VKnifToolPath, clipperCpp, fastCurveInCurve2, isTargetCurInOrOnSourceCur }; //# sourceMappingURL=api.esm.js.map diff --git a/api.esm.js.map b/api.esm.js.map index 86f7e37..31440e3 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/StoreageKeys.ts","../src/Common/eval.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/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/Matrix2.ts","../src/Geometry/Plane.ts","../src/Geometry/RotateUV.ts","../src/DatabaseServices/Entity/Line.ts","../src/DatabaseServices/Entity/Ellipse.ts","../src/DatabaseServices/Entity/Circle.ts","../src/Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams.ts","../src/DatabaseServices/Shape2.ts","../src/Geometry/CreatePolylinePath.ts","../src/Geometry/DoIntersect.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/Add-on/DrawDrilling/DrillType.ts","../src/Common/Log.ts","../src/Common/Singleton.ts","../src/Geometry/UVUtils.ts","../src/DatabaseServices/Shape.ts","../src/DatabaseServices/ShapeManager.ts","../src/DatabaseServices/Entity/Region.ts","../src/Add-on/BoardEditor/Board2Regions.ts","../src/Common/BoardKeyList.ts","../src/Add-on/BoardEditor/SerializeBoardData.ts","../src/DatabaseServices/3DSolid/Hole.ts","../src/DatabaseServices/3DSolid/CylinderHole.ts","../src/Add-on/DrawDrilling/HoleUtils.ts","../src/Geometry/BoardUVGenerator.ts","../src/Geometry/CSGSubtract/CSGSubtractTaskManager.ts","../src/DatabaseServices/Entity/BoardInterface.ts","../src/Geometry/PointShapeUtils.ts","../src/Common/Toaster.ts","../src/Nest/Common/Util.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/OptionInterface/AutoDimBrsOption.ts","../src/UI/Store/OptionInterface/BoardBatchCurtailOption .ts","../src/UI/Store/OptionInterface/ClosingStripOption.ts","../src/UI/Store/OptionInterface/OptionEnum.ts","../src/UI/Store/WineRackInterface.ts","../src/Editor/OrderType.ts","../src/Editor/DefaultConfig.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/DatabaseServices/GroupTableRecord.ts","../src/Common/AddEntityDrawObject.ts","../src/csg/core/constants.ts","../src/csg/core/FuzzyFactory.ts","../src/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.ts","../src/DatabaseServices/Entity/GenUVForWorld.ts","../src/DatabaseServices/Entity/Extrude.ts","../src/DatabaseServices/Entity/CompositeEntity.ts","../src/DatabaseServices/Hardware/HardwareCompositeEntity.ts","../src/Geometry/DrillParse/BoardGetFace.ts","../src/Production/Convert2PtsBul.ts","../src/Production/Product.ts","../src/GraphicsSystem/ParseEdgeSealDir.ts","../src/GraphicsSystem/CalcEdgeSealing.ts","../src/DatabaseServices/Entity/Board.ts","../src/Geometry/CreateWireframe.ts","../src/Geometry/SimpleExtrudeEdgeGeometry.ts","../src/DatabaseServices/3DSolid/ExtrudeHole.ts","../src/GraphicsSystem/ToolPath/OptimizeToolPath.ts","../src/GraphicsSystem/ToolPath/FeedingToolPath.ts","../src/GraphicsSystem/ToolPath/VKnifToolPath.ts","../src/Geometry/ConverToPolylineAndSplitArc.ts","../src/Nest/Common/Area.ts","../src/Nest/Converter/Path2Polyline.ts","../src/Nest/Common/Vector2.ts","../src/Nest/Common/Box2.ts","../src/Nest/Common/ClipperCpp.ts","../src/Nest/Core/Path.ts","../src/Nest/Core/NestCache.ts","../src/DatabaseServices/Room/ParseService/ParseRegionTextPos.ts","../src/DatabaseServices/Room/ParseService/RangeUtils.ts","../src/Geometry/CheckIntersect.ts","../src/Nest/Common/ArrayExt.ts","../src/Add-on/testEntity/LargestInteriorRectangle.ts","../src/Nest/Converter/Curves2Points.ts","../src/Nest/Converter/Simplify2.ts","../src/Nest/Converter/CurveWrap.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 six = 6\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,//封边检查 OpenCabinet.UNOPENRENDERTYPE 该视图下不支持开门动作\r\n PlaceFace = 8,//排版面 OpenCabinet.UNOPENRENDERTYPE 该视图下不支持开门动作\r\n BigHoleFace = 81, //大孔面 OpenCabinet.UNOPENRENDERTYPE 该视图下不支持开门动作\r\n CustomNumber = 9,//自定义编号\r\n ModelGroove = 10,//造型槽 OpenCabinet.UNOPENRENDERTYPE 该视图下不支持开门动作\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 CustomNumberPrint = 109,\r\n\r\n ConceptualTransparent = 182//概念透明\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 { ObjectId } from '../DatabaseServices/ObjectId';\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 DefaultFloorMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n DefaultWallMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n DefaultBulkheadCeilingMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n\r\n IsRoomEntityVisible = true;//室内实体可见\r\n\r\n CurrentDimStyle: ObjectId;\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 @ProxyValue ConceptualOpacity = 1;//概念透明的透明度\r\n\r\n DrawWallBottomFace = false;//绘制底面\r\n sealReserve = 0; //封边统计留头量\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 //#region 显示纹路\r\n @ProxyValue showLines = false;\r\n //#endregion\r\n\r\n //#region 显示开门方向纹路\r\n @ProxyValue showOpenDirLines = false;\r\n //#endregion\r\n\r\n //#region 显示二维刀路路径线条\r\n @ProxyValue show2DPathLine = false;\r\n //#endregion\r\n\r\n //#region 显示二维刀路\r\n @ProxyValue show2DPathObject = 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 drillRemark: false,//拆单获取排钻备注\r\n checkSealType: \"1\",\r\n sealMaxValue: 10,//封边最大值\r\n sealValues: '',//封边值列表\r\n hardwareExpressionFormattingAccuracy: 2,//复合实体表达式值格式化精度\r\n partialSplitValueCanTakesEffect: 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 boardCustomNumberTextHeight = 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 WriteBool(v: boolean)\r\n {\r\n this.Write(v ? 1 : 0);\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 Write2dArray(arr: [any, any][])\r\n {\r\n this._datas.push(arr.length, ...arr.flat());\r\n }\r\n\r\n Read(): any\r\n {\r\n return this._datas[this.readIndex++];\r\n }\r\n\r\n ReadBool()\r\n {\r\n return Boolean(this.Read());\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 Read2dArray(): [any, any][]\r\n {\r\n let count = this.Read();\r\n let arr = this._datas.slice(this.readIndex, this.readIndex + count * 2);\r\n this.readIndex += count * 2;\r\n\r\n let arr2d: [any, any][] = [];\r\n for (let i = 0; i < arr.length; i = i + 2)\r\n arr2d.push([arr[i], arr[i + 1]]);\r\n\r\n return arr2d;\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.ReadBool();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.WriteBool(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.ReadBool();\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.WriteBool(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\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 if (ver === 1)\r\n file.ReadObject();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n file.WriteObject(this.undoData);\r\n file.WriteObject(this.redoData);\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 = \"u_ro\";\r\n","import { Status } from \"../Common/Status\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { CADObject } from \"./CADObject\";\r\nimport { SymbolTable } from \"./Tables/SymbolTable\";\r\n\r\nexport abstract 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 { Factory } from \"./CADFactory\";\r\nimport { SymbolTableRecord } from \"./SymbolTableRecord\";\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\r\n constructor()\r\n {\r\n super();\r\n\r\n Object.defineProperty(this.material, \"ObjectId\", {\r\n get: () =>\r\n {\r\n return this?.objectId?.Index;\r\n }\r\n });\r\n }\r\n\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?.Object && !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?.Object && !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?.Object && !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 { Frustum, 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 { MatrixPlanarizere, matrixIsCoplane, tempMatrix1 } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { GetBox, IdentityMtx4, UpdateBoundingSphere, equaln, equalv3 } 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 protected HasBigHoleFaceRenderType = 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 constructor()\r\n {\r\n super();\r\n if (this._drawObject)\r\n throw \"未知错误 实体内部已经有对象\";\r\n\r\n this._drawObject = undefined;\r\n }\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 protected _VisibleInRender = true;//在渲染器中显示\r\n protected _Freeze = false;//冻结(无法被选中)\r\n\r\n get Freeze() { return this._Freeze; }\r\n set Freeze(f: boolean)\r\n {\r\n if (f === this._Freeze) return;\r\n this.WriteAllObjectRecord();\r\n this._Freeze = f;\r\n this.Update(UpdateDraw.Material);\r\n }\r\n\r\n get VisibleInRender() { return this._VisibleInRender; }\r\n set VisibleInRender(v: boolean)\r\n {\r\n if (this._VisibleInRender !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._VisibleInRender = v;\r\n }\r\n }\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() { return this._MaterialId; }\r\n\r\n GetMaterialSlots() { }\r\n\r\n SetMaterialAtSlot(mtl: ObjectId, slotIndex: number)\r\n {\r\n this.Material = mtl;\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 isClearDraw = this._CacheDrawObject.size === 0;\r\n let box = this.BoundingBox;\r\n this._Matrix = mtxBak;\r\n if (isClearDraw)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n obj.matrix = this._Matrix;//因为使用了备份的矩阵,导致此时这个矩形是错误的,这里还原它\r\n this.Update(UpdateDraw.Matrix);//保证盒子是正确的\r\n }\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 tempMatrix1.identity().setPosition(v.x, v.y, v.z);\r\n this.ApplyMatrix(tempMatrix1);\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 this.Move({ x: moveX, y: moveY, z: moveZ });\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.OCSNoClone, 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 if (Array.isArray(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 = undefined;\r\n\r\n get DrawObject()\r\n {\r\n if (this.constructor.name === \"Entity\" || this.constructor.name === \"CADObject\")\r\n throw \"出错了\";\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 if (renderType === RenderType.BigHoleFace && !this.HasBigHoleFaceRenderType)\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 /** 立即更新 */\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(): Material | Material[]\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 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 frustum?: Frustum,\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(cloneDraw = true): this\r\n {\r\n let ent = super.Clone();\r\n ent._CurRenderType = this._CurRenderType;\r\n ent.Template = undefined;\r\n if (cloneDraw)\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 if (!this._MaterialId)\r\n this._MaterialId = file.database?.DefaultMaterial?.Id;\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.ReadBool();\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 if (ver > 8)\r\n this._Freeze = file.ReadBool();\r\n else\r\n this._Freeze = false;\r\n\r\n if (ver > 9)\r\n this._VisibleInRender = file.ReadBool();\r\n else\r\n this._VisibleInRender = true;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(10);\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.WriteBool(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 file.WriteBool(this._Freeze);\r\n file.WriteBool(this._VisibleInRender);\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","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 ShopName = \"shopName\",\r\n ShopProps = \"ShopProps\",\r\n\r\n AgentShopName = \"AgentShopName\",//经销商名称\r\n AgentPhone = \"AgentPhone\",//经销商电话\r\n VersionName = \"VersionName\",//版本名称\r\n RegisterTime = \"RegisterTime\",//注册时间\r\n\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 { MathUtils } from \"three\";\r\nimport { equaln } from \"../Geometry/GeUtils\";\r\nimport { clamp as CLAMP, FixedNotZero } from \"./Utils\";\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 //eval_gen_code\r\n let abs = Math.abs;\r\n let acos = Math.acos;\r\n let acosh = Math.acosh;\r\n let asin = Math.asin;\r\n let asinh = Math.asinh;\r\n let atan = Math.atan;\r\n let atanh = Math.atanh;\r\n let atan2 = Math.atan2;\r\n let ceil = Math.ceil;\r\n let cbrt = Math.cbrt;\r\n let expm1 = Math.expm1;\r\n let clz32 = Math.clz32;\r\n let cos = Math.cos;\r\n let cosh = Math.cosh;\r\n let exp = Math.exp;\r\n let floor = Math.floor;\r\n let fround = Math.fround;\r\n let hypot = Math.hypot;\r\n let imul = Math.imul;\r\n let log = Math.log;\r\n let log1p = Math.log1p;\r\n let log2 = Math.log2;\r\n let log10 = Math.log10;\r\n let max = Math.max;\r\n let min = Math.min;\r\n let pow = Math.pow;\r\n let random = Math.random;\r\n let round = Math.round;\r\n let sign = Math.sign;\r\n let sin = Math.sin;\r\n let sinh = Math.sinh;\r\n let sqrt = Math.sqrt;\r\n let tan = Math.tan;\r\n let tanh = Math.tanh;\r\n let trunc = Math.trunc;\r\n let E = Math.E;\r\n let LN10 = Math.LN10;\r\n let LN2 = Math.LN2;\r\n let LOG10E = Math.LOG10E;\r\n let LOG2E = Math.LOG2E;\r\n let PI = Math.PI;\r\n let SQRT1_2 = Math.SQRT1_2;\r\n let SQRT2 = Math.SQRT2;\r\n let clamp = CLAMP;\r\n let eq = equaln;\r\n let r2d = MathUtils.radToDeg;\r\n let d2r = MathUtils.degToRad;\r\n let R2D = MathUtils.RAD2DEG;\r\n let D2R = MathUtils.DEG2RAD;\r\n let fix = FixedNotZero;\r\n //eval_gen_code\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 if (typeof result === \"bigint\")\r\n return Number(result);//防止bigint乱入\r\n\r\n return result;\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, fractionDigits: number = 0, 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 {\r\n let value = safeEval(str.slice(1, -1), params);\r\n let strValue: string;\r\n if (typeof value === \"number\")\r\n strValue = FixedNotZero(value, fractionDigits, expr);\r\n else\r\n strValue = value;\r\n\r\n expr = expr.replace(str, strValue);\r\n }\r\n return expr;\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 { StoreageKeys } from \"./StoreageKeys\";\r\nimport { safeEval } from \"./eval\";\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, expr: string = undefined)\r\n{\r\n if (typeof v === \"string\")\r\n {\r\n if (expr?.includes(\"fix\"))\r\n return v;//如果表达式中有fix,则尊重表达式的格式化,不再二次格式化\r\n\r\n v = parseFloat(v);\r\n }\r\n\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 */\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 IsFreeze(obj: Object3D)\r\n{\r\n return obj[\"freeze\"];\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\r\n/** 有触摸板 */\r\nexport const isHasTouch = () =>\r\n{\r\n return ('ontouchstart' in document.documentElement);\r\n};\r\n\r\nexport function isChinese(str: string)\r\n{\r\n const reg = new RegExp(`\\^[^\\\\u4e00-\\\\u9fa5]+$`);\r\n if (reg.test(str)) return false;\r\n return true;\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\n//范围交集 [a1,a2] 与 [b1,b2] 的交集\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, fuzz = 1e-8): compareVectorFn\r\n{\r\n let cacheKey = `${sortKey}${fuzz}`;\r\n if (comparePointCache.has(cacheKey))\r\n return comparePointCache.get(cacheKey);\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, fuzz)) 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 * map按Key的拼音首字母排序\r\n * reverse:倒序\r\n */\r\nexport function mapSortByCN(map: Map, reverse: boolean = false): Map\r\n{\r\n return new Map([...map].sort((x1, x2) =>\r\n {\r\n return reverse ? x2[0].localeCompare(x1[0], 'zh-CN') : x1[0].localeCompare(x2[0], 'zh-CN');\r\n }));\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 { 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 \"opacity\": { type: \"f\", value: 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, logBuf = false, opacity = 1): ShaderMaterialParameters\r\n{\r\n return {\r\n uniforms: {\r\n \"SurfaceColor\": { value: color },\r\n \"opacity\": { value: opacity },\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\nexport const 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 ----256\r\n [135, 206, 235, 255], //-----257\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, freeze = false): LineBasicMaterial\r\n {\r\n if (freeze) color = 257;\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, enableTransparent = false, freeze = false, opacity?: number)\r\n {\r\n if (freeze) color = 257;\r\n let key = `${color},${side},${enableTransparent ? 1 : 0}`;\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, ColorMaterial.UseLogBuf);\r\n let mtl = new ShaderMaterial(shaderParams);\r\n if (enableTransparent)\r\n {\r\n Object.defineProperty(mtl, \"transparent\", {\r\n get: () => mtl.uniforms.opacity.value !== 1\r\n });\r\n Object.defineProperty(mtl.uniforms.opacity, \"value\", {\r\n get: () =>\r\n {\r\n let conceptualOpacity = HostApplicationServices.ConceptualOpacity;\r\n if (freeze)\r\n conceptualOpacity = 0.5;\r\n else if (opacity)\r\n conceptualOpacity = opacity;\r\n return conceptualOpacity;\r\n }\r\n });\r\n }\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), 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), 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\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\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\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 let materialOffset = 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 let count: number;\r\n if (isIndexed)\r\n count = geometry.index.count;\r\n else if (geometry.attributes.position !== undefined)\r\n count = geometry.attributes.position.count;\r\n else\r\n return null;\r\n\r\n if (geometry.groups.length === 0)\r\n {\r\n mergedGeometry.addGroup(offset, count, materialOffset);\r\n materialOffset++;\r\n }\r\n else\r\n {\r\n let maxMaterialIndex = 0;\r\n for (let g of geometry.groups)\r\n {\r\n maxMaterialIndex = Math.max(maxMaterialIndex, g.materialIndex ?? 0);\r\n mergedGeometry.addGroup(offset + g.start, g.count, materialOffset + g.materialIndex);\r\n }\r\n\r\n materialOffset += maxMaterialIndex;\r\n }\r\n offset += count;\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, Line, Material, Object3D, Curve as TCurve, Line as TLine, 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, fuzz = 1e-6): number { return; }\r\n GetParamAtPoint2(pt: Vector3, fuzz = 1e-6): number { return this.GetParamAtPoint(pt, fuzz); }\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 GetFirstDeriv(param: number | Vector3): Vector3 { return; }\r\n GetFirstDerivAngle(param: number | Vector3): number\r\n {\r\n let d = this.GetFirstDeriv(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-5): boolean\r\n {\r\n return equalv3(this.StartPoint, pt, fuzz) || equalv3(this.EndPoint, pt, fuzz) || this.ParamOnCurve(this.GetParamAtPoint(pt, fuzz));\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 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 (pts.length === 0)\r\n pts.push(new Vector3);\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\r\nexport const DbCurve = Curve;\r\n","export enum DragPointType\r\n{\r\n Grip = 0,\r\n Stretch = 1\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 { 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.parseConstantFromPoint(constant);\r\n }\r\n\r\n parseConstantFromPoint(constant: Vector3)\r\n {\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 { Matrix2 } from './Matrix2';\r\n\r\nexport const ROTATE_MTX2 = new Matrix2().set(0, -1, 1, 0);\r\nexport function RotateUVs(geo: THREE.Geometry)\r\n{\r\n for (let uvs of geo.faceVertexUvs)\r\n {\r\n for (let uv of uvs)\r\n {\r\n for (let v of uv)\r\n ROTATE_MTX2.applyVector(v);\r\n }\r\n }\r\n geo.uvsNeedUpdate = true;\r\n}\r\n","import { Box3, BufferGeometry, Line3, Matrix3, Matrix4, Object3D, Shape, Line as TLine, 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, MoveMatrix, equaln, equalv3, isParallelTo, updateGeometry } from '../../Geometry/GeUtils';\r\nimport { PlaneExt } from '../../Geometry/Plane';\r\nimport { ROTATE_MTX2 } from '../../Geometry/RotateUV';\r\nimport { IntersectEllipseAndLine, IntersectLineAndArc, IntersectLineAndCircle, IntersectLineAndLine, IntersectOption, IntersectPolylineAndCurve, IntersectResult, 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.GetFirstDeriv(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 GetFirstDeriv(param: number | Vector3): Vector3\r\n {\r\n return this.EndPoint.sub(this.StartPoint);\r\n }\r\n\r\n /**\r\n * 需要注意的是,平行线和共线无交点\r\n * @param curve\r\n * @param intType\r\n * @param [tolerance=1e-4]\r\n * @returns\r\n */\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-4): IntersectResult[]\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.GetFirstDeriv(0).multiplyScalar(param));\r\n }\r\n override GetParamAtPoint(pt: Vector3, fuzz = 1e-5): number\r\n {\r\n let { closestPt, param } = this.GetClosestAtPoint(pt, true);\r\n if (!equalv3(closestPt, pt, fuzz))\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.GetFirstDeriv(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.GetFirstDeriv(0).normalize(), cu.GetFirstDeriv(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 offset = this._EndPoint.clone().sub(this._StartPoint).normalize().multiplyScalar(offsetDist);\r\n ROTATE_MTX2.applyVector(offset);\r\n let newLine = this.Clone() as Line;\r\n newLine.ClearDraw();\r\n newLine._StartPoint.add(offset);\r\n newLine._EndPoint.add(offset);\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 { Pts2Polyline, getArcOrCirNearPts, getDeterminantFor2V, getTanPtsOnEllipse } from '../../Common/CurveUtils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { AsVector2, MoveMatrix, angle, angleTo, equaln, equalv3, rotatePoint } from '../../Geometry/GeUtils';\r\nimport { Matrix2 } from '../../Geometry/Matrix2';\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._endAngle;\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\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 Extend(newParam: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (newParam < 0)\r\n this._startAngle = this.GetAngleAtParam(newParam);\r\n else if (newParam > 1)\r\n this._endAngle = this.GetAngleAtParam(newParam);\r\n this.Update();\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 return this.PtOnEllipse(pt) && this.ParamOnCurve(this.GetParamAtPoint(pt));\r\n }\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\r\n GetPointAtParam(param: number)\r\n {\r\n let an = this.TotalAngle * param + this._startAngle;\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 let mtx = new Matrix2().setRotate(this._rotate);\r\n mtx.applyVector(pt);\r\n return pt.applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n GetParamAtPoint(pt?: Vector3)\r\n {\r\n if (!this.PtOnEllipse(pt)) return NaN;\r\n\r\n let an = this.GetCircleAngleAtPoint(pt);\r\n let allAngle = this.TotalAngle;\r\n let param = an / allAngle;\r\n if (this.IsClose)\r\n return param;\r\n else\r\n {\r\n if (an >= this._startAngle)\r\n param = (an - this._startAngle) / allAngle;\r\n else\r\n param = ((Math.PI * 2) - (this._startAngle - an)) / allAngle;\r\n\r\n //剩余的参数\r\n let remParam = Math.PI * 2 / allAngle - 1;\r\n\r\n if (param > (remParam * 0.5 + 1))//一半\r\n param = (param - 1) - remParam;//返回负数\r\n\r\n return param;\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\r\n GetParamAtDist(d: number)\r\n {\r\n return d / this.Length;\r\n }\r\n\r\n GetAngleAtParam(param: number)\r\n {\r\n return this._startAngle + param * this.TotalAngle;\r\n }\r\n\r\n GetCircleAngleAtPoint(pt: Vector3): number\r\n {\r\n pt = pt.clone().applyMatrix4(this.OCSInv);\r\n let romtx = new Matrix2().setRotate(-this._rotate);\r\n romtx.applyVector(pt);\r\n //https://www.petercollingridge.co.uk/tutorials/computational-geometry/finding-angle-around-ellipse/\r\n let an = Math.atan(this.RadX * pt.y / (this.RadY * pt.x));\r\n\r\n if (pt.x < 0) an += Math.PI;\r\n else if (an < 0) an += Math.PI * 2;\r\n return an;\r\n }\r\n\r\n GetFirstDeriv(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\r\n rotatePoint(vec, this._rotate);\r\n return vec.applyMatrix4(this.OCS.setPosition(0, 0, 0));\r\n }\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.OCSNoClone);\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 ];\r\n for (let p of pts)\r\n p.applyMatrix4(tmpMat4).applyMatrix4(this.OCSNoClone);\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, Material, Matrix3, Matrix4, Object3D, Line as TLine, 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 { GetTanPtsOnArcOrCircle, getArcOrCirNearPts } 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 { AsVector3, MoveMatrix, ZeroVec, angle, equaln, equalv2, polar } from '../../Geometry/GeUtils';\r\nimport { Orbit } from '../../Geometry/Orbit';\r\nimport { IntersectCircleAndArc, IntersectCircleAndCircle, IntersectEllipseAndCircleOrArc, IntersectLineAndCircle, IntersectOption, IntersectPolylineAndCurve, IntersectResult, 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 override IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-5): IntersectResult[]\r\n {\r\n if (curve instanceof Arc)\r\n {\r\n return IntersectCircleAndArc(this, curve, intType, tolerance);\r\n }\r\n if (curve instanceof Line)\r\n {\r\n return SwapParam(IntersectLineAndCircle(curve, this, reverseIntersectOption(intType), tolerance));\r\n }\r\n if (curve instanceof Circle)\r\n {\r\n return IntersectCircleAndCircle(this, curve, tolerance);\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), tolerance));\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 GetFirstDeriv(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 { 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 { BUL_IS_LINE_FUZZ } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector3, equaln } from \"../GeUtils\";\r\n\r\n\r\n\r\n\r\nexport const ARC_DRAW_CONFIG = {\r\n ARC_SplitLength: 0.4,//圆的分段长度\r\n ARC_RADIUS_MIN: 2.5,//大于半径25的自动优化成36等分圆 保证绘制光滑\r\n Arc_MinSplitCount: 8,//圆的最小分段个数\r\n ARC_MaxSplitCount: 90,//圆的最大分段个数\r\n};\r\n\r\n\r\nexport function GetArcDrawCount(arc: Arc | Circle | number): number\r\n{\r\n let radius = typeof arc === \"number\" ? arc : arc.Radius;\r\n let splitCount = radius / ARC_DRAW_CONFIG.ARC_SplitLength;\r\n //保证是偶数(避免奇数和Shape2计算方式一致导致的干涉)\r\n splitCount = clamp(Math.floor(splitCount * 0.5) * 2, ARC_DRAW_CONFIG.Arc_MinSplitCount, ARC_DRAW_CONFIG.ARC_MaxSplitCount);\r\n if (radius > ARC_DRAW_CONFIG.ARC_RADIUS_MIN)\r\n splitCount = Math.max(36, splitCount);\r\n return splitCount;\r\n}\r\n\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 = GetArcDrawCount(cu);\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 (!equaln(cu.GetBulgeAt(i), 0, BUL_IS_LINE_FUZZ))// is arc\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = GetArcDrawCount(arc);\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 = GetArcDrawCount(cu);\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 (!equaln(cu.GetBulgeAt(i), 0, BUL_IS_LINE_FUZZ))// is arc\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = GetArcDrawCount(arc);\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 = GetArcDrawCount(arc);\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 { EllipseCurve, Shape, Vector2 } from \"three\";\r\nimport { GetArcDrawCount } from \"../Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams\";\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: Vector2[] = [],\r\n 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 //根据圆的半径来确定绘制个数(与SplitCurveParams一致)\r\n let splitCount = GetArcDrawCount(tempArc);\r\n\r\n resolution = Math.max(1, Math.ceil(Math.abs((tempArc.AllAngle * 0.5) / Math.PI) * splitCount * 0.5)) * 2;\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 { 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[]): Shape2\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 { Vec2 } from \"./CheckIntersect\";\r\n/*\r\n功能:判断线段是否存在交点\r\nref:https://www.geeksforgeeks.org/check-if-two-given-line-segments-intersect/\r\n*/\r\n\r\n// Given three colinear points p, q, r, the function checks if\r\n// point q lies on line segment 'pr'\r\nfunction onSegment(p: Vec2, q: Vec2, r: Vec2): boolean\r\n{\r\n if (q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) &&\r\n q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y))\r\n return true;\r\n return false;\r\n}\r\n// To find orientation of ordered triplet (p, q, r).\r\n// The function returns following values\r\n// 0 --> p, q and r are colinear\r\n// 1 --> Clockwise\r\n// 2 --> Counterclockwise\r\nexport function orientation(p: Vec2, q: Vec2, r: Vec2): number\r\n{\r\n // See https://www.geeksforgeeks.org/orientation-3-ordered-points/\r\n // for details of below formula.\r\n let val = (q.y - p.y) * (r.x - q.x) -\r\n (q.x - p.x) * (r.y - q.y);\r\n if (val === 0)\r\n return 0; // colinear\r\n return (val > 0) ? 1 : 2; // clock or counterclock wise\r\n}\r\n/**\r\n * 判断线段`p1q1`和线段`p2q2`是否相交.\r\n */\r\nexport function doIntersect(p1: Vec2, q1: Vec2, p2: Vec2, q2: Vec2): boolean\r\n{\r\n // Find the four orientations needed for general and\r\n // special cases\r\n let o1 = orientation(p1, q1, p2);\r\n let o2 = orientation(p1, q1, q2);\r\n let o3 = orientation(p2, q2, p1);\r\n let o4 = orientation(p2, q2, q1);\r\n // General case\r\n if (o1 !== o2 && o3 !== o4)\r\n return true;\r\n // Special Cases\r\n // p1, q1 and p2 are colinear and p2 lies on segment p1q1\r\n if (o1 === 0 && onSegment(p1, p2, q1))\r\n return true;\r\n // p1, q1 and q2 are colinear and q2 lies on segment p1q1\r\n if (o2 === 0 && onSegment(p1, q2, q1))\r\n return true;\r\n // p2, q2 and p1 are colinear and p1 lies on segment p2q2\r\n if (o3 === 0 && onSegment(p2, p1, q2))\r\n return true;\r\n // p2, q2 and q1 are colinear and q1 lies on segment p2q2\r\n if (o4 === 0 && onSegment(p2, q1, q2))\r\n return true;\r\n return false; // Doesn't fall in any of the above cases\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 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 w.curve.TempData = 2;\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 { Box2, 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(bigCurve: Polyline | Circle | Ellipse, smallCurve: Curve)\r\n{\r\n //#fix fileid 2087494 使用二维的box来计算看起来没有问题\r\n if (!Box2.prototype.containsBox.apply(bigCurve.BoundingBox.expandByVector(fuzzV3), [smallCurve.BoundingBox]))\r\n return false;\r\n\r\n let cus: Curve[] = [];\r\n if (smallCurve instanceof Polyline)\r\n cus = smallCurve.Explode();\r\n else\r\n cus = [smallCurve];\r\n\r\n return cus.every(c =>\r\n {\r\n let pts = getIntPtContextPts(bigCurve, c);\r\n if (pts.length <= 1)\r\n pts.push(c.StartPoint, c.EndPoint);\r\n return IsPtsAllInOrOnReg(bigCurve, 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, IntersectResult } 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 = CurveContainerCurve(sourceOutline, targetOutline, interPts);\r\n targetContainerSource = false;\r\n }\r\n else\r\n {\r\n sourceContainerTarget = false;\r\n targetContainerSource = CurveContainerCurve(targetOutline, sourceOutline, interPts);\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, COMBINE_FUZZ);\r\n if (hasEqualCus)\r\n {\r\n //方向相同\r\n if (\r\n equalv3(cu.GetFirstDeriv(cu.MidParam).normalize(), pl.GetFirstDeriv(pl.MidParam).normalize(), 1e-2)\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 let areaState = sourceOutline.Area > targetOutline.Area;\r\n //反包含\r\n if ((!areaState && fastCurveInCurve2(targetOutline, sourceOutline, interPts[0]?.pt)) || equalCurve(targetOutline, sourceOutline))\r\n return [];\r\n //包含\r\n if ((areaState && fastCurveInCurve2(sourceOutline, targetOutline, interPts[0]?.pt)))\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.GetFirstDeriv(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.GetFirstDeriv(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 curveIntParamsMap = 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 let areaState = sourceOutline.Area > targetOutline.Area;\r\n //反包含\r\n if ((!areaState && fastCurveInCurve2(targetOutline, sourceOutline, pts[0]?.pt)) || equalCurve(targetOutline, sourceOutline))\r\n return { holes, subtractList };\r\n //包含\r\n if (areaState && fastCurveInCurve2(sourceOutline, targetOutline, pts[0]?.pt))\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 curveIntParamsMap.set(targetOutline, pts.map(r => r.argParam));\r\n }\r\n }\r\n\r\n let sourceSplitCurves = sourceOutline.GetSplitCurves(intPars) as Polyline[];\r\n let targetSplitCurves: Polyline[] = [];\r\n\r\n let targetSplitCurve_CurvesMap = new WeakMap();//分裂后->原始曲线 映射\r\n\r\n for (let [curve, intParams] of curveIntParamsMap)\r\n {\r\n\r\n let splitCurves = curve.GetSplitCurves(intParams) as Polyline[];\r\n for (let splitCurve of splitCurves)\r\n {\r\n targetSplitCurve_CurvesMap.set(splitCurve, curve);\r\n targetSplitCurves.push(splitCurve);\r\n }\r\n }\r\n\r\n for (let sourceSplitcu of sourceSplitCurves)\r\n {\r\n let index = targetSplitCurves.findIndex(cu => fastEqualCurve(cu, sourceSplitcu, 0.05));\r\n if (index !== -1)\r\n {\r\n let targetSplitcu = targetSplitCurves[index];\r\n let isEqualNormal = equalv3(sourceOutline.Normal, targetSplitCurve_CurvesMap.get(targetSplitcu).Normal, 1e-3);\r\n\r\n if (isEqualNormal === !equalv3(sourceSplitcu.StartPoint, targetSplitcu.StartPoint, 0.05))//不同向\r\n {\r\n subtractList.push(sourceSplitcu);\r\n // TestDraw(sourceSplitcu.Clone(), 1);\r\n // TestDraw(targetSplitcu.Clone(), 1);\r\n }\r\n // else\r\n // TestDraw(sourceSplitcu.Clone(), 2);\r\n\r\n targetSplitCurves.splice(index, 1);\r\n\r\n continue;\r\n }\r\n\r\n if (targets.every(t => !fastCurveInCurve(t.Curve as Polyline, sourceSplitcu)))\r\n subtractList.push(sourceSplitcu);\r\n }\r\n\r\n //源对象没有被破坏\r\n let sourceNotBreak = subtractList.length === sourceSplitCurves.length;\r\n\r\n for (let pl of targetSplitCurves)\r\n if (fastCurveInCurve(sourceOutline, pl))\r\n subtractList.push(pl);\r\n\r\n if (sourceNotBreak && subtractList.length === sourceSplitCurves.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[], -Math.log10(COMBINE_FUZZ));\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, -Math.log10(tolerance)) : [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\r\n /**\r\n * 判断是否完全包含曲线\r\n * @param smallCurve 传入的这个曲线不能比本轮廓还大(这个需要自己优化?)\r\n * @returns\r\n */\r\n ContainerCurve(smallCurve: Polyline | Circle | Curve, isAreaCheckd = false, ipts: IntersectResult[] = undefined): boolean\r\n {\r\n if (!isAreaCheckd && this.Area < smallCurve.Area)\r\n return false;\r\n return CurveContainerCurve(this._Curve, smallCurve, ipts);\r\n }\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 = 5e-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 * 对于双多段线互相切割后的结果(或者交点个数为0),快速判断曲线是否在另一条曲线内部\r\n * @param bigCurve\r\n * @param smallCurve\r\n * @returns\r\n */\r\nfunction fastCurveInCurve(bigCurve: Polyline | Circle, smallCurve: Curve): boolean\r\n{\r\n return bigCurve.PtInCurve(smallCurve.Midpoint);\r\n}\r\n\r\n//当交点小于等于1时\r\nexport function fastCurveInCurve2(bigCurve: Polyline | Circle, smallCurve: Curve, iPt?: Vector3)\r\n{\r\n if (iPt)//提高准确性,避免使用交点去判断 导致的错误\r\n {\r\n let sp = smallCurve.StartPoint;;\r\n if (equalv3(sp, iPt, 1e-3))\r\n return bigCurve.PtInCurve(smallCurve.Midpoint);\r\n else\r\n return bigCurve.PtInCurve(smallCurve.StartPoint);\r\n }\r\n else\r\n return bigCurve.PtInCurve(smallCurve.Midpoint) || bigCurve.PtInCurve(smallCurve.StartPoint);\r\n}\r\n\r\n//大曲线是否完全包含小曲线(或者重合)\r\nexport function CurveContainerCurve(bigCurve: Polyline | Circle, smallCurve: Polyline | Circle | Curve, ipts: IntersectResult[] = undefined, fuzz = COMBINE_FUZZ)\r\n{\r\n if (!ipts)\r\n ipts = bigCurve.IntersectWith2(smallCurve, IntersectOption.ExtendNone, fuzz);\r\n\r\n if (ipts.length === 0)\r\n return fastCurveInCurve(bigCurve, smallCurve);\r\n else if (ipts.length === 1)\r\n return fastCurveInCurve2(bigCurve, smallCurve, ipts[0].pt);\r\n else\r\n return isTargetCurInOrOnSourceCur(bigCurve, smallCurve);\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort } 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 { AsVector2, IdentityMtx4, SelectNearP, angle, equaln, equalv2, equalv3 } 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 /**偏移距离(仅在局部偏移时提供) */\r\n dist?: number;\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.IntersectWith2(contour.Curve, IntersectOption.ExtendNone)\r\n .map(p => p.thisParam);\r\n\r\n //#region 交点参数优化,避免出现无意义长度的曲线被移除 CurveIsFine\r\n let length = this.curve.Length;\r\n if (!(this.curve instanceof Circle))\r\n iParams.push(0, 1);\r\n iParams.sort((e1, e2) => e1 - e2);\r\n if (this.curve instanceof Arc || this.curve instanceof Circle)\r\n {\r\n let allAngle = this.curve instanceof Circle ? Math.PI * 2 : this.curve.AllAngle;\r\n arrayRemoveDuplicateBySort(iParams, (p1, p2) =>\r\n {\r\n return allAngle * (p2 - p1) < ARC_MIN_ALLANGLE || length * (p2 - p1) < CURVE_MIN_LENGTH;\r\n });\r\n }\r\n else\r\n {\r\n arrayRemoveDuplicateBySort(iParams, (p1, p2) =>\r\n {\r\n return length * (p2 - p1) < CURVE_MIN_LENGTH;\r\n });\r\n }\r\n\r\n if (!(this.curve instanceof Circle))\r\n {\r\n iParams.shift();//remove 0\r\n iParams.pop(); //remove 1 or 0.9999\r\n }\r\n //#endregion\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 enum PolylineJoinType\r\n{\r\n Square = 0,\r\n Round = 1,\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 _IsTopoOffset = false;//局部偏移,允许特殊延伸,参考测试用例\r\n\r\n /**\r\n *\r\n * @param _Polyline\r\n * @param _OffsetDist\r\n * @param [_ToolPath=false] 走刀模式(在这个模式下,我们会进行圆弧过渡(或者直线过渡)避免尖角过大)\r\n * @param [_OffsetDistSq=(_OffsetDist ** 2) * 2.1] 允许的最大尖角长度 默认值差不多是矩形的尖角大一点\r\n * @param [_JoinType=PolylineJoinType.Round] 尖角的处理方式,默认是圆弧过渡,可以切换成直线过渡\r\n */\r\n constructor(public _Polyline: Polyline, public _OffsetDist: number, public _ToolPath = false,\r\n private _OffsetDistSq = (_OffsetDist ** 2) * 2.1,//对直角走刀不进行圆弧过度\r\n private _JoinType = PolylineJoinType.Round //仅在走刀路径时生效\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\r\n // for (let c of this._SubOffsetedCurves)\r\n // {\r\n // TestDraw(c.curve.Clone(), 1);\r\n // if (c.paddingCurve)\r\n // for (let cc of c.paddingCurve)\r\n // TestDraw(cc.Clone(), 2);\r\n // }\r\n // for (let c of this._TrimPolylineContours)\r\n // {\r\n // TestDraw(c.Curve.Clone(), 3);\r\n // }\r\n\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);//TODO: 简化这个 并且生成圆 顶点 圆\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 iPtsP = curveNow.IntersectWith2(curveNext, IntersectOption.ExtendBoth, 1e-6);\r\n let iPts = iPtsP.map(p => p.pt);\r\n let tPts = iPtsP.filter(p => curveNow.ParamOnCurve(p.thisParam) && curveNext.ParamOnCurve(p.argParam)).map(p => p.pt);\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 (this._IsTopoOffset && tPts.length === 0 && curveResNow.dist !== curveResNext.dist)\r\n tPts = iPts;\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 && iPtsP[0].thisParam > 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 if (this._JoinType === PolylineJoinType.Round)\r\n curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)];\r\n else\r\n curveResNow.paddingCurve = [this.CreateSquare(refP, curveResNow, curveResNext, code)];//补直线\r\n\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\r\n //在局部偏移中,当偏移距离不一致时,我们总是倾向于直接连接\r\n if (this._IsTopoOffset && tPts.length === 0 && curveResNow.dist !== curveResNext.dist)\r\n {\r\n if (iPts.length)\r\n tPts = iPts;\r\n else\r\n {\r\n curveResNow.paddingCurve = [new Line(sp, ep)];//补直线\r\n continue;\r\n }\r\n }\r\n\r\n if (tPts.length > 0) //ipts = 1 or ipts = 2\r\n tp = SelectNearP(tPts, refP);\r\n else //补圆弧 或者尝试连接\r\n {\r\n if (iPts.length > 0 && !this._ToolPath && this.IsSharpCorner(curveResNow, curveResNext))//非加工刀路 并且尖角化(谷)时\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 = [this.CreateArc(refP, sp, ep)];//补圆弧\r\n }\r\n else\r\n {\r\n if (this._JoinType === PolylineJoinType.Round)\r\n curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)];//补圆弧\r\n else\r\n {\r\n curveResNow.paddingCurve = [this.CreateSquare(refP, curveResNow, curveResNext, code)];//补直线\r\n }\r\n }\r\n\r\n let circle = this._Circles[curveResNext.index];\r\n if (circle) this._TrimCircleContours.push(circle);//因为局部偏移可能未提供圆\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 circle = this._Circles[s];\r\n if (circle)//因为局部偏移可能未提供圆\r\n {\r\n this._TrimCircleContours.push(circle);\r\n padCirs.push(circle);\r\n }\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 * 在\r\n * 1.直线和圆弧,圆弧和圆弧\r\n * 2.有交点,无真交点时\r\n * 必须在正确的方向做出延伸动作,所以必须在尖角的情况下延伸,偏移的结果就像一个谷字去掉一个口的结果,上面的人就是偏移后的结果.\r\n * 如果是谷,则允许连接 #I7WKKG\r\n */\r\n private IsSharpCorner(curveResNow: IOffsetResult, curveResNext: IOffsetResult): boolean\r\n {\r\n let v1 = this._SubCurves[curveResNow.index].GetFirstDeriv(1);\r\n let v2 = this._SubCurves[curveResNext.index].GetFirstDeriv(0);\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, isJoinEnd = true): 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 minDist = 0;\r\n break;\r\n }\r\n }\r\n\r\n if (minR && Math.sqrt(minDist) < 0.085)\r\n {\r\n used.add(minR.curve);\r\n preP = minR.e;\r\n\r\n // let status = pl.Join(minR.curve, false, 8e-2);\r\n // if (status !== Status.True)\r\n // console.warn(\"连接失败\");\r\n\r\n //#region fast join (为了避免Polyline.Join 导致的顺序错误)\r\n let cu = minR.curve;\r\n\r\n //bul\r\n let bul = 0;\r\n if (cu instanceof Arc)\r\n {\r\n bul = cu.Bul;\r\n if (minR.isReverse)\r\n bul *= -1;\r\n\r\n if (!isJoinEnd)\r\n bul *= -1;\r\n }\r\n\r\n if (pl.LineData.length === 0)\r\n {\r\n pl.LineData.push({\r\n pt: AsVector2(minR.s),\r\n bul: bul\r\n });\r\n }\r\n\r\n if (isJoinEnd)\r\n {\r\n pl.LineData[pl.LineData.length - 1].bul = bul;\r\n pl.LineData.push({\r\n pt: AsVector2(minR.e),\r\n bul: 0\r\n });\r\n }\r\n else\r\n {\r\n pl.LineData.unshift({\r\n pt: AsVector2(minR.e),\r\n bul\r\n });\r\n }\r\n //#endregion\r\n\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, true);\r\n ss = s;\r\n preP = pl.StartPoint;\r\n while (ss && !pl.IsClose)\r\n ss = searchNext(ss, pl, false);\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.GetFirstDeriv(0).normalize(), preCurve.GetFirstDeriv(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.GetFirstDeriv(1).normalize(), nextCurve.GetFirstDeriv(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.GetFirstDeriv(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 protected CreateSquare(center: Vector3, curveNow: IOffsetResult, curveNext: IOffsetResult, entTypeCode: number)\r\n {\r\n const arc = this.CreateArc(center, curveNow.curve.EndPoint, curveNext.curve.StartPoint);\r\n const centerPoint = arc.GetPointAtParam(0.5);\r\n const tangentLine = new Line(centerPoint, arc.GetFirstDeriv(0.5).add(centerPoint)); //切线\r\n\r\n let ep: Vector3, sp: Vector3;\r\n if (entTypeCode === 1)\r\n {\r\n ep = tangentLine.IntersectWith(curveNow.curve, IntersectOption.ExtendBoth)[0]; //第一条线新的终点坐标\r\n sp = centerPoint.multiplyScalar(2).sub(ep);\r\n }\r\n else// if (entTypeCode === 0)//全圆弧 直线和圆弧\r\n {\r\n ep = SelectNearP(tangentLine.IntersectWith(curveNow.curve, IntersectOption.ExtendBoth), center); //第一条线新的终点坐标\r\n sp = SelectNearP(tangentLine.IntersectWith(curveNext.curve, IntersectOption.ExtendBoth), center);\r\n }\r\n\r\n curveNow.ep = ep;\r\n curveNext.sp = sp;\r\n\r\n return new Line(ep, sp);\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\r\nconst CURVE_MIN_LENGTH = 5e-5;\r\nconst ARC_MIN_ALLANGLE = 2e-6;\r\n//表示这个是一个正常的曲线,不是0长度的线,也不是0长度的圆弧\r\nexport function CurveIsFine(curve: Curve)\r\n{\r\n if (curve instanceof Arc && curve.AllAngle < ARC_MIN_ALLANGLE) return false;\r\n return curve.Length > CURVE_MIN_LENGTH;\r\n}\r\n","import { Vec2, Vector3 } from 'three';\r\nimport { angle, equaln, equalv2 } from '../Geometry/GeUtils';\r\nimport { IntersectOption } from '../GraphicsSystem/IntersectWith';\r\nimport { Arc } from './Entity/Arc';\r\nimport { Line } from './Entity/Line';\r\nimport { BUL_IS_LINE_FUZZ, 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 * 判断点在多段线内外(如果点在线上 则返回false)\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, BUL_IS_LINE_FUZZ))//直线\r\n {\r\n let sp = pl.GetPointAtParam(i);\r\n let ep = pl.GetPointAtParam(i + 1);\r\n\r\n if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5))//在起点或者终点\r\n return false;\r\n\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 {\r\n if (equaln(pt.x, ep.x, 1e-5)\r\n && (pt.y > Math.min(sp.y, ep.y) - 1e-5 && pt.y < Math.max(sp.y, ep.y) + 1e-5))\r\n return false;//点在线上\r\n continue;\r\n }\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 let iptY = (pt.x - sp.x) * k + sp.y;\r\n if (equaln(iptY, pt.y, 1e-5))//点在线上 返回false\r\n return false;\r\n if (iptY > 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 if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5))//在起点或者终点\r\n return false;\r\n\r\n let center = arc.Center;\r\n //如果相切\r\n if (equaln(Math.abs(pt.x - center.x), arc.Radius))\r\n {\r\n //点在线上\r\n if (equaln(pt.y, center.y) && arc.ParamOnCurve(arc.GetParamAtPoint2(pt)))\r\n return false;\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.GetFirstDeriv(0).normalize();\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.GetFirstDeriv(1).normalize();\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 (equalv2(pti, pt, 1e-5))//点在线上 返回false\r\n return false;\r\n\r\n //交点在点下 交点在起点? 交点在终点?\r\n if (pti.y + 1e-5 < pt.y || equalv2(sp, pti, 1e-5) || equalv2(ep, pti, 1e-5))\r\n continue;\r\n\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: number;\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, 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, MatrixIsIdentityCS, equaln, equalv2, equalv3 } from '../../Geometry/GeUtils';\r\nimport { IntersectOption, IntersectPolylineAndCurve } from '../../GraphicsSystem/IntersectWith';\r\nimport { OffsetPolyline, PolylineJoinType } from '../../GraphicsSystem/OffsetPolyline';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { IsPointInPolyLine } from '../PointInPolyline';\r\nimport { Shape2 } from '../Shape2';\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\nexport const BUL_IS_LINE_FUZZ = 1e-5;\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 /**\r\n * 删除重复点\r\n * @param [fuzz=0.1] 容差=0.1\r\n */\r\n RemoveRepeatPos(fuzz = 0.1)\r\n {\r\n let index = 0;\r\n let pre = 0;\r\n let writed = false;\r\n for (let next = 1; next <= this._LineData.length; next++)\r\n {\r\n if ((!this._ClosedMark && next === this._LineData.length) ||//如果曲线没闭合 则总是保留最后一个点\r\n !equalv2(this._LineData[pre].pt, this._LineData[FixIndex(next, this._LineData)].pt, fuzz))\r\n {\r\n if (!writed)\r\n {\r\n this.WriteAllObjectRecord();\r\n writed = true;\r\n }\r\n\r\n this._LineData[index] = this._LineData[pre];\r\n index++;\r\n }\r\n pre++;\r\n }\r\n\r\n if (equalv2(this._LineData[0].pt, this._LineData[index - 1].pt, fuzz))\r\n this._LineData[index - 1].pt.copy(this._LineData[0].pt);\r\n\r\n this._LineData.length = index;\r\n this.Update();\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: (Line | Arc)[] = [];\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let cu = this.GetCurveAtIndex(i);\r\n let len = cu.Length;\r\n if (len < 1e-6) continue;\r\n\r\n cus.push(cu);\r\n\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\r\n dist -= len;\r\n }\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 GetFirstDeriv(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.GetFirstDeriv(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 let x = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 0);\r\n let y = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 1);\r\n let cuZ = x.cross(y);\r\n\r\n let dir = equalv3(this.Normal, cuZ, 1e-4) ? 1 : -1;\r\n let bul = cu.Bul * dir;\r\n\r\n this._LineData.push({ pt: cuSp2, bul: 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 (epspDisSq < minDis)\r\n {\r\n linkType = LinkType.EpSp;\r\n minDis = epspDisSq;\r\n }\r\n\r\n if (epepDisSq < minDis)\r\n {\r\n linkType = LinkType.EpEp;\r\n minDis = epepDisSq;\r\n }\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 (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 x = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 0);\r\n let y = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 1);\r\n let cuZ = x.cross(y);\r\n\r\n let dir = equalv3(this.Normal, cuZ, 1e-4) ? 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 {\r\n let status = pl.Join(cu, false, 0.1);\r\n // if (status === Status.False)\r\n // console.log();\r\n }\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 /**首尾相连的曲线直接连接 */\r\n static FastCombine(curves: Curve[], tolerance = 1e-5, computOCS = true): Polyline | undefined\r\n {\r\n if (!curves || curves.length === 0) return;\r\n\r\n let pl = new Polyline;\r\n if (computOCS)\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 override PtOnCurve(pt: 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.PtOnCurve(pt, fuzz))\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, joinType: PolylineJoinType = PolylineJoinType.Round): Polyline[]\r\n {\r\n if (equaln(offsetDist, 0)) return [];\r\n let polyOffestUtil = new OffsetPolyline(this, offsetDist, true, offsetDistSq, joinType);\r\n return polyOffestUtil.Do();\r\n }\r\n /**\r\n * 分解\r\n */\r\n Explode(): (Line | Arc)[]\r\n {\r\n let exportCus: (Line | Arc)[] = [];\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): Line | Arc\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: Line | Arc;\r\n if (equaln(d1.bul, 0, BUL_IS_LINE_FUZZ))\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 override 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.GetFirstDeriv(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.GetFirstDeriv(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 SetPtsBuls(pts: Vector2[], buls: number[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.length = 0;\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let pt = pts[i];\r\n let bul = buls[i];\r\n\r\n this._LineData.push({ pt, bul });\r\n }\r\n this.Update();\r\n return this;\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(): Shape2\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 // if (this._LineData.length === 0)\r\n // this.Erase();\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 { clamp } from '../Common/Utils';\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, equalv2, 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, tolerance = 1e-4): IntersectResult[]\r\n{\r\n if (!cu1.IsCoplaneTo(cu2)) return [];\r\n\r\n let c1OcsInv = cu1.OCSInv;\r\n let c1Ocs = cu1.OCSNoClone;\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, tolerance)) 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, tolerance))//防止点重复\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, tolerance);\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, tolerance = 1e-6): 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, tolerance))\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, tolerance);\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, tolerance);\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 //v1 p1->p2\r\n //v2 p3->p4\r\n\r\n //v3 p2->p4\r\n\r\n let dx1 = p1.x - p2.x;//v1\r\n let dx2 = p3.x - p4.x;//v2\r\n let dx3 = p4.x - p2.x;//v3\r\n\r\n let dy1 = p1.y - p2.y;//v1\r\n let dy2 = p3.y - p4.y;//v2\r\n let dy3 = p4.y - p2.y;//v3\r\n\r\n let det = (dx2 * dy1) - (dy2 * dx1);//v1.cross(v2) 叉积 几何意义是平行四边形的面积\r\n\r\n let v2Length = Math.sqrt(dx2 * dx2 + dy2 * dy2);\r\n\r\n if (equaln(det / v2Length, 0.0, 1e-5))//平行 1e-5是平行四边形的高\r\n {\r\n let det2 = (dx2 * dy3) - (dy2 * dx3);\r\n if (equaln(det2 / v2Length, 0.0, 1e-5))//共线 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 //暂时没有必要\r\n // let cu1EndPoint = cu1.EndPoint;\r\n // for (let i = 0; i < ptPars.length; i++)\r\n // if (equalv3(ptPars[i].pt, cu1EndPoint, tolerance))\r\n // ptPars[i].thisParam = 1;//如果通过容差测试,我们认为它在终点上\r\n\r\n ptPars = ptPars.filter(res => res.thisParam <= 1);\r\n }\r\n else if (isEnd)\r\n {\r\n //暂时没有必要\r\n // let cu1StartPoint = cu1.StartPoint;\r\n // for (let i = 0; i < ptPars.length; i++)\r\n // if (equalv3(ptPars[i].pt, cu1StartPoint, tolerance))\r\n // ptPars[i].thisParam = 0;//如果通过容差测试,我们认为它在起点上\r\n\r\n ptPars = ptPars.filter(res => res.thisParam >= 0);\r\n }\r\n }\r\n else //当曲线不延伸时,它通过了容差测验,这时我们认为曲线在线上\r\n for (let i = 0; i < ptPars.length; i++)\r\n ptPars[i].thisParam = clamp(ptPars[i].thisParam, 0, 1);\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 else //当曲线不延伸时,它通过了容差测验,这时我们认为曲线在线上\r\n for (let i = 0; i < ptPars.length; i++)\r\n ptPars[i].argParam = clamp(ptPars[i].argParam, 0, 1);\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\r\n let fn = ComparePointFnGenerate(\"xyz\", tolerance);\r\n intRes.sort((p1, p2) => fn(p1.pt, p2.pt));\r\n arrayRemoveDuplicateBySort(intRes, (p1, p2) => equalv3(p1.pt, p2.pt, tolerance));\r\n\r\n return intRes;\r\n}\r\n\r\nexport function IntersectLineAndEllipseFor2D(l: Line, el: Ellipse)\r\n{\r\n let elInv = new Matrix4().makeRotationZ(-el.Rotation).multiply(el.OCSInv);\r\n let matInv = new Matrix4().getInverse(elInv);\r\n\r\n let a = el.RadX;\r\n let b = el.RadY;\r\n let sp = l.StartPoint.applyMatrix4(elInv);\r\n let ep = l.EndPoint.applyMatrix4(elInv);\r\n\r\n if (!(equaln(sp.z, 1e-6) && equaln(ep.z, 1e-6)))\r\n {\r\n if (equalv2(sp, ep, 1e-6))//如果与之垂直\r\n {\r\n let p = sp.setZ(0).applyMatrix4(matInv);\r\n if (el.PtOnCurve(p))\r\n return [\r\n {\r\n pt: p,\r\n thisParam: l.GetParamAtPoint(p),\r\n argParam: el.GetParamAtPoint(p)\r\n }\r\n ];\r\n }\r\n //todo:求交面\r\n return [];\r\n }\r\n\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 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 { GetTanPtsOnArcOrCircle, getArcOrCirNearPts, getCircleCenter } from '../../Common/CurveUtils';\r\nimport { SetMtxVector, TransformVector, reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { AsVector3, MoveMatrix, ZeroVec, angle, clampRad, equaln, equalv2, equalv3, polar } from '../../Geometry/GeUtils';\r\nimport { Orbit } from '../../Geometry/Orbit';\r\nimport { IntersectArcAndArc, IntersectCircleAndArc, IntersectEllipseAndCircleOrArc, IntersectLineAndArc, IntersectOption, IntersectPolylineAndCurve, IntersectResult, 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): IntersectResult[]\r\n {\r\n if (curve instanceof Arc || curve.constructor.name === \"RoomWallArc\")\r\n {\r\n return IntersectArcAndArc(this, curve as Arc, intType, tolerance);\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 * @param {number} endAngle 结束的角度\r\n */\r\n ComputeAnlge(endAngle: number): 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 GetFirstDeriv(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.ReadBool();\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.WriteBool(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 { Box2, 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 { BUL_IS_LINE_FUZZ, 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, XAxis, YAxis, ZAxis, ZeroVec, equaln, equalv2, equalv3, isIntersect, isParallelTo } from '../Geometry/GeUtils';\r\nimport { Vec3 } from '../Geometry/IVec3';\r\nimport { Matrix2 } from '../Geometry/Matrix2';\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[], numdimensions = 4): 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 const fuzz = 5 * Math.pow(0.1, numdimensions);\r\n //曲线节点图\r\n let cuMap = new CurveMap(numdimensions);\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, fuzz))\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, fuzz))\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 //最近点\r\n let cp = cu.GetClosestPointTo(pt, false);\r\n if (equalv3(cp, pt, 1e-6)) return 0;\r\n //最近点的切线\r\n let deriv = cu.GetFirstDeriv(cu.GetParamAtPoint(cp));\r\n let vec2 = pt.clone().sub(cp);\r\n let cross = deriv.cross(vec2).applyMatrix4(cu.OCSInv.setPosition(0, 0, 0));\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.GetFirstDeriv(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 size: Vector3;\r\n box: Box3;\r\n OCS: Matrix4;\r\n}\r\n\r\n/**\r\n * 判断多段线是不是矩形\r\n * 因为用户画的垃圾图,所以我们会给容差\r\n * 1.简化点表成4个点\r\n * -得到x向量,构建二维旋转矩阵\r\n * -所有的点旋转\r\n * 2.构建box\r\n * 3.4个点都在盒子里,面积是矩形\r\n * @param cu\r\n */\r\nexport function IsRect(cu: Curve): IRectInfo | undefined\r\n{\r\n if (cu instanceof Polyline)\r\n {\r\n //如果不封闭(就不是矩形)\r\n if (!cu.IsClose) return;\r\n\r\n //如果点个数小于4(就不是矩形)\r\n if (cu.LineData.length < 4) return;\r\n\r\n //如果有圆弧(就不是矩形)\r\n for (let i = 0; i < cu.LineData.length; i++)\r\n {\r\n let d = cu.LineData[i];\r\n if (equaln(d.bul, 0, BUL_IS_LINE_FUZZ))\r\n continue;\r\n let next = FixIndex(i + 1, cu.LineData);\r\n if (equalv2(d.pt, cu.LineData[next].pt))\r\n continue;\r\n return;\r\n }\r\n\r\n let pts2d = cu.LineData.map(d => d.pt);\r\n\r\n //去除重复点\r\n arrayRemoveDuplicateBySort(pts2d, (p1, p2) => equalv2(p1, p2));\r\n if (equalv2(pts2d[0], pts2d[pts2d.length - 1]))\r\n pts2d.pop();\r\n\r\n //这里我们判断它是不是有4个90度的角,并且有4个点\r\n let preV = pts2d[0].clone().sub(pts2d[pts2d.length - 1]).negate();//preVector\r\n let preL = preV.length();//preLength\r\n let nowV = new Vector2;//nowVector\r\n let crossV = 0;//永远相同方向的90度,如果不是(就不是矩形)\r\n\r\n let pts4: Vector2[] = [];//简化成4个点\r\n\r\n for (let i = 0; i < pts2d.length; i++)\r\n {\r\n nowV.subVectors(pts2d[FixIndex(i + 1, pts2d.length)], pts2d[i]);\r\n\r\n let cross = preV.cross(nowV) / preL;\r\n\r\n let nowL = nowV.length();//nowLength\r\n\r\n if (equaln(cross, 0, 0.01))//平行 此时的cross = 三角形的高(其中preL是三角形的底边) 我们认为它移动了0.01是可以接受的\r\n continue;//TODOX:我们可能要合并这条线? 把preV preL更新一下?\r\n\r\n cross /= nowL;//此时的cross = sin@\r\n\r\n //如果不等于90度(就不是矩形)\r\n if (!equaln(Math.abs(cross), 1, 1e-5))\r\n return;\r\n\r\n cross = Math.sign(cross);\r\n\r\n if (!crossV)\r\n crossV = cross;\r\n else if (crossV !== cross)//如果方向不一致(没有绕着90度)(就不是矩形)\r\n return;\r\n\r\n pts4.push(pts2d[i]);\r\n if (pts4.length > 4)//如果超过4个点(就不是矩形)\r\n return;\r\n\r\n preL = nowL;\r\n preV.copy(nowV).negate();//翻转它 以便下一次计算\r\n }\r\n\r\n if (pts4.length !== 4 || !crossV)//没有90度 (就不是矩形)\r\n return;\r\n\r\n let rectOCS: Matrix4;\r\n\r\n preV.subVectors(pts4[1], pts4[0]);\r\n let box = new Box2;\r\n if (equaln(preV.x, 0, 1e-3) || equaln(preV.y, 0, 1e-3))//判断是不是与X轴平行或者与Y轴平行,精度容差在0.001 看起来没问题\r\n {\r\n rectOCS = cu.OCS;\r\n box.setFromPoints(pts4);\r\n }\r\n else//如果矩形不与X轴平行,我们旋转这个点表,然后变换它\r\n {\r\n let a = Math.atan2(preV.y, preV.x);\r\n let r = new Matrix2().setRotate(-a);\r\n\r\n let p0 = pts4[0];\r\n pts4 = pts4.map(p =>\r\n {\r\n p = p.clone().sub(p0);\r\n r.applyVector(p);\r\n return p;\r\n });\r\n box.setFromPoints(pts4);\r\n\r\n nowV.set(-preV.y, preV.x);//旋转90度\r\n\r\n rectOCS = new Matrix4().makeBasis(\r\n AsVector3(preV.normalize()),\r\n AsVector3(nowV.normalize()),\r\n ZAxis,\r\n ).setPosition(p0.x, p0.y, 0);\r\n\r\n rectOCS.multiplyMatrices(cu.OCSNoClone, rectOCS);\r\n }\r\n\r\n //4个点都在角上\r\n if (!pts4.every(p =>\r\n {\r\n return (equaln(p.x, box.min.x, 0.01) || equaln(p.x, box.max.x, 0.01))\r\n && (equaln(p.y, box.min.y, 0.01) || equaln(p.y, box.max.y, 0.01));\r\n }))\r\n return;\r\n\r\n let size = box.getSize(new Vector2);\r\n\r\n return {\r\n size: AsVector3(size),\r\n box: new Box3(AsVector3(box.min), AsVector3(box.max)),\r\n OCS: rectOCS,\r\n };\r\n }\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.GetFirstDeriv(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.GetFirstDeriv(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\nconst PolylineSpliteRectFuzz = 1e-3;\r\n/**封闭多段线 分割成矩形 */\r\nexport function PolylineSpliteRect(outline: Polyline): Polyline[]\r\n{\r\n if (!outline.IsClose || IsRect(outline))\r\n return [outline];\r\n\r\n let firstDerv = outline.GetFirstDeriv(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.GetFirstDeriv(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.GetFirstDeriv(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","/**\r\n *勿随意更改属性名,若更改,需更改对应UI模态框的属性和检验方法的key\r\n *\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\n//偏心轮类型\r\n// 左右侧板 Font朝向柜内 Back朝向柜外\r\n// 顶底板 Font朝向柜外 Back两面朝下 Inside朝向柜内\r\nexport enum FaceDirection\r\n{\r\n Front = 0,\r\n Back = 1,\r\n Inside = 2\r\n}\r\n","export enum LogType\r\n{\r\n Error = \"ERROR\",\r\n Warning = \"WARNING\",\r\n Info = \"INFO\",\r\n Command = \"COMMAND\",\r\n All = \"ALL\",\r\n}\r\n\r\ntype LogFunction = (message?: any, ...optionalParams: any[]) => void;\r\n\r\nexport const _LogInjectFunctions: LogFunction[] = [];\r\n\r\n//Log(`板:${br.Name}没有提供排钻信息!`, LogType.Warning, [br]);\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 _LogInjectInteractionFunctions: LogFunction[] = [];\r\n\r\n//InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: \"侧孔与板无交点,无法加工该侧孔!\" }], LogType.Warning);\r\nexport function InteractionLog(message?: any, ...optionalParams: any[]): void\r\n{\r\n for (let f of _LogInjectInteractionFunctions)\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","\r\n\r\nlet instanceMap = new Map();\r\n\r\nexport interface PrototypeType extends Function\r\n{\r\n prototype: T;\r\n}\r\n\r\nexport interface ConstructorFunctionType extends PrototypeType\r\n{\r\n new(...args: any[]): T;\r\n}\r\n\r\nexport type ConstructorType = PrototypeType> = (ConstructorFunctionType | PrototypeType) & {\r\n [Key in keyof Static]: Static[Key];\r\n};\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 //ref:https://github.com/Microsoft/TypeScript/issues/5863\r\n static GetInstance(this: ConstructorType): T\r\n {\r\n if (instanceMap.has(this))\r\n return instanceMap.get(this);\r\n //@ts-ignore\r\n let __instance__ = new this.prototype.constructor();\r\n instanceMap.set(this, __instance__);\r\n return __instance__;\r\n }\r\n}\r\n","import { Geometry, Matrix4, Vector3 } from \"three\";\r\n\r\nexport function ScaleUV(geo: Geometry, scale = 1e-3)\r\n{\r\n for (let uvsg of geo.faceVertexUvs)\r\n {\r\n for (let uvs of uvsg)\r\n {\r\n for (let uv of uvs)\r\n {\r\n uv.multiplyScalar(scale);\r\n }\r\n }\r\n }\r\n}\r\nexport function ScaleUV2(geo: Geometry, ocs: Matrix4, xScale = 1e-3, yScale = 1e-3, isInvert = false)\r\n{\r\n for (let uvsg of geo.faceVertexUvs)\r\n {\r\n for (let uvs of uvsg)\r\n {\r\n for (let uv of uvs)\r\n {\r\n let p = new Vector3(uv.x, uv.y).applyMatrix4(ocs);\r\n uv.x = p.x;\r\n uv.y = p.y;\r\n if (isInvert)\r\n {\r\n uv.x /= yScale;\r\n uv.y /= xScale;\r\n }\r\n else\r\n {\r\n uv.x /= xScale;\r\n uv.y /= yScale;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","import { 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 constructor(\r\n private _Outline: Contour = new Contour,\r\n private _Holes: Contour[] = []\r\n )\r\n {\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(con: Contour)\r\n {\r\n this._Outline = con;\r\n }\r\n set Holes(holes: Contour[])\r\n {\r\n this._Holes = holes;\r\n }\r\n\r\n get Shape(): TShape\r\n {\r\n let 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 shape.holes.push(sp);\r\n }\r\n else\r\n shape.holes.push(h.Shape);\r\n }\r\n\r\n return shape;\r\n }\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].ContainerCurve(cu.Curve, true));\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.ContainerCurve(con.Curve, true);\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.ContainerCurve(h.Curve, true));\r\n }\r\n return holes;\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\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[] | (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 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 ClearDraw(): this\r\n {\r\n this.UpdateDrawGeometry();\r\n return super.ClearDraw();\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.GetFirstDeriv(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 PaperName = \"paperName\",\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 Remarks = \"remarks\",//备注\r\n ExtraRemarks = \"extraRemarks\",//追加备注\r\n OpenDir = \"openDir\", //开门方向\r\n GroovesAddLength = \"GroovesAddLength\", //槽加长\r\n GroovesAddWidth = \"GroovesAddWidth\", //槽加宽\r\n GroovesAddDepth = \"GroovesAddDepth\", //槽加深\r\n FrontDrill = \"frontDrill\",//正面排孔\r\n BackDrill = \"backDrill\",//反面排孔\r\n}\r\n","import { Vector3 } from \"three\";\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 { BoardProcessOption } from \"../../UI/Store/OptionInterface/BoardProcessOption\";\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\nimport { GangDrillType } from './CylinderHole';\r\n\r\n@Factory\r\nexport abstract 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 protected type: GangDrillType = GangDrillType.Pxl;\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\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 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, FrontSide, 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 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\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\r\n InitDrawObject(renderType: RenderType)\r\n {\r\n return this.GetObject3DByRenderType(renderType);\r\n }\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 if (renderType === RenderType.CustomNumber || renderType === RenderType.ModelGroove)\r\n return;//不绘制了\r\n // return new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex, FrontSide, true));\r\n else\r\n return new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n }\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\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 if (type === RenderType.CustomNumber || type === RenderType.ModelGroove)\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex, FrontSide, true);\r\n else\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n\r\n ClearDraw(): this\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 return super.ClearDraw();\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\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 { 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 { Box3Ext } from \"../../Geometry/Box\";\r\nimport { ZAxis, isParallelTo, rotatePoint } from \"../../Geometry/GeUtils\";\r\nimport { DrillType } from \"./DrillType\";\r\n\r\nexport const SCALAR = 0.1;\r\n\r\nexport function CyHoleInBoard(cys: CylinderHole[], br: Board, ocs: Matrix4, checkAll = false, allowPxl = false)\r\n{\r\n if (!checkAll && 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 Box3Ext();\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, 1e-5))\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 (allowPxl || !HostApplicationServices.forceFilterPxl)\r\n return outline.IntersectWith(cir, 0).length <= 1 && !outline.PtInCurve(center);\r\n else\r\n return outline.IntersectWith(cir, 0).length > 0 || !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\n/**\r\n * 板的排钻 <上下左右>\r\n */\r\nexport interface IBoardRectHoleType\r\n{\r\n up: string;\r\n down: string;\r\n left: string;\r\n right: string;\r\n}\r\n\r\n/**分析上下左右排钻 */\r\nexport function ParseBoardRectHoleType(br: Board, outBrRectHoleType: IBoardRectHoleType = {} as any)\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.GetFirstDeriv(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 outBrRectHoleType.down = hightDrill[i];\r\n else\r\n outBrRectHoleType.up = hightDrill[i];\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n outBrRectHoleType.right = hightDrill[i];\r\n else\r\n outBrRectHoleType.left = hightDrill[i];\r\n }\r\n }\r\n\r\n return outBrRectHoleType;\r\n}\r\nexport function ExtureHoleInBoard(holes: ExtrudeHole[], board: Board, ocs: Matrix4)\r\n{\r\n //TODO:自定义排钻判断\r\n return true;\r\n}\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 SetBrHighHoleTypeFromRectHoleType(br: Board, brRectHoleType: IBoardRectHoleType)\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.GetFirstDeriv(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(brRectHoleType.down);\r\n else\r\n highDrill.push(brRectHoleType.up);\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n highDrill.push(brRectHoleType.right);\r\n else\r\n highDrill.push(brRectHoleType.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 { Task } from \"../../Common/ThreadPool/Task\";\r\n\r\nexport type CSGTask = Pick;\r\n\r\ntype CSGSubtractFunction = (task: CSGTask) => void;\r\nexport const _CSGSubtractInjectInteractionFunctions: CSGSubtractFunction[] = [];\r\nexport function AddCSGSubtractTask(task: CSGTask)\r\n{\r\n for (let f of _CSGSubtractInjectInteractionFunctions)\r\n f(task);\r\n}\r\n\r\nexport type TaskKey = Pick;\r\ntype TerminateCSGTaskFunction = (task: TaskKey) => void;\r\nexport const _TerminateTaskInjectInteractionFunctions: TerminateCSGTaskFunction[] = [];\r\nexport function TerminateCSGTask(task: TaskKey)\r\n{\r\n for (let f of _TerminateTaskInjectInteractionFunctions)\r\n f(task);\r\n}\r\n","export enum BoardType\r\n{\r\n Layer = 0, //层板\r\n Vertical = 1, //立板\r\n Behind = 2 //背板\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\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 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","import { Vector3 } from \"three\";\r\nimport { BoardOpenDir, LinesType } from \"../DatabaseServices/Entity/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 //开门方向纹路\r\n static LinesOpenDirPts(len: number, width: number, openDir: BoardOpenDir)\r\n {\r\n if (openDir === BoardOpenDir.Right)\r\n {\r\n return [\r\n new Vector3(-width / 2, -len / 2), new Vector3(width / 2, 0),\r\n new Vector3(width / 2, 0), new Vector3(-width / 2, len / 2)\r\n ];\r\n }\r\n else if (openDir === BoardOpenDir.Left)\r\n {\r\n return [\r\n new Vector3(width / 2, -len / 2), new Vector3(-width / 2, 0),\r\n new Vector3(-width / 2, 0), new Vector3(width / 2, len / 2)\r\n ];\r\n }\r\n else if (openDir === BoardOpenDir.Up)\r\n {\r\n return [\r\n new Vector3(-width / 2, -len / 2), new Vector3(0, len / 2),\r\n new Vector3(0, len / 2), new Vector3(width / 2, -len / 2)\r\n ];\r\n }\r\n else if (openDir === BoardOpenDir.Down)\r\n {\r\n return [\r\n new Vector3(-width / 2, len / 2), new Vector3(0, -len / 2),\r\n new Vector3(0, -len / 2), new Vector3(width / 2, len / 2)\r\n ];\r\n }\r\n }\r\n\r\n}\r\n","//为了避免Core对UI库的依赖,导致测试用例失败,导致外部项目引用失败,我们分离了这个函数\r\n\r\nimport { InteractionLog, LogType } from \"./Log\";\r\n\r\nexport 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\r\n\r\ninterface IToasterShowEntityErrorOption\r\n{\r\n intent: Intent,\r\n msg: string,\r\n timeout: number;\r\n ent: any;\r\n}\r\n\r\nexport const ToasterShowEntityMsgInjectFunctions: ((option: IToasterShowEntityErrorOption) => void)[] = [];\r\nexport function ToasterShowEntityMsg(option: {\r\n intent: Intent,\r\n msg: string,\r\n timeout: number;\r\n ent: any;\r\n})\r\n{\r\n for (let f of ToasterShowEntityMsgInjectFunctions)\r\n f(option);\r\n\r\n let logMsgs = [{ msg: option.msg }] as any[];\r\n if (option.ent)\r\n logMsgs.push({ msg: \"点击查看\", entity: Array.isArray(option.ent) ? option.ent : [option.ent] });\r\n InteractionLog(logMsgs, LogType.Warning);\r\n}\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","import { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { IBaseOption } from \"../../Store/OptionInterface/IOptionInterface\";\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 { FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { BoardOpenDir, ComposingType, LinesType } from \"../../DatabaseServices/Entity/BoardInterface\";\r\nimport { IBaseOption } from \"./OptionInterface/IOptionInterface\";\r\n\r\nexport const DRILL_KEYS = [\"downDrill\", \"rightDrill\", \"upDrill\", \"leftDrill\"]; //这个顺序不能变\r\nexport const SEAL_KEYS = [EBoardKeyList.UpSealed, EBoardKeyList.DownSealed, EBoardKeyList.RightSealed, EBoardKeyList.LeftSealed];\r\nexport const EDGEREMARK_KEYS = [\"edgeRemarkUp\", \"edgeRemarkDown\", \"edgeRemarkLeft\", \"edgeRemarkRight\"];\r\n\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 hardwareName: 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.OpenDir]: BoardOpenDir;\r\n [EBoardKeyList.UpSealed]: string;\r\n [EBoardKeyList.DownSealed]: string;\r\n [EBoardKeyList.LeftSealed]: string;\r\n [EBoardKeyList.RightSealed]: string;\r\n hardwareDoorName: string;\r\n highDrill: string[];\r\n upDownDrill: [boolean, boolean];\r\n isClose: boolean;\r\n remarks: [string, string][];\r\n extraRemarks: [string, string][];\r\n isChaidan: boolean;\r\n [EBoardKeyList.KnifeRad]: string;\r\n\r\n edgeRemarkUp: string; //板边备注上下左右\r\n edgeRemarkDown: string;\r\n edgeRemarkLeft: string;\r\n edgeRemarkRight: 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 hardwareName: 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 addRemarks: boolean;\r\n [EBoardKeyList.ComposingFace]: boolean;\r\n [EBoardKeyList.OpenDir]: 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 edgeRemarkUp: boolean;\r\n edgeRemarkDown: boolean;\r\n edgeRemarkLeft: boolean;\r\n edgeRemarkRight: 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 hardwareName: 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.OpenDir]: 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 GetHardWareOption = 10,\r\n RemoveSplitSize = 11, //去除拆单尺寸\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, IHightDrillOption } from \"./OptionInterface/IOptionInterface\";\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 verticalBoardName: string; //立板名称\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 lbSealedUp: number;//立板封边上下左右\r\n lbSealedDown: number;\r\n lbSealedLeft: number;\r\n lbSealedRight: number;\r\n lbHightDrillOption: IHightDrillOption; //立板高级排钻\r\n useBoardProcessOption?: boolean; //使用周围板件数据\r\n isModifyHardwareMaterial: boolean; //使用周围板件数据时五金是否应用\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 layerBoardName: string;\r\n cbHightDrillOption: IHightDrillOption; //层板高级排钻\r\n deviation: number; //铰链碰撞单次偏移量\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 deviation: number; //铰链碰撞单次偏移量\r\n}\r\n\r\n/**\r\n * 抽屉数据接口\r\n */\r\nexport interface IDrawerConfigOption extends IDoorAndDrawerConfigOption\r\n{\r\n drawerTotalDepth: number; //抽屉总深\r\n trackDepth: number; //轨道深度\r\n isAutoSelectTrack: boolean;\r\n isLockTopOffset: boolean;\r\n isLockBottomOffset: boolean;\r\n}\r\n\r\n//门板位置类型\r\nexport enum DoorPosType\r\n{\r\n Out = 0, //外盖\r\n In = 1,\r\n}\r\n\r\nexport enum HandleHorPos\r\n{\r\n Left = 0,\r\n Right = 1,\r\n Mid = 2,\r\n}\r\nexport enum HandleVePos\r\n{\r\n Top = 0,\r\n Bottom = 1,\r\n Mid = 2,\r\n}\r\n//门板开门类型\r\nexport enum DoorOpenDir\r\n{\r\n Left = \"lf\",\r\n Right = \"rt\",\r\n Top = \"tp\",\r\n Bottom = \"bm\",\r\n None = \"none\",\r\n}\r\n\r\n//抽屉门板信息\r\nexport interface IDrawerInfo extends IBaseOption\r\n{\r\n row: number,\r\n col: number,\r\n divWidth: number, //预览UI尺寸\r\n divHeight: number,\r\n showWidth: string, //UI展示数据\r\n showHeight: string,\r\n width: number, //门板计算尺寸\r\n height: number,\r\n isLockWidth: boolean,\r\n isLockHeight: boolean,\r\n isSelect: boolean;\r\n tempInfo: ISelectTempInfo;\r\n marginRight?: number;\r\n}\r\n\r\nexport interface IDoorInfo extends IDrawerInfo\r\n{\r\n openDir: DoorOpenDir,\r\n\r\n isDrawLayer: boolean;\r\n isDrawVer: boolean;\r\n}\r\n\r\nexport interface IDrawerDoorTempInfo\r\n{\r\n name: string;\r\n id: string;\r\n logo?: string;\r\n props?: 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\nexport interface IWindowTempInfo\r\n{\r\n logo?: string;\r\n}\r\n\r\n/**选择的模板信息,temp-抽屉或门板,handletemp-拉手模板,windowTemp-窗户模板,其他是铰链模板 */\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 \"./OptionInterface/IOptionInterface\";\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 linesType: number; //纹路\r\n useBoardProcessOption?: boolean; //使用周围的板件数据\r\n}\r\n","import { IBaseOption } from \"./IOptionInterface\";\r\n\r\nexport enum ForBoardNameType\r\n{\r\n Same = \"same\",\r\n NoSame = \"nosame\",\r\n Include = \"include\",\r\n NoInclude = \"noinclude\"\r\n}\r\n\r\nexport interface IAutoDimBrsOption extends IBaseOption\r\n{\r\n total: boolean; //整体标注\r\n out: boolean; //柜外标注(前视图标注)\r\n inW: boolean; //柜内宽标注\r\n inH: boolean; //柜内高标注\r\n noRepeat: boolean; //删除重复\r\n noSmSize: boolean; //过滤小尺寸\r\n noAppointSize: boolean; //过滤指定尺寸\r\n noInSize: boolean; //空间小于该数值时 不标注内空\r\n noShowMinSize: number;\r\n noShowMinInSize: number;\r\n noShowAppointSizes: string;\r\n useParseGroups: string;\r\n forBoardName: boolean;\r\n forBoardNameStr: string;\r\n forBoardNameType: ForBoardNameType;\r\n}\r\n\r\nexport interface IFastDimOption extends IBaseOption\r\n{\r\n filterSmallSize: boolean; //过滤小尺寸\r\n filterSmallSizeValue: number; //过滤小尺寸值\r\n filterAppointSize: boolean; //过滤指定尺寸\r\n filterAppointSizeValues: string;//过滤指定尺寸的值\r\n filterAppointForBoardName: boolean;///根据板名过滤\r\n conditionType: ForBoardNameType; //根据板名过滤条件\r\n filterAppointForBoardNameValues: string;//根据板名过滤的值\r\n}\r\n","import { IBaseOption } from \"./IOptionInterface\";\r\n\r\nexport enum CurtailType\r\n{\r\n PerBr = \"0\",\r\n Total = \"1\",\r\n OCS = \"2\"\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","import { BrRelativePos } from \"../../../DatabaseServices/Entity/BoardInterface\";\r\nimport { BoardConfigOption } from \"./IOptionInterface\";\r\n\r\nexport enum StripType\r\n{\r\n H = \"h\",\r\n V = \"v\"\r\n}\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 addSKTCabinetName: boolean; //柜名加收口名称\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 * @export\r\n * @enum {number}\r\n */\r\n\r\nexport enum ViewDirection\r\n{\r\n Left = 1,\r\n Right = 2,\r\n Up = 3,\r\n Front = 4,\r\n Bottom = 5,\r\n Back = 6,\r\n Southwest = 7\r\n}\r\n\r\nexport enum ViewportPosition\r\n{\r\n Vertical = \"vertical\",\r\n Horizontal = \"horizontal\",\r\n Left = \"left\",\r\n Right = \"right\",\r\n Bottom = \"bottom\",\r\n Top = \"top\"\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","import { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { IBaseOption } from \"./OptionInterface/IOptionInterface\";\r\n\r\nexport enum EWineRackType\r\n{\r\n Oblique = 0,\r\n Upright = 1,\r\n}\r\n\r\n/**酒格样式 */\r\nexport enum EWineRackStyle\r\n{\r\n WholeLattice = 0,//全格优先\r\n Semilattice = 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 wineRackStyle: EWineRackStyle,\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 useBoardProcessOption?: 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 { FaceDirection } from \"../Add-on/DrawDrilling/DrillType\";\r\nimport { 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 { BoardOpenDir, BoardType, BrRelativePos, ComposingType, LinesType } from \"../DatabaseServices/Entity/BoardInterface\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\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 { 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 { ForBoardNameType, IAutoDimBrsOption, IFastDimOption } from \"../UI/Store/OptionInterface/AutoDimBrsOption\";\r\nimport { CurtailType, IBoardBatchCurtailOption } from \"../UI/Store/OptionInterface/BoardBatchCurtailOption \";\r\nimport { BoardProcessOption } from \"../UI/Store/OptionInterface/BoardProcessOption\";\r\nimport { BulkheadCeilingOption } from \"../UI/Store/OptionInterface/BulkheadCeilingOption\";\r\nimport { ClosingStripOption, StripType } from \"../UI/Store/OptionInterface/ClosingStripOption\";\r\nimport { BehindBoardOption, ChangeColorByBoardMaterialOption, ChangeColorByRoomOrCabinetOption, CommonPanelConfigOption, DatalistConfigOption, DoorRelatesInfoOption, IBatchModifyPanelOption, IDimStyleOption, LayerBoardOption, LayerNailOption, ModifyTextsConfigOption, RightPlaneLightOption, ShareBoardInfConfigurationOption, SideBoardOption, SingleBoardOption, TBBoardOption, VerticalBoardOption, WindowPanelConfigOption } from \"../UI/Store/OptionInterface/IOptionInterface\";\r\nimport { PointLightOption, RectAreaLightOption, SpotLightOption } from \"../UI/Store/OptionInterface/LightConfigOption\";\r\nimport { BehindHeightPositon, RadioType, ViewDirection, ViewportPosition } from \"../UI/Store/OptionInterface/OptionEnum\";\r\nimport { Viewport2ConfigOption, Viewport3ConfigOption, Viewport4ConfigOption, ViewportConfigOption } from \"../UI/Store/OptionInterface/ViewportConfigOption\";\r\nimport { EFullDir, EFullType, EWRackArrayType, EWineRackStyle, EWineRackType, 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: 5,\r\n type: EWineRackType.Oblique,\r\n wineRackStyle: EWineRackStyle.WholeLattice,\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 useBoardProcessOption: true\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\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: ViewDirection.Up,\r\n renderType: RenderType.Print,\r\n revertRotation: false\r\n};\r\nObject.freeze(DefaultViewportConfigOption);\r\n\r\nexport const DefaultViewport2ConfigOption: Viewport2ConfigOption = {\r\n viewportPosition: ViewportPosition.Vertical,\r\n renderType: [RenderType.Print, RenderType.Print],\r\n view1: ViewDirection.Left,\r\n view2: ViewDirection.Up,\r\n revertRotation: false\r\n};\r\nObject.freeze(DefaultViewport2ConfigOption);\r\n\r\nexport const DefaultViewport3ConfigOption: Viewport3ConfigOption = {\r\n viewportPosition: ViewportPosition.Vertical,\r\n renderType: [RenderType.Print, RenderType.Print, RenderType.Print],\r\n view: [ViewDirection.Front, ViewDirection.Up, ViewDirection.Southwest],\r\n revertRotation: false\r\n};\r\nObject.freeze(DefaultViewport3ConfigOption);\r\n\r\nexport const DefaultViewport4ConfigOption: Viewport4ConfigOption = {\r\n view: [ViewDirection.Front, ViewDirection.Left, ViewDirection.Up, ViewDirection.Southwest],\r\n renderType: [RenderType.Print, RenderType.Print, RenderType.Print, RenderType.Print],\r\n revertRotation: false\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\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: 30,\r\n SourceLength: 0,\r\n Angle: 45,\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: 3,\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 addSKTCabinetName: true\r\n};\r\nObject.freeze(DefaultClosingStripOption);\r\n\r\nexport const DefaultBoardFindOption: IBoardFindOption = {\r\n version: 9,\r\n condition: {\r\n // layer: false, //这个KEY看起来没用了\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 hardwareName: 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 addRemarks: false,\r\n composingFace: false,\r\n openDir: 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 edgeRemarkUp: false,\r\n edgeRemarkDown: false,\r\n edgeRemarkLeft: false,\r\n edgeRemarkRight: 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 hardwareName: 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 openDir: 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\", 删除无用的key\r\n height: \"\",\r\n width: \"\",\r\n thickness: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n brName: \"\",\r\n hardwareName: \"\",\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 openDir: BoardOpenDir.None,\r\n hardwareDoorName: \"\",\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 extraRemarks: Array.from({ length: 10 }, () => [\"\", \"\"]),\r\n isChaidan: false,\r\n [EBoardKeyList.KnifeRad]: \"\",\r\n edgeRemarkUp: \"\",\r\n edgeRemarkDown: \"\",\r\n edgeRemarkLeft: \"\",\r\n edgeRemarkRight: \"\",\r\n};\r\nObject.freeze(DefaultBoardFindOption);\r\n\r\nexport const DefaultLatticOption: ILatticeOption = {\r\n version: 3,\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 linesType: LinesType.Reverse,\r\n useBoardProcessOption: true,\r\n};\r\nObject.freeze(DefaultLatticOption);\r\n\r\nexport const DefaultDoorOption: IDoorConfigOption = {\r\n version: 9,\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 cbHightDrillOption: { up: \"\", down: \"\", left: \"\", right: \"\" },\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 verticalBoardName: \"立板\",\r\n layerBoardName: \"层板\",\r\n lbSealedUp: 1,\r\n lbSealedDown: 1,\r\n lbSealedLeft: 1,\r\n lbSealedRight: 1,\r\n lbHightDrillOption: { up: \"\", down: \"\", left: \"\", right: \"\" },\r\n useBoardProcessOption: true,\r\n isModifyHardwareMaterial: false,\r\n deviation: 100 //偏移量\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 deviation: 100\r\n};\r\nObject.freeze(DefaultHingeOption);\r\nexport const DefaultDrawerOption: IDrawerConfigOption = {\r\n version: 7,\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 verticalBoardName: \"立板\",\r\n lbSealedUp: 1,\r\n lbSealedDown: 1,\r\n lbSealedLeft: 1,\r\n lbSealedRight: 1,\r\n lbHightDrillOption: { up: \"\", down: \"\", left: \"\", right: \"\" },\r\n useBoardProcessOption: true,\r\n isModifyHardwareMaterial: false,\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 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.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 linesType: LinesType.Reverse,\r\n useBoardProcessOption: true\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: 4,\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 edgeRemarkUp: \"\",\r\n edgeRemarkDown: \"\",\r\n edgeRemarkLeft: \"\",\r\n edgeRemarkRight: \"\",\r\n highBoardEdgeRemark: [],\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: 3,\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 edgeRemarkUp: \"\",\r\n edgeRemarkDown: \"\",\r\n edgeRemarkLeft: \"\",\r\n edgeRemarkRight: \"\",\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 edgeRemarkUp: false,\r\n edgeRemarkDown: false,\r\n edgeRemarkLeft: false,\r\n edgeRemarkRight: false,\r\n }\r\n};\r\n\r\nObject.freeze(DefaultUpdateInfoOption);\r\n\r\nexport const DefaultKuGanOption: IKuGangDrawOption = {\r\n insertMode: \"0\",\r\n minSpacing: 50,\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: 3,\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 middleVerticalBrName: \"立板\",\r\n topMostLayerBrName: \"顶板\",\r\n middleLayerBrName: \"层板\",\r\n bottomMostLayerBrName: \"底板\",\r\n bottomMostBackBrName: \"地脚线\",\r\n stripeBrName: \"收口条\",\r\n cabinetName: \"\",\r\n isfarLeftVerticalBrName: true,//最左侧立板名称\r\n isModifyMiddleVerticalBrName: false,//是否修改中间立板名称\r\n isfarRightVerticalBrName: true,\r\n istopMostLayerBrName: true,\r\n isModifyMiddleLayerBrName: false, //是否修改中间层板名称\r\n isbottomMostLayerBrName: true,\r\n isbottomMostBackBrName: true,\r\n isstripeBrName: true,\r\n iscabinetName: false,//修改柜名\r\n isModifyRoomName: true,//修改房名\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: 8,\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 useSktTemplate: false,\r\n sktTemplate: null,\r\n sktTemplateId: \"\",\r\n rightSktTemplateId: \"\",\r\n topSktTemplateId: \"\",\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: 5,\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 noChaiDan: 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 visual: false,\r\n curve: false,\r\n line: false,\r\n polyline: false,\r\n circle: false,\r\n arc: false,\r\n custom: false,\r\n customBoardName: \"\",\r\n matchType: ECompareType.Equal\r\n};\r\n\r\nexport const DefaultCommonPanelOption: CommonPanelConfigOption = {\r\n version: 1,\r\n orderMap: {},\r\n orderType: EOrderType.ByUpdate,\r\n};\r\nObject.freeze(DefaultCommonPanelOption);\r\n\r\nexport const DefaultDatalistOption: DatalistConfigOption = {\r\n resizeUI: {}\r\n};\r\nObject.freeze(DefaultDatalistOption);\r\n\r\nexport const DefaultAutoDimBrsOption: IAutoDimBrsOption = {\r\n version: 1,\r\n total: true,\r\n out: true,\r\n inW: false,\r\n inH: false,\r\n noRepeat: false,\r\n noSmSize: false,\r\n noAppointSize: false,\r\n noInSize: false,\r\n noShowMinSize: 20,\r\n noShowMinInSize: 300,\r\n noShowAppointSizes: \"\",\r\n useParseGroups: \"0\",\r\n forBoardName: false,\r\n forBoardNameStr: \"\",\r\n forBoardNameType: ForBoardNameType.Same,\r\n};\r\nObject.freeze(DefaultAutoDimBrsOption);\r\n\r\n\r\nexport const DefaultWindowPanelOption: WindowPanelConfigOption = {\r\n Length: 1100,\r\n Height: 1500,\r\n Thick: 280,\r\n WindowOffGround: 900,\r\n IsBayWindow: false,\r\n BayLeftIsWall: false,\r\n BayRightIsWall: false,\r\n BayDist: 500,\r\n BayLeftDist: 600,\r\n BayMiddleDist: 600,\r\n BayRightDist: 600,\r\n HasWindowStone: false,\r\n StoneThick: 50,\r\n StoneBulge: 50,\r\n StoneLeftRightBulge: 50,\r\n};\r\n\r\nObject.freeze(DefaultWindowPanelOption);\r\nexport const DefaultDimStyleOption: IDimStyleOption = {\r\n dimFXLON: true,\r\n dimFXL: 100,\r\n dimALTD: 2,\r\n dimASZ: 10,\r\n dimGAP: 10,\r\n dimEXE: 20,\r\n dimTXT: 60,\r\n dimTAD: 2,\r\n dimADEC: 2,\r\n};\r\nObject.freeze(DefaultDimStyleOption);\r\n\r\nexport const DefaultChangeColorByBoardMaterialOption: ChangeColorByBoardMaterialOption = {\r\n accordThickness: false,\r\n accordMaterialColor: true,\r\n accordMaterial: true,\r\n accordMaterialName: true\r\n};\r\nObject.freeze(DefaultChangeColorByBoardMaterialOption);\r\n\r\nexport const DefaultShareBoardInfConfigurationOption: ShareBoardInfConfigurationOption = {\r\n Physical2EdgeColor: 7,\r\n VisualStyle: RenderType.Conceptual,\r\n Viewport: ViewDirection.Southwest,\r\n IsExportBoard: true,\r\n IsExportHardware: true,\r\n showBom: true,\r\n};\r\nObject.freeze(DefaultShareBoardInfConfigurationOption);\r\n\r\nexport const DefaultBulkheadCeilingOption: BulkheadCeilingOption = {\r\n Item: []\r\n};\r\nObject.freeze(DefaultBulkheadCeilingOption);\r\n\r\nexport const DefaultChangeColorByRoomOrCabinetOption: ChangeColorByRoomOrCabinetOption = {\r\n accordCabinetName: true,\r\n accordRoomName: true\r\n};\r\nObject.freeze(DefaultChangeColorByRoomOrCabinetOption);\r\n\r\nexport const DefaultDoorRelatesInfoOption: DoorRelatesInfoOption = {\r\n version: 1,\r\n hingeOption: []\r\n};\r\nObject.freeze(DefaultDoorRelatesInfoOption);\r\n\r\nexport const DefaultFastDimOption: IFastDimOption = {\r\n filterSmallSize: false,\r\n filterSmallSizeValue: 0,\r\n filterAppointSize: false,\r\n filterAppointSizeValues: \"\",\r\n filterAppointForBoardName: false,\r\n filterAppointForBoardNameValues: \"\",\r\n conditionType: ForBoardNameType.Same,\r\n};\r\n","import { BufferGeometry, Face3, Float32BufferAttribute, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, Line3, Matrix4, Shape, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayRemoveDuplicateBySort } from \"../Common/ArrayExt\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { FixIndex } from \"../Nest/Common/Util\";\r\nimport { AsVector3, ZeroVec, equalv2, equalv3 } from \"./GeUtils\";\r\nimport { PlaneExt } from \"./Plane\";\r\n\r\n/**\r\n * 使用轮廓和扫描路径构建扫描几何体,实现衣柜中的顶线或者地脚线之类的实体.\r\n * 该几何体需要轮廓和路径的起始截面垂直,否则构造的实体将会错误.\r\n */\r\nexport class SweepGeometry extends Geometry\r\n{\r\n edgePts: number[] = [];\r\n polygonIndexes = [];\r\n ShapeMaterialSlotData: number[];//[0,0,0,1,2,3,0] 指定多段线轮廓的材质槽索引 每个顶点指定一个材质槽位置\r\n constructor(contour: Polyline, path: Curve[] | Curve, ShapeMaterialSlotData?: number[])\r\n {\r\n super();\r\n this.ShapeMaterialSlotData = ShapeMaterialSlotData;\r\n if (Array.isArray(path))\r\n this.AddShape2(contour, path);\r\n else\r\n this.AddShape(contour, path);\r\n this.computeVertexNormals();\r\n this.computeFaceNormals();\r\n }\r\n\r\n get LineGeom(): LineGeometry\r\n {\r\n let lineGeo = new LineGeometry();\r\n let lineSegments = new Float32Array(this.edgePts);\r\n var instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\r\n lineGeo.setAttribute('instanceStart', new InterleavedBufferAttribute(instanceBuffer, 3, 0));\r\n lineGeo.setAttribute('instanceEnd', new InterleavedBufferAttribute(instanceBuffer, 3, 3));\r\n return lineGeo;\r\n }\r\n\r\n get EdgeGeom()\r\n {\r\n return new BufferGeometry().setAttribute('position', new Float32BufferAttribute(this.edgePts, 3));\r\n }\r\n\r\n AddShape(contour: Polyline, path: Curve)\r\n {\r\n //路径点表\r\n let pathPts2d = (path.Shape as 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.OCSNoClone);\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.OCSNoClone);\r\n\r\n let isClosePath = path.IsClose;\r\n\r\n let verts: Vector3[][] = [];//所有路径上的轮廓点\r\n\r\n let pathNormal = path.Normal;\r\n\r\n //计算所有需要的几何点,本质是不断的投影\r\n if (!isClosePath)\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormal, pathPts[0], undefined, pathPts[1]));\r\n\r\n\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, pathNormal, pathPts[i], pathPts[i - 1], pathPts[1]));\r\n else\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormal, pathPts[i], pathPts[i - 1]));\r\n }\r\n else\r\n {\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormal, pathPts[i], pathPts[i - 1], pathPts[i + 1]));\r\n }\r\n }\r\n\r\n if (isClosePath)\r\n verts.unshift(verts[verts.length - 1]);\r\n\r\n this.BuildSideFaces(shapePts2d, pathPts2d, pathPts, verts);\r\n if (!isClosePath) this.BuildLid(shapePts2d, verts);\r\n }\r\n\r\n AddShape2(contour: Polyline, paths: Curve[])\r\n {\r\n let pathPts: Vector3[] = [];\r\n let pathNormals: Vector3[] = [];\r\n\r\n //路径点表\r\n for (let path of paths)\r\n {\r\n let pathPts2d = path.Shape.getPoints(4) as Vector2[];\r\n arrayRemoveDuplicateBySort(pathPts2d, (p1, p2) =>\r\n {\r\n if (equalv2(p1, p2))\r\n {\r\n p2[\"_mask_\"] = p1[\"_mask_\"];\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n if (path !== paths[0])\r\n pathPts2d.shift();\r\n\r\n let pNormal = path.Normal;\r\n\r\n for (let p of pathPts2d)\r\n {\r\n let p3 = AsVector3(p).applyMatrix4(path.OCSNoClone);\r\n p3[\"_mask_\"] = p[\"_mask_\"];\r\n pathPts.push(p3);\r\n\r\n pathNormals.push(pNormal);\r\n }\r\n }\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.OCSNoClone);\r\n\r\n let isClosePath = equalv3(pathPts[0], pathPts[pathPts.length - 1], 1e-3);\r\n\r\n let verts: Vector3[][] = [];//所有路径上的轮廓点\r\n //计算所有需要的几何点,本质是不断的投影\r\n if (!isClosePath)\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormals[0], pathPts[0], undefined, pathPts[1]));\r\n\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, pathNormals[i], pathPts[i], pathPts[i - 1], pathPts[1]));\r\n else\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1]));\r\n }\r\n else\r\n {\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1], pathPts[i + 1]));\r\n }\r\n }\r\n\r\n if (isClosePath)\r\n verts.unshift(verts[verts.length - 1]);\r\n\r\n this.BuildSideFaces(shapePts2d, pathPts as unknown as Vector2[], pathPts, verts);\r\n if (!isClosePath) this.BuildLid(shapePts2d, verts);\r\n }\r\n\r\n /**\r\n * 使用4点构建面\r\n * @param a 左下\r\n * @param b 右下\r\n * @param c 左上\r\n * @param d 右上\r\n * @param uvs\r\n * @param [materialIndex]\r\n */\r\n protected BuildFace4(a: number, b: number, c: number, d: number, uvs: Vector2[], materialIndex?: number)\r\n {\r\n let f1 = new Face3(a, b, c, undefined, undefined, materialIndex);\r\n let f2 = new Face3(b, d, c, undefined, undefined, materialIndex);\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\r\n /**\r\n * 构造边缘面开始标记\r\n * @param dir 前进方向(单位向量)\r\n */\r\n protected SideStartMark(dir: Vector3) { }\r\n\r\n protected 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)\r\n if (p[\"_mask_\"])\r\n {\r\n addCount++;\r\n\r\n if (this.ShapeMaterialSlotData)\r\n p[\"_material_index_\"] = this.ShapeMaterialSlotData[addCount - 1];\r\n }\r\n\r\n let sumCount = addCount + shapePts2d.length; //实际个数\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 this.SideStartMark(p1Dir);\r\n\r\n let tempStartX = 0;\r\n\r\n let lastMaterialIndex = undefined;\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 (p2d[\"_mask_\"])\r\n lastMaterialIndex = p2d[\"_material_index_\"] ?? lastMaterialIndex;\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\r\n this.BuildFace4(curIndex, nextIndex, curIndex2, nextIndex2, uvs, lastMaterialIndex);\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 protected 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\nexport function 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 mtx = ContourTransfromToPath(curP, normal, nextP.clone().sub(curP));\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mtx));\r\n }\r\n else if (!nextP && preP)\r\n {\r\n let mtx = ContourTransfromToPath(curP, normal, curP.clone().sub(preP));\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mtx));\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 if (equalv2(v, ZeroVec))\r\n norm.copy(dir);\r\n\r\n //角平分线的平面\r\n let plane = new PlaneExt(norm, curP);\r\n\r\n let mtx = ContourTransfromToPath(preP, normal, dir);\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mtx));\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\r\n//用索引来定义\r\ntype Polygon = number[];\r\n\r\nexport class SweepGeometrySimple extends SweepGeometry\r\n{\r\n SidePolygons: (Polygon[])[];//所有侧面的多边形\r\n private _curSidePolygons: Polygon[];//\r\n private _curDir: Vector3;\r\n\r\n TriFaces: (number[])[];//截面的三角面索引\r\n shapeVerts: Vector3[][];//所有的截面点在节点位置\r\n shapePts2d: Vector2[];\r\n override computeVertexNormals() { }\r\n override computeFaceNormals() { }\r\n\r\n override BuildFace4(a: number, b: number, c: number, d: number, uvs: Vector2[], materialIndex?: number)\r\n {\r\n let polygon = [a, b, d, c];\r\n polygon[\"dir\"] = this._curDir;\r\n this._curSidePolygons.push(polygon);\r\n }\r\n\r\n protected override SideStartMark(dir: Vector3)\r\n {\r\n this._curDir = dir;\r\n if (this._curSidePolygons?.length)\r\n this.SidePolygons.push(this._curSidePolygons);\r\n\r\n this._curSidePolygons = [];\r\n }\r\n\r\n protected override BuildSideFaces(shapePts2d: Vector2[], pathPts2d: Vector2[], pathPts: Vector3[], verts: Vector3[][])\r\n {\r\n this.shapeVerts = verts;\r\n this.shapePts2d = shapePts2d;\r\n pathPts2d[0][\"_mask_\"] = true;\r\n\r\n if (!this.TriFaces)\r\n this.TriFaces = ShapeUtils.triangulateShape(shapePts2d, []);\r\n\r\n\r\n if (!this.SidePolygons) this.SidePolygons = [];\r\n super.BuildSideFaces(shapePts2d, pathPts2d, pathPts, verts);\r\n\r\n if (this._curSidePolygons?.length)\r\n this.SidePolygons.push(this._curSidePolygons);\r\n }\r\n\r\n protected override BuildLid(shapePts2d: Vector2[], verts: Vector3[][]) { }\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, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Line as TLine, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayRemoveDuplicateBySort } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { curveLinkGroup } from \"../../Common/CurveUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { Log, LogType } from \"../../Common/Log\";\r\nimport { tempMatrix1 } from \"../../Common/Matrix4Utils\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { AsVector3, MoveMatrix, ZAxis, ZeroVec, equaln, equalv3, isParallelTo } from '../../Geometry/GeUtils';\r\nimport { ProjectionToPlane, 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 { OBB } from './../../Geometry/OBB/obb';\r\n\r\n@Factory\r\nexport class SweepSolid extends Entity\r\n{\r\n static UseRectFakerContour = false;\r\n\r\n protected _Contour: Polyline;\r\n protected _PathCurve: Curve | Curve[];\r\n constructor(contour?: Polyline, pathCurve?: Curve | 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\r\n //将OCS变换成第一个路径的OCS(合理一点)\r\n let paths = this.Paths;\r\n let path = paths[0];\r\n\r\n this.OCS = path.OCSNoClone;\r\n this._SpaceOCS.copy(path.OCSNoClone);\r\n\r\n let ocsInv = this.OCSInv;\r\n for (let p of paths)\r\n p.ApplyMatrix(ocsInv);\r\n }\r\n }\r\n\r\n Explode()\r\n {\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n const explode: Curve[] = [this._Contour.Clone().ApplyMatrix(this._Matrix)];\r\n for (let path of this._PathCurve)\r\n {\r\n explode.push(path.Clone().ApplyMatrix(this._Matrix));\r\n }\r\n return explode;\r\n }\r\n return [this._Contour.Clone().ApplyMatrix(this._Matrix), this._PathCurve.Clone().ApplyMatrix(this._Matrix)];\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\r\n //单纯的返回数组\r\n get Paths()\r\n {\r\n return Array.isArray(this._PathCurve) ? this._PathCurve : [this._PathCurve];\r\n }\r\n\r\n Reverse()\r\n {\r\n this.WriteAllObjectRecord();\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n for (let path of this._PathCurve)\r\n path.Reverse();\r\n this._PathCurve.reverse();\r\n }\r\n else this._PathCurve.Reverse();\r\n this.Update();\r\n }\r\n\r\n /**\r\n * 将轮廓变换到wcs空间,当用户选定某个与扫描线起点相切的轮廓时.\r\n */\r\n private TransfromPathToWCS()\r\n {\r\n if (Array.isArray(this._PathCurve)) return;\r\n if (equalv3(this._Contour.Normal, ZAxis))\r\n return;\r\n\r\n let fDir = this._PathCurve.GetFirstDeriv(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.GetFirstDeriv(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(\"错误:提供的轮廓没有和路径垂直!\", LogType.Error);\r\n }\r\n\r\n private _MeshGeometry: SweepGeometry | BufferGeometry;\r\n private _LineGeom: 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 = this._MeshGeometry.EdgeGeom;\r\n this._LineGeom = this._MeshGeometry.LineGeom;\r\n this._MeshGeometry.edgePts = undefined;\r\n\r\n \r\n\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\r\n private _EdgeGeometry: BufferGeometry;\r\n 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 {\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n\r\n // for (let p of this.Paths)\r\n // {\r\n // p.IsEmbedEntity = true;\r\n // let lineObj = p.GetDrawObjectFromRenderType(RenderType.Wireframe) as TLine;\r\n // lineObj.material = ColorMaterial.GetWallLineMtl(1);\r\n // lineObj.computeLineDistances();\r\n // lineObj.matrix.copy(p.OCSNoClone);\r\n // line.add(lineObj);\r\n // }\r\n\r\n return line;\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 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._LineGeom, ColorMaterial.PrintLineMatrial);\r\n return new Object3D().add(line, mesh);\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n const object3d = new Object3D();\r\n for (let path of this._PathCurve)\r\n object3d.add(path.DrawObject);\r\n return object3d;\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 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 ClearDraw(): this\r\n {\r\n this.UpdateDrawGeometry();\r\n return super.ClearDraw();\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 // Object3DRemoveAll(l);\r\n // for (let p of this.Paths)\r\n // {\r\n // p.IsEmbedEntity = true;\r\n // let lineObj = p.GetDrawObjectFromRenderType(RenderType.Wireframe) as TLine;\r\n // lineObj.material = ColorMaterial.GetWallLineMtl(1);\r\n // lineObj.computeLineDistances();\r\n // l.add(lineObj);\r\n // }\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 if (Array.isArray(this._PathCurve))\r\n for (let path of this._PathCurve)\r\n obj.add(path.DrawObject);\r\n else\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 if (Array.isArray(this._PathCurve))\r\n {\r\n const points: Vector3[] = [];\r\n for (let path of this._PathCurve)\r\n {\r\n let contour = path.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 points.push(...pts, ...this.GetMidPoints());\r\n else points.push(...pts);\r\n }\r\n return points;\r\n }\r\n else\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 }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n //缓存夹点和子实体的索引\r\n private _GripSubIndexMap: Map;\r\n /** 获取夹点与子实体的索引 */\r\n GetGripSubIndexMap()\r\n {\r\n if (this._GripSubIndexMap)\r\n return this._GripSubIndexMap;\r\n\r\n this.GetGripPoints();\r\n\r\n return this._GripSubIndexMap;\r\n }\r\n\r\n GetGripPoints()\r\n {\r\n this._GripSubIndexMap = undefined;\r\n\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n this._GripSubIndexMap = new Map;\r\n\r\n const points: Vector3[] = [];\r\n for (let path of this._PathCurve)\r\n {\r\n let pts = path.GetGripPoints();\r\n for (let p of pts)\r\n {\r\n this._GripSubIndexMap.set(points.length, path);\r\n\r\n p.applyMatrix4(this._Matrix);\r\n points.push(p);\r\n }\r\n }\r\n return points;\r\n }\r\n else\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 }\r\n\r\n GetStretchPoints()\r\n {\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n const points: Vector3[] = [];\r\n for (let path of this._PathCurve)\r\n {\r\n let pts = path.GetStretchPoints();\r\n for (let p of pts)\r\n {\r\n p.applyMatrix4(this._Matrix);\r\n points.push(p);\r\n }\r\n }\r\n return points;\r\n }\r\n else\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 }\r\n\r\n //端点捕捉时提供端点\r\n private GetEndPoint()\r\n {\r\n let pathPts: Vector3[] = [];\r\n let pathNormals: Vector3[] = [];\r\n //路径点表\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n for (let path of this._PathCurve)\r\n {\r\n pathPts = path.GetStretchPoints();\r\n arrayRemoveDuplicateBySort(pathPts, (p1, p2) =>\r\n {\r\n if (equalv3(p1, p2))\r\n {\r\n p2[\"_mask_\"] = p1[\"_mask_\"];\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n if (path !== this._PathCurve[0])\r\n pathPts.shift();\r\n\r\n let pNormal = path.Normal;\r\n\r\n for (let p of pathPts)\r\n pathNormals.push(pNormal);\r\n }\r\n }\r\n else\r\n {\r\n const path = this._PathCurve;\r\n //路径点表\r\n pathPts = path.GetStretchPoints();\r\n if (path.IsClose && !equalv3(pathPts[0], pathPts[pathPts.length - 1], 1e-3))\r\n pathPts.push(pathPts[0]);\r\n\r\n arrayRemoveDuplicateBySort(pathPts, equalv3);\r\n let pNormal = path.Normal;\r\n for (let p of pathPts)\r\n pathNormals.push(pNormal);\r\n }\r\n\r\n let shapePts2d = this.Contour.GetStretchPoints();\r\n\r\n //轮廓点表\r\n let shapePts3d = shapePts2d.map(AsVector3);\r\n let isClosePath = equalv3(pathPts[0], pathPts[pathPts.length - 1], 1e-3);\r\n\r\n let pts: Vector3[] = [];//端点\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 pts.push(...ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1], pathPts[1]));\r\n else\r\n pts.push(...ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1]));\r\n }\r\n else\r\n {\r\n pts.push(...ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1], pathPts[i + 1]));\r\n }\r\n }\r\n\r\n for (let pt of pts) pt.applyMatrix4(this.OCSNoClone);\r\n return pts;\r\n }\r\n\r\n private GetMidPoints()\r\n {\r\n let conPts = this._Contour.GetStretchPoints();\r\n const pts: Vector3[] = [];\r\n const UpdateEndMtx = (path: Curve) =>\r\n {\r\n for (let i = 0.5; i < path.EndParam; i++)\r\n {\r\n let pos = path.GetPointAtParam(i);\r\n let dir = path.GetFirstDeriv(i).normalize();\r\n let y = path.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 pts.push(...conPts.map(p => p.clone().applyMatrix4(tempMatrix1)));\r\n }\r\n };\r\n if (Array.isArray(this._PathCurve))\r\n for (let path of this._PathCurve)\r\n UpdateEndMtx(path);\r\n else\r\n UpdateEndMtx(this._PathCurve);\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n let ptsLengths = 0;\r\n for (let i = 0; i < this._PathCurve.length; i += 1)\r\n {\r\n const path = this._PathCurve[i];\r\n const pathGripPts = path.GetGripPoints();\r\n const idxList = indexList.filter(v => v >= ptsLengths && v < (ptsLengths + pathGripPts.length)).map((v) => v - ptsLengths);\r\n\r\n ptsLengths += pathGripPts.length;\r\n\r\n if (idxList.length === 0) continue;\r\n\r\n let isMoveLine = (path instanceof Line && idxList.length === 1 && idxList[0] === 1);\r\n let isMovePolylineStart = (path instanceof Polyline) && idxList.length === 1 && idxList.includes(1);\r\n let isMovePolylineEnd = (path instanceof Polyline) && idxList.length === 1 && idxList.includes(pathGripPts.length - 2);\r\n\r\n //如果不是整体移动,那么vec被限制在CURVE OCS Z0\r\n let isMove = isMoveLine || idxList.length === pathGripPts.length;\r\n if (!isMove)\r\n {\r\n vec = vec.clone()\r\n .applyMatrix4(path.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(path.OCS.setPosition(0, 0, 0));\r\n }\r\n\r\n //我们校验它的前后曲线支不支持它移动这个点\r\n let prePath = this._PathCurve[FixIndex(i - 1, this._PathCurve)];\r\n let nextPath = this._PathCurve[FixIndex(i + 1, this._PathCurve)];\r\n\r\n if ((isMoveLine || idxList.includes(0) || isMovePolylineStart)//(move line ) or (move start) or(move pl start)\r\n && (i || equalv3(prePath.EndPoint, path.StartPoint, 1e-3)))//连接到下一段\r\n {\r\n //vec限制在上一段的坐标系内 无z\r\n vec = vec.clone()\r\n .applyMatrix4(prePath.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(prePath.OCS.setPosition(0, 0, 0));\r\n\r\n if (isMoveLine || isMovePolylineStart)//顺带移动上一段\r\n prePath.MoveGripPoints([prePath.GetGripPoints().length - 1], vec);\r\n\r\n }\r\n if ((isMoveLine || idxList.includes(pathGripPts.length - 1) || isMovePolylineEnd)//(move line ) or (move end) or(move pl end)\r\n && (i < this._PathCurve.length - 2 || equalv3(path.EndPoint, nextPath.StartPoint, 1e-3)))//连接到上一段\r\n {\r\n //vec限制在下一段的坐标系内 无z\r\n vec = vec.clone()\r\n .applyMatrix4(nextPath.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(nextPath.OCS.setPosition(0, 0, 0));\r\n\r\n if (isMoveLine || isMovePolylineEnd)//顺带移动下一段\r\n nextPath.MoveGripPoints([0], vec);\r\n }\r\n\r\n if (isMove)\r\n path.Move(vec);\r\n else\r\n path.MoveGripPoints(idxList, vec);\r\n }\r\n }\r\n else\r\n {\r\n this._PathCurve.MoveGripPoints(indexList, vec);\r\n }\r\n this.Update();\r\n }\r\n\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n let ptsLengths = 0;\r\n let pathIndexMap = new Map();\r\n\r\n //1.parse\r\n for (let i = 0; i < this._PathCurve.length; i++)\r\n {\r\n let path = this._PathCurve[i];\r\n const pts = path.GetStretchPoints();\r\n const idxList = indexList.filter(v => v >= ptsLengths && v < (ptsLengths + pts.length)).map((v) => v - ptsLengths);\r\n\r\n ptsLengths += pts.length;\r\n\r\n pathIndexMap.set(path, {\r\n idx: idxList,\r\n count: pts.length,\r\n isMove: pts.length === idxList.length,\r\n });\r\n }\r\n\r\n //2.change vec\r\n for (let i = 0; i < this._PathCurve.length; i++)\r\n {\r\n let path = this._PathCurve[i];\r\n let { idx: idxList, count: ptsCount, isMove } = pathIndexMap.get(path);\r\n\r\n if (idxList.length === 0) continue;\r\n\r\n let isMoveStart = idxList.includes(0);\r\n let isMoveEnd = idxList.includes(ptsCount - 1);\r\n\r\n if (!isMove)//如果不是移动 限制在本OCS内 NO Z\r\n {\r\n vec.applyMatrix4(path.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(path.OCS.setPosition(0, 0, 0));\r\n }\r\n\r\n //我们校验它的前后曲线支不支持它移动这个点\r\n let prePath = this._PathCurve[FixIndex(i - 1, this._PathCurve)];\r\n let nextPath = this._PathCurve[FixIndex(i + 1, this._PathCurve)];\r\n\r\n //如果pre是move 则不需要过滤z\r\n if ((isMove || isMoveStart)//(move line ) or (move start) or(move pl start)\r\n && (i || equalv3(prePath.EndPoint, path.StartPoint, 1e-3))//连接到下一段\r\n && (!pathIndexMap.get(prePath).isMove)//非移动\r\n )\r\n {\r\n //vec限制在上一段的坐标系内 无z\r\n vec.applyMatrix4(prePath.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(prePath.OCS.setPosition(0, 0, 0));\r\n }\r\n if (\r\n isMove || isMoveEnd\r\n && (i < this._PathCurve.length - 2 || equalv3(path.EndPoint, nextPath.StartPoint, 1e-3))//连接到上一段\r\n && (!pathIndexMap.get(nextPath).isMove)//非移动\r\n )\r\n {\r\n //vec限制在下一段的坐标系内 无z\r\n vec.applyMatrix4(nextPath.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(nextPath.OCS.setPosition(0, 0, 0));\r\n }\r\n }\r\n\r\n //3 move\r\n for (let i = 0; i < this._PathCurve.length; i++)\r\n {\r\n let path = this._PathCurve[i];\r\n let { idx: idxList, isMove } = pathIndexMap.get(path);\r\n if (isMove)\r\n path.Move(vec);\r\n else\r\n path.MoveStretchPoints(idxList, vec);\r\n }\r\n }\r\n else\r\n {\r\n this._PathCurve.MoveStretchPoints(indexList, vec);\r\n }\r\n this.Update();\r\n }\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\r\n let ocsInv = this.OCSInv;\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n for (let p of this._PathCurve)\r\n p.ApplyMatrix(this.OCSNoClone).ApplyMatrix(m).ApplyMatrix(ocsInv);\r\n\r\n let group = curveLinkGroup(this._PathCurve);\r\n this._PathCurve = group[0];\r\n }\r\n else\r\n this._PathCurve.ApplyMatrix(this.OCSNoClone).ApplyMatrix(m).ApplyMatrix(ocsInv);\r\n\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\r\n }\r\n\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//ver\r\n this._Contour = file.ReadObject() as Polyline;\r\n if (ver === 1)\r\n {\r\n this._PathCurve = file.ReadObject() as Curve;\r\n if (this._Contour instanceof Spline || this._PathCurve instanceof Spline)\r\n {\r\n this._isErase = true;\r\n Log(\"放样实体是样条线生成的,自动删除它!\", LogType.Info);\r\n }\r\n }\r\n else if (ver > 1)\r\n {\r\n const pathCurveCount = file.Read();\r\n if (pathCurveCount === 1)\r\n this._PathCurve = file.ReadObject() as Curve;\r\n else\r\n {\r\n this._PathCurve = [];\r\n for (let i = 0; i < pathCurveCount; i++)\r\n {\r\n this._PathCurve.push(file.ReadObject());\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.WriteObject(this._Contour);\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n file.Write(this._PathCurve.length);\r\n for (let c of this._PathCurve)\r\n file.WriteObject(c);\r\n }\r\n else\r\n {\r\n file.Write(1);\r\n file.WriteObject(this._PathCurve);\r\n }\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { DefaultToplineMetalsOption } from \"../../Editor/DefaultConfig\";\r\nimport { AsVector3, ZeroVec, equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { ProjectionToPlane } from \"../../Geometry/SweepGeometry\";\r\nimport { Max } 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 { Arc } from \"../Entity/Arc\";\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\r\n /**\r\n *延伸取最大最小轮廓每段首尾到前面线段,取最长线段作为分段长\r\n */\r\n get Segmentations(): Curve[]\r\n {\r\n //轮廓点表\r\n let contourPts = this._Contour.Shape.getPoints(4).map(AsVector3);\r\n for (let p of contourPts)\r\n p.applyMatrix4(this._Contour.OCSNoClone);\r\n\r\n //收集所有的点\r\n let pathCurves: (Line | Arc)[] = [];\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n for (let p of this._PathCurve)\r\n {\r\n if (p instanceof Polyline)\r\n pathCurves.push(...p.Explode() as Line[]);\r\n else\r\n pathCurves.push(p.Clone() as Line);\r\n }\r\n }\r\n else\r\n if (this._PathCurve instanceof Polyline)\r\n pathCurves.push(...this._PathCurve.Explode() as Line[]);\r\n else\r\n pathCurves.push(this._PathCurve.Clone() as Line);\r\n\r\n\r\n let isClosePath = equalv3(pathCurves[0].StartPoint, pathCurves[pathCurves.length - 1].EndPoint, 1e-3);\r\n\r\n\r\n let radiusMap = new Map();\r\n\r\n function ExtendsCurve(path: Curve, pts: Vector3[])\r\n {\r\n let params = pts.map(p => path.GetParamAtPoint2(path.GetClosestPointTo(p, true)));\r\n\r\n let min = Math.min(0, params[Max(params, (p1, p2) => p1 > p2)]);\r\n let max = Math.max(1, params[Max(params, (p1, p2) => p1 < p2)]);\r\n\r\n let sp = path.GetPointAtParam(min);\r\n let ep = path.GetPointAtParam(max);\r\n\r\n path.StartPoint = sp;\r\n path.EndPoint = ep;\r\n }\r\n\r\n //遍历所有的路径节点进行顶点投射\r\n for (let i = 0; i < pathCurves.length; i++)\r\n {\r\n let path = pathCurves[i];\r\n if (isClosePath || i !== pathCurves.length - 1)//与下一段\r\n {\r\n let ep = path.EndPoint;\r\n let nextPath = pathCurves[FixIndex(i + 1, pathCurves)];\r\n let preP: Vector3;\r\n if (path instanceof Line)\r\n preP = ep.clone().sub(path.GetFirstDeriv(1).normalize());\r\n else\r\n {\r\n let pts = path.Shape.getPoints(4);\r\n preP = AsVector3(pts[pts.length - 2]).applyMatrix4(path.OCSNoClone);\r\n }\r\n let nextP: Vector3;\r\n if (nextPath instanceof Line)\r\n nextP = ep.clone().add(nextPath.GetFirstDeriv(0).normalize());\r\n else\r\n {\r\n let pts = nextPath.Shape.getPoints(4);\r\n nextP = AsVector3(pts[1]).applyMatrix4(nextPath.OCSNoClone);\r\n }\r\n\r\n //投射的点表\r\n let pts = ProjectionToPlane(contourPts, path.Normal, ep, preP, nextP);\r\n\r\n // for (let j = 0; j < pts.length - 1; j++)\r\n // TestDraw(new Line(pts[j].clone(), pts[j + 1].clone()).ApplyMatrix(this.OCSNoClone), i + 1);\r\n\r\n //针对圆弧 修改它的半径\r\n if (path instanceof Arc)\r\n {\r\n let mp = path.GetPointAtParam(0.5);\r\n let arcPts = ProjectionToPlane(contourPts, path.Normal, mp, mp.clone().sub(path.GetFirstDeriv(0.5).normalize()));\r\n\r\n let r = radiusMap.get(path);\r\n let ocsInv = path.OCSInv;\r\n let radius = arcPts.map(p => p.applyMatrix4(ocsInv).setZ(0).distanceTo(ZeroVec));\r\n if (r) radius.push(r);\r\n let maxRadius = radius[Max(radius, (r1, r2) => r1 < r2)];\r\n radiusMap.set(path, maxRadius);\r\n }\r\n\r\n\r\n ExtendsCurve(path, pts);\r\n ExtendsCurve(nextPath, pts);\r\n }\r\n }\r\n\r\n for (let [arc, rad] of radiusMap)\r\n arc.Radius = rad;\r\n\r\n return pathCurves;\r\n }\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 this.WriteAllObjectRecord();\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\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\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 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 { Log, LogType } from \"../../Common/Log\";\r\nimport { Intent, Toaster, ToasterShowEntityMsg } from \"../../Common/Toaster\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { ParseExpr, safeEval } from \"../../Common/eval\";\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 { Entity } from \"../../DatabaseServices/Entity/Entity\";\r\nimport { GroupRecord } from \"../../DatabaseServices/GroupTableRecord\";\r\nimport { HardwareCompositeEntity } from \"../../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { HardwareTopline } from \"../../DatabaseServices/Hardware/HardwareTopline\";\r\nimport { ProcessingGroupRecord } from '../../DatabaseServices/ProcessingGroup/ProcessingGroupRecord';\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { GetSealedBoardContour } from \"../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { IHardwareType, Production } from \"../../Production/Product\";\r\nimport { ISealingData } from \"../../UI/Store/OptionInterface/IHighSealedItem\";\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\r\n GetCount(brs: (Board | IHardwareType)[], options: GetCountOption = null, IsBbsCountChaidan?: boolean)\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, IsBbsCountChaidan);\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 const chaiDan = IsBbsCountChaidan ? bs : bs.filter(b => b.IsChaiDan);\r\n areaCount.push({\r\n entity: bs[0],\r\n count: chaiDan.length,\r\n count2: this.GetBoardsArea(chaiDan)\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, IsBbsCountChaidan?: boolean)\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 let tags = this.ParseProcessingGroupTags(h);\r\n // :230行 代码对关联复合实体又进行一遍分析 需同步修改\r\n addDrillToMap(`${name},${unit},${factory},${this.ParseSpec(h, spec)},${this.ParseSpec(h, model)},${brand},${tags.join(\",\")}`, h);\r\n }\r\n\r\n this.UpdateBoardMap(brsProps);\r\n\r\n //统计 排钻 封边 关联的五金(排钻?)\r\n for (let br of brsProps)\r\n {\r\n if (!IsBbsCountChaidan && !br.IsChaiDan)//非拆单板我们不统计\r\n continue;\r\n\r\n //排钻 层板钉\r\n let dlist = br.DrillList;\r\n if (equaln(br.ContourCurve.Area, 0))\r\n {\r\n ToasterShowEntityMsg({\r\n msg: `${br.BoardProcessOption.roomName} ${br.BoardProcessOption.cabinetName} ${br.Name}轮廓有有问题,请检查`,\r\n timeout: 5000,\r\n intent: Intent.DANGER,\r\n ent: br\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, br))\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: `柜名:${br.BoardProcessOption.cabinetName} 房间名:${br.BoardProcessOption.roomName} 板名:${br.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, timeout: 5000, intent: Intent.DANGER });\r\n Log(`柜名:${br.BoardProcessOption.cabinetName} 房间名:${br.BoardProcessOption.roomName} 板名:${br.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, LogType.Error, [br, gd]);\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 (br.LayerNails.length > 0)\r\n for (let objId of br.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 br.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 let tags = this.ParseProcessingGroupTags(metal);\r\n // :113行 代码对关联复合实体又进行一遍分析 需同步修改\r\n addDrillToMap(`${name},${unit},${factory},${this.ParseSpec(metal, spec)},${this.ParseSpec(metal, model)},${brand},${tags.join(\",\")}`, metal);\r\n }\r\n }\r\n\r\n //封边\r\n let sealdData = GetSealedBoardContour(br);\r\n if (!sealdData)\r\n {\r\n ToasterShowEntityMsg({\r\n intent: Intent.DANGER,\r\n msg: \"板件扣封边失败,请检查板件轮廓!\",\r\n timeout: 10000,\r\n ent: br\r\n });\r\n throw \"错误:板扣除封边失败!\";\r\n }\r\n\r\n let sealData: ISealingData[] = Production.ParseSealData(sealdData);\r\n let color = br.BoardProcessOption[EBoardKeyList.Color];\r\n\r\n //封边留头量\r\n let sealReserve = HostApplicationServices.sealReserve * 2;\r\n\r\n let thickness = this.GetBoardThickness(br);\r\n\r\n for (let data of sealData)\r\n {\r\n if (equaln(0, data.size)) continue;\r\n data.length += sealReserve;\r\n\r\n let k = `${data.size}-${FixedNotZero(thickness, 2)}-${color}`;\r\n if (options && options.sealGruopKey)\r\n {\r\n options.sealGruopKey(k, br, 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 const accuracy = HostApplicationServices.chaidanOption.hardwareExpressionFormattingAccuracy;\r\n return ParseExpr(spec, accuracy, { 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 const accuracy = HostApplicationServices.chaidanOption.hardwareExpressionFormattingAccuracy;\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, accuracy) });\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), accuracy));\r\n hardwareCount.push({ name, count, entity: v[0], count2, length: count2 });\r\n }\r\n }\r\n }\r\n }\r\n\r\n ParseProcessingGroupTags = (entity: Entity) =>\r\n {\r\n return [...entity.ProcessingGroupList].map((g) =>\r\n {\r\n let obj = g?.Object;\r\n if (obj)\r\n return (obj as ProcessingGroupRecord).Name;\r\n });\r\n };\r\n private UpdateBoardMap(brs: Board[])\r\n {\r\n this.boardMap.clear();\r\n for (let b of brs)\r\n {\r\n let thickness = this.GetBoardThickness(b);\r\n let brMat = b.BoardProcessOption[EBoardKeyList.BrMat];\r\n let mat = b.BoardProcessOption[EBoardKeyList.Mat];\r\n let color = b.BoardProcessOption[EBoardKeyList.Color];\r\n let key = `${thickness}-${brMat}-${mat}-${color}`;\r\n let list = this.boardMap.get(key);\r\n if (!list)\r\n {\r\n list = [];\r\n this.boardMap.set(key, list);\r\n }\r\n list.push(b);\r\n }\r\n }\r\n GetBoardThickness(br: Board)\r\n {\r\n let size = Production.GetSpiteSize(br);\r\n if (size)\r\n return FixedNotZero(size.spliteThickness, 2);\r\n else\r\n return FixedNotZero(br.Thickness, 2);\r\n }\r\n GetBoardsArea(brs: Board[])\r\n {\r\n return brs.reduce((area, b) =>\r\n {\r\n let size = Production.GetSpiteSize(b);\r\n let ar: number;\r\n if (size)\r\n ar = size.spliteHeight * size.spliteWidth / 1e6;\r\n else\r\n ar = b.Width * b.Height / 1e6;\r\n ar = parseFloat(ar.toFixed(3));\r\n return area + ar;\r\n }, 0).toFixed(2);\r\n }\r\n}\r\n\r\nexport const lookOverBoardInfosTool = new LookOverBoardInfosTool();\r\n","import { 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 { 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","export const _CSGDEBUG = false;\r\n\r\n/** Epsilon used during determination of near zero distances.\r\n * @default\r\n */\r\nexport const EPS = 5e-2;\r\n\r\n// Tag factory: we can request a unique tag through CSG.getTag()\r\nexport let staticTag = 1;\r\nexport const getTag = () => staticTag++;\r\n","\r\n// //////////////////////////////\r\n// ## class fuzzyFactory\r\n// This class acts as a factory for objects. We can search for an object with approximately\r\n// the desired properties (say a rectangle with width 2 and height 1)\r\n// The lookupOrCreate() method looks for an existing object (for example it may find an existing rectangle\r\n// with width 2.0001 and height 0.999. If no object is found, the user supplied callback is\r\n// called, which should generate a new object. The new object is inserted into the database\r\n// so it can be found by future lookupOrCreate() calls.\r\n// Constructor:\r\n// numdimensions: the number of parameters for each object\r\n// for example for a 2D rectangle this would be 2\r\n\r\nimport { EPS } from \"./constants\";\r\n\r\n// tolerance: The maximum difference for each parameter allowed to be considered a match\r\nexport class FuzzyFactory\r\n{\r\n lookuptable: {};\r\n multiplier: number;\r\n constructor(numdimensions: number = 3, tolerance: number = EPS)\r\n {\r\n this.lookuptable = {};\r\n this.multiplier = 1.0 / tolerance;\r\n }\r\n\r\n // let obj = f.lookupOrCreate([el1, el2, el3], function(elements) {/* create the new object */});\r\n // Performs a fuzzy lookup of the object with the specified elements.\r\n // If found, returns the existing object\r\n // If not found, calls the supplied callback function which should create a new object with\r\n // the specified properties. This object is inserted in the lookup database.\r\n lookupOrCreate(els: number[], object: T): T\r\n {\r\n let hash = \"\";\r\n let multiplier = this.multiplier;\r\n for (let el of els)\r\n {\r\n let valueQuantized = Math.round(el * multiplier);\r\n hash += valueQuantized + \"/\";\r\n }\r\n if (hash in this.lookuptable) return this.lookuptable[hash];\r\n else\r\n {\r\n let hashparts = els.map(el =>\r\n {\r\n let q0 = Math.floor(el * multiplier);\r\n let q1 = q0 + 1;\r\n return [\"\" + q0 + \"/\", \"\" + q1 + \"/\"];\r\n });\r\n let numelements = els.length;\r\n let numhashes = 1 << numelements;\r\n for (let hashmask = 0; hashmask < numhashes; ++hashmask)\r\n {\r\n let hashmaskShifted = hashmask;\r\n hash = \"\";\r\n hashparts.forEach(hashpart =>\r\n {\r\n hash += hashpart[hashmaskShifted & 1];\r\n hashmaskShifted >>= 1;\r\n });\r\n this.lookuptable[hash] = object;\r\n }\r\n return object;\r\n }\r\n }\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, BufferGeometry, Float32BufferAttribute, MathUtils, Matrix4, ShapeUtils, Shape as TShape, Vector3 } from \"three\";\r\nimport { arrayPushArray, arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { ComputerCurvesNormalOCS, curveLinkGroup } from \"../../Common/CurveUtils\";\r\nimport { Status } from '../../Common/Status';\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { Contour, fastCurveInCurve2 } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { LinesType } from \"../../DatabaseServices/Entity/BoardInterface\";\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 { FuzzyFactory } from '../../csg/core/FuzzyFactory';\r\nimport { IntersectsBox } from \"../Box\";\r\nimport { CreateContour2 } from \"../CreateContour2\";\r\nimport { FastOffset } from \"../FastOffset\";\r\nimport { AsVector2, IdentityMtx4, equaln, equalv2, equalv3 } 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\r\n //对于未被面域分析出来的线,我们进行join操作\r\n let unusedLines: Line[] = [];\r\n for (let l of lines)\r\n if (!parse.GetCueveUsed(l))\r\n unusedLines.push(l);\r\n if (unusedLines.length > 2)\r\n {\r\n let groups = curveLinkGroup(unusedLines, 1);\r\n for (let g of groups)\r\n {\r\n if (g.length < 2) continue;\r\n let pl = new Polyline();\r\n pl.ColorIndex = g[0].ColorIndex;\r\n pl.OCS = ComputerCurvesNormalOCS(g);\r\n for (let cu of g)\r\n {\r\n if (pl.Join(cu, false, 0.1) === Status.True)\r\n cu.Erase();\r\n }\r\n\r\n pl.CloseMark = true;\r\n let c = Contour.CreateContour(pl, false) ?? CreateContour2(pl.Explode(), 0.1);;\r\n if (c && c.Area > 0.1)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"错误:构建板件的MeshGeometry的盖子生成轮廓失败了!\");\r\n }\r\n }\r\n\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) ?? CreateContour2(cs, 0.1);\r\n if (c)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"错误:构建板件的MeshGeometry的盖子生成轮廓失败了!\");\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\r\n //备份原始的槽,下面的代码为了合并槽,会将板的槽先清空,后续我们在还原它 (未来我们可能不强制合并板的槽 而是在这里合并? 保证板的槽的纯粹?例如矩形)\r\n let bakGrooves: ExtrudeSolid[];\r\n {\r\n //合并深度相同 但是半径不相同的槽\r\n\r\n let thicknessKnifsMap = new Map>();//深度->刀半径Set\r\n let thicknessGroovesMap = new Map();//深度->刀半径Set\r\n\r\n let fuzz = new FuzzyFactory(2, 1e-2);\r\n for (let g of br.Grooves)//准备数据 map\r\n {\r\n let thick = fuzz.lookupOrCreate([g.Thickness], g.Thickness);\r\n let knifsSet = thicknessKnifsMap.get(thick);\r\n let grooveArr = thicknessGroovesMap.get(thick);\r\n if (!knifsSet)\r\n {\r\n knifsSet = new Set();\r\n grooveArr = [];\r\n thicknessKnifsMap.set(thick, knifsSet);\r\n thicknessGroovesMap.set(thick, grooveArr);\r\n }\r\n grooveArr.push(g);\r\n knifsSet.add(g.KnifeRadius);\r\n }\r\n\r\n let mergeGrooves: ExtrudeSolid[] = [];\r\n for (let [thick, set] of thicknessKnifsMap)\r\n {\r\n if (set.size > 1)//如果深度相同的大于1\r\n {\r\n if (!bakGrooves)\r\n bakGrooves = br.Grooves.concat();//复制一个\r\n\r\n let arr = thicknessGroovesMap.get(thick).map(g =>\r\n {\r\n let newg = g.Clone();\r\n newg.KnifeRadius = 0;\r\n return newg;\r\n });\r\n br.Grooves.length = 0;\r\n br.Grooves.push(...arr);\r\n br.GrooveCheckMerge(false);\r\n\r\n mergeGrooves.push(...br.Grooves);\r\n }\r\n else\r\n {\r\n mergeGrooves.push(...thicknessGroovesMap.get(thick));\r\n }\r\n }\r\n\r\n if (bakGrooves)\r\n {\r\n br.Grooves.length = 0;\r\n br.Grooves.push(...mergeGrooves);\r\n }\r\n }\r\n\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 if (bakGrooves)\r\n {\r\n br.Grooves.length = 0;\r\n br.Grooves.push(...bakGrooves);\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, 1e-4);\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\nexport function 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\r\n if (!pos || !uvs || pos.count === 0) return;\r\n\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\r\n uvs.needsUpdate = true;\r\n }\r\n}\r\n","\r\nimport Flatbush from 'flatbush';\r\nimport { Box3, BoxGeometry, BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, Float32BufferAttribute, FrontSide, Frustum, Geometry, Group, InstancedInterleavedBuffer, InterleavedBufferAttribute, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Line as TLine, UVGenerator, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayClone, arrayLast, arrayRemoveIf, arraySortByNumber, arraySum } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { equalCurve } from \"../../Common/CurveUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { InteractionLog, Log, LogType } from \"../../Common/Log\";\r\nimport { MakeMirrorMtx, TransformVector, Vector2ApplyMatrix4, reviseMirrorMatrix, tempMatrix1 } from \"../../Common/Matrix4Utils\";\r\nimport { Status, UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { boardUVGenerator } from \"../../Geometry/BoardUVGenerator\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { FastExtrudeEdgeGeometry, FastExtrudeEdgeGeometryOfShape, FastWireframe } from \"../../Geometry/CreateWireframe\";\r\nimport { EdgesGeometry } from \"../../Geometry/EdgeGeometry\";\r\nimport { ExtrudeGeometryBuilder } from \"../../Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2\";\r\nimport { AsVector2, IdentityMtx4, MoveMatrix, XAxis, YAxis, ZAxis, ZeroVec, equaln, equalv2, equalv3, isIntersect, isParallelTo, isPerpendicularityTo } 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 protected bevelEnabled = false;\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 */\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\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 this.__UpdateVersion__++;\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 let normal = this.Normal.negate();\r\n\r\n for (let g of this.grooves)\r\n {\r\n g._SpaceOCS.copy(this._SpaceOCS);//因为在镜像(Extrude.ApplyMirrorMatrix)的时候 没有设置这个会导致错误(参考该函数的代码,似乎是为了实现柜子镜像) 所以拷贝一下\r\n g.objectId = new ObjectId;\r\n g.ApplyMatrix(m);\r\n\r\n //如果是镜像,如果槽的方向相反了,那么需要修正\r\n let gNormal = g.Normal;\r\n if (equalv3(normal, gNormal, 1e-3))\r\n {\r\n let p = g.Position.add(gNormal.multiplyScalar(g.thickness * 0.5));\r\n g.ApplyMatrix(MakeMirrorMtx(normal, p));\r\n }\r\n\r\n g.objectId = undefined;\r\n }\r\n\r\n \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\r\n //实现了这个函数后 实现了柜子的镜像\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n const curve = this.ContourCurve;\r\n if (curve instanceof Polyline && !equalv3(curve.Position, ZeroVec))//移除多段线的OCS(目前只判断了基点)\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 Vector2ApplyMatrix4(ocs, p.pt);\r\n curve.OCS = IdentityMtx4;\r\n }\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 curve.ApplyMatrix(new Matrix4().makeRotationX(Math.PI));\r\n else\r\n reviseMirrorMatrix(curve.OCSNoClone, 1);\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 curve.ApplyMatrix(new Matrix4().makeRotationY(Math.PI));\r\n else\r\n reviseMirrorMatrix(curve.OCSNoClone, 0);\r\n\r\n this.SetContourCurve(curve);\r\n }\r\n\r\n if (this.grooves.length)\r\n this.Update(UpdateDraw.Geometry);\r\n\r\n return this;\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-4))//避免18.0009 无法改成 18\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 //修复#I7CBHO的过程中 直接修改了这个属性\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 */\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!`, LogType.Warning);\r\n this.isRect = equaln(this.width * this.height, this.ContourCurve.Area, 0.1);\r\n\r\n // if (area2 < 0)\r\n // this.contourCurve.Reverse();//矩形板的封边与排钻不需要考虑 异形板的排钻封边可能会错误(无所谓了)\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\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() { return this.GetShape(false); }\r\n\r\n private GetShape(filterSmallGroove = false)\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) && (!filterSmallGroove || g.ContourCurve.Area > 900))\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 \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 override GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3,\r\n frustum?: Frustum,\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 {\r\n if (!frustum || frustum.intersectsBox(g.BoundingBox))\r\n pts.push(...g.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum));\r\n }\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.GetFirstDeriv(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\r\n /**\r\n * (步骤2)\r\n * 更新凹槽位置和厚度(校验凹槽的Z轴位置是否存在交集)\r\n */\r\n GrooveCheckPosition(target: ExtrudeSolid): Status\r\n {\r\n if (target.Width < 1e-1 || target.Height < 1e-1 || target.Thickness < 1e-1)\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-2) && 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-2))\r\n target.thickness = this.thickness;\r\n\r\n return target.thickness > 1e-2 ? Status.True : Status.False;\r\n }\r\n\r\n /**\r\n * (步骤3)\r\n * 计算凹槽合并\r\n */\r\n GrooveCheckMerge(checkGrooveContourCurve = true)\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 (checkGrooveContourCurve && 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 groove 凹槽(不拷贝,直接被修改)\r\n * @returns this[] 凹槽在本实体中正确的约束状态.(可能分裂成为多个)\r\n */\r\n private GrooveCheckContour(groove: ExtrudeSolid): ExtrudeSolid[]\r\n {\r\n let matrixToTarget = groove.OCSInv.multiply(this.OCS);\r\n matrixToTarget.elements[14] = 0;//z->0\r\n\r\n //理论上只有大洞才需要优化,小洞无所谓了\r\n let thisShape = this.GetShape(true).ApplyMatrix(matrixToTarget);\r\n let targetShape = new Shape(Contour.CreateContour([groove.ContourCurve.Clone()], false));\r\n\r\n let inters = thisShape.IntersectionBoolOperation(targetShape);\r\n\r\n if (inters.length === 1)\r\n {\r\n groove.ContourCurve = inters[0].Outline.Curve;\r\n let grooves = [groove];\r\n groove.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 = groove.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 allDepthGrooves: 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 allDepthGrooves.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 === allDepthGrooves.length)\r\n {\r\n //在拉伸夹点后,全深槽如果不改原始的板的信息,那么它无法在递归检查,这个时候如果不校验,那么它将不会在被校验\r\n for (let g of allDepthGrooves)\r\n g.CheckContourCurve();\r\n\r\n this.grooves.push(...allDepthGrooves);\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\r\n //#endregion 保持旧的槽数据 (必须在这里写代码 因为下面会修改hole.Curve)\r\n let p = hole.Curve.StartPoint;\r\n let oldGrooveIndex = subtractShape.ShapeList.findIndex(s => s.Outline.Curve.PtOnCurve(p));\r\n let oldGroove = allDepthGrooves[Math.max(oldGrooveIndex, 0)];\r\n\r\n groove.knifeRadius = oldGroove.knifeRadius;\r\n groove.groovesAddWidth = oldGroove.groovesAddWidth;\r\n groove.groovesAddDepth = oldGroove.groovesAddDepth;\r\n groove.groovesAddLength = oldGroove.groovesAddLength;\r\n //#endregion\r\n\r\n groove.OCS = this.OCSNoClone;\r\n groove.ContourCurve = hole.Curve;\r\n groove.thickness = this.thickness;\r\n\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\r\n //#endregion 保持旧的槽数据 (必须在这里写代码 因为下面会修改hole.Curve)\r\n let p = hole.Curve.StartPoint;\r\n let oldGrooveIndex = subtractShape.ShapeList.findIndex(s => s.Outline.Curve.PtOnCurve(p));\r\n let oldGroove = allDepthGrooves[Math.max(oldGrooveIndex, 0)];\r\n\r\n groove.knifeRadius = oldGroove.knifeRadius;\r\n groove.groovesAddWidth = oldGroove.groovesAddWidth;\r\n groove.groovesAddDepth = oldGroove.groovesAddDepth;\r\n groove.groovesAddLength = oldGroove.groovesAddLength;\r\n //#endregion\r\n\r\n groove.OCS = this.OCSNoClone;\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 this.IsLazyGrooveCheck = false;\r\n if (this.IsNeedGrooveCheck)\r\n this.GrooveCheckAllAutoSplit();\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, this.Freeze));\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, FrontSide, true, this.Freeze)),\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 //在同步反应器中,当存在关联拉槽的实体和本实体一起被删除后,会更新本实体,然后导致同步认为它没有子实体\r\n if (this._isErase) return false;\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 //因为这里更新了mesh geom 所以我们必须更新它.\r\n this._MeshGeometry = this.UpdateMeshGeom(this._MeshGeometry);\r\n this._MeshGeometry[\"IsMesh\"] = true;\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 InteractionLog([{ msg: `${this.Name}(${id.Index})`, entity: [this] }, { msg: \"关联槽已逃离!\" }], LogType.Warning);\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 InteractionLog([{ msg: `${this.Name}(${this.Id.Index})`, entity: [this] }, { msg: \"关联槽已逃离或者被清除!\" }], LogType.Warning);\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 this._EdgeGeometry = undefined;//清理掉(以便在被csg切割后得到edgegeom)\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 < MaxDrawGrooveCount)\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 UVGenerator: this.UCGenerator,\r\n depth: this.bevelEnabled ? this.thickness - 4 : this.thickness,\r\n bevelEnabled: this.bevelEnabled,\r\n bevelThickness: 2,\r\n bevelSize: 2,\r\n bevelOffset: -2,\r\n bevelSegments: 1,\r\n };\r\n let geo = new ExtrudeGeometry(shape.Shape, extrudeSettings);\r\n geo.applyMatrix4(contour.OCSNoClone);\r\n\r\n if (this.bevelEnabled)\r\n geo.translate(0, 0, 2);\r\n\r\n this.UpdateUV(geo, contour.OCSNoClone);\r\n\r\n //板在某些时候需要布尔运算(二维刀路)\r\n this._MeshGeometry = this.UpdateMeshGeom(geo);\r\n this._MeshGeometry[\"IsMesh\"] = true;\r\n\r\n this.GenWorldUV(this._MeshGeometry);\r\n\r\n //edge geometry\r\n if (grooves.length < MaxDrawGrooveCount && !this._EdgeGeometry)//这个代码保证线框和概念对齐\r\n {\r\n let coords = FastExtrudeEdgeGeometryOfShape(shape.Shape, 0, this.thickness, 12, true);\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n edgeGeo.applyMatrix4(contour.OCSNoClone);\r\n this._EdgeGeometry = edgeGeo;\r\n }\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n let builder = new ExtrudeGeometryBuilder(this);\r\n\r\n this._MeshGeometry = builder.MeshGeometry;\r\n this._MeshGeometry = this.UpdateMeshGeom(this._MeshGeometry);\r\n if (grooves.length < MaxDrawGrooveCount && !this._EdgeGeometry)\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 //子类重载,用于二次计算几何体(例如二维刀路布尔运算)\r\n UpdateMeshGeom(geo: BufferGeometry | Geometry): BufferGeometry\r\n {\r\n return geo as BufferGeometry;\r\n }\r\n\r\n protected get Has2DPath() { return false; }\r\n\r\n protected _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.Has2DPath && (this.grooves.length === 0 || this.grooves.every(g => equaln(g.thickness, this.thickness))))\r\n )\r\n {\r\n let coords = FastExtrudeEdgeGeometry(this, this.ColorIndex, 12, 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 \r\n\r\n ClearDraw(): this\r\n {\r\n this.UpdateDrawGeometry();\r\n return super.ClearDraw();\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, this.Freeze);\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, FrontSide, true, this.Freeze)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())\r\n );\r\n }\r\n else if (renderType === RenderType.ModelGroove)\r\n {\r\n obj.add(\r\n // new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(9, FrontSide, true, this.Freeze)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())\r\n );\r\n obj.add(this.GetModelGroove());\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, this.Freeze);\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, FrontSide, true, this.Freeze);\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 private GetModelGroove()\r\n {\r\n const grooves: ExtrudeSolid[] = [];\r\n for (const sp of this.__CacheSplitExtrudes ?? [])\r\n {\r\n grooves.push(...sp.grooves);\r\n }\r\n const group = new Group();\r\n for (const groove of grooves)\r\n {\r\n const grooveClone = groove.Clone();\r\n grooveClone.UpdateDrawGeometry();\r\n const mtx = new Matrix4().premultiply(grooveClone.OCSNoClone).premultiply(this.OCSInv);\r\n\r\n const edgeGeo = grooveClone.EdgeGeometry;\r\n edgeGeo.applyMatrix4(mtx);\r\n const line = new LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(1, this.Freeze));\r\n\r\n const meshGeo = grooveClone.MeshGeometry;\r\n meshGeo.applyMatrix4(mtx);\r\n const mesh = new Mesh(meshGeo, ColorMaterial.GetConceptualMaterial(1, FrontSide, true, this.Freeze, 0.6));\r\n group.add(mesh, line);\r\n }\r\n return group;\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 { 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 if (renderType === RenderType.ModelGroove) return;\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 { Matrix4 } from \"three\";\r\nimport { 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 /**\r\n * 备注\r\n */\r\n @AutoRecord DataList: [string, string][] = [];\r\n @AutoRecord RelevanceBoards: ObjectId[] = [];\r\n @AutoRecord RelevanceHardware: ObjectId[] = []; //当这个实体为复合板时,关联五金的信息\r\n @AutoRecord RelevanceHandle: 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 ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n super.ApplyMirrorMatrix(m);\r\n\r\n //\"左\",\"右\"互换\r\n if (this.HardwareOption.model.includes(\"左\"))\r\n this.HardwareOption.model = this.HardwareOption.model.replace(\"左\", \"右\");\r\n else if (this.HardwareOption.model.includes(\"右\"))\r\n this.HardwareOption.model = this.HardwareOption.model.replace(\"右\", \"左\");\r\n\r\n return this;\r\n }\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 if (v > 4)\r\n {\r\n let count = file.Read();\r\n this.RelevanceHandle.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.RelevanceHandle.push(objId);\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(5);\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 file.Write(this.RelevanceHandle.length);\r\n for (let id of this.RelevanceHandle)\r\n file.WriteSoftObjectId(id);\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { DrillType } from \"../../Add-on/DrawDrilling/DrillType\";\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 { ZAxis, equaln, equalv3 } 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.GetFirstDeriv(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","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\nconst x = new Vector3;\r\nconst y = new Vector3;\r\n\r\nlet tempPolyline: Polyline;\r\n\r\n\r\n/**\r\n * 转换成多段线点表(pts bul)\r\n * @param cu\r\n * @param [isOutline=true] 如果是外部轮廓,则返回逆时针点表\r\n * @returns pts buls\r\n */\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 ptsBuls = cu.PtsBuls;\r\n\r\n let ocs = cu.OCSNoClone;\r\n //判断是不是被镜像了\r\n x.setFromMatrixColumn(ocs, 0);\r\n y.setFromMatrixColumn(ocs, 1);\r\n let z1 = x.cross(y);\r\n let isMirror = !equaln(z1.z, 1, 1e-3);\r\n\r\n for (let i = 0; i < ptsBuls.pts.length; i++)\r\n {\r\n Vector2ApplyMatrix4(ocs, ptsBuls.pts[i]);\r\n if (isMirror)\r\n ptsBuls.buls[i] *= -1;\r\n }\r\n\r\n if (isOutline && cu.IsClose)\r\n {\r\n tempPolyline = tempPolyline || new Polyline;\r\n tempPolyline.LineData.length = 0;\r\n for (let i = 0; i < ptsBuls.pts.length; i++)\r\n tempPolyline.LineData.push({ pt: ptsBuls.pts[i], bul: ptsBuls.buls[i] });\r\n\r\n if (cu.Area2 < 0)\r\n {\r\n tempPolyline.Reverse();\r\n ptsBuls = tempPolyline.PtsBuls;\r\n }\r\n tempPolyline.LineData.length = 0;\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 { FaceDirection } from \"../Add-on/DrawDrilling/DrillType\";\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 { InteractionLog, LogType } from \"../Common/Log\";\r\nimport { Intent, Toaster, ToasterShowEntityMsg } from \"../Common/Toaster\";\r\nimport { FixedNotZero } from \"../Common/Utils\";\r\nimport { ParseExpr, safeEval } from \"../Common/eval\";\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 { BoardOpenDir } from \"../DatabaseServices/Entity/BoardInterface\";\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 { GroupRecord } from \"../DatabaseServices/GroupTableRecord\";\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 { IsBetweenA2B, MoveMatrix, XAxis, angleTo, equaln, equalv2, equalv3, isIntersect2, isParallelTo, isPerpendicularityTo } from \"../Geometry/GeUtils\";\r\nimport { BrSealedData, GetSealedBoardContour } from \"../GraphicsSystem/CalcEdgeSealing\";\r\nimport { FeedingToolPath, GetModelingFromCustomDrill } from \"../GraphicsSystem/ToolPath/FeedingToolPath\";\r\nimport { EMetalsType, IHardwareOption, IToplineOption } from \"../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { IHighEdgeRemarkItem, ISealingData } from \"../UI/Store/OptionInterface/IHighSealedItem\";\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 name: string;\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 boardEdgeRemark: IHighEdgeRemarkItem[]; //板边备注信息\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, redundancyKnif = 0): ISpliteOrderData | undefined\r\n {\r\n let sealedData = GetSealedBoardContour(br);\r\n if (!sealedData)\r\n {\r\n ToasterShowEntityMsg({\r\n msg: br.Name + \" 轮廓错误,可能存在轮廓自交,请检查后重新拆单!(错误的板已经选中,您可以按住鼠标中键查看该板!)(使用FISC命令可以修复自交轮廓!)\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n ent: br.__OriginalEnt__ ?? br\r\n });\r\n return undefined;\r\n }\r\n let { brContour: orgContour, sealedContour: sealedOutline } = sealedData;\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, redundancyKnif);\r\n\r\n let boardContour: IContourData;\r\n if (GetSpiteSize(br))\r\n boardContour = ConverToPtsBul(br.ContourCurve);//不分裂圆弧转点表\r\n\r\n //每段封边信息\r\n let perSealData = ParseSealData(sealedData);\r\n\r\n let perBoardEdgeRemarkData = br.IsSpecialShape ? ParseBoardEdgeRemarkData(sealedData, br.BoardProcessOption.highBoardEdgeRemark) : [];\r\n //因为传递给拆单软件的数据是逆时针,所以我们翻转它\r\n if (orgContour.Area2 < 0) perSealData.reverse();\r\n\r\n return {\r\n info: GetBoardInfo(br, size),\r\n originOutlin: originOutlinePtsBul,//拼错了 未扣封边的点表\r\n outline: sealedOutlinePtsBul, //扣完封边的点表\r\n sealing: perSealData,//每段曲线的封边信息\r\n boardEdgeRemark: perBoardEdgeRemarkData, //每段曲线的板边备注信息\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\r\n\r\n //生产那边需要一一对应的数据\r\n export function ParseSealData(sealData: BrSealedData): ISealingData[]\r\n {\r\n let seals: ISealingData[] = [];\r\n for (let i = 0; i < sealData.brCurves.length; i++)\r\n {\r\n let curve = sealData.brCurves[i];\r\n let sealD = sealData.highSeals[i];\r\n\r\n if (curve instanceof Circle)\r\n {\r\n let seal2: ISealingData = {\r\n length: curve.Length * 0.5,\r\n ...sealD\r\n };\r\n\r\n seals.push(seal2);\r\n seals.push({ ...seal2 });\r\n return seals;\r\n }\r\n else\r\n {\r\n if (curve instanceof Polyline)//多段线炸开\r\n {\r\n for (let subC of curve.Explode())\r\n {\r\n let seal2: ISealingData = {\r\n length: subC.Length,\r\n ...sealD\r\n };\r\n seals.push(seal2);\r\n }\r\n }\r\n else//直线 圆弧直接加\r\n {\r\n let seal2: ISealingData = {\r\n length: curve.Length,\r\n ...sealD\r\n };\r\n seals.push(seal2);\r\n }\r\n }\r\n }\r\n return seals;\r\n }\r\n\r\n export function ParseBoardEdgeRemarkData(sealData: BrSealedData, highBoardEdgeRemark: IHighEdgeRemarkItem[]): IHighEdgeRemarkItem[]\r\n {\r\n let remarks: IHighEdgeRemarkItem[] = [];\r\n for (let i = 0; i < sealData.brCurves.length; i++)\r\n {\r\n let curve = sealData.brCurves[i];\r\n let remarkData = highBoardEdgeRemark[i];\r\n\r\n if (curve instanceof Circle)\r\n {\r\n remarks.push(remarkData);\r\n remarks.push({ ...remarkData });\r\n return remarks;\r\n }\r\n else\r\n {\r\n if (curve instanceof Polyline)//多段线炸开\r\n {\r\n for (let subC of curve.Explode())\r\n {\r\n remarks.push(remarkData);\r\n }\r\n }\r\n else//直线 圆弧直接加\r\n {\r\n remarks.push(remarkData);\r\n }\r\n }\r\n }\r\n return remarks;\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 (m.shape.Holes.length === 0 && 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, false),\r\n holes: m.shape.Holes.map(h => ConverToPtsBul(h.Curve, 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\r\n /**\r\n * 计算板的造型走刀数据(包括自定义排钻的走刀 侧面走刀)\r\n * @param br\r\n * @param offsetTanslation\r\n */\r\n export function GetBoardModelingData(br: Board, offsetTanslation: Vector3, redundancyKnif = 0)\r\n {\r\n const tool = FeedingToolPath.GetInstance();\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 (m.shape.Holes.length === 0 && 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, redundancyKnif);//走刀路径\r\n if (!isSide)\r\n paths.forEach(path => path.ApplyMatrix(tMtx));\r\n\r\n //走刀的ptsbuls\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, false),\r\n holes: m.shape.Holes.map(h => ConverToPtsBul(h.Curve, 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 export function GetSpiteSize(br: Board)\r\n {\r\n let [spHeight, spWidth, spThickness] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness];\r\n const isEffect = HostApplicationServices.chaidanOption.partialSplitValueCanTakesEffect;\r\n const param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n\r\n if (isEffect ? (spHeight || spWidth || spThickness) : (spHeight && spWidth && spThickness))\r\n {\r\n spHeight = spHeight || br.Height.toString();\r\n spWidth = spWidth || br.Width.toString();\r\n spThickness = spThickness || br.Thickness.toString();\r\n\r\n const spliteHeight = safeEval(spHeight, param, \"L\");\r\n const spliteWidth = safeEval(spWidth, param, \"W\");\r\n const spliteThickness = safeEval(spThickness, param, \"H\");\r\n\r\n if (spliteHeight && spliteWidth && spliteThickness)\r\n {\r\n return {\r\n spliteHeight,\r\n spliteWidth,\r\n spliteThickness\r\n };\r\n }\r\n }\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 if (size)\r\n return new Polyline().Rectangle(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, 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 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 if (\r\n Math.max(z0, 0) < Math.min(z1, br.Thickness) - 1e-6\r\n && br.ContourCurve.PtInCurve(sp.setZ(0))\r\n //层板钉中心点不在造型槽内\r\n && modelings.every(m =>\r\n {\r\n if (m.dir !== face && (depth + m.thickness) < br.Thickness)//不相交\r\n return true;\r\n\r\n // if (m.shape.Holes.some(h => h.Curve.PtInCurve(sp))) return true; //层板钉在孤岛内 现实中应该不会有\r\n return !m.shape.Outline.Curve.PtInCurve(sp);\r\n })\r\n )\r\n {\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 name: '层板钉'\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 (m.shape.Holes.length === 0 && 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.Ljg,//设置为偏心轮导致我们分析大孔面方向和板的大孔面一致时错误,所以改成连接杆\r\n position: center,\r\n radius: cu.Radius,\r\n depth: m.thickness,\r\n face: m.dir as number,\r\n name: GetGroupName(cu)\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(cyHole: CylinderHole, br: Board, offsetTanslation: Vector3, data: IBoardHoleInfo, outline: ExtrudeContourCurve)\r\n {\r\n let brInv = br.OCSInv;\r\n let brNormal = br.Normal;\r\n let brInvRo = new Matrix4().extractRotation(brInv);\r\n let position = cyHole.Position.applyMatrix4(brInv);\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 = cyHole.Height;\r\n let diffMat = brInv.clone().multiply(cyHole.OCSNoClone);\r\n let x = new Vector3().setFromMatrixColumn(diffMat, 0);\r\n let angle = angleTo(XAxis, x);\r\n\r\n let cyNormal = cyHole.Normal.applyMatrix4(brInvRo);\r\n let pos2 = position.clone().add(cyNormal.multiplyScalar(depth));\r\n\r\n if (cyHole.Type === GangDrillType.Pxl || cyHole.Type === GangDrillType.WoodPXL)\r\n {\r\n if (isParallelTo(cyHole.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n if (!IsBetweenA2B(position.x, -cyHole.Radius, br.Width + cyHole.Radius, 1e-6)\r\n || !IsBetweenA2B(position.y, -cyHole.Radius, br.Height + cyHole.Radius, 1e-6)\r\n || !HoleInBoard(position.clone().setZ(0), cyHole.Radius, outline)) return;\r\n\r\n position.sub(offsetTanslation);\r\n\r\n //#region 求得真实的求交范围\r\n let z0 = position.z;\r\n let z1 = pos2.z;\r\n if (z0 > z1) [z0, z1] = [z1, z0];\r\n\r\n let i1 = Math.max(z0, 0);\r\n let i2 = Math.min(z1, br.Thickness);\r\n if (i2 - i1 < CanDrawHoleFuzz) return;//相交范围小于0.1\r\n\r\n if (equaln(i1, 0, CanDrawHoleFuzz)) face = FaceDirection.Back;\r\n else if (equaln(i2, br.Thickness, CanDrawHoleFuzz)) face = FaceDirection.Front;\r\n else return;//不在正面 也不在反面\r\n\r\n depth = i2 - i1;//真实的相交范围\r\n //#endregion\r\n\r\n isPush = true;\r\n }\r\n }\r\n else if (cyHole.Type === GangDrillType.Ljg || cyHole.Type === GangDrillType.Wood)\r\n {\r\n if (isPerpendicularityTo(cyHole.Normal, brNormal, CanDrawHoleFuzz))//侧孔\r\n {\r\n let z = position.z;\r\n if (!IsBetweenA2B(z, -cyHole.Radius, br.Thickness + cyHole.Radius, 1e-6)) return;\r\n\r\n let sp = position.clone().setZ(0); //真实数据\r\n let ep = position.clone().add(cyHole.Normal.multiplyScalar(cyHole.Height).applyMatrix4(brInvRo)).setZ(0); //真实数据\r\n let testLine = new Line(sp, ep);\r\n let iPt = outline.IntersectWith(testLine, 0, CanDrawHoleFuzz)[0];\r\n if (!iPt)\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: \"侧孔与板无交点,无法加工该侧孔!\" }], LogType.Warning);\r\n return;\r\n }\r\n position = iPt.clone().setZ(z);//排钻开始的位置\r\n for (let p of [sp, ep])\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 InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: \"侧孔位置有问题,排钻不在板轮廓内!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n holes = data.sideHoles;\r\n face = Math.floor(outline.GetParamAtPoint(iPt));//板在那个边上\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 (cyHole.Type === GangDrillType.Wood)//木销\r\n {\r\n if (!outline.PtInCurve(position.clone().setZ(0))) return;\r\n position.sub(offsetTanslation);\r\n\r\n //#region 求得真实的求交范围\r\n let z0 = position.z;\r\n let z1 = pos2.z;\r\n if (z0 > z1) [z0, z1] = [z1, z0];\r\n\r\n let i1 = Math.max(z0, 0);\r\n let i2 = Math.min(z1, br.Thickness);\r\n if (i2 - i1 < CanDrawHoleFuzz) return;//相交范围小于0.1\r\n\r\n if (equaln(i1, 0, CanDrawHoleFuzz)) face = FaceDirection.Back;\r\n else if (equaln(i2, br.Thickness, CanDrawHoleFuzz)) face = FaceDirection.Front;\r\n else return;//不在正面 也不在反面\r\n\r\n depth = i2 - i1;//真实的相交范围\r\n //#endregion\r\n\r\n holes = data.frontBackHoles;\r\n isPush = true;\r\n }\r\n }\r\n else\r\n {\r\n if (isParallelTo(cyHole.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n if (!IsBetweenA2B(position.x, -cyHole.Radius, br.Width + cyHole.Radius, CanDrawHoleFuzz)\r\n || !IsBetweenA2B(position.y, -cyHole.Radius, br.Height + cyHole.Radius, CanDrawHoleFuzz)\r\n || !isIntersect2(0, br.Thickness, position.z, pos2.z, -CanDrawHoleFuzz)\r\n || !HoleInBoard(position.clone().setZ(0), cyHole.Radius, outline, true)) return;\r\n\r\n position.sub(offsetTanslation);\r\n holes = data.frontBackHoles;\r\n face = !equalv3(cyHole.Normal, brNormal, CanDrawHoleFuzz) ? FaceDirection.Front : FaceDirection.Back;\r\n isPush = true;\r\n }\r\n }\r\n isPush && holes.push({\r\n type: cyHole.Type,\r\n position,//排钻开始位置\r\n endPt, //排钻结束的位置(在板的坐标系)\r\n radius: cyHole.Radius,//排钻半径\r\n depth,//排钻的插入深度\r\n face,//板在哪个边上\r\n angle,\r\n name: GetGroupName(cyHole)\r\n });\r\n }\r\n\r\n /**分析自定义圆柱排钻\r\n *\r\n * isRelativeHardware 关联的五金使用此类型误差\r\n * CanDrawHoleFuzz)//区间交集必须大于CanDrawHoleFuzz\r\n * CanDrawHoleFuzz)//区间交集必须大于CanDrawHoleFuzz\r\n *\r\n */\r\n function ParseExtrudeHoles(d: ExtrudeHole, br: Board, offsetTanslation: Vector3, data: IBoardHoleInfo, outline: ExtrudeContourCurve, isCheckGroove = false, isRelativeHardware = 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 InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: \"的孔嵌在板中间,无法加工,已经跳过!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n if (!(outline.PtInCurve(p)))//在轮廓内\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: \"的孔不在板轮廓内,无法加工,已经跳过!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n if (groovesOutlines.some(g => g.PtInCurve(p)))//在洞内\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: \"的孔在造型内,无法加工,已经跳过!\" }], LogType.Warning);\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 : (isRelativeHardware ? GangDrillType.Ljg : d.Type),\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 name: GetGroupName(d)\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 if (sp.z > -cir.Radius\r\n && sp.z < br.Thickness + cir.Radius\r\n && Math.max(minX, 0) < (Math.min(br.Width, maxX) + (isRelativeHardware ? -CanDrawHoleFuzz : 1e-6))//区间交集必须大于CanDrawHoleFuzz\r\n && Math.max(minY, 0) < (Math.min(br.Height, maxY) + (isRelativeHardware ? -CanDrawHoleFuzz : 1e-6))//区间交集必须大于CanDrawHoleFuzz\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 InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: `的${isRelativeHardware ? \"五金\" : \"排钻\"}嵌在板件内部,已经跳过!` }], LogType.Warning);\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 (!equalv2(p, 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 name: GetGroupName(d)\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 const accuracy = HostApplicationServices.chaidanOption.hardwareExpressionFormattingAccuracy;\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, accuracy, { L: size.x, W: size.y, H: size.z });\r\n data.model = ParseExpr(data.model, accuracy, { L: size.x, W: size.y, H: size.z });\r\n data.factory = ParseExpr(data.factory, accuracy, { L: size.x, W: size.y, H: size.z });\r\n data.brand = ParseExpr(data.brand, accuracy, { 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 const accuracy = HostApplicationServices.chaidanOption.hardwareExpressionFormattingAccuracy;\r\n d.spec = ParseExpr(data.spec, accuracy, { 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 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, false),\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, redundancyKnif = 0)\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();\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(\r\n { Thickness: brThickness, ContourCurve: brContour },\r\n {\r\n shape,\r\n thickness,\r\n dir, knifeRadius, addLen, addWidth, addDepth\r\n },\r\n redundancyKnif);\r\n\r\n return paths.map((c: ExtrudeContourCurve) => ConverToPtsBul(c, false));\r\n }\r\n export function GetGroupName(ent: Entity): string\r\n {\r\n let group = ent.GroupId?.Object as GroupRecord;\r\n if (!group || !(group instanceof GroupRecord)) return \"未知(无拆单名称)\";\r\n return group.Name;\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 { Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../Common/ArrayExt\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { MergeCurvelist } from \"../Common/CurveUtils\";\r\nimport { InteractionLog, LogType } from \"../Common/Log\";\r\nimport { Intent, Toaster } from \"../Common/Toaster\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { Contour } 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 } 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 { IdentityMtx4, XAxis, equaln, equalv3, isParallelTo } from \"../Geometry/GeUtils\";\r\nimport { Max } from \"../Nest/Common/Util\";\r\nimport { Production } from \"../Production/Product\";\r\nimport { IHighEdgeRemarkItem, IHighSealedItem } from \"../UI/Store/OptionInterface/IHighSealedItem\";\r\nimport { OffsetPolyline } from \"./OffsetPolyline\";\r\nimport { ParseEdgeSealDir } from \"./ParseEdgeSealDir\";\r\n\r\ntype CurveGroups = (Curve[])[];\r\n\r\n/**\r\n * 将曲线分段(根据高级封边的特性 (因为圆弧无法单独使用封边,所以和圆弧在一起的曲线必须和圆弧一样的封边,否则偏移失败))\r\n * @l-arc-l,l-arc-arc-l,l-arc-l-arc-l....\r\n * @param in_out_curves 曲线组( 函数结束后 这个数组被改变 )\r\n * @returns 返回编组 curveGroups\r\n */\r\nexport function SubsectionCurvesOfHightSeal(in_out_curves: Curve[]): CurveGroups\r\n{\r\n let curveGroups: CurveGroups = [];\r\n let usedCu: WeakSet = new WeakSet();\r\n\r\n //归类曲线,返回归类是否成功\r\n const paragraph = (nextCurve: Curve, curCurve: Curve, curvesGroup: Curve[], isBack: boolean) =>\r\n {\r\n const curIsLine = curCurve instanceof Line;\r\n const nextIsLine = nextCurve instanceof Line;\r\n\r\n if (usedCu.has(nextCurve))\r\n return false;\r\n\r\n if (curIsLine !== nextIsLine)//直线和圆弧\r\n {\r\n if (curIsLine)\r\n {\r\n if (isBack)\r\n {\r\n if (!isParallelTo(curCurve.GetFirstDeriv(0).normalize(), nextCurve.GetFirstDeriv(0).normalize()))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!isParallelTo(curCurve.GetFirstDeriv(0).normalize(), nextCurve.GetFirstDeriv(1).normalize()))\r\n return false;\r\n }\r\n }\r\n\r\n if (nextIsLine)\r\n {\r\n if (isBack)\r\n {\r\n if (!isParallelTo(curCurve.GetFirstDeriv(1).normalize(), nextCurve.GetFirstDeriv(0).normalize()))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!isParallelTo(curCurve.GetFirstDeriv(0).normalize(), nextCurve.GetFirstDeriv(0).normalize()))\r\n return false;\r\n }\r\n }\r\n }\r\n else if (nextIsLine)//都是直线\r\n {\r\n //共线且相连的直线分为一组 #I11T1Z\r\n if (!isParallelTo(nextCurve.GetFirstDeriv(0).normalize(), curCurve.GetFirstDeriv(0).normalize()))\r\n return false;\r\n\r\n let pts = [curCurve.StartPoint, curCurve.EndPoint];\r\n let pts2 = [nextCurve.StartPoint, nextCurve.EndPoint];\r\n if (pts.every(p => pts2.every(p2 => !equalv3(p, p2, 1e-6))))//2条线完全分离 没有共同点\r\n return false;\r\n }\r\n //else 都是圆弧 必然成组\r\n\r\n if (isBack)\r\n curvesGroup.push(nextCurve);\r\n else\r\n curvesGroup.unshift(nextCurve);\r\n\r\n usedCu.add(nextCurve);\r\n return true;\r\n };\r\n\r\n let caclCus = in_out_curves.filter(c => !equaln(c.Length, 0));\r\n\r\n while (caclCus.length > 0)\r\n {\r\n let curCurve = caclCus.shift();\r\n if (usedCu.has(curCurve))\r\n continue;\r\n\r\n let curvesGroup = [curCurve];//编组\r\n usedCu.add(curCurve);\r\n //往后搜索\r\n for (let i = 0; i < caclCus.length; i++)\r\n {\r\n if (!paragraph(caclCus[i], curCurve, curvesGroup, true))\r\n break;\r\n curCurve = caclCus[i];\r\n }\r\n //只有第一条才需要往前搜索\r\n if (caclCus.length === in_out_curves.length - 1)\r\n {\r\n curCurve = curvesGroup[0];\r\n //往前搜索\r\n for (let i = caclCus.length - 1; i >= 0; i--)\r\n {\r\n if (!paragraph(caclCus[i], curCurve, curvesGroup, false))\r\n break;\r\n curCurve = caclCus[i];\r\n }\r\n }\r\n curveGroups.push(curvesGroup);\r\n }\r\n\r\n in_out_curves.length = 0;\r\n //同组多条曲线连接为多段线\r\n for (let g of curveGroups)\r\n {\r\n if (g.length === 1)\r\n in_out_curves.push(g[0]);\r\n else\r\n {\r\n let pl = new Polyline();\r\n for (let c of g)\r\n pl.Join(c);\r\n in_out_curves.push(pl);\r\n }\r\n }\r\n\r\n return curveGroups;\r\n}\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: IHighSealedItem[] = [];\r\n for (let d of br.BoardProcessOption.highSealed)\r\n if (d.size != null)\r\n highSeals.push({ ...d });\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.GetFirstDeriv(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\nexport function GetHighBoardEdgeRemark(br: Board, sealcus: Curve[]): IHighEdgeRemarkItem[]\r\n{\r\n const opt = br.BoardProcessOption;\r\n\r\n //顺序和封边一样\r\n if (opt[EBoardKeyList.SpliteHeight]\r\n && opt[EBoardKeyList.SpliteWidth]\r\n && opt[EBoardKeyList.SpliteThickness]\r\n )\r\n {\r\n return [\r\n { description: opt.edgeRemarkDown },\r\n { description: opt.edgeRemarkRight },\r\n { description: opt.edgeRemarkUp },\r\n { description: opt.edgeRemarkLeft },\r\n ];\r\n }\r\n\r\n const highBoardEdgeRemark: IHighEdgeRemarkItem[] = [];\r\n for (const d of opt.highBoardEdgeRemark)\r\n if (d.description != null)\r\n highBoardEdgeRemark.push({ ...d });\r\n\r\n //若未设置高级板边备注,把上下左右板边备注存入高级板边备注\r\n if (sealcus.length !== highBoardEdgeRemark.length || !br.IsSpecialShape)\r\n {\r\n const edgeRemarkDown = opt.edgeRemarkDown;\r\n const edgeRemarkRight = opt.edgeRemarkRight;\r\n const edgeRemarkUp = opt.edgeRemarkUp;\r\n const edgeRemarkLeft = opt.edgeRemarkLeft;\r\n\r\n highBoardEdgeRemark.length = 0;\r\n const dir = Math.sign(br.ContourCurve.Area2);\r\n for (const c of sealcus)\r\n {\r\n const derv = c.GetFirstDeriv(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 highBoardEdgeRemark.push({ description: edgeRemarkDown });\r\n else\r\n highBoardEdgeRemark.push({ description: edgeRemarkUp });\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n highBoardEdgeRemark.push({ description: edgeRemarkRight });\r\n else\r\n highBoardEdgeRemark.push({ description: edgeRemarkLeft });\r\n }\r\n }\r\n }\r\n\r\n return highBoardEdgeRemark;\r\n}\r\n\r\n/**偏移前后曲线起点没改变 */\r\nexport function OffsetOutlineSpNotChange(oldcu: Curve, newCu: Curve)\r\n{\r\n if (!newCu) return false;\r\n if (oldcu.EndParam !== newCu.EndParam) return false;\r\n let sDerv = oldcu.GetFirstDeriv(0).normalize();\r\n let eDerv = oldcu.GetFirstDeriv(oldcu.EndParam).normalize().negate();\r\n sDerv.add(eDerv).normalize();\r\n let mDerv = newCu.StartPoint.sub(oldcu.StartPoint).normalize();\r\n return isParallelTo(mDerv, sDerv);\r\n}\r\n\r\n/**\r\n * 获取板件的轮廓曲线数组(合并共线了 已经对封边进行合并了 尊重原始时针)\r\n * GetBrContourCurvesBySealGrouped\r\n * @param offsetInside 向内偏移1(为了编辑封边)\r\n * */\r\nexport function GetBoardSealingCurves(br: Board, offsetInside = false): Curve[]\r\n{\r\n let brContour: ExtrudeContourCurve = Production.GetSpliteOutlineBySpliteSize(br);\r\n if (brContour)\r\n return brContour.Explode();//如果是拆单板 则直接炸开返回\r\n\r\n brContour = br.ContourCurve;\r\n if (brContour instanceof Circle)\r\n return [brContour.Clone()];\r\n\r\n if (offsetInside)\r\n {\r\n let dir = Math.sign(brContour.Area2);\r\n let offsetedCurve = brContour.GetOffsetCurves(-1 * dir)[0] as Polyline;\r\n if (OffsetOutlineSpNotChange(brContour, offsetedCurve))\r\n brContour = offsetedCurve;\r\n }\r\n\r\n //避免共线导致的侧面数据对应错误\r\n let curves = brContour.Explode();\r\n MergeCurvelist(curves);\r\n\r\n if (curves.length === 1 && curves[0] instanceof Circle)//变成一个圆\r\n return curves;\r\n\r\n if (br.IsSpecialShape)//是异形板(其实矩形板也需要分组 避免共线导致的错误) (但是如果删了这个 之前的数据会出现不兼容的问题)\r\n SubsectionCurvesOfHightSeal(curves);//分组 join 改变cus\r\n\r\n return curves;\r\n}\r\n\r\n\r\nexport interface BrSealedData\r\n{\r\n brContour: ExtrudeContourCurve;//板件轮廓(原始(没有转换为逆时针 因为Product那边会转换))\r\n sealedContour: ExtrudeContourCurve;//封边后的轮廓\r\n\r\n brCurves: Curve[];//封边轮廓(高级封边 已经成组)\r\n highSeals: IHighSealedItem[];//高级封边(一一对应)\r\n}\r\n\r\nclass OffsetPolyline2 extends OffsetPolyline\r\n{\r\n override InitSubCurves()\r\n {\r\n this._IsTopoOffset = true;\r\n return this;\r\n }\r\n protected override OffsetSubCurves(): void { }\r\n\r\n protected override GeneralCirclesAndVertexs(): void { }\r\n\r\n protected override GeneralTrimContours(): void\r\n {\r\n super.GeneralTrimContours();\r\n arrayRemoveIf(this._TrimPolylineContours, con => con.Curve.Area < 0.01);//因为局部偏移可能为0,产生0面积的轮廓\r\n }\r\n\r\n CheckPointDir(pt: Vector3): boolean\r\n {\r\n let dir = this.GetPointAtCurveDir(pt);\r\n return dir === 0 || dir === this._OffsetDistSign;//因为局部偏移可能为0,所以在线上的我们也保留了\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 获取板件的轮廓(没有扣封边)(拆单时表现)\r\n * 在拆单的时候 我们用这个轮廓(为了数据对应准确性)\r\n * 修改时 请注意函数 GetSealedBoardContour\r\n*/\r\nexport function GetBoardContour(br: Board): ExtrudeContourCurve | undefined\r\n{\r\n if (Math.abs(br.ContourCurve.Area) < 10)\r\n return;\r\n\r\n let curves = GetBoardSealingCurves(br);\r\n\r\n if (curves.length === 1 && curves[0] instanceof Circle)\r\n return curves[0];\r\n\r\n let allCurvs: Curve[] = [];\r\n for (let c of curves)\r\n if (c instanceof Polyline)\r\n allCurvs.push(...c.Explode());\r\n else\r\n allCurvs.push(c);\r\n let brContour = Polyline.FastCombine(allCurvs, 1e-4, false);\r\n return brContour;\r\n}\r\n\r\n\r\n/**\r\n * 获取板件(扣封边后的)轮廓(拆单时)\r\n * 修改时 请注意函数 GetBoardContour\r\n */\r\nexport function GetSealedBoardContour(br: Board): BrSealedData | undefined\r\n{\r\n if (Math.abs(br.ContourCurve.Area) < 10)\r\n return;\r\n\r\n let curves = GetBoardSealingCurves(br);\r\n let highSeals = GetBoardHighSeal(br, curves);\r\n\r\n if (curves.length === 1 && curves[0] instanceof Circle)\r\n {\r\n let res: BrSealedData = {\r\n brContour: curves[0],\r\n sealedContour: curves[0].GetOffsetCurves(-highSeals[0].size)[0] as Circle,\r\n brCurves: curves,\r\n highSeals,\r\n };\r\n return res;\r\n }\r\n\r\n let allCurvs: Curve[] = [];\r\n for (let c of curves)\r\n if (c instanceof Polyline)\r\n allCurvs.push(...c.Explode());\r\n else\r\n allCurvs.push(c);\r\n let brContour = Polyline.FastCombine(allCurvs, 1e-4, false);\r\n\r\n let dir = Math.sign(brContour.Area2);\r\n\r\n let sealedContours: Polyline[];\r\n if (false && highSeals.every(s => equaln(s.size, highSeals[0].size), 1e-3))\r\n {\r\n sealedContours = brContour.GetOffsetCurves(-highSeals[0].size * dir) as Polyline[];\r\n }\r\n else\r\n {\r\n //局部偏移\r\n let polylineOffset = new OffsetPolyline2(brContour, dir * -Math.max(...highSeals.map(s => s.size)));\r\n let subIndex = 0;\r\n polylineOffset._TrimCircleContours = [];\r\n polylineOffset._TrimArcContours = [];\r\n polylineOffset._SubOffsetedCurves = [];\r\n polylineOffset._SubCurves = [];\r\n polylineOffset._Circles = [];\r\n polylineOffset._CacheOCS = IdentityMtx4;\r\n polylineOffset._IsClose = true;\r\n\r\n for (let i = 0; i < curves.length; i++)\r\n {\r\n let curve = curves[i];//曲线组\r\n let seal = highSeals[i];//封边\r\n\r\n let preSeal = highSeals[FixIndex(i - 1, curves)];\r\n\r\n if (curve instanceof Polyline)\r\n {\r\n let curveExpds = curve.Explode().filter(c => c.Length >= 1e-4);\r\n\r\n for (let j = 0; j < curveExpds.length; j++)\r\n {\r\n let c = curveExpds[j];\r\n\r\n polylineOffset._SubCurves.push(c);//sub\r\n\r\n //trim Circle\r\n if (seal.size && (j || seal.size === preSeal.size))\r\n polylineOffset._Circles.push(new Circle(c.StartPoint, seal.size));\r\n else\r\n polylineOffset._Circles.push(undefined);\r\n\r\n //offset\r\n let offsetC = c.GetOffsetCurves(dir * -seal.size)[0];\r\n if (offsetC)\r\n polylineOffset._SubOffsetedCurves.push({\r\n index: subIndex,\r\n curve: offsetC,\r\n dist: seal.size,\r\n });\r\n else\r\n polylineOffset._TrimArcContours.push(Contour.CreateContour([c, new Line(c.StartPoint, c.EndPoint)], false));\r\n\r\n subIndex++;\r\n }\r\n }\r\n else\r\n {\r\n if (curve.Length < 1e-4) continue;\r\n\r\n polylineOffset._SubCurves.push(curve);//sub\r\n\r\n //trim Circle\r\n if (seal.size && seal.size === preSeal.size)\r\n polylineOffset._Circles.push(new Circle(curve.StartPoint, seal.size));\r\n else\r\n polylineOffset._Circles.push(undefined);\r\n\r\n //offset\r\n let offsetC = curve.GetOffsetCurves(dir * -seal.size)[0];\r\n if (offsetC)\r\n polylineOffset._SubOffsetedCurves.push({\r\n index: subIndex,\r\n curve: offsetC,\r\n dist: seal.size,\r\n });\r\n else\r\n polylineOffset._TrimArcContours.push(Contour.CreateContour([curve, new Line(curve.StartPoint, curve.EndPoint)], false));\r\n\r\n subIndex++;\r\n }\r\n }\r\n\r\n polylineOffset._Vertexs = polylineOffset._SubCurves.map(c => c.StartPoint);\r\n\r\n sealedContours = polylineOffset.Do();\r\n }\r\n\r\n //如果有多个 取最大\r\n if (sealedContours.length > 1)\r\n {\r\n Toaster({\r\n message: `有板计算封边异常,请检查!(点击左下角提示可以查看该板)`,\r\n timeout: 15000,\r\n intent: Intent.WARNING,\r\n key: \"sealerror\"\r\n });\r\n\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板:${br.Name}`, entity: [br] }, { msg: `在扣除封边计算中,得到了${sealedContours.length}条轮廓,请检查!` }], LogType.Warning);\r\n\r\n let areas = sealedContours.map(p => p.Area);\r\n let maxIndex = Max(areas, (a1, a2) => a2 > a1);\r\n sealedContours = [sealedContours[maxIndex]];\r\n }\r\n\r\n //如果不闭合 则尝试闭合\r\n let sealedContour = sealedContours[0];\r\n if (sealedContour && !sealedContour.IsClose)\r\n {\r\n if (sealedContour.StartPoint.distanceTo(sealedContour.EndPoint) < 0.1)\r\n sealedContour.CloseMark = true;\r\n else\r\n sealedContour = CreateContour2([sealedContour])?.Curve as Polyline;\r\n }\r\n\r\n if (!sealedContour)\r\n return;\r\n\r\n //逆时针\r\n if (sealedContour && sealedContour.Area2 < 0)\r\n sealedContour.Reverse();\r\n\r\n let res: BrSealedData = {\r\n brContour,\r\n sealedContour,\r\n brCurves: curves,\r\n highSeals,\r\n };\r\n\r\n return res;\r\n}\r\n\r\n\r\n/**\r\n * 将11对应的封边数值改成WebCAD的高级封边\r\n * @param seals 每段曲线的封边\r\n * @param curves 曲线表\r\n * @returns 转换成高级封边后的封边值 (圆弧会编组)\r\n */\r\nexport function ConverEachSeal2HightSealData(seals: IHighSealedItem[], curves: Curve[]): IHighSealedItem[]\r\n{\r\n curves = curves.concat();\r\n seals = seals.concat();\r\n let lastSeal = seals[seals.length - 1];\r\n\r\n for (let i = seals.length; i < curves.length; i++)\r\n seals.push(lastSeal);\r\n\r\n let map = new Map();\r\n for (let i = 0; i < curves.length; i++)\r\n map.set(curves[i], seals[i]);\r\n\r\n let groups = SubsectionCurvesOfHightSeal(curves);\r\n\r\n return groups.map(g => map.get(g[0]));\r\n}\r\n\r\n\r\n/**\r\n * 设置板的上下左右封边(解析来自高级封边)\r\n * @param br\r\n * @param sealDatas 封边数据\r\n * @param [sealCurves] 封边的曲线\r\n * @param [brContourCurve] 传递封边的曲线轮廓\r\n */\r\nexport function SetBoardTopDownLeftRightSealData(br: Board, sealDatas: IHighSealedItem[], sealCurves?: Curve[], brContourCurve?: ExtrudeContourCurve)\r\n{\r\n let dir = Math.sign((brContourCurve ?? br.ContourCurve).Area2);\r\n sealCurves = sealCurves ?? 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.IsRect && sealCurves.length === 4)\r\n {\r\n for (let i = 0; i < 4; i++)\r\n {\r\n let derv = sealCurves[i].GetFirstDeriv(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] = sealDatas[i].size.toString();\r\n else\r\n br.BoardProcessOption[EBoardKeyList.UpSealed] = sealDatas[i].size.toString();\r\n }\r\n else\r\n {\r\n if (derv.y * dir > 0)\r\n br.BoardProcessOption[EBoardKeyList.RightSealed] = sealDatas[i].size.toString();\r\n else\r\n br.BoardProcessOption[EBoardKeyList.LeftSealed] = sealDatas[i].size.toString();\r\n }\r\n }\r\n }\r\n else\r\n {\r\n let [left, right, top, bottom] = ParseEdgeSealDir(sealCurves);\r\n br.BoardProcessOption[EBoardKeyList.LeftSealed] = sealDatas[left].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.RightSealed] = sealDatas[right].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.UpSealed] = sealDatas[top].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.DownSealed] = sealDatas[bottom].size.toString();\r\n }\r\n}\r\n\r\nexport function SetBoardEdgeRemarkData(br: Board, remarkDatas: IHighEdgeRemarkItem[], sealCurves?: Curve[], brContourCurve?: ExtrudeContourCurve)\r\n{\r\n let dir = Math.sign((brContourCurve ?? br.ContourCurve).Area2);\r\n sealCurves = sealCurves ?? GetBoardSealingCurves(br);\r\n\r\n const opt = br.BoardProcessOption;\r\n if (br.IsRect && sealCurves.length === 4)\r\n {\r\n for (let i = 0; i < 4; i++)\r\n {\r\n let derv = sealCurves[i].GetFirstDeriv(0).normalize();\r\n if (isParallelTo(derv, XAxis, 1e-4))\r\n {\r\n if (derv.x * dir > 0)\r\n opt.edgeRemarkDown = remarkDatas[i].description;\r\n else\r\n opt.edgeRemarkUp = remarkDatas[i].description;\r\n }\r\n else\r\n {\r\n if (derv.y * dir > 0)\r\n opt.edgeRemarkRight = remarkDatas[i].description;\r\n else\r\n opt.edgeRemarkLeft = remarkDatas[i].description;\r\n }\r\n }\r\n }\r\n else\r\n {\r\n let [left, right, top, bottom] = ParseEdgeSealDir(sealCurves);\r\n opt.edgeRemarkLeft = remarkDatas[left].description;\r\n opt.edgeRemarkRight = remarkDatas[right].description;\r\n opt.edgeRemarkUp = remarkDatas[top].description;\r\n opt.edgeRemarkDown = remarkDatas[bottom].description;\r\n }\r\n}\r\n","import Geom3 from '@jscad/modeling/src/geometries/geom3/type';\r\nimport { Euler, Frustum, Geometry, LineSegments, Matrix3, Matrix4, Mesh, Object3D, ShapeGeometry, Line as TLine, UVGenerator, Vector3 } from 'three';\r\nimport { Board2Regions } from '../../Add-on/BoardEditor/Board2Regions';\r\nimport { DeserializationBoard2DModeingData, DeserializationBoard3DModeingData, SerializeBoard2DModeingData, SerializeBoard3DModeingData, deserializationBoardData, serializeBoardData } from '../../Add-on/BoardEditor/SerializeBoardData';\r\nimport { DrillType, FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { CyHoleInBoard, IBoardRectHoleType, ParseBoardRectHoleType, SetBrHighHoleTypeFromRectHoleType } 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 { DisposeThreeObj } from '../../Common/Dispose';\r\nimport { TransformVector, tempMatrix1 } 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 { TerminateCSGTask } from '../../Geometry/CSGSubtract/CSGSubtractTaskManager';\r\nimport { IdentityMtx4, XAxis, XAxisN, YAxis, YAxisN, ZAxis, ZeroVec, equaln, equalv3 } from '../../Geometry/GeUtils';\r\nimport { PointShapeUtils } from '../../Geometry/PointShapeUtils';\r\nimport { GetBoardHighSeal, GetBoardSealingCurves, GetHighBoardEdgeRemark, SetBoardEdgeRemarkData, SetBoardTopDownLeftRightSealData } from '../../GraphicsSystem/CalcEdgeSealing';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { BoardProcessOption } from \"../../UI/Store/OptionInterface/BoardProcessOption\";\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 { Text as DbText } from \"../Text/Text\";\r\nimport { Arc } from './Arc';\r\nimport { BoardOpenDir, BoardType, ComposingType, LinesType } from './BoardInterface';\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//排钻配置名是合法的 可用的\r\nfunction IsValidDriName(name: string): boolean\r\n{\r\n return name === DrillType.None || 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 protected HasBigHoleFaceRenderType = 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 private _OpenDir: BoardOpenDir = BoardOpenDir.None;\r\n @AutoRecord RelativeHandle: ObjectId[] = [];\r\n private _IsChaiDan: boolean = true;\r\n private _2DModelingList: I2DModeling[] = [];\r\n private _3DModelingList: I3DModeling[] = [];\r\n private _CustomNumber: number = null;//自定义编号\r\n private _DrillLock = false; //排钻独立锁\r\n private _DrillAssociationLock = new Set(); //排钻关联锁\r\n\r\n //仅在渲染器中使用倒角\r\n protected bevelEnabled: boolean = true;\r\n\r\n //二维刀路 id -> polyline\r\n private _KnifePolylineMap: Map = new Map();\r\n\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 edgeRemarkUp: \"\",\r\n edgeRemarkDown: \"\",\r\n edgeRemarkLeft: \"\",\r\n edgeRemarkRight: \"\",\r\n highBoardEdgeRemark: 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 || key === \"highBoardEdgeRemark\")\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 else if (key === EBoardKeyList.BigHole)\r\n {\r\n let obj = this.CacheDrawObject.get(RenderType.BigHoleFace);\r\n if (obj)\r\n {\r\n this.UpdateDrawObject(RenderType.BigHoleFace, 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 if (!length || !width || !thickness)\r\n throw `无法使用该尺寸构建板,长:${length},宽:${width},厚:${thickness}`;\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 DrillLock()\r\n {\r\n return this._DrillLock;\r\n }\r\n\r\n set DrillLock(v: boolean)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DrillLock = v;\r\n }\r\n get isDrillAssociationLock()\r\n {\r\n //有一块关联的板就返回true\r\n for (const o of this._DrillAssociationLock)\r\n {\r\n if (o.Object && !(o.Object as Board).IsErase)\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n get DrillAssociationLock(): Set\r\n {\r\n return this._DrillAssociationLock;\r\n }\r\n\r\n AppendDrillAssociationLock(o: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DrillAssociationLock.add(o);\r\n }\r\n ClearDrillAssociationLock(o: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DrillAssociationLock.delete(o);\r\n }\r\n ClearAllAssociDrillLock()\r\n {\r\n this.WriteAllObjectRecord();\r\n for (const o of this._DrillAssociationLock)\r\n {\r\n this.ClearDrillAssociationLock(o);\r\n\r\n if (o && o.Object)\r\n {\r\n let br = o.Object as Board;\r\n br.ClearDrillAssociationLock(this.Id);\r\n }\r\n }\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 private _CustomNumberTextEntity: DbText;\r\n private _AsyncIngTextEntity: DbText;\r\n\r\n get CustomNumber() { return this._CustomNumber; }\r\n set CustomNumber(n: number | null)\r\n {\r\n if (n !== this._CustomNumber)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._CustomNumber = n;\r\n\r\n if (this._CustomNumberTextEntity)\r\n {\r\n this._CustomNumberTextEntity.TextString = n?.toString() ?? \"\";\r\n this._CustomNumberTextEntity.Visible = this._CustomNumberTextEntity.TextString !== \"\";\r\n this._CustomNumberTextEntity.Height = HostApplicationServices.boardCustomNumberTextHeight;\r\n }\r\n }\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,\r\n {\r\n [EBoardKeyList.HighSealed]: obj[EBoardKeyList.HighSealed].slice(),\r\n highBoardEdgeRemark: obj.highBoardEdgeRemark.slice(),\r\n });\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 ent = e.Object;\r\n if (ent instanceof HardwareCompositeEntity)\r\n {\r\n if (ent.HardwareOption.isHole)\r\n {\r\n let holes = ent.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: ent.Id.Index, Version: ent.__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 highDrills: 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 {\r\n highDrills = this._BoardProcessOption.highDrill;\r\n }\r\n\r\n ocsInv = this.OCSInv;\r\n }\r\n\r\n let oldContour = this.ContourCurve;//旧的轮廓\r\n let oldHightSealCurves = GetBoardSealingCurves(this);//旧的封边轮廓\r\n let oldHightSealDatas = GetBoardHighSeal(this, oldHightSealCurves);//旧的封边数据\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 br._CustomNumber = this._CustomNumber;//因为CustomNumber不会刷新绘制,所以拷贝这个\r\n\r\n let new2old_edgeMap: number[];\r\n //修正排钻边的数据\r\n if (highDrills)\r\n {\r\n br.BoardProcessOption.highDrill = [];//因为上面用了拷贝,所以这里不能直接改它的数据(我们新建一个数组来改它,否则原始板件的数据就被改掉了)\r\n new2old_edgeMap = ParseNewBr2OldBr_EdgeMap(br, this, ocsInv);\r\n for (let index of new2old_edgeMap)\r\n {\r\n let dri = highDrills[index];\r\n if (dri !== undefined)\r\n br._BoardProcessOption.highDrill.push(dri);\r\n else\r\n br._BoardProcessOption.highDrill.push(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 //保持封边属性(代码来自SetContourCurve)\r\n br._BoardProcessOption.highSealed = [];\r\n if (br.isRect)\r\n {\r\n SetBoardTopDownLeftRightSealData(br, oldHightSealDatas, oldHightSealCurves, oldContour);\r\n }\r\n else//变成了异形\r\n {\r\n let newhightSealCurves = GetBoardSealingCurves(br);\r\n\r\n for (let i = 0; i < newhightSealCurves.length; i++)\r\n {\r\n let newC = newhightSealCurves[i];\r\n let p = newC.GetPointAtParam(newC.EndParam * 0.5);\r\n\r\n let closesIndex = 0;\r\n let closesDistance = Infinity;\r\n\r\n for (let j = 0; j < oldHightSealCurves.length; j++)\r\n {\r\n let oldC = oldHightSealCurves[j];\r\n let d = oldC.GetClosestPointTo(p, false).distanceTo(p);\r\n if (d < closesDistance)\r\n {\r\n closesIndex = j;\r\n closesDistance = d;\r\n }\r\n }\r\n\r\n br._BoardProcessOption.highSealed.push(oldHightSealDatas[closesIndex]);\r\n }\r\n }\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 //二维刀路\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.Clear2DPathCache();\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.Clear3DPathCache();\r\n this._3DModelingList = ms;\r\n this.Update(UpdateDraw.Geometry);\r\n }\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.Clear2DPathCache();\r\n this.Update(UpdateDraw.Geometry);\r\n }\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.Clear3DPathCache();\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n get IsChaiDan()\r\n {\r\n return this._IsChaiDan;\r\n }\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\r\n get OpenDir()\r\n {\r\n return this._OpenDir;\r\n }\r\n\r\n set OpenDir(v: BoardOpenDir)\r\n {\r\n if (this._OpenDir !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._OpenDir = v;\r\n //开门方向改变更新\r\n this.Update(UpdateDraw.Geometry);\r\n }\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\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 override get ContourCurve()\r\n {\r\n return super.ContourCurve;\r\n }\r\n\r\n //设置新的板件轮廓,这里重载为了保持正确的排钻封边映射\r\n override set ContourCurve(newContour: ExtrudeContourCurve)\r\n {\r\n /**\r\n * 保持排钻边和封边数据对应正确性\r\n * (2x2种可能性)\r\n * 矩形->矩形\r\n * 矩形->异形\r\n * 异形->异形\r\n * 异形->矩形\r\n */\r\n\r\n //上下左右排钻属性(在矩形时生效)\r\n let rectHoleOpt: IBoardRectHoleType = {} as any;\r\n ParseBoardRectHoleType(this, rectHoleOpt);//分析旧的上下左右排钻\r\n\r\n let oldHightSealCurves = GetBoardSealingCurves(this);//旧的封边轮廓\r\n let oldHightSealDatas = GetBoardHighSeal(this, oldHightSealCurves);//旧的封边数据\r\n let oldHighBoardEdgeRemarkDatas = GetHighBoardEdgeRemark(this, oldHightSealCurves);//旧的封边数据\r\n\r\n let oldContour = this.ContourCurve;//旧的轮廓\r\n\r\n let defaultDrillType = this._BoardProcessOption.drillType;\r\n if (!IsValidDriName(defaultDrillType) && this._BoardProcessOption.highDrill)\r\n for (let name of this._BoardProcessOption.highDrill)\r\n if (IsValidDriName(name))\r\n {\r\n defaultDrillType = name;\r\n break;\r\n }\r\n if (!IsValidDriName(defaultDrillType))\r\n defaultDrillType = HostApplicationServices.DrillConfigs.size ? HostApplicationServices.DrillConfigs.entries().next().value[0] : DrillType.None;\r\n\r\n super.ContourCurve = newContour;//设置新的轮廓\r\n\r\n //保持排钻边属性\r\n if (this.isRect && rectHoleOpt.up)//矩形->矩形\r\n SetBrHighHoleTypeFromRectHoleType(this, rectHoleOpt);//直接应用旧的矩形数据\r\n else//异形->矩形 矩形->异形 异形->异形\r\n {\r\n let indexMap: number[] = [];\r\n\r\n for (let i = 0; i < newContour.EndParam; i++)\r\n {\r\n let p = newContour.GetPointAtParam(i + 0.5);\r\n\r\n let cp = oldContour.GetClosestPointTo(p, false);\r\n let cparam = oldContour.GetParamAtPoint2(cp);\r\n indexMap.push(Math.floor(cparam));\r\n }\r\n\r\n let highDrill: string[] = [];\r\n for (let index of indexMap)\r\n highDrill.push(this._BoardProcessOption.highDrill[index] ?? defaultDrillType);\r\n\r\n this._BoardProcessOption.highDrill = highDrill;\r\n }\r\n\r\n this._BoardProcessOption.highSealed.length = 0;\r\n this._BoardProcessOption.highBoardEdgeRemark.length = 0;\r\n //保持封边属性\r\n if (this.isRect)\r\n {\r\n SetBoardTopDownLeftRightSealData(this, oldHightSealDatas, oldHightSealCurves, oldContour);\r\n SetBoardEdgeRemarkData(this, oldHighBoardEdgeRemarkDatas, oldHightSealCurves, oldContour);\r\n }\r\n else//变成了异形\r\n {\r\n let newhightSealCurves = GetBoardSealingCurves(this);\r\n\r\n for (let i = 0; i < newhightSealCurves.length; i++)\r\n {\r\n let newC = newhightSealCurves[i];\r\n let p = newC.GetPointAtParam(newC.EndParam * 0.5);\r\n\r\n let closesIndex = 0;\r\n let closesDistance = Infinity;\r\n\r\n for (let j = 0; j < oldHightSealCurves.length; j++)\r\n {\r\n let oldC = oldHightSealCurves[j];\r\n let d = oldC.GetClosestPointTo(p, false).distanceTo(p);\r\n if (d < closesDistance)\r\n {\r\n closesIndex = j;\r\n closesDistance = d;\r\n }\r\n }\r\n\r\n this._BoardProcessOption.highSealed.push(oldHightSealDatas[closesIndex]);\r\n this._BoardProcessOption.highBoardEdgeRemark.push(oldHighBoardEdgeRemarkDatas[closesIndex]);\r\n }\r\n }\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 = 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 SetBoardTopDownLeftRightSealData(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\r\n /**实际上这个值可能被改变,应该适当的去校验它(仅在重新设计模块时,这个值会被改变!) */\r\n get Rotation()\r\n {\r\n let roMtx = this.RotateMat;\r\n let roMtxInv = roMtx.getInverse(roMtx);\r\n\r\n let csInSpace = this.SpaceOCSInv.multiply(this.OCSNoClone);//逆到模块坐标系\r\n csInSpace.multiply(roMtxInv);//(正确)\r\n csInSpace.setPosition(0, 0, 0);\r\n\r\n let euRoMtx = new Matrix4().makeRotationFromEuler(new Euler(this._Rotation.x, this._Rotation.y, this._Rotation.z, \"ZYX\"));\r\n\r\n if (euRoMtx.elements.every((v, i) => equaln(v, csInSpace.elements[i])))\r\n return this._Rotation;\r\n else\r\n {\r\n let eu = new Euler(0, 0, 0, \"ZYX\").setFromRotationMatrix(csInSpace);\r\n return eu;\r\n }\r\n }\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;//为了优化性能,在jig模式下不去计算封边排钻等属性,不重绘板\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 highSealsCurves = GetBoardSealingCurves(this);\r\n let highSeals = GetBoardHighSeal(this, highSealsCurves);\r\n let isStartSealToBack = !equalv3(highSealsCurves[0].StartPoint, this.contourCurve.StartPoint, 1e-4);//第一段封边往后搜索了\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\r\n if (isStartSealToBack)//如果第一段封边往后搜索了,那么封边在镜像后 第一段封边保持不变\r\n highSeals.unshift(highSeals.pop());\r\n\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 SetBoardTopDownLeftRightSealData(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 //开门方向\"左\",\"右\"互换\r\n if (this.OpenDir === BoardOpenDir.Left)\r\n this.OpenDir = BoardOpenDir.Right;\r\n else if (this.OpenDir === BoardOpenDir.Right)\r\n this.OpenDir = BoardOpenDir.Left;\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._DrillAssociationLock.clear();\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\r\n private GetLinesOpenDir()\r\n {\r\n const l: TLine = new TLine(\r\n BufferGeometryUtils.CreateFromPts(PointShapeUtils.LinesOpenDirPts(this.height, this.width, this.OpenDir)),\r\n ColorMaterial.GetWallLineMtl(9)\r\n );\r\n l.computeLineDistances();\r\n\r\n let l1 = l.clone();\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\r\n get KnifePolylineMap()\r\n {\r\n return new Map(this._KnifePolylineMap);\r\n }\r\n\r\n set KnifePolylineMap(map: Map)\r\n {\r\n if (map.size === 0 && this._KnifePolylineMap.size === 0)\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._KnifePolylineMap = map;\r\n\r\n //不进行更新 通常由其他的方法更新\r\n }\r\n\r\n //三维刀路绘制对象\r\n private _3DPathObject: Object3D;\r\n\r\n Clear3DPathCache()\r\n {\r\n if (!this._3DPathObject) return;\r\n\r\n DisposeThreeObj(this._3DPathObject);\r\n this._3DPathObject = undefined;\r\n }\r\n\r\n\r\n //获取三维刀路的绘制对象\r\n private Get3DPathDrawObject(): Object3D\r\n {\r\n if (this._3DPathObject)\r\n return this._3DPathObject;\r\n\r\n this._3DPathObject = new Object3D();\r\n\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 this._3DPathObject.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 this._3DPathObject.add(arc.GetDrawObjectFromRenderType(RenderType.Wireframe));\r\n }\r\n }\r\n }\r\n\r\n return this._3DPathObject;\r\n }\r\n\r\n //#region 二维刀路缓存\r\n //清除二维刀路的缓存\r\n Clear2DPathCache()\r\n {\r\n this._2DPathCsgs = undefined;\r\n if (this._2DPathDrawObject)\r\n {\r\n DisposeThreeObj(this._2DPathDrawObject);\r\n this._2DPathDrawObject = undefined;\r\n }\r\n this.OffsetPathCache.clear();\r\n }\r\n\r\n _2DPathCsgs: Geom3[];//二维刀路的csg数组\r\n _2DPathDrawObject: Object3D;//二维刀路提刀线框显示对象\r\n\r\n /**\r\n * 这个函数生成了二维刀路的csg数组,并且同时生成了_2DPathDrawObject(二维刀路提刀线框显示对象)\r\n */\r\n \r\n Get2DPathCsgs(): Geom3[]\r\n {\r\n if (this._2DPathCsgs)\r\n return this._2DPathCsgs;\r\n\r\n this._2DPathCsgs = [];\r\n\r\n \r\n\r\n return this._2DPathCsgs;\r\n }\r\n //#endregion\r\n\r\n protected get Has2DPath() { return this._2DModelingList.length > 0; }\r\n private _workerCalcedGeom: Geom3 = null;//worker计算后,暂时存入到这里\r\n private _async2DPathIng = false;\r\n get Async2DPathing() { return this._async2DPathIng; }\r\n override GoodBye(): void\r\n {\r\n super.GoodBye();\r\n TerminateCSGTask({ key: this });\r\n }\r\n\r\n private promise2DPath: (res: boolean) => void;\r\n async Load2DPathIng()\r\n {\r\n return new Promise((res) =>\r\n {\r\n this.promise2DPath = res;\r\n });\r\n }\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 || this.DrillLock || this.isDrillAssociationLock)\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 || this.DrillLock || this.isDrillAssociationLock)\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 \r\n\r\n //绘制排版面时使用的颜色\r\n private get PlaceColor() { return this._Color === 8 ? 9 : this._Color; }\r\n //排版面网格\r\n private 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 ? -1e-3 : this.thickness + 1e-3);\r\n let mesh = new Mesh(shapeGeom, ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor));\r\n return mesh;\r\n }\r\n\r\n //大孔面网格\r\n private GetBigHoleFace(): Mesh\r\n {\r\n let shapeGeom = new ShapeGeometry(this.contourCurve.Shape);\r\n let isBack = this._BoardProcessOption[EBoardKeyList.BigHole] === FaceDirection.Back;\r\n shapeGeom.applyMatrix4(this.contourCurve.OCSNoClone);\r\n shapeGeom.translate(0, 0, isBack ? -1e-3 : this.thickness + 1e-3);\r\n let mesh = new Mesh(shapeGeom, ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor));\r\n return mesh;\r\n }\r\n\r\n //偏移缓存\r\n OffsetPathCache = new Map();\r\n\r\n /**\r\n * 根据板的信息修改绘制的实体\r\n * 1.非拆单板 灰色\r\n * 2.纹路 开门方向纹路\r\n * 3.二维 三维刀路\r\n */\r\n private UpdateDrawObjectByBoardInfo(renderType: RenderType, obj: Object3D)\r\n {\r\n if (!obj) return;\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)// renderType === RenderType.Physical(理论上只有这个)\r\n (obj as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;//灰色半透明(会不会有bug?)\r\n }\r\n\r\n //线框及概念且可拆单\r\n if (([RenderType.Wireframe, RenderType.Conceptual, RenderType.Print].includes(renderType)) && this.IsChaiDan)\r\n {\r\n //绘制纹路\r\n if (HostApplicationServices.showLines && renderType !== RenderType.Print)\r\n obj.add(...this.GetLinesDir());\r\n //绘制开门方向纹路\r\n if (HostApplicationServices.showOpenDirLines && this.OpenDir !== BoardOpenDir.None)\r\n obj.add(...this.GetLinesOpenDir());\r\n }\r\n\r\n if (this.objectId)//二维和三维刀路\r\n {\r\n //三维刀路\r\n let path3d = this.Get3DPathDrawObject();\r\n if (path3d.parent)\r\n obj.children.push(path3d);\r\n else\r\n obj.add(path3d);\r\n\r\n //二维刀路\r\n this.Get2DPathCsgs();\r\n let path2d = this._2DPathDrawObject;\r\n if (path2d && HostApplicationServices.show2DPathLine)\r\n {\r\n if (path2d.parent)\r\n obj.children.push(path2d);\r\n else\r\n obj.add(path2d);\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 || renderType === RenderType.BigHoleFace)\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 //封边检查(为obj 对象添加封边检查的曲线)\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 cus[i].ColorIndex = parseInt(color) ?? 7;\r\n let l = cus[i].GetDrawObjectFromRenderType(RenderType.Wireframe) as LineSegments;\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\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\r\n let oldOcs = this.OCS;\r\n\r\n super.MoveStretchPoints(originIndexList, vec);\r\n\r\n if (!this.Id) return;\r\n\r\n arraySortByNumber(mIndexList);\r\n let ocsInv = this.OCSInv;\r\n let localVec = TransformVector(vec.clone(), ocsInv);\r\n let offset = 0;\r\n let icount = mIndexList.length;\r\n let i = 0;\r\n\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(ocsInv);\r\n }\r\n\r\n this.Clear2DPathCache();\r\n this.Clear3DPathCache();\r\n this.Update(UpdateDraw.Geometry);\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 frustum?: Frustum,\r\n ): Vector3[]\r\n {\r\n let pts = super.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum);\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.Clear2DPathCache();\r\n this.Clear3DPathCache();\r\n\r\n if (ver > 10)\r\n this._CustomNumber = file.Read();\r\n else\r\n this._CustomNumber = null;\r\n\r\n this._KnifePolylineMap.clear();\r\n if (ver > 11)\r\n {\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let id = file.Read();\r\n let pl = file.ReadObject() as Polyline;\r\n this._KnifePolylineMap.set(id, pl);\r\n }\r\n }\r\n\r\n // if (this.width === 0 || this.height === 0) //板件变成0长度,无法绘制\r\n // this._isErase = true;\r\n\r\n if (ver > 12)\r\n {\r\n let count = file.Read();\r\n this.RelativeHandle.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.RelativeHandle.push(objId);\r\n }\r\n }\r\n\r\n const processData = this._BoardProcessOption;\r\n if (ver > 13)\r\n {\r\n processData.edgeRemarkUp = file.Read();\r\n processData.edgeRemarkDown = file.Read();\r\n processData.edgeRemarkLeft = file.Read();\r\n processData.edgeRemarkRight = file.Read();\r\n let count = file.Read();\r\n processData.highBoardEdgeRemark = file.ReadArray(count);\r\n }\r\n\r\n this._DrillAssociationLock.clear();\r\n if (ver > 14)\r\n {\r\n this._DrillLock = file.Read();\r\n\r\n //读取关联排钻锁映射\r\n const size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n const id = file.ReadObjectId();\r\n if (id)\r\n this._DrillAssociationLock.add(id);\r\n }\r\n }\r\n }\r\n\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(15);\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 file.Write(this._CustomNumber);\r\n\r\n file.Write(this._KnifePolylineMap.size);\r\n for (let [id, pl] of this._KnifePolylineMap)\r\n {\r\n file.Write(id);\r\n file.WriteObject(pl);\r\n }\r\n\r\n file.Write(this.RelativeHandle.length);\r\n for (let id of this.RelativeHandle)\r\n file.WriteObjectId(id);\r\n\r\n const processData = this._BoardProcessOption;\r\n file.Write(processData.edgeRemarkUp);\r\n file.Write(processData.edgeRemarkDown);\r\n file.Write(processData.edgeRemarkLeft);\r\n file.Write(processData.edgeRemarkRight);\r\n file.Write(processData.highBoardEdgeRemark.length);\r\n for (let r of processData.highBoardEdgeRemark)\r\n {\r\n file.Write(r);\r\n }\r\n\r\n //ver>14\r\n {\r\n file.Write(this._DrillLock);\r\n const count = this._DrillAssociationLock.size;\r\n file.Write(count);\r\n for (const id of this._DrillAssociationLock)\r\n {\r\n file.WriteObjectId(id);\r\n }\r\n }\r\n }\r\n}\r\n\r\n//解析新的板的边映射到旧板边的映射情况\r\nfunction ParseNewBr2OldBr_EdgeMap(newBr: Board, oldBr: Board, oldBrOcsInv: Matrix4): number[]\r\n{\r\n let newBrCu = newBr.ContourCurve;\r\n let oldBrCu = oldBr.ContourCurve;\r\n\r\n let indexMap: number[] = [];\r\n\r\n //矩阵对齐\r\n let m = newBr.OCS.premultiply(oldBrOcsInv);\r\n\r\n for (let i = 0; i < newBrCu.EndParam; i++)\r\n {\r\n let p = newBrCu.GetPointAtParam(i + 0.5).applyMatrix4(m);\r\n\r\n let cp = oldBrCu.GetClosestPointTo(p, false);\r\n let cparam = oldBrCu.GetParamAtPoint2(cp);\r\n indexMap.push(Math.floor(cparam));\r\n }\r\n\r\n return indexMap;\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, Geometry, Line, LineBasicMaterial, LineSegments, Matrix4, Object3D, Vector3 } from \"three\";\r\nimport { FaceDirection } from \"../Add-on/DrawDrilling/DrillType\";\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 { Shape2 } from \"../DatabaseServices/Shape2\";\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\nexport function FastExtrudeEdgeGeometryOfShape(shape: Shape2, z0: number, z1: number, divCount = 6, optArc = true, coords: number[] = [])\r\n{\r\n let ptss = [shape.getPoints(divCount, optArc)];\r\n for (let hole of shape.holes)\r\n ptss.push((hole as Shape2).getPoints(divCount, optArc));\r\n\r\n for (let pts of ptss)\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, z0, nextp.x, nextp.y, z0);\r\n //顶面\r\n coords.push(p.x, p.y, z1, nextp.x, nextp.y, z1);\r\n\r\n if (p[\"_mask_\"])//侧面\r\n coords.push(p.x, p.y, z0, p.x, p.y, z1);\r\n }\r\n\r\n return coords;\r\n}\r\n\r\nlet tempP = new Vector3;\r\n//这个代码天生不和Mesh对齐,因为独立坐标系的原因,槽的坐标系可能和主题的坐标系不一致导致的\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 { 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, ZeroVec, equaln, equalv2, equalv3 } 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 { GangDrillType } from \"./CylinderHole\";\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\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 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.OCSNoClone);\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.OCSNoClone); });\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.GetFirstDeriv(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\r\n ClearDraw(): this\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 return super.ClearDraw();\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\r\n if (ver > 3)\r\n this.type = file.Read();\r\n else\r\n this.type = GangDrillType.Ljg;\r\n\r\n //回退版本5弃用\r\n if (ver > 4)\r\n {\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n file.ReadSoftObjectId();\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(5);\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 file.Write(this.type);\r\n\r\n //ver= 5 弃用\r\n file.Write(0);\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 ((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\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 ChangePlListStartPt(plList);\r\n //对多段线进行排序,按最起始点远近排序\r\n SortPlByStartPt(plList);\r\n\r\n let result: Polyline[] = [];\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 j = 0; j < cuPtsBul.pts.length; j++)\r\n {\r\n //坐标系对齐\r\n let p = cuPtsBul.pts[j];\r\n p.copy(AsVector2(AsVector3(p).applyMatrix4(alMat)));\r\n firstPl.LineData.push({ pt: p, bul: cuPtsBul.buls[j] });\r\n }\r\n }\r\n }\r\n result.push(firstPl);\r\n\r\n for (let pl of result)\r\n pl.RemoveRepeatPos(1e-3);\r\n\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)\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, rectInfo: IRectInfo, dist: number)\r\n{\r\n if (!rectInfo || equaln(dist, 0)) return;\r\n\r\n let box = rectInfo.box;\r\n let size = rectInfo.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(rectInfo.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(rectInfo.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(rectInfo.OCS);\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline, IsRect, MergeCurvelist, equalCurve } 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 { CanDrawHoleFuzz, 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 { BoolOpeartionType, isTargetCurInOrOnSourceCur } from \"../BoolOperateUtils\";\r\nimport { GetBoardContour } 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, redundancyKnif = 0): 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 let hasRedK = false;\r\n if ((!isOut || offsetDist >= knifRadius) && rectInfo)\r\n {\r\n hasRedK = true;\r\n offsetDist += knifRadius * 2 - redundancyKnif;\r\n }\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 && offsetDist > knifRadius)\r\n {\r\n const rectMinLengthHalf = Math.min(rectInfo.size.x, rectInfo.size.y) / 2;\r\n //如果最后一个矩形最小边区间一半小于刀半径减去冗余值的一半,则偏移到中心处切一次\r\n if (!equaln(offsetDist, rectMinLengthHalf, 1e-5) && offsetDist - rectMinLengthHalf - 1e-5 < knifRadius - redundancyKnif / 2)\r\n {\r\n retCus.push(...GetOffsetCurves(outline, rectMinLengthHalf * dir, rectInfo));\r\n }\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 =>\r\n {\r\n let ipts = h.Curve.IntersectWith2(c, 0);\r\n return ipts.length > 0 || h.ContainerCurve(c, false, ipts);\r\n });\r\n\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\r\n //testcode\r\n // let reg = new Region(shapeMg).Clone();\r\n // let reg2 = new Region(holesMg).Clone();\r\n // TestDraw(reg, 1);\r\n // TestDraw(reg2, 2);\r\n\r\n shapeMg.BoolOper(holesMg, BoolOpeartionType.Subtract);\r\n\r\n // let reg3 = new Region(shapeMg).Clone();\r\n // TestDraw(reg3, 3);\r\n\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, rk = 0)\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 (m.shape.Holes.length === 0 && 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, rk);\r\n }\r\n\r\n /**\r\n * 计算走刀路径\r\n */\r\n CalcPath(modelings: IModeling[], br: Board, rk = 0): 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, rk));\r\n }\r\n return cus;\r\n }\r\n\r\n //获取造型走刀\r\n GetModelFeedPath(br: { Thickness: number, ContourCurve: ExtrudeContourCurve; }, modeling: IModeling, redundancyKnif = 0): 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 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, redundancyKnif);\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 rectInfo = IsRect(shape.Outline.Curve);\r\n if (rectInfo)\r\n {\r\n let box = rectInfo.box;\r\n let size = rectInfo.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(rectInfo.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 (m.shape.Holes.length === 0 && 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 (m.shape.Holes.length === 0 && 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\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 let param = brCon.GetParamAtPoint(mp);\r\n\r\n let curveOnContour = false;\r\n if (brCon.ParamOnCurve(param))\r\n {\r\n //#I7MYN9 在长的槽里面,我们防止它加长,短的槽就无所谓了\r\n if (c.Length > 100)\r\n {\r\n let curve = (brCon as Polyline).GetCurveAtParam(param);\r\n curveOnContour = curve.PtOnCurve(c.GetPointAtParam(0.2), 0.1) && curve.PtOnCurve(c.GetPointAtParam(0.8), 0.1);\r\n }\r\n else\r\n curveOnContour = true;\r\n }\r\n\r\n if (curveOnContour)\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\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\n\r\nexport function GetModelingFromCustomDrill(br: Board)\r\n{\r\n let normal = br.Normal;\r\n let outline = GetBoardContour(br);\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 - CanDrawHoleFuzz)\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 < CanDrawHoleFuzz)\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.GetFirstDeriv(0).normalize().multiplyScalar(thickness);\r\n shape.Position = shape.Position.add(vec);\r\n\r\n //侧面造型仅在多段线直线上\r\n let cu = (outline as Polyline).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 { 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.GetFirstDeriv(1).multiplyScalar(100)), curP.clone());\r\n }\r\n if (c2 instanceof Arc)\r\n c2 = new Line(curP.clone(), curP.clone().add(c2.GetFirstDeriv(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.GetFirstDeriv(0), c2.GetFirstDeriv(0))) continue;\r\n\r\n //计算提刀部分:\r\n //向量与平分线,参照倒角代码\r\n let derv1 = c1.GetFirstDeriv(0).normalize();\r\n let derv2 = c2.GetFirstDeriv(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 { Vector2 } from \"three\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\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 { IContourData } from \"../Production/Convert2PtsBul\";\r\nimport { AsVector2, equaln, equalv2 } from \"./GeUtils\";\r\n\r\n/**\r\n * 转换成多段线点表,并且将圆弧打断(大于1/4的话) API仅用于开料生产\r\n * @param cu 多段线或者圆弧\r\n * @param [isOutline=true] 如果为外部轮廓,则将其转换为逆时针\r\n * @param [isSplite=true] 如果为true,则对大圆弧进行切割\r\n * @returns 点表+凸度表\r\n */\r\nexport function ConverToPolylineAndSplitArc(cu: Polyline | Circle, isOutline = true, isSplite = true): IContourData\r\n{\r\n let ptsBuls: { pts: Vector2[]; buls: number[]; };\r\n if (cu instanceof Circle)\r\n {\r\n let pl = ConverCircleToPolyline(cu);\r\n ptsBuls = pl.PtsBuls;\r\n }\r\n else\r\n {\r\n if (isOutline && cu.IsClose && cu.Normal.z * cu.Area2 < 0)\r\n cu.Reverse();\r\n if (isSplite)\r\n ptsBuls = SplitePolylineAtArc(cu);\r\n else\r\n ptsBuls = cu.PtsBuls;\r\n }\r\n let ocs = cu.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\nfunction ConverCircleToPolyline(cir: Circle): Polyline\r\n{\r\n let arcs = cir.GetSplitCurves([0, 0.25, 0.5, 0.75]);\r\n let pl = new Polyline();\r\n pl.OCS = cir.OCSNoClone;\r\n for (let arc of arcs)\r\n pl.Join(arc);\r\n return pl;\r\n}\r\n\r\nconst SPLITBUL = Math.tan(Math.PI / 8);\r\nfunction GetSpliteCount(allAngle: number)\r\n{\r\n return Math.ceil(Math.abs(allAngle) / Math.PI * 2);\r\n}\r\n\r\n/** 打断多段线超过1/4圆的圆弧*/\r\nfunction SplitePolylineAtArc(cu: Polyline): IContourData\r\n{\r\n let ptsBuls = cu.PtsBuls;\r\n let ocsInv = cu.OCSInv;\r\n\r\n let result: IContourData = { pts: [], buls: [] };\r\n\r\n if (ptsBuls.pts.length === 0)\r\n return result;\r\n\r\n for (let i = 0; i < ptsBuls.buls.length - 1; i++)\r\n {\r\n let bul = ptsBuls.buls[i];\r\n if (Math.abs(bul) > SPLITBUL + 1e-8)\r\n {\r\n let allAngle = Math.atan(bul) * 4;\r\n let splitCount = GetSpliteCount(allAngle);\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let paramDiv = 1 / splitCount;\r\n let newBul = Math.tan((allAngle / splitCount) / 4);\r\n for (let i = 0; i < splitCount; i++)\r\n {\r\n let param = i * paramDiv;\r\n let p = arc.GetPointAtParam(param).applyMatrix4(ocsInv);\r\n let p2 = AsVector2(p);\r\n //暂时不处理0长度段\r\n if (true || result.pts.length === 0 || !equalv2(p2, arrayLast(result.pts), 1e-2))\r\n {\r\n result.pts.push(p2);\r\n result.buls.push(newBul);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n //暂时不处理0长度段\r\n if (true || result.pts.length === 0 || !equalv2(ptsBuls.pts[i], arrayLast(result.pts), 1e-2))\r\n {\r\n result.pts.push(ptsBuls.pts[i]);\r\n result.buls.push(ptsBuls.buls[i]);\r\n }\r\n }\r\n }\r\n\r\n result.pts.push(arrayLast(ptsBuls.pts));\r\n result.buls.push(arrayLast(ptsBuls.buls));\r\n return result;\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 \"../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 { 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 * 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 //del_ue_exp_start\r\n clipperLib.NativeClipperLibRequestedFormat.WasmOnly\r\n //del_ue_exp_end\r\n //del_ue_exp_start\r\n //del_ue_exp_end 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 { 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 PathTranslate(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 PathTranslate_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 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, PathTranslate_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\nconst TEXT_BOX = NestCache.CreatePath(570, 110);\r\n\r\n/**\r\n * 分析文字放置位置\r\n * @param contour 轮廓点表\r\n * @param holes 网洞点表\r\n * @param [textBox=TEXT_BOX] 标签盒子\r\n * @param [allowReturnNullPos=false] 允许返回null 当没有找到合适的位置返回null\r\n * @returns Vector3\r\n */\r\nexport function ParseRegionTextPos(contour: Point[], holes: (Point[])[], textBox = TEXT_BOX, allowReturnNullPos = false): Vector3 | undefined\r\n{\r\n let hasTextBox = true;\r\n let path = new Path(contour);\r\n let nfps: Polyline[] = path.GetInsideNFP(textBox)?.map(nfp => Path2Polyline(PathTranslate_Self(PathScale(nfp, 1e-4), path.OrigionMinPoint.x, path.OrigionMinPoint.y))); //可能无法获得\r\n if (!nfps || nfps.length === 0)\r\n {\r\n if (allowReturnNullPos) return;\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(textBox);\r\n let nfp = nfps[Max(nfps, (n1, n2) => Area(n2) > Area(n1))];\r\n\r\n let pl = Path2Polyline(PathTranslate_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 {\r\n //允许返回空的点 因为无法放置\r\n if (allowReturnNullPos) return;\r\n resShapes = shapes;\r\n }\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 += textBox.Size.x * 0.5;\r\n p.y += textBox.Size.y * 0.5;\r\n }\r\n return p;\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 { Box2, Vector2, MathUtils } from \"three\";\r\nimport { doIntersect } from \"./DoIntersect\";\r\n\r\n/*\r\n功能:盒子相交检测,快速判断正矩形(未旋转的)与直线和圆是否有交点.\r\n1.使用裁剪算法优化判断速度.\r\n参考:https://zh.wikipedia.org/wiki/%E7%A7%91%E6%81%A9%EF%BC%8D%E8%8B%8F%E6%B3%BD%E5%85%B0%E7%AE%97%E6%B3%95\r\n2.使用快速判断直线是否有交点提高速度.\r\n参考:doIntersect方法.\r\n*/\r\n\r\nexport interface Vec2\r\n{\r\n x: number;\r\n y: number;\r\n}\r\n\r\nconst LEFT = 1, RIGHT = 2, DOWN = 4, TOP = 8;\r\n// Compute the bit code for a point (x, y) using the clip rectangle\r\n// bounded diagonally by (xmin, ymin), and (xmax, ymax)\r\n\r\n// ASSUME THAT xmax, xmin, ymax and ymin are global constants.\r\nfunction ComputeOutCode(x: number, y: number, box: Box2): number\r\n{\r\n let code = 0;\r\n if (x < box.min.x) // to the left of clip window\r\n code |= LEFT;\r\n else if (x > box.max.x) // to the right of clip window\r\n code |= RIGHT;\r\n\r\n if (y < box.min.y) // below the clip window\r\n code |= DOWN;\r\n else if (y > box.max.y) // above the clip window\r\n code |= TOP;\r\n\r\n return code;\r\n}\r\n\r\n\r\n/**\r\n * 盒子相交测试,快速判断盒子和直线或者圆是否有相交\r\n */\r\nexport class BoxCheckIntersect\r\n{\r\n p1: Vec2;\r\n p2: Vec2;\r\n p3: Vec2;\r\n p4: Vec2;\r\n box: Box2;\r\n constructor(box: Box2)\r\n {\r\n this.p1 = box.min;\r\n this.p3 = box.max;\r\n this.p2 = new Vector2(this.p3.x, this.p1.y);\r\n this.p4 = new Vector2(this.p1.x, this.p3.y);\r\n\r\n this.box = box;\r\n }\r\n\r\n //直线与盒子相交,或者被盒子包含. Cohen–Sutherland裁剪算法\r\n IsIntersectLine(p1: Vec2, p2: Vec2): boolean\r\n {\r\n let code1 = ComputeOutCode(p1.x, p1.y, this.box);\r\n let code2 = ComputeOutCode(p2.x, p2.y, this.box);\r\n\r\n //按位AND不为0:两个点共享一个外部区域(LEFT,RIGHT,TOP或BOTTOM),因此两个点都必须在窗口外部\r\n if (code1 & code2) return false;\r\n\r\n let code = code1 | code2;\r\n if (code1 === 0 || code2 === 0 || code === 3 || code === 12)//点1点2在矩形内,或者竖直贯穿,水平贯穿\r\n return true;\r\n\r\n if ((code & TOP) && doIntersect(p1, p2, this.p3, this.p4))\r\n return true;\r\n if ((code & LEFT) && doIntersect(p1, p2, this.p1, this.p4))\r\n return true;\r\n if ((code & RIGHT) && doIntersect(p1, p2, this.p2, this.p3))\r\n return true;\r\n if ((code & DOWN) && doIntersect(p1, p2, this.p3, this.p1))\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n //ref https://yal.cc/rectangle-circle-intersection-test/\r\n IsIntersectCircle(cen: Vec2, radius: number): boolean\r\n {\r\n let nearestX = MathUtils.clamp(cen.x, this.box.min.x, this.box.max.x);\r\n let nearestY = MathUtils.clamp(cen.y, this.box.min.y, this.box.max.y);\r\n return ((nearestX - cen.x) ** 2 + (nearestY - cen.y) ** 2) <= radius ** 2;\r\n }\r\n}\r\n\r\n//https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm\r\nfunction CohenSutherlandLineClip(box: Box2, p1: Vec2, p2: Vec2)\r\n{\r\n let [x0, y0] = [p1.x, p1.y];\r\n let [x1, y1] = [p2.x, p2.y];\r\n\r\n let xmin = box.min.x;\r\n let ymin = box.min.y;\r\n\r\n let xmax = box.max.x;\r\n let ymax = box.max.y;\r\n\r\n // compute outcodes for P0, P1, and whatever point lies outside the clip rectangle\r\n let outcode0 = ComputeOutCode(x0, y0, box);\r\n let outcode1 = ComputeOutCode(x1, y1, box);\r\n let accept = false;\r\n\r\n while (true)\r\n {\r\n if (!(outcode0 | outcode1))\r\n {\r\n // bitwise OR is 0: both points inside window; trivially accept and exit loop\r\n accept = true;\r\n break;\r\n }\r\n else if (outcode0 & outcode1)\r\n {\r\n // bitwise AND is not 0: both points share an outside zone (LEFT, RIGHT, TOP,\r\n // or BOTTOM), so both must be outside window; exit loop (accept is false)\r\n break;\r\n }\r\n else\r\n {\r\n // failed both tests, so calculate the line segment to clip\r\n // from an outside point to an intersection with clip edge\r\n let x: number, y: number;\r\n\r\n // At least one endpoint is outside the clip rectangle; pick it.\r\n let outcodeOut = outcode1 > outcode0 ? outcode1 : outcode0;\r\n\r\n // Now find the intersection point;\r\n // use formulas:\r\n // slope = (y1 - y0) / (x1 - x0)\r\n // x = x0 + (1 / slope) * (ym - y0), where ym is ymin or ymax\r\n // y = y0 + slope * (xm - x0), where xm is xmin or xmax\r\n // No need to worry about divide-by-zero because, in each case, the\r\n // outcode bit being tested guarantees the denominator is non-zero\r\n if (outcodeOut & TOP)\r\n { // point is above the clip window\r\n x = x0 + (x1 - x0) * (ymax - y0) / (y1 - y0);\r\n y = ymax;\r\n }\r\n else if (outcodeOut & DOWN)\r\n { // point is below the clip window\r\n x = x0 + (x1 - x0) * (ymin - y0) / (y1 - y0);\r\n y = ymin;\r\n }\r\n else if (outcodeOut & RIGHT)\r\n { // point is to the right of clip window\r\n y = y0 + (y1 - y0) * (xmax - x0) / (x1 - x0);\r\n x = xmax;\r\n }\r\n else if (outcodeOut & LEFT)\r\n { // point is to the left of clip window\r\n y = y0 + (y1 - y0) * (xmin - x0) / (x1 - x0);\r\n x = xmin;\r\n }\r\n\r\n // Now we move outside point to intersection point to clip\r\n // and get ready for next pass.\r\n if (outcodeOut === outcode0)\r\n {\r\n x0 = x;\r\n y0 = y;\r\n outcode0 = ComputeOutCode(x0, y0, box);\r\n }\r\n else\r\n {\r\n x1 = x;\r\n y1 = y;\r\n outcode1 = ComputeOutCode(x1, y1, box);\r\n }\r\n }\r\n }\r\n}\r\n","/**\r\n * 删除数组中指定的元素,返回数组本身\r\n * @param {Array} arr 需要操作的数组\r\n * @param {*} el 需要移除的元素\r\n */\r\nexport function arrayRemove(arr: Array, el: T): Array\r\n{\r\n let j = 0;\r\n for (let i = 0, l = arr.length; i < l; i++)\r\n {\r\n if (arr[i] !== el)\r\n {\r\n arr[j++] = arr[i];\r\n }\r\n }\r\n arr.length = j;\r\n\r\n return arr;\r\n}\r\n\r\n\r\nexport function arrayRemoveOnce(arr: Array, el: T): Array\r\n{\r\n let index = arr.indexOf(el);\r\n if (index !== -1)\r\n arr.splice(index, 1);\r\n return arr;\r\n}\r\n\r\n/**\r\n * 删除通过函数校验的元素\r\n * @param {(e: T) => boolean} checkFuntion 校验函数\r\n */\r\nexport function arrayRemoveIf(arr: Array, checkFuntion: (e: T) => boolean): Array\r\n{\r\n let j = 0;\r\n for (let i = 0, l = arr.length; i < l; i++)\r\n {\r\n if (!checkFuntion(arr[i]))\r\n {\r\n arr[j++] = arr[i];\r\n }\r\n }\r\n arr.length = j;\r\n\r\n return arr;\r\n}\r\n\r\nexport function arrayFirst(arr: Array): T\r\n{\r\n return arr[0];\r\n}\r\n\r\nexport function arrayLast(arr: { [key: number]: T, length: number; }): T\r\n{\r\n return arr[arr.length - 1];\r\n}\r\n\r\n/**\r\n * 根据数值从小到大排序数组\r\n * @param {Array} arr\r\n * @returns {Array} 返回自身\r\n */\r\nexport function arraySortByNumber(arr: Array): Array\r\n{\r\n arr.sort(sortNumberCompart);\r\n return arr;\r\n}\r\n\r\n/**\r\n * 对排序好的数组进行去重操作\r\n * @param {(e1, e2) => boolean} [checkFuction] 校验对象相等函数\r\n * @returns {Array} 返回自身\r\n */\r\nexport function arrayRemoveDuplicateBySort(arr: Array, checkFuction: (e1: T, e2: T) => boolean = checkEqual): Array\r\n{\r\n if (arr.length < 2) return arr;\r\n let j = 1;\r\n for (let i = 1, l = arr.length; i < l; i++)\r\n if (!checkFuction(arr[j - 1], arr[i]))\r\n arr[j++] = arr[i];\r\n arr.length = j;\r\n return arr;\r\n}\r\n\r\n//原地更新数组,注意这个函数并不会比map快.\r\nexport function arrayMap(arr: Array, mapFunc: (v: T) => T): Array\r\n{\r\n for (let i = 0, count = arr.length; i < count; i++)\r\n arr[i] = mapFunc(arr[i]);\r\n return arr;\r\n}\r\n\r\nfunction sortNumberCompart(e1: any, e2: any)\r\n{\r\n return e1 - e2;\r\n}\r\n\r\nfunction checkEqual(e1: any, e2: any): boolean\r\n{\r\n return e1 === e2;\r\n}\r\n\r\n/**\r\n * 改变数组的值顺序\r\n * @param arr 需要改变初始值位置的数组\r\n * @param index //将index位置以后的值放到起始位置\r\n */\r\nexport function changeArrayStartIndex(arr: T[], index: number): T[]\r\n{\r\n arr.unshift(...arr.splice(index));\r\n return arr;\r\n}\r\n\r\nexport function equalArray(a: T[], b: T[], checkF = checkEqual)\r\n{\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n for (var i = 0; i < a.length; ++i)\r\n if (!checkF(a[i], b[i])) return false;\r\n return true;\r\n}\r\n\r\nexport function arrayClone(arr: T[]): T[]\r\n{\r\n return arr.slice();\r\n}\r\n\r\n//https://jsperf.com/merge-array-implementations/30\r\nexport function arrayPushArray(arr1: T[], arr2: T[]): T[]\r\n{\r\n let arr1Length = arr1.length;\r\n let arr2Length = arr2.length;\r\n arr1.length = arr1Length + arr2Length;\r\n for (let i = 0; i < arr2Length; i++)\r\n arr1[arr1Length + i] = arr2[i];\r\n\r\n return arr1;\r\n}\r\n\r\nexport function arraySum(arr: number[])\r\n{\r\n let sum = 0;\r\n for (let n of arr) sum += n;\r\n return sum;\r\n}\r\n\r\nexport function FilterSet(s: Set, fn: (el: T) => boolean): Set\r\n{\r\n let ns = new Set();\r\n for (let el of s)\r\n {\r\n if (fn(el))\r\n ns.add(el);\r\n }\r\n return ns;\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box2, Vector2, Vector3 } from \"three\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { InsertSortedIndex, RangeUnion } from \"../../DatabaseServices/Room/ParseService/RangeUtils\";\r\nimport { BoxCheckIntersect } from '../../Geometry/CheckIntersect';\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { arrayPushArray, arraySortByNumber } from \"../../Nest/Common/ArrayExt\";\r\nimport { Max } from '../../Nest/Common/Util';\r\nimport { FuzzyFactory } from '../../csg/core/FuzzyFactory';\r\n\r\n/** [area maxXIndex maxYIndex xCount yCount,width,height] */\r\nexport type RectData = [number, number, number, number, number, number, number];\r\n\r\n/**\r\n * 获取面积最大的矩形\r\n * @param rects\r\n * @returns\r\n */\r\nfunction GetMaxAreaFn(rects: RectData[]): number\r\n{\r\n return Max(rects, (t1, t2) => t2[0] > t1[0]);\r\n}\r\n\r\nfunction GetMaxWidthFn(rects: RectData[]): number\r\n{\r\n return Max(rects, (t1, t2) => t2[5] === t1[5] ? t2[6] > t1[6] : t2[5] > t1[5]);\r\n}\r\n\r\nfunction GetMaxHeightFn(rects: RectData[]): number\r\n{\r\n return Max(rects, (t1, t2) => t2[6] === t1[6] ? t2[6] > t1[6] : t2[5] > t1[5]);\r\n}\r\n\r\n\r\n//最大内接矩形\r\n//1.分析盒子\r\n// 1.默认我们使用顶点坐标进行一维展开\r\n// 2.当存在斜线时, 我们精确展开(当跨度大于(100/50)时,我们精确产开另一条轴)\r\n// (1).获取需要精确展开的区间 随后合并区间\r\n// (2).对区间进行展开数值,使用二分搜索,如果在已有的顶点附近,则不进行增项\r\n\r\n//2.标记轮廓内的矩形\r\n// (1).我们收集多边形所有的斜线,与矩形盒子求交,如果相交,则矩形盒子无效化\r\n// (2).矩形终点在轮廓内(使用单条射线检测,因为我们始终在端点增加锚点的关系 我们似乎不会在顶点位置得到(交点? 稳妥起见 实现标准的射线检测算法)\r\n\r\n//3.获取最大内接矩形\r\n// 迭代开始\r\n// 动态规划 存储每个方块得到的最大矩形\r\n// 获取最大的(根据规则)\r\n// 对池子里的结果进行生存选择(如果被占用了方块,则该结果已经不可用)\r\n// 取剩下可用的最大的(因为我们已经是在合理的情况下拿最大的了,所以不需要在重新迭代)\r\n// 重复迭代\r\n\r\n\r\n/**\r\n * @example\r\n *\r\n * //1. 设置过滤条件(舍弃掉一些无用的矩形)\r\n * let lir = new LargestInteriorRectangle;\r\n * lir.MinWidth = 200;//设置最小可以接受的矩形宽度\r\n * lir.MinHeight = 200;//设置最小可以接受的矩形宽度\r\n * lir.MinArea = 200 * 200;//设置最小可以接受的矩形面积\r\n *\r\n * //除了变量 也可以设置过滤函数\r\n * //例如:\r\n * lir.FilterRectFn = (w,h)=> !(w>500 || h>500) //这样将对长或者宽不足500的矩形板过滤(舍弃)\r\n *\r\n * //2. 可以设置优先模式,默认提供了面积优先,你也可以使用宽度优先或者高度优先,或许默认规则可能不好用,可以自定义传入自定义函数.\r\n * lir.GetMaxRectIndexFn = LargestInteriorRectangle.GetMaxAreaFn; //或者 LargestInteriorRectangle.GetMaxWidthFn / LargestInteriorRectangle.GetMaxHeightFn\r\n *\r\n * //3. 你已经设置好解析器,你现在可以进行解析了\r\n * let rects = lir.ParseLir([ new Vector3(0,0,0) , new Vector3(100,0,0) , new Vector3(50,100,0)]) //首尾不需要重复,首尾重复可能造成错误,程序不再校验\r\n *\r\n */\r\nexport class LargestInteriorRectangle\r\n{\r\n MinWidth = 100;\r\n MinHeight = 100;\r\n MinArea = 200 * 200;\r\n\r\n /** 可以自定义过滤函数,以便过滤掉某些不需要的矩形,当返回true时,我们会过滤它 */\r\n FilterRectFn: (width: number, height: number) => boolean;\r\n\r\n GetMaxRectIndexFn: (rects: RectData[]) => number = GetMaxAreaFn;\r\n\r\n\r\n static GetMaxAreaFn = GetMaxAreaFn;\r\n static GetMaxWidthFn = GetMaxWidthFn;\r\n static GetMaxHeightFn = GetMaxHeightFn;\r\n\r\n constructor()\r\n {\r\n }\r\n\r\n /**\r\n * 分析最大内接矩形\r\n * @param polygonPts 多边形点表,首尾不要相等\r\n */\r\n ParseLIR(polygonPts: Vector2[]): Box2[]\r\n {\r\n //端点列表\r\n let xs: number[] = [];\r\n let ys: number[] = [];\r\n\r\n let xset = new Set();\r\n let yset = new Set();\r\n\r\n //需要展开的范围\r\n let xranges: [number, number][] = [];\r\n let yranges: [number, number][] = [];\r\n\r\n let polygonBox = new Box2().setFromPoints(polygonPts);\r\n\r\n let vec = new Vector2;\r\n\r\n let klines: [Vector2, Vector2][] = []; //所有的斜线\r\n // let linesP: [Vector2, Vector2][] = []; //所有的线点\r\n // let linesFb = new Flatbush(pts.length);//所有的线的索引\r\n\r\n let fuzzX = new FuzzyFactory(1, 0.1);\r\n let fuzzY = new FuzzyFactory(1, 0.1);\r\n\r\n for (let i = 0; i < polygonPts.length; i++)\r\n {\r\n let p = polygonPts[i];\r\n let p2 = polygonPts[FixIndex(i + 1, polygonPts)];\r\n\r\n // linesP.push([p, p2]);\r\n // let box = new Box2().setFromPoints([p, p2]);\r\n // linesFb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n\r\n vec.subVectors(p2, p);\r\n\r\n //收集端点\r\n let x = fuzzX.lookupOrCreate([p.x], p.x);\r\n if (!xset.has(x))\r\n {\r\n xs.push(x);\r\n xset.add(x);\r\n }\r\n\r\n let y = fuzzY.lookupOrCreate([p.y], p.y);\r\n if (!yset.has(y))\r\n {\r\n ys.push(y);\r\n yset.add(y);\r\n }\r\n\r\n //展开斜线 每20分段\r\n if (Math.abs(vec.x) > 20 && Math.abs(vec.y) > 20)\r\n {\r\n if (Math.abs(vec.x) > 20)\r\n yranges.push(vec.y > 0 ? [p.y, p2.y] : [p2.y, p.y]);\r\n\r\n if (Math.abs(vec.y) > 20)\r\n xranges.push(vec.x > 0 ? [p.x, p2.x] : [p2.x, p.x]);\r\n }\r\n\r\n //收集所有的斜线\r\n if (!equaln(vec.x, 0, 0.1) && !equaln(vec.y, 0, 0.1))\r\n klines.push([p, p2]);\r\n }\r\n\r\n // linesFb.finish();\r\n\r\n //合并展开区间\r\n xranges.sort((a, b) => a[0] - b[0]);\r\n yranges.sort((a, b) => a[0] - b[0]);\r\n xranges = RangeUnion(xranges);\r\n yranges = RangeUnion(yranges);\r\n\r\n arraySortByNumber(xs);\r\n arraySortByNumber(ys);\r\n\r\n //展开\r\n RangesAdd(xranges, xs);\r\n RangesAdd(yranges, ys);\r\n\r\n //最大化\r\n xs[0] = polygonBox.min.x;\r\n xs[xs.length - 1] = polygonBox.max.x;\r\n\r\n ys[0] = polygonBox.min.y;\r\n ys[ys.length - 1] = polygonBox.max.y;\r\n\r\n //所有网格的索引\r\n let gridFb = new Flatbush((xs.length - 1) * (ys.length - 1));\r\n\r\n // let pls: Polyline[] = [];\r\n\r\n for (let i = 0; i < xs.length - 1; i++)\r\n {\r\n for (let j = 0; j < ys.length - 1; j++)\r\n {\r\n gridFb.add(xs[i], ys[j], xs[i + 1], ys[j + 1]);\r\n\r\n // let pl = new Polyline().RectangleFrom2Pt(new Vector3(xs[i], ys[j]), new Vector3(xs[i + 1], ys[j + 1]));\r\n // if (false) TestDraw(pl);\r\n // pls.push(pl);\r\n }\r\n }\r\n\r\n gridFb.finish();\r\n\r\n const matrix: number[][] = new Array(xs.length - 1).fill(1).map(() => new Array(ys.length - 1).fill(1));\r\n\r\n //矩形与斜线相交\r\n let checks: BoxCheckIntersect[] = [];\r\n for (let line of klines)\r\n {\r\n let box = new Box2().setFromPoints(line);\r\n let ids = gridFb.search(box.min.x, box.min.y, box.max.x, box.max.y);\r\n\r\n for (let id of ids)\r\n {\r\n let check = checks[id];\r\n\r\n let i = Math.floor((id) / (ys.length - 1));\r\n let j = id - (i * (ys.length - 1));\r\n\r\n if (!check)\r\n {\r\n check = new BoxCheckIntersect(new Box2(new Vector2(xs[i] + 0.01, ys[j] + 0.01), new Vector2(xs[i + 1] - 0.01, ys[j + 1] - 0.01)));\r\n checks[id] = check;\r\n\r\n // let pl = new Polyline().RectangleFrom2Pt(new Vector3(xs[i], ys[j]), new Vector3(xs[i + 1], ys[j + 1]));\r\n // TestDraw(pl, 2);\r\n }\r\n\r\n if (check.IsIntersectLine(line[0], line[1]))\r\n {\r\n // pls[id].ColorIndex = 1;\r\n // pls[id].Erase();\r\n matrix[i][j] = 0;\r\n }\r\n }\r\n }\r\n\r\n //y轴扫描线(矩形在多边形外)\r\n // if (xs.length < ys.length)\r\n {\r\n for (let i = 0; i < xs.length - 1; i++)\r\n {\r\n let x = (xs[i + 1] + xs[i]) * 0.5;\r\n\r\n let iPtYs = IsPointInPolygon(polygonPts, new Vector3(x, polygonBox.min.y - 0.1, 0));\r\n arraySortByNumber(iPtYs);\r\n\r\n for (let j = 0; j < ys.length - 1; j++)\r\n {\r\n let y = (ys[j + 1] + ys[j]) * 0.5;\r\n while (iPtYs.length && iPtYs[0] < y)\r\n iPtYs.shift();\r\n\r\n if (iPtYs.length % 2 !== 1)\r\n {\r\n // pls[i * (ys.length - 1) + j].ColorIndex = 3;\r\n // pls[i * (ys.length - 1) + j].Erase();\r\n matrix[i][j] = 0;\r\n }\r\n }\r\n }\r\n }\r\n // else//x轴扫描线\r\n\r\n //ref https://leetcode.cn/problems/maximal-rectangle/solutions/535672/zui-da-ju-xing-by-leetcode-solution-bjlu/\r\n const maximalRectangle = () =>\r\n {\r\n const m = matrix.length;//m个竖条 xlist\r\n if (m === 0) return 0;\r\n const n = matrix[0].length;//n个横条 ylist\r\n if (n === 0) return;\r\n\r\n const left: number[][] = new Array(m).fill(0).map(() => new Array(n).fill(0));\r\n\r\n for (let i = 0; i < m; i++)\r\n {\r\n for (let j = 0; j < n; j++)\r\n {\r\n if (matrix[i][j])\r\n {\r\n left[i][j] = (j === 0 ? 0 : left[i][j - 1]) + 1;\r\n }\r\n }\r\n }\r\n\r\n //area maxXIndex maxYIndex xcount ycount,width,height\r\n let rects: RectData[] = [];\r\n\r\n for (let j = 0; j < n; j++) // 对于每一列,使用基于柱状图的方法\r\n {\r\n const up = new Array(m).fill(0);\r\n const down = new Array(m).fill(0);\r\n\r\n let stack: number[] = [];\r\n for (let i = 0; i < m; i++)\r\n {\r\n while (stack.length && left[stack[stack.length - 1]][j] >= left[i][j])\r\n {\r\n stack.pop();\r\n }\r\n up[i] = stack.length === 0 ? -1 : stack[stack.length - 1];\r\n stack.push(i);\r\n }\r\n stack = [];\r\n for (let i = m - 1; i >= 0; i--)\r\n {\r\n while (stack.length && left[stack[stack.length - 1]][j] >= left[i][j])\r\n {\r\n stack.pop();\r\n }\r\n down[i] = stack.length === 0 ? m : stack[stack.length - 1];\r\n stack.push(i);\r\n }\r\n\r\n for (let i = 0; i < m; i++)\r\n {\r\n const xCount = down[i] - up[i] - 1;\r\n const yCount = left[i][j];\r\n\r\n if (!yCount || !xCount) continue;\r\n\r\n let width = xs[down[i]] - xs[down[i] - xCount];\r\n let height = ys[j + 1] - ys[j + 1 - yCount];\r\n\r\n if (width < this.MinWidth || height < this.MinHeight) continue;\r\n\r\n //自定义过滤函数\r\n if (this.FilterRectFn && this.FilterRectFn(width, height)) continue;\r\n\r\n let area = width * height;\r\n\r\n //面积小于最小允许面积\r\n if (area < this.MinArea) continue;\r\n\r\n rects.push([area, down[i], j, xCount, yCount, width, height]);\r\n }\r\n }\r\n\r\n // while (rects.length)\r\n if (rects.length)\r\n {\r\n let maxIndex = this.GetMaxRectIndexFn(rects);\r\n\r\n let [area, maxXIndex, maxYIndex, xCount, yCount] = rects[maxIndex];\r\n\r\n let xMax = xs[maxXIndex];\r\n let yMax = ys[maxYIndex + 1];\r\n\r\n let xMin = xs[maxXIndex - xCount];\r\n let yMin = ys[maxYIndex + 1 - yCount];\r\n\r\n maxRects.push(new Box2(new Vector2(xMin, yMin), new Vector2(xMax, yMax)));\r\n\r\n rects.splice(maxIndex, 1);\r\n\r\n //对方块进行标记\r\n for (let i = 0; i < xCount; i++)\r\n {\r\n for (let j = 0; j < yCount; j++)\r\n {\r\n matrix[maxXIndex - 1 - i][maxYIndex - j] = 0;\r\n }\r\n }\r\n\r\n //如果有被标记的方块,则删除它\r\n //某些情况不适合这个算法,移除了它,保证结果正确性\r\n // arrayRemoveIf(rects, rect =>\r\n // {\r\n // let [area, maxX, maxY, xCount, yCount] = rect;\r\n // for (let i = 0; i < xCount; i++)\r\n // {\r\n // for (let j = 0; j < yCount; j++)\r\n // {\r\n // if (!matrix[maxX - 1 - i][maxY - j])\r\n // return true;\r\n // }\r\n // }\r\n // return false;\r\n // });\r\n }\r\n };\r\n\r\n let maxRects: Box2[] = [];\r\n while (true)\r\n {\r\n let count = maxRects.length;\r\n maximalRectangle();\r\n if (count === maxRects.length) break;\r\n }\r\n\r\n return maxRects;\r\n }\r\n}\r\n\r\nfunction RangesAdd(ranges: [number, number][], vList: number[])\r\n{\r\n let adds: number[] = [];\r\n for (let range of ranges)\r\n {\r\n let dist = range[1] - range[0];\r\n let count = Math.floor(dist / 20);\r\n let divDist = Math.floor(dist / count);\r\n\r\n for (let i = 1; i < count - 1; i++)\r\n {\r\n let d = Math.floor(range[0] + divDist * i);\r\n\r\n let index = InsertSortedIndex(vList, d, (a, b) => a - b);\r\n\r\n if (Math.abs(vList[index] - d) < 5)\r\n continue;\r\n\r\n if (index !== vList.length - 1 && Math.abs(vList[index + 1] - d) < 5)\r\n continue;\r\n\r\n adds.push(d);\r\n }\r\n }\r\n\r\n if (adds.length)\r\n {\r\n arrayPushArray(vList, adds);\r\n arraySortByNumber(vList);\r\n }\r\n}\r\n\r\n/**\r\n * 判断点在多段线内外 这是为了LIR实现的优化算法,返回交点的Y轴列表\r\n */\r\nfunction IsPointInPolygon(polyPts: Vector2[], pt: Vector3): number[]\r\n{\r\n // let crossings = 0;\r\n // let insLine = new Line(pt, p2);\r\n\r\n let iPtYs: number[] = [];\r\n\r\n for (let i = 0; i < polyPts.length; i++)\r\n {\r\n let sp = polyPts[i];\r\n let ep = polyPts[FixIndex(i + 1, polyPts)];\r\n\r\n // if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5))//在起点或者终点\r\n // return false;\r\n\r\n //点位于线上面\r\n // if (pt.y > Math.max(sp.y, ep.y))\r\n // continue;\r\n\r\n //线垂直Y轴\r\n let derX = ep.x - sp.x;\r\n if (equaln(derX, 0, 5e-6))\r\n {\r\n // if (equaln(pt.x, ep.x, 1e-5)\r\n // && (pt.y > Math.min(sp.y, ep.y) - 1e-5 && pt.y < Math.max(sp.y, ep.y) + 1e-5))\r\n // return false;//点在线上\r\n continue;\r\n }\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)\r\n if (derX < 0)\r\n {\r\n // crossings++;\r\n iPtYs.push(sp.y);\r\n }\r\n continue;\r\n }\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)\r\n if (derX > 0)\r\n {\r\n // crossings++;\r\n iPtYs.push(ep.y);\r\n }\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 let iptY = (pt.x - sp.x) * k + sp.y;\r\n // if (equaln(iptY, pt.y, 1e-5))//点在线上 返回false\r\n // return false;\r\n if (iptY > pt.y)\r\n {\r\n // crossings++;\r\n iPtYs.push(iptY);\r\n }\r\n }\r\n }\r\n\r\n return iPtYs;\r\n}\r\n","import { EndType, JoinType } from \"js-angusj-clipper/web\";\r\nimport { Vec2, Vector2, Vector3 } from \"three\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { BUL_IS_LINE_FUZZ, Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { polar } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { clipperCpp } from \"../Common/ClipperCpp\";\r\nimport { Point } from \"../Common/Point\";\r\nimport { FixIndex, equaln } from \"../Common/Util\";\r\nimport { PathScale } from \"../Core/Path\";\r\n\r\n/** 内外接多边形 */\r\nexport function Circle2Points(circle: Circle, knifRadius: number, splitSize = 10, outside = false): Point[]\r\n{\r\n let radius = circle.Radius;\r\n let an = Math.PI * 2 / splitSize;\r\n\r\n if (outside)\r\n radius = radius / Math.cos(an / 2) + knifRadius;\r\n else\r\n radius -= knifRadius;\r\n\r\n let cenP = circle.Center;\r\n let pts: Vector3[] = [];\r\n for (let i = 0; i < splitSize; i++)\r\n {\r\n pts.push(polar(cenP.clone(), an * i, radius));\r\n }\r\n return pts as Point[];\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 // //小圆弧内嵌时忽略小圆(直线连接) 有可能产生自交 放弃这个\r\n // if (!outside && arc.Radius < 30 && bul > 0) continue;\r\n // if (outside && arc.Radius < 30 && bul < 0) continue;\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(Math.floor(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\r\n/**\r\n * 移除小圆弧,使用尖角直连(有可能产生自交 概率不大)\r\n * @param pl 请传入逆时针多段线(我们将直接修改这个多段线,如果你不想被修改 你应该拷贝一个)\r\n * @param [radius=30]\r\n */\r\nexport function PolylineFilletMinArc(pl: Polyline, radius = 30)\r\n{\r\n let ocsInv = pl.OCSInv;\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n let bul = pl.LineData[i].bul;\r\n if (equaln(bul, BUL_IS_LINE_FUZZ)) continue;\r\n\r\n let arc = pl.GetCurveAtIndex(i) as Arc;\r\n\r\n if (arc.Radius > radius) continue;\r\n\r\n let preCurve = pl.GetCurveAtIndex(FixIndex(i - 1, pl.EndParam));\r\n if (!(preCurve instanceof Line)) continue;\r\n\r\n let nextCurve = pl.GetCurveAtIndex(FixIndex(i + 1, pl.EndParam));\r\n if (!(nextCurve instanceof Line)) continue;\r\n\r\n if (preCurve.IntersectWith2(arc, IntersectOption.ExtendThis).length === 2) continue;\r\n\r\n let ipt = nextCurve.IntersectWith(preCurve, IntersectOption.ExtendBoth)[0];\r\n\r\n if (!ipt) continue;\r\n\r\n if (ipt.distanceTo(arc.Midpoint) > 50) continue;\r\n\r\n pl.LineData.splice(i, 1);\r\n pl.SetPointAt(i, ipt.applyMatrix4(ocsInv) as Vec2 as Vector2);\r\n }\r\n}\r\n","import { Vector2 } from \"../Common/Vector2\";\r\n\r\ninterface P\r\n{\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface IOffset\r\n{\r\n negativeOffset: number;\r\n positiveOffset: number;\r\n}\r\n\r\n/** 点p到线段P1P2 的最短距离的平方,线段不延伸 */\r\nfunction GetSqSegDist(p: P, p1: P, p2: P): number\r\n{\r\n let x = p1.x;\r\n let y = p1.y;\r\n let dx = p2.x - x;\r\n let dy = p2.y - y;\r\n\r\n if (dx !== 0 || dy !== 0)//不是0长度线\r\n {\r\n let t = ((p.x - x) * dx + (p.y - y) * dy) / (dx * dx + dy * dy);\r\n if (t > 1)\r\n {\r\n x = p2.x;\r\n y = p2.y;\r\n }\r\n else if (t > 0)\r\n {\r\n x += dx * t;\r\n y += dy * t;\r\n }\r\n }\r\n dx = p.x - x;\r\n dy = p.y - y;\r\n return dx * dx + dy * dy;\r\n}\r\n\r\nfunction CrossVector2(a: P, b: P)\r\n{\r\n return a.x * b.y - a.y * b.x;\r\n}\r\n\r\n//Ramer-Douglas-Peucker algorithm\r\nfunction SimplifyDPStep(points: P[], first: number, last: number, sqTolerance: number, simplified: P[], offset: IOffset): void\r\n{\r\n let maxSqDist = 0;\r\n let index: number;\r\n let fp = points[first];\r\n let lp = points[last];\r\n\r\n for (let i = first + 1; i < last; i++)\r\n {\r\n let p = points[i];\r\n let sqDist = GetSqSegDist(p, fp, lp);\r\n if (sqDist > maxSqDist)\r\n {\r\n index = i;\r\n maxSqDist = sqDist;\r\n }\r\n }\r\n\r\n if (maxSqDist > sqTolerance)\r\n {\r\n if (index - first > 1) SimplifyDPStep(points, first, index, sqTolerance, simplified, offset);\r\n simplified.push(points[index]);\r\n if (last - index > 1) SimplifyDPStep(points, index, last, sqTolerance, simplified, offset);\r\n }\r\n else\r\n {\r\n //记录偏移\r\n let v = new Vector2(lp.x - fp.x, lp.y - fp.y).normalize();\r\n for (let i = first + 1; i < last; i++)\r\n {\r\n let p = points[i];\r\n let offsetDist = -CrossVector2(v, { x: p.x - fp.x, y: p.y - fp.y });\r\n offset.positiveOffset = Math.max(offset.positiveOffset, offsetDist);\r\n offset.negativeOffset = Math.min(offset.negativeOffset, offsetDist);\r\n }\r\n }\r\n}\r\n\r\n// Ramer-Douglas-Peucker 算法\r\nexport function SimplifyDouglasPeucker(points: P[], sqTolerance: number): [P[], IOffset]\r\n{\r\n let last = points.length - 1;\r\n let simplified: P[] = [points[0]];\r\n let offset: IOffset = { negativeOffset: 0, positiveOffset: 0 };\r\n SimplifyDPStep(points, 0, last, sqTolerance, simplified, offset);\r\n simplified.push(points[last]);\r\n return [simplified, offset];\r\n}\r\n","import { EndType, JoinType } from \"js-angusj-clipper/web\";\r\nimport { Box3 } from \"three\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { clipperCpp } from \"../Common/ClipperCpp\";\r\nimport { Point } from \"../Common/Point\";\r\nimport { PathScale } from \"../Core/Path\";\r\nimport { Circle2Points, Polyline2Points } from \"./Curves2Points\";\r\nimport { Path2Polyline } from \"./Path2Polyline\";\r\nimport { IOffset, SimplifyDouglasPeucker } from \"./Simplify2\";\r\n\r\n\r\n/**\r\n * 运用此代码将曲线转换为点,并且精简它.\r\n * @class CurveWrap\r\n */\r\nexport class CurveWrap\r\n{\r\n BoundingBox: Box3;\r\n\r\n Area: number;\r\n\r\n SimplyPolyline: Polyline;\r\n SimplyOffset: IOffset;\r\n Used = false;\r\n Holes: CurveWrap[] = [];\r\n\r\n Points: Point[];\r\n\r\n _OrgCurve: Polyline | Circle;\r\n\r\n constructor(public Curve: Polyline | Circle, public KnifRadius = 3, public IsOutside: boolean = true)\r\n {\r\n this._OrgCurve = Curve;\r\n this.BoundingBox = Curve.BoundingBox;\r\n\r\n if (Curve instanceof Polyline)\r\n {\r\n let pts = Polyline2Points(Curve, IsOutside, 0)[1];\r\n let [spts, offset] = SimplifyDouglasPeucker(pts, KnifRadius ** 2 + KnifRadius);\r\n if (spts.length !== pts.length)\r\n {\r\n this.SimplyOffset = offset;\r\n this.SimplyPolyline = Path2Polyline(spts);\r\n this.Curve = this.SimplyPolyline; //保险起见,也更新它\r\n this.Area = this.SimplyPolyline.Area;\r\n }\r\n else //此处更新多段线\r\n this.Curve = Path2Polyline(pts);\r\n this.Points = spts;\r\n }\r\n\r\n if (this.Area === undefined)\r\n this.Area = this.Curve.Area;\r\n }\r\n\r\n ContainsCurve(curve: CurveWrap): boolean\r\n {\r\n if (this.SimplyPolyline)\r\n return this.SimplyPolyline.PtInCurve(curve.Curve.StartPoint);\r\n return this.Curve.PtInCurve(curve.Curve.StartPoint);\r\n }\r\n\r\n GetOutsidePoints(): Point[]\r\n {\r\n if (this.Curve instanceof Circle)\r\n {\r\n let pts = Circle2Points(this.Curve, this.KnifRadius, 10, true);\r\n return pts;\r\n }\r\n\r\n else\r\n {\r\n let pl = this.SimplyPolyline || this.Curve;\r\n let offset = this.KnifRadius;\r\n if (this.SimplyOffset)\r\n offset += this.SimplyOffset.positiveOffset;\r\n\r\n if (offset > 0)\r\n {\r\n let pts = pl.GetStretchPoints() as Point[];\r\n pts = clipperCpp.lib.offsetToPaths({\r\n delta: offset * 10000,\r\n offsetInputs: [{ data: PathScale(pts, 10000), joinType: JoinType.Miter, endType: EndType.ClosedPolygon }]\r\n })[0];\r\n PathScale(pts, 0.0001);\r\n return pts;\r\n }\r\n\r\n else\r\n return this.Points;\r\n }\r\n }\r\n\r\n GetInsidePoints(): Point[]\r\n {\r\n if (this.Curve instanceof Circle)\r\n {\r\n let pts = Circle2Points(this.Curve, this.KnifRadius, 10, false);\r\n return pts;\r\n }\r\n\r\n else\r\n {\r\n let pl = this.SimplyPolyline || this.Curve;\r\n let offset = -this.KnifRadius;\r\n if (this.SimplyOffset)\r\n {\r\n offset += this.SimplyOffset.negativeOffset;\r\n }\r\n if (offset < -0.01)\r\n {\r\n let pls = pl.GetOffsetCurves(offset);\r\n if (pls.length)\r\n return pls[0].GetStretchPoints();\r\n }\r\n\r\n else\r\n return this.Points;\r\n }\r\n }\r\n}\r\n"],"names":["equaln","FixIndex","Vector2","arraySortByNumber","sortNumberCompart","arrayPushArray","Shape","TLine","Box2","cache","ConverCircleToPolyline","Path","BufferGeometryUtils2","TShape","Line"],"mappings":"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;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC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"} \ No newline at end of file +{"version":3,"file":"api.esm.js","sources":["../src/Common/ArrayExt.ts","../src/Geometry/CoordinateSystem.ts","../src/Common/SystemEnum.ts","../src/GraphicsSystem/RenderType.ts","../src/ApplicationServices/HostApplicationServices.ts","../src/Common/Dispose.ts","../src/Common/LayerConstant.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/Common/BoardKeyList.ts","../src/UI/Components/RightPanel/RightPanelInterface.ts","../src/DatabaseServices/SymbolTableRecord.ts","../src/DatabaseServices/MaterialTableRecord.ts","../src/DatabaseServices/PhysicalMaterialRecord.ts","../src/DatabaseServices/Entity/Entity.ts","../src/Common/StoreageKeys.ts","../src/Common/eval.ts","../src/Common/Utils.ts","../src/Geometry/GeUtils.ts","../src/Common/Matrix4Utils.ts","../src/Editor/ObjectSnapMode.ts","../src/GLSL/GoochShader.ts","../src/Common/ColorPalette.ts","../src/Editor/BufferGeometry2GeometryCacheMap.ts","../src/Geometry/BufferGeometryUtils.ts","../src/Geometry/Orbit.ts","../src/GraphicsSystem/IntersectWith.ts","../src/DatabaseServices/Entity/Curve.ts","../src/Geometry/Matrix2.ts","../src/Geometry/Plane.ts","../src/Geometry/RotateUV.ts","../src/DatabaseServices/Entity/Line.ts","../src/DatabaseServices/Entity/Ellipse.ts","../src/DatabaseServices/Entity/Arc.ts","../src/DatabaseServices/Entity/DragPointType.ts","../src/DatabaseServices/Entity/Circle.ts","../src/Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams.ts","../src/DatabaseServices/Shape2.ts","../src/Geometry/CreatePolylinePath.ts","../src/Geometry/DoIntersect.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/Add-on/BoardCutting/SplitPolyline.ts","../src/Geometry/Count.ts","../src/Common/CurveUtils.ts","../src/Add-on/DrawDrilling/DrillType.ts","../src/Common/Log.ts","../src/Common/Singleton.ts","../src/DatabaseServices/Entity/BoardInterface.ts","../src/DatabaseServices/Entity/GenUVForWorld.ts","../src/DatabaseServices/Entity/GenLocalUv.ts","../src/DatabaseServices/Shape.ts","../src/csg/core/constants.ts","../src/csg/core/FuzzyFactory.ts","../src/csg/core/math/IsMirrot.ts","../src/csg/core/math/Polygon3.ts","../src/csg/core/Geometry2CSG.ts","../src/Add-on/ArcBoard/ArcBoardBuild.ts","../src/DatabaseServices/Entity/ArcBoardType.ts","../src/Add-on/ArcBoard/ArcBoardFeeding.ts","../src/Add-on/BoardCutting/LinearCuttingForSweep.ts","../src/Common/Toaster.ts","../src/Nest/Common/Util.ts","../src/DatabaseServices/3DSolid/Hole.ts","../src/DatabaseServices/3DSolid/CylinderHole.ts","../src/Add-on/DrawDrilling/HoleUtils.ts","../src/Add-on/TextStyle/FontStyleInterface.ts","../src/UI/Components/Board/BoardFindInterface.ts","../src/UI/Store/BoardFindInterface.ts","../src/UI/Store/DoorInterface.ts","../src/UI/Store/LatticeInterface.ts","../src/UI/Store/OptionInterface/AutoDimBrsOption.ts","../src/UI/Store/OptionInterface/BoardBatchCurtailOption .ts","../src/UI/Store/OptionInterface/ClosingStripOption.ts","../src/UI/Store/OptionInterface/OptionEnum.ts","../src/UI/Store/WineRackInterface.ts","../src/Editor/OrderType.ts","../src/Editor/DefaultConfig.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/DatabaseServices/GroupTableRecord.ts","../src/Common/AddEntityDrawObject.ts","../src/Common/CSGIntersect.ts","../src/Geometry/BSPGroupParse.ts","../src/Geometry/Board2DModelCSG/BoardSideModelCSGBuilder.ts","../src/Geometry/BoardUVGenerator.ts","../src/Geometry/UVUtils.ts","../src/DatabaseServices/ShapeManager.ts","../src/DatabaseServices/Entity/Region.ts","../src/Geometry/DrillParse/CanDrawHoleFuzz.ts","../src/Geometry/DrillParse/Sement1dUntils.ts","../src/Geometry/DrillParse/Face.ts","../src/Geometry/DrillParse/BoardGetFace.ts","../src/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.ts","../src/DatabaseServices/Entity/Extrude.ts","../src/DatabaseServices/Entity/CompositeEntity.ts","../src/DatabaseServices/Hardware/HardwareCompositeEntity.ts","../src/Production/Convert2PtsBul.ts","../src/Production/Product.ts","../src/GraphicsSystem/ParseEdgeSealDir.ts","../src/GraphicsSystem/CalcEdgeSealing.ts","../src/Add-on/BoardCutting/SplitBoardSideModel.ts","../src/Add-on/BoardEditor/Board2Regions.ts","../src/Add-on/BoardEditor/SerializeBoardData.ts","../src/Geometry/CSGSubtract/CSGSubtractTaskManager.ts","../src/Geometry/PointShapeUtils.ts","../src/DatabaseServices/3DSolid/SealSolid.ts","../src/DatabaseServices/FontStyle/FontStyleKeyCodeEnum.ts","../src/DatabaseServices/FontStyle/FontsStyleRecord.ts","../src/DatabaseServices/Text/Text.ts","../src/DatabaseServices/Entity/Board.ts","../src/Geometry/CreateWireframe.ts","../src/Geometry/SimpleExtrudeEdgeGeometry.ts","../src/Geometry/WordUVGenerator.ts","../src/DatabaseServices/3DSolid/ExtrudeHole.ts","../src/GraphicsSystem/ToolPath/OptimizeToolPath.ts","../src/GraphicsSystem/ToolPath/FeedingToolPath.ts","../src/GraphicsSystem/ToolPath/VKnifToolPath.ts","../src/Geometry/ConverToPolylineAndSplitArc.ts","../src/Nest/Common/Area.ts","../src/Nest/Converter/Path2Polyline.ts","../src/Nest/Common/Vector2.ts","../src/Nest/Common/Box2.ts","../src/Nest/Common/ClipperCpp.ts","../src/Nest/Core/Path.ts","../src/Nest/Core/NestCache.ts","../src/DatabaseServices/Room/ParseService/ParseRegionTextPos.ts","../src/DatabaseServices/Room/ParseService/RangeUtils.ts","../src/Geometry/CheckIntersect.ts","../src/Nest/Common/ArrayExt.ts","../src/Add-on/testEntity/LargestInteriorRectangle.ts","../src/Nest/Converter/Curves2Points.ts","../src/Nest/Converter/Simplify2.ts","../src/Nest/Converter/CurveWrap.ts"],"sourcesContent":["/**\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 * map按Key的拼音首字母排序\r\n * reverse:倒序\r\n */\r\nexport function mapSortByCN(map: Map, reverse: boolean = false): Map\r\n{\r\n return new Map([...map].sort((x1, x2) =>\r\n {\r\n return reverse ? x2[0].localeCompare(x1[0], 'zh-CN') : x1[0].localeCompare(x2[0], 'zh-CN');\r\n }));\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 { 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 six = 6\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 ConceptualTransparent = 82, // ConceptualTransparent原本的值是182,估计是写错了,不应该大于100的\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,//封边检查 OpenCabinet.UNOPENRENDERTYPE 该视图下不支持开门动作\r\n PlaceFace = 8,//排版面 OpenCabinet.UNOPENRENDERTYPE 该视图下不支持开门动作\r\n BigHoleFace = 81, //大孔面 OpenCabinet.UNOPENRENDERTYPE 该视图下不支持开门动作\r\n CustomNumber = 9,//自定义编号\r\n ModelGroove = 10,//造型槽 OpenCabinet.UNOPENRENDERTYPE 该视图下不支持开门动作\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 CustomNumberPrint = 109,\r\n}\r\n\r\n/** 实体的渲染颜色种类 */\r\nexport enum ColorInTransparent\r\n{\r\n 原始颜色 = 0,\r\n 灰度单色 = 1,\r\n}\r\n\r\n/** 渲染的状态 */\r\nexport const RenderState = {\r\n /** 概念透明下的实体颜色 */\r\n ConceptualColor: ColorInTransparent.原始颜色,\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 { Database } from '../DatabaseServices/Database';\r\nimport { LayerTableRecord } from '../DatabaseServices/LayerTableRecord';\r\nimport { ObjectId } from '../DatabaseServices/ObjectId';\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 Database: Database;//app.Db\r\n\r\n DefaultMeshMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n DefaultFloorMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n DefaultWallMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n DefaultBulkheadCeilingMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n\r\n IsRoomEntityVisible = true;//室内实体可见\r\n\r\n CurrentLayer: ObjectId;\r\n /** 当前画笔的颜色索引 */\r\n CurrentColorindex: number = 7;\r\n\r\n CurrentDimStyle: ObjectId; //标注样式\r\n CurrentFontStyle: ObjectId; //字体样式\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 @ProxyValue ConceptualOpacity = 1;//概念的透明度\r\n @ProxyValue ConceptualTransparentOpacity = 0.5;//概念(透明)的透明度\r\n @ProxyValue IsTransparentMetals: boolean = false; // 五金是否受概念(透明)影响\r\n @ProxyValue IsTransparentComp: boolean = false; // 组件是否受概念(透明)影响\r\n\r\n DrawWallBottomFace = false;//绘制底面\r\n sealReserve = 0; //封边统计留头量\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 //#region 显示纹路\r\n @ProxyValue showLines = false;\r\n //#endregion\r\n\r\n //#region 显示开门方向纹路\r\n @ProxyValue showOpenDirLines = false;\r\n //#endregion\r\n\r\n //#region 开门方向纹路配置\r\n @ProxyValue doorLinesOption = {\r\n physicalShowLines: false, //真实视图显示开门方向纹路\r\n physicalShowLines2: false, //真实视图带线框显示开门方向纹路\r\n reverseOpenDirLines: false, //反转开门方向纹路\r\n };\r\n //#endregion\r\n\r\n //#region 显示二维刀路路径线条\r\n @ProxyValue show2DPathLine = false;\r\n //#endregion\r\n\r\n //#region 显示二维刀路\r\n @ProxyValue show2DPathObject = 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 drillRemark: false,//拆单获取排钻备注\r\n checkSealType: \"1\",\r\n sealMaxValue: 10,//封边最大值\r\n sealValues: '',//封边值列表\r\n hardwareExpressionFormattingAccuracy: 2,//复合实体表达式值格式化精度\r\n partialSplitValueCanTakesEffect: false,\r\n cancelHoleProcessing: false,//填写拆单尺寸板件取消孔槽加工\r\n isCheckCustomBoardNumber: 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 boardCustomNumberTextHeight = 60; //板编号字体高度\r\n @ProxyValue lineWidth = 2; //打印线框\r\n @ProxyValue fractionDigitsType: FractionDigitsType = FractionDigitsType.two;\r\n @ProxyValue throughModelSegmentedDrill = false; //挖穿造型分段排钻\r\n @ProxyValue autoDeviation = false; //排钻碰撞智能偏移\r\n @ProxyValue autoDeviationMinDist = 200; //排钻碰撞智能偏移最小排钻面长度\r\n @ProxyValue smallGrooveThreshold = 900; //全深槽影响阈值\r\n @ProxyValue sealWidthPercentage = 1; //封边宽度百分比\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\nexport const ByLayerColorIndex = 260;\r\n","\r\n\r\n\r\nexport enum Status\r\n{\r\n False = 0,\r\n True = 1,\r\n Side = 2,\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 containsBox(box: Box3, fuzz = 1e-8): boolean\r\n {\r\n return this.min.x <= box.min.x + fuzz && box.max.x <= this.max.x + fuzz &&\r\n this.min.y <= box.min.y + fuzz && box.max.y <= this.max.y + fuzz &&\r\n this.min.z <= box.min.z + fuzz && box.max.z <= this.max.z + fuzz;\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 WriteBool(v: boolean)\r\n {\r\n this.Write(v ? 1 : 0);\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 Write2dArray(arr: [any, any][])\r\n {\r\n this._datas.push(arr.length, ...arr.flat());\r\n }\r\n\r\n Read(): any\r\n {\r\n return this._datas[this.readIndex++];\r\n }\r\n\r\n ReadBool()\r\n {\r\n return Boolean(this.Read());\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 Read2dArray(): [any, any][]\r\n {\r\n let count = this.Read();\r\n let arr = this._datas.slice(this.readIndex, this.readIndex + count * 2);\r\n this.readIndex += count * 2;\r\n\r\n let arr2d: [any, any][] = [];\r\n for (let i = 0; i < arr.length; i = i + 2)\r\n arr2d.push([arr[i], arr[i + 1]]);\r\n\r\n return arr2d;\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\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?: ISerialize)\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.ReadBool();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.WriteBool(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.ReadBool();\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.WriteBool(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\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 if (ver === 1)\r\n file.ReadObject();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n file.WriteObject(this.undoData);\r\n file.WriteObject(this.redoData);\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 = \"u_ro\";\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 PaperName = \"paperName\",\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 Remarks = \"remarks\",//备注\r\n ExtraRemarks = \"extraRemarks\",//追加备注\r\n OpenDir = \"openDir\", //开门方向\r\n GroovesAddLength = \"GroovesAddLength\", //槽加长\r\n GroovesAddWidth = \"GroovesAddWidth\", //槽加宽\r\n GroovesAddDepth = \"GroovesAddDepth\", //槽加深\r\n FrontDrill = \"frontDrill\",//正面排孔\r\n BackDrill = \"backDrill\",//反面排孔\r\n SelectRoomCabinet = \"selectRoomCabinet\", //选择的房名和柜名\r\n}\r\n","import { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { IBaseOption } from \"../../Store/OptionInterface/IOptionInterface\";\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 goodsId?: string;\r\n goodsSn?: string;\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 goodsId: string;\r\n goodsSn: string;\r\n}\r\n\r\nexport interface IToplineOption extends IHardwareOption\r\n{\r\n addLen: string;\r\n}\r\n","import { Status } from \"../Common/Status\";\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 { SymbolTable } from \"./Tables/SymbolTable\";\r\n\r\nexport abstract 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\r\n let undoData = this.UndoRecord();\r\n if (undoData)\r\n {\r\n let hr = new HistorycRecord();\r\n hr.undoData = new NameData(this.name);\r\n hr.redoData = new NameData(name);\r\n undoData.WriteObjectHistoryPath(this, hr);\r\n }\r\n\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 ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n if (undoData instanceof NameData)\r\n {\r\n if (this.name === undoData.name)\r\n return;\r\n if (this.Owner)\r\n {\r\n let symbolTable = this.Owner.Object as SymbolTable;\r\n if (!symbolTable.ChangeRecordName(this, undoData.name))\r\n return;\r\n }\r\n this.name = undoData.name;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 记录当前Name的序列化数据\r\n */\r\n@Factory\r\nexport class NameData implements ISerialize\r\n{\r\n ReadFile(file: CADFiler): this\r\n {\r\n this.name = file.Read();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.Write(this.name);\r\n return this;\r\n }\r\n constructor(public name: string) { }\r\n}\r\n","import { Factory } from \"./CADFactory\";\r\nimport { SymbolTableRecord } from \"./SymbolTableRecord\";\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 { EMetalsType } from \"../UI/Components/RightPanel/RightPanelInterface\";\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\nexport interface IHardwareItem\r\n{\r\n value: string | Array<[string, string]> | EMetalsType;\r\n checked: boolean;\r\n}\r\n\r\nexport interface IHardwareProps\r\n{\r\n name: IHardwareItem;//实体名\r\n roomName: IHardwareItem;//房间名\r\n cabinetName: IHardwareItem;//柜名\r\n factory: IHardwareItem;//厂家\r\n comments: IHardwareItem;//备注\r\n actualExpr: IHardwareItem;//价格\r\n brand: IHardwareItem;//品牌\r\n model: IHardwareItem;//型号\r\n spec: IHardwareItem;//规格\r\n count: IHardwareItem;//数量\r\n unit: IHardwareItem;//单位\r\n DataList: IHardwareItem;//特殊备注\r\n type: IHardwareItem;//类型\r\n goods: {//商品编码\r\n goodsSn: string;\r\n goodsId: string;\r\n checked: boolean;\r\n };\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 // 扩展材质的属性\r\n private _hardwareAttributeInfo: IHardwareProps = {\r\n name: {\r\n value: \"\",\r\n checked: false\r\n },\r\n roomName: {\r\n value: \"\",\r\n checked: false\r\n },\r\n cabinetName: {\r\n value: \"\",\r\n checked: false\r\n },\r\n factory: {\r\n value: \"\",\r\n checked: false\r\n },\r\n comments: {\r\n value: \"\",\r\n checked: false\r\n },\r\n actualExpr: {\r\n value: \"\",\r\n checked: false\r\n },\r\n brand: {\r\n value: \"\",\r\n checked: false\r\n },\r\n model: {\r\n value: \"\",\r\n checked: false\r\n },\r\n spec: {\r\n value: \"\",\r\n checked: false\r\n },\r\n count: {\r\n value: \"\",\r\n checked: false\r\n },\r\n unit: {\r\n value: \"\",\r\n checked: false\r\n },\r\n DataList: {\r\n value: Array.from({ length: 20 }, () => [\"\", \"\"]),\r\n checked: false\r\n },\r\n type: {\r\n value: EMetalsType.Metals,\r\n checked: false\r\n },\r\n goods: {\r\n goodsSn: \"\",\r\n goodsId: \"\",\r\n checked: false,\r\n },\r\n };\r\n\r\n private _isMaterialLock: boolean = false;//材质锁\r\n private material = new MeshPhysicalMaterial({});\r\n\r\n constructor()\r\n {\r\n super();\r\n\r\n Object.defineProperty(this.material, \"ObjectId\", {\r\n get: () =>\r\n {\r\n return this?.objectId?.Index;\r\n }\r\n });\r\n }\r\n\r\n async Update()\r\n {\r\n await this.PhysicalMaterialUpdate();\r\n }\r\n\r\n //因为Asset.tsx监听了Update的事件,然后又要去调用这个,导致重复监听,所以分离出这个函数\r\n async PhysicalMaterialUpdate()\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?.Object && !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?.Object && !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?.Object && !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 get HardwareAttributeInfo()\r\n {\r\n return this._hardwareAttributeInfo;\r\n }\r\n set HardwareAttributeInfo(info)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._hardwareAttributeInfo = JSON.parse(JSON.stringify(info));\r\n }\r\n get IsMaterialLock()\r\n {\r\n return !this.IsErase && this._isMaterialLock;\r\n }\r\n set IsMaterialLock(v)\r\n {\r\n if (this._isMaterialLock === v) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._isMaterialLock = v;\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 if (ver > 10)\r\n {\r\n this._isMaterialLock = file.Read();\r\n }\r\n if (ver > 11)\r\n {\r\n this._hardwareAttributeInfo.name.value = file.Read();\r\n this._hardwareAttributeInfo.name.checked = file.Read();\r\n this._hardwareAttributeInfo.roomName.value = file.Read();\r\n this._hardwareAttributeInfo.roomName.checked = file.Read();\r\n this._hardwareAttributeInfo.cabinetName.value = file.Read();\r\n this._hardwareAttributeInfo.cabinetName.checked = file.Read();\r\n this._hardwareAttributeInfo.factory.value = file.Read();\r\n this._hardwareAttributeInfo.factory.checked = file.Read();\r\n this._hardwareAttributeInfo.comments.value = file.Read();\r\n this._hardwareAttributeInfo.comments.checked = file.Read();\r\n this._hardwareAttributeInfo.actualExpr.value = file.Read();\r\n this._hardwareAttributeInfo.actualExpr.checked = file.Read();\r\n this._hardwareAttributeInfo.brand.value = file.Read();\r\n this._hardwareAttributeInfo.brand.checked = file.Read();\r\n this._hardwareAttributeInfo.model.value = file.Read();\r\n this._hardwareAttributeInfo.model.checked = file.Read();\r\n this._hardwareAttributeInfo.spec.value = file.Read();\r\n this._hardwareAttributeInfo.spec.checked = file.Read();\r\n this._hardwareAttributeInfo.count.value = file.Read();\r\n this._hardwareAttributeInfo.count.checked = file.Read();\r\n this._hardwareAttributeInfo.unit.value = file.Read();\r\n this._hardwareAttributeInfo.unit.checked = file.Read();\r\n\r\n let DataListCount = file.Read();\r\n for (let i = 0; i < DataListCount; i++)\r\n {\r\n let d: [string, string] = [\r\n file.Read(),\r\n file.Read()\r\n ];\r\n (this._hardwareAttributeInfo.DataList.value as [string, string][])[i] = d;\r\n }\r\n this._hardwareAttributeInfo.DataList.checked = file.Read();\r\n\r\n this._hardwareAttributeInfo.type.value = file.Read();\r\n this._hardwareAttributeInfo.type.checked = file.Read();\r\n this._hardwareAttributeInfo.goods.goodsSn = file.Read();\r\n this._hardwareAttributeInfo.goods.goodsId = file.Read();\r\n this._hardwareAttributeInfo.goods.checked = 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(12);\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 //ver11\r\n file.Write(this.IsMaterialLock);\r\n\r\n // ver12\r\n file.Write(this._hardwareAttributeInfo.name.value);\r\n file.Write(this._hardwareAttributeInfo.name.checked);\r\n file.Write(this._hardwareAttributeInfo.roomName.value);\r\n file.Write(this._hardwareAttributeInfo.roomName.checked);\r\n file.Write(this._hardwareAttributeInfo.cabinetName.value);\r\n file.Write(this._hardwareAttributeInfo.cabinetName.checked);\r\n file.Write(this._hardwareAttributeInfo.factory.value);\r\n file.Write(this._hardwareAttributeInfo.factory.checked);\r\n file.Write(this._hardwareAttributeInfo.comments.value);\r\n file.Write(this._hardwareAttributeInfo.comments.checked);\r\n file.Write(this._hardwareAttributeInfo.actualExpr.value);\r\n file.Write(this._hardwareAttributeInfo.actualExpr.checked);\r\n file.Write(this._hardwareAttributeInfo.brand.value);\r\n file.Write(this._hardwareAttributeInfo.brand.checked);\r\n file.Write(this._hardwareAttributeInfo.model.value);\r\n file.Write(this._hardwareAttributeInfo.model.checked);\r\n file.Write(this._hardwareAttributeInfo.spec.value);\r\n file.Write(this._hardwareAttributeInfo.spec.checked);\r\n file.Write(this._hardwareAttributeInfo.count.value);\r\n file.Write(this._hardwareAttributeInfo.count.checked);\r\n file.Write(this._hardwareAttributeInfo.unit.value);\r\n file.Write(this._hardwareAttributeInfo.unit.checked);\r\n\r\n const filteredDataList = (this._hardwareAttributeInfo.DataList.value as [string, string][]).filter(item => item[0] || item[1]);// 过滤掉值为空的项\r\n file.Write(filteredDataList.length);\r\n for (let i = 0; i < filteredDataList.length; i++)\r\n {\r\n file.Write(this._hardwareAttributeInfo.DataList.value[i][0]);\r\n file.Write(this._hardwareAttributeInfo.DataList.value[i][1]);\r\n }\r\n file.Write(this._hardwareAttributeInfo.DataList.checked);\r\n\r\n file.Write(this._hardwareAttributeInfo.type.value);\r\n file.Write(this._hardwareAttributeInfo.type.checked);\r\n file.Write(this._hardwareAttributeInfo.goods.goodsSn);\r\n file.Write(this._hardwareAttributeInfo.goods.goodsId);\r\n file.Write(this._hardwareAttributeInfo.goods.checked);\r\n }\r\n //#endregion\r\n}\r\n","import { Frustum, 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 { ByLayerColorIndex } from '../../Common/LayerConstant';\r\nimport { MatrixPlanarizere, matrixIsCoplane, tempMatrix1 } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { GetBox, IdentityMtx4, UpdateBoundingSphere, equaln, equalv3 } 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 { LayerTableRecord } from '../LayerTableRecord';\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 ParentEntity: Entity; //当这个实体是内嵌实体时,提供了一个访问它父亲的链接\r\n IsEmbedEntity = false;//当这个值为true时,这个实体是复合实体的内嵌实体\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 protected HasBigHoleFaceRenderType = false;//拥有大孔面绘制模式\r\n\r\n protected _CacheDrawObject = new Map();\r\n //材质id\r\n protected _MaterialId: ObjectId;\r\n protected _Color: number = HostApplicationServices.CurrentColorindex;\r\n protected _Layer: ObjectId;\r\n\r\n //自身坐标系\r\n protected _Matrix = new Matrix4();\r\n\r\n constructor()\r\n {\r\n super();\r\n if (this._drawObject)\r\n throw \"未知错误 实体内部已经有对象\";\r\n\r\n this._drawObject = undefined;\r\n }\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 protected _VisibleInRender = true;//在渲染器中显示\r\n protected _Freeze = false;//冻结(无法被选中)\r\n\r\n get Freeze() { return this._Freeze; }\r\n set Freeze(f: boolean)\r\n {\r\n if (f === this._Freeze) return;\r\n this.WriteAllObjectRecord();\r\n this._Freeze = f;\r\n this.Update(UpdateDraw.Material);\r\n }\r\n\r\n get VisibleInRender() { return this._VisibleInRender; }\r\n set VisibleInRender(v: boolean)\r\n {\r\n if (this._VisibleInRender !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._VisibleInRender = v;\r\n }\r\n }\r\n\r\n protected _LockMaterial = false;// 锁定材质\r\n\r\n get LockMaterial() { return this._LockMaterial; }\r\n set LockMaterial(f: boolean)\r\n {\r\n if (f === this._LockMaterial) return;\r\n this.WriteAllObjectRecord();\r\n this._LockMaterial = f;\r\n }\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 (this.LockMaterial)\r\n return;\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 const _obj = this._MaterialId?.Object;\r\n if (_obj?.IsMaterialLock) return;\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 if (this._MaterialId?.IsErase)\r\n return;\r\n return this._MaterialId;\r\n }\r\n\r\n GetMaterialSlots() { }\r\n\r\n IsMtlLockAtSlot(slotIndex?: number)\r\n {\r\n if (this.LockMaterial)\r\n return true;\r\n return this.Material?.Object?.IsMaterialLock;\r\n }\r\n\r\n SetMaterialAtSlot(mtl: ObjectId, slotIndex?: number)\r\n {\r\n if (this.IsMtlLockAtSlot())\r\n return;\r\n this.WriteAllObjectRecord();\r\n this.Material = mtl;\r\n }\r\n\r\n GetMtlLockedStatus()\r\n {\r\n const locked = this.Material?.Object?.IsMaterialLock;\r\n return {\r\n allMtlLocked: locked,\r\n partMtlLocked: locked,\r\n };\r\n }\r\n\r\n /**\r\n * 获取实体的 PhysicalMaterialRecord\r\n * @param {boolean} [containErased=false] 是否包含被删除的材质\r\n * @return {*} {PhysicalMaterialRecord[]}\r\n * @memberof Entity\r\n */\r\n GetPhyMtlRecords(containErased: boolean = false): PhysicalMaterialRecord[]\r\n {\r\n if (this._MaterialId)\r\n {\r\n if (containErased || !this._MaterialId.IsErase)\r\n return [this._MaterialId.Object];\r\n }\r\n return [];\r\n }\r\n\r\n get HasLayer() { return this._Layer?.Object !== undefined; }\r\n\r\n get Layer(): ObjectId\r\n {\r\n return this._Layer?.Object ? this._Layer : HostApplicationServices.Database.LayerTable.Current ?? HostApplicationServices.Database.DefaultLayer.Id;\r\n }\r\n\r\n set Layer(id: ObjectId)\r\n {\r\n if (!id || id === this._Layer) return;\r\n this.WriteAllObjectRecord();\r\n const oldLayerIsOff = this._Layer?.Object?.IsOff;\r\n const oldLayerIsLocked = this._Layer?.Object?.IsLocked;\r\n const oldLayerColorIndex = this._Layer?.Object?.ColorIndex;\r\n this._Layer = id;\r\n // 更新隐藏\r\n if (id.Object.IsOff !== oldLayerIsOff)\r\n this.UpdateVisible();\r\n // 更新锁定\r\n if (id.Object.IsLocked !== oldLayerIsLocked)\r\n {\r\n this.Freeze = id.Object.IsLocked;\r\n for (let [type, obj] of this._CacheDrawObject)\r\n this.UpdateDrawObjectMaterial(type, obj);\r\n }\r\n // 更新颜色\r\n else if (this._Color === ByLayerColorIndex && id.Object.ColorIndex !== oldLayerColorIndex)\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n this.UpdateDrawObjectMaterial(type, obj);\r\n }\r\n }\r\n SetAllMaterialAtSlot(mtl: ObjectId)\r\n {\r\n if (this.LockMaterial)\r\n return;\r\n this.SetMaterialAtSlot(mtl);\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\r\n get ColorIndex(): number\r\n {\r\n return this._Color;\r\n }\r\n\r\n get DrawColorIndex(): number\r\n {\r\n return this._Color === ByLayerColorIndex ? this.Layer.Object.ColorIndex : this._Color;\r\n }\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 isClearDraw = this._CacheDrawObject.size === 0;\r\n let box = this.BoundingBox;\r\n this._Matrix = mtxBak;\r\n if (isClearDraw)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n obj.matrix = this._Matrix;//因为使用了备份的矩阵,导致此时这个矩形是错误的,这里还原它\r\n this.Update(UpdateDraw.Matrix);//保证盒子是正确的\r\n }\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 this;\r\n tempMatrix1.identity().setPosition(v.x, v.y, v.z);\r\n this.ApplyMatrix(tempMatrix1);\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 this.Move({ x: moveX, y: moveY, z: moveZ });\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.OCSNoClone, 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 if (Array.isArray(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 = undefined;\r\n\r\n get DrawObject()\r\n {\r\n if (this.constructor.name === \"Entity\" || this.constructor.name === \"CADObject\")\r\n throw \"出错了\";\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.PlaceFace && !this.HasPlaceFaceRenderType)\r\n renderType = RenderType.Wireframe;\r\n if (renderType === RenderType.BigHoleFace && !this.HasBigHoleFaceRenderType)\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 /** 立即更新 */\r\n DeferUpdate()\r\n {\r\n let mode = this.NeedUpdateFlag;\r\n if (mode === 0) return;\r\n if (!this._CacheDrawObject) return;\r\n\r\n /**\r\n * br1 - br2 关联切割(斜的)\r\n let temp = br1.Clone() 临时的对象来计算切割后的结果\r\n temp br2 因为求交集,所以要访问temp.csg temp.MeshGeom (drawObjectsize = 0)\r\n temp.setContour update失败\r\n */\r\n if (mode & UpdateDraw.Geometry)// && this._CacheDrawObject.size > 0 因为有时提前获取了MeshGeom 如果判断绘制的个数 会导致没有刷新\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(): Material | Material[]\r\n {\r\n const mtlId = this._MaterialId;\r\n if (!mtlId?.IsErase && mtlId?.Object)\r\n return mtlId.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 get IsVisible()\r\n {\r\n return !this._isErase && this._Visible && !this.Layer.Object.IsOff;\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 frustum?: Frustum,\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(cloneDraw = true): this\r\n {\r\n let ent = super.Clone();\r\n ent._CurRenderType = this._CurRenderType;\r\n ent.Template = undefined;\r\n if (cloneDraw)\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() as ObjectId;\r\n if (!this._MaterialId)\r\n this._MaterialId = file.database?.DefaultMaterial?.Id;\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.ReadBool();\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 if (ver > 8)\r\n this._Freeze = file.ReadBool();\r\n else\r\n this._Freeze = false;\r\n\r\n if (ver > 9)\r\n this._VisibleInRender = file.ReadBool();\r\n else\r\n this._VisibleInRender = true;\r\n\r\n if (ver > 10)\r\n this._Layer = file.ReadObjectId() as ObjectId;\r\n else\r\n this._Layer = undefined;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(11);\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.WriteBool(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 file.WriteBool(this._Freeze);\r\n file.WriteBool(this._VisibleInRender);\r\n file.WriteHardObjectId(this._Layer);\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","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 ShopName = \"shopName\",\r\n ShopProps = \"ShopProps\",\r\n\r\n AgentShopName = \"AgentShopName\",//经销商名称\r\n AgentPhone = \"AgentPhone\",//经销商电话\r\n VersionName = \"VersionName\",//版本名称\r\n RegisterTime = \"RegisterTime\",//注册时间\r\n\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 { MathUtils } from \"three\";\r\nimport { equaln } from \"../Geometry/GeUtils\";\r\nimport { clamp as CLAMP, FixedNotZero } from \"./Utils\";\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 //eval_gen_code\r\n let abs = Math.abs;\r\n let acos = Math.acos;\r\n let acosh = Math.acosh;\r\n let asin = Math.asin;\r\n let asinh = Math.asinh;\r\n let atan = Math.atan;\r\n let atanh = Math.atanh;\r\n let atan2 = Math.atan2;\r\n let ceil = Math.ceil;\r\n let cbrt = Math.cbrt;\r\n let expm1 = Math.expm1;\r\n let clz32 = Math.clz32;\r\n let cos = Math.cos;\r\n let cosh = Math.cosh;\r\n let exp = Math.exp;\r\n let floor = Math.floor;\r\n let fround = Math.fround;\r\n let hypot = Math.hypot;\r\n let imul = Math.imul;\r\n let log = Math.log;\r\n let log1p = Math.log1p;\r\n let log2 = Math.log2;\r\n let log10 = Math.log10;\r\n let max = Math.max;\r\n let min = Math.min;\r\n let pow = Math.pow;\r\n let random = Math.random;\r\n let round = Math.round;\r\n let sign = Math.sign;\r\n let sin = Math.sin;\r\n let sinh = Math.sinh;\r\n let sqrt = Math.sqrt;\r\n let tan = Math.tan;\r\n let tanh = Math.tanh;\r\n let trunc = Math.trunc;\r\n let E = Math.E;\r\n let LN10 = Math.LN10;\r\n let LN2 = Math.LN2;\r\n let LOG10E = Math.LOG10E;\r\n let LOG2E = Math.LOG2E;\r\n let PI = Math.PI;\r\n let SQRT1_2 = Math.SQRT1_2;\r\n let SQRT2 = Math.SQRT2;\r\n let clamp = CLAMP;\r\n let eq = equaln;\r\n let r2d = MathUtils.radToDeg;\r\n let d2r = MathUtils.degToRad;\r\n let R2D = MathUtils.RAD2DEG;\r\n let D2R = MathUtils.DEG2RAD;\r\n let fix = FixedNotZero;\r\n //eval_gen_code\r\n\r\n let code = \"\";\r\n //模板材质变量的value默认是\"\",会导致eval报错,params[name]为\"\"时换成0\r\n if (params)\r\n for (let name in params)\r\n code += `let ${name} = ${params[name] != \"\" ? params[name] : \"0\"};`;\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 result = result();\r\n\r\n if (typeof result === \"bigint\")\r\n result = Number(result);//防止bigint乱入\r\n return result;\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, fractionDigits: number = 0, 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 {\r\n let value = safeEval(str.slice(1, -1), params);\r\n let strValue: string;\r\n if (typeof value === \"number\")\r\n strValue = FixedNotZero(value, fractionDigits, expr);\r\n else\r\n strValue = value;\r\n\r\n expr = expr.replace(str, strValue);\r\n }\r\n return expr;\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 { StoreageKeys } from \"./StoreageKeys\";\r\nimport { safeEval } from \"./eval\";\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, expr: string = undefined)\r\n{\r\n if (typeof v === \"string\")\r\n {\r\n if (expr?.includes(\"fix\"))\r\n return v;//如果表达式中有fix,则尊重表达式的格式化,不再二次格式化\r\n\r\n v = parseFloat(v);\r\n }\r\n\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 */\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 IsFreeze(obj: Object3D)\r\n{\r\n return obj[\"freeze\"];\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\r\n/** 有触摸板 */\r\nexport const isHasTouch = () =>\r\n{\r\n return ('ontouchstart' in document.documentElement);\r\n};\r\n\r\nexport function isChinese(str: string)\r\n{\r\n const reg = new RegExp(`\\^[^\\\\u4e00-\\\\u9fa5]+$`);\r\n if (reg.test(str)) return false;\r\n return true;\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\n//范围交集 [a1,a2] 与 [b1,b2] 的交集\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, fuzz = 1e-8): compareVectorFn\r\n{\r\n let cacheKey = `${sortKey}${fuzz}`;\r\n if (comparePointCache.has(cacheKey))\r\n return comparePointCache.get(cacheKey);\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, fuzz)) 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 { 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 \"opacity\": { type: \"f\", value: 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, logBuf = false, opacity = 1): ShaderMaterialParameters\r\n{\r\n return {\r\n uniforms: {\r\n \"SurfaceColor\": { value: color },\r\n \"opacity\": { value: opacity },\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\nexport const 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 ----256\r\n [135, 206, 235, 255], //-----257\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, freeze = false): LineBasicMaterial\r\n {\r\n if (freeze) color = 257;\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, enableTransparent = false)\r\n {\r\n let key = `${color},${side},${enableTransparent ? 1 : 0}`;\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, ColorMaterial.UseLogBuf);\r\n let mtl = new ShaderMaterial(shaderParams);\r\n if (enableTransparent)\r\n {\r\n Object.defineProperty(mtl, \"transparent\", {\r\n get: () => mtl.uniforms.opacity.value !== 1\r\n });\r\n Object.defineProperty(mtl.uniforms.opacity, \"value\", {\r\n get: () => HostApplicationServices.ConceptualOpacity\r\n });\r\n }\r\n this._ConceptualMaterial.set(key, mtl);\r\n return mtl;\r\n }\r\n\r\n private static _ConceptualTransparentMaterial: Map = new Map();\r\n static GetConceptualTransparentMaterial(color: number, side: Side = FrontSide)\r\n {\r\n let key = `${color},${side}`;\r\n if (this._ConceptualTransparentMaterial.has(key))\r\n return this._ConceptualTransparentMaterial.get(key);\r\n let shaderParams = GetGoodShaderSimple(new Vector3().fromArray(this.GetColor(color).toArray()), side, ColorMaterial.UseLogBuf);\r\n let mtl = new ShaderMaterial(shaderParams);\r\n Object.defineProperty(mtl, \"transparent\", {\r\n get: () => mtl.uniforms.opacity.value !== 1\r\n });\r\n Object.defineProperty(mtl.uniforms.opacity, \"value\", {\r\n get: () => HostApplicationServices.ConceptualTransparentOpacity\r\n });\r\n this._ConceptualTransparentMaterial.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), 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), 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\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\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\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 let materialOffset = 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 let count: number;\r\n if (isIndexed)\r\n count = geometry.index.count;\r\n else if (geometry.attributes.position !== undefined)\r\n count = geometry.attributes.position.count;\r\n else\r\n return null;\r\n\r\n if (geometry.groups.length === 0)\r\n {\r\n mergedGeometry.addGroup(offset, count, materialOffset);\r\n materialOffset++;\r\n }\r\n else\r\n {\r\n let maxMaterialIndex = 0;\r\n for (let g of geometry.groups)\r\n {\r\n maxMaterialIndex = Math.max(maxMaterialIndex, g.materialIndex ?? 0);\r\n mergedGeometry.addGroup(offset + g.start, g.count, materialOffset + g.materialIndex);\r\n }\r\n\r\n materialOffset += (maxMaterialIndex + 1);\r\n }\r\n offset += count;\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 { 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","import { Matrix4, Vector3 } from 'three';\r\nimport { arrayRemoveDuplicateBySort } 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 { 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, equalv2, 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, tolerance = 1e-4): IntersectResult[]\r\n{\r\n if (!cu1.IsCoplaneTo(cu2)) return [];\r\n\r\n let c1OcsInv = cu1.OCSInv;\r\n let c1Ocs = cu1.OCSNoClone;\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, tolerance)) 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, tolerance))//防止点重复\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, tolerance);\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, tolerance = 1e-6): 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, tolerance))\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, tolerance);\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, tolerance);\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 //v1 p1->p2\r\n //v2 p3->p4\r\n\r\n //v3 p2->p4\r\n\r\n let dx1 = p1.x - p2.x;//v1\r\n let dx2 = p3.x - p4.x;//v2\r\n let dx3 = p4.x - p2.x;//v3\r\n\r\n let dy1 = p1.y - p2.y;//v1\r\n let dy2 = p3.y - p4.y;//v2\r\n let dy3 = p4.y - p2.y;//v3\r\n\r\n let det = (dx2 * dy1) - (dy2 * dx1);//v1.cross(v2) 叉积 几何意义是平行四边形的面积\r\n\r\n let v2Length = Math.sqrt(dx2 * dx2 + dy2 * dy2);\r\n\r\n if (equaln(det / v2Length, 0.0, 1e-5))//平行 1e-5是平行四边形的高\r\n {\r\n let det2 = (dx2 * dy3) - (dy2 * dx3);\r\n if (equaln(det2 / v2Length, 0.0, 1e-5))//共线 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 //暂时没有必要\r\n // let cu1EndPoint = cu1.EndPoint;\r\n // for (let i = 0; i < ptPars.length; i++)\r\n // if (equalv3(ptPars[i].pt, cu1EndPoint, tolerance))\r\n // ptPars[i].thisParam = 1;//如果通过容差测试,我们认为它在终点上\r\n\r\n ptPars = ptPars.filter(res => res.thisParam <= 1);\r\n }\r\n else if (isEnd)\r\n {\r\n //暂时没有必要\r\n // let cu1StartPoint = cu1.StartPoint;\r\n // for (let i = 0; i < ptPars.length; i++)\r\n // if (equalv3(ptPars[i].pt, cu1StartPoint, tolerance))\r\n // ptPars[i].thisParam = 0;//如果通过容差测试,我们认为它在起点上\r\n\r\n ptPars = ptPars.filter(res => res.thisParam >= 0);\r\n }\r\n }\r\n else //当曲线不延伸时,它通过了容差测验,这时我们认为曲线在线上\r\n for (let i = 0; i < ptPars.length; i++)\r\n ptPars[i].thisParam = clamp(ptPars[i].thisParam, 0, 1);\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 else //当曲线不延伸时,它通过了容差测验,这时我们认为曲线在线上\r\n for (let i = 0; i < ptPars.length; i++)\r\n ptPars[i].argParam = clamp(ptPars[i].argParam, 0, 1);\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\r\n let fn = ComparePointFnGenerate(\"xyz\", tolerance);\r\n intRes.sort((p1, p2) => fn(p1.pt, p2.pt));\r\n arrayRemoveDuplicateBySort(intRes, (p1, p2) => equalv3(p1.pt, p2.pt, tolerance));\r\n\r\n return intRes;\r\n}\r\n\r\nexport function IntersectLineAndEllipseFor2D(l: Line, el: Ellipse)\r\n{\r\n let elInv = new Matrix4().makeRotationZ(-el.Rotation).multiply(el.OCSInv);\r\n let matInv = new Matrix4().getInverse(elInv);\r\n\r\n let a = el.RadX;\r\n let b = el.RadY;\r\n let sp = l.StartPoint.applyMatrix4(elInv);\r\n let ep = l.EndPoint.applyMatrix4(elInv);\r\n\r\n if (!(equaln(sp.z, 1e-6) && equaln(ep.z, 1e-6)))\r\n {\r\n if (equalv2(sp, ep, 1e-6))//如果与之垂直\r\n {\r\n let p = sp.setZ(0).applyMatrix4(matInv);\r\n if (el.PtOnCurve(p))\r\n return [\r\n {\r\n pt: p,\r\n thisParam: l.GetParamAtPoint(p),\r\n argParam: el.GetParamAtPoint(p)\r\n }\r\n ];\r\n }\r\n //todo:求交面\r\n return [];\r\n }\r\n\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 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 { BufferGeometry, Line, Material, Object3D, Curve as TCurve, Line as TLine, 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 { CADFiler } from '../CADFiler';\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 protected _RoomName: string = \"\";\r\n protected _CabinetName: string = \"\";\r\n\r\n get RoomName() { return this._RoomName; }\r\n set RoomName(value: string)\r\n {\r\n if (value === this._RoomName) return;\r\n this.WriteAllObjectRecord();\r\n this._RoomName = value;\r\n }\r\n\r\n get CabinetName() { return this._CabinetName; }\r\n set CabinetName(value: string)\r\n {\r\n if (value === this._CabinetName) return;\r\n this.WriteAllObjectRecord();\r\n this._CabinetName = value;\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, fuzz = 1e-6): number { return; }\r\n //直接提供点在线上的参数,不管点有没有在线上\r\n GetParamAtPoint2(pt: Vector3, fuzz = 1e-6): number { return this.GetParamAtPoint(pt, fuzz); }\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 GetFirstDeriv(param: number | Vector3): Vector3 { return; }\r\n GetFirstDerivAngle(param: number | Vector3): number\r\n {\r\n let d = this.GetFirstDeriv(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-5): boolean\r\n {\r\n return equalv3(this.StartPoint, pt, fuzz) || equalv3(this.EndPoint, pt, fuzz) || this.ParamOnCurve(this.GetParamAtPoint(pt, fuzz));\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\r\n /**\r\n * 偏移曲线\r\n * @param offsetDist 左边负数 右边正数\r\n * @returns 返回偏移后的曲线 可能返回多条曲线\r\n */\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 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 (pts.length === 0)\r\n pts.push(new Vector3);\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.DrawColorIndex));\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.DrawColorIndex);\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 protected ReadRoomAndCabinetName(file: CADFiler)\r\n {\r\n this._RoomName = file.Read();\r\n this._CabinetName = file.Read();\r\n }\r\n\r\n protected WriteRoomAndCabinetName(file: CADFiler)\r\n {\r\n file.Write(this._RoomName);\r\n file.Write(this._CabinetName);\r\n }\r\n}\r\n\r\nexport const DbCurve = Curve;\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 { 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.parseConstantFromPoint(constant);\r\n }\r\n\r\n parseConstantFromPoint(constant: Vector3)\r\n {\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 { Matrix2 } from './Matrix2';\r\n\r\nexport const ROTATE_MTX2 = new Matrix2().set(0, -1, 1, 0);\r\nexport function RotateUVs(geo: THREE.Geometry)\r\n{\r\n for (let uvs of geo.faceVertexUvs)\r\n {\r\n for (let uv of uvs)\r\n {\r\n for (let v of uv)\r\n ROTATE_MTX2.applyVector(v);\r\n }\r\n }\r\n geo.uvsNeedUpdate = true;\r\n}\r\n","import { Box3, BufferGeometry, Line3, Matrix3, Matrix4, Object3D, Shape, Line as TLine, 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, MoveMatrix, equaln, equalv3, isParallelTo, updateGeometry } from '../../Geometry/GeUtils';\r\nimport { PlaneExt } from '../../Geometry/Plane';\r\nimport { ROTATE_MTX2 } from '../../Geometry/RotateUV';\r\nimport { IntersectEllipseAndLine, IntersectLineAndArc, IntersectLineAndCircle, IntersectLineAndLine, IntersectOption, IntersectPolylineAndCurve, IntersectResult, 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.DrawColorIndex));\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.GetFirstDeriv(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 GetFirstDeriv(param: number | Vector3): Vector3\r\n {\r\n return this.EndPoint.sub(this.StartPoint);\r\n }\r\n\r\n /**\r\n * 需要注意的是,平行线和共线无交点\r\n * @param curve\r\n * @param intType\r\n * @param [tolerance=1e-4]\r\n * @returns\r\n */\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-4): IntersectResult[]\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.GetFirstDeriv(0).multiplyScalar(param));\r\n }\r\n override GetParamAtPoint(pt: Vector3, fuzz = 1e-5): number\r\n {\r\n let { closestPt, param } = this.GetClosestAtPoint(pt, true);\r\n if (!equalv3(closestPt, pt, fuzz))\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.GetFirstDeriv(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.GetFirstDeriv(0).normalize(), cu.GetFirstDeriv(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 offset = this._EndPoint.clone().sub(this._StartPoint).normalize().multiplyScalar(offsetDist);\r\n ROTATE_MTX2.applyVector(offset);\r\n let newLine = this.Clone() as Line;\r\n newLine.ClearDraw();\r\n newLine._StartPoint.add(offset);\r\n newLine._EndPoint.add(offset);\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 if (ver > 1)\r\n this.ReadRoomAndCabinetName(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._StartPoint.toArray());\r\n file.Write(this._EndPoint.toArray());\r\n\r\n this.WriteRoomAndCabinetName(file);\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 StartPointInOcs(): Vector3 { return this._StartPoint.clone(); }\r\n get EndPointInOcs(): Vector3 { return this._EndPoint.clone(); }\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 { Pts2Polyline, getArcOrCirNearPts, getDeterminantFor2V, getTanPtsOnEllipse } from '../../Common/CurveUtils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { AsVector2, MoveMatrix, angle, angleTo, equaln, equalv3, rotatePoint } from '../../Geometry/GeUtils';\r\nimport { Matrix2 } from '../../Geometry/Matrix2';\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._endAngle;\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\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 Extend(newParam: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (newParam < 0)\r\n this._startAngle = this.GetAngleAtParam(newParam);\r\n else if (newParam > 1)\r\n this._endAngle = this.GetAngleAtParam(newParam);\r\n this.Update();\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 return this.PtOnEllipse(pt) && this.ParamOnCurve(this.GetParamAtPoint(pt));\r\n }\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\r\n GetPointAtParam(param: number)\r\n {\r\n let an = this.TotalAngle * param + this._startAngle;\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 let mtx = new Matrix2().setRotate(this._rotate);\r\n mtx.applyVector(pt);\r\n return pt.applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n GetParamAtPoint(pt?: Vector3)\r\n {\r\n if (!this.PtOnEllipse(pt)) return NaN;\r\n\r\n let an = this.GetCircleAngleAtPoint(pt);\r\n let allAngle = this.TotalAngle;\r\n let param = an / allAngle;\r\n if (this.IsClose)\r\n return param;\r\n else\r\n {\r\n if (an >= this._startAngle)\r\n param = (an - this._startAngle) / allAngle;\r\n else\r\n param = ((Math.PI * 2) - (this._startAngle - an)) / allAngle;\r\n\r\n //剩余的参数\r\n let remParam = Math.PI * 2 / allAngle - 1;\r\n\r\n if (param > (remParam * 0.5 + 1))//一半\r\n param = (param - 1) - remParam;//返回负数\r\n\r\n return param;\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\r\n GetParamAtDist(d: number)\r\n {\r\n return d / this.Length;\r\n }\r\n\r\n GetAngleAtParam(param: number)\r\n {\r\n return this._startAngle + param * this.TotalAngle;\r\n }\r\n\r\n GetCircleAngleAtPoint(pt: Vector3): number\r\n {\r\n pt = pt.clone().applyMatrix4(this.OCSInv);\r\n let romtx = new Matrix2().setRotate(-this._rotate);\r\n romtx.applyVector(pt);\r\n //https://www.petercollingridge.co.uk/tutorials/computational-geometry/finding-angle-around-ellipse/\r\n let an = Math.atan(this.RadX * pt.y / (this.RadY * pt.x));\r\n\r\n if (pt.x < 0) an += Math.PI;\r\n else if (an < 0) an += Math.PI * 2;\r\n return an;\r\n }\r\n\r\n GetFirstDeriv(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\r\n rotatePoint(vec, this._rotate);\r\n return vec.applyMatrix4(this.OCS.setPosition(0, 0, 0));\r\n }\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.OCSNoClone);\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 return [];\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 ];\r\n for (let p of pts)\r\n p.applyMatrix4(tmpMat4).applyMatrix4(this.OCSNoClone);\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\r\n\r\n Convert2Polyline(count = 0): Polyline\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 //忽略空多段线怎么样?\r\n if (pts.length < 2)\r\n {\r\n let pl = new Polyline;\r\n return pl;\r\n }\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\r\n if (ver > 1)\r\n this.ReadRoomAndCabinetName(file);\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 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 this.WriteRoomAndCabinetName(file);\r\n }\r\n}\r\n","import { Box3, Matrix3, Matrix4, Vector2, Vector3 } from 'three';\r\nimport { GetTanPtsOnArcOrCircle, getArcOrCirNearPts, getCircleCenter } from '../../Common/CurveUtils';\r\nimport { SetMtxVector, TransformVector, reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { AsVector3, MoveMatrix, ZeroVec, angle, clampRad, equaln, equalv2, equalv3, polar } from '../../Geometry/GeUtils';\r\nimport { Orbit } from '../../Geometry/Orbit';\r\nimport { IntersectArcAndArc, IntersectCircleAndArc, IntersectEllipseAndCircleOrArc, IntersectLineAndArc, IntersectOption, IntersectPolylineAndCurve, IntersectResult, 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 private _DisplayAccuracy = 0;\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 if (this._DisplayAccuracy !== 0)\r\n {\r\n sp.DisplayAccuracy = this._DisplayAccuracy;\r\n }\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 DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\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, fuzz = 1e-6)\r\n {\r\n if (this._Radius == 0 ||\r\n this.AllAngle == 0 ||\r\n !equaln(pt.distanceTo(this.Center), this._Radius, fuzz))\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): IntersectResult[]\r\n {\r\n if (curve instanceof Arc || curve.constructor.name === \"RoomWallArc\")\r\n {\r\n return IntersectArcAndArc(this, curve as Arc, intType, tolerance);\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 * @param {number} endAngle 结束的角度\r\n */\r\n ComputeAnlge(endAngle: number): 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 GetFirstDeriv(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.ReadBool();\r\n if (ver > 2)\r\n {\r\n this._DisplayAccuracy = file.Read();\r\n }\r\n if (ver > 3)\r\n this.ReadRoomAndCabinetName(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(4);\r\n file.Write(this._Radius);\r\n file.Write(this._StartAngle);\r\n file.Write(this._EndAngle);\r\n file.WriteBool(this._Clockwise);\r\n file.Write(this._DisplayAccuracy);\r\n\r\n //ver4\r\n this.WriteRoomAndCabinetName(file);\r\n }\r\n //#endregion\r\n}\r\n","export enum DragPointType\r\n{\r\n Grip = 0,\r\n Stretch = 1,\r\n End = 2,//捕捉端点\r\n}\r\n","import { BufferGeometry, EllipseCurve, Material, Matrix3, Matrix4, Object3D, Line as TLine, 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 { GetTanPtsOnArcOrCircle, getArcOrCirNearPts } 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 { AsVector3, MoveMatrix, ZeroVec, angle, equaln, equalv2, polar } from '../../Geometry/GeUtils';\r\nimport { Orbit } from '../../Geometry/Orbit';\r\nimport { IntersectCircleAndArc, IntersectCircleAndCircle, IntersectEllipseAndCircleOrArc, IntersectLineAndCircle, IntersectOption, IntersectPolylineAndCurve, IntersectResult, 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 private _DisplayAccuracy = 0;\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 DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\r\n }\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 if (this._DisplayAccuracy !== 0)\r\n {\r\n sp.DisplayAccuracy = this._DisplayAccuracy;\r\n }\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 override IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-5): IntersectResult[]\r\n {\r\n if (curve instanceof Arc)\r\n {\r\n return IntersectCircleAndArc(this, curve, intType, tolerance);\r\n }\r\n if (curve instanceof Line)\r\n {\r\n return SwapParam(IntersectLineAndCircle(curve, this, reverseIntersectOption(intType), tolerance));\r\n }\r\n if (curve instanceof Circle)\r\n {\r\n return IntersectCircleAndCircle(this, curve, tolerance);\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), tolerance));\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.DrawColorIndex));\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.DrawColorIndex);\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 break;\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 GetFirstDeriv(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 if (ver > 1)\r\n this.ReadRoomAndCabinetName(file);\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\r\n this.WriteRoomAndCabinetName(file);\r\n }\r\n //#endregion\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 { BUL_IS_LINE_FUZZ } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector3, equaln } from \"../GeUtils\";\r\n\r\n\r\n\r\n\r\nexport const ARC_DRAW_CONFIG = {\r\n ARC_SplitLength: 0.4,//圆的分段长度\r\n ARC_RADIUS_MIN: 2.5,//大于半径25的自动优化成36等分圆 保证绘制光滑\r\n Arc_MinSplitCount: 8,//圆的最小分段个数\r\n ARC_MaxSplitCount: 90,//圆的最大分段个数\r\n};\r\n\r\n\r\nexport function GetArcDrawCount(arc: Arc | Circle | number): number\r\n{\r\n let radius = typeof arc === \"number\" ? arc : arc.Radius;\r\n let splitCount = radius / ARC_DRAW_CONFIG.ARC_SplitLength;\r\n //保证是偶数(避免奇数和Shape2计算方式一致导致的干涉)\r\n splitCount = clamp(Math.floor(splitCount * 0.5) * 2, ARC_DRAW_CONFIG.Arc_MinSplitCount, ARC_DRAW_CONFIG.ARC_MaxSplitCount);\r\n if (radius > ARC_DRAW_CONFIG.ARC_RADIUS_MIN)\r\n splitCount = Math.max(36, splitCount);\r\n return splitCount;\r\n}\r\n\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 = GetArcDrawCount(cu);\r\n if (cu.DisplayAccuracy > 0)\r\n splitCount = cu.DisplayAccuracy;\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 (!equaln(cu.GetBulgeAt(i), 0, BUL_IS_LINE_FUZZ))// is arc\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = GetArcDrawCount(arc);\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 = GetArcDrawCount(cu);\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 (!equaln(cu.GetBulgeAt(i), 0, BUL_IS_LINE_FUZZ))// is arc\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = GetArcDrawCount(arc);\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 = GetArcDrawCount(arc);\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 { EllipseCurve, Shape, Vector2 } from \"three\";\r\nimport { GetArcDrawCount } from \"../Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams\";\r\nimport { equaln, 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 private _DisplayAccuracy: number = 0;\r\n\r\n get DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n this._DisplayAccuracy = v;\r\n }\r\n getPoints(divisions: number = 12, optimizeArc = true): Vector2[]\r\n {\r\n let points: Vector2[] = [],\r\n 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 //根据圆的半径来确定绘制个数(与SplitCurveParams一致)\r\n let splitCount = GetArcDrawCount(tempArc);\r\n if (this._DisplayAccuracy > 0)\r\n {\r\n splitCount = this._DisplayAccuracy;\r\n }\r\n resolution = Math.max(1, Math.ceil(Math.abs((tempArc.AllAngle * 0.5) / Math.PI) * splitCount * 0.5)) * 2;\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 { 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[], displayAccuracy = 0): Shape2\r\n{\r\n let shape = new Shape2();\r\n shape.DisplayAccuracy = displayAccuracy;\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 { Vec2 } from \"./CheckIntersect\";\r\n/*\r\n功能:判断线段是否存在交点\r\nref:https://www.geeksforgeeks.org/check-if-two-given-line-segments-intersect/\r\n*/\r\n\r\n// Given three colinear points p, q, r, the function checks if\r\n// point q lies on line segment 'pr'\r\nfunction onSegment(p: Vec2, q: Vec2, r: Vec2): boolean\r\n{\r\n if (q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) &&\r\n q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y))\r\n return true;\r\n return false;\r\n}\r\n// To find orientation of ordered triplet (p, q, r).\r\n// The function returns following values\r\n// 0 --> p, q and r are colinear\r\n// 1 --> Clockwise\r\n// 2 --> Counterclockwise\r\nexport function orientation(p: Vec2, q: Vec2, r: Vec2): number\r\n{\r\n // See https://www.geeksforgeeks.org/orientation-3-ordered-points/\r\n // for details of below formula.\r\n let val = (q.y - p.y) * (r.x - q.x) -\r\n (q.x - p.x) * (r.y - q.y);\r\n if (val === 0)\r\n return 0; // colinear\r\n return (val > 0) ? 1 : 2; // clock or counterclock wise\r\n}\r\n/**\r\n * 判断线段`p1q1`和线段`p2q2`是否相交.\r\n */\r\nexport function doIntersect(p1: Vec2, q1: Vec2, p2: Vec2, q2: Vec2): boolean\r\n{\r\n // Find the four orientations needed for general and\r\n // special cases\r\n let o1 = orientation(p1, q1, p2);\r\n let o2 = orientation(p1, q1, q2);\r\n let o3 = orientation(p2, q2, p1);\r\n let o4 = orientation(p2, q2, q1);\r\n // General case\r\n if (o1 !== o2 && o3 !== o4)\r\n return true;\r\n // Special Cases\r\n // p1, q1 and p2 are colinear and p2 lies on segment p1q1\r\n if (o1 === 0 && onSegment(p1, p2, q1))\r\n return true;\r\n // p1, q1 and q2 are colinear and q2 lies on segment p1q1\r\n if (o2 === 0 && onSegment(p1, q2, q1))\r\n return true;\r\n // p2, q2 and p1 are colinear and p1 lies on segment p2q2\r\n if (o3 === 0 && onSegment(p2, p1, q2))\r\n return true;\r\n // p2, q2 and q1 are colinear and q1 lies on segment p2q2\r\n if (o4 === 0 && onSegment(p2, q1, q2))\r\n return true;\r\n return false; // Doesn't fall in any of the above cases\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 { TransformVector } from '../Common/Matrix4Utils';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { AsVector2, AsVector3, ZeroVec, 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].clone().applyMatrix4(this.OCSNoClone);;\r\n }\r\n get EndPoint()\r\n {\r\n return arrayLast(this._PointList).clone().applyMatrix4(this.OCSNoClone);;\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 GetPointAtParam(param: number): Vector3\r\n {\r\n const endParam = this.EndParam;\r\n if (param < 0)\r\n {\r\n const p1 = this.StartPoint;\r\n const derv = this.GetFirstDeriv(0.1);\r\n return p1.add(derv.multiplyScalar(param / endParam * this.Length));\r\n }\r\n if (param > endParam)\r\n {\r\n const p2 = this.EndPoint;\r\n const derv = this.GetFirstDeriv(endParam);\r\n return p2.add(derv.multiplyScalar((param - endParam) / endParam * this.Length));\r\n }\r\n return this.Shape.getPoint(param / endParam).applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n GetFirstDeriv(param: number | Vector3): Vector3\r\n {\r\n if (param instanceof Vector3)\r\n param = this.GetParamAtPoint(param);\r\n return this.GetPointAtParam(param).sub(this.GetPointAtParam(param - 0.1)).normalize();\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 = TransformVector(vec.clone(), this.OCSInv).setZ(0);\r\n if (equalv3(vec, ZeroVec)) return;\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 = TransformVector(vec.clone(), this.OCSInv).setZ(0);\r\n if (equalv3(vec, ZeroVec)) return;\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 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 if (ver > 2)\r\n this.ReadRoomAndCabinetName(file);\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);//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 this.WriteRoomAndCabinetName(file);\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, fuzz);\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, fuzz: number)\r\n {\r\n return c1.IntersectWith2(c2, intType, fuzz);\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 w.curve.TempData = 2;\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 return true;\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 { Matrix4, Vector3 } from \"three\";\r\nimport { arrayPushArray } from \"../Common/ArrayExt\";\r\nimport { ComputerCurvesNormalOCS } from \"../Common/CurveUtils\";\r\nimport { TransformVector } from \"../Common/Matrix4Utils\";\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 { 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 { AsVector2, equalv3, ZAxisN } from \"./GeUtils\";\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, Math.ceil(-Math.log10(fuzz)));\r\n\r\n for (let rs of parse.RegionsOutline)\r\n {\r\n const polyline = new Polyline;\r\n polyline.CloseMark = true;\r\n\r\n //获取曲线所在平面矩阵\r\n const OCS = ComputerCurvesNormalOCS(rs.map(r => r.curve));\r\n const OCSInv = new Matrix4().getInverse(OCS);\r\n\r\n for (let r of rs)\r\n {\r\n let bul = 0;\r\n if (r.curve instanceof Arc)\r\n {\r\n bul = r.curve.Bul;\r\n if (equalv3(TransformVector(r.curve.Normal, OCSInv), ZAxisN, 1e-3))\r\n bul *= -1;\r\n if (r.isReverse)\r\n bul *= -1;\r\n }\r\n polyline.LineData.push({\r\n pt: AsVector2(r.s.applyMatrix4(OCSInv)),\r\n bul\r\n });\r\n }\r\n polyline.ApplyMatrix(OCS);\r\n\r\n let contour = Contour.CreateContour(polyline, 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 { Box2, 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(bigCurve: Polyline | Circle | Ellipse, smallCurve: Curve)\r\n{\r\n //#fix fileid 2087494 使用二维的box来计算看起来没有问题\r\n if (!Box2.prototype.containsBox.apply(bigCurve.BoundingBox.expandByVector(fuzzV3), [smallCurve.BoundingBox]))\r\n return false;\r\n\r\n let cus: Curve[] = [];\r\n if (smallCurve instanceof Polyline)\r\n cus = smallCurve.Explode();\r\n else\r\n cus = [smallCurve];\r\n\r\n return cus.every(c =>\r\n {\r\n let pts = getIntPtContextPts(bigCurve, c);\r\n if (pts.length <= 1)\r\n pts.push(c.StartPoint, c.EndPoint);\r\n return IsPtsAllInOrOnReg(bigCurve, 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, IntersectResult } 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 = CurveContainerCurve(sourceOutline, targetOutline, interPts);\r\n targetContainerSource = false;\r\n }\r\n else\r\n {\r\n sourceContainerTarget = false;\r\n targetContainerSource = CurveContainerCurve(targetOutline, sourceOutline, interPts);\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, COMBINE_FUZZ);\r\n if (hasEqualCus)\r\n {\r\n //方向相同\r\n if (\r\n equalv3(cu.GetFirstDeriv(cu.MidParam).normalize(), pl.GetFirstDeriv(pl.MidParam).normalize(), 1e-2)\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 let areaState = sourceOutline.Area > targetOutline.Area;\r\n //反包含\r\n if ((!areaState && fastCurveInCurve2(targetOutline, sourceOutline, interPts[0]?.pt)) || equalCurve(targetOutline, sourceOutline))\r\n return [];\r\n //包含\r\n if ((areaState && fastCurveInCurve2(sourceOutline, targetOutline, interPts[0]?.pt)))\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.GetFirstDeriv(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.GetFirstDeriv(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\r\n /**\r\n * 计算轮廓被差集之后的结果\r\n * @param targets 切去的轮廓\r\n * @returns {holes: Polyline[] 网洞曲线列表, subtractList: Polyline[] 轮廓曲线列表}\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 curveIntParamsMap = 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 let areaState = sourceOutline.Area > targetOutline.Area;\r\n //反包含\r\n if ((!areaState && fastCurveInCurve2(targetOutline, sourceOutline, pts[0]?.pt)) || equalCurve(targetOutline, sourceOutline))\r\n return { holes, subtractList };\r\n //包含\r\n if (areaState && fastCurveInCurve2(sourceOutline, targetOutline, pts[0]?.pt))\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 curveIntParamsMap.set(targetOutline, pts.map(r => r.argParam));\r\n }\r\n }\r\n\r\n let sourceSplitCurves = sourceOutline.GetSplitCurves(intPars) as Polyline[];\r\n let targetSplitCurves: Polyline[] = [];\r\n\r\n let targetSplitCurve_CurvesMap = new WeakMap();//分裂后->原始曲线 映射\r\n\r\n for (let [curve, intParams] of curveIntParamsMap)\r\n {\r\n\r\n let splitCurves = curve.GetSplitCurves(intParams) as Polyline[];\r\n for (let splitCurve of splitCurves)\r\n {\r\n targetSplitCurve_CurvesMap.set(splitCurve, curve);\r\n targetSplitCurves.push(splitCurve);\r\n }\r\n }\r\n\r\n for (let sourceSplitcu of sourceSplitCurves)\r\n {\r\n let index = targetSplitCurves.findIndex(cu => fastEqualCurve(cu, sourceSplitcu, 0.05));\r\n if (index !== -1)\r\n {\r\n let targetSplitcu = targetSplitCurves[index];\r\n let isEqualNormal = equalv3(sourceOutline.Normal, targetSplitCurve_CurvesMap.get(targetSplitcu).Normal, 1e-3);\r\n\r\n if (isEqualNormal === !equalv3(sourceSplitcu.StartPoint, targetSplitcu.StartPoint, 0.05))//不同向\r\n {\r\n subtractList.push(sourceSplitcu);\r\n // TestDraw(sourceSplitcu.Clone(), 1);\r\n // TestDraw(targetSplitcu.Clone(), 1);\r\n }\r\n // else\r\n // TestDraw(sourceSplitcu.Clone(), 2);\r\n\r\n targetSplitCurves.splice(index, 1);\r\n\r\n continue;\r\n }\r\n\r\n if (targets.every(t => !fastCurveInCurve(t.Curve as Polyline, sourceSplitcu)))\r\n subtractList.push(sourceSplitcu);\r\n }\r\n\r\n //源对象没有被破坏\r\n let sourceNotBreak = subtractList.length === sourceSplitCurves.length;\r\n\r\n for (let pl of targetSplitCurves)\r\n if (fastCurveInCurve(sourceOutline, pl))\r\n subtractList.push(pl);\r\n\r\n if (sourceNotBreak && subtractList.length === sourceSplitCurves.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[], -Math.log10(COMBINE_FUZZ));\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, -Math.log10(tolerance)) : [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\r\n /**\r\n * 判断是否完全包含曲线\r\n * @param smallCurve 传入的这个曲线不能比本轮廓还大(这个需要自己优化?)\r\n * @returns\r\n */\r\n ContainerCurve(smallCurve: Polyline | Circle | Curve, isAreaCheckd = false, ipts: IntersectResult[] = undefined): boolean\r\n {\r\n if (!isAreaCheckd && this.Area < smallCurve.Area)\r\n return false;\r\n return CurveContainerCurve(this._Curve, smallCurve, ipts);\r\n }\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 = 5e-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 * 对于双多段线互相切割后的结果(或者交点个数为0),快速判断曲线是否在另一条曲线内部\r\n * @param bigCurve\r\n * @param smallCurve\r\n * @returns\r\n */\r\nfunction fastCurveInCurve(bigCurve: Polyline | Circle, smallCurve: Curve): boolean\r\n{\r\n return bigCurve.PtInCurve(smallCurve.Midpoint);\r\n}\r\n\r\n//当交点小于等于1时\r\nexport function fastCurveInCurve2(bigCurve: Polyline | Circle, smallCurve: Curve, iPt?: Vector3)\r\n{\r\n if (iPt)//提高准确性,避免使用交点去判断 导致的错误\r\n {\r\n let sp = smallCurve.StartPoint;;\r\n if (equalv3(sp, iPt, 1e-3))\r\n return bigCurve.PtInCurve(smallCurve.Midpoint);\r\n else\r\n return bigCurve.PtInCurve(smallCurve.StartPoint);\r\n }\r\n else\r\n return bigCurve.PtInCurve(smallCurve.Midpoint) || bigCurve.PtInCurve(smallCurve.StartPoint);\r\n}\r\n\r\n//大曲线是否完全包含小曲线(或者重合)\r\nexport function CurveContainerCurve(bigCurve: Polyline | Circle, smallCurve: Polyline | Circle | Curve, ipts: IntersectResult[] = undefined, fuzz = COMBINE_FUZZ)\r\n{\r\n if (!ipts)\r\n ipts = bigCurve.IntersectWith2(smallCurve, IntersectOption.ExtendNone, fuzz);\r\n\r\n if (ipts.length === 0)\r\n return fastCurveInCurve(bigCurve, smallCurve);\r\n else if (ipts.length === 1)\r\n return fastCurveInCurve2(bigCurve, smallCurve, ipts[0].pt);\r\n else\r\n return isTargetCurInOrOnSourceCur(bigCurve, smallCurve);\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort } 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 { AsVector2, IdentityMtx4, SelectNearP, angle, equaln, equalv2, equalv3, midPoint } 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 /**偏移距离(仅在局部偏移时提供) */\r\n dist?: number;\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.IntersectWith2(contour.Curve, IntersectOption.ExtendNone)\r\n .map(p => p.thisParam);\r\n\r\n //#region 交点参数优化,避免出现无意义长度的曲线被移除 CurveIsFine\r\n let length = this.curve.Length;\r\n if (!(this.curve instanceof Circle))\r\n iParams.push(0, 1);\r\n iParams.sort((e1, e2) => e1 - e2);\r\n if (this.curve instanceof Arc || this.curve instanceof Circle)\r\n {\r\n let allAngle = this.curve instanceof Circle ? Math.PI * 2 : this.curve.AllAngle;\r\n arrayRemoveDuplicateBySort(iParams, (p1, p2) =>\r\n {\r\n return allAngle * (p2 - p1) < ARC_MIN_ALLANGLE || length * (p2 - p1) < CURVE_MIN_LENGTH;\r\n });\r\n }\r\n else\r\n {\r\n arrayRemoveDuplicateBySort(iParams, (p1, p2) =>\r\n {\r\n return length * (p2 - p1) < CURVE_MIN_LENGTH;\r\n });\r\n }\r\n\r\n if (!(this.curve instanceof Circle))\r\n {\r\n iParams.shift();//remove 0\r\n iParams.pop(); //remove 1 or 0.9999\r\n }\r\n //#endregion\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 enum PolylineJoinType\r\n{\r\n Square = 0,\r\n Round = 1,\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 _IsTopoOffset = false;//局部偏移,允许特殊延伸,参考测试用例\r\n _AllowConverToCircle = true;\r\n\r\n /**\r\n *\r\n * @param _Polyline\r\n * @param _OffsetDist\r\n * @param [_ToolPath=false] 走刀模式(在这个模式下,我们会进行圆弧过渡(或者直线过渡)避免尖角过大)\r\n * @param [_OffsetDistSq=(_OffsetDist ** 2) * 2.1] 允许的最大尖角长度 默认值差不多是矩形的尖角大一点\r\n * @param [_JoinType=PolylineJoinType.Round] 尖角的处理方式,默认是圆弧过渡,可以切换成直线过渡\r\n */\r\n constructor(public _Polyline: Polyline, public _OffsetDist: number, public _ToolPath = false,\r\n private _OffsetDistSq = (_OffsetDist ** 2) * 2.1,//对直角走刀不进行圆弧过度\r\n private _JoinType = PolylineJoinType.Round //仅在走刀路径时生效\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\r\n // for (let c of this._SubOffsetedCurves)\r\n // {\r\n // TestDraw(c.curve.Clone(), 1);\r\n // if (c.paddingCurve)\r\n // for (let cc of c.paddingCurve)\r\n // TestDraw(cc.Clone(), 2);\r\n // }\r\n // for (let c of this._TrimPolylineContours)\r\n // {\r\n // TestDraw(c.Curve.Clone(), 3);\r\n // }\r\n\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);//TODO: 简化这个 并且生成圆 顶点 圆\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 let code1 = EntityEncode(curveNow);//1:直线 2:圆弧\r\n let code2 = EntityEncode(curveNext);\r\n let code = code1 & code2;//1:纯直线 2:纯圆弧 3:直线和圆弧\r\n //直连\r\n if (equalv3(sp, ep, 1e-3))\r\n {\r\n //参考测试用例`裁剪失败,需要连接`,在极端的情况下,如果没有连接这两条线,会导致裁剪缝隙,导致偏移错误\r\n if (!equalv2(sp, ep, 1e-6))\r\n {\r\n if (code1 === 1)//线1是直线\r\n curveNow.EndPoint = ep;\r\n else if (code2 === 1)//线2是直线\r\n curveNext.StartPoint = sp;\r\n else//都是圆弧\r\n {\r\n let mp = midPoint(sp, ep);\r\n curveNow.EndPoint = mp;\r\n curveNext.StartPoint = mp;\r\n }\r\n }\r\n continue;\r\n }\r\n\r\n let iPtsP = curveNow.IntersectWith2(curveNext, IntersectOption.ExtendBoth, 1e-6);\r\n let iPts = iPtsP.map(p => p.pt);\r\n let tPts = iPtsP.filter(p => curveNow.ParamOnCurve(p.thisParam) && curveNext.ParamOnCurve(p.argParam)).map(p => p.pt);\r\n\r\n\r\n let tp: Vector3;\r\n if (code === 1)\r\n {\r\n if (this._IsTopoOffset && tPts.length === 0 && curveResNow.dist !== curveResNext.dist)\r\n tPts = iPts;\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 && iPtsP[0].thisParam > 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 if (this._JoinType === PolylineJoinType.Round)\r\n curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)];\r\n else\r\n curveResNow.paddingCurve = [this.CreateSquare(refP, curveResNow, curveResNext, code)];//补直线\r\n\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\r\n //在局部偏移中,当偏移距离不一致时,我们总是倾向于直接连接\r\n if (this._IsTopoOffset && tPts.length === 0 && curveResNow.dist !== curveResNext.dist)\r\n {\r\n if (iPts.length)\r\n tPts = iPts;\r\n else\r\n {\r\n curveResNow.paddingCurve = [new Line(sp, ep)];//补直线\r\n continue;\r\n }\r\n }\r\n\r\n if (tPts.length > 0) //ipts = 1 or ipts = 2\r\n tp = SelectNearP(tPts, refP);\r\n else //补圆弧 或者尝试连接\r\n {\r\n if (iPts.length > 0 && !this._ToolPath && this.IsSharpCorner(curveResNow, curveResNext))//非加工刀路 并且尖角化(谷)时\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 = [this.CreateArc(refP, sp, ep)];//补圆弧\r\n }\r\n else\r\n {\r\n if (this._JoinType === PolylineJoinType.Round)\r\n curveResNow.paddingCurve = [this.CreateArc(refP, sp, ep)];//补圆弧\r\n else\r\n {\r\n curveResNow.paddingCurve = [this.CreateSquare(refP, curveResNow, curveResNext, code)];//补直线\r\n }\r\n }\r\n\r\n let circle = this._Circles[curveResNext.index];\r\n if (circle) this._TrimCircleContours.push(circle);//因为局部偏移可能未提供圆\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 circle = this._Circles[s];\r\n if (circle)//因为局部偏移可能未提供圆\r\n {\r\n this._TrimCircleContours.push(circle);\r\n padCirs.push(circle);\r\n }\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 * 在\r\n * 1.直线和圆弧,圆弧和圆弧\r\n * 2.有交点,无真交点时\r\n * 必须在正确的方向做出延伸动作,所以必须在尖角的情况下延伸,偏移的结果就像一个谷字去掉一个口的结果,上面的人就是偏移后的结果.\r\n * 如果是谷,则允许连接 #I7WKKG\r\n */\r\n private IsSharpCorner(curveResNow: IOffsetResult, curveResNext: IOffsetResult): boolean\r\n {\r\n let v1 = this._SubCurves[curveResNow.index].GetFirstDeriv(1);\r\n let v2 = this._SubCurves[curveResNext.index].GetFirstDeriv(0);\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 //起点和终点裁剪掉圆\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 //最后一段曲线裁剪掉圆\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 && this._AllowConverToCircle)\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, isJoinEnd = true): 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 minDist = 0;\r\n break;\r\n }\r\n }\r\n\r\n if (minR && Math.sqrt(minDist) < 0.085)\r\n {\r\n used.add(minR.curve);\r\n preP = minR.e;\r\n\r\n // let status = pl.Join(minR.curve, false, 8e-2);\r\n // if (status !== Status.True)\r\n // console.warn(\"连接失败\");\r\n\r\n //#region fast join (为了避免Polyline.Join 导致的顺序错误)\r\n let cu = minR.curve;\r\n\r\n //bul\r\n let bul = 0;\r\n if (cu instanceof Arc)\r\n {\r\n bul = cu.Bul;\r\n if (minR.isReverse)\r\n bul *= -1;\r\n\r\n if (!isJoinEnd)\r\n bul *= -1;\r\n }\r\n\r\n if (pl.LineData.length === 0)\r\n {\r\n pl.LineData.push({\r\n pt: AsVector2(minR.s),\r\n bul: bul\r\n });\r\n }\r\n\r\n if (isJoinEnd)\r\n {\r\n pl.LineData[pl.LineData.length - 1].bul = bul;\r\n pl.LineData.push({\r\n pt: AsVector2(minR.e),\r\n bul: 0\r\n });\r\n }\r\n else\r\n {\r\n pl.LineData.unshift({\r\n pt: AsVector2(minR.e),\r\n bul\r\n });\r\n }\r\n //#endregion\r\n\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, true);\r\n ss = s;\r\n preP = pl.StartPoint;\r\n while (ss && !pl.IsClose)\r\n ss = searchNext(ss, pl, false);\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 /**\r\n * 点在线上 或者在线内(外)\r\n * @param pt\r\n * @returns 0在线上 1 -1\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-4)) 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.GetFirstDeriv(0).normalize(), preCurve.GetFirstDeriv(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.GetFirstDeriv(1).normalize(), nextCurve.GetFirstDeriv(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.GetFirstDeriv(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 protected CreateSquare(center: Vector3, curveNow: IOffsetResult, curveNext: IOffsetResult, entTypeCode: number)\r\n {\r\n const arc = this.CreateArc(center, curveNow.curve.EndPoint, curveNext.curve.StartPoint);\r\n const centerPoint = arc.GetPointAtParam(0.5);\r\n const tangentLine = new Line(centerPoint, arc.GetFirstDeriv(0.5).add(centerPoint)); //切线\r\n\r\n let ep: Vector3, sp: Vector3;\r\n if (entTypeCode === 1)\r\n {\r\n ep = tangentLine.IntersectWith(curveNow.curve, IntersectOption.ExtendBoth)[0]; //第一条线新的终点坐标\r\n sp = centerPoint.multiplyScalar(2).sub(ep);\r\n }\r\n else// if (entTypeCode === 0)//全圆弧 直线和圆弧\r\n {\r\n ep = SelectNearP(tangentLine.IntersectWith(curveNow.curve, IntersectOption.ExtendBoth), center); //第一条线新的终点坐标\r\n sp = SelectNearP(tangentLine.IntersectWith(curveNext.curve, IntersectOption.ExtendBoth), center);\r\n }\r\n\r\n curveNow.ep = ep;\r\n curveNext.sp = sp;\r\n\r\n return new Line(ep, sp);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * @param c\r\n * @returns 1:line 2:arc\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\n\r\n/**\r\n * @returns 1:全line 2:全arc 3:line and arc\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\r\nconst CURVE_MIN_LENGTH = 5e-5;\r\nconst ARC_MIN_ALLANGLE = 2e-6;\r\n//表示这个是一个正常的曲线,不是0长度的线,也不是0长度的圆弧\r\nexport function CurveIsFine(curve: Curve)\r\n{\r\n if (curve instanceof Arc && curve.AllAngle < ARC_MIN_ALLANGLE) return false;\r\n return curve.Length > CURVE_MIN_LENGTH;\r\n}\r\n","import { Vec2, Vector3 } from 'three';\r\nimport { angle, equaln, equalv2 } from '../Geometry/GeUtils';\r\nimport { IntersectOption } from '../GraphicsSystem/IntersectWith';\r\nimport { Arc } from './Entity/Arc';\r\nimport { Line } from './Entity/Line';\r\nimport { BUL_IS_LINE_FUZZ, 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 * 判断点在多段线内外(如果点在线上 则返回false)\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, BUL_IS_LINE_FUZZ))//直线\r\n {\r\n let sp = pl.GetPointAtParam(i);\r\n let ep = pl.GetPointAtParam(i + 1);\r\n\r\n if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5))//在起点或者终点\r\n return false;\r\n\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 {\r\n if (equaln(pt.x, ep.x, 1e-5)\r\n && (pt.y > Math.min(sp.y, ep.y) - 1e-5 && pt.y < Math.max(sp.y, ep.y) + 1e-5))\r\n return false;//点在线上\r\n continue;\r\n }\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 let iptY = (pt.x - sp.x) * k + sp.y;\r\n if (equaln(iptY, pt.y, 1e-5))//点在线上 返回false\r\n return false;\r\n if (iptY > 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 if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5))//在起点或者终点\r\n return false;\r\n\r\n let center = arc.Center;\r\n //如果相切\r\n if (equaln(Math.abs(pt.x - center.x), arc.Radius))\r\n {\r\n //点在线上\r\n if (equaln(pt.y, center.y) && arc.ParamOnCurve(arc.GetParamAtPoint2(pt)))\r\n return false;\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.GetFirstDeriv(0).normalize();\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.GetFirstDeriv(1).normalize();\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 (equalv2(pti, pt, 1e-5))//点在线上 返回false\r\n return false;\r\n\r\n //交点在点下 交点在起点? 交点在终点?\r\n if (pti.y + 1e-5 < pt.y || equalv2(sp, pti, 1e-5) || equalv2(ep, pti, 1e-5))\r\n continue;\r\n\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: number;\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, 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, MatrixIsIdentityCS, equaln, equalv2, equalv3 } from '../../Geometry/GeUtils';\r\nimport { IntersectOption, IntersectPolylineAndCurve } from '../../GraphicsSystem/IntersectWith';\r\nimport { OffsetPolyline, PolylineJoinType } from '../../GraphicsSystem/OffsetPolyline';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { IsPointInPolyLine } from '../PointInPolyline';\r\nimport { Shape2 } from '../Shape2';\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\nexport const BUL_IS_LINE_FUZZ = 1e-5;\r\n\r\n@Factory\r\nexport class Polyline extends Curve\r\n{\r\n private _DisplayAccuracy = 0;\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\r\n get DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\r\n }\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 /**\r\n * 删除重复点\r\n * @param [fuzz=0.1] 容差=0.1\r\n */\r\n RemoveRepeatPos(fuzz = 0.1)\r\n {\r\n let index = 0;\r\n let pre = 0;\r\n let writed = false;\r\n for (let next = 1; next <= this._LineData.length; next++)\r\n {\r\n if ((!this._ClosedMark && next === this._LineData.length) ||//如果曲线没闭合 则总是保留最后一个点\r\n !equalv2(this._LineData[pre].pt, this._LineData[FixIndex(next, this._LineData)].pt, fuzz))\r\n {\r\n if (!writed)\r\n {\r\n this.WriteAllObjectRecord();\r\n writed = true;\r\n }\r\n\r\n this._LineData[index] = this._LineData[pre];\r\n index++;\r\n }\r\n pre++;\r\n }\r\n\r\n if (equalv2(this._LineData[0].pt, this._LineData[index - 1].pt, fuzz))\r\n this._LineData[index - 1].pt.copy(this._LineData[0].pt);\r\n\r\n this._LineData.length = index;\r\n this.Update();\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, fuzz = 1e-5): 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, fuzz);\r\n if (cu.ParamOnCurve(param, fuzz))\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, fuzz);\r\n if (!isNaN(startParam) && startParam < 0)\r\n seParams.push(startParam);\r\n //点在最后一条线上的参数\r\n let endParam = cus[cus.length - 1].GetParamAtPoint(pt, fuzz);\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: (Line | Arc)[] = [];\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let cu = this.GetCurveAtIndex(i);\r\n let len = cu.Length;\r\n if (len < 1e-6) continue;\r\n\r\n cus.push(cu);\r\n\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\r\n dist -= len;\r\n }\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 * @param pt 需要保证传入的点路径上\r\n * @returns\r\n */\r\n GetDistAtPoint2(pt: Vector3): number\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n if (param < 0)\r\n {\r\n let c1 = this.GetCurveAtIndex(0);\r\n return c1.Length * param;\r\n }\r\n else if (param > this.EndParam)\r\n {\r\n let ce = this.GetCurveAtIndex(this.EndParam - 1);\r\n return this.Length + ce.Length * (param - this.EndParam);\r\n }\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 GetFirstDeriv(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.GetFirstDeriv(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 + Math.abs(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 /**\r\n * 将多段线的OCS清除(请保证这个实体是在WCSZ0坐标系下,否则结果不正确!)\r\n */\r\n MatrixIdentity()\r\n {\r\n this.WriteAllObjectRecord();\r\n const { pts: pathPts, buls } = this.MatrixAlignTo2(new Matrix4);\r\n this.OCSNoClone.identity();\r\n for (let i = 0; i < this.LineData.length; i++)\r\n {\r\n this.LineData[i].pt.copy(pathPts[i]);\r\n this.LineData[i].bul = buls[i];\r\n }\r\n }\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 let x = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 0);\r\n let y = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 1);\r\n let cuZ = x.cross(y);\r\n\r\n let dir = equalv3(this.Normal, cuZ, 1e-4) ? 1 : -1;\r\n let bul = cu.Bul * dir;\r\n\r\n this._LineData.push({ pt: cuSp2, bul: 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 (epspDisSq < minDis)\r\n {\r\n linkType = LinkType.EpSp;\r\n minDis = epspDisSq;\r\n }\r\n\r\n if (epepDisSq < minDis)\r\n {\r\n linkType = LinkType.EpEp;\r\n minDis = epepDisSq;\r\n }\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 (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 x = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 0);\r\n let y = new Vector3().setFromMatrixColumn(cu.OCSNoClone, 1);\r\n let cuZ = x.cross(y);\r\n\r\n let dir = equalv3(this.Normal, cuZ, 1e-4) ? 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 {\r\n let status = pl.Join(cu, false, 0.1);\r\n // if (status === Status.False)\r\n // console.log();\r\n }\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 /**首尾相连的曲线直接连接 */\r\n static FastCombine(curves: Curve[], tolerance = 1e-5, computOCS = true): Polyline | undefined\r\n {\r\n if (!curves || curves.length === 0) return;\r\n\r\n let pl = new Polyline;\r\n if (computOCS)\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 override PtOnCurve(pt: 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.PtOnCurve(pt, fuzz))\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, joinType: PolylineJoinType = PolylineJoinType.Round): Polyline[]\r\n {\r\n if (equaln(offsetDist, 0)) return [];\r\n let polyOffestUtil = new OffsetPolyline(this, offsetDist, true, offsetDistSq, joinType);\r\n return polyOffestUtil.Do();\r\n }\r\n /**\r\n * 分解\r\n */\r\n Explode(): (Line | Arc)[]\r\n {\r\n let exportCus: (Line | Arc)[] = [];\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): Line | Arc\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: Line | Arc;\r\n if (equaln(d1.bul, 0, BUL_IS_LINE_FUZZ))\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 override 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.GetFirstDeriv(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.GetFirstDeriv(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 SetPtsBuls(pts: Vector2[], buls: number[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.length = 0;\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let pt = pts[i];\r\n let bul = buls[i];\r\n\r\n this._LineData.push({ pt, bul });\r\n }\r\n this.Update();\r\n return this;\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(): Shape2\r\n {\r\n let { pts, buls } = this.PtsBuls;\r\n return CreatePolylinePath(pts, buls, this._DisplayAccuracy);\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 // if (this._LineData.length === 0)\r\n // this.Erase();\r\n\r\n if (ver > 2)\r\n this.ReadRoomAndCabinetName(file);\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._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 this.WriteRoomAndCabinetName(file);\r\n }\r\n}\r\n\r\nexport const TempPolyline = new Polyline();\r\n","import { Vector3 } from \"three\";\r\nimport { arrayLast } from \"../../Common/ArrayExt\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { ComparePointFnGenerate } from \"../../Geometry/GeUtils\";\r\nimport { RegionParse } from \"../../Geometry/RegionParse\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\n\r\n/**\r\n * 线性切割多线段\r\n * @param {Polyline} meatPl 被切割的曲线\r\n * @param {Polyline[]} knifePls 刀曲线\r\n * @param {boolean} [isSweep = false] 是否为圆弧板(被切割的曲线是否为圆弧板的轮廓)\r\n * @return {Polyline[]} 切割后的多线段\r\n */\r\nexport function SplitPolyline(meatPl: Polyline, knifePls: Polyline[], isSweep = false): Polyline[]\r\n{\r\n let allSplitPls: Polyline[] = [];\r\n let allIntersePts: Vector3[] = [];\r\n for (let pl of knifePls)\r\n {\r\n\r\n let ipts = pl.IntersectWith(meatPl, IntersectOption.ExtendThis);\r\n allIntersePts.push(...ipts);\r\n if (pl.LineData.length === 2 && ipts.length > 1) //直线切割,且有2个已经的顶点\r\n {\r\n if (ipts.length === 2)\r\n {\r\n pl.StartPoint = ipts[0];\r\n pl.EndPoint = ipts[1];\r\n }\r\n else\r\n {\r\n ipts.sort(ComparePointFnGenerate(\"xy\"));\r\n pl.StartPoint = ipts[0];\r\n pl.EndPoint = arrayLast(ipts);\r\n }\r\n }\r\n else\r\n {\r\n let iptsNotExt = ipts.filter(p => pl.PtOnCurve(p));\r\n if (iptsNotExt.length < 2 && ipts.length === 2)\r\n {\r\n let params = ipts.map(p => pl.GetParamAtPoint(p));\r\n pl.Extend(params[0]);\r\n pl.Extend(params[1]);\r\n }\r\n }\r\n\r\n let splitPls = pl.GetSplitCurvesByPts(ipts) as Polyline[];\r\n allSplitPls.push(...splitPls);\r\n }\r\n\r\n let brSplitCus = meatPl.GetSplitCurvesByPts(allIntersePts) as Polyline[];\r\n\r\n allSplitPls = allSplitPls.filter(pl =>\r\n {\r\n return meatPl.PtInCurve(pl.GetPointAtParam(pl.EndParam / 2)); //切割线必须在板内才有用\r\n });\r\n\r\n let regionParse = new RegionParse(brSplitCus.concat(allSplitPls));\r\n\r\n let cus = regionParse.RegionsInternal.map(r =>\r\n {\r\n let pl = new Polyline();\r\n for (let route of r)\r\n pl.Join(route.curve);\r\n if (pl.Area2 < 0)\r\n pl.Reverse();\r\n // 针对圆弧板特殊处理(去除多余的控制点)\r\n if (isSweep)\r\n {\r\n pl = pl.GetOffsetCurves(10)[0];\r\n pl = pl.GetOffsetCurves(-10)[0];\r\n }\r\n return pl;\r\n });\r\n return cus;\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 { Box2, Box3, Line3, Matrix3, Matrix4, Vec2, Vector2, Vector3 } from 'three';\r\nimport { SplitPolyline } from '../Add-on/BoardCutting/SplitPolyline';\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 { BUL_IS_LINE_FUZZ, 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, XAxis, YAxis, ZAxis, ZeroVec, equaln, equalv2, equalv3, isParallelTo } from '../Geometry/GeUtils';\r\nimport { Vec3 } from '../Geometry/IVec3';\r\nimport { Matrix2 } from '../Geometry/Matrix2';\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[], numdimensions = 4): 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 const fuzz = 5 * Math.pow(0.1, numdimensions);\r\n //曲线节点图\r\n let cuMap = new CurveMap(numdimensions);\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, fuzz))\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, fuzz))\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 Polyline && cu2 instanceof Circle)\r\n || (cu1 instanceof Circle && cu2 instanceof Polyline)\r\n )\r\n {\r\n if (cu1 instanceof Circle)\r\n [cu1, cu2] = [cu2, cu1];\r\n\r\n if (cu1.EndParam < 2) return false;\r\n let curves = cu1.Explode();\r\n if (curves.length < 2 || !curves.every(c => c instanceof Arc)) return false;\r\n let c1 = curves[0];\r\n\r\n if (!(equalv3(c1.Center, (cu2 as Circle).Center) && equaln(c1.Radius, (cu2 as Circle).Radius, 1e-6))) return false;\r\n\r\n for (let i = 1; i < curves.length - 1; i++)\r\n c1.Join(curves[i]);\r\n\r\n return c1.Join(curves[curves.length - 1]) === Status.ConverToCircle;\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 //最近点\r\n let cp = cu.GetClosestPointTo(pt, false);\r\n if (equalv3(cp, pt, 1e-6)) return 0;\r\n //最近点的切线\r\n let deriv = cu.GetFirstDeriv(cu.GetParamAtPoint(cp));\r\n let vec2 = pt.clone().sub(cp);\r\n let cross = deriv.cross(vec2).applyMatrix4(cu.OCSInv.setPosition(0, 0, 0));\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.OCSNoClone);\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.OCSNoClone);\r\n\r\n let [c0p0, c0p1] = GetTanPtsOnArcOrCircle(cir0, i);\r\n let [c1p0, c1p1] = GetTanPtsOnArcOrCircle(cir1, i);\r\n return [\r\n new Line(c0p0, c1p0),\r\n new Line(c0p1, c1p1),\r\n ];\r\n }\r\n}\r\n\r\n//ref https://github1s.com/ArashPartow/wykobi/blob/master/wykobi.inl#L6575-L6576\r\n//获取2个圆的外切线\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.GetFirstDeriv(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.OCSNoClone);\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 size: Vector3;\r\n box: Box3;\r\n OCS: Matrix4;\r\n}\r\n\r\n/**\r\n * 判断多段线是不是矩形\r\n * 因为用户画的垃圾图,所以我们会给容差\r\n * 1.简化点表成4个点\r\n * -得到x向量,构建二维旋转矩阵\r\n * -所有的点旋转\r\n * 2.构建box\r\n * 3.4个点都在盒子里,面积是矩形\r\n * @param cu\r\n */\r\nexport function IsRect(cu: Curve): IRectInfo | undefined\r\n{\r\n if (cu instanceof Polyline)\r\n {\r\n //如果不封闭(就不是矩形)\r\n if (!cu.IsClose) return;\r\n\r\n //如果点个数小于4(就不是矩形)\r\n if (cu.LineData.length < 4) return;\r\n\r\n //如果有圆弧(就不是矩形)\r\n for (let i = 0; i < cu.LineData.length; i++)\r\n {\r\n let d = cu.LineData[i];\r\n if (equaln(d.bul, 0, BUL_IS_LINE_FUZZ))\r\n continue;\r\n let next = FixIndex(i + 1, cu.LineData);\r\n if (equalv2(d.pt, cu.LineData[next].pt))\r\n continue;\r\n return;\r\n }\r\n\r\n let pts2d = cu.LineData.map(d => d.pt);\r\n\r\n //去除重复点\r\n arrayRemoveDuplicateBySort(pts2d, (p1, p2) => equalv2(p1, p2));\r\n if (equalv2(pts2d[0], pts2d[pts2d.length - 1]))\r\n pts2d.pop();\r\n\r\n //这里我们判断它是不是有4个90度的角,并且有4个点\r\n let preV = pts2d[0].clone().sub(pts2d[pts2d.length - 1]).negate();//preVector\r\n let preL = preV.length();//preLength\r\n let nowV = new Vector2;//nowVector\r\n let crossV = 0;//永远相同方向的90度,如果不是(就不是矩形)\r\n\r\n let pts4: Vector2[] = [];//简化成4个点\r\n\r\n for (let i = 0; i < pts2d.length; i++)\r\n {\r\n nowV.subVectors(pts2d[FixIndex(i + 1, pts2d.length)], pts2d[i]);\r\n\r\n let cross = preV.cross(nowV) / preL;\r\n\r\n let nowL = nowV.length();//nowLength\r\n\r\n if (equaln(cross, 0, 0.01))//平行 此时的cross = 三角形的高(其中preL是三角形的底边) 我们认为它移动了0.01是可以接受的\r\n continue;//TODOX:我们可能要合并这条线? 把preV preL更新一下?\r\n\r\n cross /= nowL;//此时的cross = sin@\r\n\r\n //如果不等于90度(就不是矩形)\r\n if (!equaln(Math.abs(cross), 1, 1e-5))\r\n return;\r\n\r\n cross = Math.sign(cross);\r\n\r\n if (!crossV)\r\n crossV = cross;\r\n else if (crossV !== cross)//如果方向不一致(没有绕着90度)(就不是矩形)\r\n return;\r\n\r\n pts4.push(pts2d[i]);\r\n if (pts4.length > 4)//如果超过4个点(就不是矩形)\r\n return;\r\n\r\n preL = nowL;\r\n preV.copy(nowV).negate();//翻转它 以便下一次计算\r\n }\r\n\r\n if (pts4.length !== 4 || !crossV)//没有90度 (就不是矩形)\r\n return;\r\n\r\n let rectOCS: Matrix4;\r\n\r\n preV.subVectors(pts4[1], pts4[0]);\r\n let box = new Box2;\r\n if (equaln(preV.x, 0, 1e-3) || equaln(preV.y, 0, 1e-3))//判断是不是与X轴平行或者与Y轴平行,精度容差在0.001 看起来没问题\r\n {\r\n rectOCS = cu.OCS;\r\n box.setFromPoints(pts4);\r\n }\r\n else//如果矩形不与X轴平行,我们旋转这个点表,然后变换它\r\n {\r\n let a = Math.atan2(preV.y, preV.x);\r\n let r = new Matrix2().setRotate(-a);\r\n\r\n let p0 = pts4[0];\r\n pts4 = pts4.map(p =>\r\n {\r\n p = p.clone().sub(p0);\r\n r.applyVector(p);\r\n return p;\r\n });\r\n box.setFromPoints(pts4);\r\n\r\n nowV.set(-preV.y, preV.x);//旋转90度\r\n\r\n rectOCS = new Matrix4().makeBasis(\r\n AsVector3(preV.normalize()),\r\n AsVector3(nowV.normalize()),\r\n ZAxis,\r\n ).setPosition(p0.x, p0.y, 0);\r\n\r\n rectOCS.multiplyMatrices(cu.OCSNoClone, rectOCS);\r\n }\r\n\r\n //4个点都在角上\r\n if (!pts4.every(p =>\r\n {\r\n return (equaln(p.x, box.min.x, 0.01) || equaln(p.x, box.max.x, 0.01))\r\n && (equaln(p.y, box.min.y, 0.01) || equaln(p.y, box.max.y, 0.01));\r\n }))\r\n return;\r\n\r\n let size = box.getSize(new Vector2);\r\n\r\n return {\r\n size: AsVector3(size),\r\n box: new Box3(AsVector3(box.min), AsVector3(box.max)),\r\n OCS: rectOCS,\r\n };\r\n }\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.GetFirstDeriv(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.GetFirstDeriv(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\n * 将封闭的多段线,通过和y轴平行的线,分割成多个矩形\r\n * @param outline 这个多边形是横平竖直的,否则返回自身\r\n * @param polylineParalleXYFuzz 平行x或y的容差\r\n * @returns 裁剪后的矩形集\r\n */\r\nexport function PolylineSpliteRect(outline: Polyline, polylineParalleXYFuzz = 1e-3): Polyline[]\r\n{\r\n if (!outline.IsClose || IsRect(outline))\r\n return [outline];\r\n\r\n let cus = outline.Explode();\r\n\r\n let xSet: Set = new Set();\r\n for (let c of cus)\r\n {\r\n if (c instanceof Arc) return [outline];\r\n let derv = c.GetFirstDeriv(0).normalize();\r\n if (isParallelTo(derv, YAxis, polylineParalleXYFuzz))\r\n xSet.add(c.StartPoint.x);\r\n else if (!isParallelTo(derv, XAxis, polylineParalleXYFuzz))\r\n return [outline];\r\n }\r\n\r\n //轮廓的每条线段都平行于X或Y轴 可直接按端点切割\r\n const knifePls: Polyline[] = [];\r\n const xList = Array.from(xSet).sort((a, b) => a - b);\r\n\r\n for (let x of xList)\r\n knifePls.push(new Polyline([{ pt: AsVector2({ x, y: 0 }), bul: 0 }, { pt: AsVector2({ x, y: 1 }), bul: 0 }]));\r\n\r\n //裁剪结果\r\n let rects = SplitPolyline(outline, knifePls).filter(pl => pl.IsClose);\r\n\r\n return rects;\r\n}\r\n","/**\r\n *勿随意更改属性名,若更改,需更改对应UI模态框的属性和检验方法的key\r\n *\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\n//偏心轮类型\r\n// 左右侧板 Font朝向柜内 Back朝向柜外\r\n// 顶底板 Font朝向柜外 Back两面朝下 Inside朝向柜内\r\nexport enum FaceDirection\r\n{\r\n Front = 0,\r\n Back = 1,\r\n Inside = 2\r\n}\r\n","export enum LogType\r\n{\r\n Error = \"ERROR\",\r\n Warning = \"WARNING\",\r\n Info = \"INFO\",\r\n Command = \"COMMAND\",\r\n All = \"ALL\",\r\n}\r\n\r\ntype LogFunction = (message?: any, ...optionalParams: any[]) => void;\r\n\r\nexport const _LogInjectFunctions: LogFunction[] = [];\r\n\r\n//Log(`板:${br.Name}没有提供排钻信息!`, LogType.Warning, [br]);\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 _LogInjectInteractionFunctions: LogFunction[] = [];\r\n\r\n//InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: \"侧孔与板无交点,无法加工该侧孔!\" }], LogType.Warning);\r\nexport function InteractionLog(message?: any, ...optionalParams: any[]): void\r\n{\r\n for (let f of _LogInjectInteractionFunctions)\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","\r\n\r\nlet instanceMap = new Map();\r\n\r\nexport interface PrototypeType extends Function\r\n{\r\n prototype: T;\r\n}\r\n\r\nexport interface ConstructorFunctionType extends PrototypeType\r\n{\r\n new(...args: any[]): T;\r\n}\r\n\r\nexport type ConstructorType = PrototypeType> = (ConstructorFunctionType | PrototypeType) & {\r\n [Key in keyof Static]: Static[Key];\r\n};\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 //ref:https://github.com/Microsoft/TypeScript/issues/5863\r\n static GetInstance(this: ConstructorType): 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","export enum BoardType\r\n{\r\n Layer = 0, //层板\r\n Vertical = 1, //立板\r\n Behind = 2 //背板\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 const LinesTypeNames = {\r\n [LinesType.Positive]: \"正纹\",\r\n [LinesType.Reverse]: \"反纹\",\r\n [LinesType.CanReversal]: \"可翻转\"\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\nexport enum BoardOpenDir\r\n{\r\n Left = 1,\r\n Right = 2,\r\n Up = 3,\r\n Down = 4,\r\n NoOpen = 5, //是门板 但没有开门方向\r\n None = 0,\r\n}\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 enum AddRemarkType\r\n{\r\n Cover = 1,//覆盖\r\n NoCover = 0,//不覆盖\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\nexport function 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(bGeo: BufferGeometry, mtl: Material, scale = 1e-3)\r\n {\r\n if (!bGeo.boundingBox)\r\n bGeo.computeBoundingBox();\r\n\r\n let normals = bGeo.getAttribute(\"normal\") as BufferAttribute;\r\n let pos = bGeo.getAttribute(\"position\") as BufferAttribute;\r\n let uvs = bGeo.getAttribute(\"uv\") as BufferAttribute;\r\n\r\n if (!pos || !uvs || pos.count === 0) return;\r\n\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(bGeo.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\r\n uvs.needsUpdate = true;\r\n }\r\n}\r\n","import { BufferAttribute, BufferGeometry, Float32BufferAttribute, Matrix4, Vector3 } from \"three\";\r\nimport { Orbit } from \"../../Geometry/Orbit\";\r\nimport { GetFaceDir } from \"./GenUVForWorld\";\r\n\r\n//板件的UV计算\r\nexport class GenLocalUv\r\n{\r\n private 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\r\n private GetMtxInv({ normalX, normalY, normalZ }: { normalX: number, normalY: number, normalZ: number; }, IsReverse: boolean)\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\r\n if (mtx)\r\n return mtx;\r\n\r\n this._Z.copy(n);\r\n if (n.z != 0 && !IsReverse)//正面和背面不旋转\r\n Orbit.ComputUpDirection(this._Z, this._Y, this._X);\r\n else\r\n Orbit.ComputUpDirection(this._Z, this._X, this._Y);\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 //计算uv值\r\n CalculateUv(geo: BufferGeometry, IsReverse: boolean, 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 const uvs = [];\r\n for (let y = 0; y < pos.count; y++)\r\n {\r\n let index = y * 3;\r\n const normalX = normals.array[index];\r\n const normalY = normals.array[index + 1];\r\n const normalZ = normals.array[index + 2];\r\n let mtx = this.GetMtxInv({ normalX, normalY, normalZ }, IsReverse);\r\n\r\n this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]);\r\n this._X.applyMatrix4(mtx);\r\n\r\n uvs.push(this._X.x * scale);\r\n uvs.push(this._X.y * scale);\r\n }\r\n geo.setAttribute(\"uv\", new Float32BufferAttribute(uvs, 2));\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\nimport { Shape2 } from './Shape2';\r\n\r\nexport class Shape\r\n{\r\n private _DisplayAccuracy = 0;\r\n constructor(\r\n private _Outline: Contour = new Contour,\r\n private _Holes: Contour[] = []\r\n )\r\n {\r\n }\r\n\r\n get DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n this._DisplayAccuracy = v;\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(con: Contour)\r\n {\r\n this._Outline = con;\r\n }\r\n set Holes(holes: Contour[])\r\n {\r\n this._Holes = holes;\r\n }\r\n\r\n get Shape(): TShape\r\n {\r\n let 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 shape.holes.push(sp);\r\n }\r\n else\r\n shape.holes.push(h.Shape);\r\n }\r\n (shape as Shape2).DisplayAccuracy = this._DisplayAccuracy;\r\n return shape;\r\n }\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].ContainerCurve(cu.Curve, true));\r\n\r\n //洞是否被最大的洞包含,是,则把被包含的洞都提取出来加入形状数组\r\n if (isAllContainered)\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.ContainerCurve(con.Curve, true);\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.ContainerCurve(h.Curve, true));\r\n }\r\n return holes;\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","export const _CSGDEBUG = false;\r\n\r\n/** Epsilon used during determination of near zero distances.\r\n * @default\r\n */\r\nexport const EPS = 5e-2;\r\n\r\n// Tag factory: we can request a unique tag through CSG.getTag()\r\nexport let staticTag = 1;\r\nexport const getTag = () => staticTag++;\r\n","\r\n// //////////////////////////////\r\n// ## class fuzzyFactory\r\n// This class acts as a factory for objects. We can search for an object with approximately\r\n// the desired properties (say a rectangle with width 2 and height 1)\r\n// The lookupOrCreate() method looks for an existing object (for example it may find an existing rectangle\r\n// with width 2.0001 and height 0.999. If no object is found, the user supplied callback is\r\n// called, which should generate a new object. The new object is inserted into the database\r\n// so it can be found by future lookupOrCreate() calls.\r\n// Constructor:\r\n// numdimensions: the number of parameters for each object\r\n// for example for a 2D rectangle this would be 2\r\n\r\nimport { EPS } from \"./constants\";\r\n\r\n// tolerance: The maximum difference for each parameter allowed to be considered a match\r\nexport class FuzzyFactory\r\n{\r\n lookuptable: {};\r\n multiplier: number;\r\n constructor(numdimensions: number = 3, tolerance: number = EPS)\r\n {\r\n this.lookuptable = {};\r\n this.multiplier = 1.0 / tolerance;\r\n }\r\n\r\n // let obj = f.lookupOrCreate([el1, el2, el3], function(elements) {/* create the new object */});\r\n // Performs a fuzzy lookup of the object with the specified elements.\r\n // If found, returns the existing object\r\n // If not found, calls the supplied callback function which should create a new object with\r\n // the specified properties. This object is inserted in the lookup database.\r\n lookupOrCreate(els: number[], object: T): T\r\n {\r\n let hash = \"\";\r\n let multiplier = this.multiplier;\r\n for (let el of els)\r\n {\r\n let valueQuantized = Math.round(el * multiplier);\r\n hash += valueQuantized + \"/\";\r\n }\r\n if (hash in this.lookuptable) return this.lookuptable[hash];\r\n else\r\n {\r\n let hashparts = els.map(el =>\r\n {\r\n let q0 = Math.floor(el * multiplier);\r\n let q1 = q0 + 1;\r\n return [\"\" + q0 + \"/\", \"\" + q1 + \"/\"];\r\n });\r\n let numelements = els.length;\r\n let numhashes = 1 << numelements;\r\n for (let hashmask = 0; hashmask < numhashes; ++hashmask)\r\n {\r\n let hashmaskShifted = hashmask;\r\n hash = \"\";\r\n hashparts.forEach(hashpart =>\r\n {\r\n hash += hashpart[hashmaskShifted & 1];\r\n hashmaskShifted >>= 1;\r\n });\r\n this.lookuptable[hash] = object;\r\n }\r\n return object;\r\n }\r\n }\r\n}\r\n","import { 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 retessellate from \"@jscad/modeling/src/operations/modifiers/retessellate\";\r\nimport { BufferGeometry, Face3, Geometry, Plane, 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\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 retessellate(geom3.create(polygons)) as Geom3;\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 let normal: Vector3;//面的法线\r\n //@ts-ignore\r\n if (poly.plane)\r\n //@ts-ignore\r\n 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 if (!normal && poly.vertices.length > startIndex + 2)//如果没有法线,则自己计算\r\n normal = new Plane().setFromCoplanarPoints(geo.vertices[startIndex], geo.vertices[startIndex + 1], geo.vertices[startIndex + 2]).normal;\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 geom3, { toPolygons } from \"@jscad/modeling/src/geometries/geom3\";\r\nimport { Geom3, Poly3 } 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 measureBoundingBox from \"@jscad/modeling/src/measurements/measureBoundingBox\";\r\nimport splitPolygonByPlane from \"@jscad/modeling/src/operations/booleans/trees/splitPolygonByPlane\";\r\nimport retessellate from \"@jscad/modeling/src/operations/modifiers/retessellate\";\r\nimport { transform } from \"@jscad/modeling/src/operations/transforms\";\r\nimport { BufferAttribute, BufferGeometry, Line3, Matrix4, Plane, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board, IModeling } from \"../../DatabaseServices/Entity/Board\";\r\nimport { LinesType } from \"../../DatabaseServices/Entity/BoardInterface\";\r\nimport { GenLocalUv } from \"../../DatabaseServices/Entity/GenLocalUv\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { GetArcDrawCount } from \"../../Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams\";\r\nimport { equaln, equalv2, rotatePoint } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { OffsetPolyline } from \"../../GraphicsSystem/OffsetPolyline\";\r\nimport { FuzzyFactory } from \"../../csg/core/FuzzyFactory\";\r\nimport { CSG2Geometry2, Geometry2CSG2 } from \"../../csg/core/Geometry2CSG\";\r\nimport { FaceDirection } from \"../DrawDrilling/DrillType\";\r\n\r\n\r\nexport class ArcBoardBuild\r\n{\r\n //每段放样长度\r\n private _SweepLengths: number[]; //主Path的长度表\r\n\r\n private _SweepCurves1: (Line | Arc)[];//Path 主Path(见光)\r\n private _SweepCurves2: (Line | Arc)[];//Path 副Path(不见光面)\r\n\r\n private _SweepPath1: Polyline; //主Path (见光)\r\n private _SweepPath2: Polyline; //副Path (不见光)\r\n\r\n //将OCS坐标系 转换为旋转板后的坐标系\r\n _OCS2RotateMtx: Matrix4;//当板上某个点需要变换时, 先将它转换为旋转状态 在转换映射 在使用下面的矩阵变换到OCS\r\n _Rotate2OCSMtx: Matrix4;\r\n\r\n //弃用\r\n // private _SweepParamRanges: [number, number][];//Path 每段的起点参数和终点参数 基于SweepCurves1\r\n\r\n constructor(private _board: Board,\r\n //放样路径\r\n private _SweepPath: Polyline = _board.GetSweepPath(),\r\n //路径基于板旋转\r\n private _SweepAngle: number = _board.SweepAngle,\r\n private _FaceDir = _board.SweepVisibleFace,//(见光面正面时,开槽面为反面) (总是相反)\r\n )\r\n {\r\n this.ParseContourLength();\r\n }\r\n\r\n get SweepPath1() { return this._SweepPath1; }\r\n get SweepPath2() { return this._SweepPath2; }\r\n\r\n ParseContourLength()\r\n {\r\n if (this._SweepAngle !== 0 && !this._Rotate2OCSMtx)\r\n this.ParseRotateMtx();\r\n }\r\n\r\n //针对本算法特殊定制的偏移算法 避免偏移后起点丢失(主要是圆)\r\n static OffsetPolyline(path: Polyline, dist: number): Polyline\r\n {\r\n let offset = new OffsetPolyline(path, dist);\r\n offset._AllowConverToCircle = false;\r\n return offset.Do()[0];\r\n }\r\n\r\n get OCS2RotateMtx(): Matrix4\r\n {\r\n if (!this._OCS2RotateMtx)\r\n this.ParseRotateMtx();\r\n\r\n return this._OCS2RotateMtx;\r\n\r\n\r\n }\r\n get Rotate2OCSMtx(): Matrix4\r\n {\r\n if (!this._OCS2RotateMtx)\r\n this.ParseRotateMtx();\r\n\r\n return this._Rotate2OCSMtx;\r\n }\r\n ParseRotateMtx()\r\n {\r\n if (this._SweepAngle === 0) this._OCS2RotateMtx = new Matrix4;\r\n\r\n let con = this._board.ContourCurve.Clone();\r\n let mtx = new Matrix4().makeRotationZ(-this._SweepAngle);\r\n con.ApplyMatrix(mtx);\r\n let box = con.BoundingBox;\r\n mtx.setPosition(box.min.negate());\r\n\r\n this._OCS2RotateMtx = mtx;\r\n this._Rotate2OCSMtx = new Matrix4().getInverse(mtx);\r\n }\r\n\r\n get SweepCurves1()\r\n {\r\n return this._SweepCurves1;\r\n }\r\n\r\n get SweepCurves2()\r\n {\r\n return this._SweepCurves2;\r\n }\r\n\r\n ParseSweepCurves()\r\n {\r\n let path = ArcBoardBuild.OffsetPolyline(this._SweepPath, -this._board.Thickness);\r\n if (this._FaceDir === FaceDirection.Back)\r\n {\r\n this._SweepPath1 = ArcBoardBuild.OffsetPolyline(path, this._board.Thickness);\r\n this._SweepPath2 = path;\r\n\r\n this._SweepCurves1 = this._SweepPath1.Explode();\r\n this._SweepCurves2 = this._SweepCurves1.map(c =>\r\n {\r\n let offsetC = c.GetOffsetCurves(-this._board.Thickness)[0];\r\n if (!offsetC)\r\n offsetC = new Line(c.StartPoint, c.StartPoint);\r\n return offsetC;\r\n });\r\n }\r\n else\r\n {\r\n this._SweepPath1 = path;\r\n this._SweepPath2 = ArcBoardBuild.OffsetPolyline(this._SweepPath1, this._board.Thickness);\r\n\r\n this._SweepCurves1 = this._SweepPath1.Explode();\r\n this._SweepCurves2 = this._SweepCurves1.map(c =>\r\n {\r\n let offsetC = c.GetOffsetCurves(this._board.Thickness)[0];\r\n if (!offsetC)\r\n offsetC = new Line(c.StartPoint, c.StartPoint);\r\n return offsetC;\r\n });\r\n }\r\n\r\n this._SweepLengths = this._SweepCurves1.map(c => c.Length);\r\n return this;\r\n }\r\n\r\n get SweepLengths()\r\n {\r\n if (!this._SweepLengths)\r\n this.ParseSweepCurves();\r\n return this._SweepLengths;\r\n }\r\n\r\n get SweepLength()\r\n {\r\n let length = 0;\r\n for (let l of this.SweepLengths)\r\n length += l;\r\n return length;\r\n }\r\n\r\n private _SweepEndDists: number[];\r\n get SweepEndDists()\r\n {\r\n if (this._SweepEndDists) return this._SweepEndDists;\r\n this._SweepEndDists = [];\r\n let sumLength = 0;\r\n for (let i = 0; i < this.SweepLengths.length; i++)\r\n {\r\n let length = this.SweepLengths[i];\r\n sumLength += length;\r\n this._SweepEndDists.push(sumLength);\r\n }\r\n\r\n return this._SweepEndDists;\r\n }\r\n\r\n // //稳健折弯\r\n // private ParseSweepLengths2()\r\n // {\r\n // let sweepCurves = this.SweepCurves;\r\n // let sweepCurves2 = this.SweepCurves2;\r\n // let lengths: number[] = [];\r\n // this._SweepParamRanges = [];\r\n\r\n // for (let i = 0; i < sweepCurves.length; i++)\r\n // {\r\n // let c1 = sweepCurves[i];\r\n // let c2 = sweepCurves2[i];\r\n\r\n // if (c1 instanceof Line)\r\n // {\r\n // let param = new GetLineParam(c1);\r\n\r\n // //我们这里得到了折弯处的参数 或许可以有用?\r\n // let sp = param.GetParamAtPoint(c2.StartPoint);\r\n // let ep = param.GetParamAtPoint(c2.EndPoint);\r\n\r\n // this._SweepParamRanges.push([sp, ep]);\r\n\r\n // sp = Math.min(sp, 0);\r\n // ep = Math.max(ep, 1);\r\n\r\n // lengths.push(param.Length * (ep - sp));\r\n // }\r\n // else\r\n // {\r\n // let sa = c1.GetAngleAtPoint(c2.StartPoint);\r\n // let ea = c1.GetAngleAtPoint(c2.EndPoint);\r\n\r\n // let sp = c1.GetParamAtAngle(sa);\r\n // let ep = c1.GetParamAtAngle(ea);\r\n\r\n // this._SweepParamRanges.push([sp, ep]);\r\n\r\n // sp = Math.min(sp, 0);\r\n // ep = Math.max(ep, 1);\r\n\r\n // //背面为c1 正面为c2\r\n // lengths.push((this._FaceDir === FaceDirection.Front ? c2.Length : c1.Length) * (ep - sp));\r\n // }\r\n // }\r\n\r\n // this._SweepLengths = lengths;\r\n // }\r\n\r\n //用于缓存X位置->映射点和方向\r\n _CacheFuzzXFactory = new FuzzyFactory(1, 1e-3);//唯一映射x\r\n _Cache_X_PosDirMap: Map = new Map;\r\n //拐角Fuzz\r\n _CornerFuzzFactory: FuzzyFactory;//唯一拐角x\r\n _CornerSet: Set;//所有的拐角X\r\n /** 临时板 计算平板的CSG */\r\n _csgBoard: Board;\r\n /** 切割的位置 */\r\n private _splitXList: number[];\r\n\r\n get CSGBoard()\r\n {\r\n if (!this._csgBoard)\r\n this.ParseCSGBoard();\r\n return this._csgBoard;\r\n }\r\n\r\n get SplitXList()\r\n {\r\n if (!this._splitXList)\r\n this.ParseSplitXlist();\r\n return this._splitXList;\r\n }\r\n\r\n /** 解析切割的位置 */\r\n private ParseSplitXlist()\r\n {\r\n //每段线段的结束距离\r\n let dists: number[] = [];\r\n let split_xs: number[] = [];//分割位置\r\n\r\n //解析每段长度 解析分割位置\r\n let sumLength = 0;\r\n for (let i = 0; i < this.SweepLengths.length; i++)\r\n {\r\n let length = this.SweepLengths[i];\r\n if (this._SweepCurves1[i] instanceof Arc)//在圆弧时分段切割\r\n {\r\n let splitCount = GetArcDrawCount(this._SweepCurves1[i] as Arc);\r\n let divDist = length / splitCount;\r\n for (let j = 1; j < splitCount; j++)\r\n split_xs.push(sumLength + (divDist * j));\r\n }\r\n\r\n sumLength += length;\r\n dists.push(sumLength);\r\n split_xs.push(sumLength);\r\n }\r\n split_xs.pop();//最后一段不在切割\r\n\r\n this._SweepEndDists = dists;\r\n this._splitXList = split_xs;\r\n }\r\n\r\n /** 解析临时板 */\r\n private ParseCSGBoard()\r\n {\r\n //特性坍塌 我们记录所有转角处的x位置 以便我们遇到这个位置的坐标时,求正确的dir.\r\n this.ParseCorner();\r\n\r\n //拿CSG过来分割\r\n // let br = new Board;\r\n // br.Thickness = this._board.Thickness;\r\n // br.ContourCurve = this._board.ContourCurve;\r\n let br = this._board.Clone();\r\n br.Name = \"临时板\";\r\n br.SetSweepPath(undefined, 0);\r\n\r\n let arcBoardOptions = this._board.ArcBoardOptions;\r\n\r\n //构建转角处的槽\r\n let mmm: IModeling[] = [];\r\n for (let i = 0; i < this.SweepEndDists.length - 1; i++)\r\n {\r\n const arcBoardOption = arcBoardOptions.get(-1);\r\n\r\n let c1 = this._SweepCurves1[i];\r\n let c2 = this._SweepCurves1[i + 1];\r\n\r\n let co1 = this._SweepCurves2[i];\r\n let co2 = this._SweepCurves2[i + 1];\r\n\r\n //避免多余槽\r\n if (co1.Length < 0.1 || co2.Length < 0.1 || equalv2(co1.EndPoint, co2.StartPoint, 0.1)) continue;\r\n\r\n let p = co1.IntersectWith(co2, IntersectOption.ExtendNone, 0.1);\r\n if (p.length === 1)\r\n {\r\n let cp1 = c1.GetClosestPointTo(p[0], false);\r\n let cp2 = c2.GetClosestPointTo(p[0], false);\r\n\r\n let dist1 = c1.GetDistAtPoint(cp1);\r\n let dist2 = c2.GetDistAtPoint(cp2);\r\n\r\n dist1 = this.SweepLengths[i] - dist1;\r\n\r\n if (dist1 + dist2 < 0.1) continue;\r\n\r\n let d = this.SweepEndDists[i];\r\n\r\n let zValue = arcBoardOption.retainedThickness;\r\n let thickness = br.Thickness - zValue;\r\n if (this._FaceDir === FaceDirection.Front)\r\n zValue = 0;\r\n\r\n let pl = new Polyline().Rectangle(dist1 + dist2, 10000).Move(new Vector3(d - dist1, -100, 0));\r\n\r\n if (this._SweepAngle !== 0)\r\n pl.ApplyMatrix(this.Rotate2OCSMtx);\r\n\r\n let data: IModeling = {\r\n shape: new Shape(Contour.CreateContour(pl)),\r\n thickness: thickness,\r\n dir: 1 - this._FaceDir,//见光面和开槽面相反 这里翻转它\r\n knifeRadius: 3,\r\n addLen: 0,\r\n };\r\n mmm.push(data);\r\n }\r\n else if (p.length === 0)\r\n {\r\n let d = this.SweepEndDists[i];\r\n let zValue = arcBoardOption.retainedThickness;\r\n let thickness = br.Thickness - zValue;\r\n let pl = new Polyline().Rectangle(1, 10000).Move(new Vector3(d - 0.5, -100, 0));\r\n if (this._SweepAngle !== 0)\r\n pl.ApplyMatrix(this.Rotate2OCSMtx);\r\n\r\n let data: IModeling = {\r\n shape: new Shape(Contour.CreateContour(pl)),\r\n thickness: thickness,\r\n dir: 1 - this._FaceDir,//见光面和开槽面相反 这里翻转它\r\n knifeRadius: 3,\r\n addLen: 0,\r\n };\r\n mmm.push(data);\r\n }\r\n }\r\n // mmm = [];\r\n\r\n br.BoardModeling = this._board.BoardModeling.concat(mmm);\r\n // br.Modeling2D = this._board.Modeling2D;\r\n // br.Modeling3D = this._board.Modeling3D;\r\n\r\n //TestDraw(br.Clone());\r\n this._csgBoard = br;\r\n }\r\n /** 生成圆弧板的Geometry */\r\n BuildMeshEdgeGeom(csg?: Geom3): [BufferGeometry, BufferGeometry]\r\n {\r\n let br = this.CSGBoard;\r\n if (!csg)\r\n csg = this.CSGBoard.CSG;\r\n //旋转 r+m 逆矩阵(m+r) 将板轮廓旋转后 移动到WCS0(包围盒)\r\n let min: Vec3, max: Vec3;\r\n if (this._SweepAngle !== 0)\r\n {\r\n //根据csg旋转\r\n let roMtx = mat4.create();\r\n mat4.rotateZ(roMtx, roMtx, -this._SweepAngle);\r\n csg = transform(roMtx, csg);\r\n [min, max] = measureBoundingBox(csg);\r\n let moveMtx = mat4.create();\r\n mat4.translate(moveMtx, moveMtx, min.map(v => -v) as Vec3);\r\n csg = transform(moveMtx, csg);\r\n if (max[0] > this.SweepLength)\r\n console.log(\"出错\");\r\n\r\n // let geom = CSG2Geometry2(geom3.create(toPolygons(csg)));\r\n // geom.computeVertexNormals();\r\n // TestDraw(new Mesh(geom, new MeshNormalMaterial));\r\n\r\n this._OCS2RotateMtx = new Matrix4().makeRotationZ(-this._SweepAngle).setPosition(-min[0], -min[1], -min[2]);//rotate + move\r\n this._Rotate2OCSMtx = new Matrix4().makeRotationZ(this._SweepAngle).multiply(new Matrix4().setPosition(min[0], min[1], min[2]));//move + rotate\r\n }\r\n\r\n let remPolys: Poly3[] = toPolygons(csg);\r\n let plane: [number, number, number, number] = [1, 0, 0, 0];\r\n let splitedPolys: Poly3[] = [];\r\n for (let x of this.SplitXList)\r\n {\r\n plane[3] = x;\r\n\r\n let leftPolys: Poly3[] = [];\r\n let rightPolys: Poly3[] = [];\r\n\r\n for (let poly of remPolys)\r\n {\r\n // Returns object:\r\n // .type:\r\n // 0: coplanar-front\r\n // 1: coplanar-back\r\n // 2: front\r\n // 3: back\r\n // 4: spanning\r\n // In case the polygon is spanning, returns:\r\n // .front: a Polygon3 of the front part\r\n // .back: a Polygon3 of the back part\r\n if (!poly) // 先临时处理为null的情况,以免Error\r\n continue;\r\n let res = splitPolygonByPlane(plane, poly);\r\n if (res.type === 0)\r\n leftPolys.push(poly);\r\n else if (res.type === 1)\r\n leftPolys.push(poly);\r\n else if (res.type === 2)\r\n rightPolys.push(poly);\r\n else if (res.type === 3)\r\n leftPolys.push(poly);\r\n else if (res.type === 4)\r\n {\r\n if (res.back)\r\n leftPolys.push(res.back);\r\n if (res.front)\r\n rightPolys.push(res.front);\r\n }\r\n }\r\n\r\n splitedPolys.push(...toPolygons(retessellate(geom3.create(leftPolys))));\r\n remPolys = rightPolys;\r\n }\r\n\r\n splitedPolys.push(...toPolygons(retessellate(geom3.create(remPolys))));\r\n //分割结束\r\n\r\n //生成UV\r\n let geom = CSG2Geometry2(geom3.create(splitedPolys));\r\n const bufferGeometry = new BufferGeometry().fromGeometry(geom);\r\n //旋转板先变换到原始状态计算uv\r\n if (this._SweepAngle !== 0)\r\n bufferGeometry.applyMatrix4(this._Rotate2OCSMtx);\r\n const gen = new GenLocalUv();\r\n gen.CalculateUv(bufferGeometry, this._board.BoardProcessOption.lines === LinesType.Reverse);\r\n\r\n //变换回来映射\r\n if (this._SweepAngle !== 0)\r\n bufferGeometry.applyMatrix4(this._OCS2RotateMtx);\r\n\r\n //收集所有的x\r\n let pos = bufferGeometry.getAttribute(\"position\") as BufferAttribute;\r\n let xs: number[] = [];\r\n for (let y = 0; y < pos.count; y++)\r\n xs.push(pos.array[y * 3]);\r\n\r\n arraySortByNumber(xs);\r\n arrayRemoveDuplicateBySort(xs, equaln);\r\n\r\n //映射所有的x\r\n this.ParseAllX_Map(xs);\r\n\r\n //变换所有的点\r\n let tempP = new Vector3;\r\n for (let i = 0; i < pos.count; i++)\r\n {\r\n tempP.fromArray(pos.array, i * 3);\r\n this.PosMap2ArcPos(tempP);\r\n pos.setXYZ(i, tempP.x, tempP.y, tempP.z);\r\n }\r\n\r\n //#region 构建线框\r\n let edgeGeom = br.EdgeGeometry;\r\n pos = edgeGeom.getAttribute(\"position\") as BufferAttribute;\r\n\r\n let plane2 = new Plane(new Vector3(-1, 0, 0), 0);\r\n let remLiens: Line3[] = [];\r\n\r\n for (let y = 0; y < pos.count; y += 2)\r\n {\r\n let p1 = new Vector3().fromArray(pos.array, y * 3);\r\n let p2 = new Vector3().fromArray(pos.array, (y + 1) * 3);\r\n if (this._OCS2RotateMtx)\r\n {\r\n p1.applyMatrix4(this._OCS2RotateMtx);\r\n p2.applyMatrix4(this._OCS2RotateMtx);\r\n }\r\n let line3 = new Line3(p1, p2);\r\n remLiens.push(line3);\r\n }\r\n\r\n //所有的线被切割分组\r\n let lines: Line3[] = [];\r\n for (let x of this.SplitXList)\r\n {\r\n plane2.constant = x;\r\n let rightLines: Line3[] = [];\r\n\r\n for (let line of remLiens)\r\n {\r\n let ip = plane2.intersectLine(line, tempP);\r\n if (ip)\r\n {\r\n if (line.start.x < line.end.x)\r\n {\r\n lines.push(new Line3(line.start, ip.clone()));\r\n rightLines.push(new Line3(ip.clone(), line.end));\r\n }\r\n else\r\n {\r\n lines.push(new Line3(ip.clone(), line.end));\r\n rightLines.push(new Line3(line.start, ip.clone()));\r\n }\r\n }\r\n else if (line.start.x > x)\r\n rightLines.push(line);\r\n else\r\n lines.push(line);\r\n }\r\n remLiens = rightLines;\r\n }\r\n lines = lines.concat(remLiens);\r\n\r\n //转换为点表\r\n let pts: Vector3[] = [];\r\n for (let l of lines)\r\n pts.push(l.start, l.end);\r\n\r\n xs = pts.map(p => p.x);\r\n arraySortByNumber(xs);\r\n arrayRemoveDuplicateBySort(xs, equaln);\r\n\r\n this.ParseAllX_Map(xs);\r\n\r\n //变换所有的点\r\n for (let p of pts)\r\n this.PosMap2ArcPos(p);\r\n\r\n edgeGeom = BufferGeometryUtils.CreateFromPts(pts);\r\n //#endregion 结束线框构建\r\n\r\n // TestDraw(new Mesh(bufferGeometry.clone(), new MeshNormalMaterial));\r\n\r\n if (this._SweepAngle !== 0)//将板从旋转状态转回原始状态\r\n {\r\n edgeGeom.applyMatrix4(this._Rotate2OCSMtx);\r\n bufferGeometry.applyMatrix4(this._Rotate2OCSMtx);\r\n }\r\n\r\n bufferGeometry.computeBoundingBox();\r\n bufferGeometry.computeVertexNormals();\r\n\r\n // TestDraw(new Mesh(bufferGeometry, new MeshNormalMaterial));\r\n return [bufferGeometry, edgeGeom];\r\n }\r\n\r\n /** 生成大孔面 */\r\n BuildBigHoleFace()\r\n {\r\n //每段线段的结束距离\r\n let dists: number[] = [];\r\n let split_xs: number[] = [];//分割位置\r\n\r\n //解析每段长度 解析分割位置\r\n let sumLength = 0;\r\n for (let i = 0; i < this.SweepLengths.length; i++)\r\n {\r\n let length = this.SweepLengths[i];\r\n if (this._SweepCurves1[i] instanceof Arc)//在圆弧时分段切割\r\n {\r\n let splitCount = GetArcDrawCount(this._SweepCurves1[i] as Arc);\r\n let divDist = length / splitCount;\r\n for (let j = 1; j < splitCount; j++)\r\n split_xs.push(sumLength + (divDist * j));\r\n }\r\n\r\n sumLength += length;\r\n dists.push(sumLength);\r\n split_xs.push(sumLength);\r\n }\r\n split_xs.pop();//最后一段不在切割\r\n\r\n //拿CSG过来分割\r\n let br = new Board;\r\n br.Thickness = this._board.Thickness;\r\n br.ContourCurve = this._board.ContourCurve;\r\n br.BoardProcessOption[EBoardKeyList.BigHole] = this._board.BoardProcessOption[EBoardKeyList.BigHole];\r\n let csg = Geometry2CSG2(br.BigHoleFaceGeo);\r\n\r\n //旋转 r+m 逆矩阵(m+r) 将板轮廓旋转后 移动到WCS0(包围盒)\r\n let min: Vec3, max: Vec3;\r\n let Rotate2OCSMtx = new Matrix4();\r\n if (this._SweepAngle !== 0)\r\n {\r\n //根据csg旋转\r\n let roMtx = mat4.create();\r\n mat4.rotateZ(roMtx, roMtx, -this._SweepAngle);\r\n csg = transform(roMtx, csg);\r\n [min, max] = measureBoundingBox(csg);\r\n let moveMtx = mat4.create();\r\n mat4.translate(moveMtx, moveMtx, [-min[0], -min[1], 0]);\r\n csg = transform(moveMtx, csg);\r\n if (max[0] > this.SweepLength)\r\n console.log(\"出错\");\r\n\r\n Rotate2OCSMtx = new Matrix4().makeRotationZ(this._SweepAngle).multiply(new Matrix4().setPosition(min[0], min[1], 0));//move + rotate\r\n }\r\n\r\n let remPolys: Poly3[] = toPolygons(csg);\r\n let plane: [number, number, number, number] = [1, 0, 0, 0];\r\n let splitedPolys: Poly3[] = [];\r\n for (let x of split_xs)\r\n {\r\n plane[3] = x;\r\n\r\n let leftPolys: Poly3[] = [];\r\n let rightPolys: Poly3[] = [];\r\n\r\n for (let poly of remPolys)\r\n {\r\n if (!poly) // 先临时处理为null的情况,以免Error\r\n continue;\r\n let res = splitPolygonByPlane(plane, poly);\r\n if (res.type === 0)\r\n leftPolys.push(poly);\r\n else if (res.type === 1)\r\n leftPolys.push(poly);\r\n else if (res.type === 2)\r\n rightPolys.push(poly);\r\n else if (res.type === 3)\r\n leftPolys.push(poly);\r\n else if (res.type === 4)\r\n {\r\n leftPolys.push(res.back);\r\n rightPolys.push(res.front);\r\n }\r\n }\r\n splitedPolys.push(...toPolygons(retessellate(geom3.create(leftPolys))));\r\n remPolys = rightPolys;\r\n }\r\n splitedPolys.push(...toPolygons(retessellate(geom3.create(remPolys))));\r\n //分割结束\r\n\r\n //生成UV\r\n let geom = CSG2Geometry2(geom3.create(splitedPolys));\r\n const bufferGeometry = new BufferGeometry().fromGeometry(geom);\r\n\r\n //收集所有的x\r\n let pos = bufferGeometry.getAttribute(\"position\") as BufferAttribute;\r\n let xs: number[] = [];\r\n for (let y = 0; y < pos.count; y++)\r\n xs.push(pos.array[y * 3]);\r\n\r\n arraySortByNumber(xs);\r\n arrayRemoveDuplicateBySort(xs, equaln);\r\n\r\n //映射所有的x\r\n // 为了不影响this._CacheFuzzXFactory和this._Cache_X_PosDirMap,这里重新定义(否则可能导致错误,但目前没测到)\r\n const [cacheFuzzXFactory, cache_X_PosDirMap] = this.ParseAllX_Map_BigHole(xs);\r\n\r\n //变换所有的点\r\n let tempP = new Vector3;\r\n for (let i = 0; i < pos.count; i++)\r\n {\r\n tempP.fromArray(pos.array, i * 3);\r\n this.PosMap2ArcPos(tempP, cacheFuzzXFactory, cache_X_PosDirMap);\r\n pos.setXYZ(i, tempP.x, tempP.y, tempP.z);\r\n }\r\n\r\n if (this._SweepAngle !== 0)//将板从旋转状态转回原始状态\r\n {\r\n bufferGeometry.applyMatrix4(Rotate2OCSMtx);\r\n }\r\n\r\n return bufferGeometry;\r\n }\r\n\r\n //\r\n private ParseCorner()\r\n {\r\n this._CornerSet = new Set();\r\n this._CornerFuzzFactory = new FuzzyFactory(3, 1e-3);\r\n for (let d of this.SweepEndDists)\r\n {\r\n d = this._CornerFuzzFactory.lookupOrCreate([d], d);\r\n this._CornerSet.add(d);\r\n }\r\n }\r\n\r\n ParseAllX_Map(xs: number[])\r\n {\r\n if (!this._CornerSet) this.ParseCorner();\r\n\r\n let dists = this.SweepEndDists;\r\n let fuzzX = this._CacheFuzzXFactory;\r\n let curveIndex = 0;\r\n let curSum = dists[0];\r\n let preSum = 0;\r\n let rotateAngle = this._FaceDir === FaceDirection.Back ? Math.PI / 2 : -Math.PI / 2;\r\n for (let x of xs)\r\n {\r\n while (x > curSum && curveIndex < dists.length - 1)\r\n {\r\n curveIndex++;\r\n preSum = curSum;\r\n curSum = dists[curveIndex];\r\n }\r\n\r\n let c = this._SweepCurves1[curveIndex];\r\n let param = ((x - preSum) / this._SweepLengths[curveIndex]);\r\n\r\n let onlyX = fuzzX.lookupOrCreate([x], x);\r\n let derv = c.GetFirstDeriv(param);\r\n // if (c instanceof Line)\r\n // derv.divideScalar(this._SweepLengths[curveIndex]);\r\n // else\r\n // derv.divideScalar(c.Radius);\r\n derv.normalize();\r\n rotatePoint(derv, rotateAngle);\r\n\r\n let onlyD = this._CornerFuzzFactory.lookupOrCreate([x], x);\r\n if (this._CornerSet.has(onlyD))//坍塌\r\n {\r\n // console.log(\"坍塌\");\r\n let p2 = this._SweepPath2.GetPointAtParam(curveIndex + Math.round(param));\r\n derv = p2.sub(c.GetPointAtParam(param)).divideScalar(this._board.Thickness);\r\n }\r\n\r\n this._Cache_X_PosDirMap.set(onlyX, [c.GetPointAtParam(param), derv]);\r\n }\r\n }\r\n\r\n ParseAllX_Map_BigHole(xs: number[])\r\n {\r\n const cacheFuzzXFactory = new FuzzyFactory(1, 1e-3);\r\n const cache_X_PosDirMap: Map = new Map;\r\n let dists = this.SweepEndDists;\r\n let curveIndex = 0;\r\n let curSum = dists[0];\r\n let preSum = 0;\r\n let rotateAngle = this._FaceDir === FaceDirection.Back ? Math.PI / 2 : -Math.PI / 2;\r\n for (let x of xs)\r\n {\r\n while (x > curSum && curveIndex < dists.length - 1)\r\n {\r\n curveIndex++;\r\n preSum = curSum;\r\n curSum = dists[curveIndex];\r\n }\r\n\r\n let c = this._SweepCurves1[curveIndex];\r\n let param = ((x - preSum) / this._SweepLengths[curveIndex]);\r\n\r\n let onlyX = cacheFuzzXFactory.lookupOrCreate([x], x);\r\n let derv = c.GetFirstDeriv(param);\r\n\r\n derv.normalize();\r\n rotatePoint(derv, rotateAngle);\r\n\r\n let onlyD = this._CornerFuzzFactory.lookupOrCreate([x], x);\r\n if (this._CornerSet.has(onlyD))//坍塌\r\n {\r\n let p2 = this._SweepPath2.GetPointAtParam(curveIndex + Math.round(param));\r\n derv = p2.sub(c.GetPointAtParam(param)).divideScalar(this._board.Thickness);\r\n }\r\n\r\n cache_X_PosDirMap.set(onlyX, [c.GetPointAtParam(param), derv]);\r\n }\r\n return [cacheFuzzXFactory, cache_X_PosDirMap] as [FuzzyFactory, Map];\r\n }\r\n\r\n PosMap2ArcPos(p: Vector3, cacheFuzzXFactory = this._CacheFuzzXFactory, cache_X_PosDirMap = this._Cache_X_PosDirMap)\r\n {\r\n let [x, y, z] = p.toArray();\r\n let onlyX = cacheFuzzXFactory.lookupOrCreate([x], x);\r\n let arr = cache_X_PosDirMap.get(onlyX);\r\n if (!arr)\r\n {\r\n console.error(\"未知情况?\");\r\n return;\r\n }\r\n let [pox, v] = arr;\r\n\r\n if (this._FaceDir === FaceDirection.Front)\r\n z = this._board.Thickness - z;\r\n\r\n p.copy(v).multiplyScalar(z).add(pox);\r\n [p.y, p.z] = [y, p.y];\r\n }\r\n}\r\n","export enum ArcBoardFeedProcess\r\n{\r\n Slots = 0, //间隔直槽\r\n Model = 1, //铣底加工\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { ArcBoardFeedProcess } from \"../../DatabaseServices/Entity/ArcBoardType\";\r\nimport { Board, IModeling } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { equalv2 } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { FaceDirection } from \"../DrawDrilling/DrillType\";\r\nimport { ArcBoardBuild } from \"./ArcBoardBuild\";\r\n\r\nexport interface ArcBoardOptions\r\n{\r\n arcLength: number;\r\n grooveSpacing: number;\r\n grooveWidth: number;\r\n retainedThickness: number;\r\n knifeRadius: number;\r\n grooveAddLength: number;\r\n grooveAddWidth: number;\r\n grooveAddDepth: number;\r\n arcExtension: number;\r\n};\r\n\r\n//圆弧默认的槽配置\r\nexport const defultArcBoardOption: ArcBoardOptions = {\r\n arcLength: 0,\r\n grooveSpacing: 6,\r\n grooveWidth: 6,\r\n retainedThickness: 2,\r\n knifeRadius: 3,\r\n grooveAddLength: 0,\r\n grooveAddWidth: 0,\r\n grooveAddDepth: 0,\r\n arcExtension: 0,\r\n};\r\n\r\n\r\n/**\r\n * 解析圆弧板需要的走刀数据\r\n * @param br\r\n * @param path 圆弧放样路径\r\n * @param angle 角度\r\n * @param dir 圆弧板见光面 见光面正面走刀颜色黄色,背面颜色红色\r\n * @param [onlyVert=false] 仅解析交点位置 (默认解析所有的槽)\r\n * @returns 返回需要增加的槽的数据\r\n */\r\nexport function ParseBoardArcFeed(br: Board, path: Polyline, angle: number, dir: FaceDirection, arcBoardOptions: Map, onlyVert = false): IModeling[]\r\n{\r\n const arcBoardBuild = new ArcBoardBuild(br);\r\n arcBoardBuild.ParseSweepCurves();\r\n //每段线段的起始位置\r\n const dists: number[] = [];\r\n\r\n //解析每段长度\r\n let sumLength = 0;\r\n dists.push(sumLength);\r\n let SweepLengths = arcBoardBuild.SweepLengths;\r\n for (let i = 0; i < SweepLengths.length; i++)\r\n {\r\n let length = SweepLengths[i];\r\n sumLength += length;\r\n dists.push(sumLength);\r\n }\r\n\r\n const board = new Board();\r\n board.Thickness = br.Thickness;\r\n board.ContourCurve = br.ContourCurve;\r\n\r\n //获取板形状\r\n const c1 = br.Shape;\r\n if (angle !== 0)\r\n c1.ApplyMatrix(arcBoardBuild.OCS2RotateMtx);\r\n\r\n //记录每个转角槽信息\r\n const grooveInfo = new Map();\r\n for (let i = 0; i < dists.length - 2; i++)\r\n {\r\n const arcBoardOption = arcBoardOptions.get(-1);\r\n\r\n let c1 = arcBoardBuild.SweepCurves1[i];\r\n let c2 = arcBoardBuild.SweepCurves1[i + 1];\r\n\r\n let co1 = arcBoardBuild.SweepCurves2[i];\r\n let co2 = arcBoardBuild.SweepCurves2[i + 1];\r\n\r\n //避免多余槽\r\n if (equalv2(co1.EndPoint, co2.StartPoint, 0.1)) continue;\r\n\r\n let p = co1.IntersectWith(co2, IntersectOption.ExtendNone, 0.1);\r\n if (p.length === 1)\r\n {\r\n let cp1 = c1.GetClosestPointTo(p[0], false);\r\n let cp2 = c2.GetClosestPointTo(p[0], false);\r\n\r\n let dist1 = c1.GetDistAtPoint(cp1);\r\n let dist2 = c2.GetDistAtPoint(cp2);\r\n\r\n dist1 = arcBoardBuild.SweepLengths[i] - dist1;\r\n\r\n if (dist1 + dist2 < 0.1) continue;\r\n grooveInfo.set(i, { l: dist1, r: dist2 });\r\n }\r\n else if (p.length === 0)\r\n {\r\n grooveInfo.set(i, { l: arcBoardOption.grooveWidth / 2, r: arcBoardOption.grooveWidth / 2 });\r\n }\r\n }\r\n\r\n const appendModel = (grooveWidth: number, x: number, arcBoardOption: ArcBoardOptions) =>\r\n {\r\n const pl = new Polyline().Rectangle(grooveWidth, 10000).Move(new Vector3(x, 0, 0));\r\n const c2 = new Shape(Contour.CreateContour(pl));\r\n for (const contour of c1.IntersectionBoolOperation(c2))\r\n {\r\n if (angle !== 0)\r\n contour.ApplyMatrix(arcBoardBuild.Rotate2OCSMtx);\r\n\r\n mmm.push({\r\n shape: contour,\r\n thickness: br.Thickness - arcBoardOption.retainedThickness,\r\n dir: dir === 0 ? FaceDirection.Back : FaceDirection.Front,\r\n knifeRadius: arcBoardOption.knifeRadius,\r\n addLen: arcBoardOption.grooveAddLength,\r\n addWidth: arcBoardOption.grooveAddWidth,\r\n addDepth: arcBoardOption.grooveAddDepth,\r\n });\r\n }\r\n };\r\n\r\n //判断是否可以等分\r\n const checkIsDivide = (remainLength: number, grooveWidth: number, grooveSpacing: number, firstGrooveLength: number, lastGrooveLength: number) =>\r\n {\r\n //如果前面有默认槽,则减去一个槽宽度\r\n if (!firstGrooveLength)\r\n remainLength -= grooveWidth;\r\n //如果后面有默认槽,则减去一个槽宽度\r\n if (!lastGrooveLength)\r\n remainLength -= grooveWidth;\r\n const pericycleWidth = grooveSpacing + grooveWidth; //周期宽度\r\n const length = remainLength + grooveWidth; //加一个槽宽,让槽宽和槽间距个数相等\r\n const count = Math.ceil(length / pericycleWidth); //计算挖槽个数\r\n const newSpacing = (length / count) - grooveWidth; //计算新的槽间距值\r\n return newSpacing > 0; //如果新的槽间距大于零,可等分,如果小等于零槽就会重叠\r\n };\r\n\r\n //构建槽\r\n const mmm: IModeling[] = [];\r\n for (let i = 0; i < dists.length - 1; i++)\r\n {\r\n const cu = arcBoardBuild.SweepCurves1[i];\r\n const startGroove = grooveInfo.get(i - 1);\r\n if (startGroove)\r\n {\r\n const arcBoardOption = arcBoardOptions.get(-1);\r\n const grooveWidth = startGroove.l + startGroove.r;\r\n const x = dists[i] - startGroove.l;\r\n appendModel(grooveWidth, x, arcBoardOption);\r\n }\r\n\r\n if (!onlyVert && (cu instanceof Arc))\r\n {\r\n const arcBoardOption = arcBoardOptions.get(i);\r\n const { grooveWidth, grooveSpacing, arcExtension } = arcBoardOption;\r\n\r\n const firstGrooveLength = grooveInfo.get(i - 1)?.r ?? 0; //头通用挖槽长度\r\n const lastGrooveLength = grooveInfo.get(i)?.l ?? 0; //尾通用挖槽长度\r\n\r\n if (br.arcBoardFeedProcess === ArcBoardFeedProcess.Slots)\r\n {\r\n //挖槽的规律是先挖最左右两个槽,再根据最大槽间距、槽宽和剩余长度计算出比例挖槽\r\n let remainLength = cu.Length - firstGrooveLength - lastGrooveLength; //剩余长度\r\n\r\n //更新起始距离\r\n let startDist = dists[i] + firstGrooveLength;\r\n\r\n //先计算是否可以添加槽加长\r\n const cu1 = arcBoardBuild.SweepCurves1[i - 1];\r\n const cu2 = arcBoardBuild.SweepCurves1[i + 1];\r\n if (!firstGrooveLength && arcExtension && cu1 && cu1 instanceof Line)\r\n {\r\n remainLength += arcExtension;\r\n startDist -= arcExtension;\r\n }\r\n\r\n if (!lastGrooveLength && arcExtension && cu2 && cu2 instanceof Line)\r\n remainLength += arcExtension;\r\n\r\n if (remainLength > 0)\r\n {\r\n //只能画一个槽的情况\r\n if (remainLength <= grooveWidth)\r\n {\r\n if (firstGrooveLength)\r\n {\r\n startDist += grooveSpacing;\r\n remainLength -= grooveSpacing;\r\n }\r\n if (lastGrooveLength)\r\n {\r\n remainLength -= grooveSpacing;\r\n }\r\n if (remainLength > 0)\r\n appendModel(remainLength, startDist, arcBoardOption);\r\n continue;\r\n }\r\n\r\n //这里只够分配前后两个槽,这两个槽的大小可能一大一小\r\n if (remainLength <= grooveWidth * 2 + grooveSpacing)\r\n {\r\n if (firstGrooveLength)\r\n {\r\n startDist += grooveSpacing;\r\n remainLength -= grooveSpacing;\r\n }\r\n if (lastGrooveLength)\r\n {\r\n remainLength -= grooveSpacing;\r\n }\r\n appendModel(grooveWidth, startDist, arcBoardOption);\r\n\r\n let x2 = startDist + grooveSpacing + grooveWidth;\r\n let grooveLength2 = remainLength - grooveWidth - grooveSpacing;\r\n // 如果第二个槽太小无法走刀,画一个最小刀直径的槽\r\n let knifeDiameter = arcBoardOption.knifeRadius * 2;\r\n if (grooveLength2 < knifeDiameter)\r\n appendModel(knifeDiameter, x2 - knifeDiameter + grooveLength2, arcBoardOption);\r\n else\r\n appendModel(grooveLength2, x2, arcBoardOption);\r\n continue;\r\n }\r\n\r\n //绘制多个槽\r\n if (checkIsDivide(remainLength, grooveWidth, grooveSpacing, firstGrooveLength, lastGrooveLength))\r\n {\r\n if (!firstGrooveLength)\r\n {\r\n appendModel(grooveWidth, startDist, arcBoardOption);\r\n startDist += grooveWidth;\r\n remainLength -= grooveWidth;\r\n }\r\n\r\n if (!lastGrooveLength)\r\n {\r\n const cu1 = arcBoardBuild.SweepCurves1[i + 1];\r\n remainLength -= grooveWidth;\r\n //判断是否满足尾部延伸\r\n const x = dists[i + 1] - grooveWidth + ((arcExtension && cu1 && cu1 instanceof Line) ? arcExtension : 0);\r\n appendModel(grooveWidth, x, arcBoardOption);\r\n }\r\n\r\n const pericycleWidth = grooveSpacing + grooveWidth; //周期宽度\r\n const length = remainLength + grooveWidth;\r\n const count = Math.ceil(length / pericycleWidth);\r\n // 计算新的槽位间距\r\n const newSpacing = (length / count) - grooveWidth;\r\n\r\n const newPericycleWidth = newSpacing + grooveWidth;\r\n for (let j = 0; j < count - 1; j++)\r\n {\r\n const x = startDist + j * newPericycleWidth + newSpacing;\r\n appendModel(grooveWidth, x, arcBoardOption);\r\n }\r\n }\r\n else\r\n {\r\n if (firstGrooveLength)\r\n {\r\n startDist += grooveSpacing;\r\n }\r\n //不能等分,根据指定槽大小绘制,最后补一个小槽\r\n const pericycleWidth = grooveSpacing + grooveWidth; //周期宽度\r\n const count = Math.ceil(remainLength / pericycleWidth);\r\n for (let j = 0; j < count; j++)\r\n {\r\n let x = startDist + j * pericycleWidth;\r\n if (remainLength >= pericycleWidth)\r\n {\r\n appendModel(grooveWidth, x, arcBoardOption);\r\n remainLength -= pericycleWidth;\r\n }\r\n else\r\n {\r\n // 如果最后一个槽太小无法走刀,画一个最小刀直径的槽\r\n let knifeDiameter = arcBoardOption.knifeRadius * 2;\r\n if (remainLength < knifeDiameter)\r\n appendModel(knifeDiameter, x - knifeDiameter + remainLength, arcBoardOption);\r\n else\r\n appendModel(remainLength, x, arcBoardOption);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else\r\n {\r\n let remainLength = cu.Length - firstGrooveLength - lastGrooveLength; //剩余长度\r\n if (remainLength > 0)\r\n {\r\n //更新起始距离\r\n let startDist = dists[i];\r\n if (!firstGrooveLength)\r\n {\r\n const cu1 = arcBoardBuild.SweepCurves1[i - 1];\r\n //判断是否满足头部延伸\r\n if (arcExtension && cu1 && cu1 instanceof Line)\r\n {\r\n remainLength += arcExtension;\r\n startDist -= arcExtension;\r\n }\r\n }\r\n\r\n if (!lastGrooveLength)\r\n {\r\n const cu1 = arcBoardBuild.SweepCurves1[i + 1];\r\n //判断是否满足尾部延伸\r\n if (arcExtension && cu1 && cu1 instanceof Line)\r\n {\r\n remainLength += arcExtension;\r\n }\r\n }\r\n\r\n appendModel(remainLength, startDist, arcBoardOption);\r\n }\r\n }\r\n }\r\n }\r\n return mmm;\r\n}\r\n","import { Box3, Matrix4, Vector2, Vector3 } from \"three\";\r\nimport { ComputerCurvesNormalOCS } from \"../../Common/CurveUtils\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Entity } from \"../../DatabaseServices/Entity/Entity\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline, PolylineProps } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { GetArcDrawCount } from \"../../Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams\";\r\nimport { AsVector2, AsVector3, equaln, equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { ArcBoardBuild } from \"../ArcBoard/ArcBoardBuild\";\r\nimport { FaceDirection } from \"../DrawDrilling/DrillType\";\r\nimport { BoxLine } from \"../testEntity/BoxLine\";\r\nimport { SplitPolyline } from \"./SplitPolyline\";\r\n\r\n/** 针对圆弧板的线性切割 */\r\nexport class LinearCuttingForSweep\r\n{\r\n /** 点集生成二维刀 */\r\n static CreateSplitPl(pts: Vector3[])\r\n {\r\n /** 刀(线段簇) */\r\n const splitLines: Line[] = CurveManager.PtsToLines(pts);\r\n /** 刀(多段线) */\r\n const splitPl = CurveManager.LinesToPl(splitLines);\r\n return splitPl;\r\n };\r\n\r\n /** 生成圆弧板的切割器*/\r\n constructor(public br: Board, public splitPl: Polyline)\r\n {\r\n this.br = br;\r\n this.splitPl = splitPl.Clone();\r\n }\r\n\r\n /**\r\n * 进行切割\r\n * @param {Polyline[]} clipPls 用于切割的刀\r\n * @returns {[Polyline[], Polyline[], {x:number; y:number}[]]} [切割后轮廓, 切割后路径, 切割后轮廓的偏移值]\r\n * @第一步 判断当前切割的视图类型\r\n * @第二步 根据视图类型判断切割的是路径还是面\r\n * @第三步 把被切割对象(路径与板包围盒)平移到对应视图的平面\r\n * @第四步 旋转被切割对象到XOY平面\r\n * @第五步 在XOY平面下进行切割\r\n */\r\n Split(ucs: Matrix4, clipPls?: Polyline[]): [Polyline[], Polyline[], { x: number; y: number; }[]]\r\n {\r\n /** 当前切割的视图类型 */\r\n const viewStr = this.GetViewStr(ucs);\r\n if (viewStr === ViewType.Normal && clipPls && clipPls.length > 0)\r\n {\r\n // 暂时采用旧的切割方案\r\n return this.SplitBySweep(this.br, clipPls);\r\n }\r\n const isPathOrPlane = this.IsPathOrPlane(viewStr);\r\n if (isPathOrPlane === \"路径\")\r\n {\r\n // 平移\r\n const sweepPathInWCS = this.MovePathToView(viewStr);\r\n // 切割\r\n return this.SplitInPath(sweepPathInWCS);\r\n }\r\n if (isPathOrPlane === \"面\")\r\n {\r\n // 统一\r\n const brBox = this.UnifyBrBoxAndPathBox();\r\n // 平移\r\n const sweepPathInWCS = this.MovePathToView(viewStr);\r\n const brBoxLines = this.MoveBrBoxToView(viewStr, brBox);\r\n // 旋转\r\n const pathBoxPl = this.RotateToXOY(sweepPathInWCS, brBoxLines, new Matrix4().getInverse(ucs));\r\n // 切割\r\n return this.SplitInPlane(sweepPathInWCS, brBoxLines, pathBoxPl);\r\n }\r\n // 其他情况返回空数组,表示不做切割\r\n return [[], [], []];\r\n }\r\n\r\n /**\r\n * 切割面\r\n * @param {Polyline} sweepPathInWCS 放样路径\r\n * @param {Line[]} brBoxLines 板包围盒\r\n * @param {Polyline} pathBoxPl 路径包围盒\r\n * @第一步 计算刀与板包围盒的交点,以及在盒内的顶点,记住采样点\r\n * @第二步 记录采样点在刀上的位置,并移动到路径所在的平面\r\n * @第三步 根据采样点生成垂直于XOY平面的直线\r\n * @第四步 计算这些直线与路径的交点\r\n * @第五步 将这些交点映射到展开后的路径上\r\n * @第六步 根据记录的位置排序这些点,并生成新的刀\r\n */\r\n SplitInPlane(sweepPathInWCS: Polyline, brBoxLines: Line[], pathBoxPl: Polyline)\r\n {\r\n const splitPl = this.splitPl;\r\n /** 采样点(一定在包围盒内) */\r\n const ptsInbrBox = this.GetPtsInbrBox(brBoxLines);\r\n /** 路径所在平面与X轴垂直否 */\r\n const isVerticalWithX = equaln(sweepPathInWCS.Normal.dot(new Vector3(1, 0, 0)), 0);\r\n // 细化\r\n ptsInbrBox.push(...this.Tessellate(sweepPathInWCS, brBoxLines, isVerticalWithX));\r\n // 规范超出的部分\r\n const [yLineMax, yLineMin] = this.AdjustOverBox(sweepPathInWCS, pathBoxPl);\r\n /** 构成新刀的数据集 */\r\n const splitDatasList: { pt: Vector3; index: number; }[][] = [];\r\n /** 路径上的点(用于偏移后求交) */\r\n const pathPt = pathBoxPl.GetPointAtParam(0);\r\n /** 展开后的路径 */\r\n const expandPath = CurveManager.CreateExpandPl(this.GetSweepPathInOCSWithBr());\r\n this.ToSplitPosition(expandPath);\r\n let minLength = Infinity;\r\n const inptsData: { pts: Vector3[], index: number, bias: number; }[] = [];\r\n // 移动到路径所在的平面,然后作垂线并与路径求交\r\n for (const ptInbrBox of ptsInbrBox)\r\n {\r\n /** 在刀上的位置 */\r\n const ptInbrBoxIndex = splitPl.GetParamAtPoint(ptInbrBox);\r\n let biasX = ptInbrBox.x - pathPt.x;\r\n // 往刀所在的平面移动\r\n if (isVerticalWithX)\r\n {\r\n biasX = ptInbrBox.y - pathPt.y;\r\n ptInbrBox.y = pathPt.y;\r\n }\r\n else\r\n ptInbrBox.x = pathPt.x;\r\n const zLine = CurveManager.CreateZLine(ptInbrBox);\r\n const inptsInPath = zLine.IntersectWith(sweepPathInWCS, IntersectOption.ExtendThis, 0.01).reverse();\r\n minLength = Math.min(minLength, inptsInPath.length);\r\n inptsData.push({ pts: inptsInPath, index: ptInbrBoxIndex, bias: biasX });\r\n }\r\n for (const data of inptsData)\r\n {\r\n // 点映射\r\n for (let i = 0; i < minLength; i++)\r\n {\r\n const inptInPath = data.pts[i];\r\n const param = sweepPathInWCS.GetParamAtPoint(inptInPath);\r\n const ptInExpand = expandPath.GetPointAtParam(param);\r\n // 偏移\r\n ptInExpand.y += Math.abs(data.bias);\r\n // 初始化\r\n if (!splitDatasList[i]) splitDatasList[i] = [];\r\n // 添加\r\n splitDatasList[i].push({ pt: ptInExpand, index: data.index });\r\n }\r\n }\r\n for (let splitDatas of splitDatasList)\r\n {\r\n splitDatas = splitDatas.sort((a, b) => a.index - b.index);\r\n // 修正刀\r\n for (let i = 0; i < splitDatas.length; i++)\r\n {\r\n const splitData = splitDatas[i];\r\n const basePt = splitData.pt;\r\n const backPt = splitDatas[i - 1]?.pt;\r\n const nextPt = splitDatas[i + 1]?.pt;\r\n // 目前先只针对首尾点\r\n if (backPt && nextPt)\r\n continue;\r\n /** @todo 这里先按水平延伸来修正 */\r\n if (yLineMax.PtOnCurve(basePt, 1e-3))\r\n {\r\n let sign = 1;\r\n if (backPt) sign = Math.sign(basePt.x - backPt.x);\r\n else if (nextPt) sign = Math.sign(basePt.x - nextPt.x);\r\n const pt = basePt.clone().add(new Vector3(sign * 2000, 0, 0));\r\n const index = splitData.index + ((backPt && !yLineMax.PtOnCurve(backPt)) ? 0.01 : -0.01);\r\n splitDatas.unshift({ pt, index });\r\n i++;\r\n }\r\n else if (yLineMin.PtOnCurve(basePt, 1e-3))\r\n {\r\n let sign = 1;\r\n if (backPt) sign = Math.sign(basePt.x - backPt.x);\r\n else if (nextPt) sign = Math.sign(basePt.x - nextPt.x);\r\n const pt = basePt.clone().add(new Vector3(sign * 2000, 0, 0));\r\n const index = splitData.index + ((backPt && !yLineMin.PtOnCurve(backPt)) ? 0.01 : -0.01);\r\n splitDatas.unshift({ pt, index });\r\n i++;\r\n }\r\n }\r\n // 排序\r\n splitDatas = splitDatas.sort((a, b) => a.index - b.index);\r\n }\r\n /** 新刀 */\r\n const newSplitPls: Polyline[] = [];\r\n for (const splitDatas of splitDatasList)\r\n {\r\n const newSplitPl = CurveManager.CreatePolyline(splitDatas.map(e => AsVector2(e.pt)));\r\n newSplitPls.push(newSplitPl);\r\n }\r\n // 切割板\r\n return this.SplitBrByKnifes(newSplitPls);\r\n }\r\n\r\n /** 判断视图类型 */\r\n private GetViewStr(ucs: Matrix4)\r\n {\r\n const viewType = ViewManager.MatrixIsView(ucs);\r\n if (viewType === ViewType.Unknown)\r\n {\r\n const axisUsc = CurveManager.CreateAxis(ucs);\r\n const axisBr = CurveManager.CreateAxis(this.br.OCS);\r\n const brZArrow = axisBr[2];\r\n const brZAxis = brZArrow.EndPoint.clone().sub(brZArrow.StartPoint);\r\n const uscZArrow = axisUsc[2];\r\n const uscZAxis = uscZArrow.EndPoint.clone().sub(uscZArrow.StartPoint);\r\n const isInPositive = equaln(brZAxis.angleTo(uscZAxis), 0) || equaln(brZAxis.angleTo(uscZAxis), Math.PI);\r\n if (isInPositive) return \"正视图\";\r\n }\r\n return viewType;\r\n }\r\n\r\n /** 判断切割的是路径还是面 */\r\n private IsPathOrPlane(viewStr: ViewType | \"正视图\")\r\n {\r\n /** 放样路径的包围盒 */\r\n const sweepBoxInWCS = this.br.GetSweepPathInWCS().BoundingBox;\r\n // 前视图下没有Y,说明切割的就直接是路径\r\n if (viewStr === ViewType.Front)\r\n return equaln(sweepBoxInWCS.min.y, sweepBoxInWCS.max.y) ? \"路径\" : \"面\";\r\n // 左视图下没有X,说明切割的就直接是路径\r\n if (viewStr === ViewType.Left)\r\n return equaln(sweepBoxInWCS.min.x, sweepBoxInWCS.max.x) ? \"路径\" : \"面\";\r\n // 俯视图下没有Z,说明切割的就直接是路径\r\n if (viewStr === ViewType.Down)\r\n return equaln(sweepBoxInWCS.min.z, sweepBoxInWCS.max.z) ? \"路径\" : \"面\";\r\n return undefined;\r\n }\r\n\r\n /** 获取调整角度(用于处理放样角度带来的影响) */\r\n private GetAdjustAngle()\r\n {\r\n /** @todo 角度 < 0 或 角度 > 90 会有问题 */\r\n const sweepAngle = this.br.SweepAngle;\r\n /** 调整的角度 */\r\n let angle = sweepAngle;\r\n if (equaln(sweepAngle, Math.PI))\r\n angle = 0;\r\n else if (equaln(sweepAngle, -Math.PI / 2))\r\n angle = 0;\r\n else if (sweepAngle > Math.PI / 4)\r\n angle = sweepAngle - Math.PI / 2;\r\n return angle;\r\n }\r\n\r\n /** 统一板包围盒与路径包围盒一致 */\r\n private UnifyBrBoxAndPathBox()\r\n {\r\n const br = this.br;\r\n /** 调整的角度 */\r\n const adjustAngle = this.GetAdjustAngle();\r\n const sweepPathInWCS = br.GetSweepPathInWCS();\r\n // 处理旋转情况下,路径的包围盒不在正交平面内\r\n EntityManager.RotateEntity(sweepPathInWCS, -adjustAngle);\r\n const brBox = br.BoundingBox;\r\n const pathBox = sweepPathInWCS.BoundingBox;\r\n // 约束二者的包围盒\r\n if (!equaln(pathBox.max.x, pathBox.min.x))\r\n {\r\n brBox.max.x = pathBox.max.x;\r\n brBox.min.x = pathBox.min.x;\r\n }\r\n if (!equaln(pathBox.max.y, pathBox.min.y))\r\n {\r\n brBox.max.y = pathBox.max.y;\r\n brBox.min.y = pathBox.min.y;\r\n }\r\n if (!equaln(pathBox.max.z, pathBox.min.z))\r\n {\r\n brBox.max.z = pathBox.max.z;\r\n brBox.min.z = pathBox.min.z;\r\n }\r\n return brBox;\r\n }\r\n\r\n /** 平移路径到对应视图平面 */\r\n private MovePathToView(viewStr: ViewType | \"正视图\")\r\n {\r\n /** 放样路径(世界坐标系下的) */\r\n const sweepPathInWCS = this.br.GetSweepPathInWCS();\r\n /** 偏移向量 */\r\n const biasV = new Vector3(0, 0, 0);\r\n switch (viewStr)\r\n {\r\n case ViewType.Front:\r\n biasV.y = -sweepPathInWCS.BoundingBox.min.y;\r\n break;\r\n case ViewType.Left:\r\n biasV.x = -sweepPathInWCS.BoundingBox.min.x;\r\n break;\r\n case ViewType.Down:\r\n biasV.z = -sweepPathInWCS.BoundingBox.max.z;\r\n break;\r\n }\r\n // 路径-基点归零(在世界坐标系下)\r\n sweepPathInWCS.Move(biasV);\r\n return sweepPathInWCS;\r\n }\r\n\r\n /** 平移板包围盒到对应视图平面 */\r\n private MoveBrBoxToView(viewStr: ViewType | \"正视图\", brBox: Box3Ext)\r\n {\r\n // 板包围盒-基点归零(在世界坐标系下)\r\n const brBoxLines = BoxLine(brBox);\r\n const biasV = new Vector3(0, 0, 0);\r\n switch (viewStr)\r\n {\r\n case ViewType.Front:\r\n biasV.y = -brBox.min.y;\r\n break;\r\n case ViewType.Left:\r\n biasV.x = -brBox.min.x;\r\n break;\r\n case ViewType.Down:\r\n biasV.z = -brBox.max.z;\r\n break;\r\n }\r\n brBoxLines.forEach(e => e.Move(biasV));\r\n return brBoxLines;\r\n }\r\n\r\n /** 旋转到俯视图下(即XOY平面) */\r\n private RotateToXOY(sweepPathInWCS: Polyline, brBoxLines: Line[], ucsInv: Matrix4)\r\n {\r\n const splitPl = this.splitPl;\r\n // 修改放样路径的坐标系(有时会导致sweepPathInWCS的形状都发生改变,所以先注释了,其实大概率也用不上)\r\n // sweepPathInWCS.UpdateOCSTo(new Matrix4());\r\n // 包围盒\r\n const pathBoxPl = EntityManager.GetEnBoxPl(sweepPathInWCS);\r\n // 转换到俯视图下\r\n sweepPathInWCS.ApplyMatrix(ucsInv);\r\n pathBoxPl.ApplyMatrix(ucsInv);\r\n splitPl.ApplyMatrix(ucsInv);\r\n splitPl.UpdateOCSTo(new Matrix4());\r\n brBoxLines.forEach(e => e.ApplyMatrix(ucsInv));\r\n // 依角度调整,使得路径垂直于XOY平面\r\n this.AdjustForSweepAngle(sweepPathInWCS, brBoxLines, pathBoxPl);\r\n return pathBoxPl;\r\n }\r\n\r\n /** 修正放样角度带来的影响(比如求不到交点) */\r\n private AdjustForSweepAngle(sweepPathInWCS: Polyline, brBoxLines: Line[], pathBoxPl: Polyline)\r\n {\r\n const splitPl = this.splitPl;\r\n /** 调整的角度 */\r\n const adjustAngle = this.GetAdjustAngle();\r\n const pathOCSInv = sweepPathInWCS.OCSInv;\r\n const pathOCS = sweepPathInWCS.OCS;\r\n /** 逆旋转矩阵 */\r\n const invRotateMatrix = new Matrix4().makeRotationY(-adjustAngle);\r\n // 在Three默认矩阵左乘(作行变换),故越靠右的矩阵越先运算\r\n // 所以,这里的运算顺序是先pathOCSInv,再invRotateMatrix,最后再pathOCS\r\n // en.ApplyMatrix(mtx) = en.ApplyMatrix(pathOCSInv).ApplyMatrix(invRotateMatrix).ApplyMatrix(pathOCS)\r\n const mtx = pathOCS.clone().multiply(invRotateMatrix).multiply(pathOCSInv);\r\n sweepPathInWCS.ApplyMatrix(mtx);\r\n pathBoxPl.ApplyMatrix(mtx);\r\n splitPl.ApplyMatrix(mtx);\r\n brBoxLines.forEach(e => e.ApplyMatrix(mtx));\r\n }\r\n\r\n /** 对路径进行细化 */\r\n private Tessellate(sweepPathInWCS: Polyline, brBoxLines: Line[], isVerticalWithX: boolean)\r\n {\r\n const splitPl = this.splitPl;\r\n const sweepCusInWCS = sweepPathInWCS.Explode();\r\n const brBox = EntityManager.GetEntitysBox(brBoxLines);\r\n const ptsInbrBox: Vector3[] = [];\r\n for (const sweepCuInWCS of sweepCusInWCS)\r\n {\r\n if (sweepCuInWCS instanceof Arc)\r\n {\r\n const SPET = 20;\r\n if (isVerticalWithX)\r\n {\r\n const splitPlLen = splitPl.Length;\r\n const cuBox = sweepCuInWCS.BoundingBox;\r\n for (let dist = 0; dist < splitPlLen; dist += SPET)\r\n {\r\n const pt = splitPl.GetPointAtDistance(dist);\r\n if (pt.x > cuBox.min.x && pt.x < cuBox.max.x)\r\n {\r\n if (pt.y > brBox.min.y && pt.y < brBox.max.y)\r\n ptsInbrBox.push(pt);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n const splitPlLen = splitPl.Length;\r\n const cuBox = sweepCuInWCS.BoundingBox;\r\n for (let dist = 0; dist < splitPlLen; dist += SPET)\r\n {\r\n const pt = splitPl.GetPointAtDistance(dist);\r\n if (pt.x > brBox.min.x && pt.x < brBox.max.x)\r\n {\r\n if (pt.y > cuBox.min.y && pt.y < cuBox.max.y)\r\n ptsInbrBox.push(pt);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return ptsInbrBox;\r\n }\r\n\r\n /** 规范超出的部分 */\r\n private AdjustOverBox(sweepPathInWCS: Polyline, pathBoxPl: Polyline)\r\n {\r\n const pathBoxMax = { x: -Infinity, y: -Infinity };\r\n const pathBoxMin = { x: Infinity, y: Infinity };\r\n for (let param = 0; param < pathBoxPl.LineData.length; param++)\r\n {\r\n const pt = pathBoxPl.GetPointAtParam(param);\r\n pathBoxMax.x = Math.max(pathBoxMax.x, pt.x);\r\n pathBoxMax.y = Math.max(pathBoxMax.y, pt.y);\r\n pathBoxMin.x = Math.min(pathBoxMin.x, pt.x);\r\n pathBoxMin.y = Math.min(pathBoxMin.y, pt.y);\r\n }\r\n const pathMaxPt = new Vector3(pathBoxMax.x, pathBoxMax.y, 0);\r\n const pathMinPt = new Vector3(pathBoxMin.x, pathBoxMin.y, 0);\r\n const zLineMax = CurveManager.CreateZLine(pathMaxPt);\r\n const zLineMin = CurveManager.CreateZLine(pathMinPt);\r\n const inptMax = zLineMax.IntersectWith(sweepPathInWCS, IntersectOption.ExtendThis, 0.01)[0];\r\n const inptMin = zLineMin.IntersectWith(sweepPathInWCS, IntersectOption.ExtendThis, 0.01)[0];\r\n if (!inptMax || !inptMin)\r\n return [zLineMax, zLineMin];\r\n const paramMax = sweepPathInWCS.GetParamAtPoint(inptMax);\r\n const paramMin = sweepPathInWCS.GetParamAtPoint(inptMin);\r\n /** 展开后的路径 */\r\n const expandPath = CurveManager.CreateExpandPl(this.GetSweepPathInOCS());\r\n let maxPoint = expandPath.GetPointAtParam(paramMax);\r\n let minPoint = expandPath.GetPointAtParam(paramMin);\r\n if (maxPoint.x < minPoint.x) [maxPoint, minPoint] = [minPoint, maxPoint];\r\n const yLineMax = CurveManager.CreateYLine(maxPoint);\r\n const yLineMin = CurveManager.CreateYLine(minPoint);\r\n return [yLineMax, yLineMin];\r\n }\r\n\r\n /** 获取板件坐标系下的放样路径 */\r\n private GetSweepPathInOCS()\r\n {\r\n const br = this.br;\r\n /** 放样路径(世界坐标系下的) */\r\n const sweepPathInWCS = br.GetSweepPathInWCS();\r\n /** 放样路径(板件坐标系下的) */\r\n const sweepPathInOCS = sweepPathInWCS.Clone().ApplyMatrix(sweepPathInWCS.OCSInv);\r\n return sweepPathInOCS;\r\n }\r\n\r\n /** 获取板件坐标系下的放样路径并与板件的边对齐 */\r\n private GetSweepPathInOCSWithBr()\r\n {\r\n const br = this.br;\r\n /** 放样路径(世界坐标系下的) */\r\n const sweepPathInWCS = br.GetSweepPathInWCS();\r\n /** 放样路径(板件坐标系下的) */\r\n const sweepPathInOCS = sweepPathInWCS.Clone().ApplyMatrix(br.OCSInv);\r\n return sweepPathInOCS;\r\n }\r\n\r\n /** 求得的板包围盒的交点与盒内的顶点 */\r\n private GetPtsInbrBox(brBoxLines: Line[])\r\n {\r\n const splitPl = this.splitPl;\r\n const brBox = EntityManager.GetEntitysBox(brBoxLines);\r\n const inptsInbrBox: Vector3[] = [];\r\n // 求包围盒的交\r\n for (const brBoxLine of brBoxLines)\r\n {\r\n inptsInbrBox.push(...brBoxLine.IntersectWith(splitPl, IntersectOption.ExtendNone, 0.01));\r\n }\r\n // 包围盒内的顶点\r\n for (let i = 0; i < splitPl.LineData.length; i++)\r\n {\r\n const pt = splitPl.LineData[i].pt;\r\n if (pt.x > brBox.min.x && pt.x < brBox.max.x && pt.y > brBox.min.y && pt.y < brBox.max.y)\r\n {\r\n inptsInbrBox.push(splitPl.GetPointAtParam(i));\r\n }\r\n }\r\n return inptsInbrBox;\r\n }\r\n\r\n /** 切割路径 */\r\n SplitInPath(sweepPathInWCS: Polyline)\r\n {\r\n const splitPl = this.splitPl;\r\n // 求交\r\n const inptsInPath = sweepPathInWCS.IntersectWith(splitPl, IntersectOption.ExtendNone);\r\n /** 新刀 */\r\n const newSplitPls: Polyline[] = [];\r\n /** 展开后的路径 */\r\n const expandPath = CurveManager.CreateExpandPl(this.GetSweepPathInOCSWithBr());\r\n this.ToSplitPosition(expandPath);\r\n // 生成刀\r\n for (const inptInPath of inptsInPath)\r\n {\r\n const param = sweepPathInWCS.GetParamAtPoint(inptInPath);\r\n const basePoint = expandPath.GetPointAtParam(param);\r\n const newSplitPl = CurveManager.CreatePolyline([new Vector2(basePoint.x, basePoint.y - 1000), new Vector2(basePoint.x, basePoint.y + 1000)]);\r\n newSplitPls.push(newSplitPl);\r\n }\r\n return this.SplitBrByKnifes(newSplitPls);\r\n }\r\n\r\n /** 获取原始位置与切割位置的变换信息 */\r\n private GetPositionData()\r\n {\r\n const br = this.br;\r\n /** 放样路径的旋转角度 */\r\n const sweepAngle = br.SweepAngle;\r\n /** 旋转矩阵 */\r\n const rotateMatrix = new Matrix4().makeRotationZ(sweepAngle);\r\n /** 逆旋转矩阵 */\r\n const invRotateMatrix = new Matrix4().makeRotationZ(-sweepAngle);\r\n /** 板轮廓(肉) */\r\n const brContour = br.ContourCurve.Clone() as Polyline;\r\n brContour.ApplyMatrix(invRotateMatrix);\r\n const biasV = new Vector3(-brContour.BoundingBox.min.x, 0, 0);\r\n const biasV2 = new Vector3(brContour.BoundingBox.min.x, 0, 0);\r\n brContour.ApplyMatrix(rotateMatrix);\r\n return { to: { m: invRotateMatrix, v: biasV }, re: { m: rotateMatrix, v: biasV2 } };\r\n }\r\n\r\n /** 旋转平移到切割位置 */\r\n private ToSplitPosition(pl: Polyline | Polyline[])\r\n {\r\n const { to, re } = this.GetPositionData();\r\n if (pl instanceof Polyline)\r\n {\r\n pl.ApplyMatrix(to.m);\r\n pl.Move(to.v);\r\n }\r\n else\r\n {\r\n pl = pl.map(e =>\r\n {\r\n e.ApplyMatrix(to.m);\r\n e.Move(to.v);\r\n return e;\r\n });\r\n }\r\n }\r\n\r\n /** 平移旋转到原始位置 */\r\n private ReSplitPosition(pl: Polyline | Polyline[])\r\n {\r\n const { to, re } = this.GetPositionData();\r\n if (pl instanceof Polyline)\r\n {\r\n pl.Move(re.v);\r\n pl.ApplyMatrix(re.m);\r\n }\r\n else\r\n {\r\n pl = pl.map(e =>\r\n {\r\n e.Move(re.v);\r\n e.ApplyMatrix(re.m);\r\n return e;\r\n });\r\n }\r\n }\r\n\r\n /** 用刀去切割板(包括轮廓与路径) */\r\n private SplitBrByKnifes(knifes: Polyline[])\r\n {\r\n const br = this.br;\r\n /** 放样路径(板件坐标系下的) */\r\n const sweepPathInOCS = this.GetSweepPathInOCS();\r\n /** 板轮廓(肉) */\r\n const brContour = br.ContourCurve.Clone() as Polyline;\r\n // 旋转平移到切割位置\r\n this.ToSplitPosition(brContour);\r\n // 平移旋转到原始位置\r\n this.ReSplitPosition(brContour);\r\n this.ReSplitPosition(knifes);\r\n // 切割板\r\n const cus = SplitPolyline(brContour, knifes, true);\r\n const contours = [];\r\n // 旋转平移到切割位置\r\n for (const cu of cus)\r\n {\r\n const contour = cu.Clone();\r\n this.ToSplitPosition(contour);\r\n contours.push(contour);\r\n }\r\n // 修正路径起点不为0的情况\r\n const firstPt = sweepPathInOCS.LineData[0].pt.clone();\r\n sweepPathInOCS.Move(AsVector3(firstPt.clone().negate()));\r\n /* ---- [2] 获取正确的放样路径集 ---- */\r\n const [sweepPaths, contourBiases] = this.GetSweepPaths(br, contours, sweepPathInOCS);\r\n return [cus, sweepPaths, contourBiases] as [Polyline[], Polyline[], { x: number; y: number; }[]];\r\n }\r\n\r\n /**\r\n * @todo 这个是旧方案,先临时用一用,后面再重构\r\n * 针对圆弧板进行切割\r\n * @param br 被切割的板\r\n * @param clipPls 用于切割的线\r\n * @问 圆弧板的切割与普通板有何区别?\r\n * @答 切割位置应变长(因为板弯曲了,而板轮廓没有),且放样路径也应被切割\r\n * @着手点 [1]修正板轮廓的切割位置 [2]获取正确的放样路径集\r\n * @修正位置 通过param进行逆映射,从而得到正确的切割位置\r\n * @获取路径 首先要明确一件事,路径需要改变,是因为切割后的板的基点(aabb中X最小的点)可能发生变化\r\n * 所以,我们需要根据新的基点生成新的路径,新基点沿路径方向与旧基点的差值(恒正)作为生成新路径的切割线(垂直X轴)\r\n * 若切割线与路径平行,则新旧基点一致,无需修改\r\n */\r\n private SplitBySweep(br: Board, clipPls: Polyline[])\r\n {\r\n /* ---- 前置处理:获取实际的放样路径 ---- */\r\n const SP2OP = (path: Polyline) => ArcBoardBuild.OffsetPolyline(path, -br.Thickness);\r\n const path = br.GetSweepPath();\r\n /** 路径 */\r\n const sweepPath = br.SweepVisibleFace === FaceDirection.Front ? SP2OP(path) : path;\r\n // 修正路径起点不为0的情况\r\n const firstPt = sweepPath.LineData[0].pt.clone();\r\n sweepPath.Move(AsVector3(firstPt.clone().negate()));\r\n /* ---- [1] 修正板轮廓的切割位置 ---- */\r\n /** 新的刀 */\r\n const newSplitPls = this.GetSplitPls(br, clipPls, sweepPath);\r\n /** 板轮廓(肉) */\r\n const brContour = br.ContourCurve.Clone() as Polyline;\r\n const cus = SplitPolyline(brContour, newSplitPls, true);\r\n /* ---- [2] 获取正确的放样路径集 ---- */\r\n /** 放样路径的旋转角度 */\r\n const sweepAngle = br.SweepAngle;\r\n /** 逆旋转矩阵 */\r\n const invRotateMatrix = new Matrix4().makeRotationZ(-sweepAngle);\r\n const contours: Polyline[] = [];\r\n for (const cu of cus)\r\n {\r\n const contour = cu.Clone();\r\n contour.ApplyMatrix(invRotateMatrix);\r\n contours.push(contour);\r\n }\r\n const [sweepPaths, contourBiases] = this.GetSweepPaths(br, contours, sweepPath);\r\n return [cus, sweepPaths, contourBiases] as [Polyline[], Polyline[], { x: number; y: number; }[]];;\r\n }\r\n\r\n /** 获得新的刀(多段线) */\r\n private GetSplitPls(br: Board, splitPls: Polyline[], sweepPath: Polyline)\r\n {\r\n /** 新的刀 */\r\n const newSplitPls: Polyline[] = [];\r\n /* ---- [2] 旋转:把肉和路径旋转负的放样角度 ---- */\r\n /** 放样角度 */\r\n const sweepAngle = br.SweepAngle;\r\n const rotateMatrix = new Matrix4().makeRotationZ(sweepAngle);\r\n const invRotateMatrix = new Matrix4().makeRotationZ(-sweepAngle);\r\n /* ---- [3] 展开:把路径展开 ---- */\r\n const expandPath = CurveManager.CreateExpandPl(sweepPath);\r\n /* ---- [4] 范围:生成路径X轴的包围线,并把肉包围盒收缩至包围线内 ---- */\r\n /** 包围线 */\r\n const pathBox = sweepPath.BoundingBox;\r\n const pathArcs: Arc[] = [];\r\n const cus = sweepPath.Explode();\r\n for (const cu of cus)\r\n {\r\n if (cu instanceof Arc)\r\n {\r\n pathArcs.push(cu);\r\n }\r\n }\r\n const xInPathByBox = pathBox.max.clone().sub(pathBox.min).x;\r\n const diffLen = expandPath.Length - xInPathByBox;\r\n const GetBoxContour = (box: Box3Ext, diffLen?: number) =>\r\n {\r\n const max = box.max.sub(box.min);\r\n const min = box.min.sub(box.min);\r\n if (diffLen)\r\n {\r\n max.x -= diffLen * Math.cos(sweepAngle);\r\n max.y -= diffLen * Math.sin(sweepAngle);\r\n }\r\n const pl = new Polyline([\r\n { pt: new Vector2(min.x, min.y), bul: 0 },\r\n { pt: new Vector2(max.x, min.y), bul: 0 },\r\n { pt: new Vector2(max.x, max.y), bul: 0 },\r\n { pt: new Vector2(min.x, max.y), bul: 0 },\r\n { pt: new Vector2(min.x, min.y), bul: 0 },\r\n ]);\r\n return pl;\r\n };\r\n /** 包围盒 */\r\n const brBoxContour = GetBoxContour(br.ContourCurve.BoundingBoxInOCS, diffLen);\r\n brBoxContour.ApplyMatrix(invRotateMatrix);\r\n const pathMin = pathBox.min.clone();\r\n pathMin.y = 0;\r\n brBoxContour.Move(pathMin);\r\n /* ---- [5] 求交:求得刀在包围盒和包围线上的交点 ---- */\r\n for (const splitPl of splitPls)\r\n {\r\n splitPl.ApplyMatrix(invRotateMatrix);\r\n /** 在包围线内的顶点 */\r\n const pts: Vector3[] = [];\r\n for (let i = 0; i < splitPl.LineData.length; i++)\r\n {\r\n const pt = AsVector3(splitPl.GetPointAtParam(i));\r\n if (pathBox.min.x - 1e-3 < pt.x && pt.x < pathBox.max.x + 1e-3)\r\n pts.push(pt);\r\n // 不是首尾点的顶点也算进去\r\n else if (!equalv3(pt, splitPl.StartPoint) && !equalv3(pt, splitPl.EndPoint))\r\n pts.push(pt);\r\n }\r\n /** 在包围盒的交点 */\r\n const ipts = brBoxContour.IntersectWith(splitPl, IntersectOption.ExtendNone);\r\n ipts.push(...pts);\r\n // 紧密贴合\r\n for (const pathArc of pathArcs)\r\n {\r\n const MAX_SPLIT_COUNT = 36;\r\n const SPLIT_RATE = 0.5;\r\n const splitCount = Math.min(GetArcDrawCount(pathArc) * SPLIT_RATE, MAX_SPLIT_COUNT);\r\n const divDist = pathArc.Length / splitCount;\r\n for (let i = 0; i < splitCount; i++)\r\n {\r\n const pInArc = pathArc.GetPointAtDistance(i * divDist);\r\n const vertical = CurveManager.CreateYLine(pInArc);\r\n const iptsInArc = splitPl.IntersectWith(vertical, IntersectOption.ExtendArg);\r\n for (const iptInArc of iptsInArc)\r\n {\r\n ipts.push(iptInArc);\r\n }\r\n }\r\n }\r\n /** 用于连成新的刀的点 */\r\n const splitPts: { index: number; value: Vector3; }[] = [];\r\n for (const ipt of ipts)\r\n {\r\n const index = splitPl.GetParamAtPoint(ipt);\r\n /* ---- [6] 垂直:交点作垂线垂直映射到路径上 ---- */\r\n const vertical2 = CurveManager.CreateYLine(ipt);\r\n const ipts2 = sweepPath.IntersectWith(vertical2, IntersectOption.ExtendArg);\r\n // 对于多值函数的临时处理(只去最后一次的值,强行变成单射)\r\n const ipt2 = ipts2[ipts2.length - 1];\r\n if (ipt2)\r\n {\r\n /* ---- [7] 长度:根据点在路径上的长度位置,映射到展开后的路径上 ---- */\r\n const param = sweepPath.GetParamAtPoint(ipt2);\r\n const ept = expandPath.GetPointAtParam(param);\r\n /* ---- [8] 水平:根据展开后的点与展开前的距离差,进行水平偏移 ---- */\r\n const biasPt = ipt.clone();\r\n const len = ept.x - ipt.x;\r\n biasPt.x += len;\r\n splitPts.push({ index: index, value: biasPt });\r\n // 超出则添加水平偏移点\r\n if (ipt2.x > pathBox.max.x - 1e-3)\r\n {\r\n const otherPt = biasPt.clone();\r\n otherPt.x += 1000;\r\n const line = splitPl.GetCurveAtParam(index);\r\n // 根据方向判断index的值\r\n const dir = line.EndPoint.x - line.StartPoint.x;\r\n if (dir > 0)\r\n {\r\n if (equalv3(line.EndPoint, splitPl.EndPoint))\r\n splitPts.push({ index: index + 1, value: otherPt });\r\n }\r\n else\r\n {\r\n if (equalv3(line.StartPoint, splitPl.StartPoint))\r\n splitPts.push({ index: index - 1, value: otherPt });\r\n }\r\n }\r\n // 镜像情况(todo定稿后可以与上面的if何在一起)\r\n else if (ipt2.x < pathBox.min.x + 1e-3)\r\n {\r\n const otherPt = biasPt.clone();\r\n otherPt.x -= 1000;\r\n const line = splitPl.GetCurveAtParam(index);\r\n // 根据方向判断index的值\r\n const dir = line.EndPoint.x - line.StartPoint.x;\r\n if (dir < 0)\r\n {\r\n if (equalv3(line.EndPoint, splitPl.EndPoint))\r\n splitPts.push({ index: index + 1, value: otherPt });\r\n }\r\n else\r\n {\r\n if (equalv3(line.StartPoint, splitPl.StartPoint))\r\n splitPts.push({ index: index - 1, value: otherPt });\r\n }\r\n }\r\n }\r\n else\r\n splitPts.push({ index: index, value: ipt });\r\n }\r\n /* ---- [9] 连线:将偏移后的点连成线(就是新的刀) ---- */\r\n const arr = splitPts.sort((a, b) => a.index - b.index);\r\n const newSplitPl = CurveManager.CreatePolyline(arr.map(e => AsVector2(e.value)));\r\n newSplitPl.ApplyMatrix(rotateMatrix);\r\n newSplitPls.push(newSplitPl);\r\n }\r\n return newSplitPls;\r\n }\r\n\r\n /** 获取被切割后的放样路径集 */\r\n private GetSweepPaths(br: Board, contours: Polyline[], sweepPath: Polyline): [Polyline[], { x: number; y: number; }[]]\r\n {\r\n /** 切割后的放样曲线 */\r\n const sweepPaths: Polyline[] = [];\r\n /** 用于修正轮廓位置的偏移值 */\r\n const contourBiases: { x: number, y: number; }[] = [];\r\n /** 放样角度 */\r\n const sweepAngle = br.SweepAngle;\r\n const firstPt = sweepPath.LineData[0].pt.clone();\r\n sweepPath.Move(AsVector3(firstPt));\r\n /** 展开的点映射成弯曲的点 */\r\n const FlatToCurved = (ipt: Vector3) =>\r\n {\r\n const dist = ipt.x;\r\n const p = sweepPath.GetPointAtDistance(dist);\r\n const param = sweepPath.GetParamAtDist(dist);\r\n // 这里多返回一些,可能会用到\r\n return [p, param, dist] as [Vector3, number, number];\r\n };\r\n const OP2SP = (offsetPath: Polyline) => ArcBoardBuild.OffsetPolyline(offsetPath, br.Thickness);\r\n /** 限制向量的最大值(用于修复可能产生的精度问题,如首尾相连时) */\r\n const LimitMaxInVector3 = (vec: Vector3, max: { x?: number, y?: number, z?: number; }) =>\r\n {\r\n const v = vec.clone();\r\n max.x !== undefined && (v.x = Math.min(v.x, max.x));\r\n max.y !== undefined && (v.y = Math.min(v.y, max.y));\r\n max.z !== undefined && (v.z = Math.min(v.z, max.z));\r\n return v;\r\n };\r\n for (const contour of contours)\r\n {\r\n // 切割路径\r\n const cu = contour.Clone();\r\n const box = cu.BoundingBox;\r\n const [pA, paramA, distA] = FlatToCurved(box.min);\r\n const [pB, paramB, distB] = FlatToCurved(LimitMaxInVector3(box.max, { x: sweepPath.Length }));\r\n const sweepPathCopy = sweepPath.Clone();\r\n const partPath = CurveManager.Get_Pl_InPtAtoPtB(sweepPathCopy, pA, pB);\r\n // 修正轮廓\r\n let baseLen = pA.x - box.min.x - firstPt.x;\r\n const biasX = Math.cos(sweepAngle) * baseLen;\r\n const biasY = Math.sin(sweepAngle) * baseLen;\r\n contourBiases.push({ x: biasX, y: biasY });\r\n // 修正路径(保证放样路径都是从(0,0)开始),todo也不一定是(0,0)因为见光面的原因\r\n const bias = -partPath.LineData[0].pt.x + firstPt.x;\r\n partPath.LineData.forEach(e => { e.pt.x += bias; });\r\n const factPath = br.SweepVisibleFace === FaceDirection.Front ? OP2SP(partPath) : partPath;\r\n sweepPaths.push(factPath);\r\n }\r\n return [sweepPaths, contourBiases];\r\n };\r\n}\r\n\r\n/** 视图类型 */\r\nexport enum ViewType\r\n{\r\n Normal = \"正视图\",\r\n Front = \"前视图\",\r\n Left = \"左视图\",\r\n Right = \"右视图\",\r\n Down = \"俯视图\",\r\n Unknown = \"未知视图\",\r\n}\r\n\r\n/** 视图管理器 */\r\nexport class ViewManager\r\n{\r\n /** 获取视图对应的矩阵 */\r\n static GetViewMatrix(viewType: ViewType)\r\n {\r\n if (viewType === ViewType.Front)\r\n {\r\n const frontMatrix = new Matrix4();\r\n frontMatrix.elements = [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1];\r\n return frontMatrix;\r\n }\r\n if (viewType === ViewType.Left)\r\n {\r\n const leftMatrix = new Matrix4();\r\n leftMatrix.elements = [0, -1, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0, 0, 0, 1];\r\n return leftMatrix;\r\n }\r\n if (viewType === ViewType.Down)\r\n {\r\n const downMatrix = new Matrix4();\r\n downMatrix.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\r\n return downMatrix;\r\n }\r\n if (viewType === ViewType.Right)\r\n {\r\n const rightMatrix = new Matrix4();\r\n rightMatrix.elements = [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1];\r\n return rightMatrix;\r\n }\r\n return new Matrix4();\r\n };\r\n\r\n /** 判断矩阵位于哪个视图 */\r\n static MatrixIsView(m: Matrix4)\r\n {\r\n const frontMatrix = this.GetViewMatrix(ViewType.Front);\r\n const leftMatrix = this.GetViewMatrix(ViewType.Left);\r\n const downMatrix = this.GetViewMatrix(ViewType.Down);\r\n const rightMatrix = this.GetViewMatrix(ViewType.Right);\r\n const EqualnMatrix = (m1: Matrix4, m2: Matrix4) =>\r\n {\r\n for (let i = 0; i < m1.elements.length; i++)\r\n {\r\n const e1 = m1.elements[i];\r\n const e2 = m2.elements[i];\r\n if (!equaln(e1, e2))\r\n return false;\r\n }\r\n return true;\r\n };\r\n const isFrontView = EqualnMatrix(m, frontMatrix);\r\n const isLeftView = EqualnMatrix(m, leftMatrix);\r\n const isDownView = EqualnMatrix(m, downMatrix);\r\n const isRightView = EqualnMatrix(m, rightMatrix);\r\n return isFrontView ? ViewType.Front : isLeftView ? ViewType.Left : isDownView ? ViewType.Down : isRightView ? ViewType.Right : ViewType.Unknown;\r\n };\r\n}\r\n\r\n/** 线段管理器 */\r\nexport class CurveManager\r\n{\r\n /** X轴的平行线 */\r\n static CreateXLine = (p: Vector3) => new Line(new Vector3(p.x - 1000, p.y, p.z), new Vector3(p.x + 1000, p.y, p.z));\r\n /** Y轴的平行线 */\r\n static CreateYLine = (p: Vector3) => new Line(new Vector3(p.x, p.y - 1000, p.z), new Vector3(p.x, p.y + 1000, p.z));\r\n /** Z轴的平行线 */\r\n static CreateZLine = (p: Vector3) => new Line(new Vector3(p.x, p.y, p.z - 1000), new Vector3(p.x, p.y, p.z + 1000));\r\n /** 通过点集生成多段线 */\r\n static CreatePolyline = (ps: Vector2[]) => new Polyline(ps.map(p => { return { pt: p, bul: 0 } as PolylineProps; }));\r\n /* 多段线展开直线(类型依旧是多段线) */\r\n static CreateExpandPl(pl: Polyline)\r\n {\r\n const cus = pl.Explode();\r\n let len = 0;\r\n const ps: Vector2[] = [];\r\n for (const cu of cus)\r\n {\r\n ps.push(new Vector2(len, 0));\r\n len += cu.Length;\r\n }\r\n ps.push(new Vector2(len, 0));\r\n return this.CreatePolyline(ps).ApplyMatrix(pl.OCS);\r\n };\r\n /** 绘制矩阵所表示的坐标系 */\r\n static CreateAxis(m: Matrix4)\r\n {\r\n const len = 100;\r\n const xArrow = new Line(new Vector3(0, 0, 0), new Vector3(len, 0, 0));\r\n const yArrow = new Line(new Vector3(0, 0, 0), new Vector3(0, len, 0));\r\n const zArrow = new Line(new Vector3(0, 0, 0), new Vector3(0, 0, len));\r\n xArrow.ColorIndex = 1;\r\n yArrow.ColorIndex = 3;\r\n zArrow.ColorIndex = 5;\r\n xArrow.ApplyMatrix(m);\r\n yArrow.ApplyMatrix(m);\r\n zArrow.ApplyMatrix(m);\r\n return [xArrow, yArrow, zArrow];\r\n };\r\n /** 点集转线段簇 */\r\n static PtsToLines(pts: Vector3[]): Line[]\r\n {\r\n const lines: Line[] = [];\r\n for (let i = 1; i < pts.length; i++)\r\n {\r\n const p1 = pts[i - 1];\r\n const p2 = pts[i];\r\n const line = new Line(p1, p2);\r\n lines.push(line);\r\n }\r\n return lines;\r\n };\r\n /** 线段簇转多段线 */\r\n static LinesToPl(lines: Line[]): Polyline\r\n {\r\n const pl = new Polyline();\r\n // 确保坐标系不要沿着直线方向\r\n const lines2: Line[] = [];\r\n if (lines.length === 1)\r\n {\r\n lines2.push(lines[0]);\r\n const p1 = lines[0].EndPoint;\r\n const p2 = p1.clone().add(p1.clone().normalize().multiplyScalar(1));\r\n const line = new Line(p1, p2);\r\n lines2.push(line);\r\n pl.OCS = ComputerCurvesNormalOCS(lines2);\r\n }\r\n else\r\n {\r\n pl.OCS = ComputerCurvesNormalOCS(lines);\r\n }\r\n // 转成多段线\r\n pl.ColorIndex = lines[0].ColorIndex;\r\n for (const splitLine of lines)\r\n {\r\n pl.Join(splitLine, false, 0.01);\r\n }\r\n return pl;\r\n };\r\n /** 获取pA-pB之间的曲线 */\r\n static Get_Pl_InPtAtoPtB(pl: Polyline, pA: Vector3, pB: Vector3)\r\n {\r\n // 确保pA在pB前面\r\n if (pl.GetParamAtPoint(pA) > pl.GetParamAtPoint(pB))\r\n {\r\n const temp = pA;\r\n pA = pB;\r\n pB = temp;\r\n }\r\n const paramA = pl.GetParamAtPoint(pA);\r\n const pls = pl.GetSplitCurves(paramA);\r\n pl = pls[1] || pls[0];\r\n const paramB = pl.GetParamAtPoint(pB);\r\n return pl.GetSplitCurves(paramB)[0];\r\n };\r\n}\r\n\r\n/** 实体管理器 */\r\nclass EntityManager\r\n{\r\n /** 旋转实体 */\r\n static RotateEntity(en: Entity, angle: number)\r\n {\r\n const oldOCS = en.OCS;\r\n const rotateMatrix = new Matrix4().makeRotationY(angle);\r\n en.ApplyMatrix(en.OCSInv).ApplyMatrix(rotateMatrix).ApplyMatrix(oldOCS);\r\n };\r\n /** 求实体集的包围盒 */\r\n static GetEntitysBox(ens: Entity[])\r\n {\r\n const box = new Box3;\r\n for (const en of ens)\r\n box.union(en.BoundingBox);\r\n return box;\r\n };\r\n /** 获取实体的包围盒线 */\r\n static GetEnBoxPl(en: Entity)\r\n {\r\n const box = en.BoundingBox;\r\n const boxPl = new Polyline([\r\n {\r\n pt: new Vector2(box.min.x, box.min.y),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(box.max.x, box.min.y),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(box.max.x, box.max.y),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(box.min.x, box.max.y),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(box.min.x, box.min.y),\r\n bul: 0\r\n },\r\n ]);\r\n boxPl.Z = box.min.z;\r\n return boxPl;\r\n };\r\n}\r\n","//为了避免Core对UI库的依赖,导致测试用例失败,导致外部项目引用失败,我们分离了这个函数\r\n\r\nimport { InteractionLog, LogType } from \"./Log\";\r\n\r\nexport 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\r\n\r\ninterface IToasterShowEntityErrorOption\r\n{\r\n intent: Intent,\r\n msg: string,\r\n timeout: number;\r\n ent: any;\r\n}\r\n\r\nexport const ToasterShowEntityMsgInjectFunctions: ((option: IToasterShowEntityErrorOption) => void)[] = [];\r\nexport function ToasterShowEntityMsg(option: {\r\n intent: Intent,\r\n msg: string,\r\n timeout: number;\r\n ent: any;\r\n})\r\n{\r\n for (let f of ToasterShowEntityMsgInjectFunctions)\r\n f(option);\r\n\r\n let logMsgs = [{ msg: option.msg }] as any[];\r\n if (option.ent)\r\n logMsgs.push({ msg: \"点击查看\", entity: Array.isArray(option.ent) ? option.ent : [option.ent] });\r\n InteractionLog(logMsgs, LogType.Warning);\r\n}\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","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\nimport { GangDrillType } from './CylinderHole';\r\n\r\n@Factory\r\nexport abstract 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 protected allowHoleAtBoardEdge: boolean = false; //允许大孔面在板边缘\r\n protected type: GangDrillType = GangDrillType.Pxl;\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._Height !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Height = v;\r\n this.Update();\r\n }\r\n }\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 get AllowPxl()\r\n {\r\n return this.allowHoleAtBoardEdge;\r\n }\r\n set AllowPxl(v: boolean)\r\n {\r\n if (this.allowHoleAtBoardEdge !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.allowHoleAtBoardEdge = v;\r\n }\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 > 5)\r\n {\r\n this.OtherHalfTongKong = file.ReadSoftObjectId();\r\n }\r\n if (ver > 6)\r\n {\r\n this.allowHoleAtBoardEdge = file.ReadBool();\r\n }\r\n else\r\n {\r\n this.allowHoleAtBoardEdge = false;\r\n }\r\n if (ver > 8)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(9);\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 file.WriteBool(this.allowHoleAtBoardEdge);\r\n\r\n // ver9\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n}\r\n","import { BufferGeometry, CylinderBufferGeometry, Float32BufferAttribute, FrontSide, 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 //同侧面 常规单头连杆、偏心轮、预埋件三合一排钻(原先是)是双头三合一\r\n private _SameSideHole: boolean = false;\r\n private _GoodsId: string = \"\";\r\n private _GoodsSn: string = \"\";\r\n\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\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\r\n //同侧面排钻\r\n get SameSideHole(): boolean\r\n {\r\n return this._SameSideHole;\r\n }\r\n set SameSideHole(value: boolean)\r\n {\r\n if (this._SameSideHole !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._SameSideHole = value;\r\n }\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 get GoodsId(): string\r\n {\r\n return this._GoodsId;\r\n }\r\n set GoodsId(value: string)\r\n {\r\n if (this._GoodsId !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._GoodsId = value;\r\n }\r\n }\r\n\r\n get GoodsSn(): string\r\n {\r\n return this._GoodsSn;\r\n }\r\n set GoodsSn(value: string)\r\n {\r\n if (this._GoodsSn !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._GoodsSn = value;\r\n }\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\r\n InitDrawObject(renderType: RenderType)\r\n {\r\n return this.GetObject3DByRenderType(renderType);\r\n }\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 if (renderType === RenderType.CustomNumber || renderType === RenderType.ModelGroove || renderType === RenderType.Edge)\r\n return;//不绘制了\r\n // return new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex, FrontSide, true));\r\n else\r\n return new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n }\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\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 if (type === RenderType.CustomNumber || type === RenderType.ModelGroove)\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex, FrontSide, true);\r\n else\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n\r\n ClearDraw(): this\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 return super.ClearDraw();\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 if (ver > 5)\r\n this.SameSideHole = file.Read();\r\n\r\n if (ver > 6)\r\n {\r\n this.GoodsId = file.Read();\r\n this.GoodsSn = file.Read();\r\n }\r\n }\r\n\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(7);//ver\r\n file.Write(this._Radius);\r\n file.Write(this.type);\r\n\r\n file.Write(this.SameSideHole);\r\n file.Write(this.GoodsId);\r\n file.Write(this.GoodsSn);\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 { 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 { Box3Ext } from \"../../Geometry/Box\";\r\nimport { ZAxis, isParallelTo, rotatePoint } from \"../../Geometry/GeUtils\";\r\nimport { DrillType } from \"./DrillType\";\r\n\r\nexport const SCALAR = 0.1;\r\n\r\nexport function CyHoleInBoard(cys: CylinderHole[], br: Board, ocs: Matrix4, checkAll = false)\r\n{\r\n if (!checkAll && 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 Box3Ext();\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, 1e-5))\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, 1e-4).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 {\r\n if (pxl.AllowPxl)\r\n return outline.IntersectWith(cir, 0, 1e-4).length <= 1 && !outline.PtInCurve(center);\r\n else\r\n return outline.IntersectWith(cir, 0, 1e-4).length > 0 || !outline.PtInCurve(center);\r\n }\r\n else\r\n return outline.IntersectWith(cir, 0, 1e-4).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, 1e-4).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, 1e-4).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, 1e-4).length !== 1 || l2.IntersectWith(outline, 0, 1e-4).length !== 1)\r\n return false;\r\n }\r\n\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * 板的排钻 <上下左右>\r\n */\r\nexport interface IBoardRectHoleType\r\n{\r\n up: string;\r\n down: string;\r\n left: string;\r\n right: string;\r\n}\r\n\r\n/**分析上下左右排钻 */\r\nexport function ParseBoardRectHoleType(br: Board, outBrRectHoleType: IBoardRectHoleType = {} as any)\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.GetFirstDeriv(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 outBrRectHoleType.down = hightDrill[i];\r\n else\r\n outBrRectHoleType.up = hightDrill[i];\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n outBrRectHoleType.right = hightDrill[i];\r\n else\r\n outBrRectHoleType.left = hightDrill[i];\r\n }\r\n }\r\n\r\n return outBrRectHoleType;\r\n}\r\nexport function ExtureHoleInBoard(holes: ExtrudeHole[], board: Board, ocs: Matrix4)\r\n{\r\n //TODO:自定义排钻判断\r\n return true;\r\n}\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 SetBrHighHoleTypeFromRectHoleType(br: Board, brRectHoleType: IBoardRectHoleType)\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.GetFirstDeriv(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(brRectHoleType.down);\r\n else\r\n highDrill.push(brRectHoleType.up);\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n highDrill.push(brRectHoleType.right);\r\n else\r\n highDrill.push(brRectHoleType.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","export interface FontStyleInfoOption\r\n{\r\n height: number; //文本高度\r\n fontType: FontType; //字体类型(宋体 黑体)\r\n widthFactor: number; //宽度因子\r\n}\r\n\r\nexport enum FontType\r\n{\r\n YaHei = \"yahei\",\r\n SongTi = \"songti\",\r\n KaiTi = \"KaiTi\",\r\n FangSong = \"FangSong\",\r\n LiShu = \"LiShu\",\r\n HeiTi = \"HeiTi\",\r\n HuaWenLiShu = \"HuaWenLiShu\",\r\n HuaWenXingKai = \"HuaWenXingKai\",\r\n}\r\n\r\nexport const FontTypeOption = [\r\n { label: \"宋体\", value: FontType.SongTi },\r\n { label: \"雅黑\", value: FontType.YaHei },\r\n { label: \"楷体\", value: FontType.KaiTi },\r\n { label: \"仿宋\", value: FontType.FangSong },\r\n { label: \"隶书\", value: FontType.LiShu },\r\n { label: \"黑体\", value: FontType.HeiTi },\r\n { label: \"华文隶书\", value: FontType.HuaWenLiShu },\r\n { label: \"华文行楷\", value: FontType.HuaWenXingKai }\r\n];\r\n","export enum FindModifyStyle\r\n{\r\n FuzzyQuery = 0,//模糊匹配\r\n PreciseQuery = 1, //精确匹配\r\n}\r\n","import { FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { BoardOpenDir, ComposingType, LinesType } from \"../../DatabaseServices/Entity/BoardInterface\";\r\nimport { FindModifyStyle } from \"../Components/Board/BoardFindInterface\";\r\nimport { IBaseOption } from \"./OptionInterface/IOptionInterface\";\r\n\r\nexport const DRILL_KEYS = [\"downDrill\", \"rightDrill\", \"upDrill\", \"leftDrill\"]; //这个顺序不能变\r\nexport const SEAL_KEYS = [EBoardKeyList.UpSealed, EBoardKeyList.DownSealed, EBoardKeyList.RightSealed, EBoardKeyList.LeftSealed];\r\nexport const EDGEREMARK_KEYS = [\"edgeRemarkUp\", \"edgeRemarkDown\", \"edgeRemarkLeft\", \"edgeRemarkRight\"];\r\n\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 hardwareName: 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.OpenDir]: BoardOpenDir;\r\n [EBoardKeyList.UpSealed]: string;\r\n [EBoardKeyList.DownSealed]: string;\r\n [EBoardKeyList.LeftSealed]: string;\r\n [EBoardKeyList.RightSealed]: string;\r\n hardwareDoorName: string;\r\n highDrill: string[];\r\n upDownDrill: [boolean, boolean];\r\n isClose: boolean;\r\n remarks: [string, string][];\r\n query: FindModifyStyle;\r\n extraRemarks: [string, string][];\r\n isChaidan: boolean;\r\n [EBoardKeyList.KnifeRad]: string;\r\n edgeRemarkUp: string; //板边备注上下左右\r\n edgeRemarkDown: string;\r\n edgeRemarkLeft: string;\r\n edgeRemarkRight: string;\r\n [EBoardKeyList.SpliteHeight]: string;\r\n [EBoardKeyList.SpliteWidth]: string;\r\n [EBoardKeyList.SpliteThickness]: string;\r\n appendRemark: [string, string, number][];\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 useCurve: boolean;\r\n useText: boolean;\r\n noUseBr: boolean;\r\n noUseHwd: boolean;\r\n [EBoardKeyList.RoomName]: boolean;\r\n [EBoardKeyList.CabinetName]: boolean;\r\n brName: boolean;\r\n hardwareName: 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 addRemarks: boolean;\r\n [EBoardKeyList.ComposingFace]: boolean;\r\n [EBoardKeyList.OpenDir]: 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 edgeRemarkUp: boolean;\r\n edgeRemarkDown: boolean;\r\n edgeRemarkLeft: boolean;\r\n edgeRemarkRight: boolean;\r\n [EBoardKeyList.SpliteHeight]: boolean;\r\n [EBoardKeyList.SpliteWidth]: boolean;\r\n [EBoardKeyList.SpliteThickness]: 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 hardwareName: 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.OpenDir]: ECompareType;\r\n [EBoardKeyList.KnifeRad]: ECompareType;\r\n edgeRemarkUp: ECompareType,\r\n edgeRemarkDown: ECompareType,\r\n edgeRemarkLeft: ECompareType,\r\n edgeRemarkRight: ECompareType,\r\n [EBoardKeyList.SpliteHeight]: ECompareType;\r\n [EBoardKeyList.SpliteWidth]: ECompareType;\r\n [EBoardKeyList.SpliteThickness]: 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 [EBoardKeyList.SpliteHeight]: string;\r\n [EBoardKeyList.SpliteWidth]: string;\r\n [EBoardKeyList.SpliteThickness]: 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 GetHardWareOption = 10,\r\n RemoveSplitSize = 11, //去除拆单尺寸\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 Prefix = \"前缀\",\r\n Suffix = \"后缀\",\r\n}\r\n","import { IBaseOption, IHightDrillOption } from \"./OptionInterface/IOptionInterface\";\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 verticalBoardName: string; //立板名称\r\n thickness: number; //立板厚度\r\n depth: number; //立板深度\r\n isAuto: boolean; //智能识别\r\n isFloor50?: boolean; //取整50倍(因为Door不需要该属性,故为可选)\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 lbSealedUp: number;//立板封边上下左右\r\n lbSealedDown: number;\r\n lbSealedLeft: number;\r\n lbSealedRight: number;\r\n lbHightDrillOption: IHightDrillOption; //立板高级排钻\r\n useBoardProcessOption?: boolean; //使用周围板件数据\r\n isModifyHardwareMaterial: boolean; //使用周围板件数据时五金是否应用\r\n boardMatName: string;//板材名\r\n material: string;//材料\r\n color: string;//颜色\r\n roomName: string;//房名\r\n cabinetName: 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 layerBoardName: string;\r\n cbHightDrillOption: IHightDrillOption; //层板高级排钻\r\n deviation: number; //铰链碰撞单次偏移量\r\n verticalEdgeRemarkUp: string; //立板板边备注上下左右\r\n verticalEdgeRemarkDown: string;\r\n verticalEdgeRemarkLeft: string;\r\n verticalEdgeRemarkRight: string;\r\n layerEdgeRemarkUp: string; //层板板边备注上下左右\r\n layerEdgeRemarkDown: string;\r\n layerEdgeRemarkLeft: string;\r\n layerEdgeRemarkRight: string;\r\n parseHinge: boolean;//铰链信息写入门板备注\r\n\r\n sealColorUp: string; //门板封边颜色\r\n sealColorDown: string;\r\n sealColorLeft: string;\r\n sealColorRight: string;\r\n\r\n reservedEdgeUp: string; //门板预留边\r\n reservedEdgeDown: string;\r\n reservedEdgeLeft: string;\r\n reservedEdgeRight: string;\r\n\r\n layerSealColorUp: string; //层板封边颜色\r\n layerSealColorDown: string;\r\n layerSealColorLeft: string;\r\n layerSealColorRight: string;\r\n\r\n layerReservedEdgeUp: string; //层板预留边\r\n layerReservedEdgeDown: string;\r\n layerReservedEdgeLeft: string;\r\n layerReservedEdgeRight: string;\r\n\r\n verticalSealColorUp: string; //立板封边颜色\r\n verticalSealColorDown: string;\r\n verticalSealColorLeft: string;\r\n verticalSealColorRight: string;\r\n\r\n verticalReservedEdgeUp: string; //层板预留边\r\n verticalReservedEdgeDown: string;\r\n verticalReservedEdgeLeft: string;\r\n verticalReservedEdgeRight: string;\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 deviation: number; //铰链碰撞单次偏移量\r\n parseHinge: 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 sealColorUp: string; //抽屉立板封边颜色\r\n sealColorDown: string;\r\n sealColorLeft: string;\r\n sealColorRight: string;\r\n\r\n reservedEdgeUp: string; //抽屉立板预留边\r\n reservedEdgeDown: string;\r\n reservedEdgeLeft: string;\r\n reservedEdgeRight: string;\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\nexport interface IWindowTempInfo\r\n{\r\n logo?: string;\r\n}\r\n\r\n/**选择的模板信息,temp-抽屉或门板,handletemp-拉手模板,windowTemp-窗户模板,其他是铰链模板 */\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 \"./OptionInterface/IOptionInterface\";\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 linesType: number; //纹路\r\n useBoardProcessOption?: boolean; //使用周围的板件数据\r\n boardMatName: string;//板材名\r\n material: string;//材料\r\n color: string;//颜色\r\n roomName: string;//房名\r\n cabinetName: string;//柜名\r\n}\r\n","import { IBaseOption } from \"./IOptionInterface\";\r\n\r\nexport enum ForBoardNameType\r\n{\r\n Same = \"same\",\r\n NoSame = \"nosame\",\r\n Include = \"include\",\r\n NoInclude = \"noinclude\"\r\n}\r\n\r\nexport interface IAutoDimBrsOption extends IBaseOption\r\n{\r\n total: boolean; //整体标注\r\n out: boolean; //柜外标注(前视图标注)\r\n inW: boolean; //柜内宽标注\r\n inH: boolean; //柜内高标注\r\n noRepeat: boolean; //删除重复\r\n noSmSize: boolean; //过滤小尺寸\r\n noAppointSize: boolean; //过滤指定尺寸\r\n noInSize: boolean; //空间小于该数值时 不标注内空\r\n noShowMinSize: number;\r\n noShowMinInSize: number;\r\n noShowAppointSizes: string;\r\n useParseGroups: string;\r\n forBoardName: boolean;\r\n forBoardNameStr: string;\r\n forBoardNameType: ForBoardNameType;\r\n insideOffset: boolean; //柜内标注内偏\r\n insideOffsetDist: number;//柜内标注内偏距离\r\n}\r\n\r\nexport interface IFastDimOption extends IBaseOption\r\n{\r\n filterSmallSize: boolean; //过滤小尺寸\r\n filterSmallSizeValue: number; //过滤小尺寸值\r\n filterAppointSize: boolean; //过滤指定尺寸\r\n filterAppointSizeValues: string;//过滤指定尺寸的值\r\n filterAppointForBoardName: boolean;///根据板名过滤\r\n conditionType: ForBoardNameType; //根据板名过滤条件\r\n filterAppointForBoardNameValues: string;//根据板名过滤的值\r\n}\r\n","import { IBaseOption } from \"./IOptionInterface\";\r\n\r\nexport enum CurtailType\r\n{\r\n PerBr = \"0\",\r\n Total = \"1\",\r\n OCS = \"2\"\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","import { BrRelativePos } from \"../../../DatabaseServices/Entity/BoardInterface\";\r\nimport { BoardConfigOption } from \"./IOptionInterface\";\r\n\r\nexport enum StripType\r\n{\r\n H = \"h\",\r\n V = \"v\"\r\n}\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 addSKTCabinetName: boolean; //柜名加收口名称\r\n brName: string;//收口条板名 name被辅助条占用\r\n FuZhuType: StripType;//辅助条类型\r\n fuZhuBrName: string;//辅助条板材名\r\n fuZhuMaterial: string;//辅助条材料\r\n fuZhuColor: string;//辅助条颜色\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 * @export\r\n * @enum {number}\r\n */\r\n\r\nexport enum ViewDirection\r\n{\r\n Left = 1,\r\n Right = 2,\r\n Up = 3,\r\n Front = 4,\r\n Bottom = 5,\r\n Back = 6,\r\n Southwest = 7\r\n}\r\n\r\nexport enum ViewportPosition\r\n{\r\n Vertical = \"vertical\",\r\n Horizontal = \"horizontal\",\r\n Left = \"left\",\r\n Right = \"right\",\r\n Bottom = \"bottom\",\r\n Top = \"top\"\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","import { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { IBaseOption } from \"./OptionInterface/IOptionInterface\";\r\n\r\nexport enum EWineRackType\r\n{\r\n Oblique = 0,\r\n Upright = 1,\r\n}\r\n\r\n/**酒格样式 */\r\nexport enum EWineRackStyle\r\n{\r\n WholeLattice = 0,//全格优先\r\n Semilattice = 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 wineRackStyle: EWineRackStyle,\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 useBoardProcessOption?: boolean; //使用周围的板件数据\r\n boardMatName: string;//板材名\r\n material: string;//材料\r\n color: string;//颜色\r\n roomName: string;//房名\r\n cabinetName: string;//柜名\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 { FaceDirection } from \"../Add-on/DrawDrilling/DrillType\";\r\nimport { FontStyleInfoOption, FontType } from \"../Add-on/TextStyle/FontStyleInterface\";\r\nimport { EditViewOption } from \"../Add-on/ViewortConfig/EditViewOption\";\r\nimport { 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 { ArcBoardFeedProcess } from \"../DatabaseServices/Entity/ArcBoardType\";\r\nimport { AddRemarkType, BoardOpenDir, BoardType, BrRelativePos, ComposingType, LinesType } from \"../DatabaseServices/Entity/BoardInterface\";\r\nimport { SpaceParseOption } from \"../Geometry/SpaceParse/SpaceParseOption\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { FindModifyStyle } from \"../UI/Components/Board/BoardFindInterface\";\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 { 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 { ForBoardNameType, IAutoDimBrsOption, IFastDimOption } from \"../UI/Store/OptionInterface/AutoDimBrsOption\";\r\nimport { CurtailType, IBoardBatchCurtailOption } from \"../UI/Store/OptionInterface/BoardBatchCurtailOption \";\r\nimport { BoardProcessOption } from \"../UI/Store/OptionInterface/BoardProcessOption\";\r\nimport { BulkheadCeilingOption } from \"../UI/Store/OptionInterface/BulkheadCeilingOption\";\r\nimport { ClosingStripOption, StripType } from \"../UI/Store/OptionInterface/ClosingStripOption\";\r\nimport { BehindBoardOption, BoardConfigOption, ChangeColorByBoardMaterialOption, ChangeColorByRoomOrCabinetOption, CommonPanelConfigOption, DatalistConfigOption, DoorRelatesInfoOption, IArcBoardGrooveOption, IBatchModifyPanelOption, IDimStyleOption, IHoleGrooveDimOption, LayerBoardOption, LayerNailOption, ModifyTextsConfigOption, OneClickInspectionOption, PartsAnalysisOption, RightPlaneLightOption, ShareBoardInfConfigurationOption, SideBoardOption, SingleBoardOption, TBBoardOption, VerticalBoardOption, WindowPanelConfigOption } from \"../UI/Store/OptionInterface/IOptionInterface\";\r\nimport { PointLightOption, RectAreaLightOption, SpotLightOption } from \"../UI/Store/OptionInterface/LightConfigOption\";\r\nimport { BehindHeightPositon, RadioType, ViewDirection, ViewportPosition } from \"../UI/Store/OptionInterface/OptionEnum\";\r\nimport { Viewport2ConfigOption, Viewport3ConfigOption, Viewport4ConfigOption, ViewportConfigOption } from \"../UI/Store/OptionInterface/ViewportConfigOption\";\r\nimport { EFullDir, EFullType, EWRackArrayType, EWineRackStyle, EWineRackType, IWineRackOption } from \"../UI/Store/WineRackInterface\";\r\nimport { EOrderType } from \"./OrderType\";\r\n\r\nexport const DefaultLayerBoardConfig: LayerBoardOption = {\r\n version: 4,\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 exprCount: \"1\",\r\n exprThickness: \"18\"\r\n};\r\nObject.freeze(DefaultLayerBoardConfig);\r\n\r\nexport const DefaultVerticalBoardConfig: VerticalBoardOption = {\r\n version: 4,\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 exprCount: \"1\",\r\n exprThickness: \"18\"\r\n};\r\nObject.freeze(DefaultVerticalBoardConfig);\r\n\r\nexport const DefaultBehindBoardConfig: BehindBoardOption = {\r\n version: 3,\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 exprCount: \"1\",\r\n exprThickness: \"18\"\r\n};\r\nObject.freeze(DefaultBehindBoardConfig);\r\n\r\nexport const DefaultWineRackConfig: IWineRackOption = {\r\n version: 6,\r\n type: EWineRackType.Oblique,\r\n wineRackStyle: EWineRackStyle.WholeLattice,\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 useBoardProcessOption: true,\r\n boardMatName: \"\",//板材名\r\n material: \"\",//材料\r\n color: \"\",//颜色\r\n roomName: \"\",//房名\r\n cabinetName: \"\",//柜名\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: 3,\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 bigHoleDir: FaceDirection.Front,\r\n};\r\nObject.freeze(DefaultBottomBoardOption);\r\n\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: ViewDirection.Up,\r\n renderType: RenderType.Print,\r\n revertRotation: false\r\n};\r\nObject.freeze(DefaultViewportConfigOption);\r\n\r\nexport const DefaultViewport2ConfigOption: Viewport2ConfigOption = {\r\n viewportPosition: ViewportPosition.Vertical,\r\n renderType: [RenderType.Print, RenderType.Print],\r\n view1: ViewDirection.Left,\r\n view2: ViewDirection.Up,\r\n revertRotation: false\r\n};\r\nObject.freeze(DefaultViewport2ConfigOption);\r\n\r\nexport const DefaultViewport3ConfigOption: Viewport3ConfigOption = {\r\n viewportPosition: ViewportPosition.Vertical,\r\n renderType: [RenderType.Print, RenderType.Print, RenderType.Print],\r\n view: [ViewDirection.Front, ViewDirection.Up, ViewDirection.Southwest],\r\n revertRotation: false\r\n};\r\nObject.freeze(DefaultViewport3ConfigOption);\r\n\r\nexport const DefaultViewport4ConfigOption: Viewport4ConfigOption = {\r\n view: [ViewDirection.Front, ViewDirection.Left, ViewDirection.Up, ViewDirection.Southwest],\r\n renderType: [RenderType.Print, RenderType.Print, RenderType.Print, RenderType.Print],\r\n revertRotation: false\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\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: 3,\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: 3,\r\n SpecularScale: 1,\r\n SourceRadius: 10,\r\n SoftSourceRadius: 30,\r\n SourceLength: 0,\r\n Angle: 45,\r\n InnerConeAngle: 30,\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: 3,\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: 3,\r\n ShowHemiLight: true,\r\n ShowSunLight: true,\r\n SkyLightColor: \"#FFFFFF\",\r\n SkyLightIntensity: 1,\r\n SkyLightIndirectLightingIntensity: 3,\r\n SunLightIntensity: 50,\r\n SunLightIndirectLightingIntensity: 3,\r\n SunLightColor: \"#FFFFFF\",\r\n SunLightTemperature: 6500,\r\n SunLightElevationDeg: 60,\r\n SunLightRotateDeg: 300,\r\n SunLightSourceAngle: 0.5,\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 DefaultArcBoardOption: BoardConfigOption = {\r\n version: 1,\r\n name: \"圆弧板\",\r\n type: BoardType.Layer,\r\n height: 1200,\r\n thickness: 18,\r\n};\r\nObject.freeze(DefaultArcBoardOption);\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: 6,\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 addSKTCabinetName: true,\r\n brName: \"左收口条\",\r\n FuZhuType: StripType.V,\r\n fuZhuBrName: '',\r\n fuZhuMaterial: '',\r\n fuZhuColor: '',\r\n};\r\nObject.freeze(DefaultClosingStripOption);\r\n\r\nexport const DefaultBoardFindOption: IBoardFindOption = {\r\n version: 14,\r\n condition: {\r\n // layer: false, //这个KEY看起来没用了\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 hardwareName: 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 addRemarks: false,\r\n composingFace: false,\r\n openDir: 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 edgeRemarkUp: false,\r\n edgeRemarkDown: false,\r\n edgeRemarkLeft: false,\r\n edgeRemarkRight: false,\r\n [EBoardKeyList.SpliteHeight]: false,\r\n [EBoardKeyList.SpliteWidth]: false,\r\n [EBoardKeyList.SpliteThickness]: false,\r\n useCurve: false,\r\n noUseBr: false,\r\n noUseHwd: false,\r\n useText: 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 hardwareName: 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 openDir: ECompareType.Equal,\r\n [EBoardKeyList.KnifeRad]: ECompareType.Equal,\r\n edgeRemarkUp: ECompareType.Equal,\r\n edgeRemarkDown: ECompareType.Equal,\r\n edgeRemarkLeft: ECompareType.Equal,\r\n edgeRemarkRight: ECompareType.Equal,\r\n [EBoardKeyList.SpliteHeight]: ECompareType.Equal,\r\n [EBoardKeyList.SpliteWidth]: ECompareType.Equal,\r\n [EBoardKeyList.SpliteThickness]: ECompareType.Equal,\r\n\r\n },\r\n tolerance: {\r\n height: \"\",\r\n width: \"\",\r\n thickness: \"\",\r\n [EBoardKeyList.KnifeRad]: \"\",\r\n [EBoardKeyList.SpliteHeight]: \"\",\r\n [EBoardKeyList.SpliteWidth]: \"\",\r\n [EBoardKeyList.SpliteThickness]: \"\",\r\n },\r\n // layer: \"0\", 删除无用的key\r\n height: \"\",\r\n width: \"\",\r\n thickness: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n brName: \"\",\r\n hardwareName: \"\",\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 openDir: BoardOpenDir.None,\r\n hardwareDoorName: \"\",\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 extraRemarks: Array.from({ length: 10 }, () => [\"\", \"\"]),\r\n isChaidan: false,\r\n [EBoardKeyList.KnifeRad]: \"\",\r\n edgeRemarkUp: \"\",\r\n edgeRemarkDown: \"\",\r\n edgeRemarkLeft: \"\",\r\n edgeRemarkRight: \"\",\r\n query: FindModifyStyle.FuzzyQuery,\r\n [EBoardKeyList.SpliteHeight]: \"\",\r\n [EBoardKeyList.SpliteWidth]: \"\",\r\n [EBoardKeyList.SpliteThickness]: \"\",\r\n appendRemark: Array.from({ length: 10 }, () => [\"\", \"\", AddRemarkType.Cover]),\r\n};\r\nObject.freeze(DefaultBoardFindOption);\r\n\r\nexport const DefaultLatticOption: ILatticeOption = {\r\n version: 4,\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 linesType: LinesType.Reverse,\r\n useBoardProcessOption: true,\r\n boardMatName: \"\",//板材名\r\n material: \"\",//材料\r\n color: \"\",//颜色\r\n roomName: \"\",//房名\r\n cabinetName: \"\",//柜名\r\n};\r\nObject.freeze(DefaultLatticOption);\r\n\r\nexport const DefaultDoorOption: IDoorConfigOption = {\r\n version: 13,\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 cbHightDrillOption: { up: \"\", down: \"\", left: \"\", right: \"\" },\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 verticalBoardName: \"立板\",\r\n layerBoardName: \"层板\",\r\n lbSealedUp: 1,\r\n lbSealedDown: 1,\r\n lbSealedLeft: 1,\r\n lbSealedRight: 1,\r\n lbHightDrillOption: { up: \"\", down: \"\", left: \"\", right: \"\" },\r\n useBoardProcessOption: true,\r\n isModifyHardwareMaterial: false,\r\n deviation: 100,//偏移量\r\n boardMatName: \"\",//板材名\r\n material: \"\",//材料\r\n color: \"\",//颜色\r\n roomName: \"\",//房名\r\n cabinetName: \"\",//柜名\r\n layerEdgeRemarkUp: '', //层板板边备注上下左右\r\n layerEdgeRemarkDown: '',\r\n layerEdgeRemarkLeft: '',\r\n layerEdgeRemarkRight: '',\r\n verticalEdgeRemarkUp: '', //立板板边备注上下左右\r\n verticalEdgeRemarkDown: '',\r\n verticalEdgeRemarkLeft: '',\r\n verticalEdgeRemarkRight: '',\r\n parseHinge: false,\r\n sealColorUp: \"\", //门板封边颜色\r\n sealColorDown: \"\",\r\n sealColorLeft: \"\",\r\n sealColorRight: \"\",\r\n reservedEdgeUp: \"0\", //门板预留边\r\n reservedEdgeDown: \"0\",\r\n reservedEdgeLeft: \"0\",\r\n reservedEdgeRight: \"0\",\r\n layerSealColorUp: \"\", //层板封边颜色\r\n layerSealColorDown: \"\",\r\n layerSealColorLeft: \"\",\r\n layerSealColorRight: \"\",\r\n layerReservedEdgeUp: \"0\", //层板预留边\r\n layerReservedEdgeDown: \"0\",\r\n layerReservedEdgeLeft: \"0\",\r\n layerReservedEdgeRight: \"0\",\r\n verticalSealColorUp: \"\", //立板封边颜色\r\n verticalSealColorDown: \"\",\r\n verticalSealColorLeft: \"\",\r\n verticalSealColorRight: \"\",\r\n verticalReservedEdgeUp: \"0\", //层板预留边\r\n verticalReservedEdgeDown: \"0\",\r\n verticalReservedEdgeLeft: \"0\",\r\n verticalReservedEdgeRight: \"0\",\r\n};\r\nObject.freeze(DefaultDoorOption);\r\nexport const DefaultHingeOption: IHingeConfigOption = {\r\n version: 1,\r\n hingeCount: 0,\r\n hindeTopDist: 0,\r\n hindeBottomDist: 0,\r\n useRule: false,\r\n deviation: 100,\r\n parseHinge: false,\r\n};\r\nObject.freeze(DefaultHingeOption);\r\nexport const DefaultDrawerOption: IDrawerConfigOption = {\r\n version: 10,\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 isFloor50: 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 verticalBoardName: \"立板\",\r\n lbSealedUp: 1,\r\n lbSealedDown: 1,\r\n lbSealedLeft: 1,\r\n lbSealedRight: 1,\r\n lbHightDrillOption: { up: \"\", down: \"\", left: \"\", right: \"\" },\r\n useBoardProcessOption: true,\r\n isModifyHardwareMaterial: false,\r\n boardMatName: \"\",//板材名\r\n material: \"\",//材料\r\n color: \"\",//颜色\r\n roomName: \"\",//房名\r\n cabinetName: \"\",//柜名\r\n sealColorUp: \"\", //抽屉立板封边颜色\r\n sealColorDown: \"\",\r\n sealColorLeft: \"\",\r\n sealColorRight: \"\",\r\n reservedEdgeUp: \"0\", //抽屉立板预留边\r\n reservedEdgeDown: \"0\",\r\n reservedEdgeLeft: \"0\",\r\n reservedEdgeRight: \"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 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.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 linesType: LinesType.Reverse,\r\n useBoardProcessOption: true,\r\n boardMatName: \"\",//板材名\r\n material: \"\",//材料\r\n color: \"\",//颜色\r\n roomName: \"\",//房名\r\n cabinetName: \"\",//柜名\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: 3,\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 goodsId: \"\",\r\n goodsSn: \"\"\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 goodsId: \"\",\r\n goodsSn: \"\"\r\n};\r\nObject.freeze(DefaultToplineMetalsOption);\r\n\r\nexport const DefaultBoardProcessOption: BoardProcessOption = {\r\n version: 5,\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 edgeRemarkUp: \"\",\r\n edgeRemarkDown: \"\",\r\n edgeRemarkLeft: \"\",\r\n edgeRemarkRight: \"\",\r\n highBoardEdgeRemark: [],\r\n reservedEdgeUp: \"0\",\r\n reservedEdgeDown: \"0\",\r\n reservedEdgeLeft: \"0\",\r\n reservedEdgeRight: \"0\",\r\n highReservedEdge: [],\r\n sealColorUp: \"\",\r\n sealColorDown: \"\",\r\n sealColorLeft: \"\",\r\n sealColorRight: \"\",\r\n sealColorType: \"\",\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: 3,\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 edgeRemarkUp: \"\",\r\n edgeRemarkDown: \"\",\r\n edgeRemarkLeft: \"\",\r\n edgeRemarkRight: \"\",\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 edgeRemarkUp: false,\r\n edgeRemarkDown: false,\r\n edgeRemarkLeft: false,\r\n edgeRemarkRight: false,\r\n }\r\n};\r\n\r\nObject.freeze(DefaultUpdateInfoOption);\r\n\r\nexport const DefaultKuGanOption: IKuGangDrawOption = {\r\n insertMode: \"0\",\r\n minSpacing: 50,\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: 3,\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 middleVerticalBrName: \"立板\",\r\n topMostLayerBrName: \"顶板\",\r\n middleLayerBrName: \"层板\",\r\n bottomMostLayerBrName: \"底板\",\r\n bottomMostBackBrName: \"地脚线\",\r\n stripeBrName: \"收口条\",\r\n cabinetName: \"\",\r\n isfarLeftVerticalBrName: true,//最左侧立板名称\r\n isModifyMiddleVerticalBrName: false,//是否修改中间立板名称\r\n isfarRightVerticalBrName: true,\r\n istopMostLayerBrName: true,\r\n isModifyMiddleLayerBrName: false, //是否修改中间层板名称\r\n isbottomMostLayerBrName: true,\r\n isbottomMostBackBrName: true,\r\n isstripeBrName: true,\r\n iscabinetName: false,//修改柜名\r\n isModifyRoomName: true,//修改房名\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: 8,\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 useSktTemplate: false,\r\n sktTemplate: null,\r\n sktTemplateId: \"\",\r\n rightSktTemplateId: \"\",\r\n topSktTemplateId: \"\",\r\n};\r\nObject.freeze(DefaultR2bOption);\r\nexport const DefaultR2b2Option: IRect2Br2Option = {\r\n version: 2,\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 useBoardProcessOption: true,\r\n boardMatName: \"\",//板材名\r\n material: \"\",//材料\r\n color: \"\",//颜色\r\n roomName: \"\",//房名\r\n cabinetName: \"\",//柜名\r\n};\r\nObject.freeze(DefaultR2b2Option);\r\n\r\nexport const DefaultHSOption: IHSOption = {\r\n version: 7,\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 noChaiDan: 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 visual: false,\r\n curve: false,\r\n line: false,\r\n polyline: false,\r\n circle: false,\r\n arc: false,\r\n custom: false,\r\n spotlight: false,\r\n pointLight: false,\r\n rectAreaLight: false,\r\n customBoardName: \"\",\r\n matchType: ECompareType.Equal,\r\n text: false,\r\n};\r\n\r\nexport const DefaultCommonPanelOption: CommonPanelConfigOption = {\r\n version: 1,\r\n orderMap: {},\r\n orderType: EOrderType.ByUpdate,\r\n};\r\nObject.freeze(DefaultCommonPanelOption);\r\n\r\nexport const DefaultDatalistOption: DatalistConfigOption = {\r\n resizeUI: {}\r\n};\r\nObject.freeze(DefaultDatalistOption);\r\n\r\nexport const DefaultAutoDimBrsOption: IAutoDimBrsOption = {\r\n version: 2,\r\n total: true,\r\n out: true,\r\n inW: false,\r\n inH: false,\r\n noRepeat: false,\r\n noSmSize: false,\r\n noAppointSize: false,\r\n noInSize: false,\r\n noShowMinSize: 20,\r\n noShowMinInSize: 300,\r\n noShowAppointSizes: \"\",\r\n useParseGroups: \"0\",\r\n forBoardName: false,\r\n forBoardNameStr: \"\",\r\n forBoardNameType: ForBoardNameType.Same,\r\n insideOffset: false,\r\n insideOffsetDist: 0\r\n};\r\nObject.freeze(DefaultAutoDimBrsOption);\r\n\r\n\r\nexport const DefaultWindowPanelOption: WindowPanelConfigOption = {\r\n Length: 1100,\r\n Height: 1500,\r\n Thick: 280,\r\n WindowOffGround: 900,\r\n IsBayWindow: false,\r\n BayLeftIsWall: false,\r\n BayRightIsWall: false,\r\n BayDist: 500,\r\n BayLeftDist: 600,\r\n BayMiddleDist: 600,\r\n BayRightDist: 600,\r\n HasWindowStone: false,\r\n StoneThick: 50,\r\n StoneBulge: 50,\r\n StoneLeftRightBulge: 50,\r\n};\r\n\r\nObject.freeze(DefaultWindowPanelOption);\r\nexport const DefaultDimStyleOption: IDimStyleOption = {\r\n dimFXLON: true,\r\n dimFXL: 100,\r\n dimALTD: 2,\r\n dimASZ: 10,\r\n dimGAP: 10,\r\n dimEXE: 20,\r\n dimTXT: 60,\r\n dimTAD: 2,\r\n dimADEC: 2,\r\n};\r\nObject.freeze(DefaultDimStyleOption);\r\n\r\nexport const DefaultChangeColorByBoardMaterialOption: ChangeColorByBoardMaterialOption = {\r\n version: 1,\r\n accordThickness: false,\r\n accordMaterialColor: true,\r\n accordMaterial: true,\r\n accordMaterialName: true,\r\n includeNoChaiDanBoard: true,\r\n};\r\nObject.freeze(DefaultChangeColorByBoardMaterialOption);\r\n\r\nexport const DefaultShareBoardInfConfigurationOption: ShareBoardInfConfigurationOption = {\r\n version: 2,\r\n Physical2EdgeColor: 7,\r\n VisualStyle: RenderType.Conceptual,\r\n Viewport: ViewDirection.Southwest,\r\n IsExportBoard: true,\r\n IsExportHardware: true,\r\n showBom: true,\r\n expireDays: \"\",\r\n IsExportCurve: true,\r\n IsExportDimension: true,\r\n IsExportText: true\r\n};\r\nObject.freeze(DefaultShareBoardInfConfigurationOption);\r\n\r\nexport const DefaultBulkheadCeilingOption: BulkheadCeilingOption = {\r\n Item: [],\r\n Height: 300\r\n};\r\nObject.freeze(DefaultBulkheadCeilingOption);\r\n\r\nexport const DefaultChangeColorByRoomOrCabinetOption: ChangeColorByRoomOrCabinetOption = {\r\n accordCabinetName: true,\r\n accordRoomName: true\r\n};\r\nObject.freeze(DefaultChangeColorByRoomOrCabinetOption);\r\n\r\nexport const DefaultDoorRelatesInfoOption: DoorRelatesInfoOption = {\r\n version: 3,\r\n hingeOption: [],\r\n hingeDecimal: 1,\r\n filterNoDoor: false,\r\n};\r\nObject.freeze(DefaultDoorRelatesInfoOption);\r\n\r\nexport const DefaultPartsAnalysisOption: PartsAnalysisOption = {\r\n version: 1,\r\n PartsOption: [\r\n [\"name\", true],\r\n [\"factory\", false],\r\n [\"brand\", false],\r\n [\"model\", false],\r\n [\"spec\", true],\r\n [\"material\", false],\r\n [\"color\", false],\r\n [\"unit\", false],\r\n [\"count\", true],\r\n [\"comments\", false],\r\n [\"process\", false],\r\n [\"actualExpr\", false],\r\n ]\r\n};\r\nObject.freeze(DefaultPartsAnalysisOption);\r\n\r\nexport const DefaultFastDimOption: IFastDimOption = {\r\n filterSmallSize: false,\r\n filterSmallSizeValue: 0,\r\n filterAppointSize: false,\r\n filterAppointSizeValues: \"\",\r\n filterAppointForBoardName: false,\r\n filterAppointForBoardNameValues: \"\",\r\n conditionType: ForBoardNameType.Same,\r\n};\r\nObject.freeze(DefaultFastDimOption);\r\n\r\nexport const DefaultOneClickInspectionOption: OneClickInspectionOption = {\r\n version: 2,\r\n InspectionOption: {\r\n isInterfere: true,\r\n isMaxSizeBoard: true,\r\n isMinSizeBoard: true,\r\n isModel: true,\r\n isDrill: true,\r\n isSpecialBoardContour: true,\r\n isSplitBoard: true,\r\n isDrawHole: true,\r\n },\r\n excludeDrawHoleOption: {\r\n boardName: false,\r\n boardNameValue: \"\",\r\n processingGroupName: false,\r\n processingGroupNameValue: \"\",\r\n boardThickness: false,\r\n boardThicknessValue: 18,\r\n IsSplitBoard: false,\r\n boardNameCompareType: ECompareType.Include,\r\n processingGroupNameCompareType: ECompareType.Include,\r\n boardThicknessCompareType: ECompareType.Less,\r\n },\r\n excludeInterfereOption: {\r\n boardName: false,\r\n boardNameValue: \"\",\r\n processingGroupName: false,\r\n processingGroupNameValue: \"\",\r\n hwComposityName: false,\r\n hwComposityNameValue: \"\",\r\n noChaiDanBoard: false,\r\n boardNameCompareType: ECompareType.Include,\r\n processingGroupNameCompareType: ECompareType.Include,\r\n hwComposityNameCompareType: ECompareType.Include,\r\n }\r\n};\r\nObject.freeze(DefaultOneClickInspectionOption);\r\n\r\nexport const DefaultArcBoardGrooveOption: IArcBoardGrooveOption = {\r\n version: 3,\r\n isDrawArcGroove: true,\r\n retainedThickness: \"2\",\r\n knifeRadius: \"3\",\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n grooveSpacing2: \"6\",\r\n grooveWidth2: \"6\",\r\n arcExtension2: \"0\",\r\n retainedThickness2: \"2\",\r\n knifeRadius2: \"3\",\r\n grooveAddLength2: \"0\",\r\n grooveAddWidth2: \"0\",\r\n grooveAddDepth2: \"0\",\r\n arcBoardFeedProcess: ArcBoardFeedProcess.Slots,\r\n};\r\nObject.freeze(DefaultArcBoardGrooveOption);\r\n\r\nexport const DefaultSpaceParseOption: SpaceParseOption = {\r\n autoParseDepth: false,\r\n};\r\nObject.freeze(DefaultSpaceParseOption);\r\n\r\nexport const DefaultEditViewOption: EditViewOption = {\r\n version: 1,\r\n hight: 60,\r\n renderType: false,\r\n renderTypeValue: \"概念\",\r\n viewDir: false,\r\n viewDirValue: \"左视图\",\r\n roomName: false,\r\n cabinetName: false,\r\n boardMaterialName: false,\r\n material: false,\r\n color: false,\r\n page: false,\r\n date: false,\r\n designer: false,\r\n sheetName: false,\r\n hideDoor: false,\r\n hideDrawer: false,\r\n hideDim: false,\r\n hideCurve: false,\r\n hideModel: false,\r\n hideLayer: false,\r\n hideLayerValue: \"\",\r\n showLayer: false,\r\n showLayerValue: \"\"\r\n};\r\nObject.freeze(DefaultEditViewOption);\r\n\r\nexport const DefaultFontStyleOption: FontStyleInfoOption = {\r\n height: 60,\r\n fontType: FontType.YaHei,\r\n widthFactor: 1,\r\n};\r\nObject.freeze(DefaultFontStyleOption);\r\n\r\nexport const DefaultHoleGrooveDimOption: IHoleGrooveDimOption = {\r\n isDrawBrInfo: true,\r\n brInfo: \"{房间名} - {柜名}\\n{板名称} - {板ID}\\n{材料} - {颜色} - {厚}\",\r\n isDrawSHInfo: false,\r\n sHoleInfo: \"r:{半径} - d:{深度}\",\r\n sHoleMark: \"c\", // 侧面孔标识\r\n isDrawFBHInfo: false,\r\n fBHoleInfo: \"r:{半径} - d:{深度}\",\r\n fBHoleMark: \"a\", // 正反面孔标识\r\n isDrawEdgeRemark: false,\r\n edgeRemarkMark: \"b\", // 板边备注标识\r\n isDrawSealing: false, // 是否绘制封边\r\n};\r\n","import { BufferGeometry, Face3, Float32BufferAttribute, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, Line3, Matrix4, Shape, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayRemoveDuplicateBySort } from \"../Common/ArrayExt\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { FixIndex } from \"../Nest/Common/Util\";\r\nimport { AsVector3, ZeroVec, equalv2, equalv3 } from \"./GeUtils\";\r\nimport { PlaneExt } from \"./Plane\";\r\n\r\n/**\r\n * 使用轮廓和扫描路径构建扫描几何体,实现衣柜中的顶线或者地脚线之类的实体.\r\n * 该几何体需要轮廓和路径的起始截面垂直,否则构造的实体将会错误.\r\n */\r\nexport class SweepGeometry extends Geometry\r\n{\r\n edgePts: number[] = [];\r\n polygonIndexes = [];\r\n ShapeMaterialSlotData: number[];//[0,0,0,1,2,3,0] 指定多段线轮廓的材质槽索引 每个顶点指定一个材质槽位置\r\n constructor(contour: Polyline, path: Curve[] | Curve, ShapeMaterialSlotData?: number[])\r\n {\r\n super();\r\n this.ShapeMaterialSlotData = ShapeMaterialSlotData;\r\n if (Array.isArray(path))\r\n this.AddShape2(contour, path);\r\n else\r\n this.AddShape(contour, path);\r\n this.computeVertexNormals();\r\n this.computeFaceNormals();\r\n }\r\n\r\n get LineGeom(): LineGeometry\r\n {\r\n let lineGeo = new LineGeometry();\r\n let lineSegments = new Float32Array(this.edgePts);\r\n var instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\r\n lineGeo.setAttribute('instanceStart', new InterleavedBufferAttribute(instanceBuffer, 3, 0));\r\n lineGeo.setAttribute('instanceEnd', new InterleavedBufferAttribute(instanceBuffer, 3, 3));\r\n return lineGeo;\r\n }\r\n\r\n get EdgeGeom()\r\n {\r\n return new BufferGeometry().setAttribute('position', new Float32BufferAttribute(this.edgePts, 3));\r\n }\r\n\r\n AddShape(contour: Polyline, path: Curve)\r\n {\r\n //路径点表\r\n let pathPts2d = (path.Shape as 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.OCSNoClone);\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.OCSNoClone);\r\n\r\n let isClosePath = path.IsClose;\r\n\r\n let verts: Vector3[][] = [];//所有路径上的轮廓点\r\n\r\n let pathNormal = path.Normal;\r\n\r\n //计算所有需要的几何点,本质是不断的投影\r\n if (!isClosePath)\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormal, pathPts[0], undefined, pathPts[1]));\r\n\r\n\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, pathNormal, pathPts[i], pathPts[i - 1], pathPts[1]));\r\n else\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormal, pathPts[i], pathPts[i - 1]));\r\n }\r\n else\r\n {\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormal, pathPts[i], pathPts[i - 1], pathPts[i + 1]));\r\n }\r\n }\r\n\r\n if (isClosePath)\r\n verts.unshift(verts[verts.length - 1]);\r\n\r\n this.BuildSideFaces(shapePts2d, pathPts2d, pathPts, verts);\r\n if (!isClosePath) this.BuildLid(shapePts2d, verts);\r\n }\r\n\r\n AddShape2(contour: Polyline, paths: Curve[])\r\n {\r\n let pathPts: Vector3[] = [];\r\n let pathNormals: Vector3[] = [];\r\n\r\n //路径点表\r\n for (let path of paths)\r\n {\r\n let pathPts2d = path.Shape.getPoints(4) as Vector2[];\r\n arrayRemoveDuplicateBySort(pathPts2d, (p1, p2) =>\r\n {\r\n if (equalv2(p1, p2))\r\n {\r\n p2[\"_mask_\"] = p1[\"_mask_\"];\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n if (path !== paths[0])\r\n pathPts2d.shift();\r\n\r\n let pNormal = path.Normal;\r\n\r\n for (let p of pathPts2d)\r\n {\r\n let p3 = AsVector3(p).applyMatrix4(path.OCSNoClone);\r\n p3[\"_mask_\"] = p[\"_mask_\"];\r\n pathPts.push(p3);\r\n\r\n pathNormals.push(pNormal);\r\n }\r\n }\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.OCSNoClone);\r\n\r\n let isClosePath = equalv3(pathPts[0], pathPts[pathPts.length - 1], 1e-3);\r\n\r\n let verts: Vector3[][] = [];//所有路径上的轮廓点\r\n //计算所有需要的几何点,本质是不断的投影\r\n if (!isClosePath)\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormals[0], pathPts[0], undefined, pathPts[1]));\r\n\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, pathNormals[i], pathPts[i], pathPts[i - 1], pathPts[1]));\r\n else\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1]));\r\n }\r\n else\r\n {\r\n verts.push(ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1], pathPts[i + 1]));\r\n }\r\n }\r\n\r\n if (isClosePath)\r\n verts.unshift(verts[verts.length - 1]);\r\n\r\n this.BuildSideFaces(shapePts2d, pathPts as unknown as Vector2[], pathPts, verts);\r\n if (!isClosePath) this.BuildLid(shapePts2d, verts);\r\n }\r\n\r\n /**\r\n * 使用4点构建面\r\n * @param a 左下\r\n * @param b 右下\r\n * @param c 左上\r\n * @param d 右上\r\n * @param uvs\r\n * @param [materialIndex]\r\n */\r\n protected BuildFace4(a: number, b: number, c: number, d: number, uvs: Vector2[], materialIndex?: number)\r\n {\r\n let f1 = new Face3(a, b, c, undefined, undefined, materialIndex);\r\n let f2 = new Face3(b, d, c, undefined, undefined, materialIndex);\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\r\n /**\r\n * 构造边缘面开始标记\r\n * @param dir 前进方向(单位向量)\r\n */\r\n protected SideStartMark(dir: Vector3) { }\r\n\r\n protected 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)\r\n if (p[\"_mask_\"])\r\n {\r\n addCount++;\r\n\r\n if (this.ShapeMaterialSlotData)\r\n p[\"_material_index_\"] = this.ShapeMaterialSlotData[addCount - 1];\r\n }\r\n\r\n let sumCount = addCount + shapePts2d.length; //实际个数\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 this.SideStartMark(p1Dir);\r\n\r\n let tempStartX = 0;\r\n\r\n let lastMaterialIndex = undefined;\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 (p2d[\"_mask_\"])\r\n lastMaterialIndex = p2d[\"_material_index_\"] ?? lastMaterialIndex;\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\r\n this.BuildFace4(curIndex, nextIndex, curIndex2, nextIndex2, uvs, lastMaterialIndex);\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 protected 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\nexport function 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 mtx = ContourTransfromToPath(curP, normal, nextP.clone().sub(curP));\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mtx));\r\n }\r\n else if (!nextP && preP)\r\n {\r\n let mtx = ContourTransfromToPath(curP, normal, curP.clone().sub(preP));\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mtx));\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 if (equalv2(v, ZeroVec))\r\n norm.copy(dir);\r\n\r\n //角平分线的平面\r\n let plane = new PlaneExt(norm, curP);\r\n\r\n let mtx = ContourTransfromToPath(preP, normal, dir);\r\n pts = contourPts.map(p => p.clone().applyMatrix4(mtx));\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\r\n//用索引来定义\r\ntype Polygon = number[];\r\n\r\nexport class SweepGeometrySimple extends SweepGeometry\r\n{\r\n SidePolygons: (Polygon[])[];//所有侧面的多边形\r\n private _curSidePolygons: Polygon[];//\r\n private _curDir: Vector3;\r\n\r\n TriFaces: (number[])[];//截面的三角面索引\r\n shapeVerts: Vector3[][];//所有的截面点在节点位置\r\n shapePts2d: Vector2[];\r\n override computeVertexNormals() { }\r\n override computeFaceNormals() { }\r\n\r\n override BuildFace4(a: number, b: number, c: number, d: number, uvs: Vector2[], materialIndex?: number)\r\n {\r\n let polygon = [a, b, d, c];\r\n polygon[\"dir\"] = this._curDir;\r\n this._curSidePolygons.push(polygon);\r\n }\r\n\r\n protected override SideStartMark(dir: Vector3)\r\n {\r\n this._curDir = dir;\r\n if (this._curSidePolygons?.length)\r\n this.SidePolygons.push(this._curSidePolygons);\r\n\r\n this._curSidePolygons = [];\r\n }\r\n\r\n protected override BuildSideFaces(shapePts2d: Vector2[], pathPts2d: Vector2[], pathPts: Vector3[], verts: Vector3[][])\r\n {\r\n this.shapeVerts = verts;\r\n this.shapePts2d = shapePts2d;\r\n pathPts2d[0][\"_mask_\"] = true;\r\n\r\n if (!this.TriFaces)\r\n this.TriFaces = ShapeUtils.triangulateShape(shapePts2d, []);\r\n\r\n\r\n if (!this.SidePolygons) this.SidePolygons = [];\r\n super.BuildSideFaces(shapePts2d, pathPts2d, pathPts, verts);\r\n\r\n if (this._curSidePolygons?.length)\r\n this.SidePolygons.push(this._curSidePolygons);\r\n }\r\n\r\n protected override BuildLid(shapePts2d: Vector2[], verts: Vector3[][]) { }\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, BufferAttribute, BufferGeometry, FrontSide, Frustum, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Line as TLine, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayPushArray, arrayRemoveDuplicateBySort } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { curveLinkGroup } from \"../../Common/CurveUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { Log, LogType } from \"../../Common/Log\";\r\nimport { tempMatrix1 } from \"../../Common/Matrix4Utils\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { SelectPick } from \"../../Editor/SelectPick\";\r\nimport { AsVector3, MoveMatrix, ZAxis, ZeroVec, equaln, equalv3, isParallelTo } from '../../Geometry/GeUtils';\r\nimport { ProjectionToPlane, SweepGeometry } from '../../Geometry/SweepGeometry';\r\nimport { ColorInTransparent, RenderState, RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Circle } from \"../Entity/Circle\";\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 { OBB } from './../../Geometry/OBB/obb';\r\n\r\n@Factory\r\nexport class SweepSolid extends Entity\r\n{\r\n private _DisplayAccuracy = 0;\r\n static UseRectFakerContour = false;\r\n\r\n protected _Contour: Polyline;\r\n protected _PathCurve: Curve | Curve[];\r\n constructor(contour?: Polyline, pathCurve?: Curve | 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\r\n //将OCS变换成第一个路径的OCS(合理一点)\r\n let paths = this.Paths;\r\n let path = paths[0];\r\n\r\n this.OCS = path.OCSNoClone;\r\n this._SpaceOCS.copy(path.OCSNoClone);\r\n\r\n let ocsInv = this.OCSInv;\r\n for (let p of paths)\r\n p.ApplyMatrix(ocsInv);\r\n }\r\n }\r\n\r\n Explode()\r\n {\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n const explode: Curve[] = [this._Contour.Clone().ApplyMatrix(this._Matrix)];\r\n for (let path of this._PathCurve)\r\n {\r\n explode.push(path.Clone().ApplyMatrix(this._Matrix));\r\n }\r\n return explode;\r\n }\r\n return [this._Contour.Clone().ApplyMatrix(this._Matrix), this._PathCurve.Clone().ApplyMatrix(this._Matrix)];\r\n }\r\n\r\n get DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\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\r\n //单纯的返回数组\r\n get Paths()\r\n {\r\n return Array.isArray(this._PathCurve) ? this._PathCurve : [this._PathCurve];\r\n }\r\n\r\n Reverse()\r\n {\r\n this.WriteAllObjectRecord();\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n for (let path of this._PathCurve)\r\n path.Reverse();\r\n this._PathCurve.reverse();\r\n }\r\n else this._PathCurve.Reverse();\r\n this.Update();\r\n }\r\n\r\n /**\r\n * 将轮廓变换到wcs空间,当用户选定某个与扫描线起点相切的轮廓时.\r\n */\r\n private TransfromPathToWCS()\r\n {\r\n if (Array.isArray(this._PathCurve)) return;\r\n if (equalv3(this._Contour.Normal, ZAxis))\r\n return;\r\n\r\n let fDir = this._PathCurve.GetFirstDeriv(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.GetFirstDeriv(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(\"错误:提供的轮廓没有和路径垂直!\", LogType.Error);\r\n }\r\n\r\n private _MeshGeometry: SweepGeometry | BufferGeometry;\r\n private _LineGeom: 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 if (this._PathCurve instanceof Arc || this._PathCurve instanceof Circle || this._PathCurve instanceof Polyline)\r\n {\r\n this._PathCurve.DisplayAccuracy = this._DisplayAccuracy;\r\n }\r\n this._Contour.DisplayAccuracy = this._DisplayAccuracy;\r\n this._MeshGeometry = new SweepGeometry(contour, this._PathCurve);\r\n this._EdgeGeometry = this._MeshGeometry.EdgeGeom;\r\n this._LineGeom = this._MeshGeometry.LineGeom;\r\n this._MeshGeometry.edgePts = undefined;\r\n\r\n \r\n\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\r\n private _EdgeGeometry: BufferGeometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n this.MeshGeometry;\r\n return this._EdgeGeometry;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType): Object3D\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex));\r\n\r\n // for (let p of this.Paths)\r\n // {\r\n // p.IsEmbedEntity = true;\r\n // let lineObj = p.GetDrawObjectFromRenderType(RenderType.Wireframe) as TLine;\r\n // lineObj.material = ColorMaterial.GetWallLineMtl(1);\r\n // lineObj.computeLineDistances();\r\n // lineObj.matrix.copy(p.OCSNoClone);\r\n // line.add(lineObj);\r\n // }\r\n\r\n return line;\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.DrawColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())\r\n );\r\n }\r\n // 概念透明\r\n else if (renderType === RenderType.ConceptualTransparent)\r\n {\r\n let color = this.DrawColorIndex;\r\n if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) color = 8;\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide)),\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._LineGeom, ColorMaterial.PrintLineMatrial);\r\n return new Object3D().add(line, mesh);\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n const object3d = new Object3D();\r\n for (let path of this._PathCurve)\r\n object3d.add(path.DrawObject);\r\n return object3d;\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 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 ClearDraw(): this\r\n {\r\n this.UpdateDrawGeometry();\r\n return super.ClearDraw();\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex);\r\n\r\n // Object3DRemoveAll(l);\r\n // for (let p of this.Paths)\r\n // {\r\n // p.IsEmbedEntity = true;\r\n // let lineObj = p.GetDrawObjectFromRenderType(RenderType.Wireframe) as TLine;\r\n // lineObj.material = ColorMaterial.GetWallLineMtl(1);\r\n // lineObj.computeLineDistances();\r\n // l.add(lineObj);\r\n // }\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.DrawColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())\r\n );\r\n }\r\n // 概念透明\r\n else if (renderType === RenderType.ConceptualTransparent)\r\n {\r\n Object3DRemoveAll(obj);\r\n let color = this.DrawColorIndex;\r\n if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) color = 8;\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide)),\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 if (Array.isArray(this._PathCurve))\r\n for (let path of this._PathCurve)\r\n obj.add(path.DrawObject);\r\n else\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.DrawColorIndex);\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.DrawColorIndex);\r\n }\r\n // 概念透明\r\n else if (type === RenderType.ConceptualTransparent)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n let color = this.DrawColorIndex;\r\n if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) color = 8;\r\n mesh.material = ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide);\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 frustum?: Frustum,\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 pts: Vector3[] = [];\r\n\r\n //拷贝来自圆弧板最近点捕捉\r\n if (snapMode === ObjectSnapMode.Nea)\r\n {\r\n //这里实现对线框的快速捕捉\r\n let edgeGeom = this.EdgeGeometry;\r\n let pos = edgeGeom.getAttribute(\"position\") as BufferAttribute;\r\n let p1 = new Vector3;\r\n let p2 = new Vector3;\r\n\r\n let line = new Line(p1, p2);\r\n line.ApplyMatrix(this.OCSNoClone);\r\n\r\n let sel: SelectPick = frustum[\"_select_\"];\r\n for (let y = 0; y < pos.count; y += 2)\r\n {\r\n p1.fromArray(pos.array, y * 3);\r\n p2.fromArray(pos.array, (y + 1) * 3);\r\n p1.applyMatrix4(this._Matrix);\r\n p2.applyMatrix4(this._Matrix);\r\n\r\n sel.WorldToScreenPoint(p1);\r\n sel.WorldToScreenPoint(p2);\r\n\r\n if (sel.IntersectLine(p1, p2))\r\n {\r\n p1.fromArray(pos.array, y * 3);\r\n p2.fromArray(pos.array, (y + 1) * 3);\r\n arrayPushArray(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n }\r\n return pts;\r\n }\r\n\r\n let pathArr = Array.isArray(this._PathCurve) ? this._PathCurve : [this._PathCurve];\r\n for (let path of pathArr)\r\n {\r\n let contour = path.Clone();\r\n contour.ApplyMatrix(this.OCSNoClone);\r\n arrayPushArray(pts, contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n if (snapMode === ObjectSnapMode.Mid)\r\n arrayPushArray(pts, this.GetMidPoints());\r\n }\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 //缓存夹点和子实体的索引\r\n private _GripSubIndexMap: Map;\r\n /** 获取夹点与子实体的索引 */\r\n GetGripSubIndexMap()\r\n {\r\n if (this._GripSubIndexMap)\r\n return this._GripSubIndexMap;\r\n\r\n this.GetGripPoints();\r\n\r\n return this._GripSubIndexMap;\r\n }\r\n\r\n GetGripPoints()\r\n {\r\n this._GripSubIndexMap = undefined;\r\n\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n this._GripSubIndexMap = new Map;\r\n\r\n const points: Vector3[] = [];\r\n for (let path of this._PathCurve)\r\n {\r\n let pts = path.GetGripPoints();\r\n for (let p of pts)\r\n {\r\n this._GripSubIndexMap.set(points.length, path);\r\n\r\n p.applyMatrix4(this._Matrix);\r\n points.push(p);\r\n }\r\n }\r\n return points;\r\n }\r\n else\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 }\r\n\r\n GetStretchPoints()\r\n {\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n const points: Vector3[] = [];\r\n for (let path of this._PathCurve)\r\n {\r\n let pts = path.GetStretchPoints();\r\n for (let p of pts)\r\n {\r\n p.applyMatrix4(this._Matrix);\r\n points.push(p);\r\n }\r\n }\r\n return points;\r\n }\r\n else\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 }\r\n\r\n //端点捕捉时提供端点\r\n private GetEndPoint()\r\n {\r\n let pathPts: Vector3[] = [];\r\n let pathNormals: Vector3[] = [];\r\n //路径点表\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n for (let path of this._PathCurve)\r\n {\r\n pathPts = path.GetStretchPoints();\r\n arrayRemoveDuplicateBySort(pathPts, (p1, p2) =>\r\n {\r\n if (equalv3(p1, p2))\r\n {\r\n p2[\"_mask_\"] = p1[\"_mask_\"];\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n if (path !== this._PathCurve[0])\r\n pathPts.shift();\r\n\r\n let pNormal = path.Normal;\r\n\r\n for (let p of pathPts)\r\n pathNormals.push(pNormal);\r\n }\r\n }\r\n else\r\n {\r\n const path = this._PathCurve;\r\n //路径点表\r\n pathPts = path.GetStretchPoints();\r\n if (path.IsClose && !equalv3(pathPts[0], pathPts[pathPts.length - 1], 1e-3))\r\n pathPts.push(pathPts[0]);\r\n\r\n arrayRemoveDuplicateBySort(pathPts, equalv3);\r\n let pNormal = path.Normal;\r\n for (let p of pathPts)\r\n pathNormals.push(pNormal);\r\n }\r\n\r\n let shapePts2d = this.Contour.GetStretchPoints();\r\n\r\n //轮廓点表\r\n let shapePts3d = shapePts2d.map(AsVector3);\r\n let isClosePath = equalv3(pathPts[0], pathPts[pathPts.length - 1], 1e-3);\r\n\r\n let pts: Vector3[] = [];//端点\r\n\r\n if (!isClosePath)\r\n pts.push(...ProjectionToPlane(shapePts3d, pathNormals[0], pathPts[0], undefined, pathPts[1]));\r\n\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 pts.push(...ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1], pathPts[1]));\r\n else\r\n pts.push(...ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1]));\r\n }\r\n else\r\n {\r\n pts.push(...ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1], pathPts[i + 1]));\r\n }\r\n }\r\n\r\n for (let pt of pts) pt.applyMatrix4(this.OCSNoClone);\r\n return pts;\r\n }\r\n\r\n private GetMidPoints()\r\n {\r\n let conPts = this._Contour.GetStretchPoints();\r\n const pts: Vector3[] = [];\r\n const UpdateEndMtx = (path: Curve) =>\r\n {\r\n for (let i = 0.5; i < path.EndParam; i++)\r\n {\r\n let pos = path.GetPointAtParam(i);\r\n let dir = path.GetFirstDeriv(i).normalize();\r\n let y = path.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 pts.push(...conPts.map(p => p.clone().applyMatrix4(tempMatrix1)));\r\n }\r\n };\r\n if (Array.isArray(this._PathCurve))\r\n for (let path of this._PathCurve)\r\n UpdateEndMtx(path);\r\n else\r\n UpdateEndMtx(this._PathCurve);\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n let ptsLengths = 0;\r\n for (let i = 0; i < this._PathCurve.length; i += 1)\r\n {\r\n const path = this._PathCurve[i];\r\n const pathGripPts = path.GetGripPoints();\r\n const idxList = indexList.filter(v => v >= ptsLengths && v < (ptsLengths + pathGripPts.length)).map((v) => v - ptsLengths);\r\n\r\n ptsLengths += pathGripPts.length;\r\n\r\n if (idxList.length === 0) continue;\r\n\r\n let isMoveLine = (path instanceof Line && idxList.length === 1 && idxList[0] === 1);\r\n let isMovePolylineStart = (path instanceof Polyline) && idxList.length === 1 && idxList.includes(1);\r\n let isMovePolylineEnd = (path instanceof Polyline) && idxList.length === 1 && idxList.includes(pathGripPts.length - 2);\r\n\r\n //如果不是整体移动,那么vec被限制在CURVE OCS Z0\r\n let isMove = isMoveLine || idxList.length === pathGripPts.length;\r\n if (!isMove)\r\n {\r\n vec = vec.clone()\r\n .applyMatrix4(path.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(path.OCS.setPosition(0, 0, 0));\r\n }\r\n\r\n //我们校验它的前后曲线支不支持它移动这个点\r\n let prePath = this._PathCurve[FixIndex(i - 1, this._PathCurve)];\r\n let nextPath = this._PathCurve[FixIndex(i + 1, this._PathCurve)];\r\n\r\n if ((isMoveLine || idxList.includes(0) || isMovePolylineStart)//(move line ) or (move start) or(move pl start)\r\n && (i || equalv3(prePath.EndPoint, path.StartPoint, 1e-3)))//连接到下一段\r\n {\r\n //vec限制在上一段的坐标系内 无z\r\n vec = vec.clone()\r\n .applyMatrix4(prePath.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(prePath.OCS.setPosition(0, 0, 0));\r\n\r\n if (isMoveLine || isMovePolylineStart)//顺带移动上一段\r\n prePath.MoveGripPoints([prePath.GetGripPoints().length - 1], vec);\r\n\r\n }\r\n if ((isMoveLine || idxList.includes(pathGripPts.length - 1) || isMovePolylineEnd)//(move line ) or (move end) or(move pl end)\r\n && (i < this._PathCurve.length - 2 || equalv3(path.EndPoint, nextPath.StartPoint, 1e-3)))//连接到上一段\r\n {\r\n //vec限制在下一段的坐标系内 无z\r\n vec = vec.clone()\r\n .applyMatrix4(nextPath.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(nextPath.OCS.setPosition(0, 0, 0));\r\n\r\n if (isMoveLine || isMovePolylineEnd)//顺带移动下一段\r\n nextPath.MoveGripPoints([0], vec);\r\n }\r\n\r\n if (isMove)\r\n path.Move(vec);\r\n else\r\n path.MoveGripPoints(idxList, vec);\r\n }\r\n }\r\n else\r\n {\r\n this._PathCurve.MoveGripPoints(indexList, vec);\r\n }\r\n this.Update();\r\n }\r\n\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n let ptsLengths = 0;\r\n let pathIndexMap = new Map();\r\n\r\n //1.parse\r\n for (let i = 0; i < this._PathCurve.length; i++)\r\n {\r\n let path = this._PathCurve[i];\r\n const pts = path.GetStretchPoints();\r\n const idxList = indexList.filter(v => v >= ptsLengths && v < (ptsLengths + pts.length)).map((v) => v - ptsLengths);\r\n\r\n ptsLengths += pts.length;\r\n\r\n pathIndexMap.set(path, {\r\n idx: idxList,\r\n count: pts.length,\r\n isMove: pts.length === idxList.length,\r\n });\r\n }\r\n\r\n //2.change vec\r\n for (let i = 0; i < this._PathCurve.length; i++)\r\n {\r\n let path = this._PathCurve[i];\r\n let { idx: idxList, count: ptsCount, isMove } = pathIndexMap.get(path);\r\n\r\n if (idxList.length === 0) continue;\r\n\r\n let isMoveStart = idxList.includes(0);\r\n let isMoveEnd = idxList.includes(ptsCount - 1);\r\n\r\n if (!isMove)//如果不是移动 限制在本OCS内 NO Z\r\n {\r\n vec.applyMatrix4(path.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(path.OCS.setPosition(0, 0, 0));\r\n }\r\n\r\n //我们校验它的前后曲线支不支持它移动这个点\r\n let prePath = this._PathCurve[FixIndex(i - 1, this._PathCurve)];\r\n let nextPath = this._PathCurve[FixIndex(i + 1, this._PathCurve)];\r\n\r\n //如果pre是move 则不需要过滤z\r\n if ((isMove || isMoveStart)//(move line ) or (move start) or(move pl start)\r\n && (i || equalv3(prePath.EndPoint, path.StartPoint, 1e-3))//连接到下一段\r\n && (!pathIndexMap.get(prePath).isMove)//非移动\r\n )\r\n {\r\n //vec限制在上一段的坐标系内 无z\r\n vec.applyMatrix4(prePath.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(prePath.OCS.setPosition(0, 0, 0));\r\n }\r\n if (\r\n isMove || isMoveEnd\r\n && (i < this._PathCurve.length - 2 || equalv3(path.EndPoint, nextPath.StartPoint, 1e-3))//连接到上一段\r\n && (!pathIndexMap.get(nextPath).isMove)//非移动\r\n )\r\n {\r\n //vec限制在下一段的坐标系内 无z\r\n vec.applyMatrix4(nextPath.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(nextPath.OCS.setPosition(0, 0, 0));\r\n }\r\n }\r\n\r\n //3 move\r\n for (let i = 0; i < this._PathCurve.length; i++)\r\n {\r\n let path = this._PathCurve[i];\r\n let { idx: idxList, isMove } = pathIndexMap.get(path);\r\n if (isMove)\r\n path.Move(vec);\r\n else\r\n path.MoveStretchPoints(idxList, vec);\r\n }\r\n }\r\n else\r\n {\r\n this._PathCurve.MoveStretchPoints(indexList, vec);\r\n }\r\n this.Update();\r\n }\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\r\n let ocsInv = this.OCSInv;\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n for (let p of this._PathCurve)\r\n p.ApplyMatrix(this.OCSNoClone).ApplyMatrix(m).ApplyMatrix(ocsInv);\r\n\r\n let group = curveLinkGroup(this._PathCurve);\r\n this._PathCurve = group[0];\r\n }\r\n else\r\n this._PathCurve.ApplyMatrix(this.OCSNoClone).ApplyMatrix(m).ApplyMatrix(ocsInv);\r\n\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\r\n }\r\n\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//ver\r\n this._Contour = file.ReadObject() as Polyline;\r\n if (ver === 1)\r\n {\r\n this._PathCurve = file.ReadObject() as Curve;\r\n if (this._Contour instanceof Spline || this._PathCurve instanceof Spline)\r\n {\r\n this._isErase = true;\r\n Log(\"放样实体是样条线生成的,自动删除它!\", LogType.Info);\r\n }\r\n }\r\n else if (ver > 1)\r\n {\r\n const pathCurveCount = file.Read();\r\n if (pathCurveCount === 1)\r\n this._PathCurve = file.ReadObject() as Curve;\r\n else\r\n {\r\n this._PathCurve = [];\r\n for (let i = 0; i < pathCurveCount; i++)\r\n {\r\n this._PathCurve.push(file.ReadObject());\r\n }\r\n }\r\n }\r\n\r\n if (ver > 2)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n\r\n if (ver > 3)\r\n this._DisplayAccuracy = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(4);//ver\r\n file.WriteObject(this._Contour);\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n file.Write(this._PathCurve.length);\r\n for (let c of this._PathCurve)\r\n file.WriteObject(c);\r\n }\r\n else\r\n {\r\n file.Write(1);\r\n file.WriteObject(this._PathCurve);\r\n }\r\n\r\n // ver3\r\n file.WriteBool(this._LockMaterial);\r\n // ver4\r\n file.Write(this._DisplayAccuracy);\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { DefaultToplineMetalsOption } from \"../../Editor/DefaultConfig\";\r\nimport { AsVector3, ZeroVec, equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { ProjectionToPlane } from \"../../Geometry/SweepGeometry\";\r\nimport { Max } 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 { Arc } from \"../Entity/Arc\";\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\r\n /**\r\n *延伸取最大最小轮廓每段首尾到前面线段,取最长线段作为分段长\r\n */\r\n get Segmentations(): Curve[]\r\n {\r\n //轮廓点表\r\n let contourPts = this._Contour.Shape.getPoints(4).map(AsVector3);\r\n for (let p of contourPts)\r\n p.applyMatrix4(this._Contour.OCSNoClone);\r\n\r\n //收集所有的点\r\n let pathCurves: (Line | Arc)[] = [];\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n for (let p of this._PathCurve)\r\n {\r\n if (p instanceof Polyline)\r\n pathCurves.push(...p.Explode() as Line[]);\r\n else\r\n pathCurves.push(p.Clone() as Line);\r\n }\r\n }\r\n else\r\n if (this._PathCurve instanceof Polyline)\r\n pathCurves.push(...this._PathCurve.Explode() as Line[]);\r\n else\r\n pathCurves.push(this._PathCurve.Clone() as Line);\r\n\r\n\r\n let isClosePath = equalv3(pathCurves[0].StartPoint, pathCurves[pathCurves.length - 1].EndPoint, 1e-3);\r\n\r\n\r\n let radiusMap = new Map();\r\n\r\n function ExtendsCurve(path: Curve, pts: Vector3[])\r\n {\r\n let params = pts.map(p => path.GetParamAtPoint2(path.GetClosestPointTo(p, true)));\r\n\r\n let min = Math.min(0, params[Max(params, (p1, p2) => p1 > p2)]);\r\n let max = Math.max(1, params[Max(params, (p1, p2) => p1 < p2)]);\r\n\r\n let sp = path.GetPointAtParam(min);\r\n let ep = path.GetPointAtParam(max);\r\n\r\n path.StartPoint = sp;\r\n path.EndPoint = ep;\r\n }\r\n\r\n //遍历所有的路径节点进行顶点投射\r\n for (let i = 0; i < pathCurves.length; i++)\r\n {\r\n let path = pathCurves[i];\r\n if (isClosePath || i !== pathCurves.length - 1)//与下一段\r\n {\r\n let ep = path.EndPoint;\r\n let nextPath = pathCurves[FixIndex(i + 1, pathCurves)];\r\n let preP: Vector3;\r\n if (path instanceof Line)\r\n preP = ep.clone().sub(path.GetFirstDeriv(1).normalize());\r\n else\r\n {\r\n let pts = path.Shape.getPoints(4);\r\n preP = AsVector3(pts[pts.length - 2]).applyMatrix4(path.OCSNoClone);\r\n }\r\n let nextP: Vector3;\r\n if (nextPath instanceof Line)\r\n nextP = ep.clone().add(nextPath.GetFirstDeriv(0).normalize());\r\n else\r\n {\r\n let pts = nextPath.Shape.getPoints(4);\r\n nextP = AsVector3(pts[1]).applyMatrix4(nextPath.OCSNoClone);\r\n }\r\n\r\n //投射的点表\r\n let pts = ProjectionToPlane(contourPts, path.Normal, ep, preP, nextP);\r\n\r\n // for (let j = 0; j < pts.length - 1; j++)\r\n // TestDraw(new Line(pts[j].clone(), pts[j + 1].clone()).ApplyMatrix(this.OCSNoClone), i + 1);\r\n\r\n //针对圆弧 修改它的半径\r\n if (path instanceof Arc)\r\n {\r\n let mp = path.GetPointAtParam(0.5);\r\n let arcPts = ProjectionToPlane(contourPts, path.Normal, mp, mp.clone().sub(path.GetFirstDeriv(0.5).normalize()));\r\n\r\n let r = radiusMap.get(path);\r\n let ocsInv = path.OCSInv;\r\n let radius = arcPts.map(p => p.applyMatrix4(ocsInv).setZ(0).distanceTo(ZeroVec));\r\n if (r) radius.push(r);\r\n let maxRadius = radius[Max(radius, (r1, r2) => r1 < r2)];\r\n radiusMap.set(path, maxRadius);\r\n }\r\n\r\n\r\n ExtendsCurve(path, pts);\r\n ExtendsCurve(nextPath, pts);\r\n }\r\n }\r\n\r\n for (let [arc, rad] of radiusMap)\r\n arc.Radius = rad;\r\n\r\n return pathCurves;\r\n }\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 this.WriteAllObjectRecord();\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\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\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 if (ver > 1)\r\n {\r\n this.HardwareOption.goodsId = file.Read();\r\n this.HardwareOption.goodsSn = file.Read();\r\n }\r\n\r\n if (ver > 2)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);//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 file.Write(this.HardwareOption.goodsId);\r\n file.Write(this.HardwareOption.goodsSn);\r\n\r\n // ver3\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { Log, LogType } from \"../../Common/Log\";\r\nimport { Intent, Toaster, ToasterShowEntityMsg } from \"../../Common/Toaster\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { ParseExpr, safeEval } from \"../../Common/eval\";\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 { Entity } from \"../../DatabaseServices/Entity/Entity\";\r\nimport { GroupRecord } from \"../../DatabaseServices/GroupTableRecord\";\r\nimport { HardwareCompositeEntity } from \"../../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { HardwareTopline } from \"../../DatabaseServices/Hardware/HardwareTopline\";\r\nimport { ProcessingGroupRecord } from '../../DatabaseServices/ProcessingGroup/ProcessingGroupRecord';\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { GetSealedBoardContour } from \"../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { IHardwareType, Production } from \"../../Production/Product\";\r\nimport { ISealingData } from \"../../UI/Store/OptionInterface/IHighSealedItem\";\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 goodsId?: string;\r\n goodsSn?: string;\r\n}\r\nexport type GetCountOption = { sealGruopKey: (key: string, block: Board, thickness: string, data: ISealingData) => 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\r\n GetCount(brs: (Board | IHardwareType)[], options: GetCountOption = null, IsBbsCountChaidan?: boolean)\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, IsBbsCountChaidan);\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 {\r\n for (let drill of v)\r\n {\r\n let goodsSn = (drill as CylinderHole).GoodsSn;\r\n let drillGroup = drillCount.find(d => d.name === k && d.goodsSn === goodsSn); //区分排钻商品ID\r\n if (drillGroup)\r\n drillGroup.count += 1;\r\n else\r\n drillCount.push({ name: k, count: 1, goodsSn, goodsId: (drill as CylinderHole).GoodsId });\r\n }\r\n }\r\n else if (k === \"层板钉\")\r\n drillCount.push({ name: k, count: v.length });\r\n else\r\n {\r\n for (let drill of v)\r\n {\r\n let goodsSn = (drill as CylinderHole).GoodsSn;\r\n let drillGroup = drillCount.find(d => d.name === k && d.goodsSn === goodsSn); //区分排钻商品ID\r\n if (drillGroup)\r\n drillGroup.count += 1;\r\n else\r\n drillCount.push({ name: k, count: 1, goodsSn, goodsId: (drill as CylinderHole).GoodsId });\r\n }\r\n }\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 const chaiDan = IsBbsCountChaidan ? bs : bs.filter(b => b.IsChaiDan);\r\n areaCount.push({\r\n entity: bs[0],\r\n count: chaiDan.length,\r\n count2: this.GetBoardsArea(chaiDan)\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, IsBbsCountChaidan?: boolean)\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, goodsSn } = h.HardwareOption;\r\n let tags = this.ParseProcessingGroupTags(h);\r\n // :254行 代码对关联复合实体又进行一遍分析 需同步修改\r\n addDrillToMap(`${name},${unit},${this.ParseSpec(h, factory)},${this.ParseSpec(h, spec)},${this.ParseSpec(h, model)},${this.ParseSpec(h, brand)},${tags.join(\",\")},${goodsSn}`, h);\r\n }\r\n\r\n this.UpdateBoardMap(brsProps);\r\n\r\n //统计 排钻 封边 关联的五金(排钻?)\r\n for (let br of brsProps)\r\n {\r\n if (!IsBbsCountChaidan && !br.IsChaiDan)//非拆单板我们不统计\r\n continue;\r\n\r\n //排钻 层板钉\r\n let dlist = br.DrillList;\r\n if (equaln(br.ContourCurve.Area, 0))\r\n {\r\n ToasterShowEntityMsg({\r\n msg: `${br.BoardProcessOption.roomName} ${br.BoardProcessOption.cabinetName} ${br.Name}轮廓有有问题,请检查`,\r\n timeout: 5000,\r\n intent: Intent.DANGER,\r\n ent: br\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, br))\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: `柜名:${br.BoardProcessOption.cabinetName} 房间名:${br.BoardProcessOption.roomName} 板名:${br.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, timeout: 5000, intent: Intent.DANGER });\r\n Log(`柜名:${br.BoardProcessOption.cabinetName} 房间名:${br.BoardProcessOption.roomName} 板名:${br.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, LogType.Error, [br, gd]);\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 (br.LayerNails.length > 0)\r\n for (let objId of br.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 br.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, goodsSn } = metal.HardwareOption;\r\n let tags = this.ParseProcessingGroupTags(metal);\r\n // :135行 代码对关联复合实体又进行一遍分析 需同步修改\r\n addDrillToMap(`${name},${unit},${this.ParseSpec(metal, factory)},${this.ParseSpec(metal, spec)},${this.ParseSpec(metal, model)},${this.ParseSpec(metal, brand)},${tags.join(\",\")},${goodsSn}`, metal);\r\n }\r\n }\r\n\r\n //封边\r\n let sealdData = GetSealedBoardContour(br);\r\n if (!sealdData)\r\n {\r\n ToasterShowEntityMsg({\r\n intent: Intent.DANGER,\r\n msg: \"板件扣封边失败,请检查板件轮廓!\",\r\n timeout: 10000,\r\n ent: br\r\n });\r\n throw \"错误:板扣除封边失败!\";\r\n }\r\n\r\n let { seals: sealData, reservedEdges } = Production.ParseSealData(sealdData, br.BoardProcessOption.color);\r\n //封边留头量\r\n let sealReserve = HostApplicationServices.sealReserve * 2;\r\n\r\n let thickness = this.GetBoardThickness(br);\r\n\r\n for (let data of sealData)\r\n {\r\n if (equaln(0, data.size)) continue;\r\n data.length += sealReserve;\r\n let color = data.sealColor;\r\n let k = `${data.size}-${FixedNotZero(thickness, 2)}-${color}`;\r\n if (options && options.sealGruopKey)\r\n {\r\n options.sealGruopKey(k, br, thickness, data);\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 const accuracy = HostApplicationServices.chaidanOption.hardwareExpressionFormattingAccuracy;\r\n return ParseExpr(spec, accuracy, { 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 const accuracy = HostApplicationServices.chaidanOption.hardwareExpressionFormattingAccuracy;\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, accuracy) });\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), accuracy));\r\n hardwareCount.push({ name, count, entity: v[0], count2, length: count2 });\r\n }\r\n }\r\n }\r\n }\r\n\r\n ParseProcessingGroupTags = (entity: Entity) =>\r\n {\r\n return [...entity.ProcessingGroupList].map((g) =>\r\n {\r\n let obj = g?.Object;\r\n if (obj)\r\n return (obj as ProcessingGroupRecord).Name;\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 // 显示复合实体特殊备注\r\n GetTranslatedHardwareRemarks = (entity: IHardwareType, dataLength: number) =>\r\n {\r\n return entity.DataList.map(([key, value], i) =>\r\n `${lookOverBoardInfosTool.ParseSpec(entity, key, dataLength)}:${lookOverBoardInfosTool.ParseSpec(entity, value, dataLength)}`\r\n );\r\n };\r\n GetBoardThickness(br: Board)\r\n {\r\n let size = Production.GetSpiteSize(br);\r\n if (size)\r\n return FixedNotZero(size.spliteThickness, 2);\r\n else\r\n return FixedNotZero(br.Thickness, 2);\r\n }\r\n GetBoardsArea(brs: Board[])\r\n {\r\n return brs.reduce((area, b) =>\r\n {\r\n let size = Production.GetSpiteSize(b);\r\n let ar: number;\r\n if (size)\r\n ar = size.spliteHeight * size.spliteWidth / 1e6;\r\n else\r\n ar = b.Width * b.Height / 1e6;\r\n ar = parseFloat(ar.toFixed(3));\r\n return area + ar;\r\n }, 0).toFixed(2);\r\n }\r\n}\r\n\r\nexport const lookOverBoardInfosTool = new LookOverBoardInfosTool();\r\n","import { 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 { 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 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 PolygonRes\r\n{\r\n vertices: Array,\r\n plane: [number, number, number, number];\r\n}\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): Geom3\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);\r\n}\r\n","import { Geom3, Poly3 } from \"@jscad/modeling/src/geometries/types\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport { Vector3 } from \"three\";\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?: Geom3, 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 { Geom3, transform } from \"@jscad/modeling/src/geometries/geom3\";\r\nimport { Mat4 } from \"@jscad/modeling/src/maths/mat4\";\r\nimport { Matrix4 } from \"three\";\r\nimport { MakeMirrorMtx } from \"../../Common/Matrix4Utils\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { GetBoardContour } from \"../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { Geometry2CSG2 } from \"../../csg/core/Geometry2CSG\";\r\nimport { ZAxis } from \"../GeUtils\";\r\n\r\nexport function BoardSideModelCSGBuilder(board: Board): Geom3[]\r\n{\r\n const sideModeingCsgs: Geom3[] = [];\r\n\r\n if (!(board.SideModelingMap.size || board.RelevanceSideModelMap.size))\r\n return sideModeingCsgs;\r\n\r\n let con = GetBoardContour(board);\r\n if (!con) return sideModeingCsgs;\r\n\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n const mirrorMtxZ = MakeMirrorMtx(ZAxis);\r\n\r\n for (let [index, soilds] of board.AllSideModelGrooveMap)\r\n {\r\n let cu = cus[index];\r\n if (!cu) continue;\r\n\r\n let mt4 = GetSideCuFaceMtx(cus[index], inverseZ);\r\n\r\n for (let soild of soilds)\r\n {\r\n let s = soild.Clone();\r\n let geom3 = Geometry2CSG2(s.MeshGeometry);\r\n geom3 = transform(mirrorMtxZ.elements as Mat4, geom3);\r\n geom3 = transform(mt4.clone().multiply(soild.OCS).elements as Mat4, geom3);\r\n sideModeingCsgs.push(geom3);\r\n }\r\n }\r\n\r\n return sideModeingCsgs;\r\n}\r\n\r\nexport function GetSideCuFaceMtx(cu: Curve, inverseZ = false): Matrix4\r\n{\r\n let x = cu.GetFirstDeriv(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 = cu.StartPoint;\r\n\r\n return new Matrix4().makeBasis(x, y, z).setPosition(basePt);\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 const a_x = vertices[indexA * 3];\r\n const a_y = vertices[indexA * 3 + 1];\r\n const b_x = vertices[indexB * 3];\r\n const b_y = vertices[indexB * 3 + 1];\r\n const c_x = vertices[indexC * 3];\r\n const 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 const a_x = vertices[indexA * 3];\r\n const a_y = vertices[indexA * 3 + 1];\r\n const a_z = vertices[indexA * 3 + 2];\r\n const b_x = vertices[indexB * 3];\r\n const b_y = vertices[indexB * 3 + 1];\r\n const b_z = vertices[indexB * 3 + 2];\r\n const c_x = vertices[indexC * 3];\r\n const c_y = vertices[indexC * 3 + 1];\r\n const c_z = vertices[indexC * 3 + 2];\r\n const d_x = vertices[indexD * 3];\r\n const d_y = vertices[indexD * 3 + 1];\r\n const d_z = vertices[indexD * 3 + 2];\r\n\r\n if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x))\r\n {\r\n return [\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 else\r\n {\r\n return [\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 }\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 const a_x = vertices[indexA * 3];\r\n const a_y = vertices[indexA * 3 + 1];\r\n const b_x = vertices[indexB * 3];\r\n const b_y = vertices[indexB * 3 + 1];\r\n const c_x = vertices[indexC * 3];\r\n const 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 { 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 { 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(): Shape[]\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\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[] | (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 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 ClearDraw(): this\r\n {\r\n this.UpdateDrawGeometry();\r\n return super.ClearDraw();\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.DrawColorIndex));\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.DrawColorIndex)),\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)),\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.DrawColorIndex)),\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.DrawColorIndex);\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.DrawColorIndex)),\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)),\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.DrawColorIndex)),\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.DrawColorIndex);\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.DrawColorIndex);\r\n }\r\n else\r\n {\r\n let mesh = obj.children[i] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.DrawColorIndex);\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 if (ver > 1)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n this._ShapeManager.WriteFile(file);\r\n\r\n // ver2\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n}\r\n","\r\n\r\nexport const CanDrawHoleFuzz = 0.1;\r\n","import { Segment1d } from \"../../Editor/TranstrolControl/Segment1dUtil\";\r\n\r\nconst FUZZ = 1e-5;\r\n\r\n//Segment1d列表中 合并相交的区间\r\nexport function Segment1dJoin(segment: Segment1d[]): Segment1d[]\r\n{\r\n if (segment.length < 2)\r\n return segment;\r\n\r\n segment.sort((a, b) => a[0] - b[0]);\r\n\r\n const NewSegment: Segment1d[] = [];\r\n\r\n for (let i = 0; i < segment.length; i++)\r\n {\r\n let segment1 = segment[i];\r\n\r\n if (i === segment.length - 1)\r\n {\r\n NewSegment.push(segment1);\r\n break;\r\n }\r\n\r\n for (let j = i + 1; j < segment.length; j++)\r\n {\r\n let segment2 = segment[j];\r\n if (segment2[0] < segment1[1] + FUZZ)\r\n segment1 = [segment1[0], Math.max(segment1[1], segment2[1])];\r\n else\r\n {\r\n NewSegment.push(segment1);\r\n break;\r\n }\r\n\r\n if (j === segment.length - 1)\r\n {\r\n NewSegment.push(segment1);\r\n i = segment.length - 1;\r\n }\r\n }\r\n }\r\n\r\n return NewSegment;\r\n}\r\n\r\n//获取多个区间列表相交的部分\r\nexport function IntersectSegment1ds(segment1: Segment1d[], segment2: Segment1d[]): Segment1d[]\r\n{\r\n const IntersectSegments: Segment1d[] = [];\r\n\r\n for (let s1 of segment1)\r\n {\r\n for (let s2 of segment2)\r\n {\r\n //[1,10] + [5,15] = [5,10]\r\n if ((s2[0] > s1[0] - FUZZ && s2[0] < s1[1]) || (s1[0] > s2[0] - FUZZ && s1[0] < s2[1]))\r\n {\r\n IntersectSegments.push([Math.max(s1[0], s2[0]), Math.min(s1[1], s2[1])]);\r\n }\r\n }\r\n }\r\n\r\n return IntersectSegments;\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { MatrixPlanarizere } from \"../../Common/Matrix4Utils\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\nimport { Segment1d } from \"../../Editor/TranstrolControl/Segment1dUtil\";\r\nimport { BoolOpeartionType } from \"../../GraphicsSystem/BoolOperateUtils\";\r\nimport { Box3Ext } from \"../Box\";\r\nimport { XAxis, equaln } from \"../GeUtils\";\r\nimport { BoardFaceType } from \"./BoardGetFace\";\r\nimport { IntersectSegment1ds, Segment1dJoin } from \"./Sement1dUntils\";\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 polyLineOCS?: Matrix4;\r\n CurveBoardFaceRegionPolyline?: Polyline;\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 FixedInterval: Segment1d[]; //造型、凹槽周围包围圈 厚度半个排钻宽度\r\n Segment1D: Segment1d[]; //可放置的区间\r\n PolyLineOCS: Matrix4 = new Matrix4();\r\n CurveBoardFaceRegionPolyline: Polyline; //曲线板分段面轮廓\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 if (parameters.polyLineOCS)\r\n this.PolyLineOCS = parameters.polyLineOCS;\r\n\r\n if (parameters.CurveBoardFaceRegionPolyline)\r\n this.CurveBoardFaceRegionPolyline = parameters.CurveBoardFaceRegionPolyline;\r\n }\r\n }\r\n get Region()\r\n {\r\n if (!this._Region)\r\n {\r\n let curve: Curve = this.CurveBoardFaceRegionPolyline ?? new Polyline().Rectangle(this.Length, this.Width);\r\n this._Region = Region.CreateFromCurves([curve]);\r\n }\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 if (sideFace.type === noSideFace.type)\r\n [sideFace, noSideFace] = this.Width > f.Width ? [f, this] : [this, f];\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 //注意: 排钻因为布尔运算失败的重灾区\r\n // TestDraw(sideReg.Clone(), 1);\r\n // TestDraw(toReg.Clone(), 2);\r\n\r\n isSuccess = sideReg.BooleanOper(toReg, BoolOpeartionType.Intersection);\r\n\r\n //挖穿造型分段排钻\r\n const throughModelSegmentedDrill = HostApplicationServices.throughModelSegmentedDrill;\r\n\r\n if (throughModelSegmentedDrill)\r\n {\r\n let boardModeling = noSideFace.LocalBoard.BoardModeling;\r\n if (boardModeling?.length)\r\n {\r\n let boardThickness = noSideFace.LocalBoard.Thickness;\r\n for (let modal of boardModeling)\r\n {\r\n if (boardThickness - modal.thickness > 1e-5) continue;\r\n let modalReg = Region.CreateFromCurves([modal.shape.Outline.Curve]).ApplyMatrix(diffMtx);\r\n isSuccess = sideReg.BooleanOper(modalReg, BoolOpeartionType.Subtract);\r\n }\r\n }\r\n }\r\n\r\n for (let s of sideReg.ShapeManager.ShapeList)\r\n {\r\n if (!throughModelSegmentedDrill)\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 else\r\n {\r\n //求以X轴和Y=Thickness轴上的点 相互切割形成的矩形面\r\n const XLists: Segment1d[] = [];\r\n const TLists: Segment1d[] = [];\r\n const Thickness = s.BoundingBox.getSize(new Vector3).y;\r\n\r\n for (let cu of s.Outline.Shape.curves)\r\n {\r\n let pt1 = cu.getPoint(0);\r\n let pt2 = cu.getPoint(1);\r\n\r\n let x1 = Math.abs(pt1.x);\r\n let x2 = Math.abs(pt2.x);\r\n\r\n\r\n if (equaln(pt1.y, 0) && equaln(pt2.y, 0))\r\n XLists.push([Math.min(x1, x2), Math.max(x1, x2)]);\r\n\r\n if (equaln(Math.abs(pt1.y), Thickness) && equaln(Math.abs(pt2.y), Thickness))\r\n TLists.push([Math.min(x1, x2), Math.max(x1, x2)]);\r\n }\r\n //合并可以相连的区间 如[0,100] + [100,200] = [0,200]\r\n const XJoinLists: Segment1d[] = Segment1dJoin(XLists);\r\n const TJoinLists: Segment1d[] = Segment1dJoin(TLists);\r\n //X轴和厚度轴相交的区间\r\n const IntersectSegments = IntersectSegment1ds(XJoinLists, TJoinLists);\r\n\r\n //造型切割出来会有Position点 其他都是(0,0,0)\r\n let startPt = new Vector3(s.Position.x);\r\n\r\n for (let segment of IntersectSegments)\r\n {\r\n let minV: Vector3;\r\n let maxV: Vector3;\r\n //圆弧板面宽度具有方向性\r\n if (sideFace.Width > 0)\r\n {\r\n minV = new Vector3(segment[0]);\r\n maxV = new Vector3(segment[1], Thickness);\r\n }\r\n else\r\n {\r\n minV = new Vector3(segment[0], sideFace.Width);\r\n maxV = new Vector3(segment[1]);\r\n }\r\n\r\n let box = new Box3Ext(minV.add(startPt), maxV.add(startPt));\r\n retBoxs.push(box);\r\n sizes.push(box.getSize(new Vector3));\r\n }\r\n }\r\n }\r\n\r\n if (throughModelSegmentedDrill && !retBoxs.length) isSuccess = false;\r\n }\r\n else\r\n {\r\n let minV: Vector3;\r\n let maxV: Vector3;\r\n //圆弧板面宽度具有方向性\r\n if (sideFace.Width > 0)\r\n {\r\n minV = new Vector3();\r\n maxV = new Vector3(sideFace.Length, sideFace.Width);\r\n }\r\n else\r\n {\r\n minV = new Vector3(0, sideFace.Width);\r\n maxV = new Vector3(sideFace.Length, 0);\r\n }\r\n\r\n let retBox = new Box3Ext(minV, maxV);\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 minV: Vector3;\r\n let maxV: Vector3;\r\n if (sideFace.Width > 0)\r\n {\r\n minV = new Vector3();\r\n maxV = new Vector3(sideFace.Length, sideFace.Width);\r\n }\r\n else\r\n {\r\n minV = new Vector3(0, sideFace.Width);\r\n maxV = new Vector3(sideFace.Length, 0);\r\n }\r\n\r\n let retBox = new Box3Ext(minV, maxV);\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) || Math.abs(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, Vector2, Vector3 } from \"three\";\r\nimport { ArcBoardBuild } from \"../../Add-on/ArcBoard/ArcBoardBuild\";\r\nimport { SplitPolyline } from \"../../Add-on/BoardCutting/SplitPolyline\";\r\nimport { DrillType, FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\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 { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\nimport { GetBoardContour, GetBoardHighSeal } from \"../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { IHighSealedItem } from \"../../UI/Store/OptionInterface/IHighSealedItem\";\r\nimport { GetSideCuFaceMtx } from \"../Board2DModelCSG/BoardSideModelCSGBuilder\";\r\nimport { AsVector2, ZAxis, angle, equaln, equalv3 } from \"../GeUtils\";\r\nimport { CanDrawHoleFuzz } from \"./CanDrawHoleFuzz\";\r\nimport { Face } from \"./Face\";\r\n\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 if (this.Board.IsArcBoard)\r\n {\r\n this.GetArcBoardFaces();\r\n return;\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 let throughModelSegmentedDrill = HostApplicationServices.throughModelSegmentedDrill;\r\n let isRect = throughModelSegmentedDrill ? (this.Board.IsRect && !this.Board.BoardModeling.length) : this.Board.IsRect;\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,\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,\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\r\n //获取曲线板的正反 侧面\r\n GetArcBoardFaces(faceSealingDataMap?: Map, highSealingData?: IHighSealedItem[], sealCu?: Curve[])\r\n {\r\n let br = this.Board;\r\n const opt = br.BoardProcessOption;\r\n\r\n //排钻反应器 实体渲染赋值可能延迟 手动构造ArcBoardBuild\r\n let sweepArcBoardBuild = new ArcBoardBuild(br);\r\n sweepArcBoardBuild.ParseSweepCurves();\r\n\r\n let conCus = sweepArcBoardBuild.SweepCurves1.map(c => c.Clone());\r\n\r\n //曲线路径相对曲线板\r\n const RX = new Matrix4().makeRotationX(Math.PI / 2);\r\n const PathOCS = new Matrix4().multiplyMatrices(br.OCS, RX);\r\n\r\n // //弧形板旋转角度\r\n const AMtx = new Matrix4().makeRotationY(br.SweepAngle);\r\n PathOCS.multiply(AMtx);\r\n\r\n let basePt = new Vector3().applyMatrix4(new Matrix4().multiplyMatrices(RX, sweepArcBoardBuild.OCS2RotateMtx));\r\n PathOCS.multiply(new Matrix4().setPosition(basePt));\r\n\r\n const PathOCSInv = new Matrix4().getInverse(PathOCS);\r\n\r\n for (let cu of conCus)\r\n cu.ApplyMatrix(PathOCS);\r\n\r\n const ZNormal = new Vector3().setFromMatrixColumn(PathOCS, 2);\r\n let currentLength = 0;\r\n\r\n const FaceDir = br.SweepVisibleFace === FaceDirection.Front ? -1 : 1;\r\n\r\n const ContourCurve = br.ContourCurve.Clone() as Polyline;\r\n\r\n //弧形板旋转角度\r\n ContourCurve.ApplyMatrix(sweepArcBoardBuild.OCS2RotateMtx);\r\n if (highSealingData)\r\n {\r\n let cus = (br.ContourCurve.Clone() as Polyline).Explode();\r\n highSealingData.push(...structuredClone(GetBoardHighSeal(br, cus)));\r\n sealCu.push(...cus);\r\n }\r\n\r\n let contourLength = br.ParseBoardLengthInArcSweep();\r\n\r\n for (let i = 0; i < conCus.length; i++)\r\n {\r\n if (currentLength > contourLength)\r\n continue;\r\n\r\n //按分段曲线 对板轮廓裁剪\r\n let conCu = conCus[i];\r\n let length = currentLength + conCu.Length;\r\n\r\n //跳过圆弧\r\n if (conCu instanceof Arc)\r\n {\r\n currentLength = length;\r\n continue;\r\n }\r\n\r\n let starKnifePls = new Polyline([{ pt: AsVector2({ x: currentLength, y: -1 }), bul: 0 }, { pt: AsVector2({ x: currentLength, y: 10000 }), bul: 0 }]);\r\n let endKnifePls = new Polyline([{ pt: AsVector2({ x: length, y: -1 }), bul: 0 }, { pt: AsVector2({ x: length, y: 10000 }), bul: 0 }]);\r\n\r\n //裁剪结果\r\n let faceRegions = SplitPolyline(ContourCurve, [starKnifePls, endKnifePls]);\r\n faceRegions = faceRegions.filter((faceRegion) =>\r\n {\r\n let x = faceRegion.BoundingBox.getCenter(new Vector3).x;\r\n return x > currentLength && x < length;\r\n });\r\n\r\n if (faceRegions.length)\r\n {\r\n let c = conCu.Clone().ApplyMatrix(PathOCSInv);\r\n let lineToward = c.EndPoint.clone().sub(c.StartPoint);\r\n let ro = angle(lineToward);\r\n\r\n let ocs = PathOCS.setPosition(0, 0, 0);\r\n ocs = new Matrix4().multiplyMatrices((new Matrix4().makeRotationAxis(ZNormal, ro)), ocs).setPosition(conCu.StartPoint);\r\n ocs.multiply(new Matrix4().getInverse(RX));\r\n\r\n for (let faceRegion of faceRegions)\r\n {\r\n //添加正反面\r\n for (let data of faceRegion.LineData)\r\n data.pt.add(new Vector2(-currentLength));\r\n\r\n let frontMat: Matrix4;\r\n let backMat: Matrix4;\r\n let mtx = MakeMirrorMtx(ZAxis);\r\n\r\n const faceRegionBox = faceRegion.BoundingBox;\r\n const faceRegionSize = faceRegionBox.getSize(new Vector3);\r\n\r\n if (br.SweepVisibleFace === FaceDirection.Front)\r\n {\r\n frontMat = new Matrix4().multiplyMatrices(ocs, mtx.setPosition(new Vector3(0, faceRegionBox.min.y, br.Thickness * FaceDir)));\r\n backMat = new Matrix4().multiplyMatrices(ocs, new Matrix4().setPosition(new Vector3(0, faceRegionBox.min.y)));\r\n }\r\n else\r\n {\r\n frontMat = new Matrix4().multiplyMatrices(ocs, new Matrix4().setPosition(new Vector3(0, faceRegionBox.min.y, br.Thickness * FaceDir)));\r\n backMat = new Matrix4().multiplyMatrices(ocs, mtx.setPosition(new Vector3(0, faceRegionBox.min.y)));\r\n }\r\n\r\n if (opt.frontDrill)\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.NoSide,\r\n localBoard: br,\r\n matrix4: frontMat,\r\n length: conCu.Length,\r\n width: faceRegionSize.y,\r\n CurveBoardFaceRegionPolyline: faceRegion\r\n }));\r\n\r\n if (opt.backDrill)\r\n {\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.NoSide,\r\n localBoard: br,\r\n matrix4: backMat,\r\n length: conCu.Length,\r\n width: faceRegionSize.y,\r\n CurveBoardFaceRegionPolyline: faceRegion\r\n }));\r\n }\r\n\r\n //侧面\r\n let cus = faceRegion.Explode();\r\n\r\n //应用新轮廓 计算排钻顺序\r\n let cloneBr = br.Clone();\r\n cloneBr.ContourCurve = faceRegion;\r\n const HighDrill = cloneBr.BoardProcessOption.highDrill.slice();\r\n\r\n for (let j = 0; j < cus.length; j++)\r\n {\r\n if (HighDrill.length > 0 && HighDrill[j] === DrillType.None) continue;\r\n\r\n let cu = cus[j];\r\n let mtx = GetSideFaceMtx(cu, faceRegion.IsClockWise);\r\n let ocs = PathOCS.clone().setPosition(0, 0, 0);\r\n ocs = new Matrix4().multiplyMatrices((new Matrix4().makeRotationAxis(ZNormal, ro)), ocs).setPosition(conCu.StartPoint);\r\n ocs.multiply(new Matrix4().getInverse(RX)).multiply(mtx);\r\n\r\n let f = new Face({\r\n type: BoardFaceType.Side,\r\n localBoard: br,\r\n matrix4: ocs,\r\n length: cu.Length,\r\n width: br.Thickness * FaceDir,\r\n drillType: HighDrill.length > 0 && HighDrill[j]\r\n });\r\n\r\n if (faceSealingDataMap)\r\n {\r\n let pt = cu.GetPointAtParam(0.5).add(new Vector3(currentLength));\r\n let index = Math.floor(ContourCurve.GetParamAtPoint(pt));\r\n if (!isNaN(index))\r\n faceSealingDataMap.set(f, index);\r\n }\r\n this.Faces.push(f);\r\n }\r\n }\r\n }\r\n\r\n currentLength = length;\r\n }\r\n // 测试代码\r\n // for (let f of this.Faces)\r\n // {\r\n // let r = f.Region.Clone().ApplyMatrix(f.OCS);\r\n // TestDraw(r);\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.GetFirstDeriv(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\nexport class ParseBoardSideFace extends BoardGetFace\r\n{\r\n constructor(public Board: Board)\r\n {\r\n super(Board);\r\n }\r\n\r\n ParseFaces()\r\n {\r\n this.GetSideFaces();\r\n }\r\n\r\n GetSideFaces()\r\n {\r\n let con = GetBoardContour(this.Board);\r\n if (!con) return;\r\n\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n for (let cu of cus)\r\n {\r\n let type = BoardFaceType.Side;\r\n\r\n let length = cu.Length;\r\n if (equaln(length, 0) || cu instanceof Arc)\r\n type = BoardFaceType.NoSide;\r\n\r\n let mtx = GetSideCuFaceMtx(cu, inverseZ);\r\n let face = new Face({\r\n type,\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 });\r\n this.Faces.push(face);\r\n }\r\n }\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, BufferGeometry, Float32BufferAttribute, MathUtils, Matrix4, ShapeUtils, Shape as TShape, Vector3 } from \"three\";\r\nimport { arrayPushArray, arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { ComputerCurvesNormalOCS, curveLinkGroup } from \"../../Common/CurveUtils\";\r\nimport { Status } from '../../Common/Status';\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { Contour, fastCurveInCurve2 } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { LinesType } from \"../../DatabaseServices/Entity/BoardInterface\";\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 { FuzzyFactory } from '../../csg/core/FuzzyFactory';\r\nimport { IntersectsBox } from \"../Box\";\r\nimport { CreateContour2 } from \"../CreateContour2\";\r\nimport { FastOffset } from \"../FastOffset\";\r\nimport { AsVector2, IdentityMtx4, equaln, equalv2, equalv3 } 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, displayAccuracy = 0)\r\n {\r\n this.contourWall.Draw(verticesArray, uvArray, edgeBuild, displayAccuracy);\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[], ignoreInCurve = false, checkIntersect = false): 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 //检查是否有交集\r\n if (checkIntersect && node1.contour.Curve.IntersectWith(node2.contour.Curve, IntersectOption.ExtendNone)?.length)\r\n continue;\r\n\r\n if (node2.contour.Curve.PtInCurve(p) || ignoreInCurve)\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\r\n //对于未被面域分析出来的线,我们进行join操作\r\n let unusedLines: Line[] = [];\r\n for (let l of lines)\r\n if (!parse.GetCueveUsed(l))\r\n unusedLines.push(l);\r\n if (unusedLines.length > 2)\r\n {\r\n let groups = curveLinkGroup(unusedLines, 1);\r\n for (let g of groups)\r\n {\r\n if (g.length < 2) continue;\r\n let pl = new Polyline();\r\n pl.ColorIndex = g[0].ColorIndex;\r\n pl.OCS = ComputerCurvesNormalOCS(g);\r\n for (let cu of g)\r\n {\r\n if (pl.Join(cu, false, 0.1) === Status.True)\r\n cu.Erase();\r\n }\r\n\r\n pl.CloseMark = true;\r\n let c = Contour.CreateContour(pl, false) ?? CreateContour2(pl.Explode(), 0.1);;\r\n if (c && c.Area > 0.1)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"错误:构建板件的MeshGeometry的盖子生成轮廓失败了!\");\r\n }\r\n }\r\n\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) ?? CreateContour2(cs, 0.1);\r\n if (c)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"错误:构建板件的MeshGeometry的盖子生成轮廓失败了!\");\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, displayAccuracy = 0)\r\n {\r\n this.curve.DisplayAccuracy = displayAccuracy;\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, br.DisplayAccuracy);\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\r\n //备份原始的槽,下面的代码为了合并槽,会将板的槽先清空,后续我们在还原它 (未来我们可能不强制合并板的槽 而是在这里合并? 保证板的槽的纯粹?例如矩形)\r\n let bakGrooves: ExtrudeSolid[];\r\n {\r\n //合并深度相同 但是半径不相同的槽\r\n\r\n let thicknessKnifsMap = new Map>();//深度->刀半径Set\r\n let thicknessGroovesMap = new Map();//深度->刀半径Set\r\n\r\n let fuzz = new FuzzyFactory(2, 1e-2);\r\n for (let g of br.Grooves)//准备数据 map\r\n {\r\n let thick = fuzz.lookupOrCreate([g.Thickness], g.Thickness);\r\n let knifsSet = thicknessKnifsMap.get(thick);\r\n let grooveArr = thicknessGroovesMap.get(thick);\r\n if (!knifsSet)\r\n {\r\n knifsSet = new Set();\r\n grooveArr = [];\r\n thicknessKnifsMap.set(thick, knifsSet);\r\n thicknessGroovesMap.set(thick, grooveArr);\r\n }\r\n grooveArr.push(g);\r\n knifsSet.add(g.KnifeRadius);\r\n }\r\n\r\n let mergeGrooves: ExtrudeSolid[] = [];\r\n for (let [thick, set] of thicknessKnifsMap)\r\n {\r\n if (set.size > 1)//如果深度相同的大于1\r\n {\r\n if (!bakGrooves)\r\n bakGrooves = br.Grooves.concat();//复制一个\r\n\r\n let arr = thicknessGroovesMap.get(thick).map(g =>\r\n {\r\n let newg = g.Clone();\r\n newg.KnifeRadius = 0;\r\n return newg;\r\n });\r\n br.Grooves.length = 0;\r\n br.Grooves.push(...arr);\r\n br.GrooveCheckMerge(false);\r\n\r\n mergeGrooves.push(...br.Grooves);\r\n }\r\n else\r\n {\r\n mergeGrooves.push(...thicknessGroovesMap.get(thick));\r\n }\r\n }\r\n\r\n if (bakGrooves)\r\n {\r\n br.Grooves.length = 0;\r\n br.Grooves.push(...mergeGrooves);\r\n }\r\n }\r\n\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 if (bakGrooves)\r\n {\r\n br.Grooves.length = 0;\r\n br.Grooves.push(...bakGrooves);\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, 1e-4);\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","\r\nimport Flatbush from 'flatbush';\r\nimport { Box3, BoxGeometry, BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, Float32BufferAttribute, FrontSide, Frustum, Geometry, Group, InstancedInterleavedBuffer, InterleavedBufferAttribute, LineSegments, Material, Matrix3, Matrix4, Mesh, Object3D, Line as TLine, UVGenerator, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { SplitPolyline } from '../../Add-on/BoardCutting/SplitPolyline';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { arrayClone, arrayLast, arrayRemoveIf, arraySortByNumber, arraySum } from \"../../Common/ArrayExt\";\r\nimport { CSGIntersect } from '../../Common/CSGIntersect';\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { equalCurve } from \"../../Common/CurveUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { InteractionLog, Log, LogType } from \"../../Common/Log\";\r\nimport { MakeMirrorMtx, TransformVector, Vector2ApplyMatrix4, reviseMirrorMatrix, tempMatrix1 } from \"../../Common/Matrix4Utils\";\r\nimport { Status, UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { BSPGroupParse } from '../../Geometry/BSPGroupParse';\r\nimport { GetSideCuFaceMtx } from '../../Geometry/Board2DModelCSG/BoardSideModelCSGBuilder';\r\nimport { boardUVGenerator } from \"../../Geometry/BoardUVGenerator\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { FastExtrudeEdgeGeometry, FastExtrudeEdgeGeometryOfShape, FastWireframe } from \"../../Geometry/CreateWireframe\";\r\nimport { ParseBoardSideFace } from '../../Geometry/DrillParse/BoardGetFace';\r\nimport { EdgesGeometry } from \"../../Geometry/EdgeGeometry\";\r\nimport { ExtrudeGeometryBuilder } from \"../../Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2\";\r\nimport { AsVector2, IdentityMtx4, MoveMatrix, XAxis, YAxis, ZAxis, ZeroVec, equaln, equalv2, equalv3, isIntersect, isParallelTo, isPerpendicularityTo } from \"../../Geometry/GeUtils\";\r\nimport { OBB } from \"../../Geometry/OBB/obb\";\r\nimport { ScaleUV, ScaleUV2 } from \"../../Geometry/UVUtils\";\r\nimport { GetBoardContour } from '../../GraphicsSystem/CalcEdgeSealing';\r\nimport { ColorInTransparent, RenderState, 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 { Shape2 } from '../Shape2';\r\nimport { ShapeManager } from \"../ShapeManager\";\r\nimport { Spline } from \"../Spline\";\r\nimport { Board } from \"./Board\";\r\nimport { Circle } from \"./Circle\";\r\nimport { Curve } from './Curve';\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 private _DisplayAccuracy = 0;\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 protected bevelEnabled = false;\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 */\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\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?.IsFull);\r\n let isf_new = Boolean(materialId?.Object?.IsFull);\r\n if (isf_old !== isf_new)\r\n this.Update();\r\n else if (materialId?.Object?.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 DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n get KnifeRadius()\r\n {\r\n return this.knifeRadius;\r\n }\r\n set KnifeRadius(v: number)\r\n {\r\n if (!equaln(v, this.knifeRadius))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.knifeRadius = v;\r\n\r\n //在双击板修改的时候,我们希望它能修改绘制版本,这样它的关联实体也会被刷新\r\n this.__UpdateVersion__++;\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone);\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 let normal = this.Normal.negate();\r\n\r\n for (let g of this.grooves)\r\n {\r\n g._SpaceOCS.copy(this._SpaceOCS);//因为在镜像(Extrude.ApplyMirrorMatrix)的时候 没有设置这个会导致错误(参考该函数的代码,似乎是为了实现柜子镜像) 所以拷贝一下\r\n g.objectId = new ObjectId;\r\n g.ApplyMatrix(m);\r\n\r\n //如果是镜像,如果槽的方向相反了,那么需要修正\r\n let gNormal = g.Normal;\r\n if (equalv3(normal, gNormal, 1e-3))\r\n {\r\n let p = g.Position.add(gNormal.multiplyScalar(g.thickness * 0.5));\r\n g.ApplyMatrix(MakeMirrorMtx(normal, p));\r\n }\r\n\r\n g.objectId = undefined;\r\n }\r\n\r\n \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\r\n //实现了这个函数后 实现了柜子的镜像\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n const curve = this.ContourCurve;\r\n if (curve instanceof Polyline && !equalv3(curve.Position, ZeroVec))//移除多段线的OCS(目前只判断了基点)\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 Vector2ApplyMatrix4(ocs, p.pt);\r\n curve.OCS = IdentityMtx4;\r\n }\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 curve.ApplyMatrix(new Matrix4().makeRotationX(Math.PI));\r\n else\r\n reviseMirrorMatrix(curve.OCSNoClone, 1);\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 curve.ApplyMatrix(new Matrix4().makeRotationY(Math.PI));\r\n else\r\n reviseMirrorMatrix(curve.OCSNoClone, 0);\r\n\r\n this.SetContourCurve(curve);\r\n }\r\n\r\n if (this.grooves.length)\r\n this.Update(UpdateDraw.Geometry);\r\n\r\n return this;\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-4))//避免18.0009 无法改成 18\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 //修复#I7CBHO的过程中 直接修改了这个属性\r\n get Grooves()\r\n {\r\n return this.grooves;\r\n }\r\n\r\n //侧面造型\r\n get SideModelingMap(): Map\r\n {\r\n return undefined;\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 // 默认轮廓都是白的\r\n this.contourCurve.ColorIndex = 7;\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 */\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!`, LogType.Warning);\r\n this.isRect = equaln(this.width * this.height, this.ContourCurve.Area, 0.1);\r\n\r\n // if (area2 < 0)\r\n // this.contourCurve.Reverse();//矩形板的封边与排钻不需要考虑 异形板的排钻封边可能会错误(无所谓了)\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 TransformVector(box.min, this.OCSNoClone);\r\n this._Matrix.setPosition(this.Position.add(box.min));\r\n }\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() { return this.GetShape(false); }\r\n\r\n private GetShape(filterSmallGroove = false)\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) && (!filterSmallGroove || g.ContourCurve.Area > HostApplicationServices.smallGrooveThreshold))\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, 1e-3)\r\n && equaln(0, targetZMin, 2e-3))\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\r\n if (unionShapes.length === 1)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n //防止重复添加\r\n this.grooves = this.grooves.filter((g) => !equaln(g.thickness, target.thickness, 1e-3));//过滤掉一样的 因为已经在shape里\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 for (let tg of target.grooves)\r\n if (!equaln(tg.thickness, target.thickness, 1e-3))//过滤掉一样的 因为已经在shape里\r\n this.grooves.push(tg.Clone());\r\n\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 \r\n return false;\r\n }\r\n\r\n //将相交部分转换为正反面槽或侧槽\r\n ParseGrooves(knifeExtrudes: ExtrudeSolid[])\r\n {\r\n let faces: ParseBoardSideFace;\r\n let con: ExtrudeContourCurve;\r\n let inverseZ: boolean;\r\n let cus: Curve[];\r\n let mirrorMtxZ: Matrix4;\r\n\r\n let grooves: ExtrudeSolid[] = [];\r\n let relevanceSideModelMap: Map = new Map();\r\n\r\n //切割的侧槽\r\n const GetSideModelList = (extrude: ExtrudeSolid) =>\r\n {\r\n let knifeCon = extrude.ContourCurve.Clone();\r\n let knifeConIsCircle = knifeCon instanceof Circle;\r\n\r\n if (this instanceof Board)\r\n {\r\n let intersectFaceIndex = 0;\r\n let intersectFaceIndexs: number[] = [];\r\n\r\n if (!faces)\r\n {\r\n faces = new ParseBoardSideFace(this);\r\n con = GetBoardContour(this);\r\n if (!con) return;\r\n\r\n inverseZ = con.Area2 < 0;\r\n cus = con.Explode() as Curve[];\r\n mirrorMtxZ = MakeMirrorMtx(ZAxis);\r\n }\r\n\r\n //相交SCG\r\n //使用克隆 防止正反面槽mesh丢失\r\n let cloneEnt = this.Clone();\r\n let interCSG = CSGIntersect(cloneEnt.CSG, extrude.CSG, this.OCSInv.multiply(extrude.OCS));\r\n\r\n //转换至相交面的尺寸\r\n let topology = new BSPGroupParse(interCSG as any);\r\n let ptsList = topology.Parse();\r\n\r\n for (let pts of ptsList)\r\n {\r\n // ------- 求相交面索引 begin ----------\r\n intersectFaceIndexs = [];\r\n let checkBox = new Box3Ext().setFromPoints(pts);\r\n\r\n for (let i = 0; i < faces.Faces.length; i++)\r\n {\r\n let face = faces.Faces[i];\r\n let region = face.Region.Clone();\r\n region.ApplyMatrix(this.OCSInv.multiply(face.OCS));\r\n if (checkBox.intersectsBox(region.BoundingBox, 1e-3))\r\n intersectFaceIndexs.push(i);\r\n }\r\n\r\n if (!intersectFaceIndexs.length)\r\n {\r\n InteractionLog([{ msg: `${this.Name}`, entity: [this] }, { msg: \"侧面造型切割面解析失败, 无法生成侧面造型!\" }], LogType.Error);\r\n continue;\r\n }\r\n else if (intersectFaceIndexs.length === 1)\r\n intersectFaceIndex = intersectFaceIndexs[0];\r\n else\r\n {\r\n //截面小的为正面\r\n intersectFaceIndexs.sort((i, j) =>\r\n {\r\n let faceOCSInv1 = faces.Faces[i].OCSInv;\r\n let faceOCSInv2 = faces.Faces[j].OCSInv;\r\n let box1 = checkBox.clone().applyMatrix4(this.OCS).applyMatrix4(faceOCSInv1).getSize(new Vector3);\r\n let box2 = checkBox.clone().applyMatrix4(this.OCS).applyMatrix4(faceOCSInv2).getSize(new Vector3);\r\n\r\n return knifeConIsCircle ? box1.x - box2.x : box2.x - box1.x;\r\n });\r\n intersectFaceIndex = intersectFaceIndexs[0];\r\n }\r\n\r\n intersectFaceIndexs = [];\r\n // ------- 求相交面索引 end ----------\r\n\r\n const faceMtx = GetSideCuFaceMtx(cus[intersectFaceIndex], inverseZ);\r\n const faceMtxInv = new Matrix4().getInverse(faceMtx);\r\n const faceMtxOnBoard = this.OCS.multiply(faceMtx).multiply(mirrorMtxZ);\r\n const mtx = new Matrix4().getInverse(faceMtx.clone().multiply(mirrorMtxZ));\r\n\r\n //测试绘制\r\n // TestDrawGeom3s([interCSG], 1);\r\n let sideModelCon: ExtrudeContourCurve;\r\n\r\n let yv = extrude.Normal;\r\n let zv = new Vector3().setFromMatrixColumn(faceMtxOnBoard, 2);\r\n if (isParallelTo(yv, zv))\r\n {\r\n sideModelCon = knifeCon.Clone();\r\n\r\n yv = new Vector3().setFromMatrixColumn(extrude.OCS, 0);\r\n }\r\n\r\n let xv = yv.clone().cross(zv);\r\n yv.copy(zv).cross(xv);\r\n xv.normalize();\r\n yv.normalize();\r\n zv.normalize();\r\n\r\n const grooveMtx = new Matrix4().makeBasis(xv, yv, zv).copyPosition(faceMtxOnBoard);\r\n const grooveMtxInv = new Matrix4().getInverse(grooveMtx).multiply(faceMtxOnBoard).multiply(mtx);\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(grooveMtxInv);\r\n\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 solid = new ExtrudeSolid();\r\n solid.groovesAddDepth = extrude.groovesAddDepth;\r\n solid.groovesAddLength = extrude.groovesAddLength;\r\n solid.groovesAddWidth = extrude.groovesAddWidth;\r\n solid.knifeRadius = extrude.knifeRadius;\r\n solid.ConverToRectSolid(size.x, size.y, size.z);\r\n\r\n if (sideModelCon)\r\n {\r\n if (sideModelCon instanceof Circle)\r\n {\r\n if (equaln(size.x, size.y))\r\n solid.ContourCurve = sideModelCon;\r\n else\r\n {\r\n //保留圆形切割\r\n const r = (sideModelCon as Circle).Radius * 2;\r\n const cuLength = cus[intersectFaceIndex].Length;\r\n let splitLeft = false;\r\n\r\n let intersectX = 0;\r\n if (equaln(box.min.x, 0))\r\n intersectX = r - box.max.x + sideModelCon.BoundingBox.min.x;\r\n else\r\n {\r\n splitLeft = true;\r\n intersectX = cuLength - box.min.x + sideModelCon.BoundingBox.min.x;\r\n }\r\n\r\n let starKnifePls = new Polyline([{ pt: AsVector2({ x: intersectX, y: 1 }), bul: 0 }, { pt: AsVector2({ x: intersectX, y: 0 }), bul: 0 }]);\r\n let faceRegions = SplitPolyline(sideModelCon as unknown as Polyline, [starKnifePls]);\r\n faceRegions = faceRegions.filter((faceRegion) =>\r\n {\r\n let x = faceRegion.BoundingBox.getCenter(new Vector3).x;\r\n return splitLeft ? x < intersectX : x > intersectX;\r\n });\r\n\r\n if (faceRegions.length)\r\n solid.ContourCurve = faceRegions[0];\r\n }\r\n\r\n solid.ApplyMatrix(grooveMtx.clone().setPosition(box.min.applyMatrix4(grooveMtx)).multiply(mirrorMtxZ));\r\n solid.ApplyMatrix(this.OCSInv);\r\n solid.ApplyMatrix(faceMtxInv);\r\n }\r\n else\r\n {\r\n sideModelCon.ApplyMatrix(new Matrix4().setPosition(sideModelCon.BoundingBox.min.negate()));\r\n sideModelCon.ApplyMatrix(extrude.OCS);\r\n sideModelCon.ApplyMatrix(this.OCSInv);\r\n sideModelCon.ApplyMatrix(new Matrix4().getInverse(faceMtx));\r\n solid.ContourCurve = sideModelCon;\r\n //确保侧面造型槽solid在XY平面上\r\n solid.Z0();\r\n }\r\n }\r\n else\r\n {\r\n solid.ApplyMatrix(grooveMtx.clone().setPosition(box.min.applyMatrix4(grooveMtx)).multiply(mirrorMtxZ));\r\n solid.ApplyMatrix(this.OCSInv);\r\n solid.ApplyMatrix(faceMtxInv);\r\n }\r\n\r\n let sideModelList = relevanceSideModelMap.get(intersectFaceIndex);\r\n if (sideModelList)\r\n sideModelList.push(solid);\r\n else\r\n sideModelList = [solid];\r\n\r\n relevanceSideModelMap.set(intersectFaceIndex, sideModelList);\r\n }\r\n }\r\n };\r\n\r\n for (let extrude of knifeExtrudes)\r\n {\r\n let gs = this.ConverToLocalGroove(extrude);\r\n\r\n if (gs.length)\r\n {\r\n let sideGrooves: ExtrudeSolid[] = [];\r\n for (let g of gs)\r\n {\r\n //侧槽\r\n if (this.GrooveCheckPosition(g) === Status.Side)\r\n sideGrooves.push(g);\r\n else\r\n grooves.push(g);\r\n }\r\n\r\n if (sideGrooves.length)\r\n {\r\n if (sideGrooves.length === gs.length)\r\n GetSideModelList(extrude);\r\n else\r\n {\r\n for (let g of sideGrooves)\r\n GetSideModelList(g);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return { grooves, relevanceSideModelMap };\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 /**\r\n * 添加侧面槽\r\n * 通常槽已经校验过准确性,所以不在校验\r\n */\r\n AppendRelevanceSideModel(relevanceSideModelMap: Map)\r\n {\r\n if (this instanceof Board)\r\n {\r\n this.ClearSideModelingCache();\r\n this.RelevanceSideModelMap = relevanceSideModelMap;\r\n }\r\n }\r\n\r\n AppendSideModel(relevanceSideModelMap: Map)\r\n {\r\n if (relevanceSideModelMap.size && this instanceof Board)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n const sideModelMap: Map = this.SideModelingMap;\r\n\r\n for (let [num, soilds] of relevanceSideModelMap)\r\n {\r\n let ss: ExtrudeSolid[] = this.SideModelingMap.get(num) ?? [];\r\n\r\n for (let soild of soilds)\r\n ss.push(soild);\r\n\r\n sideModelMap.set(num, ss);\r\n }\r\n this.SideModelingMap = sideModelMap;\r\n }\r\n }\r\n\r\n override GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3,\r\n frustum?: Frustum,\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripOrStretchPoints(DragPointType.End);\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 {\r\n if (!frustum || frustum.intersectsBox(g.BoundingBox))\r\n pts.push(...g.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum));\r\n }\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 pts: Vector3[];\r\n if (dragType === DragPointType.Grip)\r\n pts = this.ContourCurve.GetGripPoints();\r\n else if (dragType === DragPointType.Stretch)\r\n pts = this.ContourCurve.GetStretchPoints();\r\n else if (dragType === DragPointType.End)\r\n {\r\n if (this.contourCurve instanceof Circle)\r\n pts = this.ContourCurve.GetGripPoints();\r\n else\r\n pts = this.ContourCurve.GetStretchPoints();\r\n }\r\n else\r\n pts = [];\r\n\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 const isGrip = dragType === DragPointType.Grip;\r\n\r\n if (!isGrip && 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 && !this.HasSideModel)\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 let sideModelIndex = -1;\r\n\r\n let cus: Curve[];\r\n let baseIndexList: Set = new Set();\r\n let sideModelSealCurveMtxCache: Map = new Map();\r\n\r\n //获取侧面的OCS\r\n const GetSideModelSealCurveMtx = (num: number): Matrix4 =>\r\n {\r\n if (!cus) cus = GetBoardContour(this as unknown as Board)?.Explode() as Curve[];\r\n let mtx = sideModelSealCurveMtxCache.get(num);\r\n\r\n if (!mtx && cus?.length)\r\n {\r\n let cu = cus[num];\r\n if (!cu) return new Matrix4;\r\n\r\n let x = cu.GetFirstDeriv(0).normalize().applyMatrix4(this.OCS.setPosition(0, 0, 0));\r\n let y = this.Normal;\r\n let z = x.clone().cross(y);\r\n mtx = new Matrix4().getInverse(new Matrix4().makeBasis(x, y, z));\r\n\r\n sideModelSealCurveMtxCache.set(num, mtx);\r\n }\r\n\r\n return mtx ?? new Matrix4;\r\n };\r\n\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 {\r\n let orgCus: Curve[];\r\n\r\n if (this.HasSideModel)\r\n orgCus = GetBoardContour(this as unknown as Board)?.Explode() as Curve[];\r\n\r\n this.MoveGripOrStretchPointsOnly(ilist, vec, dragType);\r\n\r\n if (this.HasSideModel)\r\n {\r\n //修正点的索引 判断侧面造型的起点是否被移动\r\n let stretchCount = this.ContourCurve.GetDragPointCount(dragType);\r\n for (let num of ilist)\r\n {\r\n if (num < stretchCount)\r\n baseIndexList.add(num);\r\n else\r\n baseIndexList.add(num - stretchCount);\r\n }\r\n let isChangeThiness = this.IsStretchThickness(Array.from(baseIndexList));\r\n //起点被拉伸时反向移动 达到相对静止状态\r\n const sideModelingMap: Map = this.SideModelingMap;\r\n\r\n for (let [num, soilds] of sideModelingMap)\r\n {\r\n let firstIndex = num;\r\n let secondIndex = (num + 1) === stretchCount ? 0 : num + 1;\r\n\r\n if (isGrip)\r\n {\r\n firstIndex = num * 2;\r\n //拉取中点时\r\n secondIndex = (firstIndex - 1) < 0 ? (stretchCount - 1) : (firstIndex - 1);\r\n }\r\n\r\n //Grip的时候点选中点时两边相连的 也反向移动 firstIndex - 1\r\n if (\r\n !isGrip && (baseIndexList.has(firstIndex) && !baseIndexList.has(secondIndex)) ||\r\n isGrip && (baseIndexList.has(firstIndex) || baseIndexList.has(secondIndex)) ||\r\n isChangeThiness && ilist[0] < stretchCount\r\n )\r\n {\r\n for (let s of soilds)\r\n {\r\n let mtx = GetSideModelSealCurveMtx(num);\r\n let v = vec.clone().applyMatrix4(mtx).setZ(0);\r\n if (isChangeThiness)\r\n {\r\n v.setX(0);\r\n }\r\n else\r\n {\r\n if (cus?.length && cus[num] && orgCus)\r\n v = new Vector3(orgCus[num].Length - cus[num].Length);\r\n else\r\n v.setY(0);\r\n }\r\n\r\n s.ApplyMatrix(new Matrix4().setPosition(v.clone().multiplyScalar(-1)));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else if (grooveIndex < this.grooves.length)\r\n this.grooves[grooveIndex].MoveGripOrStretchPoints(ilist, vec, dragType);\r\n else\r\n {\r\n //侧面造型拉伸\r\n const sideModelingMap: Map = this.SideModelingMap;\r\n\r\n let soildCount = 0;\r\n const isMainChangeThiness = this.IsStretchThickness(Array.from(baseIndexList));\r\n\r\n for (let [num, soilds] of sideModelingMap)\r\n {\r\n soildCount += soilds.length;\r\n\r\n if (sideModelIndex < soildCount)\r\n {\r\n let mtx = GetSideModelSealCurveMtx(num);\r\n let v = vec.clone().applyMatrix4(mtx);\r\n\r\n if (isMainChangeThiness) v.setX(0);\r\n\r\n let soild = soilds[soilds.length - (soildCount - sideModelIndex)];\r\n const stretchPtLength = soild.ContourCurve.GetStretchPoints().length;\r\n const firstIndex = num;\r\n const secondIndex = (num + 1) === stretchPtLength ? 0 : num + 1;\r\n\r\n const mainSoildIList: number[] = [];\r\n const grooveSoildIList: number[] = [];\r\n\r\n for (let k of ilist)\r\n {\r\n if (k < stretchPtLength * 2)\r\n mainSoildIList.push(k);\r\n else\r\n grooveSoildIList.push(k);\r\n }\r\n\r\n //改变侧面造型厚度\r\n if (soild.IsStretchThickness(mainSoildIList))\r\n {\r\n if (mainSoildIList.every(i => i >= stretchPtLength))\r\n {\r\n //造型 底边\r\n v.setZ(-v.z);\r\n }\r\n else if ((baseIndexList.has(firstIndex) && baseIndexList.has(secondIndex)))\r\n {\r\n //造型见光面 和侧面一起移动\r\n ilist = [];\r\n for (let k = 0; k < stretchPtLength; k++)\r\n ilist.push(k + stretchPtLength);\r\n\r\n //有选中子槽端点 默认一起改变\r\n if (grooveSoildIList.length)\r\n {\r\n const grooveStretchPtLength = soild.grooves[0].ContourCurve.GetStretchPoints().length;\r\n\r\n for (let k = 0; k < grooveStretchPtLength; k++)\r\n ilist.push(k + grooveStretchPtLength + stretchPtLength * 2);\r\n }\r\n }\r\n else\r\n break;\r\n }\r\n else if (!isMainChangeThiness && baseIndexList.has(firstIndex) && baseIndexList.has(secondIndex))\r\n break;\r\n else\r\n v.setZ(0);\r\n\r\n soild.MoveGripOrStretchPoints(ilist, v, dragType);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n grooveIndex++;\r\n\r\n if (grooveIndex >= this.grooves.length)\r\n sideModelIndex++;\r\n }\r\n }\r\n\r\n if (this.objectId || this.IsEmbedEntity)\r\n {\r\n this.CheckContourCurve();\r\n let splitEntitys: this[] = [];\r\n this.GrooveCheckAll(splitEntitys);\r\n\r\n if (this.HasSideModel)\r\n {\r\n let board = (this as unknown as Board);\r\n board.SplitBoardSideModelUtil.Init(board);\r\n board.SplitBoardSideModelUtil.SpiltSideModelOfBrContour(board);\r\n board.SplitBoardSideModelUtil.SpiltSideModelOfBrThickness(board, board.Thickness);\r\n }\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.GetFirstDeriv(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\r\n /**\r\n * (步骤2)\r\n * 更新凹槽位置和厚度(校验凹槽的Z轴位置是否存在交集)\r\n */\r\n GrooveCheckPosition(target: ExtrudeSolid): Status\r\n {\r\n if (target.Width < 1e-1 || target.Height < 1e-1 || target.Thickness < 1e-1)\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-2) && minZ > 0 && (this.thickness - minZ) > 0.01)//正面\r\n target.Thickness = this.thickness - minZ;\r\n else if (minZ > 1e-2 && maxZ < (this.thickness - 1e-2))\r\n return Status.Side;\r\n else\r\n return Status.False;\r\n\r\n if (equaln(target.thickness, this.thickness, 1e-2))\r\n target.thickness = this.thickness;\r\n\r\n return target.thickness > 1e-2 ? Status.True : Status.False;\r\n }\r\n\r\n /**\r\n * (步骤3)\r\n * 计算凹槽合并\r\n */\r\n GrooveCheckMerge(checkGrooveContourCurve = true)\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 (checkGrooveContourCurve && 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 groove 凹槽(不拷贝,直接被修改)\r\n * @returns this[] 凹槽在本实体中正确的约束状态.(可能分裂成为多个)\r\n */\r\n private GrooveCheckContour(groove: ExtrudeSolid): ExtrudeSolid[]\r\n {\r\n let matrixToTarget = groove.OCSInv.multiply(this.OCS);\r\n matrixToTarget.elements[14] = 0;//z->0\r\n\r\n //理论上只有大洞才需要优化,小洞无所谓了\r\n let thisShape = this.GetShape(true).ApplyMatrix(matrixToTarget);\r\n let targetShape = new Shape(Contour.CreateContour([groove.ContourCurve.Clone()], false));\r\n\r\n let inters = thisShape.IntersectionBoolOperation(targetShape);\r\n\r\n if (inters.length === 1)\r\n {\r\n groove.ContourCurve = inters[0].Outline.Curve;\r\n let grooves = [groove];\r\n groove.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 = groove.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.1) 针对圆弧板-修正路径 */\r\n AdjustPath(ext: ExtrudeSolid, outline: Polyline | Circle) { }\r\n /** (步骤4.2.2) 针对圆弧板-修正位置 */\r\n AdjustPosition(ext: ExtrudeSolid, basePoint: Vector3) { }\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 allDepthGrooves: 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(\r\n Contour.CreateContour([grooveCurve], false),\r\n groove.grooves.filter(g => equaln(g.thickness, groove.thickness)).map(g =>\r\n {\r\n let gc = g.ContourCurve.Clone();\r\n let mtx = g.OCS.premultiply(groove.OCSInv).premultiply(matrixToLocal);\r\n gc.ApplyMatrix(mtx);\r\n return Contour.CreateContour([gc], false);\r\n })\r\n )\r\n );\r\n\r\n allDepthGrooves.push(groove);\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n // 测试绘制黄色为原始轮廓 红色为切割轮廓\r\n // TestDraw(new Region(shapeManager).Clone(), 2);\r\n // TestDraw(new Region(subtractShape).Clone(), 1);\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 === allDepthGrooves.length)\r\n {\r\n //在拉伸夹点后,全深槽如果不改原始的板的信息,那么它无法在递归检查,这个时候如果不校验,那么它将不会在被校验\r\n for (let g of allDepthGrooves)\r\n g.CheckContourCurve();\r\n\r\n this.grooves.push(...allDepthGrooves);\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\r\n //#endregion 保持旧的槽数据 (必须在这里写代码 因为下面会修改hole.Curve)\r\n let p = hole.Curve.StartPoint;\r\n let oldGrooveIndex = subtractShape.ShapeList.findIndex(s => s.Outline.Curve.PtOnCurve(p));\r\n let oldGroove = allDepthGrooves[Math.max(oldGrooveIndex, 0)];\r\n\r\n groove.knifeRadius = oldGroove.knifeRadius;\r\n groove.groovesAddWidth = oldGroove.groovesAddWidth;\r\n groove.groovesAddDepth = oldGroove.groovesAddDepth;\r\n groove.groovesAddLength = oldGroove.groovesAddLength;\r\n //#endregion\r\n\r\n groove.OCS = this.OCSNoClone;\r\n groove.ContourCurve = hole.Curve;\r\n groove.thickness = this.thickness;\r\n\r\n ext.grooves.push(groove);\r\n }\r\n const shapeOutline = shape.Outline.Curve.Clone();\r\n // 针对圆弧板-修正路径\r\n this.AdjustPath(ext, shapeOutline);\r\n const shapeBasePoint = shape.Outline.Curve.StartPoint;\r\n ext.ContourCurve = shape.Outline.Curve;\r\n ext.GrooveCheckAll(splitEntitys);\r\n // 针对圆弧板-修正位置\r\n this.AdjustPosition(ext, shapeBasePoint);\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\r\n //#endregion 保持旧的槽数据 (必须在这里写代码 因为下面会修改hole.Curve)\r\n let p = hole.Curve.StartPoint;\r\n let oldGrooveIndex = subtractShape.ShapeList.findIndex(s => s.Outline.Curve.PtOnCurve(p));\r\n let oldGroove = allDepthGrooves[Math.max(oldGrooveIndex, 0)];\r\n\r\n groove.knifeRadius = oldGroove.knifeRadius;\r\n groove.groovesAddWidth = oldGroove.groovesAddWidth;\r\n groove.groovesAddDepth = oldGroove.groovesAddDepth;\r\n groove.groovesAddLength = oldGroove.groovesAddLength;\r\n //#endregion\r\n\r\n groove.OCS = this.OCSNoClone;\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 变更:2024/4/9 现在允许全深槽的子槽 会将板分裂成2个 由于一个奇怪的用例 ref:https://gitee.com/cf-fz/WebCAD/pulls/2667\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 this.IsLazyGrooveCheck = false;\r\n if (this.IsNeedGrooveCheck)\r\n this.GrooveCheckAllAutoSplit();\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.DrawColorIndex, this.Freeze));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, this.GetConceptualMaterial()),\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 //在同步反应器中,当存在关联拉槽的实体和本实体一起被删除后,会更新本实体,然后导致同步认为它没有子实体\r\n if (this._isErase) return false;\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 protected 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 //如果是切割圆弧板或刀是圆弧板,先不切割\r\n // if (this instanceof Board && this.IsArcBoard) knifs = [];\r\n // knifs = knifs.filter(e => !(e instanceof Board && e.IsArcBoard));\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(true);\r\n tempExtrude.RelevanceKnifs.length = 0;//避免递归\r\n\r\n if (tempExtrude instanceof Board)\r\n tempExtrude.SideModelingMap.clear();\r\n\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\r\n if (tempExtrude instanceof Board)\r\n this.AppendRelevanceSideModel(tempExtrude.SideModelingMap);\r\n\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 //因为这里更新了mesh geom 所以我们必须更新它.\r\n this._MeshGeometry = this.UpdateMeshGeom(this._MeshGeometry);\r\n this._MeshGeometry[\"IsMesh\"] = true;\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 InteractionLog([{ msg: `${this.Name}(${id.Index})`, entity: [this] }, { msg: \"关联槽已逃离!\" }], LogType.Warning);\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 {\r\n InteractionLog([{ msg: `${this.Name}(${this.Id.Index})`, entity: [this] }, { msg: \"关联槽已逃离或者被清除!\" }], LogType.Warning);\r\n //清除关联侧槽\r\n this.AppendRelevanceSideModel(new Map());\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 protected _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 this._EdgeGeometry = undefined;//清理掉(以便在被csg切割后得到edgegeom)\r\n\r\n let grooves = this.Grooves;\r\n /**\r\n * 如果要板件圆造型的挖穿跟不挖穿的效果一致\r\n * 则把下段代码的判断,改为 if (grooves.length === 0)\r\n */\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 < MaxDrawGrooveCount)\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 UVGenerator: this.UCGenerator,\r\n depth: this.bevelEnabled ? this.thickness - 4 : this.thickness,\r\n bevelEnabled: this.bevelEnabled,\r\n bevelThickness: 2,\r\n bevelSize: 2,\r\n bevelOffset: -2,\r\n bevelSegments: 1,\r\n };\r\n shape.DisplayAccuracy = this._DisplayAccuracy;\r\n let geo = new ExtrudeGeometry(shape.Shape, extrudeSettings);\r\n geo.applyMatrix4(contour.OCSNoClone);\r\n\r\n if (this.bevelEnabled)\r\n geo.translate(0, 0, 2);\r\n\r\n this.UpdateUV(geo, contour.OCSNoClone);\r\n //板在某些时候需要布尔运算(二维刀路)\r\n this._MeshGeometry = this.UpdateMeshGeom(geo);\r\n this._MeshGeometry[\"IsMesh\"] = true;\r\n\r\n let mtl = this.Material?.Object as PhysicalMaterialRecord ?? this.Db?.DefaultMaterial;\r\n if (mtl?.UseWorldUV)\r\n {\r\n //类型转换\r\n if (this._MeshGeometry instanceof Geometry)\r\n this._MeshGeometry = new BufferGeometry().fromGeometry(this._MeshGeometry);\r\n let gen = new GenUVForWorld();\r\n gen.GenGeoUV(this._MeshGeometry, mtl.Material);\r\n }\r\n\r\n //edge geometry\r\n if (grooves.length < MaxDrawGrooveCount && !this._EdgeGeometry)//这个代码保证线框和概念对齐\r\n {\r\n let coords = FastExtrudeEdgeGeometryOfShape((shape.Shape as Shape2), 0, this.thickness, 12, true);\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n edgeGeo.applyMatrix4(contour.OCSNoClone);\r\n this._EdgeGeometry = edgeGeo;\r\n }\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n let builder = new ExtrudeGeometryBuilder(this);\r\n\r\n this._MeshGeometry = builder.MeshGeometry;\r\n this._MeshGeometry = this.UpdateMeshGeom(this._MeshGeometry);\r\n if (grooves.length < MaxDrawGrooveCount && !this._EdgeGeometry)\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 //子类重载,用于二次计算几何体(例如二维刀路布尔运算)\r\n UpdateMeshGeom(geo: BufferGeometry | Geometry): BufferGeometry\r\n {\r\n return geo as BufferGeometry;\r\n }\r\n\r\n protected get Has2DPath() { return false; }\r\n protected get HasSideModel() { return false; }\r\n protected _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.Has2DPath && !this.HasSideModel && (this.grooves.length === 0 || this.grooves.every(g => equaln(g.thickness, this.thickness))))\r\n )\r\n {\r\n let coords = FastExtrudeEdgeGeometry(this, this.DrawColorIndex, 12, 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 \r\n\r\n ClearDraw(): this\r\n {\r\n this.UpdateDrawGeometry();\r\n return super.ClearDraw();\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D): 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.DrawColorIndex, this.Freeze);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, this.GetConceptualMaterial()),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())\r\n );\r\n }\r\n else if (renderType === RenderType.ModelGroove)\r\n {\r\n obj.add(\r\n // new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(9, FrontSide, true, this.Freeze)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())\r\n );\r\n obj.add(this.GetModelGroove());\r\n\r\n //侧槽\r\n obj.add(this.GetSideModelGroove());\r\n }\r\n // 概念透明\r\n else if (renderType === RenderType.ConceptualTransparent)\r\n {\r\n let color = this.DrawColorIndex;\r\n if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) color = 8;\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide)),\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 return obj;\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.DrawColorIndex, this.Freeze);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = this.GetConceptualMaterial();\r\n }\r\n // 概念透明\r\n else if (renderType === RenderType.ConceptualTransparent)\r\n {\r\n let color = this.DrawColorIndex;\r\n if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) color = 8;\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide);\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 //获取概念视图材质 冻结状态使用257色号 半透明\r\n private GetConceptualMaterial()\r\n {\r\n let mtl: Material;\r\n if (this.Freeze)\r\n mtl = ColorMaterial.GetBasicMaterialTransparent2(257, 0.5);\r\n else\r\n mtl = ColorMaterial.GetConceptualMaterial(this.DrawColorIndex, FrontSide, true);\r\n\r\n return mtl;\r\n }\r\n\r\n private GetModelGroove()\r\n {\r\n const grooves: ExtrudeSolid[] = [];\r\n for (const sp of this.__CacheSplitExtrudes ?? [])\r\n {\r\n grooves.push(...sp.grooves);\r\n }\r\n const group = new Group();\r\n for (const groove of grooves)\r\n {\r\n const grooveClone = groove.Clone();\r\n grooveClone.UpdateDrawGeometry();\r\n const mtx = new Matrix4().premultiply(grooveClone.OCSNoClone).premultiply(this.OCSInv);\r\n\r\n const edgeGeo = grooveClone.EdgeGeometry;\r\n edgeGeo.applyMatrix4(mtx);\r\n const line = new LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(1, this.Freeze));\r\n\r\n const meshGeo = grooveClone.MeshGeometry;\r\n meshGeo.applyMatrix4(mtx);\r\n const mesh = new Mesh(meshGeo, ColorMaterial.GetBasicMaterialTransparent2(1, 0.6));\r\n group.add(mesh, line);\r\n }\r\n return group;\r\n }\r\n\r\n private GetSideModelGroove()\r\n {\r\n let board = this as unknown as Board;\r\n\r\n const AllSideModelGrooveMap = board.AllSideModelGrooveMap;\r\n const group = new Group();\r\n\r\n if (AllSideModelGrooveMap.size)\r\n {\r\n let con = GetBoardContour(board);\r\n if (!con) return group;\r\n\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n const mirrorMtxZ = MakeMirrorMtx(ZAxis);\r\n\r\n for (let [index, soilds] of AllSideModelGrooveMap)\r\n {\r\n let cu = cus[index];\r\n if (!cu) continue;\r\n\r\n let mt4 = GetSideCuFaceMtx(cus[index], inverseZ);\r\n\r\n for (let soild of soilds)\r\n {\r\n const edgeGeo = soild.EdgeGeometry;\r\n const line = new LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(1, this.Freeze));\r\n line.applyMatrix4(mirrorMtxZ);\r\n line.applyMatrix4(mt4.clone().multiply(soild.OCS));\r\n\r\n const meshGeo = soild.MeshGeometry;\r\n const mesh = new Mesh(meshGeo, ColorMaterial.GetBasicMaterialTransparent2(1, 0.6));\r\n mesh.applyMatrix4(mirrorMtxZ);\r\n mesh.applyMatrix4(mt4.clone().multiply(soild.OCS));\r\n group.add(mesh, line);\r\n }\r\n }\r\n }\r\n\r\n return group;\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 if (ver > 3)\r\n {\r\n this._DisplayAccuracy = file.Read();\r\n }\r\n }\r\n private WriteFileOnly(file: CADFiler)\r\n {\r\n file.Write(4);\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 file.Write(this._DisplayAccuracy);\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 { Frustum, Matrix3, Matrix4, Object3D, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\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 { EMetalsType } from \"../../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { HardwareCompositeEntity } from \"../Hardware/HardwareCompositeEntity\";\r\nimport { LayerTableRecord } from \"../LayerTableRecord\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { PhysicalMaterialRecord } from \"../PhysicalMaterialRecord\";\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 if (!e.Db && this._db)\r\n e.SetDatabase(this._db);\r\n let cloneE = e.Clone(false);\r\n if (!(cloneE instanceof CompositeEntity))\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 if (renderType === RenderType.ModelGroove || renderType === RenderType.Edge) return; //造型槽和封边模式下不显示五金\r\n for (let e of this.Entitys)\r\n {\r\n e.IsEmbedEntity = true;\r\n e.ParentEntity = this.ParentEntity || this;\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 /** 为了避免_CacheDrawObject中的key错误,这里重写了GetDrawObjectFromRenderType,而不是直接在UpdateDrawObject中修改rtype */\r\n override GetDrawObjectFromRenderType(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (renderType === RenderType.ConceptualTransparent && this instanceof HardwareCompositeEntity)\r\n {\r\n // 未开启五金透明选项时,五金的概念(透明)效果同概念\r\n if (!HostApplicationServices.IsTransparentMetals && this.HardwareOption.type === EMetalsType.Metals)\r\n {\r\n renderType = RenderType.Conceptual;\r\n }\r\n // 组件同理\r\n if (!HostApplicationServices.IsTransparentComp && this.HardwareOption.type === EMetalsType.Comp)\r\n {\r\n renderType = RenderType.Conceptual;\r\n }\r\n }\r\n return super.GetDrawObjectFromRenderType(renderType);\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 get Layer(): ObjectId\r\n {\r\n return super.Layer;\r\n }\r\n\r\n set Layer(id: ObjectId)\r\n {\r\n super.Layer = id;\r\n for (let e of this.Entitys)\r\n {\r\n if (!e.Db) e.SetDatabase(this.Db);\r\n e.Layer = id;\r\n }\r\n }\r\n\r\n SetAllMaterialAtSlot(mtl: ObjectId)\r\n {\r\n if (this.LockMaterial)\r\n return;\r\n this.WriteAllObjectRecord();\r\n this.Traverse(e =>\r\n {\r\n if (e === this)\r\n return;\r\n e.SetAllMaterialAtSlot(mtl);\r\n });\r\n\r\n this.Update(UpdateDraw.Material);\r\n }\r\n\r\n GetMtlLockedStatus()\r\n {\r\n let partMtlLocked = false;\r\n let allMtlLocked = true;\r\n this.Traverse(e =>\r\n {\r\n if (e === this)\r\n return;\r\n const res = e.GetMtlLockedStatus();\r\n if (res.partMtlLocked)\r\n {\r\n partMtlLocked = true;\r\n if (!res.allMtlLocked)\r\n allMtlLocked = false;\r\n }\r\n else\r\n allMtlLocked = false;\r\n });\r\n return {\r\n partMtlLocked,\r\n allMtlLocked,\r\n };\r\n }\r\n\r\n GetPhyMtlRecords(containErased: boolean = false)\r\n {\r\n const materials: PhysicalMaterialRecord[] = [];\r\n\r\n this.Traverse(e =>\r\n {\r\n if (e === this)\r\n return;\r\n const res = e.GetPhyMtlRecords(containErased);\r\n if (res.length)\r\n arrayPushArray(materials, res);\r\n });\r\n\r\n return materials;\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.ModelGroove) return;\r\n this.Traverse(e =>\r\n {\r\n if (e === this)\r\n return;\r\n\r\n let o = e.GetDrawObjectFromRenderType(renderType);\r\n if (o)\r\n e.UpdateDrawObjectMaterial(renderType, o);\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 frustum?: Frustum,\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, frustum));\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 ent.IsEmbedEntity = true;\r\n ent.ParentEntity = this;\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 if (v > 1)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\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.Entitys.length);\r\n for (let e of this.Entitys)\r\n file.WriteObject(e);\r\n\r\n // ver2\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n //#endregion\r\n}\r\n","import { Matrix4 } from \"three\";\r\nimport { 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 /**\r\n * 备注\r\n */\r\n @AutoRecord DataList: [string, string][] = [];\r\n @AutoRecord RelevanceBoards: ObjectId[] = [];\r\n @AutoRecord RelevanceHardware: ObjectId[] = []; //当这个实体为复合板时,关联五金的信息\r\n @AutoRecord RelevanceHandle: 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 ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n super.ApplyMirrorMatrix(m);\r\n\r\n //\"左\",\"右\"互换\r\n if (this.HardwareOption.model.includes(\"左\"))\r\n this.HardwareOption.model = this.HardwareOption.model.replace(\"左\", \"右\");\r\n else if (this.HardwareOption.model.includes(\"右\"))\r\n this.HardwareOption.model = this.HardwareOption.model.replace(\"右\", \"左\");\r\n\r\n return this;\r\n }\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 if (v > 4)\r\n {\r\n let count = file.Read();\r\n this.RelevanceHandle.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.RelevanceHandle.push(objId);\r\n }\r\n }\r\n\r\n if (v > 5)\r\n {\r\n this.HardwareOption.goodsId = file.Read();\r\n this.HardwareOption.goodsSn = file.Read();\r\n }\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\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 file.Write(this.RelevanceHandle.length);\r\n for (let id of this.RelevanceHandle)\r\n file.WriteSoftObjectId(id);\r\n\r\n file.Write(this.HardwareOption.goodsId);\r\n file.Write(this.HardwareOption.goodsSn);\r\n }\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\nconst x = new Vector3;\r\nconst y = new Vector3;\r\n\r\nlet tempPolyline: Polyline;\r\n\r\n\r\n/**\r\n * 转换成多段线点表(pts bul)\r\n * @param cu\r\n * @param [isOutline=true] 如果是外部轮廓,则返回逆时针点表\r\n * @returns pts buls\r\n */\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 ptsBuls = cu.PtsBuls;\r\n\r\n let ocs = cu.OCSNoClone;\r\n //判断是不是被镜像了\r\n x.setFromMatrixColumn(ocs, 0);\r\n y.setFromMatrixColumn(ocs, 1);\r\n let z1 = x.cross(y);\r\n let isMirror = !equaln(z1.z, 1, 1e-3);\r\n\r\n for (let i = 0; i < ptsBuls.pts.length; i++)\r\n {\r\n Vector2ApplyMatrix4(ocs, ptsBuls.pts[i]);\r\n if (isMirror)\r\n ptsBuls.buls[i] *= -1;\r\n }\r\n\r\n if (isOutline && cu.IsClose)\r\n {\r\n tempPolyline = tempPolyline || new Polyline;\r\n tempPolyline.LineData.length = 0;\r\n for (let i = 0; i < ptsBuls.pts.length; i++)\r\n tempPolyline.LineData.push({ pt: ptsBuls.pts[i], bul: ptsBuls.buls[i] });\r\n\r\n if (cu.Area2 < 0)\r\n {\r\n tempPolyline.Reverse();\r\n ptsBuls = tempPolyline.PtsBuls;\r\n }\r\n tempPolyline.LineData.length = 0;\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 { SplitPolyline } from \"../Add-on/BoardCutting/SplitPolyline\";\r\nimport { FaceDirection } from \"../Add-on/DrawDrilling/DrillType\";\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 { InteractionLog, LogType } from \"../Common/Log\";\r\nimport { Intent, Toaster, ToasterShowEntityMsg } from \"../Common/Toaster\";\r\nimport { FixedNotZero } from \"../Common/Utils\";\r\nimport { ParseExpr, safeEval } from \"../Common/eval\";\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 { BoardOpenDir } from \"../DatabaseServices/Entity/BoardInterface\";\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 { GroupRecord } from \"../DatabaseServices/GroupTableRecord\";\r\nimport { HardwareCompositeEntity } from \"../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { HardwareTopline } from \"../DatabaseServices/Hardware/HardwareTopline\";\r\nimport { Shape } from \"../DatabaseServices/Shape\";\r\nimport { ParseBoardSideFace } from \"../Geometry/DrillParse/BoardGetFace\";\r\nimport { CanDrawHoleFuzz } from \"../Geometry/DrillParse/CanDrawHoleFuzz\";\r\nimport { AsVector2, IsBetweenA2B, MoveMatrix, XAxis, angle, angleTo, equaln, equalv2, equalv3, isIntersect2, isParallelTo, isPerpendicularityTo } from \"../Geometry/GeUtils\";\r\nimport { BrSealedData, GetHighBoardEdgeRemark, GetSealedBoardContour } from \"../GraphicsSystem/CalcEdgeSealing\";\r\nimport { FeedingToolPath, GetModelingFromCustomDrill } from \"../GraphicsSystem/ToolPath/FeedingToolPath\";\r\nimport { EMetalsType, IHardwareOption, IToplineOption } from \"../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { IHighEdgeRemarkItem, IHighReservedEdgeItem, ISealingData } from \"../UI/Store/OptionInterface/IHighSealedItem\";\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\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 name: string;\r\n goodsId?: string;\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 [EBoardKeyList.Thick]: number;\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 boardEdgeRemark: IHighEdgeRemarkItem[]; //板边备注信息\r\n reservedEdge: IHighReservedEdgeItem[]; //预留边信息\r\n modeling: IModelingData[]; //造型信息\r\n curveBoardModeling: IModeling[];\r\n holes: IBoardHoleInfo; //孔信息\r\n sideModeling: IOriginSideModelingData[]; //侧面造型信息\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 isReverse: boolean; //轮廓数据是否翻转\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\nexport interface IOriginSideModelingData extends IOriginModelingData\r\n{\r\n chaiDanName: string;\r\n modelType: ModelType;\r\n}\r\n\r\nexport enum ModelType\r\n{\r\n frontBackModel = 0, //正反面造型槽\r\n sideModel = 1,//绘制的侧槽造型\r\n drill = 2, //自定义排钻生成的非圆侧孔\r\n sideHoleModel = 3,//绘制的圆侧槽\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 enum SplitOrderType\r\n{\r\n ChaiDan, // 拆单/走刀时使用\r\n HoleGrooveDim, // 孔洞槽标注时使用\r\n}\r\n\r\nexport namespace Production\r\n{\r\n /**\r\n * 获取板件拆单数据\r\n * @param {Board} br 板件\r\n * @param {number} [redundancyKnif=0] 刀冗余\r\n * @param {SplitOrderType} [splitType=SplitOrderType.ChaiDan] 拆单类型,默认为拆单\r\n * @return {*} {(ISpliteOrderData | undefined)}\r\n */\r\n export function GetBoardSplitOrderData(br: Board, redundancyKnif = 0, splitType: SplitOrderType = SplitOrderType.ChaiDan): ISpliteOrderData | undefined\r\n {\r\n let sealedData = GetSealedBoardContour(br, splitType);\r\n if (!sealedData)\r\n {\r\n ToasterShowEntityMsg({\r\n msg: br.Name + \" 轮廓错误,可能存在轮廓自交,请检查后重新拆单!(错误的板已经选中,您可以按住鼠标中键查看该板!)(使用FISC命令可以修复自交轮廓!)\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n ent: br.__OriginalEnt__ ?? br\r\n });\r\n return undefined;\r\n }\r\n let { brContour: orgContour, sealedContour: sealedOutline } = sealedData;\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 const curveBoardModeling = br.ArcBoardModeling;\r\n\r\n //正反面造型 自定义不规则排钻孔\r\n let { modeling, sideModeling } = GetBoardModelingData(br, offsetTanslation, redundancyKnif, curveBoardModeling);\r\n //侧面造型\r\n let { sideModel, sideHole } = GetBoardSideModelingData(br, true);\r\n sideModeling.push(...sideModel);\r\n\r\n let boardContour: IContourData;\r\n if (HasSpiteSize(br))\r\n boardContour = ConverToPtsBul(br.ContourCurve);//不分裂圆弧转点表\r\n\r\n let info = GetBoardInfo(br, size);\r\n\r\n //每段封边信息\r\n let { seals: perSealData, reservedEdges: perReservedEdgeData } = ParseSealData(sealedData, br.BoardProcessOption.color);\r\n\r\n let perBoardEdgeRemarkData: IHighEdgeRemarkItem[];\r\n if (splitType === SplitOrderType.HoleGrooveDim)\r\n perBoardEdgeRemarkData = GetHighBoardEdgeRemark(br, sealedData.brCurves, true); // 孔槽板边备注,按照正常的边顺序返回备注数据即可\r\n else\r\n perBoardEdgeRemarkData = ParseBoardEdgeRemarkData(sealedData, br.BoardProcessOption.highBoardEdgeRemark);// 拆单的板边备注,并且轮廓是圆的时候,需要分成两段圆弧。\r\n\r\n let isReverse = orgContour.Area2 < 0;\r\n //因为传递给拆单软件的数据是逆时针,所以是顺时针时我们翻转它\r\n if (isReverse)\r\n {\r\n perSealData.reverse();\r\n perBoardEdgeRemarkData.reverse();\r\n perReservedEdgeData.reverse();\r\n\r\n //对应sealedOutlinePtsBul顺序 解析孔时翻转orgContour\r\n orgContour.Reverse();\r\n }\r\n\r\n let holes = GetBoardHolesData(br, offsetTanslation, orgContour);\r\n holes.sideHoles.push(...sideHole);\r\n\r\n return {\r\n info,\r\n originOutlin: originOutlinePtsBul,//拼错了 未扣封边的点表\r\n outline: sealedOutlinePtsBul, //扣完封边的点表\r\n sealing: perSealData,//每段曲线的封边信息\r\n boardEdgeRemark: perBoardEdgeRemarkData, //每段曲线的板边备注信息\r\n reservedEdge: perReservedEdgeData, //每段曲线的预留边信息\r\n modeling,\r\n curveBoardModeling,\r\n holes,\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 isReverse //轮廓是否翻转\r\n };\r\n }\r\n\r\n\r\n //生产那边需要一一对应的数据\r\n export function ParseSealData(sealData: BrSealedData, defaultSealColor: string = \"\"): { seals: ISealingData[], reservedEdges: IHighReservedEdgeItem[]; }\r\n {\r\n let seals: ISealingData[] = [];\r\n let reservedEdges: IHighReservedEdgeItem[] = [];\r\n for (let i = 0; i < sealData.brCurves.length; i++)\r\n {\r\n let curve = sealData.brCurves[i];\r\n let sealD = sealData.highSeals[i];\r\n let reservedEdgeD = sealData.highReservedEdges[i];\r\n\r\n if (curve instanceof Circle)\r\n {\r\n let seal2: ISealingData = {\r\n length: curve.Length * 0.5,\r\n ...sealD,\r\n sealColor: sealD.sealColor ? sealD.sealColor : defaultSealColor\r\n };\r\n\r\n //圆型板拆单时是分成两段圆弧处理\r\n seals.push(seal2);\r\n seals.push({ ...seal2 });\r\n\r\n reservedEdges.push(reservedEdgeD);\r\n reservedEdges.push({ ...reservedEdgeD });\r\n return { seals, reservedEdges };\r\n }\r\n else\r\n {\r\n if (curve instanceof Polyline)//多段线炸开\r\n {\r\n for (let subC of curve.Explode())\r\n {\r\n let seal2: ISealingData = {\r\n length: subC.Length,\r\n ...sealD,\r\n sealColor: sealD.sealColor ? sealD.sealColor : defaultSealColor\r\n };\r\n seals.push(seal2);\r\n\r\n reservedEdges.push(reservedEdgeD);\r\n }\r\n }\r\n else//直线 圆弧直接加\r\n {\r\n let seal2: ISealingData = {\r\n length: curve.Length,\r\n ...sealD,\r\n sealColor: sealD.sealColor ? sealD.sealColor : defaultSealColor\r\n };\r\n seals.push(seal2);\r\n\r\n reservedEdges.push(reservedEdgeD);\r\n }\r\n }\r\n }\r\n return { seals, reservedEdges };\r\n }\r\n\r\n function ParseBoardEdgeRemarkData(sealData: BrSealedData, highBoardEdgeRemark: IHighEdgeRemarkItem[]): IHighEdgeRemarkItem[]\r\n {\r\n let remarks: IHighEdgeRemarkItem[] = [];\r\n for (let i = 0; i < sealData.brCurves.length; i++)\r\n {\r\n let curve = sealData.brCurves[i];\r\n let remarkData = highBoardEdgeRemark[i];\r\n\r\n if (curve instanceof Circle)\r\n {\r\n //圆型板拆单时是分成两段圆弧处理\r\n remarks.push(remarkData);\r\n remarks.push({ ...remarkData });\r\n return remarks;\r\n }\r\n else\r\n {\r\n if (curve instanceof Polyline)//多段线炸开\r\n {\r\n for (let subC of curve.Explode())\r\n {\r\n remarks.push(remarkData);\r\n }\r\n }\r\n else//直线 圆弧直接加\r\n {\r\n remarks.push(remarkData);\r\n }\r\n }\r\n }\r\n return remarks;\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 [EBoardKeyList.Thick]: br.Thickness,\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 (m.shape.Holes.length === 0 && 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, false),\r\n holes: m.shape.Holes.map(h => ConverToPtsBul(h.Curve, 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 let modeling = getModelings([...br.BoardModeling, ...allModeling.modeling]);\r\n let sideModeling = GetBoardSideModelingData(br);\r\n\r\n return { modeling, sideModeling };\r\n }\r\n\r\n /**\r\n * 计算板的造型走刀数据(包括自定义排钻的走刀 侧面走刀)\r\n * @param br\r\n * @param offsetTanslation\r\n */\r\n export function GetBoardModelingData(br: Board, offsetTanslation: Vector3, redundancyKnif = 0, curveBoardModeling: IModeling[])\r\n {\r\n const tool = FeedingToolPath.GetInstance();\r\n const tMtx = MoveMatrix(offsetTanslation.clone().negate());\r\n const getModelings = (ms: IModeling[]): 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 (m.shape.Holes.length === 0 && 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, redundancyKnif);//走刀路径\r\n paths.forEach(path => path.ApplyMatrix(tMtx));\r\n\r\n //走刀的ptsbuls\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, false),\r\n holes: m.shape.Holes.map(h => ConverToPtsBul(h.Curve, 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, ...curveBoardModeling]).filter(f => f.feeding.length > 0);\r\n // 拆单值有效的板件勾选取消孔槽加工\r\n const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption;\r\n const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness];\r\n if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing)\r\n {\r\n modeling.length = 0;\r\n allModeling.sideModeling.length = 0;\r\n }\r\n return { modeling, sideModeling: allModeling.sideModeling };\r\n }\r\n\r\n export function GetBoardSideModelingData(br: Board, toaster = false)\r\n {\r\n let sideModel: IOriginSideModelingData[] = [];\r\n let sideHole: IDrillingOption[] = [];\r\n\r\n let allSideModelGrooveMap = br.AllSideModelGrooveMap;\r\n\r\n //跳过有拆单尺寸板件 避免拆单错误\r\n if (!allSideModelGrooveMap.size || HasSpiteSize(br)) return { sideModel, sideHole };\r\n\r\n const tool = FeedingToolPath.GetInstance();\r\n let faces = new ParseBoardSideFace(br);\r\n\r\n for (let [num, solids] of allSideModelGrooveMap)\r\n {\r\n let faceContour = faces.Faces[num].Region.ShapeManager.ShapeList[0].Outline.Curve as Polyline;\r\n for (let solid of solids)\r\n {\r\n let cu = solid.Shape.Outline.Curve.Clone().ApplyMatrix(solid.OCSNoClone);\r\n let modelType = ModelType.sideModel;\r\n\r\n // 圆造型拆成孔类型\r\n if (!solid.Shape.Holes.length && cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n {\r\n let mtx = br.OCSInv.multiply(faces.Faces[num].OCS);\r\n let position = cu.Position.clone().applyMatrix4(mtx);\r\n let endPt = cu.Position.clone().setZ(-solid.Thickness).applyMatrix4(mtx);\r\n\r\n /**拆单那边需要把侧孔 z 坐标转换为从上到下 */\r\n InvertPosition(position, br.Thickness);\r\n InvertPosition(endPt, br.Thickness);\r\n // cu.ApplyMatrix(mtx);\r\n // TestDraw(cu);\r\n // TestDraw(new Point(position));\r\n // TestDraw(new Point(endPt));\r\n sideHole.push({\r\n position, //排钻开始位置\r\n endPt, //排钻结束的位置(在板的坐标系)\r\n radius: cu.Radius, //排钻半径\r\n depth: solid.Thickness, //排钻的插入深度\r\n face: num, //板在哪个边上\r\n name: \"\",\r\n type: null\r\n });\r\n\r\n continue;\r\n }\r\n\r\n let knifeRadius = solid.KnifeRadius;\r\n\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n knifeRadius = HostApplicationServices.chaidanOption.radius;\r\n let paths = tool.GetSideModelFeedPath(solid, faceContour);//走刀路径\r\n\r\n if (paths.length)\r\n {\r\n sideModel.push({\r\n thickness: solid.Thickness + (solid.GroovesAddDepth ?? 0),\r\n dir: num,\r\n knifeRadius,\r\n outline: ConverToPtsBul(cu, false),\r\n holes: solid.Shape.Holes.map((cu) => ConverToPtsBul(cu.Curve.Clone().ApplyMatrix(solid.OCSNoClone), false)),\r\n addLen: solid.GroovesAddLength,\r\n addWidth: solid.GroovesAddWidth,\r\n addDepth: solid.GroovesAddDepth,\r\n chaiDanName: \"\",\r\n modelType,\r\n });\r\n }\r\n else if (toaster)\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 }\r\n\r\n return { sideModel, sideHole };\r\n }\r\n\r\n //是否有拆单尺寸\r\n export function HasSpiteSize(br: Board): boolean\r\n {\r\n let [spHeight, spWidth, spThickness] = [br.BoardProcessOption?.spliteHeight, br.BoardProcessOption?.spliteWidth, br.BoardProcessOption?.spliteThickness];\r\n const isEffect = HostApplicationServices.chaidanOption.partialSplitValueCanTakesEffect;//局部拆单值\r\n const hasSize = (isEffect ? (spHeight || spWidth || spThickness) : (spHeight && spWidth && spThickness));\r\n return Boolean(hasSize);\r\n }\r\n\r\n //获得拆单尺寸\r\n export function GetSpiteSize(br: Board)\r\n {\r\n if (HasSpiteSize(br))\r\n {\r\n let [spHeight, spWidth, spThickness] = [br.BoardProcessOption?.spliteHeight, br.BoardProcessOption?.spliteWidth, br.BoardProcessOption?.spliteThickness];\r\n const param = { L: br.Height, W: br.Width, H: br.Thickness };\r\n spHeight = spHeight || br.Height.toString();\r\n spWidth = spWidth || br.Width.toString();\r\n spThickness = spThickness || br.Thickness.toString();\r\n\r\n const spliteHeight = safeEval(spHeight, param, \"L\");\r\n const spliteWidth = safeEval(spWidth, param, \"W\");\r\n const spliteThickness = safeEval(spThickness, param, \"H\");\r\n\r\n if (spliteHeight && spliteWidth && spliteThickness)\r\n {\r\n return {\r\n spliteHeight,\r\n spliteWidth,\r\n spliteThickness\r\n };\r\n }\r\n }\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 if (size)\r\n return new Polyline().Rectangle(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 const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption;\r\n // 拆单值有效的板件勾选取消孔槽加工\r\n const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness];\r\n if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing)\r\n {\r\n return data;\r\n }\r\n let brNormal = br.Normal;\r\n\r\n // 性能优化的解析板件网洞类\r\n // new ParseBoardHoleData(br, offsetTanslation, sealedContour);\r\n\r\n //是弧形板件时解析排钻在路径的相对位置\r\n if (br.IsArcBoard && br.DrillList.size)\r\n {\r\n offsetTanslation = ParseArcBoardHoles(br, offsetTanslation);\r\n }\r\n\r\n for (let [key, driss] of br.DrillList)\r\n {\r\n let linkBoard = key?.Object as Board;\r\n if (cancelHoleProcessing && linkBoard)\r\n {\r\n const [L, W, H] = [linkBoard.BoardProcessOption.spliteHeight, linkBoard.BoardProcessOption.spliteWidth, linkBoard.BoardProcessOption.spliteThickness];\r\n if ((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H))\r\n {\r\n continue;\r\n }\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, 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 let linkBoard = nail.MId?.Object as Board;\r\n if (cancelHoleProcessing && linkBoard)\r\n {\r\n const [L, W, H] = [linkBoard.BoardProcessOption.spliteHeight, linkBoard.BoardProcessOption.spliteWidth, linkBoard.BoardProcessOption.spliteThickness];\r\n if ((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H))\r\n {\r\n continue;\r\n }\r\n }\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 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 if (\r\n Math.max(z0, 0) < Math.min(z1, br.Thickness) - 1e-6\r\n && br.ContourCurve.PtInCurve(sp.setZ(0))\r\n //层板钉中心点不在造型槽内\r\n && modelings.every(m =>\r\n {\r\n if (m.dir !== face && (depth + m.thickness) < br.Thickness)//不相交\r\n return true;\r\n\r\n // if (m.shape.Holes.some(h => h.Curve.PtInCurve(sp))) return true; //层板钉在孤岛内 现实中应该不会有\r\n return !m.shape.Outline.Curve.PtInCurve(sp);\r\n })\r\n )\r\n {\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 name: '层板钉'\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 (m.shape.Holes.length === 0 && 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.Ljg,//设置为偏心轮导致我们分析大孔面方向和板的大孔面一致时错误,所以改成连接杆\r\n position: center,\r\n radius: cu.Radius,\r\n depth: m.thickness,\r\n face: m.dir as number,\r\n name: GetGroupName(cu)\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, allowPxl: boolean, 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 (allowPxl || !HostApplicationServices.forceFilterPxl)\r\n return outline.IntersectWith(cir, 0).length > 1 || outline.PtInCurve(center);\r\n else\r\n return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center);\r\n }\r\n }\r\n /**分析常规排钻 */\r\n function ParseCylHoles(cyHole: CylinderHole, br: Board, offsetTanslation: Vector3, data: IBoardHoleInfo, outline: ExtrudeContourCurve)\r\n {\r\n let brInv = br.OCSInv;\r\n let brNormal = br.Normal;\r\n let outlineWidth = br.Width;\r\n let outlineHeight = br.Height;\r\n let faceRegions: Polyline[];\r\n let faceRegionsBox: Box3;\r\n\r\n let addPos: Vector3;\r\n if (br.IsArcBoard)\r\n {\r\n addPos = cyHole[\"__CacheAddPos__\"];\r\n faceRegions = cyHole[\"__CacheContour__\"];\r\n let ocs = cyHole[\"__CacheBrOCS__\"];\r\n\r\n cyHole[\"__CacheAddPos__\"] = undefined;\r\n cyHole[\"__CacheBrOCS__\"] = undefined;\r\n cyHole[\"__CacheContour__\"] = undefined;\r\n\r\n if (!ocs || !addPos || !faceRegions?.length)\r\n return;\r\n else\r\n {\r\n brInv = new Matrix4().getInverse(ocs);\r\n brNormal = new Vector3().setFromMatrixColumn(ocs, 2);\r\n\r\n faceRegionsBox = new Box3();\r\n for (let pl of faceRegions)\r\n faceRegionsBox.union(pl.BoundingBox);\r\n\r\n let boxSize = faceRegionsBox.getSize(new Vector3);\r\n outlineWidth = boxSize.x;\r\n outlineHeight = boxSize.y;\r\n\r\n let extrude = Board.CreateBoard(boxSize.y, boxSize.x, 1);\r\n outline = extrude.ContourCurve;\r\n }\r\n }\r\n\r\n let brInvRo = new Matrix4().extractRotation(brInv);\r\n let position = cyHole.Position.applyMatrix4(brInv);\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 = cyHole.Height;\r\n let diffMat = brInv.clone().multiply(cyHole.OCSNoClone);\r\n let x = new Vector3().setFromMatrixColumn(diffMat, 0);\r\n let angle = angleTo(XAxis, x);\r\n\r\n let cyNormal = cyHole.Normal.applyMatrix4(brInvRo);\r\n let pos2 = position.clone().add(cyNormal.multiplyScalar(depth));\r\n\r\n if (cyHole.Type === GangDrillType.Pxl || cyHole.Type === GangDrillType.WoodPXL)\r\n {\r\n if (isParallelTo(cyHole.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n if (!IsBetweenA2B(position.x, -cyHole.Radius, outlineWidth + cyHole.Radius, 1e-6)\r\n || !IsBetweenA2B(position.y, -cyHole.Radius, outlineHeight + cyHole.Radius, 1e-6)\r\n || !HoleInBoard(position.clone().setZ(0), cyHole.Radius, outline, cyHole.AllowPxl)) return;\r\n\r\n position.sub(offsetTanslation);\r\n\r\n //#region 求得真实的求交范围\r\n let z0 = position.z;\r\n let z1 = pos2.z;\r\n if (z0 > z1) [z0, z1] = [z1, z0];\r\n\r\n let i1 = Math.max(z0, 0);\r\n let i2 = Math.min(z1, br.Thickness);\r\n if (i2 - i1 < CanDrawHoleFuzz) return;//相交范围小于0.1\r\n\r\n if (equaln(i1, 0, CanDrawHoleFuzz)) face = FaceDirection.Back;\r\n else if (equaln(i2, br.Thickness, CanDrawHoleFuzz)) face = FaceDirection.Front;\r\n else return;//不在正面 也不在反面\r\n\r\n depth = i2 - i1;//真实的相交范围\r\n //#endregion\r\n\r\n isPush = true;\r\n }\r\n }\r\n else if (cyHole.Type === GangDrillType.Ljg || cyHole.Type === GangDrillType.Wood || cyHole.SameSideHole)\r\n {\r\n if (isPerpendicularityTo(cyHole.Normal, brNormal, CanDrawHoleFuzz))//侧孔\r\n {\r\n let z = position.z;\r\n if (!IsBetweenA2B(z, -cyHole.Radius, br.Thickness + cyHole.Radius, 1e-6)) return;\r\n\r\n let sp = position.clone().setZ(0); //真实数据\r\n let ep = position.clone().add(cyHole.Normal.multiplyScalar(cyHole.Height).applyMatrix4(brInvRo)).setZ(0); //真实数据\r\n let testLine = new Line(sp, ep);\r\n let iPt: Vector3;\r\n\r\n if (br.IsArcBoard)\r\n {\r\n if (faceRegions?.length)\r\n {\r\n for (let pl of faceRegions)\r\n {\r\n pl.UpdateOCSTo(new Matrix4().setPosition(faceRegionsBox.min));\r\n let newPl = new Polyline(pl.LineData);\r\n iPt = newPl.IntersectWith(testLine, 0, CanDrawHoleFuzz)[0];\r\n if (iPt)\r\n {\r\n outline = newPl;\r\n break;\r\n }\r\n }\r\n }\r\n else\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: \"侧孔与板无交点,无法加工该侧孔!\" }], LogType.Warning);\r\n return;\r\n }\r\n }\r\n else\r\n iPt = outline.IntersectWith(testLine, 0, CanDrawHoleFuzz)[0];\r\n\r\n if (!iPt)\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: \"侧孔与板无交点,无法加工该侧孔!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n position = iPt.clone().setZ(z);//排钻开始的位置\r\n for (let p of [sp, ep])\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 //同侧面生成常规单头排钻 连接杆在Curve边缘时不提示错误\r\n if (!cyHole.SameSideHole)\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: \"侧孔位置有问题,排钻不在板轮廓内!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n holes = data.sideHoles;\r\n face = Math.floor(outline.GetParamAtPoint(iPt));//板在那个边上\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 (cyHole.Type === GangDrillType.Wood)//木销\r\n {\r\n if (!outline.PtInCurve(position.clone().setZ(0))) return;\r\n position.sub(offsetTanslation);\r\n\r\n //#region 求得真实的求交范围\r\n let z0 = position.z;\r\n let z1 = pos2.z;\r\n if (z0 > z1) [z0, z1] = [z1, z0];\r\n\r\n let i1 = Math.max(z0, 0);\r\n let i2 = Math.min(z1, br.Thickness);\r\n if (i2 - i1 < CanDrawHoleFuzz) return;//相交范围小于0.1\r\n\r\n if (equaln(i1, 0, CanDrawHoleFuzz)) face = FaceDirection.Back;\r\n else if (equaln(i2, br.Thickness, CanDrawHoleFuzz)) face = FaceDirection.Front;\r\n else return;//不在正面 也不在反面\r\n\r\n depth = i2 - i1;//真实的相交范围\r\n //#endregion\r\n\r\n holes = data.frontBackHoles;\r\n isPush = true;\r\n }\r\n }\r\n else\r\n {\r\n if (isParallelTo(cyHole.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n if (!IsBetweenA2B(position.x, -cyHole.Radius, outlineWidth + cyHole.Radius, CanDrawHoleFuzz)\r\n || !IsBetweenA2B(position.y, -cyHole.Radius, outlineHeight + cyHole.Radius, CanDrawHoleFuzz)\r\n || !isIntersect2(0, br.Thickness, position.z, pos2.z, -CanDrawHoleFuzz)\r\n || !HoleInBoard(position.clone().setZ(0), cyHole.Radius, outline, cyHole.AllowPxl, true)) return;\r\n\r\n position.sub(offsetTanslation);\r\n holes = data.frontBackHoles;\r\n face = !equalv3(cyHole.Normal, brNormal, CanDrawHoleFuzz) ? FaceDirection.Front : FaceDirection.Back;\r\n isPush = true;\r\n }\r\n }\r\n\r\n if (isPush)\r\n {\r\n if (br.IsArcBoard)\r\n {\r\n //弧形板需要单独增加差值\r\n position = position.add(addPos);\r\n endPt = endPt?.add(addPos);\r\n\r\n if (br.SweepAngle)\r\n {\r\n let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx);\r\n position.applyMatrix4(ocsInv);\r\n endPt?.applyMatrix4(ocsInv);\r\n }\r\n }\r\n\r\n holes.push({\r\n type: cyHole.Type,\r\n position,//排钻开始位置\r\n endPt, //排钻结束的位置(在板的坐标系)\r\n radius: cyHole.Radius,//排钻半径\r\n depth,//排钻的插入深度\r\n face,//板在哪个边上\r\n angle,\r\n name: GetGroupName(cyHole),\r\n goodsId: cyHole.GoodsId, //商品编号\r\n });\r\n }\r\n }\r\n\r\n /**分析自定义圆柱排钻\r\n *\r\n * isRelativeHardware 关联的五金使用此类型误差\r\n * CanDrawHoleFuzz)//区间交集必须大于CanDrawHoleFuzz\r\n * CanDrawHoleFuzz)//区间交集必须大于CanDrawHoleFuzz\r\n *\r\n */\r\n function ParseExtrudeHoles(d: ExtrudeHole, br: Board, offsetTanslation: Vector3, data: IBoardHoleInfo, outline: ExtrudeContourCurve, isCheckGroove = false, isRelativeHardware = false)\r\n {\r\n if (!d.isHole)\r\n return;\r\n\r\n let brInv = br.OCSInv;\r\n let brNormal = br.Normal;\r\n let cir = d.ContourCurve;\r\n\r\n let outlineWidth = br.Width;\r\n let outlineHeight = br.Height;\r\n\r\n let addPos: Vector3;\r\n let faceRegions: Polyline[];\r\n let faceRegionsBox: Box3;\r\n\r\n if (br.IsArcBoard)\r\n {\r\n addPos = d[\"__CacheAddPos__\"];\r\n faceRegions = d[\"__CacheContour__\"];\r\n let ocs = d[\"__CacheBrOCS__\"];\r\n\r\n d[\"__CacheAddPos__\"] = undefined;\r\n d[\"__CacheBrOCS__\"] = undefined;\r\n d[\"__CacheContour__\"] = undefined;\r\n\r\n if (!ocs || !addPos || !faceRegions?.length)\r\n return;\r\n else\r\n {\r\n brInv = new Matrix4().getInverse(ocs);\r\n brNormal = new Vector3().setFromMatrixColumn(ocs, 2);\r\n\r\n faceRegionsBox = new Box3();\r\n for (let pl of faceRegions)\r\n faceRegionsBox.union(pl.BoundingBox);\r\n\r\n let boxSize = faceRegionsBox.getSize(new Vector3);\r\n outlineWidth = boxSize.x;\r\n outlineHeight = boxSize.y;\r\n\r\n let extrude = Board.CreateBoard(boxSize.y, boxSize.x, 1);\r\n outline = extrude.ContourCurve;\r\n }\r\n }\r\n\r\n if (cir instanceof Circle)\r\n {\r\n let diffMtx = brInv.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\r\n //检测排钻中心孔位与板轮廓outline交集关系时,不考虑offsetTanslation的差值 因为传进来的outline都不是封边轮廓\r\n let p = sp.clone().setZ(0);\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 InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: \"的孔嵌在板中间,无法加工,已经跳过!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n if (!(outline.PtInCurve(p)))//在轮廓内\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: \"的孔不在板轮廓内,无法加工,已经跳过!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n if (groovesOutlines.some(g => g.PtInCurve(p)))//在洞内\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: \"的孔在造型内,无法加工,已经跳过!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n p.sub(offsetTanslation);\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 {\r\n let position = z0 < CanDrawHoleFuzz ? p : p.setZ(br.Thickness);\r\n\r\n if (br.IsArcBoard)\r\n {\r\n //弧形板需要单独增加差值\r\n position = position.add(addPos);\r\n\r\n if (br.SweepAngle)\r\n {\r\n let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx);\r\n position.applyMatrix4(ocsInv);\r\n }\r\n }\r\n data.frontBackHoles.push({\r\n type: d.isThrough ? GangDrillType.TK : (isRelativeHardware ? GangDrillType.Ljg : d.Type),\r\n position,\r\n radius: cir.Radius,\r\n depth,\r\n face: z0 < CanDrawHoleFuzz ? FaceDirection.Back : FaceDirection.Front,\r\n angle: angle,\r\n name: GetGroupName(d)\r\n });\r\n }\r\n }\r\n else//侧孔\r\n {\r\n let oldZ = sp.z;\r\n let [minX, maxX] = sp.x < ep.x ? [sp.x, ep.x] : [ep.x, sp.x];\r\n let [minY, maxY] = sp.y < ep.y ? [sp.y, ep.y] : [ep.y, sp.y];\r\n\r\n if (sp.z > -cir.Radius\r\n && sp.z < br.Thickness + cir.Radius\r\n && Math.max(minX, 0) < (Math.min(outlineWidth, maxX) + (isRelativeHardware ? -CanDrawHoleFuzz : 1e-6))//区间交集必须大于CanDrawHoleFuzz\r\n && Math.max(minY, 0) < (Math.min(outlineHeight, maxY) + (isRelativeHardware ? -CanDrawHoleFuzz : 1e-6))//区间交集必须大于CanDrawHoleFuzz\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, 1e-5)[0];\r\n if (!pt)\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: `的${isRelativeHardware ? \"五金\" : \"排钻\"}嵌在板件内部,已经跳过!` }], LogType.Warning);\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 (!equalv2(p, 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 if (br.IsArcBoard)\r\n {\r\n //弧形板需要单独增加差值\r\n position = position.add(addPos);\r\n endPt = endPt.add(addPos);\r\n\r\n if (br.SweepAngle)\r\n {\r\n let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx);\r\n position.applyMatrix4(ocsInv);\r\n endPt.applyMatrix4(ocsInv);\r\n }\r\n }\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 name: GetGroupName(d)\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 const accuracy = HostApplicationServices.chaidanOption.hardwareExpressionFormattingAccuracy;\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 ? FixedNotZero(actualVal, 2) : data.actualExpr;\r\n data.spec = ParseExpr(data.spec, accuracy, { L: size.x, W: size.y, H: size.z });\r\n data.model = ParseExpr(data.model, accuracy, { L: size.x, W: size.y, H: size.z });\r\n data.factory = ParseExpr(data.factory, accuracy, { L: size.x, W: size.y, H: size.z });\r\n data.brand = ParseExpr(data.brand, accuracy, { 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 const accuracy = HostApplicationServices.chaidanOption.hardwareExpressionFormattingAccuracy;\r\n d.spec = ParseExpr(data.spec, accuracy, { 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\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 Get2DModeing(br: Board, offset: Vector3)\r\n {\r\n let res: I2DModeling[] = [];\r\n // 拆单值有效的板件勾选取消孔槽加工\r\n const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption;\r\n const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness];\r\n if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing)\r\n {\r\n return res;\r\n }\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, false),\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 // 拆单值有效的板件勾选取消孔槽加工\r\n const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption;\r\n const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness];\r\n if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing)\r\n {\r\n return res;\r\n }\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, redundancyKnif = 0)\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();\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(\r\n { Thickness: brThickness, ContourCurve: brContour },\r\n {\r\n shape,\r\n thickness,\r\n dir, knifeRadius, addLen, addWidth, addDepth\r\n },\r\n redundancyKnif);\r\n\r\n return paths.map((c: ExtrudeContourCurve) => ConverToPtsBul(c, false));\r\n }\r\n export function GetGroupName(ent: Entity): string\r\n {\r\n let group = ent.GroupId?.Object as GroupRecord;\r\n if (!group || !(group instanceof GroupRecord)) return \"未知(无拆单名称)\";\r\n return group.Name;\r\n }\r\n}\r\n\r\nexport function ParseArcBoardHoles(br: Board, offsetTanslation: Vector3)\r\n{\r\n const ArcBoardBuild = br.ArcBuild;\r\n ArcBoardBuild.ParseSweepCurves();\r\n let cus = ArcBoardBuild.SweepCurves1;\r\n\r\n let ContourCurve = br.Shape.Outline.Curve.Clone().ApplyMatrix(ArcBoardBuild.OCS2RotateMtx) as Polyline;\r\n let brBoxSize = ContourCurve.BoundingBox.getSize(new Vector3);\r\n let currentLength = 0;\r\n\r\n if (br.SweepAngle)\r\n offsetTanslation = offsetTanslation.clone().applyMatrix4(ArcBoardBuild.OCS2RotateMtx.clone().setPosition(0, 0, 0));\r\n\r\n for (let cu of cus)\r\n {\r\n if (currentLength > brBoxSize.x) break;\r\n\r\n if (cu instanceof Arc)\r\n {\r\n currentLength = currentLength + cu.Length;\r\n continue;\r\n }\r\n\r\n //直线所在坐标系\r\n let cuBox = new Box3(new Vector3, new Vector3(cu.Length, brBoxSize.y, br.Thickness));\r\n let an = angle(cu.EndPoint.clone().sub(cu.StartPoint));\r\n let m = new Matrix4().makeRotationY(-an);\r\n\r\n let ocs = br.OCS;\r\n if (br.SweepAngle)\r\n ocs.multiply(ArcBoardBuild.Rotate2OCSMtx);\r\n\r\n ocs.multiply(m.setPosition(cu.StartPoint.clone().applyMatrix4(new Matrix4().makeRotationX(Math.PI / 2))));\r\n\r\n //正面时翻转Z向量\r\n if (br.SweepVisibleFace === FaceDirection.Front)\r\n ocs.setPosition(new Vector3(0, 0, -br.Thickness).applyMatrix4(ocs));\r\n\r\n // 测试代码\r\n // let pt = new Vector3().applyMatrix4(ocs);\r\n // let l1 = new Line(pt, pt.clone().add(new Vector3().setFromMatrixColumn(ocs, 0).normalize().multiplyScalar(100)));\r\n // let l2 = new Line(pt, pt.clone().add(new Vector3().setFromMatrixColumn(ocs, 1).normalize().multiplyScalar(100)));\r\n // let l3 = new Line(pt, pt.clone().add(new Vector3().setFromMatrixColumn(ocs, 2).normalize().multiplyScalar(100)));\r\n // TestDraw(new Point(pt));\r\n // TestDraw(l1, 1);\r\n // TestDraw(l2, 3);\r\n // TestDraw(l3, 5);\r\n //裁剪 计算每个分段轮廓\r\n let length = currentLength + cu.Length;\r\n let starKnifePls = new Polyline([{ pt: AsVector2({ x: currentLength, y: -1 }), bul: 0 }, { pt: AsVector2({ x: currentLength, y: 10000 }), bul: 0 }]);\r\n let endKnifePls = new Polyline([{ pt: AsVector2({ x: length, y: -1 }), bul: 0 }, { pt: AsVector2({ x: length, y: 10000 }), bul: 0 }]);\r\n\r\n //裁剪结果\r\n let faceRegions = SplitPolyline(ContourCurve, [starKnifePls, endKnifePls]);\r\n faceRegions = faceRegions.filter((faceRegion) =>\r\n {\r\n let x = faceRegion.BoundingBox.getCenter(new Vector3).x;\r\n return x > currentLength && x < length;\r\n });\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 Hole;\r\n if (d[\"__CacheBrOCS__\"]) continue;\r\n let b = d.BoundingBox.applyMatrix4(new Matrix4().getInverse(ocs));\r\n\r\n if (cuBox.intersectsBox(b))\r\n {\r\n d[\"__CacheBrOCS__\"] = ocs;\r\n //记录分段路径的起点与原点差值\r\n d[\"__CacheAddPos__\"] = new Vector3(currentLength);\r\n d[\"__CacheContour__\"] = faceRegions;\r\n }\r\n }\r\n }\r\n }\r\n currentLength = length;\r\n }\r\n\r\n return offsetTanslation;\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 { Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../Common/ArrayExt\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { MergeCurvelist } from \"../Common/CurveUtils\";\r\nimport { InteractionLog, LogType } from \"../Common/Log\";\r\nimport { Intent, Toaster } from \"../Common/Toaster\";\r\nimport { FixIndex, LINK_FUZZ } from \"../Common/Utils\";\r\nimport { Contour } 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 } 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 { IdentityMtx4, XAxis, equaln, equalv3, isParallelTo } from \"../Geometry/GeUtils\";\r\nimport { Max } from \"../Nest/Common/Util\";\r\nimport { Production, SplitOrderType } from \"../Production/Product\";\r\nimport { IHighEdgeRemarkItem, IHighReservedEdgeItem, IHighSealedItem } from \"../UI/Store/OptionInterface/IHighSealedItem\";\r\nimport { OffsetPolyline } from \"./OffsetPolyline\";\r\nimport { ParseEdgeSealDir } from \"./ParseEdgeSealDir\";\r\n\r\ntype CurveGroups = (Curve[])[];\r\n\r\n/**\r\n * 将曲线分段(根据高级封边的特性 (因为圆弧无法单独使用封边,所以和圆弧在一起的曲线必须和圆弧一样的封边,否则偏移失败))\r\n * @l-arc-l,l-arc-arc-l,l-arc-l-arc-l....\r\n * @param in_out_curves 曲线组( 函数结束后 这个数组被改变 )\r\n * @returns 返回编组 curveGroups\r\n */\r\nexport function SubsectionCurvesOfHightSeal(in_out_curves: Curve[]): CurveGroups\r\n{\r\n let curveGroups: CurveGroups = [];\r\n let usedCu: WeakSet = new WeakSet();\r\n\r\n //归类曲线,返回归类是否成功\r\n const paragraph = (nextCurve: Curve, curCurve: Curve, curvesGroup: Curve[], isBack: boolean) =>\r\n {\r\n const curIsLine = curCurve instanceof Line;\r\n const nextIsLine = nextCurve instanceof Line;\r\n\r\n if (usedCu.has(nextCurve))\r\n return false;\r\n\r\n if (curIsLine !== nextIsLine)//直线和圆弧\r\n {\r\n if (curIsLine)\r\n {\r\n if (isBack)\r\n {\r\n if (!isParallelTo(curCurve.GetFirstDeriv(0).normalize(), nextCurve.GetFirstDeriv(0).normalize()))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!isParallelTo(curCurve.GetFirstDeriv(0).normalize(), nextCurve.GetFirstDeriv(1).normalize()))\r\n return false;\r\n }\r\n }\r\n\r\n if (nextIsLine)\r\n {\r\n if (isBack)\r\n {\r\n if (!isParallelTo(curCurve.GetFirstDeriv(1).normalize(), nextCurve.GetFirstDeriv(0).normalize()))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!isParallelTo(curCurve.GetFirstDeriv(0).normalize(), nextCurve.GetFirstDeriv(0).normalize()))\r\n return false;\r\n }\r\n }\r\n }\r\n else if (nextIsLine)//都是直线\r\n {\r\n //共线且相连的直线分为一组 #I11T1Z\r\n if (!isParallelTo(nextCurve.GetFirstDeriv(0).normalize(), curCurve.GetFirstDeriv(0).normalize()))\r\n return false;\r\n\r\n let pts = [curCurve.StartPoint, curCurve.EndPoint];\r\n let pts2 = [nextCurve.StartPoint, nextCurve.EndPoint];\r\n if (pts.every(p => pts2.every(p2 => !equalv3(p, p2, 1e-6))))//2条线完全分离 没有共同点\r\n return false;\r\n }\r\n //else 都是圆弧 必然成组\r\n\r\n if (isBack)\r\n curvesGroup.push(nextCurve);\r\n else\r\n curvesGroup.unshift(nextCurve);\r\n\r\n usedCu.add(nextCurve);\r\n return true;\r\n };\r\n\r\n let caclCus = in_out_curves.filter(c => !equaln(c.Length, 0));\r\n\r\n while (caclCus.length > 0)\r\n {\r\n let curCurve = caclCus.shift();\r\n if (usedCu.has(curCurve))\r\n continue;\r\n\r\n let curvesGroup = [curCurve];//编组\r\n usedCu.add(curCurve);\r\n //往后搜索\r\n for (let i = 0; i < caclCus.length; i++)\r\n {\r\n if (!paragraph(caclCus[i], curCurve, curvesGroup, true))\r\n break;\r\n curCurve = caclCus[i];\r\n }\r\n //只有第一条才需要往前搜索\r\n if (caclCus.length === in_out_curves.length - 1)\r\n {\r\n curCurve = curvesGroup[0];\r\n //往前搜索\r\n for (let i = caclCus.length - 1; i >= 0; i--)\r\n {\r\n if (!paragraph(caclCus[i], curCurve, curvesGroup, false))\r\n break;\r\n curCurve = caclCus[i];\r\n }\r\n }\r\n curveGroups.push(curvesGroup);\r\n }\r\n\r\n in_out_curves.length = 0;\r\n //同组多条曲线连接为多段线\r\n for (let g of curveGroups)\r\n {\r\n if (g.length === 1)\r\n in_out_curves.push(g[0]);\r\n else\r\n {\r\n let pl = Polyline.FastCombine(g, LINK_FUZZ, false);\r\n in_out_curves.push(pl);\r\n }\r\n }\r\n\r\n return curveGroups;\r\n}\r\n\r\n\r\n//与GetBoardSealingCurves相关\r\nexport function GetBoardHighSeal(br: Board, sealcus: Curve[]): IHighSealedItem[]\r\n{\r\n const option = br.BoardProcessOption;\r\n if (Production.HasSpiteSize(br))\r\n {\r\n return [\r\n { size: parseFloat(option.sealedDown), sealColor: option.sealColorDown },\r\n { size: parseFloat(option.sealedRight), sealColor: option.sealColorRight },\r\n { size: parseFloat(option.sealedUp), sealColor: option.sealColorUp },\r\n { size: parseFloat(option.sealedLeft), sealColor: option.sealColorLeft },\r\n ];\r\n }\r\n\r\n let highSeals: IHighSealedItem[] = [];\r\n for (let d of br.BoardProcessOption.highSealed)\r\n if (d.size != null)\r\n highSeals.push({ ...d });\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.GetFirstDeriv(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, sealColor: option.sealColorDown });\r\n else\r\n highSeals.push({ size: sealUp, sealColor: option.sealColorUp });\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n highSeals.push({ size: sealRight, sealColor: option.sealColorRight });\r\n else\r\n highSeals.push({ size: sealLeft, sealColor: option.sealColorLeft });\r\n }\r\n }\r\n }\r\n\r\n return highSeals;\r\n}\r\n\r\nexport function GetBoardHighReservedEdge(br: Board, sealcus: Curve[]): IHighReservedEdgeItem[]\r\n{\r\n if (Production.HasSpiteSize(br))\r\n {\r\n return [\r\n { size: parseFloat(br.BoardProcessOption.reservedEdgeDown) },\r\n { size: parseFloat(br.BoardProcessOption.reservedEdgeRight) },\r\n { size: parseFloat(br.BoardProcessOption.reservedEdgeUp) },\r\n { size: parseFloat(br.BoardProcessOption.reservedEdgeLeft) },\r\n ];\r\n }\r\n\r\n let highReservedEdge: IHighReservedEdgeItem[] = [];\r\n for (let d of br.BoardProcessOption.highReservedEdge)\r\n if (d.size != null)\r\n highReservedEdge.push({ ...d });\r\n\r\n //若未设置高级封边,把上下左右封边存入高级封边\r\n if (sealcus.length !== highReservedEdge.length || !br.IsSpecialShape)\r\n {\r\n let reservedEdgeDown = parseFloat(br.BoardProcessOption.reservedEdgeDown);\r\n let reservedEdgeUp = parseFloat(br.BoardProcessOption.reservedEdgeUp);\r\n let reservedEdgeLeft = parseFloat(br.BoardProcessOption.reservedEdgeLeft);\r\n let reservedEdgeRight = parseFloat(br.BoardProcessOption.reservedEdgeRight);\r\n\r\n highReservedEdge.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.GetFirstDeriv(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 highReservedEdge.push({ size: reservedEdgeDown });\r\n else\r\n highReservedEdge.push({ size: reservedEdgeUp });\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n highReservedEdge.push({ size: reservedEdgeRight });\r\n else\r\n highReservedEdge.push({ size: reservedEdgeLeft });\r\n }\r\n }\r\n }\r\n\r\n return highReservedEdge;\r\n}\r\n\r\n/**\r\n * 获取板边备注\r\n * @param br 板\r\n * @param sealcus 封边轮廓线\r\n * @param addAll 添加所有板边备注\r\n * @returns 板边备注\r\n */\r\nexport function GetHighBoardEdgeRemark(br: Board, sealcus: Curve[], addAll = false): IHighEdgeRemarkItem[]\r\n{\r\n const opt = br.BoardProcessOption;\r\n\r\n //顺序和封边一样\r\n if (Production.HasSpiteSize(br))\r\n {\r\n return [\r\n { description: opt.edgeRemarkDown },\r\n { description: opt.edgeRemarkRight },\r\n { description: opt.edgeRemarkUp },\r\n { description: opt.edgeRemarkLeft },\r\n ];\r\n }\r\n\r\n const highBoardEdgeRemark: IHighEdgeRemarkItem[] = [];\r\n for (const d of opt.highBoardEdgeRemark)\r\n if (d.description != null || addAll)\r\n highBoardEdgeRemark.push({ ...d });\r\n\r\n //若未设置高级板边备注,把上下左右板边备注存入高级板边备注\r\n if (sealcus.length !== highBoardEdgeRemark.length || !br.IsSpecialShape)\r\n {\r\n const edgeRemarkDown = opt.edgeRemarkDown;\r\n const edgeRemarkRight = opt.edgeRemarkRight;\r\n const edgeRemarkUp = opt.edgeRemarkUp;\r\n const edgeRemarkLeft = opt.edgeRemarkLeft;\r\n\r\n highBoardEdgeRemark.length = 0;\r\n const dir = Math.sign(br.ContourCurve.Area2);\r\n for (const c of sealcus)\r\n {\r\n const derv = c.GetFirstDeriv(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 highBoardEdgeRemark.push({ description: edgeRemarkDown });\r\n else\r\n highBoardEdgeRemark.push({ description: edgeRemarkUp });\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n highBoardEdgeRemark.push({ description: edgeRemarkRight });\r\n else\r\n highBoardEdgeRemark.push({ description: edgeRemarkLeft });\r\n }\r\n }\r\n }\r\n\r\n return highBoardEdgeRemark;\r\n}\r\n\r\n/**偏移前后曲线起点没改变 */\r\nexport function OffsetOutlineSpNotChange(oldcu: Curve, newCu: Curve)\r\n{\r\n if (!newCu) return false;\r\n if (oldcu.EndParam !== newCu.EndParam) return false;\r\n let sDerv = oldcu.GetFirstDeriv(0).normalize();\r\n let eDerv = oldcu.GetFirstDeriv(oldcu.EndParam).normalize().negate();\r\n sDerv.add(eDerv).normalize();\r\n let mDerv = newCu.StartPoint.sub(oldcu.StartPoint).normalize();\r\n return isParallelTo(mDerv, sDerv);\r\n}\r\n\r\n/**\r\n * 获取板件的轮廓曲线数组(合并共线了 已经对封边进行合并了 尊重原始时针)\r\n * GetBrContourCurvesBySealGrouped\r\n * @param offsetInside 向内偏移1(为了编辑封边)\r\n * */\r\nexport function GetBoardSealingCurves(br: Board, offsetInside = false): Curve[]\r\n{\r\n let brContour: ExtrudeContourCurve = Production.GetSpliteOutlineBySpliteSize(br);\r\n if (brContour)\r\n return brContour.Explode();//如果是拆单板 则直接炸开返回\r\n\r\n brContour = br.ContourCurve;\r\n if (brContour instanceof Circle)\r\n return [brContour.Clone()];\r\n\r\n if (offsetInside)\r\n {\r\n let dir = Math.sign(brContour.Area2);\r\n let offsetedCurve = brContour.GetOffsetCurves(-1 * dir)[0] as Polyline;\r\n if (OffsetOutlineSpNotChange(brContour, offsetedCurve))\r\n brContour = offsetedCurve;\r\n }\r\n\r\n //避免共线导致的侧面数据对应错误\r\n let curves = brContour.Explode();\r\n MergeCurvelist(curves);\r\n\r\n if (curves.length === 1 && curves[0] instanceof Circle)//变成一个圆\r\n return curves;\r\n\r\n if (br.IsSpecialShape)//是异形板(其实矩形板也需要分组 避免共线导致的错误) (但是如果删了这个 之前的数据会出现不兼容的问题)\r\n SubsectionCurvesOfHightSeal(curves);//分组 join 改变cus\r\n\r\n return curves;\r\n}\r\n\r\n\r\nexport interface BrSealedData\r\n{\r\n brContour: ExtrudeContourCurve;//板件轮廓(原始(没有转换为逆时针 因为Product那边会转换))\r\n sealedContour: ExtrudeContourCurve;//封边后的轮廓\r\n\r\n brCurves: Curve[];//封边轮廓(高级封边 已经成组)\r\n highSeals: IHighSealedItem[];//高级封边(一一对应)\r\n highReservedEdges: IHighReservedEdgeItem[];//高级预留边\r\n hasSealedErr?: boolean;//调用 GetSealedBoardContour 方法时判断是否有出现封边异常\r\n}\r\n\r\nclass OffsetPolyline2 extends OffsetPolyline\r\n{\r\n override InitSubCurves()\r\n {\r\n this._IsTopoOffset = true;\r\n return this;\r\n }\r\n protected override OffsetSubCurves(): void { }\r\n\r\n protected override GeneralCirclesAndVertexs(): void { }\r\n\r\n protected override GeneralTrimContours(): void\r\n {\r\n super.GeneralTrimContours();\r\n arrayRemoveIf(this._TrimPolylineContours, con => con.Curve.Area < 0.01);//因为局部偏移可能为0,产生0面积的轮廓\r\n }\r\n\r\n CheckPointDir(pt: Vector3): boolean\r\n {\r\n let dir = this.GetPointAtCurveDir(pt);\r\n return dir === 0 || dir === this._OffsetDistSign;//因为局部偏移可能为0,所以在线上的我们也保留了\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 获取板件的轮廓(没有扣封边)(拆单时表现)\r\n * 在拆单的时候 我们用这个轮廓(为了数据对应准确性)\r\n * 修改时 请注意函数 GetSealedBoardContour\r\n*/\r\nexport function GetBoardContour(br: Board): ExtrudeContourCurve | undefined\r\n{\r\n if (Math.abs(br.ContourCurve.Area) < 10)\r\n {\r\n InteractionLog([{ msg: `板件:${br.Name}`, entity: [br] }, { msg: \"板轮廓面积小于10\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n let curves = GetBoardSealingCurves(br);\r\n\r\n if (curves.length === 1 && curves[0] instanceof Circle)\r\n return curves[0];\r\n\r\n let allCurvs: Curve[] = [];\r\n for (let c of curves)\r\n if (c instanceof Polyline)\r\n allCurvs.push(...c.Explode());\r\n else\r\n allCurvs.push(c);\r\n let brContour = Polyline.FastCombine(allCurvs, LINK_FUZZ * 2, false);\r\n return brContour;\r\n}\r\n\r\n\r\n/**\r\n * 获取板件(扣封边后的)轮廓(拆单时)\r\n * 修改时 请注意函数 GetBoardContour\r\n * @param {Board} br 板件\r\n * @param {SplitOrderType} [splitType=SplitOrderType.ChaiDan] 拆单类型\r\n * @return {*} {(BrSealedData | undefined)}\r\n */\r\nexport function GetSealedBoardContour(br: Board, splitType: SplitOrderType = SplitOrderType.ChaiDan): BrSealedData | undefined\r\n{\r\n if (Math.abs(br.ContourCurve.Area) < 10)\r\n return;\r\n\r\n let curves = GetBoardSealingCurves(br);\r\n let highSeals = GetBoardHighSeal(br, curves);\r\n let highReservedEdges = GetBoardHighReservedEdge(br, curves);\r\n\r\n if (splitType === SplitOrderType.HoleGrooveDim) // 孔洞标注,不需计算预留边值\r\n for (const element of highReservedEdges)\r\n element.size = 0;\r\n\r\n if (curves.length === 1 && curves[0] instanceof Circle)\r\n {\r\n let res: BrSealedData = {\r\n brContour: curves[0],\r\n sealedContour: curves[0].GetOffsetCurves(-highSeals[0].size + highReservedEdges[0].size)[0] as Circle,\r\n brCurves: curves,\r\n highSeals,\r\n highReservedEdges,\r\n };\r\n return res;\r\n }\r\n\r\n let allCurvs: Curve[] = [];\r\n for (let c of curves)\r\n if (c instanceof Polyline)\r\n allCurvs.push(...c.Explode());\r\n else\r\n allCurvs.push(c);\r\n let brContour = Polyline.FastCombine(allCurvs, LINK_FUZZ * 2, false);\r\n\r\n let dir = Math.sign(brContour.Area2);\r\n\r\n let sealedContours: Polyline[];\r\n\r\n let maxOffset: number = 0; //正偏移(外)\r\n let minOffset: number = 0; //负偏移(内)\r\n\r\n const curOffsetValues = curves.map((c, i) =>\r\n {\r\n let seal = highSeals[i];//封边\r\n let reservedEdge = highReservedEdges[i];\r\n let offDist = -seal.size + reservedEdge.size;\r\n maxOffset = Math.max(maxOffset, offDist);\r\n minOffset = Math.min(minOffset, offDist);\r\n return offDist;\r\n });\r\n\r\n //判断偏移值全是0的情况\r\n if (minOffset === 0 && maxOffset === 0)\r\n {\r\n sealedContours = [brContour];\r\n }\r\n else if (false && curOffsetValues.every(v => equaln(v, curOffsetValues[0]), 1e-3))//判断每段偏移值是否一致\r\n {\r\n sealedContours = brContour.GetOffsetCurves(curOffsetValues[0] * dir) as Polyline[];\r\n }\r\n else\r\n {\r\n //先分解多段线生成对应线段和偏移值,防止两次偏移时启用的线段数不一致\r\n const newCurves: Curve[] = [];\r\n\r\n //----计算每段封边偏移值 begin---\r\n //封边 + 预留边(正数为封边正方向,负值为封边反方向)\r\n const offsetValues = [];\r\n for (let i = 0; i < curves.length; i++)\r\n {\r\n let seal = highSeals[i];\r\n let reservedEdge = highReservedEdges[i];\r\n let curve = curves[i];\r\n if (curve instanceof Polyline)\r\n {\r\n let curveExpds = curve.Explode().filter(c => c.Length >= 1e-4);\r\n for (const c of curveExpds)\r\n {\r\n offsetValues.push(-seal.size + reservedEdge.size);\r\n newCurves.push(c);\r\n }\r\n }\r\n else\r\n {\r\n offsetValues.push(-seal.size + reservedEdge.size);\r\n newCurves.push(curve);\r\n }\r\n }\r\n // --- 每段封边偏移值 end ----\r\n\r\n const SealedOffset = (curves: Curve[], offectValues: number[], dist: number) =>\r\n {\r\n //局部偏移\r\n let polylineOffset = new OffsetPolyline2(brContour, dir * dist);\r\n let subIndex = 0;\r\n polylineOffset._TrimCircleContours = [];\r\n polylineOffset._TrimArcContours = [];\r\n polylineOffset._SubOffsetedCurves = [];\r\n polylineOffset._SubCurves = [];\r\n polylineOffset._Circles = [];\r\n polylineOffset._CacheOCS = IdentityMtx4;\r\n polylineOffset._IsClose = true;\r\n\r\n for (let i = 0; i < curves.length; i++)\r\n {\r\n let curve = curves[i];//曲线组\r\n let offectValue = offectValues[i];\r\n if (Math.sign(offectValue) !== Math.sign(dist))\r\n offectValue = 0;\r\n\r\n let preOffectValue = offectValues[FixIndex(i - 1, curves)];\r\n\r\n if (curve.Length < 1e-4) continue;\r\n\r\n polylineOffset._SubCurves.push(curve);//sub\r\n\r\n //trim Circle\r\n if (offectValue > 0 && offectValue === preOffectValue)\r\n polylineOffset._Circles.push(new Circle(curve.StartPoint, offectValue));\r\n else\r\n polylineOffset._Circles.push(undefined);\r\n\r\n //offset\r\n let offsetC = curve.GetOffsetCurves(dir * offectValue)[0];\r\n if (offsetC)\r\n polylineOffset._SubOffsetedCurves.push({\r\n index: subIndex,\r\n curve: offsetC,\r\n dist: -offectValue,\r\n });\r\n else\r\n polylineOffset._TrimArcContours.push(Contour.CreateContour([curve, new Line(curve.StartPoint, curve.EndPoint)], false));\r\n\r\n subIndex++;\r\n }\r\n\r\n polylineOffset._Vertexs = polylineOffset._SubCurves.map(c => c.StartPoint);\r\n\r\n polylineOffset.Do();\r\n return polylineOffset;\r\n };\r\n\r\n let polylineOffset1: OffsetPolyline2;\r\n let offCurves = newCurves;\r\n //先判断负偏移,0的时候不偏移\r\n if (minOffset < 0)\r\n {\r\n polylineOffset1 = SealedOffset(newCurves, offsetValues, minOffset);\r\n offCurves = polylineOffset1._SubOffsetedCurves.map((s) => s.curve);\r\n }\r\n //如果存在正偏移,再偏移一次\r\n if (maxOffset > 0)\r\n {\r\n let polylineOffset2 = SealedOffset(offCurves, offsetValues, maxOffset);\r\n sealedContours = polylineOffset2._RetCurves;\r\n }\r\n else\r\n sealedContours = polylineOffset1._RetCurves;\r\n }\r\n\r\n let hasSealedErr = false;\r\n //如果有多个 取最大\r\n if (sealedContours.length > 1)\r\n {\r\n hasSealedErr = true;\r\n Toaster({\r\n message: `有板计算封边异常,请检查!(点击左下角提示可以查看该板)`,\r\n timeout: 15000,\r\n intent: Intent.WARNING,\r\n key: \"sealerror\"\r\n });\r\n\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板:${br.Name}`, entity: [br] }, { msg: `在扣除封边计算中,得到了${sealedContours.length}条轮廓,请检查!` }], LogType.Warning);\r\n\r\n let areas = sealedContours.map(p => p.Area);\r\n let maxIndex = Max(areas, (a1, a2) => a2 > a1);\r\n sealedContours = [sealedContours[maxIndex]];\r\n }\r\n\r\n //如果不闭合 则尝试闭合\r\n let sealedContour = sealedContours[0];\r\n if (sealedContour && !sealedContour.IsClose)\r\n {\r\n if (sealedContour.StartPoint.distanceTo(sealedContour.EndPoint) < 0.1)\r\n sealedContour.CloseMark = true;\r\n else\r\n sealedContour = CreateContour2([sealedContour])?.Curve as Polyline;\r\n }\r\n\r\n if (!sealedContour)\r\n return;\r\n\r\n //逆时针\r\n if (sealedContour && sealedContour.Area2 < 0)\r\n sealedContour.Reverse();\r\n\r\n let res: BrSealedData = {\r\n brContour,\r\n sealedContour,\r\n brCurves: curves,\r\n highSeals,\r\n highReservedEdges,\r\n hasSealedErr\r\n };\r\n\r\n return res;\r\n}\r\n\r\n\r\n/**\r\n * 将11对应的封边数值改成WebCAD的高级封边\r\n * @param seals 每段曲线的封边\r\n * @param curves 曲线表\r\n * @returns 转换成高级封边后的封边值 (圆弧会编组)\r\n */\r\nexport function ConverEachSeal2HightSealData(seals: IHighSealedItem[], curves: Curve[]): IHighSealedItem[]\r\n{\r\n curves = curves.concat();\r\n seals = seals.concat();\r\n let lastSeal = seals[seals.length - 1];\r\n\r\n for (let i = seals.length; i < curves.length; i++)\r\n seals.push(lastSeal);\r\n\r\n let map = new Map();\r\n for (let i = 0; i < curves.length; i++)\r\n map.set(curves[i], seals[i]);\r\n\r\n let groups = SubsectionCurvesOfHightSeal(curves);\r\n\r\n return groups.map(g => map.get(g[0]));\r\n}\r\n\r\n\r\n/**\r\n * 设置板的上下左右封边(解析来自高级封边)\r\n * @param br\r\n * @param sealDatas 封边数据\r\n * @param [sealCurves] 封边的曲线\r\n * @param [brContourCurve] 传递封边的曲线轮廓\r\n */\r\nexport function SetBoardTopDownLeftRightSealData(br: Board, sealDatas: IHighSealedItem[], sealCurves?: Curve[], brContourCurve?: ExtrudeContourCurve)\r\n{\r\n let dir = Math.sign((brContourCurve ?? br.ContourCurve).Area2);\r\n sealCurves = sealCurves ?? 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.IsRect && sealCurves.length === 4)\r\n {\r\n for (let i = 0; i < 4; i++)\r\n {\r\n const size = sealDatas[i].size.toString();\r\n const { sealColor: color = \"\" } = sealDatas[i];\r\n let derv = sealCurves[i].GetFirstDeriv(0).normalize();\r\n if (isParallelTo(derv, XAxis, 1e-4))\r\n {\r\n if (derv.x * dir > 0)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.DownSealed] = size;\r\n br.BoardProcessOption.sealColorDown = color;\r\n }\r\n else\r\n {\r\n br.BoardProcessOption[EBoardKeyList.UpSealed] = size;\r\n br.BoardProcessOption.sealColorUp = color;\r\n }\r\n }\r\n else\r\n {\r\n if (derv.y * dir > 0)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.RightSealed] = size;\r\n br.BoardProcessOption.sealColorRight = color;\r\n }\r\n else\r\n {\r\n br.BoardProcessOption[EBoardKeyList.LeftSealed] = size;\r\n br.BoardProcessOption.sealColorLeft = color;\r\n }\r\n }\r\n }\r\n }\r\n else\r\n {\r\n if (sealCurves.length === 0)\r\n return;\r\n let [left, right, top, bottom] = ParseEdgeSealDir(sealCurves);\r\n br.BoardProcessOption[EBoardKeyList.LeftSealed] = sealDatas[left].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.RightSealed] = sealDatas[right].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.UpSealed] = sealDatas[top].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.DownSealed] = sealDatas[bottom].size.toString();\r\n\r\n br.BoardProcessOption.sealColorLeft = sealDatas[left].sealColor ?? \"\";\r\n br.BoardProcessOption.sealColorRight = sealDatas[right].sealColor ?? \"\";\r\n br.BoardProcessOption.sealColorUp = sealDatas[top].sealColor ?? \"\";\r\n br.BoardProcessOption.sealColorDown = sealDatas[bottom].sealColor ?? \"\";\r\n }\r\n}\r\n\r\nexport function SetBoardReservedEdgeData(br: Board, sealDatas: IHighReservedEdgeItem[], sealCurves?: Curve[], brContourCurve?: ExtrudeContourCurve)\r\n{\r\n let dir = Math.sign((brContourCurve ?? br.ContourCurve).Area2);\r\n sealCurves = sealCurves ?? GetBoardSealingCurves(br);\r\n\r\n if (br.IsRect && sealCurves.length === 4)\r\n {\r\n for (let i = 0; i < 4; i++)\r\n {\r\n let derv = sealCurves[i].GetFirstDeriv(0).normalize();\r\n if (isParallelTo(derv, XAxis, 1e-4))\r\n {\r\n if (derv.x * dir > 0)\r\n br.BoardProcessOption.reservedEdgeDown = sealDatas[i].size.toString();\r\n else\r\n br.BoardProcessOption.reservedEdgeUp = sealDatas[i].size.toString();\r\n }\r\n else\r\n {\r\n if (derv.y * dir > 0)\r\n br.BoardProcessOption.reservedEdgeRight = sealDatas[i].size.toString();\r\n else\r\n br.BoardProcessOption.reservedEdgeLeft = sealDatas[i].size.toString();\r\n }\r\n }\r\n }\r\n else\r\n {\r\n if (sealCurves.length === 0)\r\n return;\r\n let [left, right, top, bottom] = ParseEdgeSealDir(sealCurves);\r\n br.BoardProcessOption.reservedEdgeLeft = sealDatas[left].size.toString();\r\n br.BoardProcessOption.reservedEdgeRight = sealDatas[right].size.toString();\r\n br.BoardProcessOption.reservedEdgeUp = sealDatas[top].size.toString();\r\n br.BoardProcessOption.reservedEdgeDown = sealDatas[bottom].size.toString();\r\n }\r\n}\r\n\r\nexport function SetBoardEdgeRemarkData(br: Board, remarkDatas: IHighEdgeRemarkItem[], sealCurves?: Curve[], brContourCurve?: ExtrudeContourCurve)\r\n{\r\n let dir = Math.sign((brContourCurve ?? br.ContourCurve).Area2);\r\n sealCurves = sealCurves ?? GetBoardSealingCurves(br);\r\n\r\n const opt = br.BoardProcessOption;\r\n if (br.IsRect && sealCurves.length === 4)\r\n {\r\n for (let i = 0; i < 4; i++)\r\n {\r\n let derv = sealCurves[i].GetFirstDeriv(0).normalize();\r\n if (isParallelTo(derv, XAxis, 1e-4))\r\n {\r\n if (derv.x * dir > 0)\r\n opt.edgeRemarkDown = remarkDatas[i].description;\r\n else\r\n opt.edgeRemarkUp = remarkDatas[i].description;\r\n }\r\n else\r\n {\r\n if (derv.y * dir > 0)\r\n opt.edgeRemarkRight = remarkDatas[i].description;\r\n else\r\n opt.edgeRemarkLeft = remarkDatas[i].description;\r\n }\r\n }\r\n }\r\n else\r\n {\r\n if (sealCurves.length === 0)\r\n return;\r\n let [left, right, top, bottom] = ParseEdgeSealDir(sealCurves);\r\n opt.edgeRemarkLeft = remarkDatas[left].description;\r\n opt.edgeRemarkRight = remarkDatas[right].description;\r\n opt.edgeRemarkUp = remarkDatas[top].description;\r\n opt.edgeRemarkDown = remarkDatas[bottom].description;\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../../Common/ArrayExt\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { ExtrudeSolid } from \"../../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { AsVector2, equaln } from \"../../Geometry/GeUtils\";\r\nimport { GetBoardSealingCurves, SubsectionCurvesOfHightSeal } from \"../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { FixIndex } from \"../../Nest/Common/Util\";\r\nimport { SplitPolyline } from \"./SplitPolyline\";\r\n\r\n//侧面造型分裂\r\nexport class SplitBoardSideModelUtil\r\n{\r\n //备份原始二维刀路在世界坐标系中\r\n private OrgBoardOCS: Matrix4 = new Matrix4();\r\n private CacheSideModel: Map = new Map();\r\n private OldSealCurves: Curve[] = [];\r\n\r\n constructor(br: Board)\r\n {\r\n this.Init(br);\r\n }\r\n\r\n Init(br: Board, isSpecialShape = false)\r\n {\r\n this.OrgBoardOCS = br.OCS;\r\n let curves = GetBoardSealingCurves(br);\r\n\r\n //取消异型操作会提前令isSpecialShape = false\r\n if (isSpecialShape)\r\n SubsectionCurvesOfHightSeal(curves);\r\n\r\n let oldSealCurves: Curve[] = [];\r\n\r\n for (let c of curves)\r\n if (c instanceof Polyline)\r\n oldSealCurves.push(...c.Explode());\r\n else\r\n oldSealCurves.push(c);\r\n\r\n this.OldSealCurves = oldSealCurves;\r\n\r\n const sideModelMap: Map = new Map();\r\n\r\n for (let [num, soilds] of br.SideModelingMap)\r\n sideModelMap.set(num, soilds);\r\n\r\n this.CacheSideModel = sideModelMap;\r\n }\r\n\r\n CheckSideModel(): boolean\r\n {\r\n let maxSideIndex = 0;\r\n for (let [num, soilds] of this.CacheSideModel)\r\n maxSideIndex = Math.max(num, maxSideIndex);\r\n\r\n return this.OldSealCurves.length >= maxSideIndex;\r\n }\r\n\r\n SetBoardSideModel(br: Board)\r\n {\r\n if (!this.CacheSideModel.size) return;\r\n\r\n if (this.CheckSideModel())\r\n {\r\n this.SpiltSideModelOfBrContour(br);\r\n }\r\n }\r\n\r\n //新轮廓切割原始轮廓\r\n SpiltSideModelOfBrContour(br: Board)\r\n {\r\n let curves = GetBoardSealingCurves(br);\r\n\r\n let newSealCurves: Curve[] = [];\r\n\r\n for (let c of curves)\r\n if (c instanceof Polyline)\r\n newSealCurves.push(...c.Explode());\r\n else\r\n newSealCurves.push(c);\r\n\r\n let sideMadelMap: Map = new Map();\r\n for (let [nmu, soilds] of this.CacheSideModel)\r\n {\r\n if (soilds?.length)\r\n {\r\n let oldCu = this.OldSealCurves[nmu]?.Clone();\r\n if (!oldCu) continue;\r\n\r\n oldCu.ApplyMatrix(this.OrgBoardOCS);\r\n for (let i = 0; i < newSealCurves.length; i++)\r\n {\r\n if (newSealCurves[i] instanceof Arc) continue;\r\n let newCu = newSealCurves[i].Clone().ApplyMatrix(br.OCSNoClone) as Line;\r\n let p = newCu.GetPointAtParam(newCu.EndParam * 0.5);\r\n\r\n let spliteEnts: ExtrudeSolid[] = [];\r\n\r\n if (oldCu.PtOnCurve(p))\r\n {\r\n let startX = oldCu.GetDistAtPoint(newCu.StartPoint);\r\n let endX = oldCu.GetDistAtPoint(newCu.EndPoint);\r\n\r\n if (startX > endX)\r\n {\r\n let backStart = startX;\r\n startX = endX;\r\n endX = backStart;\r\n }\r\n\r\n let box = new Box3Ext(new Vector3(startX), new Vector3(endX, br.Thickness));\r\n\r\n let knifePls: Polyline[] = [];\r\n\r\n for (let soild of soilds)\r\n {\r\n if (soild.Thickness <= 0) continue;\r\n\r\n let sCon = soild.ContourCurve.Clone().ApplyMatrix(soild.OCSNoClone) as Polyline;\r\n let thickness = soild.Thickness;\r\n\r\n let newNeighborCus: Curve[] = [];\r\n newNeighborCus.push(newSealCurves[FixIndex(i - 1, newSealCurves)].Clone().ApplyMatrix(br.OCSNoClone));\r\n newNeighborCus.push(newSealCurves[FixIndex(i + 1, newSealCurves)].Clone().ApplyMatrix(br.OCSNoClone));\r\n\r\n const offsetCus = newCu.GetOffsetCurves(-thickness);\r\n const xPtList: number[] = [startX, endX];\r\n\r\n for (let cu of offsetCus)\r\n {\r\n for (let nbCu of newNeighborCus)\r\n {\r\n const intersectPts = cu.IntersectWith(nbCu, IntersectOption.ExtendThis);\r\n for (let pt of intersectPts)\r\n {\r\n let { closestPt } = newCu.GetClosestAtPoint(pt, true);\r\n let ptX = oldCu.GetDistAtPoint(closestPt);\r\n xPtList.push(ptX);\r\n }\r\n }\r\n }\r\n\r\n xPtList.sort((a, b) => a - b);\r\n\r\n for (let x of [xPtList[0], arrayLast(xPtList)])\r\n knifePls.push(new Polyline([{ pt: AsVector2({ x, y: 0 }), bul: 0 }, { pt: AsVector2({ x, y: 1 }), bul: 0 }]));\r\n\r\n let splitSideModelCons = SplitPolyline(sCon, knifePls);\r\n\r\n if (!splitSideModelCons.length)\r\n splitSideModelCons.push(sCon);\r\n\r\n for (let j = 0; j < splitSideModelCons.length; j++)\r\n {\r\n let intersectBox = box.clone().intersect(splitSideModelCons[j].BoundingBox);\r\n if (box.intersectsBox(splitSideModelCons[j].BoundingBox, 1) && !equaln(intersectBox.max.x, intersectBox.min.x))\r\n {\r\n let soildClone = soild.Clone();\r\n soildClone.ContourCurve = splitSideModelCons[j].ApplyMatrix(soild.OCSInv);\r\n soildClone.GrooveCheckAllAutoSplit();\r\n soildClone.ApplyMatrix(new Matrix4().setPosition(-startX, 0, 0));\r\n spliteEnts.push(soildClone);\r\n }\r\n }\r\n }\r\n\r\n if (spliteEnts.length)\r\n sideMadelMap.set(i, spliteEnts);\r\n }\r\n }\r\n }\r\n }\r\n\r\n br.SideModelingMap = sideMadelMap;\r\n }\r\n\r\n //修改板厚度时裁剪侧面造型\r\n SpiltSideModelOfBrThickness(br: Board, thickness: number)\r\n {\r\n this.Init(br);\r\n\r\n let sideMadelMap: Map = new Map();\r\n for (let [nmu, soilds] of this.CacheSideModel)\r\n {\r\n if (soilds?.length)\r\n {\r\n let cu = this.OldSealCurves[nmu]?.Clone();\r\n if (!cu) continue;\r\n cu.ApplyMatrix(this.OrgBoardOCS);\r\n\r\n let spliteEnts: ExtrudeSolid[] = [];\r\n let knifePls: Polyline[] = [];\r\n let box = new Box3Ext(new Vector3(), new Vector3(cu.Length, thickness));\r\n\r\n for (let soild of soilds)\r\n {\r\n if (soild.Thickness <= 0) continue;\r\n\r\n let sCon = soild.ContourCurve.Clone().ApplyMatrix(soild.OCSNoClone) as Polyline;\r\n\r\n knifePls.push(new Polyline([{ pt: AsVector2({ x: 0, y: 0 }), bul: 0 }, { pt: AsVector2({ x: 1, y: 0 }), bul: 0 }]));\r\n knifePls.push(new Polyline([{ pt: AsVector2({ x: 0, y: thickness }), bul: 0 }, { pt: AsVector2({ x: 1, y: thickness }), bul: 0 }]));\r\n\r\n let splitSideModelCons = SplitPolyline(sCon, knifePls);\r\n\r\n if (!splitSideModelCons.length)\r\n splitSideModelCons.push(sCon);\r\n\r\n for (let con of splitSideModelCons)\r\n {\r\n let intersectBox = box.clone().intersect(con.BoundingBox);\r\n if (box.intersectsBox(con.BoundingBox, 1) && !equaln(intersectBox.max.y, intersectBox.min.y))\r\n {\r\n let soildClone = soild.Clone();\r\n soildClone.ContourCurve = con.ApplyMatrix(soild.OCSInv);\r\n soildClone.GrooveCheckAllAutoSplit();\r\n spliteEnts.push(soildClone);\r\n }\r\n }\r\n }\r\n\r\n if (spliteEnts.length)\r\n sideMadelMap.set(nmu, spliteEnts);\r\n }\r\n }\r\n\r\n br.SideModelingMap = sideMadelMap;\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.GetFirstDeriv(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","import { Vector3 } from \"three\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { CADFiler } from \"../../DatabaseServices/CADFiler\";\r\nimport { I2DModeling, I3DModeling, IPathItem } from \"../../DatabaseServices/Entity/Board\";\r\nimport { ExtrudeSolid } from \"../../DatabaseServices/Entity/Extrude\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { BoardProcessOption } from \"../../UI/Store/OptionInterface/BoardProcessOption\";\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 file.Write(n.sealColor);\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 let sealColor = \"\";\r\n if (ver > 23)\r\n {\r\n sealColor = file.Read();\r\n }\r\n\r\n if (ver < 4)\r\n {\r\n file.Read();\r\n }\r\n\r\n processData[EBoardKeyList.HighSealed].push({ size, sealColor });\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 file.Write(item.depthExpr);\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 let depthExpr: string;\r\n if (ver > 19)\r\n {\r\n depthExpr = file.Read();\r\n }\r\n else\r\n {\r\n depthExpr = depth.toString();\r\n }\r\n m.items.push({\r\n depth, offset, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName }, depthExpr\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\r\nexport function SerializeBoardSideModeingData(file: CADFiler, sideModelingMap: Map)\r\n{\r\n file.Write(sideModelingMap.size);\r\n\r\n for (let [index, sideModelingList] of sideModelingMap)\r\n {\r\n file.Write(index);\r\n file.Write(sideModelingList.length);\r\n\r\n for (let data of sideModelingList)\r\n file.WriteObject(data);\r\n }\r\n}\r\n\r\nexport function DeserializationBoardSideModeingData(file: CADFiler, sideModelingMap: Map)\r\n{\r\n sideModelingMap.clear();\r\n\r\n const count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let index = file.Read();\r\n let listCount = file.Read();\r\n let sideModelingList: ExtrudeSolid[] = [];\r\n\r\n for (let j = 0; j < listCount; j++)\r\n {\r\n let obj = file.ReadObject() as ExtrudeSolid;\r\n sideModelingList.push(obj);\r\n }\r\n\r\n sideModelingMap.set(index, sideModelingList);\r\n }\r\n}\r\n","import { Task } from \"../../Common/ThreadPool/Task\";\r\n\r\nexport type CSGTask = Pick;\r\n\r\ntype CSGSubtractFunction = (task: CSGTask) => void;\r\nexport const _CSGSubtractInjectInteractionFunctions: CSGSubtractFunction[] = [];\r\nexport function AddCSGSubtractTask(task: CSGTask)\r\n{\r\n for (let f of _CSGSubtractInjectInteractionFunctions)\r\n f(task);\r\n}\r\n\r\nexport type TaskKey = Pick;\r\ntype TerminateCSGTaskFunction = (task: TaskKey) => void;\r\nexport const _TerminateTaskInjectInteractionFunctions: TerminateCSGTaskFunction[] = [];\r\nexport function TerminateCSGTask(task: TaskKey)\r\n{\r\n for (let f of _TerminateTaskInjectInteractionFunctions)\r\n f(task);\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { BoardOpenDir, LinesType } from \"../DatabaseServices/Entity/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 //开门方向纹路\r\n static LinesOpenDirPts(len: number, width: number, openDir: BoardOpenDir)\r\n {\r\n if (openDir === BoardOpenDir.Right)\r\n {\r\n return [\r\n new Vector3(-width / 2, -len / 2), new Vector3(width / 2, 0),\r\n new Vector3(width / 2, 0), new Vector3(-width / 2, len / 2)\r\n ];\r\n }\r\n else if (openDir === BoardOpenDir.Left)\r\n {\r\n return [\r\n new Vector3(width / 2, -len / 2), new Vector3(-width / 2, 0),\r\n new Vector3(-width / 2, 0), new Vector3(width / 2, len / 2)\r\n ];\r\n }\r\n else if (openDir === BoardOpenDir.Up)\r\n {\r\n return [\r\n new Vector3(-width / 2, -len / 2), new Vector3(0, len / 2),\r\n new Vector3(0, len / 2), new Vector3(width / 2, -len / 2)\r\n ];\r\n }\r\n else if (openDir === BoardOpenDir.Down)\r\n {\r\n return [\r\n new Vector3(-width / 2, len / 2), new Vector3(0, -len / 2),\r\n new Vector3(0, -len / 2), new Vector3(width / 2, len / 2)\r\n ];\r\n }\r\n }\r\n\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, LineSegments, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { equaln, equalv3 } from '../../Geometry/GeUtils';\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Curve } from \"../Entity/Curve\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { Shape2 } from \"../Shape2\";\r\n\r\n\r\n/**\r\n * 封边视图下和修改封边时显示的实体\r\n */\r\nexport class SealSolid extends Entity\r\n{\r\n protected OnlyRenderType: boolean = true;\r\n protected _PathCurve: Curve;\r\n private _SealWidth: number;\r\n constructor(pathCurve: Curve, sealWidth: number)\r\n {\r\n super();\r\n this._PathCurve = pathCurve;\r\n this._SealWidth = sealWidth;\r\n\r\n if (this._PathCurve)\r\n {\r\n let path = this._PathCurve;\r\n\r\n this.OCS = path.OCSNoClone;\r\n this._SpaceOCS.copy(path.OCSNoClone);\r\n\r\n let ocsInv = this.OCSInv;\r\n this._PathCurve.ApplyMatrix(ocsInv);\r\n }\r\n }\r\n\r\n private _MeshGeometry: BufferGeometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n let z0 = 0;\r\n let z1 = this._SealWidth;\r\n let coords = [];\r\n let pts = (this._PathCurve.Shape as Shape2).getPoints();\r\n\r\n for (let i = 0; i < pts.length - 1; i++)\r\n {\r\n let p = pts[i];\r\n let nextp = pts[FixIndex(i + 1, pts)];\r\n coords.push(\r\n p.x, p.y, z0,\r\n nextp.x, nextp.y, z1,\r\n nextp.x, nextp.y, z0,\r\n\r\n p.x, p.y, z0,\r\n p.x, p.y, z1,\r\n nextp.x, nextp.y, z1\r\n );\r\n }\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n edgeGeo.computeVertexNormals();\r\n this._MeshGeometry = edgeGeo;\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: BufferGeometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n let z0 = 0;\r\n let z1 = this._SealWidth;\r\n let coords: number[] = [];\r\n const pl = this._PathCurve;\r\n\r\n let pts = (pl.Shape as Shape2).getPoints();\r\n\r\n for (let i = 0; i < pts.length - 1; i++)\r\n {\r\n let p = pts[i];\r\n let nextp = pts[FixIndex(i + 1, pts)];\r\n coords.push(p.x, p.y, z0, nextp.x, nextp.y, z0);\r\n coords.push(p.x, p.y, z1, nextp.x, nextp.y, z1);\r\n if (p[\"_mask_\"])\r\n coords.push(p.x, p.y, z0, p.x, p.y, z1);\r\n }\r\n\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n edgeGeo.computeVertexNormals();\r\n this._EdgeGeometry = edgeGeo;\r\n\r\n return this._EdgeGeometry;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType): Object3D\r\n {\r\n const mtl = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex);\r\n mtl.transparent = true;\r\n mtl.opacity = 0.3;\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, mtl),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex))\r\n );\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 ClearDraw(): this\r\n {\r\n this.UpdateDrawGeometry();\r\n return super.ClearDraw();\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n const mtl = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex);\r\n mtl.transparent = true;\r\n mtl.opacity = 0.3;\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, mtl),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex))\r\n );\r\n }\r\n\r\n /**\r\n * 当实体需要被更新时,更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n const mtl = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex);\r\n mtl.transparent = true;\r\n mtl.opacity = 0.3;\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, mtl),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex)),\r\n );\r\n }\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}\r\n","export enum FontStyleKeyCode\r\n{\r\n Height = 1,\r\n WidthFactor = 2,\r\n FontType = 3\r\n}\r\n","import { FontType } from \"../../Add-on/TextStyle/FontStyleInterface\";\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 FontStyleRecord extends SymbolTableRecord\r\n{\r\n /** 字体高度 1 */\r\n @AutoRecord Height: number = 60;//1\r\n\r\n /** 宽度因子 2 字符串间距 */\r\n @AutoRecord WidthFactor: number = 1;\r\n\r\n /** 样式类型 3 */\r\n @AutoRecord FontType: FontType = FontType.YaHei;\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n override ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n\r\n this.Height = file.Read();\r\n this.WidthFactor = file.Read();\r\n this.FontType = file.Read();\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.Height);\r\n file.Write(this.WidthFactor);\r\n file.Write(this.FontType);\r\n }\r\n //#endregion\r\n}\r\n","import { BufferGeometry, Geometry, Matrix3, Matrix4, Mesh, Object3D, ShapeGeometry, Vector3 } from 'three';\r\nimport { FontType } from '../../Add-on/TextStyle/FontStyleInterface';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { GetBox, MoveMatrix, XAxis, XAxisN, YAxis, YAxisN, ZAxisN } from '../../Geometry/GeUtils';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Entity } from '../Entity/Entity';\r\nimport { FontStyleKeyCode } from '../FontStyle/FontStyleKeyCodeEnum';\r\nimport { FontStyleRecord } from '../FontStyle/FontsStyleRecord';\r\nimport { ObjectId } from '../ObjectId';\r\n\r\nexport const TEXT_HEIGHT_SCALE = 1.35;\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\n// 多层lineHeight比例计算方式:\r\n// src\\DatabaseServices\\Text\\FontExt.ts createPaths函数中\r\n// textHeight * (textType.boundingBox.yMax - textType.boundingBox.yMin + textType.underlineThickness) / textType.resolution\r\nconst LineHeightScaleMap =\r\n{\r\n [FontType.YaHei]: 1.875, // (1439+355+81) / 1000\r\n [FontType.SongTi]: 1.834, // (1369+437+28) / 1000\r\n [FontType.KaiTi]: 1.514, // (1194 +255 + 65) / 1000\r\n [FontType.FangSong]: 1.487, // (1194 +228 + 65) / 1000\r\n [FontType.LiShu]: 1.58, // (1194 +315 + 71) / 1000\r\n [FontType.HeiTi]: 1.476, // (1194 +217 +65 ) / 1000\r\n [FontType.HuaWenLiShu]: 1.499, // (1111 +360 +28 ) / 1000\r\n [FontType.HuaWenXingKai]: 1.543, // (1114 +401 +28 ) / 1000\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 protected _FontStyle: ObjectId;//字体样式\r\n protected _FontStyleOverride: Map = new Map;//字体样式替代\r\n protected _RoomName: string = \"\";\r\n protected _CabinetName: string = \"\";\r\n private _Align: TextAligen = TextAligen.LeftDown;\r\n IsDoubleMesh = false;//文字使用双面网格体\r\n IsFsText = false;//文字写在俯视图上\r\n\r\n constructor(pos?: Vector3,\r\n private _TextString: string = \"\",\r\n private _TextRotation: number = 0,\r\n fontName?: FontType,\r\n widthFactor?: number)\r\n {\r\n super();\r\n pos && this._Matrix.setPosition(pos);\r\n\r\n this.FontStyle = HostApplicationServices.CurrentFontStyle;\r\n\r\n if (fontName)\r\n this.FontName = fontName;\r\n\r\n if (widthFactor)\r\n this.WidthFactor = widthFactor;\r\n\r\n }\r\n\r\n get RoomName() { return this._RoomName; }\r\n set RoomName(value: string)\r\n {\r\n if (value === this._RoomName) return;\r\n this.WriteAllObjectRecord();\r\n this._RoomName = value;\r\n }\r\n\r\n get CabinetName() { return this._CabinetName; }\r\n set CabinetName(value: string)\r\n {\r\n if (value === this._CabinetName) return;\r\n this.WriteAllObjectRecord();\r\n this._CabinetName = value;\r\n }\r\n\r\n get TextRotation()\r\n {\r\n return this._TextRotation;\r\n }\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\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 /**设置字体样式 */\r\n set FontStyle(styleId: ObjectId)\r\n {\r\n if (styleId === this._FontStyle) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n this._FontStyle = styleId;\r\n\r\n this.Update();\r\n }\r\n\r\n /**大概多行文字的高度 */\r\n get MultiHeight()\r\n {\r\n // this.Height 为用户初始化设置的高度。\r\n // 但是this.Height和实际渲染高度不一致。所以使用高度乘以比例scale,这样行高会精确一点。\r\n // 如果需要精确的,可以绘制完后,再获取实际高度。\r\n const scale = LineHeightScaleMap[this.FontName] || LineHeightScaleMap[FontType.SongTi];\r\n if (this._TextString.includes(\"\\n\"))\r\n {\r\n let texts = this._TextString.split(\"\\n\");\r\n const scale = LineHeightScaleMap[this.FontName] || LineHeightScaleMap[FontType.SongTi];\r\n return texts.length * this.Height * scale;\r\n };\r\n return this.Height * scale;\r\n }\r\n\r\n get FontStyle() { return this._FontStyle; }\r\n\r\n //字体样式名称\r\n get FontName()\r\n {\r\n return this.GetFontStyleValue(FontStyleKeyCode.FontType);\r\n }\r\n set FontName(fontName: FontType)\r\n {\r\n this.SetFontStyleOverrideValue(FontStyleKeyCode.FontType, fontName);\r\n }\r\n\r\n //字体尺寸大小\r\n get Height(): number\r\n {\r\n return this.GetFontStyleValue(FontStyleKeyCode.Height);\r\n }\r\n set Height(value: number)\r\n {\r\n this.SetFontStyleOverrideValue(FontStyleKeyCode.Height, value);\r\n }\r\n\r\n //字体间距\r\n get WidthFactor(): number\r\n {\r\n return this.GetFontStyleValue(FontStyleKeyCode.WidthFactor);\r\n }\r\n set WidthFactor(value: number)\r\n {\r\n this.SetFontStyleOverrideValue(FontStyleKeyCode.WidthFactor, value);\r\n }\r\n\r\n get FontStyleOverride()\r\n {\r\n return this._FontStyleOverride;\r\n }\r\n\r\n GetFontStyleOverrideValue(key: FontStyleKeyCode): any { return this._FontStyleOverride.get(key); }\r\n\r\n GetFontStyleValue(key: FontStyleKeyCode)\r\n {\r\n let value = this.GetFontStyleOverrideValue(key);\r\n if (value !== undefined) return value;\r\n\r\n if (this._FontStyle?.Object)\r\n return this._FontStyle.Object[FontStyleKeyCode[key]];\r\n\r\n if (HostApplicationServices.CurrentFontStyle && HostApplicationServices.CurrentFontStyle.Object instanceof FontStyleRecord)\r\n return HostApplicationServices.CurrentFontStyle.Object[FontStyleKeyCode[key]];\r\n }\r\n\r\n //设置覆盖的样式\r\n SetFontStyleOverrideValue(key: FontStyleKeyCode, value: any)\r\n {\r\n if (this.GetFontStyleOverrideValue(key) === value) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let oldV = this.GetFontStyleValue(key);\r\n\r\n this._FontStyleOverride.set(key, value);\r\n\r\n if (oldV !== value)\r\n this.Update();\r\n }\r\n\r\n ClearFontStyleOverride()\r\n {\r\n if (this._FontStyleOverride.size === 0) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._FontStyleOverride.clear();\r\n this.Update();\r\n }\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 const textStr = this._TextString.split(\"\\n\");\r\n for (const txt of textStr)\r\n {\r\n let cTemp = 0;\r\n for (let i = 0; i < txt.length; i++)\r\n {\r\n const code = txt.charCodeAt(i);\r\n if (code > 255)\r\n cTemp++;\r\n else\r\n cTemp += 0.5;\r\n }\r\n count = Math.max(count, cTemp);\r\n }\r\n\r\n return count * this.Height * TEXT_HEIGHT_SCALE * this.WidthFactor;\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(new Matrix4().makeRotationZ(this.TextRotation)).applyMatrix4((this.OCSNoClone));\r\n }\r\n\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let width = this.Width;\r\n let height = this.MultiHeight;\r\n\r\n let obj = this._CacheDrawObject.get(RenderType.Wireframe);\r\n if (obj && obj.children.length === 1)\r\n {\r\n let geo = (obj.children[0] as Mesh).geometry as BufferGeometry;\r\n if (geo)\r\n {\r\n if (!geo.boundingBox)\r\n geo.computeBoundingBox();\r\n\r\n width = geo.boundingBox.max.x - geo.boundingBox.min.x;\r\n height = geo.boundingBox.max.y - geo.boundingBox.min.y;\r\n }\r\n }\r\n\r\n let w = Math.max(Math.abs(width / 2), 1);\r\n let h = Math.max(Math.abs(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 > 0)\r\n {\r\n let [mesh, mesh2] = obj.children as [Mesh, 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 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 if (mesh2 && this.IsDoubleMesh)\r\n {\r\n //左右视图时应该这样,俯视图是X,-Y,-Z(y+=(xxx)\r\n if (this.IsFsText)\r\n {\r\n p.y += (box.max.y - box.min.y);\r\n mesh2.matrix = new Matrix4().makeBasis(XAxis, YAxisN, ZAxisN).premultiply(\r\n new Matrix4().makeRotationZ(this.TextRotation).multiply(\r\n new Matrix4().setPosition(p)\r\n )\r\n );\r\n }\r\n else\r\n {\r\n p.x += (box.max.x - box.min.x);\r\n mesh2.matrix = new Matrix4().makeBasis(XAxisN, YAxis, ZAxisN).premultiply(\r\n new Matrix4().makeRotationZ(this.TextRotation).multiply(\r\n new Matrix4().setPosition(p)\r\n )\r\n );\r\n }\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.DrawColorIndex;\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.DrawColorIndex;\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 GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n if (snapMode === ObjectSnapMode.End)\r\n {\r\n let box = this.BoundingBoxInOCS;\r\n let p2 = new Vector3(box.min.x, box.max.y);\r\n let p3 = new Vector3(box.max.x, box.min.y);\r\n let pts = [box.min, p2, p3, box.max];\r\n for (let p of pts)\r\n p.applyMatrix4(this.OCSNoClone);\r\n return pts;\r\n }\r\n return [];\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 protected ReadFontStyle(file: CADFiler)\r\n {\r\n this._FontStyleOverride.clear();\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let k = file.Read();\r\n let v = file.Read();\r\n this._FontStyleOverride.set(k, v);\r\n }\r\n }\r\n protected WriteFontStyle(file: CADFiler)\r\n {\r\n file.Write(this._FontStyleOverride.size);\r\n for (let [k, v] of this._FontStyleOverride)\r\n {\r\n file.Write(k);\r\n file.Write(v);\r\n }\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._TextString = file.Read();\r\n\r\n if (ver < 2)\r\n this.Height = file.Read();\r\n\r\n this.TextRotation = file.Read();\r\n\r\n if (ver < 2)\r\n this.FontName = file.Read();\r\n\r\n this._Align = file.Read();\r\n\r\n //从版本2开始使用FontStyle\r\n if (ver >= 2)\r\n {\r\n this.ReadFontStyle(file);\r\n this._FontStyle = file.ReadHardObjectId() ?? HostApplicationServices.CurrentFontStyle;\r\n }\r\n\r\n if (ver > 2)\r\n {\r\n this._RoomName = file.Read();\r\n this._CabinetName = file.Read();\r\n }\r\n }\r\n\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);//ver\r\n\r\n file.Write(this._TextString);\r\n file.Write(this.TextRotation);\r\n file.Write(this._Align);\r\n\r\n this.WriteFontStyle(file);\r\n file.WriteHardObjectId(this._FontStyle);\r\n\r\n file.Write(this._RoomName);\r\n file.Write(this._CabinetName);\r\n }\r\n //#endregion-----------------------------File End-----------------------------\r\n}\r\n\r\n\r\nexport const DbText = Text;\r\n","import Geom3 from '@jscad/modeling/src/geometries/geom3/type';\r\nimport { BufferAttribute, BufferGeometry, Euler, FrontSide, Frustum, Geometry, LineSegments, Matrix3, Matrix4, Mesh, Object3D, ShapeBufferGeometry, Line as TLine, UVGenerator, Vector3 } from 'three';\r\nimport { ArcBoardBuild } from '../../Add-on/ArcBoard/ArcBoardBuild';\r\nimport { ArcBoardOptions, ParseBoardArcFeed, defultArcBoardOption } from '../../Add-on/ArcBoard/ArcBoardFeeding';\r\nimport { CurveManager } from '../../Add-on/BoardCutting/LinearCuttingForSweep';\r\nimport { SplitBoardSideModelUtil } from '../../Add-on/BoardCutting/SplitBoardSideModel';\r\nimport { Board2Regions } from '../../Add-on/BoardEditor/Board2Regions';\r\nimport { DeserializationBoard2DModeingData, DeserializationBoard3DModeingData, DeserializationBoardSideModeingData, SerializeBoard2DModeingData, SerializeBoard3DModeingData, SerializeBoardSideModeingData, deserializationBoardData, serializeBoardData } from '../../Add-on/BoardEditor/SerializeBoardData';\r\nimport { DrillType, FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { CyHoleInBoard, IBoardRectHoleType, ParseBoardRectHoleType, SetBrHighHoleTypeFromRectHoleType } from '../../Add-on/DrawDrilling/HoleUtils';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { AddEntityDrawObject } from '../../Common/AddEntityDrawObject';\r\nimport { arrayLast, arrayPushArray, arrayRemoveDuplicateBySort, arrayRemoveIf, arraySortByNumber, arraySum } from '../../Common/ArrayExt';\r\nimport { EBoardKeyList } from '../../Common/BoardKeyList';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { MakeMirrorMtx, TransformVector, tempMatrix1 } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { FixedNotZero } from '../../Common/Utils';\r\nimport { safeEval } from '../../Common/eval';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { SelectPick } from '../../Editor/SelectPick';\r\nimport { BoardSideModelCSGBuilder, GetSideCuFaceMtx } from '../../Geometry/Board2DModelCSG/BoardSideModelCSGBuilder';\r\nimport { boardUVGenerator, boardUVGenerator2 } from '../../Geometry/BoardUVGenerator';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { TerminateCSGTask } from '../../Geometry/CSGSubtract/CSGSubtractTaskManager';\r\nimport { AsVector2, AsVector3, IdentityMtx4, UpdateBoundingSphere, XAxis, XAxisN, YAxis, YAxisN, ZAxis, ZeroVec, equaln, equalv2, equalv3 } from '../../Geometry/GeUtils';\r\nimport { PointShapeUtils } from '../../Geometry/PointShapeUtils';\r\nimport { GetBoardContour, GetBoardHighReservedEdge, GetBoardHighSeal, GetBoardSealingCurves, GetHighBoardEdgeRemark, SetBoardEdgeRemarkData, SetBoardReservedEdgeData, SetBoardTopDownLeftRightSealData } from '../../GraphicsSystem/CalcEdgeSealing';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { BoardProcessOption } from \"../../UI/Store/OptionInterface/BoardProcessOption\";\r\nimport { CylinderHole } from '../3DSolid/CylinderHole';\r\nimport { ExtrudeHole } from '../3DSolid/ExtrudeHole';\r\nimport { SealSolid } from '../3DSolid/SealSolid';\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 { HistorycRecord } from '../HistorycRecord';\r\nimport { ObjectId } from '../ObjectId';\r\nimport { Shape } from '../Shape';\r\nimport { Text as DbText, TextAligen } from \"../Text/Text\";\r\nimport { Arc } from './Arc';\r\nimport { ArcBoardFeedProcess } from './ArcBoardType';\r\nimport { BoardOpenDir, BoardType, ComposingType, LinesType } from './BoardInterface';\r\nimport { Circle } from './Circle';\r\nimport { Curve } from './Curve';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Entity } from './Entity';\r\nimport { ExtrudeContourCurve, ExtrudeSolid } from './Extrude';\r\nimport { Line } from './Line';\r\nimport { Polyline } from './Polyline';\r\n\r\n//排钻配置名是合法的 可用的\r\nfunction IsValidDriName(name: string): boolean\r\n{\r\n return name === DrillType.None || 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 depthExpr: string;\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\nexport interface ObjectIdArr extends Array\r\n{\r\n Name?: string;\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 protected HasBigHoleFaceRenderType = 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 private _OpenDir: BoardOpenDir = BoardOpenDir.None;\r\n @AutoRecord RelativeHandle: ObjectId[] = [];\r\n private _IsChaiDan: boolean = true;\r\n private _2DModelingList: I2DModeling[] = [];\r\n private _3DModelingList: I3DModeling[] = [];\r\n //侧面造型\r\n private _SideModelingMap: Map = new Map();\r\n private _CustomNumber: number = null;//自定义编号\r\n private _DrillLock = false; //排钻独立锁\r\n private _DrillAssociationLock = new Set(); //排钻关联锁\r\n @AutoRecord AlignLineObject: ObjectId; //对纹组\r\n\r\n //放样路径 基于OPt X Z -Y 坐标系为基准的路径\r\n private _SweepPath: Polyline = undefined;\r\n private _SweepAngle: number = 0;\r\n /** 见光面 */\r\n private _SweepVisibleFace: FaceDirection = FaceDirection.Front;\r\n\r\n _SweepArcBoardBuild: ArcBoardBuild = undefined;//用于建模和计算的类 不保证其正确性(绘制更新可能存在延迟)\r\n //圆弧板每一段圆弧的槽配置\r\n private _ArcBoardOptions: Map = new Map();\r\n private _isDrawArcGroove: boolean = true;\r\n\r\n arcBoardFeedProcess: ArcBoardFeedProcess = ArcBoardFeedProcess.Slots; //圆弧板槽加工工艺\r\n\r\n //仅在渲染器中使用倒角\r\n protected bevelEnabled: boolean = true;\r\n\r\n //二维刀路 id -> polyline\r\n private _KnifePolylineMap: Map = new Map();\r\n\r\n private _jigSweepPath: Polyline; // 拖拽时见光面的SweepPath\r\n private _jigPath2WCSMtx: Matrix4; // 拖拽时路径转世界坐标系矩阵\r\n\r\n constructor()\r\n {\r\n super();\r\n this.InitBoardData();\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n if (this._SweepPath)\r\n return new Box3Ext().copy(this.MeshGeometry.boundingBox);\r\n return super.BoundingBoxInOCS;\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n if (this._SweepPath)\r\n {\r\n let geom = this.MeshGeometry;\r\n const position = geom.attributes.position;\r\n if (position)\r\n {\r\n let vec = new Vector3;\r\n let box = new Box3Ext;\r\n for (let i = 0, il = position.count; i < il; i++)\r\n {\r\n vec.fromBufferAttribute(position, i);\r\n vec.applyMatrix4(this.OCSNoClone);\r\n box.expandByPoint(vec);\r\n }\r\n return box;\r\n }\r\n }\r\n return super.BoundingBox;\r\n }\r\n\r\n get IsDrawArcGroove()\r\n {\r\n return this._isDrawArcGroove;\r\n }\r\n\r\n set IsDrawArcGroove(v: boolean)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._isDrawArcGroove = v;\r\n }\r\n\r\n /**\r\n * path 发生改变,更新圆弧配置\r\n * @param {{ key: number, arc: Arc; }[]} oldArcs 旧圆弧和对应的board options key\r\n * @param {Polyline} nPath 新路径(未进行起点偏移)\r\n * @return {*} {void}\r\n */\r\n private UpdateArcBoardOptionsByPath(oldArcs: { key: number, arc: Arc; }[], nPath: Polyline): void\r\n {\r\n if (oldArcs.length === 0) return;\r\n\r\n const nCurves = nPath.Explode();\r\n const newArcs: { key: number, arc: Arc; }[] = [];\r\n for (let i = 0; i < nCurves.length; i++)\r\n if (nCurves[i] instanceof Arc)\r\n newArcs.push({ key: i, arc: nCurves[i] as Arc });\r\n\r\n const newOpts = new Map();\r\n const oldOpts = this._ArcBoardOptions;\r\n newOpts.set(-1, oldOpts.get(-1));\r\n\r\n // 设置新圆弧对应的原始配置\r\n for (let i = 0; i < newArcs.length; i++)\r\n for (const item of oldArcs)\r\n {\r\n const oldArc = item.arc;\r\n const oldKey = item.key;\r\n const newArc = newArcs[i].arc;\r\n const newKey = newArcs[i].key;\r\n if (equalv3(newArc.StartPoint, oldArc.StartPoint, 1e-5) || equalv3(newArc.EndPoint, oldArc.EndPoint, 1e-5)) // 若圆弧的头或尾部位置相同,说明是同一段圆弧\r\n {\r\n newOpts.set(newKey, { ...oldOpts.get(oldKey), arcLength: parseFloat(FixedNotZero(newArc.Length, 5)) });\r\n break;\r\n }\r\n }\r\n\r\n // 曲线从头拉到尾部后面,或者从尾拉到头部前面\r\n if (newArcs.length === 1 && newOpts.size === 1)\r\n {\r\n let oldArcIndex = 0;// 第一个圆弧\r\n if (equalv3(newArcs[0].arc.StartPoint, arrayLast(oldArcs).arc.EndPoint, 1e-3)) // 从头拉伸到尾部后面,则新圆弧的起点和旧圆弧的尾点相等。\r\n oldArcIndex = oldArcs.length - 1; // 最后一个圆弧\r\n const oldKey = oldArcs[oldArcIndex].key;\r\n const newKey = newArcs[0].key;\r\n newOpts.set(newKey, { ...oldOpts.get(oldKey), arcLength: parseFloat(FixedNotZero(newArcs[0].arc.Length, 5)) });\r\n }\r\n\r\n this._ArcBoardOptions.clear();\r\n this._ArcBoardOptions = newOpts;\r\n }\r\n\r\n get ArcBoardOptions()\r\n {\r\n if (this._ArcBoardOptions.size > 0)\r\n return this._ArcBoardOptions;\r\n\r\n let cus = new ArcBoardBuild(this).ParseSweepCurves().SweepCurves1;\r\n\r\n //key=-1 为通用转角槽配置\r\n this._ArcBoardOptions.set(-1, { ...defultArcBoardOption });\r\n cus.forEach((cu, i) =>\r\n {\r\n if (cu instanceof Arc)\r\n this._ArcBoardOptions.set(i, { ...defultArcBoardOption, arcLength: parseFloat(FixedNotZero(cu.Length, 5)) });\r\n });\r\n\r\n return this._ArcBoardOptions;\r\n }\r\n\r\n set ArcBoardOptions(opt: Map)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ArcBoardOptions = opt;\r\n this.UpdateArcBoardOptions(false);\r\n this.Update();\r\n }\r\n\r\n UpdateArcBoardOptions(isNewPath: boolean): void\r\n {\r\n //更新ArcBuild曲线数据\r\n this._SweepArcBoardBuild = new ArcBoardBuild(this).ParseSweepCurves();\r\n let cus = this.GetSweepPathInWCS().Explode();\r\n\r\n let newOpts = new Map();\r\n newOpts.set(-1, this._ArcBoardOptions.get(-1));\r\n //如果是新的多段线信息,就更新全部数据\r\n if (isNewPath)\r\n {\r\n cus.forEach((cu, i) =>\r\n {\r\n if (cu instanceof Arc)\r\n newOpts.set(i, { ...this._ArcBoardOptions.get(i), arcLength: parseFloat(FixedNotZero(cu.Length, 5)) });\r\n });\r\n }\r\n else if (cus.filter(cu => cu instanceof Arc).length <= this._ArcBoardOptions.size - 1)\r\n {\r\n cus.forEach((cu, i) =>\r\n {\r\n if (cu instanceof Arc && this._ArcBoardOptions.has(i))\r\n newOpts.set(i, { ...this._ArcBoardOptions.get(i), arcLength: parseFloat(FixedNotZero(cu.Length, 5)) });\r\n });\r\n }\r\n this._ArcBoardOptions = newOpts;\r\n }\r\n\r\n get IsArcBoard()\r\n {\r\n return this._SweepPath != undefined;\r\n }\r\n\r\n get ArcBuild()\r\n {\r\n if (!this._SweepArcBoardBuild) this._SweepArcBoardBuild = new ArcBoardBuild(this);\r\n return this._SweepArcBoardBuild;\r\n }\r\n\r\n SetSweepPath(path: Polyline, sweepAngle: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._SweepPath = path;\r\n this._SweepAngle = sweepAngle;\r\n this.Update();\r\n }\r\n\r\n private _FixContourByArcSweepPath_Ing = false;\r\n FixContourByArcSweepPath()\r\n {\r\n if (!this._SweepPath) return;\r\n\r\n //标记正在修改轮廓 避免重复进入\r\n this._FixContourByArcSweepPath_Ing = true;\r\n\r\n let build = new ArcBoardBuild(this);\r\n let length = build.SweepLength;\r\n if (this._SweepAngle === 0)\r\n {\r\n if (!equaln(length, this.width, 1e-3))\r\n this.Width = length;//直接拉大拉小\r\n }\r\n else if (equaln(Math.abs(this._SweepAngle), Math.PI / 2))\r\n {\r\n if (!equaln(length, this.height, 1e-3))\r\n this.Height = length;//直接拉大拉小\r\n }\r\n else\r\n {\r\n let con = this.ContourCurve.Clone();\r\n let ro = new Matrix4().makeRotationZ(-this._SweepAngle);\r\n con.ApplyMatrix(ro);\r\n con.Move(con.StartPoint.negate());\r\n\r\n let box = con.BoundingBox;\r\n let size = box.max.x - box.min.x;\r\n if (!equaln(size, length))\r\n {\r\n let contour = Contour.CreateContour(con, false);\r\n let isSuccess = contour.UnEqualProportionScale(size / 2, length - size, \"x\");\r\n\r\n let ro = new Matrix4().makeRotationZ(this._SweepAngle);\r\n contour.Curve.ApplyMatrix(ro);\r\n contour.Curve.Move(contour.Curve.BoundingBox.min.negate());\r\n\r\n this.SetContourCurve(contour.Curve);\r\n }\r\n }\r\n\r\n this._FixContourByArcSweepPath_Ing = false;\r\n }\r\n\r\n FixArcSweepPathLength()\r\n {\r\n if (!this._SweepPath) return;\r\n\r\n let build = new ArcBoardBuild(this);\r\n let length = build.SweepLength;\r\n\r\n let brLength: number = this.ParseBoardLengthInArcSweep();\r\n\r\n if (equaln(brLength, length, 1e-3)) return;\r\n\r\n if (brLength > length)\r\n {\r\n //延伸路径\r\n let endp = this._SweepPath.EndPoint;\r\n let derv = this._SweepPath.GetFirstDeriv(this._SweepPath.EndParam).normalize();\r\n if (this._SweepPath.GetCurveAtParam(this._SweepPath.EndParam - 0.5) instanceof Arc)\r\n this._SweepPath.AddVertexAt(this._SweepPath.LineData.length, AsVector2(endp.add(derv.multiplyScalar(brLength - length))));\r\n else\r\n this._SweepPath.LineData[this._SweepPath.LineData.length - 1].pt.copy(AsVector2(endp.add(derv.multiplyScalar(brLength - length))));\r\n }\r\n else\r\n {\r\n if (this._SweepVisibleFace === FaceDirection.Back)\r\n {\r\n //裁剪路径\r\n let param = this._SweepPath.GetParamAtDist(brLength);\r\n this._SweepPath = this._SweepPath.GetSplitCurves(param)[0];\r\n }\r\n else\r\n {\r\n //裁剪路径\r\n let param = build.SweepPath1.GetParamAtDist(brLength);\r\n let path = build.SweepPath1.GetSplitCurves(param)[0];\r\n this._SweepPath = ArcBoardBuild.OffsetPolyline(path, this.thickness);\r\n }\r\n }\r\n }\r\n\r\n ParseBoardLengthInArcSweep(): number\r\n {\r\n let brLength: number;\r\n if (this._SweepAngle === 0)\r\n brLength = this.width;\r\n else if (equaln(Math.abs(this._SweepAngle), Math.PI / 2))\r\n brLength = this.height;\r\n\r\n else\r\n {\r\n let con = this.ContourCurve.Clone();\r\n let ro = new Matrix4().makeRotationZ(-this._SweepAngle);\r\n con.ApplyMatrix(ro);\r\n let box = con.BoundingBox;\r\n brLength = box.max.x - box.min.x;\r\n }\r\n return brLength;\r\n }\r\n\r\n ClearSweepPath()\r\n {\r\n this.WriteAllObjectRecord();\r\n this._SweepPath = undefined;\r\n this._SweepAngle = 0;\r\n this.Update();\r\n }\r\n GetSweepPath(): Polyline\r\n {\r\n return this._SweepPath;\r\n }\r\n\r\n //获得见光path\r\n GetSweepPathInWCS(): Polyline\r\n {\r\n if (!this._SweepPath) return;\r\n let path = this.ArcBuild.SweepPath1.Clone();\r\n let mtx = new Matrix4().makeBasis(XAxis, ZAxis, YAxisN)\r\n .premultiply(this.ArcBuild.Rotate2OCSMtx)\r\n .premultiply(this.OCSNoClone);\r\n path.ApplyMatrix(mtx);\r\n\r\n return path;\r\n }\r\n\r\n //背面\r\n GetSweepPath1InWCS(): Polyline\r\n {\r\n if (!this._SweepPath) return;\r\n let path = this._SweepPath.Clone();\r\n let mtx = new Matrix4().makeBasis(XAxis, ZAxis, YAxisN)\r\n .premultiply(this.ArcBuild.Rotate2OCSMtx)\r\n .premultiply(this.OCSNoClone);\r\n path.ApplyMatrix(mtx);\r\n return path;\r\n }\r\n //正面\r\n GetSweepPath2InWCS(): Polyline\r\n {\r\n if (!this._SweepPath) return;\r\n let path = this._SweepVisibleFace === FaceDirection.Back ? this.ArcBuild.SweepPath2.Clone() : this.ArcBuild.SweepPath1.Clone();\r\n let mtx = new Matrix4().makeBasis(XAxis, ZAxis, YAxisN)\r\n .premultiply(this.ArcBuild.Rotate2OCSMtx)\r\n .premultiply(this.OCSNoClone);\r\n path.ApplyMatrix(mtx);\r\n return path;\r\n }\r\n\r\n /** 获取见光面 */\r\n get SweepVisibleFace()\r\n {\r\n return this._SweepVisibleFace;\r\n }\r\n /** 设置见光面 */\r\n set SweepVisibleFace(dir: FaceDirection)\r\n {\r\n if (dir === this._SweepVisibleFace) return;\r\n this.WriteAllObjectRecord();\r\n this._SweepVisibleFace = dir;\r\n this.FixContourByArcSweepPath();\r\n this.Update();\r\n }\r\n\r\n get SweepAngle(): number\r\n {\r\n return this._SweepAngle;\r\n }\r\n set SweepAngle(v: number)\r\n {\r\n if (equaln(v, this._SweepAngle)) return;\r\n this.WriteAllObjectRecord();\r\n this._SweepAngle = v;\r\n this.FixArcSweepPathLength();\r\n this.Update();\r\n }\r\n\r\n override AdjustPath(br: Board, outline: Polyline | Circle)\r\n {\r\n if (this.IsArcBoard)\r\n {\r\n const path = this.GetSweepPath();\r\n // 1.将放样路径展开\r\n const pathWCS = this.GetSweepPathInWCS();\r\n pathWCS.ApplyMatrix(pathWCS.OCSInv);\r\n const expandPath = CurveManager.CreateExpandPl(pathWCS);\r\n // 2.将轮廓进行旋转\r\n outline.ApplyMatrix(new Matrix4().makeRotationZ(-this.SweepAngle));\r\n // 3.根据轮廓的左右两侧,截取取对应的放样路径\r\n const leftParam = expandPath.GetParamAtDist(outline.BoundingBox.min.x);\r\n const rightParam = expandPath.GetParamAtDist(outline.BoundingBox.max.x);\r\n const leftPt = path.GetPointAtParam(leftParam);\r\n const rightPt = path.GetPointAtParam(rightParam);\r\n const newPath = CurveManager.Get_Pl_InPtAtoPtB(path, leftPt, rightPt);\r\n // 4.路径起点为原点\r\n newPath.Move(newPath.StartPoint.negate());\r\n br.SetSweepPath(newPath, this.SweepAngle);\r\n }\r\n }\r\n\r\n override AdjustPosition(br: Board, basePoint: Vector3)\r\n {\r\n if (this.IsArcBoard)\r\n {\r\n // 映射shape上的基点\r\n basePoint.applyMatrix4(this.ArcBuild.OCS2RotateMtx);\r\n this.ArcBuild.ParseAllX_Map([basePoint.x]);\r\n this.ArcBuild.PosMap2ArcPos(basePoint);\r\n basePoint.applyMatrix4(this.ArcBuild.Rotate2OCSMtx);\r\n basePoint.applyMatrix4(this.OCSNoClone);\r\n // 映射board上的基点\r\n const basePointInBoard = br.ContourCurve.StartPoint;\r\n basePointInBoard.applyMatrix4(br.ArcBuild.OCS2RotateMtx);\r\n br.ArcBuild.ParseAllX_Map([basePointInBoard.x]);\r\n br.ArcBuild.PosMap2ArcPos(basePointInBoard);\r\n basePointInBoard.applyMatrix4(br.ArcBuild.Rotate2OCSMtx);\r\n basePointInBoard.applyMatrix4(br.OCSNoClone);\r\n // 移动(boardBasePoint -> basePoint)\r\n br.Move(basePoint.sub(basePointInBoard));\r\n }\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 edgeRemarkUp: \"\",\r\n edgeRemarkDown: \"\",\r\n edgeRemarkLeft: \"\",\r\n edgeRemarkRight: \"\",\r\n highBoardEdgeRemark: this.CreateArray(),\r\n reservedEdgeUp: \"0\",\r\n reservedEdgeDown: \"0\",\r\n reservedEdgeRight: \"0\",\r\n reservedEdgeLeft: \"0\",\r\n highReservedEdge: this.CreateArray(),\r\n sealColorUp: \"\",\r\n sealColorDown: \"\",\r\n sealColorLeft: \"\",\r\n sealColorRight: \"\",\r\n sealColorType: \"\",\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 || key === \"highBoardEdgeRemark\" || key === \"highReservedEdge\")\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 else if (key === EBoardKeyList.BigHole)\r\n {\r\n let obj = this.CacheDrawObject.get(RenderType.BigHoleFace);\r\n if (obj)\r\n {\r\n this.UpdateDrawObject(RenderType.BigHoleFace, 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 if (!length || !width || !thickness)\r\n throw `无法使用该尺寸构建板,长:${length},宽:${width},厚:${thickness}`;\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 return this;\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 DrillLock()\r\n {\r\n return this._DrillLock;\r\n }\r\n\r\n set DrillLock(v: boolean)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DrillLock = v;\r\n }\r\n get isDrillAssociationLock()\r\n {\r\n //有一块关联的板就返回true\r\n for (const o of this._DrillAssociationLock)\r\n {\r\n if (o.Object && !(o.Object as Board).IsErase)\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n get DrillAssociationLock(): Set\r\n {\r\n return this._DrillAssociationLock;\r\n }\r\n\r\n AppendDrillAssociationLock(o: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DrillAssociationLock.add(o);\r\n }\r\n ClearDrillAssociationLock(o: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DrillAssociationLock.delete(o);\r\n }\r\n ClearAllAssociDrillLock()\r\n {\r\n this.WriteAllObjectRecord();\r\n for (const o of this._DrillAssociationLock)\r\n {\r\n this.ClearDrillAssociationLock(o);\r\n\r\n if (o && o.Object)\r\n {\r\n let br = o.Object as Board;\r\n br.ClearDrillAssociationLock(this.Id);\r\n }\r\n }\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 private _CustomNumberTextEntity: DbText;\r\n private _AsyncIngTextEntity: DbText;\r\n\r\n get CustomNumber() { return this._CustomNumber; }\r\n set CustomNumber(n: number | null)\r\n {\r\n if (n !== this._CustomNumber)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._CustomNumber = n;\r\n\r\n if (this._CustomNumberTextEntity)\r\n {\r\n this._CustomNumberTextEntity.TextString = n?.toString() ?? \"\";\r\n this._CustomNumberTextEntity.Visible = this._CustomNumberTextEntity.TextString !== \"\";\r\n this._CustomNumberTextEntity.Height = HostApplicationServices.boardCustomNumberTextHeight;\r\n }\r\n }\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,\r\n {\r\n [EBoardKeyList.HighSealed]: (obj[EBoardKeyList.HighSealed]).slice(),\r\n highBoardEdgeRemark: (obj.highBoardEdgeRemark).slice(),\r\n highReservedEdge: (obj.highReservedEdge).slice()\r\n });\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)\r\n {\r\n this.__CacheKnifVersion__[e.Index] = (e?.Object)?.__UpdateVersion__;\r\n continue;\r\n }\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 else\r\n {\r\n this.__CacheKnifVersion__[e.Index] = (e?.Object)?.__UpdateVersion__;\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, ...this.RelativeHandle])\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 this.RelativeHandle.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 highDrills: 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 {\r\n highDrills = this._BoardProcessOption.highDrill;\r\n }\r\n\r\n ocsInv = this.OCSInv;\r\n }\r\n\r\n let oldContour = this.ContourCurve;//旧的轮廓\r\n let oldHightSealCurves = GetBoardSealingCurves(this);//旧的封边轮廓\r\n let oldHightSealDatas = GetBoardHighSeal(this, oldHightSealCurves);//旧的封边数据\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.AlignLineObject = this.AlignLineObject;\r\n br._BoardProcessOption = { ...this._BoardProcessOption };\r\n br._CustomNumber = this._CustomNumber;//因为CustomNumber不会刷新绘制,所以拷贝这个\r\n br._DrillLock = this._DrillLock; //!2726 关联切割后的引用实体需要复制这个属性,否则反应器无法更新\r\n br._SideModelingMap = this.SideModelingMap;\r\n br.RelevanceSideModelMap = this.RelevanceSideModelMap; //关联切割侧槽\r\n\r\n let new2old_edgeMap: number[];\r\n //修正排钻边的数据\r\n if (highDrills)\r\n {\r\n br.BoardProcessOption.highDrill = [];//因为上面用了拷贝,所以这里不能直接改它的数据(我们新建一个数组来改它,否则原始板件的数据就被改掉了)\r\n new2old_edgeMap = ParseNewBr2OldBr_EdgeMap(br, this, ocsInv);\r\n for (let index of new2old_edgeMap)\r\n {\r\n let dri = highDrills[index];\r\n if (dri !== undefined)\r\n br._BoardProcessOption.highDrill.push(dri);\r\n else\r\n br._BoardProcessOption.highDrill.push(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 //保持封边属性(代码来自SetContourCurve)\r\n br._BoardProcessOption.highSealed = [];\r\n if (br.isRect)\r\n {\r\n SetBoardTopDownLeftRightSealData(br, oldHightSealDatas, oldHightSealCurves, oldContour);\r\n }\r\n else//变成了异形\r\n {\r\n let newhightSealCurves = GetBoardSealingCurves(br);\r\n\r\n for (let i = 0; i < newhightSealCurves.length; i++)\r\n {\r\n let newC = newhightSealCurves[i];\r\n let p = newC.GetPointAtParam(newC.EndParam * 0.5);\r\n\r\n let closesIndex = 0;\r\n let closesDistance = Infinity;\r\n\r\n for (let j = 0; j < oldHightSealCurves.length; j++)\r\n {\r\n let oldC = oldHightSealCurves[j];\r\n let d = oldC.GetClosestPointTo(p, false).distanceTo(p);\r\n if (d < closesDistance)\r\n {\r\n closesIndex = j;\r\n closesDistance = d;\r\n }\r\n }\r\n\r\n br._BoardProcessOption.highSealed.push(oldHightSealDatas[closesIndex]);\r\n }\r\n }\r\n }\r\n }\r\n return brs;\r\n }\r\n get ArcBoardModeling()\r\n {\r\n if (!this.IsArcBoard || !this.IsDrawArcGroove) return [];\r\n const { _SweepPath: path, _SweepAngle: angle, SweepVisibleFace: dir, ArcBoardOptions } = this;\r\n return ParseBoardArcFeed(this, path, angle, dir, ArcBoardOptions, false);\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 let gz = 0;//槽的z轴位置 (由于旋转轮廓或者镜像轮廓在Set时会被清除掉坐标系,我们还是需要正确的搞定z轴)\r\n if (model.dir === FaceDirection.Front)\r\n gz = this.thickness - g.Thickness;\r\n let moveZ = gz - g.Position.z;\r\n if (!equaln(moveZ, 0))\r\n g.Move({ x: 0, y: 0, z: moveZ });\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 //二维刀路\r\n get Modeling2D()\r\n {\r\n for (const m of this._2DModelingList)\r\n {\r\n for (const item of m.items)\r\n {\r\n let d = safeEval(item.depthExpr, { BH: this.thickness });\r\n if (!isNaN(d) && d != item.depth)\r\n {\r\n item.depth = d;\r\n }\r\n }\r\n }\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.Clear2DPathCache();\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.Clear3DPathCache();\r\n this._3DModelingList = ms;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n //侧面关联槽\r\n RelevanceSideModelMap: Map = new Map();\r\n\r\n //侧面造型\r\n get SideModelingMap()\r\n {\r\n return this._SideModelingMap;\r\n }\r\n\r\n set SideModelingMap(sideModelingMap: Map)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.ClearSideModelingCache();\r\n this._SideModelingMap = sideModelingMap;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n //获取侧面关联槽和侧面造型\r\n get AllSideModelGrooveMap(): Map\r\n {\r\n let allSideModelGrooveMap: Map = new Map();\r\n\r\n for (let [n, soilds] of this._SideModelingMap)\r\n allSideModelGrooveMap.set(n, [...soilds]);\r\n\r\n for (let [n, soilds] of this.RelevanceSideModelMap)\r\n {\r\n let ss = allSideModelGrooveMap.get(n) ?? [];\r\n\r\n for (let soild of soilds)\r\n ss.push(soild);\r\n\r\n allSideModelGrooveMap.set(n, ss);\r\n }\r\n\r\n return allSideModelGrooveMap;\r\n }\r\n\r\n ClearSideModeling()\r\n {\r\n if (!this._SideModelingMap.size) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this.ClearSideModelingCache();\r\n this._SideModelingMap.clear();\r\n this.Update(UpdateDraw.Geometry);\r\n }\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.Clear2DPathCache();\r\n this.Update(UpdateDraw.Geometry);\r\n }\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.Clear3DPathCache();\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n get IsChaiDan()\r\n {\r\n return this._IsChaiDan;\r\n }\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\r\n get OpenDir()\r\n {\r\n return this._OpenDir;\r\n }\r\n\r\n set OpenDir(v: BoardOpenDir)\r\n {\r\n if (this._OpenDir !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._OpenDir = v;\r\n //开门方向改变更新\r\n this.Update(UpdateDraw.Geometry);\r\n }\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: ObjectIdArr[])\r\n {\r\n this.WriteAllObjectRecord();\r\n let oldDrs = this._DrillList.get(k);\r\n\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\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\r\n if (this._SweepPath && !this._FixContourByArcSweepPath_Ing)\r\n this.FixArcSweepPathLength();\r\n\r\n if (this.HasSideModel)\r\n this.SplitBoardSideModelUtil.SpiltSideModelOfBrContour(this);\r\n\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\r\n if (this._SweepPath && !this._FixContourByArcSweepPath_Ing)\r\n this.FixArcSweepPathLength();\r\n\r\n if (this.HasSideModel)\r\n this.SplitBoardSideModelUtil.SpiltSideModelOfBrContour(this);\r\n\r\n this.Update();\r\n }\r\n }\r\n }\r\n\r\n get Thickness() { return super.Thickness; }\r\n set Thickness(thickness: number)\r\n {\r\n if (!equaln(thickness, this.thickness, 1e-4))//避免18.0009 无法改成 18\r\n {\r\n if (this.HasSideModel)\r\n this.SplitBoardSideModelUtil.SpiltSideModelOfBrThickness(this, thickness);\r\n\r\n super.Thickness = thickness;\r\n if (this._SweepPath && !this._FixContourByArcSweepPath_Ing)\r\n this.FixContourByArcSweepPath();\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 private UpdateSplitBoardSideModelUtil = true;\r\n private _SplitBoardSideModelUtil: SplitBoardSideModelUtil;\r\n\r\n get SplitBoardSideModelUtil(): SplitBoardSideModelUtil\r\n {\r\n if (!this._SplitBoardSideModelUtil)\r\n this._SplitBoardSideModelUtil = new SplitBoardSideModelUtil(this);\r\n\r\n return this._SplitBoardSideModelUtil;\r\n }\r\n\r\n override GeneralRectContour()\r\n {\r\n //取消异型时,强制使用矩形轮廓 导致原始轮廓数据丢失\r\n if (this.HasSideModel)\r\n {\r\n this.UpdateSplitBoardSideModelUtil = false;\r\n this.SplitBoardSideModelUtil.Init(this, true);\r\n super.GeneralRectContour();\r\n this.UpdateSplitBoardSideModelUtil = true;\r\n }\r\n else\r\n super.GeneralRectContour();\r\n }\r\n\r\n /**\r\n * 板件的轮廓,在板件坐标系中的表现方式.\r\n */\r\n override get ContourCurve()\r\n {\r\n return super.ContourCurve;\r\n }\r\n\r\n //设置新的板件轮廓,这里重载为了保持正确的排钻封边映射\r\n override set ContourCurve(newContour: ExtrudeContourCurve)\r\n {\r\n /**\r\n * 保持排钻边和封边数据对应正确性\r\n * (2x2种可能性)\r\n * 矩形->矩形\r\n * 矩形->异形\r\n * 异形->异形\r\n * 异形->矩形\r\n */\r\n\r\n //上下左右排钻属性(在矩形时生效)\r\n let rectHoleOpt: IBoardRectHoleType = {} as any;\r\n ParseBoardRectHoleType(this, rectHoleOpt);//分析旧的上下左右排钻\r\n\r\n let oldHightSealCurves = GetBoardSealingCurves(this);//旧的封边轮廓\r\n let oldHightSealDatas = GetBoardHighSeal(this, oldHightSealCurves);//旧的封边数据\r\n let oldHighBoardEdgeRemarkDatas = GetHighBoardEdgeRemark(this, oldHightSealCurves);//旧的板边备注数据\r\n let oldHighReservedEdgeDatas = GetBoardHighReservedEdge(this, oldHightSealCurves);//旧的预留边数据\r\n\r\n let splitSideModel = false;\r\n\r\n if (this.UpdateSplitBoardSideModelUtil && this.HasSideModel)\r\n {\r\n this.SplitBoardSideModelUtil.Init(this); //旧的侧面造型\r\n\r\n //记录侧面造型后清空 防止在分裂侧面造型时带入更新mesh\r\n this.WriteAllObjectRecord();\r\n this._SideModelingMap.clear();\r\n splitSideModel = true;\r\n }\r\n\r\n let oldContour = this.ContourCurve;//旧的轮廓\r\n\r\n let defaultDrillType = this._BoardProcessOption.drillType;\r\n if (!IsValidDriName(defaultDrillType) && this._BoardProcessOption.highDrill)\r\n for (let name of this._BoardProcessOption.highDrill)\r\n if (IsValidDriName(name))\r\n {\r\n defaultDrillType = name;\r\n break;\r\n }\r\n if (!IsValidDriName(defaultDrillType))\r\n defaultDrillType = HostApplicationServices.DrillConfigs.size ? HostApplicationServices.DrillConfigs.entries().next().value[0] : DrillType.None;\r\n\r\n super.ContourCurve = newContour;//设置新的轮廓\r\n\r\n //保持排钻边属性\r\n if (this.isRect && rectHoleOpt.up)//矩形->矩形\r\n SetBrHighHoleTypeFromRectHoleType(this, rectHoleOpt);//直接应用旧的矩形数据\r\n else//异形->矩形 矩形->异形 异形->异形\r\n {\r\n let indexMap: number[] = [];\r\n\r\n for (let i = 0; i < newContour.EndParam; i++)\r\n {\r\n let p = newContour.GetPointAtParam(i + 0.5);\r\n\r\n let cp = oldContour.GetClosestPointTo(p, false);\r\n let cparam = oldContour.GetParamAtPoint2(cp);\r\n indexMap.push(Math.floor(cparam));\r\n }\r\n\r\n let highDrill: string[] = [];\r\n for (let index of indexMap)\r\n highDrill.push(this._BoardProcessOption.highDrill[index] ?? defaultDrillType);\r\n\r\n this._BoardProcessOption.highDrill = highDrill;\r\n }\r\n\r\n this._BoardProcessOption.highSealed.length = 0;\r\n this._BoardProcessOption.highBoardEdgeRemark.length = 0;\r\n this._BoardProcessOption.highReservedEdge.length = 0;\r\n //保持封边属性\r\n if (this.isRect)\r\n {\r\n SetBoardTopDownLeftRightSealData(this, oldHightSealDatas, oldHightSealCurves, oldContour);\r\n SetBoardEdgeRemarkData(this, oldHighBoardEdgeRemarkDatas, oldHightSealCurves, oldContour);\r\n SetBoardReservedEdgeData(this, oldHighReservedEdgeDatas, oldHightSealCurves, oldContour);\r\n }\r\n else//变成了异形\r\n {\r\n let newhightSealCurves = GetBoardSealingCurves(this);\r\n\r\n for (let i = 0; i < newhightSealCurves.length; i++)\r\n {\r\n let newC = newhightSealCurves[i];\r\n let p = newC.GetPointAtParam(newC.EndParam * 0.5);\r\n\r\n let closesIndex = 0;\r\n let closesDistance = Infinity;\r\n\r\n for (let j = 0; j < oldHightSealCurves.length; j++)\r\n {\r\n let oldC = oldHightSealCurves[j];\r\n let d = oldC.GetClosestPointTo(p, false).distanceTo(p);\r\n if (d < closesDistance)\r\n {\r\n closesIndex = j;\r\n closesDistance = d;\r\n }\r\n }\r\n\r\n this._BoardProcessOption.highSealed.push(oldHightSealDatas[closesIndex]);\r\n this._BoardProcessOption.highBoardEdgeRemark.push(oldHighBoardEdgeRemarkDatas[closesIndex]);\r\n this._BoardProcessOption.highReservedEdge.push(oldHighReservedEdgeDatas[closesIndex]);\r\n }\r\n }\r\n\r\n //分裂侧面造型\r\n if (splitSideModel || this.HasSideModel)\r\n this.SplitBoardSideModelUtil.SetBoardSideModel(this);\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 = 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 SetBoardTopDownLeftRightSealData(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\r\n /**实际上这个值可能被改变,应该适当的去校验它(仅在重新设计模块时,这个值会被改变!) */\r\n get Rotation()\r\n {\r\n let roMtx = this.RotateMat;\r\n let roMtxInv = roMtx.getInverse(roMtx);\r\n\r\n let csInSpace = this.SpaceOCSInv.multiply(this.OCSNoClone);//逆到模块坐标系\r\n csInSpace.multiply(roMtxInv);//(正确)\r\n csInSpace.setPosition(0, 0, 0);\r\n\r\n let euRoMtx = new Matrix4().makeRotationFromEuler(new Euler(this._Rotation.x, this._Rotation.y, this._Rotation.z, \"ZYX\"));\r\n\r\n if (euRoMtx.elements.every((v, i) => equaln(v, csInSpace.elements[i])))\r\n return this._Rotation;\r\n else\r\n {\r\n let eu = new Euler(0, 0, 0, \"ZYX\").setFromRotationMatrix(csInSpace);\r\n return eu;\r\n }\r\n }\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;//为了优化性能,在jig模式下不去计算封边排钻等属性,不重绘板\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 highSealsCurves = GetBoardSealingCurves(this);\r\n let highSeals = GetBoardHighSeal(this, highSealsCurves);\r\n let isStartSealToBack = !equalv3(highSealsCurves[0].StartPoint, this.contourCurve.StartPoint, 1e-4);//第一段封边往后搜索了\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\r\n if (isStartSealToBack)//如果第一段封边往后搜索了,那么封边在镜像后 第一段封边保持不变\r\n highSeals.unshift(highSeals.pop());\r\n\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 SetBoardTopDownLeftRightSealData(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 //开门方向\"左\",\"右\"互换\r\n if (this.OpenDir === BoardOpenDir.Left)\r\n this.OpenDir = BoardOpenDir.Right;\r\n else if (this.OpenDir === BoardOpenDir.Right)\r\n this.OpenDir = BoardOpenDir.Left;\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(cloneDraw = true): this\r\n {\r\n let br = super.Clone(cloneDraw);\r\n br._DrillAssociationLock.clear();\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 let brWidth = this.width;\r\n let brHeight = this.height;\r\n\r\n switch (this.BoardProcessOption.lines)\r\n {\r\n case LinesType.Positive:\r\n len = brHeight / 3;\r\n width = Math.min(brWidth, brHeight) / 8;\r\n break;\r\n case LinesType.Reverse:\r\n len = brWidth / 2;\r\n width = Math.min(brWidth, brHeight) / 8;\r\n break;\r\n case LinesType.CanReversal:\r\n len = brHeight / 3;\r\n width = brWidth / 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(brWidth / 2, brHeight / 2, 0);\r\n l1.position.set(brWidth / 2, brHeight / 2, this.thickness);\r\n\r\n if (this._SweepPath)\r\n {\r\n let pts = [l.position, l1.position];\r\n\r\n let x: Vector3, y: Vector3;\r\n\r\n if (this._SweepAngle !== 0)\r\n {\r\n l.position.z -= 1;\r\n l1.position.z += 1;\r\n\r\n x = l.position.clone().add(XAxis);\r\n y = l.position.clone().add(YAxis);\r\n pts.push(x, y);\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(this.ArcBuild.OCS2RotateMtx);\r\n }\r\n else\r\n {\r\n x = l.position.clone().add(XAxis);\r\n y = l.position.clone().add(YAxis);\r\n pts.push(x, y);\r\n }\r\n\r\n let xs: number[] = pts.map(p => p.x);\r\n arraySortByNumber(xs);\r\n arrayRemoveDuplicateBySort(xs, equaln);\r\n\r\n this.ArcBuild.ParseAllX_Map(xs);\r\n for (let p of pts)\r\n this.ArcBuild.PosMap2ArcPos(p);\r\n\r\n if (this._SweepAngle !== 0)\r\n for (let p of pts)\r\n p.applyMatrix4(this.ArcBuild.Rotate2OCSMtx);\r\n\r\n x.sub(l.position).normalize();\r\n y.sub(l.position).normalize();\r\n let z = new Vector3().crossVectors(x, y);\r\n let mtx = new Matrix4().makeBasis(x, y, z);\r\n\r\n l.rotation.setFromRotationMatrix(mtx);\r\n l1.rotation.setFromRotationMatrix(mtx);\r\n }\r\n\r\n l.updateMatrix();\r\n l1.updateMatrix();\r\n\r\n return [l, l1];\r\n }\r\n\r\n private GetLinesOpenDir(renderType: RenderType)\r\n {\r\n const openDirReverse = {\r\n 1: BoardOpenDir.Right,\r\n 2: BoardOpenDir.Left,\r\n 3: BoardOpenDir.Down,\r\n 4: BoardOpenDir.Up,\r\n 5: BoardOpenDir.NoOpen,\r\n };\r\n\r\n const openDir = HostApplicationServices.doorLinesOption.reverseOpenDirLines ? openDirReverse[this.OpenDir] : this.OpenDir;\r\n\r\n const mtl = (renderType === RenderType.Physical || renderType === RenderType.Physical2) ? ColorMaterial.GetPhysical2EdgeMaterial() : ColorMaterial.GetWallLineMtl(9);\r\n const l: TLine = new TLine(\r\n BufferGeometryUtils.CreateFromPts(PointShapeUtils.LinesOpenDirPts(this.height, this.width, openDir)),\r\n mtl\r\n );\r\n l.computeLineDistances();\r\n\r\n let l1 = l.clone();\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\r\n get KnifePolylineMap()\r\n {\r\n return new Map(this._KnifePolylineMap);\r\n }\r\n\r\n set KnifePolylineMap(map: Map)\r\n {\r\n if (map.size === 0 && this._KnifePolylineMap.size === 0)\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._KnifePolylineMap = map;\r\n\r\n //不进行更新 通常由其他的方法更新\r\n }\r\n\r\n //三维刀路绘制对象\r\n private _3DPathObject: Object3D;\r\n\r\n Clear3DPathCache()\r\n {\r\n if (!this._3DPathObject) return;\r\n\r\n DisposeThreeObj(this._3DPathObject);\r\n this._3DPathObject = undefined;\r\n }\r\n\r\n\r\n //获取三维刀路的绘制对象\r\n private Get3DPathDrawObject(): Object3D\r\n {\r\n if (this._3DPathObject)\r\n return this._3DPathObject;\r\n\r\n this._3DPathObject = new Object3D();\r\n\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 this._3DPathObject.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 this._3DPathObject.add(arc.GetDrawObjectFromRenderType(RenderType.Wireframe));\r\n }\r\n }\r\n }\r\n\r\n return this._3DPathObject;\r\n }\r\n\r\n //#region 二维刀路缓存\r\n //清除二维刀路的缓存\r\n Clear2DPathCache()\r\n {\r\n this._2DPathCsgs = undefined;\r\n if (this._2DPathDrawObject)\r\n {\r\n DisposeThreeObj(this._2DPathDrawObject);\r\n this._2DPathDrawObject = undefined;\r\n }\r\n this.OffsetPathCache.clear();\r\n }\r\n\r\n _2DPathCsgs: Geom3[];//二维刀路的csg数组\r\n _2DPathDrawObject: Object3D;//二维刀路提刀线框显示对象\r\n\r\n /**\r\n * 这个函数生成了二维刀路的csg数组,并且同时生成了_2DPathDrawObject(二维刀路提刀线框显示对象)\r\n */\r\n \r\n Get2DPathCsgs(): Geom3[]\r\n {\r\n if (this._2DPathCsgs)\r\n return this._2DPathCsgs;\r\n\r\n this._2DPathCsgs = [];\r\n\r\n \r\n\r\n return this._2DPathCsgs;\r\n }\r\n //#endregion\r\n\r\n //#region 侧面造型\r\n _SideModeingCsgs: Geom3[];\r\n ;\r\n GetSideModeingCsgs(): Geom3[]\r\n {\r\n if (this._SideModeingCsgs)\r\n return this._SideModeingCsgs;\r\n\r\n this._SideModeingCsgs = [];\r\n\r\n if (!this._SideModelingMap.size && !this.RelevanceSideModelMap.size)\r\n return this._SideModeingCsgs;\r\n\r\n this._SideModeingCsgs = BoardSideModelCSGBuilder(this);\r\n\r\n return this._SideModeingCsgs;\r\n }\r\n\r\n //清除侧面造型Csgs的缓存\r\n ClearSideModelingCache()\r\n {\r\n this._SideModeingCsgs = undefined;\r\n }\r\n //#endregion 侧面造型\r\n\r\n get HasSideModel() { return this._SideModelingMap.size > 0; }\r\n private _asyncSideModelIng = false;\r\n get AsyncSideModeling() { return this._asyncSideModelIng; }\r\n\r\n protected get Has2DPath() { return this._2DModelingList.length > 0; }\r\n private _workerCalcedGeom: Geom3 = null;//worker计算后,暂时存入到这里\r\n private _async2DPathIng = false; //二维刀路构建进行中\r\n\r\n get Async2DPathing() { return this._async2DPathIng; }\r\n override GoodBye(): void\r\n {\r\n super.GoodBye();\r\n TerminateCSGTask({ key: this });\r\n }\r\n\r\n private _Promise2DPathRes: (res: boolean) => void;//回调函数\r\n private _2DPathBuildPromise: Promise;\r\n async Load2DPathPromise()\r\n {\r\n if (!this._2DPathBuildPromise)\r\n this._2DPathBuildPromise = new Promise((res) =>\r\n {\r\n this._Promise2DPathRes = res;\r\n });\r\n\r\n return this._2DPathBuildPromise;\r\n }\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 || this.DrillLock || this.isDrillAssociationLock)\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 || this.DrillLock || this.isDrillAssociationLock)\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 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 arrayRemoveIf(this.RelativeHardware, (hwdObjId) =>\r\n {\r\n if (!hwdObjId || hwdObjId.IsErase) return true;\r\n for (let ent of splitEntitys)\r\n {\r\n let hwd = (hwdObjId.Object as HardwareCompositeEntity);\r\n if (ent.BoundingBox.intersectsBox(hwd.BoundingBox))\r\n {\r\n //原始板件删除这个五金\r\n arrayRemoveIf(hwd.RelevanceBoards, (rbr) => rbr?.Object === this);\r\n\r\n //五金与分裂的板关联\r\n hwd.RelevanceBoards.push(ent.objectId);\r\n ent.RelativeHardware.push(hwdObjId);\r\n\r\n //如果五金是把手 写入分裂的板的RelativeHandle\r\n if (this.RelativeHandle.includes(hwdObjId))\r\n {\r\n arrayRemoveIf(this.RelativeHandle, (handle) => handle === hwdObjId);\r\n ent.RelativeHandle.push(hwdObjId);\r\n }\r\n return true;\r\n }\r\n }\r\n });\r\n }\r\n\r\n private BuildArcGeometry()\r\n {\r\n //针对圆弧板\r\n let build = new ArcBoardBuild(this);\r\n [this._MeshGeometry, this._EdgeGeometry] = build.BuildMeshEdgeGeom();\r\n // 圆弧板的二维刀路与侧面造型\r\n if (build.CSGBoard.Async2DPathing || build.CSGBoard.AsyncSideModeling)\r\n {\r\n build.CSGBoard.Load2DPathPromise().then(() =>\r\n {\r\n /** @todo 圆弧板暂时先不显示二维刀路的线框吧 */\r\n this._2DPathDrawObject = undefined;\r\n // 完毕后,不再显示二维刀路/侧面造型建模中的文字\r\n this._async2DPathIng = false;\r\n this._asyncSideModelIng = false;\r\n this.UpdateDrawGeometry();//销毁旧的\r\n [this._MeshGeometry, this._EdgeGeometry] = build.BuildMeshEdgeGeom();\r\n // 更新\r\n for (let [type, obj] of this.CacheDrawObject)\r\n {\r\n this.UpdateDrawObject(type, obj);\r\n obj.updateMatrixWorld(true);\r\n obj.traverse(UpdateBoundingSphere);\r\n }\r\n });\r\n }\r\n this._SweepArcBoardBuild = build;//记录\r\n }\r\n\r\n \r\n\r\n \r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n // 圆弧板和复合实体内的圆弧板,Jig时,实时显示见光面路径\r\n if (this._SweepPath && (renderType === RenderType.Jig))\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n\r\n if (this._jigSweepPath)\r\n {\r\n const path2BoardMtx = new Matrix4();\r\n const invMtx = new Matrix4().getInverse(this._Matrix);\r\n path2BoardMtx.multiplyMatrices(invMtx, this._jigPath2WCSMtx);\r\n const pts = this._jigSweepPath.Shape.getPoints().map(AsVector3);\r\n const geo = new BufferGeometry().setFromPoints(pts);\r\n const line = new TLine(geo, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n line.matrix = path2BoardMtx;\r\n obj.add(line);\r\n this._jigSweepPath = undefined;\r\n this._jigPath2WCSMtx = undefined;\r\n return;\r\n }\r\n }\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 else if (renderType === RenderType.BigHoleFace)\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 obj.add(this.GetBigHoleFace());\r\n }\r\n\r\n else if (renderType === RenderType.CustomNumber || renderType === RenderType.CustomNumberPrint)\r\n {\r\n if (renderType === RenderType.CustomNumberPrint)\r\n obj.add(...this.GetPrintObject3D());\r\n else\r\n obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex, FrontSide, true)));\r\n\r\n //#region 添加文字\r\n if (!this._CustomNumberTextEntity)\r\n {\r\n this._CustomNumberTextEntity = new DbText();\r\n this._CustomNumberTextEntity.TextAligen = TextAligen.Mid;\r\n this._CustomNumberTextEntity.IsDoubleMesh = true;\r\n this._CustomNumberTextEntity.IsFsText = this._BoardType === BoardType.Layer;\r\n\r\n this._CustomNumberTextEntity.IsEmbedEntity = true;\r\n }\r\n if (this._BoardType === BoardType.Layer)\r\n this._CustomNumberTextEntity.OCSNoClone.makeRotationZ(-Math.PI / 2).setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5);\r\n else\r\n this._CustomNumberTextEntity.OCSNoClone.identity().setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5);\r\n\r\n this._CustomNumberTextEntity.TextString = this._CustomNumber?.toString() ?? (this.objectId?.Index > 0 ? \"未编号\" : \" \");\r\n\r\n if (this._CustomNumberTextEntity.TextString === \"未编号\")\r\n this._CustomNumberTextEntity.Height = 60;\r\n else\r\n this._CustomNumberTextEntity.Height = HostApplicationServices.boardCustomNumberTextHeight;\r\n\r\n let o = this._CustomNumberTextEntity.GetDrawObjectFromRenderType(RenderType.Conceptual);\r\n if (o)\r\n {\r\n o.traverse(obj => obj.userData = {});\r\n AddEntityDrawObject(obj, this._CustomNumberTextEntity, RenderType.Conceptual);\r\n }\r\n //#endregion\r\n }\r\n\r\n this.UpdateDrawObjectByBoardInfo(renderType, obj);\r\n\r\n this.DrawAsyncText(obj);\r\n\r\n return o;\r\n }\r\n\r\n private DrawAsyncText(obj: Object3D)\r\n {\r\n if (this._async2DPathIng || this._asyncSideModelIng)\r\n {\r\n //#region 添加文字\r\n if (!this._AsyncIngTextEntity)\r\n {\r\n this._AsyncIngTextEntity = new DbText();\r\n this._AsyncIngTextEntity.TextAligen = TextAligen.Mid;\r\n this._AsyncIngTextEntity.IsDoubleMesh = true;\r\n this._AsyncIngTextEntity.IsFsText = this._BoardType === BoardType.Layer;\r\n\r\n this._AsyncIngTextEntity.IsEmbedEntity = true;\r\n }\r\n if (this._BoardType === BoardType.Layer)\r\n this._AsyncIngTextEntity.OCSNoClone.makeRotationZ(-Math.PI / 2).setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5);\r\n\r\n else\r\n this._AsyncIngTextEntity.OCSNoClone.identity().setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5);\r\n\r\n if (this._async2DPathIng)\r\n this._AsyncIngTextEntity.TextString = \"二维刀路建模中!\";\r\n else if (this._asyncSideModelIng)\r\n this._AsyncIngTextEntity.TextString = \"侧面造型建模中!\";\r\n\r\n let o = this._AsyncIngTextEntity.GetDrawObjectFromRenderType(RenderType.Conceptual);\r\n if (o)\r\n {\r\n o.traverse(obj => obj.userData = {});\r\n AddEntityDrawObject(obj, this._AsyncIngTextEntity, RenderType.Conceptual);\r\n }\r\n //#endregion\r\n }\r\n }\r\n //del_exp2_end\r\n\r\n //绘制排版面时使用的颜色\r\n private get PlaceColor() { return this._Color === 8 ? 9 : this.DrawColorIndex; }\r\n //排版面网格\r\n private GetPlaceFace(): Mesh\r\n {\r\n let shapeGeom = new ShapeBufferGeometry(this.contourCurve.Shape);\r\n let isBack = this._BoardProcessOption[EBoardKeyList.ComposingFace] !== ComposingType.Positive;\r\n if (isBack)\r\n {\r\n const indices = Array.from(shapeGeom.getIndex().array);\r\n\r\n // 翻转面片索引的顺序\r\n const flippedIndices: number[] = [];\r\n for (let i = 0; i < indices.length; i += 3)\r\n flippedIndices.push(indices[i], indices[i + 2], indices[i + 1]);\r\n\r\n // 创建新的面片索引属性\r\n const newIndices = new BufferAttribute(new Uint16Array(flippedIndices), 1);\r\n\r\n // 更新面片索引属性\r\n shapeGeom.setIndex(newIndices);\r\n }\r\n\r\n shapeGeom.applyMatrix4(this.contourCurve.OCSNoClone);\r\n shapeGeom.translate(0, 0, isBack ? -1e-3 : this.thickness + 1e-3);\r\n let mesh = new Mesh(shapeGeom, ColorMaterial.GetBasicMaterial(this.PlaceColor));\r\n return mesh;\r\n }\r\n\r\n /** 获取大孔面的几何体 */\r\n get BigHoleFaceGeo()\r\n {\r\n let shapeGeom = new ShapeBufferGeometry(this.contourCurve.Shape);\r\n let isBack = this._BoardProcessOption[EBoardKeyList.BigHole] === FaceDirection.Back;\r\n if (isBack)\r\n {\r\n const indices = Array.from(shapeGeom.getIndex().array);\r\n\r\n // 翻转面片索引的顺序\r\n const flippedIndices: number[] = [];\r\n\r\n for (let i = 0; i < indices.length; i += 3)\r\n flippedIndices.push(indices[i], indices[i + 2], indices[i + 1]);\r\n\r\n // 创建新的面片索引属性\r\n const newIndices = new BufferAttribute(new Uint16Array(flippedIndices), 1);\r\n\r\n // 更新面片索引属性\r\n shapeGeom.setIndex(newIndices);\r\n }\r\n shapeGeom.applyMatrix4(this.contourCurve.OCSNoClone);\r\n shapeGeom.translate(0, 0, isBack ? -1e-3 : this.thickness + 1e-3);\r\n return shapeGeom;\r\n }\r\n\r\n //大孔面网格\r\n private GetBigHoleFace(): Mesh\r\n {\r\n if (this._SweepPath) //针对圆弧板\r\n {\r\n const geometry = this._SweepArcBoardBuild.BuildBigHoleFace();\r\n let mesh = new Mesh(geometry, ColorMaterial.GetBasicMaterial(this.PlaceColor));\r\n return mesh;\r\n }\r\n let shapeGeom = this.BigHoleFaceGeo;\r\n let mesh = new Mesh(shapeGeom, ColorMaterial.GetBasicMaterial(this.PlaceColor));\r\n return mesh;\r\n }\r\n\r\n //偏移缓存\r\n OffsetPathCache = new Map();\r\n\r\n /**\r\n * 根据板的信息修改绘制的实体\r\n * 1.非拆单板 灰色\r\n * 2.纹路 开门方向纹路\r\n * 3.二维 三维刀路\r\n */\r\n private UpdateDrawObjectByBoardInfo(renderType: RenderType, obj: Object3D)\r\n {\r\n if (!obj) return;\r\n\r\n if (!this.IsChaiDan)//非拆单板绘制更新\r\n {\r\n if (renderType === RenderType.Conceptual || renderType === RenderType.ConceptualTransparent || 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)// renderType === RenderType.Physical(理论上只有这个)\r\n (obj as Mesh).material = ColorMaterial.GrayTransparentMeshMaterial;//灰色半透明(会不会有bug?)\r\n }\r\n\r\n //线框及概念且可拆单\r\n if (([RenderType.Wireframe, RenderType.Conceptual, RenderType.ConceptualTransparent, RenderType.Print].includes(renderType)) && this.IsChaiDan)\r\n {\r\n //绘制纹路\r\n if (HostApplicationServices.showLines && renderType !== RenderType.Print)\r\n obj.add(...this.GetLinesDir());\r\n //绘制开门方向纹路\r\n if (HostApplicationServices.showOpenDirLines && this.OpenDir !== BoardOpenDir.None && this.OpenDir !== BoardOpenDir.NoOpen)\r\n obj.add(...this.GetLinesOpenDir(renderType));\r\n }\r\n\r\n const doorLinesOption = HostApplicationServices.doorLinesOption;\r\n if (doorLinesOption.physicalShowLines && renderType === RenderType.Physical\r\n || doorLinesOption.physicalShowLines2 && renderType === RenderType.Physical2)\r\n {\r\n //绘制开门方向纹路\r\n if (HostApplicationServices.showOpenDirLines && this.OpenDir !== BoardOpenDir.None && this.OpenDir !== BoardOpenDir.NoOpen)\r\n obj.add(...this.GetLinesOpenDir(renderType));\r\n }\r\n\r\n if (this.objectId)//二维和三维刀路\r\n {\r\n //三维刀路\r\n let path3d = this.Get3DPathDrawObject();\r\n if (path3d.parent)\r\n obj.children.push(path3d);\r\n else\r\n obj.add(path3d);\r\n\r\n //二维刀路\r\n this.Get2DPathCsgs();\r\n let path2d = this._2DPathDrawObject;\r\n if (path2d && HostApplicationServices.show2DPathLine)\r\n {\r\n if (path2d.parent)\r\n obj.children.push(path2d);\r\n else\r\n obj.add(path2d);\r\n }\r\n\r\n this.GetSideModeingCsgs();\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 || renderType === RenderType.BigHoleFace)\r\n {\r\n let face = obj.children[2] as Mesh;\r\n if (!face) return;\r\n face.material = ColorMaterial.GetBasicMaterial(this.PlaceColor);\r\n }\r\n\r\n if (!this.IsChaiDan)\r\n {\r\n if (renderType === RenderType.Conceptual || renderType === RenderType.ConceptualTransparent || 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 //封边检查(为obj 对象添加封边检查的曲线)\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\r\n const thickness = this.Thickness;\r\n const sealWidth = thickness * (HostApplicationServices.sealWidthPercentage ?? 1) / 100;\r\n\r\n const sealSolids = cus.map((c) =>\r\n {\r\n const sealSolid = new SealSolid(c, sealWidth);\r\n sealSolid.Move({ x: 0, y: 0, z: (thickness - sealWidth) / 2 });\r\n return sealSolid;\r\n });\r\n for (let i = 0; i < sealSolids.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 sealSolids[i].ColorIndex = parseInt(color) ?? 7;\r\n let l = sealSolids[i].GetDrawObjectFromRenderType(RenderType.Conceptual);\r\n obj.add(l);\r\n }\r\n }\r\n }\r\n\r\n private AddSideModelGripPoints(pts: Vector3[], dragPointType: DragPointType)\r\n {\r\n let con = GetBoardContour(this);\r\n if (!con) return;\r\n\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n\r\n for (let [index, soilds] of this.SideModelingMap)\r\n {\r\n let cu = cus[index];\r\n if (!cu) continue;\r\n\r\n let mt4 = GetSideCuFaceMtx(cus[index], inverseZ);\r\n\r\n for (let soild of soilds)\r\n {\r\n const MirrorMtxZ = MakeMirrorMtx(ZAxis);\r\n let s = soild.Clone();\r\n s.ApplyMatrix(MirrorMtxZ);\r\n s.ApplyMatrix(mt4);\r\n s.ApplyMatrix(this.OCSNoClone);\r\n pts.push(...s.GetGripOrStretchPoints(dragPointType));\r\n }\r\n }\r\n }\r\n\r\n override GetStrectchPointCountList(dragType: DragPointType): number[]\r\n {\r\n let counts = super.GetStrectchPointCountList(dragType);\r\n if (this.HasSideModel)\r\n {\r\n for (let [num, soilds] of this.SideModelingMap)\r\n {\r\n for (let soild of soilds)\r\n {\r\n let c = soild.ContourCurve.GetDragPointCount(dragType) * 2;\r\n for (let g of soild.Grooves)\r\n c += g.ContourCurve.GetDragPointCount(dragType) * 2;\r\n\r\n counts.push(c);\r\n }\r\n }\r\n }\r\n return counts;\r\n }\r\n\r\n //因为圆弧板 我们重载了它\r\n override GetGripPoints(): Vector3[]\r\n {\r\n let pts = super.GetGripPoints();\r\n pts = this.MapToArcPoints(pts, DragPointType.Grip);\r\n return pts;\r\n }\r\n\r\n private MapToArcPoints(pts: Vector3[], dragPointType: DragPointType): Vector3[]\r\n {\r\n if (this._SweepPath)\r\n {\r\n if (!this._SweepArcBoardBuild)\r\n this._SweepArcBoardBuild = new ArcBoardBuild(this);\r\n\r\n let inv = this.OCSInv;\r\n let mtx = this.OCSNoClone;\r\n if (this._SweepArcBoardBuild._OCS2RotateMtx)\r\n {\r\n inv.multiplyMatrices(this._SweepArcBoardBuild._OCS2RotateMtx, inv);\r\n mtx = new Matrix4().multiplyMatrices(mtx, this._SweepArcBoardBuild._Rotate2OCSMtx);\r\n }\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(inv);\r\n\r\n let xs = pts.map(p => p.x);\r\n arraySortByNumber(xs);\r\n arrayRemoveDuplicateBySort(xs);\r\n this._SweepArcBoardBuild.ParseAllX_Map(xs);\r\n\r\n for (let p of pts)\r\n {\r\n this._SweepArcBoardBuild.PosMap2ArcPos(p);\r\n p.applyMatrix4(mtx);\r\n }\r\n } else if (this.HasSideModel)\r\n this.AddSideModelGripPoints(pts, dragPointType);\r\n\r\n return pts;\r\n }\r\n\r\n override MoveGripPoints(indexList: number[], vec: Vector3): void\r\n {\r\n if (indexList.length === 0) return;\r\n this.ClearSideModelingCache();\r\n if (this._SweepPath)\r\n {\r\n this.MoveArcBoardPoints(indexList, vec, DragPointType.Grip);\r\n this.Update();\r\n }\r\n else\r\n super.MoveGripPoints(indexList, vec);\r\n }\r\n\r\n GetStretchPoints()\r\n {\r\n let pts = this.GetGripOrStretchPoints(DragPointType.Stretch);\r\n pts = this.MapToArcPoints(pts, 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.OCSNoClone)));\r\n }\r\n\r\n return pts;\r\n }\r\n\r\n MoveStretchPoints(indexList: Array, vec: Vector3)\r\n {\r\n if (indexList.length === 0)\r\n {\r\n let undoData = this.UndoRecord();\r\n if (undoData)\r\n undoData.WriteObjectHistoryPath(this, new HistorycRecord);\r\n return;\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\r\n let oldOcs = this.OCS;\r\n\r\n if (this._SweepPath)\r\n this.MoveArcBoardPoints(originIndexList, vec, DragPointType.Stretch);\r\n else\r\n super.MoveStretchPoints(originIndexList, vec);\r\n\r\n if (!this.Id) return;\r\n\r\n arraySortByNumber(mIndexList);\r\n let ocsInv = this.OCSInv;\r\n let localVec = TransformVector(vec.clone(), ocsInv);\r\n let offset = 0;\r\n let icount = mIndexList.length;\r\n let i = 0;\r\n\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(ocsInv);\r\n }\r\n\r\n this.Clear2DPathCache();\r\n this.Clear3DPathCache();\r\n this.ClearSideModelingCache();\r\n this.Update(UpdateDraw.Geometry);\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 frustum?: Frustum,\r\n ): Vector3[]\r\n {\r\n if (this._SweepPath)\r\n {\r\n if (snapMode === ObjectSnapMode.Nea)\r\n {\r\n let pts: Vector3[] = [];\r\n //这里实现对线框的快速捕捉\r\n let edgeGeom = this.EdgeGeometry;\r\n let pos = edgeGeom.getAttribute(\"position\") as BufferAttribute;\r\n let p1 = new Vector3;\r\n let p2 = new Vector3;\r\n\r\n let line = new Line(p1, p2);\r\n line.ApplyMatrix(this.OCSNoClone);\r\n\r\n let sel: SelectPick = frustum[\"_select_\"];\r\n for (let y = 0; y < pos.count; y += 2)\r\n {\r\n p1.fromArray(pos.array, y * 3);\r\n p2.fromArray(pos.array, (y + 1) * 3);\r\n p1.applyMatrix4(this._Matrix);\r\n p2.applyMatrix4(this._Matrix);\r\n\r\n sel.WorldToScreenPoint(p1);\r\n sel.WorldToScreenPoint(p2);\r\n\r\n if (sel.IntersectLine(p1, p2))\r\n {\r\n p1.fromArray(pos.array, y * 3);\r\n p2.fromArray(pos.array, (y + 1) * 3);\r\n arrayPushArray(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n }\r\n return pts;\r\n }\r\n }\r\n\r\n let pts = super.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum);\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\r\n //为圆弧板映射新的点表\r\n if (this._SweepPath)\r\n {\r\n let inv = this.OCSInv;\r\n let mtx = this._Matrix;\r\n\r\n if (this._SweepAngle !== 0)\r\n {\r\n inv.multiplyMatrices(this.ArcBuild.OCS2RotateMtx, inv);\r\n mtx = new Matrix4().multiplyMatrices(mtx, this.ArcBuild.Rotate2OCSMtx);\r\n }\r\n\r\n for (let p of pts) p.applyMatrix4(inv);\r\n\r\n let xs = pts.map(p => p.x);\r\n arraySortByNumber(xs);\r\n arrayRemoveDuplicateBySort(xs, equaln);\r\n this.ArcBuild.ParseAllX_Map(xs);\r\n\r\n for (let p of pts)\r\n {\r\n this.ArcBuild.PosMap2ArcPos(p);\r\n p.applyMatrix4(mtx);\r\n }\r\n }\r\n\r\n return pts;\r\n }\r\n\r\n private MoveArcBoardPoints(indexList: Array, vec: Vector3, dragType: DragPointType)\r\n {\r\n this.WriteAllObjectRecord();\r\n const isGrip = dragType === DragPointType.Grip;\r\n const oldPts = isGrip ? this.GetGripPoints() : this.GetStretchPoints();\r\n const MoveBack = () => isGrip ? super.MoveGripPoints(indexList, offsetVec.clone().negate()) : super.MoveStretchPoints(indexList, offsetVec.clone().negate());\r\n\r\n let path = this.ArcBuild.SweepPath1.Clone();\r\n\r\n // 1、计算沿着SweepPath偏移的向量\r\n const offsetVec = this.GetOffsetVecAlongPath(oldPts[indexList[0]].clone(), vec, path);\r\n\r\n const oldPos = this.Position;\r\n const oldCon = this.ContourCurve.Clone();\r\n const ocs2rot = this.ArcBuild.OCS2RotateMtx;\r\n oldCon.ApplyMatrix(ocs2rot);\r\n const oldBox = oldCon.BoundingBox;\r\n\r\n // 2、移动平板上的点\r\n isGrip ? super.MoveGripPoints(indexList, offsetVec) : super.MoveStretchPoints(indexList, offsetVec);\r\n\r\n const newPos = this.Position;\r\n const conMoveVec = TransformVector(newPos.clone().sub(oldPos), this.OCSInv);//轮廓在OCS中移动的向量\r\n const newCon = this.ContourCurve.Clone();\r\n newCon.Move(conMoveVec);\r\n newCon.ApplyMatrix(ocs2rot);\r\n const newBox = newCon.BoundingBox;\r\n\r\n this._jigSweepPath = path.Clone();\r\n\r\n // 特殊场景:闭合SweepPath,其对应的首尾不能发生变化,否者会发生path和Contour映射错误。\r\n if (path.CloseMark && !(equaln(newBox.min.x, oldBox.min.x) && equaln(newBox.max.x, oldBox.max.x)))\r\n {\r\n MoveBack();// 若头尾被拖拽过,需要恢复回去\r\n return;\r\n }\r\n\r\n // 特殊场景:某些操作,对弧形板进行移动(如当拖拽中间点),未发生路径改变,则重新移动回去\r\n const newSize = newBox.getSize(new Vector3);\r\n const oldSize = oldBox.getSize(new Vector3);\r\n if (equaln(newSize.x, oldSize.x, 1e-3))\r\n {\r\n const newPts = isGrip ? this.GetGripPoints() : this.GetStretchPoints();\r\n if (oldPts.length === newPts.length)\r\n {\r\n const vec = oldPts[0].clone().sub(newPts[0]);\r\n const isMoveArcBoard = oldPts.every((pt, i) => equalv3(pt.clone().sub(newPts[i]), vec));\r\n if (isMoveArcBoard)\r\n {\r\n MoveBack();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n // 3、修正SweepPath\r\n path = this.FixSweepPathByContourBondingbox(newBox, oldBox, path);\r\n // 特殊场景:path 计算发生错误,需要恢复板的状态\r\n if (!path)\r\n {\r\n MoveBack();\r\n return;\r\n }\r\n\r\n // 4、计算弧形板偏移矩阵\r\n if (this.objectId || (this.IsEmbedEntity))\r\n {\r\n const pts1 = isGrip ? newCon.GetGripPoints() : newCon.GetStretchPoints();\r\n const pts2 = isGrip ? oldCon.GetGripPoints() : oldCon.GetStretchPoints();\r\n const count = Math.min(pts1.length, pts2.length);\r\n this._SweepArcBoardBuild = undefined;\r\n for (let i = 0; i < count; i++)\r\n {\r\n if (equalv2(pts1[i], pts2[i], 1e-3)) // 找到新板和旧板上不变的点,计算出偏移矩阵\r\n {\r\n const pts = isGrip ? this.GetGripPoints() : this.GetStretchPoints();\r\n this.Move(oldPts[i].sub(pts[i]));\r\n break;\r\n }\r\n }\r\n this._SweepArcBoardBuild = undefined;\r\n }\r\n }\r\n\r\n private GetOffsetVecAlongPath(oldP: Vector3, vec: Vector3, path: Polyline): Vector3\r\n {\r\n const p = oldP.clone().add(vec);//拉伸后的点 在世界坐标系中\r\n\r\n const path2WCSMtx = new Matrix4().makeBasis(XAxis, ZAxis, YAxisN);\r\n if (this._SweepAngle !== 0)\r\n path2WCSMtx.premultiply(this.ArcBuild.Rotate2OCSMtx);\r\n path2WCSMtx.premultiply(this.OCSNoClone);\r\n const wcs2PathMtx = new Matrix4().getInverse(path2WCSMtx);\r\n this._jigPath2WCSMtx = path2WCSMtx.clone();\r\n\r\n //变换到路径坐标系\r\n p.applyMatrix4(wcs2PathMtx);\r\n oldP.applyMatrix4(wcs2PathMtx);\r\n\r\n // 限制p, 在见光面的曲面中,计算偏移向量\r\n const cp = path.GetClosestPointTo(p, true);\r\n\r\n const oldZ = oldP.z;\r\n const newZ = p.z;\r\n\r\n const oldPCp = path.GetClosestPointTo(oldP.setZ(0), false);//旧的最近点\r\n const oldDist = path.GetDistAtPoint2(oldPCp);// 移动前的Dist\r\n const movedDist = path.GetDistAtPoint2(cp);// 移动后的Dist\r\n\r\n const moveVec = new Vector3(movedDist - oldDist, - newZ + oldZ, 0);\r\n\r\n //将moveVec转换到世界坐标系\r\n if (this._SweepAngle !== 0)\r\n TransformVector(moveVec, this.ArcBuild.Rotate2OCSMtx);\r\n TransformVector(moveVec, this.OCSNoClone);\r\n\r\n return moveVec;\r\n }\r\n\r\n /**\r\n * @private 通过新旧轮廓的Bondingbox修正路径\r\n * @param {Box3Ext} newBox 路径坐标系下,新轮廓的Bondingbox\r\n * @param {Box3Ext} oldBox 路径坐标系下,旧轮廓的Bondingbox\r\n * @param {Polyline} path 见光面路径\r\n * @return {*} {Polyline} 修正好的路径\r\n */\r\n private FixSweepPathByContourBondingbox(newBox: Box3Ext, oldBox: Box3Ext, path: Polyline): Polyline\r\n {\r\n // 若头部和尾部重合,则直接不处理\r\n if (equaln(newBox.min.x, newBox.max.x, 0.1))\r\n return;\r\n\r\n const GetArcAndKeys = (): { key: number, arc: Arc; }[] =>\r\n {\r\n const curves = path.Explode();\r\n const arcs: { key: number, arc: Arc; }[] = [];\r\n for (let i = 0; i < curves.length; i++)\r\n if (curves[i] instanceof Arc)\r\n arcs.push({ key: i, arc: curves[i].Clone() as Arc });\r\n return arcs;\r\n };\r\n const arcKeys = GetArcAndKeys();\r\n\r\n const MovePath = (pathToMove: Polyline, mVec: Vector3) =>\r\n {\r\n // 修正SWeepPath\r\n pathToMove.Move(mVec);\r\n const { pts: pathPts, buls } = pathToMove.MatrixAlignTo2(new Matrix4);\r\n pathToMove.OCSNoClone.identity();\r\n for (let i = 0; i < pathToMove.LineData.length; i++)\r\n {\r\n pathToMove.LineData[i].pt.copy(pathPts[i]);\r\n pathToMove.LineData[i].bul = buls[i];\r\n }\r\n };\r\n\r\n let jigSpt: Vector3 = undefined;\r\n const FixHead = () =>\r\n {\r\n if (!equaln(newBox.min.x, 0, 1e-3)) // 头部\r\n {\r\n const c1 = path.GetCurveAtIndex(0);\r\n if (newBox.min.x < 0)\r\n path.Extend(newBox.min.x / c1.Length); // 延伸\r\n else\r\n path = path.GetSplitCurves(path.GetParamAtDist(newBox.min.x))[1]; // 裁剪\r\n\r\n jigSpt = path.StartPoint.clone();\r\n MovePath(path, path.StartPoint.clone().negate());// 修正Path\r\n }\r\n };\r\n\r\n const FixTail = () =>\r\n {\r\n if (!equaln(newBox.max.x, oldBox.max.x, 1e-3)) // 尾部\r\n {\r\n const dist = newBox.max.x - oldBox.max.x;\r\n const ce = path.GetCurveAtIndex(path.EndParam - 1);\r\n if (dist > 0)\r\n path.Extend(path.EndParam + ((dist) / ce.Length)); // 延伸\r\n else\r\n path = path.GetSplitCurves(path.GetParamAtDist(newBox.max.x - newBox.min.x))[0]; // 裁剪, PS: 从尾部点拉伸到头部点之前,newBox.min.x不为零\r\n }\r\n };\r\n\r\n /**\r\n * 某些异形板左侧头部拉伸到尾部后面示意图:\r\n * ___________\r\n * A | |\r\n * |_______ |\r\n * | |\r\n * old B |___|\r\n * _____\r\n * | | A\r\n * ___|_____|\r\n * | |\r\n * new B |___|\r\n */\r\n const outofTail = newBox.min.x >= oldBox.max.x\r\n || equaln(newBox.min.x, oldBox.max.x, 1e-3) // 矩形板:拉伸后,新板头和旧板尾部相同\r\n || newBox.min.x > oldBox.min.x && newBox.max.x > oldBox.max.x; // 某些异形板:新板头会在旧板中间某处,新板尾超过旧版尾\r\n if (outofTail)\r\n {\r\n // 头部拉伸在超过尾部,即新头部大于等于原尾部。则先对尾部延伸,再裁剪头部(若先裁剪头部,则path可能会为空)\r\n FixTail();\r\n FixHead();\r\n } else\r\n {\r\n FixHead();\r\n FixTail();\r\n }\r\n\r\n // 计算 this._SweepPath\r\n let sweepPath = undefined;\r\n if (this._SweepVisibleFace === FaceDirection.Back)\r\n {\r\n sweepPath = path;\r\n // 做offset偏移,查看path是否会被裁剪。若被裁剪,会破坏板和路径的映射关系,则不能继续其他操作\r\n if (this.objectId || (this.IsEmbedEntity && this.ParentEntity.objectId))\r\n {\r\n const frontPath = ArcBoardBuild.OffsetPolyline(sweepPath, -this.thickness); // 正面path\r\n const backPath = ArcBoardBuild.OffsetPolyline(frontPath, this.thickness); // 背面path\r\n if (!equaln(backPath.Length, sweepPath.Length, 1e-3))\r\n return;\r\n }\r\n }\r\n else\r\n {\r\n sweepPath = ArcBoardBuild.OffsetPolyline(path, this.thickness);\r\n // 做offset偏移,查看path是否会被裁剪。若被裁剪,会破坏板和路径的映射关系,则不能继续其他操作\r\n if (this.objectId || (this.IsEmbedEntity && this.ParentEntity.objectId))\r\n {\r\n const frontPath = ArcBoardBuild.OffsetPolyline(sweepPath, -this.thickness);// 正面path\r\n if (!equaln(frontPath.Length, path.Length, 1e-3))\r\n return;\r\n }\r\n }\r\n this._SweepPath = sweepPath;\r\n\r\n this._jigSweepPath = path.Clone();\r\n if (jigSpt)\r\n MovePath(this._jigSweepPath, jigSpt);// 新路径,但是未进行起始点偏移。方便拖拽时,实时显示当前路径\r\n\r\n // 更新圆弧配置\r\n if (this.objectId || (this.IsEmbedEntity && this.ParentEntity.objectId))\r\n this.UpdateArcBoardOptionsByPath(arcKeys, this._jigSweepPath);\r\n\r\n return path;\r\n }\r\n\r\n DeferUpdate()\r\n {\r\n if (this.NeedUpdateFlag & UpdateDraw.Matrix)\r\n {\r\n if (this.RelativeHardware.some(id => !id.IsErase))\r\n this.NeedUpdateFlag |= UpdateDraw.Geometry;\r\n }\r\n super.DeferUpdate();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n if (ver < 6)\r\n this._SpaceOCS.fromArray(file.Read());\r\n this._BoardType = file.Read();\r\n this._Name = file.Read();\r\n //兼容旧版本\r\n if (ver > 2)\r\n {\r\n deserializationBoardData(file, this._BoardProcessOption, ver);\r\n }\r\n else\r\n {\r\n let opt = file.Read();\r\n this._BoardProcessOption = Object.assign(this._BoardProcessOption,\r\n typeof opt === \"string\" ? JSON.parse(opt) : opt);\r\n }\r\n\r\n //读取排钻列表\r\n this._DrillList.clear();\r\n let size = file.Read();\r\n\r\n //没有与任何板件关联的排钻\r\n let noRelevancyDrillings: ObjectId[][] = [];\r\n for (let i = 0; i < size; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let drIdList: ObjectId[][] = [];\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let drIDs: ObjectIdArr = [];\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\r\n if (ver > 21)\r\n drIDs.Name = file.Read();\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.Clear2DPathCache();\r\n this.Clear3DPathCache();\r\n\r\n if (ver > 10)\r\n this._CustomNumber = file.Read();\r\n else\r\n this._CustomNumber = null;\r\n\r\n this._KnifePolylineMap.clear();\r\n if (ver > 11)\r\n {\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let id = file.Read();\r\n let pl = file.ReadObject() as Polyline;\r\n this._KnifePolylineMap.set(id, pl);\r\n }\r\n }\r\n\r\n // if (this.width === 0 || this.height === 0) //板件变成0长度,无法绘制\r\n // this._isErase = true;\r\n\r\n if (ver > 12)\r\n {\r\n let count = file.Read();\r\n this.RelativeHandle.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.RelativeHandle.push(objId);\r\n }\r\n }\r\n\r\n const processData = this._BoardProcessOption;\r\n if (ver > 13)\r\n {\r\n processData.edgeRemarkUp = file.Read();\r\n processData.edgeRemarkDown = file.Read();\r\n processData.edgeRemarkLeft = file.Read();\r\n processData.edgeRemarkRight = file.Read();\r\n let count = file.Read();\r\n processData.highBoardEdgeRemark.length = 0;\r\n processData.highBoardEdgeRemark = file.ReadArray(count);\r\n }\r\n\r\n this._DrillAssociationLock.clear();\r\n if (ver > 14)\r\n {\r\n this._DrillLock = file.Read();\r\n\r\n //读取关联排钻锁映射\r\n const size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n const id = file.ReadObjectId();\r\n if (id)\r\n this._DrillAssociationLock.add(id);\r\n }\r\n }\r\n\r\n if (ver > 15)\r\n {\r\n this._SweepPath = file.ReadObject();\r\n if (this._SweepPath)\r\n {\r\n this._SweepAngle = file.Read();\r\n if (ver > 16)\r\n this._SweepVisibleFace = file.Read();\r\n if (ver > 17)\r\n this._isDrawArcGroove = file.Read();\r\n this._ArcBoardOptions.clear();\r\n const count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let key = file.Read();\r\n let opt: ArcBoardOptions = {\r\n arcLength: file.Read(),\r\n grooveSpacing: file.Read(),\r\n grooveWidth: file.Read(),\r\n retainedThickness: file.Read(),\r\n grooveAddDepth: file.Read(),\r\n grooveAddLength: file.Read(),\r\n grooveAddWidth: file.Read(),\r\n knifeRadius: file.Read(),\r\n arcExtension: 0,\r\n };\r\n if (ver > 18)\r\n opt.arcExtension = file.Read();\r\n this._ArcBoardOptions.set(key, opt);\r\n }\r\n }\r\n }\r\n\r\n if (ver > 19)\r\n this.AlignLineObject = file.ReadHardObjectId();\r\n\r\n if (ver > 20)\r\n DeserializationBoardSideModeingData(file, this._SideModelingMap);\r\n this.ClearSideModelingCache();\r\n\r\n if (ver > 22)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n\r\n if (ver > 23)\r\n {\r\n processData.reservedEdgeUp = file.Read();\r\n processData.reservedEdgeDown = file.Read();\r\n processData.reservedEdgeLeft = file.Read();\r\n processData.reservedEdgeRight = file.Read();\r\n let count = file.Read();\r\n processData.highReservedEdge.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let size = file.Read();\r\n processData.highReservedEdge.push({ size });\r\n }\r\n\r\n processData.sealColorUp = file.Read();\r\n processData.sealColorDown = file.Read();\r\n processData.sealColorLeft = file.Read();\r\n processData.sealColorRight = file.Read();\r\n\r\n processData.sealColorType = file.Read();\r\n }\r\n\r\n if (ver > 24)\r\n this.arcBoardFeedProcess = file.Read();\r\n }\r\n\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(25);\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 file.Write(ids.Name);\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 file.Write(this._CustomNumber);\r\n\r\n file.Write(this._KnifePolylineMap.size);\r\n for (let [id, pl] of this._KnifePolylineMap)\r\n {\r\n file.Write(id);\r\n file.WriteObject(pl);\r\n }\r\n\r\n file.Write(this.RelativeHandle.length);\r\n for (let id of this.RelativeHandle)\r\n file.WriteObjectId(id);\r\n\r\n const processData = this._BoardProcessOption;\r\n file.Write(processData.edgeRemarkUp);\r\n file.Write(processData.edgeRemarkDown);\r\n file.Write(processData.edgeRemarkLeft);\r\n file.Write(processData.edgeRemarkRight);\r\n file.Write(processData.highBoardEdgeRemark.length);\r\n for (let r of processData.highBoardEdgeRemark)\r\n {\r\n file.Write(r);\r\n }\r\n\r\n //ver>14\r\n {\r\n file.Write(this._DrillLock);\r\n const count = this._DrillAssociationLock.size;\r\n file.Write(count);\r\n for (const id of this._DrillAssociationLock)\r\n {\r\n file.WriteObjectId(id);\r\n }\r\n }\r\n\r\n //ver 16\r\n file.WriteObject(this._SweepPath);\r\n if (this._SweepPath)\r\n {\r\n file.Write(this._SweepAngle);\r\n file.Write(this._SweepVisibleFace);\r\n file.Write(this._isDrawArcGroove);\r\n file.Write(this._ArcBoardOptions.size);\r\n for (const [k, v] of this._ArcBoardOptions)\r\n {\r\n file.Write(k);\r\n file.Write(v.arcLength);\r\n file.Write(v.grooveSpacing);\r\n file.Write(v.grooveWidth);\r\n file.Write(v.retainedThickness);\r\n file.Write(v.grooveAddDepth);\r\n file.Write(v.grooveAddLength);\r\n file.Write(v.grooveAddWidth);\r\n file.Write(v.knifeRadius);\r\n file.Write(v.arcExtension);\r\n }\r\n }\r\n\r\n //ver 20\r\n file.WriteHardObjectId(this.AlignLineObject);\r\n\r\n //ver 21\r\n SerializeBoardSideModeingData(file, this._SideModelingMap);\r\n\r\n // ver 23\r\n file.WriteBool(this._LockMaterial);\r\n\r\n //ver 24\r\n file.Write(processData.reservedEdgeUp);\r\n file.Write(processData.reservedEdgeDown);\r\n file.Write(processData.reservedEdgeLeft);\r\n file.Write(processData.reservedEdgeRight);\r\n file.Write(processData.highReservedEdge.length);\r\n for (let r of processData.highReservedEdge)\r\n {\r\n file.Write(r.size);\r\n }\r\n file.Write(processData.sealColorUp);\r\n file.Write(processData.sealColorDown);\r\n file.Write(processData.sealColorLeft);\r\n file.Write(processData.sealColorRight);\r\n\r\n file.Write(processData.sealColorType);\r\n\r\n // ver 25\r\n file.Write(this.arcBoardFeedProcess);\r\n }\r\n}\r\n\r\n//解析新的板的边映射到旧板边的映射情况\r\nfunction ParseNewBr2OldBr_EdgeMap(newBr: Board, oldBr: Board, oldBrOcsInv: Matrix4): number[]\r\n{\r\n let newBrCu = newBr.ContourCurve;\r\n let oldBrCu = oldBr.ContourCurve;\r\n\r\n let indexMap: number[] = [];\r\n\r\n //矩阵对齐\r\n let m = newBr.OCS.premultiply(oldBrOcsInv);\r\n\r\n for (let i = 0; i < newBrCu.EndParam; i++)\r\n {\r\n let p = newBrCu.GetPointAtParam(i + 0.5).applyMatrix4(m);\r\n\r\n let cp = oldBrCu.GetClosestPointTo(p, false);\r\n let cparam = oldBrCu.GetParamAtPoint2(cp);\r\n indexMap.push(Math.floor(cparam));\r\n }\r\n\r\n return indexMap;\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, Geometry, Line, LineBasicMaterial, LineSegments, Matrix4, Object3D, Vector3 } from \"three\";\r\nimport { FaceDirection } from \"../Add-on/DrawDrilling/DrillType\";\r\nimport { ColorMaterial } from \"../Common/ColorPalette\";\r\nimport { MakeMirrorMtx } from \"../Common/Matrix4Utils\";\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 { Shape2 } from \"../DatabaseServices/Shape2\";\r\nimport { GetBoardContour } from \"../GraphicsSystem/CalcEdgeSealing\";\r\nimport { GetSideCuFaceMtx } from \"./Board2DModelCSG/BoardSideModelCSGBuilder\";\r\nimport { MatrixIsIdentityCS, MoveMatrix, ZAxis } 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 if (br instanceof Board && br.HasSideModel)\r\n {\r\n let con = GetBoardContour(br);\r\n if (con)\r\n {\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n const mirrorMtxZ = MakeMirrorMtx(ZAxis);\r\n\r\n for (let [index, soilds] of br.SideModelingMap)\r\n {\r\n let cu = cus[index];\r\n if (!cu) continue;\r\n\r\n let mt4 = GetSideCuFaceMtx(cus[index], inverseZ);\r\n for (let soild of soilds)\r\n {\r\n let lines = FastWireframe(soild, color, 3, false);\r\n for (let line of lines)\r\n {\r\n line.applyMatrix4(mirrorMtxZ);\r\n line.applyMatrix4(soild.OCSNoClone);\r\n line.applyMatrix4(mt4);\r\n result.push(line);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function FastExtrudeEdgeGeometryOfShape(shape: Shape2, z0: number, z1: number, divCount = 6, optArc = true, coords: number[] = [])\r\n{\r\n let ptss = [shape.getPoints(divCount, optArc)];\r\n for (let hole of shape.holes)\r\n ptss.push((hole as Shape2).getPoints(divCount, optArc));\r\n\r\n for (let pts of ptss)\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, z0, nextp.x, nextp.y, z0);\r\n //顶面\r\n coords.push(p.x, p.y, z1, nextp.x, nextp.y, z1);\r\n\r\n if (p[\"_mask_\"])//侧面\r\n coords.push(p.x, p.y, z0, p.x, p.y, z1);\r\n }\r\n\r\n return coords;\r\n}\r\n\r\nlet tempP = new Vector3;\r\n//这个代码天生不和Mesh对齐,因为独立坐标系的原因,槽的坐标系可能和主题的坐标系不一致导致的\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 { ExtrudeBufferGeometry, UVGenerator, Vector2 } from \"three\";\r\n\r\n//https://github.com/mrdoob/three.js/blob/master/src/geometries/ExtrudeGeometry.js#L727\r\nclass WorldUVGenerator implements UVGenerator\r\n{\r\n generateTopUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number)\r\n {\r\n const a_x = vertices[indexA * 3];\r\n const a_y = vertices[indexA * 3 + 1];\r\n const b_x = vertices[indexB * 3];\r\n const b_y = vertices[indexB * 3 + 1];\r\n const c_x = vertices[indexC * 3];\r\n const 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\r\n generateSideWallUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number, indexD: number)\r\n {\r\n const a_x = vertices[indexA * 3];\r\n const a_y = vertices[indexA * 3 + 1];\r\n const a_z = vertices[indexA * 3 + 2];\r\n const b_x = vertices[indexB * 3];\r\n const b_y = vertices[indexB * 3 + 1];\r\n const b_z = vertices[indexB * 3 + 2];\r\n const c_x = vertices[indexC * 3];\r\n const c_y = vertices[indexC * 3 + 1];\r\n const c_z = vertices[indexC * 3 + 2];\r\n const d_x = vertices[indexD * 3];\r\n const d_y = vertices[indexD * 3 + 1];\r\n const d_z = vertices[indexD * 3 + 2];\r\n\r\n if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x))\r\n {\r\n return [\r\n new Vector2(a_x, 1 - a_z),\r\n new Vector2(b_x, 1 - b_z),\r\n new Vector2(c_x, 1 - c_z),\r\n new Vector2(d_x, 1 - d_z)\r\n ];\r\n }\r\n else\r\n {\r\n return [\r\n new Vector2(a_y, 1 - a_z),\r\n new Vector2(b_y, 1 - b_z),\r\n new Vector2(c_y, 1 - c_z),\r\n new Vector2(d_y, 1 - d_z)\r\n ];\r\n }\r\n }\r\n}\r\n\r\nexport const worldUVGenerator = new WorldUVGenerator();\r\n","import { BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, FrontSide, 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, ZeroVec, equaln, equalv2, equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { GenerateExtrudeEdgeGeometry } from \"../../Geometry/SimpleExtrudeEdgeGeometry\";\r\nimport { ScaleUV } from \"../../Geometry/UVUtils\";\r\nimport { worldUVGenerator } from \"../../Geometry/WordUVGenerator\";\r\nimport { ColorInTransparent, RenderState, 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 { Circle } from \"../Entity/Circle\";\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 { GangDrillType } from \"./CylinderHole\";\r\nimport { Hole } from \"./Hole\";\r\n\r\n@Factory\r\nexport class ExtrudeHole extends Hole\r\n{\r\n private _DisplayAccuracy = 0;\r\n private _contourCurve: ExtrudeContourCurve = new Polyline();\r\n private _EdgeGeometry: BufferGeometry;\r\n protected _knifeRadius: number = 3;\r\n private _GoodsId: string = \"\";\r\n private _GoodsSn: string = \"\";\r\n @AutoRecord isHole = true;\r\n @AutoRecord isThrough = false;\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\r\n get GoodsId(): string\r\n {\r\n return this._GoodsId;\r\n }\r\n set GoodsId(value: string)\r\n {\r\n if (this._GoodsId !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._GoodsId = value;\r\n }\r\n }\r\n\r\n get GoodsSn(): string\r\n {\r\n return this._GoodsSn;\r\n }\r\n set GoodsSn(value: string)\r\n {\r\n if (this._GoodsSn !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._GoodsSn = value;\r\n }\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 if (this._contourCurve instanceof Circle)\r\n return this.GetGripPoints();\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 DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\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 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 UVGenerator: worldUVGenerator,\r\n };\r\n if (this.ContourCurve instanceof Circle || this.ContourCurve instanceof Polyline)\r\n {\r\n this.ContourCurve.DisplayAccuracy = this._DisplayAccuracy;\r\n }\r\n let geo = new ExtrudeGeometry(this.ContourCurve.Shape, extrudeSettings);\r\n geo.applyMatrix4(this._contourCurve.OCSNoClone);\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.OCSNoClone); });\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.GetFirstDeriv(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)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex));\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.DrawColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n // 概念透明\r\n else if (renderType === RenderType.ConceptualTransparent)\r\n {\r\n let color = this.DrawColorIndex;\r\n if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) color = 8;\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\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 new Object3D().add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())\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)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex);\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.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 else if (renderType === RenderType.Conceptual)\r\n {\r\n obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n // 概念透明\r\n else if (renderType === RenderType.ConceptualTransparent)\r\n {\r\n let color = this.DrawColorIndex;\r\n if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) color = 8;\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Jig)\r\n obj.add(...FastWireframe2(this));\r\n\r\n return obj;\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex);\r\n }\r\n // 概念透明\r\n else if (renderType === RenderType.ConceptualTransparent)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n let color = this.DrawColorIndex;\r\n if (RenderState.ConceptualColor === ColorInTransparent.灰度单色) color = 8;\r\n mesh.material = ColorMaterial.GetConceptualTransparentMaterial(color, FrontSide);\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.Physical2)\r\n {\r\n let mesh = obj.children[0] 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.DrawColorIndex);\r\n }\r\n }\r\n\r\n ClearDraw(): this\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 return super.ClearDraw();\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\r\n if (ver > 3)\r\n this.type = file.Read();\r\n else\r\n this.type = GangDrillType.Ljg;\r\n\r\n //回退版本5弃用\r\n if (ver > 4)\r\n {\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n file.ReadSoftObjectId();\r\n }\r\n\r\n if (ver > 5)\r\n {\r\n this._GoodsId = file.Read();\r\n this._GoodsSn = file.Read();\r\n }\r\n\r\n if (ver > 6)\r\n {\r\n this._DisplayAccuracy = 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(7);\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 file.Write(this.type);\r\n\r\n //ver = 5 弃用\r\n file.Write(0);\r\n\r\n //ver = 6\r\n file.Write(this._GoodsId);\r\n file.Write(this._GoodsSn);\r\n\r\n //ver = 7\r\n file.Write(this._DisplayAccuracy);\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 ((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\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 ChangePlListStartPt(plList);\r\n //对多段线进行排序,按最起始点远近排序\r\n SortPlByStartPt(plList);\r\n\r\n let result: Polyline[] = [];\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 j = 0; j < cuPtsBul.pts.length; j++)\r\n {\r\n //坐标系对齐\r\n let p = cuPtsBul.pts[j];\r\n p.copy(AsVector2(AsVector3(p).applyMatrix4(alMat)));\r\n firstPl.LineData.push({ pt: p, bul: cuPtsBul.buls[j] });\r\n }\r\n }\r\n }\r\n result.push(firstPl);\r\n\r\n for (let pl of result)\r\n pl.RemoveRepeatPos(1e-3);\r\n\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)\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, rectInfo: IRectInfo, dist: number)\r\n{\r\n if (!rectInfo || equaln(dist, 0)) return;\r\n\r\n let box = rectInfo.box;\r\n let size = rectInfo.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(rectInfo.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(rectInfo.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(rectInfo.OCS);\r\n }\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline, IsRect, MergeCurvelist, equalCurve } from \"../../Common/CurveUtils\";\r\nimport { LogEnable } from \"../../Common/Log\";\r\nimport { MakeMirrorMtx } from \"../../Common/Matrix4Utils\";\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, ExtrudeSolid } 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 { GetSideCuFaceMtx } from \"../../Geometry/Board2DModelCSG/BoardSideModelCSGBuilder\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { Route } from \"../../Geometry/CurveMap\";\r\nimport { ParseBoardSideFace } from \"../../Geometry/DrillParse/BoardGetFace\";\r\nimport { CanDrawHoleFuzz } from \"../../Geometry/DrillParse/CanDrawHoleFuzz\";\r\nimport { AsVector2, ZAxis, equaln, isParallelTo } from \"../../Geometry/GeUtils\";\r\nimport { RegionParse } from \"../../Geometry/RegionParse\";\r\nimport { FixIndex } from \"../../Nest/Common/Util\";\r\nimport { ConverToPtsBul } from \"../../Production/Convert2PtsBul\";\r\nimport { IOriginSideModelingData, ModelType, ParseArcBoardHoles } from \"../../Production/Product\";\r\nimport { BoolOpeartionType, isTargetCurInOrOnSourceCur } from \"../BoolOperateUtils\";\r\nimport { GetBoardContour } from \"../CalcEdgeSealing\";\r\nimport { IntersectOption } from \"../IntersectWith\";\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, redundancyKnif = 0): 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 let hasRedK = false;\r\n if ((!isOut || offsetDist >= knifRadius) && rectInfo)\r\n {\r\n hasRedK = true;\r\n offsetDist += knifRadius * 2 - redundancyKnif;\r\n }\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 && offsetDist > knifRadius)\r\n {\r\n const rectMinLengthHalf = Math.min(rectInfo.size.x, rectInfo.size.y) / 2;\r\n //如果最后一个矩形最小边区间一半小于刀半径减去冗余值的一半,则偏移到中心处切一次\r\n if (!equaln(offsetDist, rectMinLengthHalf, 1e-5) && offsetDist - rectMinLengthHalf - 1e-5 < knifRadius - redundancyKnif / 2)\r\n {\r\n retCus.push(...GetOffsetCurves(outline, rectMinLengthHalf * dir, rectInfo));\r\n }\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 =>\r\n {\r\n let ipts = h.Curve.IntersectWith2(c, 0);\r\n return ipts.length > 0 || h.ContainerCurve(c, false, ipts);\r\n });\r\n\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\r\n //testcode\r\n // let reg = new Region(shapeMg).Clone();\r\n // let reg2 = new Region(holesMg).Clone();\r\n // TestDraw(reg, 1);\r\n // TestDraw(reg2, 2);\r\n\r\n shapeMg.BoolOper(holesMg, BoolOpeartionType.Subtract);\r\n\r\n // let reg3 = new Region(shapeMg).Clone();\r\n // TestDraw(reg3, 3);\r\n\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, rk = 0)\r\n {\r\n let modelings = br.BoardModeling;\r\n let { modeling } = GetModelingFromCustomDrill(br);\r\n modelings.push(...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 (m.shape.Holes.length === 0 && 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, rk);\r\n }\r\n\r\n /**\r\n * 计算走刀路径\r\n */\r\n CalcPath(modelings: IModeling[], br: Board, rk = 0): 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, rk));\r\n }\r\n return cus;\r\n }\r\n\r\n //获取造型走刀\r\n GetModelFeedPath(br: { Thickness: number, ContourCurve: ExtrudeContourCurve; }, modeling: IModeling, redundancyKnif = 0): 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 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, redundancyKnif);\r\n if (offsetCus.length > 1)\r\n cus.push(...OptimizeToolPath(offsetCus, shape, knifeRadius));\r\n }\r\n return cus;\r\n }\r\n\r\n //获取侧面造型走刀\r\n GetSideModelFeedPath(solid: ExtrudeSolid, faceContour: Polyline, redundancyKnif = 0): Curve[]\r\n {\r\n let cus: Curve[] = [];//返回走刀路径\r\n\r\n let shape = solid.Shape;\r\n let thickness = solid.Thickness;\r\n let knifeRadius = solid.KnifeRadius;\r\n let addLen = solid.GroovesAddLength;\r\n let addDepth = solid.GroovesAddDepth;\r\n let addWidth = solid.GroovesAddWidth;\r\n\r\n if (!knifeRadius) knifeRadius = 3;\r\n\r\n if (addDepth)\r\n thickness += addDepth;\r\n\r\n if (thickness < 1e-5) return cus;\r\n shape = shape.Clone().ApplyMatrix(solid.OCSNoClone);\r\n shape.Z0();\r\n this.GrooveAddSize(shape, addLen, addWidth);\r\n this.HandleThoughGroove(faceContour, shape, knifeRadius);\r\n\r\n //造型半径和刀半径相等,返回重合点的线\r\n let outline = shape.Outline.Curve;\r\n if (outline instanceof Circle && equaln(outline.Radius, knifeRadius))\r\n return [new Polyline([{ pt: AsVector2(outline.Center), bul: 0 }, { pt: AsVector2(outline.Center), bul: 0 }])];\r\n\r\n // {\r\n // todo 全深槽\r\n // }\r\n\r\n let offsetCus = this.HandleShape(shape, knifeRadius, true, redundancyKnif);\r\n if (offsetCus.length > 1)\r\n cus.push(...OptimizeToolPath(offsetCus, shape, knifeRadius));\r\n\r\n return cus;\r\n }\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 //addWidth可能为undefined 导致box计算错误\r\n let length = addLen ?? 0;\r\n let width = addWidth ?? 0;\r\n\r\n //若是矩形,应用槽加长\r\n if (length != 0 || width != 0)\r\n {\r\n let rectInfo = IsRect(shape.Outline.Curve);\r\n if (rectInfo)\r\n {\r\n let box = rectInfo.box;\r\n let size = rectInfo.size;\r\n if (size.x > size.y)\r\n {\r\n box.max.add(new Vector3(length / 2, width / 2));\r\n box.min.add(new Vector3(-length / 2, -width / 2));\r\n }\r\n else\r\n {\r\n box.max.add(new Vector3(width / 2, length / 2));\r\n box.min.add(new Vector3(-width / 2, -length / 2));\r\n }\r\n let pl = new Polyline().RectangleFrom2Pt(box.min, box.max).ApplyMatrix(rectInfo.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 //检查正反面造型\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 (m.shape.Holes.length === 0 && 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\r\n //检查侧面造型\r\n CheckSideModeling(br: Board)\r\n {\r\n let allSideModelGrooveMap = br.AllSideModelGrooveMap;\r\n if (!allSideModelGrooveMap?.size) return [];\r\n\r\n let errorSideModel: ExtrudeSolid[] = [];\r\n\r\n let faces = new ParseBoardSideFace(br);\r\n\r\n let con = GetBoardContour(br);\r\n if (!con) return errorSideModel;\r\n\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n const mirrorMtxZ = MakeMirrorMtx(ZAxis);\r\n\r\n for (let [n, solids] of allSideModelGrooveMap)\r\n {\r\n let faceContour = faces.Faces[n].Region.ShapeManager.ShapeList[0].Outline.Curve as Polyline;\r\n let mt4 = GetSideCuFaceMtx(cus[n], inverseZ);\r\n\r\n for (let solid of solids)\r\n {\r\n // 圆造型拆成孔\r\n // let cu = solid.Shape.Outline.Curve;\r\n // if (!solid.Shape.Holes.length && cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n // continue;\r\n\r\n let paths = this.GetSideModelFeedPath(solid, faceContour);//走刀路径\r\n if (!paths.length)\r\n {\r\n let s = solid.Clone();\r\n s.ApplyMatrix(mirrorMtxZ);\r\n s.ApplyMatrix(mt4);\r\n s.ApplyMatrix(br.OCS);\r\n errorSideModel.push(s);\r\n }\r\n }\r\n }\r\n return errorSideModel;\r\n }\r\n\r\n CheckCustomHole(br: Board)\r\n {\r\n let { modeling } = GetModelingFromCustomDrill(br);\r\n\r\n let errHoles: ExtrudeHole[] = [];\r\n\r\n for (let m of modeling)\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (m.shape.Holes.length === 0 && 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\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 let param = brCon.GetParamAtPoint(mp);\r\n\r\n let curveOnContour = false;\r\n if (brCon.ParamOnCurve(param))\r\n {\r\n //#I7MYN9 在长的槽里面,我们防止它加长,短的槽就无所谓了\r\n if (c.Length > 100)\r\n {\r\n let curve = (brCon as Polyline).GetCurveAtParam(param);\r\n curveOnContour = curve.PtOnCurve(c.GetPointAtParam(0.2), 0.1) && curve.PtOnCurve(c.GetPointAtParam(0.8), 0.1);\r\n }\r\n else\r\n curveOnContour = true;\r\n }\r\n\r\n if (curveOnContour)\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\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\n\r\nexport function GetModelingFromCustomDrill(br: Board)\r\n{\r\n let normal = br.Normal;\r\n let brInv = br.OCSInv;\r\n let originOutline = GetBoardContour(br) as Polyline;\r\n let outline = originOutline;\r\n\r\n let modeling: (IModeling & { originEn: ExtrudeHole; })[] = [];\r\n let sideModeling: IOriginSideModelingData[] = [];\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 if (br.IsArcBoard && br.DrillList.size)\r\n ParseArcBoardHoles(br, new Vector3);\r\n\r\n const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption;\r\n\r\n for (let [objetId, idss] of br.DrillList)\r\n {\r\n let linkBoard = objetId?.Object as Board;\r\n if (cancelHoleProcessing && linkBoard)\r\n {\r\n const [L, W, H] = [linkBoard.BoardProcessOption.spliteHeight, linkBoard.BoardProcessOption.spliteWidth, linkBoard.BoardProcessOption.spliteThickness];\r\n if ((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H))\r\n continue;\r\n }\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)\r\n continue;\r\n\r\n let hole = id.Object;\r\n\r\n if (hole instanceof ExtrudeHole && hole.isHole)\r\n {\r\n if (!(hole.ContourCurve instanceof Circle))\r\n {\r\n hole[\"__CacheChaiDanName__\"] = ids.Name;\r\n if (br.IsArcBoard)\r\n {\r\n let ocs = hole[\"__CacheBrOCS__\"];\r\n if (!ocs) continue;\r\n\r\n brInv = new Matrix4().getInverse(ocs);\r\n let holeBox = hole.GetBoundingBoxInMtx(brInv);\r\n holeBoxMap.set(hole, holeBox);\r\n if (hole.BoundingBox.clone().intersect(br.BoundingBox).isSolid(0.1))\r\n holes.push(hole);\r\n }\r\n else\r\n {\r\n let holeBox = hole.GetBoundingBoxInMtx(brInv);\r\n holeBoxMap.set(hole, holeBox);\r\n if (holeBox.clone().intersect(bbox).isSolid(0.1))\r\n holes.push(hole);\r\n }\r\n continue;\r\n }\r\n }\r\n\r\n hole[\"__CacheAddPos__\"] = undefined;\r\n hole[\"__CacheBrOCS__\"] = undefined;\r\n hole[\"__CacheContour__\"] = undefined;\r\n }\r\n }\r\n }\r\n\r\n\r\n for (let hole of holes)\r\n {\r\n let box = holeBoxMap.get(hole);\r\n let max = box.max;\r\n let min = box.min;\r\n let dir: FaceDirection;\r\n let shape = hole.Shape;\r\n\r\n let faceRegions: Polyline[];\r\n let faceRegionsBox: Box3;\r\n let addPos: Vector3;\r\n\r\n let chaiDanName: string = hole[\"__CacheChaiDanName__\"];\r\n hole[\"__CacheChaiDanName__\"] = undefined;\r\n\r\n if (br.IsArcBoard)\r\n {\r\n addPos = hole[\"__CacheAddPos__\"];\r\n faceRegions = hole[\"__CacheContour__\"];\r\n let ocs = hole[\"__CacheBrOCS__\"];\r\n\r\n hole[\"__CacheAddPos__\"] = undefined;\r\n hole[\"__CacheBrOCS__\"] = undefined;\r\n hole[\"__CacheContour__\"] = undefined;\r\n\r\n if (!ocs || !addPos || !faceRegions?.length)\r\n return;\r\n else\r\n {\r\n brInv = new Matrix4().getInverse(ocs);\r\n normal = new Vector3().setFromMatrixColumn(ocs, 2);\r\n\r\n faceRegionsBox = new Box3();\r\n for (let pl of faceRegions)\r\n faceRegionsBox.union(pl.BoundingBox);\r\n\r\n let boxSize = faceRegionsBox.getSize(new Vector3);\r\n let extrude = Board.CreateBoard(boxSize.y, boxSize.x, 1);\r\n outline = extrude.ContourCurve as Polyline;\r\n }\r\n }\r\n\r\n let diff = brInv.clone().multiply(hole.OCS);\r\n shape.ApplyMatrix(diff);\r\n let thickness: number;\r\n if (isParallelTo(normal, hole.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 - CanDrawHoleFuzz)\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 < CanDrawHoleFuzz)\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 if (br.IsArcBoard)\r\n {\r\n //弧形板需要单独增加差值\r\n shape.Position = shape.Position.add(addPos);\r\n\r\n if (br.SweepAngle)\r\n {\r\n let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx);\r\n shape.ApplyMatrix(ocsInv);\r\n }\r\n }\r\n\r\n modeling.push({\r\n shape,\r\n thickness,\r\n dir,\r\n knifeRadius: hole.KnifeRadius,\r\n addLen: 0,\r\n addDepth: 0,\r\n addWidth: 0,\r\n originEn: hole,\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 = hole.Position.applyMatrix4(brInv).setZ(0);\r\n // 有可能Z向量朝向轮廓内部\r\n // if (outline.PtOnCurve(spt)) continue;\r\n\r\n let line = new Line(spt, hole.Position.add(hole.Normal.multiplyScalar(hole.Height)).applyMatrix4(brInv).setZ(0));\r\n let pt = outline.IntersectWith(line, IntersectOption.ExtendNone, 1e-5)[0];\r\n if (!pt) continue;\r\n\r\n let thickness = 0;\r\n for (let p of [line.StartPoint, line.EndPoint])\r\n {\r\n if (outline.PtInCurve(p))\r\n {\r\n thickness = p.distanceTo(pt);\r\n break;\r\n }\r\n }\r\n\r\n //漏网之鱼 过滤掉不在板内的排钻 :677计算的弧形板包围盒不准确导致\r\n if (thickness < 1e-3) continue;\r\n\r\n let index = Math.floor(outline.GetParamAtPoint(pt));\r\n\r\n let vec = line.GetFirstDeriv(0).normalize().multiplyScalar(thickness);\r\n shape.Position = shape.Position.add(vec);\r\n\r\n if (br.IsArcBoard)\r\n {\r\n //弧形板需要单独增加差值\r\n shape.Position = shape.Position.add(addPos);\r\n pt = pt.add(addPos);\r\n\r\n if (br.SweepAngle)\r\n {\r\n let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx);\r\n pt.applyMatrix4(ocsInv);\r\n shape.ApplyMatrix(ocsInv);\r\n }\r\n }\r\n\r\n if (br.IsArcBoard)\r\n {\r\n //侧面造型仅在多段线直线上\r\n //因为侧面造型起点特殊性 要处理一下\r\n index = Math.floor(originOutline.GetParamAtPoint(pt));\r\n let cu = originOutline.GetCurveAtIndex(index);\r\n\r\n if (cu)\r\n shape.ApplyMatrix(new Matrix4().getInverse(GetSideCuFaceMtx(cu)));\r\n else\r\n {\r\n console.error(\"圆弧板非圆侧孔求交失败\");\r\n continue;\r\n }\r\n }\r\n else\r\n {\r\n let cu = outline.GetCurveAtIndex(index);\r\n shape.ApplyMatrix(new Matrix4().getInverse(GetSideCuFaceMtx(cu)));\r\n }\r\n\r\n sideModeling.push({\r\n outline: ConverToPtsBul(shape.Outline.Curve, false),\r\n holes: shape.Holes.map((cu) => ConverToPtsBul(cu.Curve, false)),\r\n thickness,\r\n dir: index,\r\n knifeRadius: hole.KnifeRadius,\r\n addLen: 0,\r\n addDepth: 0,\r\n addWidth: 0,\r\n chaiDanName,\r\n modelType: ModelType.drill\r\n });\r\n }\r\n }\r\n\r\n return { modeling, sideModeling };\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.GetFirstDeriv(1).multiplyScalar(100)), curP.clone());\r\n }\r\n if (c2 instanceof Arc)\r\n c2 = new Line(curP.clone(), curP.clone().add(c2.GetFirstDeriv(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 let derv1 = c1.GetFirstDeriv(0).normalize();\r\n let derv2 = c2.GetFirstDeriv(0).normalize();\r\n //圆弧与直线相切,此时不要提刀\r\n if (isParallelTo(derv1, derv2, 1e-6)) continue;\r\n\r\n //计算提刀部分:\r\n //向量与平分线,参照倒角代码\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 { Vector2 } from \"three\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\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 { IContourData } from \"../Production/Convert2PtsBul\";\r\nimport { AsVector2, equaln, equalv2 } from \"./GeUtils\";\r\n\r\n/**\r\n * 转换成多段线点表,并且将圆弧打断(大于1/4的话) API仅用于开料生产\r\n * @param cu 多段线或者圆弧\r\n * @param [isOutline=true] 如果为外部轮廓,则将其转换为逆时针\r\n * @param [isSplite=true] 如果为true,则对大圆弧进行切割\r\n * @returns 点表+凸度表\r\n */\r\nexport function ConverToPolylineAndSplitArc(cu: Polyline | Circle, isOutline = true, isSplite = true): IContourData\r\n{\r\n let ptsBuls: { pts: Vector2[]; buls: number[]; };\r\n if (cu instanceof Circle)\r\n {\r\n let pl = ConverCircleToPolyline(cu);\r\n ptsBuls = pl.PtsBuls;\r\n }\r\n else\r\n {\r\n if (isOutline && cu.IsClose && cu.Normal.z * cu.Area2 < 0)\r\n cu.Reverse();\r\n if (isSplite)\r\n ptsBuls = SplitePolylineAtArc(cu);\r\n else\r\n ptsBuls = cu.PtsBuls;\r\n }\r\n let ocs = cu.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\nfunction ConverCircleToPolyline(cir: Circle): Polyline\r\n{\r\n let arcs = cir.GetSplitCurves([0, 0.25, 0.5, 0.75]);\r\n let pl = new Polyline();\r\n pl.OCS = cir.OCSNoClone;\r\n for (let arc of arcs)\r\n pl.Join(arc);\r\n return pl;\r\n}\r\n\r\nconst SPLITBUL = Math.tan(Math.PI / 8);\r\nfunction GetSpliteCount(allAngle: number)\r\n{\r\n return Math.ceil(Math.abs(allAngle) / Math.PI * 2);\r\n}\r\n\r\n/** 打断多段线超过1/4圆的圆弧*/\r\nfunction SplitePolylineAtArc(cu: Polyline): IContourData\r\n{\r\n let ptsBuls = cu.PtsBuls;\r\n let ocsInv = cu.OCSInv;\r\n\r\n let result: IContourData = { pts: [], buls: [] };\r\n\r\n if (ptsBuls.pts.length === 0)\r\n return result;\r\n\r\n for (let i = 0; i < ptsBuls.buls.length - 1; i++)\r\n {\r\n let bul = ptsBuls.buls[i];\r\n if (Math.abs(bul) > SPLITBUL + 1e-8)\r\n {\r\n let allAngle = Math.atan(bul) * 4;\r\n let splitCount = GetSpliteCount(allAngle);\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let paramDiv = 1 / splitCount;\r\n let newBul = Math.tan((allAngle / splitCount) / 4);\r\n for (let i = 0; i < splitCount; i++)\r\n {\r\n let param = i * paramDiv;\r\n let p = arc.GetPointAtParam(param).applyMatrix4(ocsInv);\r\n let p2 = AsVector2(p);\r\n //暂时不处理0长度段\r\n if (true || result.pts.length === 0 || !equalv2(p2, arrayLast(result.pts), 1e-2))\r\n {\r\n result.pts.push(p2);\r\n result.buls.push(newBul);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n //暂时不处理0长度段\r\n if (true || result.pts.length === 0 || !equalv2(ptsBuls.pts[i], arrayLast(result.pts), 1e-2))\r\n {\r\n result.pts.push(ptsBuls.pts[i]);\r\n result.buls.push(ptsBuls.buls[i]);\r\n }\r\n }\r\n }\r\n\r\n result.pts.push(arrayLast(ptsBuls.pts));\r\n result.buls.push(arrayLast(ptsBuls.buls));\r\n return result;\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 \"../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 { 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 * 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 //del_ue_exp_start\r\n clipperLib.NativeClipperLibRequestedFormat.WasmOnly\r\n //del_ue_exp_end\r\n //del_ue_exp_start\r\n //del_ue_exp_end 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 { 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 PathTranslate(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 PathTranslate_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\nconst MAX_CACHE_LEN = 100000;\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 private static _PositionCache: { [key: string]: Point; } = {};\r\n private static _PosCacheCount: 0;//缓存个数\r\n private static _NoPutCache: { [key: string]: Set; } = {};\r\n private static _NoPutCacheCount: 0;//缓存个数\r\n\r\n static SetPos(key: string, value: Point)\r\n {\r\n if (this._PosCacheCount > MAX_CACHE_LEN)\r\n {\r\n // this._PosCacheCount = 0;\r\n // this._PositionCache = {};\r\n return;\r\n }\r\n\r\n this._PositionCache[key] = value;\r\n this._PosCacheCount++;\r\n }\r\n\r\n static GetPos(key: string): Point\r\n {\r\n return this._PositionCache[key];\r\n }\r\n\r\n static SetNoPut(key: string, value: Set)\r\n {\r\n if (this._NoPutCacheCount > MAX_CACHE_LEN)\r\n {\r\n // this._NoPutCacheCount = 0;\r\n // this._NoPutCache = {};\r\n return;\r\n }\r\n\r\n this._NoPutCache[key] = value;\r\n this._NoPutCacheCount++;\r\n }\r\n\r\n static GetNoPut(key: string): Set\r\n {\r\n return this._NoPutCache[key];\r\n }\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._PositionCache = {};\r\n this._PosCacheCount = 0;\r\n this._NoPutCache = {};\r\n this._NoPutCacheCount = 0;\r\n }\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, PathTranslate_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\nconst TEXT_BOX = NestCache.CreatePath(570, 110);\r\n\r\n/**\r\n * 分析文字放置位置\r\n * @param contour 轮廓点表\r\n * @param holes 网洞点表\r\n * @param [textBox=TEXT_BOX] 标签盒子\r\n * @param [allowReturnNullPos=false] 允许返回null 当没有找到合适的位置返回null\r\n * @returns Vector3\r\n */\r\nexport function ParseRegionTextPos(contour: Point[], holes: (Point[])[], textBox = TEXT_BOX, allowReturnNullPos = false): Vector3 | undefined\r\n{\r\n let hasTextBox = true;\r\n let path = new Path(contour);\r\n let nfps: Polyline[] = path.GetInsideNFP(textBox)?.map(nfp => Path2Polyline(PathTranslate_Self(PathScale(nfp, 1e-4), path.OrigionMinPoint.x, path.OrigionMinPoint.y))); //可能无法获得\r\n if (!nfps || nfps.length === 0)\r\n {\r\n if (allowReturnNullPos) return;\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(textBox);\r\n let nfp = nfps[Max(nfps, (n1, n2) => Area(n2) > Area(n1))];\r\n\r\n let pl = Path2Polyline(PathTranslate_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 {\r\n //允许返回空的点 因为无法放置\r\n if (allowReturnNullPos) return;\r\n resShapes = shapes;\r\n }\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 += textBox.Size.x * 0.5;\r\n p.y += textBox.Size.y * 0.5;\r\n }\r\n return p;\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 { Box2, Vector2, MathUtils } from \"three\";\r\nimport { doIntersect } from \"./DoIntersect\";\r\n\r\n/*\r\n功能:盒子相交检测,快速判断正矩形(未旋转的)与直线和圆是否有交点.\r\n1.使用裁剪算法优化判断速度.\r\n参考:https://zh.wikipedia.org/wiki/%E7%A7%91%E6%81%A9%EF%BC%8D%E8%8B%8F%E6%B3%BD%E5%85%B0%E7%AE%97%E6%B3%95\r\n2.使用快速判断直线是否有交点提高速度.\r\n参考:doIntersect方法.\r\n*/\r\n\r\nexport interface Vec2\r\n{\r\n x: number;\r\n y: number;\r\n}\r\n\r\nconst LEFT = 1, RIGHT = 2, DOWN = 4, TOP = 8;\r\n// Compute the bit code for a point (x, y) using the clip rectangle\r\n// bounded diagonally by (xmin, ymin), and (xmax, ymax)\r\n\r\n// ASSUME THAT xmax, xmin, ymax and ymin are global constants.\r\nfunction ComputeOutCode(x: number, y: number, box: Box2): number\r\n{\r\n let code = 0;\r\n if (x < box.min.x) // to the left of clip window\r\n code |= LEFT;\r\n else if (x > box.max.x) // to the right of clip window\r\n code |= RIGHT;\r\n\r\n if (y < box.min.y) // below the clip window\r\n code |= DOWN;\r\n else if (y > box.max.y) // above the clip window\r\n code |= TOP;\r\n\r\n return code;\r\n}\r\n\r\n\r\n/**\r\n * 盒子相交测试,快速判断盒子和直线或者圆是否有相交\r\n */\r\nexport class BoxCheckIntersect\r\n{\r\n p1: Vec2;\r\n p2: Vec2;\r\n p3: Vec2;\r\n p4: Vec2;\r\n box: Box2;\r\n constructor(box: Box2)\r\n {\r\n this.p1 = box.min;\r\n this.p3 = box.max;\r\n this.p2 = new Vector2(this.p3.x, this.p1.y);\r\n this.p4 = new Vector2(this.p1.x, this.p3.y);\r\n\r\n this.box = box;\r\n }\r\n\r\n //直线与盒子相交,或者被盒子包含. Cohen–Sutherland裁剪算法\r\n IsIntersectLine(p1: Vec2, p2: Vec2): boolean\r\n {\r\n let code1 = ComputeOutCode(p1.x, p1.y, this.box);\r\n let code2 = ComputeOutCode(p2.x, p2.y, this.box);\r\n\r\n //按位AND不为0:两个点共享一个外部区域(LEFT,RIGHT,TOP或BOTTOM),因此两个点都必须在窗口外部\r\n if (code1 & code2) return false;\r\n\r\n let code = code1 | code2;\r\n if (code1 === 0 || code2 === 0 || code === 3 || code === 12)//点1点2在矩形内,或者竖直贯穿,水平贯穿\r\n return true;\r\n\r\n if ((code & TOP) && doIntersect(p1, p2, this.p3, this.p4))\r\n return true;\r\n if ((code & LEFT) && doIntersect(p1, p2, this.p1, this.p4))\r\n return true;\r\n if ((code & RIGHT) && doIntersect(p1, p2, this.p2, this.p3))\r\n return true;\r\n if ((code & DOWN) && doIntersect(p1, p2, this.p3, this.p1))\r\n return true;\r\n\r\n return false;\r\n }\r\n\r\n //ref https://yal.cc/rectangle-circle-intersection-test/\r\n IsIntersectCircle(cen: Vec2, radius: number): boolean\r\n {\r\n let nearestX = MathUtils.clamp(cen.x, this.box.min.x, this.box.max.x);\r\n let nearestY = MathUtils.clamp(cen.y, this.box.min.y, this.box.max.y);\r\n return ((nearestX - cen.x) ** 2 + (nearestY - cen.y) ** 2) <= radius ** 2;\r\n }\r\n}\r\n\r\n//https://en.wikipedia.org/wiki/Cohen%E2%80%93Sutherland_algorithm\r\nfunction CohenSutherlandLineClip(box: Box2, p1: Vec2, p2: Vec2)\r\n{\r\n let [x0, y0] = [p1.x, p1.y];\r\n let [x1, y1] = [p2.x, p2.y];\r\n\r\n let xmin = box.min.x;\r\n let ymin = box.min.y;\r\n\r\n let xmax = box.max.x;\r\n let ymax = box.max.y;\r\n\r\n // compute outcodes for P0, P1, and whatever point lies outside the clip rectangle\r\n let outcode0 = ComputeOutCode(x0, y0, box);\r\n let outcode1 = ComputeOutCode(x1, y1, box);\r\n let accept = false;\r\n\r\n while (true)\r\n {\r\n if (!(outcode0 | outcode1))\r\n {\r\n // bitwise OR is 0: both points inside window; trivially accept and exit loop\r\n accept = true;\r\n break;\r\n }\r\n else if (outcode0 & outcode1)\r\n {\r\n // bitwise AND is not 0: both points share an outside zone (LEFT, RIGHT, TOP,\r\n // or BOTTOM), so both must be outside window; exit loop (accept is false)\r\n break;\r\n }\r\n else\r\n {\r\n // failed both tests, so calculate the line segment to clip\r\n // from an outside point to an intersection with clip edge\r\n let x: number, y: number;\r\n\r\n // At least one endpoint is outside the clip rectangle; pick it.\r\n let outcodeOut = outcode1 > outcode0 ? outcode1 : outcode0;\r\n\r\n // Now find the intersection point;\r\n // use formulas:\r\n // slope = (y1 - y0) / (x1 - x0)\r\n // x = x0 + (1 / slope) * (ym - y0), where ym is ymin or ymax\r\n // y = y0 + slope * (xm - x0), where xm is xmin or xmax\r\n // No need to worry about divide-by-zero because, in each case, the\r\n // outcode bit being tested guarantees the denominator is non-zero\r\n if (outcodeOut & TOP)\r\n { // point is above the clip window\r\n x = x0 + (x1 - x0) * (ymax - y0) / (y1 - y0);\r\n y = ymax;\r\n }\r\n else if (outcodeOut & DOWN)\r\n { // point is below the clip window\r\n x = x0 + (x1 - x0) * (ymin - y0) / (y1 - y0);\r\n y = ymin;\r\n }\r\n else if (outcodeOut & RIGHT)\r\n { // point is to the right of clip window\r\n y = y0 + (y1 - y0) * (xmax - x0) / (x1 - x0);\r\n x = xmax;\r\n }\r\n else if (outcodeOut & LEFT)\r\n { // point is to the left of clip window\r\n y = y0 + (y1 - y0) * (xmin - x0) / (x1 - x0);\r\n x = xmin;\r\n }\r\n\r\n // Now we move outside point to intersection point to clip\r\n // and get ready for next pass.\r\n if (outcodeOut === outcode0)\r\n {\r\n x0 = x;\r\n y0 = y;\r\n outcode0 = ComputeOutCode(x0, y0, box);\r\n }\r\n else\r\n {\r\n x1 = x;\r\n y1 = y;\r\n outcode1 = ComputeOutCode(x1, y1, box);\r\n }\r\n }\r\n }\r\n}\r\n","/**\r\n * 删除数组中指定的元素,返回数组本身\r\n * @param {Array} arr 需要操作的数组\r\n * @param {*} el 需要移除的元素\r\n */\r\nexport function arrayRemove(arr: Array, el: T): Array\r\n{\r\n let j = 0;\r\n for (let i = 0, l = arr.length; i < l; i++)\r\n {\r\n if (arr[i] !== el)\r\n {\r\n arr[j++] = arr[i];\r\n }\r\n }\r\n arr.length = j;\r\n\r\n return arr;\r\n}\r\n\r\n\r\nexport function arrayRemoveOnce(arr: Array, el: T): Array\r\n{\r\n let index = arr.indexOf(el);\r\n if (index !== -1)\r\n arr.splice(index, 1);\r\n return arr;\r\n}\r\n\r\n/**\r\n * 删除通过函数校验的元素\r\n * @param {(e: T) => boolean} checkFuntion 校验函数\r\n */\r\nexport function arrayRemoveIf(arr: Array, checkFuntion: (e: T) => boolean): Array\r\n{\r\n let j = 0;\r\n for (let i = 0, l = arr.length; i < l; i++)\r\n {\r\n if (!checkFuntion(arr[i]))\r\n {\r\n arr[j++] = arr[i];\r\n }\r\n }\r\n arr.length = j;\r\n\r\n return arr;\r\n}\r\n\r\nexport function arrayFirst(arr: Array): T\r\n{\r\n return arr[0];\r\n}\r\n\r\nexport function arrayLast(arr: { [key: number]: T, length: number; }): T\r\n{\r\n return arr[arr.length - 1];\r\n}\r\n\r\n/**\r\n * 根据数值从小到大排序数组\r\n * @param {Array} arr\r\n * @returns {Array} 返回自身\r\n */\r\nexport function arraySortByNumber(arr: Array): Array\r\n{\r\n arr.sort(sortNumberCompart);\r\n return arr;\r\n}\r\n\r\n/**\r\n * 对排序好的数组进行去重操作\r\n * @param {(e1, e2) => boolean} [checkFuction] 校验对象相等函数\r\n * @returns {Array} 返回自身\r\n */\r\nexport function arrayRemoveDuplicateBySort(arr: Array, checkFuction: (e1: T, e2: T) => boolean = checkEqual): Array\r\n{\r\n if (arr.length < 2) return arr;\r\n let j = 1;\r\n for (let i = 1, l = arr.length; i < l; i++)\r\n if (!checkFuction(arr[j - 1], arr[i]))\r\n arr[j++] = arr[i];\r\n arr.length = j;\r\n return arr;\r\n}\r\n\r\n//原地更新数组,注意这个函数并不会比map快.\r\nexport function arrayMap(arr: Array, mapFunc: (v: T) => T): Array\r\n{\r\n for (let i = 0, count = arr.length; i < count; i++)\r\n arr[i] = mapFunc(arr[i]);\r\n return arr;\r\n}\r\n\r\nfunction sortNumberCompart(e1: any, e2: any)\r\n{\r\n return e1 - e2;\r\n}\r\n\r\nfunction checkEqual(e1: any, e2: any): boolean\r\n{\r\n return e1 === e2;\r\n}\r\n\r\n/**\r\n * 改变数组的值顺序\r\n * @param arr 需要改变初始值位置的数组\r\n * @param index //将index位置以后的值放到起始位置\r\n */\r\nexport function changeArrayStartIndex(arr: T[], index: number): T[]\r\n{\r\n arr.unshift(...arr.splice(index));\r\n return arr;\r\n}\r\n\r\nexport function equalArray(a: T[], b: T[], checkF = checkEqual)\r\n{\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n for (var i = 0; i < a.length; ++i)\r\n if (!checkF(a[i], b[i])) return false;\r\n return true;\r\n}\r\n\r\nexport function arrayClone(arr: T[]): T[]\r\n{\r\n return arr.slice();\r\n}\r\n\r\n//https://jsperf.com/merge-array-implementations/30\r\nexport function arrayPushArray(arr1: T[], arr2: T[]): T[]\r\n{\r\n let arr1Length = arr1.length;\r\n let arr2Length = arr2.length;\r\n arr1.length = arr1Length + arr2Length;\r\n for (let i = 0; i < arr2Length; i++)\r\n arr1[arr1Length + i] = arr2[i];\r\n\r\n return arr1;\r\n}\r\n\r\nexport function arraySum(arr: number[])\r\n{\r\n let sum = 0;\r\n for (let n of arr) sum += n;\r\n return sum;\r\n}\r\n\r\nexport function FilterSet(s: Set, fn: (el: T) => boolean): Set\r\n{\r\n let ns = new Set();\r\n for (let el of s)\r\n {\r\n if (fn(el))\r\n ns.add(el);\r\n }\r\n return ns;\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box2, Vector2, Vector3 } from \"three\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { InsertSortedIndex, RangeUnion } from \"../../DatabaseServices/Room/ParseService/RangeUtils\";\r\nimport { BoxCheckIntersect } from '../../Geometry/CheckIntersect';\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { arrayPushArray, arraySortByNumber } from \"../../Nest/Common/ArrayExt\";\r\nimport { Max } from '../../Nest/Common/Util';\r\nimport { FuzzyFactory } from '../../csg/core/FuzzyFactory';\r\n\r\n/** [area maxXIndex maxYIndex xCount yCount,width,height] */\r\nexport type RectData = [number, number, number, number, number, number, number];\r\n\r\n/**\r\n * 获取面积最大的矩形\r\n * @param rects\r\n * @returns\r\n */\r\nfunction GetMaxAreaFn(rects: RectData[]): number\r\n{\r\n return Max(rects, (t1, t2) => t2[0] > t1[0]);\r\n}\r\n\r\nfunction GetMaxWidthFn(rects: RectData[]): number\r\n{\r\n return Max(rects, (t1, t2) => t2[5] === t1[5] ? t2[6] > t1[6] : t2[5] > t1[5]);\r\n}\r\n\r\nfunction GetMaxHeightFn(rects: RectData[]): number\r\n{\r\n return Max(rects, (t1, t2) => t2[6] === t1[6] ? t2[6] > t1[6] : t2[5] > t1[5]);\r\n}\r\n\r\n\r\n//最大内接矩形\r\n//1.分析盒子\r\n// 1.默认我们使用顶点坐标进行一维展开\r\n// 2.当存在斜线时, 我们精确展开(当跨度大于(100/50)时,我们精确产开另一条轴)\r\n// (1).获取需要精确展开的区间 随后合并区间\r\n// (2).对区间进行展开数值,使用二分搜索,如果在已有的顶点附近,则不进行增项\r\n\r\n//2.标记轮廓内的矩形\r\n// (1).我们收集多边形所有的斜线,与矩形盒子求交,如果相交,则矩形盒子无效化\r\n// (2).矩形终点在轮廓内(使用单条射线检测,因为我们始终在端点增加锚点的关系 我们似乎不会在顶点位置得到(交点? 稳妥起见 实现标准的射线检测算法)\r\n\r\n//3.获取最大内接矩形\r\n// 迭代开始\r\n// 动态规划 存储每个方块得到的最大矩形\r\n// 获取最大的(根据规则)\r\n// 对池子里的结果进行生存选择(如果被占用了方块,则该结果已经不可用)\r\n// 取剩下可用的最大的(因为我们已经是在合理的情况下拿最大的了,所以不需要在重新迭代)\r\n// 重复迭代\r\n\r\n\r\n/**\r\n * @example\r\n *\r\n * //1. 设置过滤条件(舍弃掉一些无用的矩形)\r\n * let lir = new LargestInteriorRectangle;\r\n * lir.MinWidth = 200;//设置最小可以接受的矩形宽度\r\n * lir.MinHeight = 200;//设置最小可以接受的矩形宽度\r\n * lir.MinArea = 200 * 200;//设置最小可以接受的矩形面积\r\n *\r\n * //除了变量 也可以设置过滤函数\r\n * //例如:\r\n * lir.FilterRectFn = (w,h)=> !(w>500 || h>500) //这样将对长或者宽不足500的矩形板过滤(舍弃)\r\n *\r\n * //2. 可以设置优先模式,默认提供了面积优先,你也可以使用宽度优先或者高度优先,或许默认规则可能不好用,可以自定义传入自定义函数.\r\n * lir.GetMaxRectIndexFn = LargestInteriorRectangle.GetMaxAreaFn; //或者 LargestInteriorRectangle.GetMaxWidthFn / LargestInteriorRectangle.GetMaxHeightFn\r\n *\r\n * //3. 你已经设置好解析器,你现在可以进行解析了\r\n * let rects = lir.ParseLir([ new Vector3(0,0,0) , new Vector3(100,0,0) , new Vector3(50,100,0)]) //首尾不需要重复,首尾重复可能造成错误,程序不再校验\r\n *\r\n */\r\nexport class LargestInteriorRectangle\r\n{\r\n MinWidth = 100;\r\n MinHeight = 100;\r\n MinArea = 200 * 200;\r\n\r\n /** 可以自定义过滤函数,以便过滤掉某些不需要的矩形,当返回true时,我们会过滤它 */\r\n FilterRectFn: (width: number, height: number) => boolean;\r\n\r\n GetMaxRectIndexFn: (rects: RectData[]) => number = GetMaxAreaFn;\r\n\r\n\r\n static GetMaxAreaFn = GetMaxAreaFn;\r\n static GetMaxWidthFn = GetMaxWidthFn;\r\n static GetMaxHeightFn = GetMaxHeightFn;\r\n\r\n constructor()\r\n {\r\n }\r\n\r\n /**\r\n * 分析最大内接矩形\r\n * @param polygonPts 多边形点表,首尾不要相等\r\n */\r\n ParseLIR(polygonPts: Vector2[]): Box2[]\r\n {\r\n //端点列表\r\n let xs: number[] = [];\r\n let ys: number[] = [];\r\n\r\n let xset = new Set();\r\n let yset = new Set();\r\n\r\n //需要展开的范围\r\n let xranges: [number, number][] = [];\r\n let yranges: [number, number][] = [];\r\n\r\n let polygonBox = new Box2().setFromPoints(polygonPts);\r\n\r\n let vec = new Vector2;\r\n\r\n let klines: [Vector2, Vector2][] = []; //所有的斜线\r\n // let linesP: [Vector2, Vector2][] = []; //所有的线点\r\n // let linesFb = new Flatbush(pts.length);//所有的线的索引\r\n\r\n let fuzzX = new FuzzyFactory(1, 0.1);\r\n let fuzzY = new FuzzyFactory(1, 0.1);\r\n\r\n for (let i = 0; i < polygonPts.length; i++)\r\n {\r\n let p = polygonPts[i];\r\n let p2 = polygonPts[FixIndex(i + 1, polygonPts)];\r\n\r\n // linesP.push([p, p2]);\r\n // let box = new Box2().setFromPoints([p, p2]);\r\n // linesFb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n\r\n vec.subVectors(p2, p);\r\n\r\n //收集端点\r\n let x = fuzzX.lookupOrCreate([p.x], p.x);\r\n if (!xset.has(x))\r\n {\r\n xs.push(x);\r\n xset.add(x);\r\n }\r\n\r\n let y = fuzzY.lookupOrCreate([p.y], p.y);\r\n if (!yset.has(y))\r\n {\r\n ys.push(y);\r\n yset.add(y);\r\n }\r\n\r\n //展开斜线 每20分段\r\n if (Math.abs(vec.x) > 20 && Math.abs(vec.y) > 20)\r\n {\r\n if (Math.abs(vec.x) > 20)\r\n yranges.push(vec.y > 0 ? [p.y, p2.y] : [p2.y, p.y]);\r\n\r\n if (Math.abs(vec.y) > 20)\r\n xranges.push(vec.x > 0 ? [p.x, p2.x] : [p2.x, p.x]);\r\n }\r\n\r\n //收集所有的斜线\r\n if (!equaln(vec.x, 0, 0.1) && !equaln(vec.y, 0, 0.1))\r\n klines.push([p, p2]);\r\n }\r\n\r\n // linesFb.finish();\r\n\r\n //合并展开区间\r\n xranges.sort((a, b) => a[0] - b[0]);\r\n yranges.sort((a, b) => a[0] - b[0]);\r\n xranges = RangeUnion(xranges);\r\n yranges = RangeUnion(yranges);\r\n\r\n arraySortByNumber(xs);\r\n arraySortByNumber(ys);\r\n\r\n //展开\r\n RangesAdd(xranges, xs);\r\n RangesAdd(yranges, ys);\r\n\r\n //最大化\r\n xs[0] = polygonBox.min.x;\r\n xs[xs.length - 1] = polygonBox.max.x;\r\n\r\n ys[0] = polygonBox.min.y;\r\n ys[ys.length - 1] = polygonBox.max.y;\r\n\r\n //所有网格的索引\r\n let gridFb = new Flatbush((xs.length - 1) * (ys.length - 1));\r\n\r\n // let pls: Polyline[] = [];\r\n\r\n for (let i = 0; i < xs.length - 1; i++)\r\n {\r\n for (let j = 0; j < ys.length - 1; j++)\r\n {\r\n gridFb.add(xs[i], ys[j], xs[i + 1], ys[j + 1]);\r\n\r\n // let pl = new Polyline().RectangleFrom2Pt(new Vector3(xs[i], ys[j]), new Vector3(xs[i + 1], ys[j + 1]));\r\n // if (false) TestDraw(pl);\r\n // pls.push(pl);\r\n }\r\n }\r\n\r\n gridFb.finish();\r\n\r\n const matrix: number[][] = new Array(xs.length - 1).fill(1).map(() => new Array(ys.length - 1).fill(1));\r\n\r\n //矩形与斜线相交\r\n let checks: BoxCheckIntersect[] = [];\r\n for (let line of klines)\r\n {\r\n let box = new Box2().setFromPoints(line);\r\n let ids = gridFb.search(box.min.x, box.min.y, box.max.x, box.max.y);\r\n\r\n for (let id of ids)\r\n {\r\n let check = checks[id];\r\n\r\n let i = Math.floor((id) / (ys.length - 1));\r\n let j = id - (i * (ys.length - 1));\r\n\r\n if (!check)\r\n {\r\n check = new BoxCheckIntersect(new Box2(new Vector2(xs[i] + 0.01, ys[j] + 0.01), new Vector2(xs[i + 1] - 0.01, ys[j + 1] - 0.01)));\r\n checks[id] = check;\r\n\r\n // let pl = new Polyline().RectangleFrom2Pt(new Vector3(xs[i], ys[j]), new Vector3(xs[i + 1], ys[j + 1]));\r\n // TestDraw(pl, 2);\r\n }\r\n\r\n if (check.IsIntersectLine(line[0], line[1]))\r\n {\r\n // pls[id].ColorIndex = 1;\r\n // pls[id].Erase();\r\n matrix[i][j] = 0;\r\n }\r\n }\r\n }\r\n\r\n //y轴扫描线(矩形在多边形外)\r\n // if (xs.length < ys.length)\r\n {\r\n for (let i = 0; i < xs.length - 1; i++)\r\n {\r\n let x = (xs[i + 1] + xs[i]) * 0.5;\r\n\r\n let iPtYs = IsPointInPolygon(polygonPts, new Vector3(x, polygonBox.min.y - 0.1, 0));\r\n arraySortByNumber(iPtYs);\r\n\r\n for (let j = 0; j < ys.length - 1; j++)\r\n {\r\n let y = (ys[j + 1] + ys[j]) * 0.5;\r\n while (iPtYs.length && iPtYs[0] < y)\r\n iPtYs.shift();\r\n\r\n if (iPtYs.length % 2 !== 1)\r\n {\r\n // pls[i * (ys.length - 1) + j].ColorIndex = 3;\r\n // pls[i * (ys.length - 1) + j].Erase();\r\n matrix[i][j] = 0;\r\n }\r\n }\r\n }\r\n }\r\n // else//x轴扫描线\r\n\r\n //ref https://leetcode.cn/problems/maximal-rectangle/solutions/535672/zui-da-ju-xing-by-leetcode-solution-bjlu/\r\n const maximalRectangle = () =>\r\n {\r\n const m = matrix.length;//m个竖条 xlist\r\n if (m === 0) return 0;\r\n const n = matrix[0].length;//n个横条 ylist\r\n if (n === 0) return;\r\n\r\n const left: number[][] = new Array(m).fill(0).map(() => new Array(n).fill(0));\r\n\r\n for (let i = 0; i < m; i++)\r\n {\r\n for (let j = 0; j < n; j++)\r\n {\r\n if (matrix[i][j])\r\n {\r\n left[i][j] = (j === 0 ? 0 : left[i][j - 1]) + 1;\r\n }\r\n }\r\n }\r\n\r\n //area maxXIndex maxYIndex xcount ycount,width,height\r\n let rects: RectData[] = [];\r\n\r\n for (let j = 0; j < n; j++) // 对于每一列,使用基于柱状图的方法\r\n {\r\n const up = new Array(m).fill(0);\r\n const down = new Array(m).fill(0);\r\n\r\n let stack: number[] = [];\r\n for (let i = 0; i < m; i++)\r\n {\r\n while (stack.length && left[stack[stack.length - 1]][j] >= left[i][j])\r\n {\r\n stack.pop();\r\n }\r\n up[i] = stack.length === 0 ? -1 : stack[stack.length - 1];\r\n stack.push(i);\r\n }\r\n stack = [];\r\n for (let i = m - 1; i >= 0; i--)\r\n {\r\n while (stack.length && left[stack[stack.length - 1]][j] >= left[i][j])\r\n {\r\n stack.pop();\r\n }\r\n down[i] = stack.length === 0 ? m : stack[stack.length - 1];\r\n stack.push(i);\r\n }\r\n\r\n for (let i = 0; i < m; i++)\r\n {\r\n const xCount = down[i] - up[i] - 1;\r\n const yCount = left[i][j];\r\n\r\n if (!yCount || !xCount) continue;\r\n\r\n let width = xs[down[i]] - xs[down[i] - xCount];\r\n let height = ys[j + 1] - ys[j + 1 - yCount];\r\n\r\n if (width < this.MinWidth || height < this.MinHeight) continue;\r\n\r\n //自定义过滤函数\r\n if (this.FilterRectFn && this.FilterRectFn(width, height)) continue;\r\n\r\n let area = width * height;\r\n\r\n //面积小于最小允许面积\r\n if (area < this.MinArea) continue;\r\n\r\n rects.push([area, down[i], j, xCount, yCount, width, height]);\r\n }\r\n }\r\n\r\n // while (rects.length)\r\n if (rects.length)\r\n {\r\n let maxIndex = this.GetMaxRectIndexFn(rects);\r\n\r\n let [area, maxXIndex, maxYIndex, xCount, yCount] = rects[maxIndex];\r\n\r\n let xMax = xs[maxXIndex];\r\n let yMax = ys[maxYIndex + 1];\r\n\r\n let xMin = xs[maxXIndex - xCount];\r\n let yMin = ys[maxYIndex + 1 - yCount];\r\n\r\n maxRects.push(new Box2(new Vector2(xMin, yMin), new Vector2(xMax, yMax)));\r\n\r\n rects.splice(maxIndex, 1);\r\n\r\n //对方块进行标记\r\n for (let i = 0; i < xCount; i++)\r\n {\r\n for (let j = 0; j < yCount; j++)\r\n {\r\n matrix[maxXIndex - 1 - i][maxYIndex - j] = 0;\r\n }\r\n }\r\n\r\n //如果有被标记的方块,则删除它\r\n //某些情况不适合这个算法,移除了它,保证结果正确性\r\n // arrayRemoveIf(rects, rect =>\r\n // {\r\n // let [area, maxX, maxY, xCount, yCount] = rect;\r\n // for (let i = 0; i < xCount; i++)\r\n // {\r\n // for (let j = 0; j < yCount; j++)\r\n // {\r\n // if (!matrix[maxX - 1 - i][maxY - j])\r\n // return true;\r\n // }\r\n // }\r\n // return false;\r\n // });\r\n }\r\n };\r\n\r\n let maxRects: Box2[] = [];\r\n while (true)\r\n {\r\n let count = maxRects.length;\r\n maximalRectangle();\r\n if (count === maxRects.length) break;\r\n }\r\n\r\n return maxRects;\r\n }\r\n}\r\n\r\nfunction RangesAdd(ranges: [number, number][], vList: number[])\r\n{\r\n let adds: number[] = [];\r\n for (let range of ranges)\r\n {\r\n let dist = range[1] - range[0];\r\n let count = Math.floor(dist / 20);\r\n let divDist = Math.floor(dist / count);\r\n\r\n for (let i = 1; i < count - 1; i++)\r\n {\r\n let d = Math.floor(range[0] + divDist * i);\r\n\r\n let index = InsertSortedIndex(vList, d, (a, b) => a - b);\r\n\r\n if (Math.abs(vList[index] - d) < 5)\r\n continue;\r\n\r\n if (index !== vList.length - 1 && Math.abs(vList[index + 1] - d) < 5)\r\n continue;\r\n\r\n adds.push(d);\r\n }\r\n }\r\n\r\n if (adds.length)\r\n {\r\n arrayPushArray(vList, adds);\r\n arraySortByNumber(vList);\r\n }\r\n}\r\n\r\n/**\r\n * 判断点在多段线内外 这是为了LIR实现的优化算法,返回交点的Y轴列表\r\n */\r\nfunction IsPointInPolygon(polyPts: Vector2[], pt: Vector3): number[]\r\n{\r\n // let crossings = 0;\r\n // let insLine = new Line(pt, p2);\r\n\r\n let iPtYs: number[] = [];\r\n\r\n for (let i = 0; i < polyPts.length; i++)\r\n {\r\n let sp = polyPts[i];\r\n let ep = polyPts[FixIndex(i + 1, polyPts)];\r\n\r\n // if (equalv2(sp, pt, 1e-5) || equalv2(ep, pt, 1e-5))//在起点或者终点\r\n // return false;\r\n\r\n //点位于线上面\r\n // if (pt.y > Math.max(sp.y, ep.y))\r\n // continue;\r\n\r\n //线垂直Y轴\r\n let derX = ep.x - sp.x;\r\n if (equaln(derX, 0, 5e-6))\r\n {\r\n // if (equaln(pt.x, ep.x, 1e-5)\r\n // && (pt.y > Math.min(sp.y, ep.y) - 1e-5 && pt.y < Math.max(sp.y, ep.y) + 1e-5))\r\n // return false;//点在线上\r\n continue;\r\n }\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)\r\n if (derX < 0)\r\n {\r\n // crossings++;\r\n iPtYs.push(sp.y);\r\n }\r\n continue;\r\n }\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)\r\n if (derX > 0)\r\n {\r\n // crossings++;\r\n iPtYs.push(ep.y);\r\n }\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 let iptY = (pt.x - sp.x) * k + sp.y;\r\n // if (equaln(iptY, pt.y, 1e-5))//点在线上 返回false\r\n // return false;\r\n if (iptY > pt.y)\r\n {\r\n // crossings++;\r\n iPtYs.push(iptY);\r\n }\r\n }\r\n }\r\n\r\n return iPtYs;\r\n}\r\n","import { EndType, JoinType } from \"js-angusj-clipper/web\";\r\nimport { Vec2, Vector2, Vector3 } from \"three\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { BUL_IS_LINE_FUZZ, Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { polar } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { clipperCpp } from \"../Common/ClipperCpp\";\r\nimport { Point } from \"../Common/Point\";\r\nimport { FixIndex, equaln } from \"../Common/Util\";\r\nimport { PathScale } from \"../Core/Path\";\r\n\r\n/** 内外接多边形 */\r\nexport function Circle2Points(circle: Circle, knifRadius: number, splitSize = 10, outside = false): Point[]\r\n{\r\n let radius = circle.Radius;\r\n let an = Math.PI * 2 / splitSize;\r\n\r\n if (outside)\r\n radius = radius / Math.cos(an / 2) + knifRadius;\r\n else\r\n radius -= knifRadius;\r\n\r\n let cenP = circle.Center;\r\n let pts: Vector3[] = [];\r\n for (let i = 0; i < splitSize; i++)\r\n {\r\n pts.push(polar(cenP.clone(), an * i, radius));\r\n }\r\n return pts as Point[];\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 // //小圆弧内嵌时忽略小圆(直线连接) 有可能产生自交 放弃这个\r\n // if (!outside && arc.Radius < 30 && bul > 0) continue;\r\n // if (outside && arc.Radius < 30 && bul < 0) continue;\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(Math.floor(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\r\n/**\r\n * 移除小圆弧,使用尖角直连(有可能产生自交 概率不大)\r\n * @param pl 请传入逆时针多段线(我们将直接修改这个多段线,如果你不想被修改 你应该拷贝一个)\r\n * @param [radius=30]\r\n */\r\nexport function PolylineFilletMinArc(pl: Polyline, radius = 30)\r\n{\r\n let ocsInv = pl.OCSInv;\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n let bul = pl.LineData[i].bul;\r\n if (equaln(bul, BUL_IS_LINE_FUZZ)) continue;\r\n\r\n let arc = pl.GetCurveAtIndex(i) as Arc;\r\n\r\n if (arc.Radius > radius) continue;\r\n\r\n let preCurve = pl.GetCurveAtIndex(FixIndex(i - 1, pl.EndParam));\r\n if (!(preCurve instanceof Line)) continue;\r\n\r\n let nextCurve = pl.GetCurveAtIndex(FixIndex(i + 1, pl.EndParam));\r\n if (!(nextCurve instanceof Line)) continue;\r\n\r\n if (preCurve.IntersectWith2(arc, IntersectOption.ExtendThis).length === 2) continue;\r\n\r\n let ipt = nextCurve.IntersectWith(preCurve, IntersectOption.ExtendBoth)[0];\r\n\r\n if (!ipt) continue;\r\n\r\n if (ipt.distanceTo(arc.Midpoint) > 50) continue;\r\n\r\n pl.LineData.splice(i, 1);\r\n pl.SetPointAt(i, ipt.applyMatrix4(ocsInv) as Vec2 as Vector2);\r\n }\r\n}\r\n","import { Vector2 } from \"../Common/Vector2\";\r\n\r\ninterface P\r\n{\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface IOffset\r\n{\r\n negativeOffset: number;\r\n positiveOffset: number;\r\n}\r\n\r\n/** 点p到线段P1P2 的最短距离的平方,线段不延伸 */\r\nfunction GetSqSegDist(p: P, p1: P, p2: P): number\r\n{\r\n let x = p1.x;\r\n let y = p1.y;\r\n let dx = p2.x - x;\r\n let dy = p2.y - y;\r\n\r\n if (dx !== 0 || dy !== 0)//不是0长度线\r\n {\r\n let t = ((p.x - x) * dx + (p.y - y) * dy) / (dx * dx + dy * dy);\r\n if (t > 1)\r\n {\r\n x = p2.x;\r\n y = p2.y;\r\n }\r\n else if (t > 0)\r\n {\r\n x += dx * t;\r\n y += dy * t;\r\n }\r\n }\r\n dx = p.x - x;\r\n dy = p.y - y;\r\n return dx * dx + dy * dy;\r\n}\r\n\r\nfunction CrossVector2(a: P, b: P)\r\n{\r\n return a.x * b.y - a.y * b.x;\r\n}\r\n\r\n//Ramer-Douglas-Peucker algorithm\r\nfunction SimplifyDPStep(points: P[], first: number, last: number, sqTolerance: number, simplified: P[], offset: IOffset): void\r\n{\r\n let maxSqDist = 0;\r\n let index: number;\r\n let fp = points[first];\r\n let lp = points[last];\r\n\r\n for (let i = first + 1; i < last; i++)\r\n {\r\n let p = points[i];\r\n let sqDist = GetSqSegDist(p, fp, lp);\r\n if (sqDist > maxSqDist)\r\n {\r\n index = i;\r\n maxSqDist = sqDist;\r\n }\r\n }\r\n\r\n if (maxSqDist > sqTolerance)\r\n {\r\n if (index - first > 1) SimplifyDPStep(points, first, index, sqTolerance, simplified, offset);\r\n simplified.push(points[index]);\r\n if (last - index > 1) SimplifyDPStep(points, index, last, sqTolerance, simplified, offset);\r\n }\r\n else\r\n {\r\n //记录偏移\r\n let v = new Vector2(lp.x - fp.x, lp.y - fp.y).normalize();\r\n for (let i = first + 1; i < last; i++)\r\n {\r\n let p = points[i];\r\n let offsetDist = -CrossVector2(v, { x: p.x - fp.x, y: p.y - fp.y });\r\n offset.positiveOffset = Math.max(offset.positiveOffset, offsetDist);\r\n offset.negativeOffset = Math.min(offset.negativeOffset, offsetDist);\r\n }\r\n }\r\n}\r\n\r\n// Ramer-Douglas-Peucker 算法\r\nexport function SimplifyDouglasPeucker(points: P[], sqTolerance: number): [P[], IOffset]\r\n{\r\n let last = points.length - 1;\r\n let simplified: P[] = [points[0]];\r\n let offset: IOffset = { negativeOffset: 0, positiveOffset: 0 };\r\n SimplifyDPStep(points, 0, last, sqTolerance, simplified, offset);\r\n simplified.push(points[last]);\r\n return [simplified, offset];\r\n}\r\n","import { EndType, JoinType } from \"js-angusj-clipper/web\";\r\nimport { Box3 } from \"three\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { clipperCpp } from \"../Common/ClipperCpp\";\r\nimport { Point } from \"../Common/Point\";\r\nimport { PathScale } from \"../Core/Path\";\r\nimport { Circle2Points, Polyline2Points } from \"./Curves2Points\";\r\nimport { Path2Polyline } from \"./Path2Polyline\";\r\nimport { IOffset, SimplifyDouglasPeucker } from \"./Simplify2\";\r\n\r\n\r\n/**\r\n * 运用此代码将曲线转换为点,并且精简它.\r\n * @class CurveWrap\r\n */\r\nexport class CurveWrap\r\n{\r\n BoundingBox: Box3;\r\n\r\n Area: number;\r\n\r\n SimplyPolyline: Polyline;\r\n SimplyOffset: IOffset;\r\n Used = false;\r\n Holes: CurveWrap[] = [];\r\n\r\n Points: Point[];\r\n\r\n _OrgCurve: Polyline | Circle;\r\n\r\n constructor(public Curve: Polyline | Circle, public KnifRadius = 3, public IsOutside: boolean = true)\r\n {\r\n this._OrgCurve = Curve;\r\n this.BoundingBox = Curve.BoundingBox;\r\n\r\n if (Curve instanceof Polyline)\r\n {\r\n let pts = Polyline2Points(Curve, IsOutside, 0)[1];\r\n let [spts, offset] = SimplifyDouglasPeucker(pts, KnifRadius ** 2 + KnifRadius);\r\n if (spts.length !== pts.length)\r\n {\r\n this.SimplyOffset = offset;\r\n this.SimplyPolyline = Path2Polyline(spts);\r\n this.Curve = this.SimplyPolyline; //保险起见,也更新它\r\n this.Area = this.SimplyPolyline.Area;\r\n }\r\n else //此处更新多段线\r\n this.Curve = Path2Polyline(pts);\r\n this.Points = spts;\r\n }\r\n\r\n if (this.Area === undefined)\r\n this.Area = this.Curve.Area;\r\n }\r\n\r\n ContainsCurve(curve: CurveWrap): boolean\r\n {\r\n if (this.SimplyPolyline)\r\n return this.SimplyPolyline.PtInCurve(curve.Curve.StartPoint);\r\n return this.Curve.PtInCurve(curve.Curve.StartPoint);\r\n }\r\n\r\n GetOutsidePoints(): Point[]\r\n {\r\n if (this.Curve instanceof Circle)\r\n {\r\n let pts = Circle2Points(this.Curve, this.KnifRadius, 10, true);\r\n return pts;\r\n }\r\n\r\n else\r\n {\r\n let pl = this.SimplyPolyline || this.Curve;\r\n let offset = this.KnifRadius;\r\n if (this.SimplyOffset)\r\n offset += this.SimplyOffset.positiveOffset;\r\n\r\n if (offset > 0)\r\n {\r\n let pts = pl.GetStretchPoints() as Point[];\r\n pts = clipperCpp.lib.offsetToPaths({\r\n delta: offset * 10000,\r\n offsetInputs: [{ data: PathScale(pts, 10000), joinType: JoinType.Miter, endType: EndType.ClosedPolygon }]\r\n })[0];\r\n PathScale(pts, 0.0001);\r\n return pts;\r\n }\r\n\r\n else\r\n return this.Points;\r\n }\r\n }\r\n\r\n GetInsidePoints(): Point[]\r\n {\r\n if (this.Curve instanceof Circle)\r\n {\r\n let pts = Circle2Points(this.Curve, this.KnifRadius, 10, false);\r\n return pts;\r\n }\r\n\r\n else\r\n {\r\n let pl = this.SimplyPolyline || this.Curve;\r\n let offset = -this.KnifRadius;\r\n if (this.SimplyOffset)\r\n {\r\n offset += this.SimplyOffset.negativeOffset;\r\n }\r\n if (offset < -0.01)\r\n {\r\n let pls = pl.GetOffsetCurves(offset);\r\n if (pls.length)\r\n return pls[0].GetStretchPoints();\r\n }\r\n\r\n else\r\n return this.Points;\r\n }\r\n }\r\n}\r\n"],"names":["arraySortByNumber","sortNumberCompart","arrayPushArray","equaln","FixIndex","Vector2","Shape","TLine","Box2","cache","ConverCircleToPolyline","Path","TShape","transform","BufferGeometryUtils2","DbText","Line"],"mappings":"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,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,G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"} \ No newline at end of file diff --git a/types/Add-on/ACAD/DxfEntityConvert.d.ts.map b/types/Add-on/ACAD/DxfEntityConvert.d.ts.map index 1268290..a1f9084 100644 --- a/types/Add-on/ACAD/DxfEntityConvert.d.ts.map +++ b/types/Add-on/ACAD/DxfEntityConvert.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DxfEntityConvert.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ACAD/DxfEntityConvert.ts"],"names":[],"mappings":"AAAA,OAAkB,EAA+C,IAAI,EAAkB,OAAO,EAAyG,MAAM,YAAY,CAAC;AAU1N,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAY9D,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,YAQzC;AAkBD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAmShF"} \ No newline at end of file +{"version":3,"file":"DxfEntityConvert.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ACAD/DxfEntityConvert.ts"],"names":[],"mappings":"AAAA,OAAkB,EAA+C,IAAI,EAAkB,OAAO,EAAyG,MAAM,YAAY,CAAC;AAU1N,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAY9D,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,YAQzC;AAkBD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CAoShF"} \ No newline at end of file diff --git a/types/Add-on/AlignLine/AlignLineGroupPanel.d.ts b/types/Add-on/AlignLine/AlignLineGroupPanel.d.ts new file mode 100644 index 0000000..78de384 --- /dev/null +++ b/types/Add-on/AlignLine/AlignLineGroupPanel.d.ts @@ -0,0 +1,45 @@ +import { ITreeNode } from "@blueprintjs/core"; +import React from "react"; +import { AlignLineGroupRecord } from "../../DatabaseServices/AlignLine/AlignLineGroupRecord"; +import "./AlignLineGroupCSS.less"; +import { AlignLineGroupModalStore } from "./AlignLineGroupStore"; +interface AlignLineGroupModalState { + nodes: ITreeNode[]; + rightNodes: ITreeNode[]; + canAlertOpen1: boolean; + alertType: number; +} +declare class NodeIDGenerator { + protected _nextID: number; + get nextID(): number; +} +export declare class AlignLineGroupPanel extends React.Component<{ + store: AlignLineGroupModalStore; +}, AlignLineGroupModalState> { + _RemoveFuncs: Function[]; + _CanCreateGroup: import("mobx").IObservableValue; + _CategoryMap: Map; + _SearchTypeInputRef: React.RefObject; + _SearchGroupInputRef: React.RefObject; + _GetNodeID: NodeIDGenerator; + _NeedUpdate: boolean; + constructor(props: any); + componentDidMount(): void; + componentWillUnmount(): void; + ParseNodes: () => ITreeNode<{}>[]; + RecoverSelectedNode: (nodes: ITreeNode[], leftNodes: ITreeNode[]) => void; + ForEachNode(nodes: ITreeNode[], callback: (node: ITreeNode) => void): void; + HandleNodeCollapse: (nodeData: ITreeNode, isCollapse: boolean) => void; + HandleNodeSelect: (node: ITreeNode, _nodePath: number[], e: React.MouseEvent | MouseEvent) => void; + ClearSelect: () => void; + ShowGroups: () => void; + AddAlignLineGroup: () => Promise; + AddProcessGroup: (name: string) => void; + DelGroup: (alignLineGroup: AlignLineGroupRecord) => void; + DelAlertConfirm: () => void; + ShowSelectBoards: () => Promise; + _Return: () => void; + render(): JSX.Element; +} +export {}; +//# sourceMappingURL=AlignLineGroupPanel.d.ts.map \ No newline at end of file diff --git a/types/Add-on/AlignLine/AlignLineGroupPanel.d.ts.map b/types/Add-on/AlignLine/AlignLineGroupPanel.d.ts.map new file mode 100644 index 0000000..a96b886 --- /dev/null +++ b/types/Add-on/AlignLine/AlignLineGroupPanel.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"AlignLineGroupPanel.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/AlignLine/AlignLineGroupPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA0B,SAAS,EAAgB,MAAM,mBAAmB,CAAC;AAGpF,OAAO,KAAK,MAAM,OAAO,CAAC;AAW1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,uDAAuD,CAAC;AAgB7F,OAAO,0BAA0B,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAqB,MAAM,uBAAuB,CAAC;AAEpF,UAAU,wBAAwB;IAE9B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,cAAM,eAAe;IAEjB,SAAS,CAAC,OAAO,EAAE,MAAM,CAAK;IAC9B,IAAI,MAAM,WAGT;CACJ;AAED,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,wBAAwB,CAAC;CAAE,EAAE,wBAAwB,CAAC;IAEpH,YAAY,EAAE,QAAQ,EAAE,CAAM;IAC9B,eAAe,2CAAyB;IACxC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAC9C,mBAAmB,oCAAuC;IAC1D,oBAAoB,oCAAuC;IAC3D,UAAU,EAAE,eAAe,CAAyB;IACpD,WAAW,UAAS;gBAER,KAAK,KAAA;IAYjB,iBAAiB;IAkBjB,oBAAoB;IAUpB,UAAU,wBAyHR;IAGF,mBAAmB,UAAW,SAAS,EAAE,aAAa,SAAS,EAAE,UAsB/D;IAGF,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI;IAcnE,kBAAkB,aAAc,SAAS,cAAc,OAAO,UAY5D;IAGF,gBAAgB,SAAU,SAAS,aAAa,MAAM,EAAE,KAAK,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,UAAU,UA8DrG;IAGF,WAAW,aAKT;IAGF,UAAU,aAqER;IAEF,iBAAiB,sBAsMf;IAGF,eAAe,SAAU,MAAM,UA2B7B;IAIF,QAAQ,mBAAoB,oBAAoB,UAS9C;IAGF,eAAe,aAmEb;IAEF,gBAAgB,sBAqCd;IAEF,OAAO,aAIL;IAEF,MAAM;CAyFT"} \ No newline at end of file diff --git a/types/Add-on/AlignLine/AlignLineGroupStore.d.ts b/types/Add-on/AlignLine/AlignLineGroupStore.d.ts new file mode 100644 index 0000000..d68ba16 --- /dev/null +++ b/types/Add-on/AlignLine/AlignLineGroupStore.d.ts @@ -0,0 +1,39 @@ +import { Singleton } from "../../Common/Singleton"; +import { AlignLineGroupRecord } from "../../DatabaseServices/AlignLine/AlignLineGroupRecord"; +import { CADObject } from "../../DatabaseServices/CADObject"; +import { Board } from "../../DatabaseServices/Entity/Board"; +import { Entity } from "../../DatabaseServices/Entity/Entity"; +import { IConfigOption } from "../../UI/Components/Board/UserConfigComponent"; +import { IConfigStore } from "../../UI/Store/BoardStore"; +export interface AlignLineNodeData { + self: CADObject; + parent: AlignLineGroupRecord; +} +interface TemplatePgData { + nodeName: string; + brarr: Board[]; +} +export interface AlignLineGroupOption { + alignLineGroupCategory: string[]; + alignLineGroupSpacing: number; +} +export declare class AlignLineGroupModalStore extends Singleton implements IConfigStore { + configName: string; + configsNames: string[]; + m_Option: AlignLineGroupOption; + flag: number; + checkEnts: Entity[]; + selectedLeftNode: string; + selectedRightNodeSet: Set; + selectedGroupSet: Set; + selectedObjectSet: Set; + selectedTempPgs: TemplatePgData[]; + tempPgs: TemplatePgData[]; + expandedNodesId: any[]; + InitOption: () => void; + UpdateOption: (config: IConfigOption) => void; + SaveConfig: () => IConfigOption; + ResetData: () => void; +} +export {}; +//# sourceMappingURL=AlignLineGroupStore.d.ts.map \ No newline at end of file diff --git a/types/Add-on/AlignLine/AlignLineGroupStore.d.ts.map b/types/Add-on/AlignLine/AlignLineGroupStore.d.ts.map new file mode 100644 index 0000000..ea88ec5 --- /dev/null +++ b/types/Add-on/AlignLine/AlignLineGroupStore.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"AlignLineGroupStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/AlignLine/AlignLineGroupStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uDAAuD,CAAC;AAC7F,OAAO,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,MAAM,WAAW,iBAAiB;IAE9B,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,oBAAoB,CAAC;CAChC;AAED,UAAU,cAAc;IAEpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IAEjC,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,qBAAqB,EAAE,MAAM,CAAC;CAEjC;AAOD,qBAAa,wBAAyB,SAAQ,SAAU,YAAW,YAAY;IAE3E,UAAU,EAAE,MAAM,CAAQ;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAC;IACX,QAAQ,EAAE,oBAAoB,CAAkC;IAC5E,IAAI,EAAE,MAAM,CAAK;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,gBAAgB,EAAE,MAAM,CAAM;IAC9B,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAE9C,gBAAgB,EAAE,GAAG,CAAC,oBAAoB,CAAC,CAAa;IAExD,iBAAiB,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAa;IACtD,eAAe,EAAE,cAAc,EAAE,CAAM;IACvC,OAAO,EAAE,cAAc,EAAE,CAAM;IAC/B,eAAe,QAAM;IAErB,UAAU,aAGR;IAEF,YAAY,WAAY,aAAa,CAAC,oBAAoB,CAAC,UAGzD;IAEF,UAAU,4CAKR;IAEF,SAAS,aAUP;CACL"} \ No newline at end of file diff --git a/types/Add-on/AlignLine/Command_AlignLineGroup.d.ts b/types/Add-on/AlignLine/Command_AlignLineGroup.d.ts new file mode 100644 index 0000000..67b8b90 --- /dev/null +++ b/types/Add-on/AlignLine/Command_AlignLineGroup.d.ts @@ -0,0 +1,6 @@ +import { Command } from "../../Editor/CommandMachine"; +export declare class Command_AlignLineGroup implements Command { + NoHistory: boolean; + exec(): Promise; +} +//# sourceMappingURL=Command_AlignLineGroup.d.ts.map \ No newline at end of file diff --git a/types/Add-on/AlignLine/Command_AlignLineGroup.d.ts.map b/types/Add-on/AlignLine/Command_AlignLineGroup.d.ts.map new file mode 100644 index 0000000..5b28731 --- /dev/null +++ b/types/Add-on/AlignLine/Command_AlignLineGroup.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Command_AlignLineGroup.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/AlignLine/Command_AlignLineGroup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAQtD,qBAAa,sBAAuB,YAAW,OAAO;IAElD,SAAS,UAAQ;IACX,IAAI;CAab"} \ No newline at end of file diff --git a/types/Add-on/ArcBoard/ArcBoardBuild.d.ts b/types/Add-on/ArcBoard/ArcBoardBuild.d.ts new file mode 100644 index 0000000..67d0708 --- /dev/null +++ b/types/Add-on/ArcBoard/ArcBoardBuild.d.ts @@ -0,0 +1,59 @@ +import { Geom3 } from "@jscad/modeling/src/geometries/types"; +import { BufferGeometry, Matrix4, Vector3 } from "three"; +import { Arc } from "../../DatabaseServices/Entity/Arc"; +import { Board } from "../../DatabaseServices/Entity/Board"; +import { Line } from "../../DatabaseServices/Entity/Line"; +import { Polyline } from "../../DatabaseServices/Entity/Polyline"; +import { FuzzyFactory } from "../../csg/core/FuzzyFactory"; +import { FaceDirection } from "../DrawDrilling/DrillType"; +export declare class ArcBoardBuild { + private _board; + private _SweepPath; + private _SweepAngle; + private _FaceDir; + private _SweepLengths; + private _SweepCurves1; + private _SweepCurves2; + private _SweepPath1; + private _SweepPath2; + _OCS2RotateMtx: Matrix4; + _Rotate2OCSMtx: Matrix4; + constructor(_board: Board, _SweepPath?: Polyline, _SweepAngle?: number, _FaceDir?: FaceDirection); + get SweepPath1(): Polyline; + get SweepPath2(): Polyline; + ParseContourLength(): void; + static OffsetPolyline(path: Polyline, dist: number): Polyline; + get OCS2RotateMtx(): Matrix4; + get Rotate2OCSMtx(): Matrix4; + ParseRotateMtx(): void; + get SweepCurves1(): (Line | Arc)[]; + get SweepCurves2(): (Line | Arc)[]; + ParseSweepCurves(): this; + get SweepLengths(): number[]; + get SweepLength(): number; + private _SweepEndDists; + get SweepEndDists(): number[]; + _CacheFuzzXFactory: FuzzyFactory; + _Cache_X_PosDirMap: Map; + _CornerFuzzFactory: FuzzyFactory; + _CornerSet: Set; + /** 临时板 计算平板的CSG */ + _csgBoard: Board; + /** 切割的位置 */ + private _splitXList; + get CSGBoard(): Board; + get SplitXList(): number[]; + /** 解析切割的位置 */ + private ParseSplitXlist; + /** 解析临时板 */ + private ParseCSGBoard; + /** 生成圆弧板的Geometry */ + BuildMeshEdgeGeom(csg?: Geom3): [BufferGeometry, BufferGeometry]; + /** 生成大孔面 */ + BuildBigHoleFace(): BufferGeometry; + private ParseCorner; + ParseAllX_Map(xs: number[]): void; + ParseAllX_Map_BigHole(xs: number[]): [FuzzyFactory, Map]; + PosMap2ArcPos(p: Vector3, cacheFuzzXFactory?: FuzzyFactory, cache_X_PosDirMap?: Map): void; +} +//# sourceMappingURL=ArcBoardBuild.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ArcBoard/ArcBoardBuild.d.ts.map b/types/Add-on/ArcBoard/ArcBoardBuild.d.ts.map new file mode 100644 index 0000000..5e29640 --- /dev/null +++ b/types/Add-on/ArcBoard/ArcBoardBuild.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ArcBoardBuild.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ArcBoard/ArcBoardBuild.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAS,MAAM,sCAAsC,CAAC;AAOpE,OAAO,EAAmB,cAAc,EAAS,OAAO,EAAS,OAAO,EAAE,MAAM,OAAO,CAAC;AAIxF,OAAO,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AACxD,OAAO,EAAE,KAAK,EAAa,MAAM,qCAAqC,CAAC;AAGvE,OAAO,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAOlE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG1D,qBAAa,aAAa;IAkBV,OAAO,CAAC,MAAM;IAEtB,OAAO,CAAC,UAAU;IAElB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,QAAQ;IApBpB,OAAO,CAAC,aAAa,CAAW;IAEhC,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,aAAa,CAAiB;IAEtC,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,WAAW,CAAW;IAG9B,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;gBAKJ,MAAM,EAAE,KAAK,EAErB,UAAU,GAAE,QAAgC,EAE5C,WAAW,GAAE,MAA0B,EACvC,QAAQ,gBAA0B;IAM9C,IAAI,UAAU,aAA+B;IAC7C,IAAI,UAAU,aAA+B;IAE7C,kBAAkB;IAOlB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ;IAO7D,IAAI,aAAa,IAAI,OAAO,CAQ3B;IACD,IAAI,aAAa,IAAI,OAAO,CAM3B;IACD,cAAc;IAcd,IAAI,YAAY,mBAGf;IAED,IAAI,YAAY,mBAGf;IAED,gBAAgB;IAoChB,IAAI,YAAY,aAKf;IAED,IAAI,WAAW,WAMd;IAED,OAAO,CAAC,cAAc,CAAW;IACjC,IAAI,aAAa,aAahB;IAoDD,kBAAkB,eAA6B;IAC/C,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAW;IAE9D,kBAAkB,EAAE,YAAY,CAAC;IACjC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,mBAAmB;IACnB,SAAS,EAAE,KAAK,CAAC;IACjB,YAAY;IACZ,OAAO,CAAC,WAAW,CAAW;IAE9B,IAAI,QAAQ,UAKX;IAED,IAAI,UAAU,aAKb;IAED,cAAc;IACd,OAAO,CAAC,eAAe;IA6BvB,YAAY;IACZ,OAAO,CAAC,aAAa;IA4FrB,qBAAqB;IACrB,iBAAiB,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC;IAoMhE,YAAY;IACZ,gBAAgB;IAyHhB,OAAO,CAAC,WAAW;IAWnB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE;IA2C1B,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,GAoCmB,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAGpG,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,iBAAiB,eAA0B,EAAE,iBAAiB,kCAA0B;CAkBrH"} \ No newline at end of file diff --git a/types/Add-on/ArcBoard/ArcBoardFeeding.d.ts b/types/Add-on/ArcBoard/ArcBoardFeeding.d.ts new file mode 100644 index 0000000..cca4d4f --- /dev/null +++ b/types/Add-on/ArcBoard/ArcBoardFeeding.d.ts @@ -0,0 +1,26 @@ +import { Board, IModeling } from "../../DatabaseServices/Entity/Board"; +import { Polyline } from "../../DatabaseServices/Entity/Polyline"; +import { FaceDirection } from "../DrawDrilling/DrillType"; +export interface ArcBoardOptions { + arcLength: number; + grooveSpacing: number; + grooveWidth: number; + retainedThickness: number; + knifeRadius: number; + grooveAddLength: number; + grooveAddWidth: number; + grooveAddDepth: number; + arcExtension: number; +} +export declare const defultArcBoardOption: ArcBoardOptions; +/** + * 解析圆弧板需要的走刀数据 + * @param br + * @param path 圆弧放样路径 + * @param angle 角度 + * @param dir 圆弧板见光面 见光面正面走刀颜色黄色,背面颜色红色 + * @param [onlyVert=false] 仅解析交点位置 (默认解析所有的槽) + * @returns 返回需要增加的槽的数据 + */ +export declare function ParseBoardArcFeed(br: Board, path: Polyline, angle: number, dir: FaceDirection, arcBoardOptions: Map, onlyVert?: boolean): IModeling[]; +//# sourceMappingURL=ArcBoardFeeding.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ArcBoard/ArcBoardFeeding.d.ts.map b/types/Add-on/ArcBoard/ArcBoardFeeding.d.ts.map new file mode 100644 index 0000000..ba264e1 --- /dev/null +++ b/types/Add-on/ArcBoard/ArcBoardFeeding.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ArcBoardFeeding.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ArcBoard/ArcBoardFeeding.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEvE,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAIlE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG1D,MAAM,WAAW,eAAe;IAE5B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACxB;AAGD,eAAO,MAAM,oBAAoB,EAAE,eAUlC,CAAC;AAGF;;;;;;;;KAQK;AACL,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,QAAQ,UAAQ,GAAG,SAAS,EAAE,CAyR5K"} \ No newline at end of file diff --git a/types/Add-on/ArcBoard/ArcBoardGeooveConfig/ArcBoardGroove.d.ts b/types/Add-on/ArcBoard/ArcBoardGeooveConfig/ArcBoardGroove.d.ts new file mode 100644 index 0000000..67b2f3d --- /dev/null +++ b/types/Add-on/ArcBoard/ArcBoardGeooveConfig/ArcBoardGroove.d.ts @@ -0,0 +1,16 @@ +import React from "react"; +import { BoardModalType } from "../../../UI/Components/Board/BoardModalType"; +import { IArcBoardGrooveOption } from "../../../UI/Store/OptionInterface/IOptionInterface"; +import { ArcBoardGrooveStore } from "./ArcBoardGrooveStore"; +export declare class ArcBoardGroove extends React.Component<{ + store: ArcBoardGrooveStore; + type: BoardModalType; +}, {}> { + curveBoardPars: string[][]; + defaultArcGroovePars1: string[][]; + defaultArcGroovePars2: string[][]; + curOption: IArcBoardGrooveOption; + componentDidMount(): void; + render(): JSX.Element; +} +//# sourceMappingURL=ArcBoardGroove.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ArcBoard/ArcBoardGeooveConfig/ArcBoardGroove.d.ts.map b/types/Add-on/ArcBoard/ArcBoardGeooveConfig/ArcBoardGroove.d.ts.map new file mode 100644 index 0000000..7402820 --- /dev/null +++ b/types/Add-on/ArcBoard/ArcBoardGeooveConfig/ArcBoardGroove.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ArcBoardGroove.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/ArcBoard/ArcBoardGeooveConfig/ArcBoardGroove.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAI7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAC3F,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,mBAAmB,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;CAAE,EAAE,EAAE,CAAC;IAE1G,cAAc,aAMZ;IAEF,qBAAqB,aAGnB;IAEF,qBAAqB,aAOnB;IAEF,SAAS,EAAE,qBAAqB,CAAC;IAEjC,iBAAiB,IAAI,IAAI;IAKzB,MAAM;CAoIT"} \ No newline at end of file diff --git a/types/Add-on/ArcBoard/ArcBoardGeooveConfig/ArcBoardGrooveStore.d.ts b/types/Add-on/ArcBoard/ArcBoardGeooveConfig/ArcBoardGrooveStore.d.ts new file mode 100644 index 0000000..f3a85b0 --- /dev/null +++ b/types/Add-on/ArcBoard/ArcBoardGeooveConfig/ArcBoardGrooveStore.d.ts @@ -0,0 +1,11 @@ +import { IConfigOption } from "../../../UI/Components/Board/UserConfigComponent"; +import { BoardStore } from "../../../UI/Store/BoardStore"; +import { IArcBoardGrooveOption } from "../../../UI/Store/OptionInterface/IOptionInterface"; +export declare class ArcBoardGrooveStore extends BoardStore { + title: string; + m_Option: IArcBoardGrooveOption; + InitOption(): void; + UpdateOption(cof: IConfigOption): void; + SaveConfig(): IConfigOption; +} +//# sourceMappingURL=ArcBoardGrooveStore.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ArcBoard/ArcBoardGeooveConfig/ArcBoardGrooveStore.d.ts.map b/types/Add-on/ArcBoard/ArcBoardGeooveConfig/ArcBoardGrooveStore.d.ts.map new file mode 100644 index 0000000..f804558 --- /dev/null +++ b/types/Add-on/ArcBoard/ArcBoardGeooveConfig/ArcBoardGrooveStore.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ArcBoardGrooveStore.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/ArcBoard/ArcBoardGeooveConfig/ArcBoardGrooveStore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,kDAAkD,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAE3F,qBAAa,mBAAoB,SAAQ,UAAU,CAAC,qBAAqB,CAAC;IAEtE,KAAK,SAAa;IACN,QAAQ,EAAE,qBAAqB,CAAuC;IAElF,UAAU;IAKV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,qBAAqB,CAAC,GAAG,IAAI;IAyB7D,UAAU;CAMb"} \ No newline at end of file diff --git a/types/Add-on/ArcBoard/ArcBoardStore.d.ts b/types/Add-on/ArcBoard/ArcBoardStore.d.ts new file mode 100644 index 0000000..8dd2251 --- /dev/null +++ b/types/Add-on/ArcBoard/ArcBoardStore.d.ts @@ -0,0 +1,13 @@ +import { IConfigOption } from "../../UI/Components/Board/UserConfigComponent"; +import { BoardStore } from "../../UI/Store/BoardStore"; +import { BoardConfigOption } from "../../UI/Store/OptionInterface/IOptionInterface"; +export declare class ArcBoardStore extends BoardStore { + title: string; + m_Option: BoardConfigOption; + UpdateUIOption(): void; + InitOption(): void; + UpdateOption(cof: IConfigOption): void; + SaveConfig(): IConfigOption; +} +export declare const arcBoardStore: ArcBoardStore; +//# sourceMappingURL=ArcBoardStore.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ArcBoard/ArcBoardStore.d.ts.map b/types/Add-on/ArcBoard/ArcBoardStore.d.ts.map new file mode 100644 index 0000000..612264b --- /dev/null +++ b/types/Add-on/ArcBoard/ArcBoardStore.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ArcBoardStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ArcBoard/ArcBoardStore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AAGpF,qBAAa,aAAc,SAAQ,UAAU,CAAC,iBAAiB,CAAC;IAE5D,KAAK,SAAS;IACF,QAAQ,EAAE,iBAAiB,CAMrC;IAEF,cAAc;IAKd,UAAU;IAMV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,iBAAiB,CAAC,GAAG,IAAI;IAKzD,UAAU;CAMb;AAED,eAAO,MAAM,aAAa,eAA8B,CAAC"} \ No newline at end of file diff --git a/types/Add-on/ArcBoard/DrawArcBoard.d.ts b/types/Add-on/ArcBoard/DrawArcBoard.d.ts new file mode 100644 index 0000000..f911214 --- /dev/null +++ b/types/Add-on/ArcBoard/DrawArcBoard.d.ts @@ -0,0 +1,17 @@ +import { Board } from "../../DatabaseServices/Entity/Board"; +import { Polyline } from "../../DatabaseServices/Entity/Polyline"; +import { Command } from "../../Editor/CommandMachine"; +export declare class Command_DrawArcBoard implements Command { + exec(): Promise; +} +export declare function GetArcBoardParams(path1: Polyline): Promise<{ + odir: number; + fdir: number; +}>; +export declare function DrawArcBoard(params: { + odir: number; + fdir: number; +}, path1: Polyline): Promise; +export declare function ApplyArcBoardByPathInfo(brs: Board[], odir: number, fdir: number, path1: Polyline): Promise; +export declare function Path2BoardPath(br: Board, path: Polyline): [number, boolean]; +//# sourceMappingURL=DrawArcBoard.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ArcBoard/DrawArcBoard.d.ts.map b/types/Add-on/ArcBoard/DrawArcBoard.d.ts.map new file mode 100644 index 0000000..8042dfb --- /dev/null +++ b/types/Add-on/ArcBoard/DrawArcBoard.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"DrawArcBoard.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ArcBoard/DrawArcBoard.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAmBtD,qBACa,oBAAqB,YAAW,OAAO;IAE1C,IAAI;CAwBb;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,QAAQ;;;GAmEtD;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;CAAE,EAAE,KAAK,EAAE,QAAQ,iBA8G1F;AAGD,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,iBA+FtG;AAGD,wBAAgB,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAoG3E"} \ No newline at end of file diff --git a/types/Add-on/Array.d.ts.map b/types/Add-on/Array.d.ts.map index bda19c4..954ec63 100644 --- a/types/Add-on/Array.d.ts.map +++ b/types/Add-on/Array.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Array.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Array.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAKhD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAQnD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAEtF,oBAAY,SAAS;IAEjB,SAAS,MAAM;IACf,MAAM,MAAM;CACf;AAED,oBAAY,YAAY;IAEpB,aAAa,IAAI;IACjB,eAAe,IAAI;IACnB,mBAAmB,IAAI;CAC1B;AACD,oBAAY,IAAI;IAEZ,WAAW,IAAI;IACf,SAAS,IAAI;IACb,SAAS,IAAI;IACb,eAAe,IAAI;IACnB,UAAU,IAAI;IACd,SAAS,IAAI;IACb,YAAY,IAAI;CACnB;AACD,MAAM,WAAW,aAAc,SAAQ,WAAW;IAE9C,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;CACtB;AACD,qBAAa,UAAW,SAAQ,SAAS;IAErC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IACnC,QAAQ,EAAE,aAAa,CAgBjC;IACF,IAAI,QAAQ,6BAKX;IACD,cAAc;IAYd,MAAM;IAIN,IAAI;IAIJ,OAAO,CAAC,KAAK,EAAE,MAAM;CAKxB;AACD,qBAAa,aAAc,YAAW,OAAO;IAEzC,UAAU,EAAE,UAAU,CAA4B;IAE5C,IAAI;CA4Pb"} \ No newline at end of file +{"version":3,"file":"Array.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Array.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIhD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAQnD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAGtF,oBAAY,SAAS;IAEjB,SAAS,MAAM;IACf,MAAM,MAAM;CACf;AAED,oBAAY,YAAY;IAEpB,aAAa,IAAI;IACjB,eAAe,IAAI;IACnB,mBAAmB,IAAI;CAC1B;AACD,oBAAY,IAAI;IAEZ,WAAW,IAAI;IACf,SAAS,IAAI;IACb,SAAS,IAAI;IACb,eAAe,IAAI;IACnB,UAAU,IAAI;IACd,SAAS,IAAI;IACb,YAAY,IAAI;CACnB;AACD,MAAM,WAAW,aAAc,SAAQ,WAAW;IAE9C,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;CACtB;AACD,qBAAa,UAAW,SAAQ,SAAS;IAErC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IACnC,QAAQ,EAAE,aAAa,CAgBjC;IACF,IAAI,QAAQ,6BAKX;IACD,cAAc;IAYd,MAAM;IAIN,IAAI;IAIJ,OAAO,CAAC,KAAK,EAAE,MAAM;CAKxB;AACD,qBAAa,aAAc,YAAW,OAAO;IAEzC,UAAU,EAAE,UAAU,CAA4B;IAE5C,IAAI;CA4Pb"} \ No newline at end of file diff --git a/types/Add-on/AutoHoleFaceSetting.d.ts b/types/Add-on/AutoHoleFaceSetting.d.ts index cc8e7e4..8d15ff2 100644 --- a/types/Add-on/AutoHoleFaceSetting.d.ts +++ b/types/Add-on/AutoHoleFaceSetting.d.ts @@ -1,25 +1,21 @@ +import { Singleton } from "../Common/Singleton"; import { Command } from "../Editor/CommandMachine"; import { IConfigOption } from "../UI/Components/Board/UserConfigComponent"; import { IConfigStore } from "../UI/Store/BoardStore"; +import { IAutoHoleFaceOption, IUiOption } from "../UI/Store/OptionInterface/IOptionInterface"; export declare class AutoHoleFaceSetting implements Command { - store: AutoHoleFaceSettingStore; exec(): Promise; } -declare class AutoHoleFaceSettingStore implements IConfigStore { +export declare class AutoHoleFaceSettingStore extends Singleton implements IConfigStore { configName: string; configsNames: string[]; - config: { - option: { - hight: number; - }; - }; + option: IAutoHoleFaceOption; + uiOption: IUiOption; InitOption(): void; - SaveConfig(): { - option: { - hight: number; - }; - }; + get UiOption(): IUiOption; + SaveConfig(): IConfigOption; UpdateOption(conf: IConfigOption): void; + HasInvailValue(): string; } -export {}; +export declare const autoHoleFaceSettingStore: AutoHoleFaceSettingStore; //# sourceMappingURL=AutoHoleFaceSetting.d.ts.map \ No newline at end of file diff --git a/types/Add-on/AutoHoleFaceSetting.d.ts.map b/types/Add-on/AutoHoleFaceSetting.d.ts.map index 8a54d46..0fee432 100644 --- a/types/Add-on/AutoHoleFaceSetting.d.ts.map +++ b/types/Add-on/AutoHoleFaceSetting.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"AutoHoleFaceSetting.d.ts","sourceRoot":"","sources":["../../../src/Add-on/AutoHoleFaceSetting.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGnD,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAItD,qBAAa,mBAAoB,YAAW,OAAO;IAE/C,KAAK,EAAE,wBAAwB,CAAC;IAC1B,IAAI;CAmDb;AAGD,cAAM,wBAAyB,YAAW,YAAY;IAElD,UAAU,SAAQ;IAClB,YAAY,WAAU;IACtB,MAAM;;;;MAIJ;IACF,UAAU;IAQV,UAAU;;;;;IAIV,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC;CAIxC"} \ No newline at end of file +{"version":3,"file":"AutoHoleFaceSetting.d.ts","sourceRoot":"","sources":["../../../src/Add-on/AutoHoleFaceSetting.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIhD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAG3E,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAG9F,qBAAa,mBAAoB,YAAW,OAAO;IAEzC,IAAI;CAgDb;AAGD,qBAAa,wBAAyB,SAAQ,SAAU,YAAW,YAAY;IAE/D,UAAU,SAAQ;IAClB,YAAY,WAAU;IACtB,MAAM,EAAE,mBAAmB,CAKrC;IACU,QAAQ,EAAE,SAAS,CAAC,mBAAmB,CAAC,CAAC;IAErD,UAAU;IASV,IAAI,QAAQ,mCAKX;IACD,UAAU;IAMV,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC;IAmBrC,cAAc;CAOjB;AAED,eAAO,MAAM,wBAAwB,EAA6C,wBAAwB,CAAC"} \ No newline at end of file diff --git a/types/Add-on/BackgroundSwitching.d.ts b/types/Add-on/BackgroundSwitching.d.ts index 905ac0c..d499c76 100644 --- a/types/Add-on/BackgroundSwitching.d.ts +++ b/types/Add-on/BackgroundSwitching.d.ts @@ -1,6 +1,6 @@ import { Command } from "../Editor/CommandMachine"; export declare class BackgroundSwitching implements Command { - Transparency: true; + Transparency: boolean; exec(): Promise; } //# sourceMappingURL=BackgroundSwitching.d.ts.map \ No newline at end of file diff --git a/types/Add-on/BackgroundSwitching.d.ts.map b/types/Add-on/BackgroundSwitching.d.ts.map index f04d279..affb1cc 100644 --- a/types/Add-on/BackgroundSwitching.d.ts.map +++ b/types/Add-on/BackgroundSwitching.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BackgroundSwitching.d.ts","sourceRoot":"","sources":["../../../src/Add-on/BackgroundSwitching.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,qBAAa,mBAAoB,YAAW,OAAO;IAE/C,YAAY,EAAE,IAAI,CAAC;IACb,IAAI;CASb"} \ No newline at end of file +{"version":3,"file":"BackgroundSwitching.d.ts","sourceRoot":"","sources":["../../../src/Add-on/BackgroundSwitching.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,qBAAa,mBAAoB,YAAW,OAAO;IAE/C,YAAY,UAAQ;IACd,IAAI;CASb"} \ No newline at end of file diff --git a/types/Add-on/Batch/BatchModifySealOrDrill.d.ts.map b/types/Add-on/Batch/BatchModifySealOrDrill.d.ts.map index 0feb777..28008f2 100644 --- a/types/Add-on/Batch/BatchModifySealOrDrill.d.ts.map +++ b/types/Add-on/Batch/BatchModifySealOrDrill.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BatchModifySealOrDrill.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Batch/BatchModifySealOrDrill.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAgCtD,qBAAa,WAAY,YAAW,OAAO;IAEjC,IAAI;CAuEb;AAGD,qBAAa,6BAA8B,YAAW,OAAO;IAEnD,IAAI;CAoBb;AAGD,qBAAa,6BAA8B,YAAW,OAAO;IAEnD,IAAI;CAYb"} \ No newline at end of file +{"version":3,"file":"BatchModifySealOrDrill.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Batch/BatchModifySealOrDrill.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAgCtD,qBAAa,WAAY,YAAW,OAAO;IAEjC,IAAI;CAuFb;AAGD,qBAAa,6BAA8B,YAAW,OAAO;IAEnD,IAAI;CAoBb;AAGD,qBAAa,6BAA8B,YAAW,OAAO;IAEnD,IAAI;CAYb"} \ No newline at end of file diff --git a/types/Add-on/BoardConver2Rect/CMD_BoardConver2Rect.d.ts b/types/Add-on/BoardConver2Rect/CMD_BoardConver2Rect.d.ts new file mode 100644 index 0000000..f3f2c9e --- /dev/null +++ b/types/Add-on/BoardConver2Rect/CMD_BoardConver2Rect.d.ts @@ -0,0 +1,5 @@ +import { Command } from "../../Editor/CommandMachine"; +export declare class Command_CMD_BoardConver2Rect implements Command { + exec(): Promise; +} +//# sourceMappingURL=CMD_BoardConver2Rect.d.ts.map \ No newline at end of file diff --git a/types/Add-on/BoardConver2Rect/CMD_BoardConver2Rect.d.ts.map b/types/Add-on/BoardConver2Rect/CMD_BoardConver2Rect.d.ts.map new file mode 100644 index 0000000..19a827b --- /dev/null +++ b/types/Add-on/BoardConver2Rect/CMD_BoardConver2Rect.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"CMD_BoardConver2Rect.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardConver2Rect/CMD_BoardConver2Rect.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAItD,qBAAa,4BAA6B,YAAW,OAAO;IAElD,IAAI;CAoBb"} \ No newline at end of file diff --git a/types/Add-on/BoardCutting/AutoCuttingReactor.d.ts b/types/Add-on/BoardCutting/AutoCuttingReactor.d.ts index bb188eb..d3243b5 100644 --- a/types/Add-on/BoardCutting/AutoCuttingReactor.d.ts +++ b/types/Add-on/BoardCutting/AutoCuttingReactor.d.ts @@ -1,10 +1,5 @@ -import { Board } from "../../DatabaseServices/Entity/Board"; -export declare class AutoCuttingReactor { - constructor(); - StartReactor(ents: Board[]): Promise; -} /** * 对绘制出来的板件自动切割其周围的板件 */ -export declare function AutoCutting(isRelevance: boolean, needRelevanceHardware?: boolean): Promise; +export declare function AutoCutting(isRelevance: boolean): Promise; //# sourceMappingURL=AutoCuttingReactor.d.ts.map \ No newline at end of file diff --git a/types/Add-on/BoardCutting/AutoCuttingReactor.d.ts.map b/types/Add-on/BoardCutting/AutoCuttingReactor.d.ts.map index a0a1d35..418549c 100644 --- a/types/Add-on/BoardCutting/AutoCuttingReactor.d.ts.map +++ b/types/Add-on/BoardCutting/AutoCuttingReactor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"AutoCuttingReactor.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/AutoCuttingReactor.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAK5D,qBAAa,kBAAkB;;IAwBrB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE;CAWnC;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,OAAO,EAAE,qBAAqB,UAAQ,iBAoBpF"} \ No newline at end of file +{"version":3,"file":"AutoCuttingReactor.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/AutoCuttingReactor.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,WAAW,CAAC,WAAW,EAAE,OAAO,iBAkBrD"} \ No newline at end of file diff --git a/types/Add-on/BoardCutting/CuttingUtils2.d.ts b/types/Add-on/BoardCutting/CuttingUtils2.d.ts index 09a30c9..48daee4 100644 --- a/types/Add-on/BoardCutting/CuttingUtils2.d.ts +++ b/types/Add-on/BoardCutting/CuttingUtils2.d.ts @@ -1,6 +1,14 @@ -import { ExtrudeHole } from "../../DatabaseServices/3DSolid/ExtrudeHole"; import { Board } from "../../DatabaseServices/Entity/Board"; import { HardwareCompositeEntity } from "../../DatabaseServices/Hardware/HardwareCompositeEntity"; export declare function CuttingBoardByBoard(meats: Board[], knifs: Board[], isRelevance?: boolean): void; -export declare function CuttingBoardByHardware(meats: Board[], hardwares: (HardwareCompositeEntity | ExtrudeHole)[]): Promise; +/** + * 五金切板 + * + * @export + * @param {Board[]} meats 被切割的板 + * @param {HardwareCompositeEntity[]} hardwares 五金当做刀 + * @param {boolean} [relevanceCut=true] 默认是关联切割 + * @return {*} {Promise} + */ +export declare function CuttingBoardByHardware(meats: Board[], hardwares: HardwareCompositeEntity[], relevanceCut?: boolean): Promise; //# sourceMappingURL=CuttingUtils2.d.ts.map \ No newline at end of file diff --git a/types/Add-on/BoardCutting/CuttingUtils2.d.ts.map b/types/Add-on/BoardCutting/CuttingUtils2.d.ts.map index 5159cdd..36813be 100644 --- a/types/Add-on/BoardCutting/CuttingUtils2.d.ts.map +++ b/types/Add-on/BoardCutting/CuttingUtils2.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CuttingUtils2.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/CuttingUtils2.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AAGlG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,UAAO,QA0DrF;AAED,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,uBAAuB,GAAG,WAAW,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2EhI"} \ No newline at end of file +{"version":3,"file":"CuttingUtils2.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/CuttingUtils2.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AAGlG,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,UAAO,QA0DrF;AAED;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,uBAAuB,EAAE,EAAE,YAAY,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAqFrI"} \ No newline at end of file diff --git a/types/Add-on/BoardCutting/DeleteRelevance.d.ts.map b/types/Add-on/BoardCutting/DeleteRelevance.d.ts.map index 831e57c..2a1e54c 100644 --- a/types/Add-on/BoardCutting/DeleteRelevance.d.ts.map +++ b/types/Add-on/BoardCutting/DeleteRelevance.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DeleteRelevance.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/DeleteRelevance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAKtD,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CA8Cb"} \ No newline at end of file +{"version":3,"file":"DeleteRelevance.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/DeleteRelevance.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAGtD,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CA8Cb"} \ No newline at end of file diff --git a/types/Add-on/BoardCutting/HardwareCuttingReactor.d.ts b/types/Add-on/BoardCutting/HardwareCuttingReactor.d.ts index 69d74e6..ef9ef2c 100644 --- a/types/Add-on/BoardCutting/HardwareCuttingReactor.d.ts +++ b/types/Add-on/BoardCutting/HardwareCuttingReactor.d.ts @@ -1,9 +1,8 @@ -import { ExtrudeHole } from "../../DatabaseServices/3DSolid/ExtrudeHole"; import { Board } from "../../DatabaseServices/Entity/Board"; import { HardwareCompositeEntity } from "../../DatabaseServices/Hardware/HardwareCompositeEntity"; export declare class HardwareCuttingReactor { EnableHardware: boolean; constructor(); - StartReactor(hardwares: (HardwareCompositeEntity | ExtrudeHole)[], ents: Set): Promise; + StartReactor(hardwares: HardwareCompositeEntity[], ents: Set): Promise; } //# sourceMappingURL=HardwareCuttingReactor.d.ts.map \ No newline at end of file diff --git a/types/Add-on/BoardCutting/HardwareCuttingReactor.d.ts.map b/types/Add-on/BoardCutting/HardwareCuttingReactor.d.ts.map index 2361412..d60d375 100644 --- a/types/Add-on/BoardCutting/HardwareCuttingReactor.d.ts.map +++ b/types/Add-on/BoardCutting/HardwareCuttingReactor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HardwareCuttingReactor.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/HardwareCuttingReactor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AAGlG,qBAAa,sBAAsB;IAE/B,cAAc,UAAQ;;IA+BhB,YAAY,CAAC,SAAS,EAAE,CAAC,uBAAuB,GAAG,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC;CAU5F"} \ No newline at end of file +{"version":3,"file":"HardwareCuttingReactor.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/HardwareCuttingReactor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AAGlG,qBAAa,sBAAsB;IAG/B,cAAc,UAAQ;;IA+BhB,YAAY,CAAC,SAAS,EAAE,uBAAuB,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC;CAU5E"} \ No newline at end of file diff --git a/types/Add-on/BoardCutting/LinearCutting.d.ts b/types/Add-on/BoardCutting/LinearCutting.d.ts index c9aba0d..e0b0e56 100644 --- a/types/Add-on/BoardCutting/LinearCutting.d.ts +++ b/types/Add-on/BoardCutting/LinearCutting.d.ts @@ -1,10 +1,22 @@ import { Vector3 } from "three"; import { Board } from "../../DatabaseServices/Entity/Board"; import { ExtrudeContourCurve } from "../../DatabaseServices/Entity/Extrude"; +import { Polyline } from "../../DatabaseServices/Entity/Polyline"; import { Command } from "../../Editor/CommandMachine"; export declare class LinearCutting implements Command { exec(): Promise; - protected SplitBoard(br: Board, cus: ExtrudeContourCurve[]): void; + /** 针对圆弧板的分裂处理 */ + private ProcessForSweepInSplitBoard; + /** 根据轮廓曲线分裂板件 + * @param br 被切割的板件 + * @param cus 切割后的轮廓曲线 + * @param SweepPaths 切割后的放样路径(针对圆弧板) + * @param contourBiases 用于修正轮廓位置的偏移值(针对圆弧板) + */ + protected SplitBoard(br: Board, cus: ExtrudeContourCurve[], SweepPaths: Polyline[], contourBiases: { + x: number; + y: number; + }[]): void; protected GetCuttingPoints(): Promise; } export declare class RectLinearCutting extends LinearCutting { diff --git a/types/Add-on/BoardCutting/LinearCutting.d.ts.map b/types/Add-on/BoardCutting/LinearCutting.d.ts.map index cbff503..806953a 100644 --- a/types/Add-on/BoardCutting/LinearCutting.d.ts.map +++ b/types/Add-on/BoardCutting/LinearCutting.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"LinearCutting.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/LinearCutting.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,OAAO,EAAE,MAAM,OAAO,CAAC;AAIhD,OAAO,EAAE,KAAK,EAAe,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAE5E,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAStD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;IA+LV,SAAS,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,mBAAmB,EAAE;cAmC1C,gBAAgB,IAAI,OAAO,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC;CAwBrE;AAED,qBAAa,iBAAkB,SAAQ,aAAa;cAEhC,gBAAgB,IAAI,OAAO,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC;CAerE"} \ No newline at end of file +{"version":3,"file":"LinearCutting.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/LinearCutting.ts"],"names":[],"mappings":"AACA,OAAO,EAA8B,OAAO,EAAE,MAAM,OAAO,CAAC;AAK5D,OAAO,EAAE,KAAK,EAAe,MAAM,qCAAqC,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EAAoB,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAUtD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;IA2JV,iBAAiB;IACjB,OAAO,CAAC,2BAA2B;IAmDnC;;;;;OAKG;IACH,SAAS,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,mBAAmB,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,aAAa,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;KAAE,EAAE;cAkD9G,gBAAgB,IAAI,OAAO,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC;CAwBrE;AAED,qBAAa,iBAAkB,SAAQ,aAAa;cAEhC,gBAAgB,IAAI,OAAO,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC;CAerE"} \ No newline at end of file diff --git a/types/Add-on/BoardCutting/LinearCuttingForSweep.d.ts b/types/Add-on/BoardCutting/LinearCuttingForSweep.d.ts new file mode 100644 index 0000000..eab8a49 --- /dev/null +++ b/types/Add-on/BoardCutting/LinearCuttingForSweep.d.ts @@ -0,0 +1,137 @@ +import { Matrix4, Vector2, Vector3 } from "three"; +import { Board } from "../../DatabaseServices/Entity/Board"; +import { Line } from "../../DatabaseServices/Entity/Line"; +import { Polyline } from "../../DatabaseServices/Entity/Polyline"; +/** 针对圆弧板的线性切割 */ +export declare class LinearCuttingForSweep { + br: Board; + splitPl: Polyline; + /** 点集生成二维刀 */ + static CreateSplitPl(pts: Vector3[]): Polyline; + /** 生成圆弧板的切割器*/ + constructor(br: Board, splitPl: Polyline); + /** + * 进行切割 + * @param {Polyline[]} clipPls 用于切割的刀 + * @returns {[Polyline[], Polyline[], {x:number; y:number}[]]} [切割后轮廓, 切割后路径, 切割后轮廓的偏移值] + * @第一步 判断当前切割的视图类型 + * @第二步 根据视图类型判断切割的是路径还是面 + * @第三步 把被切割对象(路径与板包围盒)平移到对应视图的平面 + * @第四步 旋转被切割对象到XOY平面 + * @第五步 在XOY平面下进行切割 + */ + Split(ucs: Matrix4, clipPls?: Polyline[]): [Polyline[], Polyline[], { + x: number; + y: number; + }[]]; + /** + * 切割面 + * @param {Polyline} sweepPathInWCS 放样路径 + * @param {Line[]} brBoxLines 板包围盒 + * @param {Polyline} pathBoxPl 路径包围盒 + * @第一步 计算刀与板包围盒的交点,以及在盒内的顶点,记住采样点 + * @第二步 记录采样点在刀上的位置,并移动到路径所在的平面 + * @第三步 根据采样点生成垂直于XOY平面的直线 + * @第四步 计算这些直线与路径的交点 + * @第五步 将这些交点映射到展开后的路径上 + * @第六步 根据记录的位置排序这些点,并生成新的刀 + */ + SplitInPlane(sweepPathInWCS: Polyline, brBoxLines: Line[], pathBoxPl: Polyline): [Polyline[], Polyline[], { + x: number; + y: number; + }[]]; + /** 判断视图类型 */ + private GetViewStr; + /** 判断切割的是路径还是面 */ + private IsPathOrPlane; + /** 获取调整角度(用于处理放样角度带来的影响) */ + private GetAdjustAngle; + /** 统一板包围盒与路径包围盒一致 */ + private UnifyBrBoxAndPathBox; + /** 平移路径到对应视图平面 */ + private MovePathToView; + /** 平移板包围盒到对应视图平面 */ + private MoveBrBoxToView; + /** 旋转到俯视图下(即XOY平面) */ + private RotateToXOY; + /** 修正放样角度带来的影响(比如求不到交点) */ + private AdjustForSweepAngle; + /** 对路径进行细化 */ + private Tessellate; + /** 规范超出的部分 */ + private AdjustOverBox; + /** 获取板件坐标系下的放样路径 */ + private GetSweepPathInOCS; + /** 获取板件坐标系下的放样路径并与板件的边对齐 */ + private GetSweepPathInOCSWithBr; + /** 求得的板包围盒的交点与盒内的顶点 */ + private GetPtsInbrBox; + /** 切割路径 */ + SplitInPath(sweepPathInWCS: Polyline): [Polyline[], Polyline[], { + x: number; + y: number; + }[]]; + /** 获取原始位置与切割位置的变换信息 */ + private GetPositionData; + /** 旋转平移到切割位置 */ + private ToSplitPosition; + /** 平移旋转到原始位置 */ + private ReSplitPosition; + /** 用刀去切割板(包括轮廓与路径) */ + private SplitBrByKnifes; + /** + * @todo 这个是旧方案,先临时用一用,后面再重构 + * 针对圆弧板进行切割 + * @param br 被切割的板 + * @param clipPls 用于切割的线 + * @问 圆弧板的切割与普通板有何区别? + * @答 切割位置应变长(因为板弯曲了,而板轮廓没有),且放样路径也应被切割 + * @着手点 [1]修正板轮廓的切割位置 [2]获取正确的放样路径集 + * @修正位置 通过param进行逆映射,从而得到正确的切割位置 + * @获取路径 首先要明确一件事,路径需要改变,是因为切割后的板的基点(aabb中X最小的点)可能发生变化 + * 所以,我们需要根据新的基点生成新的路径,新基点沿路径方向与旧基点的差值(恒正)作为生成新路径的切割线(垂直X轴) + * 若切割线与路径平行,则新旧基点一致,无需修改 + */ + private SplitBySweep; + /** 获得新的刀(多段线) */ + private GetSplitPls; + /** 获取被切割后的放样路径集 */ + private GetSweepPaths; +} +/** 视图类型 */ +export declare enum ViewType { + Normal = "\u6B63\u89C6\u56FE", + Front = "\u524D\u89C6\u56FE", + Left = "\u5DE6\u89C6\u56FE", + Right = "\u53F3\u89C6\u56FE", + Down = "\u4FEF\u89C6\u56FE", + Unknown = "\u672A\u77E5\u89C6\u56FE" +} +/** 视图管理器 */ +export declare class ViewManager { + /** 获取视图对应的矩阵 */ + static GetViewMatrix(viewType: ViewType): Matrix4; + /** 判断矩阵位于哪个视图 */ + static MatrixIsView(m: Matrix4): ViewType.Front | ViewType.Left | ViewType.Right | ViewType.Down | ViewType.Unknown; +} +/** 线段管理器 */ +export declare class CurveManager { + /** X轴的平行线 */ + static CreateXLine: (p: Vector3) => Line; + /** Y轴的平行线 */ + static CreateYLine: (p: Vector3) => Line; + /** Z轴的平行线 */ + static CreateZLine: (p: Vector3) => Line; + /** 通过点集生成多段线 */ + static CreatePolyline: (ps: Vector2[]) => Polyline; + static CreateExpandPl(pl: Polyline): Polyline; + /** 绘制矩阵所表示的坐标系 */ + static CreateAxis(m: Matrix4): Line[]; + /** 点集转线段簇 */ + static PtsToLines(pts: Vector3[]): Line[]; + /** 线段簇转多段线 */ + static LinesToPl(lines: Line[]): Polyline; + /** 获取pA-pB之间的曲线 */ + static Get_Pl_InPtAtoPtB(pl: Polyline, pA: Vector3, pB: Vector3): Polyline; +} +//# sourceMappingURL=LinearCuttingForSweep.d.ts.map \ No newline at end of file diff --git a/types/Add-on/BoardCutting/LinearCuttingForSweep.d.ts.map b/types/Add-on/BoardCutting/LinearCuttingForSweep.d.ts.map new file mode 100644 index 0000000..802672b --- /dev/null +++ b/types/Add-on/BoardCutting/LinearCuttingForSweep.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"LinearCuttingForSweep.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/LinearCuttingForSweep.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Add-on/BoardCutting/ReferenceCutting.d.ts.map b/types/Add-on/BoardCutting/ReferenceCutting.d.ts.map index c54e822..e045494 100644 --- a/types/Add-on/BoardCutting/ReferenceCutting.d.ts.map +++ b/types/Add-on/BoardCutting/ReferenceCutting.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ReferenceCutting.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/ReferenceCutting.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAQtD,qBAAa,gBAAiB,YAAW,OAAO;IAEtC,IAAI;CA+Jb"} \ No newline at end of file +{"version":3,"file":"ReferenceCutting.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/ReferenceCutting.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAQtD,qBAAa,gBAAiB,YAAW,OAAO;IAEtC,IAAI;CAgKb"} \ No newline at end of file diff --git a/types/Add-on/BoardCutting/SplitBoardSideModel.d.ts b/types/Add-on/BoardCutting/SplitBoardSideModel.d.ts new file mode 100644 index 0000000..8e89091 --- /dev/null +++ b/types/Add-on/BoardCutting/SplitBoardSideModel.d.ts @@ -0,0 +1,13 @@ +import { Board } from "../../DatabaseServices/Entity/Board"; +export declare class SplitBoardSideModelUtil { + private OrgBoardOCS; + private CacheSideModel; + private OldSealCurves; + constructor(br: Board); + Init(br: Board, isSpecialShape?: boolean): void; + CheckSideModel(): boolean; + SetBoardSideModel(br: Board): void; + SpiltSideModelOfBrContour(br: Board): void; + SpiltSideModelOfBrThickness(br: Board, thickness: number): void; +} +//# sourceMappingURL=SplitBoardSideModel.d.ts.map \ No newline at end of file diff --git a/types/Add-on/BoardCutting/SplitBoardSideModel.d.ts.map b/types/Add-on/BoardCutting/SplitBoardSideModel.d.ts.map new file mode 100644 index 0000000..05dc997 --- /dev/null +++ b/types/Add-on/BoardCutting/SplitBoardSideModel.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"SplitBoardSideModel.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/SplitBoardSideModel.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAa5D,qBAAa,uBAAuB;IAGhC,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,cAAc,CAA0C;IAChE,OAAO,CAAC,aAAa,CAAe;gBAExB,EAAE,EAAE,KAAK;IAKrB,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,cAAc,UAAQ;IA2BtC,cAAc,IAAI,OAAO;IASzB,iBAAiB,CAAC,EAAE,EAAE,KAAK;IAW3B,yBAAyB,CAAC,EAAE,EAAE,KAAK;IA4GnC,2BAA2B,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM;CAmD3D"} \ No newline at end of file diff --git a/types/Add-on/BoardCutting/SplitPolyline.d.ts b/types/Add-on/BoardCutting/SplitPolyline.d.ts new file mode 100644 index 0000000..78fa903 --- /dev/null +++ b/types/Add-on/BoardCutting/SplitPolyline.d.ts @@ -0,0 +1,10 @@ +import { Polyline } from "../../DatabaseServices/Entity/Polyline"; +/** + * 线性切割多线段 + * @param {Polyline} meatPl 被切割的曲线 + * @param {Polyline[]} knifePls 刀曲线 + * @param {boolean} [isSweep = false] 是否为圆弧板(被切割的曲线是否为圆弧板的轮廓) + * @return {Polyline[]} 切割后的多线段 + */ +export declare function SplitPolyline(meatPl: Polyline, knifePls: Polyline[], isSweep?: boolean): Polyline[]; +//# sourceMappingURL=SplitPolyline.d.ts.map \ No newline at end of file diff --git a/types/Add-on/BoardCutting/SplitPolyline.d.ts.map b/types/Add-on/BoardCutting/SplitPolyline.d.ts.map new file mode 100644 index 0000000..821f3a2 --- /dev/null +++ b/types/Add-on/BoardCutting/SplitPolyline.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"SplitPolyline.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardCutting/SplitPolyline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAKlE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,UAAQ,GAAG,QAAQ,EAAE,CA+DjG"} \ No newline at end of file diff --git a/types/Add-on/BoardEditor/SerializeBoardData.d.ts b/types/Add-on/BoardEditor/SerializeBoardData.d.ts index 7bf6cb0..9c0a4a3 100644 --- a/types/Add-on/BoardEditor/SerializeBoardData.d.ts +++ b/types/Add-on/BoardEditor/SerializeBoardData.d.ts @@ -1,5 +1,6 @@ import { CADFiler } from "../../DatabaseServices/CADFiler"; import { I2DModeling, I3DModeling } from "../../DatabaseServices/Entity/Board"; +import { ExtrudeSolid } from "../../DatabaseServices/Entity/Extrude"; import { BoardProcessOption } from "../../UI/Store/OptionInterface/BoardProcessOption"; /**序列化板件数据 */ export declare function serializeBoardData(file: CADFiler, processData: BoardProcessOption): void; @@ -8,4 +9,6 @@ export declare function SerializeBoard2DModeingData(file: CADFiler, modelList: I export declare function SerializeBoard3DModeingData(file: CADFiler, modelList: I3DModeling[]): void; export declare function DeserializationBoard2DModeingData(file: CADFiler, data: I2DModeling[], ver: number): void; export declare function DeserializationBoard3DModeingData(file: CADFiler, data: I3DModeling[], ver: number): void; +export declare function SerializeBoardSideModeingData(file: CADFiler, sideModelingMap: Map): void; +export declare function DeserializationBoardSideModeingData(file: CADFiler, sideModelingMap: Map): void; //# sourceMappingURL=SerializeBoardData.d.ts.map \ No newline at end of file diff --git a/types/Add-on/BoardEditor/SerializeBoardData.d.ts.map b/types/Add-on/BoardEditor/SerializeBoardData.d.ts.map index 9f96ce1..e2e0995 100644 --- a/types/Add-on/BoardEditor/SerializeBoardData.d.ts.map +++ b/types/Add-on/BoardEditor/SerializeBoardData.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SerializeBoardData.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardEditor/SerializeBoardData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAa,MAAM,qCAAqC,CAAC;AAE1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AAEvF,aAAa;AACb,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,QAoCjF;AAGD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,QAkDpG;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAkBnF;AACD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAiBnF;AAGD,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,QA8BjG;AAED,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,QAwBjG"} \ No newline at end of file +{"version":3,"file":"SerializeBoardData.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardEditor/SerializeBoardData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAa,MAAM,qCAAqC,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAErE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AAEvF,aAAa;AACb,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,QAqCjF;AAGD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,QAyDpG;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAmBnF;AACD,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,QAiBnF;AAGD,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,QAuCjG;AAED,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,QAwBjG;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,QAYzG;AAED,wBAAgB,mCAAmC,CAAC,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC,QAmB/G"} \ No newline at end of file diff --git a/types/Add-on/BoardFindModify.d.ts b/types/Add-on/BoardFindModify.d.ts index 8c9d1f3..943e5a3 100644 --- a/types/Add-on/BoardFindModify.d.ts +++ b/types/Add-on/BoardFindModify.d.ts @@ -3,11 +3,13 @@ import { ECompareType } from "../UI/Store/BoardFindInterface"; export declare class BoardFindModify implements Command { private isModifyHwMatrial; exec(): Promise; - private GetBoards; + private GetEntitys; private PutSelectList; + private FilterTypes; private FindBrs; private FilterBr; private FilterBrSize; + private FilterUndefined; private ModifyBrs; private ModifyBr; private FindMaxSizeBrs; @@ -18,6 +20,8 @@ export declare class BoardFindModify implements Command { private RemoveBoardModelingOrSpecialShape; private ModifyHardware; private FilterHardware; + private OnlyModifyRoomAndCabinetName; + private FilterOnlyRoomAndCabinetNameEntity; CheckDoorDir(name: string, doorOpenDir: number): boolean; } /** diff --git a/types/Add-on/BoardFindModify.d.ts.map b/types/Add-on/BoardFindModify.d.ts.map index 2aa1f87..2912204 100644 --- a/types/Add-on/BoardFindModify.d.ts.map +++ b/types/Add-on/BoardFindModify.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardFindModify.d.ts","sourceRoot":"","sources":["../../../src/Add-on/BoardFindModify.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,OAAO,EAAc,YAAY,EAA+C,MAAM,gCAAgC,CAAC;AAMvH,qBAAa,eAAgB,YAAW,OAAO;IAE3C,OAAO,CAAC,iBAAiB,CAAS;IAC5B,IAAI;YAyCI,SAAS;IAmBvB,OAAO,CAAC,aAAa;YAQP,OAAO;IA2CrB,OAAO,CAAC,QAAQ;IAsKhB,OAAO,CAAC,YAAY;YAiBN,SAAS;IAYvB,OAAO,CAAC,QAAQ;YA+KF,cAAc;YAKd,cAAc;YAKd,iBAAiB;YASjB,cAAc;YA8Dd,iBAAiB;YAcjB,iCAAiC;YAyBjC,cAAc;IAiC5B,OAAO,CAAC,cAAc;IA0DtB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAsCjD;AAOD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,WAmCrH"} \ No newline at end of file +{"version":3,"file":"BoardFindModify.d.ts","sourceRoot":"","sources":["../../../src/Add-on/BoardFindModify.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAOnD,OAAO,EAAc,YAAY,EAA+C,MAAM,gCAAgC,CAAC;AAQvH,qBAAa,eAAgB,YAAW,OAAO;IAE3C,OAAO,CAAC,iBAAiB,CAAS;IAC5B,IAAI;YA0CI,UAAU;IAmBxB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,WAAW;YAwBL,OAAO;IA4CrB,OAAO,CAAC,QAAQ;IA4PhB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,eAAe;YAYT,SAAS;IAkBvB,OAAO,CAAC,QAAQ;YA2NF,cAAc;YAKd,cAAc;YAKd,iBAAiB;YASjB,cAAc;YAsFd,iBAAiB;YAcjB,iCAAiC;YAyBjC,cAAc;IA8C5B,OAAO,CAAC,cAAc;IA4DtB,OAAO,CAAC,4BAA4B;IAqBpC,OAAO,CAAC,kCAAkC;IAwC1C,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAsCjD;AAOD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,WAiDrH"} \ No newline at end of file diff --git a/types/Add-on/BoardInspection/ExcludeInspection.d.ts b/types/Add-on/BoardInspection/ExcludeInspection.d.ts new file mode 100644 index 0000000..69713d9 --- /dev/null +++ b/types/Add-on/BoardInspection/ExcludeInspection.d.ts @@ -0,0 +1,11 @@ +import "./ExcludeInspectionCSS.less"; +import { OneClickInspectionStore } from "./OneClickInspectionStore"; +interface IExcludeInspectionProps { + store: OneClickInspectionStore; + openModal: boolean; + handleOpenModal: Function; +} +export declare const ExcludeDrawHoleInspection: (props: IExcludeInspectionProps) => JSX.Element; +export declare const ExcludeInterfereInspection: (props: IExcludeInspectionProps) => JSX.Element; +export {}; +//# sourceMappingURL=ExcludeInspection.d.ts.map \ No newline at end of file diff --git a/types/Add-on/BoardInspection/ExcludeInspection.d.ts.map b/types/Add-on/BoardInspection/ExcludeInspection.d.ts.map new file mode 100644 index 0000000..93db0be --- /dev/null +++ b/types/Add-on/BoardInspection/ExcludeInspection.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ExcludeInspection.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardInspection/ExcludeInspection.tsx"],"names":[],"mappings":"AAMA,OAAO,6BAA6B,CAAC;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,UAAU,uBAAuB;IAE7B,KAAK,EAAE,uBAAuB,CAAC;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,QAAQ,CAAC;CAC7B;AACD,eAAO,MAAM,yBAAyB,UAAoB,uBAAuB,gBAqM/E,CAAC;AAEH,eAAO,MAAM,0BAA0B,UAAoB,uBAAuB,gBA6IhF,CAAC"} \ No newline at end of file diff --git a/types/Add-on/BoardInspection/Inspection.d.ts b/types/Add-on/BoardInspection/Inspection.d.ts new file mode 100644 index 0000000..e7291cd --- /dev/null +++ b/types/Add-on/BoardInspection/Inspection.d.ts @@ -0,0 +1,14 @@ +import { ExtrudeHole } from "../../DatabaseServices/3DSolid/ExtrudeHole"; +import { SweepSolid } from "../../DatabaseServices/3DSolid/SweepSolid"; +import { Board } from "../../DatabaseServices/Entity/Board"; +import { ExtrudeSolid } from "../../DatabaseServices/Entity/Extrude"; +import { HardwareCompositeEntity } from "../../DatabaseServices/Hardware/HardwareCompositeEntity"; +export declare function InterfereInspection(selectEnts: (ExtrudeSolid | SweepSolid | HardwareCompositeEntity)[]): Promise<(string | [import("../../Common/InterfereUtil").Solid3D, import("../../Common/InterfereUtil").Solid3D])[][]>; +export declare function MaxSizeBoardInspection(boards: Board[]): (string | Board[])[][]; +export declare function MinSizeBoardInspection(boards: Board[]): (string | Board[])[][]; +export declare function ModelInspection(boards: Board[]): ((string | ExtrudeSolid[])[] | (string | ExtrudeHole[])[])[]; +export declare function SpecialBoardContourInspection(boards: Board[]): any[]; +export declare function SplitBoardInspection(boards: Board[]): (string | Board[])[][]; +export declare function DrillInspection(boards: Board[]): Promise; +export declare function DrawHoleInspection(boards: Board[]): (string | any[])[][]; +//# sourceMappingURL=Inspection.d.ts.map \ No newline at end of file diff --git a/types/Add-on/BoardInspection/Inspection.d.ts.map b/types/Add-on/BoardInspection/Inspection.d.ts.map new file mode 100644 index 0000000..cf85be5 --- /dev/null +++ b/types/Add-on/BoardInspection/Inspection.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Inspection.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardInspection/Inspection.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AAEvE,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAErE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AAMlG,wBAAsB,mBAAmB,CAAC,UAAU,EAAE,CAAC,YAAY,GAAG,UAAU,GAAG,uBAAuB,CAAC,EAAE,wHAM5G;AAGD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,KAAK,EAAE,0BASrD;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,KAAK,EAAE,0BASrD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,gEAuB9C;AAED,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,KAAK,EAAE,SA2B5D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,KAAK,EAAE,0BAwBnD;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,kBASpD;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,KAAK,EAAE,wBAcjD"} \ No newline at end of file diff --git a/types/Add-on/BoardInspection/OneClickInspection.d.ts b/types/Add-on/BoardInspection/OneClickInspection.d.ts new file mode 100644 index 0000000..8acebe8 --- /dev/null +++ b/types/Add-on/BoardInspection/OneClickInspection.d.ts @@ -0,0 +1,9 @@ +import { CheckInterfereTool } from "../../Common/InterfereUtil"; +import { Command } from "../../Editor/CommandMachine"; +import { ECompareType } from "../../UI/Store/BoardFindInterface"; +export declare class OneClickInspection implements Command { + checkInterfereTool: CheckInterfereTool; + exec(): Promise; +} +export declare function CompareTypeInspection(type: ECompareType, values: Set, targetName: string): boolean; +//# sourceMappingURL=OneClickInspection.d.ts.map \ No newline at end of file diff --git a/types/Add-on/BoardInspection/OneClickInspection.d.ts.map b/types/Add-on/BoardInspection/OneClickInspection.d.ts.map new file mode 100644 index 0000000..f433357 --- /dev/null +++ b/types/Add-on/BoardInspection/OneClickInspection.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"OneClickInspection.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardInspection/OneClickInspection.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAShE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAItD,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAOjE,qBAAa,kBAAmB,YAAW,OAAO;IAE9C,kBAAkB,EAAE,kBAAkB,CAAC;IAEjC,IAAI;CAyNb;AACD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM,WAQhG"} \ No newline at end of file diff --git a/types/Add-on/BoardInspection/OneClickInspectionComponent.d.ts b/types/Add-on/BoardInspection/OneClickInspectionComponent.d.ts new file mode 100644 index 0000000..6410820 --- /dev/null +++ b/types/Add-on/BoardInspection/OneClickInspectionComponent.d.ts @@ -0,0 +1,5 @@ +import { OneClickInspectionStore } from "./OneClickInspectionStore"; +export declare const OneClickInspectionComponent: ({ store }: { + store: OneClickInspectionStore; +}) => JSX.Element; +//# sourceMappingURL=OneClickInspectionComponent.d.ts.map \ No newline at end of file diff --git a/types/Add-on/BoardInspection/OneClickInspectionComponent.d.ts.map b/types/Add-on/BoardInspection/OneClickInspectionComponent.d.ts.map new file mode 100644 index 0000000..35d8f68 --- /dev/null +++ b/types/Add-on/BoardInspection/OneClickInspectionComponent.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"OneClickInspectionComponent.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardInspection/OneClickInspectionComponent.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,eAAO,MAAM,2BAA2B,cAAyB;IAAE,KAAK,EAAE,uBAAuB,CAAC;CAAE,gBA+IjG,CAAC"} \ No newline at end of file diff --git a/types/Add-on/BoardInspection/OneClickInspectionStore.d.ts b/types/Add-on/BoardInspection/OneClickInspectionStore.d.ts new file mode 100644 index 0000000..e0b8b9b --- /dev/null +++ b/types/Add-on/BoardInspection/OneClickInspectionStore.d.ts @@ -0,0 +1,15 @@ +import { Singleton } from "../../Common/Singleton"; +import { IConfigOption } from "../../UI/Components/Board/UserConfigComponent"; +import { IConfigStore } from "../../UI/Store/BoardStore"; +import { OneClickInspectionOption } from "../../UI/Store/OptionInterface/IOptionInterface"; +export declare class OneClickInspectionStore extends Singleton implements IConfigStore { + configName: string; + m_Option: OneClickInspectionOption; + configsNames: string[]; + InitOption(): void; + UpdateOption(cof: IConfigOption): void; + SaveConfig(): IConfigOption; + HasInvailValue(): string; +} +export declare const oneClickInspectionStore: OneClickInspectionStore; +//# sourceMappingURL=OneClickInspectionStore.d.ts.map \ No newline at end of file diff --git a/types/Add-on/BoardInspection/OneClickInspectionStore.d.ts.map b/types/Add-on/BoardInspection/OneClickInspectionStore.d.ts.map new file mode 100644 index 0000000..374a35b --- /dev/null +++ b/types/Add-on/BoardInspection/OneClickInspectionStore.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"OneClickInspectionStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardInspection/OneClickInspectionStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAE9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAE3F,qBAAa,uBAAwB,SAAQ,SAAU,YAAW,YAAY;IAE9D,UAAU,SAAQ;IAElB,QAAQ,EAAE,wBAAwB,CAAmC;IACrE,YAAY,EAAE,MAAM,EAAE,CAAM;IAExC,UAAU;IAIV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,wBAAwB,CAAC;IAgCzD,UAAU;IAQV,cAAc;CASjB;AAED,eAAO,MAAM,uBAAuB,EAA4C,uBAAuB,CAAC"} \ No newline at end of file diff --git a/types/Add-on/BoardInspection/ViewInspection.d.ts b/types/Add-on/BoardInspection/ViewInspection.d.ts new file mode 100644 index 0000000..05530d5 --- /dev/null +++ b/types/Add-on/BoardInspection/ViewInspection.d.ts @@ -0,0 +1,5 @@ +import { Entity } from "../../DatabaseServices/Entity/Entity"; +export declare function ViewInspection({ errEntInfos }: { + errEntInfos: Map; +}): JSX.Element; +//# sourceMappingURL=ViewInspection.d.ts.map \ No newline at end of file diff --git a/types/Add-on/BoardInspection/ViewInspection.d.ts.map b/types/Add-on/BoardInspection/ViewInspection.d.ts.map new file mode 100644 index 0000000..84350df --- /dev/null +++ b/types/Add-on/BoardInspection/ViewInspection.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ViewInspection.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/BoardInspection/ViewInspection.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAM9D,wBAAgB,cAAc,CAAC,EAAE,WAAW,EAAE,EAAE;IAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;CAAE,eAqH1G"} \ No newline at end of file diff --git a/types/Add-on/CF/Import/CFImport.d.ts b/types/Add-on/CF/Import/CFImport.d.ts index 1f759f1..17ac9cb 100644 --- a/types/Add-on/CF/Import/CFImport.d.ts +++ b/types/Add-on/CF/Import/CFImport.d.ts @@ -1,8 +1,9 @@ import { Database } from "../../../DatabaseServices/Database"; import { Command } from "../../../Editor/CommandMachine"; -import { CFDoc } from "./CFInterface"; +import { ICFDoc } from "./CFInterface"; export declare class ImportCFData implements Command { exec(): void; } -export declare function ParseCFDoc(document: CFDoc, cuDb: Database): Promise; +export declare function ImportCFFile(file: File): Promise; +export declare function ParseCFDoc(document: ICFDoc, cuDb: Database): Promise; //# sourceMappingURL=CFImport.d.ts.map \ No newline at end of file diff --git a/types/Add-on/CF/Import/CFImport.d.ts.map b/types/Add-on/CF/Import/CFImport.d.ts.map index c164001..931f278 100644 --- a/types/Add-on/CF/Import/CFImport.d.ts.map +++ b/types/Add-on/CF/Import/CFImport.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CFImport.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/CF/Import/CFImport.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAI9D,OAAO,EAAE,OAAO,EAAe,MAAM,gCAAgC,CAAC;AAKtE,OAAO,EAAE,KAAK,EAAgB,MAAM,eAAe,CAAC;AAEpD,qBAAa,YAAa,YAAW,OAAO;IAExC,IAAI;CAqCP;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,iBA2D/D"} \ No newline at end of file +{"version":3,"file":"CFImport.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/CF/Import/CFImport.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAI9D,OAAO,EAAE,OAAO,EAAe,MAAM,gCAAgC,CAAC;AAKtE,OAAO,EAAE,MAAM,EAAiB,MAAM,eAAe,CAAC;AAEtD,qBAAa,YAAa,YAAW,OAAO;IAExC,IAAI;CAaP;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,iBA2B5C;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,iBA2DhE"} \ No newline at end of file diff --git a/types/Add-on/CF/Import/CFInterface.d.ts b/types/Add-on/CF/Import/CFInterface.d.ts index 5fe027f..42e88ae 100644 --- a/types/Add-on/CF/Import/CFInterface.d.ts +++ b/types/Add-on/CF/Import/CFInterface.d.ts @@ -1,19 +1,19 @@ -type CurverType = "Curve" | "Polyline" | "Rect" | "Line" | "Arc" | "Circle"; -type EntityType = "Entity" | "ExtrudeSolid" | "Board" | "Template" | "EntityTree" | "Hardware" | "Topline"; -export type PolylineContour = { +type ICFCurverType = "Curve" | "Polyline" | "Rect" | "Line" | "Arc" | "Circle"; +type ICFEntityType = "Entity" | "ExtrudeSolid" | "Board" | "Template" | "EntityTree" | "Hardware" | "Topline"; +export type ICFPolylineContour = { pt: [number, number]; bul: 0; }[]; -export type CircleContour = { +export type ICFCircleContour = { Radius: number; Center: [number, number, number]; }; -type ExtrudeContour = PolylineContour | CircleContour; -export interface CFDoc { - ModelSpace: CFEntity[]; +export type ICFExtrudeContour = ICFPolylineContour | ICFCircleContour; +export interface ICFDoc { + ModelSpace: ICFEntity[]; } -export interface CFEntity { - Type: EntityType | CurverType; +export interface ICFEntity { + Type: ICFEntityType | ICFCurverType; Id?: number; ColorIndex?: number; OCS?: number[]; @@ -21,18 +21,18 @@ export interface CFEntity { Rot?: [number, number, number]; Qua?: [number, number, number, number]; } -export interface CFExtrudeSolid extends CFEntity { +export interface ICFExtrudeSolid extends ICFEntity { Width?: number; Height?: number; - ContourCurve?: ExtrudeContour; + ContourCurve?: ICFExtrudeContour; Thickness?: number; GroovesAddLength?: number; GroovesAddWidth?: number; GroovesAddDepth?: number; KnifeRadius?: number; - Holes?: CFExtrudeSolid[]; + Holes?: ICFExtrudeSolid[]; } -export interface CFBoard extends CFExtrudeSolid { +export interface ICFBoard extends ICFExtrudeSolid { Name?: string; BrType?: number; PositionType?: number; @@ -50,20 +50,25 @@ export interface CFBoard extends CFExtrudeSolid { DownSealed?: string; LeftSealed?: string; RightSealed?: string; + sealColorUp?: string; + sealColorDown?: string; + sealColorLeft?: string; + sealColorRight?: string; EachSealeds?: { size: number; + sealColor: string; }[]; EachEdgeDrills?: string[]; FrontDrill?: boolean; BackDrill?: boolean; Remarks?: [string, string][]; } -export interface CFEntityTree extends CFEntity { +export interface ICFEntityTree extends ICFEntity { Name?: string; - Entitys?: CFEntity[]; - Childen?: CFEntityTree[]; + Entitys?: ICFEntity[]; + Childen?: ICFEntityTree[]; } -export interface CFTemplate extends CFEntity { +export interface ICFTemplate extends ICFEntity { TempalteId?: string; Name?: string; Lenght?: number; @@ -77,7 +82,7 @@ export interface CFTemplate extends CFEntity { RoomName?: string; CabinetName?: string; } -export interface CFHardware extends CFTemplate { +export interface ICFHardware extends ICFTemplate { Name?: string; HardwarerId?: string; Unit?: string; @@ -91,7 +96,7 @@ export interface CFHardware extends CFTemplate { Material?: string; Color?: string; } -export interface CFTopline extends CFTemplate { +export interface ICFTopline extends ICFTemplate { Name?: string; ToplineId?: string; Unit?: string; @@ -101,29 +106,23 @@ export interface CFTopline extends CFTemplate { Brand?: string; Spec?: string; Comments?: string; - Contour?: { - pt: [number, number]; - bul: 0; - }[]; - PathCurve?: ExtrudeContour; + Contour?: ICFPolylineContour; + PathCurve?: ICFExtrudeContour; } -export interface CFCurve extends CFEntity { +export interface ICFCurve extends ICFEntity { } -export interface CFLine extends CFCurve { +export interface ICFLine extends ICFCurve { StartPoint: [number, number, number]; EndPoint: [number, number, number]; } -export interface CFPolyline extends CFCurve { - ContourCurve?: { - pt: [number, number]; - bul: 0; - }[]; +export interface ICFPolyline extends ICFCurve { + ContourCurve?: ICFPolylineContour; } -export interface CFRect extends CFCurve { +export interface ICFRect extends ICFCurve { Width: number; Height: number; } -export interface CFCircle extends CFCurve { +export interface ICFCircle extends ICFCurve { Radius: number; Center: [number, number, number]; } diff --git a/types/Add-on/CF/Import/CFInterface.d.ts.map b/types/Add-on/CF/Import/CFInterface.d.ts.map index 7045075..dfecb61 100644 --- a/types/Add-on/CF/Import/CFInterface.d.ts.map +++ b/types/Add-on/CF/Import/CFInterface.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CFInterface.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/CF/Import/CFInterface.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"CFInterface.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/CF/Import/CFInterface.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Add-on/CF/Parse/ParseBoard.d.ts b/types/Add-on/CF/Parse/ParseBoard.d.ts index 060e5f2..71c60bf 100644 --- a/types/Add-on/CF/Parse/ParseBoard.d.ts +++ b/types/Add-on/CF/Parse/ParseBoard.d.ts @@ -1,5 +1,5 @@ import { Board } from "../../../DatabaseServices/Entity/Board"; import { MaterialInfo } from "../Import/BoardMaterialLoader"; -import { CFBoard } from "../Import/CFInterface"; -export declare function ParseBoard(el: CFBoard, boardMaterialMap?: Map): Board; +import { ICFBoard } from "../Import/CFInterface"; +export declare function ParseCFBoard(el: ICFBoard, boardMaterialMap?: Map): Board; //# sourceMappingURL=ParseBoard.d.ts.map \ No newline at end of file diff --git a/types/Add-on/CF/Parse/ParseBoard.d.ts.map b/types/Add-on/CF/Parse/ParseBoard.d.ts.map index c152789..e522362 100644 --- a/types/Add-on/CF/Parse/ParseBoard.d.ts.map +++ b/types/Add-on/CF/Parse/ParseBoard.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParseBoard.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/CF/Parse/ParseBoard.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAO/D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAiB,MAAM,uBAAuB,CAAC;AAG/D,wBAAgB,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,SA0MnF"} \ No newline at end of file +{"version":3,"file":"ParseBoard.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/CF/Parse/ParseBoard.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAO/D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAwC,MAAM,uBAAuB,CAAC;AAGvF,wBAAgB,YAAY,CAAC,EAAE,EAAE,QAAQ,EAAE,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,SA8MtF"} \ No newline at end of file diff --git a/types/Add-on/CF/Parse/ParseCurve.d.ts b/types/Add-on/CF/Parse/ParseCurve.d.ts index cd466ea..2dee2ac 100644 --- a/types/Add-on/CF/Parse/ParseCurve.d.ts +++ b/types/Add-on/CF/Parse/ParseCurve.d.ts @@ -1,9 +1,10 @@ import { Circle } from "../../../DatabaseServices/Entity/Circle"; import { Line } from "../../../DatabaseServices/Entity/Line"; import { Polyline } from "../../../DatabaseServices/Entity/Polyline"; +import { ICFLine, ICFPolylineContour } from "../Import/CFInterface"; export declare class ParseCurve { - ParseLine(StartPoint: [number, number, number], EndPoint: [number, number, number]): Line; - ParsePolyline(ContourCurve: any, isColosed?: boolean): Polyline; + static ParseLine(en: ICFLine): Line; + ParsePolyline(ContourCurve: ICFPolylineContour, isColosed?: boolean): Polyline; ParseRect(Width: number, Height: number): Polyline; ParseCircle(Radius: number, Center: [number, number, number]): Circle; } diff --git a/types/Add-on/CF/Parse/ParseCurve.d.ts.map b/types/Add-on/CF/Parse/ParseCurve.d.ts.map index 1267432..17abc24 100644 --- a/types/Add-on/CF/Parse/ParseCurve.d.ts.map +++ b/types/Add-on/CF/Parse/ParseCurve.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParseCurve.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/CF/Parse/ParseCurve.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,uCAAuC,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAiB,MAAM,2CAA2C,CAAC;AAEpF,qBAAa,UAAU;IAEnB,SAAS,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;IAQlF,aAAa,CAAC,YAAY,KAAA,EAAE,SAAS,GAAE,OAAe;IAetD,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAOvC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;CAM/D"} \ No newline at end of file +{"version":3,"file":"ParseCurve.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/CF/Parse/ParseCurve.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,uCAAuC,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAiB,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEpE,qBAAa,UAAU;IAEnB,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO;IAQ5B,aAAa,CAAC,YAAY,EAAE,kBAAkB,EAAE,SAAS,GAAE,OAAe;IAe1E,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAOvC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;CAM/D"} \ No newline at end of file diff --git a/types/Add-on/CF/Parse/ParseEntityTree.d.ts b/types/Add-on/CF/Parse/ParseEntityTree.d.ts index 9f13f94..477238d 100644 --- a/types/Add-on/CF/Parse/ParseEntityTree.d.ts +++ b/types/Add-on/CF/Parse/ParseEntityTree.d.ts @@ -2,7 +2,7 @@ import { Database } from "../../../DatabaseServices/Database"; import { Entity } from "../../../DatabaseServices/Entity/Entity"; import { TemplateRecord } from "../../../DatabaseServices/Template/TemplateRecord"; import { MaterialInfo } from "../Import/BoardMaterialLoader"; -import { CFEntity, CFEntityTree } from "../Import/CFInterface"; -export declare function ParseEntityTree(model: CFEntityTree, cuDb: Database, boardMaterialMap?: Map): Promise; -export declare function ParseAddEntity(model: CFEntity, cuDb: Database, boardMaterialMap?: Map): Promise; +import { ICFEntity, ICFEntityTree } from "../Import/CFInterface"; +export declare function ParseEntityTree(model: ICFEntityTree, cuDb: Database, boardMaterialMap?: Map): Promise; +export declare function CFParseAddEntity(model: ICFEntity, cuDb: Database, boardMaterialMap?: Map): Promise; //# sourceMappingURL=ParseEntityTree.d.ts.map \ No newline at end of file diff --git a/types/Add-on/CF/Parse/ParseEntityTree.d.ts.map b/types/Add-on/CF/Parse/ParseEntityTree.d.ts.map index 68729f8..adaa449 100644 --- a/types/Add-on/CF/Parse/ParseEntityTree.d.ts.map +++ b/types/Add-on/CF/Parse/ParseEntityTree.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParseEntityTree.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/CF/Parse/ParseEntityTree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAI/D,wBAAsB,eAAe,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC,CA4CzJ;AAGD,wBAAsB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,oCAiCjH"} \ No newline at end of file +{"version":3,"file":"ParseEntityTree.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/CF/Parse/ParseEntityTree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAW,MAAM,uBAAuB,CAAC;AAK1E,wBAAsB,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC,CA4C1J;AAGD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,oCAqCpH"} \ No newline at end of file diff --git a/types/Add-on/CF/Parse/ParseHardwareAndTemplate.d.ts b/types/Add-on/CF/Parse/ParseHardwareAndTemplate.d.ts index a736ffa..df446d0 100644 --- a/types/Add-on/CF/Parse/ParseHardwareAndTemplate.d.ts +++ b/types/Add-on/CF/Parse/ParseHardwareAndTemplate.d.ts @@ -1,8 +1,8 @@ import { Database } from "../../../DatabaseServices/Database"; import { TemplateRecord } from "../../../DatabaseServices/Template/TemplateRecord"; -import { CFHardware, CFTemplate, CFTopline } from "../Import/CFInterface"; -export declare function ParseTemplate(temp: CFTemplate, cuDb: Database): Promise; -export declare function GetTemplate(temp: CFTemplate, cuDb: Database): Promise; -export declare function ParseHardware(el: CFHardware, cuDb: Database): Promise; -export declare function ParseTopline(el: CFTopline, cuDb: Database): Promise; +import { ICFHardware, ICFTemplate, ICFTopline } from "../Import/CFInterface"; +export declare function ParseTemplate(temp: ICFTemplate, cuDb: Database): Promise; +export declare function GetTemplate(temp: ICFTemplate, cuDb: Database): Promise; +export declare function ParseHardware(el: ICFHardware, cuDb: Database): Promise; +export declare function ParseTopline(el: ICFTopline, cuDb: Database): Promise; //# sourceMappingURL=ParseHardwareAndTemplate.d.ts.map \ No newline at end of file diff --git a/types/Add-on/CF/Parse/ParseHardwareAndTemplate.d.ts.map b/types/Add-on/CF/Parse/ParseHardwareAndTemplate.d.ts.map index 33e9502..d4eb029 100644 --- a/types/Add-on/CF/Parse/ParseHardwareAndTemplate.d.ts.map +++ b/types/Add-on/CF/Parse/ParseHardwareAndTemplate.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParseHardwareAndTemplate.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/CF/Parse/ParseHardwareAndTemplate.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAK9D,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAEnF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAG1E,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,2BAmBnE;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,2BAYjE;AAED,wBAAsB,aAAa,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,0HAUjE;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,yFAe/D"} \ No newline at end of file +{"version":3,"file":"ParseHardwareAndTemplate.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/CF/Parse/ParseHardwareAndTemplate.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAK9D,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAEnF,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAG7E,wBAAsB,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,2BAmBpE;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,2BAYlE;AAED,wBAAsB,aAAa,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,0HAUlE;AAED,wBAAsB,YAAY,CAAC,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,yFAehE"} \ No newline at end of file diff --git a/types/Add-on/CF/Parse/ParseHardwareAndTemplateInfo.d.ts b/types/Add-on/CF/Parse/ParseHardwareAndTemplateInfo.d.ts index 87dea69..60f5c94 100644 --- a/types/Add-on/CF/Parse/ParseHardwareAndTemplateInfo.d.ts +++ b/types/Add-on/CF/Parse/ParseHardwareAndTemplateInfo.d.ts @@ -3,8 +3,8 @@ import { Polyline } from "../../../DatabaseServices/Entity/Polyline"; import { HardwareCompositeEntity } from "../../../DatabaseServices/Hardware/HardwareCompositeEntity"; import { HardwareTopline } from "../../../DatabaseServices/Hardware/HardwareTopline"; import { TemplateRecord } from "../../../DatabaseServices/Template/TemplateRecord"; -import { CFHardware, CFTemplate, CFTopline } from "../Import/CFInterface"; -export declare function ParseTemplateInfo(newTemp: TemplateRecord, tempInfo: CFTemplate, cuDb: Database): Promise; -export declare function ParseHardwareInfo(newTemp: TemplateRecord, el: CFHardware, cuDb: Database): Promise; -export declare function ParseToplineInfo(contour: Polyline, el: CFTopline, cuDb: Database): Promise; +import { ICFHardware, ICFTemplate, ICFTopline } from "../Import/CFInterface"; +export declare function ParseCFTemplateInfo(newTemp: TemplateRecord, tempInfo: ICFTemplate, cuDb: Database): Promise; +export declare function ParseHardwareInfo(newTemp: TemplateRecord, el: ICFHardware, cuDb: Database): Promise; +export declare function ParseToplineInfo(contour: Polyline, el: ICFTopline, cuDb: Database): Promise; //# sourceMappingURL=ParseHardwareAndTemplateInfo.d.ts.map \ No newline at end of file diff --git a/types/Add-on/CF/Parse/ParseHardwareAndTemplateInfo.d.ts.map b/types/Add-on/CF/Parse/ParseHardwareAndTemplateInfo.d.ts.map index e017215..eb45a98 100644 --- a/types/Add-on/CF/Parse/ParseHardwareAndTemplateInfo.d.ts.map +++ b/types/Add-on/CF/Parse/ParseHardwareAndTemplateInfo.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParseHardwareAndTemplateInfo.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/CF/Parse/ParseHardwareAndTemplateInfo.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAI9D,OAAO,EAAE,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4DAA4D,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,MAAM,oDAAoD,CAAC;AAErF,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AACnF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAiB,MAAM,uBAAuB,CAAC;AAGzF,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,2BAsEpG;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,qDAmD9F;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,4BAwCtF"} \ No newline at end of file +{"version":3,"file":"ParseHardwareAndTemplateInfo.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/CF/Parse/ParseHardwareAndTemplateInfo.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAI9D,OAAO,EAAE,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4DAA4D,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,MAAM,oDAAoD,CAAC;AAErF,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AACnF,OAAO,EAAoB,WAAW,EAAsB,WAAW,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,2BAsEvG;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,qDAmD/F;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,4BAwCvF"} \ No newline at end of file diff --git a/types/Add-on/ChangeColorByBoard/BoardInfoSelectPanel.d.ts.map b/types/Add-on/ChangeColorByBoard/BoardInfoSelectPanel.d.ts.map index 9c86b78..4172f75 100644 --- a/types/Add-on/ChangeColorByBoard/BoardInfoSelectPanel.d.ts.map +++ b/types/Add-on/ChangeColorByBoard/BoardInfoSelectPanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardInfoSelectPanel.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ChangeColorByBoard/BoardInfoSelectPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,6BAA6B,CAAC;AACrC,OAAO,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAE/E,qBACa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,+BAA+B,CAAC;CAAE,EAAE,EAAE,CAAC;IAEtG,UAAU,EAAE,QAAQ,CAAC;IAErB,iBAAiB;IAUjB,oBAAoB;IAKpB,MAAM;CAwDT"} \ No newline at end of file +{"version":3,"file":"BoardInfoSelectPanel.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ChangeColorByBoard/BoardInfoSelectPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,6BAA6B,CAAC;AACrC,OAAO,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAE/E,qBACa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,+BAA+B,CAAC;CAAE,EAAE,EAAE,CAAC;IAEtG,UAAU,EAAE,QAAQ,CAAC;IAErB,iBAAiB;IAUjB,oBAAoB;IAKpB,MAAM;CA6DT"} \ No newline at end of file diff --git a/types/Add-on/ChangeColorByBoard/CalcBrThicknessConfigStore.d.ts.map b/types/Add-on/ChangeColorByBoard/CalcBrThicknessConfigStore.d.ts.map index 17f016f..e9587d3 100644 --- a/types/Add-on/ChangeColorByBoard/CalcBrThicknessConfigStore.d.ts.map +++ b/types/Add-on/ChangeColorByBoard/CalcBrThicknessConfigStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CalcBrThicknessConfigStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ChangeColorByBoard/CalcBrThicknessConfigStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,gCAAgC,EAAE,MAAM,iDAAiD,CAAC;AAEnG,qBAAa,+BAAgC,YAAW,YAAY;IAEpD,UAAU,SAAQ;IAC9B,UAAU;IAQE,QAAQ,EAAE,gCAAgC,CAAkD;IAC5F,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,UAAU;IAIV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,gCAAgC,CAAC;IAKjE,OAAO,CAAC,MAAM,CAAC,eAAe,CAAkC;IAChE,MAAM,CAAC,WAAW,IAAI,+BAA+B;CAMxD"} \ No newline at end of file +{"version":3,"file":"CalcBrThicknessConfigStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ChangeColorByBoard/CalcBrThicknessConfigStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,gCAAgC,EAAE,MAAM,iDAAiD,CAAC;AAEnG,qBAAa,+BAAgC,YAAW,YAAY;IAEpD,UAAU,SAAQ;IAC9B,UAAU;IAQE,QAAQ,EAAE,gCAAgC,CAAkD;IAC5F,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,UAAU;IAIV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,gCAAgC,CAAC;IAUjE,OAAO,CAAC,MAAM,CAAC,eAAe,CAAkC;IAChE,MAAM,CAAC,WAAW,IAAI,+BAA+B;CAMxD"} \ No newline at end of file diff --git a/types/Add-on/ChangeColorByBoard/ChangeColorByDrillLock.d.ts b/types/Add-on/ChangeColorByBoard/ChangeColorByDrillLock.d.ts new file mode 100644 index 0000000..2ce437a --- /dev/null +++ b/types/Add-on/ChangeColorByBoard/ChangeColorByDrillLock.d.ts @@ -0,0 +1,12 @@ +import { Board } from "../../DatabaseServices/Entity/Board"; +import { Command } from "../../Editor/CommandMachine"; +export declare class ChangeColorByDrillLock implements Command { + exec(): Promise; +} +interface IBoardColorByDrillLockProps { + boardMap: Map; + oldColorMap: Map; +} +export declare const BoardColorByDrillLockDialog: (props: IBoardColorByDrillLockProps) => JSX.Element; +export {}; +//# sourceMappingURL=ChangeColorByDrillLock.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ChangeColorByBoard/ChangeColorByDrillLock.d.ts.map b/types/Add-on/ChangeColorByBoard/ChangeColorByDrillLock.d.ts.map new file mode 100644 index 0000000..cd7b6b1 --- /dev/null +++ b/types/Add-on/ChangeColorByBoard/ChangeColorByDrillLock.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ChangeColorByDrillLock.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ChangeColorByBoard/ChangeColorByDrillLock.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAOtD,qBAAa,sBAAuB,YAAW,OAAO;IAE5C,IAAI;CAqCb;AAGD,UAAU,2BAA2B;IAEjC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/B,WAAW,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;CACnC;AACD,eAAO,MAAM,2BAA2B,UAAoB,2BAA2B,gBAuHrF,CAAC"} \ No newline at end of file diff --git a/types/Add-on/ChangeColorByBoard/ChangeColorByLinesType.d.ts b/types/Add-on/ChangeColorByBoard/ChangeColorByLinesType.d.ts new file mode 100644 index 0000000..8b4e356 --- /dev/null +++ b/types/Add-on/ChangeColorByBoard/ChangeColorByLinesType.d.ts @@ -0,0 +1,12 @@ +import { Board } from "../../DatabaseServices/Entity/Board"; +import { Command } from "../../Editor/CommandMachine"; +export declare class ChangeColorByLinesType implements Command { + exec(): Promise; +} +interface IBoardColorByLinesTypeProps { + boardMap: Map; + oldColorMap: Map; +} +export declare const BoardColorByLinesTypeDialog: (props: IBoardColorByLinesTypeProps) => JSX.Element; +export {}; +//# sourceMappingURL=ChangeColorByLinesType.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ChangeColorByBoard/ChangeColorByLinesType.d.ts.map b/types/Add-on/ChangeColorByBoard/ChangeColorByLinesType.d.ts.map new file mode 100644 index 0000000..75ff170 --- /dev/null +++ b/types/Add-on/ChangeColorByBoard/ChangeColorByLinesType.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ChangeColorByLinesType.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ChangeColorByBoard/ChangeColorByLinesType.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAOtD,qBAAa,sBAAuB,YAAW,OAAO;IAE5C,IAAI;CAsCb;AACD,UAAU,2BAA2B;IAEjC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IAC/B,WAAW,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;CACnC;AACD,eAAO,MAAM,2BAA2B,UAAoB,2BAA2B,gBA2GrF,CAAC"} \ No newline at end of file diff --git a/types/Add-on/ChangeColorByBoard/ChangeColorByMaterial.d.ts.map b/types/Add-on/ChangeColorByBoard/ChangeColorByMaterial.d.ts.map index 94df550..14a7417 100644 --- a/types/Add-on/ChangeColorByBoard/ChangeColorByMaterial.d.ts.map +++ b/types/Add-on/ChangeColorByBoard/ChangeColorByMaterial.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ChangeColorByMaterial.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ChangeColorByBoard/ChangeColorByMaterial.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAkB,MAAM,6BAA6B,CAAC;AAWtE,qBAAa,qBAAsB,YAAW,OAAO;IAE3C,IAAI;CAuFb;AAED,UAAU,gCAAgC;IAEtC,IAAI,EAAE;QACF,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,KAAK,EAAE,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACjB,EAAE,CAAC;IACJ,WAAW,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;CACnC;AAGD,qBACa,2BAA4B,SAAQ,KAAK,CAAC,SAAS,CAAC,gCAAgC,EAAE,EAAE,CAAC;IAGtF,YAAY,EAAE,MAAM,EAAE,CAAM;IAExC,cAAc,EAAE,OAAO,CAAS;IAChC,SAAS,EAAE,QAAQ,EAAE,CAAM;IAE3B,iBAAiB;IAuDjB,oBAAoB;IAOb,MAAM;IAgCb,OAAO,CAAC,KAAK,CAoBX;CACL"} \ No newline at end of file +{"version":3,"file":"ChangeColorByMaterial.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ChangeColorByBoard/ChangeColorByMaterial.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAkB,MAAM,6BAA6B,CAAC;AAWtE,qBAAa,qBAAsB,YAAW,OAAO;IAE3C,IAAI;CA8Fb;AAED,UAAU,gCAAgC;IAEtC,IAAI,EAAE;QACF,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,KAAK,EAAE,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACjB,EAAE,CAAC;IACJ,WAAW,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;CACnC;AAGD,qBACa,2BAA4B,SAAQ,KAAK,CAAC,SAAS,CAAC,gCAAgC,EAAE,EAAE,CAAC;IAItF,YAAY,EAAE,MAAM,EAAE,CAAM;IAExC,cAAc,EAAE,OAAO,CAAS;IAChC,SAAS,EAAE,QAAQ,EAAE,CAAM;IAE3B,iBAAiB;IAuDjB,oBAAoB;IAOb,MAAM;IAgCb,OAAO,CAAC,KAAK,CAoBX;CACL"} \ No newline at end of file diff --git a/types/Add-on/ChangeColorByBoard/ResetColor.d.ts b/types/Add-on/ChangeColorByBoard/ResetColor.d.ts index 3b0398d..5890236 100644 --- a/types/Add-on/ChangeColorByBoard/ResetColor.d.ts +++ b/types/Add-on/ChangeColorByBoard/ResetColor.d.ts @@ -1,4 +1,5 @@ import { Board } from "../../DatabaseServices/Entity/Board"; +export declare const ResetColorToast: import("@blueprintjs/core").IToaster; /** 弹窗-是否要还原颜色 */ -export declare function ResetColor(colorMap: Map): void; +export declare function ResetColor(colorMap: Map): Promise; //# sourceMappingURL=ResetColor.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ChangeColorByBoard/ResetColor.d.ts.map b/types/Add-on/ChangeColorByBoard/ResetColor.d.ts.map index 0854cb2..ebb50a0 100644 --- a/types/Add-on/ChangeColorByBoard/ResetColor.d.ts.map +++ b/types/Add-on/ChangeColorByBoard/ResetColor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ResetColor.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ChangeColorByBoard/ResetColor.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAM5D,iBAAiB;AACjB,wBAAgB,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,QA4CtD"} \ No newline at end of file +{"version":3,"file":"ResetColor.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ChangeColorByBoard/ResetColor.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAM5D,eAAO,MAAM,eAAe,sCAE1B,CAAC;AAEH,iBAAiB;AACjB,wBAAsB,UAAU,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,iBA8C5D"} \ No newline at end of file diff --git a/types/Add-on/ChangeColorByRoomOrCabinet/ChangeColorByRoomOrCabinet.d.ts.map b/types/Add-on/ChangeColorByRoomOrCabinet/ChangeColorByRoomOrCabinet.d.ts.map index dde4834..552542a 100644 --- a/types/Add-on/ChangeColorByRoomOrCabinet/ChangeColorByRoomOrCabinet.d.ts.map +++ b/types/Add-on/ChangeColorByRoomOrCabinet/ChangeColorByRoomOrCabinet.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ChangeColorByRoomOrCabinet.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ChangeColorByRoomOrCabinet/ChangeColorByRoomOrCabinet.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAkB,MAAM,6BAA6B,CAAC;AAUtE,qBAAa,wBAAyB,YAAW,OAAO;IAE9C,IAAI;CAiFb;AAGD,qBACa,+BAAgC,SAAQ,KAAK,CAAC,SAAS,CAAC;IACjE,IAAI,EAAE;QACF,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,KAAK,EAAE,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACjB,EAAE,CAAC;IACJ,WAAW,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;CACnC,EAAE,EAAE,CAAC;IAGU,aAAa,EAAE,MAAM,EAAE,CAAM;IAEzC,eAAe,EAAE,OAAO,CAAS;IACjC,UAAU,EAAE,QAAQ,EAAE,CAAM;IAE5B,iBAAiB;IAmDjB,oBAAoB;IAOb,MAAM;IAiCb,QAAQ,UAAW,MAAM,UAoBvB;CACL"} \ No newline at end of file +{"version":3,"file":"ChangeColorByRoomOrCabinet.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ChangeColorByRoomOrCabinet/ChangeColorByRoomOrCabinet.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAkB,MAAM,6BAA6B,CAAC;AAUtE,qBAAa,wBAAyB,YAAW,OAAO;IAE9C,IAAI;CAwFb;AAGD,qBACa,+BAAgC,SAAQ,KAAK,CAAC,SAAS,CAAC;IACjE,IAAI,EAAE;QACF,GAAG,EAAE,MAAM,CAAC;QACZ,GAAG,EAAE,KAAK,EAAE,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACjB,EAAE,CAAC;IACJ,WAAW,EAAE,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;CACnC,EAAE,EAAE,CAAC;IAIU,aAAa,EAAE,MAAM,EAAE,CAAM;IAEzC,eAAe,EAAE,OAAO,CAAS;IACjC,UAAU,EAAE,QAAQ,EAAE,CAAM;IAE5B,iBAAiB;IAmDjB,oBAAoB;IAOb,MAAM;IAiCb,QAAQ,UAAW,MAAM,UAoBvB;CACL"} \ No newline at end of file diff --git a/types/Add-on/Check/ArcBoardCheck.d.ts b/types/Add-on/Check/ArcBoardCheck.d.ts new file mode 100644 index 0000000..1cc7229 --- /dev/null +++ b/types/Add-on/Check/ArcBoardCheck.d.ts @@ -0,0 +1,3 @@ +import { Board } from "../../DatabaseServices/Entity/Board"; +export declare function CheckArcBoardOptions(br: Board): boolean; +//# sourceMappingURL=ArcBoardCheck.d.ts.map \ No newline at end of file diff --git a/types/Add-on/Check/ArcBoardCheck.d.ts.map b/types/Add-on/Check/ArcBoardCheck.d.ts.map new file mode 100644 index 0000000..4c8e1d8 --- /dev/null +++ b/types/Add-on/Check/ArcBoardCheck.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ArcBoardCheck.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Check/ArcBoardCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,KAAK,WAY7C"} \ No newline at end of file diff --git a/types/Add-on/Check/ChaiDanCheck.d.ts b/types/Add-on/Check/ChaiDanCheck.d.ts new file mode 100644 index 0000000..a9ca127 --- /dev/null +++ b/types/Add-on/Check/ChaiDanCheck.d.ts @@ -0,0 +1,14 @@ +import { Board } from "../../DatabaseServices/Entity/Board"; +export declare function CheckChaiDan(spliteHeight: string, spliteWidth: string, spliteThickness: string, param: { + L: number; + W: number; + H: number; +}, isTip?: boolean): boolean; +export declare function CheckChaiDanEffect(spliteHeight: string, spliteWidth: string, spliteThickness: string, isTip?: boolean): boolean; +export declare function CheckChaiDanValue(spliteHeight: string, spliteWidth: string, spliteThickness: string, param: { + L: number; + W: number; + H: number; +}, isTip?: boolean): boolean; +export declare function CheckChaiDanByBoard(br: Board, isTip?: boolean): 1 | 2; +//# sourceMappingURL=ChaiDanCheck.d.ts.map \ No newline at end of file diff --git a/types/Add-on/Check/ChaiDanCheck.d.ts.map b/types/Add-on/Check/ChaiDanCheck.d.ts.map new file mode 100644 index 0000000..2f7e03d --- /dev/null +++ b/types/Add-on/Check/ChaiDanCheck.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ChaiDanCheck.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Check/ChaiDanCheck.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;CAAE,EAAE,KAAK,UAAO,WAGzJ;AAED,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,UAAO,WAelH;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;CAAE,EAAE,KAAK,UAAO,WAiB9J;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,UAAO,SAM1D"} \ No newline at end of file diff --git a/types/Add-on/CheckModeling.d.ts.map b/types/Add-on/CheckModeling.d.ts.map index 911c909..3f41981 100644 --- a/types/Add-on/CheckModeling.d.ts.map +++ b/types/Add-on/CheckModeling.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CheckModeling.d.ts","sourceRoot":"","sources":["../../../src/Add-on/CheckModeling.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,qBAAa,aAAc,YAAW,OAAO;IAEzC,GAAG,EAAE,QAAQ,CAAC;IACR,IAAI;IA0DV,IAAI;CAIP"} \ No newline at end of file +{"version":3,"file":"CheckModeling.d.ts","sourceRoot":"","sources":["../../../src/Add-on/CheckModeling.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,qBAAa,aAAc,YAAW,OAAO;IAEzC,GAAG,EAAE,QAAQ,CAAC;IACR,IAAI;IA+DV,IAAI;CAIP"} \ No newline at end of file diff --git a/types/Add-on/ClearCDBrHoleModeling.d.ts b/types/Add-on/ClearCDBrHoleModeling.d.ts new file mode 100644 index 0000000..8820c39 --- /dev/null +++ b/types/Add-on/ClearCDBrHoleModeling.d.ts @@ -0,0 +1,5 @@ +import { Command } from "../Editor/CommandMachine"; +export declare class Command_ClearCDBrHoleModeling implements Command { + exec(): Promise; +} +//# sourceMappingURL=ClearCDBrHoleModeling.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ClearCDBrHoleModeling.d.ts.map b/types/Add-on/ClearCDBrHoleModeling.d.ts.map new file mode 100644 index 0000000..b0bb815 --- /dev/null +++ b/types/Add-on/ClearCDBrHoleModeling.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ClearCDBrHoleModeling.d.ts","sourceRoot":"","sources":["../../../src/Add-on/ClearCDBrHoleModeling.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGnD,qBAAa,6BAA8B,YAAW,OAAO;IAEnD,IAAI;CAqCb"} \ No newline at end of file diff --git a/types/Add-on/ClearTagCommand.d.ts b/types/Add-on/ClearTagCommand.d.ts new file mode 100644 index 0000000..a539417 --- /dev/null +++ b/types/Add-on/ClearTagCommand.d.ts @@ -0,0 +1,5 @@ +import { Command } from "../Editor/CommandMachine"; +export declare class ClearTagCommand implements Command { + exec(): Promise; +} +//# sourceMappingURL=ClearTagCommand.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ClearTagCommand.d.ts.map b/types/Add-on/ClearTagCommand.d.ts.map new file mode 100644 index 0000000..38eb0d1 --- /dev/null +++ b/types/Add-on/ClearTagCommand.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ClearTagCommand.d.ts","sourceRoot":"","sources":["../../../src/Add-on/ClearTagCommand.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAKnD,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CAgCb"} \ No newline at end of file diff --git a/types/Add-on/Cmd_LockMaterial.d.ts b/types/Add-on/Cmd_LockMaterial.d.ts new file mode 100644 index 0000000..44d7067 --- /dev/null +++ b/types/Add-on/Cmd_LockMaterial.d.ts @@ -0,0 +1,8 @@ +import { Command } from "../Editor/CommandMachine"; +export declare class Cmd_LockMaterial implements Command { + exec(): Promise; +} +export declare class Cmd_UnLockMaterial implements Command { + exec(): Promise; +} +//# sourceMappingURL=Cmd_LockMaterial.d.ts.map \ No newline at end of file diff --git a/types/Add-on/Cmd_LockMaterial.d.ts.map b/types/Add-on/Cmd_LockMaterial.d.ts.map new file mode 100644 index 0000000..92940cc --- /dev/null +++ b/types/Add-on/Cmd_LockMaterial.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Cmd_LockMaterial.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Cmd_LockMaterial.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAKnD,qBAAa,gBAAiB,YAAW,OAAO;IAEtC,IAAI;CAsBb;AAGD,qBAAa,kBAAmB,YAAW,OAAO;IAExC,IAAI;CAuBb"} \ No newline at end of file diff --git a/types/Add-on/CombinatAttributeBrush.d.ts b/types/Add-on/CombinatAttributeBrush.d.ts index bba534a..fe8ee5c 100644 --- a/types/Add-on/CombinatAttributeBrush.d.ts +++ b/types/Add-on/CombinatAttributeBrush.d.ts @@ -7,6 +7,19 @@ interface IBrushOption { name: boolean; factory: boolean; comments: boolean; + isSplite: boolean; + actualExpr: boolean; + isSplitePrice: boolean; + isHole: boolean; + brand: boolean; + model: boolean; + spec: boolean; + count: boolean; + unit: boolean; + ProcessingGroupList: boolean; + material: boolean; + color: boolean; + DataList: boolean; } export declare class CombinatAttributeBrush implements Command { exec(): Promise; diff --git a/types/Add-on/CombinatAttributeBrush.d.ts.map b/types/Add-on/CombinatAttributeBrush.d.ts.map index 1fd5302..718a195 100644 --- a/types/Add-on/CombinatAttributeBrush.d.ts.map +++ b/types/Add-on/CombinatAttributeBrush.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CombinatAttributeBrush.d.ts","sourceRoot":"","sources":["../../../src/Add-on/CombinatAttributeBrush.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,UAAU,YAAY;IAElB,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,sBAAuB,YAAW,OAAO;IAE5C,IAAI;CAsFb;AAWD,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,MAAM,EAAE,YAAY,CAAC;CAAE,CAAC;IAC/D,MAAM;IA2Bb,OAAO,CAAC,EAAE,CAKR;IACF,OAAO,CAAC,MAAM,CAGZ;CACL"} \ No newline at end of file +{"version":3,"file":"CombinatAttributeBrush.d.ts","sourceRoot":"","sources":["../../../src/Add-on/CombinatAttributeBrush.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,UAAU,YAAY;IAElB,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,mBAAmB,EAAE,OAAO,CAAC;IAC7B,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,qBAAa,sBAAuB,YAAW,OAAO;IAE5C,IAAI;CAiHb;AAwBD,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,MAAM,EAAE,YAAY,CAAC;CAAE,CAAC;IAE/D,MAAM;IAuCb,OAAO,CAAC,EAAE,CAKR;IACF,OAAO,CAAC,MAAM,CAGZ;CACL"} \ No newline at end of file diff --git a/types/Add-on/CommandFeeding.d.ts b/types/Add-on/CommandFeeding.d.ts index ce87b8f..5ab9b0d 100644 --- a/types/Add-on/CommandFeeding.d.ts +++ b/types/Add-on/CommandFeeding.d.ts @@ -1,9 +1,8 @@ import { Command } from "../Editor/CommandMachine"; export declare class FeedingCommand implements Command { exec(): Promise; - private DrawHole; + private DrawFeedingDim; private TestModeling; - private DrawOriginModeling; - private DateText; + private DrawBrInfoText; } //# sourceMappingURL=CommandFeeding.d.ts.map \ No newline at end of file diff --git a/types/Add-on/CommandFeeding.d.ts.map b/types/Add-on/CommandFeeding.d.ts.map index 574fa0d..685a195 100644 --- a/types/Add-on/CommandFeeding.d.ts.map +++ b/types/Add-on/CommandFeeding.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CommandFeeding.d.ts","sourceRoot":"","sources":["../../../src/Add-on/CommandFeeding.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAWnD,qBAAa,cAAe,YAAW,OAAO;IAEpC,IAAI;IAkHV,OAAO,CAAC,QAAQ;IA8BhB,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,kBAAkB;IAuB1B,OAAO,CAAC,QAAQ;CAQnB"} \ No newline at end of file +{"version":3,"file":"CommandFeeding.d.ts","sourceRoot":"","sources":["../../../src/Add-on/CommandFeeding.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAenD,qBAAa,cAAe,YAAW,OAAO;IAEpC,IAAI;YA+FI,cAAc;IAsE5B,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,cAAc;CA2DzB"} \ No newline at end of file diff --git a/types/Add-on/CommandSideModelFeediing.d.ts b/types/Add-on/CommandSideModelFeediing.d.ts new file mode 100644 index 0000000..a9cd964 --- /dev/null +++ b/types/Add-on/CommandSideModelFeediing.d.ts @@ -0,0 +1,7 @@ +import { Command } from "../Editor/CommandMachine"; +export declare class SideModelFeedingCommand implements Command { + exec(): Promise; + private OrderText; + GetFaceId(id: number, isReverse: boolean, faceLength: number, addFace?: number): number; +} +//# sourceMappingURL=CommandSideModelFeediing.d.ts.map \ No newline at end of file diff --git a/types/Add-on/CommandSideModelFeediing.d.ts.map b/types/Add-on/CommandSideModelFeediing.d.ts.map new file mode 100644 index 0000000..210b6c5 --- /dev/null +++ b/types/Add-on/CommandSideModelFeediing.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"CommandSideModelFeediing.d.ts","sourceRoot":"","sources":["../../../src/Add-on/CommandSideModelFeediing.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AASnD,qBAAa,uBAAwB,YAAW,OAAO;IAE7C,IAAI;IAgGV,OAAO,CAAC,SAAS;IAajB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,SAAI;CAY5E"} \ No newline at end of file diff --git a/types/Add-on/Command_ExportGLTF.d.ts b/types/Add-on/Command_ExportGLTF.d.ts new file mode 100644 index 0000000..1bbf2f3 --- /dev/null +++ b/types/Add-on/Command_ExportGLTF.d.ts @@ -0,0 +1,7 @@ +import { Entity } from "../DatabaseServices/Entity/Entity"; +import { Command } from "../Editor/CommandMachine"; +export declare function ExportGLTF(ens: Entity[]): Promise; +export declare class Command_ExportGLTF implements Command { + exec(): Promise; +} +//# sourceMappingURL=Command_ExportGLTF.d.ts.map \ No newline at end of file diff --git a/types/Add-on/Command_ExportGLTF.d.ts.map b/types/Add-on/Command_ExportGLTF.d.ts.map new file mode 100644 index 0000000..140a386 --- /dev/null +++ b/types/Add-on/Command_ExportGLTF.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Command_ExportGLTF.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Command_ExportGLTF.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,iBAyC7C;AAED,qBAAa,kBAAmB,YAAW,OAAO;IAExC,IAAI;CAkBb"} \ No newline at end of file diff --git a/types/Add-on/Command_TemplateGroup.d.ts.map b/types/Add-on/Command_TemplateGroup.d.ts.map index ad80513..548f8ae 100644 --- a/types/Add-on/Command_TemplateGroup.d.ts.map +++ b/types/Add-on/Command_TemplateGroup.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Command_TemplateGroup.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Command_TemplateGroup.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAmBnD,qBAAa,qBAAsB,YAAW,OAAO;IAE3C,IAAI;CA8Mb"} \ No newline at end of file +{"version":3,"file":"Command_TemplateGroup.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Command_TemplateGroup.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAmBnD,qBAAa,qBAAsB,YAAW,OAAO;IAE3C,IAAI;CAqNb"} \ No newline at end of file diff --git a/types/Add-on/Copy.d.ts b/types/Add-on/Copy.d.ts index 806ff79..7024149 100644 --- a/types/Add-on/Copy.d.ts +++ b/types/Add-on/Copy.d.ts @@ -1,3 +1,6 @@ +import { Matrix4 } from 'three'; +import { Entity } from '../DatabaseServices/Entity/Entity'; +import { IdMaping } from '../DatabaseServices/IdMaping'; import { Command } from '../Editor/CommandMachine'; /** * 理想的copy @@ -16,4 +19,12 @@ import { Command } from '../Editor/CommandMachine'; export declare class Command_Copy implements Command { exec(): Promise; } +export declare function GetCopyEntsParam(originalEnts: Entity[]): { + copyEnts: Entity[]; + dbEnts: Entity[]; + idMapRev: IdMaping; + idMap: IdMaping; + oldEntsSet: Set; +}; +export declare function HardCloneObject(dbAllEnts: Entity[], mtx: Matrix4, idMapRev: IdMaping, idMap: IdMaping, oldEntsSet: Set): void; //# sourceMappingURL=Copy.d.ts.map \ No newline at end of file diff --git a/types/Add-on/Copy.d.ts.map b/types/Add-on/Copy.d.ts.map index c626cd1..c90806c 100644 --- a/types/Add-on/Copy.d.ts.map +++ b/types/Add-on/Copy.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Copy.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Copy.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAYnD;;;;;;;;;;;;;GAaG;AAEH,qBAAa,YAAa,YAAW,OAAO;IAElC,IAAI;CAqTb"} \ No newline at end of file +{"version":3,"file":"Copy.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Copy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAShC,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAI3D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AASxD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAYnD;;;;;;;;;;;;;GAaG;AAEH,qBAAa,YAAa,YAAW,OAAO;IAElC,IAAI;CAqDb;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,QAAQ,CAAC;IAAC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAAE,CA+ChK;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,QAiO9H"} \ No newline at end of file diff --git a/types/Add-on/DrawArc.d.ts.map b/types/Add-on/DrawArc.d.ts.map index 726ce3d..616760c 100644 --- a/types/Add-on/DrawArc.d.ts.map +++ b/types/Add-on/DrawArc.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawArc.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawArc.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,qBAAa,OAAQ,YAAW,OAAO;IAE7B,IAAI;CAsCb"} \ No newline at end of file +{"version":3,"file":"DrawArc.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawArc.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,qBAAa,OAAQ,YAAW,OAAO;IAE7B,IAAI;CA8Cb"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/BuildBoardTool.d.ts b/types/Add-on/DrawBoard/BuildBoardTool.d.ts index 05aca63..174a767 100644 --- a/types/Add-on/DrawBoard/BuildBoardTool.d.ts +++ b/types/Add-on/DrawBoard/BuildBoardTool.d.ts @@ -1,11 +1,14 @@ +import { Vector3 } from "three"; import { Board } from "../../DatabaseServices/Entity/Board"; import { TemplateWineRackRecord } from "../../DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord"; import { TemplateRecord } from "../../DatabaseServices/Template/TemplateRecord"; import { ISpaceParse } from "../../Geometry/SpaceParse/ISpaceParse"; import { BehindBoardOption, IGrooveOption, LayerBoardOption, VerticalBoardOption } from "../../UI/Store/OptionInterface/IOptionInterface"; -export declare function BuildLayerBoards(opt: LayerBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Board[]; -export declare function BuildVerticalBoards(opt: VerticalBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Board[]; -export declare function BuildBehindBoards(opt: BehindBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Board[]; +export declare function BuildLayerBoards(opt: LayerBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Promise; +export declare function BuildVerticalBoards(opt: VerticalBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Promise; +export declare function BuildBehindBoards(opt: BehindBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Promise; export declare function ExtendsBoardThickness(temp: TemplateRecord, thickness: number): void; export declare function ExtendsbrThick2(temp: TemplateWineRackRecord): void; +export declare function AppendTemplateParam(template: TemplateRecord, name: string, value: number, expr: string, description: string): void; +export declare function CreateTemplateParam(template: TemplateRecord, size: Vector3, opt: LayerBoardOption | BehindBoardOption | VerticalBoardOption, grooveOption?: IGrooveOption): void; //# sourceMappingURL=BuildBoardTool.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawBoard/BuildBoardTool.d.ts.map b/types/Add-on/DrawBoard/BuildBoardTool.d.ts.map index b44eae3..c6eaee4 100644 --- a/types/Add-on/DrawBoard/BuildBoardTool.d.ts.map +++ b/types/Add-on/DrawBoard/BuildBoardTool.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BuildBoardTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/BuildBoardTool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uEAAuE,CAAC;AAC/G,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAEhF,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAG1I,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,aAAa,GAAG,KAAK,EAAE,CA8EjH;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,aAAa,GAAG,KAAK,EAAE,CAyEvH;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,aAAa,GAAG,KAAK,EAAE,CAiFnH;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,QAY5E;AACD,wBAAgB,eAAe,CAAC,IAAI,EAAE,sBAAsB,QAoB3D"} \ No newline at end of file +{"version":3,"file":"BuildBoardTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/BuildBoardTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAG5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uEAAuE,CAAC;AAC/G,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAEhF,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iDAAiD,CAAC;AAG1I,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CA8FhI;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAyFtI;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAiGlI;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,QAY5E;AACD,wBAAgB,eAAe,CAAC,IAAI,EAAE,sBAAsB,QAoB3D;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAQlI;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,gBAAgB,GAAG,iBAAiB,GAAG,mBAAmB,EAAE,YAAY,CAAC,EAAE,aAAa,GAAG,IAAI,CAgBhL"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/CuttingProtrudingPart.d.ts b/types/Add-on/DrawBoard/CuttingProtrudingPart.d.ts index 054061f..e207e2d 100644 --- a/types/Add-on/DrawBoard/CuttingProtrudingPart.d.ts +++ b/types/Add-on/DrawBoard/CuttingProtrudingPart.d.ts @@ -1,13 +1,11 @@ -import { Matrix4 } from "three"; import { Board } from "../../DatabaseServices/Entity/Board"; -import { Box3Ext } from "../../Geometry/Box"; +import { ObjectId } from "../../DatabaseServices/ObjectId"; /** - * 缺口(柱子、梁)柜内空间绘制层立板自动按缺口尺寸绘制出异形板件 + * 缺口(柱子、梁)柜内空间绘制层立板自动按缺口尺寸绘制出异形板件0 * 切割凸出部分 * - * @param {Box3Ext} spaceBox - * @param {Matrix4} spaceOCS + * @param {Entity} knifeBrs 切割的刀 * @param {Board[]} brs */ -export declare function CuttingProtrudingPart(spaceBox: Box3Ext, spaceOCS: Matrix4, brs: Board[]): void; +export declare function CuttingProtrudingPart(knifeBrs: Set, brs: Board[]): Board[]; //# sourceMappingURL=CuttingProtrudingPart.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawBoard/CuttingProtrudingPart.d.ts.map b/types/Add-on/DrawBoard/CuttingProtrudingPart.d.ts.map index 6daee36..37acd0f 100644 --- a/types/Add-on/DrawBoard/CuttingProtrudingPart.d.ts.map +++ b/types/Add-on/DrawBoard/CuttingProtrudingPart.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CuttingProtrudingPart.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/CuttingProtrudingPart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAG5D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,QA6BvF"} \ No newline at end of file +{"version":3,"file":"CuttingProtrudingPart.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/CuttingProtrudingPart.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAI5D,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CA0CpF"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DownloadTemplateTable.d.ts b/types/Add-on/DrawBoard/DownloadTemplateTable.d.ts new file mode 100644 index 0000000..d11f901 --- /dev/null +++ b/types/Add-on/DrawBoard/DownloadTemplateTable.d.ts @@ -0,0 +1,5 @@ +import { Command } from "../../Editor/CommandMachine"; +export declare class DownloadTemplateTable implements Command { + exec(): Promise; +} +//# sourceMappingURL=DownloadTemplateTable.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DownloadTemplateTable.d.ts.map b/types/Add-on/DrawBoard/DownloadTemplateTable.d.ts.map new file mode 100644 index 0000000..627e82e --- /dev/null +++ b/types/Add-on/DrawBoard/DownloadTemplateTable.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"DownloadTemplateTable.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DownloadTemplateTable.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD,qBAAa,qBAAsB,YAAW,OAAO;IAE3C,IAAI;CAQb"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DrawBoardTool.d.ts b/types/Add-on/DrawBoard/DrawBoardTool.d.ts index b26459c..8be50bb 100644 --- a/types/Add-on/DrawBoard/DrawBoardTool.d.ts +++ b/types/Add-on/DrawBoard/DrawBoardTool.d.ts @@ -1,4 +1,5 @@ import { BoardType } from '../../DatabaseServices/Entity/BoardInterface'; +import { ObjectId } from '../../DatabaseServices/ObjectId'; import { Command } from '../../Editor/CommandMachine'; import { ISpaceParse } from '../../Geometry/SpaceParse/ISpaceParse'; import { BoardModalType } from "../../UI/Components/Board/BoardModalType"; @@ -8,9 +9,15 @@ export declare abstract class DrawBoardTool implements Command { protected modalType: BoardModalType; protected store: LayerBoardStore | VerticalBoardStore | BehindBoardStore; protected space: ISpaceParse; + protected IntersectSpaceEntitys: Set; + /** + * 识别空间时记录切割的板件 空间包围盒min/max顶点 做索引 + */ + CacheSpaceEntitysMap: Map>; exec(): Promise; private Callback; private SelectAndBuildBoard; + private GetIntersectSpaceEntitys; protected buildBoard(isAppendSpace?: boolean): Promise; } //# sourceMappingURL=DrawBoardTool.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DrawBoardTool.d.ts.map b/types/Add-on/DrawBoard/DrawBoardTool.d.ts.map index b41e39e..9bf2cef 100644 --- a/types/Add-on/DrawBoard/DrawBoardTool.d.ts.map +++ b/types/Add-on/DrawBoard/DrawBoardTool.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawBoardTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawBoardTool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAIpE,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAGlG,8BAAsB,aAAc,YAAW,OAAO;IAGlD,SAAS,CAAC,QAAQ,YAAmB;IACrC,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC;IACpC,SAAS,CAAC,KAAK,EAAE,eAAe,GAAG,kBAAkB,GAAG,gBAAgB,CAAC;IACzE,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC;IACvB,IAAI;IA0BV,OAAO,CAAC,QAAQ,CAKd;YACY,mBAAmB;cA0CjB,UAAU,CAAC,aAAa,UAAO;CAClD"} \ No newline at end of file +{"version":3,"file":"DrawBoardTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawBoardTool.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAEzE,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAIpE,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAIlG,8BAAsB,aAAc,YAAW,OAAO;IAGlD,SAAS,CAAC,QAAQ,YAAmB;IACrC,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC;IACpC,SAAS,CAAC,KAAK,EAAE,eAAe,GAAG,kBAAkB,GAAG,gBAAgB,CAAC;IACzE,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC;IAC7B,SAAS,CAAC,qBAAqB,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE/C;;OAEG;IACH,oBAAoB,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAa;IAEvD,IAAI;IA4BV,OAAO,CAAC,QAAQ,CAKd;YACY,mBAAmB;IAqDjC,OAAO,CAAC,wBAAwB;cAuBhB,UAAU,CAAC,aAAa,UAAO;CAClD"} \ 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 62ac1ed..e9d6f0f 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;AAOzC,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 +{"version":3,"file":"DrawClosingStrip.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawClosingStrip.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAW,MAAM,OAAO,CAAC;AAOzC,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;CAqJtD"} \ 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 39a4bfd..82cd1ce 100644 --- a/types/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorTool.d.ts +++ b/types/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorTool.d.ts @@ -24,7 +24,6 @@ export declare class DrawDoorTool { private hingeSet; protected option: IDoorConfigOption; protected doorInfos: IDoorInfo[]; - private currentHandleProps; constructor(store: DoorStore, spaceParse: ISpaceParse); private GetHeightExpr; protected Init(): Promise; @@ -32,17 +31,17 @@ export declare class DrawDoorTool { protected AppendTemplateParam(name: string, value: number, des: string, temp: TemplateRecord, expr?: string): void; protected GetRootTemplate(): TemplateRecord; private CreatePositionSpaceTr; - protected CreateHandleTr(info: IDoorInfo, doorTr: TemplateRecord): void; - protected GetHingeTemp(info: IDoorInfo, door: TemplateRecord): boolean; + protected CreateHandleTr(info: IDoorInfo, doorTr: TemplateRecord): Promise; + protected GetHingeTemp(info: IDoorInfo, door: TemplateRecord): Promise; /** * 设置五金(拉手 铰链)和板的关联切割 * @param allEntitys 所有的实体 包括了门和五金 * @param isUpDownDoor 上下开门 否为左右开门 * @returns */ - protected RelativeMetalsToBoard(allEntitys: Entity[], isUpDownDoor: boolean): boolean; + protected RelativeMetalsToBoard(allEntitys: Entity[], isUpDownDoor: boolean, doorSpaceSize: Vector3, spaceOCS: Matrix4): boolean; getSpaceAllEnts(templateEntitys: Entity[]): (Entity | Board)[]; - protected GetDoorTemp(info: IDoorInfo): TemplateRecord; + protected GetDoorTemp(info: IDoorInfo): Promise; protected SetOpenDir(doorsTemp: TemplateRecord, info: IDoorInfo): void; private GetBoardOpenDir; /** @@ -75,17 +74,15 @@ export declare class DrawDoorTool { */ export declare function SetTypeHigneName(relativeDoors: Set, allSpaceEnts: Entity[], isLROpen: boolean): void; /** - * - * * @export * @param {OBB} obb * @param {Vector3} normalizeZ * @param {Matrix4} parentIntersectEntOCS - * @param {boolean} isExtrudeSolid + * @param {boolean} isSweepSolid * @param {boolean} isDoor 门板类型不增加误差值 * @return {*} {OBB} */ -export declare function getFuzzOBB(obb: OBB, normalizeZ: Vector3, parentIntersectEntOCS: Matrix4, isExtrudeSolid: boolean, isDoor: boolean): OBB; +export declare function getFuzzOBB(obb: OBB, normalizeZ: Vector3, parentIntersectEntOCS: Matrix4, isSweepSolid: boolean, isDoor: boolean): OBB; /** * @param intersectEnts 这里规定是铰链列表 * @param parentOCS 父空间的坐标系 diff --git a/types/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorTool.d.ts.map b/types/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorTool.d.ts.map index 3304ec6..ac65e58 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":"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"} \ No newline at end of file +{"version":3,"file":"DrawDoorTool.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/DrawBoard/DrawDoorDrawer/DrawDoorTool.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DrawDoorDrawer/DrawLeftRightOpenDoor.d.ts.map b/types/Add-on/DrawBoard/DrawDoorDrawer/DrawLeftRightOpenDoor.d.ts.map index 8908801..d1ce5cd 100644 --- a/types/Add-on/DrawBoard/DrawDoorDrawer/DrawLeftRightOpenDoor.d.ts.map +++ b/types/Add-on/DrawBoard/DrawDoorDrawer/DrawLeftRightOpenDoor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawLeftRightOpenDoor.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/DrawBoard/DrawDoorDrawer/DrawLeftRightOpenDoor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAKnF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBAAa,qBAAsB,SAAQ,YAAY;IAE7C,IAAI;IAsIV,SAAS,CAAC,eAAe;IAMzB,OAAO,CAAC,cAAc;IAgDtB,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,oBAAoB;IAoH5B,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,YAAY;CA2BvB"} \ No newline at end of file +{"version":3,"file":"DrawLeftRightOpenDoor.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/DrawBoard/DrawDoorDrawer/DrawLeftRightOpenDoor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAOnF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBAAa,qBAAsB,SAAQ,YAAY;IAE7C,IAAI;IAgMV,SAAS,CAAC,eAAe;IAMzB,OAAO,CAAC,cAAc;YAgDR,cAAc;IAiB5B,OAAO,CAAC,oBAAoB;IAoH5B,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,YAAY;CA2BvB"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DrawDoorDrawer/DrawUpDownOpenDoor.d.ts.map b/types/Add-on/DrawBoard/DrawDoorDrawer/DrawUpDownOpenDoor.d.ts.map index 4017c78..eccb83d 100644 --- a/types/Add-on/DrawBoard/DrawDoorDrawer/DrawUpDownOpenDoor.d.ts.map +++ b/types/Add-on/DrawBoard/DrawDoorDrawer/DrawUpDownOpenDoor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawUpDownOpenDoor.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/DrawBoard/DrawDoorDrawer/DrawUpDownOpenDoor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAKnF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBAAa,kBAAmB,SAAQ,YAAY;IAE1C,IAAI;IAuIV,SAAS,CAAC,eAAe;IAOzB,OAAO,CAAC,cAAc;IA+CtB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,oBAAoB;IAsH5B,OAAO,CAAC,YAAY;IA0BpB,OAAO,CAAC,eAAe;CA2B1B"} \ No newline at end of file +{"version":3,"file":"DrawUpDownOpenDoor.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/DrawBoard/DrawDoorDrawer/DrawUpDownOpenDoor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAOnF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBAAa,kBAAmB,SAAQ,YAAY;IAE1C,IAAI;IAiMV,SAAS,CAAC,eAAe;IAOzB,OAAO,CAAC,cAAc;YA+CR,cAAc;IAe5B,OAAO,CAAC,oBAAoB;IAsH5B,OAAO,CAAC,YAAY;IA0BpB,OAAO,CAAC,eAAe;CA2B1B"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DrawDrawer.d.ts b/types/Add-on/DrawBoard/DrawDrawer.d.ts index 3af587a..376e479 100644 --- a/types/Add-on/DrawBoard/DrawDrawer.d.ts +++ b/types/Add-on/DrawBoard/DrawDrawer.d.ts @@ -1,6 +1,5 @@ import { Command } from "../../Editor/CommandMachine"; export declare class DrawDrawrer implements Command { - private currentHandleProp; exec(): Promise; private GetTempExpr; private AppendTemplateParam; diff --git a/types/Add-on/DrawBoard/DrawDrawer.d.ts.map b/types/Add-on/DrawBoard/DrawDrawer.d.ts.map index 7f46a03..5f9e150 100644 --- a/types/Add-on/DrawBoard/DrawDrawer.d.ts.map +++ b/types/Add-on/DrawBoard/DrawDrawer.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawDrawer.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawDrawer.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAWtD,qBAAa,WAAY,YAAW,OAAO;IAEvC,OAAO,CAAC,iBAAiB,CAAmB;IACtC,IAAI;IAsNV,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,eAAe;IAsDvB,OAAO,CAAC,cAAc;IAwEtB;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;IAyIrB,OAAO,CAAC,eAAe;IAgCvB,OAAO,CAAC,qBAAqB;IAa7B,gBAAgB;IAChB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,aAAa;CAoFxB"} \ No newline at end of file +{"version":3,"file":"DrawDrawer.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawDrawer.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAUtD,qBAAa,WAAY,YAAW,OAAO;IAEjC,IAAI;IA+PV,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,eAAe;IAsDvB,OAAO,CAAC,cAAc;IAwEtB;;;;;;;;OAQG;YACW,aAAa;IAyI3B,OAAO,CAAC,eAAe;IA0CvB,OAAO,CAAC,qBAAqB;IAc7B,gBAAgB;IAChB,OAAO,CAAC,UAAU;YAUJ,aAAa;CAgF9B"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DrawLayerBoard.d.ts.map b/types/Add-on/DrawBoard/DrawLayerBoard.d.ts.map index 3e2dc1e..4c3ce70 100644 --- a/types/Add-on/DrawBoard/DrawLayerBoard.d.ts.map +++ b/types/Add-on/DrawBoard/DrawLayerBoard.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawLayerBoard.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawLayerBoard.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,cAAe,SAAQ,aAAa;cAE7B,UAAU,CAAC,aAAa,UAAO;CAwBlD"} \ No newline at end of file +{"version":3,"file":"DrawLayerBoard.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawLayerBoard.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,cAAe,SAAQ,aAAa;cAE7B,UAAU,CAAC,aAAa,UAAO;CAiClD"} \ 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 de6d75b..4e8b92a 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":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AActD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;IAgBV,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,aAAa,CAuLnB;IACF,OAAO,CAAC,aAAa,CAgDnB;CACL"} \ No newline at end of file +{"version":3,"file":"DrawLeftRightBoard.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawLeftRightBoard.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAetD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;IAgBV,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,aAAa,CA+LnB;IACF,OAAO,CAAC,aAAa,CAgDnB;CACL"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DrawSpecialShapeBoardTool.d.ts b/types/Add-on/DrawBoard/DrawSpecialShapeBoardTool.d.ts index 6a438ee..28bcd1b 100644 --- a/types/Add-on/DrawBoard/DrawSpecialShapeBoardTool.d.ts +++ b/types/Add-on/DrawBoard/DrawSpecialShapeBoardTool.d.ts @@ -5,9 +5,10 @@ import { Entity } from "../../DatabaseServices/Entity/Entity"; import { ExtrudeContour, ExtrudeSolid } from "../../DatabaseServices/Entity/Extrude"; import { Region } from "../../DatabaseServices/Entity/Region"; /** + * useBase 二维刀路提取轮廓时使用基点 * 选择提取轮廓的位置 */ -export declare function selectOutlinePosition(cus: Curve[] | Curve): Promise; +export declare function selectOutlinePosition(cus: Curve[] | Curve, useBase?: boolean): Promise; /** * 应用轮廓到板件 */ diff --git a/types/Add-on/DrawBoard/DrawSpecialShapeBoardTool.d.ts.map b/types/Add-on/DrawBoard/DrawSpecialShapeBoardTool.d.ts.map index 2171ed4..0108acb 100644 --- a/types/Add-on/DrawBoard/DrawSpecialShapeBoardTool.d.ts.map +++ b/types/Add-on/DrawBoard/DrawSpecialShapeBoardTool.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawSpecialShapeBoardTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawSpecialShapeBoardTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,OAAO,CAAC;AAIzC,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAU9D;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,oBAwB/D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,QAe3F;AA6CD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,YAAY,UAAQ,EAAE,UAAU,UAAQ,EAAE,YAAY,UAAQ,GACnG,OAAO,CAAC;IACN,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;CAClC,CAAC,CAgEL;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,GAAG,SAAS,CAkDnG;AAGD,wBAAsB,qBAAqB,IACrC,OAAO,CAAC;IACN,YAAY,CAAC,EAAE,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC;CAChD,CAAC,CAsEL"} \ No newline at end of file +{"version":3,"file":"DrawSpecialShapeBoardTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawSpecialShapeBoardTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,OAAO,CAAC;AAIzC,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAErF,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAW9D;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,OAAO,UAAQ,oBAuChF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,OAAO,QAe3F;AA6CD;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,YAAY,UAAQ,EAAE,UAAU,UAAQ,EAAE,YAAY,UAAQ,GACnG,OAAO,CAAC;IACN,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC;CAClC,CAAC,CAgEL;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,GAAG,SAAS,CAkDnG;AAGD,wBAAsB,qBAAqB,IACrC,OAAO,CAAC;IACN,YAAY,CAAC,EAAE,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,CAAC,CAAC;CAChD,CAAC,CAsEL"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DrawSpecialShapedBoard.d.ts.map b/types/Add-on/DrawBoard/DrawSpecialShapedBoard.d.ts.map index ca170c0..515a5ac 100644 --- a/types/Add-on/DrawBoard/DrawSpecialShapedBoard.d.ts.map +++ b/types/Add-on/DrawBoard/DrawSpecialShapedBoard.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawSpecialShapedBoard.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawSpecialShapedBoard.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAMtD,qBAAa,sBAAuB,YAAW,OAAO;IAElD,GAAG,eAAsB;IACnB,IAAI;CA4Fb"} \ No newline at end of file +{"version":3,"file":"DrawSpecialShapedBoard.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawSpecialShapedBoard.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAMtD,qBAAa,sBAAuB,YAAW,OAAO;IAElD,GAAG,eAAsB;IACnB,IAAI;CA6Fb"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DrawTemplateByImport.d.ts b/types/Add-on/DrawBoard/DrawTemplateByImport.d.ts index 0390971..f4292ab 100644 --- a/types/Add-on/DrawBoard/DrawTemplateByImport.d.ts +++ b/types/Add-on/DrawBoard/DrawTemplateByImport.d.ts @@ -5,5 +5,8 @@ export declare class DrawTemplateByImport implements Command { private handleInfo; private DrawText; private DrawDim; + private DrawhingeHole; + private DrawHandleHole; + private DrawHandleTemplate; } //# sourceMappingURL=DrawTemplateByImport.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DrawTemplateByImport.d.ts.map b/types/Add-on/DrawBoard/DrawTemplateByImport.d.ts.map index 1d1137c..d5440cb 100644 --- a/types/Add-on/DrawBoard/DrawTemplateByImport.d.ts.map +++ b/types/Add-on/DrawBoard/DrawTemplateByImport.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawTemplateByImport.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawTemplateByImport.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAe,MAAM,6BAA6B,CAAC;AAgCnE,qBAAa,oBAAqB,YAAW,OAAO;IAEhD,OAAO,CAAC,MAAM,CAAe;IACvB,IAAI;IAiRV,OAAO,CAAC,UAAU;IAyDlB,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,OAAO;CAmBlB"} \ No newline at end of file +{"version":3,"file":"DrawTemplateByImport.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawTemplateByImport.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,OAAO,EAAe,MAAM,6BAA6B,CAAC;AA8DnE,qBAAa,oBAAqB,YAAW,OAAO;IAEhD,OAAO,CAAC,MAAM,CAAe;IACvB,IAAI;IAicV,OAAO,CAAC,UAAU;IAwElB,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,OAAO;YAqBD,aAAa;YAsEb,cAAc;YA8Cd,kBAAkB;CAoEnC"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/DrawVerticalBoard.d.ts.map b/types/Add-on/DrawBoard/DrawVerticalBoard.d.ts.map index 5cd5311..1c5048e 100644 --- a/types/Add-on/DrawBoard/DrawVerticalBoard.d.ts.map +++ b/types/Add-on/DrawBoard/DrawVerticalBoard.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawVerticalBoard.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawVerticalBoard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAOzE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,iBAAkB,SAAQ,aAAa;IAEhD,SAAS,CAAC,QAAQ,YAAsB;cACxB,UAAU,CAAC,aAAa,UAAO;CAsBlD"} \ No newline at end of file +{"version":3,"file":"DrawVerticalBoard.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/DrawVerticalBoard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAQzE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,iBAAkB,SAAQ,aAAa;IAEhD,SAAS,CAAC,QAAQ,YAAsB;cACxB,UAAU,CAAC,aAAa,UAAO;CA+BlD"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/EditorBoardTempate.d.ts.map b/types/Add-on/DrawBoard/EditorBoardTempate.d.ts.map index caee20a..cc5dec6 100644 --- a/types/Add-on/DrawBoard/EditorBoardTempate.d.ts.map +++ b/types/Add-on/DrawBoard/EditorBoardTempate.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"EditorBoardTempate.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/EditorBoardTempate.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAOtD,qBAAa,mBAAoB,YAAW,OAAO;IAEzC,IAAI;CA+Fb"} \ No newline at end of file +{"version":3,"file":"EditorBoardTempate.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/EditorBoardTempate.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAOtD,qBAAa,mBAAoB,YAAW,OAAO;IAEzC,IAAI;CAoGb"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/ParseHandle.d.ts.map b/types/Add-on/DrawBoard/ParseHandle.d.ts.map index 4e52244..a0b2707 100644 --- a/types/Add-on/DrawBoard/ParseHandle.d.ts.map +++ b/types/Add-on/DrawBoard/ParseHandle.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParseHandle.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/ParseHandle.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAOtD,qBAAa,WAAY,YAAW,OAAO;IAEjC,IAAI;CA8Eb"} \ No newline at end of file +{"version":3,"file":"ParseHandle.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/ParseHandle.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAe,MAAM,6BAA6B,CAAC;AAOnE,qBAAa,WAAY,YAAW,OAAO;IAEjC,IAAI;CAiHb"} \ No newline at end of file diff --git a/types/Add-on/DrawBoard/ParseHinge.d.ts b/types/Add-on/DrawBoard/ParseHinge.d.ts index dbc1b0d..7d5193f 100644 --- a/types/Add-on/DrawBoard/ParseHinge.d.ts +++ b/types/Add-on/DrawBoard/ParseHinge.d.ts @@ -1,3 +1,4 @@ +import { Entity } from "../../DatabaseServices/Entity/Entity"; import { Command } from "../../Editor/CommandMachine"; export declare class ParseHinge implements Command { options: { @@ -7,4 +8,15 @@ export declare class ParseHinge implements Command { }[]; exec(): Promise; } +/** + * 解析铰链在门板上的位置和铰链详细信息 + * @param {Entity[]} doors + * @param options 需要解析铰链的属性 + * @param filterNoDoor 过滤非门板 + */ +export declare function ParseHingeToDoor(doors: Entity[], options: { + name: string; + key: string; + checked: boolean; +}[], filterNoDoor?: boolean): Promise; //# sourceMappingURL=ParseHinge.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawBoard/ParseHinge.d.ts.map b/types/Add-on/DrawBoard/ParseHinge.d.ts.map index 99f557d..0196792 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":"AAaA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAatD,qBAAa,UAAW,YAAW,OAAO;IAE1B,OAAO;;;;QAOjB;IACI,IAAI;CA8Fb"} \ No newline at end of file +{"version":3,"file":"ParseHinge.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawBoard/ParseHinge.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAG9D,OAAO,EAAE,OAAO,EAAe,MAAM,6BAA6B,CAAC;AAgBnE,qBAAa,UAAW,YAAW,OAAO;IAE1B,OAAO;;;;QAOjB;IACI,IAAI;CA6Cb;AAoCD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;CAAE,EAAE,EAAE,YAAY,UAAQ,iBAsJxI"} \ No newline at end of file diff --git a/types/Add-on/DrawCircle.d.ts b/types/Add-on/DrawCircle.d.ts index 5bcdfef..78ee139 100644 --- a/types/Add-on/DrawCircle.d.ts +++ b/types/Add-on/DrawCircle.d.ts @@ -2,11 +2,12 @@ import { Vector3 } from 'three'; import { Arc } from '../DatabaseServices/Entity/Arc'; import { Circle } from '../DatabaseServices/Entity/Circle'; import { Curve } from '../DatabaseServices/Entity/Curve'; +import { Entity } from '../DatabaseServices/Entity/Entity'; import { Line } from '../DatabaseServices/Entity/Line'; import { Command } from '../Editor/CommandMachine'; export declare class DrawCircle implements Command { exec(): Promise; - DrawCircleUseRadious(val: Vector3): Promise; + DrawCircleUseRadious(val: Vector3, snapEntity: Entity): Promise; DrawCicleUseTwoPoint(): Promise; DrawCicleUseThreePoint(): Promise; DrawCicleUseCutoffPointAndRadious(): Promise; @@ -15,5 +16,6 @@ export declare class DrawCircle implements Command { DrawUseCutoffPoinByCircleAndCircle(cir1: Circle | Arc, cir2: Circle | Arc, midpoint: Vector3): Promise; DrawMostSuitableCircle([c1, c2, c3, c4]: Curve[], midpoint: Vector3, radius: number): void; ThreeLineDrawCircle(): Promise; + SetCircleRoomNameAndCabinetName(circle: Circle, snapEntity: Entity): void; } //# sourceMappingURL=DrawCircle.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawCircle.d.ts.map b/types/Add-on/DrawCircle.d.ts.map index e5b53f2..5acd68e 100644 --- a/types/Add-on/DrawCircle.d.ts.map +++ b/types/Add-on/DrawCircle.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawCircle.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawCircle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AAKzC,OAAO,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAEzD,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,qBAAa,UAAW,YAAW,OAAO;IAEhC,IAAI;IA0CJ,oBAAoB,CAAC,GAAG,EAAE,OAAO;IAkBjC,oBAAoB;IA0BpB,sBAAsB;IAyCtB,iCAAiC;IA8CjC,gCAAgC,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;IAgCpF,8BAA8B,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;IAwD1E,kCAAkC,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,EAAE,QAAQ,EAAE,OAAO;IAmClG,sBAAsB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAoC7E,mBAAmB;CAmF5B"} \ No newline at end of file +{"version":3,"file":"DrawCircle.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawCircle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AAKzC,OAAO,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAC;AAErD,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAEvD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,qBAAa,UAAW,YAAW,OAAO;IAEhC,IAAI;IA0CJ,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM;IAqBrD,oBAAoB;IAgCpB,sBAAsB;IAiDtB,iCAAiC;IA8CjC,gCAAgC,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;IAgCpF,8BAA8B,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO;IAwD1E,kCAAkC,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,GAAG,EAAE,QAAQ,EAAE,OAAO;IAmClG,sBAAsB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAoC7E,mBAAmB;IAmFzB,+BAA+B,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAQrE"} \ No newline at end of file diff --git a/types/Add-on/DrawDim/AutoDimBrs.d.ts.map b/types/Add-on/DrawDim/AutoDimBrs.d.ts.map index 33633d6..143c9b0 100644 --- a/types/Add-on/DrawDim/AutoDimBrs.d.ts.map +++ b/types/Add-on/DrawDim/AutoDimBrs.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"AutoDimBrs.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/AutoDimBrs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAG9D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAStD,qBAAa,kBAAmB,YAAW,OAAO;IAExC,IAAI;IAmEV;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,QAAK,EAAE,SAAS,GAAE,OAAmB,EAAE,SAAS,GAAE,OAAmB,GAAG,KAAK,EAAE;CAgDxH"} \ No newline at end of file +{"version":3,"file":"AutoDimBrs.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/AutoDimBrs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAG9D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAUtD,qBAAa,kBAAmB,YAAW,OAAO;IAExC,IAAI;IAsEV;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,QAAK,EAAE,SAAS,GAAE,OAAmB,EAAE,SAAS,GAAE,OAAmB,GAAG,KAAK,EAAE;CAqDxH"} \ No newline at end of file diff --git a/types/Add-on/DrawDim/AutoDimBrsStore.d.ts.map b/types/Add-on/DrawDim/AutoDimBrsStore.d.ts.map index a432170..1b895ae 100644 --- a/types/Add-on/DrawDim/AutoDimBrsStore.d.ts.map +++ b/types/Add-on/DrawDim/AutoDimBrsStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"AutoDimBrsStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/AutoDimBrsStore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AAGpF,qBAAa,eAAgB,YAAW,YAAY;IAEpC,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,QAAQ,EAAE,iBAAiB,CAAkC;IAEzE,UAAU;IAKV,WAAW;;;IAUX,UAAU;IAQV,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC;IAqBrC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAkB;IAChD,MAAM,CAAC,WAAW,IAAI,eAAe;CAMxC;AAED,eAAO,MAAM,eAAe,iBAAgC,CAAC"} \ No newline at end of file +{"version":3,"file":"AutoDimBrsStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/AutoDimBrsStore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AAGpF,qBAAa,eAAgB,YAAW,YAAY;IAEpC,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,QAAQ,EAAE,iBAAiB,CAAkC;IAEzE,UAAU;IAKV,WAAW;;;IAUX,UAAU;IAQV,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC;IA4BrC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAkB;IAChD,MAAM,CAAC,WAAW,IAAI,eAAe;CAMxC;AAED,eAAO,MAAM,eAAe,iBAAgC,CAAC"} \ No newline at end of file diff --git a/types/Add-on/DrawDim/AutoDimBrsTool.d.ts b/types/Add-on/DrawDim/AutoDimBrsTool.d.ts index 914805e..defd7bb 100644 --- a/types/Add-on/DrawDim/AutoDimBrsTool.d.ts +++ b/types/Add-on/DrawDim/AutoDimBrsTool.d.ts @@ -7,6 +7,7 @@ export declare enum EDimType { NoSmSize = "noSmSize",//过滤小尺寸 NoAppointSize = "noAppointSize",//过滤指定尺寸 NoInSize = "noInSize",//空间小于该数值时 不标注内空 - ForBoardName = "forBoardName" + ForBoardName = "forBoardName",//根据板名条件过滤 + InsideOffset = "insideOffset" } //# sourceMappingURL=AutoDimBrsTool.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawDim/AutoDimBrsTool.d.ts.map b/types/Add-on/DrawDim/AutoDimBrsTool.d.ts.map index 4150c36..038f4fd 100644 --- a/types/Add-on/DrawDim/AutoDimBrsTool.d.ts.map +++ b/types/Add-on/DrawDim/AutoDimBrsTool.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"AutoDimBrsTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/AutoDimBrsTool.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAEhB,KAAK,UAAU,CAAC,MAAM;IACtB,GAAG,QAAQ,CAAC,aAAa;IACzB,GAAG,QAAQ,CAAC,OAAO;IACnB,GAAG,QAAQ,CAAC,OAAO;IACnB,QAAQ,aAAa,CAAC,MAAM;IAC5B,QAAQ,aAAa,CAAC,OAAO;IAC7B,aAAa,kBAAkB,CAAC,QAAQ;IACxC,QAAQ,aAAa,CAAC,gBAAgB;IACtC,YAAY,iBAAiB;CAChC"} \ No newline at end of file +{"version":3,"file":"AutoDimBrsTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/AutoDimBrsTool.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAEhB,KAAK,UAAU,CAAC,MAAM;IACtB,GAAG,QAAQ,CAAC,aAAa;IACzB,GAAG,QAAQ,CAAC,OAAO;IACnB,GAAG,QAAQ,CAAC,OAAO;IACnB,QAAQ,aAAa,CAAC,MAAM;IAC5B,QAAQ,aAAa,CAAC,OAAO;IAC7B,aAAa,kBAAkB,CAAC,QAAQ;IACxC,QAAQ,aAAa,CAAC,gBAAgB;IACtC,YAAY,iBAAiB,CAAC,UAAU;IACxC,YAAY,iBAAiB;CAChC"} \ No newline at end of file diff --git a/types/Add-on/DrawDim/BoardInfoDimPanel.d.ts.map b/types/Add-on/DrawDim/BoardInfoDimPanel.d.ts.map index 4d7cd9d..cb8afc9 100644 --- a/types/Add-on/DrawDim/BoardInfoDimPanel.d.ts.map +++ b/types/Add-on/DrawDim/BoardInfoDimPanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardInfoDimPanel.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/BoardInfoDimPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAEtE,OAAO,EAAqB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,0BAA0B,CAAC;AAElC,qBACa,iBAAkB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,iBAAiB,CAAC;CAAE,CAAC;IAEjF,MAAM,EAAE,QAAQ,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACP,YAAY,SAAM;IAE9B,iBAAiB;IAYjB,oBAAoB;IAMpB,eAAe,MAAO,eAAe,UAKnC;IAEF,cAAc,MAAO,eAAe,UAOlC;IAEF,aAAa,MAAO,eAAe,UAuBjC;IAEF,OAAO,WAAY,UAAU,UAgB3B;IACF,MAAM;CA+ET"} \ No newline at end of file +{"version":3,"file":"BoardInfoDimPanel.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/BoardInfoDimPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAEtE,OAAO,EAAqB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,0BAA0B,CAAC;AAElC,qBACa,iBAAkB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,iBAAiB,CAAC;CAAE,CAAC;IAEjF,MAAM,EAAE,QAAQ,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACP,YAAY,SAAM;IAE9B,iBAAiB;IAYjB,oBAAoB;IAMpB,eAAe,MAAO,KAAK,CAAC,SAAS,UAKnC;IAEF,cAAc,MAAO,KAAK,CAAC,SAAS,UAOlC;IAEF,aAAa,MAAO,KAAK,CAAC,SAAS,UAuBjC;IAEF,OAAO,WAAY,UAAU,UAgB3B;IACF,MAAM;CA+ET"} \ No newline at end of file diff --git a/types/Add-on/DrawDim/BoardInfoDimStore.d.ts.map b/types/Add-on/DrawDim/BoardInfoDimStore.d.ts.map index 0ea6b57..4ccbd07 100644 --- a/types/Add-on/DrawDim/BoardInfoDimStore.d.ts.map +++ b/types/Add-on/DrawDim/BoardInfoDimStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardInfoDimStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/BoardInfoDimStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,eAAO,MAAM,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAc/C,CAAC;AAEF,qBAAa,iBAAkB,YAAW,YAAY;IAEtC,UAAU,SAAQ;IAClB,YAAY,QAAM;IAClB,SAAS,WAA4B;IAEjD,UAAU;IAKV,UAAU;IAKV,YAAY,CAAC,QAAQ,EAAE,GAAG;IAM1B,QAAQ,SAAU,QAAQ,UAMxB;IAEF,SAAS,CAAC,IAAI,GAAE,QAAuB;CAS1C;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"} \ No newline at end of file +{"version":3,"file":"BoardInfoDimStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/BoardInfoDimStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,eAAO,MAAM,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAc/C,CAAC;AAEF,qBAAa,iBAAkB,YAAW,YAAY;IAEtC,UAAU,SAAQ;IAClB,YAAY,QAAM;IAClB,SAAS,WAA4B;IAEjD,UAAU;IAKV,UAAU,IAEqB,GAAG;IAGlC,YAAY,CAAC,QAAQ,EAAE,GAAG;IAM1B,QAAQ,SAAU,QAAQ,UAMxB;IAEF,SAAS,CAAC,IAAI,GAAE,QAAuB;CAS1C;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"} \ No newline at end of file diff --git a/types/Add-on/DrawDim/BoardInfoDimTool.d.ts.map b/types/Add-on/DrawDim/BoardInfoDimTool.d.ts.map index 13635a9..b3f7779 100644 --- a/types/Add-on/DrawDim/BoardInfoDimTool.d.ts.map +++ b/types/Add-on/DrawDim/BoardInfoDimTool.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardInfoDimTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/BoardInfoDimTool.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAatD,qBAAa,wBAAyB,YAAW,OAAO;IAE9C,IAAI;CAyTb"} \ No newline at end of file +{"version":3,"file":"BoardInfoDimTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/BoardInfoDimTool.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAYtD,qBAAa,wBAAyB,YAAW,OAAO;IAE9C,IAAI;CAoVb"} \ No newline at end of file diff --git a/types/Add-on/DrawDim/DimArc.d.ts.map b/types/Add-on/DrawDim/DimArc.d.ts.map index fc71527..f000426 100644 --- a/types/Add-on/DrawDim/DimArc.d.ts.map +++ b/types/Add-on/DrawDim/DimArc.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DimArc.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/DimArc.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AA0BtD,qBACa,cAAe,YAAW,OAAO;IAEpC,IAAI;CA+Db"} \ No newline at end of file +{"version":3,"file":"DimArc.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/DimArc.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AA0BtD,qBACa,cAAe,YAAW,OAAO;IAEpC,IAAI;CA0Eb"} \ No newline at end of file diff --git a/types/Add-on/DrawDim/DimBoards.d.ts b/types/Add-on/DrawDim/DimBoards.d.ts index dd4d66c..67103b9 100644 --- a/types/Add-on/DrawDim/DimBoards.d.ts +++ b/types/Add-on/DrawDim/DimBoards.d.ts @@ -21,6 +21,8 @@ export declare class DimBoards { EanbleParseGroups: boolean; FiltereCabinetInsideSmallDim: boolean; EanbleCabinetInsideSmallDimSize: number; + InsideOffset: boolean; + InsideOffsetDist: number; private groups; private groupsBoxs; private boardBoxMap; @@ -38,7 +40,7 @@ export declare class DimBoards { * @param als * @param j down top left right 0 1 2 3 指定方向类型 */ - static DimAvoid(foots: number[], als: AlignedDimension[], j: number): void; + static DimAvoid(foots: number[], als: AlignedDimension[], j: number, yMove?: number): void; } export declare function FilterDimBoardFn(br: Board): boolean; /** diff --git a/types/Add-on/DrawDim/DimBoards.d.ts.map b/types/Add-on/DrawDim/DimBoards.d.ts.map index 01750f8..d363f74 100644 --- a/types/Add-on/DrawDim/DimBoards.d.ts.map +++ b/types/Add-on/DrawDim/DimBoards.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DimBoards.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/DimBoards.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAC;AAErF,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAS5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iDAAiD,CAAC;AAMnF;;;GAGG;AACH,qBAAa,SAAS;IAGlB,gBAAgB,UAAQ;IACxB,kBAAkB,UAAQ;IAE1B,wBAAwB,UAAQ;IAChC,yBAAyB,UAAQ;IAEjC,oBAAoB,UAAQ;IAC5B,kBAAkB,SAAM;IAExB,0BAA0B,UAAQ;IAClC,gBAAgB,cAAqB;IAErC,yBAAyB,UAAS;IAClC,wBAAwB,cAAqB;IAC7C,gBAAgB,mBAAyB;IAEzC,0BAA0B,UAAQ;IAClC,iBAAiB,UAAQ;IAEzB,4BAA4B,UAAQ;IACpC,+BAA+B,SAAO;IAItC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,WAAW,CAA0B;;IAO7C,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE;IAOf;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAkDxB,OAAO,CAAC,KAAK;IA8ab;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE,EAAE,CAAC,EAAE,MAAM;CAgLtE;AAGD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,KAAK,GAAG,OAAO,CAenD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,WA6BxH"} \ No newline at end of file +{"version":3,"file":"DimBoards.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/DimBoards.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAC;AAErF,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAS5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iDAAiD,CAAC;AAMnF;;;GAGG;AACH,qBAAa,SAAS;IAGlB,gBAAgB,UAAQ;IACxB,kBAAkB,UAAQ;IAE1B,wBAAwB,UAAQ;IAChC,yBAAyB,UAAQ;IAEjC,oBAAoB,UAAQ;IAC5B,kBAAkB,SAAM;IAExB,0BAA0B,UAAQ;IAClC,gBAAgB,cAAqB;IAErC,yBAAyB,UAAS;IAClC,wBAAwB,cAAqB;IAC7C,gBAAgB,mBAAyB;IAEzC,0BAA0B,UAAQ;IAClC,iBAAiB,UAAQ;IAEzB,4BAA4B,UAAQ;IACpC,+BAA+B,SAAO;IAEtC,YAAY,UAAS;IACrB,gBAAgB,SAAK;IAIrB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,WAAW,CAA0B;;IAO7C,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE;IAOf;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAgDxB,OAAO,CAAC,KAAK;IAsbb;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,gBAAgB,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK;CA8KlF;AAGD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,KAAK,GAAG,OAAO,CAenD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,KAAK,EAAE,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,WA6BxH"} \ No newline at end of file diff --git a/types/Add-on/DrawDim/DimStylePanel.d.ts.map b/types/Add-on/DrawDim/DimStylePanel.d.ts.map index a17f547..48fcd03 100644 --- a/types/Add-on/DrawDim/DimStylePanel.d.ts.map +++ b/types/Add-on/DrawDim/DimStylePanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DimStylePanel.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/DimStylePanel.tsx"],"names":[],"mappings":"AAIA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIzC,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAKhF,OAAO,EAAiB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAgB,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEhE,eAAO,MAAM,kBAAkB,iBAAO,CAAC;AAEvC,qBACa,aAAc,SAAQ,SAAS,CAAC;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;CAAE,CAAC;IACjF,iBAAiB,SAAM;gBACvB,KAAK,KAAA;IAOjB,MAAM;IAgEN,OAAO,aAGL;IAEF,KAAK,sBAWH;IAGF;;;;;OAKG;IACH,KAAK,aAAc,gBAAgB,qBAAqB,MAAM,UAI5D;IAEF;;;OAGG;IACH,OAAO,sBAkCL;IAEF;;;;OAIG;IACH,YAAY,SAAgB,MAAM,SAAS,aAAa,mBAgBtD;IAEF,cAAc,CAAC,QAAQ,EAAE,cAAc;CAK1C"} \ No newline at end of file +{"version":3,"file":"DimStylePanel.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/DimStylePanel.tsx"],"names":[],"mappings":"AAIA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGzC,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAMhF,OAAO,EAAE,aAAa,EAAiB,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAgB,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEhE,eAAO,MAAM,kBAAkB,iBAAO,CAAC;AAEvC,qBACa,aAAc,SAAQ,SAAS,CAAC;IAAE,KAAK,EAAE,aAAa,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAC;CAAE,CAAC;IACjF,iBAAiB,SAAM;gBACvB,KAAK,KAAA;IAOjB,MAAM;IAgEN,OAAO,aAGL;IAEF,KAAK,sBAWH;IAGF;;;;;OAKG;IACH,KAAK,aAAc,gBAAgB,qBAAqB,MAAM,UAI5D;IAEF;;;OAGG;IACH,OAAO,sBAkCL;IAEF;;;;OAIG;IACH,YAAY,SAAgB,MAAM,SAAS,aAAa,mBAgBtD;IAEF,cAAc,CAAC,QAAQ,EAAE,cAAc;CAK1C"} \ No newline at end of file diff --git a/types/Add-on/DrawDim/DimStyleStore.d.ts.map b/types/Add-on/DrawDim/DimStyleStore.d.ts.map index ac9f60d..6307cf6 100644 --- a/types/Add-on/DrawDim/DimStyleStore.d.ts.map +++ b/types/Add-on/DrawDim/DimStyleStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DimStyleStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/DimStyleStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAElF,qBAAa,aAAc,YAAW,YAAY,EAAE,UAAU;IAE9C,UAAU,SAAQ;IAClB,QAAQ,EAAE,eAAe,CAAgC;IACzD,YAAY,EAAE,MAAM,EAAE,CAAM;IAExC,UAAU;IAKV,UAAU;IAMV,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG;IASlC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAgB;IAE9C,MAAM,CAAC,WAAW,IAAI,aAAa;IAOnC,QAAQ,SAAU,QAAQ,UAYxB;IAEF,SAAS,CAAC,IAAI,GAAE,QAAuB;CAe1C;AAED,eAAO,MAAM,aAAa,eAA8B,CAAC"} \ No newline at end of file +{"version":3,"file":"DimStyleStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/DimStyleStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAElF,qBAAa,aAAc,YAAW,YAAY,EAAE,UAAU;IAE9C,UAAU,SAAQ;IAClB,QAAQ,EAAE,eAAe,CAAgC;IACzD,YAAY,EAAE,MAAM,EAAE,CAAM;IAExC,UAAU;IAKV,UAAU,IAEqB,GAAG;IAIlC,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG;IASlC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAgB;IAE9C,MAAM,CAAC,WAAW,IAAI,aAAa;IAOnC,QAAQ,SAAU,QAAQ,UAYxB;IAEF,SAAS,CAAC,IAAI,GAAE,QAAuB;CAe1C;AAED,eAAO,MAAM,aAAa,eAA8B,CAAC"} \ No newline at end of file diff --git a/types/Add-on/DrawDim/Draw2LineAngularDim.d.ts.map b/types/Add-on/DrawDim/Draw2LineAngularDim.d.ts.map index 1b8da52..de341fc 100644 --- a/types/Add-on/DrawDim/Draw2LineAngularDim.d.ts.map +++ b/types/Add-on/DrawDim/Draw2LineAngularDim.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Draw2LineAngularDim.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/Draw2LineAngularDim.ts"],"names":[],"mappings":"AAgBA,qBAAa,2BAA2B;IAE9B,IAAI;YAwEI,eAAe;YAoCf,QAAQ;CA+DzB"} \ No newline at end of file +{"version":3,"file":"Draw2LineAngularDim.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/Draw2LineAngularDim.ts"],"names":[],"mappings":"AAiBA,qBAAa,2BAA2B;IAE9B,IAAI;YA4EI,eAAe;YAoCf,QAAQ;CAqEzB"} \ No newline at end of file diff --git a/types/Add-on/DrawDim/DrawAlignedDimension.d.ts b/types/Add-on/DrawDim/DrawAlignedDimension.d.ts index 6e5d833..680de36 100644 --- a/types/Add-on/DrawDim/DrawAlignedDimension.d.ts +++ b/types/Add-on/DrawDim/DrawAlignedDimension.d.ts @@ -1,4 +1,5 @@ import { Vector3 } from 'three'; +import { Entity } from '../../DatabaseServices/Entity/Entity'; import { Command } from '../../Editor/CommandMachine'; export declare enum DimensionType { Align = 0,//对齐标注 @@ -8,8 +9,8 @@ export declare class DrawAlignedDimension implements Command { protected DimType: DimensionType; protected _UseFirstPointUCS: boolean; exec(): Promise; - protected GetPointDli(footPt1: Vector3): Promise; + protected GetPointDli(footPt1: Vector3, snapEntity: Entity): Promise; private GetEntityDli; - protected BuildDim(footPt1: Vector3, footPt2: Vector3): Promise; + protected BuildDim(footPt1: Vector3, footPt2: Vector3, snapEntity: Entity): Promise; } //# sourceMappingURL=DrawAlignedDimension.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawDim/DrawAlignedDimension.d.ts.map b/types/Add-on/DrawDim/DrawAlignedDimension.d.ts.map index 2c24e9d..0fec629 100644 --- a/types/Add-on/DrawDim/DrawAlignedDimension.d.ts.map +++ b/types/Add-on/DrawDim/DrawAlignedDimension.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawAlignedDimension.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/DrawAlignedDimension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAShC,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAOtD,oBAAY,aAAa;IAErB,KAAK,IAAI,CAAC,MAAM;IAChB,MAAM,IAAI;CACb;AAGD,qBAAa,oBAAqB,YAAW,OAAO;IAEhD,SAAS,CAAC,OAAO,gBAAuB;IACxC,SAAS,CAAC,iBAAiB,UAAQ;IAC7B,IAAI;cA0BM,WAAW,CAAC,OAAO,EAAE,OAAO;YAe9B,YAAY;cA6CV,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;CAgC9D"} \ No newline at end of file +{"version":3,"file":"DrawAlignedDimension.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/DrawAlignedDimension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAOhC,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAI9D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAOtD,oBAAY,aAAa;IAErB,KAAK,IAAI,CAAC,MAAM;IAChB,MAAM,IAAI;CACb;AAGD,qBAAa,oBAAqB,YAAW,OAAO;IAEhD,SAAS,CAAC,OAAO,gBAAuB;IACxC,SAAS,CAAC,iBAAiB,UAAQ;IAC7B,IAAI;cA4BM,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM;YAelD,YAAY;cA6CV,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM;CA2ClF"} \ No newline at end of file diff --git a/types/Add-on/DrawDim/DrawRadiusDim.d.ts.map b/types/Add-on/DrawDim/DrawRadiusDim.d.ts.map index 674f418..f4043f9 100644 --- a/types/Add-on/DrawDim/DrawRadiusDim.d.ts.map +++ b/types/Add-on/DrawDim/DrawRadiusDim.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawRadiusDim.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/DrawRadiusDim.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAItD,oBAAY,QAAQ;IAEhB,GAAG,IAAI;IACP,GAAG,IAAI;CACV;AAuBD,qBAAa,aAAc,YAAW,OAAO;IAEzC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAgB;IAClC,IAAI;IAuEV,OAAO,CAAC,SAAS;CAQpB"} \ No newline at end of file +{"version":3,"file":"DrawRadiusDim.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/DrawRadiusDim.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAItD,oBAAY,QAAQ;IAEhB,GAAG,IAAI;IACP,GAAG,IAAI;CACV;AAuBD,qBAAa,aAAc,YAAW,OAAO;IAEzC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAgB;IAClC,IAAI;IAuEV,OAAO,CAAC,SAAS;CAYpB"} \ No newline at end of file diff --git a/types/Add-on/DrawDim/FastDim/FastDim.d.ts b/types/Add-on/DrawDim/FastDim/FastDim.d.ts index 4c87dfc..bdc66bc 100644 --- a/types/Add-on/DrawDim/FastDim/FastDim.d.ts +++ b/types/Add-on/DrawDim/FastDim/FastDim.d.ts @@ -23,6 +23,8 @@ export declare class FastDimTool { filterSmallSizeValue: number; filterAppointSize: boolean; filterAppointSizeValues: Set; + roomName: string; + cabinetName: string; constructor(brs: Board[]); CreateDims(dir: Direction, pUcs: Vector3): AlignedDimension[]; } diff --git a/types/Add-on/DrawDim/FastDim/FastDim.d.ts.map b/types/Add-on/DrawDim/FastDim/FastDim.d.ts.map index 6740c78..5c85cda 100644 --- a/types/Add-on/DrawDim/FastDim/FastDim.d.ts.map +++ b/types/Add-on/DrawDim/FastDim/FastDim.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"FastDim.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/DrawDim/FastDim/FastDim.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAKtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AACxF,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAUzD,aAAK,SAAS;IAEV,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;IACT,IAAI,IAAI;IACR,GAAG,IAAI;CACV;AAED,qBAAa,kBAAmB,YAAW,OAAO;IAExC,IAAI;CAwIb;AAED,qBAAa,WAAW;IAaT,GAAG,EAAE,KAAK,EAAE;IAVvB,GAAG,0BAAwB;IAC3B,MAAM,0BAA2B;IACjC,MAAM,OAAY;IAClB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAY;IACxC,YAAY,UAAQ;IACpB,eAAe,EAAE,OAAO,CAAS;IACjC,oBAAoB,EAAE,MAAM,CAAK;IACjC,iBAAiB,EAAE,OAAO,CAAS;IACnC,uBAAuB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;gBAEtC,GAAG,EAAE,KAAK,EAAE;IA4BvB,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO;CAgE3C"} \ No newline at end of file +{"version":3,"file":"FastDim.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/DrawDim/FastDim/FastDim.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAKtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AACxF,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAWzD,aAAK,SAAS;IAEV,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;IACT,IAAI,IAAI;IACR,GAAG,IAAI;CACV;AAED,qBAAa,kBAAmB,YAAW,OAAO;IAExC,IAAI;CAiJb;AAED,qBAAa,WAAW;IAgBT,GAAG,EAAE,KAAK,EAAE;IAbvB,GAAG,0BAAwB;IAC3B,MAAM,0BAA2B;IACjC,MAAM,OAAY;IAClB,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAY;IACxC,YAAY,UAAQ;IACpB,eAAe,EAAE,OAAO,CAAS;IACjC,oBAAoB,EAAE,MAAM,CAAK;IACjC,iBAAiB,EAAE,OAAO,CAAS;IACnC,uBAAuB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IACjD,QAAQ,EAAE,MAAM,CAAM;IACtB,WAAW,EAAE,MAAM,CAAM;gBAGd,GAAG,EAAE,KAAK,EAAE;IA+BvB,UAAU,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO;CAgE3C"} \ No newline at end of file diff --git a/types/Add-on/DrawDim/FastDim/FastDimPanel.d.ts.map b/types/Add-on/DrawDim/FastDim/FastDimPanel.d.ts.map index e6eb02f..967e49e 100644 --- a/types/Add-on/DrawDim/FastDim/FastDimPanel.d.ts.map +++ b/types/Add-on/DrawDim/FastDim/FastDimPanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"FastDimPanel.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/DrawDim/FastDim/FastDimPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAS9C,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,YAAY,CAAC;CAAE,CAAC;IACvE,MAAM,EAAE,QAAQ,EAAE,CAAM;IACZ,WAAW,UAAS;IAChC,mBAAmB,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAqB;IAC3E,0BAA0B,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAqB;IAClF,kBAAkB,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAqB;IAE1E,iBAAiB;IA4BjB,oBAAoB;IAMpB,MAAM;IAqLN,SAAS,MAAO,MAAM,WAAW,CAAC,gBAAgB,CAAC,UAOjD;IAEF,SAAS,QAAS,MAAM,UAGtB;IAEF,KAAK,aAGH;IAEF,OAAO,aAGL;CACL"} \ No newline at end of file +{"version":3,"file":"FastDimPanel.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/DrawDim/FastDim/FastDimPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAS9C,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,YAAY,CAAC;CAAE,CAAC;IACvE,MAAM,EAAE,QAAQ,EAAE,CAAM;IACZ,WAAW,UAAS;IAChC,mBAAmB,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAqB;IAC3E,0BAA0B,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAqB;IAClF,kBAAkB,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAqB;IAE1E,iBAAiB;IA4BjB,oBAAoB;IAMpB,MAAM;IAqLN,SAAS,MAAO,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,UAOjD;IAEF,SAAS,QAAS,MAAM,UAGtB;IAEF,KAAK,aAGH;IAEF,OAAO,aAGL;CACL"} \ No newline at end of file diff --git a/types/Add-on/DrawDim/GetParamForString.d.ts b/types/Add-on/DrawDim/GetParamForString.d.ts new file mode 100644 index 0000000..6609c2a --- /dev/null +++ b/types/Add-on/DrawDim/GetParamForString.d.ts @@ -0,0 +1,5 @@ +import { BoardOpenDir, ComposingType, LinesType } from "../../DatabaseServices/Entity/BoardInterface"; +export declare function GetOpenDirForString(openDir: BoardOpenDir): string; +export declare function GetLinesForString(linesType: LinesType): string; +export declare function GetComposingFaceForString(composingType: ComposingType): string; +//# sourceMappingURL=GetParamForString.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawDim/GetParamForString.d.ts.map b/types/Add-on/DrawDim/GetParamForString.d.ts.map new file mode 100644 index 0000000..0be665e --- /dev/null +++ b/types/Add-on/DrawDim/GetParamForString.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"GetParamForString.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDim/GetParamForString.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAGtG,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,UAGxD;AAGD,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,UAGrD;AAGD,wBAAgB,yBAAyB,CAAC,aAAa,EAAE,aAAa,UAGrE"} \ No newline at end of file diff --git a/types/Add-on/DrawDrilling/CheckHasHole.d.ts.map b/types/Add-on/DrawDrilling/CheckHasHole.d.ts.map index e02905e..e124bbe 100644 --- a/types/Add-on/DrawDrilling/CheckHasHole.d.ts.map +++ b/types/Add-on/DrawDrilling/CheckHasHole.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CheckHasHole.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDrilling/CheckHasHole.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAKtD,qBAAa,iBAAkB,YAAW,OAAO;IAEvC,IAAI;CA6Cb"} \ No newline at end of file +{"version":3,"file":"CheckHasHole.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDrilling/CheckHasHole.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAKtD,qBAAa,iBAAkB,YAAW,OAAO;IAEvC,IAAI;CA6Cb"} \ No newline at end of file diff --git a/types/Add-on/DrawDrilling/DrawDrilling.d.ts.map b/types/Add-on/DrawDrilling/DrawDrilling.d.ts.map index 5669808..a26036a 100644 --- a/types/Add-on/DrawDrilling/DrawDrilling.d.ts.map +++ b/types/Add-on/DrawDrilling/DrawDrilling.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawDrilling.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDrilling/DrawDrilling.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAKtD,qBAAa,YAAa,YAAW,OAAO;IAElC,IAAI;CAoBb"} \ No newline at end of file +{"version":3,"file":"DrawDrilling.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDrilling/DrawDrilling.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAKtD,qBAAa,YAAa,YAAW,OAAO;IAElC,IAAI;CAiCb"} \ No newline at end of file diff --git a/types/Add-on/DrawDrilling/DrawDrillingTool.d.ts b/types/Add-on/DrawDrilling/DrawDrillingTool.d.ts index 8f91633..e2c687b 100644 --- a/types/Add-on/DrawDrilling/DrawDrillingTool.d.ts +++ b/types/Add-on/DrawDrilling/DrawDrillingTool.d.ts @@ -1,5 +1,7 @@ import { Matrix4 } from "three"; import { Singleton } from "../../Common/Singleton"; +import { CylinderHole } from "../../DatabaseServices/3DSolid/CylinderHole"; +import { CADObject } from "../../DatabaseServices/CADObject"; import { Board } from "../../DatabaseServices/Entity/Board"; import { ObjectId } from "../../DatabaseServices/ObjectId"; import { Box3Ext } from "../../Geometry/Box"; @@ -8,7 +10,6 @@ export declare class DrawDrillingTool extends Singleton { private m_MoveDistList; private m_Face; private m_Option; - private backupOption; /**备选配置 */ private woodPins; private drillEnts; private _configCache; @@ -20,6 +21,7 @@ export declare class DrawDrillingTool extends Singleton { private _isDrillTouch; private _HasAutoDeviation; private _AutoDeviation; + private _MoveMinDist; constructor(); HasConfig(type: string): boolean; /**获取用户正在使用的配置 */ @@ -49,12 +51,14 @@ export declare class DrawDrillingTool extends Singleton { private IsDrillCollisionModeling; private ParseDrillList; private SaveDrillToBoard; + IsIntersectZX(moveAfterDrills: CylinderHole[]): boolean; + CheckCollision(hole: ObjectId[], moveAfterDrills: CylinderHole[], needRemoveDrillList: WeakSet, isWoodPinss: boolean, checkAllBr?: boolean): void; private ParseThroughHoles; private ParseHolesisThrough; private MoveDrillEnts; IsTk(ds: ObjectId[]): boolean; GetDrillsBox(ids: ObjectId[], OCSInv: Matrix4): Box3Ext[]; - CheckCollision(drills: ObjectId[][], refDrillList: ObjectId[][], woodPinss: ObjectId[][]): void; + CheckCollisionForOtherDrills(drills: ObjectId[][], refDrillList: ObjectId[][], woodPinss: ObjectId[][]): void; private InitTool; private ClassifyBoardList; /** @@ -64,11 +68,12 @@ export declare class DrawDrillingTool extends Singleton { private StartGangDrill; private Exec; /**分类并排钻 */ - ClassifyAndDrilling(brList: Board[]): Promise; + ClassifyAndDrilling(brList: Board[], useSelectOrder?: boolean): Promise; private IsSplitBoard; private GetSpliteBoards; DrillIsCollsion(b1: Box3Ext, b2: Box3Ext): boolean; Check(brs: Board[]): Promise; CheckDrillList(result: string[]): void; + private AutoDeviation; } //# sourceMappingURL=DrawDrillingTool.d.ts.map \ 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 0012982..0a79e88 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;AAO/C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAWnD,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAM5D,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAI3D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAO7C,OAAO,EAAE,cAAc,EAAe,MAAM,+BAA+B,CAAC;AAI5E,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;IAC9B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAAS;;IAY/B,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;IA8ElB,aAAa,CAAC,cAAc,EAAE,cAAc;IA4C5C,OAAO,CAAC,gBAAgB;IAiExB,OAAO,CAAC,aAAa;IA2CrB,OAAO,CAAC,UAAU;IA2DlB,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,QAAQ;IAkChB,OAAO,CAAC,eAAe,CAkBrB;IAEF,OAAO,CAAC,UAAU;IAkKlB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,sBAAsB;IAsB9B,OAAO,CAAC,wBAAwB;IAqBhC,OAAO,CAAC,cAAc;IA4DtB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,iBAAiB;IAuNzB,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;;OAEG;IACH,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE;YAkBhB,cAAc;IAmC5B,OAAO,CAAC,IAAI;IAqFZ,WAAW;IACL,mBAAmB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA+BzD,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 +{"version":3,"file":"DrawDrillingTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDrilling/DrawDrillingTool.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Add-on/DrawDrilling/DrillingReactor.d.ts.map b/types/Add-on/DrawDrilling/DrillingReactor.d.ts.map index d411dc8..762d736 100644 --- a/types/Add-on/DrawDrilling/DrillingReactor.d.ts.map +++ b/types/Add-on/DrawDrilling/DrillingReactor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrillingReactor.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDrilling/DrillingReactor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AA4C5D,qBAAa,eAAe;;IAuExB,OAAO,CAAC,iBAAiB;IAqBnB,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;CAkCrC"} \ No newline at end of file +{"version":3,"file":"DrillingReactor.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDrilling/DrillingReactor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAyE5D,qBAAa,eAAe;;IAuExB,OAAO,CAAC,iBAAiB;IAqBnB,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC;CAkCrC"} \ No newline at end of file diff --git a/types/Add-on/DrawDrilling/HoleUtils.d.ts b/types/Add-on/DrawDrilling/HoleUtils.d.ts index 094bb4d..f1a8dbd 100644 --- a/types/Add-on/DrawDrilling/HoleUtils.d.ts +++ b/types/Add-on/DrawDrilling/HoleUtils.d.ts @@ -4,7 +4,7 @@ import { ExtrudeHole } from "../../DatabaseServices/3DSolid/ExtrudeHole"; import { Hole } from "../../DatabaseServices/3DSolid/Hole"; import { Board } from "../../DatabaseServices/Entity/Board"; export declare const SCALAR = 0.1; -export declare function CyHoleInBoard(cys: CylinderHole[], br: Board, ocs: Matrix4, checkAll?: boolean, allowPxl?: boolean): boolean; +export declare function CyHoleInBoard(cys: CylinderHole[], br: Board, ocs: Matrix4, checkAll?: boolean): boolean; /** * 板的排钻 <上下左右> */ diff --git a/types/Add-on/DrawDrilling/HoleUtils.d.ts.map b/types/Add-on/DrawDrilling/HoleUtils.d.ts.map index 2bcd42f..d81f3e9 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,EAAE,OAAO,EAAW,MAAM,OAAO,CAAC;AAGzC,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;AAS5D,eAAO,MAAM,MAAM,MAAM,CAAC;AAE1B,wBAAgB,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,UAAQ,EAAE,QAAQ,UAAQ,WA4H7G;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAE/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,cAAc;AACd,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,KAAK,EAAE,iBAAiB,GAAE,kBAA8B,sBA2BlG;AACD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,WAIjF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,OAAO,WAYlE;AAED,uBAAuB;AACvB,wBAAgB,iCAAiC,CAAC,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,kBAAkB,QA+B9F"} \ No newline at end of file +{"version":3,"file":"HoleUtils.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawDrilling/HoleUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,OAAO,CAAC;AAGzC,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;AAS5D,eAAO,MAAM,MAAM,MAAM,CAAC;AAE1B,wBAAgB,aAAa,CAAC,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,UAAQ,WAiI3F;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAE/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,cAAc;AACd,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,KAAK,EAAE,iBAAiB,GAAE,kBAA8B,sBA2BlG;AACD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,WAIjF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,OAAO,WAYlE;AAED,uBAAuB;AACvB,wBAAgB,iCAAiC,CAAC,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,kBAAkB,QA+B9F"} \ No newline at end of file diff --git a/types/Add-on/DrawEllipse.d.ts.map b/types/Add-on/DrawEllipse.d.ts.map index 4d836a1..c7393ce 100644 --- a/types/Add-on/DrawEllipse.d.ts.map +++ b/types/Add-on/DrawEllipse.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawEllipse.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawEllipse.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD;;GAEG;AACH,qBAAa,WAAY,YAAW,OAAO;IAEjC,IAAI;CAyCb"} \ No newline at end of file +{"version":3,"file":"DrawEllipse.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawEllipse.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD;;GAEG;AACH,qBAAa,WAAY,YAAW,OAAO;IAEjC,IAAI;CAmDb"} \ No newline at end of file diff --git a/types/Add-on/DrawHoleDimUtil.d.ts b/types/Add-on/DrawHoleDimUtil.d.ts new file mode 100644 index 0000000..466c267 --- /dev/null +++ b/types/Add-on/DrawHoleDimUtil.d.ts @@ -0,0 +1,11 @@ +import { Box3 } from "three"; +import { DimStyleKeyCode } from "../DatabaseServices/DimStyle/DimstyleKeyCodeEnum"; +import { Entity } from "../DatabaseServices/Entity/Entity"; +import { Line } from "../DatabaseServices/Entity/Line"; +import { ISpliteOrderData } from "../Production/Product"; +import { IHoleGrooveDimOption } from "../UI/Store/OptionInterface/IOptionInterface"; +export declare function DrawHoleDim(info: ISpliteOrderData, contouLines: Line[], dimStyle: Map, box: Box3, originContourBox: Box3, configOptions: IHoleGrooveDimOption): Promise<{ + entities: Entity[]; + holeInfosDesc: string; +}>; +//# sourceMappingURL=DrawHoleDimUtil.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawHoleDimUtil.d.ts.map b/types/Add-on/DrawHoleDimUtil.d.ts.map new file mode 100644 index 0000000..d61f2a0 --- /dev/null +++ b/types/Add-on/DrawHoleDimUtil.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"DrawHoleDimUtil.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawHoleDimUtil.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAoB,MAAM,OAAO,CAAC;AAI/C,OAAO,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAC;AAEnF,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAIvD,OAAO,EAAmB,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AA2BpF,wBAAsB,WAAW,CAC7B,IAAI,EAAE,gBAAgB,EACtB,WAAW,EAAE,IAAI,EAAE,EACnB,QAAQ,EAAE,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,EACnC,GAAG,EAAE,IAAI,EACT,gBAAgB,EAAE,IAAI,EACtB,aAAa,EAAE,oBAAoB,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;CAAE,CAAC,CAgjBhG"} \ No newline at end of file diff --git a/types/Add-on/DrawLight/LightBoxModal.d.ts b/types/Add-on/DrawLight/LightBoxModal.d.ts new file mode 100644 index 0000000..ee678fa --- /dev/null +++ b/types/Add-on/DrawLight/LightBoxModal.d.ts @@ -0,0 +1,57 @@ +import { NumericInput } from "@blueprintjs/core"; +import React from "react"; +import { Vector3 } from "three"; +import { Light } from "../../DatabaseServices/Lights/Light"; +import { BoardModalType } from "../../UI/Components/Board/BoardModalType"; +import { PropertiesStore } from "../../UI/Components/ToolBar/PropertiesStore"; +import { LightStore } from "../../UI/Store/RightPanelStore/LightStore"; +import './LightBoxModel.less'; +interface LightBoxModelProps { + store: PropertiesStore; +} +export declare class LightBoxModel extends React.Component { + render(): JSX.Element; +} +interface LightConfigModelProps { + store: LightStore; + lightType: BoardModalType; + lights: LightStore[]; +} +interface ILightProperty { + Target: Vector3; + ShowHelper: boolean; + CaseShadow: boolean; + Color: string; + Temperature: string; +} +export declare class LightModel extends React.Component { + _Target: string; + _Position: string; + private removeFuncs; + private coolTime; + handleSelectTarget: (light: Light, isDirection?: boolean) => Promise; + private SyncLight; + changeLightSettings: (propertyName: keyof ILightProperty, propertyValue: ILightProperty[keyof ILightProperty]) => void; + render(): JSX.Element; +} +export declare class UseInputAndSlider extends React.Component<{ + pars: string[]; + store: LightStore; + max: number; + isFloat: boolean; + min: number; + scale: number; + noLim: boolean; + lights: LightStore[]; +}, {}> { + OldData: number; + private coolTime; + _InputRef: React.RefObject; + private SyncLight; + handleLightDataUpdate(store: LightStore, value: string): void; + SetValue(value: string): Promise; + changeLightSliderSettings: (propertyName: any, propertyValue: any) => void; + render(): JSX.Element; +} +export {}; +//# sourceMappingURL=LightBoxModal.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawLight/LightBoxModal.d.ts.map b/types/Add-on/DrawLight/LightBoxModal.d.ts.map new file mode 100644 index 0000000..009aa21 --- /dev/null +++ b/types/Add-on/DrawLight/LightBoxModal.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"LightBoxModal.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawLight/LightBoxModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkE,YAAY,EAA+D,MAAM,mBAAmB,CAAC;AAG9K,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAa,OAAO,EAAE,MAAM,OAAO,CAAC;AAU3C,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAQ5D,OAAO,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAC;AAE1E,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AAEvE,OAAO,sBAAsB,CAAC;AAE9B,UAAU,kBAAkB;IAExB,KAAK,EAAE,eAAe,CAAC;CAC1B;AAGD,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,CAAC;IAEtE,MAAM;CAwCT;AAED,UAAU,qBAAqB;IAE3B,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,cAAc,CAAC;IAC1B,MAAM,EAAE,UAAU,EAAE,CAAC;CACxB;AACD,UAAU,cAAc;IAEpB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,qBAAqB,EAAE,EAAE,CAAC;IAE1D,OAAO,EAAE,MAAM,CAA6N;IAC5O,SAAS,EAAE,MAAM,CAA0E;IACvG,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,QAAQ,CAAoB;IAEpC,kBAAkB,UAAiB,KAAK,gBAAgB,OAAO,mBA+B7D;IAGF,OAAO,CAAC,SAAS;IAUjB,mBAAmB,iBAAkB,MAAM,cAAc,iBAAiB,cAAc,CAAC,MAAM,cAAc,CAAC,UA2B5G;IAEF,MAAM;CAwQT;AAGD,qBACa,iBAAkB,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,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,UAAU,EAAE,CAAC;CAAE,EAAE,EAAE,CAAC;IAE/L,OAAO,EAAE,MAAM,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAoB;IACpC,SAAS,gCAAmC;IAC5C,OAAO,CAAC,SAAS;IASjB,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM;IAmChD,QAAQ,CAAC,KAAK,EAAE,MAAM;IA+B5B,yBAAyB,kDAUvB;IAEF,MAAM;CAqHT"} \ No newline at end of file diff --git a/types/Add-on/DrawLine.d.ts b/types/Add-on/DrawLine.d.ts index d033f2a..ec7877b 100644 --- a/types/Add-on/DrawLine.d.ts +++ b/types/Add-on/DrawLine.d.ts @@ -1,4 +1,13 @@ import { Command } from '../Editor/CommandMachine'; +/** + * 测试用例: + * + * 1:圆切 圆切 结束 + * 1.1: 圆切 圆切 正常画线 + * 1.2: 圆切 圆切 圆切 正常画 + * + * 2.从圆外一点开始,捕捉到圆上切线 + */ export declare class DrawLine implements Command { exec(): Promise; } diff --git a/types/Add-on/DrawLine.d.ts.map b/types/Add-on/DrawLine.d.ts.map index 77e66ad..63d720d 100644 --- a/types/Add-on/DrawLine.d.ts.map +++ b/types/Add-on/DrawLine.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawLine.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawLine.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AASnD,qBAAa,QAAS,YAAW,OAAO;IAE9B,IAAI;CAgHb;AAED,qBAAa,iBAAkB,YAAW,OAAO;IAEvC,IAAI;CAmCb"} \ No newline at end of file +{"version":3,"file":"DrawLine.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawLine.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAUnD;;;;;;;;GAQG;AAGH,qBAAa,QAAS,YAAW,OAAO;IAE9B,IAAI;CAyNb;AAED,qBAAa,iBAAkB,YAAW,OAAO;IAEvC,IAAI;CAqCb"} \ No newline at end of file diff --git a/types/Add-on/DrawPolygon.d.ts.map b/types/Add-on/DrawPolygon.d.ts.map index 59312fd..33dd35d 100644 --- a/types/Add-on/DrawPolygon.d.ts.map +++ b/types/Add-on/DrawPolygon.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawPolygon.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawPolygon.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,qBAAa,WAAY,YAAW,OAAO;IAEjC,IAAI;CAyFb"} \ No newline at end of file +{"version":3,"file":"DrawPolygon.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawPolygon.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,qBAAa,WAAY,YAAW,OAAO;IAEjC,IAAI;CAkGb"} \ No newline at end of file diff --git a/types/Add-on/DrawRect.d.ts.map b/types/Add-on/DrawRect.d.ts.map index b43b7f6..93cd18c 100644 --- a/types/Add-on/DrawRect.d.ts.map +++ b/types/Add-on/DrawRect.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawRect.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawRect.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,qBAAa,QAAS,YAAW,OAAO;IAE9B,IAAI;CAcb"} \ No newline at end of file +{"version":3,"file":"DrawRect.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawRect.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,qBAAa,QAAS,YAAW,OAAO;IAE9B,IAAI;CAqBb"} \ No newline at end of file diff --git a/types/Add-on/DrawSpline.d.ts.map b/types/Add-on/DrawSpline.d.ts.map index 2553e54..ab84644 100644 --- a/types/Add-on/DrawSpline.d.ts.map +++ b/types/Add-on/DrawSpline.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawSpline.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawSpline.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,qBACa,UAAW,YAAW,OAAO;IAEhC,IAAI;IAoEV,OAAO,CAAC,IAAI;CAWf"} \ No newline at end of file +{"version":3,"file":"DrawSpline.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawSpline.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAKnD,qBACa,UAAW,YAAW,OAAO;IAEhC,IAAI;IAyEV,OAAO,CAAC,IAAI;CAWf"} \ No newline at end of file diff --git a/types/Add-on/DrawTemplateByPictureImport/DrawTemplateByData.d.ts b/types/Add-on/DrawTemplateByPictureImport/DrawTemplateByData.d.ts new file mode 100644 index 0000000..505023a --- /dev/null +++ b/types/Add-on/DrawTemplateByPictureImport/DrawTemplateByData.d.ts @@ -0,0 +1,12 @@ +import { Board } from "../../DatabaseServices/Entity/Board"; +import { TemplateLeftRightBoardRecord } from "../../DatabaseServices/Template/ProgramTempate/TemplateLeftRightBoardRecord"; +import { ClampSpaceParseRay } from "../../Geometry/SpaceParse/ClampSpaceParseRay"; +import { IDrawBoard, IDrawLayerBoard, IDrawLeftRightBoard, IDrawTemplate, IDrawTopBottomBoard } from "./DrawTemplateInterface"; +export declare function DrawPictureTemplate(data: IDrawTemplate[], basePoint: [number, number], brs?: Board[]): Promise; +export declare function ParseSpaceByBoard(brs: Board[], cen: number[]): Promise; +export declare function IDrawLeftRightBoardTemplate(attribute: IDrawLeftRightBoard, basePoint: [number, number], brs: Board[]): Promise; +export declare function IDrawTopBottomBoardTemplate(attribute: IDrawTopBottomBoard, basePoint: [number, number], brs: Board[]): Promise; +export declare function IDrawLayerBoardTemplate(attribute: IDrawLayerBoard, basePoint: [number, number], brs: Board[]): Promise; +export declare function IDrawVerticalBoardTemplate(attribute: IDrawBoard, basePoint: [number, number], brs: Board[]): Promise; +export declare function IDrawBehindBoardTemplate(attribute: IDrawBoard, basePoint: [number, number], brs: Board[]): Promise; +//# sourceMappingURL=DrawTemplateByData.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawTemplateByPictureImport/DrawTemplateByData.d.ts.map b/types/Add-on/DrawTemplateByPictureImport/DrawTemplateByData.d.ts.map new file mode 100644 index 0000000..d2cb0d1 --- /dev/null +++ b/types/Add-on/DrawTemplateByPictureImport/DrawTemplateByData.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"DrawTemplateByData.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawTemplateByPictureImport/DrawTemplateByData.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAI5D,OAAO,EAAE,4BAA4B,EAAE,MAAM,6EAA6E,CAAC;AAK3H,OAAO,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAIlF,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,mBAAmB,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE/H,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,GAAE,KAAK,EAAO,oBA2B9G;AA8ED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,+BAclE;AAED,wBAAsB,2BAA2B,CAAC,SAAS,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,yCA+B1H;AAED,wBAAsB,2BAA2B,CAAC,SAAS,EAAE,mBAAmB,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,iBA6B1H;AAED,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,iBA0ClH;AAED,wBAAsB,0BAA0B,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,iBAuChH;AAED,wBAAsB,wBAAwB,CAAC,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,iBAqB9G"} \ No newline at end of file diff --git a/types/Add-on/DrawTemplateByPictureImport/DrawTemplateInterface.d.ts b/types/Add-on/DrawTemplateByPictureImport/DrawTemplateInterface.d.ts new file mode 100644 index 0000000..eecc2aa --- /dev/null +++ b/types/Add-on/DrawTemplateByPictureImport/DrawTemplateInterface.d.ts @@ -0,0 +1,23 @@ +export interface IDrawTemplate { + board_name: string; + board_attribute: any; +} +export interface IDrawBoard { + thickness: number; + pos: [number, number]; + pos_relative?: number; +} +export interface IDrawLeftRightBoard extends IDrawBoard { + height: number; + width: number; + deep: number; +} +export interface IDrawTopBottomBoard extends IDrawBoard { + bottom_side: number; + corner_line: boolean; +} +export interface IDrawLayerBoard extends IDrawBoard { + left_ident: string; + right_ident: string; +} +//# sourceMappingURL=DrawTemplateInterface.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawTemplateByPictureImport/DrawTemplateInterface.d.ts.map b/types/Add-on/DrawTemplateByPictureImport/DrawTemplateInterface.d.ts.map new file mode 100644 index 0000000..95dca64 --- /dev/null +++ b/types/Add-on/DrawTemplateByPictureImport/DrawTemplateInterface.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"DrawTemplateInterface.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawTemplateByPictureImport/DrawTemplateInterface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAE1B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,GAAG,CAAC;CACxB;AAED,MAAM,WAAW,UAAU;IAEvB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mBAAoB,SAAQ,UAAU;IAEnD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAoB,SAAQ,UAAU;IAEnD,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;IAE/C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACvB"} \ No newline at end of file diff --git a/types/Add-on/DrawTemplateByPictureImport/ImportPictureTemplateData.d.ts b/types/Add-on/DrawTemplateByPictureImport/ImportPictureTemplateData.d.ts new file mode 100644 index 0000000..dc5fc79 --- /dev/null +++ b/types/Add-on/DrawTemplateByPictureImport/ImportPictureTemplateData.d.ts @@ -0,0 +1,11 @@ +import { Board } from "../../DatabaseServices/Entity/Board"; +import { Command } from "../../Editor/CommandMachine"; +import { IDrawTemplate } from "./DrawTemplateInterface"; +export declare class ImportPictureTemplateFile implements Command { + exec(): void; +} +export declare function ImportPictureTemplateData(file: File): Promise; +export declare function ParsePictureTemplateData(json: { + data: IDrawTemplate[]; +}, basePoint: [number, number], brs?: Board[], isUseSpace?: boolean): Promise; +//# sourceMappingURL=ImportPictureTemplateData.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawTemplateByPictureImport/ImportPictureTemplateData.d.ts.map b/types/Add-on/DrawTemplateByPictureImport/ImportPictureTemplateData.d.ts.map new file mode 100644 index 0000000..6e561f0 --- /dev/null +++ b/types/Add-on/DrawTemplateByPictureImport/ImportPictureTemplateData.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ImportPictureTemplateData.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawTemplateByPictureImport/ImportPictureTemplateData.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAI5D,OAAO,EAAE,OAAO,EAAe,MAAM,6BAA6B,CAAC;AAUnE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD,qBAAa,yBAA0B,YAAW,OAAO;IAErD,IAAI;CAaP;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,IAAI,iBA4OzD;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,aAAa,EAAE,CAAC;CAAE,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,UAAU,UAAQ,oBAsB9I"} \ No newline at end of file diff --git a/types/Add-on/DrawTemplateByPictureImport/PastePicture.d.ts b/types/Add-on/DrawTemplateByPictureImport/PastePicture.d.ts new file mode 100644 index 0000000..bab721f --- /dev/null +++ b/types/Add-on/DrawTemplateByPictureImport/PastePicture.d.ts @@ -0,0 +1,2 @@ +export declare function PastePicture(file: File): Promise; +//# sourceMappingURL=PastePicture.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DrawTemplateByPictureImport/PastePicture.d.ts.map b/types/Add-on/DrawTemplateByPictureImport/PastePicture.d.ts.map new file mode 100644 index 0000000..c16edab --- /dev/null +++ b/types/Add-on/DrawTemplateByPictureImport/PastePicture.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"PastePicture.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawTemplateByPictureImport/PastePicture.ts"],"names":[],"mappings":"AAWA,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,oBA2F5C"} \ No newline at end of file diff --git a/types/Add-on/DrawText.d.ts.map b/types/Add-on/DrawText.d.ts.map index 6484bd9..3ec6313 100644 --- a/types/Add-on/DrawText.d.ts.map +++ b/types/Add-on/DrawText.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawText.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawText.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAKnD,qBAAa,QAAS,YAAW,OAAO;IAE9B,IAAI;CAuCb"} \ No newline at end of file +{"version":3,"file":"DrawText.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawText.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAKnD,qBAAa,QAAS,YAAW,OAAO;IAE9B,IAAI;CAoDb"} \ No newline at end of file diff --git a/types/Add-on/DrawViewport.d.ts b/types/Add-on/DrawViewport.d.ts index 620e95a..f93a1ee 100644 --- a/types/Add-on/DrawViewport.d.ts +++ b/types/Add-on/DrawViewport.d.ts @@ -23,7 +23,7 @@ export declare function GetEntityIds(ens: Entity[], hideEntitys?: Entity[]): { dimIds: ObjectId[]; curveIds: ObjectId[]; drawerIds: ObjectId[]; - houseIds: ObjectId[]; + modelIds: ObjectId[]; }; export declare function Get4Viewport(p1: Vector3, p2: Vector3, ens: Entity[], directionInfos: ViewDirection[], renderType: RenderType[], isHideDoor: boolean, isRevertRotate: boolean, hideEntitys?: Entity[]): ViewportEntity[]; export declare class Draw2Viewport implements Command { @@ -39,6 +39,8 @@ export interface ICustomViewportInfo { height: number; position: Vector3; hideTypes: string[]; + hideLayer: Set; + showLayer: Set; } export declare function DrawCustomViewports(infos: ICustomViewportInfo[], ens: Entity[], hideEntitys: Entity[], isRevertRotate: boolean): ViewportEntity[]; //# sourceMappingURL=DrawViewport.d.ts.map \ 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 38748d5..bea5fcd 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,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AAOzC,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;AAGnD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAI1D,OAAO,EAAE,aAAa,EAAoB,MAAM,wCAAwC,CAAC;AA2EzF,qBAAa,YAAa,YAAW,OAAO;IAElC,IAAI;CAuCb;AACD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CA8Bb;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE;;;;;;;EAkIjE;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,UAAU,SAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,oBA4CnM;AAED,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CA+Db;AAGD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CA0Gb;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,SAAS,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,OAAO,oBAsD9H"} \ No newline at end of file +{"version":3,"file":"DrawViewport.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DrawViewport.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AAOzC,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAG3D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGnD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAI1D,OAAO,EAAE,aAAa,EAAoB,MAAM,wCAAwC,CAAC;AA2EzF,qBAAa,YAAa,YAAW,OAAO;IAElC,IAAI;CAuCb;AACD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CA8Bb;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE;;;;;;;EAkIjE;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,UAAU,SAAQ,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,oBA4CnM;AAED,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CA+Db;AAGD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CA0Gb;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,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,cAAc,EAAE,OAAO,oBA6D9H"} \ No newline at end of file diff --git a/types/Add-on/DrawWineRack/DrawWinRackTool.d.ts.map b/types/Add-on/DrawWineRack/DrawWinRackTool.d.ts.map index 3d1d6a4..2776760 100644 --- a/types/Add-on/DrawWineRack/DrawWinRackTool.d.ts.map +++ b/types/Add-on/DrawWineRack/DrawWinRackTool.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawWinRackTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawWineRack/DrawWinRackTool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAEpE,OAAO,EAAwC,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGzG,eAAO,MAAM,KAAK,QAAwB,CAAC;AAE3C,qBAAa,gBAAiB,SAAQ,SAAS;IAE3C,OAAO,CAAC,OAAO,CAAkB;IACjC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC;IACtB,SAAS,EAAE,KAAK,EAAE,CAAM;IAC/B,IAAI,MAAM,oBAGT;IACD,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe;IAsBjD,sBAAsB;IACtB,SAAS,CAAC,qBAAqB,CAAC,EAAE,EAAE,KAAK;IAazC,cAAc;IACd,SAAS,CAAC,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAiDrI,QAAQ;IACR,SAAS,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAgFxE"} \ No newline at end of file +{"version":3,"file":"DrawWinRackTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/DrawWineRack/DrawWinRackTool.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAEpE,OAAO,EAAwC,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGzG,eAAO,MAAM,KAAK,QAAwB,CAAC;AAE3C,qBAAa,gBAAiB,SAAQ,SAAS;IAE3C,OAAO,CAAC,OAAO,CAAkB;IACjC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC;IACtB,SAAS,EAAE,KAAK,EAAE,CAAM;IAC/B,IAAI,MAAM,oBAGT;IACD,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe;IAsBjD,sBAAsB;IACtB,SAAS,CAAC,qBAAqB,CAAC,EAAE,EAAE,KAAK;IAuBzC,cAAc;IACd,SAAS,CAAC,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAiDrI,QAAQ;IACR,SAAS,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAgFxE"} \ No newline at end of file diff --git a/types/Add-on/DropMaterialApply.d.ts b/types/Add-on/DropMaterialApply.d.ts new file mode 100644 index 0000000..5ab4620 --- /dev/null +++ b/types/Add-on/DropMaterialApply.d.ts @@ -0,0 +1,4 @@ +import { Vector3 } from "three"; +import { PhysicalMaterialRecord } from "../DatabaseServices/PhysicalMaterialRecord"; +export declare function DropMaterialApply(pt: Vector3, getMtlFunction: () => Promise): Promise; +//# sourceMappingURL=DropMaterialApply.d.ts.map \ No newline at end of file diff --git a/types/Add-on/DropMaterialApply.d.ts.map b/types/Add-on/DropMaterialApply.d.ts.map new file mode 100644 index 0000000..0f9fb2c --- /dev/null +++ b/types/Add-on/DropMaterialApply.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"DropMaterialApply.d.ts","sourceRoot":"","sources":["../../../src/Add-on/DropMaterialApply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAIhC,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAKpF,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC,sBAAsB,CAAC,iBAkCzG"} \ No newline at end of file diff --git a/types/Add-on/Entsel.d.ts.map b/types/Add-on/Entsel.d.ts.map index 981656d..2603da2 100644 --- a/types/Add-on/Entsel.d.ts.map +++ b/types/Add-on/Entsel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Entsel.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Entsel.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAUnD,qBAAa,MAAO,YAAW,OAAO;IAElC,SAAS,UAAQ;IACX,IAAI;CAsGb"} \ No newline at end of file +{"version":3,"file":"Entsel.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Entsel.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAWnD,qBAAa,MAAO,YAAW,OAAO;IAElC,SAAS,UAAQ;IACX,IAAI;CAkHb"} \ No newline at end of file diff --git a/types/Add-on/Erp/CustomBoardNumber.d.ts b/types/Add-on/Erp/CustomBoardNumber.d.ts new file mode 100644 index 0000000..98bcc0b --- /dev/null +++ b/types/Add-on/Erp/CustomBoardNumber.d.ts @@ -0,0 +1,5 @@ +import { Board } from "../../DatabaseServices/Entity/Board"; +export declare function CustomBoardNumber({ boardList }: { + boardList: Board[]; +}): JSX.Element; +//# sourceMappingURL=CustomBoardNumber.d.ts.map \ No newline at end of file diff --git a/types/Add-on/Erp/CustomBoardNumber.d.ts.map b/types/Add-on/Erp/CustomBoardNumber.d.ts.map new file mode 100644 index 0000000..75a1720 --- /dev/null +++ b/types/Add-on/Erp/CustomBoardNumber.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"CustomBoardNumber.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Erp/CustomBoardNumber.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAK5D,wBAAgB,iBAAiB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,KAAK,EAAE,CAAC;CAAE,eA+KvE"} \ No newline at end of file diff --git a/types/Add-on/Erp/ErpCommands.d.ts.map b/types/Add-on/Erp/ErpCommands.d.ts.map index 6549d50..f505f2b 100644 --- a/types/Add-on/Erp/ErpCommands.d.ts.map +++ b/types/Add-on/Erp/ErpCommands.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ErpCommands.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Erp/ErpCommands.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAO9D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAwBtD,qBAAa,OAAQ,YAAW,OAAO;IAE7B,IAAI;CAIb;AACD,qBAAa,SAAU,YAAW,OAAO;IAE/B,IAAI;CAIb;AACD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CAIb;AACD,qBAAa,UAAW,YAAW,OAAO;IAEhC,IAAI;CAYb;AACD,qBAAa,SAAU,YAAW,OAAO;IAE/B,IAAI;CAIb;AAmVD,wBAAsB,kBAAkB;;;GAgEvC"} \ No newline at end of file +{"version":3,"file":"ErpCommands.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Erp/ErpCommands.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAM9D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AA6BtD,qBAAa,OAAQ,YAAW,OAAO;IAE7B,IAAI;CAIb;AACD,qBAAa,SAAU,YAAW,OAAO;IAE/B,IAAI;CAIb;AACD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CAIb;AACD,qBAAa,UAAW,YAAW,OAAO;IAEhC,IAAI;CAYb;AACD,qBAAa,SAAU,YAAW,OAAO;IAE/B,IAAI;CAIb;AAkaD,wBAAsB,kBAAkB;;;GA6GvC"} \ No newline at end of file diff --git a/types/Add-on/Erp/ErpView.d.ts b/types/Add-on/Erp/ErpView.d.ts index 3164680..7a2101e 100644 --- a/types/Add-on/Erp/ErpView.d.ts +++ b/types/Add-on/Erp/ErpView.d.ts @@ -1,7 +1,7 @@ import * as React from "react"; import { BoardStore } from "../../UI/Store/BoardStore"; import { OrderDataBlock } from "./Models/CadBlock"; -import { OrderDataObject, ProcessGroupObject } from "./Models/CadObject"; +import { AlignLineGroupObject, OrderDataObject, ProcessGroupObject } from "./Models/CadObject"; import { ErpRouteInfo } from "./Models/ErpRouteInfo"; interface ErpViewProp { erpRoute: ErpRouteInfo; @@ -11,6 +11,7 @@ interface ErpViewProp { blockList: OrderDataBlock[]; objectList: OrderDataObject[]; processGroupList: ProcessGroupObject[]; + AlignLineList: AlignLineGroupObject[]; }; store: BoardStore; selectEntityIDs: number[]; diff --git a/types/Add-on/Erp/ErpView.d.ts.map b/types/Add-on/Erp/ErpView.d.ts.map index c861c33..16da01a 100644 --- a/types/Add-on/Erp/ErpView.d.ts.map +++ b/types/Add-on/Erp/ErpView.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ErpView.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Erp/ErpView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,UAAU,WAAW;IAEjB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QAAE,SAAS,EAAE,cAAc,EAAE,CAAC;QAAC,UAAU,EAAE,eAAe,EAAE,CAAC;QAAC,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;KAAE,CAAC;IACjH,KAAK,EAAE,UAAU,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC7B;AACD,qBAAa,OAAQ,SAAQ,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;IACzD,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC3C,OAAO,CAAC,SAAS,CAAkB;gBACvB,KAAK,KAAA;IAKjB,WAAW,YAAa,MAAM,YAAW,GAAG,UA4B1C;IACF,YAAY,aAsCV;IACF,OAAO,CAAC,WAAW,CAMjB;IACF,OAAO,CAAC,UAAU,CAQhB;IACF,OAAO,CAAC,YAAY,CAYlB;IACF,MAAM;IAgCN,oBAAoB;CAMvB"} \ No newline at end of file +{"version":3,"file":"ErpView.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Erp/ErpView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEvD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC/F,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,UAAU,WAAW;IAEjB,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE;QAAE,SAAS,EAAE,cAAc,EAAE,CAAC;QAAC,UAAU,EAAE,eAAe,EAAE,CAAC;QAAC,gBAAgB,EAAE,kBAAkB,EAAE,CAAC;QAAC,aAAa,EAAE,oBAAoB,EAAE,CAAC;KAAE,CAAC;IACxJ,KAAK,EAAE,UAAU,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC7B;AACD,qBAAa,OAAQ,SAAQ,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;IACzD,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC3C,OAAO,CAAC,SAAS,CAAkB;gBACvB,KAAK,KAAA;IAKjB,WAAW,YAAa,MAAM,YAAW,GAAG,UA4B1C;IACF,YAAY,aAsCV;IACF,OAAO,CAAC,WAAW,CAMjB;IACF,OAAO,CAAC,UAAU,CAQhB;IACF,OAAO,CAAC,YAAY,CAYlB;IACF,MAAM;IAgCN,oBAAoB;CAMvB"} \ No newline at end of file diff --git a/types/Add-on/Erp/JumpView.d.ts b/types/Add-on/Erp/JumpView.d.ts new file mode 100644 index 0000000..8100633 --- /dev/null +++ b/types/Add-on/Erp/JumpView.d.ts @@ -0,0 +1,8 @@ +import * as React from "react"; +interface JumpProp { + routeName: string; + routeParams?: object; +} +declare const JumpView: React.FC; +export default JumpView; +//# sourceMappingURL=JumpView.d.ts.map \ No newline at end of file diff --git a/types/Add-on/Erp/JumpView.d.ts.map b/types/Add-on/Erp/JumpView.d.ts.map new file mode 100644 index 0000000..f2ccffd --- /dev/null +++ b/types/Add-on/Erp/JumpView.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"JumpView.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Erp/JumpView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,UAAU,QAAQ;IAEd,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AACD,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,QAAQ,CAuD/B,CAAC;AAEH,eAAe,QAAQ,CAAC"} \ No newline at end of file diff --git a/types/Add-on/Erp/Models/ArrayHelper.d.ts.map b/types/Add-on/Erp/Models/ArrayHelper.d.ts.map index 3391080..bfb28fc 100644 --- a/types/Add-on/Erp/Models/ArrayHelper.d.ts.map +++ b/types/Add-on/Erp/Models/ArrayHelper.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ArrayHelper.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/Erp/Models/ArrayHelper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAiB,YAAY,EAAgC,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,mBAAmB,wEAgBhE;AAaD,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,SAQrE;AACD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CActG;AACD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAOtE;AACD,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAG1D;AACD,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,oBAAoB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAGjG"} \ No newline at end of file +{"version":3,"file":"ArrayHelper.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/Erp/Models/ArrayHelper.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAE7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAiB,YAAY,EAAgC,MAAM,gBAAgB,CAAC;AACtG,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAClD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,mBAAmB,wEAgBhE;AAaD,wBAAgB,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,SAQrE;AACD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAStG;AACD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAOtE;AACD,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAG1D;AACD,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,oBAAoB,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAGjG"} \ No newline at end of file diff --git a/types/Add-on/Erp/Models/CadBlockInfo.d.ts b/types/Add-on/Erp/Models/CadBlockInfo.d.ts index 19218e5..134fc6b 100644 --- a/types/Add-on/Erp/Models/CadBlockInfo.d.ts +++ b/types/Add-on/Erp/Models/CadBlockInfo.d.ts @@ -1,4 +1,4 @@ -import { IOriginModelingData } from '../../../Production/Product'; +import { IOriginModelingData, ModelType } from '../../../Production/Product'; export declare abstract class BaseModel { protected get props(): any[]; ToArray(): any[]; @@ -9,6 +9,8 @@ export declare class CadBlockPoint extends BaseModel { PointY: number; Curve: number; SealSize: number; + SealColor: string; + ReservedEdge: number; protected get props(): string[]; ToArray(): any[]; } @@ -52,6 +54,8 @@ export declare class CadBlockModel extends BaseModel { PointList: CadBlockModelPoint[]; OffSetList: ModelOffSetData[]; OriginModeling: IOriginModelingData; + ModelType: ModelType; + ChaiDanName: string; protected get props(): string[]; ToArray(): (string | number | any[])[]; } @@ -89,4 +93,10 @@ export declare class CadBlockInfo { SideModelDetail: CadBlockModel[]; SideHoleDetail: CadBlockHoles[]; } +export declare class CadSealInfoPoint { + PointID: number; + SealSize: number; + SealColor: string; + ReservedEdge: number; +} //# sourceMappingURL=CadBlockInfo.d.ts.map \ No newline at end of file diff --git a/types/Add-on/Erp/Models/CadBlockInfo.d.ts.map b/types/Add-on/Erp/Models/CadBlockInfo.d.ts.map index 17cab84..d702dd4 100644 --- a/types/Add-on/Erp/Models/CadBlockInfo.d.ts.map +++ b/types/Add-on/Erp/Models/CadBlockInfo.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CadBlockInfo.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/Erp/Models/CadBlockInfo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAGlE,8BAAsB,SAAS;IAE3B,SAAS,KAAK,KAAK,UAGlB;IACD,OAAO;CASV;AACD,qBAAa,aAAc,SAAQ,SAAS;IAExC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,KAAK,KAAK,aAGlB;IACD,OAAO;CAKV;AACD,qBAAa,aAAc,SAAQ,SAAS;IAExC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,KAAK,KAAK,aAGlB;CACJ;AACD,oBAAY,QAAQ;IAAG,EAAE,IAAI;IAAE,EAAE,KAAK;IAAE,EAAE,KAAK;IAAE,IAAI,KAAK;IAAE,GAAG,KAAK;IAAE,EAAE,KAAK;IAAE,GAAG,KAAK;IAAE,GAAG,MAAM;CAAE;AACpG,oBAAY,QAAQ;IAAG,EAAE,IAAI;IAAE,EAAE,IAAI;IAAE,EAAE,IAAI;CAAE;AAG/C,qBAAa,aAAc,SAAQ,SAAS;IAExC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,cAAc,EAAE,mBAAmB,CAAC;IACpC,SAAS,KAAK,KAAK,aAGlB;IACD,OAAO;CAOV;AACD,qBAAa,eAAgB,SAAQ,SAAS;IAE1C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO;CAIV;AAED,qBAAa,kBAAmB,SAAQ,SAAS;IAE7C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,KAAK,KAAK,aAGlB;CAEJ;AACD,qBAAa,YAAa,SAAQ,SAAS;IAEvC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,KAAK,KAAK,aAGlB;CACJ;AACD,qBAAa,YAAY;IAErB,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,cAAc,EAAE,aAAa,EAAE,CAAC;CACnC"} \ No newline at end of file +{"version":3,"file":"CadBlockInfo.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/Erp/Models/CadBlockInfo.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Add-on/Erp/Models/CadModel.d.ts b/types/Add-on/Erp/Models/CadModel.d.ts index 1c6cf78..4c61aaf 100644 --- a/types/Add-on/Erp/Models/CadModel.d.ts +++ b/types/Add-on/Erp/Models/CadModel.d.ts @@ -16,7 +16,7 @@ export declare class CADDbBoard extends BaseModel { SubBoardLocal: CADDbBoard[]; SubBoardAssoc: CADDbBoard[]; Drillings: CadBlockDrillings[]; - ToArray(): any; + ToArray(): (string | number | any[])[]; } export declare class CadBlockBasePosition { x: number; diff --git a/types/Add-on/Erp/Models/CadObject.d.ts b/types/Add-on/Erp/Models/CadObject.d.ts index 61c612e..f419628 100644 --- a/types/Add-on/Erp/Models/CadObject.d.ts +++ b/types/Add-on/Erp/Models/CadObject.d.ts @@ -1,3 +1,4 @@ +import { Vector2 } from "three"; export declare class OrderDataObject { ID: number; IsOffer: boolean; @@ -31,6 +32,7 @@ export declare class OrderDataObject { H: number; }; RemarkList: [string, string][]; + GoodsID: number; } export declare class ProcessGroupObject { type: string; @@ -47,4 +49,13 @@ export declare class ProcessGroupProjObject { }; groupID: number; } +export interface AlignLineGroupObject { + projName: string; + groupId: string; + objects: AlignLineBoardObject[]; +} +export interface AlignLineBoardObject { + brId: number; + position: Vector2; +} //# sourceMappingURL=CadObject.d.ts.map \ No newline at end of file diff --git a/types/Add-on/Erp/Models/CadObject.d.ts.map b/types/Add-on/Erp/Models/CadObject.d.ts.map index 2091d9f..6966471 100644 --- a/types/Add-on/Erp/Models/CadObject.d.ts.map +++ b/types/Add-on/Erp/Models/CadObject.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CadObject.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/Erp/Models/CadObject.ts"],"names":[],"mappings":"AAAA,qBAAa,eAAe;IAExB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAS;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IAEvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IAEjB,QAAQ,EAAE,MAAM,CAAC;IAEjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,OAAO,CAAS;IAC7B,WAAW,SAAK;IAChB,YAAY,SAAK;IACjB,WAAW,SAAK;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;KAAE,CAAC;IAC3C,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;CAClC;AACD,qBAAa,kBAAkB;IAG3B,IAAI,EAAE,MAAM,CAAC;IAEb,QAAQ,EAAE,sBAAsB,EAAE,CAAC;CACtC;AACD,qBAAa,sBAAsB;IAG/B,QAAQ,EAAE,MAAM,CAAC;IAEjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;KAAE,CAAC;IAE3D,OAAO,EAAE,MAAM,CAAC;CACnB"} \ No newline at end of file +{"version":3,"file":"CadObject.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/Erp/Models/CadObject.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,qBAAa,eAAe;IAExB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAS;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IAEvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IAEjB,QAAQ,EAAE,MAAM,CAAC;IAEjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,OAAO,CAAS;IAC7B,WAAW,SAAK;IAChB,YAAY,SAAK;IACjB,WAAW,SAAK;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;KAAE,CAAC;IAC3C,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACnB;AACD,qBAAa,kBAAkB;IAG3B,IAAI,EAAE,MAAM,CAAC;IAEb,QAAQ,EAAE,sBAAsB,EAAE,CAAC;CACtC;AACD,qBAAa,sBAAsB;IAG/B,QAAQ,EAAE,MAAM,CAAC;IAEjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;KAAE,CAAC;IAE3D,OAAO,EAAE,MAAM,CAAC;CACnB;AACD,MAAM,WAAW,oBAAoB;IAEjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,oBAAoB,EAAE,CAAC;CAEnC;AACD,MAAM,WAAW,oBAAoB;IAEjC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;CACrB"} \ No newline at end of file diff --git a/types/Add-on/Erp/ParseData.d.ts b/types/Add-on/Erp/ParseData.d.ts index e51a3dd..9c9a205 100644 --- a/types/Add-on/Erp/ParseData.d.ts +++ b/types/Add-on/Erp/ParseData.d.ts @@ -5,15 +5,16 @@ import { LinesType } from "../../DatabaseServices/Entity/BoardInterface"; import { ExtrudeSolid } from "../../DatabaseServices/Entity/Extrude"; import { ObjectId } from "../../DatabaseServices/ObjectId"; import { IContourData } from "../../Production/Convert2PtsBul"; -import { I2DModeling, I3DContourData, I3DModeling, IDrillingOption, IHardwareType, IModelingData, ISpliteOrderData } from '../../Production/Product'; -import { ISealingData } from "../../UI/Store/OptionInterface/IHighSealedItem"; +import { I2DModeling, I3DContourData, I3DModeling, IDrillingOption, IHardwareType, IModelingData, IOriginSideModelingData, ISpliteOrderData } from '../../Production/Product'; +import { IHighReservedEdgeItem, ISealingData } from "../../UI/Store/OptionInterface/IHighSealedItem"; import { FaceDirection } from "../DrawDrilling/DrillType"; import { Entity } from "../../DatabaseServices/Entity/Entity"; +import { BoardProcessOption } from "../../UI/Store/OptionInterface/BoardProcessOption"; import { ICountType } from "../LookOverBoardInfos/LookOverBoardInfosTool"; import { OrderDataBlock, WaveType } from "./Models/CadBlock"; -import { CadBlockHoles, CadBlockInfo, CadBlockModel, CadBlockModelPoint, CadBlockPoint, FaceType, HoleType, ModelOffSetData } from "./Models/CadBlockInfo"; +import { CadBlockHoles, CadBlockInfo, CadBlockModel, CadBlockModelPoint, CadBlockPoint, CadSealInfoPoint, FaceType, HoleType, ModelOffSetData } from "./Models/CadBlockInfo"; import { CADDbBoard } from "./Models/CadModel"; -import { OrderDataObject, ProcessGroupObject } from "./Models/CadObject"; +import { AlignLineGroupObject, OrderDataObject, ProcessGroupObject } from "./Models/CadObject"; declare enum FrontOrSide { 正面反面 = 0, 侧面 = 1 @@ -22,14 +23,17 @@ export type MesParsedDataType = { blockList: OrderDataBlock[]; objectList: OrderDataObject[]; processGroupObjectList: ProcessGroupObject[]; + alignLineGroupList: AlignLineGroupObject[]; + cadViewPath?: string; }; export declare class ErpParseData { GetCadData(boardList: Board[], metalsList: IHardwareType[]): Promise; DecomposeObject(metalsList: IHardwareType[]): OrderDataObject[]; GetNumberBit(value: number, bit: number): number; GetWave(wave: LinesType): WaveType; - GetPointDetail(points: IContourData, seals: ISealingData[]): CadBlockPoint[]; + GetPointDetail(points: IContourData, seals: ISealingData[], reservedEdge: IHighReservedEdgeItem[]): CadBlockPoint[]; GetModelDetail(DataArray: IModelingData[], frontOrSide: FrontOrSide, isRect?: Boolean, add?: number): CadBlockModel[]; + GetSideModelDetail(DataArray: IOriginSideModelingData[], isRect: boolean, add: number, isInverse: boolean, sideLength: number): CadBlockModel[]; GetModelPointDetail(feeding: IContourData, lineID: number, deep: number): CadBlockModelPoint[]; GetOffSetModelDetail(modeling: I2DModeling[], modelID: number): CadBlockModel[]; GetModelOffSetData(md: I2DModeling): ModelOffSetData[]; @@ -39,7 +43,7 @@ export declare class ErpParseData { GetHoleType(hole: GangDrillType): HoleType; GetHoleFaceType(frontOrSide: FrontOrSide, hole: IDrillingOption): FaceType | number; GetModelFaceType(frontOrSide: FrontOrSide, dir: FaceDirection | number): FaceType | number; - GetBlockPointInfo(board: ISpliteOrderData): CadBlockInfo; + GetBlockPointInfo(data: ISpliteOrderData): CadBlockInfo; /** * 板件的模型信息,用于CADViewer显示板件 */ @@ -53,12 +57,43 @@ export declare class ErpParseData { GetSealingAndDrills(boardList: Board[]): OrderDataObject[]; GetSealObjects(seals: ICountType[], roomName: string, boxName: string, sealMap: Map): OrderDataObject[]; UpdateBoardDrillRemark(spliteData: ISpliteOrderData): void; + /** + * 补充更新拆单的数据 + * 拆单数据解析时,如果是矩形板,封边备注信息统一按下右上左顺序读取过去,所以这里重新获取取一次矩形的板的数据 + * @param {ISpliteOrderData} [spliteData] 板件拆单的数据 + * @param {Board} board + * @param {{ spliteHeight: number, spliteWidth: number, spliteThickness: number; }} [splitSize] 拆单值 + * @memberof ErpParseData + */ UpdateBoardInfo(spliteData: ISpliteOrderData, board: Board, splitSize: { spliteHeight: number; spliteWidth: number; spliteThickness: number; - }): void; + }): { + boardType: string; + throughHoleCount: number; + throughModelCount: number; + splitSize: { + spliteHeight: number; + spliteWidth: number; + spliteThickness: number; + }; + has2DModel: boolean; + has3DModel: boolean; + composingFace: string; + processList: { + name: string; + size: { + width: number; + height: number; + depth: number; + }; + }[]; + edgeRemarks: string[]; + rectSealDetail: CadSealInfoPoint[]; + }; ProcessGroupFilter(objId: ObjectId): boolean; + GetRectSealDetail(boardProcessOption: BoardProcessOption): CadSealInfoPoint[]; groupBy(data: any[], fileds: string[]): any[]; } export {}; diff --git a/types/Add-on/Erp/ParseData.d.ts.map b/types/Add-on/Erp/ParseData.d.ts.map index a80901a..17757f6 100644 --- a/types/Add-on/Erp/ParseData.d.ts.map +++ b/types/Add-on/Erp/ParseData.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParseData.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Erp/ParseData.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ParseData.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Erp/ParseData.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Add-on/Erp/ParseDataFunction.d.ts b/types/Add-on/Erp/ParseDataFunction.d.ts new file mode 100644 index 0000000..fb8a4f6 --- /dev/null +++ b/types/Add-on/Erp/ParseDataFunction.d.ts @@ -0,0 +1,8 @@ +import { Board } from "../../DatabaseServices/Entity/Board"; +import { AlignLineGroupObject } from "./Models/CadObject"; +export declare function ParseAlignLine(br: Board, alignLineMap: Map): void; +export declare function DealAlignLineGroup(alignLineMap: Map, alignLineGroupList: AlignLineGroupObject[], entityIDMap: Map): void; +export declare function CheckAlignLineMtl(brs: Board[]): Promise<{ + errorBrs: Board[]; +}>; +//# sourceMappingURL=ParseDataFunction.d.ts.map \ No newline at end of file diff --git a/types/Add-on/Erp/ParseDataFunction.d.ts.map b/types/Add-on/Erp/ParseDataFunction.d.ts.map new file mode 100644 index 0000000..54622b6 --- /dev/null +++ b/types/Add-on/Erp/ParseDataFunction.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ParseDataFunction.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Erp/ParseDataFunction.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAG5D,OAAO,EAAwB,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAGhF,wBAAgB,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,QAa3E;AAGD,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,QAyBlJ;AAWD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;CAAE,CAAC,CA0FrF"} \ No newline at end of file diff --git a/types/Add-on/Erp/ParseParts.d.ts.map b/types/Add-on/Erp/ParseParts.d.ts.map index 7154a85..bd0cb79 100644 --- a/types/Add-on/Erp/ParseParts.d.ts.map +++ b/types/Add-on/Erp/ParseParts.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParseParts.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Erp/ParseParts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,MAAM,GAAE,eAAsB,EAAE,WAAW,GAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAQ,EAAE,MAAM,GAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAW,QA2EpN"} \ No newline at end of file +{"version":3,"file":"ParseParts.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Erp/ParseParts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,MAAM,GAAE,eAAsB,EAAE,WAAW,GAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAQ,EAAE,MAAM,GAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAW,QAmEpN"} \ No newline at end of file diff --git a/types/Add-on/Erp/Util/EntityHelper.d.ts b/types/Add-on/Erp/Util/EntityHelper.d.ts new file mode 100644 index 0000000..4232010 --- /dev/null +++ b/types/Add-on/Erp/Util/EntityHelper.d.ts @@ -0,0 +1,8 @@ +import { type Entity } from "../../../DatabaseServices/Entity/Entity"; +/** + * 获取实体ID(子实体转换为父实体) + * @param entity + * @returns 实体ID + */ +export declare function GetEntityId(entity: Entity): number; +//# sourceMappingURL=EntityHelper.d.ts.map \ No newline at end of file diff --git a/types/Add-on/Erp/Util/EntityHelper.d.ts.map b/types/Add-on/Erp/Util/EntityHelper.d.ts.map new file mode 100644 index 0000000..db7b205 --- /dev/null +++ b/types/Add-on/Erp/Util/EntityHelper.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"EntityHelper.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/Erp/Util/EntityHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAEtE;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGlD"} \ No newline at end of file diff --git a/types/Add-on/Erp/common/CadViewUtil.d.ts b/types/Add-on/Erp/common/CadViewUtil.d.ts new file mode 100644 index 0000000..32e3b05 --- /dev/null +++ b/types/Add-on/Erp/common/CadViewUtil.d.ts @@ -0,0 +1,41 @@ +import { Entity } from "../../../DatabaseServices/Entity/Entity"; +export declare function GetCadViewFile(entities: Entity[]): Uint8Array; +export declare function UploadCadViewFile(file: Uint8Array): Promise; +export type CadView2OrderDto = { + Items: Array<{ + ItemNo: number; + DataID: number; + RoomID: number; + BoxID: number; + }>; + Goods: Array<{ + GoodsID: number; + Color: string; + Material: string; + MaterialName: string; + }>; + Blocks: Array<{ + ID: number; + BoardName: string; + GoodsID: number; + Width: number; + Height: number; + Thickness: number; + SealedLeft: number; + SealedRight: number; + SealedUp: number; + SealedDown: number; + }>; + Modules: Array<{ + ID: number; + Name: string; + ModuleType: number; + }>; +}; +export declare function getCadViewInfo(query: { + ItemNo: number; +}): Promise<{ + CadViewList: string[]; + OrderDto: CadView2OrderDto; +}>; +//# sourceMappingURL=CadViewUtil.d.ts.map \ No newline at end of file diff --git a/types/Add-on/Erp/common/CadViewUtil.d.ts.map b/types/Add-on/Erp/common/CadViewUtil.d.ts.map new file mode 100644 index 0000000..76ad872 --- /dev/null +++ b/types/Add-on/Erp/common/CadViewUtil.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"CadViewUtil.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/Erp/common/CadViewUtil.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAOjE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,cAkGhD;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,UAAU,mBAwCvD;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,KAAK,EAAE,KAAK,CAAC;QACT,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,KAAK,EAAE,KAAK,CAAC;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;KACxB,CAAC,CAAC;IACH,MAAM,EAAE,KAAK,CAAC;QACV,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;CACN,CAAC;AAEF,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;CAAE,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,gBAAgB,CAAC;CAAE,CAAC,CAsBhI"} \ No newline at end of file diff --git a/types/Add-on/Explode.d.ts.map b/types/Add-on/Explode.d.ts.map index 1b7e702..98d770d 100644 --- a/types/Add-on/Explode.d.ts.map +++ b/types/Add-on/Explode.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Explode.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Explode.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGnD,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CA6Bb"} \ No newline at end of file +{"version":3,"file":"Explode.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Explode.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGnD,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CA+Bb"} \ No newline at end of file diff --git a/types/Add-on/ExplosionMap.d.ts b/types/Add-on/ExplosionMap.d.ts index f32eb3c..33004a6 100644 --- a/types/Add-on/ExplosionMap.d.ts +++ b/types/Add-on/ExplosionMap.d.ts @@ -1,4 +1,3 @@ -/// import { Object3D, Vector3 } from "three"; import { Command } from "../Editor/CommandMachine"; export declare class Command_ExplosionMap implements Command { diff --git a/types/Add-on/ExplosionMap.d.ts.map b/types/Add-on/ExplosionMap.d.ts.map index 81e54f9..93259f8 100644 --- a/types/Add-on/ExplosionMap.d.ts.map +++ b/types/Add-on/ExplosionMap.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ExplosionMap.d.ts","sourceRoot":"","sources":["../../../src/Add-on/ExplosionMap.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAI1C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAQnD,qBAAa,oBAAqB,YAAW,OAAO;IAEhD,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAM;IACrC,KAAK,SAAK;IACJ,IAAI;CAwEb"} \ No newline at end of file +{"version":3,"file":"ExplosionMap.d.ts","sourceRoot":"","sources":["../../../src/Add-on/ExplosionMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAI1C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAQnD,qBAAa,oBAAqB,YAAW,OAAO;IAEhD,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAM;IACrC,KAAK,SAAK;IACJ,IAAI;CAwEb"} \ No newline at end of file diff --git a/types/Add-on/ExportData.d.ts b/types/Add-on/ExportData.d.ts index 6b16d42..db47971 100644 --- a/types/Add-on/ExportData.d.ts +++ b/types/Add-on/ExportData.d.ts @@ -18,6 +18,7 @@ export declare class Command_ExportData implements Command { export type Data = { Entitys: any[]; Materials: Object[]; + Snapshoots?: Object[]; Url?: string; Clear?: boolean; shopid?: string; diff --git a/types/Add-on/ExportData.d.ts.map b/types/Add-on/ExportData.d.ts.map index 06487a5..880dbbe 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;AAqB/B,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAK3D,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAU/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,yDAAyD,CAAC;AAO1F,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAgBnD,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;CAmFb;AAED,MAAM,MAAM,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,CAiFzD;AA6JD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,sBAAsB,OA6ElE;AAwSD,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,QAAQ,OAezD;AAED,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,QAAQ,OAe/D;AAGD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,eAAe,OAwB9D"} \ 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;AAK3D,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAU/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,yDAAyD,CAAC;AAO1F,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAgBnD,qBAAa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;CAAE,EAAE,EAAE,CAAC;IAEtE,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,KAAK;IAIb,iBAAiB;IAajB,MAAM;CAiBT;AAED,qBAAa,kBAAmB,YAAW,OAAO;IAExC,IAAI;CAkHb;AAED,MAAM,MAAM,IAAI,GAAG;IACf,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,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,CAiFzD;AAmLD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,sBAAsB,OA6ElE;AA6WD,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,QAAQ,OAgBzD;AAED,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,QAAQ,OAgB/D;AAGD,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,eAAe,OA8B9D"} \ No newline at end of file diff --git a/types/Add-on/FBXLoad.d.ts.map b/types/Add-on/FBXLoad.d.ts.map index e8ec368..1da1032 100644 --- a/types/Add-on/FBXLoad.d.ts.map +++ b/types/Add-on/FBXLoad.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"FBXLoad.d.ts","sourceRoot":"","sources":["../../../src/Add-on/FBXLoad.ts"],"names":[],"mappings":"AAmBA,qBAAa,iBAAiB;IAEpB,IAAI;CAqBb;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,IAAI,iBAkNtC"} \ No newline at end of file +{"version":3,"file":"FBXLoad.d.ts","sourceRoot":"","sources":["../../../src/Add-on/FBXLoad.ts"],"names":[],"mappings":"AAmBA,qBAAa,iBAAiB;IAEpB,IAAI;CAqBb;AAED,wBAAsB,SAAS,CAAC,CAAC,EAAE,IAAI,iBAmNtC"} \ No newline at end of file diff --git a/types/Add-on/File/OpenHistory.d.ts.map b/types/Add-on/File/OpenHistory.d.ts.map index c1f5a93..b485f62 100644 --- a/types/Add-on/File/OpenHistory.d.ts.map +++ b/types/Add-on/File/OpenHistory.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"OpenHistory.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/File/OpenHistory.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAQtD,qBACa,mBAAoB,YAAW,OAAO;IAE/C,SAAS,UAAQ;IACX,IAAI;CAiDb;AAeD,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAiBlE"} \ No newline at end of file +{"version":3,"file":"OpenHistory.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/File/OpenHistory.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAYtD,qBACa,mBAAoB,YAAW,OAAO;IAE/C,SAAS,UAAQ;IACX,IAAI;CAkDb;AAeD,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAiBlE"} \ No newline at end of file diff --git a/types/Add-on/File/OpenHistoryBody.d.ts b/types/Add-on/File/OpenHistoryBody.d.ts index c45b4a5..516f7b6 100644 --- a/types/Add-on/File/OpenHistoryBody.d.ts +++ b/types/Add-on/File/OpenHistoryBody.d.ts @@ -1,4 +1,3 @@ -/// import React from "react"; import { HistoryProp } from "./OperLogsModal"; export declare class OpenHistoryBody extends React.Component { @@ -9,15 +8,4 @@ export declare class OpenHistoryBody extends React.Component { componentWillUnmount(): void; render(): JSX.Element; } -export declare class OpenHistoryList extends React.Component { - _Index: number; - _LastOper: string; - _Data: import("./OperLogsModal").OperInfo[]; - _CanOpen: boolean; - render(): JSX.Element; - _AllDataList: () => JSX.Element; - _CanOpenDataList: () => JSX.Element; - _ButtonEl(name: string, oper_date: string, file_date: string): React.ReactElement; - _HasHistoryFile(name: string, oper_date: string, file_date: string): boolean; -} //# sourceMappingURL=OpenHistoryBody.d.ts.map \ No newline at end of file diff --git a/types/Add-on/File/OpenHistoryBody.d.ts.map b/types/Add-on/File/OpenHistoryBody.d.ts.map index f01b1b6..9193896 100644 --- a/types/Add-on/File/OpenHistoryBody.d.ts.map +++ b/types/Add-on/File/OpenHistoryBody.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"OpenHistoryBody.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/File/OpenHistoryBody.tsx"],"names":[],"mappings":";AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;IAErD,IAAI,SAA0B;IAC1C,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB,SAAS,UAAS;IAElB,iBAAiB;IAoBjB,oBAAoB;IAMpB,MAAM;CA4CT;AAED,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;IAEjE,MAAM,SAAK;IACX,SAAS,SAAM;IACf,KAAK,uCAAmB;IACZ,QAAQ,EAAE,OAAO,CAAS;IAEtC,MAAM;IA2BN,YAAY,oBAiCV;IAEF,gBAAgB,oBA0Cd;IAEF,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC;IAoBtF,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAWrE"} \ No newline at end of file +{"version":3,"file":"OpenHistoryBody.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/File/OpenHistoryBody.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;IAErD,IAAI,SAA0B;IAC1C,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB,SAAS,UAAS;IAElB,iBAAiB;IAoBjB,oBAAoB;IAMpB,MAAM;CA2CT"} \ No newline at end of file diff --git a/types/Add-on/File/OpenHistoryList.d.ts b/types/Add-on/File/OpenHistoryList.d.ts new file mode 100644 index 0000000..cc797f7 --- /dev/null +++ b/types/Add-on/File/OpenHistoryList.d.ts @@ -0,0 +1,15 @@ +import React from "react"; +import { HistoryProp } from "./OperLogsModal"; +export declare class OpenHistoryList extends React.Component { + LastOper: string; + CanOpenFileDataMap: Map; + CanOpen: boolean; + constructor(props: any); + ParseData: () => void; + AllDataList: () => JSX.Element; + CanOpenDataList: () => JSX.Element; + HandleOpen: (fileTitle: string) => Promise; + OnClickOpenFile: (uid: string, fileId: string, fileTitle: string) => Promise; + render(): JSX.Element; +} +//# sourceMappingURL=OpenHistoryList.d.ts.map \ No newline at end of file diff --git a/types/Add-on/File/OpenHistoryList.d.ts.map b/types/Add-on/File/OpenHistoryList.d.ts.map new file mode 100644 index 0000000..3739d70 --- /dev/null +++ b/types/Add-on/File/OpenHistoryList.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"OpenHistoryList.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/File/OpenHistoryList.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;IAEjE,QAAQ,SAAM;IACd,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IACxC,OAAO,EAAE,OAAO,CAAS;gBAEzB,KAAK,KAAA;IASjB,SAAS,aAuCP;IAEF,WAAW,oBAoDT;IAEF,eAAe,oBA+Cb;IAEF,UAAU,cAAqB,MAAM,mBA+CnC;IAEF,eAAe,QAAe,MAAM,UAAU,MAAM,aAAa,MAAM,sBAarE;IAEF,MAAM;CA4BT"} \ No newline at end of file diff --git a/types/Add-on/File/OperLog.d.ts b/types/Add-on/File/OperLog.d.ts index 451f84f..8585e2a 100644 --- a/types/Add-on/File/OperLog.d.ts +++ b/types/Add-on/File/OperLog.d.ts @@ -1,9 +1,12 @@ +import { CADFiler } from "../../DatabaseServices/CADFiler"; import { Command } from "../../Editor/CommandMachine"; export declare const HistoryToaster: import("@blueprintjs/core").IToaster; export declare class OperLogs implements Command { private _IsOpenFile; - constructor(_IsOpenFile?: boolean); - exec(): Promise; - private OnClickOpenFile; + private fileId?; + private fileName?; + constructor(_IsOpenFile?: boolean, fileId?: string, fileName?: string); + exec(): Promise; } +export declare function FetchFile1(url: string): Promise; //# sourceMappingURL=OperLog.d.ts.map \ 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 24b5336..43acd24 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":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAOtD,eAAO,MAAM,cAAc,sCAIzB,CAAC;AAEH,qBAAa,QAAS,YAAW,OAAO;IAExB,OAAO,CAAC,WAAW;gBAAX,WAAW,GAAE,OAAc;IAEzC,IAAI;YA4FI,eAAe;CAOhC"} \ No newline at end of file +{"version":3,"file":"OperLog.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/File/OperLog.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAQtD,eAAO,MAAM,cAAc,sCAIzB,CAAC;AAEH,qBAAa,QAAS,YAAW,OAAO;IAExB,OAAO,CAAC,WAAW;IAAkB,OAAO,CAAC,MAAM,CAAC;IAAU,OAAO,CAAC,QAAQ,CAAC;gBAAvE,WAAW,GAAE,OAAc,EAAU,MAAM,CAAC,EAAE,MAAM,EAAU,QAAQ,CAAC,EAAE,MAAM;IAE7F,IAAI;CAiHb;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAU/D"} \ No newline at end of file diff --git a/types/Add-on/File/OperLogsModal.d.ts b/types/Add-on/File/OperLogsModal.d.ts index fe71db4..5ebb549 100644 --- a/types/Add-on/File/OperLogsModal.d.ts +++ b/types/Add-on/File/OperLogsModal.d.ts @@ -10,11 +10,12 @@ export interface HistoryProp { userName: string; files: string[]; data: OperInfo[]; + fileName?: string; isNotToaster?: boolean; isOpenFile?: boolean; time?: number; Toaster?: IToaster; - OnClickOpenFile: (userName: string, fileId: string, files: string[], number: number) => void; + newFileId?: string; } export declare class OperLogsModal extends React.Component { render(): JSX.Element; diff --git a/types/Add-on/File/OperLogsModal.d.ts.map b/types/Add-on/File/OperLogsModal.d.ts.map index 735991b..f66f3d0 100644 --- a/types/Add-on/File/OperLogsModal.d.ts.map +++ b/types/Add-on/File/OperLogsModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"OperLogsModal.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/File/OperLogsModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyB,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,WAAW,QAAQ;IAErB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAExB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAChG;AAED,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;IAE/D,MAAM;CAmCT"} \ No newline at end of file +{"version":3,"file":"OperLogsModal.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/File/OperLogsModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyB,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,WAAW,QAAQ;IAErB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAExB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,QAAQ,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;IAE/D,MAAM;CAsCT"} \ No newline at end of file diff --git a/types/Add-on/Fillet.d.ts.map b/types/Add-on/Fillet.d.ts.map index 406a482..41e624d 100644 --- a/types/Add-on/Fillet.d.ts.map +++ b/types/Add-on/Fillet.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Fillet.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Fillet.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAY/C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,kBAAkB,EAAgB,MAAM,wBAAwB,CAAC;AAM1E,qBAAa,aAAc,YAAW,OAAO;IAEzC,aAAa,EAAE,MAAM,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAqB;;IAOnC,IAAI;IA+IV,kBAAkB,CAAC,SAAS,EAAE,MAAM;IAU9B,WAAW,CAAC,KAAK,EAAE,kBAAkB;IA4BrC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAqIrE"} \ No newline at end of file +{"version":3,"file":"Fillet.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Fillet.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAY/C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAEnD,OAAO,EAAE,kBAAkB,EAAgB,MAAM,wBAAwB,CAAC;AAM1E,qBAAa,aAAc,YAAW,OAAO;IAEzC,aAAa,EAAE,MAAM,CAAK;IAC1B,OAAO,CAAC,YAAY,CAAqB;;IAOnC,IAAI;IA+IV,kBAAkB,CAAC,SAAS,EAAE,MAAM;IAU9B,WAAW,CAAC,KAAK,EAAE,kBAAkB;IA4BrC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAwIrE"} \ No newline at end of file diff --git a/types/Add-on/FilletUtils.d.ts b/types/Add-on/FilletUtils.d.ts index 44ba5a3..0f54e07 100644 --- a/types/Add-on/FilletUtils.d.ts +++ b/types/Add-on/FilletUtils.d.ts @@ -1,4 +1,4 @@ -import { Vector3 } from "three"; +import { Matrix4, Vector3 } from "three"; import { Arc } from "../DatabaseServices/Entity/Arc"; import { Curve } from "../DatabaseServices/Entity/Curve"; import { Polyline } from "../DatabaseServices/Entity/Polyline"; @@ -18,6 +18,12 @@ export declare class FilletUtils { FilletRadius: number; Fillet(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes; private FilletLineOrArc; + /** + * 设置直线的坐标系 以便可以正确的被偏移 + * @param {Curve} cu + * @param {Matrix4} newOCS + */ + SetCurveOCS(cu: Curve, newOCS: Matrix4): void; FilletPolyLineSelf(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes; private FilletPolylineAndCurve; FilletPolyLineAllAngular(enRes1: PromptEntityResult): FilletRes; diff --git a/types/Add-on/FilletUtils.d.ts.map b/types/Add-on/FilletUtils.d.ts.map index 2f226c9..e036e4a 100644 --- a/types/Add-on/FilletUtils.d.ts.map +++ b/types/Add-on/FilletUtils.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"FilletUtils.d.ts","sourceRoot":"","sources":["../../../src/Add-on/FilletUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAC;AAGrD,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AA6D/E,aAAK,UAAU;IAEX,KAAK,IAAI;IACT,GAAG,IAAI;CACV;AAED,MAAM,WAAW,SAAS;IAEtB,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,GAAG,CAAC,EAAE,GAAG,CAAC;CACb;AAID,qBAAa,WAAW;IAEpB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,GAAG,SAAS;IA2BzE,OAAO,CAAC,eAAe;IAoFvB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,GAAG,SAAS;IAsIrF,OAAO,CAAC,sBAAsB;IA4G9B,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS;IA6D/D,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;IAgBvD,WAAW,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,iBAAiB,GAAG,QAAQ,GAAG,MAAM;IA8BnF;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmF1B;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAqEvB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAkGxB,OAAO,CAAC,mBAAmB;IAe3B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,QAAQ;IAQhB;;;;;;;OAOG;IACH,OAAO,CAAC,UAAU;CA4ErB"} \ No newline at end of file +{"version":3,"file":"FilletUtils.d.ts","sourceRoot":"","sources":["../../../src/Add-on/FilletUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,GAAG,EAAE,MAAM,gCAAgC,CAAC;AAGrD,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AA6D/E,aAAK,UAAU;IAEX,KAAK,IAAI;IACT,GAAG,IAAI;CACV;AAED,MAAM,WAAW,SAAS;IAEtB,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,GAAG,CAAC,EAAE,KAAK,CAAC;IACZ,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,GAAG,CAAC,EAAE,GAAG,CAAC;CACb;AAID,qBAAa,WAAW;IAEpB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,GAAG,SAAS;IA2BzE,OAAO,CAAC,eAAe;IA8FvB;;;;OAIG;IACH,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO;IAYtC,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,GAAG,SAAS;IAsIrF,OAAO,CAAC,sBAAsB;IA4G9B,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS;IA6D/D,aAAa,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;IAgBvD,WAAW,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,iBAAiB,GAAG,QAAQ,GAAG,MAAM;IA8BnF;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAmF1B;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAqEvB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAkGxB,OAAO,CAAC,mBAAmB;IAe3B;;;;;;OAMG;IACH,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,QAAQ;IAQhB;;;;;;;OAOG;IACH,OAAO,CAAC,UAAU;CA2ErB"} \ No newline at end of file diff --git a/types/Add-on/ForceOpenDirChange.d.ts b/types/Add-on/ForceOpenDirChange.d.ts new file mode 100644 index 0000000..c9c3ab6 --- /dev/null +++ b/types/Add-on/ForceOpenDirChange.d.ts @@ -0,0 +1,5 @@ +import { Command } from "../Editor/CommandMachine"; +export declare class ForceOpendirOrNameChange implements Command { + exec(): Promise; +} +//# sourceMappingURL=ForceOpenDirChange.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ForceOpenDirChange.d.ts.map b/types/Add-on/ForceOpenDirChange.d.ts.map new file mode 100644 index 0000000..9a222e1 --- /dev/null +++ b/types/Add-on/ForceOpenDirChange.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ForceOpenDirChange.d.ts","sourceRoot":"","sources":["../../../src/Add-on/ForceOpenDirChange.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,qBAAa,wBAAyB,YAAW,OAAO;IAE9C,IAAI;CAcb"} \ No newline at end of file diff --git a/types/Add-on/HideSelect/HideSelectUtils.d.ts b/types/Add-on/HideSelect/HideSelectUtils.d.ts index 05675bc..3c5674f 100644 --- a/types/Add-on/HideSelect/HideSelectUtils.d.ts +++ b/types/Add-on/HideSelect/HideSelectUtils.d.ts @@ -8,4 +8,6 @@ export declare function IsHandle(en: Entity): boolean; export declare function IsHinge(en: Entity): boolean; export declare function isDingDiBan(b: Board): boolean; export declare function IsHouse(en: Entity): boolean; +export declare function IsModel(en: Entity): boolean; +export declare function IsRoomBase(en: Entity): boolean; //# sourceMappingURL=HideSelectUtils.d.ts.map \ No newline at end of file diff --git a/types/Add-on/HideSelect/HideSelectUtils.d.ts.map b/types/Add-on/HideSelect/HideSelectUtils.d.ts.map index a513fa3..a596f66 100644 --- a/types/Add-on/HideSelect/HideSelectUtils.d.ts.map +++ b/types/Add-on/HideSelect/HideSelectUtils.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HideSelectUtils.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/HideSelect/HideSelectUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAe9D,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,WAkBhC;AAGD,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,WAUlC;AAGD,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,WAMpC;AAGD,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,WAMnC;AAGD,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,WAelC;AAGD,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,WAejC;AAGD,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,WASnC;AAGD,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAW3C"} \ No newline at end of file +{"version":3,"file":"HideSelectUtils.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/HideSelect/HideSelectUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAe9D,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,WAkBhC;AAGD,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,WAUlC;AAGD,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,WAMpC;AAGD,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,WAMnC;AAGD,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,WAelC;AAGD,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,WAejC;AAGD,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,WASnC;AAGD,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAG3C;AAGD,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAG3C;AAGD,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAU9C"} \ No newline at end of file diff --git a/types/Add-on/HideSelected.d.ts.map b/types/Add-on/HideSelected.d.ts.map index 03a89f9..76e4c62 100644 --- a/types/Add-on/HideSelected.d.ts.map +++ b/types/Add-on/HideSelected.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HideSelected.d.ts","sourceRoot":"","sources":["../../../src/Add-on/HideSelected.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAWnD,qBAAa,oBAAqB,YAAW,OAAO;IAE1C,IAAI;CAmBb;AAED,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CAqBb;AAED,qBAAa,sBAAuB,YAAW,OAAO;IAE5C,IAAI;CAqCb;AAID,qBAAa,0BAA2B,YAAW,OAAO;IAE1C,OAAO,CAAC,OAAO;IAAW,OAAO,CAAC,OAAO;gBAAjC,OAAO,EAAE,OAAO,EAAU,OAAO,EAAE,OAAO;IACxD,IAAI;CA6Jb;AAED,qBAAa,SAAU,YAAW,OAAO;IAErC,YAAY,UAAQ;IACd,IAAI;CAqCb;AAED,qBAAa,mBAAoB,YAAW,OAAO;IAE/C,IAAI;CAUP"} \ No newline at end of file +{"version":3,"file":"HideSelected.d.ts","sourceRoot":"","sources":["../../../src/Add-on/HideSelected.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAWnD,qBAAa,oBAAqB,YAAW,OAAO;IAE1C,IAAI;CAmBb;AAED,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CAqBb;AAED,qBAAa,sBAAuB,YAAW,OAAO;IAE5C,IAAI;CAqCb;AAID,qBAAa,0BAA2B,YAAW,OAAO;IAE1C,OAAO,CAAC,OAAO;IAAW,OAAO,CAAC,OAAO;gBAAjC,OAAO,EAAE,OAAO,EAAU,OAAO,EAAE,OAAO;IACxD,IAAI;CAgMb;AAED,qBAAa,SAAU,YAAW,OAAO;IAErC,YAAY,UAAQ;IACd,IAAI;CAqCb;AAED,qBAAa,mBAAoB,YAAW,OAAO;IAE/C,IAAI;CAeP"} \ No newline at end of file diff --git a/types/Add-on/HighlightNode.d.ts b/types/Add-on/HighlightNode.d.ts new file mode 100644 index 0000000..8c19b8e --- /dev/null +++ b/types/Add-on/HighlightNode.d.ts @@ -0,0 +1,8 @@ +import { Command } from "../Editor/CommandMachine"; +export declare class Command_HighlightNode implements Command { + exec(): Promise; +} +export declare class Command_HighlightNodeAndChilds implements Command { + exec(): Promise; +} +//# sourceMappingURL=HighlightNode.d.ts.map \ No newline at end of file diff --git a/types/Add-on/HighlightNode.d.ts.map b/types/Add-on/HighlightNode.d.ts.map new file mode 100644 index 0000000..3043ff7 --- /dev/null +++ b/types/Add-on/HighlightNode.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"HighlightNode.d.ts","sourceRoot":"","sources":["../../../src/Add-on/HighlightNode.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,qBAAa,qBAAsB,YAAW,OAAO;IAE3C,IAAI;CAuCb;AAGD,qBAAa,8BAA+B,YAAW,OAAO;IAEpD,IAAI;CA0Cb"} \ No newline at end of file diff --git a/types/Add-on/HoleGrooveDim/Command_hole_groove_dim.d.ts b/types/Add-on/HoleGrooveDim/Command_hole_groove_dim.d.ts new file mode 100644 index 0000000..013aa91 --- /dev/null +++ b/types/Add-on/HoleGrooveDim/Command_hole_groove_dim.d.ts @@ -0,0 +1,5 @@ +import { Command } from "../../Editor/CommandMachine"; +export declare class HoleGrooveDimCommand implements Command { + exec(): Promise; +} +//# sourceMappingURL=Command_hole_groove_dim.d.ts.map \ No newline at end of file diff --git a/types/Add-on/HoleGrooveDim/Command_hole_groove_dim.d.ts.map b/types/Add-on/HoleGrooveDim/Command_hole_groove_dim.d.ts.map new file mode 100644 index 0000000..0a3b8c2 --- /dev/null +++ b/types/Add-on/HoleGrooveDim/Command_hole_groove_dim.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Command_hole_groove_dim.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/HoleGrooveDim/Command_hole_groove_dim.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAStD,qBAAa,oBAAqB,YAAW,OAAO;IAE1C,IAAI;CAsDb"} \ No newline at end of file diff --git a/types/Add-on/HoleGrooveDim/ConfigInterface.d.ts b/types/Add-on/HoleGrooveDim/ConfigInterface.d.ts new file mode 100644 index 0000000..730360b --- /dev/null +++ b/types/Add-on/HoleGrooveDim/ConfigInterface.d.ts @@ -0,0 +1,8 @@ +export declare enum HoleOptionKeyList { + radius = "Radius", + diameter = "Diameter", + depth = "Depth" +} +export declare const BrInfoDimList: [string, string][]; +export declare const HoleInfoDimList: [string, string][]; +//# sourceMappingURL=ConfigInterface.d.ts.map \ No newline at end of file diff --git a/types/Add-on/HoleGrooveDim/ConfigInterface.d.ts.map b/types/Add-on/HoleGrooveDim/ConfigInterface.d.ts.map new file mode 100644 index 0000000..bcb1927 --- /dev/null +++ b/types/Add-on/HoleGrooveDim/ConfigInterface.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ConfigInterface.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/HoleGrooveDim/ConfigInterface.ts"],"names":[],"mappings":"AAGA,oBAAY,iBAAiB;IAEzB,MAAM,WAAW;IACjB,QAAQ,aAAa;IACrB,KAAK,UAAU;CAClB;AAGD,eAAO,MAAM,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAoB3C,CAAC;AAGF,eAAO,MAAM,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAI7C,CAAC"} \ No newline at end of file diff --git a/types/Add-on/HoleGrooveDim/ConfigPanel.d.ts b/types/Add-on/HoleGrooveDim/ConfigPanel.d.ts new file mode 100644 index 0000000..6bc4070 --- /dev/null +++ b/types/Add-on/HoleGrooveDim/ConfigPanel.d.ts @@ -0,0 +1,37 @@ +import React from "react"; +import { ModalState } from "../../UI/Components/Modal/ModalInterface"; +import './ConfigPanelStyle.less'; +import { HoleGrooveDimStore } from "./ConfigStore"; +declare enum TextAreaType { + sHoleInfo = "sHoleInfo", + fBHoleInfo = "fBHoleInfo", + brInfo = "brInfo" +} +export declare class HoleGrooveDimConfigModal extends React.Component<{ + store: HoleGrooveDimStore; +}> { + _Event: Function; + _MoveItem: { + type: TextAreaType; + value: string; + }; + _DragToTextarea: TextAreaType; + _SHoleInfoList: JSX.Element[]; + _FBHoleInfoList: JSX.Element[]; + _BrInfoDimList: JSX.Element[]; + constructor(props: { + store: HoleGrooveDimStore; + }); + createList(list: [string, string][], type: TextAreaType): JSX.Element[]; + componentDidMount(): void; + componentWillUnmount(): void; + handleDragStart: (e: React.DragEvent) => void; + handleDragOver: (e: React.DragEvent) => void; + handleDragend: () => void; + _Return: (status: ModalState) => void; + updateInfo(key: TextAreaType, value: string): void; + textAreaEle(key: TextAreaType, list: JSX.Element[], textAreaStyle: React.CSSProperties, ulStyle: React.CSSProperties): JSX.Element; + render(): JSX.Element; +} +export {}; +//# sourceMappingURL=ConfigPanel.d.ts.map \ No newline at end of file diff --git a/types/Add-on/HoleGrooveDim/ConfigPanel.d.ts.map b/types/Add-on/HoleGrooveDim/ConfigPanel.d.ts.map new file mode 100644 index 0000000..a59118b --- /dev/null +++ b/types/Add-on/HoleGrooveDim/ConfigPanel.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ConfigPanel.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/HoleGrooveDim/ConfigPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAGtE,OAAO,yBAAyB,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,aAAK,YAAY;IAEb,SAAS,cAAc;IACvB,UAAU,eAAe;IACzB,MAAM,WAAW;CACpB;AAaD,qBACa,wBAAyB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,kBAAkB,CAAC;CAAE,CAAC;IAEzF,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE;QAAE,IAAI,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;KAAE,CAAC;IAClD,eAAe,EAAE,YAAY,CAAC;IAC9B,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IAC9B,eAAe,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IAC/B,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;gBAElB,KAAK,EAAE;QAAE,KAAK,EAAE,kBAAkB,CAAC;KAAE;IAQjD,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY;IAiBvD,iBAAiB;IAYjB,oBAAoB;IAMpB,eAAe,MAAO,KAAK,CAAC,SAAS,UAanC;IAEF,cAAc,MAAO,KAAK,CAAC,SAAS,UAOlC;IAEF,aAAa,aAsBX;IAEF,OAAO,WAAY,UAAU,UA+C3B;IAGF,UAAU,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM;IAQ3C,WAAW,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,aAAa;IAsBpH,MAAM;CAyGT"} \ No newline at end of file diff --git a/types/Add-on/HoleGrooveDim/ConfigStore.d.ts b/types/Add-on/HoleGrooveDim/ConfigStore.d.ts new file mode 100644 index 0000000..acc1ce7 --- /dev/null +++ b/types/Add-on/HoleGrooveDim/ConfigStore.d.ts @@ -0,0 +1,14 @@ +import { IConfigOption } from "../../UI/Components/Board/UserConfigComponent"; +import { IConfigStore } from "../../UI/Store/BoardStore"; +import { IHoleGrooveDimOption } from "../../UI/Store/OptionInterface/IOptionInterface"; +export declare class HoleGrooveDimStore implements IConfigStore { + configName: string; + configsNames: any[]; + m_Option: IHoleGrooveDimOption; + InitOption(): void; + SaveConfig(): IConfigOption; + UpdateOption(cof: IConfigOption): void; + private static _SingleInstance; + static GetInstance(): HoleGrooveDimStore; +} +//# sourceMappingURL=ConfigStore.d.ts.map \ No newline at end of file diff --git a/types/Add-on/HoleGrooveDim/ConfigStore.d.ts.map b/types/Add-on/HoleGrooveDim/ConfigStore.d.ts.map new file mode 100644 index 0000000..95aa544 --- /dev/null +++ b/types/Add-on/HoleGrooveDim/ConfigStore.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ConfigStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/HoleGrooveDim/ConfigStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iDAAiD,CAAC;AAEvF,qBAAa,kBAAmB,YAAW,YAAY;IAEvC,UAAU,SAAQ;IAClB,YAAY,QAAM;IAClB,QAAQ,EAAE,oBAAoB,CAAqC;IAE/E,UAAU;IAKV,UAAU;IAQV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,oBAAoB,CAAC;IAKrD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAqB;IACnD,MAAM,CAAC,WAAW,IAAI,kBAAkB;CAM3C"} \ No newline at end of file diff --git a/types/Add-on/HoleGrooveDim/ConfigUtils.d.ts b/types/Add-on/HoleGrooveDim/ConfigUtils.d.ts new file mode 100644 index 0000000..7c14761 --- /dev/null +++ b/types/Add-on/HoleGrooveDim/ConfigUtils.d.ts @@ -0,0 +1,35 @@ +import { Vector3 } from "three"; +import { Board } from "../../DatabaseServices/Entity/Board"; +import { Entity } from "../../DatabaseServices/Entity/Entity"; +import { Polyline } from "../../DatabaseServices/Entity/Polyline"; +import { IBoardHoleInfo, IOriginSideModelingData, ISpliteOrderData } from "../../Production/Product"; +/** + * 根据配置的板件信息规则,获取对应的板件信息 + * @param {Board} br 板件 + * @param {string} [ruleStr=""] 规则 + * @return {*} {string} + */ +export declare function GetBoardInfoByRule(br: Board, ruleStr: string): string; +/** + * 加减乘除运算,并格式化到小数点后一位 + * 注意:1、参数a必须为有效数字(number或数值类字符串) + * 2、若运算错误,返回a的值(如operator不是加减乘除之一,或者b转换后为无效数字,或者除数为0)) + * @param {(number | string)} a + * @param {string} [operator] + * @param {(number | string)} [b] + * @return {*} {(number)} + */ +export declare function Calculate(a: number | string, operator?: string, b?: number | string): string; +/** + * 替换规则花括号中的字段为具体值。 + * 若值为数值,可进行数学运算:{长 运算符 数字}如 {长*100} => 5 + * @param {string} ruleStr 规则字符串 如:{长} - {宽} + * @param {[string, string][]} paramsList 中英文对应参数列表 如:[["长", "Length"], ["宽", "Width"]] + * @param {(key: string, operator?: string, calValue?: string) => string} getParamCorrValue 获取参数对应的值 + * @return {*} {string} 按规则字符串计算后的结果 + */ +export declare function ReplaceRuleFieldWithCorrValue(ruleStr: string, paramsList: [string, string][], getParamCorrValue: (key: string, operator?: string, calValue?: string) => string): string; +export declare function DrawHole(holeInfo: IBoardHoleInfo, offset: Vector3): Promise; +export declare function DrawSideHole(sideHoleInfo: IOriginSideModelingData[], sealingContour: Polyline, offset: Vector3): Entity[]; +export declare function DrawOriginModeling(br: Board, info: ISpliteOrderData): Entity[]; +//# sourceMappingURL=ConfigUtils.d.ts.map \ No newline at end of file diff --git a/types/Add-on/HoleGrooveDim/ConfigUtils.d.ts.map b/types/Add-on/HoleGrooveDim/ConfigUtils.d.ts.map new file mode 100644 index 0000000..02d5179 --- /dev/null +++ b/types/Add-on/HoleGrooveDim/ConfigUtils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ConfigUtils.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/HoleGrooveDim/ConfigUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AAIzC,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAG5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAE9D,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAOlE,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,gBAAgB,EAAyB,MAAM,0BAA0B,CAAC;AAK5H;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA4FrE;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CACrB,CAAC,EAAE,MAAM,GAAG,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM,EACjB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GACpB,MAAM,CAoDR;AAED;;;;;;;GAOG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,iBAAiB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAqBvL;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CA2B3F;AAED,wBAAgB,YAAY,CAAC,YAAY,EAAE,uBAAuB,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAiCzH;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,gBAAgB,GAAG,MAAM,EAAE,CA+B9E"} \ No newline at end of file diff --git a/types/Add-on/HoleGrooveDim/DrawHoleGrooveDim.d.ts b/types/Add-on/HoleGrooveDim/DrawHoleGrooveDim.d.ts new file mode 100644 index 0000000..08a16dc --- /dev/null +++ b/types/Add-on/HoleGrooveDim/DrawHoleGrooveDim.d.ts @@ -0,0 +1,6 @@ +import { Vector3 } from "three"; +import { Board } from "../../DatabaseServices/Entity/Board"; +import { ISpliteOrderData } from "../../Production/Product"; +import { HoleGrooveDimStore } from "./ConfigStore"; +export declare function DrawHoleGrooveDim(startPt: Vector3, brs: Board[], infos: ISpliteOrderData[], store: HoleGrooveDimStore, brInfoDims: string[]): Promise; +//# sourceMappingURL=DrawHoleGrooveDim.d.ts.map \ No newline at end of file diff --git a/types/Add-on/HoleGrooveDim/DrawHoleGrooveDim.d.ts.map b/types/Add-on/HoleGrooveDim/DrawHoleGrooveDim.d.ts.map new file mode 100644 index 0000000..7ff94c5 --- /dev/null +++ b/types/Add-on/HoleGrooveDim/DrawHoleGrooveDim.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"DrawHoleGrooveDim.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/HoleGrooveDim/DrawHoleGrooveDim.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,OAAO,EAAE,MAAM,OAAO,CAAC;AAI/C,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAS5D,OAAO,EAAE,gBAAgB,EAAc,MAAM,0BAA0B,CAAC;AAIxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGnD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,EAAE,iBA0GjJ"} \ No newline at end of file diff --git a/types/Add-on/Insert.d.ts.map b/types/Add-on/Insert.d.ts.map index f926437..fc929c0 100644 --- a/types/Add-on/Insert.d.ts.map +++ b/types/Add-on/Insert.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Insert.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Insert.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAIxD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAOnD,qBAAa,cAAe,YAAW,OAAO;IAEpC,IAAI;CAQb;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,iBAe/C;AAED,wBAAsB,cAAc,CAAC,EAAE,EAAE,QAAQ,iBAsDhD"} \ No newline at end of file +{"version":3,"file":"Insert.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Insert.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAKxD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAOnD,qBAAa,cAAe,YAAW,OAAO;IAEpC,IAAI;CAQb;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,iBAe/C;AAED,wBAAsB,cAAc,CAAC,EAAE,EAAE,QAAQ,iBAuFhD"} \ No newline at end of file diff --git a/types/Add-on/Isolate.d.ts b/types/Add-on/Isolate.d.ts new file mode 100644 index 0000000..b231e77 --- /dev/null +++ b/types/Add-on/Isolate.d.ts @@ -0,0 +1,8 @@ +import { Command } from "../Editor/CommandMachine"; +export declare class Command_Isolate implements Command { + exec(): Promise; +} +export declare class Command_UnIsolate implements Command { + exec(): Promise; +} +//# sourceMappingURL=Isolate.d.ts.map \ No newline at end of file diff --git a/types/Add-on/Isolate.d.ts.map b/types/Add-on/Isolate.d.ts.map new file mode 100644 index 0000000..64a502d --- /dev/null +++ b/types/Add-on/Isolate.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Isolate.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Isolate.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CAsCb;AAED,qBAAa,iBAAkB,YAAW,OAAO;IAEvC,IAAI;CAmBb"} \ No newline at end of file diff --git a/types/Add-on/IsolateReactor.d.ts b/types/Add-on/IsolateReactor.d.ts new file mode 100644 index 0000000..8d71178 --- /dev/null +++ b/types/Add-on/IsolateReactor.d.ts @@ -0,0 +1,12 @@ +import { ApplicationService } from "../ApplicationServices/Application"; +import { Entity } from "../DatabaseServices/Entity/Entity"; +export declare class IsolateReactor { + private app; + constructor(app: ApplicationService); + private useIsolateObject; + private IsolateObject; + private NoIsolateObject; + ApplyIsolateObjects(hideEnts: Entity[], showEnts: Entity[]): void; + RemoveIsolateObjects(): void; +} +//# sourceMappingURL=IsolateReactor.d.ts.map \ No newline at end of file diff --git a/types/Add-on/IsolateReactor.d.ts.map b/types/Add-on/IsolateReactor.d.ts.map new file mode 100644 index 0000000..fe8034f --- /dev/null +++ b/types/Add-on/IsolateReactor.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"IsolateReactor.d.ts","sourceRoot":"","sources":["../../../src/Add-on/IsolateReactor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAGxE,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAG3D,qBAAa,cAAc;IAEX,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,kBAAkB;IAwG3C,OAAO,CAAC,gBAAgB,CAAQ;IAGhC,OAAO,CAAC,aAAa,CAAuB;IAG5C,OAAO,CAAC,eAAe,CAAuB;IAG9C,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;IAiB1D,oBAAoB;CAMvB"} \ No newline at end of file diff --git a/types/Add-on/JiaJu/Import/JiaJuImport.d.ts b/types/Add-on/JiaJu/Import/JiaJuImport.d.ts new file mode 100644 index 0000000..1c11959 --- /dev/null +++ b/types/Add-on/JiaJu/Import/JiaJuImport.d.ts @@ -0,0 +1,9 @@ +import { Command } from "../../../Editor/CommandMachine"; +import { JiaJu } from "./JiaJuInterface"; +export declare function xmlStr2Json(xmlStr: string): {}; +export declare class Command_JiaJuImport implements Command { + exec(): Promise; +} +export declare function ImportJiajuFile(xmlFile: File): Promise; +export declare function ImportJiaJuData(bom: JiaJu.Bom): Promise; +//# sourceMappingURL=JiaJuImport.d.ts.map \ No newline at end of file diff --git a/types/Add-on/JiaJu/Import/JiaJuImport.d.ts.map b/types/Add-on/JiaJu/Import/JiaJuImport.d.ts.map new file mode 100644 index 0000000..2e787b3 --- /dev/null +++ b/types/Add-on/JiaJu/Import/JiaJuImport.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"JiaJuImport.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/JiaJu/Import/JiaJuImport.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAE,OAAO,EAAe,MAAM,gCAAgC,CAAC;AAQtE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAIzC,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,MAKzC;AAuBD,qBAAa,mBAAoB,YAAW,OAAO;IAEzC,IAAI;CAeb;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,IAAI,iBAgBlD;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,iBA8CnD"} \ No newline at end of file diff --git a/types/Add-on/JiaJu/Import/JiaJuInterface.d.ts b/types/Add-on/JiaJu/Import/JiaJuInterface.d.ts new file mode 100644 index 0000000..8458114 --- /dev/null +++ b/types/Add-on/JiaJu/Import/JiaJuInterface.d.ts @@ -0,0 +1,199 @@ +export declare namespace JiaJu { + export interface Bom { + Rooms: Rooms[]; + Orders: Order[]; + Products: [Products]; + Other: []; + } + type Rot = string; + export interface Rooms { + Room: Room[]; + } + export interface Room { + ID: string; + Name: string; + Path: Path[]; + } + export interface Order { + } + export interface Products { + Product: ModelProduct[]; + } + export enum CategoryName { + Empty = "", + 衣柜 = "\u8863\u67DC" + } + export interface ProductBase { + CategoryName: CategoryName; + ChannelID: string; + PID: string; + OrderID: string; + TypeID: "BanJian" | "XianTiao" | "ABKU" | "GuiTi"; + ObjType: "CabinetDoor" | "Cabinet" | "Group" | "Union" | "Board" | "Decoration" | "TopLine" | "SweepLine"; + TypeLabel: string; + Name: string; + Coordinate: string; + Coordinate_Parent: string; + Pos: string; + Pos_Parent: string; + Rot: Rot; + Rot_Parent: Rot; + } + export interface ModelProduct extends ProductBase { + RoomID: string; + ParamTable: ModelParamTable[]; + Products: [ModelProducts]; + } + export interface ModelParamTable { + CODE: string; + D: string; + DATE: Date; + EXTEND_BACK: string; + EXTEND_DOWN: string; + EXTEND_FRONT: string; + EXTEND_LEFT: string; + EXTEND_RIGHT: string; + EXTEND_UP: string; + FRAME_ID: string; + H: string; + HIDE_FLAG: string; + ID: string; + IS_QUOTED: string; + MTL: string; + MTL_BASE: string; + MTL_BYOWNER: string; + MTL_DIR: string; + MTL_NAME: string; + MTL_SALENAME: string; + NAME: string; + OPEN_STATUS: string; + PRO_NOTES: string; + QUOTE_CODE: string; + RD: string; + RH: string; + RW: string; + SALES_MARKET: string; + SERIESID: string; + SPRAY_MATRIAL: string; + STD: string; + W: string; + YG_AZBZ: string; + YG_SJBZ: string; + YG_TJZJ_H: string; + YG_TJZJ_H1: string; + } + export interface ModelProducts { + Product: EntityProduct[]; + } + export interface EntityProduct extends ProductBase { + BoardMode?: "SIDEBOARD" | "FORWARDBOARD" | "HORIZONTALBOARD"; + ParamTable: EntityParamTable[]; + OutLines?: OutLine[]; + } + export interface ABKUProduct extends ProductBase { + ParamTable: EntityParamTable[]; + } + export interface OutLine { + Path: Path[]; + ModelPath: Path[]; + Hole?: Hole[]; + } + export interface Hole { + Path: Path[]; + } + export interface Path { + GeCurve: GeCurve[]; + } + export interface GeCurve { + End: string; + EndX: string; + EndY: string; + EndZ: string; + GeCurveType: GeCurveType; + Start: string; + StartX: string; + StartY: string; + StartZ: string; + ArcCenX: string; + ArcCenY: string; + ArcCenZ: string; + MidX: string; + MidY: string; + MidZ: string; + ArcCen: string; + } + export enum GeCurveType { + Seg = "Seg", + Arc = "Arc" + } + export interface EntityParamTable { + CODE: string; + D: string; + EXTEND_BACK: string; + EXTEND_DOWN: string; + EXTEND_FRONT: string; + EXTEND_LEFT: string; + EXTEND_RIGHT: string; + EXTEND_UP: string; + FRAME_ID?: string; + H: string; + HANDLE_ANG?: string; + HANDLE_HEIGHT?: string; + HANDLE_HOLECOUNT?: string; + HANDLE_PITCHROW?: string; + HANDLE_TYPE?: string; + HANDLE_YVALUE?: string; + HIDE_FLAG: string; + ID: string; + IS_QUOTED: string; + MTL: string; + MTL_BYOWNER: string; + MTL_DIR: string; + NAME: string; + OPEN_STATUS: string; + OPEN_TYPE: string; + PRO_NOTES: string; + QUOTE_CODE: string; + RD: string; + RH: string; + RW: string; + STD: string; + W: string; + ABNORMAL?: string; + DISP_BORDER?: string; + EDGE?: string; + LINK_DOWN?: string; + LINK_LEFT?: string; + LINK_RIGHT?: string; + LINK_UP?: string; + MTL_BASE?: string; + MTL_NAME?: string; + MTL_SALENAME?: string; + MTL_SIDE?: string; + SALES_MARKET?: string; + YG_AZBZ?: string; + YG_SJBZ?: string; + AZBZ?: string; + SJBZ?: string; + TrepanningDirection?: string; + FB1?: string; + FB2?: string; + FB3?: string; + FB4?: string; + SlotValue_Up?: string; + SlotValue_Down?: string; + SlotValue_Left?: string; + SlotValue_Right?: string; + CavityLink1?: string; + CavityLink2?: string; + CavityLink3?: string; + CavityLink4?: string; + GroovesAddLength?: string; + GroovesAddWidth?: string; + GroovesAddDepth?: string; + KnifeRadius?: string; + BoardType?: number; + } + export {}; +} +//# sourceMappingURL=JiaJuInterface.d.ts.map \ No newline at end of file diff --git a/types/Add-on/JiaJu/Import/JiaJuInterface.d.ts.map b/types/Add-on/JiaJu/Import/JiaJuInterface.d.ts.map new file mode 100644 index 0000000..a42dc16 --- /dev/null +++ b/types/Add-on/JiaJu/Import/JiaJuInterface.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"JiaJuInterface.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/JiaJu/Import/JiaJuInterface.ts"],"names":[],"mappings":"AACA,yBAAiB,KAAK,CACtB;IACI,MAAM,WAAW,GAAG;QAEhB,KAAK,EAAE,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC;QACrB,KAAK,EAAE,EAAE,CAAC;KACb;IAGD,KAAK,GAAG,GAAG,MAAM,CAAC;IAElB,MAAM,WAAW,KAAK;QAElB,IAAI,EAAE,IAAI,EAAE,CAAC;KAChB;IAED,MAAM,WAAW,IAAI;QAEjB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,IAAI,EAAE,CAAC;KAChB;IAED,MAAM,WAAW,KAAK;KAErB;IAED,MAAM,WAAW,QAAQ;QAErB,OAAO,EAAE,YAAY,EAAE,CAAC;KAC3B;IAGD,MAAM,MAAM,YAAY;QAEpB,KAAK,KAAK;QACV,EAAE,iBAAO;KACZ;IAED,MAAM,WAAW,WAAW;QAExB,YAAY,EAAE,YAAY,CAAC;QAC3B,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;QAClD,OAAO,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GACtD,OAAO,GAAG,YAAY,GAAG,SAAS,GAAG,WAAW,CAAC;QACjD,SAAS,EAAE,MAAM,CAAC;QAElB,IAAI,EAAE,MAAM,CAAC;QAGb,UAAU,EAAE,MAAM,CAAC;QACnB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,GAAG,EAAE,GAAG,CAAC;QACT,UAAU,EAAE,GAAG,CAAC;KACnB;IAGD,MAAM,WAAW,YAAa,SAAQ,WAAW;QAE7C,MAAM,EAAE,MAAM,CAAC;QAEf,UAAU,EAAE,eAAe,EAAE,CAAC;QAC9B,QAAQ,EAAE,CAAC,aAAa,CAAC,CAAC;KAC7B;IAGD,MAAM,WAAW,eAAe;QAE5B,IAAI,EAAE,MAAM,CAAC;QACb,CAAC,EAAE,MAAM,CAAC;QACV,IAAI,EAAE,IAAI,CAAC;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,CAAC,EAAE,MAAM,CAAC;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,YAAY,EAAE,MAAM,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,GAAG,EAAE,MAAM,CAAC;QACZ,CAAC,EAAE,MAAM,CAAC;QACV,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACtB;IAED,MAAM,WAAW,aAAa;QAE1B,OAAO,EAAE,aAAa,EAAE,CAAC;KAC5B;IAED,MAAM,WAAW,aAAc,SAAQ,WAAW;QAE9C,SAAS,CAAC,EAAE,WAAW,GAAG,cAAc,GAAG,iBAAiB,CAAC;QAE7D,UAAU,EAAE,gBAAgB,EAAE,CAAC;QAC/B,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;KACxB;IAED,MAAM,WAAW,WAAY,SAAQ,WAAW;QAE5C,UAAU,EAAE,gBAAgB,EAAE,CAAC;KAClC;IAED,MAAM,WAAW,OAAO;QAEpB,IAAI,EAAE,IAAI,EAAE,CAAC;QACb,SAAS,EAAE,IAAI,EAAE,CAAC;QAClB,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC;KACjB;IAED,MAAM,WAAW,IAAI;QAEjB,IAAI,EAAE,IAAI,EAAE,CAAC;KAChB;IAED,MAAM,WAAW,IAAI;QAEjB,OAAO,EAAE,OAAO,EAAE,CAAC;KACtB;IAED,MAAM,WAAW,OAAO;QAEpB,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,WAAW,CAAC;QACzB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QAGf,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAEhB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QAEb,MAAM,EAAE,MAAM,CAAC;KAClB;IAED,MAAM,MAAM,WAAW;QAEnB,GAAG,QAAQ;QACX,GAAG,QAAQ;KACd;IAGD,MAAM,WAAW,gBAAgB;QAE7B,IAAI,EAAE,MAAM,CAAC;QACb,CAAC,EAAE,MAAM,CAAC;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,CAAC,EAAE,MAAM,CAAC;QACV,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,WAAW,EAAE,MAAM,CAAC;QACpB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,CAAC,EAAE,MAAM,CAAC;QACV,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,CAAC;QAGtB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QAEjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QAEd,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;KACtB;;CACJ"} \ No newline at end of file diff --git a/types/Add-on/Join.d.ts.map b/types/Add-on/Join.d.ts.map index cdf2dd0..c854143 100644 --- a/types/Add-on/Join.d.ts.map +++ b/types/Add-on/Join.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Join.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Join.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,qBAAa,YAAa,YAAW,OAAO;IAElC,IAAI;IA4EV,OAAO,CAAC,YAAY;YAON,SAAS;IASvB,OAAO,CAAC,YAAY;YAYN,OAAO;IAgDrB,OAAO,CAAC,aAAa;IAwBrB,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,eAAe;CA0E1B"} \ No newline at end of file +{"version":3,"file":"Join.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Join.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,qBAAa,YAAa,YAAW,OAAO;IAElC,IAAI;IA4EV,OAAO,CAAC,YAAY;YAON,SAAS;IASvB,OAAO,CAAC,YAAY;YAYN,OAAO;IAgDrB,OAAO,CAAC,aAAa;IAwBrB,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,eAAe;CA4E1B"} \ No newline at end of file diff --git a/types/Add-on/KJL/Import/KJLParse.d.ts b/types/Add-on/KJL/Import/KJLParse.d.ts index 36ed30e..c27b87b 100644 --- a/types/Add-on/KJL/Import/KJLParse.d.ts +++ b/types/Add-on/KJL/Import/KJLParse.d.ts @@ -9,7 +9,7 @@ export declare function ParseCabNameMap(data: KJL_AssemblyModel[]): Map; export declare function ParseBT(params: KJL_Parameter[]): number; export declare function ParseKMFX(params: KJL_Parameter[]): BoardOpenDir; -export declare function ParseBCBZ(params: KJL_Parameter[]): string; +export declare function ParseBCBZ(params: KJL_Parameter[], remarks: [string, string][]): string; /** * 分析Path的外轮廓和内网洞 * @param path diff --git a/types/Add-on/KJL/Import/KJLParse.d.ts.map b/types/Add-on/KJL/Import/KJLParse.d.ts.map index 168c3cc..bce1ba1 100644 --- a/types/Add-on/KJL/Import/KJLParse.d.ts.map +++ b/types/Add-on/KJL/Import/KJLParse.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"KJLParse.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/KJL/Import/KJLParse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAE,MAAM,OAAO,CAAC;AAItC,OAAO,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAiB,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,oDAAoD,CAAC;AAErF,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAgB,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAe,MAAM,gBAAgB,CAAC;AACtJ,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAKxD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAQvE;AAGD,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAa9E;AAGD,wBAAsB,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,8BAmBtH;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CASvD;AAGD,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,YAAY,CAa/D;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CASzD;AAcD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,aAAa,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAuGtI;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAkBvE"} \ No newline at end of file +{"version":3,"file":"KJLParse.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/KJL/Import/KJLParse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAE,MAAM,OAAO,CAAC;AAItC,OAAO,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAiB,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,oDAAoD,CAAC;AAErF,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAgB,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAe,MAAM,gBAAgB,CAAC;AACtJ,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAKxD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,cAAc,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAQvE;AAGD,wBAAgB,eAAe,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAa9E;AAGD,wBAAsB,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,8BAmBtH;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CASvD;AAGD,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,YAAY,CAa/D;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,MAAM,CAetF;AAcD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,QAAQ,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,aAAa,GAAG,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAuGtI;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAkBvE"} \ No newline at end of file diff --git a/types/Add-on/KJL/KJLImportConfig/KJLConfig.d.ts b/types/Add-on/KJL/KJLImportConfig/KJLConfig.d.ts index 164d6ab..4c78af0 100644 --- a/types/Add-on/KJL/KJLImportConfig/KJLConfig.d.ts +++ b/types/Add-on/KJL/KJLImportConfig/KJLConfig.d.ts @@ -1,7 +1,7 @@ import React from "react"; import { KJLImportConfigStore } from "./KJLImportConfigStore"; export declare enum KJLUseName { - modelName = 0, + modelName = 0,//模型名称 modelBrandGoodName = 1 } export default class KJLConfig extends React.Component<{ diff --git a/types/Add-on/KJL/KJLImportConfig/KJLConfig.d.ts.map b/types/Add-on/KJL/KJLImportConfig/KJLConfig.d.ts.map index b50e42d..ebf8566 100644 --- a/types/Add-on/KJL/KJLImportConfig/KJLConfig.d.ts.map +++ b/types/Add-on/KJL/KJLImportConfig/KJLConfig.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"KJLConfig.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/KJL/KJLImportConfig/KJLConfig.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,oBAAY,UAAU;IAElB,SAAS,IAAI;IACb,kBAAkB,IAAI;CACzB;AAED,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;CAAE,CAAC;IAEpF,OAAO,CAAC,QAAQ,CAwBd;IAEF,MAAM;CAqCT"} \ No newline at end of file +{"version":3,"file":"KJLConfig.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/KJL/KJLImportConfig/KJLConfig.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,oBAAY,UAAU;IAElB,SAAS,IAAI,CAAE,MAAM;IACrB,kBAAkB,IAAI;CACzB;AAED,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;CAAE,CAAC;IAEpF,OAAO,CAAC,QAAQ,CAwBd;IAEF,MAAM;CAqCT"} \ No newline at end of file diff --git a/types/Add-on/KJL/KJLImportConfig/KJLImportConfigStore.d.ts b/types/Add-on/KJL/KJLImportConfig/KJLImportConfigStore.d.ts index 1e4e322..c4d73f3 100644 --- a/types/Add-on/KJL/KJLImportConfig/KJLImportConfigStore.d.ts +++ b/types/Add-on/KJL/KJLImportConfig/KJLImportConfigStore.d.ts @@ -7,6 +7,7 @@ import { KJLImportConfigOption } from "./KJLImportConfigOption"; export interface MaterialOption { keyIndex: number; kjlName: string; + id: string; materialName: string; url: string; isSelect: boolean; @@ -24,11 +25,11 @@ export declare class KJLImportConfigStore extends Singleton implements IConfigSt uiOption: IUiOption; materialList: MaterialOption[]; selectAll: boolean; - private queue; - materialMap: Map>; + isLoading: boolean; + }>; ImpExpSuffix: string; get UIOption(): IUiOption; InitOption(): void; @@ -38,7 +39,8 @@ export declare class KJLImportConfigStore extends Singleton implements IConfigSt private ConvertUIData; private OrderUIData; LoadMaterials: () => Promise; - AsyncLoadMaterials: () => Promise; + materialLoadList: Set; + updataMaterialList(id: string): Promise; GetMaterialInfo: (material_id: string) => Promise<{ materialName: string; url: string; diff --git a/types/Add-on/KJL/KJLImportConfig/KJLImportConfigStore.d.ts.map b/types/Add-on/KJL/KJLImportConfig/KJLImportConfigStore.d.ts.map index 34c76fa..3d58351 100644 --- a/types/Add-on/KJL/KJLImportConfig/KJLImportConfigStore.d.ts.map +++ b/types/Add-on/KJL/KJLImportConfig/KJLImportConfigStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"KJLImportConfigStore.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/KJL/KJLImportConfig/KJLImportConfigStore.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,kDAAkD,CAAC;AAEjF,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAyB,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGvF,MAAM,WAAW,cAAc;IAE3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACrB;AACD,UAAU,gBAAgB;IAEtB,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IACrC,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;CACzC;AAGD,qBAAa,oBAAqB,SAAQ,SAAU,YAAW,YAAY;IAE3D,UAAU,EAAE,MAAM,CAAQ;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,QAAQ,EAAE,qBAAqB,CAAgC;IAC3E,UAAU,EAAE,UAAU,CAAwB;IAClC,QAAQ,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACtC,YAAY,EAAE,cAAc,EAAE,CAAM;IACpC,SAAS,UAAS;IAC9B,OAAO,CAAC,KAAK,CAAoC;IACjD,WAAW;sBAA2C,MAAM;aAAO,MAAM;QAAQ;IACjF,YAAY,SAAW;IAEvB,IAAI,QAAQ,gCAQX;IACD,UAAU;IAUV,UAAU;IAgCV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,qBAAqB,CAAC;IAYtD,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,qBAAqB,CAAC;IAuBvD,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,WAAW;IAWnB,aAAa,sBAeX;IAEF,kBAAkB,sBAuBhB;IAEF,eAAe,gBAAiB,MAAM,KAAG,QAAQ;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;KAAE,CAAC,CAetF;IAEI,kBAAkB,CAAC,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC;IAiBjD,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE;CAmBzC"} \ No newline at end of file +{"version":3,"file":"KJLImportConfigStore.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/KJL/KJLImportConfig/KJLImportConfigStore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,kDAAkD,CAAC;AAEjF,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAyB,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAGvF,MAAM,WAAW,cAAc;IAE3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACrB;AACD,UAAU,gBAAgB;IAEtB,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IACrC,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;CACzC;AAGD,qBAAa,oBAAqB,SAAQ,SAAU,YAAW,YAAY;IAE3D,UAAU,EAAE,MAAM,CAAQ;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,QAAQ,EAAE,qBAAqB,CAAgC;IAC3E,UAAU,EAAE,UAAU,CAAwB;IAClC,QAAQ,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACtC,YAAY,EAAE,cAAc,EAAE,CAAM;IACpC,SAAS,UAAS;IAC9B,WAAW;sBAAmC,MAAM;aAAO,MAAM;mBAAa,OAAO;OAAO;IAC5F,YAAY,SAAW;IAEvB,IAAI,QAAQ,gCAQX;IACD,UAAU;IAUV,UAAU;IAgCV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,qBAAqB,CAAC;IAatD,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,qBAAqB,CAAC;IAuBvD,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,WAAW;IAWnB,aAAa,sBAaX;IAEF,gBAAgB,EAAE,GAAG,CAAC,cAAc,CAAC,CAAa;IAE5C,kBAAkB,CAAC,EAAE,EAAE,MAAM;IAenC,eAAe,gBAAiB,MAAM,KAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;KAAE,CAAC,CAetF;IAEI,kBAAkB,CAAC,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC;IAiBjD,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE;CAmBzC"} \ No newline at end of file diff --git a/types/Add-on/KJL/KJLImportConfig/KJLMaterialMap.d.ts b/types/Add-on/KJL/KJLImportConfig/KJLMaterialMap.d.ts index 70f1836..290ae04 100644 --- a/types/Add-on/KJL/KJLImportConfig/KJLMaterialMap.d.ts +++ b/types/Add-on/KJL/KJLImportConfig/KJLMaterialMap.d.ts @@ -3,7 +3,16 @@ import { KJLImportConfigStore } from "./KJLImportConfigStore"; export declare class KJLMaterialMap extends React.Component<{ store: KJLImportConfigStore; }> { + private scrollEl; + materialListRef: React.RefObject; + timer: any; componentWillUnmount(): void; + componentDidMount(): void; + componentDidUpdate(prevProps: Readonly<{ + store: KJLImportConfigStore; + }>, prevState: Readonly<{}>, snapshot?: any): void; + loadPromise(material: any): Promise; + LoadMaterialInfo: () => Promise; render(): JSX.Element; private handleSelectAll; handleOnekeyDelete: () => Promise; diff --git a/types/Add-on/KJL/KJLImportConfig/KJLMaterialMap.d.ts.map b/types/Add-on/KJL/KJLImportConfig/KJLMaterialMap.d.ts.map index e7b102d..5bf5793 100644 --- a/types/Add-on/KJL/KJLImportConfig/KJLMaterialMap.d.ts.map +++ b/types/Add-on/KJL/KJLImportConfig/KJLMaterialMap.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"KJLMaterialMap.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/KJL/KJLImportConfig/KJLMaterialMap.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;CAAE,CAAC;IAEjF,oBAAoB,IAAI,IAAI;IAI5B,MAAM;IAkDN,OAAO,CAAC,eAAe,CAUrB;IAEF,kBAAkB,sBAmBhB;CACL"} \ No newline at end of file +{"version":3,"file":"KJLMaterialMap.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/KJL/KJLImportConfig/KJLMaterialMap.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;CAAE,CAAC;IAEjF,OAAO,CAAC,QAAQ,CAAqC;IACrD,eAAe,kCAAqC;IACpD,KAAK,MAAQ;IACb,oBAAoB,IAAI,IAAI;IAK5B,iBAAiB,IAAI,IAAI;IAKzB,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC;QAAE,KAAK,EAAE,oBAAoB,CAAC;KAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI;IAKlH,WAAW,CAAC,QAAQ,KAAA;IAwC1B,gBAAgB,sBAed;IAEF,MAAM;IAiEN,OAAO,CAAC,eAAe,CAUrB;IAEF,kBAAkB,sBAmBhB;CACL"} \ No newline at end of file diff --git a/types/Add-on/KJL/KJLImportConfig/KJLMaterialMapData.d.ts.map b/types/Add-on/KJL/KJLImportConfig/KJLMaterialMapData.d.ts.map index 53825c7..37652e8 100644 --- a/types/Add-on/KJL/KJLImportConfig/KJLMaterialMapData.d.ts.map +++ b/types/Add-on/KJL/KJLImportConfig/KJLMaterialMapData.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"KJLMaterialMapData.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/KJL/KJLImportConfig/KJLMaterialMapData.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE9E,UAAU,iBAAiB;IAEvB,KAAK,EAAE,oBAAoB,CAAC;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACjB;AACD,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC;IAEtE,OAAO,CAAC,UAAU,CAAuC;IAClD,aAAa,2CAAyB;IAE7C,UAAU,OAAQ,WAAW,UAW3B;IACF,WAAW,SAAU;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,UAOvE;IACF,gBAAgB,aAmBd;IACF,OAAO,CAAC,oBAAoB,CA8B1B;IACF,MAAM;IAgEN,oBAAoB,MAAa,MAAM,mBAWrC;CACL"} \ No newline at end of file +{"version":3,"file":"KJLMaterialMapData.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/KJL/KJLImportConfig/KJLMaterialMapData.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAQ1B,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE9E,UAAU,iBAAiB;IAEvB,KAAK,EAAE,oBAAoB,CAAC;IAC5B,QAAQ,EAAE,cAAc,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACjB;AACD,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC;IAEtE,OAAO,CAAC,UAAU,CAAuC;IAClD,aAAa,2CAAyB;IAE7C,UAAU,OAAQ,WAAW,UAW3B;IACF,WAAW,SAAU;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,UAOvE;IACF,gBAAgB,aAmBd;IACF,OAAO,CAAC,oBAAoB,CA8B1B;IACF,MAAM;IAgEN,oBAAoB,MAAa,MAAM,mBAWrC;CACL"} \ No newline at end of file diff --git a/types/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.d.ts b/types/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.d.ts index cd0fe9e..61e8847 100644 --- a/types/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.d.ts +++ b/types/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.d.ts @@ -3,6 +3,7 @@ import { CylinderHole } from "../../DatabaseServices/3DSolid/CylinderHole"; import { Board } from "../../DatabaseServices/Entity/Board"; import { Entity } from "../../DatabaseServices/Entity/Entity"; import { IHardwareType } from "../../Production/Product"; +import { ISealingData } from "../../UI/Store/OptionInterface/IHighSealedItem"; export interface ICountType { name?: string; count: number; @@ -10,9 +11,11 @@ export interface ICountType { count2?: number | string; unit?: string; length?: number; + goodsId?: string; + goodsSn?: string; } export type GetCountOption = { - sealGruopKey: (key: string, block: Board, size: number) => void; + sealGruopKey: (key: string, block: Board, thickness: string, data: ISealingData) => void; getHoles?: (name: string, hole: CylinderHole) => void; }; declare class LookOverBoardInfosTool { @@ -30,6 +33,7 @@ declare class LookOverBoardInfosTool { ParseHardwareCount(k: string, v: IHardwareType[], hardwareCount: ICountType[]): void; ParseProcessingGroupTags: (entity: Entity) => string[]; private UpdateBoardMap; + GetTranslatedHardwareRemarks: (entity: IHardwareType, dataLength: number) => string[]; GetBoardThickness(br: Board): string; GetBoardsArea(brs: Board[]): string; } diff --git a/types/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.d.ts.map b/types/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.d.ts.map index e0b1c6c..f01d39a 100644 --- a/types/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.d.ts.map +++ b/types/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"LookOverBoardInfosTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAOhC,OAAO,EAAE,YAAY,EAAiB,MAAM,6CAA6C,CAAC;AAG1F,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAO9D,OAAO,EAAE,aAAa,EAAc,MAAM,0BAA0B,CAAC;AAIrE,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,aAAa;IAEzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AACD,MAAM,MAAM,cAAc,GAAG;IAAE,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;CAAE,CAAC;AACzJ,cAAM,sBAAsB;IAExB,OAAO,CAAC,YAAY,CAAoD;IACxE,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,QAAQ,CAA8B;IAE9C,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,aAAa,CAAC,EAAE,EAAE,OAAO,GAAE,cAAqB,EAAE,iBAAiB,CAAC,EAAE,OAAO;;;;;;IA4CpG,OAAO,CAAC,MAAM;IAgMd,SAAS,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM;IAMjE,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE;IA+C7E,wBAAwB,WAAY,MAAM,cAQxC;IACF,OAAO,CAAC,cAAc;IAmBtB,iBAAiB,CAAC,EAAE,EAAE,KAAK;IAQ3B,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE;CAc7B;AAED,eAAO,MAAM,sBAAsB,wBAA+B,CAAC"} \ No newline at end of file +{"version":3,"file":"LookOverBoardInfosTool.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/LookOverBoardInfos/LookOverBoardInfosTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAOhC,OAAO,EAAE,YAAY,EAAiB,MAAM,6CAA6C,CAAC;AAG1F,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAO9D,OAAO,EAAE,aAAa,EAAc,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAC;AAG9E,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,aAAa;IAEzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AACD,MAAM,MAAM,cAAc,GAAG;IAAE,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;CAAE,CAAC;AAClL,cAAM,sBAAsB;IAExB,OAAO,CAAC,YAAY,CAAoD;IACxE,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,QAAQ,CAA8B;IAE9C,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,aAAa,CAAC,EAAE,EAAE,OAAO,GAAE,cAAqB,EAAE,iBAAiB,CAAC,EAAE,OAAO;;;;;;IAgEpG,OAAO,CAAC,MAAM;IA8Ld,SAAS,CAAC,EAAE,EAAE,aAAa,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM;IAMjE,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE;IA+C7E,wBAAwB,WAAY,MAAM,cAQxC;IACF,OAAO,CAAC,cAAc;IAoBtB,4BAA4B,WAAY,aAAa,cAAc,MAAM,cAKvE;IACF,iBAAiB,CAAC,EAAE,EAAE,KAAK;IAQ3B,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE;CAc7B;AAED,eAAO,MAAM,sBAAsB,wBAA+B,CAAC"} \ No newline at end of file diff --git a/types/Add-on/Mirror.d.ts b/types/Add-on/Mirror.d.ts index 7c3b342..53816e8 100644 --- a/types/Add-on/Mirror.d.ts +++ b/types/Add-on/Mirror.d.ts @@ -1,4 +1,5 @@ import { Vector3 } from "three"; +import { Board } from "../DatabaseServices/Entity/Board"; import { Entity } from "../DatabaseServices/Entity/Entity"; import { Command } from "../Editor/CommandMachine"; import { UpdateEntityDrawTask } from "./UpdateEntityDrawTask"; @@ -6,5 +7,6 @@ export declare class MirrorCommand implements Command { exec(): Promise; UpdateTask: UpdateEntityDrawTask; MirrorEntitys(ens: Entity[], p1: Vector3, p2: Vector3, planeNormal: Vector3): void; + MirrorSideModel(br: Board): void; } //# sourceMappingURL=Mirror.d.ts.map \ No newline at end of file diff --git a/types/Add-on/Mirror.d.ts.map b/types/Add-on/Mirror.d.ts.map index 4c4b6a9..764ea15 100644 --- a/types/Add-on/Mirror.d.ts.map +++ b/types/Add-on/Mirror.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Mirror.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Mirror.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AAazC,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAI3D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAM9D,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;IAmGV,UAAU,EAAE,oBAAoB,CAAC;IACjC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO;CAqB9E"} \ No newline at end of file +{"version":3,"file":"Mirror.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Mirror.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AAUzC,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAGzD,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAK3D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAKnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAM9D,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;IAmGV,UAAU,EAAE,oBAAoB,CAAC;IACjC,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO;IA2B3E,eAAe,CAAC,EAAE,EAAE,KAAK;CA4B5B"} \ 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 14caac3..08ba5aa 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":"AAcA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAYtD,qBAAa,mBAAoB,YAAW,OAAO;IAE/C,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,aAAa,CAAoD;IACzE,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAK;IAEb,IAAI;IAgGV,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,YAAY;IA+DpB,OAAO,CAAC,aAAa;IA0Cf,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA+D7C,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,kBAAkB;CAmG7B"} \ No newline at end of file +{"version":3,"file":"OpenCabinet.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/OpenCabinet/OpenCabinet.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAYtD,qBAAa,mBAAoB,YAAW,OAAO;IAE/C,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,aAAa,CAAoD;IACzE,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAK;IAEb,IAAI;IAgGV,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,YAAY;IAgEpB,OAAO,CAAC,aAAa;IA0Cf,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA+D7C,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,kBAAkB;CAmG7B"} \ No newline at end of file diff --git a/types/Add-on/ParseDoorRelatesInfo/DoorRelatesInfoStore.d.ts.map b/types/Add-on/ParseDoorRelatesInfo/DoorRelatesInfoStore.d.ts.map index 99985f7..3a5fab3 100644 --- a/types/Add-on/ParseDoorRelatesInfo/DoorRelatesInfoStore.d.ts.map +++ b/types/Add-on/ParseDoorRelatesInfo/DoorRelatesInfoStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DoorRelatesInfoStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ParseDoorRelatesInfo/DoorRelatesInfoStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iDAAiD,CAAC;AAGxF,qBAAa,oBAAqB,SAAQ,SAAU,YAAW,YAAY;IAEvE,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAChB,QAAQ,EAAE,qBAAqB,CAAgC;IAC3E,UAAU;IAIV,UAAU;IAQV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,qBAAqB,CAAC;CAIzD;AAED,eAAO,MAAM,oBAAoB,sBAA6D,CAAC"} \ No newline at end of file +{"version":3,"file":"DoorRelatesInfoStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ParseDoorRelatesInfo/DoorRelatesInfoStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iDAAiD,CAAC;AAGxF,qBAAa,oBAAqB,SAAQ,SAAU,YAAW,YAAY;IAEvE,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAChB,QAAQ,EAAE,qBAAqB,CAAgC;IAC3E,UAAU;IAYV,UAAU;IAQV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,qBAAqB,CAAC;CAgBzD;AAED,eAAO,MAAM,oBAAoB,EAAyC,oBAAoB,CAAC"} \ No newline at end of file diff --git a/types/Add-on/ParseDoorRelatesInfo/ParseHingeRemarks.d.ts b/types/Add-on/ParseDoorRelatesInfo/ParseHingeRemarks.d.ts index 5e73fd8..ce229c0 100644 --- a/types/Add-on/ParseDoorRelatesInfo/ParseHingeRemarks.d.ts +++ b/types/Add-on/ParseDoorRelatesInfo/ParseHingeRemarks.d.ts @@ -5,6 +5,7 @@ interface Props { key: string; checked: boolean; }[]; + hingeDecimalCount?: number; } declare const ParseHingeRemarks: FC; export default ParseHingeRemarks; diff --git a/types/Add-on/ParseDoorRelatesInfo/ParseHingeRemarks.d.ts.map b/types/Add-on/ParseDoorRelatesInfo/ParseHingeRemarks.d.ts.map index 32439ac..1af24c6 100644 --- a/types/Add-on/ParseDoorRelatesInfo/ParseHingeRemarks.d.ts.map +++ b/types/Add-on/ParseDoorRelatesInfo/ParseHingeRemarks.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParseHingeRemarks.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ParseDoorRelatesInfo/ParseHingeRemarks.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAA+B,MAAM,OAAO,CAAC;AAMxD,UAAU,KAAK;IAEX,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;KAAE,EAAE,CAAC;CAChE;AAED,QAAA,MAAM,iBAAiB,EAAE,EAAE,CAAC,KAAK,CAwFhC,CAAC;AACF,eAAe,iBAAiB,CAAC"} \ No newline at end of file +{"version":3,"file":"ParseHingeRemarks.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ParseDoorRelatesInfo/ParseHingeRemarks.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAA+B,MAAM,OAAO,CAAC;AAOxD,UAAU,KAAK;IAEX,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;KAAE,EAAE,CAAC;IAC7D,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,QAAA,MAAM,iBAAiB,EAAE,EAAE,CAAC,KAAK,CAyGhC,CAAC;AACF,eAAe,iBAAiB,CAAC"} \ No newline at end of file diff --git a/types/Add-on/Purge.d.ts.map b/types/Add-on/Purge.d.ts.map index 53f558c..7383f6c 100644 --- a/types/Add-on/Purge.d.ts.map +++ b/types/Add-on/Purge.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Purge.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Purge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAIxD,wBAAgB,KAAK,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAiFxC;AAGD,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,QAoBjD"} \ No newline at end of file +{"version":3,"file":"Purge.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Purge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAKxD,wBAAgB,KAAK,CAAC,EAAE,EAAE,QAAQ,GAAG,IAAI,CAkGxC;AAGD,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,QAoBjD"} \ No newline at end of file diff --git a/types/Add-on/ResetCustomCommand.d.ts b/types/Add-on/ResetCustomCommand.d.ts index 99daba7..3bccc87 100644 --- a/types/Add-on/ResetCustomCommand.d.ts +++ b/types/Add-on/ResetCustomCommand.d.ts @@ -2,4 +2,14 @@ import { Command } from "../Editor/CommandMachine"; export declare class Command_ResetCustomCommand implements Command { exec(): Promise; } +export declare class Command_DownloadCustomCommand implements Command { + NoHistory: boolean; + Transparency: boolean; + exec(): Promise; +} +export declare class Command_UploadCustomCommand implements Command { + NoHistory: boolean; + Transparency: boolean; + exec(): Promise; +} //# sourceMappingURL=ResetCustomCommand.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ResetCustomCommand.d.ts.map b/types/Add-on/ResetCustomCommand.d.ts.map index b777596..7b80ac1 100644 --- a/types/Add-on/ResetCustomCommand.d.ts.map +++ b/types/Add-on/ResetCustomCommand.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ResetCustomCommand.d.ts","sourceRoot":"","sources":["../../../src/Add-on/ResetCustomCommand.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,qBAAa,0BAA2B,YAAW,OAAO;IAEhD,IAAI;CAcb"} \ No newline at end of file +{"version":3,"file":"ResetCustomCommand.d.ts","sourceRoot":"","sources":["../../../src/Add-on/ResetCustomCommand.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,qBAAa,0BAA2B,YAAW,OAAO;IAEhD,IAAI;CAcb;AAGD,qBAAa,6BAA8B,YAAW,OAAO;IAEzD,SAAS,UAAQ;IACjB,YAAY,UAAQ;IACd,IAAI;CAIb;AAqBD,qBAAa,2BAA4B,YAAW,OAAO;IAEvD,SAAS,UAAQ;IACjB,YAAY,UAAQ;IACd,IAAI;CAuDb"} \ No newline at end of file diff --git a/types/Add-on/Rotate.d.ts.map b/types/Add-on/Rotate.d.ts.map index 681f6a4..db4c927 100644 --- a/types/Add-on/Rotate.d.ts.map +++ b/types/Add-on/Rotate.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Rotate.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Rotate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,OAAO,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,qBAAa,cAAe,YAAW,OAAO;IAEpC,IAAI;IA2EV,UAAU,EAAE,oBAAoB,CAAC;IACjC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,UAAQ,EAAE,WAAW,UAAQ;CAsBzF;AAGD,qBAAa,mBAAoB,YAAW,OAAO;IAEzC,IAAI;IA6BV,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,UAAQ,EAAE,WAAW,UAAQ;CAmBzF"} \ No newline at end of file +{"version":3,"file":"Rotate.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Rotate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,OAAO,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAKnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,qBAAa,cAAe,YAAW,OAAO;IAEpC,IAAI;IA2EV,UAAU,EAAE,oBAAoB,CAAC;IACjC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,UAAQ,EAAE,WAAW,UAAQ;CA6BzF;AAGD,qBAAa,mBAAoB,YAAW,OAAO;IAEzC,IAAI;IA6BV,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,MAAM,UAAQ,EAAE,WAAW,UAAQ;CAmBzF"} \ No newline at end of file diff --git a/types/Add-on/Save.d.ts.map b/types/Add-on/Save.d.ts.map index 0b4549a..b5bf700 100644 --- a/types/Add-on/Save.d.ts.map +++ b/types/Add-on/Save.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Save.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Save.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAWnD,qBAAa,IAAK,YAAW,OAAO;IAEhC,SAAS,UAAQ;IACX,IAAI;CA0Jb;AAED,qBAAa,GAAI,YAAW,OAAO;IAE/B,SAAS,UAAQ;IACX,IAAI;CAMb;AAED,qBAAa,MAAO,YAAW,OAAO;IAElC,SAAS,UAAQ;IACX,IAAI;CA8Cb;AAED,qBAAa,WAAY,YAAW,OAAO;IAEvC,SAAS,UAAQ;IACX,IAAI;CAUb;AAED,qBAAa,SAAU,YAAW,OAAO;IAErC,SAAS,UAAQ;IACX,IAAI;CAoFb;AAGD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,CAAC,EAAE,MAAM,QA8DrD"} \ No newline at end of file +{"version":3,"file":"Save.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Save.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAWnD,qBAAa,IAAK,YAAW,OAAO;IAEhC,SAAS,UAAQ;IACX,IAAI;CA0Jb;AAED,qBAAa,GAAI,YAAW,OAAO;IAE/B,SAAS,UAAQ;IACX,IAAI;CAMb;AAED,qBAAa,MAAO,YAAW,OAAO;IAElC,SAAS,UAAQ;IACX,IAAI;CA8Cb;AAED,qBAAa,WAAY,YAAW,OAAO;IAEvC,SAAS,UAAQ;IACX,IAAI;CAUb;AAED,qBAAa,SAAU,YAAW,OAAO;IAErC,SAAS,UAAQ;IACX,IAAI;CAoFb;AAGD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,CAAC,EAAE,MAAM,QAgErD"} \ No newline at end of file diff --git a/types/Add-on/Scale.d.ts.map b/types/Add-on/Scale.d.ts.map index 351f13a..cbfc370 100644 --- a/types/Add-on/Scale.d.ts.map +++ b/types/Add-on/Scale.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Scale.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Scale.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;IAwHV,OAAO,CAAC,KAAK;CAchB"} \ No newline at end of file +{"version":3,"file":"Scale.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Scale.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAMnD,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;IAwHV,OAAO,CAAC,KAAK;CAchB"} \ No newline at end of file diff --git a/types/Add-on/SetSmoothEdge/SetSmoothEdge.d.ts b/types/Add-on/SetSmoothEdge/SetSmoothEdge.d.ts index 49cf285..8557241 100644 --- a/types/Add-on/SetSmoothEdge/SetSmoothEdge.d.ts +++ b/types/Add-on/SetSmoothEdge/SetSmoothEdge.d.ts @@ -2,4 +2,10 @@ import { Command } from "../../Editor/CommandMachine"; export declare class SetSmoothEdge implements Command { exec(): Promise; } +export declare enum SmoothEdgeType { + Thick = "\u5C01\u539A\u8FB9", + Thin = "\u5C01\u8584\u8FB9", + NoEdge = "\u4E0D\u5C01\u8FB9", + NoChange = "\u4E0D\u6539\u53D8" +} //# sourceMappingURL=SetSmoothEdge.d.ts.map \ No newline at end of file diff --git a/types/Add-on/SetSmoothEdge/SetSmoothEdge.d.ts.map b/types/Add-on/SetSmoothEdge/SetSmoothEdge.d.ts.map index ba7cf28..cbfbac2 100644 --- a/types/Add-on/SetSmoothEdge/SetSmoothEdge.d.ts.map +++ b/types/Add-on/SetSmoothEdge/SetSmoothEdge.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SetSmoothEdge.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/SetSmoothEdge/SetSmoothEdge.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAe,MAAM,6BAA6B,CAAC;AAUnE,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CAWb"} \ No newline at end of file +{"version":3,"file":"SetSmoothEdge.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/SetSmoothEdge/SetSmoothEdge.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAe,MAAM,6BAA6B,CAAC;AAWnE,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CAcb;AACD,oBAAY,cAAc;IAEtB,KAAK,uBAAQ;IACb,IAAI,uBAAQ;IACZ,MAAM,uBAAQ;IACd,QAAQ,uBAAQ;CACnB"} \ No newline at end of file diff --git a/types/Add-on/SetSmoothEdge/SetSmoothEdgeFace.d.ts.map b/types/Add-on/SetSmoothEdge/SetSmoothEdgeFace.d.ts.map index 6e26387..8723b19 100644 --- a/types/Add-on/SetSmoothEdge/SetSmoothEdgeFace.d.ts.map +++ b/types/Add-on/SetSmoothEdge/SetSmoothEdgeFace.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SetSmoothEdgeFace.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/SetSmoothEdge/SetSmoothEdgeFace.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAS5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AAgLpF,wBAAgB,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,iBAAiB,QAqCrE"} \ No newline at end of file +{"version":3,"file":"SetSmoothEdgeFace.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/SetSmoothEdge/SetSmoothEdgeFace.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAS5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iDAAiD,CAAC;AAqNpF,wBAAgB,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,iBAAiB,QA2CrE"} \ No newline at end of file diff --git a/types/Add-on/SetSmoothEdge/SmoothEdgeStore.d.ts b/types/Add-on/SetSmoothEdge/SmoothEdgeStore.d.ts index 3bcd827..0955fa5 100644 --- a/types/Add-on/SetSmoothEdge/SmoothEdgeStore.d.ts +++ b/types/Add-on/SetSmoothEdge/SmoothEdgeStore.d.ts @@ -1,15 +1,15 @@ +import { Singleton } from "../../Common/Singleton"; import { IConfigOption } from "../../UI/Components/Board/UserConfigComponent"; import { IConfigStore } from "../../UI/Store/BoardStore"; import { ISmoothEdgeOption, IUiOption } from "../../UI/Store/OptionInterface/IOptionInterface"; -export declare class SmoothEdgeStore implements IConfigStore { - option: ISmoothEdgeOption; - uiOption: IUiOption; +export declare class SmoothEdgeStore extends Singleton implements IConfigStore { configName: string; configsNames: string[]; + option: ISmoothEdgeOption; + uiOption: IUiOption; InitOption(): void; get UiOption(): IUiOption; SaveConfig(): IConfigOption; UpdateOption(cof: IConfigOption): void; } -export declare const smoothEdgeStore: SmoothEdgeStore; //# sourceMappingURL=SmoothEdgeStore.d.ts.map \ No newline at end of file diff --git a/types/Add-on/SetSmoothEdge/SmoothEdgeStore.d.ts.map b/types/Add-on/SetSmoothEdge/SmoothEdgeStore.d.ts.map index e039c00..4bc9bd4 100644 --- a/types/Add-on/SetSmoothEdge/SmoothEdgeStore.d.ts.map +++ b/types/Add-on/SetSmoothEdge/SmoothEdgeStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SmoothEdgeStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/SetSmoothEdge/SmoothEdgeStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAE/F,qBAAa,eAAgB,YAAW,YAAY;IAEpC,MAAM,EAAE,iBAAiB,CAMnC;IACU,QAAQ,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACnD,UAAU,SAAa;IACvB,YAAY,WAAe;IAC3B,UAAU;IAUV,IAAI,QAAQ,iCAKX;IACD,UAAU;IAOV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,iBAAiB,CAAC;CAWrD;AAGD,eAAO,MAAM,eAAe,iBAAwB,CAAC"} \ No newline at end of file +{"version":3,"file":"SmoothEdgeStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/SetSmoothEdge/SmoothEdgeStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAG/F,qBAAa,eAAgB,SAAQ,SAAU,YAAW,YAAY;IAEtD,UAAU,SAAQ;IAClB,YAAY,WAAU;IACtB,MAAM,EAAE,iBAAiB,CAMnC;IACU,QAAQ,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAEnD,UAAU;IAYV,IAAI,QAAQ,iCAKX;IACD,UAAU;IAOV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,iBAAiB,CAAC;CA2BrD"} \ No newline at end of file diff --git a/types/Add-on/ShareView/Command_ShareView.d.ts.map b/types/Add-on/ShareView/Command_ShareView.d.ts.map index 02186d8..02a559a 100644 --- a/types/Add-on/ShareView/Command_ShareView.d.ts.map +++ b/types/Add-on/ShareView/Command_ShareView.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Command_ShareView.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ShareView/Command_ShareView.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAWtD,qBAAa,iBAAkB,YAAW,OAAO;IAEvC,IAAI;CAmHb"} \ No newline at end of file +{"version":3,"file":"Command_ShareView.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ShareView/Command_ShareView.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAWtD,qBAAa,iBAAkB,YAAW,OAAO;IAEvC,IAAI;CAmJb"} \ No newline at end of file diff --git a/types/Add-on/ShareView/ShareViewRules.d.ts b/types/Add-on/ShareView/ShareViewRules.d.ts index 1da4d84..338a2e5 100644 --- a/types/Add-on/ShareView/ShareViewRules.d.ts +++ b/types/Add-on/ShareView/ShareViewRules.d.ts @@ -6,6 +6,14 @@ export declare const ViewAngleTypes: { name: string; viewDirection: ViewDirection; }[]; +export declare function getViewStyleTypes(mode: string): { + title: string; + cmd: CommandNames; + renderType: RenderType; +}[] | { + title: string; + renderType: RenderType; +}[]; export declare const ViewStyleTypes: { title: string; cmd: CommandNames; diff --git a/types/Add-on/ShareView/ShareViewRules.d.ts.map b/types/Add-on/ShareView/ShareViewRules.d.ts.map index 840c23c..b00e85a 100644 --- a/types/Add-on/ShareView/ShareViewRules.d.ts.map +++ b/types/Add-on/ShareView/ShareViewRules.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ShareViewRules.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ShareView/ShareViewRules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAG1E,eAAO,MAAM,cAAc;;;;GAoC1B,CAAC;AAGF,eAAO,MAAM,cAAc;;;;GAoC1B,CAAC"} \ No newline at end of file +{"version":3,"file":"ShareViewRules.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ShareView/ShareViewRules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAG1E,eAAO,MAAM,cAAc;;;;GAoC1B,CAAC;AAIF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM;;;;;;;IAoB7C;AAED,eAAO,MAAM,cAAc;;;;GAoC1B,CAAC"} \ No newline at end of file diff --git a/types/Add-on/ShareView/ShareViewStore.d.ts b/types/Add-on/ShareView/ShareViewStore.d.ts index db96522..71fb889 100644 --- a/types/Add-on/ShareView/ShareViewStore.d.ts +++ b/types/Add-on/ShareView/ShareViewStore.d.ts @@ -1,10 +1,36 @@ import { Singleton } from "../../Common/Singleton"; import { Board } from "../../DatabaseServices/Entity/Board"; +import { CameraType } from "../../GraphicsSystem/CameraUpdate"; +import { RenderType } from "../../GraphicsSystem/RenderType"; import { IConfigOption } from "../../UI/Components/Board/UserConfigComponent"; import { IConfigStore } from '../../UI/Store/BoardStore'; import { ShareBoardInfConfigurationOption } from "../../UI/Store/OptionInterface/IOptionInterface"; +interface IFileInfo { + view_id: string; + shop_id: string; + user_id: string; + name: string; + size: string; + props: IProps; + hots: string; + state: string; + favorite: string; + comments: null | string; + create_date: string; + update_date: string; + exp_date: null | string; + file_id: string; + logo: string; + file: string; + shop_name: string; + shop_logo: string; + uese: string; +} interface IProps { - showBom?: boolean | null; + showBom?: boolean; + Physical2EdgeColor?: number; + VisualStyle?: RenderType; + boardCustomNumberTextHeight?: number; } interface IOperations { showDoor: boolean; @@ -15,17 +41,52 @@ interface IOperations { isDoorOpen: boolean; showCylinderHole: boolean; } +/** + * 漫游功能开关,二进制 + */ +export declare enum RoamingSwitches { + Default = 0, + /** + * 摆件显示 + */ + Decoration = 1, + EnvMap = 4 +} export declare class ShareViewStore extends Singleton implements IConfigStore { CurSelectCabinetIndexs: number[]; RoomName: string; SelectedBoard: Board; - ViewIDErrorMsg: string; + showLight: boolean; + /** 相机类型 */ + CameraType: CameraType; Theme: 'light' | 'dark' | string; ThemeLog: 'light' | 'dark' | string; + /** + * 锁定当前模式 + */ + ViewModeLock: boolean; + /** 是否处于户型漫游模式 */ + HouseRoamingMode: boolean; + /** + * 漫游功能开关 + */ + HouseRoamingSwitches: RoamingSwitches; + /** + * 漫游模式渲染模式 + */ + HouseRoamingRenderType: RenderType; + /** 用户调整的横屏视野 */ + userFovLandscape: number; + /** 用户调整的竖屏视野 */ + userFovPortrait: number; + FileName: string; + FileInfo?: IFileInfo; Props: IProps; m_Option: ShareBoardInfConfigurationOption; viewUploadProps: ShareBoardInfConfigurationOption; configName: string; + createDims: Object[]; + HasInvailValue(): "" | "有效天数必须是大于0的整数"; SaveConfig(): IConfigOption; configsNames: string[]; InitOption(): void; diff --git a/types/Add-on/ShareView/ShareViewStore.d.ts.map b/types/Add-on/ShareView/ShareViewStore.d.ts.map index fe6e90e..1daa2d4 100644 --- a/types/Add-on/ShareView/ShareViewStore.d.ts.map +++ b/types/Add-on/ShareView/ShareViewStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ShareViewStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ShareView/ShareViewStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,gCAAgC,EAAE,MAAM,iDAAiD,CAAC;AAEnG,UAAU,MAAM;IAGZ,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B;AAED,UAAU,WAAW;IAEjB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAED,qBAAa,cAAe,SAAQ,SAAU,YAAW,YAAY;IAGrD,sBAAsB,EAAE,MAAM,EAAE,CAAM;IAEtC,QAAQ,EAAE,MAAM,CAAC;IAEjB,aAAa,EAAE,KAAK,CAAQ;IAE5B,cAAc,EAAE,MAAM,CAAM;IAG5B,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAW;IAG3C,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAM;IAGzC,KAAK,EAAE,MAAM,CAAM;IACnB,QAAQ,EAAE,gCAAgC,CAA2C;IAErF,eAAe,EAAE,gCAAgC,CAA2C;IAE5F,UAAU,SAAQ;IAC9B,UAAU;IAQE,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,UAAU;IAIV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,gCAAgC,CAAC;IAKjE,eAAe;IACH,UAAU,EAAE,WAAW,CAQjC;CACL"} \ No newline at end of file +{"version":3,"file":"ShareViewStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ShareView/ShareViewStore.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Add-on/ShareView/components/ColorSelect.d.ts b/types/Add-on/ShareView/components/ColorSelect.d.ts index 0dea6bd..2d852c1 100644 --- a/types/Add-on/ShareView/components/ColorSelect.d.ts +++ b/types/Add-on/ShareView/components/ColorSelect.d.ts @@ -1,4 +1,3 @@ -/// import "./ColorSelect.css"; export type SelectOption = { label: string | number; diff --git a/types/Add-on/ShareView/components/ColorSelect.d.ts.map b/types/Add-on/ShareView/components/ColorSelect.d.ts.map index 5cfaab1..f51c0d9 100644 --- a/types/Add-on/ShareView/components/ColorSelect.d.ts.map +++ b/types/Add-on/ShareView/components/ColorSelect.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ColorSelect.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/ShareView/components/ColorSelect.tsx"],"names":[],"mappings":";AACA,OAAO,mBAAmB,CAAC;AAE3B,MAAM,MAAM,YAAY,GAAG;IACvB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;CAChC,CAAC;AAEF,KAAK,WAAW,GAAG;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,WAAW,eA4GpE"} \ No newline at end of file +{"version":3,"file":"ColorSelect.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/ShareView/components/ColorSelect.tsx"],"names":[],"mappings":"AACA,OAAO,mBAAmB,CAAC;AAE3B,MAAM,MAAM,YAAY,GAAG;IACvB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC;CAChC,CAAC;AAEF,KAAK,WAAW,GAAG;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,WAAW,eAyHpE"} \ No newline at end of file diff --git a/types/Add-on/ShareView/components/ShareBoardInfoConfiguration.d.ts.map b/types/Add-on/ShareView/components/ShareBoardInfoConfiguration.d.ts.map index aa37971..954de8f 100644 --- a/types/Add-on/ShareView/components/ShareBoardInfoConfiguration.d.ts.map +++ b/types/Add-on/ShareView/components/ShareBoardInfoConfiguration.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ShareBoardInfoConfiguration.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/ShareView/components/ShareBoardInfoConfiguration.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,wBAAwB,CAAC;AAEhC,qBACa,2BAA4B,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,cAAc,CAAC;CAAE,EAAE,EAAE,CAAC;IAE5F,UAAU,EAAE,QAAQ,CAAC;IAErB,iBAAiB;IAUjB,oBAAoB;IAKpB,uBAAuB;IASvB,MAAM;CAwGT"} \ No newline at end of file +{"version":3,"file":"ShareBoardInfoConfiguration.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/ShareView/components/ShareBoardInfoConfiguration.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,wBAAwB,CAAC;AAEhC,qBACa,2BAA4B,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,cAAc,CAAC;CAAE,EAAE,EAAE,CAAC;IAE5F,UAAU,EAAE,QAAQ,CAAC;IAErB,iBAAiB;IAUjB,oBAAoB;IAKpB,uBAAuB;IASvB,MAAM;CAsIT"} \ No newline at end of file diff --git a/types/Add-on/ShowDirection.d.ts b/types/Add-on/ShowDirection.d.ts new file mode 100644 index 0000000..d943981 --- /dev/null +++ b/types/Add-on/ShowDirection.d.ts @@ -0,0 +1,8 @@ +import { Curve } from "../DatabaseServices/Entity/Curve"; +import { Command } from "../Editor/CommandMachine"; +/** 显示线段的绘制方向 */ +export declare class ShowDirection implements Command { + exec(): Promise; +} +export declare function GetCurveDirection(cu: Curve): Curve[]; +//# sourceMappingURL=ShowDirection.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ShowDirection.d.ts.map b/types/Add-on/ShowDirection.d.ts.map new file mode 100644 index 0000000..091707f --- /dev/null +++ b/types/Add-on/ShowDirection.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ShowDirection.d.ts","sourceRoot":"","sources":["../../../src/Add-on/ShowDirection.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAIzD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAKnD,gBAAgB;AAChB,qBAAa,aAAc,YAAW,OAAO;IAEnC,IAAI;CAqDb;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,KAAK,GAAG,KAAK,EAAE,CA6DpD"} \ No newline at end of file diff --git a/types/Add-on/Sky.d.ts.map b/types/Add-on/Sky.d.ts.map index f3f562c..0ee7a67 100644 --- a/types/Add-on/Sky.d.ts.map +++ b/types/Add-on/Sky.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Sky.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Sky.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;;;;;;;;;;;;EAcE;AAEF,qBAAa,GAAI,SAAQ,KAAK,CAAC,IAAI;;IAe/B,IAAI,QAAQ,gBAIX;CACJ;AA+LD,KAAK,WAAW,GAAG;IACf,SAAS,EAAE;QAAE,KAAK,EAAE,CAAC,CAAC;KAAE,CAAC;IACzB,SAAS,EAAE;QAAE,KAAK,EAAE,CAAC,CAAC;KAAE,CAAC;IACzB,QAAQ,EAAE;QAAE,KAAK,EAAE,CAAC,CAAC;KAAE,CAAC;IACxB,cAAc,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;KAAE,CAAC;IAClC,eAAe,EAAE;QAAE,KAAK,EAAE,GAAG,CAAC;KAAE,CAAC;IACjC,WAAW,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;KAAE,CAAC;CAC1C,CAAC"} \ No newline at end of file +{"version":3,"file":"Sky.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Sky.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;;;;;;;;;;;;EAcE;AAEF,qBAAa,GAAI,SAAQ,KAAK,CAAC,IAAI;;IAe/B,IAAI,QAAQ,IAGe,WAAW,CACrC;CACJ;AA+LD,KAAK,WAAW,GAAG;IACf,SAAS,EAAE;QAAE,KAAK,EAAE,CAAC,CAAC;KAAE,CAAC;IACzB,SAAS,EAAE;QAAE,KAAK,EAAE,CAAC,CAAC;KAAE,CAAC;IACzB,QAAQ,EAAE;QAAE,KAAK,EAAE,CAAC,CAAC;KAAE,CAAC;IACxB,cAAc,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;KAAE,CAAC;IAClC,eAAe,EAAE;QAAE,KAAK,EAAE,GAAG,CAAC;KAAE,CAAC;IACjC,WAAW,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;KAAE,CAAC;CAC1C,CAAC"} \ No newline at end of file diff --git a/types/Add-on/SwitchVisualStyles.d.ts.map b/types/Add-on/SwitchVisualStyles.d.ts.map index c30bd09..d4a2393 100644 --- a/types/Add-on/SwitchVisualStyles.d.ts.map +++ b/types/Add-on/SwitchVisualStyles.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SwitchVisualStyles.d.ts","sourceRoot":"","sources":["../../../src/Add-on/SwitchVisualStyles.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGnD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG1D,qBAAa,gBAAiB,YAAW,OAAO;IAEhC,OAAO,CAAC,KAAK;IAAc,OAAO,CAAC,QAAQ;gBAAnC,KAAK,EAAE,UAAU,EAAU,QAAQ,SAAI;IAM3D,IAAI,SAAS,YAGZ;IAGD,IAAI,YAAY,YAGf;IAEK,IAAI;IAkDV,cAAc,CAAC,EAAE,EAAE,cAAc,EAAE;CAOtC"} \ No newline at end of file +{"version":3,"file":"SwitchVisualStyles.d.ts","sourceRoot":"","sources":["../../../src/Add-on/SwitchVisualStyles.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGnD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG1D,qBAAa,gBAAiB,YAAW,OAAO;IAEhC,OAAO,CAAC,KAAK;IAAc,OAAO,CAAC,QAAQ;gBAAnC,KAAK,EAAE,UAAU,EAAU,QAAQ,SAAI;IAM3D,IAAI,SAAS,YAGZ;IAGD,IAAI,YAAY,YAGf;IAEK,IAAI;IAqDV,cAAc,CAAC,EAAE,EAAE,cAAc,EAAE;CAOtC"} \ No newline at end of file diff --git a/types/Add-on/Tangent.d.ts.map b/types/Add-on/Tangent.d.ts.map index 701504b..8b93b82 100644 --- a/types/Add-on/Tangent.d.ts.map +++ b/types/Add-on/Tangent.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Tangent.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Tangent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAOnD,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CA+Bb"} \ No newline at end of file +{"version":3,"file":"Tangent.d.ts","sourceRoot":"","sources":["../../../src/Add-on/Tangent.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAGnD,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CA+Bb"} \ 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 8b39de9..27c772d 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":"AAaA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAetD,qBAAa,kBAAmB,YAAW,OAAO;IAExC,IAAI;CA+Hb"} \ No newline at end of file +{"version":3,"file":"DrawVisualSpaceBox.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Template/DrawVisualSpaceBox.tsx"],"names":[],"mappings":"AAeA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAgBtD,qBAAa,kBAAmB,YAAW,OAAO;IAExC,IAAI;CAiJb"} \ No newline at end of file diff --git a/types/Add-on/TextStyle/Command_FontStyle.d.ts b/types/Add-on/TextStyle/Command_FontStyle.d.ts new file mode 100644 index 0000000..5cecbe4 --- /dev/null +++ b/types/Add-on/TextStyle/Command_FontStyle.d.ts @@ -0,0 +1,5 @@ +import { Command } from "../../Editor/CommandMachine"; +export declare class Command_FontStyle implements Command { + exec(): Promise; +} +//# sourceMappingURL=Command_FontStyle.d.ts.map \ No newline at end of file diff --git a/types/Add-on/TextStyle/Command_FontStyle.d.ts.map b/types/Add-on/TextStyle/Command_FontStyle.d.ts.map new file mode 100644 index 0000000..dd8ccce --- /dev/null +++ b/types/Add-on/TextStyle/Command_FontStyle.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Command_FontStyle.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/TextStyle/Command_FontStyle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAItD,qBAAa,iBAAkB,YAAW,OAAO;IAEvC,IAAI;CAIb"} \ No newline at end of file diff --git a/types/Add-on/TextStyle/FontStyleInterface.d.ts b/types/Add-on/TextStyle/FontStyleInterface.d.ts new file mode 100644 index 0000000..8acf1ab --- /dev/null +++ b/types/Add-on/TextStyle/FontStyleInterface.d.ts @@ -0,0 +1,20 @@ +export interface FontStyleInfoOption { + height: number; + fontType: FontType; + widthFactor: number; +} +export declare enum FontType { + YaHei = "yahei", + SongTi = "songti", + KaiTi = "KaiTi", + FangSong = "FangSong", + LiShu = "LiShu", + HeiTi = "HeiTi", + HuaWenLiShu = "HuaWenLiShu", + HuaWenXingKai = "HuaWenXingKai" +} +export declare const FontTypeOption: { + label: string; + value: FontType; +}[]; +//# sourceMappingURL=FontStyleInterface.d.ts.map \ No newline at end of file diff --git a/types/Add-on/TextStyle/FontStyleInterface.d.ts.map b/types/Add-on/TextStyle/FontStyleInterface.d.ts.map new file mode 100644 index 0000000..42c35f2 --- /dev/null +++ b/types/Add-on/TextStyle/FontStyleInterface.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"FontStyleInterface.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/TextStyle/FontStyleInterface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAEhC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,oBAAY,QAAQ;IAEhB,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,WAAW,gBAAgB;IAC3B,aAAa,kBAAkB;CAClC;AAED,eAAO,MAAM,cAAc;;;GAS1B,CAAC"} \ No newline at end of file diff --git a/types/Add-on/TextStyle/FontStylePanel.d.ts b/types/Add-on/TextStyle/FontStylePanel.d.ts new file mode 100644 index 0000000..81ee867 --- /dev/null +++ b/types/Add-on/TextStyle/FontStylePanel.d.ts @@ -0,0 +1,43 @@ +import React, { Component } from 'react'; +import { OrthographicCamera, Scene, WebGLRenderer } from 'three'; +import { FontStyleRecord } from '../../DatabaseServices/FontStyle/FontsStyleRecord'; +import { Text } from '../../DatabaseServices/Text/Text'; +import "./FontStyleCSS.less"; +import { FontStyleInfoOption } from './FontStyleInterface'; +import { FontStyleStore } from './FontStyleStore'; +export declare class FontStylePanel extends Component<{ + store: FontStyleStore; +}> { + _CurrentStyleName: string; + _CurrentDBStyleName: string; + _Preview: React.RefObject; + _PreviewScence: Scene; + _Camera: OrthographicCamera; + _Renderer: WebGLRenderer; + _NameInput: React.RefObject; + constructor(props: any); + componentDidMount(): Promise; + componentWillUnmount(): void; + componentDidUpdate(prevProps: any, prevState: any): Promise; + UpdateScene: () => Promise; + render(): JSX.Element; + AddStyleRecord: () => Promise; + ApplyParams(fontStyleRecord: FontStyleRecord, option: FontStyleInfoOption): boolean; + GetCurrentFontStyleRecordTexts(): Text[]; + SaveConfig: () => Promise; + SetToCurrent(): void; + /** + * 删除Database里的标注样式 + * @memberof FontStylePanel + */ + Delete: () => Promise; + /** + * @param {string} name 目标名称 app.Database.FontStyleTable.Symbols.get(name) + * @param {FontStyleStore} store 赋值对象 store.m_Option + * @memberof FontStylePanel + */ + GetFontStyle: (name: string, store: FontStyleStore) => Promise; + SetFontStyleId(fontStyle: FontStyleRecord): void; + Cancel: () => void; +} +//# sourceMappingURL=FontStylePanel.d.ts.map \ No newline at end of file diff --git a/types/Add-on/TextStyle/FontStylePanel.d.ts.map b/types/Add-on/TextStyle/FontStylePanel.d.ts.map new file mode 100644 index 0000000..1a2c55a --- /dev/null +++ b/types/Add-on/TextStyle/FontStylePanel.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"FontStylePanel.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/TextStyle/FontStylePanel.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAA2B,kBAAkB,EAAE,KAAK,EAA0B,aAAa,EAAE,MAAM,OAAO,CAAC;AAGlH,OAAO,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AAEpF,OAAO,EAAE,IAAI,EAAE,MAAM,kCAAkC,CAAC;AAQxD,OAAO,qBAAqB,CAAC;AAC7B,OAAO,EAAE,mBAAmB,EAA4B,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIlD,qBACa,cAAe,SAAQ,SAAS,CAAC;IAAE,KAAK,EAAE,cAAc,CAAC;CAAE,CAAC;IAEzD,iBAAiB,SAAM;IACvB,mBAAmB,SAAM;IACrC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAqB;IACjE,cAAc,EAAE,KAAK,CAAe;IACpC,OAAO,qBAA2D;IAClE,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,oCAAuC;gBAErC,KAAK,KAAA;IASX,iBAAiB;IAOvB,oBAAoB;IASd,kBAAkB,CAAC,SAAS,KAAA,EAAE,SAAS,KAAA;IAM7C,WAAW,sBA4BT;IAEF,MAAM;IAqKN,cAAc,sBAoBZ;IAGF,WAAW,CAAC,eAAe,EAAE,eAAe,EAAE,MAAM,EAAE,mBAAmB,GAAG,OAAO;IAgBnF,8BAA8B,IAAI,IAAI,EAAE;IAoBxC,UAAU,sBAwBR;IAGF,YAAY;IAWZ;;;OAGG;IACH,MAAM,sBA6BJ;IAEF;;;;MAIE;IACF,YAAY,SAAgB,MAAM,SAAS,cAAc,mBAWvD;IAEF,cAAc,CAAC,SAAS,EAAE,eAAe;IAMzC,MAAM,aAGJ;CACL"} \ No newline at end of file diff --git a/types/Add-on/TextStyle/FontStyleStore.d.ts b/types/Add-on/TextStyle/FontStyleStore.d.ts new file mode 100644 index 0000000..44fb43d --- /dev/null +++ b/types/Add-on/TextStyle/FontStyleStore.d.ts @@ -0,0 +1,7 @@ +import { Singleton } from "../../Common/Singleton"; +import { FontStyleInfoOption } from "./FontStyleInterface"; +export declare class FontStyleStore extends Singleton { + m_Option: FontStyleInfoOption; +} +export declare const fontStyleStore: FontStyleStore; +//# sourceMappingURL=FontStyleStore.d.ts.map \ No newline at end of file diff --git a/types/Add-on/TextStyle/FontStyleStore.d.ts.map b/types/Add-on/TextStyle/FontStyleStore.d.ts.map new file mode 100644 index 0000000..2f7d1f9 --- /dev/null +++ b/types/Add-on/TextStyle/FontStyleStore.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"FontStyleStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/TextStyle/FontStyleStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,qBAAa,cAAe,SAAQ,SAAS;IAE7B,QAAQ,EAAE,mBAAmB,CAAiC;CAC7E;AAED,eAAO,MAAM,cAAc,gBAA+B,CAAC"} \ No newline at end of file diff --git a/types/Add-on/ViewortConfig/EditFrame.d.ts b/types/Add-on/ViewortConfig/EditFrame.d.ts index 086ce4c..2522fb3 100644 --- a/types/Add-on/ViewortConfig/EditFrame.d.ts +++ b/types/Add-on/ViewortConfig/EditFrame.d.ts @@ -1,10 +1,5 @@ import { Command } from "../../Editor/CommandMachine"; -import { EditViewSettingStore } from "./EditViewport"; -export declare class EditFrameStore { - HideOptions: [string, boolean][]; - BoardInfoOptions: [string, boolean][]; - ViewAndVisionOption: [string, boolean][]; -} +import { EditViewSettingStore } from "./EditViewSettingStore"; export declare class EditFrame implements Command { private _Texts; private _TextColor; diff --git a/types/Add-on/ViewortConfig/EditFrame.d.ts.map b/types/Add-on/ViewortConfig/EditFrame.d.ts.map index c3c9cc5..acb3bf8 100644 --- a/types/Add-on/ViewortConfig/EditFrame.d.ts.map +++ b/types/Add-on/ViewortConfig/EditFrame.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"EditFrame.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ViewortConfig/EditFrame.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAOtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,qBAAa,cAAc;IAEX,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAyF;IACzH,gBAAgB,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAmJ;IACxL,mBAAmB,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAmC;CAC1F;AAED,qBAAa,SAAU,YAAW,OAAO;IAErC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAa;IAC/B,KAAK,EAAE,oBAAoB,CAAC;IAEtB,IAAI;CA6Gb"} \ No newline at end of file +{"version":3,"file":"EditFrame.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ViewortConfig/EditFrame.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAQtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,qBAAa,SAAU,YAAW,OAAO;IAErC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAa;IAC/B,KAAK,EAAE,oBAAoB,CAAC;IAEtB,IAAI;CA4Ib"} \ No newline at end of file diff --git a/types/Add-on/ViewortConfig/EditFrameModal.d.ts b/types/Add-on/ViewortConfig/EditFrameModal.d.ts index 0a7915a..ad59a15 100644 --- a/types/Add-on/ViewortConfig/EditFrameModal.d.ts +++ b/types/Add-on/ViewortConfig/EditFrameModal.d.ts @@ -1,12 +1,21 @@ import React from "react"; -import { EditFrameStore } from "./EditFrame"; +import { LayerNode } from "../../DatabaseServices/Tables/LayerTable"; +import "./EditFrameModalStyle.less"; +import { EditViewOptionKey } from "./EditViewOption"; +import { EditViewSettingStore } from "./EditViewSettingStore"; +import { LayerInfo } from "./LayerSelectModal"; export declare class EditFrameModal extends React.Component<{ - store: EditFrameStore; + store: EditViewSettingStore; }> { _Event: Function; + LayerInfoItem: LayerInfo[]; + ShowLayerInput: React.RefObject; + HideLayerInput: React.RefObject; registerEvent(): void; UNSAFE_componentWillMount(): void; componentWillUnmount(): void; + GetLayerAllItem(nodeList: LayerNode[], stratNum?: number, parentName?: string): void; + LayerInput: (key: EditViewOptionKey, inputRef: React.LegacyRef) => JSX.Element; render(): JSX.Element; } //# sourceMappingURL=EditFrameModal.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ViewortConfig/EditFrameModal.d.ts.map b/types/Add-on/ViewortConfig/EditFrameModal.d.ts.map index 5849835..772440a 100644 --- a/types/Add-on/ViewortConfig/EditFrameModal.d.ts.map +++ b/types/Add-on/ViewortConfig/EditFrameModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"EditFrameModal.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ViewortConfig/EditFrameModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAoB7C,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,cAAc,CAAC;CAAE,CAAC;IAE3E,MAAM,EAAE,QAAQ,CAAC;IACjB,aAAa;IAeb,yBAAyB;IAKzB,oBAAoB;IAMpB,MAAM;CA2GT"} \ No newline at end of file +{"version":3,"file":"EditFrameModal.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ViewortConfig/EditFrameModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AAIrE,OAAO,4BAA4B,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAe,MAAM,oBAAoB,CAAC;AAqB5D,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,oBAAoB,CAAC;CAAE,CAAC;IAEjF,MAAM,EAAE,QAAQ,CAAC;IACjB,aAAa,EAAE,SAAS,EAAE,CAAM;IACpB,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAqB;IACtE,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAqB;IAElF,aAAa;IAeb,yBAAyB;IAOzB,oBAAoB;IAMpB,eAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,QAAQ,SAAI,EAAE,UAAU,SAAK;IAapE,UAAU,QAAS,iBAAiB,YAAY,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,iBA2C/E;IAEF,MAAM;CA4KT"} \ No newline at end of file diff --git a/types/Add-on/ViewortConfig/EditViewOption.d.ts b/types/Add-on/ViewortConfig/EditViewOption.d.ts new file mode 100644 index 0000000..c342bf9 --- /dev/null +++ b/types/Add-on/ViewortConfig/EditViewOption.d.ts @@ -0,0 +1,52 @@ +import { IBaseOption } from "../../UI/Store/OptionInterface/IOptionInterface"; +export declare enum EditViewOptionKey { + hight = "hight",//文字高度 + renderType = "renderType",//视图 + renderTypeValue = "renderTypeValue",//视图值 + viewDir = "viewDir",//视角 + viewDirValue = "viewDirValue",//视角值 + roomName = "roomName",//房间名 + cabinetName = "cabinetName",//柜名 + boardMaterialName = "boardMaterialName",//板材名 + material = "material",//材料 + color = "color",//颜色 + page = "page",//页码 + date = "date",//时间 + designer = "designer",//设计师 + sheetName = "sheetName",//图纸名称 + hideDoor = "hideDoor",//隐藏门板 + hideDrawer = "hideDrawer",//隐藏抽屉 + hideDim = "hideDim",//隐藏标注 + hideCurve = "hideCurve",//隐藏曲线 + hideModel = "hideModel",//隐藏模型 + hideLayer = "hideLayer",//隐藏图层 + hideLayerValue = "hideLayerValue",//隐藏图层值 + showLayer = "showLayer",//显示图层 + showLayerValue = "showLayerValue" +} +export interface EditViewOption extends IBaseOption { + [EditViewOptionKey.hight]: number; + [EditViewOptionKey.renderType]: boolean; + [EditViewOptionKey.renderTypeValue]: string; + [EditViewOptionKey.viewDir]: boolean; + [EditViewOptionKey.viewDirValue]: string; + [EditViewOptionKey.roomName]: boolean; + [EditViewOptionKey.cabinetName]: boolean; + [EditViewOptionKey.boardMaterialName]: boolean; + [EditViewOptionKey.material]: boolean; + [EditViewOptionKey.color]: boolean; + [EditViewOptionKey.page]: boolean; + [EditViewOptionKey.date]: boolean; + [EditViewOptionKey.designer]: boolean; + [EditViewOptionKey.sheetName]: boolean; + [EditViewOptionKey.hideDoor]: boolean; + [EditViewOptionKey.hideDrawer]: boolean; + [EditViewOptionKey.hideDim]: boolean; + [EditViewOptionKey.hideCurve]: boolean; + [EditViewOptionKey.hideModel]: boolean; + [EditViewOptionKey.hideLayer]: boolean; + [EditViewOptionKey.hideLayerValue]: string; + [EditViewOptionKey.showLayer]: boolean; + [EditViewOptionKey.showLayerValue]: string; +} +//# sourceMappingURL=EditViewOption.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ViewortConfig/EditViewOption.d.ts.map b/types/Add-on/ViewortConfig/EditViewOption.d.ts.map new file mode 100644 index 0000000..2082b15 --- /dev/null +++ b/types/Add-on/ViewortConfig/EditViewOption.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"EditViewOption.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ViewortConfig/EditViewOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAE9E,oBAAY,iBAAiB;IAEzB,KAAK,UAAU,CAAG,MAAM;IACxB,UAAU,eAAe,CAAE,IAAI;IAC/B,eAAe,oBAAoB,CAAE,KAAK;IAC1C,OAAO,YAAY,CAAE,IAAI;IACzB,YAAY,iBAAiB,CAAE,KAAK;IACpC,QAAQ,aAAa,CAAC,KAAK;IAC3B,WAAW,gBAAgB,CAAC,IAAI;IAChC,iBAAiB,sBAAsB,CAAE,KAAK;IAC9C,QAAQ,aAAa,CAAE,IAAI;IAC3B,KAAK,UAAU,CAAC,IAAI;IACpB,IAAI,SAAS,CAAC,IAAI;IAClB,IAAI,SAAS,CAAC,IAAI;IAClB,QAAQ,aAAa,CAAC,KAAK;IAC3B,SAAS,cAAc,CAAC,MAAM;IAC9B,QAAQ,aAAa,CAAC,MAAM;IAC5B,UAAU,eAAe,CAAC,MAAM;IAChC,OAAO,YAAY,CAAC,MAAM;IAC1B,SAAS,cAAc,CAAC,MAAM;IAC9B,SAAS,cAAc,CAAC,MAAM;IAC9B,SAAS,cAAc,CAAC,MAAM;IAC9B,cAAc,mBAAmB,CAAC,OAAO;IACzC,SAAS,cAAc,CAAC,MAAM;IAC9B,cAAc,mBAAmB;CACpC;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IAE/C,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAClC,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IACxC,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAC5C,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IACrC,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IACzC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACtC,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IACzC,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC/C,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACtC,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACnC,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAClC,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAClC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACtC,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IACvC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACtC,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IACxC,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IACrC,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IACvC,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IACvC,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IACvC,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAC3C,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IACvC,CAAC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAC9C"} \ No newline at end of file diff --git a/types/Add-on/ViewortConfig/EditViewSettingStore.d.ts b/types/Add-on/ViewortConfig/EditViewSettingStore.d.ts new file mode 100644 index 0000000..f43f51d --- /dev/null +++ b/types/Add-on/ViewortConfig/EditViewSettingStore.d.ts @@ -0,0 +1,22 @@ +import { IConfigOption } from "../../UI/Components/Board/UserConfigComponent"; +import { IConfigStore } from "../../UI/Store/BoardStore"; +import { EditViewOption } from "./EditViewOption"; +export declare class EditViewSettingStore implements IConfigStore { + configName: string; + configsNames: any[]; + m_Option: EditViewOption; + HideOptions: Map; + BoardInfoOptions: Map; + ViewAndVisionOption: Map; + LayerOption: Map; + InitOption(): void; + SaveConfig(): IConfigOption; + UpdateOption(conf: IConfigOption): void; +} +export declare class EditFrameStore { + HideOptions: [string, boolean][]; + BoardInfoOptions: [string, boolean][]; + ViewAndVisionOption: [string, boolean][]; + LayerOption: [string, boolean][]; +} +//# sourceMappingURL=EditViewSettingStore.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ViewortConfig/EditViewSettingStore.d.ts.map b/types/Add-on/ViewortConfig/EditViewSettingStore.d.ts.map new file mode 100644 index 0000000..e5a0b80 --- /dev/null +++ b/types/Add-on/ViewortConfig/EditViewSettingStore.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"EditViewSettingStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ViewortConfig/EditViewSettingStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAqB,MAAM,kBAAkB,CAAC;AAErE,qBAAa,oBAAqB,YAAW,YAAY;IAEzC,UAAU,SAAQ;IAClB,YAAY,QAAM;IAClB,QAAQ,EAAE,cAAc,CAAgC;IACpE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAM7B;IACH,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAUlC;IACH,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAGrC;IACH,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAG7B;IAEH,UAAU;IAKV,UAAU;IAOV,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,cAAc,CAAC;CAWnD;AACD,qBAAa,cAAc;IAEX,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAyF;IACzH,gBAAgB,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAmJ;IACxL,mBAAmB,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAmC;IAC3E,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAqB;CACpE"} \ No newline at end of file diff --git a/types/Add-on/ViewortConfig/EditViewport.d.ts b/types/Add-on/ViewortConfig/EditViewport.d.ts index a9ae691..00dfff0 100644 --- a/types/Add-on/ViewortConfig/EditViewport.d.ts +++ b/types/Add-on/ViewortConfig/EditViewport.d.ts @@ -1,6 +1,5 @@ import { Command } from "../../Editor/CommandMachine"; -import { IConfigOption } from "../../UI/Components/Board/UserConfigComponent"; -import { IConfigStore } from "../../UI/Store/BoardStore"; +import { EditViewSettingStore } from "./EditViewSettingStore"; export declare class EditViewportStore { cName: [string, boolean][]; } @@ -10,20 +9,4 @@ export declare class EditViewport implements Command { exec(): Promise; private HandleTextMetaData; } -export declare class EditViewSettingStore implements IConfigStore { - configName: string; - configsNames: string[]; - config: { - option: { - hight: number; - }; - }; - InitOption(): void; - SaveConfig(): { - option: { - hight: number; - }; - }; - UpdateOption(conf: IConfigOption): void; -} //# sourceMappingURL=EditViewport.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ViewortConfig/EditViewport.d.ts.map b/types/Add-on/ViewortConfig/EditViewport.d.ts.map index ebe4d3d..cf6580e 100644 --- a/types/Add-on/ViewortConfig/EditViewport.d.ts.map +++ b/types/Add-on/ViewortConfig/EditViewport.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"EditViewport.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ViewortConfig/EditViewport.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAKtD,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAG9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAKzD,qBAAa,iBAAiB;IAEd,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAiF;CAC1H;AAED,qBAAa,YAAa,YAAW,OAAO;IAExC,OAAO,CAAC,MAAM,CAAS;IACvB,KAAK,EAAE,oBAAoB,CAAC;IAEtB,IAAI;IA4HV,OAAO,CAAC,kBAAkB;CAuB7B;AAGD,qBAAa,oBAAqB,YAAW,YAAY;IAErD,UAAU,SAAQ;IAClB,YAAY,WAAU;IACtB,MAAM;;;;MAIJ;IACF,UAAU;IAQV,UAAU;;;;;IAIV,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC;CAIxC"} \ No newline at end of file +{"version":3,"file":"EditViewport.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ViewortConfig/EditViewport.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAStD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,qBAAa,iBAAiB;IAEd,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAiF;CAC1H;AAED,qBAAa,YAAa,YAAW,OAAO;IAExC,OAAO,CAAC,MAAM,CAAS;IACvB,KAAK,EAAE,oBAAoB,CAAC;IAEtB,IAAI;IA4HV,OAAO,CAAC,kBAAkB;CAuB7B"} \ No newline at end of file diff --git a/types/Add-on/ViewortConfig/LayerSelectModal.d.ts b/types/Add-on/ViewortConfig/LayerSelectModal.d.ts new file mode 100644 index 0000000..5cb1779 --- /dev/null +++ b/types/Add-on/ViewortConfig/LayerSelectModal.d.ts @@ -0,0 +1,17 @@ +import * as React from "react"; +import { RefObject } from "react"; +import { EditViewOption, EditViewOptionKey } from "./EditViewOption"; +interface LayerSelectProp { + inputElement: RefObject; + items: LayerInfo[]; + m_Option: EditViewOption; + editViewOptionKey: EditViewOptionKey; +} +export interface LayerInfo { + title: string; + stratNum: number; + parentName: string; +} +export declare const LayerSelect: React.FC; +export {}; +//# sourceMappingURL=LayerSelectModal.d.ts.map \ No newline at end of file diff --git a/types/Add-on/ViewortConfig/LayerSelectModal.d.ts.map b/types/Add-on/ViewortConfig/LayerSelectModal.d.ts.map new file mode 100644 index 0000000..56c5d1e --- /dev/null +++ b/types/Add-on/ViewortConfig/LayerSelectModal.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"LayerSelectModal.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/ViewortConfig/LayerSelectModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErE,UAAU,eAAe;IAErB,YAAY,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAC1C,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,iBAAiB,EAAE,iBAAiB,CAAC;CACxC;AAED,MAAM,WAAW,SAAS;IAEtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACtB;AA2DD,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAcjD,CAAC"} \ No newline at end of file diff --git a/types/Add-on/Viewport/OneKeyLayout.d.ts b/types/Add-on/Viewport/OneKeyLayout.d.ts index af1888a..1e5c789 100644 --- a/types/Add-on/Viewport/OneKeyLayout.d.ts +++ b/types/Add-on/Viewport/OneKeyLayout.d.ts @@ -4,12 +4,14 @@ export declare enum HideEntityText { Dim = "dim",//标注 Curve = "curve",//曲线 Drawer = "drawer",//抽屉 - House = "house" + House = "house",//户型 + Model = "model" } export declare class OneKeyLayout implements Command { private _cacheRect; exec(): Promise; private GetVpInfos; + private DrawFrame; private checkBoxOnY; private checkBoxbyRoomName; private HandleTextMetaData; diff --git a/types/Add-on/Viewport/OneKeyLayout.d.ts.map b/types/Add-on/Viewport/OneKeyLayout.d.ts.map index b0e5ab7..406e5c0 100644 --- a/types/Add-on/Viewport/OneKeyLayout.d.ts.map +++ b/types/Add-on/Viewport/OneKeyLayout.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"OneKeyLayout.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Viewport/OneKeyLayout.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AA+BtD,oBAAY,cAAc;IAEtB,IAAI,SAAS,CAAK,IAAI;IACtB,GAAG,QAAQ,CAAO,IAAI;IACtB,KAAK,UAAU,CAAG,IAAI;IACtB,MAAM,WAAW,CAAE,IAAI;IACvB,KAAK,UAAU;CAClB;AAED,qBAAa,YAAa,YAAW,OAAO;IAExC,OAAO,CAAC,UAAU,CAAyB;IACrC,IAAI;IAseV,OAAO,CAAC,UAAU,CAsKhB;IAEF,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,kBAAkB;CAiC7B"} \ No newline at end of file +{"version":3,"file":"OneKeyLayout.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/Viewport/OneKeyLayout.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AA+BtD,oBAAY,cAAc;IAEtB,IAAI,SAAS,CAAM,IAAI;IACvB,GAAG,QAAQ,CAAQ,IAAI;IACvB,KAAK,UAAU,CAAI,IAAI;IACvB,MAAM,WAAW,CAAE,IAAI;IACvB,KAAK,UAAU,CAAI,IAAI;IACvB,KAAK,UAAU;CAClB;AAED,qBAAa,YAAa,YAAW,OAAO;IAExC,OAAO,CAAC,UAAU,CAAyB;IACrC,IAAI;IAuoBV,OAAO,CAAC,UAAU,CA+MhB;IAEF,OAAO,CAAC,SAAS;IAiEjB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,kBAAkB;CAsC7B"} \ No newline at end of file diff --git a/types/Add-on/showModal/GroovesModifyModal.d.ts.map b/types/Add-on/showModal/GroovesModifyModal.d.ts.map index 6bb8460..4a65697 100644 --- a/types/Add-on/showModal/GroovesModifyModal.d.ts.map +++ b/types/Add-on/showModal/GroovesModifyModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"GroovesModifyModal.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/showModal/GroovesModifyModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAG9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AAEjF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,eAAe,CAAC;AAEvB,UAAU,UAAU;IAEhB,UAAU,EAAE,KAAK,EAAE,CAAC;CACvB;AAED,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,kBAAkB,EAAE,EAAE,CAAC;IAEvF,WAAW,EAAE,UAAU,EAAE,EAAE,CAAM;IACjC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAM;IACnC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,CAAM;IACzC,SAAS,oCAAuC;IAChD,SAAS,oCAAuC;IAChD,SAAS,oCAAuC;IAChD,SAAS,oCAAuC;IACpC,WAAW,EAAE,OAAO,CAAS;IAEzC,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE;IA4B1D,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC;IAgCtG,cAAc,MAAO,UAAU,EAAE,EAAE,kBAAkB,IAAI,MAAM,CAAC,UAuB9D;IAEF,YAAY,sBAuBV;IAEF,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,aAAa,UAAQ;IAUvE,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC;IASlD,MAAM;CA2FT"} \ No newline at end of file +{"version":3,"file":"GroovesModifyModal.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/showModal/GroovesModifyModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAG9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AAEjF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,eAAe,CAAC;AAEvB,UAAU,UAAU;IAEhB,UAAU,EAAE,KAAK,EAAE,CAAC;CACvB;AAED,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,kBAAkB,EAAE,EAAE,CAAC;IAEvF,WAAW,EAAE,UAAU,EAAE,EAAE,CAAM;IACjC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAM;IACnC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,CAAM;IACzC,SAAS,oCAAuC;IAChD,SAAS,oCAAuC;IAChD,SAAS,oCAAuC;IAChD,SAAS,oCAAuC;IACpC,WAAW,EAAE,OAAO,CAAS;IAEzC,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE;IA4B1D,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC;IAgCtG,cAAc,MAAO,UAAU,EAAE,EAAE,kBAAkB,GAAG,CAAC,MAAM,CAAC,UAuB9D;IAEF,YAAY,sBAuBV;IAEF,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,aAAa,UAAQ;IAUvE,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC;IASlD,MAAM;CA2FT"} \ No newline at end of file diff --git a/types/Add-on/testEntity/DelTemplateEnum.d.ts b/types/Add-on/testEntity/DelTemplateEnum.d.ts new file mode 100644 index 0000000..f338efc --- /dev/null +++ b/types/Add-on/testEntity/DelTemplateEnum.d.ts @@ -0,0 +1,7 @@ +export declare enum DelTempOpera { + ReserveSpace = 0,// 保留空间 + NotReserveSpace = 1,// 不保留空间 + DelTempAndCorrRtSpace = 2,// 删除模板节点及其根空间(门板 => 根空间、抽屉/格子抽 =>抽屉总空间) + DelTempAndCorrGroup = 3 +} +//# sourceMappingURL=DelTemplateEnum.d.ts.map \ No newline at end of file diff --git a/types/Add-on/testEntity/DelTemplateEnum.d.ts.map b/types/Add-on/testEntity/DelTemplateEnum.d.ts.map new file mode 100644 index 0000000..3b6bc90 --- /dev/null +++ b/types/Add-on/testEntity/DelTemplateEnum.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"DelTemplateEnum.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/testEntity/DelTemplateEnum.ts"],"names":[],"mappings":"AACA,oBAAY,YAAY;IAEpB,YAAY,IAAA,CAAE,OAAO;IACrB,eAAe,IAAA,CAAE,QAAQ;IACzB,qBAAqB,IAAA,CAAE,wCAAwC;IAC/D,mBAAmB,IAAA;CACtB"} \ No newline at end of file diff --git a/types/Add-on/testEntity/ParseMaterialImage.d.ts.map b/types/Add-on/testEntity/ParseMaterialImage.d.ts.map index e9911e6..fdbdc39 100644 --- a/types/Add-on/testEntity/ParseMaterialImage.d.ts.map +++ b/types/Add-on/testEntity/ParseMaterialImage.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParseMaterialImage.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/testEntity/ParseMaterialImage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,iBAAiB,EAAE,oBAAoB,EAAkD,MAAM,OAAO,CAAC;AAC5H,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAMjE,eAAO,MAAM,aAAa,WAAkB,CAAC;AAE7C,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAc7F;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,UAAQ,GAAG,MAAM,CAI5D;AAGD,wBAAgB,oBAAoB,yBAwBnC;AAED,wBAAsB,eAAe,CAAC,CAAC,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,iCAsItE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhD"} \ No newline at end of file +{"version":3,"file":"ParseMaterialImage.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/testEntity/ParseMaterialImage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,iBAAiB,EAAE,oBAAoB,EAA2D,MAAM,OAAO,CAAC;AAChJ,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAMjE,eAAO,MAAM,aAAa,WAAkB,CAAC;AAE7C,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAc7F;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,UAAQ,GAAG,MAAM,CAI5D;AAGD,wBAAgB,oBAAoB,yBAwBnC;AAED,wBAAsB,eAAe,CAAC,CAAC,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,iCA8ItE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhD"} \ No newline at end of file diff --git a/types/Add-on/testEntity/PartAnalysis/PartsAnalysis.d.ts b/types/Add-on/testEntity/PartAnalysis/PartsAnalysis.d.ts new file mode 100644 index 0000000..2c6a5fe --- /dev/null +++ b/types/Add-on/testEntity/PartAnalysis/PartsAnalysis.d.ts @@ -0,0 +1,10 @@ +import { Command } from "../../../Editor/CommandMachine"; +export declare class PartsAnalysis implements Command { + options: { + name: string; + key: string; + checked: boolean; + }[]; + exec(): Promise; +} +//# sourceMappingURL=PartsAnalysis.d.ts.map \ No newline at end of file diff --git a/types/Add-on/testEntity/PartAnalysis/PartsAnalysis.d.ts.map b/types/Add-on/testEntity/PartAnalysis/PartsAnalysis.d.ts.map new file mode 100644 index 0000000..fea790d --- /dev/null +++ b/types/Add-on/testEntity/PartAnalysis/PartsAnalysis.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"PartsAnalysis.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/testEntity/PartAnalysis/PartsAnalysis.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAczD,qBAAa,aAAc,YAAW,OAAO;IAE7B,OAAO;;;;QAajB;IAEI,IAAI;CA+Jb"} \ No newline at end of file diff --git a/types/Add-on/testEntity/PartAnalysis/PartsAnalysisRemarks.d.ts b/types/Add-on/testEntity/PartAnalysis/PartsAnalysisRemarks.d.ts new file mode 100644 index 0000000..a1ae949 --- /dev/null +++ b/types/Add-on/testEntity/PartAnalysis/PartsAnalysisRemarks.d.ts @@ -0,0 +1,11 @@ +import { FC } from "react"; +interface Props { + options?: { + name: string; + key: string; + checked: boolean; + }[]; +} +declare const PartsAnalysisRemarks: FC; +export default PartsAnalysisRemarks; +//# sourceMappingURL=PartsAnalysisRemarks.d.ts.map \ No newline at end of file diff --git a/types/Add-on/testEntity/PartAnalysis/PartsAnalysisRemarks.d.ts.map b/types/Add-on/testEntity/PartAnalysis/PartsAnalysisRemarks.d.ts.map new file mode 100644 index 0000000..3932482 --- /dev/null +++ b/types/Add-on/testEntity/PartAnalysis/PartsAnalysisRemarks.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"PartsAnalysisRemarks.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/testEntity/PartAnalysis/PartsAnalysisRemarks.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,EAAE,EAA+B,MAAM,OAAO,CAAC;AAOxD,UAAU,KAAK;IAEX,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;KAAE,EAAE,CAAC;CAChE;AAED,QAAA,MAAM,oBAAoB,EAAE,EAAE,CAAC,KAAK,CAiGnC,CAAC;AACF,eAAe,oBAAoB,CAAC"} \ No newline at end of file diff --git a/types/Add-on/testEntity/PartAnalysis/PartsAnalysisStore.d.ts b/types/Add-on/testEntity/PartAnalysis/PartsAnalysisStore.d.ts new file mode 100644 index 0000000..e2f7b25 --- /dev/null +++ b/types/Add-on/testEntity/PartAnalysis/PartsAnalysisStore.d.ts @@ -0,0 +1,13 @@ +import { IConfigOption } from "../../../UI/Components/Board/UserConfigComponent"; +import { IConfigStore } from "../../../UI/Store/BoardStore"; +import { PartsAnalysisOption } from "../../../UI/Store/OptionInterface/IOptionInterface"; +export declare class PartsAnalysisStore implements IConfigStore { + configName: string; + configsNames: string[]; + m_Option: PartsAnalysisOption; + InitOption(): void; + SaveConfig(): IConfigOption; + UpdateOption(cof: IConfigOption): void; +} +export declare const partsAnalysisStore: PartsAnalysisStore; +//# sourceMappingURL=PartsAnalysisStore.d.ts.map \ No newline at end of file diff --git a/types/Add-on/testEntity/PartAnalysis/PartsAnalysisStore.d.ts.map b/types/Add-on/testEntity/PartAnalysis/PartsAnalysisStore.d.ts.map new file mode 100644 index 0000000..cbf5281 --- /dev/null +++ b/types/Add-on/testEntity/PartAnalysis/PartsAnalysisStore.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"PartsAnalysisStore.d.ts","sourceRoot":"","sources":["../../../../../src/Add-on/testEntity/PartAnalysis/PartsAnalysisStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,kDAAkD,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAC;AAEzF,qBAAa,kBAAmB,YAAW,YAAY;IAEvC,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,QAAQ,EAAE,mBAAmB,CAAqC;IAE9E,UAAU;IAKV,UAAU;IAQV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,mBAAmB,CAAC;CAIvD;AAED,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"} \ No newline at end of file diff --git a/types/Add-on/testEntity/TestBox.d.ts.map b/types/Add-on/testEntity/TestBox.d.ts.map index 8d8ef9b..41434b2 100644 --- a/types/Add-on/testEntity/TestBox.d.ts.map +++ b/types/Add-on/testEntity/TestBox.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TestBox.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/testEntity/TestBox.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAOtD,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CAoCb"} \ No newline at end of file +{"version":3,"file":"TestBox.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/testEntity/TestBox.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAMtD,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CAwBb"} \ No newline at end of file diff --git a/types/Add-on/testEntity/TestPolyline2PointsPolyline.d.ts b/types/Add-on/testEntity/TestPolyline2PointsPolyline.d.ts index c71cd1f..2fc0103 100644 --- a/types/Add-on/testEntity/TestPolyline2PointsPolyline.d.ts +++ b/types/Add-on/testEntity/TestPolyline2PointsPolyline.d.ts @@ -1,3 +1,4 @@ +import { Polyline } from "../../DatabaseServices/Entity/Polyline"; import { Command } from "../../Editor/CommandMachine"; export declare class Command_TestPolyline2PointsPolyline implements Command { exec(): Promise; @@ -5,4 +6,5 @@ export declare class Command_TestPolyline2PointsPolyline implements Command { export declare class Command_SimplifyPolyline implements Command { exec(): Promise; } +export declare function SimplifyPolyline(pls: Polyline[]): void; //# sourceMappingURL=TestPolyline2PointsPolyline.d.ts.map \ No newline at end of file diff --git a/types/Add-on/testEntity/TestPolyline2PointsPolyline.d.ts.map b/types/Add-on/testEntity/TestPolyline2PointsPolyline.d.ts.map index 85714df..cc5fa5e 100644 --- a/types/Add-on/testEntity/TestPolyline2PointsPolyline.d.ts.map +++ b/types/Add-on/testEntity/TestPolyline2PointsPolyline.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TestPolyline2PointsPolyline.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/testEntity/TestPolyline2PointsPolyline.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAKtD,qBAAa,mCAAoC,YAAW,OAAO;IAEzD,IAAI;CASb;AAED,qBAAa,wBAAyB,YAAW,OAAO;IAE9C,IAAI;CAsBb"} \ No newline at end of file +{"version":3,"file":"TestPolyline2PointsPolyline.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/testEntity/TestPolyline2PointsPolyline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAElE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAKtD,qBAAa,mCAAoC,YAAW,OAAO;IAEzD,IAAI;CASb;AAED,qBAAa,wBAAyB,YAAW,OAAO;IAE9C,IAAI;CAQb;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,QAiB/C"} \ No newline at end of file diff --git a/types/Add-on/testEntity/TestTemplateDelete.d.ts b/types/Add-on/testEntity/TestTemplateDelete.d.ts index 7d3621f..e1e5067 100644 --- a/types/Add-on/testEntity/TestTemplateDelete.d.ts +++ b/types/Add-on/testEntity/TestTemplateDelete.d.ts @@ -1,5 +1,8 @@ import { Command } from "../../Editor/CommandMachine"; +import { DelTempOpera } from "./DelTemplateEnum"; export declare class Command_DeleteTemplate implements Command { + private _DelTempOpera; + constructor(_DelTempOpera: DelTempOpera); exec(): Promise; } //# sourceMappingURL=TestTemplateDelete.d.ts.map \ No newline at end of file diff --git a/types/Add-on/testEntity/TestTemplateDelete.d.ts.map b/types/Add-on/testEntity/TestTemplateDelete.d.ts.map index 9e3cf7d..bebd41f 100644 --- a/types/Add-on/testEntity/TestTemplateDelete.d.ts.map +++ b/types/Add-on/testEntity/TestTemplateDelete.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TestTemplateDelete.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/testEntity/TestTemplateDelete.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD,qBAAa,sBAAuB,YAAW,OAAO;IAE5C,IAAI;CAMb"} \ No newline at end of file +{"version":3,"file":"TestTemplateDelete.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/testEntity/TestTemplateDelete.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,qBAAa,sBAAuB,YAAW,OAAO;IAGtC,OAAO,CAAC,aAAa;gBAAb,aAAa,EAAE,YAAY;IAEzC,IAAI;CA+Bb"} \ No newline at end of file diff --git a/types/Add-on/testEntity/test.d.ts.map b/types/Add-on/testEntity/test.d.ts.map index 46169d2..8940943 100644 --- a/types/Add-on/testEntity/test.d.ts.map +++ b/types/Add-on/testEntity/test.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/testEntity/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAGtD,qBACa,IAAK,YAAW,OAAO;IAE1B,IAAI;CAIb"} \ No newline at end of file +{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/testEntity/test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAGtD,qBACa,IAAK,YAAW,OAAO;IAE1B,IAAI;CAMb"} \ 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 fff77be..d0e93ea 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;AAItD,OAAO,EAAoB,aAAa,EAAuB,MAAM,kDAAkD,CAAC;AAKxH,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAC/E,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;CAuGT"} \ 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;AAItD,OAAO,EAAoB,aAAa,EAAuB,MAAM,kDAAkD,CAAC;AAKxH,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAC/E,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;IAEpF,OAAO,CAAC,WAAW,CAAkB;IACrC,iBAAiB;IAgBjB,oBAAoB;IAOpB,MAAM;CAyGT"} \ 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 e38f5d5..821c382 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;AAYzC,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;IA6EN,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;AAYzC,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;IAgBjB,oBAAoB;IAMpB,MAAM;IAsFN,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 cea455a..a384706 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;AAmB1B,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;IA0CjB,oBAAoB;IAOpB,OAAO,CAAC,SAAS,CA+Cf;IACF,MAAM;IAgFA,UAAU;CA+CnB"} \ 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;AAmB1B,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;IA6CjB,oBAAoB;IAOpB,OAAO,CAAC,SAAS,CA2Df;IACF,MAAM;IAgFA,UAAU;CA+CnB"} \ 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 10fd92f..882f493 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;AAczC,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,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;IACF,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,qBACa,cAAe,SAAQ,SAAS,CAAC,gBAAgB,CAAC;IAE3D,OAAO,CAAC,gBAAgB,CAGtB;IACF,OAAO,CAAC,WAAW,CAAyI;IAE5J,WAAW,cAA6B;IACxC,MAAM;CAwVT;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 +{"version":3,"file":"ParseBoardNamePanel.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/ParseBoardNamePanel.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAczC,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAE5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,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;IACF,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,qBACa,cAAe,SAAQ,SAAS,CAAC,gBAAgB,CAAC;IAE3D,OAAO,CAAC,gBAAgB,CAGtB;IACF,OAAO,CAAC,WAAW,CAAyI;IAE5J,WAAW,cAA6B;IACxC,MAAM;CA0VT;AAED,qBAAa,mBAAoB,SAAQ,SAAS,CAAC;IAAE,KAAK,EAAE,mBAAmB,CAAC;CAAE,CAAC;IAE/E,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAiBjB,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/ParseBoardNameStore.d.ts.map b/types/Add-on/twoD2threeD/ParseBoardNameStore.d.ts.map index ba25c68..4d6435e 100644 --- a/types/Add-on/twoD2threeD/ParseBoardNameStore.d.ts.map +++ b/types/Add-on/twoD2threeD/ParseBoardNameStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParseBoardNameStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/ParseBoardNameStore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,qBAAa,mBAAoB,SAAQ,UAAU,CAAC,qBAAqB,CAAC;IAE1D,QAAQ,EAAE,qBAAqB,CAAsC;IACrE,UAAU,EAAE,SAAS,CAAC,qBAAqB,CAAC,CAAC;IACzD,UAAU;IAMV,cAAc;IAId,UAAU;;;IAOV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,qBAAqB,CAAC;CA6BzD;AAED,eAAO,MAAM,mBAAmB,EAAE,mBAAuD,CAAC"} \ No newline at end of file +{"version":3,"file":"ParseBoardNameStore.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/ParseBoardNameStore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,qBAAa,mBAAoB,SAAQ,UAAU,CAAC,qBAAqB,CAAC;IAE1D,QAAQ,EAAE,qBAAqB,CAAsC;IAC7D,UAAU,EAAE,SAAS,CAAC,qBAAqB,CAAC,CAAC;IACjE,UAAU;IAMV,cAAc;IAId,UAAU;;;IAOV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,qBAAqB,CAAC;CA6BzD;AAED,eAAO,MAAM,mBAAmB,EAAE,mBAAuD,CAAC"} \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/Polyline2Board.d.ts.map b/types/Add-on/twoD2threeD/Polyline2Board.d.ts.map index 681f5da..337511a 100644 --- a/types/Add-on/twoD2threeD/Polyline2Board.d.ts.map +++ b/types/Add-on/twoD2threeD/Polyline2Board.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Polyline2Board.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/Polyline2Board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAW,MAAM,OAAO,CAAC;AAS/C,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAGlE,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAgBtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,qBACa,cAAe,YAAW,OAAO;IAE1C,KAAK,cAA6B;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACf,IAAI;IA+BV,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAEhB,WAAW,EAAE,MAAM,CAAC;IAEpB,YAAY,EAAE,MAAM,CAAC;IAErB,WAAW,EAAE,MAAM,CAAC;IAEpB,WAAW,EAAE,MAAM,CAAC;IAGpB,cAAc,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAE/F,cAAc,EAAE,MAAM,CAAC;IAEvB,WAAW,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAE3C,gBAAgB,EAAE,MAAM,CAAC;IAEzB,cAAc,EAAE,OAAO,CAAC;IAExB,YAAY,EAAE,cAAc,CAAC;IAE7B,oBAAoB,EAAE,OAAO,CAAC;IAE9B,cAAc,EAAE,OAAO,CAAS;IAEhC,YAAY,EAAE,MAAM,CAAM;IAC1B,UAAU,SAAQ;IAClB,gBAAgB,UAAS;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,cAAc,CAAC;IAChC,gBAAgB,EAAE,cAAc,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,WAAW;IAkCrB,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE;IAkpB1B;;;;;;OAMG;IACH,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,MAAM,UAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE;IA0GnE,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ;IAiB9C,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,WAAW;IAKnB;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IA8BrB;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAQxC;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAWjC"} \ No newline at end of file +{"version":3,"file":"Polyline2Board.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/Polyline2Board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAW,MAAM,OAAO,CAAC;AAS/C,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAGlE,OAAO,EAAE,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAgBtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,qBACa,cAAe,YAAW,OAAO;IAE1C,KAAK,cAA6B;IAClC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACf,IAAI;IA+BV,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAEhB,WAAW,EAAE,MAAM,CAAC;IAEpB,YAAY,EAAE,MAAM,CAAC;IAErB,WAAW,EAAE,MAAM,CAAC;IAEpB,WAAW,EAAE,MAAM,CAAC;IAGpB,cAAc,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAE/F,cAAc,EAAE,MAAM,CAAC;IAEvB,WAAW,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAE3C,gBAAgB,EAAE,MAAM,CAAC;IAEzB,cAAc,EAAE,OAAO,CAAC;IAExB,YAAY,EAAE,cAAc,CAAC;IAE7B,oBAAoB,EAAE,OAAO,CAAC;IAE9B,cAAc,EAAE,OAAO,CAAS;IAEhC,YAAY,EAAE,MAAM,CAAM;IAC1B,UAAU,SAAQ;IAClB,gBAAgB,UAAS;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,cAAc,CAAC;IAChC,gBAAgB,EAAE,cAAc,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,WAAW;IAkCrB,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE;IAgpB1B;;;;;;OAMG;IACH,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,MAAM,UAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,KAAK,EAAE;IA0GnE,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ;IAiB9C,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,WAAW;IAKnB;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IA8BrB;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAQxC;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAWjC"} \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/R2B2Store.d.ts b/types/Add-on/twoD2threeD/R2B2Store.d.ts index bedb278..beb82a2 100644 --- a/types/Add-on/twoD2threeD/R2B2Store.d.ts +++ b/types/Add-on/twoD2threeD/R2B2Store.d.ts @@ -16,6 +16,7 @@ export declare class R2B2Store implements IConfigStore { }; UpdateOption(conf: IConfigOption): void; HasInvailValue(): string; + OnHandleUseBoardProcessOptionChange(): void; } export declare const r2b2Store: R2B2Store; //# sourceMappingURL=R2B2Store.d.ts.map \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/R2B2Store.d.ts.map b/types/Add-on/twoD2threeD/R2B2Store.d.ts.map index c7f3d10..36ccdf8 100644 --- a/types/Add-on/twoD2threeD/R2B2Store.d.ts.map +++ b/types/Add-on/twoD2threeD/R2B2Store.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"R2B2Store.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/R2B2Store.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,qBAAa,SAAU,YAAW,YAAY;IAE9B,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,MAAM,EAAE,eAAe,CAAiF;IACxG,QAAQ,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;;IAQjD,IAAI,QAAQ,IAAI,SAAS,CAAC,eAAe,CAAC,CAKzC;IACD,SAAS,CAAC,aAAa;IASvB,UAAU;IAMV,UAAU;;;IAMV,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,eAAe,CAAC;IAOjD,cAAc;CAIjB;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC"} \ No newline at end of file +{"version":3,"file":"R2B2Store.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/R2B2Store.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,qBAAa,SAAU,YAAW,YAAY;IAE9B,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,MAAM,EAAE,eAAe,CAAiF;IACxG,QAAQ,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;;IAQjD,IAAI,QAAQ,IAAI,SAAS,CAAC,eAAe,CAAC,CAKzC;IACD,SAAS,CAAC,aAAa;IASvB,UAAU;IAMV,UAAU;;;IAMV,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,eAAe,CAAC;IAgBjD,cAAc;IAKd,mCAAmC;CAItC;AAED,eAAO,MAAM,SAAS,WAAkB,CAAC"} \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/R2BProcessComponent.d.ts b/types/Add-on/twoD2threeD/R2BProcessComponent.d.ts index 97a0ba5..7545507 100644 --- a/types/Add-on/twoD2threeD/R2BProcessComponent.d.ts +++ b/types/Add-on/twoD2threeD/R2BProcessComponent.d.ts @@ -3,7 +3,7 @@ import { GetOptionState } from './R2bConfigComponent'; import { Rec2BrStore } from './Rec2BrStore'; export interface IR2BProcessComponentProps { store: Rec2BrStore; - getOption: (state: GetOptionState) => void; + getOption: (state: GetOptionState, isMaterial?: Boolean) => void; } export declare class R2BProcessComponent extends React.Component { private showShops; diff --git a/types/Add-on/twoD2threeD/R2BProcessComponent.d.ts.map b/types/Add-on/twoD2threeD/R2BProcessComponent.d.ts.map index 6f3ae2a..fbea993 100644 --- a/types/Add-on/twoD2threeD/R2BProcessComponent.d.ts.map +++ b/types/Add-on/twoD2threeD/R2BProcessComponent.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"R2BProcessComponent.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/R2BProcessComponent.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,WAAW,yBAAyB;IAEtC,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;CAC9C;AAED,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC,yBAAyB,CAAC;IAC/E,OAAO,CAAC,SAAS,CAAyB;IAE1C,OAAO,CAAC,OAAO,CAEb;IACK,MAAM;IAgGb,OAAO,CAAC,WAAW,CAMjB;CACL"} \ No newline at end of file +{"version":3,"file":"R2BProcessComponent.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/R2BProcessComponent.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,WAAW,yBAAyB;IAEtC,KAAK,EAAE,WAAW,CAAC;IACnB,SAAS,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACpE;AAED,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC,yBAAyB,CAAC;IAE/E,OAAO,CAAC,SAAS,CAAyB;IAE1C,OAAO,CAAC,OAAO,CAEb;IACK,MAAM;IAmGb,OAAO,CAAC,WAAW,CAMjB;CACL"} \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/R2bInterface.d.ts b/types/Add-on/twoD2threeD/R2bInterface.d.ts index 297c94e..454010c 100644 --- a/types/Add-on/twoD2threeD/R2bInterface.d.ts +++ b/types/Add-on/twoD2threeD/R2bInterface.d.ts @@ -82,5 +82,11 @@ export interface IRect2Br2Option extends IBaseOption { [EBoardKeyList.LeftSealed]: string; [EBoardKeyList.RightSealed]: string; remarks: [string, string][]; + useBoardProcessOption?: boolean; + boardMatName: string; + material: string; + color: string; + roomName: string; + cabinetName: string; } //# sourceMappingURL=R2bInterface.d.ts.map \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/R2bInterface.d.ts.map b/types/Add-on/twoD2threeD/R2bInterface.d.ts.map index e060d3e..f409366 100644 --- a/types/Add-on/twoD2threeD/R2bInterface.d.ts.map +++ b/types/Add-on/twoD2threeD/R2bInterface.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"R2bInterface.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/R2bInterface.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"R2bInterface.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/R2bInterface.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Add-on/twoD2threeD/Rect2Board.d.ts b/types/Add-on/twoD2threeD/Rect2Board.d.ts index 38eddb5..4bce705 100644 --- a/types/Add-on/twoD2threeD/Rect2Board.d.ts +++ b/types/Add-on/twoD2threeD/Rect2Board.d.ts @@ -1,4 +1,11 @@ import { Command } from "../../Editor/CommandMachine"; +/** + * @todo 多模块可同时解析 + * @todo 空间解析方法重构 + * @log 2024-6-20 实现正常层板立板模板绘制 + * @log 2024-6-27 实现层板立板半板绘制,判断板件等分 + * @log 2024-7-1 无法正常解析的板通过单板绘制提示并设置颜色为红色 + */ export declare class Rect2Board implements Command { exec(): Promise; } diff --git a/types/Add-on/twoD2threeD/Rect2Board.d.ts.map b/types/Add-on/twoD2threeD/Rect2Board.d.ts.map index 3cea194..ff56817 100644 --- a/types/Add-on/twoD2threeD/Rect2Board.d.ts.map +++ b/types/Add-on/twoD2threeD/Rect2Board.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Rect2Board.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/Rect2Board.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAetD,qBAAa,UAAW,YAAW,OAAO;IAEhC,IAAI;CA4Bb"} \ No newline at end of file +{"version":3,"file":"Rect2Board.d.ts","sourceRoot":"","sources":["../../../../src/Add-on/twoD2threeD/Rect2Board.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AA+BtD;;;;;;GAMG;AACH,qBAAa,UAAW,YAAW,OAAO;IAEhC,IAAI;CA4Bb"} \ No newline at end of file diff --git a/types/ApplicationServices/Application.d.ts b/types/ApplicationServices/Application.d.ts index 2969cda..29ffe19 100644 --- a/types/ApplicationServices/Application.d.ts +++ b/types/ApplicationServices/Application.d.ts @@ -1,5 +1,6 @@ import { HardwareCuttingReactor } from '../Add-on/BoardCutting/HardwareCuttingReactor'; import { DrillingReactor } from '../Add-on/DrawDrilling/DrillingReactor'; +import { IsolateReactor } from '../Add-on/IsolateReactor'; import { CADFiler } from '../DatabaseServices/CADFiler'; import { Database } from '../DatabaseServices/Database'; import { AutoSaveServer } from '../Editor/AutoSave'; @@ -39,6 +40,7 @@ export declare class ApplicationService { Gesture: Gesture; CameraRoamType: CameraRoamType; CameraFlySpeed: number; + isolateReactor: IsolateReactor; private _PerCameraUseSkyBox; constructor(); protected InitService(): void; diff --git a/types/ApplicationServices/Application.d.ts.map b/types/ApplicationServices/Application.d.ts.map index 9cdd61f..43adbc1 100644 --- a/types/ApplicationServices/Application.d.ts.map +++ b/types/ApplicationServices/Application.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Application.d.ts","sourceRoot":"","sources":["../../../src/ApplicationServices/Application.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AAEvF,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAYzE,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAIxD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAOlD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAGlE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAM7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,eAAO,IAAI,GAAG,EAAE,kBAAkB,CAAC;AAEnC,oBAAY,cAAc;IAEtB,GAAG,IAAI,CAAE,IAAI;IACb,IAAI,IAAI;CACX;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAE3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,EAAE,eAAe,CAAC;IAElC,uBAAuB,EAAE,sBAAsB,CAAC;IAChD,KAAK,UAAQ;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,SAAS,EAAE,qBAAqB,CAA6D;IAC7F,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC;IAEvB,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IAGjB,cAAc,iBAAsB;IACpC,cAAc,SAAK;IAEnB,OAAO,CAAC,mBAAmB,CAAS;;IAQpC,SAAS,CAAC,WAAW;IA2VrB,uBAAuB;IAqBvB,IAAI,kBAAkB,IACI,OAAO,CAD4B;IAC7D,IAAI,kBAAkB,CAAC,CAAC,EAAE,OAAO,EAOhC;IACD,OAAO,CAAC,gBAAgB,CAQtB;IAEF,WAAW;IAoBX,cAAc,CAAC,IAAI,GAAE,MAAc;IAanC,OAAO,IAAI,QAAQ;IAanB;;OAEG;IACH,QAAQ,IAAI,QAAQ;IAgBpB,QAAQ,CAAC,CAAC,EAAE,QAAQ;CAmBvB"} \ No newline at end of file +{"version":3,"file":"Application.d.ts","sourceRoot":"","sources":["../../../src/ApplicationServices/Application.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AAGvF,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAIzE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAY1D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAKxD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAQlD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAGlE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAI3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAM7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,eAAO,IAAI,GAAG,EAAE,kBAAkB,CAAC;AAEnC,oBAAY,cAAc;IAEtB,GAAG,IAAI,CAAE,IAAI;IACb,IAAI,IAAI;CACX;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAE3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IAEf,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,EAAE,eAAe,CAAC;IAElC,uBAAuB,EAAE,sBAAsB,CAAC;IAChD,KAAK,UAAQ;IACb,QAAQ,EAAE,aAAa,CAAC;IAExB,SAAS,EAAE,qBAAqB,CAA6D;IAC7F,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,UAAU,CAAC;IAEvB,cAAc,EAAE,cAAc,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IAGjB,cAAc,iBAAsB;IACpC,cAAc,SAAK;IAEnB,cAAc,EAAE,cAAc,CAAC;IAE/B,OAAO,CAAC,mBAAmB,CAAS;;IAQpC,SAAS,CAAC,WAAW;IAmXrB,uBAAuB;IAqBvB,IAAI,kBAAkB,IACI,OAAO,CAD4B;IAC7D,IAAI,kBAAkB,CAAC,CAAC,EAAE,OAAO,EAOhC;IACD,OAAO,CAAC,gBAAgB,CAQtB;IAEF,WAAW;IAoBX,cAAc,CAAC,IAAI,GAAE,MAAc;IAanC,OAAO,IAAI,QAAQ;IAanB;;OAEG;IACH,QAAQ,IAAI,QAAQ;IAgBpB,QAAQ,CAAC,CAAC,EAAE,QAAQ;CAqBvB"} \ No newline at end of file diff --git a/types/ApplicationServices/HostApplicationServices.d.ts b/types/ApplicationServices/HostApplicationServices.d.ts index ec3a5a1..f0f61b8 100644 --- a/types/ApplicationServices/HostApplicationServices.d.ts +++ b/types/ApplicationServices/HostApplicationServices.d.ts @@ -1,21 +1,31 @@ import { MeshBasicMaterial, MeshStandardMaterial, Texture } from 'three'; import { FractionDigitsType } from '../Common/SystemEnum'; +import { Database } from '../DatabaseServices/Database'; +import { LayerTableRecord } from '../DatabaseServices/LayerTableRecord'; import { ObjectId } from '../DatabaseServices/ObjectId'; import { ICursorConfig } from '../Editor/ICursorConfig'; import { RenderType } from '../GraphicsSystem/RenderType'; import { DrillingOption } from '../UI/Store/drillInterface'; export declare class IHostApplicationServices { + Database: Database; DefaultMeshMaterial?: MeshBasicMaterial | MeshStandardMaterial; DefaultFloorMaterial?: MeshBasicMaterial | MeshStandardMaterial; DefaultWallMaterial?: MeshBasicMaterial | MeshStandardMaterial; DefaultBulkheadCeilingMaterial?: MeshBasicMaterial | MeshStandardMaterial; IsRoomEntityVisible: boolean; + CurrentLayer: ObjectId; + /** 当前画笔的颜色索引 */ + CurrentColorindex: number; CurrentDimStyle: ObjectId; + CurrentFontStyle: ObjectId; isShowLightShadow: boolean; ShowHistoryLog: boolean; Physical2EdgeColor: number; ConceptualEdgeColor: number; ConceptualOpacity: number; + ConceptualTransparentOpacity: number; + IsTransparentMetals: boolean; + IsTransparentComp: boolean; DrawWallBottomFace: boolean; sealReserve: number; private __ProxyObject__; @@ -28,6 +38,11 @@ export declare class IHostApplicationServices { sealingColorMap: [string, string][]; showLines: boolean; showOpenDirLines: boolean; + doorLinesOption: { + physicalShowLines: boolean; + physicalShowLines2: boolean; + reverseOpenDirLines: boolean; + }; show2DPathLine: boolean; show2DPathObject: boolean; uese: string; @@ -48,6 +63,8 @@ export declare class IHostApplicationServices { sealValues: string; hardwareExpressionFormattingAccuracy: number; partialSplitValueCanTakesEffect: boolean; + cancelHoleProcessing: boolean; + isCheckCustomBoardNumber: boolean; }; viewSize: { minViewHeight: number; @@ -59,6 +76,11 @@ export declare class IHostApplicationServices { boardCustomNumberTextHeight: number; lineWidth: number; fractionDigitsType: FractionDigitsType; + throughModelSegmentedDrill: boolean; + autoDeviation: boolean; + autoDeviationMinDist: number; + smallGrooveThreshold: number; + sealWidthPercentage: number; private constructor(); private static _SingleInstance; static GetInstance(): IHostApplicationServices; diff --git a/types/ApplicationServices/HostApplicationServices.d.ts.map b/types/ApplicationServices/HostApplicationServices.d.ts.map index 8ce683b..b609996 100644 --- a/types/ApplicationServices/HostApplicationServices.d.ts.map +++ b/types/ApplicationServices/HostApplicationServices.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HostApplicationServices.d.ts","sourceRoot":"","sources":["../../../src/ApplicationServices/HostApplicationServices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,qBAAa,wBAAwB;IAEjC,mBAAmB,CAAC,EAAE,iBAAiB,GAAG,oBAAoB,CAAC;IAC/D,oBAAoB,CAAC,EAAE,iBAAiB,GAAG,oBAAoB,CAAC;IAChE,mBAAmB,CAAC,EAAE,iBAAiB,GAAG,oBAAoB,CAAC;IAC/D,8BAA8B,CAAC,EAAE,iBAAiB,GAAG,oBAAoB,CAAC;IAE1E,mBAAmB,UAAQ;IAE3B,eAAe,EAAE,QAAQ,CAAC;IACd,iBAAiB,EAAE,OAAO,CAAQ;IAC9C,cAAc,EAAE,OAAO,CAAQ;IAEnB,kBAAkB,SAAK;IACvB,mBAAmB,SAAK;IAExB,iBAAiB,SAAK;IAElC,kBAAkB,UAAS;IAC3B,WAAW,SAAK;IAEhB,OAAO,CAAC,eAAe,CAAM;IAC7B,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,CAAM;IACpC,IAAI,WAAW,IACM,GAAG,CAD0B;IAClD,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAUvB;IAGW,WAAW,EAAE,UAAU,CAAwB;IAI/C,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAW;IAItD,mBAAmB,UAAQ;IAI3B,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAM;IAIzC,SAAS,UAAS;IAIlB,gBAAgB,UAAS;IAIzB,cAAc,UAAS;IAIvB,gBAAgB,UAAS;IAIzB,IAAI,EAAE,MAAM,CAAC;IAIb,cAAc,EAAE,OAAO,CAAS;IAGhC,aAAa;;;;;;;;;;;;;;;;MAgBvB;IAEU,QAAQ;;;;MAIlB;IAEU,UAAU,EAAE,aAAa,CAInC;IAEU,aAAa,SAAM;IACnB,2BAA2B,SAAM;IACjC,SAAS,SAAK;IACd,kBAAkB,EAAE,kBAAkB,CAA0B;IAE5E,OAAO;IAEP,OAAO,CAAC,MAAM,CAAC,eAAe,CAA2B;IACzD,MAAM,CAAC,WAAW,IAAI,wBAAwB;IAQxC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAClC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CACzC;AAED,eAAO,IAAI,uBAAuB,0BAAyC,CAAC"} \ No newline at end of file +{"version":3,"file":"HostApplicationServices.d.ts","sourceRoot":"","sources":["../../../src/ApplicationServices/HostApplicationServices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,qBAAa,wBAAwB;IAEjC,QAAQ,EAAE,QAAQ,CAAC;IAEnB,mBAAmB,CAAC,EAAE,iBAAiB,GAAG,oBAAoB,CAAC;IAC/D,oBAAoB,CAAC,EAAE,iBAAiB,GAAG,oBAAoB,CAAC;IAChE,mBAAmB,CAAC,EAAE,iBAAiB,GAAG,oBAAoB,CAAC;IAC/D,8BAA8B,CAAC,EAAE,iBAAiB,GAAG,oBAAoB,CAAC;IAE1E,mBAAmB,UAAQ;IAE3B,YAAY,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACzC,gBAAgB;IAChB,iBAAiB,EAAE,MAAM,CAAK;IAE9B,eAAe,EAAE,QAAQ,CAAC;IAC1B,gBAAgB,EAAE,QAAQ,CAAC;IACf,iBAAiB,EAAE,OAAO,CAAQ;IAC9C,cAAc,EAAE,OAAO,CAAQ;IAEnB,kBAAkB,SAAK;IACvB,mBAAmB,SAAK;IAExB,iBAAiB,SAAK;IACtB,4BAA4B,SAAO;IACnC,mBAAmB,EAAE,OAAO,CAAS;IACrC,iBAAiB,EAAE,OAAO,CAAS;IAE/C,kBAAkB,UAAS;IAC3B,WAAW,SAAK;IAEhB,OAAO,CAAC,eAAe,CAAM;IAC7B,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,CAAM;IACpC,IAAI,WAAW,IACM,GAAG,CAD0B;IAClD,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,EAUvB;IAGW,WAAW,EAAE,UAAU,CAAwB;IAI/C,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAW;IAItD,mBAAmB,UAAQ;IAI3B,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAM;IAIzC,SAAS,UAAS;IAIlB,gBAAgB,UAAS;IAIzB,eAAe;;;;MAIzB;IAIU,cAAc,UAAS;IAIvB,gBAAgB,UAAS;IAIzB,IAAI,EAAE,MAAM,CAAC;IAIb,cAAc,EAAE,OAAO,CAAS;IAGhC,aAAa;;;;;;;;;;;;;;;;;;MAkBvB;IAEU,QAAQ;;;;MAIlB;IAEU,UAAU,EAAE,aAAa,CAInC;IAEU,aAAa,SAAM;IACnB,2BAA2B,SAAM;IACjC,SAAS,SAAK;IACd,kBAAkB,EAAE,kBAAkB,CAA0B;IAChE,0BAA0B,UAAS;IACnC,aAAa,UAAS;IACtB,oBAAoB,SAAO;IAC3B,oBAAoB,SAAO;IAC3B,mBAAmB,SAAK;IAEpC,OAAO;IAEP,OAAO,CAAC,MAAM,CAAC,eAAe,CAA2B;IACzD,MAAM,CAAC,WAAW,IAAI,wBAAwB;IAQxC,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAClC,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;CACzC;AAED,eAAO,IAAI,uBAAuB,0BAAyC,CAAC"} \ No newline at end of file diff --git a/types/Common/ApplyMaterial.d.ts b/types/Common/ApplyMaterial.d.ts new file mode 100644 index 0000000..49369a1 --- /dev/null +++ b/types/Common/ApplyMaterial.d.ts @@ -0,0 +1,40 @@ +import { Curve, Intersection, Object3D, Raycaster } from "three"; +import { Entity } from "../DatabaseServices/Entity/Entity"; +import { PhysicalMaterialRecord } from "../DatabaseServices/PhysicalMaterialRecord"; +import { Text } from "../DatabaseServices/Text/Text"; +import { VisualSpaceBox } from "../Editor/VisualSpaceBox"; +export declare const FilterTypes: (typeof Text | typeof Curve | typeof VisualSpaceBox)[]; +/** + * 应用材质命令:应用材质到 app SelectEntityList + * @param material 要应用的材质 + * @param canApplyToBoardGoodsInfo 是否可以应用到板材商品信息 (部分材质不可以应用到板材) + */ +export declare function ApplyMtlToSelectEntityListCmd(material: PhysicalMaterialRecord, canApplyToBoardGoodsInfo?: boolean): void; +/** + * 应用材质到 app SelectEntityList + * @param material 要应用的材质 + * @param canApplyToBoardGoodsInfo 是否可以应用到板材商品信息 (部分材质不可以应用到板材) + */ +export declare function ApplyMtlToSelectEntityList(material: PhysicalMaterialRecord, canApplyToBoardGoodsInfo?: boolean): void; +/** + * 应用材质到射线相交处的面 + * @param material 材质 + * @param en 实体 + * @param intersection 射线相交信息 + * @param raycaster 射线 + */ +export declare function ApplyPartMtlToInterFace(material: PhysicalMaterialRecord, en: Entity, intersection: Intersection, raycaster: Raycaster): void; +/** + * 应用材质到选中的实体 + * @param {PhysicalMaterialRecord} material 材质 + * @param {Object3D[]} selectedObj 选中的实体 + */ +export declare function ApplyMtlToSelectedObjs(material: PhysicalMaterialRecord, selectedObj: Object3D[]): void; +/** + * 获取使用指定材质的实体 + * @param {PhysicalMaterialRecord} mtl 材质 + * @param {boolean} [containErasedMtl=false] 是否包含被删除的材质 + * @return {*} {Entity[]} + */ +export declare function GetUseCurMtlEntities(mtl: PhysicalMaterialRecord, containErasedMtl?: boolean): Entity[]; +//# sourceMappingURL=ApplyMaterial.d.ts.map \ No newline at end of file diff --git a/types/Common/ApplyMaterial.d.ts.map b/types/Common/ApplyMaterial.d.ts.map new file mode 100644 index 0000000..bf5898b --- /dev/null +++ b/types/Common/ApplyMaterial.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ApplyMaterial.d.ts","sourceRoot":"","sources":["../../../src/Common/ApplyMaterial.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIjE,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAE3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAEpF,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAIrD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAO1D,eAAO,MAAM,WAAW,wDAAgC,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,sBAAsB,EAAE,wBAAwB,GAAE,OAAc,QAMvH;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,sBAAsB,EAAE,wBAAwB,GAAE,OAAc,QAwDpH;AAyBD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,sBAAsB,EAAE,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,QA+CrI;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,sBAAsB,EAAE,WAAW,EAAE,QAAQ,EAAE,QA4C/F;AAkCD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,sBAAsB,EAAE,gBAAgB,GAAE,OAAe,GAAG,MAAM,EAAE,CAgB7G"} \ No newline at end of file diff --git a/types/Common/BoardKeyList.d.ts b/types/Common/BoardKeyList.d.ts index fc8c726..5b3f4b5 100644 --- a/types/Common/BoardKeyList.d.ts +++ b/types/Common/BoardKeyList.d.ts @@ -38,6 +38,7 @@ export declare enum EBoardKeyList { GroovesAddWidth = "GroovesAddWidth",//槽加宽 GroovesAddDepth = "GroovesAddDepth",//槽加深 FrontDrill = "frontDrill",//正面排孔 - BackDrill = "backDrill" + BackDrill = "backDrill",//反面排孔 + SelectRoomCabinet = "selectRoomCabinet" } //# sourceMappingURL=BoardKeyList.d.ts.map \ No newline at end of file diff --git a/types/Common/BoardKeyList.d.ts.map b/types/Common/BoardKeyList.d.ts.map index b007da3..86c4b28 100644 --- a/types/Common/BoardKeyList.d.ts.map +++ b/types/Common/BoardKeyList.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardKeyList.d.ts","sourceRoot":"","sources":["../../../src/Common/BoardKeyList.ts"],"names":[],"mappings":"AACA,mCAAmC;AACnC,oBAAY,aAAa;IAErB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,KAAK,cAAc;IACnB,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,KAAK,cAAc,CAAE,IAAI;IACzB,GAAG,aAAa,CAAE,IAAI;IACtB,KAAK,UAAU;IACf,KAAK,UAAU,CAAE,IAAI;IACrB,YAAY,iBAAiB;IAC7B,OAAO,eAAe;IACtB;;OAEG;IACH,SAAS,cAAc;IACvB,aAAa,kBAAkB,CAAC,KAAK;IACrC;;OAEG;IACH,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,WAAW,gBAAgB;IAC3B,QAAQ,gBAAgB;IACxB,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;IAC3B,eAAe,oBAAoB;IACnC,UAAU,eAAe;IACzB,OAAO,YAAY,CAAC,IAAI;IACxB,YAAY,iBAAiB,CAAC,MAAM;IACpC,OAAO,YAAY,CAAE,MAAM;IAC3B,gBAAgB,qBAAqB,CAAE,KAAK;IAC5C,eAAe,oBAAoB,CAAK,KAAK;IAC7C,eAAe,oBAAoB,CAAK,KAAK;IAC7C,UAAU,eAAe,CAAC,MAAM;IAChC,SAAS,cAAc;CAC1B"} \ No newline at end of file +{"version":3,"file":"BoardKeyList.d.ts","sourceRoot":"","sources":["../../../src/Common/BoardKeyList.ts"],"names":[],"mappings":"AACA,mCAAmC;AACnC,oBAAY,aAAa;IAErB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,KAAK,cAAc;IACnB,QAAQ,aAAa;IACrB,WAAW,gBAAgB;IAC3B,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,KAAK,cAAc,CAAE,IAAI;IACzB,GAAG,aAAa,CAAE,IAAI;IACtB,KAAK,UAAU;IACf,KAAK,UAAU,CAAE,IAAI;IACrB,YAAY,iBAAiB;IAC7B,OAAO,eAAe;IACtB;;OAEG;IACH,SAAS,cAAc;IACvB,aAAa,kBAAkB,CAAC,KAAK;IACrC;;OAEG;IACH,UAAU,eAAe;IACzB,QAAQ,aAAa;IACrB,UAAU,eAAe;IACzB,UAAU,eAAe;IACzB,WAAW,gBAAgB;IAC3B,QAAQ,gBAAgB;IACxB,YAAY,iBAAiB;IAC7B,WAAW,gBAAgB;IAC3B,eAAe,oBAAoB;IACnC,UAAU,eAAe;IACzB,OAAO,YAAY,CAAC,IAAI;IACxB,YAAY,iBAAiB,CAAC,MAAM;IACpC,OAAO,YAAY,CAAE,MAAM;IAC3B,gBAAgB,qBAAqB,CAAE,KAAK;IAC5C,eAAe,oBAAoB,CAAK,KAAK;IAC7C,eAAe,oBAAoB,CAAK,KAAK;IAC7C,UAAU,eAAe,CAAC,MAAM;IAChC,SAAS,cAAc,CAAC,MAAM;IAC9B,iBAAiB,sBAAsB;CAC1C"} \ No newline at end of file diff --git a/types/Common/CSGIntersect.d.ts b/types/Common/CSGIntersect.d.ts index df81aee..723c68d 100644 --- a/types/Common/CSGIntersect.d.ts +++ b/types/Common/CSGIntersect.d.ts @@ -11,5 +11,5 @@ export interface Geom3Res { plane: [number, number, number, number]; }>; } -export declare function CSGIntersect(csg1: Geom3, csg2: Geom3, csg2tranfrom: Matrix4): Geom3Res; +export declare function CSGIntersect(csg1: Geom3, csg2: Geom3, csg2tranfrom: Matrix4): Geom3; //# sourceMappingURL=CSGIntersect.d.ts.map \ No newline at end of file diff --git a/types/Common/CSGIntersect.d.ts.map b/types/Common/CSGIntersect.d.ts.map index f727892..6877e09 100644 --- a/types/Common/CSGIntersect.d.ts.map +++ b/types/Common/CSGIntersect.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CSGIntersect.d.ts","sourceRoot":"","sources":["../../../src/Common/CSGIntersect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAE7D,OAAO,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AAEtD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,MAAM,WAAW,UAAU;IAEvB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,QAAQ;IAErB,QAAQ,EAAE,KAAK,CAAC;QACZ,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACtB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KAC3C,CAAC,CAAC;CACN;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,GAAG,QAAQ,CAOtF"} \ No newline at end of file +{"version":3,"file":"CSGIntersect.d.ts","sourceRoot":"","sources":["../../../src/Common/CSGIntersect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAE7D,OAAO,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAC;AAEtD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,MAAM,WAAW,UAAU;IAEvB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,QAAQ;IAErB,QAAQ,EAAE,KAAK,CAAC;QACZ,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACtB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;KAC3C,CAAC,CAAC;CACN;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,GAAG,KAAK,CAOnF"} \ No newline at end of file diff --git a/types/Common/CheckoutVaildValue.d.ts b/types/Common/CheckoutVaildValue.d.ts index a86a954..b7b4928 100644 --- a/types/Common/CheckoutVaildValue.d.ts +++ b/types/Common/CheckoutVaildValue.d.ts @@ -17,7 +17,9 @@ export declare enum CheckObjectType { GT0Num = "gt0num", BMP = "batchmodifypanel", BF = "boardFind",//查找修改 - CONF = "configuration" + CONF = "configuration",//配置 + Modeling2Depth = "modeling2Depth",// 大于0且支持BH + ExpireDays = "expireDays" } export declare namespace CheckoutValid { function HasInvailValue(obj: Object, objType: CheckObjectType): string; diff --git a/types/Common/CheckoutVaildValue.d.ts.map b/types/Common/CheckoutVaildValue.d.ts.map index 9d54cab..de3d283 100644 --- a/types/Common/CheckoutVaildValue.d.ts.map +++ b/types/Common/CheckoutVaildValue.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CheckoutVaildValue.d.ts","sourceRoot":"","sources":["../../../src/Common/CheckoutVaildValue.ts"],"names":[],"mappings":"AAIA,oBAAY,eAAe;IAEvB,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,SAAS;IACX,EAAE,qBAAqB;IACvB,EAAE,aAAa;IACf,GAAG,YAAY;IACf,GAAG,qBAAqB;IACxB,GAAG,sBAAsB;IACzB,GAAG,uBAAuB;IAC1B,GAAG,WAAW;IACd,UAAU,YAAY;IACtB,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,YAAY;IACZ,MAAM,WAAW;IACjB,GAAG,qBAAqB;IACxB,EAAE,cAAc,CAAC,MAAM;IACvB,IAAI,kBAAkB;CACzB;AAED,yBAAiB,aAAa,CAC9B;IACI,SAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,CA2D5E;IACD,SAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,UAmDtE;IACD,SAAgB,wBAAwB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAerE;IACD,SAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA6GhE;IACD,SAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAoE1E;IACD,SAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAuDjE;IACD,SAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAsChE;IACD,SAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAoE/D;IACD,SAAgB,8BAA8B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB3E;IACD,SAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAanE;IACD,SAAgB,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAwBpE;IACD,SAAgB,8BAA8B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAU3E;IACD,SAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAoCnE;IACD,SAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAiClE;IAED,SAAgB,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAyCpE;IACD,SAAgB,2BAA2B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA2CxE;CACJ"} \ No newline at end of file +{"version":3,"file":"CheckoutVaildValue.d.ts","sourceRoot":"","sources":["../../../src/Common/CheckoutVaildValue.ts"],"names":[],"mappings":"AAIA,oBAAY,eAAe;IAEvB,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,SAAS;IACX,EAAE,qBAAqB;IACvB,EAAE,aAAa;IACf,GAAG,YAAY;IACf,GAAG,qBAAqB;IACxB,GAAG,sBAAsB;IACzB,GAAG,uBAAuB;IAC1B,GAAG,WAAW;IACd,UAAU,YAAY;IACtB,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,YAAY;IACZ,MAAM,WAAW;IACjB,GAAG,qBAAqB;IACxB,EAAE,cAAc,CAAC,MAAM;IACvB,IAAI,kBAAkB,CAAC,IAAI;IAC3B,cAAc,mBAAmB,CAAC,WAAW;IAC7C,UAAU,eAAe;CAC5B;AAED,yBAAiB,aAAa,CAC9B;IACI,SAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,CA2D5E;IACD,SAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,UAkEtE;IACD,SAAgB,wBAAwB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAerE;IACD,SAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAgJhE;IACD,SAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAwE1E;IACD,SAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAuDjE;IACD,SAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAsChE;IACD,SAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAoE/D;IACD,SAAgB,8BAA8B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAgB3E;IACD,SAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAanE;IACD,SAAgB,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAwBpE;IACD,SAAgB,8BAA8B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAU3E;IACD,SAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA0CnE;IACD,SAAgB,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAoClE;IAED,SAAgB,uBAAuB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA+CpE;IACD,SAAgB,2BAA2B,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAmDxE;CACJ"} \ No newline at end of file diff --git a/types/Common/ColorPalette.d.ts b/types/Common/ColorPalette.d.ts index d12d637..dbb93bd 100644 --- a/types/Common/ColorPalette.d.ts +++ b/types/Common/ColorPalette.d.ts @@ -14,7 +14,9 @@ export declare class ColorMaterial { private static _BasicDoubleSideMaterialMap; static GetBasicMaterialDoubleSide(color: number): MeshBasicMaterial; private static _ConceptualMaterial; - static GetConceptualMaterial(color: number, side?: Side, enableTransparent?: boolean, freeze?: boolean, opacity?: number): ShaderMaterial; + static GetConceptualMaterial(color: number, side?: Side, enableTransparent?: boolean): ShaderMaterial; + private static _ConceptualTransparentMaterial; + static GetConceptualTransparentMaterial(color: number, side?: Side): ShaderMaterial; static UpdateConceptualMaterial(useLogBuf: boolean): void; private static _printConceptualMaterial; static GetPrintConceptualMaterial(): ShaderMaterial; diff --git a/types/Common/ColorPalette.d.ts.map b/types/Common/ColorPalette.d.ts.map index 8af6976..5d078aa 100644 --- a/types/Common/ColorPalette.d.ts.map +++ b/types/Common/ColorPalette.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ColorPalette.d.ts","sourceRoot":"","sources":["../../../src/Common/ColorPalette.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAyB,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,cAAc,EAAE,IAAI,EAAoB,MAAM,OAAO,CAAC;AACvJ,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAIrE,eAAO,MAAM,YAAY,YAwQxB,CAAC;AAEF,eAAO,MAAM,UAAU,IAAI,CAAC;AAG5B,qBAAa,aAAa;IAEtB,OAAO;IACP,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAwC;IACvE,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAwC;IACxE,MAAM,CAAC,SAAS,UAAS;IACzB,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,iBAAiB;IAUxE,OAAO,CAAC,MAAM,CAAC,eAAe,CAAyC;IACvE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB;IAYxD,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB;IASzD,OAAO,CAAC,MAAM,CAAC,2BAA2B,CAAwC;IAClF,MAAM,CAAC,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB;IASnE,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAA0C;IAC5E,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,IAAgB,EAAE,iBAAiB,UAAQ,EAAE,MAAM,UAAQ,EAAE,OAAO,CAAC,EAAE,MAAM;IA8B/H,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,OAAO;IAKlD,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAiB;IACxD,MAAM,CAAC,0BAA0B;IAiBjC,OAAO,CAAC,MAAM,CAAC,4BAA4B,CAA6C;IACxF,MAAM,CAAC,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAUjE,OAAO,CAAC,MAAM,CAAC,6BAA6B,CAA6C;IACzF,MAAM,CAAC,4BAA4B,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAUlE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM;IAU7B,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAAoB;IAC1D,MAAM,CAAC,yBAAyB;IAOhC,MAAM,CAAC,4BAA4B;IAKnC,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAoB;IACzD,MAAM,CAAC,wBAAwB;IAO/B,MAAM,CAAC,2BAA2B;IAOlC,MAAM,CAAC,kBAAkB,qBAItB;IAGH,MAAM,CAAC,gBAAgB,qBAIpB;IAGH,MAAM,CAAC,gBAAgB,eAMpB;IAGH,MAAM,CAAC,2BAA2B,oBAI/B;IAEH,MAAM,CAAC,uBAAuB,oBAG3B;CACN"} \ No newline at end of file +{"version":3,"file":"ColorPalette.d.ts","sourceRoot":"","sources":["../../../src/Common/ColorPalette.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAyB,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,cAAc,EAAE,IAAI,EAAoB,MAAM,OAAO,CAAC;AACvJ,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAIrE,eAAO,MAAM,YAAY,YAwQxB,CAAC;AAEF,eAAO,MAAM,UAAU,IAAI,CAAC;AAG5B,qBAAa,aAAa;IAEtB,OAAO;IACP,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAwC;IACvE,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAwC;IACxE,MAAM,CAAC,SAAS,UAAS;IACzB,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,iBAAiB;IAUxE,OAAO,CAAC,MAAM,CAAC,eAAe,CAAyC;IACvE,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB;IAYxD,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB;IASzD,OAAO,CAAC,MAAM,CAAC,2BAA2B,CAAwC;IAClF,MAAM,CAAC,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB;IASnE,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAA0C;IAC5E,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,IAAgB,EAAE,iBAAiB,UAAQ;IAqB7F,OAAO,CAAC,MAAM,CAAC,8BAA8B,CAA0C;IACvF,MAAM,CAAC,gCAAgC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,IAAgB;IAiB7E,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,OAAO;IAKlD,OAAO,CAAC,MAAM,CAAC,wBAAwB,CAAiB;IACxD,MAAM,CAAC,0BAA0B;IAiBjC,OAAO,CAAC,MAAM,CAAC,4BAA4B,CAA6C;IACxF,MAAM,CAAC,2BAA2B,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAUjE,OAAO,CAAC,MAAM,CAAC,6BAA6B,CAA6C;IACzF,MAAM,CAAC,4BAA4B,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAUlE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM;IAU7B,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAAoB;IAC1D,MAAM,CAAC,yBAAyB;IAOhC,MAAM,CAAC,4BAA4B;IAKnC,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAoB;IACzD,MAAM,CAAC,wBAAwB;IAO/B,MAAM,CAAC,2BAA2B;IAOlC,MAAM,CAAC,kBAAkB,qBAItB;IAGH,MAAM,CAAC,gBAAgB,qBAIpB;IAGH,MAAM,CAAC,gBAAgB,eAMpB;IAGH,MAAM,CAAC,2BAA2B,oBAI/B;IAEH,MAAM,CAAC,uBAAuB,oBAG3B;CACN"} \ No newline at end of file diff --git a/types/Common/CommandNames.d.ts b/types/Common/CommandNames.d.ts index 2e82ce3..55a409f 100644 --- a/types/Common/CommandNames.d.ts +++ b/types/Common/CommandNames.d.ts @@ -7,12 +7,14 @@ export declare enum CommandNames { Clearkjltoken = "CLEARKJLTOKEN", JiaJuImport = "JIAJUIMPORT", CFImport = "CFIMPORT", + ImgImport = "IMGIMPORT", Group = "GROUP", DXFImport = "DXF", DWGImport = "DWG", FBXImport = "FBX", Insert = "INSERT", Line = "LINE",//直线 + Tangent = "TANGENT",//切线 XLine = "XLINE", Undo = "UNDO",//撤销 Redo = "REDO",//重做 @@ -31,6 +33,7 @@ export declare enum CommandNames { MoveAxis = "MOVEAXIS", Rotate = "ROTATE",//旋转 RotateRefer = "ROTATEREFER",//旋转(参考) + ShowDirection = "SHOWDIRECTION",//显示线段方向 Revolve = "REVOLVE",//车削实体 Sphere = "SPHERE", SpliteTemplate = "SPLITETEMPLATE", @@ -58,6 +61,8 @@ export declare enum CommandNames { HideSelect = "HIDESELECT", HideUnSelect = "HIDEUNSELECT", Show = "SHOW", + Isolate = "ISOLATE",//隔离 + UnIsolate = "UNISOLATE",//取消隔离 Save = "SAVE", SaveAs = "SAVEAS", SaveToLocal = "SAVETOLOCAL", @@ -136,7 +141,7 @@ export declare enum CommandNames { FZWL = "FZWL", ActicityLayerBoard = "ACTICITYLAYERBOARD", TestFb = "TESTFENGBIAN", - TestModeling = "TESTMODELING", + TestSideModeling = "TESTSIDEMODELING", Mirror = "MIRROR", Topline = "TOPLINE", Winerack = "WINERACK", @@ -147,6 +152,7 @@ export declare enum CommandNames { ComanPanel = "COMMANDPANEL", Comanp = "COMANP", PropertiesBar = "PROPERTIESBAR", + LayerListBar = "LAYERLISTBAR", ModuleBar = "MODULEBAR", ChangeLayout = "CHANGELAYOUT", RightPanelTemplateParam = "RIGHTPANELTEMPLATEPARAM", @@ -160,7 +166,7 @@ export declare enum CommandNames { Config = "CONFIG", Enablesyncdata = "ENABLESYNCDATA", DimStyle = "DIMSTYLE", - TextStyle = "TEXTSTYLE", + TextConfig = "TEXTCONFIG", ToggleDrillingReactor = "TOGGLEDRILLINGREACTOR", AddAloneDrillLock = "ADDALONEDRILLLOCK", AddAssocDrillLock = "ADDASSOCDRILLLOCK", @@ -192,8 +198,15 @@ export declare enum CommandNames { TemplateDesign = "TEMPLATEDESIGN", TemplateCollection = "TEMPLATECOLLECTION", TemplateSearch = "TEMPLATESEARCH", - TemplateDelete = "TEMPLATEDELETE", + TemplateDelete = "TEMPLATEDELETE",// 删除模板节点 + TemplateDelete2 = "TEMPLATEDELETE2",// 删除模板节点 保留空间模块· + TemplateDelete3 = "TEMPLATEDELETE3",// 删除模板节点及其根空间 + TemplateDelete4 = "TEMPLATEDELETE4",// 删除模板及其组(抽屉组、门板组) TemplateCheck = "TEMPLATECHECK", + /** 插入模块 */ + InsertModule = "\u63D2\u5165\u6A21\u5757", + /** 编辑模块 */ + EditTemplate = "\u7F16\u8F91\u6A21\u677F", RotateTemplate = "ROTATETEMP", Print = "PRINT", Extrude = "EXTRUDE", @@ -220,7 +233,6 @@ export declare enum CommandNames { Curve2Rect = "CURVE2RECT", Pl2Br = "RECT2BOARD", Curve2VSBox = "CURVE2VSBOX", - templateDelete = "TEMPLATEDELETE", RotateTemplateSpace = "ROTATETEMPLATESPACE", SplitTemplateY = "SPLITTEMPLATEY", Attach = "ATTACH", @@ -233,6 +245,7 @@ export declare enum CommandNames { ExportobjMtl = "EXPORTOBJMTL", ExportObj2 = "EXPORTOBJ2", ExportSTL = "EXPORTSTL", + ExportGLTF = "EXPORTGLTF", UpdateBoardInfos = "UPDATEBOARDINFOS", ToggleUI = "TOGGLEUI", BoardReplaceTempate = "BOARDREPLACETEMPLATE", @@ -253,6 +266,8 @@ export declare enum CommandNames { ChangeColorByMaterial = "CHANGECOLORBYMATERIAL",//根据板材改颜色 ChangeColorByRoomOrCabinet = "CHANGECOLORBYRROOMORCABINET",//根据房间名及柜名修改颜色 ChangeBoardColorByPBFace = "CHANGEBOARDCOLORBYPBFACE",//根据排版面改颜色 + ChangeColorByLinesType = "CHANGECOLORBYLINESTYPE",//根据板件纹路修改颜色 + ChangeColorByDrillLock = "CHANGECOLORBYDRILLLOCK",//根据排钻锁修改颜色 TextModifyTool = "TEXTMODIFYTOOL",//批量替换文字 RestoreColor = "RESTORECOLOR", SelectAll = "SELECTALL", @@ -275,6 +290,7 @@ export declare enum CommandNames { OneKeyLayout = "ONEKEYLAYOUT", SwitchLines = "SWITCHLINES", SwitchOpenDirLines = "SWITCHOPENDIRLINES",//切换开门方向纹路 + ForceOpendirOrNameChange = "FORCEOPENDIECHANGE",//强制修改板名或开门方向 OneKeyPrint = "ONEKEYPRINT",//一键打印 SetHoleNoneType = "SETHOLENONETYPE", FindMaxSizeBoard = "FINDMAXSIZEBOARDS", @@ -287,6 +303,7 @@ export declare enum CommandNames { CuttingFace = "CUTTINGFACE",//切割面 CuttingRectFace = "CUTTINGRECTFACE",//切割矩形面 DrawTempByImport = "DRAWTEMPBYIMPORT", + DownloadTemplateTable = "DOWNLOADTEMPLATETABLE",// 下载模板表格 CheckEdge = "CHECKEDGE",//封边检查 CheckPlaceFace = "CHECKPLACEFACE",//排版面视觉样式显示 ModelGroove = "MODELGROOVE",//造型槽 @@ -295,6 +312,7 @@ export declare enum CommandNames { CleanCustomNumber = "CLEANCUSTOMNUMBER",//清除自定义编号 Knife = "KNIFES",//刀具管理 ModifyGroovesKnife = "MODIFYGROOVESKNIFE",//修改凹槽加长 宽 深 刀半径 + OneClickInspection = "ONECLICKINSPECTION",//一键检查 R2B2 = "RECT2BOARD2", FixIntSelfContour = "FIXINTSELFCONTOUR", ParseHinge = "PARSEHINGE",//分析门板的铰链 @@ -313,10 +331,13 @@ export declare enum CommandNames { ParseBoardName = "PARSEBOARDNAME", SetBRXAxis = "SETBRXAXIS", ResetCustomCommand = "RESETCUSTOMCOMMAND",//重置快捷键列表 + DownloadCustomCommand = "DOWNLOADCUSTOMCOMMAND",//下载快捷键列表 + UploadCustomCommand = "UPLOADCUSTOMCOMMAND",//上传快捷键列表 EditorLattice = "EDITORLATTICE", DownloadConfig = "DOWNLOADCONFIG", UploadConfig = "UPLOADCONFIG", TestM = "TESTM",//模拟走刀 + HoleGrooveDim = "HOLEGROOVEDIM",//孔洞槽标注 TestFB = "TESTFB",//模拟封边 FlipZMatrix = "FLIPZMATRIX",//Z向量翻转 对Arc Circle Polyline Line进行翻转 Z轴方向相反,图形保持不变 SetLineOCS = "SETLINEOCS",//设置直线的UCS @@ -324,9 +345,11 @@ export declare enum CommandNames { M0 = "M0", PackageGroupMove0 = "PACKAGEGROUPMOVE0", ApplyMtl = "APPLYMTL",//应用材质 + DeleteMtl = "DELETEMTL",//删除材质 封边属性编辑 = "\u5C01\u8FB9\u5C5E\u6027\u7F16\u8F91", 板边备注编辑 = "\u677F\u8FB9\u5907\u6CE8\u7F16\u8F91", 排钻属性编辑 = "\u6392\u94BB\u5C5E\u6027\u7F16\u8F91", + 预留边属性编辑 = "\u9884\u7559\u8FB9\u5C5E\u6027\u7F16\u8F91", SwitchServers = "SWITCHSERVERS", Replace = "\u91CD\u65B0\u653E\u7F6E\u6A21\u578B", Down = "DOWN", @@ -361,6 +384,8 @@ export declare enum CommandNames { Gallery = "GALLERY",//打开画廊 Freeze = "FREEZE",//冻结实体 UnFreeze = "UNFREEZE",//解冻实体 + LockMaterial = "LOCKMATERIAL",// 锁定实体材质 + UnLockMaterial = "UNLOCKMATERIAL",// 解锁实体材质 ShareView = "SHAREVIEW",//分享图纸(只读模式) VisibleInRender = "VISIBLEINRENDER",//渲染器中显示实体 UnVisibleInRender = "UNVISIBLEINRENDER",//渲染器中隐藏实体 @@ -371,6 +396,31 @@ export declare enum CommandNames { Hide2DPathObject = "HIDE2DPATHOBJECT",//隐藏二维刀路差集 PickUp2DModelCsgs = "PICKUP2DMODELCSGS",//提取二维刀路的刀具轮廓 TemplateGroup = "TEMPLATEGROUP",//模块组合 - Modeling = "MODELING" + Curved = "CURVED",// 弯曲成曲面板 + Modeling = "MODELING",//一键建模 + AlignLineGroup = "ALIGNLINEGROUP",//呼出对纹组 + AddAlignLineGroup = "ADDALIGNLINEGROUP",//添加对纹组 + DeleteAlignLineGroup = "DELETEALIGNLINEGROUP",//删除对纹组 + HighlightNode = "HIGHLIGHTNODE",//高亮本节点 + HighlightNodeAndChilds = "HIGHLIGHTNODEANDCHILDS",//亮显本节点及子节点 + ClearCDBrHoleModeling = "CLEARCDBRHOLEMODELING",//板件取消孔槽加工 + AppendLayer = "\u521B\u5EFA\u56FE\u5C42", + AppendLayerFolder = "\u521B\u5EFA\u56FE\u5C42\u6587\u4EF6\u5939", + RemoveLayer = "\u5220\u9664\u56FE\u5C42", + RemoveLayerFolder = "\u5220\u9664\u56FE\u5C42\u6587\u4EF6\u5939", + SetCurrentLayer = "\u7F6E\u4E3A\u5F53\u524D\u56FE\u5C42", + PutEntitysInLayer = "\u4FEE\u6539\u5B9E\u4F53\u6240\u5728\u7684\u56FE\u5C42", + UpdateShow = "\u8BBE\u7F6E\u56FE\u5C42\u662F\u5426\u663E\u793A", + UpdateLock = "\u8BBE\u7F6E\u56FE\u5C42\u662F\u5426\u9501\u5B9A", + UpdateViewPoint = "\u8BBE\u7F6E\u56FE\u5C42\u662F\u5426\u89C6\u53E3\u51BB\u7ED3", + UpdateColor = "\u8BBE\u7F6E\u56FE\u5C42\u989C\u8272", + RenameLayer = "\u91CD\u547D\u540D\u56FE\u5C42", + RenameLayerFolder = "\u91CD\u547D\u540D\u56FE\u5C42\u6587\u4EF6\u5939", + MoveLayer = "\u79FB\u52A8\u56FE\u5C42", + MoveLayerFolder = "\u79FB\u52A8\u56FE\u5C42\u6587\u4EF6\u5939", + DrawArcBoard = "DRAWARCBOARD",//绘制圆弧板 + PartsAnalysis = "PARTSANALYSIS",// 复合实体名称写入关联板件备注 + Style = "STYLE",//字体样式 + ClearTagCommand = "CLEARTAGCOMMAND" } //# sourceMappingURL=CommandNames.d.ts.map \ No newline at end of file diff --git a/types/Common/CommandNames.d.ts.map b/types/Common/CommandNames.d.ts.map index fe12f79..e8a1d74 100644 --- a/types/Common/CommandNames.d.ts.map +++ b/types/Common/CommandNames.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CommandNames.d.ts","sourceRoot":"","sources":["../../../src/Common/CommandNames.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"CommandNames.d.ts","sourceRoot":"","sources":["../../../src/Common/CommandNames.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Common/CommonSelectOption.d.ts b/types/Common/CommonSelectOption.d.ts index d732e62..8e68e82 100644 --- a/types/Common/CommonSelectOption.d.ts +++ b/types/Common/CommonSelectOption.d.ts @@ -1,5 +1,5 @@ import { FaceDirection } from "../Add-on/DrawDrilling/DrillType"; -import { ComposingType, LinesType } from "../DatabaseServices/Entity/BoardInterface"; +import { BoardOpenDir, ComposingType, LinesType } from "../DatabaseServices/Entity/BoardInterface"; /**排版面选择项 */ export declare const ComposingFaceSelectOption: { label: string; @@ -13,4 +13,8 @@ export declare const BigFaceSelectOption: { label: string; value: FaceDirection; }[]; +export declare const openDirOptions: { + label: string; + value: BoardOpenDir; +}[]; //# sourceMappingURL=CommonSelectOption.d.ts.map \ No newline at end of file diff --git a/types/Common/CommonSelectOption.d.ts.map b/types/Common/CommonSelectOption.d.ts.map index 563c94a..82309c4 100644 --- a/types/Common/CommonSelectOption.d.ts.map +++ b/types/Common/CommonSelectOption.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CommonSelectOption.d.ts","sourceRoot":"","sources":["../../../src/Common/CommonSelectOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAC;AAErF,YAAY;AACZ,eAAO,MAAM,yBAAyB;;;GAarC,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;GAIhC,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;GAEc,CAAC"} \ No newline at end of file +{"version":3,"file":"CommonSelectOption.d.ts","sourceRoot":"","sources":["../../../src/Common/CommonSelectOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAC;AAEnG,YAAY;AACZ,eAAO,MAAM,yBAAyB;;;GAarC,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;GAIhC,CAAC;AAEF,eAAO,MAAM,mBAAmB;;;GAG/B,CAAC;AAEF,eAAO,MAAM,cAAc;;;GAyB1B,CAAC"} \ No newline at end of file diff --git a/types/Common/CurveUtils.d.ts b/types/Common/CurveUtils.d.ts index feff57e..d260279 100644 --- a/types/Common/CurveUtils.d.ts +++ b/types/Common/CurveUtils.d.ts @@ -60,6 +60,11 @@ export declare function MergeCurvelist(cus: Curve[]): Curve[]; export declare function SwapParam(res: IntersectResult[]): IntersectResult[]; export declare function ComputerCurvesNormalOCS(curves: Curve[], allowAutoCalc?: boolean): Matrix4 | undefined; export declare function Pts2Polyline(pts: (Vec3 | Vec2)[], isClose: boolean): Polyline; -/**封闭多段线 分割成矩形 */ -export declare function PolylineSpliteRect(outline: Polyline): Polyline[]; +/** + * 将封闭的多段线,通过和y轴平行的线,分割成多个矩形 + * @param outline 这个多边形是横平竖直的,否则返回自身 + * @param polylineParalleXYFuzz 平行x或y的容差 + * @returns 裁剪后的矩形集 + */ +export declare function PolylineSpliteRect(outline: Polyline, polylineParalleXYFuzz?: number): Polyline[]; //# sourceMappingURL=CurveUtils.d.ts.map \ No newline at end of file diff --git a/types/Common/CurveUtils.d.ts.map b/types/Common/CurveUtils.d.ts.map index 515b340..7c0a974 100644 --- a/types/Common/CurveUtils.d.ts.map +++ b/types/Common/CurveUtils.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CurveUtils.d.ts","sourceRoot":"","sources":["../../../src/Common/CurveUtils.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"CurveUtils.d.ts","sourceRoot":"","sources":["../../../src/Common/CurveUtils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Common/HostUrl.d.ts b/types/Common/HostUrl.d.ts index 3c6d98c..c790837 100644 --- a/types/Common/HostUrl.d.ts +++ b/types/Common/HostUrl.d.ts @@ -38,7 +38,10 @@ export declare const MaterialUrls: { export declare const ShopUrls: { get: string; }; -export declare const ResourcesCDN_HOST = "https://cdn.qicad.com/"; +export declare const ResourcesCDN_HOST = "https://cdn.cfcad.cn/"; +export declare const GoodsClassUrls: { + get: string; +}; export declare const ToplineUrls: { create: string; get: string; @@ -152,5 +155,8 @@ export declare const PrivateModule: { GetModuleList: string; UpdateModule: string; }; -export declare const FBXURL: string; +export declare const OssSign: string; +export declare const NOTICE: string; +export declare const NOTICEPNG: string; +export declare const PrivateFileDirCapacity: string; //# sourceMappingURL=HostUrl.d.ts.map \ No newline at end of file diff --git a/types/Common/HostUrl.d.ts.map b/types/Common/HostUrl.d.ts.map index c14c031..e2e0fe6 100644 --- a/types/Common/HostUrl.d.ts.map +++ b/types/Common/HostUrl.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HostUrl.d.ts","sourceRoot":"","sources":["../../../src/Common/HostUrl.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,YAAY,QAAe,CAAC;AAEzC,eAAO,MAAM,OAAO;;;;;;;;;;CAUnB,CAAC;AACF,eAAO,MAAM,OAAO;;;;;;CAMnB,CAAC;AACF,eAAO,MAAM,MAAM;;;;;;CAMlB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;CAUxB,CAAC;AAEF,eAAO,MAAM,QAAQ;;CAEpB,CAAC;AAEF,eAAO,MAAM,iBAAiB,2BAA2B,CAAC;AAC1D,eAAO,MAAM,WAAW;;;;;;;CAOvB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;CASpB,CAAC;AACF,eAAO,MAAM,YAAY;;;;;;;;;;;;CAYxB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;CAItB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;CAGpB,CAAC;AAEF,YAAY;AACZ,eAAO,MAAM,SAAS;;;CAGrB,CAAC;AAEF,eAAe;AACf,eAAO,MAAM,SAAS,QAAmC,CAAC;AAE1D,mBAAmB;AACnB,eAAO,MAAM,cAAc,UAK1B,CAAC;AAEF,UAAU;AACV,eAAO,MAAM,kBAAkB,QAAqD,CAAC;AACrF,eAAO,MAAM,kBAAkB,QAAwD,CAAC;AAExF,eAAO,MAAM,eAAe,QAA2C,CAAC;AAExE,eAAO,MAAM,aAAa,QAAqC,CAAC;AAEhE,eAAO,MAAM,OAAO,QAAgC,CAAC;AAErD,eAAO,MAAM,OAAO,QAAuC,CAAC;AAC5D,eAAO,MAAM,aAAa,QAAqC,CAAC;AAEhE,eAAO,MAAM,OAAO;;;;;CAKnB,CAAC;AAEF,eAAO,MAAM,cAAc;;;;CAI1B,CAAC;AAGF,eAAO,MAAM,cAAc,QAAqC,CAAC;AAOjE,eAAO,IAAI,cAAc,QAAkC,CAAC;AAC5D,eAAO,IAAI,mBAAmB,QAAqC,CAAC;AAIpE,eAAO,MAAM,kBAAkB;;;;;;;CAO9B,CAAC;AAGF,eAAO,MAAM,cAAc;;;;;;;;;;CAU1B,CAAC;AAGF,eAAO,MAAM,UAAU;;;;;;;;;;;;;CAatB,CAAC;AAGF,eAAO,MAAM,WAAW,QAAoC,CAAC;AAG7D,eAAO,MAAM,aAAa;;;;;;;CAOzB,CAAC;AAEF,eAAO,MAAM,MAAM,QAAsC,CAAC"} \ No newline at end of file +{"version":3,"file":"HostUrl.d.ts","sourceRoot":"","sources":["../../../src/Common/HostUrl.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,YAAY,QAAe,CAAC;AAEzC,eAAO,MAAM,OAAO;;;;;;;;;;CAUnB,CAAC;AACF,eAAO,MAAM,OAAO;;;;;;CAMnB,CAAC;AACF,eAAO,MAAM,MAAM;;;;;;CAMlB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;CAUxB,CAAC;AAEF,eAAO,MAAM,QAAQ;;CAEpB,CAAC;AAEF,eAAO,MAAM,iBAAiB,0BAA0B,CAAC;AACzD,eAAO,MAAM,cAAc;;CAE1B,CAAC;AAEF,eAAO,MAAM,WAAW;;;;;;;CAOvB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;;;;;CASpB,CAAC;AACF,eAAO,MAAM,YAAY;;;;;;;;;;;;CAYxB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;CAItB,CAAC;AAEF,eAAO,MAAM,QAAQ;;;CAGpB,CAAC;AAEF,YAAY;AACZ,eAAO,MAAM,SAAS;;;CAGrB,CAAC;AAEF,eAAe;AACf,eAAO,MAAM,SAAS,QAAmC,CAAC;AAE1D,mBAAmB;AACnB,eAAO,MAAM,cAAc,UAK1B,CAAC;AAEF,UAAU;AACV,eAAO,MAAM,kBAAkB,QAAqD,CAAC;AACrF,eAAO,MAAM,kBAAkB,QAAwD,CAAC;AAExF,eAAO,MAAM,eAAe,QAA2C,CAAC;AAExE,eAAO,MAAM,aAAa,QAAqC,CAAC;AAEhE,eAAO,MAAM,OAAO,QAAgC,CAAC;AAErD,eAAO,MAAM,OAAO,QAAuC,CAAC;AAC5D,eAAO,MAAM,aAAa,QAAqC,CAAC;AAEhE,eAAO,MAAM,OAAO;;;;;CAKnB,CAAC;AAEF,eAAO,MAAM,cAAc;;;;CAI1B,CAAC;AAGF,eAAO,MAAM,cAAc,QAAqC,CAAC;AAOjE,eAAO,IAAI,cAAc,QAAgC,CAAC;AAC1D,eAAO,IAAI,mBAAmB,QAAuC,CAAC;AAItE,eAAO,MAAM,kBAAkB;;;;;;;CAO9B,CAAC;AAGF,eAAO,MAAM,cAAc;;;;;;;;;;CAU1B,CAAC;AAGF,eAAO,MAAM,UAAU;;;;;;;;;;;;;CAatB,CAAC;AAGF,eAAO,MAAM,WAAW,QAAoC,CAAC;AAG7D,eAAO,MAAM,aAAa;;;;;;;CAOzB,CAAC;AAEF,eAAO,MAAM,OAAO,QAAsC,CAAC;AAG3D,eAAO,MAAM,MAAM,QAAgC,CAAC;AACpD,eAAO,MAAM,SAAS,QAAoC,CAAC;AAG3D,eAAO,MAAM,sBAAsB,QAAwC,CAAC"} \ No newline at end of file diff --git a/types/Common/HotKeyList.d.ts b/types/Common/HotKeyList.d.ts index e4b0700..06339f0 100644 --- a/types/Common/HotKeyList.d.ts +++ b/types/Common/HotKeyList.d.ts @@ -1,6 +1,7 @@ export declare enum HotkeyList { C1 = "Control+1", C2 = "Control+2", + C3 = "Control+3", CA = "Control+A", CB = "Control+B", CC = "Control+C", diff --git a/types/Common/HotKeyList.d.ts.map b/types/Common/HotKeyList.d.ts.map index 6bac0ec..b92f708 100644 --- a/types/Common/HotKeyList.d.ts.map +++ b/types/Common/HotKeyList.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HotKeyList.d.ts","sourceRoot":"","sources":["../../../src/Common/HotKeyList.ts"],"names":[],"mappings":"AAAA,oBAAY,UAAU;IAElB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,oBAAoB;IACvB,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ;;OAEG;IACH,EAAE,UAAU;IACZ;;OAEG;IACH,EAAE,UAAU;IACZ;;OAEG;IACH,EAAE,UAAU;IACZ;;OAEG;IACH,EAAE,UAAU;IACZ,IAAI,UAAU;IACd,CAAC,WAAW;IACZ,GAAG,QAAQ;IACX,EAAE,OAAO;CACZ"} \ No newline at end of file +{"version":3,"file":"HotKeyList.d.ts","sourceRoot":"","sources":["../../../src/Common/HotKeyList.ts"],"names":[],"mappings":"AAAA,oBAAY,UAAU;IAElB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,EAAE,cAAc;IAChB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,kBAAkB;IACrB,GAAG,oBAAoB;IACvB,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ,EAAE,UAAU;IACZ;;OAEG;IACH,EAAE,UAAU;IACZ;;OAEG;IACH,EAAE,UAAU;IACZ;;OAEG;IACH,EAAE,UAAU;IACZ;;OAEG;IACH,EAAE,UAAU;IACZ,IAAI,UAAU;IACd,CAAC,WAAW;IACZ,GAAG,QAAQ;IACX,EAAE,OAAO;CACZ"} \ No newline at end of file diff --git a/types/Common/InterfereUtil.d.ts.map b/types/Common/InterfereUtil.d.ts.map index 5b4e398..b339460 100644 --- a/types/Common/InterfereUtil.d.ts.map +++ b/types/Common/InterfereUtil.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"InterfereUtil.d.ts","sourceRoot":"","sources":["../../../src/Common/InterfereUtil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAEpE,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sDAAsD,CAAC;AAM/F,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAQ1C,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,CAAC;AAE9D,qBAAa,kBAAkB;IAER,aAAa,EAAE,QAAQ;gBAAvB,aAAa,GAAE,QAA4C;IAI9E,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC;IAC3C,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAOxC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAa;IACpC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAM;IAC1C,UAAU,CAAC,UAAU,EAAE,CAAC,uBAAuB,GAAG,YAAY,GAAG,UAAU,CAAC,EAAE;IAkB9E,YAAY,CAAC,EAAE,EAAE,MAAM;IAQjB,KAAK,CAAC,UAAU,EAAE,CAAC,uBAAuB,GAAG,YAAY,GAAG,UAAU,CAAC,EAAE,EAAE,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI;IAgIxI,KAAK;IAML,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAa;IACzC,OAAO,CAAC,MAAM;IAkBd,QAAQ,mBAA0B;IAClC,OAAO,CAAC,MAAM;IASd,QAAQ,oBAA2B;IACnC,OAAO,CAAC,MAAM;CAQjB"} \ No newline at end of file +{"version":3,"file":"InterfereUtil.d.ts","sourceRoot":"","sources":["../../../src/Common/InterfereUtil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAK7D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAW,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AAEpE,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,sDAAsD,CAAC;AAK/F,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAQ1C,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,CAAC;AAE9D,qBAAa,kBAAkB;IAER,aAAa,EAAE,QAAQ;gBAAvB,aAAa,GAAE,QAA4C;IAI9E,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC;IAC3C,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAOxC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAa;IACpC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAM;IAC1C,UAAU,CAAC,UAAU,EAAE,CAAC,uBAAuB,GAAG,YAAY,GAAG,UAAU,CAAC,EAAE;IAkB9E,YAAY,CAAC,EAAE,EAAE,MAAM;IAQjB,KAAK,CAAC,UAAU,EAAE,CAAC,uBAAuB,GAAG,YAAY,GAAG,UAAU,CAAC,EAAE,EAAE,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI;IAyJxI,KAAK;IAML,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAa;IACzC,OAAO,CAAC,MAAM;IAkBd,QAAQ,mBAA0B;IAClC,OAAO,CAAC,MAAM;IASd,QAAQ,oBAA2B;IACnC,OAAO,CAAC,MAAM;CAQjB"} \ No newline at end of file diff --git a/types/Common/IsMeshMaterialEntity.d.ts.map b/types/Common/IsMeshMaterialEntity.d.ts.map index 32f6cd4..8b87e7a 100644 --- a/types/Common/IsMeshMaterialEntity.d.ts.map +++ b/types/Common/IsMeshMaterialEntity.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"IsMeshMaterialEntity.d.ts","sourceRoot":"","sources":["../../../src/Common/IsMeshMaterialEntity.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAU3D,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAUxD"} \ No newline at end of file +{"version":3,"file":"IsMeshMaterialEntity.d.ts","sourceRoot":"","sources":["../../../src/Common/IsMeshMaterialEntity.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAW3D,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAaxD"} \ No newline at end of file diff --git a/types/Common/LayerConstant.d.ts b/types/Common/LayerConstant.d.ts new file mode 100644 index 0000000..cd1aab3 --- /dev/null +++ b/types/Common/LayerConstant.d.ts @@ -0,0 +1,3 @@ +/** 用于表示跟随图层的颜色索引 */ +export declare const ByLayerColorIndex = 260; +//# sourceMappingURL=LayerConstant.d.ts.map \ No newline at end of file diff --git a/types/Common/LayerConstant.d.ts.map b/types/Common/LayerConstant.d.ts.map new file mode 100644 index 0000000..ac8a6ec --- /dev/null +++ b/types/Common/LayerConstant.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"LayerConstant.d.ts","sourceRoot":"","sources":["../../../src/Common/LayerConstant.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,eAAO,MAAM,iBAAiB,MAAM,CAAC"} \ No newline at end of file diff --git a/types/Common/LoadParamMaterial.d.ts b/types/Common/LoadParamMaterial.d.ts new file mode 100644 index 0000000..5dc52e0 --- /dev/null +++ b/types/Common/LoadParamMaterial.d.ts @@ -0,0 +1,6 @@ +import { TemplateParam } from "../DatabaseServices/Template/Param/TemplateParam"; +type LoadParamMaterialFunction = (template: TemplateParam) => Promise; +export declare const _LoadParamMaterialInjectFunctions: LoadParamMaterialFunction[]; +export declare function LoadParamMaterial(template: TemplateParam): Promise; +export {}; +//# sourceMappingURL=LoadParamMaterial.d.ts.map \ No newline at end of file diff --git a/types/Common/LoadParamMaterial.d.ts.map b/types/Common/LoadParamMaterial.d.ts.map new file mode 100644 index 0000000..cf30eeb --- /dev/null +++ b/types/Common/LoadParamMaterial.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"LoadParamMaterial.d.ts","sourceRoot":"","sources":["../../../src/Common/LoadParamMaterial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kDAAkD,CAAC;AAEjF,KAAK,yBAAyB,GAAG,CAAC,QAAQ,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5E,eAAO,MAAM,iCAAiC,EAAE,yBAAyB,EAAO,CAAC;AAEjF,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9E"} \ No newline at end of file diff --git a/types/Common/ProgressBarWait.d.ts b/types/Common/ProgressBarWait.d.ts new file mode 100644 index 0000000..1dce50e --- /dev/null +++ b/types/Common/ProgressBarWait.d.ts @@ -0,0 +1,24 @@ +export interface IProgressBarWait { + title?: string; + outTime?: number; +} +/** + * 进度条等待显示 + * @class ProgressBarWait + */ +export declare class ProgressBarWait { + outTime: number; + title: string; + isTimeOut: boolean; + progress: number; + timer: any; + timeOut: any; + events: any[]; + AddTimeOutEvent(callBack: () => void): void; + constructor(props: IProgressBarWait); + AppToaster: import("@blueprintjs/core").IToaster; + StartInterval: () => void; + UpdateProgressBar(): void; + End(): void; +} +//# sourceMappingURL=ProgressBarWait.d.ts.map \ No newline at end of file diff --git a/types/Common/ProgressBarWait.d.ts.map b/types/Common/ProgressBarWait.d.ts.map new file mode 100644 index 0000000..5ab672b --- /dev/null +++ b/types/Common/ProgressBarWait.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ProgressBarWait.d.ts","sourceRoot":"","sources":["../../../src/Common/ProgressBarWait.tsx"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAE7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,eAAe;IAExB,OAAO,SAAS;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,UAAS;IAClB,QAAQ,SAAK;IACb,KAAK,EAAE,GAAG,CAAC;IACX,OAAO,EAAE,GAAG,CAAC;IACb,MAAM,QAAM;IAGZ,eAAe,CAAC,QAAQ,EAAE,MAAM,IAAI;gBAKxB,KAAK,EAAE,gBAAgB;IAenC,UAAU,uCAIP;IAGH,aAAa,aAWX;IAGF,iBAAiB;IAqCjB,GAAG;CAKN"} \ No newline at end of file diff --git a/types/Common/SerializeMaterial.d.ts b/types/Common/SerializeMaterial.d.ts index 7a0d768..24b4024 100644 --- a/types/Common/SerializeMaterial.d.ts +++ b/types/Common/SerializeMaterial.d.ts @@ -8,6 +8,13 @@ import { TemplateParam } from "../DatabaseServices/Template/Param/TemplateParam" import { TemplateRecord } from "../DatabaseServices/Template/TemplateRecord"; export declare function MaterialOut(material: PhysicalMaterialRecord): string; export declare function MaterialIn(fileData: Object[]): PhysicalMaterialRecord; +/** + * 生成模块数据的json + * @export + * @param {TemplateRecord} [template] //模块数据,可能是来自上传模块,可能是来自本地模块 + * @param {boolean} [tempDb=new Database(false, false, true)] + * @return {*} {Promise} + */ export declare function TemplateOut(template: TemplateRecord, tempDb?: Database): Promise; export declare function TemplateIn(fileData: any[]): TemplateRecord; export declare function TemplateParamsOut(params: TemplateParam[]): string; @@ -24,6 +31,14 @@ export declare function getPolylineSVG(en: Polyline): string; */ export declare function GetCurrentViewPreViewImage(restore?: boolean, isBase64?: boolean, zoomAll?: boolean): Blob | string; export declare function ExtrudeDrillFileIn(data: any[]): ExtrudeHole; +/** + * @export + * @param {Entity[]} [ens] 实体数组 + * @param {boolean} [isConceptual=false] 是否概念模式 + * @param {*} [dir=new Vector3(1, 1, -1)] 相机方向 + * @param {boolean} [isBase64=false] + * @return 返回logo url + */ export declare function GetEntitysLogo(ens: Entity[], isConceptual?: boolean, dir?: Vector3, isBase64?: boolean): Promise; export declare function GroupOut(ens: Entity[]): string; export declare function GroupFileIn(fileData: Object[]): Entity[]; diff --git a/types/Common/SerializeMaterial.d.ts.map b/types/Common/SerializeMaterial.d.ts.map index 8da8679..ae9ccf0 100644 --- a/types/Common/SerializeMaterial.d.ts.map +++ b/types/Common/SerializeMaterial.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SerializeMaterial.d.ts","sourceRoot":"","sources":["../../../src/Common/SerializeMaterial.ts"],"names":[],"mappings":"AACA,OAAO,EAAkC,OAAO,EAAE,MAAM,OAAO,CAAC;AAIhE,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAEtE,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,kDAAkD,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAS7E,wBAAgB,WAAW,CAAC,QAAQ,EAAE,sBAAsB,GAAG,MAAM,CAUpE;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAMrE;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,WAAmC,GAAG,OAAO,CAAC,MAAM,CAAC,CA2CtH;AACD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,cAAc,CAK1D;AACD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,UAUxD;AACD,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,mBAWtD;AAED,gBAAgB;AAChB,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAWpG;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,UAKnC;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,mBAOpD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,QAyB5C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,YAOzC;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,UA0B1C;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,UAAO,EAAE,QAAQ,UAAQ,EAAE,OAAO,UAAQ,GAAG,IAAI,GAAG,MAAM,CAmB3G;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,eAM7C;AAGD,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,YAAY,UAAQ,EAAE,GAAG,UAAwB,EAAE,QAAQ,UAAQ,0BAiDtH;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAUrC;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAWxD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAA,KAAK,IAAI,UAYhE;AACD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,YAMxC"} \ No newline at end of file +{"version":3,"file":"SerializeMaterial.d.ts","sourceRoot":"","sources":["../../../src/Common/SerializeMaterial.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkC,OAAO,EAAE,MAAM,OAAO,CAAC;AAIhE,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAEtE,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAExD,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE/D,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,kDAAkD,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAW7E,wBAAgB,WAAW,CAAC,QAAQ,EAAE,sBAAsB,GAAG,MAAM,CAUpE;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAMrE;AAED;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,WAAmC,GAAG,OAAO,CAAC,MAAM,CAAC,CAqEtH;AACD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,cAAc,CAK1D;AACD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,UAUxD;AACD,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,mBAWtD;AAED,gBAAgB;AAChB,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAWpG;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,UAKnC;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,mBAOpD;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,QAyB5C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,YAOzC;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,QAAQ,UA0B1C;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,UAAO,EAAE,QAAQ,UAAQ,EAAE,OAAO,UAAQ,GAAG,IAAI,GAAG,MAAM,CAmB3G;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,eAM7C;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,YAAY,UAAQ,EAAE,GAAG,UAAwB,EAAE,QAAQ,UAAQ,0BAqGtH;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,UAUrC;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAWxD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAA,KAAK,IAAI,UAYhE;AACD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,GAAG,EAAE,YAMxC"} \ No newline at end of file diff --git a/types/Common/Status.d.ts b/types/Common/Status.d.ts index ce1cf21..f342403 100644 --- a/types/Common/Status.d.ts +++ b/types/Common/Status.d.ts @@ -1,6 +1,7 @@ export declare enum Status { False = 0, True = 1, + Side = 2, Canel = -1, ConverToCircle = 101, DuplicateRecordName = 102 diff --git a/types/Common/Status.d.ts.map b/types/Common/Status.d.ts.map index 4297c42..752e08e 100644 --- a/types/Common/Status.d.ts.map +++ b/types/Common/Status.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Status.d.ts","sourceRoot":"","sources":["../../../src/Common/Status.ts"],"names":[],"mappings":"AAGA,oBAAY,MAAM;IAEd,KAAK,IAAI;IACT,IAAI,IAAI;IACR,KAAK,KAAK;IAEV,cAAc,MAAM;IAEpB,mBAAmB,MAAM;CAC5B;AAED,oBAAY,UAAU;IAElB,IAAI,IAAI;IACR,MAAM,IAAI;IACV,QAAQ,IAAI;IACZ,QAAQ,IAAI;IACZ,GAAG,KAAa;CACnB;AAED;;GAEG;AACH,oBAAY,sBAAsB;IAE9B,MAAM,IAAI;IACV,OAAO,IAAI;IACX,MAAM,IAAI;CACb"} \ No newline at end of file +{"version":3,"file":"Status.d.ts","sourceRoot":"","sources":["../../../src/Common/Status.ts"],"names":[],"mappings":"AAGA,oBAAY,MAAM;IAEd,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,KAAK;IAEV,cAAc,MAAM;IAEpB,mBAAmB,MAAM;CAC5B;AAED,oBAAY,UAAU;IAElB,IAAI,IAAI;IACR,MAAM,IAAI;IACV,QAAQ,IAAI;IACZ,QAAQ,IAAI;IACZ,GAAG,KAAa;CACnB;AAED;;GAEG;AACH,oBAAY,sBAAsB;IAE9B,MAAM,IAAI;IACV,OAAO,IAAI;IACX,MAAM,IAAI;CACb"} \ No newline at end of file diff --git a/types/DatabaseServices/3DSolid/CylinderHole.d.ts b/types/DatabaseServices/3DSolid/CylinderHole.d.ts index 147ae27..520dc5c 100644 --- a/types/DatabaseServices/3DSolid/CylinderHole.d.ts +++ b/types/DatabaseServices/3DSolid/CylinderHole.d.ts @@ -21,13 +21,22 @@ export declare enum GangDrillType { } export declare class CylinderHole extends Hole { private _Radius; + private _SameSideHole; + private _GoodsId; + private _GoodsSn; constructor(); static CreateCylHole(radius: number, height: number, type: GangDrillType): CylinderHole; set Radius(r: number); get Height(): number; set Height(v: number); + get SameSideHole(): boolean; + set SameSideHole(value: boolean); get Radius(): number; get BoundingBox(): Box3Ext; + get GoodsId(): string; + set GoodsId(value: string); + get GoodsSn(): string; + set GoodsSn(value: string); /** * 返回对象在自身坐标系下的Box */ diff --git a/types/DatabaseServices/3DSolid/CylinderHole.d.ts.map b/types/DatabaseServices/3DSolid/CylinderHole.d.ts.map index 97ba28b..0cc773e 100644 --- a/types/DatabaseServices/3DSolid/CylinderHole.d.ts.map +++ b/types/DatabaseServices/3DSolid/CylinderHole.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CylinderHole.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/3DSolid/CylinderHole.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAqC,YAAY,EAAE,OAAO,EAAW,IAAI,EAAE,QAAQ,EAAmB,OAAO,EAAE,MAAM,OAAO,CAAC;AAI5K,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,oBAAY,aAAa;IAErB,SAAS;IACT,GAAG,IAAI;IACP,SAAS;IACT,GAAG,IAAI;IACP,SAAS;IACT,GAAG,IAAI;IACP,SAAS;IACT,IAAI,IAAI;IACR,SAAS;IACT,IAAI,IAAI;IACR,SAAS;IACT,EAAE,IAAI;IACN,OAAO,IAAI;CACd;AAKD,qBACa,YAAa,SAAQ,IAAI;IAElC,OAAO,CAAC,OAAO,CAAa;;IAM5B,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa;IAUxE,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAUnB;IACD,IAAI,MAAM,IAII,MAAM,CADnB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAQnB;IACD,IAAI,MAAM,IAxBI,MAAM,CA2BnB;IACD,IAAI,WAAW,YAGd;IAED;;MAEE;IACF,IAAI,gBAAgB,IAAI,OAAO,CAG9B;IAED,OAAO,CAAC,aAAa,CAAyB;IAC9C,IAAI,YAAY,2BAMf;IAED,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,KAAK,YAAY,GAOvB;IACD,aAAa;IAOb,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAeZ,KAAK,CAAC,OAAO,GAAE,OAAc;IAc7B,cAAc,CAAC,UAAU,EAAE,UAAU;IAKrC,OAAO,CAAC,uBAAuB;IAW/B,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAOhD,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAiBxD,SAAS,IAAI,IAAI;IAWjB,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAmBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAO3B;AAKD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,0BAUtE;AAGD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAwBvF"} \ No newline at end of file +{"version":3,"file":"CylinderHole.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/3DSolid/CylinderHole.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAqC,YAAY,EAAE,OAAO,EAAW,IAAI,EAAE,QAAQ,EAAmB,OAAO,EAAE,MAAM,OAAO,CAAC;AAI5K,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,oBAAY,aAAa;IAErB,SAAS;IACT,GAAG,IAAI;IACP,SAAS;IACT,GAAG,IAAI;IACP,SAAS;IACT,GAAG,IAAI;IACP,SAAS;IACT,IAAI,IAAI;IACR,SAAS;IACT,IAAI,IAAI;IACR,SAAS;IACT,EAAE,IAAI;IACN,OAAO,IAAI;CACd;AAKD,qBACa,YAAa,SAAQ,IAAI;IAElC,OAAO,CAAC,OAAO,CAAa;IAE5B,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,QAAQ,CAAc;;IAO9B,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa;IASxE,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAUnB;IACD,IAAI,MAAM,IAII,MAAM,CADnB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAQnB;IAGD,IAAI,YAAY,IAAI,OAAO,CAG1B;IACD,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,EAO9B;IAED,IAAI,MAAM,IAvCI,MAAM,CA0CnB;IACD,IAAI,WAAW,YAGd;IAED,IAAI,OAAO,IAAI,MAAM,CAGpB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAOxB;IAED,IAAI,OAAO,IAAI,MAAM,CAGpB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAOxB;IAED;;MAEE;IACF,IAAI,gBAAgB,IAAI,OAAO,CAG9B;IAED,OAAO,CAAC,aAAa,CAAyB;IAC9C,IAAI,YAAY,2BAMf;IAED,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,KAAK,YAAY,GAOvB;IACD,aAAa;IAOb,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAeZ,KAAK,CAAC,OAAO,GAAE,OAAc;IAc7B,cAAc,CAAC,UAAU,EAAE,UAAU;IAKrC,OAAO,CAAC,uBAAuB;IAW/B,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAOhD,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAiBxD,SAAS,IAAI,IAAI;IAWjB,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IA4BlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAW3B;AAKD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,0BAUtE;AAGD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAwBvF"} \ No newline at end of file diff --git a/types/DatabaseServices/3DSolid/ExtrudeHole.d.ts b/types/DatabaseServices/3DSolid/ExtrudeHole.d.ts index 4e6779a..13a98e6 100644 --- a/types/DatabaseServices/3DSolid/ExtrudeHole.d.ts +++ b/types/DatabaseServices/3DSolid/ExtrudeHole.d.ts @@ -4,6 +4,7 @@ import { ObjectSnapMode } from "../../Editor/ObjectSnapMode"; import { Box3Ext } from "../../Geometry/Box"; import { RenderType } from "../../GraphicsSystem/RenderType"; import { CADFiler } from "../CADFiler"; +import { Circle } from "../Entity/Circle"; import { DragPointType } from "../Entity/DragPointType"; import { ExtrudeContourCurve, ExtrudeSolid } from "../Entity/Extrude"; import { Polyline } from "../Entity/Polyline"; @@ -11,20 +12,29 @@ import { Shape } from "../Shape"; import { OBB } from './../../Geometry/OBB/obb'; import { Hole } from "./Hole"; export declare class ExtrudeHole extends Hole { + private _DisplayAccuracy; private _contourCurve; private _EdgeGeometry; protected _knifeRadius: number; + private _GoodsId; + private _GoodsSn; isHole: boolean; isThrough: boolean; get KnifeRadius(): number; set KnifeRadius(v: number); - Explode(): (Polyline | import("../Entity/Circle").Circle)[]; + get GoodsId(): string; + set GoodsId(value: string); + get GoodsSn(): string; + set GoodsSn(value: string); + Explode(): (Circle | Polyline)[]; get ContourCurve(): ExtrudeContourCurve; set ContourCurve(curve: ExtrudeContourCurve); CheckContourCurve(): void; Erase(isErase?: boolean): void; protected ApplyScaleMatrix(m: Matrix4): this; GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform?: Matrix3): Vector3[]; + get DisplayAccuracy(): number; + set DisplayAccuracy(v: number); get Shape(): Shape; get BoundingBoxInOCS(): Box3Ext; get BoundingBox(): Box3Ext; diff --git a/types/DatabaseServices/3DSolid/ExtrudeHole.d.ts.map b/types/DatabaseServices/3DSolid/ExtrudeHole.d.ts.map index 07317fe..49c45ae 100644 --- a/types/DatabaseServices/3DSolid/ExtrudeHole.d.ts.map +++ b/types/DatabaseServices/3DSolid/ExtrudeHole.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ExtrudeHole.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/3DSolid/ExtrudeHole.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA2C,QAAQ,EAAwE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC3M,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAMvD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAK7C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE/C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,qBACa,WAAY,SAAQ,IAAI;IAEjC,OAAO,CAAC,aAAa,CAAuC;IAC5D,OAAO,CAAC,aAAa,CAAiB;IACtC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAK;IACvB,MAAM,UAAQ;IACd,SAAS,UAAS;IAE9B,IAAI,WAAW,IAII,MAAM,CADxB;IACD,IAAI,WAAW,CAAC,CAAC,EAAE,MAAM,EAOxB;IACD,OAAO;IAIP,IAAI,YAAY,IAKQ,mBAAmB,CAF1C;IAED,IAAI,YAAY,CAAC,KAAK,EAAE,mBAAmB,EA0B1C;IACD,iBAAiB;IAcjB,KAAK,CAAC,OAAO,GAAE,OAAc;IAa7B,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAW5C,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IA8BZ,IAAI,KAAK,UAKR;IACD,IAAI,gBAAgB,YAKnB;IACD,IAAI,WAAW,YAMd;IACD,IAAI,YAAY,mBAQf;IACD,OAAO,CAAC,aAAa,CAA4B;IACjD,IAAI,YAAY,8BAOf;IACD,OAAO,CAAC,mBAAmB;IAuB3B,sBAAsB,CAAC,QAAQ,EAAE,aAAa;IAW9C,OAAO,CAAC,yBAAyB;IAIjC,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa;IAalF,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE;IAUhC,2BAA2B,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa;IA6E3F,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAI/B,gBAAgB;IAIhB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAIhD,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAIxD,oBAAoB;IASpB,gBAAgB;IAWhB,cAAc,CAAC,UAAU,GAAE,UAAiC;IA6B5D,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAuCtD,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAmB9D,SAAS,IAAI,IAAI;IAWjB,IAAI,GAAG,IAAI,GAAG,CAIb;IACD,QAAQ,CAAC,IAAI,EAAE,QAAQ;IA6BvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAa3B"} \ No newline at end of file +{"version":3,"file":"ExtrudeHole.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/3DSolid/ExtrudeHole.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/3DSolid/Hole.d.ts b/types/DatabaseServices/3DSolid/Hole.d.ts index e3c0939..f0c52d9 100644 --- a/types/DatabaseServices/3DSolid/Hole.d.ts +++ b/types/DatabaseServices/3DSolid/Hole.d.ts @@ -7,11 +7,14 @@ export declare abstract class Hole extends Entity { MId: ObjectId; protected _Height: number; OtherHalfTongKong: ObjectId; + protected allowHoleAtBoardEdge: boolean; protected type: GangDrillType; get Height(): number; set Height(v: number); get Type(): GangDrillType; set Type(t: GangDrillType); + get AllowPxl(): boolean; + set AllowPxl(v: boolean); Clone(): this; protected _ReadFile(file: CADFiler): void; WriteFile(file: CADFiler): void; diff --git a/types/DatabaseServices/3DSolid/Hole.d.ts.map b/types/DatabaseServices/3DSolid/Hole.d.ts.map index 10ccb79..21752ac 100644 --- a/types/DatabaseServices/3DSolid/Hole.d.ts.map +++ b/types/DatabaseServices/3DSolid/Hole.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Hole.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/3DSolid/Hole.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,8BACsB,IAAK,SAAQ,MAAM;IAEzB,GAAG,EAAE,QAAQ,CAAC;IACd,GAAG,EAAE,QAAQ,CAAC;IAC1B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,QAAQ,CAAC;IACxC,SAAS,CAAC,IAAI,EAAE,aAAa,CAAqB;IAClD,IAAI,MAAM,IAII,MAAM,CADnB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAQnB;IAED,IAAI,IAAI,IAII,aAAa,CADxB;IACD,IAAI,IAAI,CAAC,CAAC,EAAE,aAAa,EAOxB;IAED,KAAK;IAML,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAqBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAS3B"} \ No newline at end of file +{"version":3,"file":"Hole.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/3DSolid/Hole.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,8BACsB,IAAK,SAAQ,MAAM;IAEzB,GAAG,EAAE,QAAQ,CAAC;IACd,GAAG,EAAE,QAAQ,CAAC;IAC1B,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,QAAQ,CAAC;IACxC,SAAS,CAAC,oBAAoB,EAAE,OAAO,CAAS;IAChD,SAAS,CAAC,IAAI,EAAE,aAAa,CAAqB;IAElD,IAAI,MAAM,IAII,MAAM,CADnB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAQnB;IAED,IAAI,IAAI,IAII,aAAa,CADxB;IACD,IAAI,IAAI,CAAC,CAAC,EAAE,aAAa,EAOxB;IAED,IAAI,QAAQ,IAII,OAAO,CADtB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAOtB;IAED,KAAK;IAML,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAgClC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAa3B"} \ No newline at end of file diff --git a/types/DatabaseServices/3DSolid/RevolveSolid.d.ts b/types/DatabaseServices/3DSolid/RevolveSolid.d.ts index d99b8f7..06a4bb6 100644 --- a/types/DatabaseServices/3DSolid/RevolveSolid.d.ts +++ b/types/DatabaseServices/3DSolid/RevolveSolid.d.ts @@ -9,8 +9,11 @@ export declare function AxisCS(n: Vector3): Matrix4; export declare class RevolveSolid extends Entity { private _StartAngle; private _EndAngle; + private _DisplayAccuracy; private _Contour; constructor(axisDirection?: Vector3, axisPos?: Vector3, contour?: Polyline, _StartAngle?: number, _EndAngle?: number); + get DisplayAccuracy(): number; + set DisplayAccuracy(v: number); get Contour(): Polyline; GetGripPoints(): Vector3[]; GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3): Vector3[]; diff --git a/types/DatabaseServices/3DSolid/RevolveSolid.d.ts.map b/types/DatabaseServices/3DSolid/RevolveSolid.d.ts.map index 3a6398e..d8d8666 100644 --- a/types/DatabaseServices/3DSolid/RevolveSolid.d.ts.map +++ b/types/DatabaseServices/3DSolid/RevolveSolid.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RevolveSolid.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/3DSolid/RevolveSolid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAS,QAAQ,EAAE,OAAO,EAA4B,QAAQ,EAAuB,OAAO,EAAE,MAAM,OAAO,CAAC;AAIzH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAI7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAK9C,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAM1C;AAGD,qBACa,YAAa,SAAQ,MAAM;IAOhC,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,SAAS;IANrB,OAAO,CAAC,QAAQ,CAAW;gBAEvB,aAAa,CAAC,EAAE,OAAO,EACvB,OAAO,CAAC,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,QAAQ,EACV,WAAW,SAAI,EACf,SAAS,SAAc;IAuDnC,IAAI,OAAO,aAA4B;IAEvC,aAAa;IAeb,mBAAmB,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO;IAoBpF,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAmB5C,OAAO,CAAC,aAAa,CAAW;IAEjC,IAAI,WAAW,SAcd;IAED,OAAO,CAAC,mBAAmB,CAAY;IACvC,OAAO,CAAC,qBAAqB,CAAY;IAEzC,OAAO,CAAC,sBAAsB,CAAY;IAC1C,OAAO,CAAC,uBAAuB,CAAmB;IAElD,OAAO,CAAC,kBAAkB,CAA6B;IACvD,OAAO,CAAC,WAAW,CAAU;IAE7B,IAAI,YAAY,aA4Gf;IAGD,cAAc,CAAC,UAAU,GAAE,UAAiC;IAO5D,kBAAkB;IAOlB,SAAS,IAAI,IAAI;IAMjB,OAAO,CAAC,MAAM,CAAC,UAAU,CAA+C;IAExE,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAuBhD;;MAEE;IACF,iBAAiB,CAAC,KAAK,SAAI;IAW3B,kBAAkB;IAelB;;MAEE;IACF,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAmB9D,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAalC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAUxB,gBAAgB,CAAC,QAAQ,EAAE,SAAS;CAKvC"} \ No newline at end of file +{"version":3,"file":"RevolveSolid.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/3DSolid/RevolveSolid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAoB,QAAQ,EAAE,OAAO,EAA4B,QAAQ,EAAuB,OAAO,EAAE,MAAM,OAAO,CAAC;AAIpI,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAI7D,OAAO,EAAmC,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE9F,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAK9C,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAM1C;AAGD,qBACa,YAAa,SAAQ,MAAM;IAQhC,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,SAAS;IAPrB,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,QAAQ,CAAW;gBAEvB,aAAa,CAAC,EAAE,OAAO,EACvB,OAAO,CAAC,EAAE,OAAO,EACjB,OAAO,CAAC,EAAE,QAAQ,EACV,WAAW,SAAI,EACf,SAAS,SAAc;IAuDnC,IAAI,eAAe,IAKI,MAAM,CAF5B;IAED,IAAI,eAAe,CAAC,CAAC,EAAE,MAAM,EAQ5B;IAED,IAAI,OAAO,aAA4B;IAEvC,aAAa;IAeb,mBAAmB,CAAC,QAAQ,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO;IAoBpF,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAmB5C,OAAO,CAAC,aAAa,CAAW;IAEjC,IAAI,WAAW,SAcd;IAED,OAAO,CAAC,mBAAmB,CAAY;IACvC,OAAO,CAAC,qBAAqB,CAAY;IAEzC,OAAO,CAAC,sBAAsB,CAAY;IAC1C,OAAO,CAAC,uBAAuB,CAAmB;IAElD,OAAO,CAAC,kBAAkB,CAA6B;IACvD,OAAO,CAAC,WAAW,CAAU;IAE7B,IAAI,YAAY,aAkHf;IAGD,cAAc,CAAC,UAAU,GAAE,UAAiC;IAO5D,kBAAkB;IAOlB,SAAS,IAAI,IAAI;IAMjB,OAAO,CAAC,MAAM,CAAC,UAAU,CAA+C;IAExE,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IA8BhD;;MAEE;IACF,iBAAiB,CAAC,KAAK,SAAI;IAW3B,kBAAkB;IA2BlB;;MAEE;IACF,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IA2B9D,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAqBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAexB,gBAAgB,CAAC,QAAQ,EAAE,SAAS;CAKvC"} \ No newline at end of file diff --git a/types/DatabaseServices/3DSolid/SealSolid.d.ts b/types/DatabaseServices/3DSolid/SealSolid.d.ts new file mode 100644 index 0000000..d6700fd --- /dev/null +++ b/types/DatabaseServices/3DSolid/SealSolid.d.ts @@ -0,0 +1,27 @@ +import { BufferGeometry, Matrix4, Object3D } from "three"; +import { RenderType } from "../../GraphicsSystem/RenderType"; +import { Curve } from "../Entity/Curve"; +import { Entity } from "../Entity/Entity"; +/** + * 封边视图下和修改封边时显示的实体 + */ +export declare class SealSolid extends Entity { + protected OnlyRenderType: boolean; + protected _PathCurve: Curve; + private _SealWidth; + constructor(pathCurve: Curve, sealWidth: number); + private _MeshGeometry; + get MeshGeometry(): BufferGeometry; + private _EdgeGeometry; + get EdgeGeometry(): BufferGeometry; + InitDrawObject(renderType: RenderType): Object3D; + UpdateDrawGeometry(): void; + ClearDraw(): this; + UpdateDrawObject(renderType: RenderType, obj: Object3D): Object3D; + /** + * 当实体需要被更新时,更新实体材质 + */ + UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D): Object3D; + ApplyMatrix(m: Matrix4): this; +} +//# sourceMappingURL=SealSolid.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/3DSolid/SealSolid.d.ts.map b/types/DatabaseServices/3DSolid/SealSolid.d.ts.map new file mode 100644 index 0000000..8f0dca3 --- /dev/null +++ b/types/DatabaseServices/3DSolid/SealSolid.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"SealSolid.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/3DSolid/SealSolid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAwC,OAAO,EAAQ,QAAQ,EAAW,MAAM,OAAO,CAAC;AAM/G,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI1C;;GAEG;AACH,qBAAa,SAAU,SAAQ,MAAM;IAEjC,SAAS,CAAC,cAAc,EAAE,OAAO,CAAQ;IACzC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC;IAC5B,OAAO,CAAC,UAAU,CAAS;gBACf,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM;IAkB/C,OAAO,CAAC,aAAa,CAAiB;IACtC,IAAI,YAAY,mBA8Bf;IAED,OAAO,CAAC,aAAa,CAAiB;IACtC,IAAI,YAAY,mBA4Bf;IAED,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,QAAQ;IAWhD,kBAAkB;IAUlB,SAAS,IAAI,IAAI;IAMjB,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAatD;;OAEG;IACH,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAW9D,WAAW,CAAC,CAAC,EAAE,OAAO;CAwBzB"} \ No newline at end of file diff --git a/types/DatabaseServices/3DSolid/SweepSolid.d.ts b/types/DatabaseServices/3DSolid/SweepSolid.d.ts index 03fc22d..60895e2 100644 --- a/types/DatabaseServices/3DSolid/SweepSolid.d.ts +++ b/types/DatabaseServices/3DSolid/SweepSolid.d.ts @@ -1,4 +1,4 @@ -import { Box3, BufferGeometry, Matrix3, Matrix4, Object3D, Vector3 } from "three"; +import { Box3, BufferGeometry, Frustum, Matrix3, Matrix4, Object3D, Vector3 } from "three"; import { ObjectSnapMode } from "../../Editor/ObjectSnapMode"; import { SweepGeometry } from '../../Geometry/SweepGeometry'; import { RenderType } from "../../GraphicsSystem/RenderType"; @@ -8,11 +8,14 @@ import { Entity } from "../Entity/Entity"; import { Polyline } from '../Entity/Polyline'; import { OBB } from './../../Geometry/OBB/obb'; export declare class SweepSolid extends Entity { + private _DisplayAccuracy; static UseRectFakerContour: boolean; protected _Contour: Polyline; protected _PathCurve: Curve | Curve[]; constructor(contour?: Polyline, pathCurve?: Curve | Curve[]); Explode(): (Curve | Polyline)[]; + get DisplayAccuracy(): number; + set DisplayAccuracy(v: number); get Contour(): Polyline; get Path(): Curve | Curve[]; get Paths(): Curve[]; @@ -36,7 +39,7 @@ export declare class SweepSolid extends Entity { UpdateDrawObjectMaterial(type: RenderType, obj: Object3D): void; get BoundingBox(): Box3; get OBB(): OBB; - GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform?: Matrix3): Vector3[]; + GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform?: Matrix3, frustum?: Frustum): Vector3[]; private _GripSubIndexMap; /** 获取夹点与子实体的索引 */ GetGripSubIndexMap(): Map; diff --git a/types/DatabaseServices/3DSolid/SweepSolid.d.ts.map b/types/DatabaseServices/3DSolid/SweepSolid.d.ts.map index 1667410..49ba469 100644 --- a/types/DatabaseServices/3DSolid/SweepSolid.d.ts.map +++ b/types/DatabaseServices/3DSolid/SweepSolid.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SweepSolid.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/3DSolid/SweepSolid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAqB,cAAc,EAAgB,OAAO,EAAE,OAAO,EAAQ,QAAQ,EAAiB,OAAO,EAAE,MAAM,OAAO,CAAC;AAWxI,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAqB,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE/C,qBACa,UAAW,SAAQ,MAAM;IAElC,MAAM,CAAC,mBAAmB,UAAS;IAEnC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,SAAS,CAAC,UAAU,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC;gBAC1B,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE;IA0B3D,OAAO;IAcP,IAAI,OAAO,aAGV;IACD,IAAI,IAAI,oBAGP;IAGD,IAAI,KAAK,YAGR;IAED,OAAO;IAaP;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8D1B,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,SAAS,CAAe;IAChC,IAAI,YAAY,mCA0Bf;IAED,OAAO,CAAC,aAAa,CAAiB;IACtC,IAAI,YAAY,mBAOf;IAED,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,QAAQ;IAuDhD,kBAAkB;IAUlB,SAAS,IAAI,IAAI;IAMjB,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAoDtD;;OAEG;IACH,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAwBxD,IAAI,WAAW,SAcd;IAED,IAAI,GAAG,IAAI,GAAG,CAKb;IACD,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IA4CZ,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,kBAAkB;IAClB,kBAAkB;IAUlB,aAAa;IA+Bb,gBAAgB;IA0BhB,OAAO,CAAC,WAAW;IAsEnB,OAAO,CAAC,YAAY;IA2BpB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IA8EhD,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAiGnD,WAAW,CAAC,CAAC,EAAE,OAAO;IAwBtB,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO;IAwBtC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IA6BlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAiB3B"} \ No newline at end of file +{"version":3,"file":"SweepSolid.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/3DSolid/SweepSolid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAsC,cAAc,EAAa,OAAO,EAAgB,OAAO,EAAE,OAAO,EAAQ,QAAQ,EAAiB,OAAO,EAAE,MAAM,OAAO,CAAC;AAW7K,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,OAAO,EAAqB,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAChF,OAAO,EAAmC,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE9F,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE/C,qBACa,UAAW,SAAQ,MAAM;IAElC,OAAO,CAAC,gBAAgB,CAAK;IAC7B,MAAM,CAAC,mBAAmB,UAAS;IAEnC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,SAAS,CAAC,UAAU,EAAE,KAAK,GAAG,KAAK,EAAE,CAAC;gBAC1B,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,EAAE;IA0B3D,OAAO;IAcP,IAAI,eAAe,IAKI,MAAM,CAF5B;IAED,IAAI,eAAe,CAAC,CAAC,EAAE,MAAM,EAQ5B;IAED,IAAI,OAAO,aAGV;IACD,IAAI,IAAI,oBAGP;IAGD,IAAI,KAAK,YAGR;IAED,OAAO;IAaP;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA8D1B,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,SAAS,CAAe;IAChC,IAAI,YAAY,mCA+Bf;IAED,OAAO,CAAC,aAAa,CAAiB;IACtC,IAAI,YAAY,mBAOf;IAED,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,QAAQ;IAiEhD,kBAAkB;IAUlB,SAAS,IAAI,IAAI;IAMjB,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IA+DtD;;OAEG;IACH,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAgCxD,IAAI,WAAW,SAcd;IAED,IAAI,GAAG,IAAI,GAAG,CAKb;IACD,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,EACnB,OAAO,CAAC,EAAE,OAAO,GAClB,OAAO,EAAE;IAmEZ,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,kBAAkB;IAClB,kBAAkB;IAUlB,aAAa;IA+Bb,gBAAgB;IA0BhB,OAAO,CAAC,WAAW;IA0EnB,OAAO,CAAC,YAAY;IA2BpB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IA8EhD,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAiGnD,WAAW,CAAC,CAAC,EAAE,OAAO;IAwBtB,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO;IAwBtC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAqClC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAsB3B"} \ No newline at end of file diff --git a/types/DatabaseServices/AlignLine/AlignLineGroupRecord.d.ts b/types/DatabaseServices/AlignLine/AlignLineGroupRecord.d.ts new file mode 100644 index 0000000..1f6de29 --- /dev/null +++ b/types/DatabaseServices/AlignLine/AlignLineGroupRecord.d.ts @@ -0,0 +1,16 @@ +import { CADFiler } from "../CADFiler"; +import { ObjectId } from "../ObjectId"; +import { SymbolTableRecord } from "../SymbolTableRecord"; +/** + * 对纹组信息设置. + */ +export declare class AlignLineGroupRecord extends SymbolTableRecord { + Objects: ObjectId[]; + constructor(); + get Name(): string; + set Name(name: string); + Purge(): void; + ReadFile(file: CADFiler): void; + WriteFile(file: CADFiler): void; +} +//# sourceMappingURL=AlignLineGroupRecord.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/AlignLine/AlignLineGroupRecord.d.ts.map b/types/DatabaseServices/AlignLine/AlignLineGroupRecord.d.ts.map new file mode 100644 index 0000000..2c5941b --- /dev/null +++ b/types/DatabaseServices/AlignLine/AlignLineGroupRecord.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"AlignLineGroupRecord.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/AlignLine/AlignLineGroupRecord.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;GAEG;AACH,qBACa,oBAAqB,SAAQ,iBAAiB;IAE3C,OAAO,EAAE,QAAQ,EAAE,CAAM;;IAMrC,IAAI,IAAI,IAIO,MAAM,CADpB;IACD,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,EAOpB;IAED,KAAK;IAQL,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAavB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAS3B"} \ No newline at end of file diff --git a/types/DatabaseServices/AlignLine/AlignLineGroupTable.d.ts b/types/DatabaseServices/AlignLine/AlignLineGroupTable.d.ts new file mode 100644 index 0000000..77206c6 --- /dev/null +++ b/types/DatabaseServices/AlignLine/AlignLineGroupTable.d.ts @@ -0,0 +1,9 @@ +import { Status } from "../../Common/Status"; +import { ObjectCollection } from "../ObjectCollection"; +import { AlignLineGroupRecord } from "./AlignLineGroupRecord"; +export declare class AlignLineGroupTable extends ObjectCollection { + Append(object: AlignLineGroupRecord, isCheckObjectCleanly?: boolean): import("../ObjectId").ObjectId; + Add(record: AlignLineGroupRecord, isCheckObjectCleanly?: boolean): Status; + Remove(record: AlignLineGroupRecord): void; +} +//# sourceMappingURL=AlignLineGroupTable.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/AlignLine/AlignLineGroupTable.d.ts.map b/types/DatabaseServices/AlignLine/AlignLineGroupTable.d.ts.map new file mode 100644 index 0000000..237ea74 --- /dev/null +++ b/types/DatabaseServices/AlignLine/AlignLineGroupTable.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"AlignLineGroupTable.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/AlignLine/AlignLineGroupTable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,qBACa,mBAAoB,SAAQ,gBAAgB,CAAC,oBAAoB,CAAC;IAE3E,MAAM,CAAC,MAAM,EAAE,oBAAoB,EAAE,oBAAoB,UAAO;IAUhE,GAAG,CAAC,MAAM,EAAE,oBAAoB,EAAE,oBAAoB,UAAO,GAAG,MAAM;IAStE,MAAM,CAAC,MAAM,EAAE,oBAAoB;CAItC"} \ No newline at end of file diff --git a/types/DatabaseServices/AllObjectData.d.ts b/types/DatabaseServices/AllObjectData.d.ts index 26675c5..9f52c34 100644 --- a/types/DatabaseServices/AllObjectData.d.ts +++ b/types/DatabaseServices/AllObjectData.d.ts @@ -1,12 +1,11 @@ import { CADFiler } from './CADFiler'; import { ISerialize } from './ISerialize'; -import { CADObject } from './CADObject'; /** * 保存对象创建或者修改时的所有数据记录 */ export declare class AllObjectData implements ISerialize { file: CADFiler; - constructor(obj?: CADObject); + constructor(obj?: ISerialize); ReadFile(file: CADFiler): this; WriteFile(file: CADFiler): this; } diff --git a/types/DatabaseServices/AllObjectData.d.ts.map b/types/DatabaseServices/AllObjectData.d.ts.map index 3c03e70..800994b 100644 --- a/types/DatabaseServices/AllObjectData.d.ts.map +++ b/types/DatabaseServices/AllObjectData.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"AllObjectData.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/AllObjectData.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;GAEG;AACH,qBACa,aAAc,YAAW,UAAU;IAE5C,IAAI,EAAE,QAAQ,CAAC;gBACH,GAAG,CAAC,EAAE,SAAS;IAS3B,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAQvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAM3B"} \ No newline at end of file +{"version":3,"file":"AllObjectData.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/AllObjectData.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;GAEG;AACH,qBACa,aAAc,YAAW,UAAU;IAE5C,IAAI,EAAE,QAAQ,CAAC;gBACH,GAAG,CAAC,EAAE,UAAU;IAS5B,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAQvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAM3B"} \ No newline at end of file diff --git a/types/DatabaseServices/BlockTableRecord.d.ts.map b/types/DatabaseServices/BlockTableRecord.d.ts.map index 9323812..4c9e2c8 100644 --- a/types/DatabaseServices/BlockTableRecord.d.ts.map +++ b/types/DatabaseServices/BlockTableRecord.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BlockTableRecord.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/BlockTableRecord.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAKtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBACa,gBAAiB,SAAQ,iBAAiB;IAEnD,SAAS,2BAAkC;;IAO3C,gBAAgB,CAAC,EAAE,EAAE,QAAQ;IAO7B,IAAI,OAAO,aAAqC;IAEhD,2CAA2C;IAC3C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,oBAAoB,UAAO,GAAG,MAAM;IAMrD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,oBAAoB,UAAO;IA8BlD,kBAAkB;IAClB,WAAW,CAAC,MAAM,EAAE,MAAM;IAE1B,MAAM,CAAC,MAAM,EAAE,MAAM;IAKrB,OAAO;IAQP,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAOvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAO3B"} \ No newline at end of file +{"version":3,"file":"BlockTableRecord.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/BlockTableRecord.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAKtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,qBACa,gBAAiB,SAAQ,iBAAiB;IAEnD,SAAS,2BAAkC;;IAO3C,gBAAgB,CAAC,EAAE,EAAE,QAAQ;IAO7B,IAAI,OAAO,aAAqC;IAEhD,2CAA2C;IAC3C,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,oBAAoB,UAAO,GAAG,MAAM;IAMrD,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,oBAAoB,UAAO;IAuClD,kBAAkB;IAClB,WAAW,CAAC,MAAM,EAAE,MAAM;IAE1B,MAAM,CAAC,MAAM,EAAE,MAAM;IAKrB,OAAO;IAQP,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAQvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAO3B"} \ No newline at end of file diff --git a/types/DatabaseServices/BoardLinesReactor.d.ts.map b/types/DatabaseServices/BoardLinesReactor.d.ts.map index 2382fd4..b60e958 100644 --- a/types/DatabaseServices/BoardLinesReactor.d.ts.map +++ b/types/DatabaseServices/BoardLinesReactor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardLinesReactor.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/BoardLinesReactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAQ7E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAgBpD,qBAAa,iBAAiB;gBAEd,GAAG,EAAE,kBAAkB;IAyCnC,oBAAoB,CAAC,GAAG,EAAE,SAAS;CAwBtC;AAKD,wBAAgB,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,YAA8B,GAAG,OAAO,CAuBnF;AAMD,wBAAgB,YAAY,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAMnD"} \ No newline at end of file +{"version":3,"file":"BoardLinesReactor.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/BoardLinesReactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAS7E,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAqBpD,qBAAa,iBAAiB;gBAEd,GAAG,EAAE,kBAAkB;IAyCnC,oBAAoB,CAAC,GAAG,EAAE,SAAS;CAwBtC;AAKD,wBAAgB,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,YAA8B,GAAG,OAAO,CAuBnF;AAMD,wBAAgB,YAAY,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAMnD"} \ No newline at end of file diff --git a/types/DatabaseServices/CommandServer.d.ts b/types/DatabaseServices/CommandServer.d.ts index 35e79f6..e75f1ef 100644 --- a/types/DatabaseServices/CommandServer.d.ts +++ b/types/DatabaseServices/CommandServer.d.ts @@ -15,6 +15,10 @@ export declare class CommandServer { get CustomCommandMap(): Map; get HotKeyCommandMap(): Map; get CommandHotKeyMap(): Map; + /** 只读,仅供导出使用 */ + get CustomCommand(): { + [key: string]: ICommand; + }; ChangeCustonCommand(icommand: ICommand): void; GetCommandCanUseDefaultCustomCmd(cmd: ICommand): boolean; GetCommandCanUseDefaultHotkey(cmd: ICommand): boolean; diff --git a/types/DatabaseServices/CommandServer.d.ts.map b/types/DatabaseServices/CommandServer.d.ts.map index 80499f8..d9a7d71 100644 --- a/types/DatabaseServices/CommandServer.d.ts.map +++ b/types/DatabaseServices/CommandServer.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CommandServer.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/CommandServer.ts"],"names":[],"mappings":"AAMA,OAAO,EAAe,QAAQ,EAA6B,MAAM,2CAA2C,CAAC;AAG7G;;GAEG;AACH,qBAAa,aAAa;IAGtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAoC;IAG1D,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,iBAAiB,CAA6B;IAGtD,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,iBAAiB,CAA6B;IAEtD,OAAO;IACP,OAAO,CAAC,MAAM,CAAC,eAAe,CAAgB;IAC9C,MAAM,CAAC,WAAW,IAAI,aAAa;IAOnC,IAAI,gBAAgB,wBAAqC;IACzD,IAAI,gBAAgB,wBAAqC;IACzD,IAAI,gBAAgB,wBAAqC;IAIzD,mBAAmB,CAAC,QAAQ,EAAE,QAAQ;IAqCtC,gCAAgC,CAAC,GAAG,EAAE,QAAQ;IAS9C,6BAA6B,CAAC,GAAG,EAAE,QAAQ;IAUrC,KAAK;IASL,MAAM;IAcN,6BAA6B;IAmCnC,kBAAkB;YAiBJ,qBAAqB;IAqBnC,OAAO,CAAC,cAAc,CAAS;IACzB,gBAAgB,CAAC,SAAS,EAAE,MAAM;IAMlC,gBAAgB;IActB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,YAAY;CAWvB"} \ No newline at end of file +{"version":3,"file":"CommandServer.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/CommandServer.ts"],"names":[],"mappings":"AAMA,OAAO,EAAe,QAAQ,EAA6B,MAAM,2CAA2C,CAAC;AAG7G;;GAEG;AACH,qBAAa,aAAa;IAGtB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAoC;IAG1D,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,iBAAiB,CAA6B;IAGtD,OAAO,CAAC,iBAAiB,CAA6B;IACtD,OAAO,CAAC,iBAAiB,CAA6B;IAEtD,OAAO;IACP,OAAO,CAAC,MAAM,CAAC,eAAe,CAAgB;IAC9C,MAAM,CAAC,WAAW,IAAI,aAAa;IAOnC,IAAI,gBAAgB,wBAAqC;IACzD,IAAI,gBAAgB,wBAAqC;IACzD,IAAI,gBAAgB,wBAAqC;IAEzD,gBAAgB;IAChB,IAAI,aAAa;;MAAkC;IAGnD,mBAAmB,CAAC,QAAQ,EAAE,QAAQ;IAqCtC,gCAAgC,CAAC,GAAG,EAAE,QAAQ;IAS9C,6BAA6B,CAAC,GAAG,EAAE,QAAQ;IAUrC,KAAK;IASL,MAAM;IAcN,6BAA6B;IAmCnC,kBAAkB;YAiBJ,qBAAqB;IAqBnC,OAAO,CAAC,cAAc,CAAS;IACzB,gBAAgB,CAAC,SAAS,EAAE,MAAM;IAMlC,gBAAgB;IActB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,YAAY;CAWvB"} \ No newline at end of file diff --git a/types/DatabaseServices/Contour.d.ts b/types/DatabaseServices/Contour.d.ts index 21a01f8..6f559b3 100644 --- a/types/DatabaseServices/Contour.d.ts +++ b/types/DatabaseServices/Contour.d.ts @@ -37,6 +37,11 @@ export declare class Contour { holes: Contour[]; outlines: Contour[]; }; + /** + * 计算轮廓被差集之后的结果 + * @param targets 切去的轮廓 + * @returns {holes: Polyline[] 网洞曲线列表, subtractList: Polyline[] 轮廓曲线列表} + */ GetSubListWithCus(targets: Contour[]): { holes: Polyline[]; subtractList: Polyline[]; diff --git a/types/DatabaseServices/Contour.d.ts.map b/types/DatabaseServices/Contour.d.ts.map index 1dcf7b7..0d5b5a3 100644 --- a/types/DatabaseServices/Contour.d.ts.map +++ b/types/DatabaseServices/Contour.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Contour.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/Contour.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAWhC,OAAO,EAAmB,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEnF,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAM7C,qBAAa,OAAO;IAEhB,OAAO,CAAC,MAAM,CAAoB;IAElC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM;IASxC,oBAAoB;IACpB,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,QAAQ,GAAG,MAAM,EAAE,QAAQ,UAAO;IA2BtE,IAAI,KAAK,IAAI,QAAQ,GAAG,MAAM,CAG7B;IACD,IAAI,IAAI,WAGP;IACD,IAAI,WAAW,sCAGd;IACD;;;;;OAKG;IACH,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG;IAsBhE,KAAK;IAKL,yBAAyB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE;IAQrD,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG;QAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAAC,KAAK,EAAE,OAAO,EAAE,CAAC;KAAE;IAkE/E,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE;IA8BjD;;OAEG;IACH,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG;QAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;QAAC,SAAS,EAAE,KAAK,EAAE,CAAC;KAAE;IA4G5F,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,EAAE;IA8D5C,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE;;;;IAqC/C,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE;;;;IA8FpC;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE;IAiBzD;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,QAAQ,UAAO,EAAE,SAAS,SAAO,GAAG,KAAK;IA6BtE,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAGvB;IAED;;;;OAIG;IACH,cAAc,CAAC,UAAU,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,EAAE,YAAY,UAAQ,EAAE,IAAI,GAAE,eAAe,EAAc,GAAG,OAAO;IAOzH,KAAK,CAAC,GAAG,EAAE,OAAO;CAIrB;AAkCD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,OAAO,WAY9F;AAGD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,EAAE,IAAI,GAAE,eAAe,EAAc,EAAE,IAAI,SAAe,WAW/J"} \ No newline at end of file +{"version":3,"file":"Contour.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/Contour.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAWhC,OAAO,EAAmB,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEnF,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAM7C,qBAAa,OAAO;IAEhB,OAAO,CAAC,MAAM,CAAoB;IAElC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM;IASxC,oBAAoB;IACpB,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,QAAQ,GAAG,MAAM,EAAE,QAAQ,UAAO;IA2BtE,IAAI,KAAK,IAAI,QAAQ,GAAG,MAAM,CAG7B;IACD,IAAI,IAAI,WAGP;IACD,IAAI,WAAW,sCAGd;IACD;;;;;OAKG;IACH,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG;IAsBhE,KAAK;IAKL,yBAAyB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE;IAQrD,kBAAkB,CAAC,MAAM,EAAE,OAAO,GAAG;QAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAAC,KAAK,EAAE,OAAO,EAAE,CAAC;KAAE;IAkE/E,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,EAAE;IA8BjD;;OAEG;IACH,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG;QAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC;QAAC,SAAS,EAAE,KAAK,EAAE,CAAC;KAAE;IA4G5F,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,QAAQ,EAAE;IA8D5C,4BAA4B,CAAC,OAAO,EAAE,OAAO,EAAE;;;;IAsC/C;;;;OAIG;IACH,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE;;;;IA8FpC;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE;IAiBzD;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,QAAQ,UAAO,EAAE,SAAS,SAAO,GAAG,KAAK;IA6BtE,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAGvB;IAED;;;;OAIG;IACH,cAAc,CAAC,UAAU,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,EAAE,YAAY,UAAQ,EAAE,IAAI,GAAE,eAAe,EAAc,GAAG,OAAO;IAOzH,KAAK,CAAC,GAAG,EAAE,OAAO;CAIrB;AAkCD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,CAAC,EAAE,OAAO,WAY9F;AAGD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,EAAE,IAAI,GAAE,eAAe,EAAc,EAAE,IAAI,SAAe,WAW/J"} \ No newline at end of file diff --git a/types/DatabaseServices/Database.d.ts b/types/DatabaseServices/Database.d.ts index 002d353..780c48c 100644 --- a/types/DatabaseServices/Database.d.ts +++ b/types/DatabaseServices/Database.d.ts @@ -1,14 +1,16 @@ import { Vector3 } from 'three'; import { DuplicateRecordCloning } from '../Common/Status'; +import { AlignLineGroupTable } from './AlignLine/AlignLineGroupTable'; import { BlockTableRecord } from './BlockTableRecord'; import { CADFiler } from './CADFiler'; import { CADObject } from './CADObject'; import { CameraSnapshootRecord } from './CameraSnapshoot/CameraSnapshootRecord'; -import { DeepCloneFiler } from './DeepCloneFiler'; import { DimStyleTable } from './DimStyle/DimStyleTable'; +import { FontStyleTable } from './FontStyle/FontStyleTable'; import { GroupTable } from './GroupTable'; import { HistoricManage } from './HistoricManage'; import { IdMaping } from './IdMaping'; +import { LayerTableRecord } from './LayerTableRecord'; import { AmbientLight } from './Lights/AmbientLight'; import { DirectionalLight } from './Lights/DirectionalLight'; import { HemisphereLight } from './Lights/HemisphereLight'; @@ -17,6 +19,7 @@ import { OwnerContainer } from './OwnerContainer'; import { PhysicalMaterialRecord } from './PhysicalMaterialRecord'; import { ProcessingGroupTable } from './ProcessingGroup/ProcessingGroupTable'; import { BlockTable } from './Tables/BlockTable'; +import { LayerTable } from './Tables/LayerTable'; import { MaterialTable } from './Tables/MaterialTable'; import { TextureTable } from './Tables/TextureTable'; import { TemplateTable } from './Template/TemplateTable'; @@ -30,7 +33,10 @@ export declare class Database { TemplateTable: TemplateTable; GroupTable: GroupTable; ProcessingGroupTable: ProcessingGroupTable; + AlignLineGroupTable: AlignLineGroupTable; DimStyleTable: DimStyleTable; + LayerTable: LayerTable; + FontStyleTable: FontStyleTable; ModelSpace: BlockTableRecord; LayoutSpace: BlockTableRecord; Lights: BlockTableRecord; @@ -38,6 +44,7 @@ export declare class Database { AmbientLight: AmbientLight; SunLight: DirectionalLight; HemisphereLight: HemisphereLight; + DefaultLayer: LayerTableRecord; DefaultMaterial: PhysicalMaterialRecord; /** 这是为UE设计器提供的拓展数据,WebCAD只负责保存,不使用它. * 在存储吊顶模块时,存储了材质槽信息 @@ -45,19 +52,29 @@ export declare class Database { ExtendedData: any; private idIndex; private idMap; + /** + * + * @param [buildDefaultDrawing=false] 构建默认对象(标注 图层 材质 灯光) + * @param [IsDefaultDatabase=false] app图纸 + * @param [disableHistoric=false] 禁止命令记录(撤销重做) + */ constructor(buildDefaultDrawing?: boolean, IsDefaultDatabase?: boolean, disableHistoric?: boolean); private InitDimStyle; + private InitLayer; private InitMaterial; private InitLight; - SettingDefaultStyleAndMaterial(): void; + private InitFontStyle; + private SettingDefaultStyleAndMaterial; Destroy(): void; FileWrite(file?: CADFiler): CADFiler; FileRead(file: CADFiler): this; /** + * 注意:跨图纸拷贝(WblockCloneObjects) 同图纸拷贝(DeppCloneObjects) + * * 单个数据库内克隆对象(objects),并将他们附加到指定的容器对象(owner). * @param objects 被克隆的对象 * @param owner 克隆对象的容器 - * @param idMap id映射 + * @param idMap id映射 oldid->newid * @param deferXlation 指示是否应该进行ID转换 * @returns 新克隆的对象列表 */ @@ -66,8 +83,10 @@ export declare class Database { * 清理拷贝后的实体空引用 */ private ClearEmptyAssoc; - DeepCloneObject(filer: DeepCloneFiler, object: CADObject, owner: OwnerContainer, idMap?: IdMaping): CADObject | undefined; + private DeepCloneObject; /** + * 注意:跨图纸拷贝(WblockCloneObjects) 同图纸拷贝(DeppCloneObjects) + * * 将来自不同数据库的对象列表拷贝到本数据库中. * 当前支持使用HardId模式来硬关联某个对象,使该对象能够在WblockClone时一起被带过来. * 当前不支持硬关联对象的Owner不是默认的容器. diff --git a/types/DatabaseServices/Database.d.ts.map b/types/DatabaseServices/Database.d.ts.map index 676aa0d..d7c4c11 100644 --- a/types/DatabaseServices/Database.d.ts.map +++ b/types/DatabaseServices/Database.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Database.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/Database.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,OAAO,EAAE,MAAM,OAAO,CAAC;AAExD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAiB,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,qBACa,QAAQ;IAuC+B,iBAAiB;IApCjE,EAAE,EAAE,cAAc,CAAC;IAGnB,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,aAAa,EAAE,aAAa,CAAC;IAG7B,UAAU,EAAE,gBAAgB,CAAC;IAE7B,WAAW,EAAE,gBAAgB,CAAC;IAE9B,MAAM,EAAE,gBAAgB,CAAC;IAGzB,gBAAgB,EAAE,qBAAqB,EAAE,CAAM;IAG/C,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IAGjC,eAAe,EAAE,sBAAsB,CAAC;IAExC;;OAEG;IACH,YAAY,EAAE,GAAG,CAAQ;IAEzB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,KAAK,CAA+B;gBAChC,mBAAmB,UAAQ,EAAS,iBAAiB,UAAQ,EAAE,eAAe,UAAQ;IA+BlG,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,SAAS;IAejB,8BAA8B;IAgB9B,OAAO;IAkCP,SAAS,CAAC,IAAI,WAAe,GAAG,QAAQ;IAwBxC,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAoFvB;;;;;;;OAOG;IACH,gBAAgB,CACZ,OAAO,EAAE,SAAS,EAAE,EACpB,KAAK,EAAE,cAAc,EACrB,KAAK,GAAE,QAAoB,EAC3B,YAAY,UAAQ,GACrB,SAAS,EAAE;IA6Bd;;OAEG;IACH,OAAO,CAAC,eAAe;IAoBvB,eAAe,CACX,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,cAAc,EACrB,KAAK,GAAE,QAAoB,GAC5B,SAAS,GAAG,SAAS;IAyCxB;;;;;;;;OAQG;IACH,kBAAkB,CACd,OAAO,EAAE,SAAS,EAAE,EACpB,KAAK,EAAE,cAAc,EACrB,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,sBAAsB,EAC3B,KAAK,mBAAuB,GAC7B,SAAS,EAAE;IAgBd;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA0BlC,OAAO,CAAC,iBAAiB;IAkFzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B,MAAM;IAKN;;;;;;OAMG;IACH,MAAM,CACF,cAAc,EAAE,QAAQ,EACxB,OAAO,EAAE,SAAS,EAAE,EACpB,SAAS,EAAE,OAAO,EAClB,OAAO,EAAE,GAAG;IAWhB,UAAU,IAAI,QAAQ;IAKtB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,UAAQ,GAAG,QAAQ;IAcpD,QAAQ,CAAC,OAAO,EAAE,MAAM;CAM3B"} \ No newline at end of file +{"version":3,"file":"Database.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/Database.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/Dimension/2LineAngularDimension.d.ts.map b/types/DatabaseServices/Dimension/2LineAngularDimension.d.ts.map index e925c30..31934fa 100644 --- a/types/DatabaseServices/Dimension/2LineAngularDimension.d.ts.map +++ b/types/DatabaseServices/Dimension/2LineAngularDimension.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"2LineAngularDimension.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/2LineAngularDimension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,QAAQ,EAAa,OAAO,EAAE,OAAO,EAAQ,QAAQ,EAAE,IAAI,IAAI,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAQtH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAI7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC;;GAEG;AACH,qBACa,oBAAqB,SAAQ,SAAS;IAI3C,SAAS,CAAC,aAAa;IACvB,SAAS,CAAC,WAAW;IACrB,SAAS,CAAC,aAAa;IACvB,SAAS,CAAC,WAAW;IACrB,SAAS,CAAC,SAAS;IANvB,OAAO,CAAC,IAAI,CAAa;gBAEX,aAAa,UAAgB,EAAE,UAAU;IACzC,WAAW,UAAgB,EAAI,UAAU;IACzC,aAAa,UAAgB,EAAE,UAAU;IACzC,WAAW,UAAgB,EAC3B,SAAS,UAAgB;IAUvC,IAAa,cAAc,IACS,MAAM,CAD8C;IACxF,IAAa,cAAc,CAAC,MAAM,EAAE,MAAM,EAGzC;IAED,SAAS,CAAC,kBAAkB;IAK5B,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO;IAkBvF,IAAI,IAAI,gCAGP;IACD,IAAI,YAAY,YAGf;IACD,IAAI,YAAY,YAGf;IACD,IAAI,UAAU,YAGb;IACD,IAAI,UAAU,YAGb;IACD,IAAI,QAAQ,YAGX;IACD,IAAI,GAAG,QAGN;IAED,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAa/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAgBhD,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;IAIlC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IASxD,KAAK,IAAI,IAAI;IAcb,OAAO;IASP,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAWZ,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAgCvE,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK;IA6DtE,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAuEtD,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAa7E,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO;IAqBtC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAmBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAgB3B"} \ No newline at end of file +{"version":3,"file":"2LineAngularDimension.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/2LineAngularDimension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,QAAQ,EAAa,OAAO,EAAE,OAAO,EAAQ,QAAQ,EAAE,IAAI,IAAI,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAQtH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAI7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC;;GAEG;AACH,qBACa,oBAAqB,SAAQ,SAAS;IAI3C,SAAS,CAAC,aAAa;IACvB,SAAS,CAAC,WAAW;IACrB,SAAS,CAAC,aAAa;IACvB,SAAS,CAAC,WAAW;IACrB,SAAS,CAAC,SAAS;IANvB,OAAO,CAAC,IAAI,CAAa;gBAEX,aAAa,UAAgB,EAAE,UAAU;IACzC,WAAW,UAAgB,EAAI,UAAU;IACzC,aAAa,UAAgB,EAAE,UAAU;IACzC,WAAW,UAAgB,EAC3B,SAAS,UAAgB;IAUvC,IAAa,cAAc,IACS,MAAM,CAD8C;IACxF,IAAa,cAAc,CAAC,MAAM,EAAE,MAAM,EAGzC;IAED,SAAS,CAAC,kBAAkB;IAK5B,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO;IAkBvF,IAAI,IAAI,gCAGP;IACD,IAAI,YAAY,YAGf;IACD,IAAI,YAAY,YAGf;IACD,IAAI,UAAU,YAGb;IACD,IAAI,UAAU,YAGb;IACD,IAAI,QAAQ,YAGX;IACD,IAAI,GAAG,QAGN;IAED,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAa/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAgBhD,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;IAIlC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IASxD,KAAK,IAAI,IAAI;IAcb,OAAO;IASP,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAWZ,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAgCvE,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK;IA6DtE,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAuEtD,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAa7E,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO;IAqBtC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAsBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAkB3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Dimension/AlignedDimension.d.ts b/types/DatabaseServices/Dimension/AlignedDimension.d.ts index 601a1c1..335c304 100644 --- a/types/DatabaseServices/Dimension/AlignedDimension.d.ts +++ b/types/DatabaseServices/Dimension/AlignedDimension.d.ts @@ -15,11 +15,13 @@ export declare class AlignedDimension extends Dimension { protected _ArmP2: Vector3; protected _TextRotation: number; protected _UseLead: boolean; + protected _RoomName: string; + protected _CabinetName: string; private _LeadLine; /**引线的起始位置,在引线坐标系+使用中点 */ private _LeadPos; /**构造函数提供的点在对象坐标系内部 */ - constructor(_FootP1?: Vector3, _FootP2?: Vector3, _ArmP1?: Vector3, _ArmP2?: Vector3, _TextRotation?: number, _UseLead?: boolean); + constructor(_FootP1?: Vector3, _FootP2?: Vector3, _ArmP1?: Vector3, _ArmP2?: Vector3, _TextRotation?: number, _UseLead?: boolean, _RoomName?: string, _CabinetName?: string); get Distance(): number; get FootP1(): Vector3; set FootP1(v: Vector3); diff --git a/types/DatabaseServices/Dimension/AlignedDimension.d.ts.map b/types/DatabaseServices/Dimension/AlignedDimension.d.ts.map index cb424ad..99f94d9 100644 --- a/types/DatabaseServices/Dimension/AlignedDimension.d.ts.map +++ b/types/DatabaseServices/Dimension/AlignedDimension.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"AlignedDimension.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/AlignedDimension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAQ,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AASpH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAI7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAGtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAOxC;;;GAGG;AACH,qBACa,gBAAiB,SAAQ,SAAS;IAUvC,SAAS,CAAC,OAAO,EAAE,OAAO;IAC1B,SAAS,CAAC,OAAO,EAAE,OAAO;IAE1B,SAAS,CAAC,MAAM,EAAE,OAAO;IACzB,SAAS,CAAC,MAAM,EAAE,OAAO;IACzB,SAAS,CAAC,aAAa,EAAE,MAAM;IAE/B,SAAS,CAAC,QAAQ,EAAE,OAAO;IAd/B,OAAO,CAAC,SAAS,CAAkB;IACnC,yBAAyB;IACzB,OAAO,CAAC,QAAQ,CAAiD;IAEjE,sBAAsB;gBAGR,OAAO,GAAE,OAAuB,EAChC,OAAO,GAAE,OAAuB,EAEhC,MAAM,GAAE,OAAuB,EAC/B,MAAM,GAAE,OAAuB,EAC/B,aAAa,GAAE,MAAa,EAE5B,QAAQ,GAAE,OAAc;IAStC,IAAI,QAAQ,WAAkD;IAE9D,IAAI,MAAM,IACI,OAAO,CADmD;IACxE,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,EAIpB;IAED,IAAI,MAAM,IACI,OAAO,CADmD;IACxE,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,EAIpB;IAED,IAAI,KAAK,IACI,OAAO,CADkD;IACtE,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,EAMnB;IAED,IAAI,KAAK,IACI,OAAO,CADkD;IACtE,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,EAMnB;IAED,IAAI,YAAY,IAEI,OAAO,CAFiE;IAC5F,gCAAgC;IAChC,IAAI,YAAY,CAAC,CAAC,EAAE,OAAO,EAY1B;IAGD,IAAI,MAAM,YAWT;IAED,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,EAI7B;IAED,IAAI,IAAI,gCAMP;IAED,SAAS,CAAC,kBAAkB,IAAI,MAAM;IAKtC,IAAI,WAAW,yCAOd;IAED,IAAI,WAAW,IAEU,OAAO,CAFW;IAC3C,YAAY;IACZ,IAAI,WAAW,CAAC,OAAO,EAAE,OAAO,EAM/B;IAED,IAAI,UAAU,CAAC,MAAM,EAAE,OAAO,EAM7B;IAED,aAAa;IACb,iBAAiB;IAMjB,YAAY;IACZ,UAAU;IAOV,IAAI,KAAK,IAEI,MAAM,CAFoB;IACvC,UAAU;IACV,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,EAMlB;IAED,IAAI,KAAK,IACI,MAAM,CADoB;IACvC,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,EAMlB;IAED,YAAY;IACZ,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,UAAQ;IAQ9C,OAAO;IAqBP,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO;IAmBtC,KAAK,IAAI,IAAI;IAab,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IA0BvE,WAAW,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IA0B1C,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAgItD,IAAI,QAAQ,IAAI,OAAO,CAMtB;IAED;;OAEG;IACH,cAAc,IAAI,OAAO;IA8BzB,UAAU,CAAC,OAAO,CAAC,EAAE,OAAO;IAe5B,SAAS,CAAC,cAAc;IAYxB,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAuBZ,OAAO,CAAC,qBAAqB;IAc7B,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAcnF,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAQ/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAwChD,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;IAKlC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAsBxD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IA2FlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAkB3B"} \ No newline at end of file +{"version":3,"file":"AlignedDimension.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/AlignedDimension.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/Dimension/ArcDimension.d.ts b/types/DatabaseServices/Dimension/ArcDimension.d.ts index 7115040..b2b4a44 100644 --- a/types/DatabaseServices/Dimension/ArcDimension.d.ts +++ b/types/DatabaseServices/Dimension/ArcDimension.d.ts @@ -2,7 +2,6 @@ import { Material, Object3D, Vector3 } from "three"; import { RenderType } from "../../GraphicsSystem/RenderType"; import { CADFiler } from "../CADFiler"; import { Arc } from "../Entity/Arc"; -import { Text } from "../Text/Text"; import { Dimension } from "./Dimension"; export declare class ArcDimension extends Dimension { private _Center; @@ -13,9 +12,8 @@ export declare class ArcDimension extends Dimension { private _TextRadiusAdd; protected _TextString: string; private _Arc; - protected _Text: Text; constructor(_Center?: Vector3, _StartAngle?: number, _EndAngle?: number, _Clockwise?: boolean, _Radius?: number, _TextRadiusAdd?: number, _TextString?: string); - get Text(): Text; + get Text(): import("../Text/Text").Text; get Arc(): Arc; set TextRadiusAdd(ra: number); get TextRadiusAdd(): number; diff --git a/types/DatabaseServices/Dimension/ArcDimension.d.ts.map b/types/DatabaseServices/Dimension/ArcDimension.d.ts.map index dd44570..947ddf4 100644 --- a/types/DatabaseServices/Dimension/ArcDimension.d.ts.map +++ b/types/DatabaseServices/Dimension/ArcDimension.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ArcDimension.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/ArcDimension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,QAAQ,EAAiB,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAMzF,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,IAAI,EAAc,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,qBACa,YAAa,SAAQ,SAAS;IAMnC,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,cAAc;IACtB,SAAS,CAAC,WAAW,EAAE,MAAM;IAVjC,OAAO,CAAC,IAAI,CAAW;IACvB,SAAS,CAAC,KAAK,OAAc;gBAGjB,OAAO,GAAE,OAAqB,EAC9B,WAAW,GAAE,MAAU,EACvB,SAAS,GAAE,MAAU,EACrB,UAAU,UAAQ,EAClB,OAAO,GAAE,MAAU,EACnB,cAAc,GAAE,MAAU,EACxB,WAAW,GAAE,MAAc;IAMzC,IAAI,IAAI,SAQP;IAED,IAAI,GAAG,QAKN;IAED,IAAI,aAAa,CAAC,EAAE,EAAE,MAAM,EAO3B;IAED,IAAI,aAAa,IATK,MAAM,CASuB;IAEnD,SAAS,CAAC,kBAAkB,IAAI,MAAM;IAMtC,aAAa,IAAI,OAAO,EAAE;IAQ1B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAYhD,gBAAgB,IAAI,OAAO,EAAE;IAS7B,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAYnD,OAAO,CAAC,oBAAoB;IAW5B,cAAc,CAAC,UAAU,GAAE,UAAiC;IAmB5D,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IA8CtD,SAAS;IAaT,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAc7E,QAAQ;IAeR,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAqBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAgB3B"} \ No newline at end of file +{"version":3,"file":"ArcDimension.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/ArcDimension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,QAAQ,EAAiB,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAMzF,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,qBACa,YAAa,SAAQ,SAAS;IAKnC,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,cAAc;IACtB,SAAS,CAAC,WAAW,EAAE,MAAM;IATjC,OAAO,CAAC,IAAI,CAAW;gBAGX,OAAO,GAAE,OAAqB,EAC9B,WAAW,GAAE,MAAU,EACvB,SAAS,GAAE,MAAU,EACrB,UAAU,UAAQ,EAClB,OAAO,GAAE,MAAU,EACnB,cAAc,GAAE,MAAU,EACxB,WAAW,GAAE,MAAc;IAMzC,IAAI,IAAI,gCAQP;IAED,IAAI,GAAG,QAKN;IAED,IAAI,aAAa,CAAC,EAAE,EAAE,MAAM,EAO3B;IAED,IAAI,aAAa,IATK,MAAM,CASuB;IAEnD,SAAS,CAAC,kBAAkB,IAAI,MAAM;IAMtC,aAAa,IAAI,OAAO,EAAE;IAQ1B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAYhD,gBAAgB,IAAI,OAAO,EAAE;IAS7B,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAYnD,OAAO,CAAC,oBAAoB;IAW5B,cAAc,CAAC,UAAU,GAAE,UAAiC;IAmB5D,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IA8CtD,SAAS;IAaT,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAc7E,QAAQ;IAeR,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAwBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAkB3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Dimension/DiameterDimension.d.ts.map b/types/DatabaseServices/Dimension/DiameterDimension.d.ts.map index 1fcf361..5952022 100644 --- a/types/DatabaseServices/Dimension/DiameterDimension.d.ts.map +++ b/types/DatabaseServices/Dimension/DiameterDimension.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DiameterDimension.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/DiameterDimension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,QAAQ,EAAQ,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAQzF,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAI7D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKpD,qBACa,iBAAkB,SAAQ,eAAe;IAElD,SAAS,CAAC,WAAW,EAAE,MAAM,CAAS;IACtC,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IA6BvE,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAwCtD,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAsBnF,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;CAoCnD"} \ No newline at end of file +{"version":3,"file":"DiameterDimension.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/DiameterDimension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,QAAQ,EAAQ,QAAQ,EAAiB,OAAO,EAAE,MAAM,OAAO,CAAC;AAQzF,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAI7D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAKpD,qBACa,iBAAkB,SAAQ,eAAe;IAElD,SAAS,CAAC,WAAW,EAAE,MAAM,CAAS;IACtC,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IA2BvE,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IA2CtD,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAsBnF,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;CAoCnD"} \ No newline at end of file diff --git a/types/DatabaseServices/Dimension/Dimension.d.ts b/types/DatabaseServices/Dimension/Dimension.d.ts index e73ec23..11f03ec 100644 --- a/types/DatabaseServices/Dimension/Dimension.d.ts +++ b/types/DatabaseServices/Dimension/Dimension.d.ts @@ -2,17 +2,21 @@ import { CADFiler } from "../CADFiler"; import { DimStyleKeyCode } from "../DimStyle/DimstyleKeyCodeEnum"; import { Entity } from "../Entity/Entity"; import { ObjectId } from "../ObjectId"; +import { PhysicalMaterialRecord } from "../PhysicalMaterialRecord"; import { Text } from "../Text/Text"; export declare abstract class Dimension extends Entity { OnlyRenderType: boolean; protected _TextString: string; protected _Text: Text; - get Material(): ObjectId; - set Material(materialId: ObjectId); + get Material(): ObjectId; + set Material(materialId: ObjectId); protected _DimStyle: ObjectId; protected _DimStyleOverride: Map; + protected _RoomName: string; + protected _CabinetName: string; GetDimStyleOverrideValue(key: DimStyleKeyCode): any; SetDimStyleOverrideValue(key: DimStyleKeyCode, value: any): void; + SetDimStyleOverrideValues(valueMap: Map): void; DeleteDimStyleOverrideValue(key: DimStyleKeyCode): void; ClearDimStyleOverride(): void; GetDimStyleValue(key: DimStyleKeyCode): any; @@ -27,9 +31,15 @@ export declare abstract class Dimension extends Entity { set TextSize(size: number); get FractionDigits(): number; set FractionDigits(length: number); + get RoomName(): string; + set RoomName(value: string); + get CabinetName(): string; + set CabinetName(value: string); /**未被修改过的 原始显示字符串,供内部使用 实际文字需要使用.TextString */ protected abstract GetPrimitiveString(): string; protected ReadDimStyle(file: CADFiler): void; protected WriteDimStyle(file: CADFiler): void; + protected ReadRoomAndCabinetName(file: CADFiler): void; + protected WriteRoomAndCabinetName(file: CADFiler): void; } //# sourceMappingURL=Dimension.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Dimension/Dimension.d.ts.map b/types/DatabaseServices/Dimension/Dimension.d.ts.map index 2467b6a..c8ae60f 100644 --- a/types/DatabaseServices/Dimension/Dimension.d.ts.map +++ b/types/DatabaseServices/Dimension/Dimension.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Dimension.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/Dimension.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,8BACsB,SAAU,SAAQ,MAAM;IAE1C,cAAc,UAAQ;IACtB,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,KAAK,OAA2C;IAG1D,IAAI,QAAQ,IACa,QAAQ,CADU;IAC3C,IAAI,QAAQ,CAAC,UAAU,EAAE,QAAQ,EAAK;IAGtC,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC9B,SAAS,CAAC,iBAAiB,EAAE,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,CAAW;IAGjE,wBAAwB,CAAC,GAAG,EAAE,eAAe,GAAG,GAAG;IAEnD,wBAAwB,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG;IAczD,2BAA2B,CAAC,GAAG,EAAE,eAAe;IAQhD,qBAAqB;IAUrB,gBAAgB,CAAC,GAAG,EAAE,eAAe;IAYrC,IAAI,QAAQ,IAEU,QAAQ,CAFW;IACzC,YAAY;IACZ,IAAI,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAS7B;IAID,IAAI,UAAU,CAAC,GAAG,EAAE,MAAM,EAazB;IAED,IAAI,UAAU,IAfM,MAAM,CAkBzB;IACD,iBAAiB;IACjB,IAAI,YAAY,WAGf;IAED,IAAI,QAAQ,IACO,MAAM,CAD+C;IACxE,IAAI,QAAQ,CAAC,IAAI,EAAE,MAAM,EAGxB;IAGD,IAAI,cAAc,IACS,MAAM,CAD8C;IAC/E,IAAI,cAAc,CAAC,MAAM,EAAE,MAAM,EAGhC;IAGD,8CAA8C;IAC9C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,IAAI,MAAM;IAG/C,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ;IAWrC,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ;CASzC"} \ No newline at end of file +{"version":3,"file":"Dimension.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/Dimension.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEpC,8BACsB,SAAU,SAAQ,MAAM;IAE1C,cAAc,UAAQ;IACtB,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,KAAK,OAAiD;IAGhE,IAAI,QAAQ,IACa,QAAQ,CAAC,sBAAsB,CAAC,CADd;IAC3C,IAAI,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EAAK;IAG9D,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC;IAC9B,SAAS,CAAC,iBAAiB,EAAE,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,CAAW;IAEjE,SAAS,CAAC,SAAS,EAAE,MAAM,CAAM;IACjC,SAAS,CAAC,YAAY,EAAE,MAAM,CAAM;IAGpC,wBAAwB,CAAC,GAAG,EAAE,eAAe,GAAG,GAAG;IAEnD,wBAAwB,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG;IAczD,yBAAyB,CAAC,QAAQ,EAAE,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC;IAW7D,2BAA2B,CAAC,GAAG,EAAE,eAAe;IAQhD,qBAAqB;IAUrB,gBAAgB,CAAC,GAAG,EAAE,eAAe;IAYrC,IAAI,QAAQ,IAEU,QAAQ,CAFW;IACzC,YAAY;IACZ,IAAI,QAAQ,CAAC,OAAO,EAAE,QAAQ,EAS7B;IAID,IAAI,UAAU,CAAC,GAAG,EAAE,MAAM,EAazB;IAED,IAAI,UAAU,IAfM,MAAM,CAkBzB;IACD,iBAAiB;IACjB,IAAI,YAAY,WAGf;IAED,IAAI,QAAQ,IACO,MAAM,CAD+C;IACxE,IAAI,QAAQ,CAAC,IAAI,EAAE,MAAM,EAGxB;IAGD,IAAI,cAAc,IACS,MAAM,CAD8C;IAC/E,IAAI,cAAc,CAAC,MAAM,EAAE,MAAM,EAGhC;IAED,IAAI,QAAQ,IACQ,MAAM,CADe;IACzC,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,EAKzB;IAED,IAAI,WAAW,IACQ,MAAM,CADkB;IAC/C,IAAI,WAAW,CAAC,KAAK,EAAE,MAAM,EAK5B;IAED,8CAA8C;IAC9C,SAAS,CAAC,QAAQ,CAAC,kBAAkB,IAAI,MAAM;IAE/C,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ;IAWrC,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ;IAUtC,SAAS,CAAC,sBAAsB,CAAC,IAAI,EAAE,QAAQ;IAM/C,SAAS,CAAC,uBAAuB,CAAC,IAAI,EAAE,QAAQ;CAKnD"} \ No newline at end of file diff --git a/types/DatabaseServices/Dimension/RadiusDimension.d.ts.map b/types/DatabaseServices/Dimension/RadiusDimension.d.ts.map index c1fb394..7b8c6cf 100644 --- a/types/DatabaseServices/Dimension/RadiusDimension.d.ts.map +++ b/types/DatabaseServices/Dimension/RadiusDimension.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RadiusDimension.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/RadiusDimension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAQ,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAQ3G,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,qBACa,eAAgB,SAAQ,SAAS;IAOtC,SAAS,CAAC,OAAO;IACjB,SAAS,CAAC,sBAAsB;IAChC,SAAS,CAAC,UAAU;IANxB,cAAc,UAAQ;IACtB,SAAS,CAAC,WAAW,EAAE,MAAM,CAAS;gBAGxB,OAAO,UAAgB,EACvB,sBAAsB,UAAgB,EACtC,UAAU,UAAgB;IAOxC,IAAI,IAAI,gCAMP;IAED,SAAS,CAAC,kBAAkB,IAAI,MAAM;IAKtC,IAAI,MAAM,IAKI,OAAO,CAFpB;IAED,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,EAKpB;IAED,IAAI,qBAAqB,IAII,OAAO,CADnC;IACD,IAAI,qBAAqB,CAAC,CAAC,EAAE,OAAO,EAKnC;IACD,IAAI,SAAS,IAII,OAAO,CADvB;IACD,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,EAKvB;IACD,OAAO;IAUP,KAAK,IAAI,IAAI;IAab,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IA2BvE,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAgCtD,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAmBnF,UAAU;IAaV,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAWZ,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAI/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IA+BhD,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;IAIlC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAQxD,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO;IAetC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAiBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAY3B"} \ No newline at end of file +{"version":3,"file":"RadiusDimension.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Dimension/RadiusDimension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAQ,QAAQ,EAAiB,OAAO,EAAE,MAAM,OAAO,CAAC;AAQ3G,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,qBACa,eAAgB,SAAQ,SAAS;IAOtC,SAAS,CAAC,OAAO;IACjB,SAAS,CAAC,sBAAsB;IAChC,SAAS,CAAC,UAAU;IANxB,cAAc,UAAQ;IACtB,SAAS,CAAC,WAAW,EAAE,MAAM,CAAS;gBAGxB,OAAO,UAAgB,EACvB,sBAAsB,UAAgB,EACtC,UAAU,UAAgB;IAOxC,IAAI,IAAI,gCAMP;IAED,SAAS,CAAC,kBAAkB,IAAI,MAAM;IAKtC,IAAI,MAAM,IAKI,OAAO,CAFpB;IAED,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,EAKpB;IAED,IAAI,qBAAqB,IAII,OAAO,CADnC;IACD,IAAI,qBAAqB,CAAC,CAAC,EAAE,OAAO,EAKnC;IACD,IAAI,SAAS,IAII,OAAO,CADvB;IACD,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,EAKvB;IACD,OAAO;IAUP,KAAK,IAAI,IAAI;IAab,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IA0BvE,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAmCtD,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IAmBnF,UAAU;IAaV,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAWZ,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAI/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IA+BhD,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;IAIlC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAQxD,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO;IAetC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAoBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAc3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Arc.d.ts b/types/DatabaseServices/Entity/Arc.d.ts index 10cbb4f..2c354ce 100644 --- a/types/DatabaseServices/Entity/Arc.d.ts +++ b/types/DatabaseServices/Entity/Arc.d.ts @@ -16,6 +16,7 @@ import { Curve } from './Curve'; * 参考计算圆弧的完整角度方法查看该计算方式. */ export declare class Arc extends Curve { + private _DisplayAccuracy; constructor(center?: Vector3, radius?: number, startAngle?: number, endAngle?: number, clockwise?: boolean); private _Radius; private _StartAngle; @@ -29,6 +30,8 @@ export declare class Arc extends Curve { set Center(v: Vector3); get Normal(): Vector3; set Normal(v: Vector3); + get DisplayAccuracy(): number; + set DisplayAccuracy(v: number); get Area(): number; get Area2(): number; get IsClose(): boolean; @@ -65,7 +68,7 @@ export declare class Arc extends Curve { GetPointAtDistance(distance: number): Vector3; GetDistAtParam(param: number): number; GetDistAtPoint(pt: Vector3): number; - GetParamAtPoint(pt: Vector3): number; + GetParamAtPoint(pt: Vector3, fuzz?: number): number; /** * 利用角度计算该角度在圆弧中代表的参数. * 如果角度在圆弧内,那么返回0-1 diff --git a/types/DatabaseServices/Entity/Arc.d.ts.map b/types/DatabaseServices/Entity/Arc.d.ts.map index e178600..c1dc169 100644 --- a/types/DatabaseServices/Entity/Arc.d.ts.map +++ b/types/DatabaseServices/Entity/Arc.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Arc.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Arc.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Arc.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Arc.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/ArcBoardType.d.ts b/types/DatabaseServices/Entity/ArcBoardType.d.ts new file mode 100644 index 0000000..0569b87 --- /dev/null +++ b/types/DatabaseServices/Entity/ArcBoardType.d.ts @@ -0,0 +1,5 @@ +export declare enum ArcBoardFeedProcess { + Slots = 0,//间隔直槽 + Model = 1 +} +//# sourceMappingURL=ArcBoardType.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Entity/ArcBoardType.d.ts.map b/types/DatabaseServices/Entity/ArcBoardType.d.ts.map new file mode 100644 index 0000000..724ed20 --- /dev/null +++ b/types/DatabaseServices/Entity/ArcBoardType.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ArcBoardType.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/ArcBoardType.ts"],"names":[],"mappings":"AAAA,oBAAY,mBAAmB;IAE3B,KAAK,IAAI,CAAG,MAAM;IAClB,KAAK,IAAI;CACZ"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Board.d.ts b/types/DatabaseServices/Entity/Board.d.ts index cdc6350..61c2907 100644 --- a/types/DatabaseServices/Entity/Board.d.ts +++ b/types/DatabaseServices/Entity/Board.d.ts @@ -1,13 +1,20 @@ import Geom3 from '@jscad/modeling/src/geometries/geom3/type'; -import { Frustum, Geometry, Matrix3, Matrix4, Object3D, UVGenerator, Vector3 } from 'three'; +import { Frustum, Geometry, Matrix3, Matrix4, Object3D, ShapeBufferGeometry, UVGenerator, Vector3 } from 'three'; +import { ArcBoardBuild } from '../../Add-on/ArcBoard/ArcBoardBuild'; +import { ArcBoardOptions } from '../../Add-on/ArcBoard/ArcBoardFeeding'; +import { SplitBoardSideModelUtil } from '../../Add-on/BoardCutting/SplitBoardSideModel'; import { FaceDirection } from "../../Add-on/DrawDrilling/DrillType"; import { ObjectSnapMode } from '../../Editor/ObjectSnapMode'; +import { Box3Ext } from '../../Geometry/Box'; import { RenderType } from '../../GraphicsSystem/RenderType'; import { BoardProcessOption } from "../../UI/Store/OptionInterface/BoardProcessOption"; import { CADFiler } from '../CADFiler'; import { ObjectId } from '../ObjectId'; import { Shape } from '../Shape'; +import { ArcBoardFeedProcess } from './ArcBoardType'; import { BoardOpenDir, BoardType } from './BoardInterface'; +import { Circle } from './Circle'; +import { DragPointType } from './DragPointType'; import { ExtrudeContourCurve, ExtrudeSolid } from './Extrude'; import { Polyline } from './Polyline'; export interface IModeling { @@ -27,6 +34,7 @@ export interface IKnifeInfo { } export interface I2DModeingItem { depth: number; + depthExpr: string; offset: number; knife: IKnifeInfo; } @@ -44,6 +52,9 @@ export interface I3DModeling { dir: FaceDirection; knife: IKnifeInfo; } +export interface ObjectIdArr extends Array { + Name?: string; +} /** * 板件实体 */ @@ -63,20 +74,66 @@ export declare class Board extends ExtrudeSolid { private _IsChaiDan; private _2DModelingList; private _3DModelingList; + private _SideModelingMap; private _CustomNumber; private _DrillLock; private _DrillAssociationLock; + AlignLineObject: ObjectId; + private _SweepPath; + private _SweepAngle; + /** 见光面 */ + private _SweepVisibleFace; + _SweepArcBoardBuild: ArcBoardBuild; + private _ArcBoardOptions; + private _isDrawArcGroove; + arcBoardFeedProcess: ArcBoardFeedProcess; protected bevelEnabled: boolean; private _KnifePolylineMap; + private _jigSweepPath; + private _jigPath2WCSMtx; constructor(); + get BoundingBoxInOCS(): Box3Ext; + get BoundingBox(): Box3Ext; + get IsDrawArcGroove(): boolean; + set IsDrawArcGroove(v: boolean); + /** + * path 发生改变,更新圆弧配置 + * @param {{ key: number, arc: Arc; }[]} oldArcs 旧圆弧和对应的board options key + * @param {Polyline} nPath 新路径(未进行起点偏移) + * @return {*} {void} + */ + private UpdateArcBoardOptionsByPath; + get ArcBoardOptions(): Map; + set ArcBoardOptions(opt: Map); + UpdateArcBoardOptions(isNewPath: boolean): void; + get IsArcBoard(): boolean; + get ArcBuild(): ArcBoardBuild; + SetSweepPath(path: Polyline, sweepAngle: number): void; + private _FixContourByArcSweepPath_Ing; + FixContourByArcSweepPath(): void; + FixArcSweepPathLength(): void; + ParseBoardLengthInArcSweep(): number; + ClearSweepPath(): void; + GetSweepPath(): Polyline; + GetSweepPathInWCS(): Polyline; + GetSweepPath1InWCS(): Polyline; + GetSweepPath2InWCS(): Polyline; + /** 获取见光面 */ + get SweepVisibleFace(): FaceDirection; + /** 设置见光面 */ + set SweepVisibleFace(dir: FaceDirection); + get SweepAngle(): number; + set SweepAngle(v: number); + AdjustPath(br: Board, outline: Polyline | Circle): void; + AdjustPosition(br: Board, basePoint: Vector3): void; /** * 创建一个代理数组,数组改变时被监听 */ private CreateArray; private InitBoardData; - InitBoard(length: number, width: number, thickness: number, boardType?: BoardType): void; + InitBoard(length: number, width: number, thickness: number, boardType?: BoardType): this; static CreateBoard(length: number, width: number, thickness: number, boardType?: BoardType): Board; - get DrillList(): Map, ObjectId[][]>; + get DrillList(): Map, ObjectIdArr[]>; get DrillLock(): boolean; set DrillLock(v: boolean); get isDrillAssociationLock(): boolean; @@ -100,12 +157,18 @@ export declare class Board extends ExtrudeSolid { protected GetRelevanceKnifes(knifs: ExtrudeSolid[]): void; ClearRelevance(en?: ExtrudeSolid): void; get SplitBoards(): this[]; + get ArcBoardModeling(): IModeling[]; get BoardModeling(): IModeling[]; set BoardModeling(models: IModeling[]); get Modeling2D(): I2DModeling[]; set Modeling2D(ms: I2DModeling[]); get Modeling3D(): I3DModeling[]; set Modeling3D(ms: I3DModeling[]); + RelevanceSideModelMap: Map; + get SideModelingMap(): Map; + set SideModelingMap(sideModelingMap: Map); + get AllSideModelGrooveMap(): Map; + ClearSideModeling(): void; ClearModeling2DList(): void; ClearModeling3DList(): void; get IsChaiDan(): boolean; @@ -116,7 +179,7 @@ export declare class Board extends ExtrudeSolid { /** * 注意传入的排钻列表,避免指针被引用 */ - AppendDrillList(k: ObjectId, drs: ObjectId[][]): void; + AppendDrillList(k: ObjectId, drs: ObjectIdArr[]): void; ClearDrillList(k: ObjectId): void; ClearAllDrillList(): void; Erase(isErase?: boolean): void; @@ -125,6 +188,8 @@ export declare class Board extends ExtrudeSolid { set Height(v: number); get Width(): number; set Width(v: number); + get Thickness(): number; + set Thickness(thickness: number); get BoardType(): BoardType; set BoardType(type: BoardType); SetBoardType(type: BoardType): void; @@ -135,6 +200,10 @@ export declare class Board extends ExtrudeSolid { get HasGroove(): boolean; get Name(): string; set Name(n: string); + private UpdateSplitBoardSideModelUtil; + private _SplitBoardSideModelUtil; + get SplitBoardSideModelUtil(): SplitBoardSideModelUtil; + GeneralRectContour(): void; /** * 板件的轮廓,在板件坐标系中的表现方式. */ @@ -157,7 +226,7 @@ export declare class Board extends ExtrudeSolid { get UCGenerator(): UVGenerator; UpdateUV(geo: Geometry, ocs: Matrix4, isRev?: boolean): void; CopyFrom(obj: Board): void; - Clone(): this; + Clone(cloneDraw?: boolean): this; Join(target: this): import("../../Common/Status").Status; private GetLinesDir; private GetLinesOpenDir; @@ -173,16 +242,28 @@ export declare class Board extends ExtrudeSolid { * 这个函数生成了二维刀路的csg数组,并且同时生成了_2DPathDrawObject(二维刀路提刀线框显示对象) */ Get2DPathCsgs(): Geom3[]; + _SideModeingCsgs: Geom3[]; + GetSideModeingCsgs(): Geom3[]; + ClearSideModelingCache(): void; + get HasSideModel(): boolean; + private _asyncSideModelIng; + get AsyncSideModeling(): boolean; protected get Has2DPath(): boolean; private _workerCalcedGeom; private _async2DPathIng; get Async2DPathing(): boolean; GoodBye(): void; - private promise2DPath; - Load2DPathIng(): Promise; + private _Promise2DPathRes; + private _2DPathBuildPromise; + Load2DPathPromise(): Promise; HandleSpliteEntitys(splitEntitys: this[]): void; + private BuildArcGeometry; + UpdateDrawObject(renderType: RenderType, obj: Object3D): Object3D; + private DrawAsyncText; private get PlaceColor(); private GetPlaceFace; + /** 获取大孔面的几何体 */ + get BigHoleFaceGeo(): ShapeBufferGeometry; private GetBigHoleFace; OffsetPathCache: Map, vec: Vector3): void; GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform?: Matrix3, frustum?: Frustum): Vector3[]; + private MoveArcBoardPoints; + private GetOffsetVecAlongPath; + /** + * @private 通过新旧轮廓的Bondingbox修正路径 + * @param {Box3Ext} newBox 路径坐标系下,新轮廓的Bondingbox + * @param {Box3Ext} oldBox 路径坐标系下,旧轮廓的Bondingbox + * @param {Polyline} path 见光面路径 + * @return {*} {Polyline} 修正好的路径 + */ + private FixSweepPathByContourBondingbox; DeferUpdate(): void; protected _ReadFile(file: CADFiler): void; WriteFile(file: CADFiler): void; diff --git a/types/DatabaseServices/Entity/Board.d.ts.map b/types/DatabaseServices/Entity/Board.d.ts.map index 6f91242..4c32fea 100644 --- a/types/DatabaseServices/Entity/Board.d.ts.map +++ b/types/DatabaseServices/Entity/Board.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Board.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Board.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Board.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Board.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/BoardInterface.d.ts b/types/DatabaseServices/Entity/BoardInterface.d.ts index 1d8991a..cdc85bb 100644 --- a/types/DatabaseServices/Entity/BoardInterface.d.ts +++ b/types/DatabaseServices/Entity/BoardInterface.d.ts @@ -11,6 +11,11 @@ export declare enum LinesType { /** 可翻转 */ CanReversal = 2 } +export declare const LinesTypeNames: { + 0: string; + 1: string; + 2: string; +}; export declare enum ComposingType { Positive = 0,//正面 Reverse = 1,//反面 @@ -21,6 +26,7 @@ export declare enum BoardOpenDir { Right = 2, Up = 3, Down = 4, + NoOpen = 5,//是门板 但没有开门方向 None = 0 } export declare enum BrRelativePos { @@ -32,4 +38,8 @@ export declare enum BrRelativePos { Right = "right", Div = "div" } +export declare enum AddRemarkType { + Cover = 1,//覆盖 + NoCover = 0 +} //# sourceMappingURL=BoardInterface.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Entity/BoardInterface.d.ts.map b/types/DatabaseServices/Entity/BoardInterface.d.ts.map index c6a9fca..eb857b7 100644 --- a/types/DatabaseServices/Entity/BoardInterface.d.ts.map +++ b/types/DatabaseServices/Entity/BoardInterface.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardInterface.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/BoardInterface.ts"],"names":[],"mappings":"AAAA,oBAAY,SAAS;IAEjB,KAAK,IAAI,CAAE,IAAI;IACf,QAAQ,IAAI,CAAE,IAAI;IAClB,MAAM,IAAI;CACb;AAGD,oBAAY,SAAS;IAEjB,SAAS;IACT,QAAQ,IAAI;IACZ,SAAS;IACT,OAAO,IAAI;IACX,UAAU;IACV,WAAW,IAAI;CAClB;AAGD,oBAAY,aAAa;IAErB,QAAQ,IAAI,CAAG,IAAI;IACnB,OAAO,IAAI,CAAI,IAAI;IACnB,SAAS,IAAI;CAChB;AAED,oBAAY,YAAY;IAEpB,IAAI,IAAI;IACR,KAAK,IAAI;IACT,EAAE,IAAI;IACN,IAAI,IAAI;IACR,IAAI,IAAI;CACX;AAED,oBAAY,aAAa;IAErB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,GAAG,QAAQ;CACd"} \ No newline at end of file +{"version":3,"file":"BoardInterface.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/BoardInterface.ts"],"names":[],"mappings":"AAAA,oBAAY,SAAS;IAEjB,KAAK,IAAI,CAAE,IAAI;IACf,QAAQ,IAAI,CAAE,IAAI;IAClB,MAAM,IAAI;CACb;AAGD,oBAAY,SAAS;IAEjB,SAAS;IACT,QAAQ,IAAI;IACZ,SAAS;IACT,OAAO,IAAI;IACX,UAAU;IACV,WAAW,IAAI;CAClB;AAGD,eAAO,MAAM,cAAc;;;;CAI1B,CAAC;AAGF,oBAAY,aAAa;IAErB,QAAQ,IAAI,CAAG,IAAI;IACnB,OAAO,IAAI,CAAI,IAAI;IACnB,SAAS,IAAI;CAChB;AAED,oBAAY,YAAY;IAEpB,IAAI,IAAI;IACR,KAAK,IAAI;IACT,EAAE,IAAI;IACN,IAAI,IAAI;IACR,MAAM,IAAI,CAAE,aAAa;IACzB,IAAI,IAAI;CACX;AAED,oBAAY,aAAa;IAErB,KAAK,UAAU;IACf,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,GAAG,QAAQ;CACd;AAED,oBAAY,aAAa;IAErB,KAAK,IAAI,CAAC,IAAI;IACd,OAAO,IAAI;CACd"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Circle.d.ts b/types/DatabaseServices/Entity/Circle.d.ts index 6cff282..3b9a0cf 100644 --- a/types/DatabaseServices/Entity/Circle.d.ts +++ b/types/DatabaseServices/Entity/Circle.d.ts @@ -9,8 +9,11 @@ import { Arc } from './Arc'; import { Curve } from './Curve'; import { DragPointType } from './DragPointType'; export declare class Circle extends Curve { + private _DisplayAccuracy; constructor(center?: Vector3, radius?: number); private _Radius; + get DisplayAccuracy(): number; + set DisplayAccuracy(v: number); get Shape(): Shape2; get Center(): Vector3; set Center(v: Vector3); diff --git a/types/DatabaseServices/Entity/Circle.d.ts.map b/types/DatabaseServices/Entity/Circle.d.ts.map index 146c058..f3f6943 100644 --- a/types/DatabaseServices/Entity/Circle.d.ts.map +++ b/types/DatabaseServices/Entity/Circle.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Circle.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Circle.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Circle.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Circle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAiB,OAAO,EAAE,MAAM,OAAO,CAAC;AAQnH,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAI7C,OAAO,EAA2G,eAAe,EAA6B,eAAe,EAA0B,MAAM,oCAAoC,CAAC;AAClP,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAehD,qBACa,MAAO,SAAQ,KAAK;IAE7B,OAAO,CAAC,gBAAgB,CAAK;gBACjB,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,GAAE,MAAa;IAMnD,OAAO,CAAC,OAAO,CAAS;IAExB,IAAI,eAAe,IAKI,MAAM,CAF5B;IAED,IAAI,eAAe,CAAC,CAAC,EAAE,MAAM,EAQ5B;IAED,IAAI,KAAK,WASR;IAED,IAAI,MAAM,IAII,OAAO,CADpB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,EAKpB;IACD,IAAI,MAAM,IAII,MAAM,CADnB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAKnB;IAED,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAO5C,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAW7C,IAAI,UAAU,IAAI,OAAO,CAGxB;IACD,IAAI,UAAU,IAAI,MAAM,CAGvB;IACD,IAAI,QAAQ,IAAI,OAAO,CAGtB;IACD,IAAI,QAAQ,IAAI,MAAM,CAGrB;IACD,SAAS,CAAC,EAAE,EAAE,OAAO;IAIrB,IAAI,IAAI,WAGP;IACD,IAAI,KAAK,WAGR;IACD,IAAI,MAAM,WAGT;IAED,IAAI,OAAO,IAAI,OAAO,CAGrB;IAGD,IAAI,WAAW,IAAI,OAAO,CAAkB;IAE5C,eAAe,CAAC,KAAK,EAAE,MAAM;IAK7B,kBAAkB,CAAC,QAAQ,EAAE,MAAM;IAMnC,cAAc,CAAC,KAAK,EAAE,MAAM;IAK5B,cAAc,CAAC,EAAE,EAAE,OAAO;IAM1B,cAAc,CAAC,CAAC,EAAE,MAAM;IAKxB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAkCvC,eAAe,CAAC,EAAE,CAAC,EAAE,OAAO;IAO5B,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,SAAO;IAIlC,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,EAAE;IAWnC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,SAAO,GAAG,eAAe,EAAE;IAwBpG,IAAI,gBAAgB,IAAI,OAAO,CAG9B;IAED,IAAI,WAAW,IAAI,OAAO,CASzB;IAED,cAAc,CAAC,UAAU,GAAE,UAAiC;IAkB5D,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAKhD,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ;IAe5E,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM;IAQ9C,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAe/B,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAkCZ,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAsBrD,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;IAOlC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAQxD,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAalC,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;IAaxD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAUlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAS3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/CompositeEntity.d.ts b/types/DatabaseServices/Entity/CompositeEntity.d.ts index 9fef902..81de691 100644 --- a/types/DatabaseServices/Entity/CompositeEntity.d.ts +++ b/types/DatabaseServices/Entity/CompositeEntity.d.ts @@ -1,8 +1,11 @@ -import { Matrix3, Matrix4, Object3D, Vector3 } from "three"; +import { Frustum, Matrix3, Matrix4, Object3D, Vector3 } from "three"; import { ObjectSnapMode } from "../../Editor/ObjectSnapMode"; import { Box3Ext } from "../../Geometry/Box"; import { RenderType } from "../../GraphicsSystem/RenderType"; import { CADFiler } from "../CADFiler"; +import { LayerTableRecord } from "../LayerTableRecord"; +import { ObjectId } from "../ObjectId"; +import { PhysicalMaterialRecord } from "../PhysicalMaterialRecord"; import { DragPointType } from "./DragPointType"; import { Entity } from "./Entity"; export declare abstract class CompositeEntity extends Entity { @@ -19,10 +22,20 @@ export declare abstract class CompositeEntity extends Entity { Traverse(callback: (arg0: Entity) => void): void; protected InitDrawObject(renderType?: RenderType): Object3D; UpdateDrawObject(renderType: RenderType, obj: Object3D): void; + /** 为了避免_CacheDrawObject中的key错误,这里重写了GetDrawObjectFromRenderType,而不是直接在UpdateDrawObject中修改rtype */ + GetDrawObjectFromRenderType(renderType?: RenderType): Object3D; get ColorIndex(): number; set ColorIndex(color: number); - get Material(): import("../ObjectId").ObjectId; - set Material(id: import("../ObjectId").ObjectId); + get Material(): ObjectId; + set Material(id: ObjectId); + get Layer(): ObjectId; + set Layer(id: ObjectId); + SetAllMaterialAtSlot(mtl: ObjectId): void; + GetMtlLockedStatus(): { + partMtlLocked: boolean; + allMtlLocked: boolean; + }; + GetPhyMtlRecords(containErased?: boolean): PhysicalMaterialRecord[]; UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D): void; RestoreJigMaterial(): void; /** @@ -33,7 +46,7 @@ export declare abstract class CompositeEntity extends Entity { * @param viewXform const 最近点捕捉需要这个变量 * @returns object snap points */ - GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform?: Matrix3): Vector3[]; + GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform?: Matrix3, frustum?: Frustum): Vector3[]; GetGripPoints(): Array; MoveGripPoints(indexList: number[], vec: Vector3): void; GetStretchPoints(): Array; diff --git a/types/DatabaseServices/Entity/CompositeEntity.d.ts.map b/types/DatabaseServices/Entity/CompositeEntity.d.ts.map index 9033d7f..70f6f55 100644 --- a/types/DatabaseServices/Entity/CompositeEntity.d.ts.map +++ b/types/DatabaseServices/Entity/CompositeEntity.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CompositeEntity.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/CompositeEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAK5D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC,8BACsB,eAAgB,SAAQ,MAAM;;IAOpC,OAAO,EAAE,MAAM,EAAE,CAAM;IAEnC;;MAEE;IACF,IAAa,gBAAgB,IAAI,OAAO,CA6BvC;IAID;;MAEE;IACO,OAAO;IAShB,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAsBzC,SAAS,CAAC,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAajF,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAwBtD,IAAI,UAAU,IAAI,MAAM,CAGvB;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,EAgB3B;IACD,IAAI,QAAQ,qEAGX;IACD,IAAI,QAAQ,CAAC,EAAE,kEAAA,EAQd;IAED,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAK9D,kBAAkB;IASlB;;;;;;;MAOE;IACF,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAQZ,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAK/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAMhD,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;IAKlC;;;;;;OAMG;IACH,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAMxD,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,yBAAyB;IASjC,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa;IA4ClF,eAAe,CAAC,IAAI,EAAE,IAAI;IAkB1B,iBAAiB,CAAC,CAAC,EAAE,OAAO;IAS5B,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAclC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAS3B"} \ No newline at end of file +{"version":3,"file":"CompositeEntity.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/CompositeEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAMrE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAI7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC,8BACsB,eAAgB,SAAQ,MAAM;;IAOpC,OAAO,EAAE,MAAM,EAAE,CAAM;IAEnC;;MAEE;IACF,IAAa,gBAAgB,IAAI,OAAO,CA6BvC;IAID;;MAEE;IACO,OAAO;IAYhB,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAsBzC,SAAS,CAAC,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAajF,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAyBtD,kGAAkG;IACzF,2BAA2B,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAkB7F,IAAI,UAAU,IAAI,MAAM,CAGvB;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,EAgB3B;IACD,IAAI,QAAQ,qCAGX;IACD,IAAI,QAAQ,CAAC,EAAE,kCAAA,EAQd;IAED,IAAI,KAAK,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAGtC;IAED,IAAI,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAQvC;IAED,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,sBAAsB,CAAC;IAe1D,kBAAkB;;;;IAwBlB,gBAAgB,CAAC,aAAa,GAAE,OAAe;IAgB/C,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAe9D,kBAAkB;IASlB;;;;;;;MAOE;IACF,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,EACnB,OAAO,CAAC,EAAE,OAAO,GAClB,OAAO,EAAE;IAQZ,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAK/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAMhD,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;IAKlC;;;;;;OAMG;IACH,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAMxD,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,yBAAyB;IASjC,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa;IA8ClF,eAAe,CAAC,IAAI,EAAE,IAAI;IAkB1B,iBAAiB,CAAC,CAAC,EAAE,OAAO;IAS5B,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAmBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAY3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Curve.d.ts b/types/DatabaseServices/Entity/Curve.d.ts index 475840a..c2b809f 100644 --- a/types/DatabaseServices/Entity/Curve.d.ts +++ b/types/DatabaseServices/Entity/Curve.d.ts @@ -2,6 +2,7 @@ import { Material, Object3D, Curve as TCurve, Vector3 } from 'three'; import { Status } from '../../Common/Status'; import { IntersectOption, IntersectResult } from '../../GraphicsSystem/IntersectWith'; import { RenderType } from '../../GraphicsSystem/RenderType'; +import { CADFiler } from '../CADFiler'; import { DragPointType } from './DragPointType'; import { Entity } from './Entity'; export declare enum ExtendType { @@ -27,6 +28,12 @@ export declare enum ExtendType { */ export declare abstract class Curve extends Entity { constructor(); + protected _RoomName: string; + protected _CabinetName: string; + get RoomName(): string; + set RoomName(value: string); + get CabinetName(): string; + set CabinetName(value: string); get Is2D(): boolean; get StartPoint(): Vector3; set StartPoint(v: Vector3); @@ -81,6 +88,11 @@ export declare abstract class Curve extends Entity { PtOnCurve2(pt: Vector3): boolean; PtOnCurve3(p: Vector3, fuzz?: number): boolean; ParamOnCurve(param: number, fuzz?: number): boolean; + /** + * 偏移曲线 + * @param offsetDist 左边负数 右边正数 + * @returns 返回偏移后的曲线 可能返回多条曲线 + */ GetOffsetCurves(offsetDist: number): Array; GetClosestPointTo(pt: Vector3, extend: boolean): Vector3; /** @@ -112,6 +124,8 @@ export declare abstract class Curve extends Entity { */ UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material): void; UpdateJigMaterial(color?: number): void; + protected ReadRoomAndCabinetName(file: CADFiler): void; + protected WriteRoomAndCabinetName(file: CADFiler): void; } export declare const DbCurve: typeof Curve; //# sourceMappingURL=Curve.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Curve.d.ts.map b/types/DatabaseServices/Entity/Curve.d.ts.map index e29c37a..cb80b41 100644 --- a/types/DatabaseServices/Entity/Curve.d.ts.map +++ b/types/DatabaseServices/Entity/Curve.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Curve.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Curve.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Curve.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Curve.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/DragPointType.d.ts b/types/DatabaseServices/Entity/DragPointType.d.ts index 09a9307..2b70654 100644 --- a/types/DatabaseServices/Entity/DragPointType.d.ts +++ b/types/DatabaseServices/Entity/DragPointType.d.ts @@ -1,5 +1,6 @@ export declare enum DragPointType { Grip = 0, - Stretch = 1 + Stretch = 1, + End = 2 } //# sourceMappingURL=DragPointType.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Entity/DragPointType.d.ts.map b/types/DatabaseServices/Entity/DragPointType.d.ts.map index 07edcb4..8b04159 100644 --- a/types/DatabaseServices/Entity/DragPointType.d.ts.map +++ b/types/DatabaseServices/Entity/DragPointType.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DragPointType.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/DragPointType.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IAErB,IAAI,IAAI;IACR,OAAO,IAAI;CACd"} \ No newline at end of file +{"version":3,"file":"DragPointType.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/DragPointType.ts"],"names":[],"mappings":"AAAA,oBAAY,aAAa;IAErB,IAAI,IAAI;IACR,OAAO,IAAI;IACX,GAAG,IAAI;CACV"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Ellipse.d.ts.map b/types/DatabaseServices/Entity/Ellipse.d.ts.map index 43c2999..f7c05a2 100644 --- a/types/DatabaseServices/Entity/Ellipse.d.ts.map +++ b/types/DatabaseServices/Entity/Ellipse.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Ellipse.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Ellipse.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Ellipse.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Ellipse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Entity.d.ts b/types/DatabaseServices/Entity/Entity.d.ts index e187c5c..6575610 100644 --- a/types/DatabaseServices/Entity/Entity.d.ts +++ b/types/DatabaseServices/Entity/Entity.d.ts @@ -8,11 +8,14 @@ import { RenderType } from '../../GraphicsSystem/RenderType'; import { CADFiler } from '../CADFiler'; import { CADObject } from '../CADObject'; import { ISerialize } from '../ISerialize'; +import { LayerTableRecord } from '../LayerTableRecord'; import { ObjectId } from '../ObjectId'; +import { PhysicalMaterialRecord } from '../PhysicalMaterialRecord'; /** * Entity 是所有图元的基类,绘制的实体都集成该类. */ export declare class Entity extends CADObject { + ParentEntity: Entity; IsEmbedEntity: boolean; /** * 该实体的只有一个渲染类型,任何渲染类型都一个样 @@ -22,8 +25,9 @@ export declare class Entity extends CADObject { protected HasPlaceFaceRenderType: boolean; protected HasBigHoleFaceRenderType: boolean; protected _CacheDrawObject: Map; - protected _MaterialId: ObjectId; + protected _MaterialId: ObjectId; protected _Color: number; + protected _Layer: ObjectId; protected _Matrix: Matrix4; constructor(); protected _SpaceOCS: Matrix4; @@ -39,6 +43,9 @@ export declare class Entity extends CADObject { set Freeze(f: boolean); get VisibleInRender(): boolean; set VisibleInRender(v: boolean); + protected _LockMaterial: boolean; + get LockMaterial(): boolean; + set LockMaterial(f: boolean); GroupId: ObjectId; Template: ObjectId; ProcessingGroupList: ObjectId[]; @@ -49,12 +56,29 @@ export declare class Entity extends CADObject { NeedUpdateFlag: UpdateDraw; AutoUpdate: boolean; CopyInRenderTpye: RenderType; - set Material(materialId: ObjectId); - get Material(): ObjectId; + set Material(materialId: ObjectId); + get Material(): ObjectId; GetMaterialSlots(): void; - SetMaterialAtSlot(mtl: ObjectId, slotIndex: number): void; + IsMtlLockAtSlot(slotIndex?: number): boolean; + SetMaterialAtSlot(mtl: ObjectId, slotIndex?: number): void; + GetMtlLockedStatus(): { + allMtlLocked: boolean; + partMtlLocked: boolean; + }; + /** + * 获取实体的 PhysicalMaterialRecord + * @param {boolean} [containErased=false] 是否包含被删除的材质 + * @return {*} {PhysicalMaterialRecord[]} + * @memberof Entity + */ + GetPhyMtlRecords(containErased?: boolean): PhysicalMaterialRecord[]; + get HasLayer(): boolean; + get Layer(): ObjectId; + set Layer(id: ObjectId); + SetAllMaterialAtSlot(mtl: ObjectId): void; set ColorIndex(color: number); get ColorIndex(): number; + get DrawColorIndex(): number; /** * 炸开实体 */ diff --git a/types/DatabaseServices/Entity/Entity.d.ts.map b/types/DatabaseServices/Entity/Entity.d.ts.map index bfe6489..0c7212e 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":"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"} \ 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/Entity/EntityFbx.d.ts b/types/DatabaseServices/Entity/EntityFbx.d.ts index 4984c37..10e59f3 100644 --- a/types/DatabaseServices/Entity/EntityFbx.d.ts +++ b/types/DatabaseServices/Entity/EntityFbx.d.ts @@ -1,7 +1,5 @@ -import { Group, Matrix3, Matrix4, Object3D, Vector3 } from "three"; -import { ObjectSnapMode } from "../../Editor/ObjectSnapMode"; +import { Group, Matrix4, Vector3 } from "three"; import { Box3Ext } from "../../Geometry/Box"; -import { RenderType } from "../../GraphicsSystem/RenderType"; import { CADFiler } from "../CADFiler"; import { ObjectId } from "../ObjectId"; import { PhysicalMaterialRecord } from "../PhysicalMaterialRecord"; @@ -27,15 +25,20 @@ export declare class EntityFbx extends Entity { get BoundingBox(): Box3Ext; get BoundingBoxInOCS(): Box3Ext; get OverWriteMaterial(): Map>; + IsMtlLockAtSlot(slotIndex: number): boolean; SetMaterialAtSlot(mtl: ObjectId, slotIndex: number): void; + SetAllMaterialAtSlot(mtl: ObjectId): void; + GetMtlLockedStatus(): { + allMtlLocked: boolean; + partMtlLocked: boolean; + }; + private _GetValidOWMtlRecord; + GetPhyMtlRecords(containErased?: boolean): PhysicalMaterialRecord[]; newObject: Group; - LoadFBXModelFromArrayBuffer(fbxArray: ArrayBuffer): string; + LoadFBXModelFromArrayBuffer(fbxArray: ArrayBuffer): string | undefined; CloneDrawObject(from: this): void; ApplyScaleMatrix(m: Matrix4): this; - InitDrawObject(renderType?: RenderType): Object3D; - UpdateDrawObject(type: RenderType, obj: Object3D): void; - UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D): void; - GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform: Matrix3): Vector3[]; + private _GetValidOWMtl; MoveGripPoints(indexList: Array, vec: Vector3): void; protected _ReadFile(file: CADFiler): void; WriteFile(file: CADFiler): void; diff --git a/types/DatabaseServices/Entity/EntityFbx.d.ts.map b/types/DatabaseServices/Entity/EntityFbx.d.ts.map index 6746d51..143f384 100644 --- a/types/DatabaseServices/Entity/EntityFbx.d.ts.map +++ b/types/DatabaseServices/Entity/EntityFbx.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"EntityFbx.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/EntityFbx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,EAAE,OAAO,EAAE,OAAO,EAA2B,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AASlG,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;GAEG;AACH,qBACa,SAAU,SAAQ,MAAM;IAUrB,OAAO,CAAC,IAAI,CAAC;IARzB,cAAc,UAAQ;IAEtB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,OAAO,CAAe;IAE9B,OAAO,CAAC,kBAAkB,CAAuD;gBAE7D,IAAI,CAAC,EAAE,MAAM;IAKjC,IAAa,SAAS,YAGrB;IAED,IAAI,GAAG,IACM,MAAM,CADY;IAC/B,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,EAOlB;IAED,IAAI,OAAO,YAA6E;IAExF,IAAI,SAAS,IACO,OAAO,CADgB;IAC3C,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,EAW1B;IAED,IAAI,KAAK,YAKR;IAED,IAAI,WAAW,YAGd;IAED,IAAI,gBAAgB,YAenB;IACD,IAAI,iBAAiB,kDAGpB;IAED,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,MAAM;IAS1E,SAAS,EAAE,KAAK,CAAC;IAGjB,2BAA2B,CAAC,QAAQ,EAAE,WAAW;IAgBjD,eAAe,CAAC,IAAI,EAAE,IAAI;IAyB1B,gBAAgB,CAAC,CAAC,EAAE,OAAO;IA6B3B,cAAc,CAAC,UAAU,GAAE,UAAiC;IA4J5D,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAchD,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAyC9D,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,GACnB,OAAO,EAAE;IAsCZ,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAYrD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAmClC,SAAS,CAAC,IAAI,EAAE,QAAQ;CA4B3B"} \ No newline at end of file +{"version":3,"file":"EntityFbx.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/EntityFbx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAA8B,OAAO,EAAE,MAAM,OAAO,CAAC;AAG5E,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC;;GAEG;AACH,qBACa,SAAU,SAAQ,MAAM;IAUrB,OAAO,CAAC,IAAI,CAAC;IARzB,cAAc,UAAQ;IAEtB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,OAAO,CAAe;IAE9B,OAAO,CAAC,kBAAkB,CAAuD;gBAE7D,IAAI,CAAC,EAAE,MAAM;IAKjC,IAAa,SAAS,YAGrB;IAED,IAAI,GAAG,IACM,MAAM,CADY;IAC/B,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,EAOlB;IAED,IAAI,OAAO,YAA6E;IAExF,IAAI,SAAS,IACO,OAAO,CADgB;IAC3C,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,EAW1B;IAED,IAAI,KAAK,YAKR;IAED,IAAI,WAAW,YAGd;IAED,IAAI,gBAAgB,YAenB;IACD,IAAI,iBAAiB,kDAGpB;IAED,eAAe,CAAC,SAAS,EAAE,MAAM;IAWjC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,MAAM;IAa1E,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,sBAAsB,CAAC;IAqC1D,kBAAkB;;;;IAuClB,OAAO,CAAC,oBAAoB;IAW5B,gBAAgB,CAAC,aAAa,GAAE,OAAe;IAkC/C,SAAS,EAAE,KAAK,CAAC;IAGjB,2BAA2B,CAAC,QAAQ,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS;IAKtE,eAAe,CAAC,IAAI,EAAE,IAAI;IAI1B,gBAAgB,CAAC,CAAC,EAAE,OAAO;IA6B3B,OAAO,CAAC,cAAc;IAUtB,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAYrD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAwClC,SAAS,CAAC,IAAI,EAAE,QAAQ;CA+B3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/EntityRef.d.ts b/types/DatabaseServices/Entity/EntityRef.d.ts index 2bce2a7..ce12c1b 100644 --- a/types/DatabaseServices/Entity/EntityRef.d.ts +++ b/types/DatabaseServices/Entity/EntityRef.d.ts @@ -28,7 +28,15 @@ export declare class EntityRef extends Entity { CloneDrawObject(from: this): void; ApplyScaleMatrix(m: Matrix4): this; get OverWriteMaterial(): Map>; + IsMtlLockAtSlot(slotIndex: number): boolean; SetMaterialAtSlot(mtl: ObjectId, slotIndex: number): void; + SetAllMaterialAtSlot(mtl: ObjectId): void; + GetMtlLockedStatus(): { + partMtlLocked: boolean; + allMtlLocked: boolean; + }; + private _GetValidOWMtlRecord; + GetPhyMtlRecords(containErased?: boolean): PhysicalMaterialRecord[]; GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform: Matrix3): Vector3[]; GetGripPoints(): Array; MoveGripPoints(indexList: Array, vec: Vector3): void; diff --git a/types/DatabaseServices/Entity/EntityRef.d.ts.map b/types/DatabaseServices/Entity/EntityRef.d.ts.map index d68af9e..4ddf75c 100644 --- a/types/DatabaseServices/Entity/EntityRef.d.ts.map +++ b/types/DatabaseServices/Entity/EntityRef.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"EntityRef.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/EntityRef.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAE,OAAO,EAAQ,OAAO,EAAE,MAAM,OAAO,CAAC;AAI9D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC;;GAEG;AACH,qBACa,SAAU,SAAQ,MAAM;IAWrB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM;IATnC,cAAc,UAAQ;IAEtB,SAAS,CAAC,KAAK,UAAe;IAC9B,SAAS,CAAC,UAAU,UAAe;IACnC,SAAS,CAAC,OAAO,UAAe;IAEhC,SAAS,CAAC,kBAAkB,gDAAuD;gBAG7D,IAAI,CAAC,EAAE,MAAM;IAKnC,IAAa,SAAS,YAGrB;IAED,IAAI,GAAG,IACM,MAAM,CADY;IAC/B,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,EAOlB;IAED,IAAI,OAAO,YAA6E;IAExF,IAAI,SAAS,IACO,OAAO,CADgB;IAC3C,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,EAW1B;IAED,IAAI,KAAK,YAKR;IAED,IAAI,WAAW,YAGd;IAED,IAAI,gBAAgB,YAenB;IAED,eAAe,CAAC,IAAI,EAAE,IAAI;IA2C1B,gBAAgB,CAAC,CAAC,EAAE,OAAO;IA6B3B,IAAI,iBAAiB,kDAGpB;IAED,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,MAAM;IAY1E,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,GACnB,OAAO,EAAE;IAsCZ,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IA0B/B,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAarD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAmClC,SAAS,CAAC,IAAI,EAAE,QAAQ;CA4B3B"} \ No newline at end of file +{"version":3,"file":"EntityRef.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/EntityRef.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAE,OAAO,EAAQ,OAAO,EAAE,MAAM,OAAO,CAAC;AAI9D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAG7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIlC;;GAEG;AACH,qBACa,SAAU,SAAQ,MAAM;IAWrB,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM;IATnC,cAAc,UAAQ;IAEtB,SAAS,CAAC,KAAK,UAAe;IAC9B,SAAS,CAAC,UAAU,UAAe;IACnC,SAAS,CAAC,OAAO,UAAe;IAEhC,SAAS,CAAC,kBAAkB,gDAAuD;gBAG7D,IAAI,CAAC,EAAE,MAAM;IAKnC,IAAa,SAAS,YAGrB;IAED,IAAI,GAAG,IACM,MAAM,CADY;IAC/B,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,EAOlB;IAED,IAAI,OAAO,YAA6E;IAExF,IAAI,SAAS,IACO,OAAO,CADgB;IAC3C,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,EAW1B;IAED,IAAI,KAAK,YAKR;IAED,IAAI,WAAW,YAGd;IAED,IAAI,gBAAgB,YAenB;IAED,eAAe,CAAC,IAAI,EAAE,IAAI;IA2C1B,gBAAgB,CAAC,CAAC,EAAE,OAAO;IA6B3B,IAAI,iBAAiB,kDAGpB;IAED,eAAe,CAAC,SAAS,EAAE,MAAM;IAWjC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EAAE,SAAS,EAAE,MAAM;IAa1E,oBAAoB,CAAC,GAAG,EAAE,QAAQ,CAAC,sBAAsB,CAAC;IAqC1D,kBAAkB;;;;IAuClB,OAAO,CAAC,oBAAoB;IAS5B,gBAAgB,CAAC,aAAa,GAAE,OAAe;IAgC/C,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,GACnB,OAAO,EAAE;IAsCZ,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IA0B/B,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAarD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAwClC,SAAS,CAAC,IAAI,EAAE,QAAQ;CA+B3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Extrude.d.ts b/types/DatabaseServices/Entity/Extrude.d.ts index 4cd1f9d..12c9a35 100644 --- a/types/DatabaseServices/Entity/Extrude.d.ts +++ b/types/DatabaseServices/Entity/Extrude.d.ts @@ -8,6 +8,7 @@ import { OBB } from "../../Geometry/OBB/obb"; import { RenderType } from "../../GraphicsSystem/RenderType"; import { CADFiler } from "../CADFiler"; import { ObjectId } from "../ObjectId"; +import { PhysicalMaterialRecord } from "../PhysicalMaterialRecord"; import { Shape } from "../Shape"; import { Circle } from "./Circle"; import { DragPointType } from "./DragPointType"; @@ -18,6 +19,7 @@ export type ExtrudeContourCurve = Polyline | Circle; export type ExtrudeContour = Polyline | Circle | ExtrudeSolid | Region; export declare const MaxDrawGrooveCount = 1000; export declare class ExtrudeSolid extends Entity { + private _DisplayAccuracy; protected height: number; protected width: number; /** @@ -53,8 +55,10 @@ export declare class ExtrudeSolid extends Entity { Version: number; }; constructor(); - set Material(materialId: ObjectId); - get Material(): ObjectId; + set Material(materialId: ObjectId); + get Material(): ObjectId; + get DisplayAccuracy(): number; + set DisplayAccuracy(v: number); get KnifeRadius(): number; set KnifeRadius(v: number); get BoundingBox(): Box3Ext; @@ -66,7 +70,6 @@ export declare class ExtrudeSolid extends Entity { set GroovesAddWidth(v: number); get GroovesAddDepth(): number; set GroovesAddDepth(v: number); - Clone(): this; ApplyMatrix(m: Matrix4): this; protected ApplyScaleMatrix(m: Matrix4): this; protected ApplyMirrorMatrix(m: Matrix4): this; @@ -75,6 +78,7 @@ export declare class ExtrudeSolid extends Entity { get Thickness(): number; set Thickness(thickness: number); get Grooves(): ExtrudeSolid[]; + get SideModelingMap(): Map; /** * 返回未拷贝的轮廓曲线 */ @@ -125,6 +129,10 @@ export declare class ExtrudeSolid extends Entity { * @returns 切割是否成功 */ Subtract(extrudes: ExtrudeSolid[], output?: ExtrudeSolid[], checkIntersect?: boolean): boolean; + ParseGrooves(knifeExtrudes: ExtrudeSolid[]): { + grooves: ExtrudeSolid[]; + relevanceSideModelMap: Map; + }; RelevanceSubtract(knif: ExtrudeSolid, check?: boolean): void; /** * 当实体被分裂后,加入新图纸时,需要修复关联拉槽 @@ -135,6 +143,12 @@ export declare class ExtrudeSolid extends Entity { * 通常槽已经校验过准确性,所以不在校验 */ AppendGrooves(grooves: ExtrudeSolid[], output?: ExtrudeSolid[]): void; + /** + * 添加侧面槽 + * 通常槽已经校验过准确性,所以不在校验 + */ + AppendRelevanceSideModel(relevanceSideModelMap: Map): void; + AppendSideModel(relevanceSideModelMap: Map): void; GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform?: Matrix3, frustum?: Frustum): Vector3[]; protected GetStrectchPointCountList(dragType: DragPointType): number[]; GetGripOrStretchPoints(dragType: DragPointType): Vector3[]; @@ -165,6 +179,10 @@ export declare class ExtrudeSolid extends Entity { * @returns this[] 凹槽在本实体中正确的约束状态.(可能分裂成为多个) */ private GrooveCheckContour; + /** (步骤4.2.1) 针对圆弧板-修正路径 */ + AdjustPath(ext: ExtrudeSolid, outline: Polyline | Circle): void; + /** (步骤4.2.2) 针对圆弧板-修正位置 */ + AdjustPosition(ext: ExtrudeSolid, basePoint: Vector3): void; /** * (步骤4.2) * 计算本实体被全身的凹槽差集后正确的实体轮廓,和有可能的分裂实体 @@ -196,17 +214,18 @@ export declare class ExtrudeSolid extends Entity { /** * 计算关联拉槽,更新绘制对象(MeshGeometry和EdgeGeometry) */ - private CalcRelevanceGroove; + protected CalcRelevanceGroove(): void; /** * 如果实体被切割,那么将返回分裂的实体数组,否则返回自身 */ get SplitExtrudes(): this[]; protected GetRelevanceKnifes(knifs: ExtrudeSolid[]): void; ClearRelevance(en?: ExtrudeSolid): void; - private _MeshGeometry; + protected _MeshGeometry: BufferGeometry; get MeshGeometry(): BufferGeometry; UpdateMeshGeom(geo: BufferGeometry | Geometry): BufferGeometry; protected get Has2DPath(): boolean; + protected get HasSideModel(): boolean; protected _EdgeGeometry: EdgesGeometry | BufferGeometry; get EdgeGeometry(): BufferGeometry; UpdateUV(geo: Geometry, ocs: Matrix4, isRev?: boolean): void; @@ -216,7 +235,9 @@ export declare class ExtrudeSolid extends Entity { ClearDraw(): this; UpdateDrawObject(renderType: RenderType, obj: Object3D): Object3D; UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D): void; + private GetConceptualMaterial; private GetModelGroove; + private GetSideModelGroove; UpdateJigMaterial(color?: number): void; /** * 简化的文件读取和写入,只写入必要的数据,没有id,没有其他版本号 diff --git a/types/DatabaseServices/Entity/Extrude.d.ts.map b/types/DatabaseServices/Entity/Extrude.d.ts.map index a0511b8..eecd42b 100644 --- a/types/DatabaseServices/Entity/Extrude.d.ts.map +++ b/types/DatabaseServices/Entity/Extrude.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Extrude.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Extrude.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Extrude.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Extrude.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/GenLocalUv.d.ts b/types/DatabaseServices/Entity/GenLocalUv.d.ts new file mode 100644 index 0000000..2816cfd --- /dev/null +++ b/types/DatabaseServices/Entity/GenLocalUv.d.ts @@ -0,0 +1,10 @@ +import { BufferGeometry } from "three"; +export declare class GenLocalUv { + private InvMtxMap; + private _Z; + private _X; + private _Y; + private GetMtxInv; + CalculateUv(geo: BufferGeometry, IsReverse: boolean, scale?: number): void; +} +//# sourceMappingURL=GenLocalUv.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Entity/GenLocalUv.d.ts.map b/types/DatabaseServices/Entity/GenLocalUv.d.ts.map new file mode 100644 index 0000000..7abb508 --- /dev/null +++ b/types/DatabaseServices/Entity/GenLocalUv.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"GenLocalUv.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/GenLocalUv.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,cAAc,EAA4C,MAAM,OAAO,CAAC;AAKlG,qBAAa,UAAU;IAEnB,OAAO,CAAC,SAAS,CAA+B;IAEhD,OAAO,CAAC,EAAE,CAAe;IACzB,OAAO,CAAC,EAAE,CAAe;IACzB,OAAO,CAAC,EAAE,CAAe;IAEzB,OAAO,CAAC,SAAS;IAsBjB,WAAW,CAAC,GAAG,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,SAAO;CAwBpE"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/GenUVForWorld.d.ts b/types/DatabaseServices/Entity/GenUVForWorld.d.ts index 3f157bd..1e1a5a7 100644 --- a/types/DatabaseServices/Entity/GenUVForWorld.d.ts +++ b/types/DatabaseServices/Entity/GenUVForWorld.d.ts @@ -9,6 +9,6 @@ export declare class GenUVForWorld { private _Box2; GetMtxInv(normalX: number, normalY: number, normalZ: number): Matrix4; GenUV(mesh: Mesh): void; - GenGeoUV(geo: BufferGeometry, mtl: Material, scale?: number): void; + GenGeoUV(bGeo: BufferGeometry, mtl: Material, scale?: number): void; } //# sourceMappingURL=GenUVForWorld.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Entity/GenUVForWorld.d.ts.map b/types/DatabaseServices/Entity/GenUVForWorld.d.ts.map index f1f0a15..bc60e45 100644 --- a/types/DatabaseServices/Entity/GenUVForWorld.d.ts.map +++ b/types/DatabaseServices/Entity/GenUVForWorld.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"GenUVForWorld.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/GenUVForWorld.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAMhG,wBAAgB,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAsBtD;AAED,qBAAa,aAAa;IAEtB,SAAS,wBAA+B;IAExC,OAAO,CAAC,EAAE,CAAe;IACzB,OAAO,CAAC,EAAE,CAAe;IACzB,OAAO,CAAC,EAAE,CAAe;IACzB,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,KAAK,CAAY;IACzB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAiB3D,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAC;IAqD5C,QAAQ,CAAC,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,SAAO;CA+B5D"} \ No newline at end of file +{"version":3,"file":"GenUVForWorld.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/GenUVForWorld.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAMhG,wBAAgB,UAAU,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAsBtD;AAED,qBAAa,aAAa;IAEtB,SAAS,wBAA+B;IAExC,OAAO,CAAC,EAAE,CAAe;IACzB,OAAO,CAAC,EAAE,CAAe;IACzB,OAAO,CAAC,EAAE,CAAe;IACzB,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,KAAK,CAAY;IACzB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAiB3D,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAC;IAqD5C,QAAQ,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,SAAO;CA+B7D"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Image.d.ts b/types/DatabaseServices/Entity/Image.d.ts new file mode 100644 index 0000000..6ef82bb --- /dev/null +++ b/types/DatabaseServices/Entity/Image.d.ts @@ -0,0 +1,54 @@ +import { BufferGeometry, Matrix3, Matrix4, Object3D, Vector3 } from "three"; +import { UpdateDraw } from "../../Common/Status"; +import { ObjectSnapMode } from "../../Editor/ObjectSnapMode"; +import { RenderType } from "../../GraphicsSystem/RenderType"; +import { CADFiler } from "../CADFiler"; +import { CADObject } from "../CADObject"; +import { Entity } from "./Entity"; +import { Polyline } from "./Polyline"; +export declare class Image extends Entity { + protected OnlyRenderType: boolean; + private _ImageUrl; + private _ImageSizeX; + private _ImageSizeY; + private _ImageScaleX; + private _ImageScaleY; + private _ImageClipPoly; + private _FaceSize; + private texture; + constructor(imageSizeX?: number, imageSizeY?: number); + get ImageUrl(): string; + set ImageUrl(url: string); + get ImageSizeX(): number; + get ImageSizeY(): number; + get ImageScaleX(): number; + set ImageScaleX(v: number); + get ImageScaleY(): number; + set ImageScaleY(v: number); + get ImageClipPoly(): Polyline; + /** + * 请注意 v不需要OCS 请调用MatrixIdentity清除 + */ + set ImageClipPoly(v: Polyline); + ApplyScaleMatrix(m: Matrix4): this; + Update(mode?: UpdateDraw): Promise; + UpdateTexture(url?: string): Promise; + GetPolyline(): Polyline; + GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform?: Matrix3): Vector3[]; + GetGripPoints(): Array; + MoveGripPoints(indexList: number[], vec: Vector3): void; + GetStretchPoints(): Vector3[]; + MoveStretchPoints(indexList: Array, vec: Vector3): void; + private _MeshGeometry; + get MeshGeometry(): BufferGeometry; + private _EdgeGeometry; + private get EdgeGeometry(); + private UpdateGeometry; + UpdateDrawGeometry(): void; + InitDrawObject(renderType?: RenderType): Object3D; + UpdateDrawObject(renderType: RenderType, obj: Object3D): Object3D; + protected _ReadFile(file: CADFiler): void; + WriteFile(file: CADFiler): void; + ApplyPartialUndo(undoData: CADObject): void; +} +//# sourceMappingURL=Image.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Image.d.ts.map b/types/DatabaseServices/Entity/Image.d.ts.map new file mode 100644 index 0000000..a6ed477 --- /dev/null +++ b/types/DatabaseServices/Entity/Image.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Image.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAa,OAAO,EAAE,OAAO,EAA2B,QAAQ,EAA8D,OAAO,EAAE,MAAM,OAAO,CAAC;AAE5K,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBACa,KAAM,SAAQ,MAAM;IAE7B,SAAS,CAAC,cAAc,UAAQ;IAEhC,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,WAAW,CAAa;IAEhC,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,YAAY,CAAa;IAEjC,OAAO,CAAC,cAAc,CAAW;IAEjC,OAAO,CAAC,SAAS,CAAmB;IAEpC,OAAO,CAAC,OAAO,CAA0B;gBAE7B,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAOpD,IAAI,QAAQ,IAAI,MAAM,CAA2B;IAEjD,IAAI,QAAQ,CAAC,GAAG,EAAE,MAAM,EAQvB;IAED,IAAI,UAAU,IAAI,MAAM,CAA6B;IAErD,IAAI,UAAU,IAAI,MAAM,CAA6B;IAGrD,IAAI,WAAW,IAAI,MAAM,CAA8B;IAEvD,IAAI,WAAW,CAAC,CAAC,EAAE,MAAM,EAQxB;IAED,IAAI,WAAW,IAAI,MAAM,CAA8B;IAEvD,IAAI,WAAW,CAAC,CAAC,EAAE,MAAM,EAQxB;IAED,IAAI,aAAa,IAAI,QAAQ,CAAgC;IAE7D;;OAEG;IACH,IAAI,aAAa,CAAC,CAAC,EAAE,QAAQ,EAgB5B;IAED,gBAAgB,CAAC,CAAC,EAAE,OAAO;IA2BrB,MAAM,CAAC,IAAI,CAAC,EAAE,UAAU;IAMxB,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM;IAShC,WAAW;IAMX,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAKZ,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAK/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IA4DhD,gBAAgB;IAKhB,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IA6BxD,OAAO,CAAC,aAAa,CAAiB;IACtC,IAAI,YAAY,IAAI,cAAc,CAMjC;IAED,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,KAAK,YAAY,GAMvB;IAED,OAAO,CAAC,cAAc;IA8BtB,kBAAkB;IAclB,cAAc,CAAC,UAAU,GAAE,UAAiC;IAS5D,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;cAYnC,SAAS,CAAC,IAAI,EAAE,QAAQ;IA8BlC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAyBxB,gBAAgB,CAAC,QAAQ,EAAE,SAAS;CAKhD"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Line.d.ts b/types/DatabaseServices/Entity/Line.d.ts index f6b41f3..3302955 100644 --- a/types/DatabaseServices/Entity/Line.d.ts +++ b/types/DatabaseServices/Entity/Line.d.ts @@ -66,6 +66,8 @@ export declare class Line extends Curve { WriteFile(file: CADFiler): void; set StartPoint(p: Vector3); get StartPoint(): Vector3; + get StartPointInOcs(): Vector3; + get EndPointInOcs(): Vector3; get EndPoint(): Vector3; set EndPoint(p: Vector3); SetStartEndPoint(s: Vector3, e: Vector3): void; diff --git a/types/DatabaseServices/Entity/Line.d.ts.map b/types/DatabaseServices/Entity/Line.d.ts.map index 484e7cc..f92bafe 100644 --- a/types/DatabaseServices/Entity/Line.d.ts.map +++ b/types/DatabaseServices/Entity/Line.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Line.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Line.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Line.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Line.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAyB,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAiB,OAAO,EAAE,MAAM,OAAO,CAAC;AAK/G,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAK7C,OAAO,EAA8F,eAAe,EAA6B,eAAe,EAA0B,MAAM,oCAAoC,CAAC;AACrO,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIvC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAIhC,qBACa,IAAK,SAAQ,KAAK;IAGf,OAAO,CAAC,WAAW;IAC3B,OAAO,CAAC,SAAS;gBADD,WAAW,UAAc,EACjC,SAAS,UAAc;IAKnC,IAAI,IAAI,YAGP;IAED,IAAI,KAAK,UAGR;IAED,EAAE;IAYF,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAO5C,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAc7C,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAcvE;;;;OAIG;IACH,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAmBhD,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,GACnB,OAAO,EAAE;IAwCZ,aAAa,IAAI,OAAO,EAAE;IAI1B,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAiBrD,gBAAgB,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;IAIxC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAYxD,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO;IAK/C;;;;;;OAMG;IACH,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,SAAO,GAAG,eAAe,EAAE;IA2B3F,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAI9B,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,SAAO,GAAG,MAAM;IAO1D,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAIjC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI7C,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIrC,cAAc,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM;IAInC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM;IAqBvC,gBAAgB,CAAC,EAAE,EAAE,OAAO,GAAG,MAAM;IAOrC,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,SAAO,GAAG,OAAO;IAM5C,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;KAAE;IA+CvF,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;IAKxD,MAAM,CAAC,QAAQ,EAAE,MAAM;IAavB,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,UAAQ,EAAE,SAAS,SAAO,GAAG,MAAM;IAoC3D,OAAO,IAAI,IAAI;IAOf,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC;IAWhD,IAAI,WAAW,IAAI,IAAI,CAGtB;IAED;;OAEG;IACH,IAAI,gBAAgB,IAAI,OAAO,CAG9B;IAED,IAAI,UAAU,WAGb;IACD,IAAI,QAAQ,WAGX;IAED,IAAI,MAAM,IAAI,MAAM,CAAwD;cAMzD,SAAS,CAAC,IAAI,EAAE,QAAQ;IAWlC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAYjC,IAAI,UAAU,CAAC,CAAC,EAAE,OAAO,EAKxB;IACD,IAAI,UAAU,IAAI,OAAO,CAGxB;IAED,IAAI,eAAe,IAAI,OAAO,CAAqC;IACnE,IAAI,aAAa,IAAI,OAAO,CAAmC;IAE/D,IAAI,QAAQ,IAAI,OAAO,CAGtB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAKtB;IAED,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO;CAU1C"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Polyline.d.ts b/types/DatabaseServices/Entity/Polyline.d.ts index b5b0742..c78f474 100644 --- a/types/DatabaseServices/Entity/Polyline.d.ts +++ b/types/DatabaseServices/Entity/Polyline.d.ts @@ -17,6 +17,7 @@ export interface PolylineProps { export declare const BUL_IS_LINE_FUZZ = 0.00001; export declare class Polyline extends Curve { private _LineData; + private _DisplayAccuracy; private _ClosedMark; constructor(_LineData?: PolylineProps[]); UpdateOCSTo(m: Matrix4): void; @@ -25,6 +26,8 @@ export declare class Polyline extends Curve { */ Flip(): this; Reverse(): this; + get DisplayAccuracy(): number; + set DisplayAccuracy(v: number); set LineData(data: PolylineProps[]); get LineData(): PolylineProps[]; get NumberOfVertices(): number; @@ -102,9 +105,15 @@ export declare class Polyline extends Curve { * @returns {number} * @memberof Polyline */ - GetParamAtPoint(pt: Vector3): number; + GetParamAtPoint(pt: Vector3, fuzz?: number): number; GetParamAtDist(dist: number): number; GetDistAtPoint(pt: Vector3): number; + /** + * 这个方法允许点在曲线的延伸线上 + * @param pt 需要保证传入的点路径上 + * @returns + */ + GetDistAtPoint2(pt: Vector3): number; /** * 返回曲线的一阶导数. * 当曲线闭合(标志)且点不在曲线上. @@ -122,6 +131,10 @@ export declare class Polyline extends Curve { pts: Vector2[]; buls: number[]; }; + /** + * 将多段线的OCS清除(请保证这个实体是在WCSZ0坐标系下,否则结果不正确!) + */ + MatrixIdentity(): void; Join(cu: Curve, allowGap?: boolean, tolerance?: number): Status.False | Status.True; /** * 将曲线数组组合成多段线 diff --git a/types/DatabaseServices/Entity/Polyline.d.ts.map b/types/DatabaseServices/Entity/Polyline.d.ts.map index f1f940a..9183ce7 100644 --- a/types/DatabaseServices/Entity/Polyline.d.ts.map +++ b/types/DatabaseServices/Entity/Polyline.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Polyline.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Polyline.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Polyline.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Polyline.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/Entity/Region.d.ts.map b/types/DatabaseServices/Entity/Region.d.ts.map index 1392975..a644c98 100644 --- a/types/DatabaseServices/Entity/Region.d.ts.map +++ b/types/DatabaseServices/Entity/Region.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Region.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Region.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,cAAc,EAAgB,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAQ,QAAQ,EAA0B,OAAO,EAAE,MAAM,OAAO,CAAC;AAIxI,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAI7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,qBACa,MAAO,SAAQ,MAAM;IAelB,OAAO,CAAC,aAAa;IAbjC,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,MAAM,GAAG,SAAS;gBAanD,aAAa,GAAE,YAAiC;IAMpE,IAAI,YAAY,iBAGf;IACD,IAAI,IAAI,WAGP;IACD,IAAI,WAAW,SAMd;IACD,OAAO;IAoBP;;;;;OAKG;IACH,gBAAgB,CAAC,CAAC,EAAE,OAAO;IAK3B,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAyBZ,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAO/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO;IAMpD,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAQ7B,IAAI,QAAQ,IAIK,OAAO,CADvB;IACD,IAAI,QAAQ,CAAC,EAAE,EAAE,OAAO,EAgBvB;IAED,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAW5C,EAAE;IAQF,iBAAiB;IAQjB,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO;IAItC;;;;OAIG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO;IAkBtE,OAAO,CAAC,aAAa,CAAiB;IACtC,IAAI,YAAY,IAAI,cAAc,CAMjC;IAED,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,KAAK,YAAY,GAMvB;IAED,OAAO,CAAC,cAAc;IA4CtB,kBAAkB;IAUlB,SAAS,IAAI,IAAI;IAMjB,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAoCvE,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAyCtD;;MAEE;IACF,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IA8B7E,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAOlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAM3B"} \ No newline at end of file +{"version":3,"file":"Region.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Entity/Region.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,cAAc,EAAgB,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAQ,QAAQ,EAA0B,OAAO,EAAE,MAAM,OAAO,CAAC;AAIxI,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAI7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,qBACa,MAAO,SAAQ,MAAM;IAelB,OAAO,CAAC,aAAa;IAbjC,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,MAAM,GAAG,SAAS;gBAanD,aAAa,GAAE,YAAiC;IAMpE,IAAI,YAAY,iBAGf;IACD,IAAI,IAAI,WAGP;IACD,IAAI,WAAW,SAMd;IACD,OAAO;IAoBP;;;;;OAKG;IACH,gBAAgB,CAAC,CAAC,EAAE,OAAO;IAK3B,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAyBZ,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAO/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO;IAMpD,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAQ7B,IAAI,QAAQ,IAIK,OAAO,CADvB;IACD,IAAI,QAAQ,CAAC,EAAE,EAAE,OAAO,EAgBvB;IAED,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAW5C,EAAE;IAQF,iBAAiB;IAQjB,SAAS,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO;IAItC;;;;OAIG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO;IAkBtE,OAAO,CAAC,aAAa,CAAiB;IACtC,IAAI,YAAY,IAAI,cAAc,CAMjC;IAED,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,KAAK,YAAY,GAMvB;IAED,OAAO,CAAC,cAAc;IA4CtB,kBAAkB;IAUlB,SAAS,IAAI,IAAI;IAMjB,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAoCvE,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAyCtD;;MAEE;IACF,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,QAAQ;IA8B7E,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAWlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAS3B"} \ No newline at end of file diff --git a/types/DatabaseServices/FileServer.d.ts.map b/types/DatabaseServices/FileServer.d.ts.map index d586ec0..f55752a 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;AAShD,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;IAoJtD,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;IA8BpB,gBAAgB,CAAC,GAAG,EAAE,MAAM;IA+BlC,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;AAShD,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAM5E,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;IA6BV,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;IAiKtD,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;IA8BpB,gBAAgB,CAAC,GAAG,EAAE,MAAM;IA+BlC,OAAO,CAAC,mBAAmB;IAM3B,KAAK;CAMR"} \ No newline at end of file diff --git a/types/DatabaseServices/FontStyle/FontStyleKeyCodeEnum.d.ts b/types/DatabaseServices/FontStyle/FontStyleKeyCodeEnum.d.ts new file mode 100644 index 0000000..0d8c99f --- /dev/null +++ b/types/DatabaseServices/FontStyle/FontStyleKeyCodeEnum.d.ts @@ -0,0 +1,6 @@ +export declare enum FontStyleKeyCode { + Height = 1, + WidthFactor = 2, + FontType = 3 +} +//# sourceMappingURL=FontStyleKeyCodeEnum.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/FontStyle/FontStyleKeyCodeEnum.d.ts.map b/types/DatabaseServices/FontStyle/FontStyleKeyCodeEnum.d.ts.map new file mode 100644 index 0000000..9ccf56c --- /dev/null +++ b/types/DatabaseServices/FontStyle/FontStyleKeyCodeEnum.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"FontStyleKeyCodeEnum.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/FontStyle/FontStyleKeyCodeEnum.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB;IAExB,MAAM,IAAI;IACV,WAAW,IAAI;IACf,QAAQ,IAAI;CACf"} \ No newline at end of file diff --git a/types/DatabaseServices/FontStyle/FontStyleTable.d.ts b/types/DatabaseServices/FontStyle/FontStyleTable.d.ts new file mode 100644 index 0000000..0dc16b7 --- /dev/null +++ b/types/DatabaseServices/FontStyle/FontStyleTable.d.ts @@ -0,0 +1,10 @@ +import { CADFiler } from "../CADFiler"; +import { ObjectId } from "../ObjectId"; +import { SymbolTable } from "../Tables/SymbolTable"; +export declare class FontStyleTable extends SymbolTable { + Current: ObjectId; + get FontStyleNames(): string[]; + ReadFile(file: CADFiler): void; + WriteFile(file: CADFiler): void; +} +//# sourceMappingURL=FontStyleTable.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/FontStyle/FontStyleTable.d.ts.map b/types/DatabaseServices/FontStyle/FontStyleTable.d.ts.map new file mode 100644 index 0000000..75ce726 --- /dev/null +++ b/types/DatabaseServices/FontStyle/FontStyleTable.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"FontStyleTable.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/FontStyle/FontStyleTable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,qBACa,cAAe,SAAQ,WAAW;IAE3C,OAAO,EAAE,QAAQ,CAAC;IAElB,IAAI,cAAc,IAAI,MAAM,EAAE,CAM7B;IAIQ,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAOvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAOpC"} \ No newline at end of file diff --git a/types/DatabaseServices/FontStyle/FontsStyleRecord.d.ts b/types/DatabaseServices/FontStyle/FontsStyleRecord.d.ts new file mode 100644 index 0000000..6036553 --- /dev/null +++ b/types/DatabaseServices/FontStyle/FontsStyleRecord.d.ts @@ -0,0 +1,17 @@ +import { FontType } from "../../Add-on/TextStyle/FontStyleInterface"; +import { CADFiler } from "../CADFiler"; +import { SymbolTableRecord } from "../SymbolTableRecord"; +/** + * 字体样式 + */ +export declare class FontStyleRecord extends SymbolTableRecord { + /** 字体高度 1 */ + Height: number; + /** 宽度因子 2 字符串间距 */ + WidthFactor: number; + /** 样式类型 3 */ + FontType: FontType; + ReadFile(file: CADFiler): void; + WriteFile(file: CADFiler): void; +} +//# sourceMappingURL=FontsStyleRecord.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/FontStyle/FontsStyleRecord.d.ts.map b/types/DatabaseServices/FontStyle/FontsStyleRecord.d.ts.map new file mode 100644 index 0000000..e5c600e --- /dev/null +++ b/types/DatabaseServices/FontStyle/FontsStyleRecord.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"FontsStyleRecord.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/FontStyle/FontsStyleRecord.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AAGrE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD;;GAEG;AACH,qBACa,eAAgB,SAAQ,iBAAiB;IAElD,aAAa;IACD,MAAM,EAAE,MAAM,CAAM;IAEhC,mBAAmB;IACP,WAAW,EAAE,MAAM,CAAK;IAEpC,aAAa;IACD,QAAQ,EAAE,QAAQ,CAAkB;IAIvC,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAWvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAUpC"} \ 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 2ccbf06..3d49011 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":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,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;IAC5F;;OAEG;IACS,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAM;IAClC,eAAe,EAAE,QAAQ,EAAE,CAAM;IACjC,iBAAiB,EAAE,QAAQ,EAAE,CAAM;IACnC,eAAe,EAAE,QAAQ,EAAE,CAAM;IAC7C;;;;;OAKG;IACH,YAAY,CAAC,WAAW,GAAE,OAAe,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO;IAmB/E,iBAAiB,CAAC,CAAC,EAAE,OAAO;IAc5B,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAmElC,SAAS,CAAC,IAAI,EAAE,QAAQ;CA2C3B"} \ No newline at end of file +{"version":3,"file":"HardwareCompositeEntity.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Hardware/HardwareCompositeEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,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;IAC5F;;OAEG;IACS,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAM;IAClC,eAAe,EAAE,QAAQ,EAAE,CAAM;IACjC,iBAAiB,EAAE,QAAQ,EAAE,CAAM;IACnC,eAAe,EAAE,QAAQ,EAAE,CAAM;IAC7C;;;;;OAKG;IACH,YAAY,CAAC,WAAW,GAAE,OAAe,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO;IAmB/E,iBAAiB,CAAC,CAAC,EAAE,OAAO;IAc5B,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAyElC,SAAS,CAAC,IAAI,EAAE,QAAQ;CA8C3B"} \ 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 f1e9bb1..cc77510 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":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,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,IAkHK,MAAM,CA/G7B;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,KAAK,EAAE,CAoG3B;IAED,IAAI,SAAS,WAGZ;IACD,IAAI,eAAe,CAAC,EAAE,EAAE,MAAM,EAU7B;IAED,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IA4BlC,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":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,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,IAkHK,MAAM,CA/G7B;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,KAAK,EAAE,CAoG3B;IAED,IAAI,SAAS,WAGZ;IACD,IAAI,eAAe,CAAC,EAAE,EAAE,MAAM,EAU7B;IAED,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAuClC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAgC3B"} \ No newline at end of file diff --git a/types/DatabaseServices/IMaterialDefaultParam.d.ts b/types/DatabaseServices/IMaterialDefaultParam.d.ts index 2350124..2c90c24 100644 --- a/types/DatabaseServices/IMaterialDefaultParam.d.ts +++ b/types/DatabaseServices/IMaterialDefaultParam.d.ts @@ -27,331 +27,19 @@ declare const DefaultParam: Readonly<{ }>; type MaterialParam = typeof DefaultParam; export declare const DefaultParamMap: Readonly<{ - 木纹: Readonly<{ - color: "#ffffff"; - baseColorluminance: 0; - baseColorLightColor: Color; - baseColorDarkColor: Color; - baseColorSaturability: 1; - transparent: false; - opacity: 1; - opacityContrast: 1; - opacityBorder: 1; - opacityMaximum: 1; - opacityMinimum: 0.3; - matalness: 0; - bumpScale: 0.1; - roughness: 0.2; - specular: 1; - selfLuminous: 0; - fresnelPO: 1; - fresnelST: 1; - fresnelLuminance: 1; - fresnelLightColor: Color; - fresnelDarkColor: Color; - UVType: 0; - sharpen: 1; - }>; - 乳胶漆: Readonly<{ - color: "#ffffff"; - baseColorluminance: 0; - baseColorLightColor: Color; - baseColorDarkColor: Color; - baseColorSaturability: 1; - transparent: false; - opacity: 1; - opacityContrast: 1; - opacityBorder: 1; - opacityMaximum: 1; - opacityMinimum: 0.3; - matalness: 0; - bumpScale: 0.1; - roughness: 0.2; - specular: 1; - selfLuminous: 0; - fresnelPO: 1; - fresnelST: 1; - fresnelLuminance: 1; - fresnelLightColor: Color; - fresnelDarkColor: Color; - UVType: 0; - sharpen: 1; - }>; - 烤漆: Readonly<{ - color: "#ffffff"; - baseColorluminance: 0; - baseColorLightColor: Color; - baseColorDarkColor: Color; - baseColorSaturability: 1; - transparent: false; - opacity: 1; - opacityContrast: 1; - opacityBorder: 1; - opacityMaximum: 1; - opacityMinimum: 0.3; - matalness: 0; - bumpScale: 0.1; - roughness: 0.2; - specular: 1; - selfLuminous: 0; - fresnelPO: 1; - fresnelST: 1; - fresnelLuminance: 1; - fresnelLightColor: Color; - fresnelDarkColor: Color; - UVType: 0; - sharpen: 1; - }>; - 金属: Readonly<{ - color: "#ffffff"; - baseColorluminance: 0; - baseColorLightColor: Color; - baseColorDarkColor: Color; - baseColorSaturability: 1; - transparent: false; - opacity: 1; - opacityContrast: 1; - opacityBorder: 1; - opacityMaximum: 1; - opacityMinimum: 0.3; - matalness: 0; - bumpScale: 0.1; - roughness: 0.2; - specular: 1; - selfLuminous: 0; - fresnelPO: 1; - fresnelST: 1; - fresnelLuminance: 1; - fresnelLightColor: Color; - fresnelDarkColor: Color; - UVType: 0; - sharpen: 1; - }>; - 亚光金属: Readonly<{ - color: "#ffffff"; - baseColorluminance: 0; - baseColorLightColor: Color; - baseColorDarkColor: Color; - baseColorSaturability: 1; - transparent: false; - opacity: 1; - opacityContrast: 1; - opacityBorder: 1; - opacityMaximum: 1; - opacityMinimum: 0.3; - matalness: 0; - bumpScale: 0.1; - roughness: 0.2; - specular: 1; - selfLuminous: 0; - fresnelPO: 1; - fresnelST: 1; - fresnelLuminance: 1; - fresnelLightColor: Color; - fresnelDarkColor: Color; - UVType: 0; - sharpen: 1; - }>; - 自发光: Readonly<{ - color: "#ffffff"; - baseColorluminance: 0; - baseColorLightColor: Color; - baseColorDarkColor: Color; - baseColorSaturability: 1; - transparent: false; - opacity: 1; - opacityContrast: 1; - opacityBorder: 1; - opacityMaximum: 1; - opacityMinimum: 0.3; - matalness: 0; - bumpScale: 0.1; - roughness: 0.2; - specular: 1; - selfLuminous: 0; - fresnelPO: 1; - fresnelST: 1; - fresnelLuminance: 1; - fresnelLightColor: Color; - fresnelDarkColor: Color; - UVType: 0; - sharpen: 1; - }>; - 大理石: Readonly<{ - color: "#ffffff"; - baseColorluminance: 0; - baseColorLightColor: Color; - baseColorDarkColor: Color; - baseColorSaturability: 1; - transparent: false; - opacity: 1; - opacityContrast: 1; - opacityBorder: 1; - opacityMaximum: 1; - opacityMinimum: 0.3; - matalness: 0; - bumpScale: 0.1; - roughness: 0.2; - specular: 1; - selfLuminous: 0; - fresnelPO: 1; - fresnelST: 1; - fresnelLuminance: 1; - fresnelLightColor: Color; - fresnelDarkColor: Color; - UVType: 0; - sharpen: 1; - }>; - 混凝土: Readonly<{ - color: "#ffffff"; - baseColorluminance: 0; - baseColorLightColor: Color; - baseColorDarkColor: Color; - baseColorSaturability: 1; - transparent: false; - opacity: 1; - opacityContrast: 1; - opacityBorder: 1; - opacityMaximum: 1; - opacityMinimum: 0.3; - matalness: 0; - bumpScale: 0.1; - roughness: 0.2; - specular: 1; - selfLuminous: 0; - fresnelPO: 1; - fresnelST: 1; - fresnelLuminance: 1; - fresnelLightColor: Color; - fresnelDarkColor: Color; - UVType: 0; - sharpen: 1; - }>; - 粗糙石材: Readonly<{ - color: "#ffffff"; - baseColorluminance: 0; - baseColorLightColor: Color; - baseColorDarkColor: Color; - baseColorSaturability: 1; - transparent: false; - opacity: 1; - opacityContrast: 1; - opacityBorder: 1; - opacityMaximum: 1; - opacityMinimum: 0.3; - matalness: 0; - bumpScale: 0.1; - roughness: 0.2; - specular: 1; - selfLuminous: 0; - fresnelPO: 1; - fresnelST: 1; - fresnelLuminance: 1; - fresnelLightColor: Color; - fresnelDarkColor: Color; - UVType: 0; - sharpen: 1; - }>; - 玻璃: Readonly<{ - color: "#ffffff"; - baseColorluminance: 0; - baseColorLightColor: Color; - baseColorDarkColor: Color; - baseColorSaturability: 1; - transparent: false; - opacity: 1; - opacityContrast: 1; - opacityBorder: 1; - opacityMaximum: 1; - opacityMinimum: 0.3; - matalness: 0; - bumpScale: 0.1; - roughness: 0.2; - specular: 1; - selfLuminous: 0; - fresnelPO: 1; - fresnelST: 1; - fresnelLuminance: 1; - fresnelLightColor: Color; - fresnelDarkColor: Color; - UVType: 0; - sharpen: 1; - }>; - 皮革: Readonly<{ - color: "#ffffff"; - baseColorluminance: 0; - baseColorLightColor: Color; - baseColorDarkColor: Color; - baseColorSaturability: 1; - transparent: false; - opacity: 1; - opacityContrast: 1; - opacityBorder: 1; - opacityMaximum: 1; - opacityMinimum: 0.3; - matalness: 0; - bumpScale: 0.1; - roughness: 0.2; - specular: 1; - selfLuminous: 0; - fresnelPO: 1; - fresnelST: 1; - fresnelLuminance: 1; - fresnelLightColor: Color; - fresnelDarkColor: Color; - UVType: 0; - sharpen: 1; - }>; - 布料: Readonly<{ - color: "#ffffff"; - baseColorluminance: 0; - baseColorLightColor: Color; - baseColorDarkColor: Color; - baseColorSaturability: 1; - transparent: false; - opacity: 1; - opacityContrast: 1; - opacityBorder: 1; - opacityMaximum: 1; - opacityMinimum: 0.3; - matalness: 0; - bumpScale: 0.1; - roughness: 0.2; - specular: 1; - selfLuminous: 0; - fresnelPO: 1; - fresnelST: 1; - fresnelLuminance: 1; - fresnelLightColor: Color; - fresnelDarkColor: Color; - UVType: 0; - sharpen: 1; - }>; - 竹藤编织: Readonly<{ - color: "#ffffff"; - baseColorluminance: 0; - baseColorLightColor: Color; - baseColorDarkColor: Color; - baseColorSaturability: 1; - transparent: false; - opacity: 1; - opacityContrast: 1; - opacityBorder: 1; - opacityMaximum: 1; - opacityMinimum: 0.3; - matalness: 0; - bumpScale: 0.1; - roughness: 0.2; - specular: 1; - selfLuminous: 0; - fresnelPO: 1; - fresnelST: 1; - fresnelLuminance: 1; - fresnelLightColor: Color; - fresnelDarkColor: Color; - UVType: 0; - sharpen: 1; - }>; + 木纹: MaterialParam; + 乳胶漆: MaterialParam; + 烤漆: MaterialParam; + 金属: MaterialParam; + 亚光金属: MaterialParam; + 自发光: MaterialParam; + 大理石: MaterialParam; + 混凝土: MaterialParam; + 粗糙石材: MaterialParam; + 玻璃: MaterialParam; + 皮革: MaterialParam; + 布料: MaterialParam; + 竹藤编织: MaterialParam; }>; export type MaterialType = keyof (typeof DefaultParamMap); export declare function SetMaterialParams(mtl: PhysicalMaterialRecord, param: MaterialParam): void; diff --git a/types/DatabaseServices/IMaterialDefaultParam.d.ts.map b/types/DatabaseServices/IMaterialDefaultParam.d.ts.map index 221c2bb..9cd98dd 100644 --- a/types/DatabaseServices/IMaterialDefaultParam.d.ts.map +++ b/types/DatabaseServices/IMaterialDefaultParam.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"IMaterialDefaultParam.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/IMaterialDefaultParam.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAyBlE,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;EAsChB,CAAC;AAEH,KAAK,aAAa,GAAG,OAAO,YAAY,CAAC;AAGzC,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+Q1B,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;AAE1D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,sBAAsB,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAazF"} \ No newline at end of file +{"version":3,"file":"IMaterialDefaultParam.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/IMaterialDefaultParam.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAyBlE,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;EAsChB,CAAC;AAEH,KAAK,aAAa,GAAG,OAAO,YAAY,CAAC;AAGzC,eAAO,MAAM,eAAe;QAmBjB,aAAa;SAoBb,aAAa;QAoBb,aAAa;QAoBb,aAAa;UAoBb,aAAa;SAkBb,aAAa;SAkBb,aAAa;SAkBb,aAAa;UAkBb,aAAa;QA0Bb,aAAa;QA0Bb,aAAa;QA0Bb,aAAa;UAkBb,aAAa;EAItB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;AAE1D,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,sBAAsB,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAazF"} \ No newline at end of file diff --git a/types/DatabaseServices/LayerTableRecord.d.ts b/types/DatabaseServices/LayerTableRecord.d.ts new file mode 100644 index 0000000..839246b --- /dev/null +++ b/types/DatabaseServices/LayerTableRecord.d.ts @@ -0,0 +1,13 @@ +import { CADFiler } from "./CADFiler"; +import { CADObject } from "./CADObject"; +import { SymbolTableRecord } from "./SymbolTableRecord"; +export declare class LayerTableRecord extends SymbolTableRecord { + ColorIndex: number; + IsOff: boolean; + IsLocked: boolean; + constructor(); + ReadFile(file: CADFiler): void; + WriteFile(file: CADFiler): void; + ApplyPartialUndo(undoData: CADObject): void; +} +//# sourceMappingURL=LayerTableRecord.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/LayerTableRecord.d.ts.map b/types/DatabaseServices/LayerTableRecord.d.ts.map new file mode 100644 index 0000000..d4c65f1 --- /dev/null +++ b/types/DatabaseServices/LayerTableRecord.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"LayerTableRecord.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/LayerTableRecord.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBACa,gBAAiB,SAAQ,iBAAiB;IAEvC,UAAU,EAAE,MAAM,CAAK;IAIvB,KAAK,UAAS;IAEd,QAAQ,UAAS;;IAepB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAWvB,SAAS,CAAC,IAAI,EAAE,QAAQ;IAWxB,gBAAgB,CAAC,QAAQ,EAAE,SAAS;CAKhD"} \ No newline at end of file diff --git a/types/DatabaseServices/Lights/DirectionalLight.d.ts.map b/types/DatabaseServices/Lights/DirectionalLight.d.ts.map index 2059283..322066f 100644 --- a/types/DatabaseServices/Lights/DirectionalLight.d.ts.map +++ b/types/DatabaseServices/Lights/DirectionalLight.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DirectionalLight.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Lights/DirectionalLight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoE,OAAO,EAAE,QAAQ,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AAG9H,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC;;GAEG;AACH,qBACa,gBAAiB,SAAQ,KAAK;IAEvC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAM;IAEtB,gBAAgB,SAAU;IAE1B,oBAAoB,SAAK;IAErC,cAAc,UAAQ;IACtB,OAAO,CAAC,OAAO,CAAiB;IAChC,SAAS,CAAC,WAAW,UAAS;IAC9B,SAAS,CAAC,UAAU,UAAQ;;IAS5B,KAAK,CAAC,OAAO,GAAE,OAAc;IAK7B;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAc1C,IAAI,MAAM,IACI,OAAO,CADwB;IAC7C,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,EAQpB;IAED,IAAI,WAAW,IACI,OAAO,CADkB;IAC5C,IAAI,WAAW,CAAC,CAAC,EAAE,OAAO,EAYzB;IAED,IAAI,QAAQ,IACI,OAAO,CADkB;IACzC,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAOtB;IAED,IAAI,YAAY,WAKf;IAED,WAAW,CAAC,CAAC,EAAE,OAAO;IAOtB,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAO/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAQhD,SAAS,CAAC,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAqBjF,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ;IAoB/C,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAYlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAU3B"} \ No newline at end of file +{"version":3,"file":"DirectionalLight.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Lights/DirectionalLight.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,OAAO,EAAE,QAAQ,EAAkD,OAAO,EAAE,MAAM,OAAO,CAAC;AAG9H,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC;;GAEG;AACH,qBACa,gBAAiB,SAAQ,KAAK;IAEvC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAM;IAEtB,gBAAgB,SAAO;IAEvB,oBAAoB,SAAK;IAErC,cAAc,UAAQ;IACtB,OAAO,CAAC,OAAO,CAAiB;IAChC,SAAS,CAAC,WAAW,UAAS;IAC9B,SAAS,CAAC,UAAU,UAAQ;;IAS5B,KAAK,CAAC,OAAO,GAAE,OAAc;IAK7B;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAc1C,IAAI,MAAM,IACI,OAAO,CADwB;IAC7C,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,EAQpB;IAED,IAAI,WAAW,IACI,OAAO,CADkB;IAC5C,IAAI,WAAW,CAAC,CAAC,EAAE,OAAO,EAYzB;IAED,IAAI,QAAQ,IACI,OAAO,CADkB;IACzC,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAOtB;IAED,IAAI,YAAY,WAKf;IAED,WAAW,CAAC,CAAC,EAAE,OAAO;IAOtB,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAO/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAQhD,SAAS,CAAC,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAqBjF,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ;IAoB/C,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAYlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAU3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Lights/Light.d.ts b/types/DatabaseServices/Lights/Light.d.ts index d7a714f..07231f0 100644 --- a/types/DatabaseServices/Lights/Light.d.ts +++ b/types/DatabaseServices/Lights/Light.d.ts @@ -27,6 +27,7 @@ export declare class Light extends Entity { set OpenLight(v: boolean); get Position(): Vector3; set Position(v: Vector3); + get IsVisible(): boolean; get Color(): Color; set Color(color: Color); get ShowHelper(): boolean; diff --git a/types/DatabaseServices/Lights/Light.d.ts.map b/types/DatabaseServices/Lights/Light.d.ts.map index b320d5d..1cf6bed 100644 --- a/types/DatabaseServices/Lights/Light.d.ts.map +++ b/types/DatabaseServices/Lights/Light.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Light.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Lights/Light.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAI7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C;;GAEG;AACH,qBACa,KAAM,SAAQ,MAAM;IAE7B,MAAM,CAAC,gBAAgB,UAAS;IAChC,MAAM,CAAC,iBAAiB,UAAS;IACjC,MAAM,CAAC,gBAAgB,UAAS;IAEhC,cAAc,UAAQ;IACtB,SAAS,CAAC,UAAU,EAAE,MAAM,CAAK;IACjC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAe;IAC/B,WAAW,SAAQ;IACnB,yBAAyB,SAAK;IAE9B,aAAa,SAAK;IAC9B,SAAS,CAAC,WAAW,UAAQ;IAC7B,SAAS,CAAC,WAAW,UAAQ;IAC7B,SAAS,CAAC,UAAU,UAA0B;IAC9C,KAAK;IAKL,IAAI,UAAU,IAEI,OAAO,CAFoB;IAE7C,IAAI,UAAU,CAAC,CAAC,EAAE,OAAO,EAMxB;IAED,IAAI,SAAS,IAEI,OAAO,CAFmB;IAE3C,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,EAKvB;IAGD,IAAI,QAAQ,IAKI,OAAO,CAFtB;IAED,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAItB;IAED,IAAI,KAAK,IAIQ,KAAK,CADrB;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,EAKrB;IACD,IAAI,UAAU,IAII,OAAO,CADxB;IACD,IAAI,UAAU,CAAC,CAAC,EAAE,OAAO,EAMxB;IAED,IAAI,gBAAgB,YAGnB;IAED,IAAI,WAAW,SAGd;IAED,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,GACnB,OAAO,EAAE;IASZ,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAK/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAKhD,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM;IAM7C,IAAI,SAAS,IAKI,MAAM,CAFtB;IAED,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM,EAMtB;IAED,IAAI,YAAY,WAGf;IACD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAuBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAoB3B"} \ No newline at end of file +{"version":3,"file":"Light.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Lights/Light.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,IAAI,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAI7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C;;GAEG;AACH,qBACa,KAAM,SAAQ,MAAM;IAE7B,MAAM,CAAC,gBAAgB,UAAS;IAChC,MAAM,CAAC,iBAAiB,UAAS;IACjC,MAAM,CAAC,gBAAgB,UAAS;IAEhC,cAAc,UAAQ;IACtB,SAAS,CAAC,UAAU,EAAE,MAAM,CAAK;IACjC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAe;IAC/B,WAAW,SAAQ;IACnB,yBAAyB,SAAK;IAE9B,aAAa,SAAK;IAC9B,SAAS,CAAC,WAAW,UAAQ;IAC7B,SAAS,CAAC,WAAW,UAAQ;IAC7B,SAAS,CAAC,UAAU,UAA0B;IAC9C,KAAK;IAKL,IAAI,UAAU,IAEI,OAAO,CAFoB;IAE7C,IAAI,UAAU,CAAC,CAAC,EAAE,OAAO,EAMxB;IAED,IAAI,SAAS,IAEI,OAAO,CAFmB;IAE3C,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,EAKvB;IAGD,IAAI,QAAQ,IAKI,OAAO,CAFtB;IAED,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAItB;IAED,IAAa,SAAS,YAMrB;IAED,IAAI,KAAK,IAIQ,KAAK,CADrB;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,KAAK,EAKrB;IACD,IAAI,UAAU,IAII,OAAO,CADxB;IACD,IAAI,UAAU,CAAC,CAAC,EAAE,OAAO,EAMxB;IAED,IAAI,gBAAgB,YAGnB;IAED,IAAI,WAAW,SAGd;IAED,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,GACnB,OAAO,EAAE;IASZ,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAK/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAKhD,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM;IAM7C,IAAI,SAAS,IAKI,MAAM,CAFtB;IAED,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM,EAMtB;IAED,IAAI,YAAY,WAGf;IACD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAuBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAoB3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Lights/RectAreaLightHelper.d.ts b/types/DatabaseServices/Lights/RectAreaLightHelper.d.ts index 10fc07b..4461715 100644 --- a/types/DatabaseServices/Lights/RectAreaLightHelper.d.ts +++ b/types/DatabaseServices/Lights/RectAreaLightHelper.d.ts @@ -12,6 +12,7 @@ export declare class RectAreaLightHelper extends Line { private _posAtt; private _indexAtt; constructor(light: TRectAreaLight, color: Color); + copy(source: this, recursive?: boolean): this; updateMatrixWorld(): void; updataRange(): void; dispose(): void; diff --git a/types/DatabaseServices/Lights/RectAreaLightHelper.d.ts.map b/types/DatabaseServices/Lights/RectAreaLightHelper.d.ts.map index 0ab70be..a7712e0 100644 --- a/types/DatabaseServices/Lights/RectAreaLightHelper.d.ts.map +++ b/types/DatabaseServices/Lights/RectAreaLightHelper.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RectAreaLightHelper.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Lights/RectAreaLightHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,EAA0B,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAqB,aAAa,IAAI,cAAc,EAAE,MAAM,OAAO,CAAC;AAEnK;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,IAAI;IAEzC,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC;IACL,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,SAAS,CAAyB;gBAE9B,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK;IAsD/C,iBAAiB;IA6BjB,WAAW;IAsCX,OAAO;CAQV"} \ No newline at end of file +{"version":3,"file":"RectAreaLightHelper.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Lights/RectAreaLightHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,EAA0B,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAqB,aAAa,IAAI,cAAc,EAAE,MAAM,OAAO,CAAC;AAEnK;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,IAAI;IAEzC,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC;IACL,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,SAAS,CAAyB;gBAE9B,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK;IAsD/C,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,EAAE,OAAO,GAAG,IAAI;IAO7C,iBAAiB;IA6BjB,WAAW;IAsCX,OAAO;CAQV"} \ No newline at end of file diff --git a/types/DatabaseServices/Lights/SpotLight.d.ts.map b/types/DatabaseServices/Lights/SpotLight.d.ts.map index f09f7e1..954ecb5 100644 --- a/types/DatabaseServices/Lights/SpotLight.d.ts.map +++ b/types/DatabaseServices/Lights/SpotLight.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SpotLight.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Lights/SpotLight.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2D,QAAQ,EAA2B,OAAO,EAAE,MAAM,OAAO,CAAC;AAG5H,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAI7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,qBACa,SAAU,SAAQ,KAAK;IAEhC;;;OAGG;IACH,OAAO,CAAC,SAAS,CAAgB;IACjC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAO;IAKnC,OAAO,CAAC,MAAM,CAAe;IAE7B,OAAO,CAAC,MAAM,CAAuB;IAGrC,OAAO,CAAC,SAAS,CAAa;IAGlB,cAAc,EAAE,MAAM,CAAK;IAC3B,cAAc,EAAE,MAAM,CAAM;IAG5B,YAAY,SAAK;IACjB,gBAAgB,SAAK;IACrB,YAAY,SAAK;IAIjB,iBAAiB,SAAO;IAEpC,IAAI,MAAM,IAII,OAAO,CADpB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,EAQpB;IAED,IAAI,KAAK,IAIM,MAAM,CADpB;IACD,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,EAKpB;IACD,IAAI,KAAK,IAAI,MAAM,CAGlB;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAKtB;IACD,IAAI,QAAQ,IAIO,MAAM,CADxB;IACD,IAAI,QAAQ,CAAC,IAAI,EAAE,MAAM,EAKxB;IACD,IAAI,QAAQ,IAII,MAAM,CADrB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,MAAM,EAKrB;IAED,IAAI,QAAQ,YAGX;IAED,IAAI,YAAY,WAKf;IAED,aAAa,IAAI,OAAO,EAAE;IA0B1B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAkChD,gBAAgB,IAAI,OAAO,EAAE;IAK7B,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAgBxD,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,GACnB,OAAO,EAAE;IAYZ,SAAS,CAAC,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAiCjF,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ;IA8B/C,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAwBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAkB3B"} \ No newline at end of file +{"version":3,"file":"SpotLight.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Lights/SpotLight.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2D,QAAQ,EAA2B,OAAO,EAAE,MAAM,OAAO,CAAC;AAG5H,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAI7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,qBACa,SAAU,SAAQ,KAAK;IAEhC;;;OAGG;IACH,OAAO,CAAC,SAAS,CAAgB;IACjC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAO;IAKnC,OAAO,CAAC,MAAM,CAAe;IAE7B,OAAO,CAAC,MAAM,CAAuB;IAGrC,OAAO,CAAC,SAAS,CAAa;IAGlB,cAAc,EAAE,MAAM,CAAM;IAC5B,cAAc,EAAE,MAAM,CAAM;IAG5B,YAAY,SAAM;IAClB,gBAAgB,SAAK;IACrB,YAAY,SAAK;IAIjB,iBAAiB,SAAO;IAEpC,IAAI,MAAM,IAII,OAAO,CADpB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,EAQpB;IAED,IAAI,KAAK,IAIM,MAAM,CADpB;IACD,IAAI,KAAK,CAAC,GAAG,EAAE,MAAM,EAKpB;IACD,IAAI,KAAK,IAAI,MAAM,CAGlB;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAKtB;IACD,IAAI,QAAQ,IAIO,MAAM,CADxB;IACD,IAAI,QAAQ,CAAC,IAAI,EAAE,MAAM,EAKxB;IACD,IAAI,QAAQ,IAII,MAAM,CADrB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,MAAM,EAKrB;IAED,IAAI,QAAQ,YAGX;IAED,IAAI,YAAY,WAKf;IAED,aAAa,IAAI,OAAO,EAAE;IA0B1B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAkChD,gBAAgB,IAAI,OAAO,EAAE;IAK7B,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAgBxD,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,GACnB,OAAO,EAAE;IAYZ,SAAS,CAAC,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAiCjF,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ;IA8B/C,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAwBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAkB3B"} \ No newline at end of file diff --git a/types/DatabaseServices/ObjectCollection.d.ts b/types/DatabaseServices/ObjectCollection.d.ts index cc8185d..16a5015 100644 --- a/types/DatabaseServices/ObjectCollection.d.ts +++ b/types/DatabaseServices/ObjectCollection.d.ts @@ -1,13 +1,15 @@ import { CADFiler } from './CADFiler'; import { CADObject } from './CADObject'; +import { ObjectId } from './ObjectId'; export declare class ObjectCollection extends CADObject { Objects: T[]; + SpecialOwner: ObjectId; Destroy(): void; /** * @param object * @param isCheckObjectCleanly 检查对象是否清白,如果对象不清白,那么将会被拒绝加入到集合. */ - Append(object: T, isCheckObjectCleanly?: boolean): import("./ObjectId").ObjectId; + Append(object: T, isCheckObjectCleanly?: boolean): ObjectId; AppendEvent(obj: T): void; Remove(obj: T): void; RemoveIndex(index: number): T; diff --git a/types/DatabaseServices/ObjectCollection.d.ts.map b/types/DatabaseServices/ObjectCollection.d.ts.map index a785401..0ab3cf6 100644 --- a/types/DatabaseServices/ObjectCollection.d.ts.map +++ b/types/DatabaseServices/ObjectCollection.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ObjectCollection.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/ObjectCollection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKxC,qBACa,gBAAgB,CAAC,CAAC,SAAS,SAAS,CAAE,SAAQ,SAAS;IAEhE,OAAO,EAAE,CAAC,EAAE,CAAM;IAElB,OAAO;IAMP;;;OAGG;IACH,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,oBAAoB,UAAO;IA2B7C,WAAW,CAAC,GAAG,EAAE,CAAC;IAIlB,MAAM,CAAC,GAAG,EAAE,CAAC;IAMb,WAAW,CAAC,KAAK,EAAE,MAAM;IA0BzB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAmBvB,SAAS,CAAC,IAAI,EAAE,QAAQ;IAQxB,gBAAgB,CAAC,QAAQ,EAAE,SAAS;CAgBvC"} \ No newline at end of file +{"version":3,"file":"ObjectCollection.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/ObjectCollection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,qBACa,gBAAgB,CAAC,CAAC,SAAS,SAAS,CAAE,SAAQ,SAAS;IAEhE,OAAO,EAAE,CAAC,EAAE,CAAM;IAElB,YAAY,EAAE,QAAQ,CAAC;IAEvB,OAAO;IAMP;;;OAGG;IACH,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,oBAAoB,UAAO;IA2B7C,WAAW,CAAC,GAAG,EAAE,CAAC;IAIlB,MAAM,CAAC,GAAG,EAAE,CAAC;IAMb,WAAW,CAAC,KAAK,EAAE,MAAM;IA0BzB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAmBvB,SAAS,CAAC,IAAI,EAAE,QAAQ;IAQxB,gBAAgB,CAAC,QAAQ,EAAE,SAAS;CAgBvC"} \ No newline at end of file diff --git a/types/DatabaseServices/PhysicalMaterialRecord.d.ts b/types/DatabaseServices/PhysicalMaterialRecord.d.ts index 3736b71..20a0bc0 100644 --- a/types/DatabaseServices/PhysicalMaterialRecord.d.ts +++ b/types/DatabaseServices/PhysicalMaterialRecord.d.ts @@ -1,4 +1,5 @@ import { Color, MeshPhysicalMaterial, Side } from "three"; +import { EMetalsType } from "../UI/Components/RightPanel/RightPanelInterface"; import { CADFiler } from "./CADFiler"; import { MaterialType } from "./IMaterialDefaultParam"; import { MaterialTableRecord } from "./MaterialTableRecord"; @@ -8,6 +9,30 @@ export interface IGoodProps { material: string; color: string; } +export interface IHardwareItem { + value: string | Array<[string, string]> | EMetalsType; + checked: boolean; +} +export interface IHardwareProps { + name: IHardwareItem; + roomName: IHardwareItem; + cabinetName: IHardwareItem; + factory: IHardwareItem; + comments: IHardwareItem; + actualExpr: IHardwareItem; + brand: IHardwareItem; + model: IHardwareItem; + spec: IHardwareItem; + count: IHardwareItem; + unit: IHardwareItem; + DataList: IHardwareItem; + type: IHardwareItem; + goods: { + goodsSn: string; + goodsId: string; + checked: boolean; + }; +} export declare enum UVType { LocalUV = 0, WorldUV = 1 @@ -56,12 +81,19 @@ export declare class PhysicalMaterialRecord extends MaterialTableRecord { VWorldMove: number; depthTest: boolean; private _goodsInfo; + private _hardwareAttributeInfo; + private _isMaterialLock; private material; constructor(); Update(): Promise; + PhysicalMaterialUpdate(): Promise; get Material(): MeshPhysicalMaterial; get GoodsInfo(): IGoodProps; set GoodsInfo(info: IGoodProps); + get HardwareAttributeInfo(): IHardwareProps; + set HardwareAttributeInfo(info: IHardwareProps); + get IsMaterialLock(): boolean; + set IsMaterialLock(v: boolean); ReadFile(file: CADFiler): void; WriteFile(file: CADFiler): void; } diff --git a/types/DatabaseServices/PhysicalMaterialRecord.d.ts.map b/types/DatabaseServices/PhysicalMaterialRecord.d.ts.map index a91abcc..eb5068b 100644 --- a/types/DatabaseServices/PhysicalMaterialRecord.d.ts.map +++ b/types/DatabaseServices/PhysicalMaterialRecord.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"PhysicalMaterialRecord.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/PhysicalMaterialRecord.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAa,oBAAoB,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAKrE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,MAAM,WAAW,UAAU;IAEvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,oBAAY,MAAM;IAEd,OAAO,IAAI;IACX,OAAO,IAAI;CACd;AAKD,qBACa,sBAAuB,SAAQ,mBAAmB;IAE/C,IAAI,EAAE,YAAY,CAAQ;IAC1B,GAAG,EAAE,MAAM,CAAM;IAGjB,KAAK,EAAE,MAAM,CAAa;IAE1B,kBAAkB,SAAK;IACvB,mBAAmB,QAA4B;IAC/C,kBAAkB,QAAsB;IACxC,qBAAqB,SAAK;IAI1B,WAAW,EAAE,OAAO,CAAS;IAC7B,OAAO,EAAE,MAAM,CAAK;IAEpB,eAAe,SAAK;IACpB,aAAa,SAAK;IAClB,cAAc,SAAK;IACnB,cAAc,SAAO;IAIrB,UAAU,SAAK;IAEf,SAAS,EAAE,MAAM,CAAK;IACtB,SAAS,EAAE,MAAM,CAAK;IACtB,SAAS,EAAE,MAAM,CAAO;IACxB,QAAQ,EAAE,MAAM,CAAK;IACrB,YAAY,EAAE,MAAM,CAAK;IAEzB,MAAM,EAAE,OAAO,CAAQ;IACvB,GAAG,EAAE,QAAQ,CAAC;IAEd,UAAU,EAAE,OAAO,CAAQ;IAC3B,OAAO,EAAE,QAAQ,CAAC;IAClB,eAAe,EAAE,OAAO,CAAQ;IAChC,YAAY,EAAE,QAAQ,CAAC;IAGvB,MAAM,EAAE,OAAO,CAAS;IACxB,IAAI,EAAE,IAAI,CAAa;IAEvB,MAAM,SAAkB;IAIxB,SAAS,SAAK;IACd,SAAS,SAAK;IACd,gBAAgB,SAAK;IACrB,iBAAiB,QAAsB;IACvC,gBAAgB,QAAsB;IAGtC,OAAO,SAAK;IAExB,IAAI,UAAU,IACI,OAAO,CADkC;IAC3D,IAAI,UAAU,CAAC,CAAC,EAAE,OAAO,EAAwD;IAErE,SAAS,SAAK;IACd,SAAS,SAAK;IACd,QAAQ,SAAK;IACb,UAAU,SAAK;IACf,UAAU,SAAK;IAEf,SAAS,EAAE,OAAO,CAAQ;IAEtC,OAAO,CAAC,UAAU,CAIhB;IACF,OAAO,CAAC,QAAQ,CAAgC;;IAc1C,MAAM;IAoGZ,IAAI,QAAQ,IAAI,oBAAoB,CAGnC;IACD,IAAI,SAAS,IAIO,UAAU,CAD7B;IACD,IAAI,SAAS,CAAC,IAAI,EAAE,UAAU,EAU7B;IAED,QAAQ,CAAC,IAAI,EAAE,QAAQ;IA4FvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CA6E3B"} \ No newline at end of file +{"version":3,"file":"PhysicalMaterialRecord.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/PhysicalMaterialRecord.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/Room/Entity/Ceiling/BulkheadCeiling.d.ts b/types/DatabaseServices/Room/Entity/Ceiling/BulkheadCeiling.d.ts index d8ea3f5..bf700e1 100644 --- a/types/DatabaseServices/Room/Entity/Ceiling/BulkheadCeiling.d.ts +++ b/types/DatabaseServices/Room/Entity/Ceiling/BulkheadCeiling.d.ts @@ -1,4 +1,4 @@ -import { BufferGeometry, Intersection, Material, Object3D, Vector3 } from "three"; +import { BufferGeometry, Material, Object3D, Vector3 } from "three"; import { LineGeometry } from "three/examples/jsm/lines/LineGeometry"; import { SweepGeometry } from "../../../../Geometry/SweepGeometry"; import { RenderType } from "../../../../GraphicsSystem/RenderType"; @@ -24,6 +24,8 @@ export interface BulkheadCeiling_ContourData { ContourId: number; ShapeMaterialSlotData: number[]; OverWriteMaterial?: Map>; + Deviation: number; + Height: number; } /** * 吊顶(灯带) @@ -31,7 +33,7 @@ export interface BulkheadCeiling_ContourData { export declare class BulkheadCeiling extends RoomBase { constructor(); private _ContourData; - private _GemoIdMap; + _GemoIdMap: Map; get ContourData(): BulkheadCeiling_ContourData[]; set ContourData(value: BulkheadCeiling_ContourData[]); private _Height; @@ -57,9 +59,16 @@ export declare class BulkheadCeiling extends RoomBase { * @param {Object3D} obj */ UpdateDrawObject(renderType: RenderType, obj: Object3D): Object3D; - SetMaterial(mtl: ObjectId, intersection: Intersection): void; + SetMaterialAtSlot(mtl: ObjectId, slotIndex: number, geoId?: number): void; GetMaterials(index: number): Material[]; UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material): void; + IsMtlLockAtSlot(slotIndex: number, geoId?: number): boolean; + GetMtlLockedStatus(): { + allMtlLocked: boolean; + partMtlLocked: boolean; + }; + GetPhyMtlRecords(containErased?: boolean): PhysicalMaterialRecord[]; + SetAllMaterialAtSlot(mtl: ObjectId): void; UpdateDrawGeometry(): void; ClearDraw(): this; GetGripPoints(): Array; diff --git a/types/DatabaseServices/Room/Entity/Ceiling/BulkheadCeiling.d.ts.map b/types/DatabaseServices/Room/Entity/Ceiling/BulkheadCeiling.d.ts.map index fdfb73a..317da96 100644 --- a/types/DatabaseServices/Room/Entity/Ceiling/BulkheadCeiling.d.ts.map +++ b/types/DatabaseServices/Room/Entity/Ceiling/BulkheadCeiling.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BulkheadCeiling.d.ts","sourceRoot":"","sources":["../../../../../../src/DatabaseServices/Room/Entity/Ceiling/BulkheadCeiling.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"BulkheadCeiling.d.ts","sourceRoot":"","sources":["../../../../../../src/DatabaseServices/Room/Entity/Ceiling/BulkheadCeiling.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/Room/Entity/Flat/RoomFlatBase.d.ts.map b/types/DatabaseServices/Room/Entity/Flat/RoomFlatBase.d.ts.map index 6aa8d42..a25c673 100644 --- a/types/DatabaseServices/Room/Entity/Flat/RoomFlatBase.d.ts.map +++ b/types/DatabaseServices/Room/Entity/Flat/RoomFlatBase.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RoomFlatBase.d.ts","sourceRoot":"","sources":["../../../../../../src/DatabaseServices/Room/Entity/Flat/RoomFlatBase.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"RoomFlatBase.d.ts","sourceRoot":"","sources":["../../../../../../src/DatabaseServices/Room/Entity/Flat/RoomFlatBase.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/Room/Entity/Flat/RoomFlatFloor.d.ts b/types/DatabaseServices/Room/Entity/Flat/RoomFlatFloor.d.ts index 5c104ed..53b1ad1 100644 --- a/types/DatabaseServices/Room/Entity/Flat/RoomFlatFloor.d.ts +++ b/types/DatabaseServices/Room/Entity/Flat/RoomFlatFloor.d.ts @@ -7,6 +7,6 @@ import { RoomFlatBase } from "./RoomFlatBase"; export declare class RoomFlatFloor extends RoomFlatBase { protected _ReadFile(file: CADFiler): void; WriteFile(file: CADFiler): void; - protected get MeshMaterial(): import("three").MeshBasicMaterial | MeshStandardMaterial; + protected get MeshMaterial(): MeshStandardMaterial | import("three").MeshBasicMaterial; } //# sourceMappingURL=RoomFlatFloor.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Room/Entity/Flat/RoomFlatFloor.d.ts.map b/types/DatabaseServices/Room/Entity/Flat/RoomFlatFloor.d.ts.map index 2dfa90c..fd3c25e 100644 --- a/types/DatabaseServices/Room/Entity/Flat/RoomFlatFloor.d.ts.map +++ b/types/DatabaseServices/Room/Entity/Flat/RoomFlatFloor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RoomFlatFloor.d.ts","sourceRoot":"","sources":["../../../../../../src/DatabaseServices/Room/Entity/Flat/RoomFlatFloor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAG7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C;;GAEG;AACH,qBACa,aAAc,SAAQ,YAAY;cAMxB,SAAS,CAAC,IAAI,EAAE,QAAQ;IAMlC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAMjC,SAAS,KAAK,YAAY,6DAKzB;CACJ"} \ No newline at end of file +{"version":3,"file":"RoomFlatFloor.d.ts","sourceRoot":"","sources":["../../../../../../src/DatabaseServices/Room/Entity/Flat/RoomFlatFloor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAG7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C;;GAEG;AACH,qBACa,aAAc,SAAQ,YAAY;cAMxB,SAAS,CAAC,IAAI,EAAE,QAAQ;IAMlC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAMjC,SAAS,KAAK,YAAY,6DAMzB;CACJ"} \ No newline at end of file diff --git a/types/DatabaseServices/Room/Entity/Flat/RoomFlatTop.d.ts b/types/DatabaseServices/Room/Entity/Flat/RoomFlatTop.d.ts index f244e02..387ce55 100644 --- a/types/DatabaseServices/Room/Entity/Flat/RoomFlatTop.d.ts +++ b/types/DatabaseServices/Room/Entity/Flat/RoomFlatTop.d.ts @@ -7,6 +7,6 @@ export declare class RoomFlatTop extends RoomFlatBase { protected get MeshGeometry(): Geometry; protected get CaseShadow(): boolean; protected get ReceiveShadow(): boolean; - protected get MeshMaterial(): import("three").MeshBasicMaterial | MeshStandardMaterial; + protected get MeshMaterial(): MeshStandardMaterial | import("three").MeshBasicMaterial; } //# sourceMappingURL=RoomFlatTop.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Room/Entity/Flat/RoomFlatTop.d.ts.map b/types/DatabaseServices/Room/Entity/Flat/RoomFlatTop.d.ts.map index d7539fa..364759f 100644 --- a/types/DatabaseServices/Room/Entity/Flat/RoomFlatTop.d.ts.map +++ b/types/DatabaseServices/Room/Entity/Flat/RoomFlatTop.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RoomFlatTop.d.ts","sourceRoot":"","sources":["../../../../../../src/DatabaseServices/Room/Entity/Flat/RoomFlatTop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,QAAQ,EAAE,oBAAoB,EAAuB,MAAM,OAAO,CAAC;AAMnF,OAAO,EAAE,YAAY,EAAsB,MAAM,gBAAgB,CAAC;AAGlE;;GAEG;AACH,qBACa,WAAY,SAAQ,YAAY;IAEzC,cAAuB,YAAY,IAAI,QAAQ,CAuC9C;IAED,cAAuB,UAAU,YAGhC;IACD,cAAuB,aAAa,YAGnC;IAED,SAAS,KAAK,YAAY,6DAKzB;CACJ"} \ No newline at end of file +{"version":3,"file":"RoomFlatTop.d.ts","sourceRoot":"","sources":["../../../../../../src/DatabaseServices/Room/Entity/Flat/RoomFlatTop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,QAAQ,EAAE,oBAAoB,EAAuB,MAAM,OAAO,CAAC;AAKnF,OAAO,EAAE,YAAY,EAAsB,MAAM,gBAAgB,CAAC;AAGlE;;GAEG;AACH,qBACa,WAAY,SAAQ,YAAY;IAEzC,cAAuB,YAAY,IAAI,QAAQ,CAuC9C;IAED,cAAuB,UAAU,YAGhC;IACD,cAAuB,aAAa,YAGnC;IAED,SAAS,KAAK,YAAY,6DAMzB;CACJ"} \ No newline at end of file diff --git a/types/DatabaseServices/Room/Entity/Region/RoomRegion.d.ts.map b/types/DatabaseServices/Room/Entity/Region/RoomRegion.d.ts.map index 5e21b51..84ea9a3 100644 --- a/types/DatabaseServices/Room/Entity/Region/RoomRegion.d.ts.map +++ b/types/DatabaseServices/Room/Entity/Region/RoomRegion.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RoomRegion.d.ts","sourceRoot":"","sources":["../../../../../../src/DatabaseServices/Room/Entity/Region/RoomRegion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,QAAQ,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AAKzE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAc,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,eAAO,MAAM,sBAAsB,+BAA+B,CAAC;AAEnE;;;GAGG;AACH,qBACa,UAAW,SAAQ,QAAQ;IAIhC,OAAO,CAAC,KAAK;IAEb,OAAO,CAAC,IAAI;IAEZ,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IAPjB,KAAK,EAAE,IAAI,CAAC;gBAEA,KAAK,EAAE,MAAW,EAAC,IAAI;IAEvB,IAAI,EAAE,QAAQ,EAAC,KAAK;IAEpB,MAAM,EAAE,QAAQ,EAAC,IAAI;IACrB,KAAK,SAAI;IAMrB,IAAW,IAAI,WAGd;IAED,IAAW,IAAI,CAAC,KAAK,QAAA,EAOpB;IAED,IAAI,UAAU,IACO,MAAM,CADY;IACvC,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,EAK1B;IAED,IAAW,GAAG,IAAI,QAAQ,CAGzB;IAED,IAAW,GAAG,CAAC,KAAK,EAAE,QAAQ,EAI7B;IAED,IAAW,KAAK,IAAI,QAAQ,CAG3B;IACD,IAAW,KAAK,CAAC,KAAK,EAAE,QAAQ,EAI/B;IAED,OAAO,KAAK,IAAI,GAMf;IAED,aAAa,IAAI,OAAO,EAAE;IAc1B,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAOvE;;;;OAIG;IACH,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IA6BtD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAalC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAU3B"} \ No newline at end of file +{"version":3,"file":"RoomRegion.d.ts","sourceRoot":"","sources":["../../../../../../src/DatabaseServices/Room/Entity/Region/RoomRegion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,QAAQ,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AAMzE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAc,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,eAAO,MAAM,sBAAsB,+BAA+B,CAAC;AAEnE;;;GAGG;AACH,qBACa,UAAW,SAAQ,QAAQ;IAIhC,OAAO,CAAC,KAAK;IAEb,OAAO,CAAC,IAAI;IAEZ,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IAPjB,KAAK,EAAE,IAAI,CAAC;gBAEA,KAAK,EAAE,MAAW,EAAC,IAAI;IAEvB,IAAI,EAAE,QAAQ,EAAC,KAAK;IAEpB,MAAM,EAAE,QAAQ,EAAC,IAAI;IACrB,KAAK,SAAI;IAMrB,IAAW,IAAI,WAGd;IAED,IAAW,IAAI,CAAC,KAAK,QAAA,EAOpB;IAED,IAAI,UAAU,IACO,MAAM,CADY;IACvC,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,EAK1B;IAED,IAAW,GAAG,IAAI,QAAQ,CAGzB;IAED,IAAW,GAAG,CAAC,KAAK,EAAE,QAAQ,EAI7B;IAED,IAAW,KAAK,IAAI,QAAQ,CAG3B;IACD,IAAW,KAAK,CAAC,KAAK,EAAE,QAAQ,EAI/B;IAED,OAAO,KAAK,IAAI,GAUf;IAED,aAAa,IAAI,OAAO,EAAE;IAc1B,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAOvE;;;;OAIG;IACH,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IA6BtD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAalC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAU3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Room/Entity/Wall/Hole/RoomHoleBase.d.ts.map b/types/DatabaseServices/Room/Entity/Wall/Hole/RoomHoleBase.d.ts.map index 84ad617..009e3f3 100644 --- a/types/DatabaseServices/Room/Entity/Wall/Hole/RoomHoleBase.d.ts.map +++ b/types/DatabaseServices/Room/Entity/Wall/Hole/RoomHoleBase.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RoomHoleBase.d.ts","sourceRoot":"","sources":["../../../../../../../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHoleBase.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C;;;;GAIG;AACH,qBACa,YAAa,SAAQ,QAAQ;IAE1B,cAAc,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAM;IAE1D,SAAS,CAAC,OAAO,SAAO;;IAIxB,IAAW,MAAM,WAGhB;IACD,IAAW,MAAM,CAAC,KAAK,QAAA,EAMtB;cAIkB,SAAS,CAAC,IAAI,EAAE,QAAQ;IAmBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAWxB,gBAAgB,CAAC,QAAQ,EAAE,SAAS;CAKhD"} \ No newline at end of file +{"version":3,"file":"RoomHoleBase.d.ts","sourceRoot":"","sources":["../../../../../../../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHoleBase.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C;;;;GAIG;AACH,qBACa,YAAa,SAAQ,QAAQ;IAE1B,cAAc,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAM;IAE1D,SAAS,CAAC,OAAO,SAAO;;IAIxB,IAAW,MAAM,WAGhB;IACD,IAAW,MAAM,CAAC,KAAK,QAAA,EAMtB;cAIkB,SAAS,CAAC,IAAI,EAAE,QAAQ;IAuBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAcxB,gBAAgB,CAAC,QAAQ,EAAE,SAAS;CAKhD"} \ No newline at end of file diff --git a/types/DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline.d.ts b/types/DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline.d.ts index c932b25..ad6171c 100644 --- a/types/DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline.d.ts +++ b/types/DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline.d.ts @@ -55,10 +55,19 @@ export declare class RoomHolePolyline extends RoomHoleBase { get EdgeGeometry(): Geometry; private _MeshGeometry; get MeshGeometry(): Geometry; - set Material(materialId: ObjectId); - get Material(): ObjectId; + set Material(materialId: ObjectId); + get Material(): ObjectId; private _OverWriteMaterial; + get OverWriteMaterial(): Map>; + IsMtlLockAtSlot(slotIndex: number): boolean; SetMaterialAtSlot(mtl: ObjectId, slotIndex: number): void; + SetAllMaterialAtSlot(mtl: ObjectId): void; + GetMtlLockedStatus(): { + allMtlLocked: boolean; + partMtlLocked: boolean; + }; + GetPhyMtlRecords(containErased?: boolean): PhysicalMaterialRecord[]; + private _GetValidOWMtl; protected get MeshMaterial(): Material[]; get MaterialsIds(): number[]; GetPrintObject3D(): (Line2 | Mesh)[]; diff --git a/types/DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline.d.ts.map b/types/DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline.d.ts.map index 9cfe828..73bac73 100644 --- a/types/DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline.d.ts.map +++ b/types/DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RoomHolePolyline.d.ts","sourceRoot":"","sources":["../../../../../../../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"RoomHolePolyline.d.ts","sourceRoot":"","sources":["../../../../../../../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/Room/Entity/Wall/Hole/Window/WindowTempSelect.d.ts b/types/DatabaseServices/Room/Entity/Wall/Hole/Window/WindowTempSelect.d.ts index 6f12f17..9ff9d39 100644 --- a/types/DatabaseServices/Room/Entity/Wall/Hole/Window/WindowTempSelect.d.ts +++ b/types/DatabaseServices/Room/Entity/Wall/Hole/Window/WindowTempSelect.d.ts @@ -2,6 +2,7 @@ import { IObservableValue } from "mobx"; import React from "react"; import { IDrawerDoorTempInfo } from "../../../../../../UI/Store/DoorInterface"; import { ITemplateParam } from "../../../../../../UI/Store/RightPanelStore/ITemplateParam"; +import { TemplateParam } from "../../../../../Template/Param/TemplateParam"; import { DoorWindowPanelStore } from "./WindowPanelStore"; export interface IWindowTempSelectProps { selectDiv?: HTMLElement; @@ -14,6 +15,7 @@ export declare class WindowTempSelect extends React.Component; + curParams: TemplateParam[]; constructor(props: any); componentDidMount(): void; render(): JSX.Element; diff --git a/types/DatabaseServices/Room/Entity/Wall/Hole/Window/WindowTempSelect.d.ts.map b/types/DatabaseServices/Room/Entity/Wall/Hole/Window/WindowTempSelect.d.ts.map index cf03678..bee739e 100644 --- a/types/DatabaseServices/Room/Entity/Wall/Hole/Window/WindowTempSelect.d.ts.map +++ b/types/DatabaseServices/Room/Entity/Wall/Hole/Window/WindowTempSelect.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"WindowTempSelect.d.ts","sourceRoot":"","sources":["../../../../../../../../src/DatabaseServices/Room/Entity/Wall/Hole/Window/WindowTempSelect.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAsB,MAAM,MAAM,CAAC;AAE5D,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,2DAA2D,CAAC;AAG3F,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,WAAW,sBAAsB;IAEnC,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,KAAK,EAAE,oBAAoB,CAAC;IAC5B,QAAQ,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC,sBAAsB,EAAE,EAAE,CAAC;IACjE,aAAa,EAAE,cAAc,EAAE,CAAM;IACrC,YAAY,EAAE,mBAAmB,CAAwB;IACrE,UAAU,EAAE,WAAW,CAAC;IACxB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;gBACpC,KAAK,KAAA;IAiBjB,iBAAiB;IA4BV,MAAM;IA2Db,OAAO,CAAC,WAAW,CAcjB;IAEF,OAAO,CAAC,eAAe;CAiE1B"} \ No newline at end of file +{"version":3,"file":"WindowTempSelect.d.ts","sourceRoot":"","sources":["../../../../../../../../src/DatabaseServices/Room/Entity/Wall/Hole/Window/WindowTempSelect.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAsB,MAAM,MAAM,CAAC;AAE5D,OAAO,KAAK,MAAM,OAAO,CAAC;AAa1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,2DAA2D,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAE5E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D,MAAM,WAAW,sBAAsB;IAEnC,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,KAAK,EAAE,oBAAoB,CAAC;IAC5B,QAAQ,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC,sBAAsB,EAAE,EAAE,CAAC;IAEjE,aAAa,EAAE,cAAc,EAAE,CAAM;IACrC,YAAY,EAAE,mBAAmB,CAAwB;IACrE,UAAU,EAAE,WAAW,CAAC;IACxB,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAChD,SAAS,EAAE,aAAa,EAAE,CAAM;gBAEpB,KAAK,KAAA;IAiBjB,iBAAiB;IA4BV,MAAM;IA4Db,OAAO,CAAC,WAAW,CAcjB;IAEF,OAAO,CAAC,eAAe;CAiE1B"} \ No newline at end of file diff --git a/types/DatabaseServices/Room/Entity/Wall/RoomWallArc.d.ts b/types/DatabaseServices/Room/Entity/Wall/RoomWallArc.d.ts index 1f75560..366e5a6 100644 --- a/types/DatabaseServices/Room/Entity/Wall/RoomWallArc.d.ts +++ b/types/DatabaseServices/Room/Entity/Wall/RoomWallArc.d.ts @@ -5,6 +5,8 @@ import { RenderType } from "../../../../GraphicsSystem/RenderType"; import { CADFiler } from "../../../CADFiler"; import { Arc } from "../../../Entity/Arc"; import { Line } from "../../../Entity/Line"; +import { ObjectId } from "../../../ObjectId"; +import { PhysicalMaterialRecord } from "../../../PhysicalMaterialRecord"; import { RoomWallBase } from "./RoomWallBase"; export declare class RoomWallArc extends RoomWallBase { private _Radius; @@ -19,6 +21,9 @@ export declare class RoomWallArc extends RoomWallBase { * 曲线为顺时针 */ _Clockwise?: boolean, _Thickness?: number, _Height?: number); + private _LeftCurveSign; + private _RightCurveSign; + private _LidCurveSign; get CenterAxisCurve(): Arc | Line; GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform: Matrix3): Vector3[]; GetGripPoints(): Array; @@ -31,6 +36,8 @@ export declare class RoomWallArc extends RoomWallBase { private _MeshGeometry; get EdgeGeometry(): BufferGeometry; get MeshGeometry(): Geometry; + OverWriteMaterial: Map>; + UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D): void; GetPrintObject3D(): (Line2 | Mesh)[]; InitDrawObject(renderType?: RenderType): Object3D; /** diff --git a/types/DatabaseServices/Room/Entity/Wall/RoomWallArc.d.ts.map b/types/DatabaseServices/Room/Entity/Wall/RoomWallArc.d.ts.map index 51c4d59..e5032c9 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,EAAmF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAsC,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/M,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAKvD,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,EAAyC,YAAY,EAA6B,MAAM,gBAAgB,CAAC;AAGhH,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,EAChB,OAAO,SAAO;IAalB,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;IAUlB,SAAS,IAAI,IAAI;IAMjB,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,aAAa,CAAW;IAChC,IAAI,YAAY,mBA0If;IACD,IAAI,YAAY,aAwbf;IAED,gBAAgB;IAYhB,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAoCvE;;;;OAIG;IACH,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;cAyEnC,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,EAAmF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAsC,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/M,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAKvD,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;AAE5C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,OAAO,EAAyC,YAAY,EAA6B,MAAM,gBAAgB,CAAC;AAGhH,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,EAChB,OAAO,SAAO;IAYlB,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,aAAa,CAAkC;IAGvD,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;IAUlB,SAAS,IAAI,IAAI;IAMjB,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,aAAa,CAAW;IAChC,IAAI,YAAY,mBA0If;IACD,IAAI,YAAY,aAghBf;IAED,iBAAiB,gDAAuD;IAExE,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAc9D,gBAAgB;IAYhB,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IA+CvE;;;;OAIG;IACH,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;cAyEnC,SAAS,CAAC,IAAI,EAAE,QAAQ;IA8BlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAiBpC;AA+BD,MAAM,WAAW,WAAY,SAAQ,YAAY,EAAE,GAAG;CAAI"} \ No newline at end of file diff --git a/types/DatabaseServices/Room/Entity/Wall/RoomWallBase.d.ts b/types/DatabaseServices/Room/Entity/Wall/RoomWallBase.d.ts index 60d6b23..5e51ca2 100644 --- a/types/DatabaseServices/Room/Entity/Wall/RoomWallBase.d.ts +++ b/types/DatabaseServices/Room/Entity/Wall/RoomWallBase.d.ts @@ -1,4 +1,4 @@ -import { MeshStandardMaterial, Object3D } from "three"; +import { Material, MeshStandardMaterial, Object3D } from "three"; import { RenderType } from "../../../../GraphicsSystem/RenderType"; import { CADFiler } from "../../../CADFiler"; import { CADObject } from "../../../CADObject"; @@ -7,6 +7,7 @@ import { Curve } from "../../../Entity/Curve"; import { Line } from "../../../Entity/Line"; import { Polyline } from "../../../Entity/Polyline"; import { ObjectId } from "../../../ObjectId"; +import { PhysicalMaterialRecord } from "../../../PhysicalMaterialRecord"; import { RoomBase } from "../RoomBase"; import { RoomHolePolyline } from "./Hole/RoomHolePolyline"; import { WallSnapMode } from "./WallSnapMode"; @@ -41,8 +42,20 @@ export declare abstract class RoomWallBase extends RoomBase { RightCurves: (Arc | Line)[]; LidCurves: (Arc | Line)[]; Region: Polyline; + OverWriteMaterial: Map>; UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D): void; - protected get MeshMaterial(): import("three").MeshBasicMaterial | MeshStandardMaterial; + IsMtlLockAtSlot(slotIndex: number): boolean; + SetMaterialAtSlot(mtl: ObjectId, slotIndex: number): void; + SetAllMaterialAtSlot(mtl: ObjectId): void; + GetMtlLockedStatus(): { + partMtlLocked: boolean; + allMtlLocked: boolean; + }; + GetPhyMtlRecords(containErased?: boolean): PhysicalMaterialRecord[]; + protected get MeshMaterial(): MeshStandardMaterial | import("three").MeshBasicMaterial; + private _GetValidOWMtl; + get MeshMaterials(): Material[]; + ResetSign(oldSign: Map, newSign: Map, allChange?: boolean, isLid?: boolean): void; CopyFrom(obj: CADObject): void; protected _ReadFile(file: CADFiler): void; WriteFile(file: CADFiler): void; diff --git a/types/DatabaseServices/Room/Entity/Wall/RoomWallBase.d.ts.map b/types/DatabaseServices/Room/Entity/Wall/RoomWallBase.d.ts.map index 2a00ce2..f59334a 100644 --- a/types/DatabaseServices/Room/Entity/Wall/RoomWallBase.d.ts.map +++ b/types/DatabaseServices/Room/Entity/Wall/RoomWallBase.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RoomWallBase.d.ts","sourceRoot":"","sources":["../../../../../../src/DatabaseServices/Room/Entity/Wall/RoomWallBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,oBAAoB,EAAE,QAAQ,EAAiB,MAAM,OAAO,CAAC;AAI5E,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAGnE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,eAAO,MAAM,mBAAmB,4BAA4B,CAAC;AAC7D,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAC3D,eAAO,MAAM,mBAAmB,4BAA4B,CAAC;AAE7D,oBAAY,YAAY;IAEpB,MAAM,IAAI,CAAC,IAAI;IACf,MAAM,IAAI,CAAC,IAAI;IACf,OAAO,IAAI;CACd;AAED,UAAU,QAAQ;IAEd,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;CACf;AAED,8BACsB,YAAa,SAAQ,QAAQ;IAE/C,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAoB;IAErC,cAAc,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAM;IAC9D,KAAK,EAAE,QAAQ,EAAE,CAAM;IAEvB,IAAI,SAAS,IAAI,QAAQ,EAAE,CAG1B;IAED,SAAS,CAAC,UAAU,SAAO;IAC3B,SAAS,CAAC,OAAO,SAAQ;IAEzB,IAAI,MAAM,WAGT;IACD,IAAI,MAAM,CAAC,UAAU,QAAA,EAMpB;IAED,IAAI,SAAS,IACI,MAAM,CADoB;IAC3C,IAAI,SAAS,CAAC,CAAC,EAAE,MAAM,EAMtB;IAID,IAAI,eAAe,IAAI,GAAG,GAAG,IAAI,CAAY;IAG7C,WAAW,CAAC,EAAE,EAAE,KAAK;IAGrB,UAAU,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;IAC3B,WAAW,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;IAC5B,SAAS,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC;IAC1B,MAAM,EAAE,QAAQ,CAAC;IAEjB,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAwB9D,SAAS,KAAK,YAAY,6DAKzB;IAKQ,QAAQ,CAAC,GAAG,EAAE,SAAS;IAkBhC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAwBlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAa3B;AAGD,MAAM,WAAW,YAAa,SAAQ,QAAQ,EAAE,KAAK;CAAI;AAEzD,eAAO,MAAM,gBAAgB,UAyC5B,CAAC;AAGF,wBAAgB,WAAW,CAAC,WAAW,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,WAAmB,QAQzF"} \ No newline at end of file +{"version":3,"file":"RoomWallBase.d.ts","sourceRoot":"","sources":["../../../../../../src/DatabaseServices/Room/Entity/Wall/RoomWallBase.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/Room/Entity/Wall/RoomWallLine.d.ts b/types/DatabaseServices/Room/Entity/Wall/RoomWallLine.d.ts index 6ca5369..50f489b 100644 --- a/types/DatabaseServices/Room/Entity/Wall/RoomWallLine.d.ts +++ b/types/DatabaseServices/Room/Entity/Wall/RoomWallLine.d.ts @@ -10,6 +10,9 @@ export declare class RoomWallLine extends RoomWallBase { private _StartPoint; private _EndPoint; constructor(_StartPoint?: Vector3, _EndPoint?: Vector3, _Thickness?: number, _Height?: number); + private _LeftCurveSign; + private _RightCurveSign; + private _LidCurveSign; UpdateOCSToMinBox(): void; get StartPoint(): Vector3; get EndPoint(): Vector3; @@ -37,6 +40,7 @@ export declare class RoomWallLine extends RoomWallBase { * @param {Object3D} obj */ UpdateDrawObject(renderType: RenderType, obj: Object3D): void; + UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D): void; ClearDraw(): this; protected _ReadFile(file: CADFiler): void; WriteFile(file: CADFiler): void; diff --git a/types/DatabaseServices/Room/Entity/Wall/RoomWallLine.d.ts.map b/types/DatabaseServices/Room/Entity/Wall/RoomWallLine.d.ts.map index 6f3f488..2344104 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,EAAmF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAsC,OAAO,EAAE,MAAM,OAAO,CAAC;AACrN,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAMvD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAE5C,OAAO,EAAuB,YAAY,EAA6B,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,EAChB,OAAO,SAAO;IAQlB,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,aAkSf;IAED,gBAAgB;IAYhB,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAmCvE;;;;OAIG;IACH,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IA+DtD,SAAS;cAaU,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,EAAgB,QAAQ,EAAmF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAsC,OAAO,EAAE,MAAM,OAAO,CAAC;AAC5N,OAAO,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAMvD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AACnE,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAEnE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAI5C,OAAO,EAAuB,YAAY,EAA6B,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,EAChB,OAAO,SAAO;IAQlB,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,aAAa,CAAkC;IAGvD,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;IAiBnD,kBAAkB;IAWlB,OAAO,CAAC,aAAa,CAAiB;IACtC,IAAI,YAAY,mBA8Ff;IAED,OAAO,CAAC,aAAa,CAAW;IAChC,IAAI,YAAY,aAsWf;IAED,gBAAgB;IAYhB,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IA6CvE;;;;OAIG;IACH,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IA+DtD,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAc9D,SAAS;cAaU,SAAS,CAAC,IAAI,EAAE,QAAQ;IA6BlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAgBpC"} \ No newline at end of file diff --git a/types/DatabaseServices/Room/ParseService/GetCurveParam.d.ts.map b/types/DatabaseServices/Room/ParseService/GetCurveParam.d.ts.map index 10748d7..5ef402e 100644 --- a/types/DatabaseServices/Room/ParseService/GetCurveParam.d.ts.map +++ b/types/DatabaseServices/Room/ParseService/GetCurveParam.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"GetCurveParam.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Room/ParseService/GetCurveParam.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,eAAO,MAAM,gBAAgB,SAAiC,CAAC;AAI/D,MAAM,WAAW,aAAa;IAQ1B,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACpC,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAE3C;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,GAAG,GAAG,GAAG,YAAY,8BAInE;AAED,qBAAa,YAAY;IAErB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IAEjB,OAAO,CAAC,WAAW,CAAU;gBACjB,IAAI,EAAE,IAAI;IAYtB,OAAO,CAAC,SAAS,CAAU;IAC3B,IAAI,QAAQ,YAKX;IAED,OAAO,CAAC,aAAa,CAAU;IAC/B,IAAI,YAAY,YAIf;IAED,eAAe,CAAC,CAAC,EAAE,OAAO;IAQ1B,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAO/C,eAAe,CAAC,KAAK,EAAE,MAAM;IAK7B,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM;CAItC;AAED,qBAAa,WAAY,YAAW,aAAa;IAEjC,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,GAAG;IAK7B,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAM/C,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAKvC,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM;CAItC"} \ No newline at end of file +{"version":3,"file":"GetCurveParam.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Room/ParseService/GetCurveParam.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,eAAO,MAAM,gBAAgB,SAAiC,CAAC;AAI/D,MAAM,WAAW,aAAa;IAQ1B,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACpC,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAE3C;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,IAAI,GAAG,GAAG,GAAG,YAAY,8BAInE;AAED,qBAAa,YAAY;IAErB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IAEjB,OAAO,CAAC,WAAW,CAAU;gBACjB,IAAI,EAAE,IAAI;IAYtB,OAAO,CAAC,SAAS,CAAU;IAC3B,IAAI,QAAQ,YAKX;IAED,OAAO,CAAC,aAAa,CAAU;IAC/B,IAAI,YAAY,YAIf;IAED,eAAe,CAAC,CAAC,EAAE,OAAO;IAS1B,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAO/C,eAAe,CAAC,KAAK,EAAE,MAAM;IAK7B,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM;CAItC;AAED,qBAAa,WAAY,YAAW,aAAa;IAEjC,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,GAAG;IAK7B,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAM/C,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAKvC,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM;CAItC"} \ No newline at end of file diff --git a/types/DatabaseServices/Room/ParseService/Hole/RoomWallPlaceIHoleHelper.d.ts.map b/types/DatabaseServices/Room/ParseService/Hole/RoomWallPlaceIHoleHelper.d.ts.map index 7549ce3..23e6636 100644 --- a/types/DatabaseServices/Room/ParseService/Hole/RoomWallPlaceIHoleHelper.d.ts.map +++ b/types/DatabaseServices/Room/ParseService/Hole/RoomWallPlaceIHoleHelper.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RoomWallPlaceIHoleHelper.d.ts","sourceRoot":"","sources":["../../../../../../src/DatabaseServices/Room/ParseService/Hole/RoomWallPlaceIHoleHelper.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAuB,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACjG,OAAO,EAAuB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtE,KAAK,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9B,MAAM,WAAW,SAAU,SAAQ,KAAK;IAEpC,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,YAAY,CAAC;CACvB;AAED,qBAAa,wBAAwB;IAMd,MAAM,EAAE,YAAY,EAAE;IAJzC,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,CAAM;IAC3C,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAM;IACpD,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC;gBAEL,MAAM,EAAE,YAAY,EAAE;IAMzC,aAAa,CAAC,CAAC,EAAE,OAAO;;;;;;IAwCxB,OAAO,CAAC,KAAK;IAab,0BAA0B;CAS7B;AAID,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,SAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA4BtG;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,mFAA4B,eAuCtF"} \ No newline at end of file +{"version":3,"file":"RoomWallPlaceIHoleHelper.d.ts","sourceRoot":"","sources":["../../../../../../src/DatabaseServices/Room/ParseService/Hole/RoomWallPlaceIHoleHelper.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAuB,YAAY,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACjG,OAAO,EAAuB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGtE,KAAK,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9B,MAAM,WAAW,SAAU,SAAQ,KAAK;IAEpC,IAAI,EAAE,YAAY,CAAC;IACnB,KAAK,EAAE,YAAY,CAAC;CACvB;AAED,qBAAa,wBAAwB;IAMd,MAAM,EAAE,YAAY,EAAE;IAJzC,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,CAAM;IAC3C,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,EAAE,CAAM;IACpD,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC;gBAEL,MAAM,EAAE,YAAY,EAAE;IAMzC,aAAa,CAAC,CAAC,EAAE,OAAO;;;;;;IAwCxB,OAAO,CAAC,KAAK;IAab,0BAA0B;CAS7B;AAID,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,SAAO,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA4BtG;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,mFAA4B,GAsCvD,SAAS,EAAE,CAC1C"} \ 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 587b22c..f03202e 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,EAA0B,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAgE,YAAY,EAAgB,MAAM,6BAA6B,CAAC;AAEvI,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAcxD,oBAAY,gBAAgB;IAExB,IAAI,IAAI;IACR,KAAK,IAAI;IACT,GAAG,IAAI;CACV;AAGD;;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;IAkOxB,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,EAA0B,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACjF,OAAO,EAAgE,YAAY,EAAgB,MAAM,6BAA6B,CAAC;AAEvI,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAcxD,oBAAY,gBAAgB;IAExB,IAAI,IAAI;IACR,KAAK,IAAI;IACT,GAAG,IAAI;CACV;AAGD;;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;IAqOxB,GAAG;CAaN"} \ No newline at end of file diff --git a/types/DatabaseServices/Room/ParseService/RoomWallParse.d.ts.map b/types/DatabaseServices/Room/ParseService/RoomWallParse.d.ts.map index 0fe0c77..af9d8ec 100644 --- a/types/DatabaseServices/Room/ParseService/RoomWallParse.d.ts.map +++ b/types/DatabaseServices/Room/ParseService/RoomWallParse.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RoomWallParse.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Room/ParseService/RoomWallParse.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAW,MAAM,4BAA4B,CAAC;AAK/D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAI3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAOlE;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,aAAa;IAaV,OAAO,CAAC,aAAa;IAAW,OAAO,CAAC,SAAS;IAAY,OAAO,CAAC,sBAAsB;IAVvG,MAAM,CAAC,oBAAoB,EAAE,OAAO,EAAE,CAAM;IAC5C,MAAM,CAAC,cAAc,EAAE,CAAC,sBAAsB,EAAE,QAAQ,CAAC,EAAE,CAAM;IACjE,MAAM,CAAC,mBAAmB,EAAE,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAa;IACjE,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAM;IAEpC;;;;OAIG;gBACiB,aAAa,EAAE,OAAO,EAAU,SAAS,EAAE,QAAQ,EAAU,sBAAsB,EAAE,OAAO;IAKhH;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,WAAW,GAAE,YAAY,EAAc;IAuDpE,OAAO,CAAC,uBAAuB;IAqpB/B,EAAE,EAAE,QAAQ,CAAC;IACb,IAAI,EAAE,IAAI,EAAE,CAAC;IACb,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE;CAoBhC"} \ No newline at end of file +{"version":3,"file":"RoomWallParse.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Room/ParseService/RoomWallParse.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAW,MAAM,4BAA4B,CAAC;AAK/D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAI3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAOlE;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,aAAa;IAaV,OAAO,CAAC,aAAa;IAAW,OAAO,CAAC,SAAS;IAAY,OAAO,CAAC,sBAAsB;IAVvG,MAAM,CAAC,oBAAoB,EAAE,OAAO,EAAE,CAAM;IAC5C,MAAM,CAAC,cAAc,EAAE,CAAC,sBAAsB,EAAE,QAAQ,CAAC,EAAE,CAAM;IACjE,MAAM,CAAC,mBAAmB,EAAE,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAa;IACjE,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAM;IAEpC;;;;OAIG;gBACiB,aAAa,EAAE,OAAO,EAAU,SAAS,EAAE,QAAQ,EAAU,sBAAsB,EAAE,OAAO;IAKhH;;;OAGG;IACH,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,WAAW,GAAE,YAAY,EAAc;IAuDpE,OAAO,CAAC,uBAAuB;IAkpB/B,EAAE,EAAE,QAAQ,CAAC;IACb,IAAI,EAAE,IAAI,EAAE,CAAC;IACb,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE;CAoBhC"} \ No newline at end of file diff --git a/types/DatabaseServices/Shape.d.ts b/types/DatabaseServices/Shape.d.ts index 37ff64d..0acb5ad 100644 --- a/types/DatabaseServices/Shape.d.ts +++ b/types/DatabaseServices/Shape.d.ts @@ -6,7 +6,10 @@ import { Curve } from './Entity/Curve'; export declare class Shape { private _Outline; private _Holes; + private _DisplayAccuracy; constructor(_Outline?: Contour, _Holes?: Contour[]); + get DisplayAccuracy(): number; + set DisplayAccuracy(v: number); get Outline(): Contour; get Holes(): Contour[]; get Area(): number; diff --git a/types/DatabaseServices/Shape.d.ts.map b/types/DatabaseServices/Shape.d.ts.map index 51e2a41..598594b 100644 --- a/types/DatabaseServices/Shape.d.ts.map +++ b/types/DatabaseServices/Shape.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Shape.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/Shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAE,OAAO,EAAQ,KAAK,IAAI,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE/E,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAGvC,qBAAa,KAAK;IAGV,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;gBADN,QAAQ,GAAE,OAAqB,EAC/B,MAAM,GAAE,OAAO,EAAO;IAKlC,IAAI,OAAO,IAkBM,OAAO,CAfvB;IACD,IAAI,KAAK,IAkBQ,OAAO,EAAE,CAfzB;IACD,IAAI,IAAI,WAKP;IACD,IAAI,WAAW,sCAGd;IACD,IAAI,OAAO,CAAC,GAAG,EAAE,OAAO,EAGvB;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,EAGzB;IAED,IAAI,KAAK,IAAI,MAAM,CAoBlB;IAED,IAAI,QAAQ,IAII,OAAO,CADtB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAMtB;IACD,EAAE;IAQF,iBAAiB;IAOjB,WAAW,CAAC,CAAC,EAAE,OAAO;IAMtB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAelC,OAAO;IAaP,KAAK;IAOL,QAAQ,CAAC,KAAK,EAAE,MAAM;IAKtB,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IA8BZ,aAAa;IASb,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAuBrD,gBAAgB;IAShB,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAwBxD,yBAAyB,CAAC,WAAW,EAAE,KAAK,GAAG,KAAK,EAAE;IAWtD,kBAAkB,CAAC,WAAW,EAAE,KAAK,EAAE,cAAc,UAAQ,GAAG,KAAK,EAAE;IA0CvE;;;OAGG;IACH,qBAAqB,CAAC,YAAY,EAAE,KAAK,EAAE;IAoD3C,KAAK,CAAC,WAAW,EAAE,KAAK;IAWxB,OAAO,CAAC,sBAAsB;IAW9B;;;;;;;;OAQG;IACH,OAAO,CAAC,2BAA2B;IA6BnC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE;IAsBvD;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,WAAW,UAAO,GAAG,OAAO,EAAE;IAgFrE;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAgBvC,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAevB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAO3B"} \ No newline at end of file +{"version":3,"file":"Shape.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/Shape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAE,OAAO,EAAQ,KAAK,IAAI,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE/E,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAIvC,qBAAa,KAAK;IAIV,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IAHlB,OAAO,CAAC,gBAAgB,CAAK;gBAEjB,QAAQ,GAAE,OAAqB,EAC/B,MAAM,GAAE,OAAO,EAAO;IAKlC,IAAI,eAAe,IAKI,MAAM,CAF5B;IAED,IAAI,eAAe,CAAC,CAAC,EAAE,MAAM,EAI5B;IAED,IAAI,OAAO,IAkBM,OAAO,CAfvB;IACD,IAAI,KAAK,IAkBQ,OAAO,EAAE,CAfzB;IACD,IAAI,IAAI,WAKP;IACD,IAAI,WAAW,sCAGd;IACD,IAAI,OAAO,CAAC,GAAG,EAAE,OAAO,EAGvB;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,EAGzB;IAED,IAAI,KAAK,IAAI,MAAM,CAoBlB;IAED,IAAI,QAAQ,IAII,OAAO,CADtB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,EAMtB;IACD,EAAE;IAQF,iBAAiB;IAOjB,WAAW,CAAC,CAAC,EAAE,OAAO;IAMtB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAelC,OAAO;IAaP,KAAK;IAOL,QAAQ,CAAC,KAAK,EAAE,MAAM;IAKtB,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IA8BZ,aAAa;IASb,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAuBrD,gBAAgB;IAShB,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAwBxD,yBAAyB,CAAC,WAAW,EAAE,KAAK,GAAG,KAAK,EAAE;IAWtD,kBAAkB,CAAC,WAAW,EAAE,KAAK,EAAE,cAAc,UAAQ,GAAG,KAAK,EAAE;IAyCvE;;;OAGG;IACH,qBAAqB,CAAC,YAAY,EAAE,KAAK,EAAE;IAoD3C,KAAK,CAAC,WAAW,EAAE,KAAK;IAWxB,OAAO,CAAC,sBAAsB;IAW9B;;;;;;;;OAQG;IACH,OAAO,CAAC,2BAA2B;IA6BnC,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE;IAsBvD;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,WAAW,UAAO,GAAG,OAAO,EAAE;IAgFrE;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAgBvC,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAevB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAO3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Shape2.d.ts b/types/DatabaseServices/Shape2.d.ts index aa36faf..a07c544 100644 --- a/types/DatabaseServices/Shape2.d.ts +++ b/types/DatabaseServices/Shape2.d.ts @@ -1,5 +1,8 @@ import { Shape, Vector2 } from "three"; export declare class Shape2 extends Shape { + private _DisplayAccuracy; + get DisplayAccuracy(): number; + set DisplayAccuracy(v: number); getPoints(divisions?: number, optimizeArc?: boolean): Vector2[]; absellipse(aX: number, aY: number, xRadius: number, yRadius: number, aStartAngle: number, aEndAngle: number, aClockwise: boolean, aRotation: number): this; } diff --git a/types/DatabaseServices/Shape2.d.ts.map b/types/DatabaseServices/Shape2.d.ts.map index e11cc34..ecc535f 100644 --- a/types/DatabaseServices/Shape2.d.ts.map +++ b/types/DatabaseServices/Shape2.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Shape2.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/Shape2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAMrD,qBAAa,MAAO,SAAQ,KAAK;IAE7B,SAAS,CAAC,SAAS,GAAE,MAAW,EAAE,WAAW,UAAO,GAAG,OAAO,EAAE;IAgEhE,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAuB7J"} \ No newline at end of file +{"version":3,"file":"Shape2.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/Shape2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAMrD,qBAAa,MAAO,SAAQ,KAAK;IAE7B,OAAO,CAAC,gBAAgB,CAAa;IAErC,IAAI,eAAe,IAKI,MAAM,CAF5B;IAED,IAAI,eAAe,CAAC,CAAC,EAAE,MAAM,EAI5B;IACD,SAAS,CAAC,SAAS,GAAE,MAAW,EAAE,WAAW,UAAO,GAAG,OAAO,EAAE;IAkEhE,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;CAuB7J"} \ No newline at end of file diff --git a/types/DatabaseServices/ShapeManager.d.ts.map b/types/DatabaseServices/ShapeManager.d.ts.map index 7ac5b84..7784d1d 100644 --- a/types/DatabaseServices/ShapeManager.d.ts.map +++ b/types/DatabaseServices/ShapeManager.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ShapeManager.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/ShapeManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,qBAAa,YAAY;IAET,OAAO,CAAC,UAAU;gBAAV,UAAU,GAAE,KAAK,EAAO;IAK5C,IAAI,SAAS,YAGZ;IACD,IAAI,UAAU,WAGb;IACD,IAAI,SAAS,WAGZ;IACD,eAAe,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE;IAKvC,KAAK;IAIL,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB;IAa3D,yBAAyB,CAAC,MAAM,EAAE,YAAY;IAgB9C,kBAAkB,CAAC,QAAQ,EAAE,YAAY;IAmDzC,qBAAqB,CAAC,MAAM,EAAE,YAAY;IAY1C;;;;;;;OAOG;IACH,WAAW,CAAC,IAAI,EAAE,OAAO;IASzB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAWvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAS3B"} \ No newline at end of file +{"version":3,"file":"ShapeManager.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/ShapeManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,qBAAa,YAAY;IAET,OAAO,CAAC,UAAU;gBAAV,UAAU,GAAE,KAAK,EAAO;IAK5C,IAAI,SAAS,IAAI,KAAK,EAAE,CAGvB;IACD,IAAI,UAAU,WAGb;IACD,IAAI,SAAS,WAGZ;IACD,eAAe,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE;IAKvC,KAAK;IAIL,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB;IAa3D,yBAAyB,CAAC,MAAM,EAAE,YAAY;IAgB9C,kBAAkB,CAAC,QAAQ,EAAE,YAAY;IAmDzC,qBAAqB,CAAC,MAAM,EAAE,YAAY;IAY1C;;;;;;;OAOG;IACH,WAAW,CAAC,IAAI,EAAE,OAAO;IASzB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAWvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAS3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Spline.d.ts b/types/DatabaseServices/Spline.d.ts index 06f4fee..52d9209 100644 --- a/types/DatabaseServices/Spline.d.ts +++ b/types/DatabaseServices/Spline.d.ts @@ -18,6 +18,8 @@ export declare class Spline extends Curve { get EndPoint(): Vector3; get StartParam(): number; get EndParam(): number; + GetPointAtParam(param: number): Vector3; + GetFirstDeriv(param: number | Vector3): Vector3; GetClosestPointTo(pt: Vector3, extend: boolean): Vector3; GetOffsetCurves(offsetDist: number): Array; GetGripPoints(): Vector3[]; diff --git a/types/DatabaseServices/Spline.d.ts.map b/types/DatabaseServices/Spline.d.ts.map index ebd4cd3..5afc50d 100644 --- a/types/DatabaseServices/Spline.d.ts.map +++ b/types/DatabaseServices/Spline.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Spline.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/Spline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE3D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAM7C,qBACa,MAAO,SAAQ,KAAK;IAGjB,OAAO,CAAC,UAAU;IAD9B,OAAO,CAAC,WAAW,CAAkB;gBACjB,UAAU,GAAE,OAAO,EAAO;IAK9C,IAAI,KAAK,qBAGR;IAED,IAAI,MAAM,WAIT;IAED,IAAI,MAAM,IAIM,OAAO,EAAE,CADxB;IACD,IAAI,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,EAcxB;IAED,IAAI,SAAS,IAAI,OAAO,CAGvB;IAED,IAAI,OAAO,IAAI,OAAO,CAGrB;IACD,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,EAMvB;IACD,IAAI,UAAU,YAGb;IACD,IAAI,QAAQ,YAGX;IACD,IAAI,UAAU,WAGb;IAED,IAAI,QAAQ,WAGX;IAED,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;IAKxD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAqBlD,aAAa;IAIb,gBAAgB;IAIhB,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAQrD,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAQxD,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAkBZ,YAAY;IAKZ,gBAAgB,IAAI,QAAQ;IAK5B,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAWlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAQ3B"} \ No newline at end of file +{"version":3,"file":"Spline.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/Spline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAG3D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAM7C,qBACa,MAAO,SAAQ,KAAK;IAGjB,OAAO,CAAC,UAAU;IAD9B,OAAO,CAAC,WAAW,CAAkB;gBACjB,UAAU,GAAE,OAAO,EAAO;IAK9C,IAAI,KAAK,qBAGR;IAED,IAAI,MAAM,WAIT;IAED,IAAI,MAAM,IAIM,OAAO,EAAE,CADxB;IACD,IAAI,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,EAcxB;IAED,IAAI,SAAS,IAAI,OAAO,CAGvB;IAED,IAAI,OAAO,IAAI,OAAO,CAGrB;IACD,IAAI,SAAS,CAAC,CAAC,EAAE,OAAO,EAMvB;IACD,IAAI,UAAU,YAGb;IACD,IAAI,QAAQ,YAGX;IACD,IAAI,UAAU,WAGb;IAED,IAAI,QAAQ,WAGX;IAED,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAkBvC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,OAAO;IAO/C,iBAAiB,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO;IAKxD,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAqBlD,aAAa;IAIb,gBAAgB;IAIhB,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IASrD,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IASxD,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAkBZ,YAAY;IAKZ,gBAAgB,IAAI,QAAQ;IAK5B,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAclC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAU3B"} \ No newline at end of file diff --git a/types/DatabaseServices/SymbolTableRecord.d.ts b/types/DatabaseServices/SymbolTableRecord.d.ts index 0c3cc9f..df90739 100644 --- a/types/DatabaseServices/SymbolTableRecord.d.ts +++ b/types/DatabaseServices/SymbolTableRecord.d.ts @@ -1,6 +1,7 @@ import { Status } from "../Common/Status"; import { CADFiler } from "./CADFiler"; import { CADObject } from "./CADObject"; +import { ISerialize } from "./ISerialize"; export declare abstract class SymbolTableRecord extends CADObject { protected name: string; get Name(): string; @@ -8,5 +9,15 @@ export declare abstract class SymbolTableRecord extends CADObject { Add(obj: CADObject, isCheckObjectCleanly?: boolean): Status; WriteFile(file: CADFiler): void; ReadFile(file: CADFiler): void; + ApplyPartialUndo(undoData: CADObject): void; +} +/** + * 记录当前Name的序列化数据 + */ +export declare class NameData implements ISerialize { + name: string; + ReadFile(file: CADFiler): this; + WriteFile(file: CADFiler): this; + constructor(name: string); } //# sourceMappingURL=SymbolTableRecord.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/SymbolTableRecord.d.ts.map b/types/DatabaseServices/SymbolTableRecord.d.ts.map index ba885c9..4ba4cc3 100644 --- a/types/DatabaseServices/SymbolTableRecord.d.ts.map +++ b/types/DatabaseServices/SymbolTableRecord.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SymbolTableRecord.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/SymbolTableRecord.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,8BAAsB,iBAAkB,SAAQ,SAAS;IAErD,SAAS,CAAC,IAAI,EAAE,MAAM,CAAM;IAC5B,IAAI,IAAI,IAIO,MAAM,CADpB;IACD,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,EAWpB;IAED,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,oBAAoB,UAAO,GAAG,MAAM;IAKxD,SAAS,CAAC,IAAI,EAAE,QAAQ;IAOxB,QAAQ,CAAC,IAAI,EAAE,QAAQ;CAO1B"} \ No newline at end of file +{"version":3,"file":"SymbolTableRecord.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/SymbolTableRecord.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,8BAAsB,iBAAkB,SAAQ,SAAS;IAErD,SAAS,CAAC,IAAI,EAAE,MAAM,CAAM;IAC5B,IAAI,IAAI,IAIO,MAAM,CADpB;IACD,IAAI,IAAI,CAAC,IAAI,EAAE,MAAM,EAoBpB;IAED,GAAG,CAAC,GAAG,EAAE,SAAS,EAAE,oBAAoB,UAAO,GAAG,MAAM;IAKxD,SAAS,CAAC,IAAI,EAAE,QAAQ;IAOxB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAQvB,gBAAgB,CAAC,QAAQ,EAAE,SAAS;CAgBvC;AAED;;GAEG;AACH,qBACa,QAAS,YAAW,UAAU;IAYpB,IAAI,EAAE,MAAM;IAV/B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAK9B,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;gBAKZ,IAAI,EAAE,MAAM;CAClC"} \ No newline at end of file diff --git a/types/DatabaseServices/Tables/LayerTable.d.ts b/types/DatabaseServices/Tables/LayerTable.d.ts new file mode 100644 index 0000000..ad63c5b --- /dev/null +++ b/types/DatabaseServices/Tables/LayerTable.d.ts @@ -0,0 +1,46 @@ +import { Status } from "../../Common/Status"; +import { CADFiler } from "../CADFiler"; +import { CADObject } from "../CADObject"; +import { ISerialize } from "../ISerialize"; +import { LayerTableRecord } from "../LayerTableRecord"; +import { ObjectId } from "../ObjectId"; +import { SymbolTableRecord } from "../SymbolTableRecord"; +import { SymbolTable } from "./SymbolTable"; +export declare class LayerTable extends SymbolTable { + protected _Current: ObjectId; + get Current(): ObjectId; + set Current(id: ObjectId); + /** 用于描述图层结构的根节点 */ + private _Root; + get Root(): LayerNode; + set Root(root: LayerNode); + Add(record: SymbolTableRecord, isCheckObjectCleanly?: boolean): Status; + ReadFile(file: CADFiler): void; + WriteFile(file: CADFiler): void; + ApplyPartialUndo(undoData: CADObject): void; +} +/** 用于描述图层结构的节点 */ +export declare class LayerNode implements ISerialize { + name: string; + children: LayerNode[]; + constructor(name: string, isHasChildren?: boolean); + ReadFile(f: CADFiler): void; + WriteFile(f: CADFiler): void; +} +/** + * 记录当前id的序列化数据 + */ +export declare class ObjectIdData implements ISerialize { + objectId: ObjectId; + ReadFile(file: CADFiler): this; + WriteFile(file: CADFiler): this; + constructor(objectId: ObjectId); +} +/** 记录树状结构的序列化数据*/ +export declare class ObjectTreeData implements ISerialize { + data: LayerNode; + ReadFile(file: CADFiler): this; + WriteFile(file: CADFiler): this; + constructor(data: LayerNode); +} +//# sourceMappingURL=LayerTable.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Tables/LayerTable.d.ts.map b/types/DatabaseServices/Tables/LayerTable.d.ts.map new file mode 100644 index 0000000..734d1d1 --- /dev/null +++ b/types/DatabaseServices/Tables/LayerTable.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"LayerTable.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Tables/LayerTable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,qBACa,UAAW,SAAQ,WAAW;IAEvC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IAE/C,IAAW,OAAO,IAAI,QAAQ,CAAC,gBAAgB,CAAC,CAG/C;IAED,IAAW,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAehD;IAED,mBAAmB;IACnB,OAAO,CAAC,KAAK,CAA8B;IAE3C,IAAW,IAAI,IAAI,SAAS,CAG3B;IAED,IAAW,IAAI,CAAC,IAAI,EAAE,SAAS,EAc9B;IAEQ,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,oBAAoB,UAAO,GAAG,MAAM;IA0BnE,QAAQ,CAAC,IAAI,EAAE,QAAQ;IASvB,SAAS,CAAC,IAAI,EAAE,QAAQ;IASxB,gBAAgB,CAAC,QAAQ,EAAE,SAAS;CAahD;AAED,kBAAkB;AAClB,qBACa,SAAU,YAAW,UAAU;IAIrB,IAAI,EAAE,MAAM;IAF/B,QAAQ,EAAE,SAAS,EAAE,CAAC;gBAEH,IAAI,EAAE,MAAM,EAAE,aAAa,UAAQ;IAMtD,QAAQ,CAAC,CAAC,EAAE,QAAQ;IAgBpB,SAAS,CAAC,CAAC,EAAE,QAAQ;CAYxB;AAED;;GAEG;AACH,qBACa,YAAa,YAAW,UAAU;IAYxB,QAAQ,EAAE,QAAQ;IAVrC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAK9B,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;gBAKZ,QAAQ,EAAE,QAAQ;CACxC;AAED,kBAAkB;AAClB,qBACa,cAAe,YAAW,UAAU;IAY1B,IAAI,EAAE,SAAS;IAVlC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAK9B,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;gBAKZ,IAAI,EAAE,SAAS;CACrC"} \ No newline at end of file diff --git a/types/DatabaseServices/Tables/MaterialTable.d.ts b/types/DatabaseServices/Tables/MaterialTable.d.ts index e3e98ad..308c260 100644 --- a/types/DatabaseServices/Tables/MaterialTable.d.ts +++ b/types/DatabaseServices/Tables/MaterialTable.d.ts @@ -3,18 +3,18 @@ import { ObjectId } from "../ObjectId"; import { PhysicalMaterialRecord } from "../PhysicalMaterialRecord"; import { SymbolTable } from "./SymbolTable"; export declare class MaterialTable extends SymbolTable { - protected _CurFloorMtl: ObjectId; - protected _CurWallMtl: ObjectId; - protected _CurDrawMtl: ObjectId; - protected _CurBulkCeilingFaceMaterial: ObjectId; - get CurFloorMtl(): ObjectId; - get CurWallMtl(): ObjectId; - get CurBoardMtl(): ObjectId; - get CurBulkCeilingFaceMaterial(): ObjectId; - set CurFloorMtl(id: ObjectId); - set CurWallMtl(id: ObjectId); - set CurBoardMtl(id: ObjectId); - set CurBulkCeilingFaceMaterial(id: ObjectId); + protected _CurFloorMtl: ObjectId; + protected _CurWallMtl: ObjectId; + protected _CurDrawMtl: ObjectId; + protected _CurBulkCeilingFaceMaterial: ObjectId; + get CurFloorMtl(): ObjectId; + get CurWallMtl(): ObjectId; + get CurBoardMtl(): ObjectId; + get CurBulkCeilingFaceMaterial(): ObjectId; + set CurFloorMtl(id: ObjectId); + set CurWallMtl(id: ObjectId); + set CurBoardMtl(id: ObjectId); + set CurBulkCeilingFaceMaterial(id: ObjectId); get Materials(): Map; Remove(record: PhysicalMaterialRecord): void; GetAt(name: string): PhysicalMaterialRecord | undefined; diff --git a/types/DatabaseServices/Tables/MaterialTable.d.ts.map b/types/DatabaseServices/Tables/MaterialTable.d.ts.map index 7c8ff53..11df001 100644 --- a/types/DatabaseServices/Tables/MaterialTable.d.ts.map +++ b/types/DatabaseServices/Tables/MaterialTable.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"MaterialTable.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Tables/MaterialTable.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,qBAAa,aAAc,SAAQ,WAAW;IAE9B,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC;IACjC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC;IAChC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC;IAChC,SAAS,CAAC,2BAA2B,EAAE,QAAQ,CAAC;IAE5D,IAAI,WAAW,+CAAgC;IAC/C,IAAI,UAAU,+CAA+B;IAC7C,IAAI,WAAW,+CAA+B;IAC9C,IAAI,0BAA0B,+CAA+C;IAE7E,IAAI,WAAW,CAAC,EAAE,4CAAA,EAQjB;IAED,IAAI,UAAU,CAAC,EAAE,4CAAA,EAQhB;IACD,IAAI,WAAW,CAAC,EAAE,4CAAA,EAQjB;IAED,IAAI,0BAA0B,CAAC,EAAE,4CAAA,EAQhC;IAED,IAAI,SAAS,wCAGZ;IAED,MAAM,CAAC,MAAM,EAAE,sBAAsB;IAKrC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAKvD,GAAG,CAAC,IAAI,EAAE,MAAM;IAKhB,YAAY,CAAC,IAAI,GAAE,MAAa,GAAG,MAAM;IAKzC,OAAO,IAAI,IAAI;IASN,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAkBvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAUpC"} \ No newline at end of file +{"version":3,"file":"MaterialTable.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Tables/MaterialTable.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,qBAAa,aAAc,SAAQ,WAAW;IAE9B,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACzD,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACxD,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACxD,SAAS,CAAC,2BAA2B,EAAE,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IAEpF,IAAI,WAAW,qCAAgC;IAC/C,IAAI,UAAU,qCAA+B;IAC7C,IAAI,WAAW,qCAA+B;IAC9C,IAAI,0BAA0B,IA+BK,QAAQ,CAAC,sBAAsB,CAAC,CA/BU;IAE7E,IAAI,WAAW,CAAC,EAAE,kCAAA,EAQjB;IAED,IAAI,UAAU,CAAC,EAAE,kCAAA,EAQhB;IACD,IAAI,WAAW,CAAC,EAAE,kCAAA,EAQjB;IAED,IAAI,0BAA0B,CAAC,EAAE,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EAQlE;IAED,IAAI,SAAS,IAEc,GAAG,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAC7D;IAED,MAAM,CAAC,MAAM,EAAE,sBAAsB;IAOrC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAKvD,GAAG,CAAC,IAAI,EAAE,MAAM;IAKhB,YAAY,CAAC,IAAI,GAAE,MAAa,GAAG,MAAM;IAKzC,OAAO,IAAI,IAAI;IASN,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAkBvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAUpC"} \ No newline at end of file diff --git a/types/DatabaseServices/Tables/SymbolTable.d.ts.map b/types/DatabaseServices/Tables/SymbolTable.d.ts.map index 107d857..463fbce 100644 --- a/types/DatabaseServices/Tables/SymbolTable.d.ts.map +++ b/types/DatabaseServices/Tables/SymbolTable.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SymbolTable.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Tables/SymbolTable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,qBACa,WAAY,SAAQ,SAAS;IAEtC;;OAEG;IACS,OAAO,iCAAwC;IAE3D,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,oBAAoB,UAAO,GAAG,MAAM;IAgBnE,MAAM,CAAC,MAAM,EAAE,iBAAiB;IAmBvB,OAAO,IAAI,IAAI;IAMxB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAKlD,GAAG,CAAC,IAAI,EAAE,MAAM;IAKhB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAUlC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAQrE,SAAS,CAAC,QAAQ,SAAK;IAEvB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAoBvB,SAAS,CAAC,IAAI,EAAE,QAAQ;IAYxB,gBAAgB,CAAC,QAAQ,EAAE,SAAS;CAqBvC"} \ No newline at end of file +{"version":3,"file":"SymbolTable.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Tables/SymbolTable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,qBACa,WAAY,SAAQ,SAAS;IAEtC;;OAEG;IACS,OAAO,iCAAwC;IAE3D,GAAG,CAAC,MAAM,EAAE,iBAAiB,EAAE,oBAAoB,UAAO,GAAG,MAAM;IAgBnE,MAAM,CAAC,MAAM,EAAE,iBAAiB;IAmBvB,OAAO,IAAI,IAAI;IAMxB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAKlD,GAAG,CAAC,IAAI,EAAE,MAAM;IAKhB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAUlC,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO;IAQrE,SAAS,CAAC,QAAQ,SAAK;IAEvB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAoBvB,SAAS,CAAC,IAAI,EAAE,QAAQ;IAYxB,gBAAgB,CAAC,QAAQ,EAAE,SAAS;CAuBvC"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/Action/TempateThicknessAction.d.ts.map b/types/DatabaseServices/Template/Action/TempateThicknessAction.d.ts.map index ec5fb19..3288368 100644 --- a/types/DatabaseServices/Template/Action/TempateThicknessAction.d.ts.map +++ b/types/DatabaseServices/Template/Action/TempateThicknessAction.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TempateThicknessAction.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/Action/TempateThicknessAction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,oBAAY,kBAAkB;IAE1B,MAAM,IAAI;IACV,IAAI,IAAI;IACR,KAAK,IAAI;CACZ;AAED,MAAM,WAAW,mBAAmB;IAGhC,SAAS,EAAE,kBAAkB,CAAC;IAC9B;;OAEG;IACH,OAAO,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,qBACa,sBAAuB,SAAQ,cAAc;IAEtD,kBAAkB,EAAE,GAAG,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAa;IACnE,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IA0BrD,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAqBvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAe3B"} \ No newline at end of file +{"version":3,"file":"TempateThicknessAction.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/Action/TempateThicknessAction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,oBAAY,kBAAkB;IAE1B,MAAM,IAAI;IACV,IAAI,IAAI;IACR,KAAK,IAAI;CACZ;AAED,MAAM,WAAW,mBAAmB;IAGhC,SAAS,EAAE,kBAAkB,CAAC;IAC9B;;OAEG;IACH,OAAO,EAAE,cAAc,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,qBACa,sBAAuB,SAAQ,cAAc;IAEtD,kBAAkB,EAAE,GAAG,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAa;IACnE,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IA2BrD,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAqBvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAe3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/Action/TemplateFilletAction.d.ts b/types/DatabaseServices/Template/Action/TemplateFilletAction.d.ts index d15ecee..1631ac8 100644 --- a/types/DatabaseServices/Template/Action/TemplateFilletAction.d.ts +++ b/types/DatabaseServices/Template/Action/TemplateFilletAction.d.ts @@ -13,6 +13,7 @@ export interface IFilletcActionData { ArcParams: number[]; Grooves?: IGrooveFillet[]; Path2D?: IGrooveFillet[]; + ArcSweepPathParams?: number[]; } export declare class TemplateFilletAction extends TemplateAction { FilletDatas: IFilletcActionData[]; diff --git a/types/DatabaseServices/Template/Action/TemplateFilletAction.d.ts.map b/types/DatabaseServices/Template/Action/TemplateFilletAction.d.ts.map index 3594bed..f18a38a 100644 --- a/types/DatabaseServices/Template/Action/TemplateFilletAction.d.ts.map +++ b/types/DatabaseServices/Template/Action/TemplateFilletAction.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateFilletAction.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/Action/TemplateFilletAction.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAS,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,WAAW,aAAa;IAE1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IAE/B,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,qBACa,oBAAqB,SAAQ,cAAc;IAGpD,WAAW,EAAE,kBAAkB,EAAE,CAAM;;IAOvC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAoDrD,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,GAAG,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;KAAE;IA4C9F,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAqFvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CA2C3B"} \ No newline at end of file +{"version":3,"file":"TemplateFilletAction.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/Action/TemplateFilletAction.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAS,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,WAAW,aAAa;IAE1B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IAE/B,MAAM,EAAE,QAAQ,CAAC;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,qBACa,oBAAqB,SAAQ,cAAc;IAGpD,WAAW,EAAE,kBAAkB,EAAE,CAAM;;IAOvC,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IA8ErD,SAAS,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,GAAG,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;KAAE;IAqD9F,QAAQ,CAAC,IAAI,EAAE,QAAQ;IA4FvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAkD3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/Action/TemplateMaterialAction.d.ts.map b/types/DatabaseServices/Template/Action/TemplateMaterialAction.d.ts.map index 5421fa7..2e4734f 100644 --- a/types/DatabaseServices/Template/Action/TemplateMaterialAction.d.ts.map +++ b/types/DatabaseServices/Template/Action/TemplateMaterialAction.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateMaterialAction.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/Action/TemplateMaterialAction.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,qBACa,sBAAuB,SAAQ,cAAc;IAI3C,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;IAC3B,gBAAgB,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;IAChD,aAAa;gBAFb,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAC,EAAO,EAChC,gBAAgB,GAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,EAAO,EACrD,aAAa,UAAO;cAMZ,OAAO,CAAC,SAAS,EAAE,MAAM;IAmD5C,QAAQ,CAAC,IAAI,EAAE,QAAQ;IA0BvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAgB3B"} \ No newline at end of file +{"version":3,"file":"TemplateMaterialAction.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/Action/TemplateMaterialAction.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,qBACa,sBAAuB,SAAQ,cAAc;IAI3C,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE;IAC3B,gBAAgB,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;IAChD,aAAa;gBAFb,OAAO,GAAE,QAAQ,CAAC,MAAM,CAAC,EAAO,EAChC,gBAAgB,GAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,EAAO,EACrD,aAAa,UAAO;cAMZ,OAAO,CAAC,SAAS,EAAE,MAAM;IAsE5C,QAAQ,CAAC,IAAI,EAAE,QAAQ;IA0BvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAgB3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/Action/TemplateaRadiusAction.d.ts b/types/DatabaseServices/Template/Action/TemplateaRadiusAction.d.ts new file mode 100644 index 0000000..2c8743c --- /dev/null +++ b/types/DatabaseServices/Template/Action/TemplateaRadiusAction.d.ts @@ -0,0 +1,20 @@ +import { CADFiler } from "../../CADFiler"; +import { I2DModeling } from "../../Entity/Board"; +import { ExtrudeSolid } from "../../Entity/Extrude"; +import { TemplateFilletAction } from "./TemplateFilletAction"; +export declare enum TempalteActionRadiusType { + Radius = 0, + Bulge = 1,//凸度模式 + Height = 2 +} +export declare class TemplateaRadiusAction extends TemplateFilletAction { + IsBigArc: boolean; + RadiusType: TempalteActionRadiusType; + constructor(radiusType: TempalteActionRadiusType); + protected Fillet(br: ExtrudeSolid | I2DModeling, newValue: number, d: { + ArcParams: number[]; + }): void; + ReadFile(file: CADFiler): void; + WriteFile(file: CADFiler): void; +} +//# sourceMappingURL=TemplateaRadiusAction.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Template/Action/TemplateaRadiusAction.d.ts.map b/types/DatabaseServices/Template/Action/TemplateaRadiusAction.d.ts.map new file mode 100644 index 0000000..ab7f894 --- /dev/null +++ b/types/DatabaseServices/Template/Action/TemplateaRadiusAction.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"TemplateaRadiusAction.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/Action/TemplateaRadiusAction.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAiB9D,oBAAY,wBAAwB;IAEhC,MAAM,IAAI;IACV,KAAK,IAAI,CAAC,MAAM;IAChB,MAAM,IAAI;CACb;AAGD,qBACa,qBAAsB,SAAQ,oBAAoB;IAE/C,QAAQ,UAAS;IACjB,UAAU,2BAAmC;gBAE7C,UAAU,EAAE,wBAAwB;cAO7B,MAAM,CAAC,EAAE,EAAE,YAAY,GAAG,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,EAAE,CAAC;KAAE;IA6DvG,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAiBvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAQ3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/GetTempAndCorrSpace.d.ts b/types/DatabaseServices/Template/GetTempAndCorrSpace.d.ts new file mode 100644 index 0000000..f0ab46a --- /dev/null +++ b/types/DatabaseServices/Template/GetTempAndCorrSpace.d.ts @@ -0,0 +1,9 @@ +import { TemplateRecord } from "./TemplateRecord"; +/** + * 获取模板及对应的空间(默认获取根空间) + * @param {TemplateRecord} temp 模板(只处理门板、抽屉、格子抽格子对应的空间) + * @param {boolean} [onlyGroup=false] 是否只返回单个组 + * @return {*} {TemplateRecord} 返回对应的空间 + */ +export declare function GetTempAndCorrSpace(temp: TemplateRecord, onlyGroup?: boolean): TemplateRecord; +//# sourceMappingURL=GetTempAndCorrSpace.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Template/GetTempAndCorrSpace.d.ts.map b/types/DatabaseServices/Template/GetTempAndCorrSpace.d.ts.map new file mode 100644 index 0000000..8e8a886 --- /dev/null +++ b/types/DatabaseServices/Template/GetTempAndCorrSpace.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"GetTempAndCorrSpace.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Template/GetTempAndCorrSpace.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,GAAE,OAAe,GAAG,cAAc,CAsDpG"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/Param/TemplateParam.d.ts.map b/types/DatabaseServices/Template/Param/TemplateParam.d.ts.map index 0a9d6f0..3266af9 100644 --- a/types/DatabaseServices/Template/Param/TemplateParam.d.ts.map +++ b/types/DatabaseServices/Template/Param/TemplateParam.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateParam.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/Param/TemplateParam.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;GAEG;AACH,qBACa,aAAa;IAEtB;;;OAGG;IACS,IAAI,EAAE,MAAM,CAAC;IACzB,uBAAuB;IACX,IAAI,EAAE,MAAM,GAAG,MAAM,CAAM;IACvC;;;OAGG;IACS,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,iBAAiB,CAA2B;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IAEZ,MAAM,EAAE,GAAG,EAAE,CAAC;IACd,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,UAAS;IAG3B,aAAa,EAAE,sBAAsB,CAAC;;IAyBtC,oBAAoB;IAMpB;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IA4ClC;;;;OAIG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,MAAM,UAAO,GAAG,MAAM;IA0EvH,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAqBvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAkB3B"} \ No newline at end of file +{"version":3,"file":"TemplateParam.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/Param/TemplateParam.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;GAEG;AACH,qBACa,aAAa;IAEtB;;;OAGG;IACS,IAAI,EAAE,MAAM,CAAC;IACzB,uBAAuB;IACX,IAAI,EAAE,MAAM,GAAG,MAAM,CAAM;IACvC;;;OAGG;IACS,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,iBAAiB,CAA2B;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IAEZ,MAAM,EAAE,GAAG,EAAE,CAAC;IACd,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,UAAS;IAG3B,aAAa,EAAE,sBAAsB,CAAC;;IAyBtC,oBAAoB;IAMpB;;;OAGG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IA4ClC;;;;OAIG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,aAAa,CAAC,EAAE,MAAM,UAAO,GAAG,MAAM;IA8EvH,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAqBvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAkB3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/Positioning/PositioningClampSpace.d.ts b/types/DatabaseServices/Template/Positioning/PositioningClampSpace.d.ts index c39c566..10d9842 100644 --- a/types/DatabaseServices/Template/Positioning/PositioningClampSpace.d.ts +++ b/types/DatabaseServices/Template/Positioning/PositioningClampSpace.d.ts @@ -5,10 +5,9 @@ import { Entity } from "../../Entity/Entity"; import { ObjectId } from "../../ObjectId"; import { Positioning, PositioningParam } from "./Positioning"; export declare class PositioningClampSpace extends Positioning { - Objects: ObjectId[]; + Objects: ObjectId[]; SelectBoxIndex: number[]; SignalDist: number; - IntersectSpaceEntitys: Entity[]; FromSpaceParse(parse: ClampSpaceParse): void; _SpaceParse: ClampSpaceParseFix; /** diff --git a/types/DatabaseServices/Template/Positioning/PositioningClampSpace.d.ts.map b/types/DatabaseServices/Template/Positioning/PositioningClampSpace.d.ts.map index e1b0302..cc3bfe7 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":"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,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,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;IAG7B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAEhC,cAAc,CAAC,KAAK,EAAE,eAAe;IAYrC,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,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,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,CAAC,MAAM,CAAC,EAAE,CAAM;IAGjC,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/Positioning/PositioningTemporary.d.ts b/types/DatabaseServices/Template/Positioning/PositioningTemporary.d.ts index 8db9d1c..aa723b5 100644 --- a/types/DatabaseServices/Template/Positioning/PositioningTemporary.d.ts +++ b/types/DatabaseServices/Template/Positioning/PositioningTemporary.d.ts @@ -1,10 +1,8 @@ -import { Entity } from "../../Entity/Entity"; import { Positioning } from "./Positioning"; /** * 临时定位 * 在首次绘制时使用2点3点空间时通常不能使用定位,使用临时定位设置给模块后,模块在第一次使用后清空定位. */ export declare class PositioningTemporary extends Positioning { - IntersectSpaceEntitys: Entity[]; } //# sourceMappingURL=PositioningTemporary.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Template/Positioning/PositioningTemporary.d.ts.map b/types/DatabaseServices/Template/Positioning/PositioningTemporary.d.ts.map index 9f83e84..b77ab28 100644 --- a/types/DatabaseServices/Template/Positioning/PositioningTemporary.d.ts.map +++ b/types/DatabaseServices/Template/Positioning/PositioningTemporary.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"PositioningTemporary.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/Positioning/PositioningTemporary.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;;GAGG;AACH,qBACa,oBAAqB,SAAQ,WAAW;IAGjD,qBAAqB,EAAE,MAAM,EAAE,CAAC;CACnC"} \ No newline at end of file +{"version":3,"file":"PositioningTemporary.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/Positioning/PositioningTemporary.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;;GAGG;AACH,qBACa,oBAAqB,SAAQ,WAAW;CAGpD"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/ProgramTempate/TemplateBehindBoard.d.ts b/types/DatabaseServices/Template/ProgramTempate/TemplateBehindBoard.d.ts index d72ff6a..0fca622 100644 --- a/types/DatabaseServices/Template/ProgramTempate/TemplateBehindBoard.d.ts +++ b/types/DatabaseServices/Template/ProgramTempate/TemplateBehindBoard.d.ts @@ -10,7 +10,9 @@ export declare class TemplateBehindBoard extends TemplateBoardRecord { private grooveoption; constructor(); set Grooveoption(option: IGrooveOption); - GeneralBoardList(space: ISpaceParse): import("../../Entity/Board").Board[]; + get Option(): BehindBoardOption; + set Option(option: BehindBoardOption); + GeneralBoardList(space: ISpaceParse): Promise; ReadFile(file: CADFiler): void; WriteFile(file: CADFiler): void; } diff --git a/types/DatabaseServices/Template/ProgramTempate/TemplateBehindBoard.d.ts.map b/types/DatabaseServices/Template/ProgramTempate/TemplateBehindBoard.d.ts.map index a3843b9..71097c7 100644 --- a/types/DatabaseServices/Template/ProgramTempate/TemplateBehindBoard.d.ts.map +++ b/types/DatabaseServices/Template/ProgramTempate/TemplateBehindBoard.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateBehindBoard.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/ProgramTempate/TemplateBehindBoard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AAEtG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;GAEG;AACH,qBACa,mBAAoB,SAAQ,mBAAmB;IAExD,SAAS,CAAC,OAAO,EAAE,iBAAiB,CAAmC;IACvE,OAAO,CAAC,YAAY,CAKlB;;IAMF,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,EAIrC;IACD,gBAAgB,CAAC,KAAK,EAAE,WAAW;IAInC,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAoCvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CA2B3B"} \ No newline at end of file +{"version":3,"file":"TemplateBehindBoard.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/ProgramTempate/TemplateBehindBoard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AAEtG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;GAEG;AACH,qBACa,mBAAoB,SAAQ,mBAAmB;IAExD,SAAS,CAAC,OAAO,EAAE,iBAAiB,CAAmC;IACvE,OAAO,CAAC,YAAY,CAKlB;;IAMF,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,EAIrC;IACD,IAAI,MAAM,IAUS,iBAAiB,CADnC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAWnC;IAEK,gBAAgB,CAAC,KAAK,EAAE,WAAW;IAsBzC,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAqCvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CA2B3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/ProgramTempate/TemplateBoard.d.ts b/types/DatabaseServices/Template/ProgramTempate/TemplateBoard.d.ts index 87aaa63..6671574 100644 --- a/types/DatabaseServices/Template/ProgramTempate/TemplateBoard.d.ts +++ b/types/DatabaseServices/Template/ProgramTempate/TemplateBoard.d.ts @@ -1,8 +1,9 @@ import { ISpaceParse } from "../../../Geometry/SpaceParse/ISpaceParse"; import { BoardProcessOption } from "../../../UI/Store/OptionInterface/BoardProcessOption"; -import { BoardConfigOption } from "../../../UI/Store/OptionInterface/IOptionInterface"; +import { BoardConfigOption, IGrooveOption } from "../../../UI/Store/OptionInterface/IOptionInterface"; import { CADFiler } from "../../CADFiler"; import { Board } from "../../Entity/Board"; +import { ObjectId } from "../../ObjectId"; import { TemplateRecord } from "../TemplateRecord"; /** * 板件模板的基类.(层板,立板,背板) @@ -11,10 +12,13 @@ export declare class TemplateBoardRecord extends TemplateRecord { UseBoardProcessOption: boolean; BoardProcessOption: BoardProcessOption; DrawBoardCount: number; + protected IntersectSpaceEntitys: Set; + protected IntersectHighDrill: string[]; protected _option: BoardConfigOption; get Option(): BoardConfigOption; set Option(option: BoardConfigOption); - protected GeneralBoardList(space: ISpaceParse): Board[]; + set GrooveOption(option: IGrooveOption); + protected GeneralBoardList(space: ISpaceParse): Promise; Purge(): void; protected Update(): Promise; ReadFile(file: CADFiler): void; diff --git a/types/DatabaseServices/Template/ProgramTempate/TemplateBoard.d.ts.map b/types/DatabaseServices/Template/ProgramTempate/TemplateBoard.d.ts.map index 49e671b..ea708ad 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":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sDAAsD,CAAC;AAC1F,OAAO,EAAE,iBAAiB,EAAE,MAAM,oDAAoD,CAAC;AAGvF,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;IAwFtB,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":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sDAAsD,CAAC;AAC1F,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AAGtG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,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;IAG/B,SAAS,CAAC,qBAAqB,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE/C,SAAS,CAAC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAEvC,SAAS,CAAC,OAAO,EAAE,iBAAiB,CAAC;IAMrC,IAAI,MAAM,IAIS,iBAAiB,CADnC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAKnC;IAED,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,EAAK;cAE3B,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAKtE,KAAK;cAOW,MAAM;IA+ItB,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/TemplateLatticeRecord.d.ts.map b/types/DatabaseServices/Template/ProgramTempate/TemplateLatticeRecord.d.ts.map index c7517f7..6469e60 100644 --- a/types/DatabaseServices/Template/ProgramTempate/TemplateLatticeRecord.d.ts.map +++ b/types/DatabaseServices/Template/ProgramTempate/TemplateLatticeRecord.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateLatticeRecord.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/ProgramTempate/TemplateLatticeRecord.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,qBACa,qBAAsB,SAAQ,cAAc;IAErD,OAAO,CAAC,MAAM,CAA+C;;IAM7D,IAAI,MAAM,IAIS,cAAc,CADhC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,EAKhC;cAQe,MAAM;IAsDtB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAoCvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAgC3B"} \ No newline at end of file +{"version":3,"file":"TemplateLatticeRecord.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/ProgramTempate/TemplateLatticeRecord.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,qBACa,qBAAsB,SAAQ,cAAc;IAErD,OAAO,CAAC,MAAM,CAA+C;;IAM7D,IAAI,MAAM,IAIS,cAAc,CADhC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,cAAc,EAKhC;cAQe,MAAM;IAkEtB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IA4CvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAsC3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/ProgramTempate/TemplateLayerBoard.d.ts b/types/DatabaseServices/Template/ProgramTempate/TemplateLayerBoard.d.ts index 50928a6..1eecee2 100644 --- a/types/DatabaseServices/Template/ProgramTempate/TemplateLayerBoard.d.ts +++ b/types/DatabaseServices/Template/ProgramTempate/TemplateLayerBoard.d.ts @@ -2,6 +2,7 @@ import { ISpaceParse } from "../../../Geometry/SpaceParse/ISpaceParse"; import { IGrooveOption, LayerBoardOption, LayerNailOption } from "../../../UI/Store/OptionInterface/IOptionInterface"; import { CADFiler } from "../../CADFiler"; import { Board } from "../../Entity/Board"; +import { ObjectId } from "../../ObjectId"; import { TemplateBoardRecord } from "./TemplateBoard"; /** * 层板模板 @@ -11,10 +12,14 @@ export declare class TemplateLayerBoard extends TemplateBoardRecord { protected _option: LayerBoardOption; private _nailOption; private grooveOption; + get Option(): LayerBoardOption; + set Option(option: LayerBoardOption); + IntersectSpaceEntitys: Set; + IntersectHighDrill: string[]; set GrooveOption(option: IGrooveOption); get NailOption(): LayerNailOption; set NailOption(nailOpt: LayerNailOption); - GeneralBoardList(space: ISpaceParse): Board[]; + GeneralBoardList(space: ISpaceParse): Promise; protected Update(): Promise; ReadFile(file: CADFiler): void; WriteFile(file: CADFiler): void; diff --git a/types/DatabaseServices/Template/ProgramTempate/TemplateLayerBoard.d.ts.map b/types/DatabaseServices/Template/ProgramTempate/TemplateLayerBoard.d.ts.map index b75b906..2982f79 100644 --- a/types/DatabaseServices/Template/ProgramTempate/TemplateLayerBoard.d.ts.map +++ b/types/DatabaseServices/Template/ProgramTempate/TemplateLayerBoard.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateLayerBoard.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/ProgramTempate/TemplateLayerBoard.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oDAAoD,CAAC;AAEtH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;GAEG;AACH,qBACa,kBAAmB,SAAQ,mBAAmB;;IAOvD,SAAS,CAAC,OAAO,EAAE,gBAAgB,CAAkC;IACrE,OAAO,CAAC,WAAW,CAA6C;IAChE,OAAO,CAAC,YAAY,CAKlB;IACF,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,EAIrC;IACD,IAAI,UAAU,IAIU,eAAe,CADtC;IACD,IAAI,UAAU,CAAC,OAAO,EAAE,eAAe,EAItC;IAED,gBAAgB,CAAC,KAAK,EAAE,WAAW;cAInB,MAAM;IAiBtB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IA8DvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAyC3B"} \ No newline at end of file +{"version":3,"file":"TemplateLayerBoard.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/ProgramTempate/TemplateLayerBoard.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,oDAAoD,CAAC;AAEtH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;GAEG;AACH,qBACa,kBAAmB,SAAQ,mBAAmB;;IAOvD,SAAS,CAAC,OAAO,EAAE,gBAAgB,CAAkC;IACrE,OAAO,CAAC,WAAW,CAA6C;IAChE,OAAO,CAAC,YAAY,CAKlB;IACF,IAAI,MAAM,IAWS,gBAAgB,CAFlC;IAED,IAAI,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAWlC;IAGD,qBAAqB,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAa;IACjD,kBAAkB,EAAE,MAAM,EAAE,CAAM;IAClC,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,EAIrC;IACD,IAAI,UAAU,IAIU,eAAe,CADtC;IACD,IAAI,UAAU,CAAC,OAAO,EAAE,eAAe,EAItC;IAEK,gBAAgB,CAAC,KAAK,EAAE,WAAW;cAuBzB,MAAM;IAyBtB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IA+EvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAkD3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard.d.ts b/types/DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard.d.ts index ff27f02..fa3083f 100644 --- a/types/DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard.d.ts +++ b/types/DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard.d.ts @@ -8,6 +8,7 @@ export declare class TemplateTopBottomBoard extends TemplateRecord { private _bottomOption; UseBoardProcessOption: boolean; BoardProcessOption: BoardProcessOption; + isChangeBigHole: boolean; DrawCounts: [number, number, number]; constructor(); get TopOption(): TBBoardOption; diff --git a/types/DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard.d.ts.map b/types/DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard.d.ts.map index 484c237..f40df71 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":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sDAAsD,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AAGnF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C,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;IA2GtB,OAAO,CAAC,eAAe;IAoCvB,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":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sDAAsD,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAC;AAGnF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C,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;IACvC,eAAe,UAAS;IACZ,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;IA4HtB,OAAO,CAAC,eAAe;IA4BvB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IA2CvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAwC3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/ProgramTempate/TemplateVerticalBoard.d.ts b/types/DatabaseServices/Template/ProgramTempate/TemplateVerticalBoard.d.ts index a5d19f9..e8df438 100644 --- a/types/DatabaseServices/Template/ProgramTempate/TemplateVerticalBoard.d.ts +++ b/types/DatabaseServices/Template/ProgramTempate/TemplateVerticalBoard.d.ts @@ -1,6 +1,7 @@ import { ISpaceParse } from "../../../Geometry/SpaceParse/ISpaceParse"; import { IGrooveOption, VerticalBoardOption } from "../../../UI/Store/OptionInterface/IOptionInterface"; import { CADFiler } from "../../CADFiler"; +import { ObjectId } from "../../ObjectId"; import { TemplateBoardRecord } from "./TemplateBoard"; /** * 立板模板 @@ -10,7 +11,11 @@ export declare class TemplateVerticalBoard extends TemplateBoardRecord { protected _option: VerticalBoardOption; private grooveOption; set GrooveOption(option: IGrooveOption); - GeneralBoardList(space: ISpaceParse): import("../../Entity/Board").Board[]; + get Option(): VerticalBoardOption; + set Option(option: VerticalBoardOption); + IntersectSpaceEntitys: Set; + IntersectHighDrill: string[]; + GeneralBoardList(space: ISpaceParse): Promise; ReadFile(file: CADFiler): void; WriteFile(file: CADFiler): void; } diff --git a/types/DatabaseServices/Template/ProgramTempate/TemplateVerticalBoard.d.ts.map b/types/DatabaseServices/Template/ProgramTempate/TemplateVerticalBoard.d.ts.map index bf49362..732045d 100644 --- a/types/DatabaseServices/Template/ProgramTempate/TemplateVerticalBoard.d.ts.map +++ b/types/DatabaseServices/Template/ProgramTempate/TemplateVerticalBoard.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateVerticalBoard.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/ProgramTempate/TemplateVerticalBoard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAC;AAExG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;GAEG;AACH,qBACa,qBAAsB,SAAQ,mBAAmB;;IAO1D,SAAS,CAAC,OAAO,EAAE,mBAAmB,CAAqC;IAC3E,OAAO,CAAC,YAAY,CAKlB;IACF,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,EAIrC;IACD,gBAAgB,CAAC,KAAK,EAAE,WAAW;IAInC,QAAQ,CAAC,IAAI,EAAE,QAAQ;IA4CvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CA0B3B"} \ No newline at end of file +{"version":3,"file":"TemplateVerticalBoard.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/ProgramTempate/TemplateVerticalBoard.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAC;AAExG,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;GAEG;AACH,qBACa,qBAAsB,SAAQ,mBAAmB;;IAO1D,SAAS,CAAC,OAAO,EAAE,mBAAmB,CAAqC;IAC3E,OAAO,CAAC,YAAY,CAKlB;IACF,IAAI,YAAY,CAAC,MAAM,EAAE,aAAa,EAIrC;IAED,IAAI,MAAM,IAUS,mBAAmB,CADrC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAWrC;IAGD,qBAAqB,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAa;IACjD,kBAAkB,EAAE,MAAM,EAAE,CAAM;IAE5B,gBAAgB,CAAC,KAAK,EAAE,WAAW;IAuBzC,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAqFvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAoC3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord.d.ts.map b/types/DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord.d.ts.map index 9b458cd..a33228c 100644 --- a/types/DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord.d.ts.map +++ b/types/DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateWineRackRecord.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord.ts"],"names":[],"mappings":"AAQA,OAAO,EAAiB,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAErF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,qBACa,sBAAuB,SAAQ,cAAc;IAEtD,OAAO,CAAC,MAAM,CAAiD;;IAM/D,IAAI,MAAM,IAIS,eAAe,CADjC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,EAKjC;cACe,MAAM;IAmDtB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IA2CvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAsC3B"} \ No newline at end of file +{"version":3,"file":"TemplateWineRackRecord.d.ts","sourceRoot":"","sources":["../../../../../src/DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord.ts"],"names":[],"mappings":"AAQA,OAAO,EAAiB,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAErF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,qBACa,sBAAuB,SAAQ,cAAc;IAEtD,OAAO,CAAC,MAAM,CAAiD;;IAM/D,IAAI,MAAM,IAIS,eAAe,CADjC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,EAKjC;cACe,MAAM;IAmDtB,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAmDvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CA4C3B"} \ No newline at end of file diff --git a/types/DatabaseServices/Template/TempateUtils.d.ts b/types/DatabaseServices/Template/TempateUtils.d.ts index a9227c9..9273d7b 100644 --- a/types/DatabaseServices/Template/TempateUtils.d.ts +++ b/types/DatabaseServices/Template/TempateUtils.d.ts @@ -6,11 +6,8 @@ import { Board } from "../Entity/Board"; import { Entity } from './../Entity/Entity'; import { TemplateAction } from "./Action/TemplateAction"; import { TemplateFilletAction } from "./Action/TemplateFilletAction"; +import { TempalteActionRadiusType } from "./Action/TemplateaRadiusAction"; import { TemplateRecord } from "./TemplateRecord"; -/** - * 得到最深处的模块节点 - */ -export declare function GetDeepestTemplate(brs: Entity[]): TemplateRecord | undefined; /** * 获得模块的尺寸 */ @@ -68,6 +65,10 @@ export declare function UpdateTempateBoardThicknessAction(template: TemplateReco * @param [useScaleBox=false] 使用比例盒子,否则使用夹点拽拖 */ export declare function AddStretchAction(template: TemplateRecord, useScaleBox?: boolean): Promise; +export declare enum ArcActionType { + Fillet = 0, + Radius = 1 +} /** * 增加倒角动作 * @@ -75,7 +76,7 @@ export declare function AddStretchAction(template: TemplateRecord, useScaleBox?: * @param template * @returns */ -export declare function AddFilletAction(template: TemplateRecord): Promise; +export declare function AddFilletAction(template: TemplateRecord, actionType?: ArcActionType, radiusType?: TempalteActionRadiusType): Promise; /** * 上传模块 * @param template 模块 @@ -93,7 +94,14 @@ export declare function UploadUpdateTemplate(template: TemplateRecord, templateI /** * 删除模块节点,同时会删除其子节点 */ -export declare function DeleteTempate(template: TemplateRecord): void; +export declare function DeleteTempate(template: TemplateRecord, reserveSpace?: boolean): Promise; +/** + * 删除模板及其对应的空间(默认删除根空间) + * @param {TemplateRecord} template 模板 + * @param {boolean} [onlyGroup=false] 是否只删除到组 + * @return {*} {Promise} 被删除的对应空间 + */ +export declare function DeleteTempAndCorrSpace(template: TemplateRecord, onlyGroup?: boolean): Promise; export declare function CheckTempalteParamName(name: string, nameSet: Set): boolean; export declare function GetOnlineTemplate(tid: string, props?: ITemplateParam[], isShowErrMsg?: boolean): Promise; export declare function EditorOnlineTemplate(template: TemplateRecord, module_id: string, isCheck: boolean, diy_logo?: string): Promise; @@ -111,5 +119,15 @@ export declare function ReplaceTemplate(oldTemp: TemplateRecord, newTemp: Templa * 删除当前模块节点 */ export declare function DeleteCurrentTempate(template: TemplateRecord): void; -export declare function SetTemplatePositionAndSetParent(spaceParse: ISpaceParse, template: TemplateRecord, isAddDeepNode?: boolean, option?: IGetRoomInfo): Promise; +/** + * 分析设置模块空间层级关系 + * + * @export + * @param {ISpaceParse} spaceParse + * @param {TemplateRecord} template + * @param {boolean} [isAddDeepNode=true] + * @param {IGetRoomInfo} [option] + * @param {Entity[]} [effectBoards=[]] 绘制缺口单板时 分析切割缺口的实体 + */ +export declare function SetTemplatePositionAndSetParent(spaceParse: ISpaceParse, template: TemplateRecord, isAddDeepNode?: boolean, option?: IGetRoomInfo, effectBoards?: Entity[]): Promise; //# sourceMappingURL=TempateUtils.d.ts.map \ 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 a0423a2..92132c8 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 b/types/DatabaseServices/Template/TemplateRecord.d.ts index f54f2b0..58d12dd 100644 --- a/types/DatabaseServices/Template/TemplateRecord.d.ts +++ b/types/DatabaseServices/Template/TemplateRecord.d.ts @@ -29,9 +29,10 @@ export declare class TemplateRecord extends SymbolTableRecord { Type: TemplateType; SplitType: TemplateSplitType; private _Parent; - Children: ObjectId[]; + Children: ObjectId[]; + EffectTemplates: ObjectId[]; Params: TemplateParam[]; - Objects: ObjectId[]; + Objects: ObjectId[]; private _Positioning; isExpanded: boolean; constructor(); @@ -59,6 +60,7 @@ export declare class TemplateRecord extends SymbolTableRecord { private _NodeDepthCache; /** 节点深度,根节点=0 */ get NodeDepth(): number; + get NodeIndex(): number; /** 模版定位 */ get Positioning(): Positioning; /** @@ -125,13 +127,13 @@ export declare class TemplateRecord extends SymbolTableRecord { protected _CacheSpaceCS: Matrix4; protected _CacheSpaceSize: Vector3; protected _CatchRootParam: Set; - protected _CacheIntersectSpaceEntitys: Entity[]; /** * 本节点可用的所有变量定义.(包括变量继承) * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新) * @returns */ GetParameterDefinition(useCache?: boolean): any; + ClearParameterDefinitionCache(): void; /** * 变量继承 * - 每继承一层,前缀增加一个`_` diff --git a/types/DatabaseServices/Template/TemplateRecord.d.ts.map b/types/DatabaseServices/Template/TemplateRecord.d.ts.map index f06abb0..8d98cf7 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 44bed97..fc29ac2 100644 --- a/types/DatabaseServices/Template/TemplateType.d.ts +++ b/types/DatabaseServices/Template/TemplateType.d.ts @@ -13,7 +13,9 @@ export declare enum TemplateType { Door = 128,//门板 Drawer = 256,//抽屉 Handle = 512,//拉手 - Hinge = 1024 + Hinge = 1024,//铰链 + DoorRSpace = 2048,// 根空间 (门板) + DrawerRSpace = 4096 } 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 91e77ed..57e3c5c 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;IAGT,IAAI,MAAM,CAAC,IAAI;IACf,MAAM,MAAM,CAAC,IAAI;IACjB,MAAM,MAAM,CAAC,IAAI;IACjB,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 +{"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,CAAC,IAAI;IACf,MAAM,MAAM,CAAC,IAAI;IACjB,MAAM,MAAM,CAAC,IAAI;IACjB,KAAK,OAAO,CAAC,IAAI;IAEjB,UAAU,OAAO,CAAC,WAAW;IAC7B,YAAY,OAAO;CACtB;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/Text/FontExt.d.ts b/types/DatabaseServices/Text/FontExt.d.ts index 2e640d7..57e793c 100644 --- a/types/DatabaseServices/Text/FontExt.d.ts +++ b/types/DatabaseServices/Text/FontExt.d.ts @@ -1,5 +1,12 @@ import { Font, Shape } from "three"; export declare class FontExt extends Font { - generateShapes(text: string, size?: number): Shape[]; + /** + * @param {string} text + * @param {number} [size=100] + * @param {number} [widthFactor=1] 宽度因子 + * @return {*} + * @memberof FontExt + */ + generateShapes(text: string, size?: number, widthFactor?: number): Shape[]; } //# sourceMappingURL=FontExt.d.ts.map \ No newline at end of file diff --git a/types/DatabaseServices/Text/FontExt.d.ts.map b/types/DatabaseServices/Text/FontExt.d.ts.map index d7afba9..b911203 100644 --- a/types/DatabaseServices/Text/FontExt.d.ts.map +++ b/types/DatabaseServices/Text/FontExt.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"FontExt.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Text/FontExt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAQ,KAAK,EAAsB,MAAM,OAAO,CAAC;AAO9D,qBAAa,OAAQ,SAAQ,IAAI;IAE7B,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAY;CAQlD"} \ No newline at end of file +{"version":3,"file":"FontExt.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Text/FontExt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAQ,KAAK,EAAsB,MAAM,OAAO,CAAC;AAO9D,qBAAa,OAAQ,SAAQ,IAAI;IAE7B;;;;;;OAMG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,MAAY,EAAE,WAAW,SAAI;CAQnE"} \ No newline at end of file diff --git a/types/DatabaseServices/Text/Text.d.ts b/types/DatabaseServices/Text/Text.d.ts index d98626b..54dfdb9 100644 --- a/types/DatabaseServices/Text/Text.d.ts +++ b/types/DatabaseServices/Text/Text.d.ts @@ -1,9 +1,13 @@ import { Matrix3, Matrix4, Object3D, Vector3 } from 'three'; +import { FontType } from '../../Add-on/TextStyle/FontStyleInterface'; import { ObjectSnapMode } from '../../Editor/ObjectSnapMode'; import { Box3Ext } from '../../Geometry/Box'; import { RenderType } from '../../GraphicsSystem/RenderType'; import { CADFiler } from '../CADFiler'; import { Entity } from '../Entity/Entity'; +import { FontStyleKeyCode } from '../FontStyle/FontStyleKeyCodeEnum'; +import { ObjectId } from '../ObjectId'; +export declare const TEXT_HEIGHT_SCALE = 1.35; export declare enum TextAligen { LeftTop = 3, Top = 1, @@ -17,26 +21,46 @@ export declare enum TextAligen { } export declare function DisposeTextShapeCache(): void; /** - * 单行文字实体 + * 单/多行文字实体 */ export declare class Text extends Entity { private _TextString; - _FontName: string; - private _Height; private _TextRotation; protected OnlyRenderType: boolean; + protected _FontStyle: ObjectId; + protected _FontStyleOverride: Map; + protected _RoomName: string; + protected _CabinetName: string; + private _Align; IsDoubleMesh: boolean; IsFsText: boolean; - private _Align; - constructor(pos?: Vector3, _TextString?: string, _FontName?: string, _Height?: number, _TextRotation?: number); + constructor(pos?: Vector3, _TextString?: string, _TextRotation?: number, fontName?: FontType, widthFactor?: number); + get RoomName(): string; + set RoomName(value: string); + get CabinetName(): string; + set CabinetName(value: string); get TextRotation(): number; set TextRotation(v: number); get TextString(): string; set TextString(str: string); set TextAligen(al: TextAligen); get TextAligen(): TextAligen; + /**设置字体样式 */ + set FontStyle(styleId: ObjectId); + /**大概多行文字的高度 */ + get MultiHeight(): number; + get FontStyle(): ObjectId; + get FontName(): FontType; + set FontName(fontName: FontType); get Height(): number; - set Height(v: number); + set Height(value: number); + get WidthFactor(): number; + set WidthFactor(value: number); + get FontStyleOverride(): Map; + GetFontStyleOverrideValue(key: FontStyleKeyCode): any; + GetFontStyleValue(key: FontStyleKeyCode): any; + SetFontStyleOverrideValue(key: FontStyleKeyCode, value: any): void; + ClearFontStyleOverride(): void; AsyncUpdateDrawObject(obj: Object3D, renderType: RenderType): Promise; /**大概宽度 */ get Width(): number; @@ -55,6 +79,8 @@ export declare class Text extends Entity { GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3, viewXform?: Matrix3): Vector3[]; GetStretchPoints(): Array; MoveStretchPoints(indexList: Array, vec: Vector3): void; + protected ReadFontStyle(file: CADFiler): void; + protected WriteFontStyle(file: CADFiler): void; protected _ReadFile(file: CADFiler): void; WriteFile(file: CADFiler): void; } diff --git a/types/DatabaseServices/Text/Text.d.ts.map b/types/DatabaseServices/Text/Text.d.ts.map index 7b22548..c8cfaf1 100644 --- a/types/DatabaseServices/Text/Text.d.ts.map +++ b/types/DatabaseServices/Text/Text.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Text/Text.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,OAAO,EAAE,OAAO,EAAQ,QAAQ,EAAiB,OAAO,EAAE,MAAM,OAAO,CAAC;AAG3G,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE7C,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,oBAAY,UAAU;IAElB,OAAO,IAAI;IAAE,GAAG,IAAI;IAAE,QAAQ,IAAI;IAClC,OAAO,IAAI;IAAE,GAAG,IAAI;IAAE,QAAQ,IAAI;IAClC,QAAQ,KAAK;IAAE,IAAI,IAAI;IAAE,SAAS,KAAK;CAC1C;AAGD,wBAAgB,qBAAqB,SAKpC;AAED;;GAEG;AACH,qBACa,IAAK,SAAQ,MAAM;IASxB,OAAO,CAAC,WAAW;IACZ,SAAS,EAAE,MAAM;IACxB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,aAAa;IAVzB,SAAS,CAAC,cAAc,UAAQ;IAEhC,YAAY,UAAS;IACrB,QAAQ,UAAS;IAEjB,OAAO,CAAC,MAAM,CAAmC;gBACrC,GAAG,CAAC,EAAE,OAAO,EACb,WAAW,GAAE,MAAW,EACzB,SAAS,GAAE,MAAiB,EAC3B,OAAO,GAAE,MAAW,EACpB,aAAa,GAAE,MAAU;IAMrC,IAAI,YAAY,IAII,MAAM,CADzB;IACD,IAAI,YAAY,CAAC,CAAC,EAAE,MAAM,EAOzB;IACD,IAAI,UAAU,IAIM,MAAM,CADzB;IACD,IAAI,UAAU,CAAC,GAAG,EAAE,MAAM,EAQzB;IAED,IAAI,UAAU,CAAC,EAAE,EAAE,UAAU,EAM5B;IACD,IAAI,UAAU,IAPK,UAAU,CAU5B;IAED,IAAI,MAAM,IAII,MAAM,CADnB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAOnB;IAEK,qBAAqB,CAAC,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU;IAIjE,UAAU;IACV,IAAI,KAAK,WAYR;IAED,IAAI,cAAc,YAA8D;IAEhF,IAAI,WAAW,mCAOd;IAED,IAAI,gBAAgB,IAAI,OAAO,CAsC9B;IAED,eAAe;IAQf,OAAO,CAAC,qBAAqB;IAuD7B,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAM7B,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI;IAW5C,cAAc,CAAC,UAAU,GAAE,UAAiC,GAAG,QAAQ;IAqBvE,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ;IAIhD,wBAAwB,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ;IAU7D,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC;IAI/B,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO;IAYhD,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,CAAC,EAAE,OAAO,GACpB,OAAO,EAAE;IAcZ,gBAAgB,IAAI,KAAK,CAAC,OAAO,CAAC;IAIlC,iBAAiB,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO;IAQxD,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IAWlC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAW3B;AAGD,eAAO,MAAM,MAAM,aAAO,CAAC"} \ No newline at end of file +{"version":3,"file":"Text.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Text/Text.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/DatabaseServices/Text/TextArea.d.ts b/types/DatabaseServices/Text/TextArea.d.ts index 5e998b5..9174f9a 100644 --- a/types/DatabaseServices/Text/TextArea.d.ts +++ b/types/DatabaseServices/Text/TextArea.d.ts @@ -1,6 +1,11 @@ import { Vector3 } from 'three'; +import { FontType } from '../../Add-on/TextStyle/FontStyleInterface'; import { Singleton } from '../../Common/Singleton'; import { Text } from './Text'; +export interface TextRoomCabinetName { + roomName: string; + cabinetName: string; +} export declare class TextArea extends Singleton { private _AreaContiner; private _EditorElList; @@ -9,8 +14,10 @@ export declare class TextArea extends Singleton { private _TextRotation; private _CurrentValue; private _EditoringObject; + private _FontType; + private _TextRoomCabinetName; constructor(); - StartDrawText(position: Vector3, height: number, rotate: number, str: string): void; + StartDrawText(position: Vector3, height: number, rotate: number, str: string, fontType: FontType, textRoomCabinet?: TextRoomCabinetName): void; StartEditorText(textObj: any, editorPosition?: Vector3): void; WorldToScreenHeight(h: number): number; CreateEditorArea(position?: Vector3): void; diff --git a/types/DatabaseServices/Text/TextArea.d.ts.map b/types/DatabaseServices/Text/TextArea.d.ts.map index 635b3c9..704d9e9 100644 --- a/types/DatabaseServices/Text/TextArea.d.ts.map +++ b/types/DatabaseServices/Text/TextArea.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TextArea.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Text/TextArea.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,OAAO,EAAE,MAAM,OAAO,CAAC;AAI1C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAKnD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,qBAAa,QAAS,SAAQ,SAAS;IAEnC,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,aAAa,CAA2C;IAEhE,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,gBAAgB,CAAW;;IAenC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAU5E,eAAe,CAAC,OAAO,KAAA,EAAE,cAAc,CAAC,EAAE,OAAO;IAgCjD,mBAAmB,CAAC,CAAC,EAAE,MAAM;IAM7B,gBAAgB,CAAC,QAAQ,CAAC,EAAE,OAAO;IAgCnC,IAAI,cAAc,WAGjB;IACD,IAAI,aAAa,YAGhB;IAED,EAAE,EAAE,QAAQ,CAAC;IACb,aAAa;IAab,UAAU;IAOV,WAAW,aAIT;IACF,SAAS,MAAO,aAAa,UAW3B;IACF,OAAO,MAAO,UAAU,UAatB;IACF,MAAM,MAAa,KAAK,mBA0BtB;IAEF;;OAEG;IACG,SAAS;IA+Bf,cAAc,CAAC,IAAI,EAAE,IAAI;IACzB,OAAO,CAAC,UAAU,CAAkB;IAC9B,IAAI;CAQb"} \ No newline at end of file +{"version":3,"file":"TextArea.d.ts","sourceRoot":"","sources":["../../../../src/DatabaseServices/Text/TextArea.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,OAAO,EAAE,MAAM,OAAO,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AAIrE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAMnD,OAAO,EAAqB,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEjD,MAAM,WAAW,mBAAmB;IAEhC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACvB;AAGD,qBAAa,QAAS,SAAQ,SAAS;IAEnC,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,aAAa,CAA2C;IAEhE,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,gBAAgB,CAAW;IACnC,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,oBAAoB,CAAsB;;IAgBlD,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,CAAC,EAAE,mBAAmB;IAYvI,eAAe,CAAC,OAAO,KAAA,EAAE,cAAc,CAAC,EAAE,OAAO;IAgCjD,mBAAmB,CAAC,CAAC,EAAE,MAAM;IAM7B,gBAAgB,CAAC,QAAQ,CAAC,EAAE,OAAO;IAiCnC,IAAI,cAAc,WAGjB;IACD,IAAI,aAAa,YAGhB;IAED,EAAE,EAAE,QAAQ,CAAC;IACb,aAAa;IAab,UAAU;IAOV,WAAW,aAIT;IACF,SAAS,MAAO,aAAa,UAgB3B;IACF,OAAO,MAAO,UAAU,UAatB;IACF,MAAM,MAAa,KAAK,mBAwCtB;IAEF;;OAEG;IACG,SAAS;IA+Cf,cAAc,CAAC,IAAI,EAAE,IAAI;IACzB,OAAO,CAAC,UAAU,CAAkB;IAC9B,IAAI;CAQb"} \ No newline at end of file diff --git a/types/DatabaseServices/Texture.d.ts b/types/DatabaseServices/Texture.d.ts index 4bc70cd..2ba91f8 100644 --- a/types/DatabaseServices/Texture.d.ts +++ b/types/DatabaseServices/Texture.d.ts @@ -1,6 +1,11 @@ import { Texture, Wrapping } from 'three'; import { CADFiler } from './CADFiler'; import { SymbolTableRecord } from './SymbolTableRecord'; +export declare class TextureTableEventBus { + private static _SingleInstance; + static GetInstance(): TextureTableEventBus; + UpdateEvent(texture: TextureTableRecord): void; +} /** * 数据化的贴图类.实现了序列化. */ @@ -20,6 +25,7 @@ export declare class TextureTableRecord extends SymbolTableRecord { set WrapT(wrap: Wrapping); private texture; Update(): Promise; + TextureUpdate(): Promise; private waits; WaitUpdate(): Promise; GetThreeTexture(): Texture; diff --git a/types/DatabaseServices/Texture.d.ts.map b/types/DatabaseServices/Texture.d.ts.map index 39c1d91..9c1e36b 100644 --- a/types/DatabaseServices/Texture.d.ts.map +++ b/types/DatabaseServices/Texture.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Texture.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/Texture.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGlE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;GAEG;AACH,qBACa,kBAAmB,SAAQ,iBAAiB;IAErD,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,KAAK,CAAoC;IACrC,OAAO,EAAE,MAAM,CAAK;IACpB,OAAO,EAAE,MAAM,CAAK;IACpB,QAAQ,EAAE,MAAM,CAAK;IACrB,QAAQ,EAAE,MAAM,CAAM;IAEtB,KAAK,SAAK;IACV,KAAK,SAAK;IAEV,MAAM,EAAE,MAAM,CAAM;IAEhC,IAAI,KAAK,CAAC,IAAI,EAAE,QAAQ,EAOvB;IACD,IAAI,KAAK,IARO,QAAQ,CAQU;IAClC,IAAI,KAAK,IAEO,QAAQ,CAFU;IAElC,IAAI,KAAK,CAAC,IAAI,EAAE,QAAQ,EAOvB;IAGD,OAAO,CAAC,OAAO,CAA0B;IACnC,MAAM;IAKZ,OAAO,CAAC,KAAK,CAAkB;IACzB,UAAU;IAShB,eAAe;IAMf,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAoBvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAgB3B"} \ No newline at end of file +{"version":3,"file":"Texture.d.ts","sourceRoot":"","sources":["../../../src/DatabaseServices/Texture.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGlE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,MAAM,CAAC,eAAe,CAAuB;IACrD,MAAM,CAAC,WAAW,IAAI,oBAAoB;IAO1C,WAAW,CAAC,OAAO,EAAE,kBAAkB;CAG1C;AACD;;GAEG;AACH,qBACa,kBAAmB,SAAQ,iBAAiB;IAErD,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,KAAK,CAAoC;IACrC,OAAO,EAAE,MAAM,CAAK;IACpB,OAAO,EAAE,MAAM,CAAK;IACpB,QAAQ,EAAE,MAAM,CAAK;IACrB,QAAQ,EAAE,MAAM,CAAM;IAEtB,KAAK,SAAK;IACV,KAAK,SAAK;IAEV,MAAM,EAAE,MAAM,CAAM;IAEhC,IAAI,KAAK,CAAC,IAAI,EAAE,QAAQ,EAOvB;IACD,IAAI,KAAK,IARO,QAAQ,CAQU;IAClC,IAAI,KAAK,IAEO,QAAQ,CAFU;IAElC,IAAI,KAAK,CAAC,IAAI,EAAE,QAAQ,EAOvB;IAGD,OAAO,CAAC,OAAO,CAA0B;IACnC,MAAM;IAKN,aAAa;IAKnB,OAAO,CAAC,KAAK,CAAkB;IACzB,UAAU;IAShB,eAAe;IAMf,QAAQ,CAAC,IAAI,EAAE,QAAQ;IAoBvB,SAAS,CAAC,IAAI,EAAE,QAAQ;CAgB3B"} \ No newline at end of file diff --git a/types/DatabaseServices/ViewportEntity.d.ts b/types/DatabaseServices/ViewportEntity.d.ts index 29bd573..5e119d2 100644 --- a/types/DatabaseServices/ViewportEntity.d.ts +++ b/types/DatabaseServices/ViewportEntity.d.ts @@ -1,9 +1,11 @@ import { Box3, BufferGeometry, Matrix3, MeshBasicMaterial, Object3D, Scene, Vector3 } from "three"; import { ObjectSnapMode } from "../Editor/ObjectSnapMode"; +import { Box3Ext } from "../Geometry/Box"; import { CameraUpdate } from "../GraphicsSystem/CameraUpdate"; import { RenderType } from "../GraphicsSystem/RenderType"; import { CADFiler } from "./CADFiler"; import { Entity } from "./Entity/Entity"; +import { LayerTableRecord } from "./LayerTableRecord"; import { ObjectId } from "./ObjectId"; export declare class ViewportEntity extends Entity { private _width; @@ -13,6 +15,7 @@ export declare class ViewportEntity extends Entity { private _renderType; private _HideObjectIds; private _ShowObjectIds; + private _FreezeLayers; private _RenderTarget; private _EntitysBoundingBox; ViewData: { @@ -31,10 +34,15 @@ export declare class ViewportEntity extends Entity { get ViewHeight(): number; get Height(): number; set Height(v: number); + get EntitysBoundingBox(): Box3Ext; + UpdateEntitysBoundingBox(): void; IsHide(id: ObjectId): boolean; IsShow(id: ObjectId): boolean; get HideObjects(): ObjectId[]; get ShowObjects(): ObjectId[]; + HasFreezeLayer(id: ObjectId): boolean; + DeleteFreezeLayer(id: ObjectId): void; + AddFreezeLayer(id: ObjectId): void; ShowAll(): void; AppendShowObjects(ids: ObjectId[] | ObjectId): void; RemoveShowObjects(ids: ObjectId[] | ObjectId): void; @@ -60,7 +68,7 @@ export declare class ViewportEntity extends Entity { UpdateScene(): void; CloneDrawObject(from: this): void; IsInFrustum(obj: Object3D): boolean; - IsContainText(text: Entity): boolean; + IsIntersectsEntitysBox(box: Box3): boolean; IsFirstVersion: boolean; protected _ReadFile(file: CADFiler): void; WriteFile(file: CADFiler): void; diff --git a/types/DatabaseServices/ViewportEntity.d.ts.map b/types/DatabaseServices/ViewportEntity.d.ts.map index 3c395cc..43f4e71 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":"AAAA,OAAO,EAAE,IAAI,EAAE,cAAc,EAAgD,OAAO,EAAiB,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAqB,MAAM,OAAO,CAAC;AAKnL,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAI1D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAOtC,qBACa,cAAe,SAAQ,MAAM;IAiBlC,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,OAAO;IAhBnB,KAAK,EAAE,KAAK,CAAe;IAC3B,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAsB;IACnD,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,aAAa,CAAkD;IACvE,OAAO,CAAC,mBAAmB,CAAO;IAClC,QAAQ;;;MAGN;IACF,MAAM,SAAK;IACX,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,OAAO,CAAC,QAAQ,CAA0B;gBAE9B,MAAM,GAAE,MAAU,EAClB,OAAO,GAAE,MAAU;IAM/B,IAAI,IAAI,WAGP;IACD,IAAI,MAAM,WAGT;IACD,IAAI,KAAK,IAII,MAAM,CADlB;IACD,IAAI,KAAK,CAAC,CAAC,EAAE,MAAM,EAOlB;IACD,IAAI,SAAS,WAGZ;IACD,IAAI,UAAU,WAGb;IACD,IAAI,MAAM,IAII,MAAM,CADnB;IACD,IAAI,MAAM,CAAC,CAAC,EAAE,MAAM,EAOnB;IACD,MAAM,CAAC,EAAE,EAAE,QAAQ;IAInB,MAAM,CAAC,EAAE,EAAE,QAAQ;IAInB,IAAI,WAAW,gDAGd;IACD,IAAI,WAAW,gDAGd;IAMD,OAAO;IAiBP,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,QAAQ;IAe5C,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,QAAQ;IAU5C,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,QAAQ;IAc5C,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,QAAQ;IAgB5C,mBAAmB,CACf,QAAQ,EAAE,cAAc,EACxB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,OAAO,GACnB,OAAO,EAAE;IAgBZ,MAAM,CAAC,GAAG,EAAE,cAAc;IAO1B,SAAS,CAAC,cAAc,UAAQ;IAChC,IAAI,OAAO,aAUV;IACD,IAAI,MAAM,cAST;IAED,iBAAiB,UAAQ;IAGzB,WAAW,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO;IAQpC,aAAa;IAIb,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO;IAapD,OAAO;IAgBP,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE;IAU3B,IAAI,UAAU,IAII,UAAU,CAD3B;IACD,IAAI,UAAU,CAAC,CAAC,EAAE,UAAU,EAiC3B;IACD,IAAI,WAAW,SAGd;IACD,UAAU,CAAC,EAAE,EAAE,MAAM;IA0BrB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAkCnC,OAAO;IAUP,WAAW;IAKX,eAAe,CAAC,IAAI,EAAE,IAAI;IAS1B,WAAW,CAAC,GAAG,EAAE,QAAQ;IAezB,aAAa,CAAC,IAAI,EAAE,MAAM;IAgB1B,cAAc,UAAS;IACvB,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ;IA4ClC,SAAS,CAAC,IAAI,EAAE,QAAQ;CAiB3B"} \ 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/AutoSave.d.ts.map b/types/Editor/AutoSave.d.ts.map index a69d673..9fdb59a 100644 --- a/types/Editor/AutoSave.d.ts.map +++ b/types/Editor/AutoSave.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"AutoSave.d.ts","sourceRoot":"","sources":["../../../src/Editor/AutoSave.ts"],"names":[],"mappings":"AAaA;;;;;;;;GAQG;AACH,qBAAa,cAAc;IAGvB,QAAQ,UAAS;IACjB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,MAAM,CAAiB;;IAU/B,KAAK;IAML,IAAI;IASJ,EAAE;IAWF,OAAO,CAAC,QAAQ;IA2BV,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;IAab,KAAK;CAKrB"} \ No newline at end of file +{"version":3,"file":"AutoSave.d.ts","sourceRoot":"","sources":["../../../src/Editor/AutoSave.ts"],"names":[],"mappings":"AAaA;;;;;;;;GAQG;AACH,qBAAa,cAAc;IAGvB,QAAQ,UAAS;IACjB,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,MAAM,CAAiB;;IAU/B,KAAK;IAML,IAAI;IASJ,EAAE;IAWF,OAAO,CAAC,QAAQ;IA2BV,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE;IAeb,KAAK;CAKrB"} \ No newline at end of file diff --git a/types/Editor/BoardMoveTool.d.ts.map b/types/Editor/BoardMoveTool.d.ts.map index 4d6796a..a4966de 100644 --- a/types/Editor/BoardMoveTool.d.ts.map +++ b/types/Editor/BoardMoveTool.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardMoveTool.d.ts","sourceRoot":"","sources":["../../../src/Editor/BoardMoveTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,OAAO,EAAE,MAAM,OAAO,CAAC;AAMnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAClF,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAMzD,qBAAa,aAAa;IAEtB,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;IAErC,SAAS,EAAE,gBAAgB,EAAE,CAAM;IAEnC,OAAO,UAAS;IAEhB,MAAM,EAAE,KAAK,CAAC;IACd,WAAW,UAAS;;IA6DpB,KAAK;YASS,QAAQ;IAkJtB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,mBAAmB;CA6C9B"} \ No newline at end of file +{"version":3,"file":"BoardMoveTool.d.ts","sourceRoot":"","sources":["../../../src/Editor/BoardMoveTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,OAAO,EAAE,MAAM,OAAO,CAAC;AAMnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gDAAgD,CAAC;AAClF,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAMzD,qBAAa,aAAa;IAEtB,cAAc,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;IAErC,SAAS,EAAE,gBAAgB,EAAE,CAAM;IAEnC,OAAO,UAAS;IAEhB,MAAM,EAAE,KAAK,CAAC;IACd,WAAW,UAAS;;IA6DpB,KAAK;YASS,QAAQ;IAkJtB,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,mBAAmB;CA8C9B"} \ No newline at end of file diff --git a/types/Editor/CameraControls.d.ts b/types/Editor/CameraControls.d.ts index 309864d..e7364a8 100644 --- a/types/Editor/CameraControls.d.ts +++ b/types/Editor/CameraControls.d.ts @@ -37,7 +37,7 @@ export declare class CameraControls { private _TouchScaleCenterVCS; onTouchStart: (event: Touch_Event) => void; onTouchEnd: (event: Touch_Event) => void; - onTouchMove: (event: Touch_Event) => void; + onTouchMove(event: Touch_Event): void; beginPan(): void; beginRotate(): void; requestPointerLock(): void; @@ -50,7 +50,7 @@ export declare class CameraControls { * 鼠标滚轮事件 */ cameraNormal: Vector3; - onMouseWheel: (event: WheelEvent) => void; + onMouseWheel(event: WheelEvent): void; onKeyDown: (event: KeyboardEvent) => void; onKeyUp: (event: KeyboardEvent) => void; } diff --git a/types/Editor/CameraControls.d.ts.map b/types/Editor/CameraControls.d.ts.map index d562dae..944bd07 100644 --- a/types/Editor/CameraControls.d.ts.map +++ b/types/Editor/CameraControls.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CameraControls.d.ts","sourceRoot":"","sources":["../../../src/Editor/CameraControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAY,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAY/D,oBAAY,kBAAkB;IAE1B,IAAI,IAAI;IAAE,GAAG,IAAI;IAAE,MAAM,IAAI;IAAE,KAAK,IAAI;CAC3C;AAED,qBAAa,cAAc;IA0BJ,MAAM,EAAE,MAAM;IAxBjC,UAAU,EAAE,WAAW,CAAC;IAGxB,kBAAkB,UAAQ;IAC1B,aAAa,uBAAiF;IAC9F,eAAe,EAAE,OAAO,CAAiB;IACzC,aAAa,EAAE,OAAO,CAAiB;IACvC,UAAU,EAAE,MAAM,CAAC;IAEnB,UAAU,UAAS;IACnB,SAAS,UAAS;IAClB,WAAW,UAAS;IACpB,SAAS,yBAAgC;IAEzC,KAAK,EAAE,kBAAkB,CAA2B;IACpD,WAAW,EAAE,kBAAkB,CAA2B;IAG1D,aAAa,EAAE,OAAO,CAAS;IAC/B,IAAI,mBAAmB,YAGtB;gBAEkB,MAAM,EAAE,MAAM;IAMjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,SAAS,YAMZ;IAED,IAAI,eAAe,YAMlB;IAED,aAAa;IA8Bb;;OAEG;IACH,MAAM,aAUJ;IAGF,OAAO,CAAC,oBAAoB,CAAe;IAC3C,OAAO,CAAC,oBAAoB,CAAe;IAC3C,YAAY,UAAW,WAAW,UAwBhC;IACF,UAAU,UAAW,WAAW,UAG9B;IACF,WAAW,UAAW,WAAW,UA8C/B;IACF,QAAQ;IAMR,WAAW;IAQX,kBAAkB;IAoBlB,eAAe;IAoBf,mBAAmB,SAAK;IAExB,WAAW,UAAW,UAAU,UA8C9B;IACF,SAAS,UAAW,UAAU,UAS5B;IACF,WAAW,UAAW,UAAU,UAsB9B;IAEF;;OAEG;IACH,YAAY,UAAe;IAC3B,YAAY,UAAW,UAAU,UAY/B;IAGF,SAAS,UAAW,aAAa,UAW/B;IACF,OAAO,UAAW,aAAa,UAQ7B;CACL"} \ No newline at end of file +{"version":3,"file":"CameraControls.d.ts","sourceRoot":"","sources":["../../../src/Editor/CameraControls.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAY,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAY/D,oBAAY,kBAAkB;IAE1B,IAAI,IAAI;IAAE,GAAG,IAAI;IAAE,MAAM,IAAI;IAAE,KAAK,IAAI;CAC3C;AAED,qBAAa,cAAc;IA0BJ,MAAM,EAAE,MAAM;IAxBjC,UAAU,EAAE,WAAW,CAAC;IAGxB,kBAAkB,UAAQ;IAC1B,aAAa,uBAAiF;IAC9F,eAAe,EAAE,OAAO,CAAiB;IACzC,aAAa,EAAE,OAAO,CAAiB;IACvC,UAAU,EAAE,MAAM,CAAC;IAEnB,UAAU,UAAS;IACnB,SAAS,UAAS;IAClB,WAAW,UAAS;IACpB,SAAS,yBAAgC;IAEzC,KAAK,EAAE,kBAAkB,CAA2B;IACpD,WAAW,EAAE,kBAAkB,CAA2B;IAG1D,aAAa,EAAE,OAAO,CAAS;IAC/B,IAAI,mBAAmB,YAGtB;gBAEkB,MAAM,EAAE,MAAM;IAMjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,SAAS,YAMZ;IAED,IAAI,eAAe,YAMlB;IAED,aAAa;IA8Bb;;OAEG;IACH,MAAM,aAUJ;IAGF,OAAO,CAAC,oBAAoB,CAAe;IAC3C,OAAO,CAAC,oBAAoB,CAAe;IAC3C,YAAY,UAAW,WAAW,UAwBhC;IACF,UAAU,UAAW,WAAW,UAG9B;IACF,WAAW,CAAC,KAAK,EAAE,WAAW;IA+C9B,QAAQ;IAMR,WAAW;IAQX,kBAAkB;IAoBlB,eAAe;IAoBf,mBAAmB,SAAK;IAExB,WAAW,UAAW,UAAU,UA8C9B;IACF,SAAS,UAAW,UAAU,UAS5B;IACF,WAAW,UAAW,UAAU,UAsB9B;IAEF;;OAEG;IACH,YAAY,UAAe;IAC3B,YAAY,CAAC,KAAK,EAAE,UAAU;IAe9B,SAAS,UAAW,aAAa,UAW/B;IACF,OAAO,UAAW,aAAa,UAQ7B;CACL"} \ No newline at end of file diff --git a/types/Editor/CommandRegister.d.ts.map b/types/Editor/CommandRegister.d.ts.map index 4f24654..82832e3 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":"AAiTA,wBAAgB,eAAe,SAimB9B;AAED,wBAAsB,YAAY,kBAIjC"} \ No newline at end of file +{"version":3,"file":"CommandRegister.d.ts","sourceRoot":"","sources":["../../../src/Editor/CommandRegister.ts"],"names":[],"mappings":"AAsUA,wBAAgB,eAAe,SA4oB9B;AAED,wBAAsB,YAAY,kBAIjC"} \ No newline at end of file diff --git a/types/Editor/ContextMenu.d.ts.map b/types/Editor/ContextMenu.d.ts.map index 96aa643..e68b404 100644 --- a/types/Editor/ContextMenu.d.ts.map +++ b/types/Editor/ContextMenu.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../../src/Editor/ContextMenu.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAkB,MAAM,sBAAsB,CAAC;AAY/D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAgDjD;;GAEG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IAOzC,OAAO,CAAC,MAAM;IAL1B,IAAI,OAAO,YAGV;gBAEmB,MAAM,EAAE,MAAM;IAI5B,IAAI,CAAC,CAAC,EAAE,UAAU;IASxB,MAAM;IAKN,aAAa,CAAC,CAAC,EAAE,UAAU;IAUrB,QAAQ;IAsBd,eAAe;CAwHlB"} \ No newline at end of file +{"version":3,"file":"ContextMenu.d.ts","sourceRoot":"","sources":["../../../src/Editor/ContextMenu.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAkB,MAAM,sBAAsB,CAAC;AAe/D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA0DjD;;GAEG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IAOzC,OAAO,CAAC,MAAM;IAL1B,IAAI,OAAO,YAGV;gBAEmB,MAAM,EAAE,MAAM;IAI5B,IAAI,CAAC,CAAC,EAAE,UAAU;IASxB,MAAM;IAKN,aAAa,CAAC,CAAC,EAAE,UAAU;IAUrB,QAAQ;IAsBd,eAAe;CAmJlB"} \ No newline at end of file diff --git a/types/Editor/DbClick/DBClickPolyline.d.ts.map b/types/Editor/DbClick/DBClickPolyline.d.ts.map index 70ddbd6..aa3c083 100644 --- a/types/Editor/DbClick/DBClickPolyline.d.ts.map +++ b/types/Editor/DbClick/DBClickPolyline.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DBClickPolyline.d.ts","sourceRoot":"","sources":["../../../../src/Editor/DbClick/DBClickPolyline.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,OAAO,EAAE,QAAQ,EAAiB,MAAM,wCAAwC,CAAC;AAWjF,qBAAa,eAAgB,SAAQ,SAAS;IAE1C,OAAO,CAAC,MAAM,CAAQ;IACtB,cAAc,OAAc,QAAQ,mBAsElC;IACF,OAAO,CAAC,YAAY,CAwElB;IACF,OAAO,CAAC,UAAU,CAuChB;IACF,OAAO,CAAC,IAAI,CAiCV;IACF,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,KAAK;IAmBb,OAAO,CAAC,YAAY,CAwBlB;IAEF,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,eAAe;CAa1B"} \ No newline at end of file +{"version":3,"file":"DBClickPolyline.d.ts","sourceRoot":"","sources":["../../../../src/Editor/DbClick/DBClickPolyline.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,OAAO,EAAE,QAAQ,EAAiB,MAAM,wCAAwC,CAAC;AAWjF,qBAAa,eAAgB,SAAQ,SAAS;IAE1C,OAAO,CAAC,MAAM,CAAQ;IACtB,cAAc,OAAc,QAAQ,mBAyElC;IACF,OAAO,CAAC,YAAY,CAwElB;IACF,OAAO,CAAC,UAAU,CAuChB;IACF,OAAO,CAAC,IAAI,CAiCV;IACF,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,KAAK;IAmBb,OAAO,CAAC,YAAY,CAwBlB;IAEF,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,eAAe;CAa1B"} \ No newline at end of file diff --git a/types/Editor/DbClick/DbClick.d.ts.map b/types/Editor/DbClick/DbClick.d.ts.map index e886715..554624a 100644 --- a/types/Editor/DbClick/DbClick.d.ts.map +++ b/types/Editor/DbClick/DbClick.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DbClick.d.ts","sourceRoot":"","sources":["../../../../src/Editor/DbClick/DbClick.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAiDnD,qBAAa,cAAe,SAAQ,SAAS;IAEzC,SAAS,sBAqRP;CACL"} \ No newline at end of file +{"version":3,"file":"DbClick.d.ts","sourceRoot":"","sources":["../../../../src/Editor/DbClick/DbClick.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAkDnD,qBAAa,cAAe,SAAQ,SAAS;IAEzC,SAAS,sBA4RP;CACL"} \ No newline at end of file diff --git a/types/Editor/DefaultConfig.d.ts b/types/Editor/DefaultConfig.d.ts index 4d989df..f997102 100644 --- a/types/Editor/DefaultConfig.d.ts +++ b/types/Editor/DefaultConfig.d.ts @@ -1,5 +1,8 @@ +import { FontStyleInfoOption } from "../Add-on/TextStyle/FontStyleInterface"; +import { EditViewOption } from "../Add-on/ViewortConfig/EditViewOption"; import { Curve2RecOption } from "../Add-on/twoD2threeD/Modals/Curve2RecOption"; import { IParseBoardNameOption, IRec2BrOption, IRect2Br2Option } from "../Add-on/twoD2threeD/R2bInterface"; +import { SpaceParseOption } from "../Geometry/SpaceParse/SpaceParseOption"; import { IUpdateBoardInfosOption } from "../UI/Components/Board/UpdateBoardInfointerface"; import { ICompHardwareOption, ICylMetalsOption, IExtMetalsOption, IToplineOption } from "../UI/Components/RightPanel/RightPanelInterface"; import { IKuGangDrawOption } from "../UI/Components/Template/TemplateInterface"; @@ -12,7 +15,7 @@ import { IBoardBatchCurtailOption } from "../UI/Store/OptionInterface/BoardBatch import { BoardProcessOption } from "../UI/Store/OptionInterface/BoardProcessOption"; import { BulkheadCeilingOption } from "../UI/Store/OptionInterface/BulkheadCeilingOption"; import { ClosingStripOption } from "../UI/Store/OptionInterface/ClosingStripOption"; -import { BehindBoardOption, ChangeColorByBoardMaterialOption, ChangeColorByRoomOrCabinetOption, CommonPanelConfigOption, DatalistConfigOption, DoorRelatesInfoOption, IBatchModifyPanelOption, IDimStyleOption, LayerBoardOption, LayerNailOption, ModifyTextsConfigOption, RightPlaneLightOption, ShareBoardInfConfigurationOption, SideBoardOption, SingleBoardOption, TBBoardOption, VerticalBoardOption, WindowPanelConfigOption } from "../UI/Store/OptionInterface/IOptionInterface"; +import { BehindBoardOption, BoardConfigOption, ChangeColorByBoardMaterialOption, ChangeColorByRoomOrCabinetOption, CommonPanelConfigOption, DatalistConfigOption, DoorRelatesInfoOption, IArcBoardGrooveOption, IBatchModifyPanelOption, IDimStyleOption, IHoleGrooveDimOption, LayerBoardOption, LayerNailOption, ModifyTextsConfigOption, OneClickInspectionOption, PartsAnalysisOption, RightPlaneLightOption, ShareBoardInfConfigurationOption, SideBoardOption, SingleBoardOption, TBBoardOption, VerticalBoardOption, WindowPanelConfigOption } from "../UI/Store/OptionInterface/IOptionInterface"; import { PointLightOption, RectAreaLightOption, SpotLightOption } from "../UI/Store/OptionInterface/LightConfigOption"; import { Viewport2ConfigOption, Viewport3ConfigOption, Viewport4ConfigOption, ViewportConfigOption } from "../UI/Store/OptionInterface/ViewportConfigOption"; import { IWineRackOption } from "../UI/Store/WineRackInterface"; @@ -32,6 +35,7 @@ export declare const DefaultPointLightOption: PointLightOption; export declare const DefaultSpotLightOption: SpotLightOption; export declare const DefaultRectAreaLightOption: RectAreaLightOption; export declare const DefaultRightPlaneLightOption: RightPlaneLightOption; +export declare const DefaultArcBoardOption: BoardConfigOption; export declare const DefaultSingleBoardOption: SingleBoardOption; export declare const DefaultClosingStripOption: ClosingStripOption; export declare const DefaultBoardFindOption: IBoardFindOption; @@ -65,5 +69,12 @@ export declare const DefaultShareBoardInfConfigurationOption: ShareBoardInfConfi export declare const DefaultBulkheadCeilingOption: BulkheadCeilingOption; export declare const DefaultChangeColorByRoomOrCabinetOption: ChangeColorByRoomOrCabinetOption; export declare const DefaultDoorRelatesInfoOption: DoorRelatesInfoOption; +export declare const DefaultPartsAnalysisOption: PartsAnalysisOption; export declare const DefaultFastDimOption: IFastDimOption; +export declare const DefaultOneClickInspectionOption: OneClickInspectionOption; +export declare const DefaultArcBoardGrooveOption: IArcBoardGrooveOption; +export declare const DefaultSpaceParseOption: SpaceParseOption; +export declare const DefaultEditViewOption: EditViewOption; +export declare const DefaultFontStyleOption: FontStyleInfoOption; +export declare const DefaultHoleGrooveDimOption: IHoleGrooveDimOption; //# sourceMappingURL=DefaultConfig.d.ts.map \ No newline at end of file diff --git a/types/Editor/DefaultConfig.d.ts.map b/types/Editor/DefaultConfig.d.ts.map index 95f6ff0..aadc1bb 100644 --- a/types/Editor/DefaultConfig.d.ts.map +++ b/types/Editor/DefaultConfig.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DefaultConfig.d.ts","sourceRoot":"","sources":["../../../src/Editor/DefaultConfig.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"DefaultConfig.d.ts","sourceRoot":"","sources":["../../../src/Editor/DefaultConfig.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Editor/Editor.d.ts b/types/Editor/Editor.d.ts index 3affa8c..4ad86a2 100644 --- a/types/Editor/Editor.d.ts +++ b/types/Editor/Editor.d.ts @@ -24,6 +24,7 @@ import { MouseControls } from './MouseControls'; import { GetDistendPrompt, GetEntityPrompt, GetKeyWordPrommpt, GetPointPrompt, GetSelectionPrompt, GetStringPrompt, PromptRectPointOptions } from "./PromptOptions"; import { PromptDistendResult, PromptEntityResult, PromptPointResult, PromptRectResult, PromptResult, PromptSsgetResult } from './PromptResult'; import { SelectControls } from './SelectControls'; +import { SelectSet } from './SelectSet'; import { TransformServicess } from './TranstrolControl/TransformServices'; import { UCSServices } from './UCSServices'; export declare class Editor { @@ -51,6 +52,8 @@ export declare class Editor { ContextMenuServices: ContextMenuServices; InteractiveServices: EditorService[]; GetStringService: GetStringService; + SelectSetIndex: number; + LastSelectSet: SelectSet[]; constructor(app: ApplicationService); /** * 在命令行输出一行提示信息. @@ -76,6 +79,7 @@ export declare class Editor { */ SetSelection(ens: (Object3D | Entity)[]): void; AddSelection(ens: (Object3D | Entity)[]): void; + AddLastSelectSet(): void; UpdateScreen(): void; } export interface EditorService { diff --git a/types/Editor/Editor.d.ts.map b/types/Editor/Editor.d.ts.map index ce365c9..cf03bd4 100644 --- a/types/Editor/Editor.d.ts.map +++ b/types/Editor/Editor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Editor.d.ts","sourceRoot":"","sources":["../../../src/Editor/Editor.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Editor.d.ts","sourceRoot":"","sources":["../../../src/Editor/Editor.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Editor/GetKeyWordService.d.ts b/types/Editor/GetKeyWordService.d.ts index 4d63c75..5f58e91 100644 --- a/types/Editor/GetKeyWordService.d.ts +++ b/types/Editor/GetKeyWordService.d.ts @@ -1,6 +1,6 @@ import { KeyWord } from '../Common/InputState'; import { Editor, EditorService } from './Editor'; -import { GetKeyWordPrommpt } from "./PromptOptions"; +import { GetKeyWordPrommpt, MousePos } from "./PromptOptions"; import { PromptResult } from './PromptResult'; /** * 指定用户拾取关键字的服务. @@ -26,10 +26,13 @@ export declare class GetKeyWordsServices implements EditorService { m_ShowChildrenIndex: number; mousePositionX: number; mousePositionY: number; + useCurrentMousePos: boolean; + currentMousePos: MousePos; private container; constructor(ed: Editor); Doit(e: MouseEvent): Promise; - private UpdateContextMenuPosition; + curMenuSize: number[]; + UpdateMenuPosition(isClick?: boolean): void; Start(prompt: GetKeyWordPrommpt): Promise; private InitHandleInput; InitHandleKeyDown(): void; diff --git a/types/Editor/GetKeyWordService.d.ts.map b/types/Editor/GetKeyWordService.d.ts.map index 3d6e297..9de9d9b 100644 --- a/types/Editor/GetKeyWordService.d.ts.map +++ b/types/Editor/GetKeyWordService.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"GetKeyWordService.d.ts","sourceRoot":"","sources":["../../../src/Editor/GetKeyWordService.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAc,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAI3D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAgB,MAAM,gBAAgB,CAAC;AAI5D;;;;;;;;;;;GAWG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IAgBzC,OAAO,CAAC,EAAE;IAdV,OAAO,EAAE,OAAO,CAAS;IACrC,OAAO,CAAC,eAAe,CAA8B;IACrD,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAM;IAE3B,MAAM,SAAM;IACZ,WAAW,EAAE,OAAO,EAAE,CAAM;IAC5B,WAAW,SAAK;IAChB,gBAAgB,SAAK;IACrB,mBAAmB,SAAM;IACzB,cAAc,SAAK;IACnB,cAAc,SAAK;IAE/B,OAAO,CAAC,SAAS,CAAc;gBAEX,EAAE,EAAE,MAAM;IAaxB,IAAI,CAAC,CAAC,EAAE,UAAU;IAQxB,OAAO,CAAC,yBAAyB;IAW3B,KAAK,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IAiD7D,OAAO,CAAC,eAAe;IA2BvB,iBAAiB;IA8EjB,MAAM;IAIN,OAAO,CAAC,MAAM,EAAE,YAAY;CAU/B"} \ No newline at end of file +{"version":3,"file":"GetKeyWordService.d.ts","sourceRoot":"","sources":["../../../src/Editor/GetKeyWordService.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAc,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAI3D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAgB,MAAM,gBAAgB,CAAC;AAE5D;;;;;;;;;;;GAWG;AACH,qBAAa,mBAAoB,YAAW,aAAa;IAiBzC,OAAO,CAAC,EAAE;IAfV,OAAO,EAAE,OAAO,CAAS;IACrC,OAAO,CAAC,eAAe,CAA8B;IACrD,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAM;IAE3B,MAAM,SAAM;IACZ,WAAW,EAAE,OAAO,EAAE,CAAM;IAC5B,WAAW,SAAK;IAChB,gBAAgB,SAAK;IACrB,mBAAmB,SAAM;IACzB,cAAc,SAAK;IACnB,cAAc,SAAK;IACnB,kBAAkB,EAAE,OAAO,CAAS;IACpC,eAAe,EAAE,QAAQ,CAAC;IACtC,OAAO,CAAC,SAAS,CAAc;gBAEX,EAAE,EAAE,MAAM;IAaxB,IAAI,CAAC,CAAC,EAAE,UAAU;IAQxB,WAAW,WAAU;IAErB,kBAAkB,CAAC,OAAO,UAAQ;IAkB5B,KAAK,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC;IA0D7D,OAAO,CAAC,eAAe;IA2BvB,iBAAiB;IA8EjB,MAAM;IAIN,OAAO,CAAC,MAAM,EAAE,YAAY;CAY/B"} \ No newline at end of file diff --git a/types/Editor/GetPointServices.d.ts b/types/Editor/GetPointServices.d.ts index d2e57cd..ca36d58 100644 --- a/types/Editor/GetPointServices.d.ts +++ b/types/Editor/GetPointServices.d.ts @@ -1,4 +1,5 @@ import { Intersection, Vector3 } from 'three'; +import { Entity } from '../DatabaseServices/Entity/Entity'; import { EditorService } from './Editor'; import { ObjectSnapMode } from './ObjectSnapMode'; import { GetPointPrompt } from "./PromptOptions"; @@ -34,7 +35,7 @@ export declare class GetPointServices implements EditorService { protected initDynInput(prompt: GetPointPrompt): void; private ReturnNone; private UpdatePointOfRelative; - protected ReturnPoint(p: Vector3, snapMode?: ObjectSnapMode): void; + protected ReturnPoint(p: Vector3, snapMode?: ObjectSnapMode, snapEntity?: Entity): void; ReturnKeyword(keyword: string): void; protected ReturnResult(retValue: PromptPointResult): void; private _oldIsThreeState; diff --git a/types/Editor/GetPointServices.d.ts.map b/types/Editor/GetPointServices.d.ts.map index bbfeffa..fea0915 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,EAAyB,OAAO,EAAE,MAAM,OAAO,CAAC;AAoBrF,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;AAGjE,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;IAwBxB,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;IA0CnB,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 +{"version":3,"file":"GetPointServices.d.ts","sourceRoot":"","sources":["../../../src/Editor/GetPointServices.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,YAAY,EAAyB,OAAO,EAAE,MAAM,OAAO,CAAC;AAWrF,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAS3D,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;AAGjE,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;IAkCxB,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;IA0CnB,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,EAAE,UAAU,CAAC,EAAE,MAAM;IA2BhF,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;CAoBpB"} \ No newline at end of file diff --git a/types/Editor/GetRectServices.d.ts b/types/Editor/GetRectServices.d.ts index eaf2430..07f47cf 100644 --- a/types/Editor/GetRectServices.d.ts +++ b/types/Editor/GetRectServices.d.ts @@ -13,6 +13,7 @@ export declare class GetRectPointServices { private destroyCalls; private _UCSMatrixBak; private _CurUCSMtx; + private _SnapEntity; Start(prompt?: PromptRectPointOptions): Promise; /** * 更新动态提示框和多段线 diff --git a/types/Editor/GetRectServices.d.ts.map b/types/Editor/GetRectServices.d.ts.map index a1395cd..0a36efe 100644 --- a/types/Editor/GetRectServices.d.ts.map +++ b/types/Editor/GetRectServices.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"GetRectServices.d.ts","sourceRoot":"","sources":["../../../src/Editor/GetRectServices.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAgB,MAAM,gBAAgB,CAAC;AAGhE,qBAAa,oBAAoB;IAE7B;;OAEG;IACH,OAAO,CAAC,aAAa,CAA4B;IACjD;;MAEE;IACF,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,YAAY,CAAM;IAE1B,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,UAAU,CAAU;IAEtB,KAAK,CAAC,MAAM,GAAE,sBAA2B,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAyK3E;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB,cAAc;IAkBd,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,SAAS;IAqBjB,MAAM;IAMN,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,gBAAgB;CAUlD"} \ No newline at end of file +{"version":3,"file":"GetRectServices.d.ts","sourceRoot":"","sources":["../../../src/Editor/GetRectServices.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAgB,MAAM,gBAAgB,CAAC;AAGhE,qBAAa,oBAAoB;IAE7B;;OAEG;IACH,OAAO,CAAC,aAAa,CAA4B;IACjD;;MAEE;IACF,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,YAAY,CAAM;IAE1B,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,WAAW,CAAS;IAEtB,KAAK,CAAC,MAAM,GAAE,sBAA2B,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA4K3E;;OAEG;IACH,OAAO,CAAC,eAAe;IAuBvB,cAAc;IAkBd,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,SAAS;IAqBjB,MAAM;IAMN,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,gBAAgB;CAUlD"} \ No newline at end of file diff --git a/types/Editor/GetSelectionServices.d.ts b/types/Editor/GetSelectionServices.d.ts index 9282a57..09ccd96 100644 --- a/types/Editor/GetSelectionServices.d.ts +++ b/types/Editor/GetSelectionServices.d.ts @@ -12,7 +12,6 @@ export declare class SsgetServiecs { private HasSelection; private ReturnOk; Cancel(): void; - private _LastSelectSet; protected Return(res: PromptSsgetResult): void; private _AwaitRemoveCalls; private _AwaitRes; diff --git a/types/Editor/GetSelectionServices.d.ts.map b/types/Editor/GetSelectionServices.d.ts.map index e0b74e1..305c841 100644 --- a/types/Editor/GetSelectionServices.d.ts.map +++ b/types/Editor/GetSelectionServices.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"GetSelectionServices.d.ts","sourceRoot":"","sources":["../../../src/Editor/GetSelectionServices.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAmB,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAgB,MAAM,gBAAgB,CAAC;AAOjE;;GAEG;AACH,qBAAa,aAAa;IAEV,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAInC,OAAO,CAAC,aAAa,CAAmC;IACxD,KAAK,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwKlE,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,QAAQ;IAYhB,MAAM;IAKN,OAAO,CAAC,cAAc,CAAY;IAClC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,iBAAiB;IAcvC,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,SAAS,CAA2B;IACtC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAiBrC,OAAO,CAAC,iBAAiB;CAQ5B"} \ No newline at end of file +{"version":3,"file":"GetSelectionServices.d.ts","sourceRoot":"","sources":["../../../src/Editor/GetSelectionServices.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAmB,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAgB,MAAM,gBAAgB,CAAC;AAQjE;;GAEG;AACH,qBAAa,aAAa;IAEV,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAInC,OAAO,CAAC,aAAa,CAAmC;IACxD,KAAK,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA+LlE,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,QAAQ;IAYhB,MAAM;IAKN,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,iBAAiB;IAiBvC,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,SAAS,CAA2B;IACtC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAiBrC,OAAO,CAAC,iBAAiB;CAQ5B"} \ No newline at end of file diff --git a/types/Editor/GripDragServices.d.ts.map b/types/Editor/GripDragServices.d.ts.map index 7e68958..8077522 100644 --- a/types/Editor/GripDragServices.d.ts.map +++ b/types/Editor/GripDragServices.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"GripDragServices.d.ts","sourceRoot":"","sources":["../../../src/Editor/GripDragServices.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,IAAI,IAAI,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAqBvE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAKjD;;GAEG;AACH,qBAAa,gBAAiB,YAAW,aAAa;IAMtC,OAAO,CAAC,EAAE;IAHtB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,SAAS,CAAM;gBACH,EAAE,EAAE,MAAM;IAW9B,IAAI,QAAQ,IACO,MAAM,CADgB;IACzC,IAAI,QAAQ,CAAC,IAAI,EAAE,MAAM,EAWxB;IAED,IAAI,OAAO,YAGV;IAEK,IAAI,CAAC,CAAC,EAAE,UAAU;IA8KxB,MAAM;IAKN;;;OAGG;IACH,QAAQ;IAiBR;;OAEG;IACH,OAAO,CAAC,eAAe;IAwBvB;;OAEG;IACH,gBAAgB,EAAE,KAAK,CAAa;IAEpC;;OAEG;IACH,OAAO,CAAC,cAAc;IA2BtB;;OAEG;IACH,YAAY;CAQf"} \ No newline at end of file +{"version":3,"file":"GripDragServices.d.ts","sourceRoot":"","sources":["../../../src/Editor/GripDragServices.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,IAAI,IAAI,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAuBvE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAKjD;;GAEG;AACH,qBAAa,gBAAiB,YAAW,aAAa;IAMtC,OAAO,CAAC,EAAE;IAHtB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,SAAS,CAAM;gBACH,EAAE,EAAE,MAAM;IAW9B,IAAI,QAAQ,IACO,MAAM,CADgB;IACzC,IAAI,QAAQ,CAAC,IAAI,EAAE,MAAM,EAWxB;IAED,IAAI,OAAO,YAGV;IAEK,IAAI,CAAC,CAAC,EAAE,UAAU;IAoLxB,MAAM;IAKN;;;OAGG;IACH,QAAQ;IAiBR;;OAEG;IACH,OAAO,CAAC,eAAe;IAwBvB;;OAEG;IACH,gBAAgB,EAAE,KAAK,CAAa;IAEpC;;OAEG;IACH,OAAO,CAAC,cAAc;IA2BtB;;OAEG;IACH,YAAY;CAQf"} \ No newline at end of file diff --git a/types/Editor/LayoutTool.d.ts b/types/Editor/LayoutTool.d.ts index 637130f..fe22b10 100644 --- a/types/Editor/LayoutTool.d.ts +++ b/types/Editor/LayoutTool.d.ts @@ -12,10 +12,10 @@ export declare class LayoutTool { AppendDatabaseSpace(en: Entity, changeColor?: boolean): void; /** * 在视口中显示实体列表 - * @param ens 实体列表(被修改的 或者是创建的) + * @param entitys 实体列表(被修改的 或者是创建的) * @param [isNewEntitys=false] 新建的实体(刚绘制的) */ - ShowViewportEntitys(ens: Entity[], isNewEntitys?: boolean): void; + ShowViewportEntitys(entitys: Entity[], isNewEntitys?: boolean): void; HideViewportEntitys(selects: Iterable): void; /** * 响应实体的变更,当实体变更时,响应在布局空间的绘制(刷新绘制) diff --git a/types/Editor/LayoutTool.d.ts.map b/types/Editor/LayoutTool.d.ts.map index c815ee0..44f8d06 100644 --- a/types/Editor/LayoutTool.d.ts.map +++ b/types/Editor/LayoutTool.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"LayoutTool.d.ts","sourceRoot":"","sources":["../../../src/Editor/LayoutTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,OAAO,CAAC;AAOzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAIxE,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAO3D,eAAO,MAAM,aAAa,OAAO,CAAC;AA8ClC,qBAAa,UAAU;;IAwCnB,WAAW;IAOX,YAAY;IAOZ,MAAM,EAAE,OAAO,CAAC;IAGhB,KAAK;IAwBL,IAAI,YAAY,IAAI,gBAAgB,CAMnC;IAED,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,UAAO;IAiBlD;;;;OAIG;IACH,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,YAAY,UAAQ;IA2BvD,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC;IAsB7C;;;OAGG;IACH,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC;CAkB9C"} \ No newline at end of file +{"version":3,"file":"LayoutTool.d.ts","sourceRoot":"","sources":["../../../src/Editor/LayoutTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,OAAO,CAAC;AAOzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAIxE,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAQ3D,eAAO,MAAM,aAAa,OAAO,CAAC;AA8ClC,qBAAa,UAAU;;IA8CnB,WAAW;IAOX,YAAY;IAOZ,MAAM,EAAE,OAAO,CAAC;IAGhB,KAAK;IAwBL,IAAI,YAAY,IAAI,gBAAgB,CAMnC;IAED,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,WAAW,UAAO;IAiBlD;;;;OAIG;IACH,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,YAAY,UAAQ;IA2C3D,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC;IAsB7C;;;OAGG;IACH,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC;CAoB9C"} \ No newline at end of file diff --git a/types/Editor/PromptOptions.d.ts b/types/Editor/PromptOptions.d.ts index 519a1a0..4f26cbb 100644 --- a/types/Editor/PromptOptions.d.ts +++ b/types/Editor/PromptOptions.d.ts @@ -1,5 +1,6 @@ import { Intersection, Matrix4, Vector3 } from 'three'; import { KeyWord } from '../Common/InputState'; +import { ObjectSnapMode } from './ObjectSnapMode'; import { PromptEntityResult, PromptSsgetResult } from './PromptResult'; import { SelectType } from './SelectBox'; import { Filter } from './SelectFilter'; @@ -12,10 +13,18 @@ export interface PromptOptions { */ KeyWordCallback?: (key: string, prompt: PromptOptions) => boolean | Promise; } +/** + * 用于记录鼠标位置 + */ +export interface MousePos { + x: number; + y: number; +} export interface GetKeyWordPrommpt extends PromptOptions { Default?: string; KeyWordList: KeyWord[]; Modal?: boolean; + mousePos?: MousePos; } export interface GetStringPrompt extends PromptOptions { Default?: string; @@ -23,7 +32,7 @@ export interface GetStringPrompt extends PromptOptions { export interface GetPointPrompt extends PromptOptions { BasePoint?: Vector3; RelativeBasePoint?: Vector3; - Callback?: (pt: Vector3, intersection: Intersection) => void; + Callback?: (pt: Vector3, intersection: Intersection, snapMode?: ObjectSnapMode) => void; AllowDrawRubberBand?: Boolean; NotShowDynPrompt?: boolean; /** 如果UCS和视图平行,则不捕捉Z轴 */ diff --git a/types/Editor/PromptOptions.d.ts.map b/types/Editor/PromptOptions.d.ts.map index ad60f9b..c3933ff 100644 --- a/types/Editor/PromptOptions.d.ts.map +++ b/types/Editor/PromptOptions.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"PromptOptions.d.ts","sourceRoot":"","sources":["../../../src/Editor/PromptOptions.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"PromptOptions.d.ts","sourceRoot":"","sources":["../../../src/Editor/PromptOptions.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Editor/PromptResult.d.ts b/types/Editor/PromptResult.d.ts index 2c165fe..e3dc3a3 100644 --- a/types/Editor/PromptResult.d.ts +++ b/types/Editor/PromptResult.d.ts @@ -18,7 +18,8 @@ export declare class PromptResult { Parent?: string; } export declare class PromptPointResult extends PromptResult { - SnaoMode: ObjectSnapMode; + SnapMode: ObjectSnapMode; + SnapEntity: Entity; intersection: Intersection; private _point; /** @@ -42,6 +43,7 @@ export declare class PromptRectResult extends PromptResult { Point2UCS: Vector3; Point1WCS: Vector3; Point2WCS: Vector3; + SnapEntity: Entity; get Width(): number; get Height(): number; } diff --git a/types/Editor/PromptResult.d.ts.map b/types/Editor/PromptResult.d.ts.map index f9507e3..d197e2c 100644 --- a/types/Editor/PromptResult.d.ts.map +++ b/types/Editor/PromptResult.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"PromptResult.d.ts","sourceRoot":"","sources":["../../../src/Editor/PromptResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKxC,oBAAY,YAAY;IAEpB,IAAI,IAAI,CAAE,qBAAqB;IAC/B,MAAM,KAAK;IACX,EAAE,IAAI;IACN,OAAO,IAAI;IACX,KAAK,IAAI,CAAC,0CAA0C;IACpD,MAAM,IAAI;IACV,KAAK,KAAK;CACb;AAWD,qBAAa,YAAY;IAErB,MAAM,EAAE,YAAY,CAAqB;IAEzC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,EAAE,OAAO,CAAS;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CAGnB;AAED,qBAAa,iBAAkB,SAAQ,YAAY;IAE/C,QAAQ,EAAE,cAAc,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAU;IACxB;;;;;OAKG;IACH,IAAI,KAAK,IAIK,OAAO,CADpB;IACD,IAAI,KAAK,CAAC,EAAE,EAAE,OAAO,EAGpB;;CAMJ;AAED,qBAAa,mBAAoB,SAAQ,YAAY;IAEjD,OAAO,CAAC,MAAM,CAAS;IACvB,IAAI,QAAQ,IAII,MAAM,CADrB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,MAAM,EAGrB;CACJ;AAED,qBAAa,gBAAiB,SAAQ,YAAY;IAE9C,GAAG,EAAE,OAAO,CAAC;IAEb,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IAEnB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IAEnB,IAAI,KAAK,WAGR;IAED,IAAI,MAAM,WAGT;CACJ;AAED,qBAAa,kBAAmB,SAAQ,YAAY;IAIrC,MAAM,CAAC,EAAE,MAAM;IAEf,KAAK,CAAC,EAAE,OAAO;IACf,MAAM,CAAC,EAAE,QAAQ;IACjB,QAAQ,CAAC,EAAE,OAAO;gBAJlB,MAAM,CAAC,EAAE,MAAM,EAEf,KAAK,CAAC,EAAE,OAAO,EACf,MAAM,CAAC,EAAE,QAAQ,EACjB,QAAQ,CAAC,EAAE,OAAO;CAKhC;AAED,qBAAa,iBAAkB,SAAQ,YAAY;IAE/C,SAAS,CAAC,EAAE,SAAS,CAAC;CACzB"} \ No newline at end of file +{"version":3,"file":"PromptResult.d.ts","sourceRoot":"","sources":["../../../src/Editor/PromptResult.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAKxC,oBAAY,YAAY;IAEpB,IAAI,IAAI,CAAE,qBAAqB;IAC/B,MAAM,KAAK;IACX,EAAE,IAAI;IACN,OAAO,IAAI;IACX,KAAK,IAAI,CAAC,0CAA0C;IACpD,MAAM,IAAI;IACV,KAAK,KAAK;CACb;AAWD,qBAAa,YAAY;IAErB,MAAM,EAAE,YAAY,CAAqB;IAEzC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,OAAO,CAAC,EAAE,OAAO,CAAS;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CAGnB;AAED,qBAAa,iBAAkB,SAAQ,YAAY;IAE/C,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAU;IACxB;;;;;OAKG;IACH,IAAI,KAAK,IAIK,OAAO,CADpB;IACD,IAAI,KAAK,CAAC,EAAE,EAAE,OAAO,EAGpB;;CAMJ;AAED,qBAAa,mBAAoB,SAAQ,YAAY;IAEjD,OAAO,CAAC,MAAM,CAAS;IACvB,IAAI,QAAQ,IAII,MAAM,CADrB;IACD,IAAI,QAAQ,CAAC,CAAC,EAAE,MAAM,EAGrB;CACJ;AAED,qBAAa,gBAAiB,SAAQ,YAAY;IAE9C,GAAG,EAAE,OAAO,CAAC;IAEb,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IAEnB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IAGnB,UAAU,EAAE,MAAM,CAAC;IAEnB,IAAI,KAAK,WAGR;IAED,IAAI,MAAM,WAGT;CACJ;AAED,qBAAa,kBAAmB,SAAQ,YAAY;IAIrC,MAAM,CAAC,EAAE,MAAM;IAEf,KAAK,CAAC,EAAE,OAAO;IACf,MAAM,CAAC,EAAE,QAAQ;IACjB,QAAQ,CAAC,EAAE,OAAO;gBAJlB,MAAM,CAAC,EAAE,MAAM,EAEf,KAAK,CAAC,EAAE,OAAO,EACf,MAAM,CAAC,EAAE,QAAQ,EACjB,QAAQ,CAAC,EAAE,OAAO;CAKhC;AAED,qBAAa,iBAAkB,SAAQ,YAAY;IAE/C,SAAS,CAAC,EAAE,SAAS,CAAC;CACzB"} \ No newline at end of file diff --git a/types/Editor/SelectBox.d.ts b/types/Editor/SelectBox.d.ts index 9797500..4ffea30 100644 --- a/types/Editor/SelectBox.d.ts +++ b/types/Editor/SelectBox.d.ts @@ -23,7 +23,7 @@ export declare class SelectBox extends SelectSetBase { /** * 包含该对象. 采用所有点都在选区内的做法 */ - ContainerObject(obj: Object3D): 1 | -1; + ContainerObject(obj: Object3D): 1 | 0 | -1; ContainsPoint(ptWcs: Vector3): boolean; } //# sourceMappingURL=SelectBox.d.ts.map \ No newline at end of file diff --git a/types/Editor/SelectBox.d.ts.map b/types/Editor/SelectBox.d.ts.map index e8b3092..c7b32c8 100644 --- a/types/Editor/SelectBox.d.ts.map +++ b/types/Editor/SelectBox.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SelectBox.d.ts","sourceRoot":"","sources":["../../../src/Editor/SelectBox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAW,QAAQ,EAAyC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEzG,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,oBAAY,UAAU;IAElB,IAAI,IAAI;IACR,CAAC,IAAI,CAAC,qBAAqB;IAC3B,CAAC,IAAI;CACR;AAED;;;GAGG;AACH,qBAAa,SAAU,SAAQ,aAAa;IAGxC,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,SAAS,CAAoB;IACrC,WAAW,EAAE,UAAU,CAAC;gBAEZ,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,UAAU;IAyB5E,IAAI,SAAS,SAGZ;IAGD,mBAAmB,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAsD3C,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,YAAY;IAUpB,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO;IAI5D;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC;IAatC,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;CAIzC"} \ No newline at end of file +{"version":3,"file":"SelectBox.d.ts","sourceRoot":"","sources":["../../../src/Editor/SelectBox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAW,QAAQ,EAAyC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEzG,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C,oBAAY,UAAU;IAElB,IAAI,IAAI;IACR,CAAC,IAAI,CAAC,qBAAqB;IAC3B,CAAC,IAAI;CACR;AAED;;;GAGG;AACH,qBAAa,SAAU,SAAQ,aAAa;IAGxC,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,SAAS,CAAoB;IACrC,WAAW,EAAE,UAAU,CAAC;gBAEZ,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,UAAU;IAyB5E,IAAI,SAAS,SAGZ;IAGD,mBAAmB,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;IAsD3C,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,YAAY;IAUpB,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO;IAI5D;;OAEG;IACH,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAa1C,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;CAIzC"} \ No newline at end of file diff --git a/types/Editor/SelectControls.d.ts.map b/types/Editor/SelectControls.d.ts.map index b329a46..13b0eff 100644 --- a/types/Editor/SelectControls.d.ts.map +++ b/types/Editor/SelectControls.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SelectControls.d.ts","sourceRoot":"","sources":["../../../src/Editor/SelectControls.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAElD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,qBAAa,cAAe,YAAW,aAAa;IAU5C,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;IATnB,iBAAiB,SAAQ;IACzB,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,UAAU,CAA8B;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,eAAe,CAAU;gBAGrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM;IAO3B,IAAI,OAAO,YAGV;IAEK,IAAI,CAAC,CAAC,EAAE,UAAU;IAexB,SAAS,CAAC,CAAC,EAAE,UAAU;IASvB;;;OAGG;IACH,IAAI,SAAS,IAAI,SAAS,CAGzB;IAED,IAAI,UAAU,CAAC,IAAI,EAAE,UAAU,EAI9B;IAED,aAAa;IAgBb,UAAU;IAqBV;;;OAGG;IACH,SAAS,CAAC,SAAS,UAAO,GAAG,IAAI;IA8DjC,WAAW;IAsBX,WAAW;IAkBX,SAAS,CAAC,CAAC,EAAE,aAAa;IAY1B,SAAS;IAQT,MAAM;IASN,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,YAAY,UAAQ;IAuBzD,YAAY,CAAC,UAAU,EAAE,aAAa;IAQtC,iBAAiB;IAKjB,cAAc;IAKd,UAAU;CAIb"} \ No newline at end of file +{"version":3,"file":"SelectControls.d.ts","sourceRoot":"","sources":["../../../src/Editor/SelectControls.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAGlD,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,qBAAa,cAAe,YAAW,aAAa;IAU5C,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,OAAO;IATnB,iBAAiB,SAAQ;IACzB,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,UAAU,CAA8B;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,eAAe,CAAU;gBAGrB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM;IAO3B,IAAI,OAAO,YAGV;IAEK,IAAI,CAAC,CAAC,EAAE,UAAU;IAexB,SAAS,CAAC,CAAC,EAAE,UAAU;IASvB;;;OAGG;IACH,IAAI,SAAS,IAAI,SAAS,CAGzB;IAED,IAAI,UAAU,CAAC,IAAI,EAAE,UAAU,EAI9B;IAED,aAAa;IAgBb,UAAU;IAqBV;;;OAGG;IACH,SAAS,CAAC,SAAS,UAAO,GAAG,IAAI;IA+DjC,WAAW;IAsBX,WAAW;IAkBX,SAAS,CAAC,CAAC,EAAE,aAAa;IAY1B,SAAS;IAQT,MAAM;IASN,SAAS,CAAC,UAAU,EAAE,aAAa,EAAE,YAAY,UAAQ;IAuBzD,YAAY,CAAC,UAAU,EAAE,aAAa;IAQtC,iBAAiB;IAKjB,cAAc;IAKd,UAAU;CAIb"} \ No newline at end of file diff --git a/types/Editor/SelectPick.d.ts b/types/Editor/SelectPick.d.ts index fa1224a..7aa605a 100644 --- a/types/Editor/SelectPick.d.ts +++ b/types/Editor/SelectPick.d.ts @@ -1,5 +1,5 @@ import { Object3D, Raycaster, Vector3 } from 'three'; -import { Viewer } from '../GraphicsSystem/Viewer'; +import { IViewer } from '../GraphicsSystem/IView'; import { SelectBox } from './SelectBox'; /** * 点选的数据结构 @@ -7,7 +7,7 @@ import { SelectBox } from './SelectBox'; export declare class SelectPick extends SelectBox { _PickPointVcs: Vector3; _Raycaster: Raycaster; - constructor(view: Viewer, ptVcs: Vector3, size?: number); + constructor(view: IViewer, ptVcs: Vector3, size?: number); /** * 单选重构了该方法,可以检验对象是否在选择框内 * @param {Object3D} obj diff --git a/types/Editor/SelectPick.d.ts.map b/types/Editor/SelectPick.d.ts.map index d330fd4..798dca7 100644 --- a/types/Editor/SelectPick.d.ts.map +++ b/types/Editor/SelectPick.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SelectPick.d.ts","sourceRoot":"","sources":["../../../src/Editor/SelectPick.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,SAAS,EAAc,MAAM,aAAa,CAAC;AAIpD;;GAEG;AACH,qBAAa,UAAW,SAAQ,SAAS;IAGrC,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,SAAS,CAAmB;gBAC5B,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,SAAO;IAWrD;;;;OAIG;IACH,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;CAQ1C"} \ No newline at end of file +{"version":3,"file":"SelectPick.d.ts","sourceRoot":"","sources":["../../../src/Editor/SelectPick.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAW,OAAO,EAAE,MAAM,OAAO,CAAC;AAE9D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAElD,OAAO,EAAE,SAAS,EAAc,MAAM,aAAa,CAAC;AAEpD;;GAEG;AACH,qBAAa,UAAW,SAAQ,SAAS;IAGrC,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,SAAS,CAAmB;gBAC5B,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,SAAO;IAWtD;;;;OAIG;IACH,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO;CAQ1C"} \ No newline at end of file diff --git a/types/Editor/SnapServices.d.ts b/types/Editor/SnapServices.d.ts index dbf50a0..89145ee 100644 --- a/types/Editor/SnapServices.d.ts +++ b/types/Editor/SnapServices.d.ts @@ -22,6 +22,7 @@ export declare class SnapServices { SnapModeEnable: ObjectSnapMode; EnablePolarSnap: boolean; CustomAxis: Vector3[]; + SnapEntity: Entity; private _SnapType; private _DynPrompt; private _HasBasePoint; @@ -34,6 +35,9 @@ export declare class SnapServices { TanBasePoint: Vector3; Start(prompt: GetPointPrompt): void; Stop(): void; + /** + * 返回当前拾取点的捕捉类型 + */ get SnapType(): ObjectSnapMode; private set SnapType(value); private UpdateCursort; diff --git a/types/Editor/SnapServices.d.ts.map b/types/Editor/SnapServices.d.ts.map index 5682f7b..26c39dd 100644 --- a/types/Editor/SnapServices.d.ts.map +++ b/types/Editor/SnapServices.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SnapServices.d.ts","sourceRoot":"","sources":["../../../src/Editor/SnapServices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsF,OAAO,EAAE,MAAM,OAAO,CAAC;AAOpH,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAc3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD;;GAEG;AACH,oBAAY,YAAY;IAEpB,IAAI,IAAI,CAAC,IAAI;IACb,KAAK,IAAI,CAAC,IAAI;IACd,KAAK,IAAI,CAAC,IAAI;IACd,MAAM,IAAI;CACb;AAqCD,qBAAa,YAAY;IAErB,QAAQ,EAAE,OAAO,CAAS;IAC1B,WAAW,UAAQ;IACnB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,QAAQ,SAAM;IACd,YAAY,eAAsB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAsB;IACpD,eAAe,EAAE,OAAO,CAAQ;IAChC,UAAU,EAAE,OAAO,EAAE,CAAM;IAC3B,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,kBAAkB,CAA0B;IACpD,OAAO,CAAC,qBAAqB,CAAM;IACnC,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,OAAO,CAAiB;IAEhC,iBAAiB;IACjB,YAAY,EAAE,OAAO,CAAC;IAEtB,KAAK,CAAC,MAAM,EAAE,cAAc;IA6D5B,IAAI;IAmBJ,IAAI,QAAQ,IAAI,cAAc,CAG7B;IAGD,OAAO,KAAK,QAAQ,QAOnB;IAED,OAAO,CAAC,aAAa;IAYrB;;;OAGG;IACH,YAAY,IAAI,OAAO,GAAG,SAAS;IASnC,OAAO,CAAC,mBAAmB,CAAC;IAE5B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,kBAAkB;IAuN1B,OAAO,CAAC,oBAAoB;IAkE5B,OAAO,CAAC,gBAAgB;IAqBxB;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ;IAuHhB,gBAAgB;IAmJhB;;OAEG;IACH,OAAO,CAAC,YAAY,CAAkB;IACtC;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,aAAa,CAAO;IAC5B,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,sBAAsB;IAuC9B,OAAO,CAAC,mBAAmB,CAAO;IAElC,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,wBAAwB;IAQhC,OAAO,CAAC,eAAe,CAAO;IAE9B,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,eAAe,CAAO;IAC9B,kBAAkB,EAAE,OAAO,EAAE,CAAM;IACnC,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,UAAU;IAqClB,aAAa;IAQb,eAAe;CAiElB;AAID,wBAAgB,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;;;EA6BhF"} \ No newline at end of file +{"version":3,"file":"SnapServices.d.ts","sourceRoot":"","sources":["../../../src/Editor/SnapServices.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsF,OAAO,EAAE,MAAM,OAAO,CAAC;AAOpH,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAc3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD;;GAEG;AACH,oBAAY,YAAY;IAEpB,IAAI,IAAI,CAAC,IAAI;IACb,KAAK,IAAI,CAAC,IAAI;IACd,KAAK,IAAI,CAAC,IAAI;IACd,MAAM,IAAI;CACb;AAsCD,qBAAa,YAAY;IAErB,QAAQ,EAAE,OAAO,CAAS;IAC1B,WAAW,UAAQ;IACnB,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,QAAQ,SAAM;IACd,YAAY,eAAsB;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,cAAc,CAAsB;IACpD,eAAe,EAAE,OAAO,CAAQ;IAChC,UAAU,EAAE,OAAO,EAAE,CAAM;IAE3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,SAAS,CAAuC;IACxD,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,kBAAkB,CAA0B;IACpD,OAAO,CAAC,qBAAqB,CAAM;IACnC,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,OAAO,CAAiB;IAEhC,iBAAiB;IACjB,YAAY,EAAE,OAAO,CAAC;IAEtB,KAAK,CAAC,MAAM,EAAE,cAAc;IA6D5B,IAAI;IAmBJ;;OAEG;IACH,IAAI,QAAQ,IAAI,cAAc,CAG7B;IAGD,OAAO,KAAK,QAAQ,QAOnB;IAED,OAAO,CAAC,aAAa;IAYrB;;;OAGG;IACH,YAAY,IAAI,OAAO,GAAG,SAAS;IASnC,OAAO,CAAC,mBAAmB,CAAC;IAE5B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,kBAAkB;IA4N1B,OAAO,CAAC,oBAAoB;IA0E5B,OAAO,CAAC,gBAAgB;IAqBxB;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ;IAuHhB,gBAAgB;IAmJhB;;OAEG;IACH,OAAO,CAAC,YAAY,CAAkB;IACtC;;OAEG;IACH,OAAO,CAAC,eAAe;IAkBvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,aAAa,CAAO;IAC5B,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,sBAAsB;IAuC9B,OAAO,CAAC,mBAAmB,CAAO;IAElC,OAAO,CAAC,sBAAsB;IAY9B,OAAO,CAAC,wBAAwB;IAQhC,OAAO,CAAC,eAAe,CAAO;IAE9B,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,eAAe,CAAO;IAC9B,kBAAkB,EAAE,OAAO,EAAE,CAAM;IACnC,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,UAAU;IAqClB,aAAa;IAQb,eAAe;CAiElB;AAID,wBAAgB,UAAU,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO;;;EA6BhF"} \ No newline at end of file diff --git a/types/Editor/TouchEditor/VirtualMouseEditor.d.ts b/types/Editor/TouchEditor/VirtualMouseEditor.d.ts index 32f1922..5c70b4a 100644 --- a/types/Editor/TouchEditor/VirtualMouseEditor.d.ts +++ b/types/Editor/TouchEditor/VirtualMouseEditor.d.ts @@ -1,4 +1,3 @@ -/// import { Vector3 } from "three"; import { MouseKey } from "../../Common/KeyEnum"; import { Singleton } from "../../Common/Singleton"; diff --git a/types/Editor/TouchEditor/VirtualMouseEditor.d.ts.map b/types/Editor/TouchEditor/VirtualMouseEditor.d.ts.map index 55f4cb8..bb2244e 100644 --- a/types/Editor/TouchEditor/VirtualMouseEditor.d.ts.map +++ b/types/Editor/TouchEditor/VirtualMouseEditor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"VirtualMouseEditor.d.ts","sourceRoot":"","sources":["../../../../src/Editor/TouchEditor/VirtualMouseEditor.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC;AACrE,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC;AAG3E,qBAAa,kBAAmB,SAAQ,SAAS;IAEjC,OAAO,CAAC,OAAO,CAAS;IAEpC,eAAe,EAAE,OAAO,CAAiB;IACzC,aAAa,EAAE,OAAO,CAAiB;IAEvC,OAAO,CAAC,kBAAkB,CAA4B;;IA0BtD,IAAc,MAAM,IAEN,OAAO,CAF0B;IAE/C,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,EAIpB;IAGD,qBAAqB,eAAgB,OAAO,UAa1C;IAEF,mBAAmB,MAAO,UAAU,UA6ClC;IAEF,eAAe,MAAC;IAEhB,YAAY,UAAW,WAAW,WAAW,QAAQ,UA8BnD;IAEF,UAAU,UAAW,WAAW,WAAW,QAAQ,UAmDjD;IAGF,WAAW,UAAW,WAAW,UA0B/B;CACL;AAGD,wBAAgB,sBAAsB,eAKP,MAAM,IAAI,UAkBxC"} \ No newline at end of file +{"version":3,"file":"VirtualMouseEditor.d.ts","sourceRoot":"","sources":["../../../../src/Editor/TouchEditor/VirtualMouseEditor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,UAAU,CAAC;AACrE,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC;AAG3E,qBAAa,kBAAmB,SAAQ,SAAS;IAEjC,OAAO,CAAC,OAAO,CAAS;IAEpC,eAAe,EAAE,OAAO,CAAiB;IACzC,aAAa,EAAE,OAAO,CAAiB;IAEvC,OAAO,CAAC,kBAAkB,CAA4B;;IA0BtD,IAAc,MAAM,IAEN,OAAO,CAF0B;IAE/C,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,EAIpB;IAGD,qBAAqB,eAAgB,OAAO,UAa1C;IAEF,mBAAmB,MAAO,UAAU,UA6ClC;IAEF,eAAe,MAAC;IAEhB,YAAY,UAAW,WAAW,WAAW,QAAQ,UA8BnD;IAEF,UAAU,UAAW,WAAW,WAAW,QAAQ,UAmDjD;IAGF,WAAW,UAAW,WAAW,UA0B/B;CACL;AAGD,wBAAgB,sBAAsB,eAKP,MAAM,IAAI,UAkBxC"} \ No newline at end of file diff --git a/types/Editor/TranstrolControl/ParseWalls.d.ts b/types/Editor/TranstrolControl/ParseWalls.d.ts index 61e2d7c..f22a307 100644 --- a/types/Editor/TranstrolControl/ParseWalls.d.ts +++ b/types/Editor/TranstrolControl/ParseWalls.d.ts @@ -1,5 +1,6 @@ import { Vector3 } from "three"; import { Entity } from "../../DatabaseServices/Entity/Entity"; +import { Segment1d } from "./Segment1dUtil"; export declare class ParseWalls { private _Pos; private _Dir; @@ -9,29 +10,4 @@ export declare class ParseWalls { FindInWall(x: number): Segment1d | undefined; private Raycast; } -export declare function FindInWall(x: number, walls: Segment1d[]): Segment1d; -export type Segment1d = [number, number]; -/** - * 一维区间的裁剪 - * @param primitiveSegs 原始区间 例如 [0,1] [2,3] - * @param subs 减去的区间 例如 [ [0,0.2] , [0.15,0.5] ]... - * @returns 剩余区间 [0.5,1] [2,3]... - */ -export declare function Segment1dSubtraction2(primitiveSegs: Segment1d[], subs: Segment1d[]): Segment1d[]; -/** - * 查找最近的区间和位置 - * @export - * @param {number} num 当前位置例如 5 - * @param {Segment1d[]} intervals 需要查找的区间例如 [[1,2],[7,9]] - * @param {number} dist 相距倍数 - * @param {number} allIntervalsLength 实际区间长度 - * @return {*} closestInterval closestNum最近值 closestDist值距离 positive值在左/右边 - */ -export declare function FindClosestInterval(num: number, intervals: Segment1d[], dist: number, allIntervalsLength?: number): { - closestInterval: Segment1d; - closestNum: number; - closestDist: number; - positive: boolean; -}; -export declare function operInterval(oldIntervals: Segment1d[], addIntervals: Segment1d[], filter?: Segment1d[]): any[]; //# sourceMappingURL=ParseWalls.d.ts.map \ No newline at end of file diff --git a/types/Editor/TranstrolControl/ParseWalls.d.ts.map b/types/Editor/TranstrolControl/ParseWalls.d.ts.map index 40a97c7..6d1cb97 100644 --- a/types/Editor/TranstrolControl/ParseWalls.d.ts.map +++ b/types/Editor/TranstrolControl/ParseWalls.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParseWalls.d.ts","sourceRoot":"","sources":["../../../../src/Editor/TranstrolControl/ParseWalls.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,OAAO,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAM9D,qBAAa,UAAU;IAIf,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,OAAO;IAJnB,OAAO,CAAC,KAAK,CAAc;gBAEf,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EAC5B,IAAI,EAAE,MAAM;IAYhB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAK5C,OAAO,CAAC,OAAO;CAiElB;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,CA8BnE;AAOD,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAyEzC;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CA6ChG;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,MAAM,GAC9G;IAAE,eAAe,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;CAAE,CAsE9F;AAED,wBAAgB,YAAY,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,SA0BtG"} \ No newline at end of file +{"version":3,"file":"ParseWalls.d.ts","sourceRoot":"","sources":["../../../../src/Editor/TranstrolControl/ParseWalls.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,OAAO,EAAE,MAAM,OAAO,CAAC;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAE9D,OAAO,EAAc,SAAS,EAAkB,MAAM,iBAAiB,CAAC;AAExE,qBAAa,UAAU;IAIf,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,OAAO;IAJnB,OAAO,CAAC,KAAK,CAAc;gBAEf,IAAI,EAAE,OAAO,EACb,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,EAC5B,IAAI,EAAE,MAAM;IAYhB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAK5C,OAAO,CAAC,OAAO;CAiElB"} \ No newline at end of file diff --git a/types/Editor/TranstrolControl/ParseWallsByHole.d.ts b/types/Editor/TranstrolControl/ParseWallsByHole.d.ts index fbc1ce5..ac503d4 100644 --- a/types/Editor/TranstrolControl/ParseWallsByHole.d.ts +++ b/types/Editor/TranstrolControl/ParseWallsByHole.d.ts @@ -1,5 +1,5 @@ import { RoomHoleBase } from "../../DatabaseServices/Room/Entity/Wall/Hole/RoomHoleBase"; -import { Segment1d } from "./ParseWalls"; +import { Segment1d } from "./Segment1dUtil"; export declare class ParseWallsByHole { private _Ent; private _Index; diff --git a/types/Editor/TranstrolControl/ParseWallsByHole.d.ts.map b/types/Editor/TranstrolControl/ParseWallsByHole.d.ts.map index 1145c7e..badd72a 100644 --- a/types/Editor/TranstrolControl/ParseWallsByHole.d.ts.map +++ b/types/Editor/TranstrolControl/ParseWallsByHole.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParseWallsByHole.d.ts","sourceRoot":"","sources":["../../../../src/Editor/TranstrolControl/ParseWallsByHole.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2DAA2D,CAAC;AAGzF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,qBAAa,gBAAgB;IAKrB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IAJlB,OAAO,CAAC,KAAK,CAAc;gBAGf,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM;IAS1B,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAK5C,OAAO,CAAC,SAAS;CAgCpB"} \ No newline at end of file +{"version":3,"file":"ParseWallsByHole.d.ts","sourceRoot":"","sources":["../../../../src/Editor/TranstrolControl/ParseWallsByHole.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2DAA2D,CAAC;AAGzF,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,qBAAa,gBAAgB;IAKrB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IAJlB,OAAO,CAAC,KAAK,CAAc;gBAGf,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,MAAM;IAS1B,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAK5C,OAAO,CAAC,SAAS;CAgCpB"} \ No newline at end of file diff --git a/types/Editor/TranstrolControl/Segment1dUtil.d.ts b/types/Editor/TranstrolControl/Segment1dUtil.d.ts index ac34495..21ef02f 100644 --- a/types/Editor/TranstrolControl/Segment1dUtil.d.ts +++ b/types/Editor/TranstrolControl/Segment1dUtil.d.ts @@ -5,6 +5,7 @@ export declare enum PointType { Right = 1,//前 坐标加大 Left = -1 } +export declare function FindInWall(x: number, walls: Segment1d[]): Segment1d; export declare function Segment1dUnion(segs: Segment1d[]): Segment1d[]; /** * 一维区间的裁剪 @@ -18,15 +19,17 @@ export declare function Segment1dSubtraction2(primitiveSegs: Segment1d[], subs: * @export * @param {number} num 当前位置例如 5 * @param {Segment1d[]} intervals 需要查找的区间例如 [[1,2],[7,9]] - * @param {number} dist 相距倍数 * @param {number} allIntervalsLength 实际区间长度 - * @return {*} closestInterval closestNum最近值 closestDist值距离 positive值在左/右边 + * @param {number} checkOtherNum 同时检查第二个数值是否在有效区间 + * @param {number} minDist 移动的最小步数 + * @param {number} inceptionNum 初始移动距离 当移动距离等于初始距离时应用 大于初始距离时 要符合(dist减去inceptionNum) 是最小步数的倍数 这样可以满足排钻通孔偏移后各个排钻32倍数 + * @return {*} closestInterval closestNum最近值 closestDist值距离 positive值 正数在左/负数右边 */ -export declare function FindClosestInterval(num: number, intervals: Segment1d[], dist: number, allIntervalsLength?: number): { +export declare function FindClosestInterval(num: number, intervals: Segment1d[], allIntervalsLength: number, minDist?: number, checkOtherNum?: number, inceptionNum?: number): { closestInterval: Segment1d; closestNum: number; closestDist: number; - positive: boolean; + positive: number; }; -export declare function operInterval(oldIntervals: Segment1d[], addIntervals: Segment1d[], filter?: Segment1d[]): any[]; +export declare function OperInterval(oldIntervals: Segment1d[], addIntervals: Segment1d[], filter?: Segment1d[]): any[]; //# sourceMappingURL=Segment1dUtil.d.ts.map \ No newline at end of file diff --git a/types/Editor/TranstrolControl/Segment1dUtil.d.ts.map b/types/Editor/TranstrolControl/Segment1dUtil.d.ts.map index 6ce29df..d92bb32 100644 --- a/types/Editor/TranstrolControl/Segment1dUtil.d.ts.map +++ b/types/Editor/TranstrolControl/Segment1dUtil.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Segment1dUtil.d.ts","sourceRoot":"","sources":["../../../../src/Editor/TranstrolControl/Segment1dUtil.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,IAAI,CAAC;AACvB,eAAO,MAAM,GAAG,IAAI,CAAC;AACrB,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACzC,oBAAY,SAAS;IAEjB,KAAK,IAAI,CAAC,QAAQ;IAClB,IAAI,KAAK;CACZ;AAoCD,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,eAoC/C;AACD;;;;;GAKG;AAEH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CA+ChG;AACD;;;;;;;;GAQG;AAEH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,kBAAkB,CAAC,EAAE,MAAM,GAAG;IAAE,eAAe,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;CAAE,CAwE/M;AAED,wBAAgB,YAAY,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,SA4BtG"} \ No newline at end of file +{"version":3,"file":"Segment1dUtil.d.ts","sourceRoot":"","sources":["../../../../src/Editor/TranstrolControl/Segment1dUtil.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,IAAI,CAAC;AACvB,eAAO,MAAM,GAAG,IAAI,CAAC;AACrB,MAAM,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACzC,oBAAY,SAAS;IAEjB,KAAK,IAAI,CAAC,QAAQ;IAClB,IAAI,KAAK;CACZ;AASD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,SAAS,CA+BnE;AA8BD,wBAAgB,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,eAmC/C;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CA+ChG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GACpK;IAAE,eAAe,EAAE,SAAS,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;CAAE,CA8H7F;AAED,wBAAgB,YAAY,CAAC,YAAY,EAAE,SAAS,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,SA0BtG"} \ No newline at end of file diff --git a/types/Editor/TranstrolControl/TransformServices.d.ts.map b/types/Editor/TranstrolControl/TransformServices.d.ts.map index 9e41012..28ac2ad 100644 --- a/types/Editor/TranstrolControl/TransformServices.d.ts.map +++ b/types/Editor/TranstrolControl/TransformServices.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TransformServices.d.ts","sourceRoot":"","sources":["../../../../src/Editor/TranstrolControl/TransformServices.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAQ9D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAQlD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAUlC,oBAAY,SAAS;IAEjB,IAAI,IAAI;IACR,MAAM,IAAI;IACV,KAAK,IAAI;IACT,GAAG,IAAI;CACV;AAED,oBAAY,WAAW;IAEnB,KAAK,IAAI;IACT,KAAK,IAAI;CACZ;AAID,qBAAa,kBAAmB,YAAW,aAAa;IASxC,OAAO,CAAC,OAAO;IAP3B,KAAK,EAAE,MAAM,EAAE,CAAM;IACrB,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,SAAS,CAAyF;IAC1G,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAA0B;gBAErB,OAAO,EAAE,MAAM;IAmCnC,IAAI,WAAW,IACI,WAAW,CADiB;IAC/C,IAAI,WAAW,CAAC,CAAC,EAAE,WAAW,EAO7B;IAED,IAAI,OAAO,YAGV;IAEK,IAAI,CAAC,CAAC,EAAE,UAAU;YAqDV,aAAa;YAiPb,YAAY;YAwGZ,aAAa;YAoFb,WAAW;YAiIX,cAAc;YA2Gd,cAAc;YA4Fd,SAAS;IAsEvB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,QAAQ;IAUhB,IAAI,OAAO,WAGV;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAQvB;IAED,mBAAmB;IA0CnB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,eAAe;IAoBvB,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,EAIpB;IAED,MAAM;CAQT"} \ No newline at end of file +{"version":3,"file":"TransformServices.d.ts","sourceRoot":"","sources":["../../../../src/Editor/TranstrolControl/TransformServices.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAQ9D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAQlD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAWlC,oBAAY,SAAS;IAEjB,IAAI,IAAI;IACR,MAAM,IAAI;IACV,KAAK,IAAI;IACT,GAAG,IAAI;CACV;AAED,oBAAY,WAAW;IAEnB,KAAK,IAAI;IACT,KAAK,IAAI;CACZ;AAID,qBAAa,kBAAmB,YAAW,aAAa;IASxC,OAAO,CAAC,OAAO;IAP3B,KAAK,EAAE,MAAM,EAAE,CAAM;IACrB,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,SAAS,CAAyF;IAC1G,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAA0B;gBAErB,OAAO,EAAE,MAAM;IAmCnC,IAAI,WAAW,IACI,WAAW,CADiB;IAC/C,IAAI,WAAW,CAAC,CAAC,EAAE,WAAW,EAO7B;IAED,IAAI,OAAO,YAGV;IAEK,IAAI,CAAC,CAAC,EAAE,UAAU;YAqDV,aAAa;YAiPb,YAAY;YAwGZ,aAAa;YAoFb,WAAW;YAiIX,cAAc;YA2Gd,cAAc;YA4Fd,SAAS;IAsEvB,OAAO,CAAC,cAAc;IAiBtB,OAAO,CAAC,QAAQ;IAUhB,IAAI,OAAO,WAGV;IAED,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,EAQvB;IAED,mBAAmB;IA0CnB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,eAAe;IAoBvB,IAAI,MAAM,CAAC,CAAC,EAAE,OAAO,EAIpB;IAED,MAAM;CAQT"} \ No newline at end of file diff --git a/types/Editor/TranstrolControl/TranslateGizmo.d.ts.map b/types/Editor/TranstrolControl/TranslateGizmo.d.ts.map index b1b3d4a..47b6e01 100644 --- a/types/Editor/TranstrolControl/TranslateGizmo.d.ts.map +++ b/types/Editor/TranstrolControl/TranslateGizmo.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TranslateGizmo.d.ts","sourceRoot":"","sources":["../../../../src/Editor/TranstrolControl/TranslateGizmo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAQ,iBAAiB,EAAoD,MAAM,OAAO,CAAC;AAIjI,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC,qBAAa,cAAe,SAAQ,QAAS,YAAW,MAAM;IAE1D,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAO;IAE1B,MAAM,CAAC,OAAO,oBAIX;IAEH,MAAM,CAAC,SAAS,oBAIb;IAEH,MAAM,CAAC,SAAS,oBAIb;IAEH,MAAM,CAAC,SAAS,oBAIb;IAEH,KAAK,EAAE,KAAK,CAAC;;IAmGb,OAAO,CAAC,OAAO,CAAe;IAC9B,QAAQ;IAsBR,OAAO,CAAC,MAAM,CAAC,OAAO,CAAkC;IAExD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAEpB;IAEH,OAAO,CAAC,MAAM,CAAC,SAAS,CAAyB;IACjD,MAAM,KAAK,QAAQ,2BAOlB;IAGD,IAAI,WAAW,CAAC,CAAC,EAAE,QAAQ,EAgD1B;IACD,IAAI,WAAW,IAjDI,QAAQ,CAoD1B;IAED,KAAK;CAmBR"} \ No newline at end of file +{"version":3,"file":"TranslateGizmo.d.ts","sourceRoot":"","sources":["../../../../src/Editor/TranstrolControl/TranslateGizmo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAQ,iBAAiB,EAAoD,MAAM,OAAO,CAAC;AAIjI,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC,qBAAa,cAAe,SAAQ,QAAS,YAAW,MAAM;IAE1D,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,WAAW,CAAO;IAE1B,MAAM,CAAC,OAAO,oBAIX;IAEH,MAAM,CAAC,SAAS,oBAIb;IAEH,MAAM,CAAC,SAAS,oBAIb;IAEH,MAAM,CAAC,SAAS,oBAIb;IAEK,KAAK,EAAE,KAAK,CAAC;;IAmGrB,OAAO,CAAC,OAAO,CAAe;IAC9B,QAAQ;IAsBR,OAAO,CAAC,MAAM,CAAC,OAAO,CAAkC;IAExD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAEpB;IAEH,OAAO,CAAC,MAAM,CAAC,SAAS,CAAyB;IACjD,MAAM,KAAK,QAAQ,2BAOlB;IAGD,IAAI,WAAW,CAAC,CAAC,EAAE,QAAQ,EAgD1B;IACD,IAAI,WAAW,IAjDI,QAAQ,CAoD1B;IAED,KAAK;CAmBR"} \ No newline at end of file diff --git a/types/Editor/UserConfig.d.ts b/types/Editor/UserConfig.d.ts index 70e354d..6e372bc 100644 --- a/types/Editor/UserConfig.d.ts +++ b/types/Editor/UserConfig.d.ts @@ -68,6 +68,11 @@ export declare class UserConfig implements IConfigStore { testModeSpacing: number; ConceptualEdgeColor: number; ConceptualOpacity: number; + ConceptualTransparentOpacity: number; + ConceptualOpacityUI: number; + ConceptualColorUI: string; + IsTransparentMetals: boolean; + IsTransparentComp: boolean; Physical2EdgeColor: number; titleWidthMap: Map; autoSaveConfig: { @@ -76,6 +81,11 @@ export declare class UserConfig implements IConfigStore { }; showLines: boolean; showOpenDirLines: boolean; + doorLinesOption: { + physicalShowLines: boolean; + physicalShowLines2: boolean; + reverseOpenDirLines: boolean; + }; show2DPathLine: boolean; show2DPathObject: boolean; keepConfig: boolean; @@ -97,12 +107,21 @@ export declare class UserConfig implements IConfigStore { hardwareExpressionFormattingAccuracy: number; partialSplitValueCanTakesEffect: boolean; xlineLength: number; + cancelHoleProcessing: boolean; + isCheckCustomBoardNumber: boolean; + reservedEdgeCheckTip: boolean; }; viewSize: { minViewHeight: number; maxViewHeight: number; zoomSpeed: number; }; + splitParams: { + ARC_SplitLength: number; + ARC_RADIUS_MIN: number; + Arc_MinSplitCount: number; + ARC_MaxSplitCount: number; + }; autoLines: boolean; dimTextHeight: number; boardCustomNumberTextHeight: number; @@ -117,7 +136,6 @@ export declare class UserConfig implements IConfigStore { textStyleOption: { appointTextHight: boolean; noNeedAngle: boolean; - textHight: number; }; showShareModule: boolean; openHistoryList: boolean; @@ -139,10 +157,23 @@ export declare class UserConfig implements IConfigStore { printResolution: number; }; templateDisplayCount: number; + isShowAxesMatrix: boolean; + commandInfoLongDisplay: boolean; hingeLidRule: { noLid: string; allLid: string; }; + forceOpendirOrNameChange: boolean; + throughModelSegmentedDrill: boolean; + brRelativePosChangeCount: boolean; + autoDeviation: boolean; + autoDeviationMinDist: number; + drillShortPrior: boolean; + reservedEdgeCheckTip: boolean; + smallGrooveThreshold: number; + isHardwareMaterial: boolean; + setHardwareAttribute: boolean; + sealWidthPercentage: number; constructor(); Init(): void; set RenderType(t: RenderType); @@ -190,6 +221,9 @@ export declare class UserConfig implements IConfigStore { hardwareExpressionFormattingAccuracy: number; partialSplitValueCanTakesEffect: boolean; xlineLength: number; + cancelHoleProcessing: boolean; + isCheckCustomBoardNumber: boolean; + reservedEdgeCheckTip: boolean; }; autoLines: boolean; dimTextHeight: number; @@ -201,7 +235,6 @@ export declare class UserConfig implements IConfigStore { textStyleOption: { appointTextHight: boolean; noNeedAngle: boolean; - textHight: number; }; viewSize: { minViewHeight: number; @@ -246,6 +279,34 @@ export declare class UserConfig implements IConfigStore { allLid: string; }; boardCustomNumberTextHeight: number; + forceOpendirOrNameChange: boolean; + throughModelSegmentedDrill: boolean; + brRelativePosChangeCount: boolean; + autoDeviation: boolean; + splitParams: { + ARC_SplitLength: number; + ARC_RADIUS_MIN: number; + Arc_MinSplitCount: number; + ARC_MaxSplitCount: number; + }; + drillShortPrior: boolean; + autoDeviationMinDist: number; + isShowAxesMatrix: boolean; + reservedEdgeCheckTip: boolean; + smallGrooveThreshold: number; + doorLinesOption: { + physicalShowLines: boolean; + physicalShowLines2: boolean; + reverseOpenDirLines: boolean; + }; + commandInfoLongDisplay: boolean; + ConceptualOpacityUI: number; + ConceptualColorUI: string; + isHardwareMaterial: boolean; + setHardwareAttribute: boolean; + IsTransparentMetals: boolean; + IsTransparentComp: boolean; + sealWidthPercentage: number; }; }; UpdateOption(config: IConfigOption): void; diff --git a/types/Editor/UserConfig.d.ts.map b/types/Editor/UserConfig.d.ts.map index 39019a4..865b925 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/Geometry/BSPGroupParse.d.ts b/types/Geometry/BSPGroupParse.d.ts new file mode 100644 index 0000000..1008617 --- /dev/null +++ b/types/Geometry/BSPGroupParse.d.ts @@ -0,0 +1,26 @@ +import { Geom3, Poly3 } from "@jscad/modeling/src/geometries/types"; +import { Vector3 } from "three"; +/** + * 解决 THREEBSP(CSG) 产生的结果没有办法得到分裂的个数. + * 本类分析了THREEBSP的组合情况. + * + * Example: + * + * let topology = new BSPGroupParse(csg); + * topology.parse(); + */ +export declare class BSPGroupParse { + fractionDigits: number; + constructor(bsp?: Geom3, fractionDigits?: number); + Add(poly: Poly3): void; + /** + * 返回组合点 + */ + Parse(): Vector3[][]; + private map; + private Get; + private GetPts; + private vecMap; + private GenerateP; +} +//# sourceMappingURL=BSPGroupParse.d.ts.map \ No newline at end of file diff --git a/types/Geometry/BSPGroupParse.d.ts.map b/types/Geometry/BSPGroupParse.d.ts.map new file mode 100644 index 0000000..483fa0f --- /dev/null +++ b/types/Geometry/BSPGroupParse.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"BSPGroupParse.d.ts","sourceRoot":"","sources":["../../../src/Geometry/BSPGroupParse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,sCAAsC,CAAC;AAEpE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGhC;;;;;;;;GAQG;AACH,qBAAa,aAAa;IAEU,cAAc;gBAAlC,GAAG,CAAC,EAAE,KAAK,EAAS,cAAc,SAAI;IAMlD,GAAG,CAAC,IAAI,EAAE,KAAK;IAaf;;OAEG;IACH,KAAK,IAAI,OAAO,EAAE,EAAE;IAoBpB,OAAO,CAAC,GAAG,CAAkC;IAC7C,OAAO,CAAC,GAAG;IAUX,OAAO,CAAC,MAAM;IAad,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,SAAS;CAMpB"} \ No newline at end of file diff --git a/types/Geometry/Board2DModelCSG/BoardSideModelCSGBuilder.d.ts b/types/Geometry/Board2DModelCSG/BoardSideModelCSGBuilder.d.ts new file mode 100644 index 0000000..cc341a9 --- /dev/null +++ b/types/Geometry/Board2DModelCSG/BoardSideModelCSGBuilder.d.ts @@ -0,0 +1,7 @@ +import { Geom3 } from "@jscad/modeling/src/geometries/geom3"; +import { Matrix4 } from "three"; +import { Board } from "../../DatabaseServices/Entity/Board"; +import { Curve } from "../../DatabaseServices/Entity/Curve"; +export declare function BoardSideModelCSGBuilder(board: Board): Geom3[]; +export declare function GetSideCuFaceMtx(cu: Curve, inverseZ?: boolean): Matrix4; +//# sourceMappingURL=BoardSideModelCSGBuilder.d.ts.map \ No newline at end of file diff --git a/types/Geometry/Board2DModelCSG/BoardSideModelCSGBuilder.d.ts.map b/types/Geometry/Board2DModelCSG/BoardSideModelCSGBuilder.d.ts.map new file mode 100644 index 0000000..0dd8b67 --- /dev/null +++ b/types/Geometry/Board2DModelCSG/BoardSideModelCSGBuilder.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"BoardSideModelCSGBuilder.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/Board2DModelCSG/BoardSideModelCSGBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAa,MAAM,sCAAsC,CAAC;AAExE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAK5D,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,CAgC9D;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAUrE"} \ No newline at end of file diff --git a/types/Geometry/BoardUVGenerator.d.ts.map b/types/Geometry/BoardUVGenerator.d.ts.map index 0578db9..d0904cc 100644 --- a/types/Geometry/BoardUVGenerator.d.ts.map +++ b/types/Geometry/BoardUVGenerator.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardUVGenerator.d.ts","sourceRoot":"","sources":["../../../src/Geometry/BoardUVGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEpE,cAAM,gBAAiB,YAAW,WAAW;IAEzC,aAAa,CAAC,QAAQ,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAejH,kBAAkB,CAAC,QAAQ,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAoCzI;AAED,cAAM,iBAAkB,SAAQ,gBAAgB;IAE5C,aAAa,CAAC,QAAQ,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAepH;AAED,eAAO,IAAI,gBAAgB,kBAAyB,CAAC;AACrD,eAAO,IAAI,iBAAiB,mBAA0B,CAAC"} \ No newline at end of file +{"version":3,"file":"BoardUVGenerator.d.ts","sourceRoot":"","sources":["../../../src/Geometry/BoardUVGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEpE,cAAM,gBAAiB,YAAW,WAAW;IAEzC,aAAa,CAAC,QAAQ,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAejH,kBAAkB,CAAC,QAAQ,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAkCzI;AAED,cAAM,iBAAkB,SAAQ,gBAAgB;IAE5C,aAAa,CAAC,QAAQ,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAepH;AAED,eAAO,IAAI,gBAAgB,kBAAyB,CAAC;AACrD,eAAO,IAAI,iBAAiB,mBAA0B,CAAC"} \ No newline at end of file diff --git a/types/Geometry/Box.d.ts b/types/Geometry/Box.d.ts index d6d26e9..2a8a2c0 100644 --- a/types/Geometry/Box.d.ts +++ b/types/Geometry/Box.d.ts @@ -16,6 +16,7 @@ export declare class Box3Ext extends Box3 { isSolid(minSize?: number): boolean; substract(b: Box3Ext, spaceType: SplitType): Box3Ext[]; clampSpace(b2: Box3Ext, splitType: SplitType): this; + containsBox(box: Box3, fuzz?: number): boolean; intersectsBox(box: Box3, fuzz?: number): boolean; } export declare function IntersectsBox(box1: Box3, box2: Box3, fuzz?: number): boolean; diff --git a/types/Geometry/Box.d.ts.map b/types/Geometry/Box.d.ts.map index 5d04a54..179e3b5 100644 --- a/types/Geometry/Box.d.ts.map +++ b/types/Geometry/Box.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Box.d.ts","sourceRoot":"","sources":["../../../src/Geometry/Box.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAW,MAAM,OAAO,CAAC;AAEtC;;GAEG;AACH,oBAAY,SAAS;IAEjB,CAAC,IAAI;IACL,CAAC,IAAI;IACL,CAAC,IAAI;CACR;AAED;;GAEG;AACH,qBAAa,OAAQ,SAAQ,IAAI;IAE7B,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,MAAM,WAIT;IAGD,OAAO,CAAC,OAAO,SAAI;IAInB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;IAiB1C,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;IAS5C,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,SAAO,GAAG,OAAO;CAIjD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,SAAO,GAAG,OAAO,CAK1E;AAED,eAAe;AACf,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,SAAO,WAIhE;AAGD,wBAAgB,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,SAAI,WAIhD"} \ No newline at end of file +{"version":3,"file":"Box.d.ts","sourceRoot":"","sources":["../../../src/Geometry/Box.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAW,MAAM,OAAO,CAAC;AAEtC;;GAEG;AACH,oBAAY,SAAS;IAEjB,CAAC,IAAI;IACL,CAAC,IAAI;IACL,CAAC,IAAI;CACR;AAED;;GAEG;AACH,qBAAa,OAAQ,SAAQ,IAAI;IAE7B,QAAQ,EAAE,GAAG,CAAC;IACd,IAAI,MAAM,WAIT;IAGD,OAAO,CAAC,OAAO,SAAI;IAInB,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;IAiB1C,UAAU,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;IAS5C,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,SAAO,GAAG,OAAO;IAM5C,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,SAAO,GAAG,OAAO;CAIjD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,SAAO,GAAG,OAAO,CAK1E;AAED,eAAe;AACf,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,SAAO,WAIhE;AAGD,wBAAgB,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,SAAI,WAIhD"} \ No newline at end of file diff --git a/types/Geometry/CreateContour2.d.ts.map b/types/Geometry/CreateContour2.d.ts.map index 45f2dd0..96e62b0 100644 --- a/types/Geometry/CreateContour2.d.ts.map +++ b/types/Geometry/CreateContour2.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CreateContour2.d.ts","sourceRoot":"","sources":["../../../src/Geometry/CreateContour2.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAQzD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,SAAO,GAAG,OAAO,EAAE,CAgHtE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,SAAO,GAAG,OAAO,GAAG,SAAS,CAGhF"} \ No newline at end of file +{"version":3,"file":"CreateContour2.d.ts","sourceRoot":"","sources":["../../../src/Geometry/CreateContour2.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAGtD,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AASzD;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,SAAO,GAAG,OAAO,EAAE,CAwItE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,SAAO,GAAG,OAAO,GAAG,SAAS,CAGhF"} \ No newline at end of file diff --git a/types/Geometry/CreatePolylinePath.d.ts b/types/Geometry/CreatePolylinePath.d.ts index 3ef5347..2a97dc3 100644 --- a/types/Geometry/CreatePolylinePath.d.ts +++ b/types/Geometry/CreatePolylinePath.d.ts @@ -1,5 +1,5 @@ import { Vector2 } from 'three'; import { Shape2 } from '../DatabaseServices/Shape2'; -export declare function CreatePolylinePath(pts: Vector2[], buls: number[]): Shape2; +export declare function CreatePolylinePath(pts: Vector2[], buls: number[], displayAccuracy?: number): Shape2; export declare function CreateShapeFromPoints(): void; //# sourceMappingURL=CreatePolylinePath.d.ts.map \ No newline at end of file diff --git a/types/Geometry/CreatePolylinePath.d.ts.map b/types/Geometry/CreatePolylinePath.d.ts.map index db9cafc..ad799b2 100644 --- a/types/Geometry/CreatePolylinePath.d.ts.map +++ b/types/Geometry/CreatePolylinePath.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CreatePolylinePath.d.ts","sourceRoot":"","sources":["../../../src/Geometry/CreatePolylinePath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAgCpD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CA0BzE;AAED,wBAAgB,qBAAqB,SAGpC"} \ No newline at end of file +{"version":3,"file":"CreatePolylinePath.d.ts","sourceRoot":"","sources":["../../../src/Geometry/CreatePolylinePath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAgCpD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,eAAe,SAAI,GAAG,MAAM,CA2B9F;AAED,wBAAgB,qBAAqB,SAGpC"} \ No newline at end of file diff --git a/types/Geometry/CreateWireframe.d.ts.map b/types/Geometry/CreateWireframe.d.ts.map index ab19bea..4c302cf 100644 --- a/types/Geometry/CreateWireframe.d.ts.map +++ b/types/Geometry/CreateWireframe.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CreateWireframe.d.ts","sourceRoot":"","sources":["../../../src/Geometry/CreateWireframe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAoC,IAAI,EAAE,iBAAiB,EAAgB,OAAO,EAAE,QAAQ,EAAW,MAAM,OAAO,CAAC;AAI5I,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAEtE,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAIpD,wBAAgB,eAAe,CAAC,IAAI,EAAE,KAAK,GAAG,YAAY,cAsEzD;AAaD,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,SAAI,EAAE,QAAQ,SAAI,EAAE,MAAM,UAAO,GAAG,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,EAAE,CAkDjI;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,SAAI,EAAE,MAAM,UAAO,EAAE,MAAM,GAAE,MAAM,EAAO,YAqBvI;AAID,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,SAAI,EAAE,QAAQ,SAAI,EAAE,MAAM,UAAO,EAAE,MAAM,GAAE,MAAM,EAAO,EAAE,GAAG,GAAE,OAAmB,YAmDjJ;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,SAAI,6CAoCxD"} \ No newline at end of file +{"version":3,"file":"CreateWireframe.d.ts","sourceRoot":"","sources":["../../../src/Geometry/CreateWireframe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAoC,IAAI,EAAE,iBAAiB,EAAgB,OAAO,EAAE,QAAQ,EAAW,MAAM,OAAO,CAAC;AAK5I,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAEtE,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAMpD,wBAAgB,eAAe,CAAC,IAAI,EAAE,KAAK,GAAG,YAAY,cAsEzD;AAaD,wBAAgB,aAAa,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,SAAI,EAAE,QAAQ,SAAI,EAAE,MAAM,UAAO,GAAG,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,EAAE,CAgFjI;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,SAAI,EAAE,MAAM,UAAO,EAAE,MAAM,GAAE,MAAM,EAAO,YAqBvI;AAID,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,YAAY,EAAE,KAAK,SAAI,EAAE,QAAQ,SAAI,EAAE,MAAM,UAAO,EAAE,MAAM,GAAE,MAAM,EAAO,EAAE,GAAG,GAAE,OAAmB,YAmDjJ;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,SAAI,6CAoCxD"} \ No newline at end of file diff --git a/types/Geometry/CurveIntersection.d.ts b/types/Geometry/CurveIntersection.d.ts index 704f437..4868bd3 100644 --- a/types/Geometry/CurveIntersection.d.ts +++ b/types/Geometry/CurveIntersection.d.ts @@ -18,7 +18,7 @@ export declare class CurveIntersection { * @memberof CurveIntersection */ constructor(cus: Curve[], parseIntersectionParam?: boolean, intType?: IntersectOption, fuzz?: number, parseRecord?: boolean); - protected IntersectWith2(c1: Curve, c2: Curve, intType: IntersectOption): import("../GraphicsSystem/IntersectWith").IntersectResult[]; + protected IntersectWith2(c1: Curve, c2: Curve, intType: IntersectOption, fuzz: number): import("../GraphicsSystem/IntersectWith").IntersectResult[]; protected AppendIntersectionParams(curve: Curve, params: [number, Vector3][]): void; protected GenBox(cus: Curve[]): void; protected SortCurve(cus: Curve[]): void; diff --git a/types/Geometry/CurveIntersection.d.ts.map b/types/Geometry/CurveIntersection.d.ts.map index 684208d..9b33d83 100644 --- a/types/Geometry/CurveIntersection.d.ts.map +++ b/types/Geometry/CurveIntersection.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CurveIntersection.d.ts","sourceRoot":"","sources":["../../../src/Geometry/CurveIntersection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE;;GAEG;AACH,qBAAa,iBAAiB;IAkBsE,SAAS,CAAC,IAAI;IAf9G,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAa;IAE/C;;OAEG;IACH,SAAS,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAa;IAEzD,UAAU,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAa;IAExD,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAM;IAE7C;;;OAGG;gBACS,GAAG,EAAE,KAAK,EAAE,EAAE,sBAAsB,UAAQ,EAAE,OAAO,kBAA6B,EAAY,IAAI,SAAO,EAAE,WAAW,UAAQ;IA6C1I,SAAS,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe;IAKvE,SAAS,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAW5E,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE;IAM7B,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE;IAQhC,YAAY,CAAC,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;CASjD;AAED,qBAAa,kBAAmB,SAAQ,iBAAiB;IAErD;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe;CAW1E"} \ No newline at end of file +{"version":3,"file":"CurveIntersection.d.ts","sourceRoot":"","sources":["../../../src/Geometry/CurveIntersection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAElE;;GAEG;AACH,qBAAa,iBAAiB;IAkBsE,SAAS,CAAC,IAAI;IAf9G,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAa;IAE/C;;OAEG;IACH,SAAS,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAa;IAEzD,UAAU,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,CAAa;IAExD,UAAU,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAM;IAE7C;;;OAGG;gBACS,GAAG,EAAE,KAAK,EAAE,EAAE,sBAAsB,UAAQ,EAAE,OAAO,kBAA6B,EAAY,IAAI,SAAO,EAAE,WAAW,UAAQ;IA6C1I,SAAS,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM;IAKrF,SAAS,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAW5E,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE;IAM7B,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,EAAE;IAQhC,YAAY,CAAC,EAAE,EAAE,KAAK,GAAG,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;CASjD;AAED,qBAAa,kBAAmB,SAAQ,iBAAiB;IAErD;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,eAAe;CAW1E"} \ No newline at end of file diff --git a/types/Geometry/DrillParse/BoardGetFace.d.ts b/types/Geometry/DrillParse/BoardGetFace.d.ts index bca5007..538ff76 100644 --- a/types/Geometry/DrillParse/BoardGetFace.d.ts +++ b/types/Geometry/DrillParse/BoardGetFace.d.ts @@ -1,8 +1,8 @@ import { Matrix4 } from "three"; import { Board } from "../../DatabaseServices/Entity/Board"; import { Curve } from "../../DatabaseServices/Entity/Curve"; +import { IHighSealedItem } from "../../UI/Store/OptionInterface/IHighSealedItem"; import { Face } from "./Face"; -export declare const CanDrawHoleFuzz = 0.1; export declare enum BoardFaceType { Side = 0, NoSide = 1 @@ -14,9 +14,16 @@ export declare class BoardGetFace { ParseFaces(): void; GetTopAndBottomFace(isEdgeFace?: boolean): void; GetSideFaces(): void; + GetArcBoardFaces(faceSealingDataMap?: Map, highSealingData?: IHighSealedItem[], sealCu?: Curve[]): void; IntersectFace(br: BoardGetFace, bInsEqual?: boolean): Face[]; static GetAllSidesFaces(br: Board, isMergeFace?: boolean): Face[]; } export declare function MatrixIsCoplane2(matrixFrom: Matrix4, matrixTo: Matrix4, zFuzz: number): boolean; export declare function GetSideFaceMtx(cu: Curve, inverseZ?: boolean): Matrix4; +export declare class ParseBoardSideFace extends BoardGetFace { + Board: Board; + constructor(Board: Board); + ParseFaces(): void; + GetSideFaces(): void; +} //# sourceMappingURL=BoardGetFace.d.ts.map \ No newline at end of file diff --git a/types/Geometry/DrillParse/BoardGetFace.d.ts.map b/types/Geometry/DrillParse/BoardGetFace.d.ts.map index 30b883e..37091b8 100644 --- a/types/Geometry/DrillParse/BoardGetFace.d.ts.map +++ b/types/Geometry/DrillParse/BoardGetFace.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardGetFace.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/DrillParse/BoardGetFace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAW,MAAM,OAAO,CAAC;AAKzC,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAG5D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,oBAAY,aAAa;IAErB,IAAI,IAAI;IACR,MAAM,IAAI;CACb;AACD,qBAAa,YAAY;IAGF,KAAK,EAAE,KAAK;IAD/B,KAAK,EAAE,IAAI,EAAE,CAAM;gBACA,KAAK,EAAE,KAAK;IAI/B,UAAU;IAOV,mBAAmB,CAAC,UAAU,UAAQ;IAqCtC,YAAY;IA0BZ,aAAa,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,GAAE,OAAe,GAAG,IAAI,EAAE;IAqBnE,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,UAAQ;CAwBzD;AAGD,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAe/F;AACD,wBAAgB,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAmBnE"} \ No newline at end of file +{"version":3,"file":"BoardGetFace.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/DrillParse/BoardGetFace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAoB,MAAM,OAAO,CAAC;AAQlD,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAI5D,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAIjF,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,oBAAY,aAAa;IAErB,IAAI,IAAI;IACR,MAAM,IAAI;CACb;AACD,qBAAa,YAAY;IAGF,KAAK,EAAE,KAAK;IAD/B,KAAK,EAAE,IAAI,EAAE,CAAM;gBACA,KAAK,EAAE,KAAK;IAI/B,UAAU;IAYV,mBAAmB,CAAC,UAAU,UAAQ;IAwCtC,YAAY;IA4BZ,gBAAgB,CAAC,kBAAkB,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,eAAe,CAAC,EAAE,eAAe,EAAE,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE;IAiL9G,aAAa,CAAC,EAAE,EAAE,YAAY,EAAE,SAAS,GAAE,OAAe,GAAG,IAAI,EAAE;IAqBnE,MAAM,CAAC,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,UAAQ;CAwBzD;AAGD,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAe/F;AACD,wBAAgB,cAAc,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAmBnE;AAED,qBAAa,kBAAmB,SAAQ,YAAY;IAE7B,KAAK,EAAE,KAAK;gBAAZ,KAAK,EAAE,KAAK;IAK/B,UAAU;IAKV,YAAY;CA0Bf"} \ No newline at end of file diff --git a/types/Geometry/DrillParse/CanDrawHoleFuzz.d.ts b/types/Geometry/DrillParse/CanDrawHoleFuzz.d.ts new file mode 100644 index 0000000..f741739 --- /dev/null +++ b/types/Geometry/DrillParse/CanDrawHoleFuzz.d.ts @@ -0,0 +1,2 @@ +export declare const CanDrawHoleFuzz = 0.1; +//# sourceMappingURL=CanDrawHoleFuzz.d.ts.map \ No newline at end of file diff --git a/types/Geometry/DrillParse/CanDrawHoleFuzz.d.ts.map b/types/Geometry/DrillParse/CanDrawHoleFuzz.d.ts.map new file mode 100644 index 0000000..3508002 --- /dev/null +++ b/types/Geometry/DrillParse/CanDrawHoleFuzz.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"CanDrawHoleFuzz.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/DrillParse/CanDrawHoleFuzz.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,eAAe,MAAM,CAAC"} \ No newline at end of file diff --git a/types/Geometry/DrillParse/CollisionDetection.d.ts.map b/types/Geometry/DrillParse/CollisionDetection.d.ts.map index 386f78d..a53a7d9 100644 --- a/types/Geometry/DrillParse/CollisionDetection.d.ts.map +++ b/types/Geometry/DrillParse/CollisionDetection.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CollisionDetection.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/DrillParse/CollisionDetection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAmB,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,qBAAa,kBAAkB;IAIf,OAAO,CAAC,OAAO;IAF3B,WAAW,EAAE,YAAY,EAAE,CAAM;IACjC,aAAa,EAAE,IAAI,EAAE,CAAM;gBACP,OAAO,GAAE,KAAK,EAAO;IAIzC,KAAK;CAoCR"} \ No newline at end of file +{"version":3,"file":"CollisionDetection.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/DrillParse/CollisionDetection.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,qBAAa,kBAAkB;IAIf,OAAO,CAAC,OAAO;IAF3B,WAAW,EAAE,YAAY,EAAE,CAAM;IACjC,aAAa,EAAE,IAAI,EAAE,CAAM;gBACP,OAAO,GAAE,KAAK,EAAO;IAIzC,KAAK;CAsCR"} \ No newline at end of file diff --git a/types/Geometry/DrillParse/Face.d.ts b/types/Geometry/DrillParse/Face.d.ts index 609a7c3..69d8ee1 100644 --- a/types/Geometry/DrillParse/Face.d.ts +++ b/types/Geometry/DrillParse/Face.d.ts @@ -1,5 +1,6 @@ import { Box3, Matrix4, Vector3 } from "three"; import { Board } from "../../DatabaseServices/Entity/Board"; +import { Polyline } from "../../DatabaseServices/Entity/Polyline"; import { Region } from "../../DatabaseServices/Entity/Region"; import { Segment1d } from "../../Editor/TranstrolControl/Segment1dUtil"; import { BoardFaceType } from "./BoardGetFace"; @@ -12,6 +13,8 @@ export interface BoardFaceParams { region?: Region; isRect?: boolean; drillType?: string; + polyLineOCS?: Matrix4; + CurveBoardFaceRegionPolyline?: Polyline; } export declare class Face { type: BoardFaceType; @@ -26,6 +29,8 @@ export declare class Face { DrillType: string; FixedInterval: Segment1d[]; Segment1D: Segment1d[]; + PolyLineOCS: Matrix4; + CurveBoardFaceRegionPolyline: Polyline; constructor(parameters?: BoardFaceParams); get Region(): Region; get OCSInv(): Matrix4; diff --git a/types/Geometry/DrillParse/Face.d.ts.map b/types/Geometry/DrillParse/Face.d.ts.map index 73831c8..b96dbd6 100644 --- a/types/Geometry/DrillParse/Face.d.ts.map +++ b/types/Geometry/DrillParse/Face.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Face.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/DrillParse/Face.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAG/C,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAC;AAIxE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,WAAW,eAAe;IAE5B,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,KAAK,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AACD,qBAAa,IAAI;IAEb,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,OAAO,CAAS;IACxB,UAAU,EAAE,KAAK,CAAC;IAClB,UAAU,EAAE,KAAK,CAAC;IAClB,WAAW,EAAE,OAAO,CAAS;IAC7B,GAAG,EAAE,OAAO,CAAiB;IAC7B,MAAM,EAAE,OAAO,CAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,SAAS,EAAE,SAAS,EAAE,CAAC;gBAEX,UAAU,CAAC,EAAE,eAAe;IAkBxC,IAAI,MAAM,WAKT;IACD,IAAI,MAAM,YAGT;IACD,IAAI,MAAM,YAGT;IACD,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE;IAsF1B,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAO,EAAE,iBAAiB,GAAE,IAAI,EAAO,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC;KAAE;CAwHlH"} \ No newline at end of file +{"version":3,"file":"Face.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/DrillParse/Face.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAI/C,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAC;AAIxE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,MAAM,WAAW,eAAe;IAE5B,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,KAAK,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4BAA4B,CAAC,EAAE,QAAQ,CAAC;CAC3C;AACD,qBAAa,IAAI;IAEb,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,OAAO,CAAS;IACxB,UAAU,EAAE,KAAK,CAAC;IAClB,UAAU,EAAE,KAAK,CAAC;IAClB,WAAW,EAAE,OAAO,CAAS;IAC7B,GAAG,EAAE,OAAO,CAAiB;IAC7B,MAAM,EAAE,OAAO,CAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,SAAS,EAAE,SAAS,EAAE,CAAC;IACvB,WAAW,EAAE,OAAO,CAAiB;IACrC,4BAA4B,EAAE,QAAQ,CAAC;gBAC3B,UAAU,CAAC,EAAE,eAAe;IAuBxC,IAAI,MAAM,WAQT;IACD,IAAI,MAAM,YAGT;IACD,IAAI,MAAM,YAGT;IACD,SAAS,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,EAAE;IAkL1B,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,SAAO,EAAE,iBAAiB,GAAE,IAAI,EAAO,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,IAAI,EAAE,CAAC;KAAE;CAqIlH"} \ No newline at end of file diff --git a/types/Geometry/DrillParse/Sement1dUntils.d.ts b/types/Geometry/DrillParse/Sement1dUntils.d.ts new file mode 100644 index 0000000..2fe5d31 --- /dev/null +++ b/types/Geometry/DrillParse/Sement1dUntils.d.ts @@ -0,0 +1,4 @@ +import { Segment1d } from "../../Editor/TranstrolControl/Segment1dUtil"; +export declare function Segment1dJoin(segment: Segment1d[]): Segment1d[]; +export declare function IntersectSegment1ds(segment1: Segment1d[], segment2: Segment1d[]): Segment1d[]; +//# sourceMappingURL=Sement1dUntils.d.ts.map \ No newline at end of file diff --git a/types/Geometry/DrillParse/Sement1dUntils.d.ts.map b/types/Geometry/DrillParse/Sement1dUntils.d.ts.map new file mode 100644 index 0000000..3ea3e73 --- /dev/null +++ b/types/Geometry/DrillParse/Sement1dUntils.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Sement1dUntils.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/DrillParse/Sement1dUntils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAC;AAKxE,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAuC/D;AAGD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE,CAiB7F"} \ No newline at end of file diff --git a/types/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.d.ts b/types/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.d.ts index e62e3fe..bb59af9 100644 --- a/types/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.d.ts +++ b/types/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.d.ts @@ -29,7 +29,7 @@ export declare class Groove { */ ClipTo(groove: Groove, eachOther?: boolean): void; private ClipLid; - Draw(verticesArray: number[], uvArray: number[], edgeBuild: EdgeGeometryBuild, rotateUv: boolean): void; + Draw(verticesArray: number[], uvArray: number[], edgeBuild: EdgeGeometryBuild, rotateUv: boolean, displayAccuracy?: number): void; } declare enum DirectionType { Outer = 0,//外墙 @@ -46,7 +46,7 @@ export declare class ContourTreeNode { get Depth(): number; get IsHole(): boolean; Draw(verticesArray: number[], uvArray: number[], front: boolean, z: number, rotateUv: boolean, allDepth: number): void; - static ParseContourTree(contourNodes: ContourTreeNode[]): void; + static ParseContourTree(contourNodes: ContourTreeNode[], ignoreInCurve?: boolean, checkIntersect?: boolean): void; } declare class EdgeGeometryBuild { allDepth: number; @@ -138,7 +138,7 @@ declare class ExtudeWall { * @param depth 裁剪面的深度 */ ClipFromParam(startParam: number, endParam: number, faceType: DepthType, depth: number): this; - Draw(verticesArray: number[], uvArray: number[], edgeBuild: EdgeGeometryBuild): void; + Draw(verticesArray: number[], uvArray: number[], edgeBuild: EdgeGeometryBuild, displayAccuracy?: number): void; } /** * 曲线参数范围关系(包含,分离,同向共线,反向共线) diff --git a/types/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.d.ts.map b/types/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.d.ts.map index e3ee785..104a2e7 100644 --- a/types/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.d.ts.map +++ b/types/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ExtrudeEdgeGeometry2.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ExtrudeEdgeGeometry2.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams.d.ts.map b/types/Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams.d.ts.map index cf6fd73..1793621 100644 --- a/types/Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams.d.ts.map +++ b/types/Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SplitCurveParams.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAO5E,eAAO,MAAM,eAAe;;;;;CAK3B,CAAC;AAGF,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CASlE;AAGD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,mBAAmB,GAAG,MAAM,EAAE,CA2ClE;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,mBAAmB,GAAG,OAAO,EAAE,CAgCnE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE,CAmBjD"} \ No newline at end of file +{"version":3,"file":"SplitCurveParams.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGhC,OAAO,EAAE,GAAG,EAAE,MAAM,mCAAmC,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAO5E,eAAO,MAAM,eAAe;;;;;CAK3B,CAAC;AAGF,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CASlE;AAGD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,mBAAmB,GAAG,MAAM,EAAE,CA6ClE;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,mBAAmB,GAAG,OAAO,EAAE,CAgCnE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE,CAmBjD"} \ No newline at end of file diff --git a/types/Geometry/RegionParse.d.ts.map b/types/Geometry/RegionParse.d.ts.map index accf5d1..9a7a19e 100644 --- a/types/Geometry/RegionParse.d.ts.map +++ b/types/Geometry/RegionParse.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RegionParse.d.ts","sourceRoot":"","sources":["../../../src/Geometry/RegionParse.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAEzD,OAAO,EAAY,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAMtD,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;AAEhC;;;;;;GAMG;AACH,qBAAa,WAAW;IAiBgB,aAAa;IAAM,OAAO,CAAC,eAAe;IAd9E,cAAc,EAAE,YAAY,CAAM;IAElC,eAAe,EAAE,YAAY,CAAM;IAGnC,UAAU,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAa;IAE5C,OAAO,CAAC,WAAW,CAAS;IAE5B;;;;OAIG;gBACS,MAAM,EAAE,KAAK,EAAE,EAAS,aAAa,SAAI,EAAU,eAAe,UAAO;IAiErF,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE;IAKtC,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,UAAU;IAWlB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;;OAGG;IACH,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IAwEhE,OAAO,CAAC,QAAQ;IAUhB;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,KAAK,GAAG,OAAO;CAYnC;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAQtD"} \ No newline at end of file +{"version":3,"file":"RegionParse.d.ts","sourceRoot":"","sources":["../../../src/Geometry/RegionParse.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAEzD,OAAO,EAAY,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAMtD,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;AAEhC;;;;;;GAMG;AACH,qBAAa,WAAW;IAiBgB,aAAa;IAAM,OAAO,CAAC,eAAe;IAd9E,cAAc,EAAE,YAAY,CAAM;IAElC,eAAe,EAAE,YAAY,CAAM;IAGnC,UAAU,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAa;IAE5C,OAAO,CAAC,WAAW,CAAS;IAE5B;;;;OAIG;gBACS,MAAM,EAAE,KAAK,EAAE,EAAS,aAAa,SAAI,EAAU,eAAe,UAAO;IAiErF,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE;IAKtC,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,UAAU;IAWlB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B;;;OAGG;IACH,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IA0EhE,OAAO,CAAC,QAAQ;IAUhB;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,KAAK,GAAG,OAAO;CAYnC;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAQtD"} \ No newline at end of file diff --git a/types/Geometry/SpaceParse/ISpaceParse.d.ts b/types/Geometry/SpaceParse/ISpaceParse.d.ts index 1aed2a4..db435bc 100644 --- a/types/Geometry/SpaceParse/ISpaceParse.d.ts +++ b/types/Geometry/SpaceParse/ISpaceParse.d.ts @@ -1,7 +1,6 @@ import { Matrix4, Vector3 } from "three"; import { Board } from "../../DatabaseServices/Entity/Board"; import { BoardType } from "../../DatabaseServices/Entity/BoardInterface"; -import { Entity } from "../../DatabaseServices/Entity/Entity"; import { Box3Ext, SplitType } from "../Box"; import { VisualSpaceBox } from './../../Editor/VisualSpaceBox'; export declare class ISpaceParse { @@ -39,7 +38,6 @@ export declare class ISpaceParse { y: number; z: number; }; - IntersectSpaceEntitys: Entity[]; /** * # 构造后请手动调用Parse()方法. * @param boards 板件列表 diff --git a/types/Geometry/SpaceParse/ISpaceParse.d.ts.map b/types/Geometry/SpaceParse/ISpaceParse.d.ts.map index bf58784..9fbc29a 100644 --- a/types/Geometry/SpaceParse/ISpaceParse.d.ts.map +++ b/types/Geometry/SpaceParse/ISpaceParse.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ISpaceParse.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/SpaceParse/ISpaceParse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,qBAAa,WAAW;IAEpB;;OAEG;IACH,OAAO,UAAS;IAEhB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAa;IAE9C;;OAEG;IACH,MAAM,EAAE,KAAK,EAAE,CAAC;IAEhB,SAAS,EAAE,KAAK,CAAC;IACjB,UAAU,EAAE,KAAK,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAS;IAC3B,aAAa;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ;;;;MAAwB;IAGhC,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAEhC;;;;OAIG;gBACS,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC,EAAE,OAAO;IAe1C,KAAK;IAEX,IAAI,IAAI,YAKP;IAED,IAAI,MAAM,IAAI,OAAO,CAOpB;IAED,SAAS,CAAC,mBAAmB,CAAC,EAAE,EAAE,KAAK,GAAG,SAAS;IAenD;;OAEG;IACH,SAAS,CAAC,eAAe;IAmBzB;;;;OAIG;IACH,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,EAAE;CAmE9E"} \ No newline at end of file +{"version":3,"file":"ISpaceParse.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/SpaceParse/ISpaceParse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AACzE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,qBAAa,WAAW;IAEpB;;OAEG;IACH,OAAO,UAAS;IAEhB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,CAAC,CAAa;IAE9C;;OAEG;IACH,MAAM,EAAE,KAAK,EAAE,CAAC;IAEhB,SAAS,EAAE,KAAK,CAAC;IACjB,UAAU,EAAE,KAAK,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAS;IAC3B,aAAa;IACb,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ;;;;MAAwB;IAEhC;;;;OAIG;gBACS,MAAM,CAAC,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC,EAAE,OAAO;IAe1C,KAAK;IAEX,IAAI,IAAI,YAKP;IAED,IAAI,MAAM,IAAI,OAAO,CAOpB;IAED,SAAS,CAAC,mBAAmB,CAAC,EAAE,EAAE,KAAK,GAAG,SAAS;IAenD;;OAEG;IACH,SAAS,CAAC,eAAe;IAmBzB;;;;OAIG;IACH,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,EAAE;CAmE9E"} \ No newline at end of file diff --git a/types/Geometry/SpaceParse/Point2SpaceParse.d.ts b/types/Geometry/SpaceParse/Point2SpaceParse.d.ts index a8bd6c7..70de68c 100644 --- a/types/Geometry/SpaceParse/Point2SpaceParse.d.ts +++ b/types/Geometry/SpaceParse/Point2SpaceParse.d.ts @@ -8,6 +8,7 @@ export declare class Point2SpaceParse extends ISpaceParse { * @param p2UCS * @param UCSMatrix * @param lastDepth + * @param autoParseDepth //是否解析深度 */ -export declare function GetSpaceDepth(p1UCS: Vector3, p2UCS: Vector3, UCSMatrix: Matrix4, lastDepth: number): Promise; +export declare function GetSpaceDepth(p1UCS: Vector3, p2UCS: Vector3, UCSMatrix: Matrix4, lastDepth: number, autoParseDepth: boolean): Promise; //# sourceMappingURL=Point2SpaceParse.d.ts.map \ No newline at end of file diff --git a/types/Geometry/SpaceParse/Point2SpaceParse.d.ts.map b/types/Geometry/SpaceParse/Point2SpaceParse.d.ts.map index 7b65a1c..6114a48 100644 --- a/types/Geometry/SpaceParse/Point2SpaceParse.d.ts.map +++ b/types/Geometry/SpaceParse/Point2SpaceParse.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Point2SpaceParse.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/SpaceParse/Point2SpaceParse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAuB,OAAO,EAAE,MAAM,OAAO,CAAC;AAiB9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,qBAAa,gBAAiB,SAAQ,WAAW;IAEvC,KAAK;CAmDd;AAiBD;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAsFxG"} \ No newline at end of file +{"version":3,"file":"Point2SpaceParse.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/SpaceParse/Point2SpaceParse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAuB,OAAO,EAAE,MAAM,OAAO,CAAC;AAoB9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAK5C,qBAAa,gBAAiB,SAAQ,WAAW;IAEvC,KAAK;CAwEd;AAiBD;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,mBA2FjI"} \ No newline at end of file diff --git a/types/Geometry/SpaceParse/Point3SpaceParse,.d.ts.map b/types/Geometry/SpaceParse/Point3SpaceParse,.d.ts.map index 2bb0db8..e140f41 100644 --- a/types/Geometry/SpaceParse/Point3SpaceParse,.d.ts.map +++ b/types/Geometry/SpaceParse/Point3SpaceParse,.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Point3SpaceParse,.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/SpaceParse/Point3SpaceParse,.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAM5C,qBAAa,gBAAiB,SAAQ,WAAW;IAEvC,KAAK;CAuFd"} \ No newline at end of file +{"version":3,"file":"Point3SpaceParse,.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/SpaceParse/Point3SpaceParse,.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAO5C,qBAAa,gBAAiB,SAAQ,WAAW;IAEvC,KAAK;CA0Gd"} \ No newline at end of file diff --git a/types/Geometry/SpaceParse/PointSelectSpace.d.ts.map b/types/Geometry/SpaceParse/PointSelectSpace.d.ts.map index ddfea6d..852b7e3 100644 --- a/types/Geometry/SpaceParse/PointSelectSpace.d.ts.map +++ b/types/Geometry/SpaceParse/PointSelectSpace.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"PointSelectSpace.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/SpaceParse/PointSelectSpace.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAI9D,OAAO,EAAE,iBAAiB,EAAgB,MAAM,2BAA2B,CAAC;AAI5E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,oBAAY,gBAAgB;IAExB,OAAO,IAAI;IACX,GAAG,IAAI;IACP,KAAK,IAAI;IACT,WAAW,IAAI;IACf,GAAG,IAAa;CACnB;AAUD,qBAAa,gBAAgB;IAEzB,UAAU,EAAE,WAAW,CAAC;IACxB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,MAAM,mBAAwB;IAC9B,WAAW,UAAS;IACpB,WAAW,UAAS;IACd,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAqHhC,IAAI,OAAO,IAAI,OAAO,CAGrB;IAED;;;OAGG;cACa,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE;IAI1C;;;OAGG;cACa,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,SAAS,UAAQ;cAGjE,aAAa;cAGb,aAAa;YAEf,eAAe;IAwB7B,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,YAAY;IA8BpB,OAAO,CAAC,mBAAmB;CAI9B;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,WAG7C;AAGD,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,WAAW,QAoC1D"} \ No newline at end of file +{"version":3,"file":"PointSelectSpace.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/SpaceParse/PointSelectSpace.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAE5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAI9D,OAAO,EAAE,iBAAiB,EAAgB,MAAM,2BAA2B,CAAC;AAI5E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,oBAAY,gBAAgB;IAExB,OAAO,IAAI;IACX,GAAG,IAAI;IACP,KAAK,IAAI;IACT,WAAW,IAAI;IACf,GAAG,IAAa;CACnB;AAUD,qBAAa,gBAAgB;IAEzB,UAAU,EAAE,WAAW,CAAC;IACxB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,MAAM,mBAAwB;IAC9B,WAAW,UAAS;IACpB,WAAW,UAAS;IAEd,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ;IAqHhC,IAAI,OAAO,IAAI,OAAO,CAGrB;IAED;;;OAGG;cACa,aAAa,CAAC,GAAG,EAAE,KAAK,EAAE;IAI1C;;;OAGG;cACa,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,SAAS,UAAQ;cAGjE,aAAa;cAGb,aAAa;YAEf,eAAe;IAwB7B,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,YAAY;IA8BpB,OAAO,CAAC,mBAAmB;CAI9B;AAED,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,WAG7C;AAGD,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,WAAW,QAoC1D"} \ No newline at end of file diff --git a/types/Geometry/SpaceParse/SpaceParseOption.d.ts b/types/Geometry/SpaceParse/SpaceParseOption.d.ts new file mode 100644 index 0000000..98556ab --- /dev/null +++ b/types/Geometry/SpaceParse/SpaceParseOption.d.ts @@ -0,0 +1,4 @@ +export interface SpaceParseOption { + autoParseDepth: boolean; +} +//# sourceMappingURL=SpaceParseOption.d.ts.map \ No newline at end of file diff --git a/types/Geometry/SpaceParse/SpaceParseOption.d.ts.map b/types/Geometry/SpaceParse/SpaceParseOption.d.ts.map new file mode 100644 index 0000000..158fbbf --- /dev/null +++ b/types/Geometry/SpaceParse/SpaceParseOption.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"SpaceParseOption.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/SpaceParse/SpaceParseOption.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,gBAAgB;IAE7B,cAAc,EAAE,OAAO,CAAC;CAC3B"} \ No newline at end of file diff --git a/types/Geometry/SpaceParse/SpaceParseStore.d.ts b/types/Geometry/SpaceParse/SpaceParseStore.d.ts new file mode 100644 index 0000000..a9748d9 --- /dev/null +++ b/types/Geometry/SpaceParse/SpaceParseStore.d.ts @@ -0,0 +1,17 @@ +import { CADFiler } from "../../DatabaseServices/CADFiler"; +import { IConfigStore } from "../../UI/Store/BoardStore"; +import { SpaceParseOption } from "./SpaceParseOption"; +export declare class SpaceParseStore implements IConfigStore { + configName: string; + m_Option: SpaceParseOption; + configsNames: string[]; + InitOption(): void; + SaveConfig(): any; + UpdateOption(confData: any): void; + private static _SingleInstance; + static GetInstance(): SpaceParseStore; + ReadFile: (file: CADFiler) => void; + WriteFile(file?: CADFiler): any[]; +} +export declare const spaceParseStore: SpaceParseStore; +//# sourceMappingURL=SpaceParseStore.d.ts.map \ No newline at end of file diff --git a/types/Geometry/SpaceParse/SpaceParseStore.d.ts.map b/types/Geometry/SpaceParse/SpaceParseStore.d.ts.map new file mode 100644 index 0000000..8fa66aa --- /dev/null +++ b/types/Geometry/SpaceParse/SpaceParseStore.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"SpaceParseStore.d.ts","sourceRoot":"","sources":["../../../../src/Geometry/SpaceParse/SpaceParseStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,qBAAa,eAAgB,YAAW,YAAY;IAEpC,UAAU,SAAQ;IAClB,QAAQ,EAAE,gBAAgB,CAAkC;IAC5D,YAAY,EAAE,MAAM,EAAE,CAAM;IAExC,UAAU;IAKV,UAAU,IAEqB,GAAG;IAGlC,YAAY,CAAC,QAAQ,EAAE,GAAG;IAM1B,OAAO,CAAC,MAAM,CAAC,eAAe,CAAkB;IAEhD,MAAM,CAAC,WAAW,IAAI,eAAe;IAOrC,QAAQ,SAAU,QAAQ,UAIxB;IAEF,SAAS,CAAC,IAAI,GAAE,QAAuB;CAO1C;AAED,eAAO,MAAM,eAAe,iBAAgC,CAAC"} \ No newline at end of file diff --git a/types/Geometry/WordUVGenerator.d.ts b/types/Geometry/WordUVGenerator.d.ts new file mode 100644 index 0000000..8eb423e --- /dev/null +++ b/types/Geometry/WordUVGenerator.d.ts @@ -0,0 +1,8 @@ +import { ExtrudeBufferGeometry, UVGenerator, Vector2 } from "three"; +declare class WorldUVGenerator implements UVGenerator { + generateTopUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number): Vector2[]; + generateSideWallUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number, indexD: number): Vector2[]; +} +export declare const worldUVGenerator: WorldUVGenerator; +export {}; +//# sourceMappingURL=WordUVGenerator.d.ts.map \ No newline at end of file diff --git a/types/Geometry/WordUVGenerator.d.ts.map b/types/Geometry/WordUVGenerator.d.ts.map new file mode 100644 index 0000000..3401a09 --- /dev/null +++ b/types/Geometry/WordUVGenerator.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"WordUVGenerator.d.ts","sourceRoot":"","sources":["../../../src/Geometry/WordUVGenerator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGpE,cAAM,gBAAiB,YAAW,WAAW;IAEzC,aAAa,CAAC,QAAQ,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAgBjH,kBAAkB,CAAC,QAAQ,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAkCzI;AAED,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"} \ No newline at end of file diff --git a/types/GraphicsSystem/CalcEdgeSealing.d.ts b/types/GraphicsSystem/CalcEdgeSealing.d.ts index 6d41390..c50fdda 100644 --- a/types/GraphicsSystem/CalcEdgeSealing.d.ts +++ b/types/GraphicsSystem/CalcEdgeSealing.d.ts @@ -1,7 +1,8 @@ import { Board } from "../DatabaseServices/Entity/Board"; import { Curve } from "../DatabaseServices/Entity/Curve"; import { ExtrudeContourCurve } from "../DatabaseServices/Entity/Extrude"; -import { IHighEdgeRemarkItem, IHighSealedItem } from "../UI/Store/OptionInterface/IHighSealedItem"; +import { SplitOrderType } from "../Production/Product"; +import { IHighEdgeRemarkItem, IHighReservedEdgeItem, IHighSealedItem } from "../UI/Store/OptionInterface/IHighSealedItem"; type CurveGroups = (Curve[])[]; /** * 将曲线分段(根据高级封边的特性 (因为圆弧无法单独使用封边,所以和圆弧在一起的曲线必须和圆弧一样的封边,否则偏移失败)) @@ -11,7 +12,15 @@ type CurveGroups = (Curve[])[]; */ export declare function SubsectionCurvesOfHightSeal(in_out_curves: Curve[]): CurveGroups; export declare function GetBoardHighSeal(br: Board, sealcus: Curve[]): IHighSealedItem[]; -export declare function GetHighBoardEdgeRemark(br: Board, sealcus: Curve[]): IHighEdgeRemarkItem[]; +export declare function GetBoardHighReservedEdge(br: Board, sealcus: Curve[]): IHighReservedEdgeItem[]; +/** + * 获取板边备注 + * @param br 板 + * @param sealcus 封边轮廓线 + * @param addAll 添加所有板边备注 + * @returns 板边备注 + */ +export declare function GetHighBoardEdgeRemark(br: Board, sealcus: Curve[], addAll?: boolean): IHighEdgeRemarkItem[]; /**偏移前后曲线起点没改变 */ export declare function OffsetOutlineSpNotChange(oldcu: Curve, newCu: Curve): boolean; /** @@ -25,6 +34,8 @@ export interface BrSealedData { sealedContour: ExtrudeContourCurve; brCurves: Curve[]; highSeals: IHighSealedItem[]; + highReservedEdges: IHighReservedEdgeItem[]; + hasSealedErr?: boolean; } /** * 获取板件的轮廓(没有扣封边)(拆单时表现) @@ -35,8 +46,11 @@ export declare function GetBoardContour(br: Board): ExtrudeContourCurve | undefi /** * 获取板件(扣封边后的)轮廓(拆单时) * 修改时 请注意函数 GetBoardContour + * @param {Board} br 板件 + * @param {SplitOrderType} [splitType=SplitOrderType.ChaiDan] 拆单类型 + * @return {*} {(BrSealedData | undefined)} */ -export declare function GetSealedBoardContour(br: Board): BrSealedData | undefined; +export declare function GetSealedBoardContour(br: Board, splitType?: SplitOrderType): BrSealedData | undefined; /** * 将11对应的封边数值改成WebCAD的高级封边 * @param seals 每段曲线的封边 @@ -52,6 +66,7 @@ export declare function ConverEachSeal2HightSealData(seals: IHighSealedItem[], c * @param [brContourCurve] 传递封边的曲线轮廓 */ export declare function SetBoardTopDownLeftRightSealData(br: Board, sealDatas: IHighSealedItem[], sealCurves?: Curve[], brContourCurve?: ExtrudeContourCurve): void; +export declare function SetBoardReservedEdgeData(br: Board, sealDatas: IHighReservedEdgeItem[], sealCurves?: Curve[], brContourCurve?: ExtrudeContourCurve): void; export declare function SetBoardEdgeRemarkData(br: Board, remarkDatas: IHighEdgeRemarkItem[], sealCurves?: Curve[], brContourCurve?: ExtrudeContourCurve): void; export {}; //# sourceMappingURL=CalcEdgeSealing.d.ts.map \ No newline at end of file diff --git a/types/GraphicsSystem/CalcEdgeSealing.d.ts.map b/types/GraphicsSystem/CalcEdgeSealing.d.ts.map index 5a87034..6fef848 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":"AAQA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAEzD,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAOzE,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAInG,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;AAE/B;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,KAAK,EAAE,GAAG,WAAW,CAkH/E;AAID,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,eAAe,EAAE,CAoD/E;AAED,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,mBAAmB,EAAE,CAuDzF;AAED,iBAAiB;AACjB,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,WASlE;AAED;;;;KAIK;AACL,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,UAAQ,GAAG,KAAK,EAAE,CA6B9E;AAGD,MAAM,WAAW,YAAY;IAEzB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,aAAa,EAAE,mBAAmB,CAAC;IAEnC,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClB,SAAS,EAAE,eAAe,EAAE,CAAC;CAChC;AA2BD;;;;EAIE;AACF,wBAAgB,eAAe,CAAC,EAAE,EAAE,KAAK,GAAG,mBAAmB,GAAG,SAAS,CAkB1E;AAGD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,KAAK,GAAG,YAAY,GAAG,SAAS,CA8JzE;AAGD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,eAAe,EAAE,CAgBzG;AAGD;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,CAAC,EAAE,mBAAmB,QAyCnJ;AAED,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,CAAC,EAAE,mBAAmB,QAmC/I"} \ No newline at end of file +{"version":3,"file":"CalcEdgeSealing.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/CalcEdgeSealing.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AAEzD,OAAO,EAAE,KAAK,EAAE,MAAM,kCAAkC,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAMzE,OAAO,EAAc,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAI1H,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC;AAE/B;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,KAAK,EAAE,GAAG,WAAW,CAgH/E;AAID,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,eAAe,EAAE,CAkD/E;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,qBAAqB,EAAE,CAiD7F;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,UAAQ,GAAG,mBAAmB,EAAE,CAoDzG;AAED,iBAAiB;AACjB,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,WASlE;AAED;;;;KAIK;AACL,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,KAAK,EAAE,YAAY,UAAQ,GAAG,KAAK,EAAE,CA6B9E;AAGD,MAAM,WAAW,YAAY;IAEzB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,aAAa,EAAE,mBAAmB,CAAC;IAEnC,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;IAC3C,YAAY,CAAC,EAAE,OAAO,CAAC;CAC1B;AA2BD;;;;EAIE;AACF,wBAAgB,eAAe,CAAC,EAAE,EAAE,KAAK,GAAG,mBAAmB,GAAG,SAAS,CAqB1E;AAGD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,GAAE,cAAuC,GAAG,YAAY,GAAG,SAAS,CA6M7H;AAGD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,eAAe,EAAE,CAgBzG;AAGD;;;;;;GAMG;AACH,wBAAgB,gCAAgC,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,CAAC,EAAE,mBAAmB,QA8DnJ;AAED,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,qBAAqB,EAAE,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,CAAC,EAAE,mBAAmB,QAoCjJ;AAED,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,EAAE,UAAU,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,CAAC,EAAE,mBAAmB,QAqC/I"} \ No newline at end of file diff --git a/types/GraphicsSystem/CameraUpdate.d.ts b/types/GraphicsSystem/CameraUpdate.d.ts index 608e844..a17e5ae 100644 --- a/types/GraphicsSystem/CameraUpdate.d.ts +++ b/types/GraphicsSystem/CameraUpdate.d.ts @@ -29,6 +29,7 @@ export declare class CameraUpdate { get Orbit(): Orbit; get Aspect(): number; get Target(): Vector3; + set Target(value: Vector3); get Camera(): Camera; get ViewHeight(): number; set ViewHeight(height: number); diff --git a/types/GraphicsSystem/CameraUpdate.d.ts.map b/types/GraphicsSystem/CameraUpdate.d.ts.map index 4d02006..b80e60c 100644 --- a/types/GraphicsSystem/CameraUpdate.d.ts.map +++ b/types/GraphicsSystem/CameraUpdate.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CameraUpdate.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/CameraUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAa,kBAAkB,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAExF,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C,eAAO,MAAM,eAAe,OAAO,CAAC;AAUpC,oBAAY,UAAU;IAElB,kBAAkB,IAAI;IACtB,iBAAiB,IAAI;CACxB;AAED,KAAK,MAAM,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;AAErD;;;;;;GAMG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAA4C;IAGhE,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,WAAW,CAAgB;IAGnC,OAAO,CAAC,OAAO,CAA0B;IAEzC,OAAO,CAAC,UAAU,CAAkC;IAEpD,OAAO,CAAC,MAAM,CAAsB;IAGpC,OAAO,CAAC,KAAK,CAA2B;IAExC,aAAa,UAAS;;IAkBtB,IAAI,KAAK,UAA0B;IAEnC,IAAI,MAAM,IAAI,MAAM,CAGnB;IAED,IAAI,MAAM,YAA2B;IAErC,IAAI,MAAM,IAAI,MAAM,CAGnB;IACD,IAAI,UAAU,WAGb;IACD,IAAI,UAAU,CAAC,MAAM,QAAA,EAIpB;IAED,IAAI,SAAS,YAGZ;IAED,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAKrC,IAAI,KAAK,WAGR;IACD,IAAI,MAAM,WAGT;IAED,IAAI,GAAG,IAKM,MAAM,CAFlB;IAED,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,EAKlB;IAED,IAAW,IAAI,IAAI,MAAM,CAGxB;IACD,IAAW,IAAI,CAAC,KAAK,EAAE,MAAM,EAM5B;IAED;;;OAGG;IACH,GAAG,CAAC,SAAS,EAAE,OAAO;IAStB,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO;IA4C1C,kBAAkB;IAWlB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO;IAoBzC,eAAe,CAAC,IAAI,EAAE,IAAI;IA0B1B;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,OAAO;IAQnB,WAAW,CAAC,GAAG,EAAE,OAAO;IAExB,QAAQ;IAIR;;OAEG;IACH,MAAM;IAyBN,SAAS;IAIT,IAAI,UAAU,CAAC,IAAI,EAAE,UAAU,EAI9B;IACD,IAAI,UAAU,IALO,UAAU,CAW9B;IAED,YAAY;IAaZ,QAAQ,CAAC,IAAI,EAAE,QAAQ;IA8BvB,SAAS,CAAC,IAAI,EAAE,QAAQ;IAYxB,QAAQ,CAAC,KAAK,EAAE,YAAY;CAS/B"} \ No newline at end of file +{"version":3,"file":"CameraUpdate.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/CameraUpdate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAa,kBAAkB,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAExF,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG1C,eAAO,MAAM,eAAe,OAAO,CAAC;AAUpC,oBAAY,UAAU;IAElB,kBAAkB,IAAI;IACtB,iBAAiB,IAAI;CACxB;AAED,KAAK,MAAM,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;AAErD;;;;;;GAMG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,YAAY,CAA4C;IAGhE,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IAExB,OAAO,CAAC,WAAW,CAAgB;IAGnC,OAAO,CAAC,OAAO,CAA0B;IAEzC,OAAO,CAAC,UAAU,CAAkC;IAEpD,OAAO,CAAC,MAAM,CAAsB;IAGpC,OAAO,CAAC,KAAK,CAA2B;IAExC,aAAa,UAAS;;IAkBtB,IAAI,KAAK,UAA0B;IAEnC,IAAI,MAAM,IAAI,MAAM,CAGnB;IAED,IAAI,MAAM,IACQ,OAAO,CADY;IACrC,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,EAGxB;IAED,IAAI,MAAM,IAAI,MAAM,CAGnB;IACD,IAAI,UAAU,WAGb;IACD,IAAI,UAAU,CAAC,MAAM,QAAA,EAIpB;IAED,IAAI,SAAS,YAGZ;IAED,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAKrC,IAAI,KAAK,WAGR;IACD,IAAI,MAAM,WAGT;IAED,IAAI,GAAG,IAKM,MAAM,CAFlB;IAED,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,EAKlB;IAED,IAAW,IAAI,IAAI,MAAM,CAGxB;IACD,IAAW,IAAI,CAAC,KAAK,EAAE,MAAM,EAM5B;IAED;;;OAGG;IACH,GAAG,CAAC,SAAS,EAAE,OAAO;IAStB,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO;IA4C1C,kBAAkB;IAWlB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO;IAoBzC,eAAe,CAAC,IAAI,EAAE,IAAI;IA0B1B;;;OAGG;IACH,MAAM,CAAC,GAAG,EAAE,OAAO;IAQnB,WAAW,CAAC,GAAG,EAAE,OAAO;IAExB,QAAQ;IAIR;;OAEG;IACH,MAAM;IAyBN,SAAS;IAIT,IAAI,UAAU,CAAC,IAAI,EAAE,UAAU,EAI9B;IACD,IAAI,UAAU,IALO,UAAU,CAW9B;IAED,YAAY;IAaZ,QAAQ,CAAC,IAAI,EAAE,QAAQ;IA8BvB,SAAS,CAAC,IAAI,EAAE,QAAQ;IAYxB,QAAQ,CAAC,KAAK,EAAE,YAAY;CAS/B"} \ No newline at end of file diff --git a/types/GraphicsSystem/CameraUpdateForIos.d.ts b/types/GraphicsSystem/CameraUpdateForIos.d.ts new file mode 100644 index 0000000..a1c3754 --- /dev/null +++ b/types/GraphicsSystem/CameraUpdateForIos.d.ts @@ -0,0 +1,13 @@ +import { Box3, Sphere } from "three"; +import { CameraUpdate } from "./CameraUpdate"; +export declare class CameraUpdateForIos { + private camera; + boundingSphere: Sphere; + box: Box3; + constructor(camera: CameraUpdate); + private _line; + private _plane; + private _iPoint; + Fix(): void; +} +//# sourceMappingURL=CameraUpdateForIos.d.ts.map \ No newline at end of file diff --git a/types/GraphicsSystem/CameraUpdateForIos.d.ts.map b/types/GraphicsSystem/CameraUpdateForIos.d.ts.map new file mode 100644 index 0000000..09d77e1 --- /dev/null +++ b/types/GraphicsSystem/CameraUpdateForIos.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"CameraUpdateForIos.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/CameraUpdateForIos.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAS,MAAM,EAAW,MAAM,OAAO,CAAC;AAKrD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,qBAAa,kBAAkB;IAIf,OAAO,CAAC,MAAM;IAF1B,cAAc,EAAE,MAAM,CAAc;IACpC,GAAG,OAAY;gBACK,MAAM,EAAE,YAAY;IA8BxC,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,OAAO,CAAe;IAE9B,GAAG;CAoBN"} \ No newline at end of file diff --git a/types/GraphicsSystem/OffsetPolyline.d.ts b/types/GraphicsSystem/OffsetPolyline.d.ts index 5cfa32e..abcd428 100644 --- a/types/GraphicsSystem/OffsetPolyline.d.ts +++ b/types/GraphicsSystem/OffsetPolyline.d.ts @@ -50,6 +50,7 @@ export declare class OffsetPolyline { _IsClose: boolean; _OffsetDistSign: number; _IsTopoOffset: boolean; + _AllowConverToCircle: boolean; /** * * @param _Polyline @@ -81,10 +82,18 @@ export declare class OffsetPolyline { private LinkResultPolyline; private RepairResultPolylineClosemark; CheckPointDir(pt: Vector3): boolean; + /** + * 点在线上 或者在线内(外) + * @param pt + * @returns 0在线上 1 -1 + */ GetPointAtCurveDir(pt: Vector3): number; protected CreateArc(center: Vector3, startP: Vector3, endP?: Vector3): Arc; protected CreateSquare(center: Vector3, curveNow: IOffsetResult, curveNext: IOffsetResult, entTypeCode: number): Line; } +/** + * @returns 1:全line 2:全arc 3:line and arc + */ export declare function EntityEncode2(c1: Curve, c2: Curve): number; export declare function CurveIsFine(curve: Curve): boolean; export {}; diff --git a/types/GraphicsSystem/OffsetPolyline.d.ts.map b/types/GraphicsSystem/OffsetPolyline.d.ts.map index 9eebea9..01b9cfd 100644 --- a/types/GraphicsSystem/OffsetPolyline.d.ts.map +++ b/types/GraphicsSystem/OffsetPolyline.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"OffsetPolyline.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/OffsetPolyline.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"OffsetPolyline.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/OffsetPolyline.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/GraphicsSystem/OutlinePass.d.ts.map b/types/GraphicsSystem/OutlinePass.d.ts.map index e640225..a020f4d 100644 --- a/types/GraphicsSystem/OutlinePass.d.ts.map +++ b/types/GraphicsSystem/OutlinePass.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"OutlinePass.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/OutlinePass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,EAA4B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAc,QAAQ,EAAE,kBAAkB,EAAE,iBAAiB,EAAgC,KAAK,EAAE,cAAc,EAAiB,OAAO,EAAW,aAAa,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC9S,OAAO,EAAE,IAAI,EAAE,MAAM,wCAAwC,CAAC;AAG9D;;GAEG;AACH,qBAAa,WAAY,SAAQ,IAAI;IAmCtB,WAAW,EAAE,KAAK;IAClB,YAAY,EAAE,kBAAkB,GAAG,iBAAiB;IACpD,UAAU,EAAE,OAAO;IACnB,eAAe,EAAE,QAAQ,EAAE;IApCtC,aAAa,EAAE,QAAQ,EAAE,CAAC;IAC1B,gBAAgB,EAAE,KAAK,CAAsB;IAC7C,eAAe,EAAE,KAAK,CAA8B;IACpD,QAAQ,EAAE,MAAM,CAAO;IACvB,iBAAiB,EAAE,OAAO,CAAS;IACnC,aAAa,EAAE,MAAM,CAAO;IAC5B,YAAY,EAAE,MAAM,CAAO;IAC3B,eAAe,EAAE,MAAM,CAAK;IAC5B,WAAW,EAAE,MAAM,CAAK;IACxB,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,sBAAsB,EAAE,iBAAiB,CAAC;IAC1C,aAAa,EAAE,iBAAiB,CAAC;IACjC,mBAAmB,EAAE,cAAc,CAAC;IACpC,uBAAuB,EAAE,iBAAiB,CAAC;IAC3C,gCAAgC,EAAE,iBAAiB,CAAC;IACpD,uBAAuB,EAAE,iBAAiB,CAAC;IAC3C,uBAAuB,EAAE,iBAAiB,CAAC;IAC3C,qBAAqB,EAAE,cAAc,CAAC;IACtC,uBAAuB,EAAE,iBAAiB,CAAC;IAC3C,uBAAuB,EAAE,iBAAiB,CAAC;IAC3C,sBAAsB,EAAE,cAAc,CAAC;IACvC,sBAAsB,EAAE,cAAc,CAAC;IACvC,eAAe,EAAE,cAAc,CAAC;IAChC,YAAY,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG;YAAE,KAAK,EAAE,GAAG,CAAC;SAAE,CAAC;KAAE,CAAC;IAChD,YAAY,EAAE,cAAc,CAAC;IAC7B,aAAa,EAAE,KAAK,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC;IAC5B,eAAe,EAAE,KAAK,CAAC;IACvB,eAAe,EAAE,KAAK,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,GAAG,CAAC;gBAET,WAAW,EAAE,KAAK,EAClB,YAAY,EAAE,kBAAkB,GAAG,iBAAiB,EACpD,UAAU,GAAE,OAA+B,EAC3C,eAAe,GAAE,QAAQ,EAAO;IAqG3C,OAAO;IAaP,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAsBrC,iCAAiC,CAAC,QAAQ,EAAE,OAAO;IAsBnD,oCAAoC,CAAC,QAAQ,EAAE,OAAO;IA2CtD,mBAAmB;IAUnB,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO;IAuIrI,sBAAsB;IA+CtB,wBAAwB;IA8CxB,wBAAwB,CAAC,SAAS,EAAE,MAAM;IAsD1C,kBAAkB;IAoDlB,MAAM,CAAC,cAAc,UAAyB;IAC9C,MAAM,CAAC,cAAc,UAAyB;CACjD"} \ No newline at end of file +{"version":3,"file":"OutlinePass.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/OutlinePass.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,EAA4B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAc,QAAQ,EAAE,kBAAkB,EAAE,iBAAiB,EAAgC,KAAK,EAAE,cAAc,EAAiB,OAAO,EAAW,aAAa,EAAE,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC9S,OAAO,EAAE,IAAI,EAAE,MAAM,wCAAwC,CAAC;AAG9D;;GAEG;AACH,qBAAa,WAAY,SAAQ,IAAI;IAmCtB,WAAW,EAAE,KAAK;IAClB,YAAY,EAAE,kBAAkB,GAAG,iBAAiB;IACpD,UAAU,EAAE,OAAO;IACnB,eAAe,EAAE,QAAQ,EAAE;IApCtC,aAAa,EAAE,QAAQ,EAAE,CAAC;IAC1B,gBAAgB,EAAE,KAAK,CAAsB;IAC7C,eAAe,EAAE,KAAK,CAA8B;IACpD,QAAQ,EAAE,MAAM,CAAO;IACvB,iBAAiB,EAAE,OAAO,CAAS;IACnC,aAAa,EAAE,MAAM,CAAO;IAC5B,YAAY,EAAE,MAAM,CAAO;IAC3B,eAAe,EAAE,MAAM,CAAK;IAC5B,WAAW,EAAE,MAAM,CAAK;IACxB,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,sBAAsB,EAAE,iBAAiB,CAAC;IAC1C,aAAa,EAAE,iBAAiB,CAAC;IACjC,mBAAmB,EAAE,cAAc,CAAC;IACpC,uBAAuB,EAAE,iBAAiB,CAAC;IAC3C,gCAAgC,EAAE,iBAAiB,CAAC;IACpD,uBAAuB,EAAE,iBAAiB,CAAC;IAC3C,uBAAuB,EAAE,iBAAiB,CAAC;IAC3C,qBAAqB,EAAE,cAAc,CAAC;IACtC,uBAAuB,EAAE,iBAAiB,CAAC;IAC3C,uBAAuB,EAAE,iBAAiB,CAAC;IAC3C,sBAAsB,EAAE,cAAc,CAAC;IACvC,sBAAsB,EAAE,cAAc,CAAC;IACvC,eAAe,EAAE,cAAc,CAAC;IAChC,YAAY,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG;YAAE,KAAK,EAAE,GAAG,CAAC;SAAE,CAAC;KAAE,CAAC;IAChD,YAAY,EAAE,cAAc,CAAC;IAC7B,aAAa,EAAE,KAAK,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,IAAI,CAAC,cAAc,CAAC;IAC5B,eAAe,EAAE,KAAK,CAAC;IACvB,eAAe,EAAE,KAAK,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,cAAc,EAAE,GAAG,CAAC;gBAET,WAAW,EAAE,KAAK,EAClB,YAAY,EAAE,kBAAkB,GAAG,iBAAiB,EACpD,UAAU,GAAE,OAA+B,EAC3C,eAAe,GAAE,QAAQ,EAAO;IAqG3C,OAAO;IAaP,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAsBrC,iCAAiC,CAAC,QAAQ,EAAE,OAAO;IAsBnD,oCAAoC,CAAC,QAAQ,EAAE,OAAO;IA8BtD,mBAAmB;IAUnB,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO;IAuIrI,sBAAsB;IA+CtB,wBAAwB;IA8CxB,wBAAwB,CAAC,SAAS,EAAE,MAAM;IAsD1C,kBAAkB;IAoDlB,MAAM,CAAC,cAAc,UAAyB;IAC9C,MAAM,CAAC,cAAc,UAAyB;CACjD"} \ No newline at end of file diff --git a/types/GraphicsSystem/RenderType.d.ts b/types/GraphicsSystem/RenderType.d.ts index eb823a1..65f05c3 100644 --- a/types/GraphicsSystem/RenderType.d.ts +++ b/types/GraphicsSystem/RenderType.d.ts @@ -10,6 +10,8 @@ export declare enum RenderType { * 概念 */ Conceptual = 2, + /** 概念(透明)*/ + ConceptualTransparent = 82,// ConceptualTransparent原本的值是182,估计是写错了,不应该大于100的 /** * 物理着色PBR */ @@ -40,8 +42,17 @@ export declare enum RenderType { PrintPrint = 105, /**真实带线框 */ Physical2Print = 106, - CustomNumberPrint = 109, - ConceptualTransparent = 182 + CustomNumberPrint = 109 } -export declare function IsPhysical(renderType: RenderType): boolean; +/** 实体的渲染颜色种类 */ +export declare enum ColorInTransparent { + 原始颜色 = 0, + 灰度单色 = 1 +} +/** 渲染的状态 */ +export declare const RenderState: { + /** 概念透明下的实体颜色 */ + ConceptualColor: ColorInTransparent; +}; +export declare function IsPhysical(renderType: RenderType): renderType is RenderType.Physical | RenderType.Physical2 | RenderType.PhysicalPrint | RenderType.Physical2Print; //# sourceMappingURL=RenderType.d.ts.map \ No newline at end of file diff --git a/types/GraphicsSystem/RenderType.d.ts.map b/types/GraphicsSystem/RenderType.d.ts.map index be4330b..2963230 100644 --- a/types/GraphicsSystem/RenderType.d.ts.map +++ b/types/GraphicsSystem/RenderType.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RenderType.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/RenderType.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,oBAAY,UAAU;IAElB;;OAEG;IACH,SAAS,IAAI;IAEb;;OAEG;IACH,UAAU,IAAI;IAGd;;OAEG;IACH,QAAQ,IAAI;IAEZ,GAAG,IAAI;IACP,KAAK,IAAI;IACT,WAAW;IACX,SAAS,IAAI;IACb,IAAI,IAAI,CAAC,kDAAkD;IAC3D,SAAS,IAAI,CAAC,8CAA8C;IAC5D,WAAW,KAAK,CAAE,8CAA8C;IAChE,YAAY,IAAI,CAAC,OAAO;IACxB,WAAW,KAAK,CAAC,+CAA+C;IAEhE,0DAA0D;IAC1D;;MAEE;IACF,cAAc,MAAM;IAEpB;;OAEG;IACH,eAAe,MAAM;IAGrB;;OAEG;IACH,aAAa,MAAM;IAEnB,QAAQ,MAAM;IACd,UAAU,MAAM;IAChB,WAAW;IACX,cAAc,MAAM;IACpB,iBAAiB,MAAM;IAEvB,qBAAqB,MAAM;CAC9B;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,UAAU,WAGhD"} \ No newline at end of file +{"version":3,"file":"RenderType.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/RenderType.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,oBAAY,UAAU;IAElB;;OAEG;IACH,SAAS,IAAI;IAEb;;OAEG;IACH,UAAU,IAAI;IAEd,YAAY;IACZ,qBAAqB,KAAK,CAAE,iDAAiD;IAE7E;;OAEG;IACH,QAAQ,IAAI;IAEZ,GAAG,IAAI;IACP,KAAK,IAAI;IACT,WAAW;IACX,SAAS,IAAI;IACb,IAAI,IAAI,CAAC,kDAAkD;IAC3D,SAAS,IAAI,CAAC,8CAA8C;IAC5D,WAAW,KAAK,CAAE,8CAA8C;IAChE,YAAY,IAAI,CAAC,OAAO;IACxB,WAAW,KAAK,CAAC,+CAA+C;IAEhE,0DAA0D;IAC1D;;MAEE;IACF,cAAc,MAAM;IAEpB;;OAEG;IACH,eAAe,MAAM;IAGrB;;OAEG;IACH,aAAa,MAAM;IAEnB,QAAQ,MAAM;IACd,UAAU,MAAM;IAChB,WAAW;IACX,cAAc,MAAM;IACpB,iBAAiB,MAAM;CAC1B;AAED,gBAAgB;AAChB,oBAAY,kBAAkB;IAE1B,IAAI,IAAI;IACR,IAAI,IAAI;CACX;AAED,YAAY;AACZ,eAAO,MAAM,WAAW;IACpB,kBAAkB;;CAErB,CAAC;AAEF,wBAAgB,UAAU,CAAC,UAAU,EAAE,UAAU,mHAGhD"} \ No newline at end of file diff --git a/types/GraphicsSystem/ToolPath/FeedingToolPath.d.ts b/types/GraphicsSystem/ToolPath/FeedingToolPath.d.ts index 9ad88d5..8be7179 100644 --- a/types/GraphicsSystem/ToolPath/FeedingToolPath.d.ts +++ b/types/GraphicsSystem/ToolPath/FeedingToolPath.d.ts @@ -2,8 +2,10 @@ import { Singleton } from "../../Common/Singleton"; import { ExtrudeHole } from "../../DatabaseServices/3DSolid/ExtrudeHole"; import { Board, IModeling } from "../../DatabaseServices/Entity/Board"; import { Curve } from "../../DatabaseServices/Entity/Curve"; -import { ExtrudeContourCurve } from "../../DatabaseServices/Entity/Extrude"; +import { ExtrudeContourCurve, ExtrudeSolid } from "../../DatabaseServices/Entity/Extrude"; +import { Polyline } from "../../DatabaseServices/Entity/Polyline"; import { Shape } from "../../DatabaseServices/Shape"; +import { IOriginSideModelingData } from "../../Production/Product"; /** *计算走刀工具类 */ @@ -25,6 +27,7 @@ export declare class FeedingToolPath extends Singleton { Thickness: number; ContourCurve: ExtrudeContourCurve; }, modeling: IModeling, redundancyKnif?: number): Curve[]; + GetSideModelFeedPath(solid: ExtrudeSolid, faceContour: Polyline, redundancyKnif?: number): Curve[]; private GrooveAddSize; /** * 获取所有的轮廓 @@ -34,6 +37,7 @@ export declare class FeedingToolPath extends Singleton { */ private GetContours; CheckModeling(br: Board): number[]; + CheckSideModeling(br: Board): ExtrudeSolid[]; CheckCustomHole(br: Board): ExtrudeHole[]; HandleThoughGroove(brCon: ExtrudeContourCurve, shape: Shape, knifeRadius: number): void; } @@ -41,8 +45,6 @@ export declare function GetModelingFromCustomDrill(br: Board): { modeling: (IModeling & { originEn: ExtrudeHole; })[]; - sideModeling: (IModeling & { - originEn: ExtrudeHole; - })[]; + sideModeling: IOriginSideModelingData[]; }; //# sourceMappingURL=FeedingToolPath.d.ts.map \ No newline at end of file diff --git a/types/GraphicsSystem/ToolPath/FeedingToolPath.d.ts.map b/types/GraphicsSystem/ToolPath/FeedingToolPath.d.ts.map index 9f819e1..bbafdb6 100644 --- a/types/GraphicsSystem/ToolPath/FeedingToolPath.d.ts.map +++ b/types/GraphicsSystem/ToolPath/FeedingToolPath.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"FeedingToolPath.d.ts","sourceRoot":"","sources":["../../../../src/GraphicsSystem/ToolPath/FeedingToolPath.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAEzE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEvE,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAG5E,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAYrD;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;IAE1C;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IA0KnB,cAAc;IACd,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,UAAQ,EAAE,EAAE,SAAI;IAmB5C;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,SAAI,GAAG,KAAK,EAAE;IAW5D,gBAAgB,CAAC,EAAE,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,mBAAmB,CAAC;KAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,SAAI,GAAG,KAAK,EAAE;IA8CjI,OAAO,CAAC,aAAa;IA2BrB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAuCnB,aAAa,CAAC,EAAE,EAAE,KAAK;IAkBvB,eAAe,CAAC,EAAE,EAAE,KAAK;IAsBzB,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM;CAsInF;AAED,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,KAAK;;kBAKT,WAAW;;;kBACP,WAAW;;EAyGzD"} \ No newline at end of file +{"version":3,"file":"FeedingToolPath.d.ts","sourceRoot":"","sources":["../../../../src/GraphicsSystem/ToolPath/FeedingToolPath.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAEzE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEvE,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAE1F,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAClE,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAWrD,OAAO,EAAE,uBAAuB,EAAiC,MAAM,0BAA0B,CAAC;AAMlG;;GAEG;AACH,qBAAa,eAAgB,SAAQ,SAAS;IAE1C;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IA0KnB,cAAc;IACd,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,UAAQ,EAAE,EAAE,SAAI;IAmB5C;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,SAAI,GAAG,KAAK,EAAE;IAW5D,gBAAgB,CAAC,EAAE,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,mBAAmB,CAAC;KAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,SAAI,GAAG,KAAK,EAAE;IAgDjI,oBAAoB,CAAC,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,SAAI,GAAG,KAAK,EAAE;IAsC7F,OAAO,CAAC,aAAa;IA+BrB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAwCnB,aAAa,CAAC,EAAE,EAAE,KAAK;IAoBvB,iBAAiB,CAAC,EAAE,EAAE,KAAK;IA0C3B,eAAe,CAAC,EAAE,EAAE,KAAK;IAsBzB,kBAAkB,CAAC,KAAK,EAAE,mBAAmB,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM;CAsInF;AAED,wBAAgB,0BAA0B,CAAC,EAAE,EAAE,KAAK;;kBAOT,WAAW;;;EA8OrD"} \ No newline at end of file diff --git a/types/GraphicsSystem/Viewer.d.ts.map b/types/GraphicsSystem/Viewer.d.ts.map index 6577aed..8cbfd62 100644 --- a/types/GraphicsSystem/Viewer.d.ts.map +++ b/types/GraphicsSystem/Viewer.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Viewer.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/Viewer.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Viewer.d.ts","sourceRoot":"","sources":["../../../src/GraphicsSystem/Viewer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/Nest/Core/BestNestContainers.d.ts b/types/Nest/Core/BestNestContainers.d.ts new file mode 100644 index 0000000..4e04409 --- /dev/null +++ b/types/Nest/Core/BestNestContainers.d.ts @@ -0,0 +1,20 @@ +import { Container } from "./Container"; +import { Part } from "./Part"; +export interface IContourIdToParts { + [key: string]: Part[]; +} +export declare class BestNestContainers { + private static MaxSize; + private static BestContainers; + static GetAllContainers(contourId?: number): Container[]; + static AddContainersAndSort(newContainers: Container[]): void; + static SetMaxSize(size: number): void; + static GetMaxSize(): number; + static Clear(): void; + static MapContourIdToParts(parts: Part[]): IContourIdToParts; + static GetMatchedAndRemainingParts(allParts: Part[], containerParts: Part[], cIdToPartsObj: IContourIdToParts): { + matchedParts: Part[]; + remainingParts: Part[]; + }; +} +//# sourceMappingURL=BestNestContainers.d.ts.map \ No newline at end of file diff --git a/types/Nest/Core/BestNestContainers.d.ts.map b/types/Nest/Core/BestNestContainers.d.ts.map new file mode 100644 index 0000000..ded09f7 --- /dev/null +++ b/types/Nest/Core/BestNestContainers.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"BestNestContainers.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/BestNestContainers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAS9B,MAAM,WAAW,iBAAiB;IAE9B,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,CAAC;CACzB;AAED,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,MAAM,CAAC,OAAO,CAAQ;IAE9B,OAAO,CAAC,MAAM,CAAC,cAAc,CAAgC;IAE7D,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE;IAKxD,MAAM,CAAC,oBAAoB,CAAC,aAAa,EAAE,SAAS,EAAE;IA0DtD,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM;IAK9B,MAAM,CAAC,UAAU;IAKjB,MAAM,CAAC,KAAK;IAMZ,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,iBAAiB;IAmB5D,MAAM,CAAC,2BAA2B,CAC9B,QAAQ,EAAE,IAAI,EAAE,EAChB,cAAc,EAAE,IAAI,EAAE,EACtB,aAAa,EAAE,iBAAiB,GACjC;QAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAAC,cAAc,EAAE,IAAI,EAAE,CAAC;KAAE;CAwCvD"} \ No newline at end of file diff --git a/types/Nest/Core/Container.d.ts b/types/Nest/Core/Container.d.ts index 04b88dd..a49a7a4 100644 --- a/types/Nest/Core/Container.d.ts +++ b/types/Nest/Core/Container.d.ts @@ -1,6 +1,5 @@ import { Paths } from "js-angusj-clipper/web"; import { Box2 } from "../Common/Box2"; -import { CompareVectorFn } from "../Common/ComparePoint"; import { NestFiler } from "../Common/Filer"; import { Point } from "../Common/Point"; import { Part } from "./Part"; @@ -13,8 +12,9 @@ import { PlaceType } from "./PlaceType"; * 也可以是余料 */ export declare class Container { - protected BinPath?: Path; + BinPath?: Path; private _PlaceType; + ComparePosFnKey: string; ParentId: number; ChildrenIndex: number; ParentM: Point; @@ -24,10 +24,14 @@ export declare class Container { PlacedHull: Point[]; StatusKey: string; IsPrePlace: boolean; - CompartePoint: CompareVectorFn; - constructor(BinPath?: Path, _PlaceType?: PlaceType, compare?: string); + private CompartePoint; + constructor(BinPath?: Path, _PlaceType?: PlaceType, ComparePosFnKey?: string); + private UpdateCurNotPuts; get UseRatio(): number; + get UseAreaRatio(): number; + get PlaceType(): PlaceType; private _NotPuts; + private _CurNotPuts; private PrePut; private Calc; PutPart(p: Part, greedy?: boolean): boolean; @@ -42,6 +46,7 @@ export declare class Container { * 得到最左边的点 */ protected GetFarLeftP(nfp: Point[][]): Point; + Clone(): Container; ReadFile(file: NestFiler, parts: Part[]): this; WriteFile(file: NestFiler): void; } diff --git a/types/Nest/Core/Container.d.ts.map b/types/Nest/Core/Container.d.ts.map index 7e97509..38e6aeb 100644 --- a/types/Nest/Core/Container.d.ts.map +++ b/types/Nest/Core/Container.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/Container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,EAAgB,MAAM,uBAAuB,CAAC;AAGtE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAgB,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEvE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,OAAO,EAAE,IAAI,EAAa,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,IAAI,EAAqC,MAAM,QAAQ,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAaxC;;;;;GAKG;AACH,qBAAa,SAAS;IAiBN,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI;IAAE,OAAO,CAAC,UAAU;IAfxD,QAAQ,EAAE,MAAM,CAAM;IACtB,aAAa,EAAE,MAAM,CAAK;IAC1B,OAAO,EAAE,KAAK,CAAC;IAEf,WAAW,EAAE,IAAI,EAAE,CAAM;IAEzB,UAAU,SAAK;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,KAAK,EAAE,CAAC;IAEpB,SAAS,EAAE,MAAM,CAAC;IAElB,UAAU,UAAS;IAEnB,aAAa,EAAE,eAAe,CAAC;gBACT,OAAO,CAAC,EAAE,IAAI,EAAU,UAAU,YAAgB,EAAE,OAAO,SAAO;IAQxF,IAAI,QAAQ,IAAI,MAAM,CAGrB;IAED,OAAO,CAAC,QAAQ,CAAqB;IAErC,OAAO,CAAC,MAAM;IAgHd,OAAO,CAAC,IAAI;IAkCZ,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,UAAQ,GAAG,OAAO;IAuCzC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK;IA0DvD;;;;OAIG;IACH,OAAO,CAAC,UAAU;IA0BlB;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK;IAgB5C,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;IAuBvC,SAAS,CAAC,IAAI,EAAE,SAAS;CA4B5B"} \ No newline at end of file +{"version":3,"file":"Container.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/Container.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,EAAgB,MAAM,uBAAuB,CAAC;AAGtE,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAItC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,OAAO,EAAE,IAAI,EAAa,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,IAAI,EAAqC,MAAM,QAAQ,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAaxC;;;;;GAKG;AACH,qBAAa,SAAS;IAiBC,OAAO,CAAC,EAAE,IAAI;IAAE,OAAO,CAAC,UAAU;IAAyB,eAAe;IAf7F,QAAQ,EAAE,MAAM,CAAM;IACtB,aAAa,EAAE,MAAM,CAAK;IAC1B,OAAO,EAAE,KAAK,CAAC;IAEf,WAAW,EAAE,IAAI,EAAE,CAAM;IAEzB,UAAU,SAAK;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,KAAK,EAAE,CAAC;IAEpB,SAAS,EAAE,MAAM,CAAC;IAElB,UAAU,UAAS;IAEnB,OAAO,CAAC,aAAa,CAAkB;gBACpB,OAAO,CAAC,EAAE,IAAI,EAAU,UAAU,YAAgB,EAAS,eAAe,SAAO;IAYpG,OAAO,CAAC,gBAAgB;IAWxB,IAAI,QAAQ,IAAI,MAAM,CAGrB;IAED,IAAI,YAAY,IAAI,MAAM,CAGzB;IAED,IAAI,SAAS,IAAI,SAAS,CAGzB;IAED,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,WAAW,CAAc;IAEjC,OAAO,CAAC,MAAM;IA0Gd,OAAO,CAAC,IAAI;IAkCZ,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,UAAQ,GAAG,OAAO;IAuCzC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK;IA0DvD;;;;OAIG;IACH,OAAO,CAAC,UAAU;IA4BlB;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK;IAc5C,KAAK;IAiBL,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;IAuBvC,SAAS,CAAC,IAAI,EAAE,SAAS;CA4B5B"} \ No newline at end of file diff --git a/types/Nest/Core/Individual.d.ts b/types/Nest/Core/Individual.d.ts index 87b87bc..a3fb659 100644 --- a/types/Nest/Core/Individual.d.ts +++ b/types/Nest/Core/Individual.d.ts @@ -27,16 +27,51 @@ export declare class Individual { OddmentsContainers: Container[]; /** * 评估健康程度 + * + * @param bestCount 已知最佳大板个数 + * @param greedy 贪心模式 + * @param useContainerTemplate 使用容器模板 + * @param type 放置类型(凸包 面积 重力) */ - Evaluate(bestCount: number, greedy?: boolean, type?: PlaceType): void; + Evaluate(bestCount: number, greedy?: boolean, useContainerTemplate?: boolean, type?: PlaceType): void; /** * 在网洞利用时,保持纹路正确 * - * @param bestCount - * @param greedy - * @param type + * @param bestCount 已知最优容器个数 + * @param greedy 贪心模式 + * @param reuseBestMode 复用优秀容器模式 + * @param placeType 放置类型 */ private EvaluateOfUseRotateHole; + /** + * 复用优秀的容器 使用余料 + * @param {Part[]} parts 剩余的零件(要放置的零件) + * @param {IContourIdToParts} cIdToPartsObj 轮廓 ID 到零件数组的映射 + * @param {Path[]} oddmentsBins 余料列表 + * @param {PlaceType} placeType 放置类型 + * @return {*} {Part[]} 复用后剩余的零件 + */ + private ReuseBestToOddments; + /** + * 复用优秀的容器 使用(大板/网洞) + * @param {Part[]} parts 要放置的零件 + * @param {IContourIdToParts} cIdToPartsObj 轮廓 ID 到零件数组的映射 + * @param {Container[]} containersToPut 待放置的容器数组 (默认=undefined时,使用大板Bin容器) + * @return {*} {Part[]} 剩余的零件 + */ + private ReuseBest; + /** + * 复用容器 尝试放置零件 + * @param {Part[]} parts 要放置的零件 + * @param {Container} bestContainer 最优的容器模板 + * @param {IContourIdToParts} cIdToPartsObj 轮廓 ID 到零件数组的映射 + * @param {Container} [containerToPut] 待放置的容器(未指定容器时,使用默认Bin,并重复,否则只算一次就退出(例如网洞 余料) + * @return {*} {{ + * parts: Part[], 剩余的零件 + * isArrangeSuccess: boolean; 是否放置成功 + * }} + */ + private ReuseContainerPutParts; /** * 计算健康度 */ diff --git a/types/Nest/Core/Individual.d.ts.map b/types/Nest/Core/Individual.d.ts.map index 65f3b48..807b101 100644 --- a/types/Nest/Core/Individual.d.ts.map +++ b/types/Nest/Core/Individual.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Individual.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/Individual.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;;;;;;;;GAUG;AACH,qBAAa,UAAU;IAEA,KAAK,CAAC,EAAE,IAAI,EAAE;IACtB,YAAY;IACnB,OAAO,CAAC,GAAG,CAAC;IACZ,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,gBAAgB;gBAJT,KAAK,CAAC,EAAE,IAAI,EAAE,EACtB,YAAY,SAAM,EACjB,GAAG,CAAC,EAAE,IAAI,EACV,YAAY,GAAE,IAAI,EAAO,EACzB,gBAAgB,GAAE,MAAM,EAA4B;IAGhE,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,cAAc,EAAE,SAAS,EAAE,CAAC;IAC5B,kBAAkB,EAAE,SAAS,EAAE,CAAC;IAChC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,UAAQ,EAAE,IAAI,CAAC,EAAE,SAAS;IAsE5D;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IA4E/B;;OAEG;IACH,SAAS,CAAC,WAAW;IAmBrB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,kBAAkB;IAoB1B,KAAK;IAOL;;;;;MAKE;IACF,MAAM;IAQN,OAAO,CAAC,WAAW;IA4CnB;;;OAGG;IACH,SAAS;IAgBT,QAAQ,CAAC,IAAI,EAAE,SAAS;IAsBxB,SAAS,CAAC,CAAC,EAAE,SAAS;CAiBzB"} \ No newline at end of file +{"version":3,"file":"Individual.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/Individual.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;;;;;;;;GAUG;AACH,qBAAa,UAAU;IAEA,KAAK,CAAC,EAAE,IAAI,EAAE;IACtB,YAAY;IACnB,OAAO,CAAC,GAAG,CAAC;IACZ,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,gBAAgB;gBAJT,KAAK,CAAC,EAAE,IAAI,EAAE,EACtB,YAAY,SAAM,EACjB,GAAG,CAAC,EAAE,IAAI,EACV,YAAY,GAAE,IAAI,EAAO,EACzB,gBAAgB,GAAE,MAAM,EAA4B;IAGhE,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,cAAc,EAAE,SAAS,EAAE,CAAC;IAC5B,kBAAkB,EAAE,SAAS,EAAE,CAAC;IAEhC;;;;;;;OAOG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,UAAQ,EAAE,oBAAoB,UAAQ,EAAE,IAAI,CAAC,EAAE,SAAS;IAsE1F;;;;;;;OAOG;IACH,OAAO,CAAC,uBAAuB;IA+F/B;;;;;;;OAOG;IACH,OAAO,CAAC,mBAAmB;IA4C3B;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;IAwCjB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,sBAAsB;IA0D9B;;OAEG;IACH,SAAS,CAAC,WAAW;IAmBrB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,kBAAkB;IAoB1B,KAAK;IAOL;;;;;MAKE;IACF,MAAM;IAQN,OAAO,CAAC,WAAW;IA4CnB;;;OAGG;IACH,SAAS;IAgBT,QAAQ,CAAC,IAAI,EAAE,SAAS;IAsBxB,SAAS,CAAC,CAAC,EAAE,SAAS;CAiBzB"} \ No newline at end of file diff --git a/types/Nest/Core/NestCache.d.ts b/types/Nest/Core/NestCache.d.ts index 86e5893..f58b578 100644 --- a/types/Nest/Core/NestCache.d.ts +++ b/types/Nest/Core/NestCache.d.ts @@ -3,13 +3,14 @@ import { Path } from "./Path"; export declare class NestCache { static CachePartPosCount: number; static CacheNoSetCount: number; - static PositionCache: { - [key: string]: Point; - }; - static NoPutCache: { - [key: string]: Set; - }; - private static CacheRect; + private static _PositionCache; + private static _PosCacheCount; + private static _NoPutCache; + private static _NoPutCacheCount; + static SetPos(key: string, value: Point): void; + static GetPos(key: string): Point; + static SetNoPut(key: string, value: Set): void; + static GetNoPut(key: string): Set; /** * 用于创建原点在0点的矩形路径 */ diff --git a/types/Nest/Core/NestCache.d.ts.map b/types/Nest/Core/NestCache.d.ts.map index bb6862c..83a40a7 100644 --- a/types/Nest/Core/NestCache.d.ts.map +++ b/types/Nest/Core/NestCache.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"NestCache.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/NestCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,qBAAa,SAAS;IAGlB,MAAM,CAAC,iBAAiB,SAAK;IAE7B,MAAM,CAAC,eAAe,SAAK;IAE3B,MAAM,CAAC,aAAa,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;KAAE,CAAM;IACrD,MAAM,CAAC,UAAU,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;KAAE,CAAM;IACxD,OAAO,CAAC,MAAM,CAAC,SAAS,CAA2B;IAEnD;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,SAAM,GAAG,IAAI;IAc/D,MAAM,CAAC,KAAK;CAOf"} \ No newline at end of file +{"version":3,"file":"NestCache.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/NestCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAI9B,qBAAa,SAAS;IAGlB,MAAM,CAAC,iBAAiB,SAAK;IAE7B,MAAM,CAAC,eAAe,SAAK;IAE3B,OAAO,CAAC,MAAM,CAAC,cAAc,CAAiC;IAC9D,OAAO,CAAC,MAAM,CAAC,cAAc,CAAI;IACjC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAuC;IACjE,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAI;IAEnC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK;IAavC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK;IAKjC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC;IAa/C,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAKzC;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,SAAM,GAAG,IAAI;IAc/D,MAAM,CAAC,KAAK;CASf"} \ No newline at end of file diff --git a/types/Nest/Core/OptimizeMachine.d.ts.map b/types/Nest/Core/OptimizeMachine.d.ts.map index 793d5a2..9cdf2d0 100644 --- a/types/Nest/Core/OptimizeMachine.d.ts.map +++ b/types/Nest/Core/OptimizeMachine.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"OptimizeMachine.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/OptimizeMachine.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B;;;;;;;GAOG;AACH,qBAAa,eAAe;IAGxB,MAAM,EAAE;QACJ,eAAe,EAAE,MAAM,CAAC;KAC3B,CAAC;IAEF,GAAG,EAAE,IAAI,CAAC;IACV,YAAY,EAAE,IAAI,EAAE,CAAC;IAErB,KAAK,EAAE,IAAI,EAAE,CAAC;IAEd,gBAAgB,EAAE,MAAM,EAAE,CAA2B;IAKrD,OAAO,CAAC,UAAU,CAAS;IAE3B,SAAS,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC;;IAQrC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE;IActB,QAAQ,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAGrC,KAAK;IAqBX,SAAS,SAAK;IACd,IAAI,SAAY;IAChB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,SAAK;YACA,GAAG;IA2EjB,OAAO;IAQP,QAAQ;IAMR,KAAK;CAGR"} \ No newline at end of file +{"version":3,"file":"OptimizeMachine.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/OptimizeMachine.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B;;;;;;;GAOG;AACH,qBAAa,eAAe;IAGxB,MAAM,EAAE;QACJ,eAAe,EAAE,MAAM,CAAC;KAC3B,CAAC;IAEF,GAAG,EAAE,IAAI,CAAC;IACV,YAAY,EAAE,IAAI,EAAE,CAAC;IAErB,KAAK,EAAE,IAAI,EAAE,CAAC;IAEd,gBAAgB,EAAE,MAAM,EAAE,CAA2B;IAKrD,OAAO,CAAC,UAAU,CAAS;IAE3B,SAAS,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC;;IAQrC,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE;IActB,QAAQ,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAGrC,KAAK;IAuBX,SAAS,SAAK;IACd,IAAI,SAAY;IAChB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,SAAK;YACA,GAAG;IAmFjB,OAAO;IAQP,QAAQ;IAMR,KAAK;CAGR"} \ No newline at end of file diff --git a/types/Nest/Core/OptimizeWorker.worker.d.ts b/types/Nest/Core/OptimizeWorker.worker.d.ts index 81cda78..5000441 100644 --- a/types/Nest/Core/OptimizeWorker.worker.d.ts +++ b/types/Nest/Core/OptimizeWorker.worker.d.ts @@ -1,6 +1,3 @@ -declare const _default: { - new (scriptURL: string | URL, options?: WorkerOptions): Worker; - prototype: Worker; -} & (new () => Worker); +declare const _default: typeof Worker & (new () => Worker); export default _default; //# sourceMappingURL=OptimizeWorker.worker.d.ts.map \ No newline at end of file diff --git a/types/Nest/Core/OptimizeWorker.worker.d.ts.map b/types/Nest/Core/OptimizeWorker.worker.d.ts.map index 3a157ae..e9f6604 100644 --- a/types/Nest/Core/OptimizeWorker.worker.d.ts.map +++ b/types/Nest/Core/OptimizeWorker.worker.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"OptimizeWorker.worker.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/OptimizeWorker.worker.ts"],"names":[],"mappings":";;;eA4BgD,MAAM;AAAtD,wBAAwD"} \ No newline at end of file +{"version":3,"file":"OptimizeWorker.worker.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/OptimizeWorker.worker.ts"],"names":[],"mappings":"wBA4BqB,OAAO,MAAM,GAAG,CAAC,UAAU,MAAM,CAAC;AAAvD,wBAAwD"} \ No newline at end of file diff --git a/types/Nest/Core/ParseOddments.d.ts.map b/types/Nest/Core/ParseOddments.d.ts.map index 619a764..151c174 100644 --- a/types/Nest/Core/ParseOddments.d.ts.map +++ b/types/Nest/Core/ParseOddments.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ParseOddments.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/ParseOddments.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,IAAI,EAAgD,MAAM,QAAQ,CAAC;AAS5E;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAE,MAAY,EAAE,UAAU,GAAE,IAAiB,EAAE,WAAW,GAAE,IAAI,EAAgB,GAAG,IAAI,EAAE,CAsLtK"} \ No newline at end of file +{"version":3,"file":"ParseOddments.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/ParseOddments.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,IAAI,EAAgD,MAAM,QAAQ,CAAC;AAS5E;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAE,MAAY,EAAE,UAAU,GAAE,IAAiB,EAAE,WAAW,GAAE,IAAI,EAAgB,GAAG,IAAI,EAAE,CAyLtK"} \ No newline at end of file diff --git a/types/Nest/Core/Part.d.ts b/types/Nest/Core/Part.d.ts index 681c583..f11db8c 100644 --- a/types/Nest/Core/Part.d.ts +++ b/types/Nest/Core/Part.d.ts @@ -37,6 +37,7 @@ export declare class Part { PlaceCS: Matrix; PlaceIndex: number; IsPrePlace: boolean; + Area: number; GroupMap: { [key: number]: Part[]; }; diff --git a/types/Nest/Core/Part.d.ts.map b/types/Nest/Core/Part.d.ts.map index b4b82a1..423742d 100644 --- a/types/Nest/Core/Part.d.ts.map +++ b/types/Nest/Core/Part.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Part.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/Part.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAMxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAK9B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG;IAEnC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,MAAM,CAAmB;IACjC,YAAY,EAAE,SAAS,EAAE,EAAE,CAAM;IAEjC,UAAU,SAAK;IACf,aAAa,EAAE,SAAS,EAAE,CAAM;IAChC,aAAa,EAAE,KAAK,CAAC;IAErB,YAAY,EAAE,KAAK,CAAC;IAGpB,QAAQ,EAAE,CAAC,CAAC;IACZ,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IAGnB,UAAU,UAAS;IAEnB,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,CAAC;KAAE,CAAM;IAC1C,IAAI,KAAK,IAAI,SAAS,CAGrB;IAED,IAAI,KAAK,IAAI,SAAS,EAAE,CAKvB;IAGD,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,SAAI,EAAE,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI;IAarE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,GAAE,MAAM,EAAO,EAAE,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI;IA6E/E,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE;IA6D9C,UAAU,CAAC,IAAI,EAAE,IAAI;IA4CrB,MAAM,CAAC,UAAU,EAAE,OAAO;IA8B1B,KAAK;IAcL,MAAM,IAAI,IAAI;IAOd,QAAQ,CAAC,IAAI,EAAE,SAAS;IA0CxB,SAAS,CAAC,IAAI,EAAE,SAAS;CA0B5B;AAGD,qBAAa,SAAU,SAAQ,IAAI;IAEZ,KAAK,EAAE,IAAI;IACnB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;IACd,CAAC,EAAE,KAAK;IACR,GAAG,EAAE,IAAI;gBALD,KAAK,EAAE,IAAI,EACnB,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,CAAC,EAAE,KAAK,EACR,GAAG,EAAE,IAAI,EAChB,GAAG,EAAE,IAAI;IAQb,MAAM,IAAI,IAAI,EAAE;CAiBnB"} \ No newline at end of file +{"version":3,"file":"Part.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Core/Part.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAMxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAK9B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,GAAG,GAAG;IAEnC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,MAAM,CAAmB;IACjC,YAAY,EAAE,SAAS,EAAE,EAAE,CAAM;IAEjC,UAAU,SAAK;IACf,aAAa,EAAE,SAAS,EAAE,CAAM;IAChC,aAAa,EAAE,KAAK,CAAC;IAErB,YAAY,EAAE,KAAK,CAAC;IAGpB,QAAQ,EAAE,CAAC,CAAC;IACZ,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IAGnB,UAAU,UAAS;IAEnB,IAAI,EAAE,MAAM,CAAC;IAEb,QAAQ,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,EAAE,CAAC;KAAE,CAAM;IAC1C,IAAI,KAAK,IAAI,SAAS,CAGrB;IAED,IAAI,KAAK,IAAI,SAAS,EAAE,CAKvB;IAGD,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,SAAI,EAAE,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI;IAarE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,GAAE,MAAM,EAAO,EAAE,UAAU,CAAC,EAAE,IAAI,GAAG,IAAI;IAgF/E,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,EAAE;IA6D9C,UAAU,CAAC,IAAI,EAAE,IAAI;IA+CrB,MAAM,CAAC,UAAU,EAAE,OAAO;IA8B1B,KAAK;IAmBL,MAAM,IAAI,IAAI;IAOd,QAAQ,CAAC,IAAI,EAAE,SAAS;IA0CxB,SAAS,CAAC,IAAI,EAAE,SAAS;CA0B5B;AAGD,qBAAa,SAAU,SAAQ,IAAI;IAEZ,KAAK,EAAE,IAAI;IACnB,KAAK,EAAE,IAAI;IACX,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,MAAM;IACd,CAAC,EAAE,KAAK;IACR,GAAG,EAAE,IAAI;gBALD,KAAK,EAAE,IAAI,EACnB,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,CAAC,EAAE,KAAK,EACR,GAAG,EAAE,IAAI,EAChB,GAAG,EAAE,IAAI;IAQb,MAAM,IAAI,IAAI,EAAE;CAiBnB"} \ No newline at end of file diff --git a/types/Nest/Test/TestPraseOddments.d.ts.map b/types/Nest/Test/TestPraseOddments.d.ts.map index d54738a..65537ba 100644 --- a/types/Nest/Test/TestPraseOddments.d.ts.map +++ b/types/Nest/Test/TestPraseOddments.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TestPraseOddments.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/TestPraseOddments.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAWtD,qBACa,yBAA0B,YAAW,OAAO;IAE/C,IAAI;CA8Bb"} \ No newline at end of file +{"version":3,"file":"TestPraseOddments.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/TestPraseOddments.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAatD,qBACa,yBAA0B,YAAW,OAAO;IAE/C,IAAI;CA+Hb"} \ No newline at end of file diff --git a/types/Nest/Test/TestYH2.d.ts.map b/types/Nest/Test/TestYH2.d.ts.map index 89b164b..475c382 100644 --- a/types/Nest/Test/TestYH2.d.ts.map +++ b/types/Nest/Test/TestYH2.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TestYH2.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/TestYH2.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAKtD,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CA4Bb"} \ No newline at end of file +{"version":3,"file":"TestYH2.d.ts","sourceRoot":"","sources":["../../../../src/Nest/Test/TestYH2.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAOtD,qBAAa,eAAgB,YAAW,OAAO;IAErC,IAAI;CAkCb"} \ No newline at end of file diff --git a/types/Notice/Notice.d.ts b/types/Notice/Notice.d.ts new file mode 100644 index 0000000..b8fb6e4 --- /dev/null +++ b/types/Notice/Notice.d.ts @@ -0,0 +1,2 @@ +export declare const NoticeToaster: import("@blueprintjs/core").IToaster; +//# sourceMappingURL=Notice.d.ts.map \ No newline at end of file diff --git a/types/Notice/Notice.d.ts.map b/types/Notice/Notice.d.ts.map new file mode 100644 index 0000000..107f3e5 --- /dev/null +++ b/types/Notice/Notice.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Notice.d.ts","sourceRoot":"","sources":["../../../src/Notice/Notice.tsx"],"names":[],"mappings":"AACA,eAAO,MAAM,aAAa,sCAMxB,CAAC"} \ No newline at end of file diff --git a/types/Notice/NoticeBody.d.ts b/types/Notice/NoticeBody.d.ts new file mode 100644 index 0000000..dea63b8 --- /dev/null +++ b/types/Notice/NoticeBody.d.ts @@ -0,0 +1,10 @@ +import React from "react"; +import 'swiper/swiper-bundle.min.css'; +import 'swiper/swiper.min.css'; +import { NoticeGroup, TabsExampleState } from "./NoticeGroup"; +export declare class NoticeBody extends React.Component { + state: TabsExampleState; + render(): JSX.Element; + private handleNavbarTabChange; +} +//# sourceMappingURL=NoticeBody.d.ts.map \ No newline at end of file diff --git a/types/Notice/NoticeBody.d.ts.map b/types/Notice/NoticeBody.d.ts.map new file mode 100644 index 0000000..74e8417 --- /dev/null +++ b/types/Notice/NoticeBody.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"NoticeBody.d.ts","sourceRoot":"","sources":["../../../src/Notice/NoticeBody.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAa,MAAM,OAAO,CAAC;AAMlC,OAAO,8BAA8B,CAAC;AACtC,OAAO,uBAAuB,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE9D,qBAAa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,gBAAgB,EAAE,EAAE,CAAC;IAEvE,KAAK,EAAE,gBAAgB,CAI5B;IACF,MAAM;IA4BN,OAAO,CAAC,qBAAqB,CAA0D;CAC1F"} \ No newline at end of file diff --git a/types/Notice/NoticeGroup.d.ts b/types/Notice/NoticeGroup.d.ts new file mode 100644 index 0000000..e610e80 --- /dev/null +++ b/types/Notice/NoticeGroup.d.ts @@ -0,0 +1,22 @@ +import { TabId } from "@blueprintjs/core"; +export interface NoticeGroup { + data: NoticeProp[]; +} +interface NoticeProp { + data: string[]; + notice_id: string; + product_type: string; + notice_type: string; + component_type: string; + notice_group_type: string; + notice_group: string; + notice_content: string; + update_date: string; +} +export interface TabsExampleState { + activePanelOnly: boolean; + animate: boolean; + navbarTabId: TabId; +} +export {}; +//# sourceMappingURL=NoticeGroup.d.ts.map \ No newline at end of file diff --git a/types/Notice/NoticeGroup.d.ts.map b/types/Notice/NoticeGroup.d.ts.map new file mode 100644 index 0000000..0b9f82a --- /dev/null +++ b/types/Notice/NoticeGroup.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"NoticeGroup.d.ts","sourceRoot":"","sources":["../../../src/Notice/NoticeGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,MAAM,WAAW,WAAW;IAExB,IAAI,EAAE,UAAU,EAAE,CAAC;CACtB;AAED,UAAU,UAAU;IAEhB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAE7B,eAAe,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,KAAK,CAAC;CACtB"} \ No newline at end of file diff --git a/types/Production/Product.d.ts b/types/Production/Product.d.ts index 9b13cf3..fb78eb1 100644 --- a/types/Production/Product.d.ts +++ b/types/Production/Product.d.ts @@ -2,7 +2,7 @@ import { Vector3 } from "three"; import { FaceDirection } from "../Add-on/DrawDrilling/DrillType"; import { EBoardKeyList } from "../Common/BoardKeyList"; import { GangDrillType } from "../DatabaseServices/3DSolid/CylinderHole"; -import { Board, I2DModeingItem, IKnifeInfo } from "../DatabaseServices/Entity/Board"; +import { Board, I2DModeingItem, IKnifeInfo, IModeling } from "../DatabaseServices/Entity/Board"; import { BoardOpenDir } from "../DatabaseServices/Entity/BoardInterface"; import { ExtrudeContourCurve } from "../DatabaseServices/Entity/Extrude"; import { Polyline } from "../DatabaseServices/Entity/Polyline"; @@ -10,7 +10,7 @@ import { HardwareCompositeEntity } from "../DatabaseServices/Hardware/HardwareCo import { HardwareTopline } from "../DatabaseServices/Hardware/HardwareTopline"; import { BrSealedData } from "../GraphicsSystem/CalcEdgeSealing"; import { IHardwareOption } from "../UI/Components/RightPanel/RightPanelInterface"; -import { IHighEdgeRemarkItem, ISealingData } from "../UI/Store/OptionInterface/IHighSealedItem"; +import { IHighEdgeRemarkItem, IHighReservedEdgeItem, ISealingData } from "../UI/Store/OptionInterface/IHighSealedItem"; import { Entity } from './../DatabaseServices/Entity/Entity'; import { IContourData } from "./Convert2PtsBul"; export interface I3DContourData { @@ -34,6 +34,7 @@ export interface IDrillingOption { endPt?: Vector3; angle?: number; name: string; + goodsId?: string; } export interface IBoardHoleInfo { frontBackHoles: IDrillingOption[]; @@ -49,6 +50,7 @@ interface IBoardProdInfo { [EBoardKeyList.Color]: string; [EBoardKeyList.Lines]: number; [EBoardKeyList.DrillType]: string; + [EBoardKeyList.Thick]: number; spliteHeight: string; spliteThickness: string; spliteWidth: string; @@ -74,9 +76,11 @@ export interface ISpliteOrderData { outline: IContourData; sealing: ISealingData[]; boardEdgeRemark: IHighEdgeRemarkItem[]; + reservedEdge: IHighReservedEdgeItem[]; modeling: IModelingData[]; + curveBoardModeling: IModeling[]; holes: IBoardHoleInfo; - sideModeling: IModelingData[]; + sideModeling: IOriginSideModelingData[]; offsetTanslation: Vector3; originOutlin: IContourData; metalsData?: { @@ -86,6 +90,7 @@ export interface ISpliteOrderData { boardContour: IContourData; modeling2D: I2DModeling[]; modeling3D: I3DModeling[]; + isReverse: boolean; } export interface IBoardMetalsData { metals: ISpliteHardwareData[]; @@ -108,30 +113,60 @@ export interface IOriginModelingData { addWidth?: number; addDepth?: number; } +export interface IOriginSideModelingData extends IOriginModelingData { + chaiDanName: string; + modelType: ModelType; +} +export declare enum ModelType { + frontBackModel = 0,//正反面造型槽 + sideModel = 1,//绘制的侧槽造型 + drill = 2,//自定义排钻生成的非圆侧孔 + sideHoleModel = 3 +} interface IChaiDanFeedingData extends IOriginModelingData { boardContour: IContourData; brThickness: number; } +export declare enum SplitOrderType { + ChaiDan = 0,// 拆单/走刀时使用 + HoleGrooveDim = 1 +} export declare namespace Production { - /**获取板件拆单数据 */ - function GetBoardSplitOrderData(br: Board, redundancyKnif?: number): ISpliteOrderData | undefined; - function ParseSealData(sealData: BrSealedData): ISealingData[]; - function ParseBoardEdgeRemarkData(sealData: BrSealedData, highBoardEdgeRemark: IHighEdgeRemarkItem[]): IHighEdgeRemarkItem[]; + /** + * 获取板件拆单数据 + * @param {Board} br 板件 + * @param {number} [redundancyKnif=0] 刀冗余 + * @param {SplitOrderType} [splitType=SplitOrderType.ChaiDan] 拆单类型,默认为拆单 + * @return {*} {(ISpliteOrderData | undefined)} + */ + function GetBoardSplitOrderData(br: Board, redundancyKnif?: number, splitType?: SplitOrderType): ISpliteOrderData | undefined; + function ParseSealData(sealData: BrSealedData, defaultSealColor?: string): { + seals: ISealingData[]; + reservedEdges: IHighReservedEdgeItem[]; + }; function GetBoardInfo(br: Board, size: Vector3): IBoardProdInfo; function GetMetalTotalEntitys(md: HardwareCompositeEntity, isHole?: boolean, filter?: (e: Entity) => boolean): Entity[]; function GetOriginBoardModelingData(br: Board): { modeling: IOriginModelingData[]; - sideModeling: IOriginModelingData[]; + sideModeling: { + sideModel: IOriginSideModelingData[]; + sideHole: IDrillingOption[]; + }; }; /** * 计算板的造型走刀数据(包括自定义排钻的走刀 侧面走刀) * @param br * @param offsetTanslation */ - function GetBoardModelingData(br: Board, offsetTanslation: Vector3, redundancyKnif?: number): { + function GetBoardModelingData(br: Board, offsetTanslation: Vector3, redundancyKnif: number, curveBoardModeling: IModeling[]): { modeling: IModelingData[]; - sideModeling: IModelingData[]; + sideModeling: IOriginSideModelingData[]; }; + function GetBoardSideModelingData(br: Board, toaster?: boolean): { + sideModel: IOriginSideModelingData[]; + sideHole: IDrillingOption[]; + }; + function HasSpiteSize(br: Board): boolean; function GetSpiteSize(br: Board): { spliteHeight: number; spliteWidth: number; @@ -156,5 +191,6 @@ export declare namespace Production { function GetChaiDanFeedingPath(data: IChaiDanFeedingData, redundancyKnif?: number): IContourData[]; function GetGroupName(ent: Entity): string; } +export declare function ParseArcBoardHoles(br: Board, offsetTanslation: Vector3): Vector3; export {}; //# sourceMappingURL=Product.d.ts.map \ No newline at end of file diff --git a/types/Production/Product.d.ts.map b/types/Production/Product.d.ts.map index 6ce95ab..2402b4b 100644 --- a/types/Production/Product.d.ts.map +++ b/types/Production/Product.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Product.d.ts","sourceRoot":"","sources":["../../../src/Production/Product.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Product.d.ts","sourceRoot":"","sources":["../../../src/Production/Product.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,OAAO,EAAE,MAAM,OAAO,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAIjE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAKvD,OAAO,EAAgB,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAKvF,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC;AAEzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sDAAsD,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,8CAA8C,CAAC;AAK/E,OAAO,EAAE,YAAY,EAAiD,MAAM,mCAAmC,CAAC;AAEhH,OAAO,EAAe,eAAe,EAAkB,MAAM,iDAAiD,CAAC;AAC/G,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,6CAA6C,CAAC;AACvH,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAE7D,OAAO,EAAqC,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEnF,MAAM,WAAW,cAAc;IAE3B,GAAG,EAAE,OAAO,EAAE,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB;AACD,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,uBAAuB,CAAC;AAGtE,MAAM,WAAW,aAAa;IAE1B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,aAAa,GAAG,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,mBAAmB,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAE5B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAE3B,cAAc,EAAE,eAAe,EAAE,CAAC;IAClC,SAAS,EAAE,eAAe,EAAE,CAAC;CAChC;AAED,UAAU,cAAc;IAEpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IACjC,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IACpC,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAC5B,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAC9B,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAC9B,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAC9B,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAClC,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IAEpB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAExB,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE,aAAa,CAAC;IACnB,KAAK,EAAE,cAAc,EAAE,CAAC;CAC3B;AACD,MAAM,WAAW,WAAW;IAExB,IAAI,EAAE,cAAc,CAAC;IACrB,GAAG,EAAE,aAAa,CAAC;IACnB,KAAK,EAAE,UAAU,CAAC;CACrB;AAED,UAAU;AACV,MAAM,WAAW,gBAAgB;IAE7B,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,eAAe,EAAE,mBAAmB,EAAE,CAAC;IACvC,YAAY,EAAE,qBAAqB,EAAE,CAAC;IACtC,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,kBAAkB,EAAE,SAAS,EAAE,CAAC;IAChC,KAAK,EAAE,cAAc,CAAC;IACtB,YAAY,EAAE,uBAAuB,EAAE,CAAC;IACxC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAC;IAC/C,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAE7B,MAAM,EAAE,mBAAmB,EAAE,CAAC;IAC9B,IAAI,EAAE,mBAAmB,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAEhC,YAAY,EAAE,eAAe,CAAC;IAC9B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC7B,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAEhC,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAwB,SAAQ,mBAAmB;IAEhE,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,SAAS,CAAC;CACxB;AAED,oBAAY,SAAS;IAEjB,cAAc,IAAI,CAAE,QAAQ;IAC5B,SAAS,IAAI,CAAC,SAAS;IACvB,KAAK,IAAI,CAAE,cAAc;IACzB,aAAa,IAAI;CACpB;AAED,UAAU,mBAAoB,SAAQ,mBAAmB;IAErD,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,oBAAY,cAAc;IAEtB,OAAO,IAAA,CAAE,WAAW;IACpB,aAAa,IAAA;CAChB;AAED,yBAAiB,UAAU,CAC3B;IACI;;;;;;OAMG;IACH,SAAgB,sBAAsB,CAAC,EAAE,EAAE,KAAK,EAAE,cAAc,SAAI,EAAE,SAAS,GAAE,cAAuC,GAAG,gBAAgB,GAAG,SAAS,CAoFtJ;IAID,SAAgB,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,gBAAgB,GAAE,MAAW,GAAG;QAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QAAC,aAAa,EAAE,qBAAqB,EAAE,CAAC;KAAE,CAwDvJ;IAmCD,SAAgB,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,GAAG,cAAc,CA2BrE;IAED,SAAgB,oBAAoB,CAAC,EAAE,EAAE,uBAAuB,EAAE,MAAM,UAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,YAqBhH;IAED,SAAgB,0BAA0B,CAAC,EAAE,EAAE,KAAK;;;;;;MA+BnD;IAED;;;;OAIG;IACH,SAAgB,oBAAoB,CAAC,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,cAAc,QAAI,EAAE,kBAAkB,EAAE,SAAS,EAAE;;;MA2D7H;IAED,SAAgB,wBAAwB,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,UAAQ;;;MAkFlE;IAGD,SAAgB,YAAY,CAAC,EAAE,EAAE,KAAK,GAAG,OAAO,CAM/C;IAGD,SAAgB,YAAY,CAAC,EAAE,EAAE,KAAK;;;;MAuBrC;IAGD,SAAgB,4BAA4B,CAAC,EAAE,EAAE,KAAK,GAAG,QAAQ,GAAG,IAAI,CAMvE;IAED,wBAAwB;IACxB,SAAgB,iBAAiB,CAAC,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,EAAE,mBAAmB,GAAG,cAAc,CA8I1H;IAkdD,SAAgB,wBAAwB,CAAC,EAAE,EAAE,uBAAuB,GAAG,mBAAmB,CAsCzF;IAED,SAAgB,sBAAsB,CAAC,EAAE,EAAE,eAAe,yBA0CzD;IAED,YAAY;IACZ,SAAgB,kBAAkB,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,aAAa,CAAC,EAAE;;;;;MAGhE;IAED,SAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CA4B/D;IAED,SAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,UAAO,YAM/D;IAED,SAAgB,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,iBAqBtD;IAED,SAAgB,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,iBAiDtD;IAED,SAAgB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,EAAE,cAAc,SAAI,kBAmBlF;IACD,SAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKhD;CACJ;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,WAsFtE"} \ No newline at end of file diff --git a/types/Reactor/DeleteMaterialReactor.d.ts b/types/Reactor/DeleteMaterialReactor.d.ts new file mode 100644 index 0000000..f2e7ac7 --- /dev/null +++ b/types/Reactor/DeleteMaterialReactor.d.ts @@ -0,0 +1,6 @@ +import { PhysicalMaterialRecord } from "../DatabaseServices/PhysicalMaterialRecord"; +export declare class DeleteMaterialReactor { + constructor(); + UpdateMtl(mtl: PhysicalMaterialRecord): void; +} +//# sourceMappingURL=DeleteMaterialReactor.d.ts.map \ No newline at end of file diff --git a/types/Reactor/DeleteMaterialReactor.d.ts.map b/types/Reactor/DeleteMaterialReactor.d.ts.map new file mode 100644 index 0000000..f5d86b6 --- /dev/null +++ b/types/Reactor/DeleteMaterialReactor.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"DeleteMaterialReactor.d.ts","sourceRoot":"","sources":["../../../src/Reactor/DeleteMaterialReactor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAEpF,qBAAa,qBAAqB;;IAuB9B,SAAS,CAAC,GAAG,EAAE,sBAAsB;CAMxC"} \ No newline at end of file diff --git a/types/Reactor/LayerReactor.d.ts b/types/Reactor/LayerReactor.d.ts new file mode 100644 index 0000000..9e5a0df --- /dev/null +++ b/types/Reactor/LayerReactor.d.ts @@ -0,0 +1,5 @@ +/** 图层反应器 */ +export declare class LayerReactor { + constructor(); +} +//# sourceMappingURL=LayerReactor.d.ts.map \ No newline at end of file diff --git a/types/Reactor/LayerReactor.d.ts.map b/types/Reactor/LayerReactor.d.ts.map new file mode 100644 index 0000000..fb4cb00 --- /dev/null +++ b/types/Reactor/LayerReactor.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"LayerReactor.d.ts","sourceRoot":"","sources":["../../../src/Reactor/LayerReactor.ts"],"names":[],"mappings":"AAWA,YAAY;AACZ,qBAAa,YAAY;;CAmDxB"} \ No newline at end of file diff --git a/types/Reactor/RelevanceCuttingReactor.d.ts.map b/types/Reactor/RelevanceCuttingReactor.d.ts.map index b083009..4abcd2d 100644 --- a/types/Reactor/RelevanceCuttingReactor.d.ts.map +++ b/types/Reactor/RelevanceCuttingReactor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RelevanceCuttingReactor.d.ts","sourceRoot":"","sources":["../../../src/Reactor/RelevanceCuttingReactor.ts"],"names":[],"mappings":"AACA,OAAO,EAAO,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAoE7E,qBAAa,uBAAuB;IAEpB,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,kBAAkB;IAmG3C,gBAAgB;CA+CnB"} \ No newline at end of file +{"version":3,"file":"RelevanceCuttingReactor.d.ts","sourceRoot":"","sources":["../../../src/Reactor/RelevanceCuttingReactor.ts"],"names":[],"mappings":"AACA,OAAO,EAAO,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAmE7E,qBAAa,uBAAuB;IAEpB,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,kBAAkB;IAmG3C,gBAAgB;CAoDnB"} \ No newline at end of file diff --git a/types/Reactor/SyncDataReactor.d.ts.map b/types/Reactor/SyncDataReactor.d.ts.map index 9f6761b..4f4956c 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,EAAkE,IAAI,EAAgB,MAAM,sBAAsB,CAAC;AAC1H,OAAO,EAAE,kBAAkB,EAAO,MAAM,oCAAoC,CAAC;AAgB7E,MAAM,WAAW,aAAa;IAE1B,GAAG,EAAE,IAAI,CAAC;IACV,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,IAAI,CAAC;CAChB;AAcD,qBAAa,eAAe;IAEZ,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,kBAAkB;IAoE3C,gBAAgB;IA2BhB,OAAO,CAAC,QAAQ;CA+GnB"} \ 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,EAAE,kBAAkB,EAAO,MAAM,oCAAoC,CAAC;AAkB7E,MAAM,WAAW,aAAa;IAE1B,GAAG,EAAE,IAAI,CAAC;IACV,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,IAAI,CAAC;CAChB;AAcD,qBAAa,eAAe;IAEZ,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,kBAAkB;IA+E3C,gBAAgB;IAkChB,OAAO,CAAC,QAAQ;CAqHnB"} \ No newline at end of file diff --git a/types/UI/Components/ApplyGoodInfo.d.ts b/types/UI/Components/ApplyGoodInfo.d.ts index 2fc129a..11c6d28 100644 --- a/types/UI/Components/ApplyGoodInfo.d.ts +++ b/types/UI/Components/ApplyGoodInfo.d.ts @@ -1,4 +1,6 @@ import { Board } from '../../DatabaseServices/Entity/Board'; +import { HardwareCompositeEntity } from '../../DatabaseServices/Hardware/HardwareCompositeEntity'; import { PhysicalMaterialRecord } from '../../DatabaseServices/PhysicalMaterialRecord'; export declare function ApplyGoodInfo(en: Board, material: PhysicalMaterialRecord): void; +export declare function ApplyHardwareInfo(en: HardwareCompositeEntity, material: PhysicalMaterialRecord): void; //# sourceMappingURL=ApplyGoodInfo.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ApplyGoodInfo.d.ts.map b/types/UI/Components/ApplyGoodInfo.d.ts.map index f5af760..194731d 100644 --- a/types/UI/Components/ApplyGoodInfo.d.ts.map +++ b/types/UI/Components/ApplyGoodInfo.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ApplyGoodInfo.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/ApplyGoodInfo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AAGvF,wBAAgB,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,sBAAsB,QAKxE"} \ No newline at end of file +{"version":3,"file":"ApplyGoodInfo.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/ApplyGoodInfo.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yDAAyD,CAAC;AAClG,OAAO,EAAkB,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AAIvG,wBAAgB,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,sBAAsB,QAQxE;AAED,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,uBAAuB,EAAE,QAAQ,EAAE,sBAAsB,QAmC9F"} \ No newline at end of file diff --git a/types/UI/Components/Asset.d.ts b/types/UI/Components/Asset.d.ts index 4dc03e3..e71ea42 100644 --- a/types/UI/Components/Asset.d.ts +++ b/types/UI/Components/Asset.d.ts @@ -1,6 +1,6 @@ import React, { DragEvent } from 'react'; -import { Entity } from '../../DatabaseServices/Entity/Entity'; import { PhysicalMaterialRecord } from '../../DatabaseServices/PhysicalMaterialRecord'; +import { TextureTableRecord } from '../../DatabaseServices/Texture'; interface AssetProps { material: PhysicalMaterialRecord; hightLight?: boolean; @@ -16,6 +16,7 @@ export declare enum CurDefMtlType { * 材质球 纹理 预览 */ export declare class Asset extends React.Component { + isLock: boolean; _Image: React.RefObject; _DivColorRef: React.RefObject; _CurWallMtlIconMarginBottom: number; @@ -27,6 +28,7 @@ export declare class Asset extends React.Component { _RenderIng: boolean; componentDidMount(): void; componentWillUnmount(): void; + updateTexture: (texture: TextureTableRecord) => void; /** * 更新渲染材质球预览图 */ @@ -39,10 +41,6 @@ export declare class Asset extends React.Component { _HandleCollection: () => Promise; _SetCurDefMtl: (type: CurDefMtlType) => void; _HandleDelete: () => Promise; - /** - * 获得使用当前材质的实体列表 (板和五金) - */ - _GetUseCurMtlEntitys(): Entity[]; _HandleStart: (e: DragEvent) => void; /** * 图标多个重叠时改变marginBottom diff --git a/types/UI/Components/Asset.d.ts.map b/types/UI/Components/Asset.d.ts.map index ad15a6a..126020b 100644 --- a/types/UI/Components/Asset.d.ts.map +++ b/types/UI/Components/Asset.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Asset.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/Asset.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAWxD,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAE9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AAgDvF,UAAU,UAAU;IAEhB,QAAQ,EAAE,sBAAsB,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,sBAAsB,KAAK,IAAI,CAAC;CACvD;AAED,oBAAY,aAAa;IAErB,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;IACT,WAAW,IAAI;CAClB;AAED;;GAEG;AACH,qBACa,KAAM,SAAQ,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC;IAEtD,MAAM,oCAAuC;IAC7C,YAAY,kCAAqC;IACjD,2BAA2B,EAAE,MAAM,CAAK;IACxC,4BAA4B,EAAE,MAAM,CAAK;IACzC,kCAAkC,EAAE,MAAM,CAAK;IAC/C,gCAAgC,EAAE,MAAM,CAAO;IAC/C,OAAO,EAAE,cAAc,CAAC;IACxB,WAAW,EAAE,QAAQ,EAAE,CAAM;IAC7B,UAAU,UAAS;IAEnB,iBAAiB;IAMjB,oBAAoB;IAKpB;;OAEG;IACH,oBAAoB,sBAmClB;IAEF,QAAQ,aAIN;IAEF,kBAAkB,sBAehB;IAEF,YAAY,aAgCV;IAEF,gBAAgB,aASd;IAGF,uBAAuB,sBA+BrB;IAGF,iBAAiB,sBAmCf;IAGF,aAAa,SAAU,aAAa,UA6BlC;IAEF,aAAa,sBAiBX;IAEF;;OAEG;IACH,oBAAoB;IAmBpB,YAAY,MAAO,SAAS,UAG1B;IAEF;;OAEG;IACH,oBAAoB;IAyCpB,MAAM;CAuFT"} \ No newline at end of file +{"version":3,"file":"Asset.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/Asset.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAC;AAaxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAgDpE,UAAU,UAAU;IAEhB,QAAQ,EAAE,sBAAsB,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,CAAC,GAAG,CAAC,EAAE,sBAAsB,KAAK,IAAI,CAAC;CACvD;AAED,oBAAY,aAAa;IAErB,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;IACT,WAAW,IAAI;CAClB;AAED;;GAEG;AACH,qBACa,KAAM,SAAQ,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,CAAC;IAE1C,MAAM,UAAsD;IACxE,MAAM,oCAAuC;IAC7C,YAAY,kCAAqC;IACjD,2BAA2B,EAAE,MAAM,CAAK;IACxC,4BAA4B,EAAE,MAAM,CAAK;IACzC,kCAAkC,EAAE,MAAM,CAAK;IAC/C,gCAAgC,EAAE,MAAM,CAAO;IAC/C,OAAO,EAAE,cAAc,CAAC;IACxB,WAAW,EAAE,QAAQ,EAAE,CAAM;IAC7B,UAAU,UAAS;IAEnB,iBAAiB;IAUjB,oBAAoB;IAKpB,aAAa,YAAa,kBAAkB,UAM1C;IAEF;;OAEG;IACH,oBAAoB,sBAmClB;IAEF,QAAQ,aAIN;IAEF,kBAAkB,sBAehB;IAEF,YAAY,aAGV;IAEF,gBAAgB,aASd;IAGF,uBAAuB,sBA+BrB;IAGF,iBAAiB,sBAmCf;IAGF,aAAa,SAAU,aAAa,UA6BlC;IAEF,aAAa,sBA0BX;IAEF,YAAY,MAAO,SAAS,UAG1B;IAEF;;OAEG;IACH,oBAAoB;IAyCpB,MAAM;CA4GT"} \ No newline at end of file diff --git a/types/UI/Components/AutoDimBoard.d.ts b/types/UI/Components/AutoDimBoard.d.ts index 07999cd..8b731a1 100644 --- a/types/UI/Components/AutoDimBoard.d.ts +++ b/types/UI/Components/AutoDimBoard.d.ts @@ -10,6 +10,7 @@ export declare class AutoDimBoardPanel extends React.Component<{ _NoShowMinInSizeInput: React.RefObject; _NoShowAppointDimSizeInput: React.RefObject; _ForBoardNameInput: React.RefObject; + _InsideOffsetDistInput: React.RefObject; componentDidMount(): void; componentWillUnmount(): void; render(): JSX.Element; diff --git a/types/UI/Components/AutoDimBoard.d.ts.map b/types/UI/Components/AutoDimBoard.d.ts.map index a14d453..eb78c69 100644 --- a/types/UI/Components/AutoDimBoard.d.ts.map +++ b/types/UI/Components/AutoDimBoard.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"AutoDimBoard.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/AutoDimBoard.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAWvE,qBACa,iBAAkB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,eAAe,CAAC;CAAE,CAAC;IAC/E,MAAM,EAAE,QAAQ,EAAE,CAAM;IACZ,WAAW,UAAS;IACpB,uBAAuB,UAAS;IAC5C,mBAAmB,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAqB;IAC3E,qBAAqB,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAqB;IAC7E,0BAA0B,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAqB;IAClF,kBAAkB,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAqB;IAE1E,iBAAiB;IA8BjB,oBAAoB;IAMpB,MAAM;IA2ON,SAAS,MAAO,MAAM,WAAW,CAAC,gBAAgB,CAAC,UAOjD;IAEF,SAAS,QAAS,MAAM,UAGtB;IAEF,KAAK,aAGH;IAEF,OAAO,aAGL;CACL"} \ No newline at end of file +{"version":3,"file":"AutoDimBoard.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/AutoDimBoard.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAWvE,qBACa,iBAAkB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,eAAe,CAAC;CAAE,CAAC;IAC/E,MAAM,EAAE,QAAQ,EAAE,CAAM;IACZ,WAAW,UAAS;IACpB,uBAAuB,UAAS;IAC5C,mBAAmB,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAqB;IAC3E,qBAAqB,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAqB;IAC7E,0BAA0B,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAqB;IAClF,kBAAkB,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAqB;IAC1E,sBAAsB,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAqB;IAE9E,iBAAiB;IAgCjB,oBAAoB;IAMpB,MAAM;IA4QN,SAAS,MAAO,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,UAOjD;IAEF,SAAS,QAAS,MAAM,UAGtB;IAEF,KAAK,aAGH;IAEF,OAAO,aAGL;CACL"} \ No newline at end of file diff --git a/types/UI/Components/AxisMode/AxisMode.d.ts.map b/types/UI/Components/AxisMode/AxisMode.d.ts.map index b3a78e6..e72415a 100644 --- a/types/UI/Components/AxisMode/AxisMode.d.ts.map +++ b/types/UI/Components/AxisMode/AxisMode.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"AxisMode.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/AxisMode/AxisMode.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgB,QAAQ,EAA2B,MAAM,mBAAmB,CAAC;AAGpF,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGzC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAE5F,OAAO,iBAAiB,CAAC;AACzB,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,eAAO,MAAM,SAAS,YAAY,CAAC;AA8BnC,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,SAAS;IAE3C,SAAS,EAAE,aAAa,CAAqC;IACjD,WAAW,EAAE,QAAQ,CAAY;IAC7C,eAAe,MAAO,gBAAgB,QAAQ,SAAS,UAKrD;IACF,kBAAkB,CAAC,WAAW,EAAE,WAAW;IAM3C,OAAO,SAAU,SAAS,UAOxB;IACF,OAAO,CAAC,kBAAkB,CAoBxB;IACU,UAAU,SAAQ;IAC9B,SAAS,EAAE,QAAQ,CAAC;IACpB,iBAAiB;IASjB,oBAAoB;IASpB,MAAM;CAmJT"} \ No newline at end of file +{"version":3,"file":"AxisMode.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/AxisMode/AxisMode.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgB,QAAQ,EAA2B,MAAM,mBAAmB,CAAC;AAGpF,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGzC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oDAAoD,CAAC;AAE5F,OAAO,iBAAiB,CAAC;AACzB,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,eAAO,MAAM,SAAS,YAAY,CAAC;AA8BnC,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,SAAS;IAE3C,SAAS,EAAE,aAAa,CAAqC;IACjD,WAAW,EAAE,QAAQ,CAAY;IAC7C,eAAe,MAAO,KAAK,CAAC,UAAU,QAAQ,SAAS,UAKrD;IACF,kBAAkB,CAAC,WAAW,EAAE,WAAW;IAM3C,OAAO,SAAU,SAAS,UAOxB;IACF,OAAO,CAAC,kBAAkB,CAoBxB;IACU,UAAU,SAAQ;IAC9B,SAAS,EAAE,QAAQ,CAAC;IACpB,iBAAiB;IASjB,oBAAoB;IASpB,MAAM;CAmJT"} \ 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 a6b2bb7..beb64b3 100644 --- a/types/UI/Components/BBS/BBSCommon.d.ts +++ b/types/UI/Components/BBS/BBSCommon.d.ts @@ -38,8 +38,13 @@ interface IPartsTableProps { type: PartsType; partsCount: (ICountType | ICountType)[]; titles: string[]; + isSort?: boolean; } export declare class PartsTable extends React.Component { + sortFlag: boolean; + icon: IconName; + SortFunc: (a: number | string, b: number | string, asc: boolean) => number; + handleClick: () => void; private renderBody; render(): JSX.Element; } @@ -102,5 +107,13 @@ export declare class BBSProcessGroupItem extends React.Component { render(): JSX.Element; } +interface IBBSKaiLiaoComponentProps { + click: (v: string) => void; + board: Board; + optKey: string; +} +export declare class BBSKaiLiaoComponent extends React.Component { + render(): JSX.Element; +} export {}; //# sourceMappingURL=BBSCommon.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/BBS/BBSCommon.d.ts.map b/types/UI/Components/BBS/BBSCommon.d.ts.map index deeee5d..64debc5 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":"AAAA,OAAO,EAA6B,QAAQ,EAAU,YAAY,EAA0B,MAAM,mBAAmB,CAAC;AAItH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,UAAU,EAA0B,MAAM,2DAA2D,CAAC;AAM/G,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAgB,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iEAAiE,CAAC;AASxG,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,WAAW,WAAW;IAExB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,CAAC;CAClB;AAED,eAAO,MAAM,kBAAkB,UAAkB,CAAC;AAElD,UAAU,iBAAiB;IAEvB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,KAAK,EAAE,GAAG,CAAC;IACX,WAAW,EAAE,QAAQ,CAAC;IACtB,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5E,SAAS,EAAE,YAAY,CAAC;CAC3B;AACD,qBACa,WAAY,SAAQ,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC;IAE/D,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,kCAAqC;IAC7C,iBAAiB;IAejB,UAAU,SAAU,MAAM,aAOxB;IAEF,aAAa,UAAW,MAAM,SAAS,MAAM,KAAG,KAAK,CAAC,aAAa,CAYjE;IAEF,SAAS,UAAW,CAAC,MAAM,EAAE,MAAM,CAAC,UAqClC;IACF,MAAM;CA2FT;AAeD,oBAAY,SAAS;IAEjB,IAAI,IAAI;IACR,QAAQ,IAAI;IACZ,IAAI,IAAI;IACR,IAAI,IAAI;CACX;AAGD,UAAU,gBAAgB;IAEtB,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,CAAC,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;IAC/C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAGD,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,CAAC;IAErD,QAAQ,UAAS;IAC7B,IAAI,EAAE,QAAQ,CAAW;IAEzB,QAAQ,MAAO,MAAM,GAAG,MAAM,KAAK,MAAM,GAAG,MAAM,OAAO,OAAO,YAM9D;IAEF,WAAW,aA6CT;IACF,OAAO,CAAC,UAAU;IA4FlB,MAAM;CAmCT;AAGD,UAAU,kBAAkB;IAExB,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,iBAAiB,CAAC;IAC1B,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,qBAAqB,EAAE,KAAK,IAAI,CAAC;IACjI,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,UAAU,yBAA0B,SAAQ,kBAAkB;IAE1D,OAAO,EAAE,MAAM,CAAC;CACnB;AACD,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC,yBAAyB,CAAC;IAE/E,MAAM;CAiFT;AAED,UAAU,0BAA2B,SAAQ,kBAAkB;IAE3D,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,qBACa,wBAAyB,SAAQ,KAAK,CAAC,SAAS,CAAC,0BAA0B,CAAC;IAErF,MAAM;CA4DT;AAED,UAAU,uBAAuB;IAE7B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,qBAAqB,EAAE,KAAK,IAAI,CAAC;IACjI,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,aAAa,EAAE,CAAC,CAAC,KAAA,KAAK,IAAI,CAAC;IAC3B,YAAY,EAAE,YAAY,EAAE,GAAG,MAAM,EAAE,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,uBAAuB,CAAC;IAE5E,MAAM;IAiBN,OAAO,CAAC,YAAY,CA+BlB;CACL;AAGD,UAAU,yBAAyB;IAE/B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,qBAAqB,EAAE,KAAK,IAAI,CAAC;IACjI,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,aAAa,EAAE,CAAC,CAAC,CAAC,KAAA,KAAK,IAAI,CAAC;IAC5B,MAAM,EAAE,KAAK,CAAC;IACd,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;CAC7C;AAQD,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC,yBAAyB,CAAC;IAEnE,OAAO,CAAC,SAAS,CAAS;IACtC,OAAO,CAAC,QAAQ,CAA+B;IACnC,OAAO,CAAC,IAAI,CAA4B;IACpD,iBAAiB;IAIjB,MAAM;IA2DN,OAAO,CAAC,YAAY,CAGlB;IACF,OAAO,CAAC,SAAS,CAIf;IACF,OAAO,CAAC,UAAU,CA2ChB;IACF,OAAO,CAAC,WAAW,CAmBjB;IACF,OAAO,CAAC,oBAAoB,CAY1B;IACF,OAAO,CAAC,iBAAiB,CAcvB;CACL;AAED,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,CAAC;IAExE,MAAM;CA0CT;AACD,UAAU,yBAAyB;IAE/B,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB;AACD,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC,yBAAyB,CAAC;IAE/E,MAAM;CAsBT"} \ 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 279545b..3a05ec8 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;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;IAiEb,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;IAE/C,WAAW,SAAM;IACtB,MAAM;IAiEb,OAAO,CAAC,SAAS,CAAS;IAC1B,eAAe,MAAO,KAAK,CAAC,SAAS,UAOnC;IACF,cAAc,MAAO,KAAK,CAAC,SAAS,UAWlC;IACF,aAAa,MAAO,KAAK,CAAC,SAAS,UAuBjC;CACL"} \ No newline at end of file diff --git a/types/UI/Components/BBS/BoardInfosList.d.ts b/types/UI/Components/BBS/BoardInfosList.d.ts index da0ebe5..b461121 100644 --- a/types/UI/Components/BBS/BoardInfosList.d.ts +++ b/types/UI/Components/BBS/BoardInfosList.d.ts @@ -15,6 +15,7 @@ export interface IBoardInfoListProps { processGroupData: Map; style: React.CSSProperties; isSelect: boolean; + selectedBrOnList: Board[]; } type GetBBSBoardInfoType = { [P in (keyof T)]?: P extends EBoardKeyList.ProcessGroup ? ProcessingGroupRecord[] : T[P]; @@ -46,8 +47,10 @@ export declare class BoardInfoList extends React.Component void; HandleOnClick: (findSameTypeBrDataKey?: string) => void; + HandleOnKeyDown: (e: any) => void; GetBgColor: () => string; ToggleBgColor: () => void; + HandleNameBlur: (index: number, dataBr: Board, key: string, value: string) => void; } export {}; //# sourceMappingURL=BoardInfosList.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/BBS/BoardInfosList.d.ts.map b/types/UI/Components/BBS/BoardInfosList.d.ts.map index f71c522..b4178c4 100644 --- a/types/UI/Components/BBS/BoardInfosList.d.ts.map +++ b/types/UI/Components/BBS/BoardInfosList.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardInfosList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/BBS/BoardInfosList.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAK7D,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iEAAiE,CAAC;AAGxG,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AAMpF,MAAM,WAAW,mBAAmB;IAEhC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,CAAC;IACd,MAAM,EAAE,KAAK,CAAC;IACd,iBAAiB,EAAE,QAAQ,CAAC;IAC5B,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,qBAAqB,EAAE,KAAK,IAAI,CAAC;IACjI,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1C,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,KAAK,mBAAmB,CAAC,CAAC,IAAI;KACzB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,aAAa,CAAC,YAAY,GAAG,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;CAC3F,CAAC;AAEF,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB,CAAC,kBAAkB,CAAC;IAE9E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,mBAAmB,EAAE,EAAE,CAAC;IAEvE,KAAK,EAAE,cAAc,CAAC;IACV,UAAU,EAAE,OAAO,CAAS;IACxC,OAAO,CAAC,WAAW,CAAkB;IACzB,OAAO,CAAC,MAAM,CAAoB;gBAClC,KAAK,KAAA;IAKjB,iBAAiB;IAUjB,oBAAoB;IAMpB,gCAAgC,CAAC,SAAS,EAAE,mBAAmB;IAK/D,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,UAAQ;IAgB5C,OAAO,CAAC,WAAW;IAmBZ,MAAM;IAoJb,SAAS,UAAW,KAAK,UA8EvB;IACF,aAAa,2BAA4B,MAAM,UAK7C;IACF,UAAU,eASR;IACF,aAAa,aAIX;CACL"} \ No newline at end of file +{"version":3,"file":"BoardInfosList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/BBS/BoardInfosList.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAM7D,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAgB,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAC1F,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iEAAiE,CAAC;AAGxG,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AAMpF,MAAM,WAAW,mBAAmB;IAEhC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,CAAC;IACd,MAAM,EAAE,KAAK,CAAC;IACd,iBAAiB,EAAE,QAAQ,CAAC;IAC5B,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,qBAAqB,EAAE,KAAK,IAAI,CAAC;IACjI,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1C,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,KAAK,EAAE,CAAC;CAC7B;AAED,KAAK,mBAAmB,CAAC,CAAC,IAAI;KACzB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,aAAa,CAAC,YAAY,GAAG,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;CAC3F,CAAC;AAEF,MAAM,WAAW,iBAAkB,SAAQ,mBAAmB,CAAC,kBAAkB,CAAC;IAE9E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,mBAAmB,EAAE,EAAE,CAAC;IAEvE,KAAK,EAAE,cAAc,CAAC;IACV,UAAU,EAAE,OAAO,CAAS;IACxC,OAAO,CAAC,WAAW,CAAkB;IACzB,OAAO,CAAC,MAAM,CAAoB;gBAClC,KAAK,KAAA;IAKjB,iBAAiB;IAUjB,oBAAoB;IAMpB,gCAAgC,CAAC,SAAS,EAAE,mBAAmB;IAK/D,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,UAAQ;IAgB5C,OAAO,CAAC,WAAW;IAwBZ,MAAM;IAqLb,SAAS,UAAW,KAAK,UAuFvB;IACF,aAAa,2BAA4B,MAAM,UAK7C;IACF,eAAe,mBASb;IACF,UAAU,eASR;IACF,aAAa,aAIX;IAEF,cAAc,UAAW,MAAM,UAAU,KAAK,OAAO,MAAM,SAAS,MAAM,UAwBxE;CACL"} \ No newline at end of file diff --git a/types/UI/Components/BBS/BoardLIst.d.ts b/types/UI/Components/BBS/BoardLIst.d.ts index 88ad27d..89e7ae8 100644 --- a/types/UI/Components/BBS/BoardLIst.d.ts +++ b/types/UI/Components/BBS/BoardLIst.d.ts @@ -6,6 +6,7 @@ import { ProcessingGroupRecord } from '../../../DatabaseServices/ProcessingGroup import { SortBtnData } from './BBSCommon'; import { IBoardInfoOptions } from './BoardInfosList'; import { BBSBoardData } from './LookOverBoardInfos'; +import { SelectBBSDataTool } from './SelectBBSDataList'; interface IBoardListProps { height: number; width: number; @@ -16,15 +17,21 @@ interface IBoardListProps { isCtrlDown: boolean; processGroupMap: Map; modifyBoardData: Map; - UpdateSeletctedBr: (index: number, findSameTypeBrDataKey?: string) => void; + UpdateSeletctedBr: (index: number, findSameTypeBrDataKey?: string, isSelect?: boolean, selectedCount?: number) => void; ModifyBoard: (br: Board, opts: IBoardInfoOptions) => void; TitleResize: (e: React.PointerEvent, title: string) => void; } export declare class BoardList extends React.Component { sortBtnData: SortBtnData[]; private oldLeft; + private selectContainer; + selectTool: SelectBBSDataTool; + selected: number; + private SetSelectTool; + componentWillUnmount(): void; render(): JSX.Element; SortFunc: (a: number | string, b: number | string, asc: boolean) => number; + SortFuncBoolean: (a: boolean, b: boolean, asc: boolean) => 0 | 1 | -1; HandleSort: (btnText: string) => void; ModifyDataMap: (index: number, brData: Board, modifyKey: string, value: string | LinesType | ProcessingGroupRecord[]) => void; private handleScroll; diff --git a/types/UI/Components/BBS/BoardLIst.d.ts.map b/types/UI/Components/BBS/BoardLIst.d.ts.map index 7539a19..41e1a2e 100644 --- a/types/UI/Components/BBS/BoardLIst.d.ts.map +++ b/types/UI/Components/BBS/BoardLIst.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardLIst.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/BBS/BoardLIst.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iEAAiE,CAAC;AAExG,OAAO,EAAE,WAAW,EAAe,MAAM,aAAa,CAAC;AACvD,OAAO,EAAiB,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,UAAU,eAAe;IAErB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,YAAY,CAAC;IACxB,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAC1B,iBAAiB,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;IAClD,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzC,eAAe,EAAE,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAC/C,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,WAAW,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC1D,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/E;AAED,qBACa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC;IAG/C,WAAW,EAAE,WAAW,EAAE,CAUpC;IACF,OAAO,CAAC,OAAO,CAAS;IACxB,MAAM;IAyDN,QAAQ,MAAO,MAAM,GAAG,MAAM,KAAK,MAAM,GAAG,MAAM,OAAO,OAAO,YAM9D;IAEF,UAAU,YAAa,MAAM,UAoD3B;IAEF,aAAa,UAAW,MAAM,UAAU,KAAK,aAAa,MAAM,SAAS,MAAM,GAAG,SAAS,GAAG,qBAAqB,EAAE,UA4BnH;IACF,OAAO,CAAC,YAAY,CAelB;CACL"} \ No newline at end of file +{"version":3,"file":"BoardLIst.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/BBS/BoardLIst.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iEAAiE,CAAC;AAExG,OAAO,EAAE,WAAW,EAAe,MAAM,aAAa,CAAC;AACvD,OAAO,EAAiB,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,UAAU,eAAe;IAErB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,YAAY,CAAC;IACxB,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAC1B,iBAAiB,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC;IAClD,UAAU,EAAE,OAAO,CAAC;IACpB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzC,eAAe,EAAE,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;IAC/C,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvH,WAAW,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAC1D,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/E;AAED,qBACa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC;IAG/C,WAAW,EAAE,WAAW,EAAE,CAiBpC;IACF,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAqC;IAC5D,UAAU,EAAE,iBAAiB,CAAC;IAClB,QAAQ,SAAK;IACzB,OAAO,CAAC,aAAa,CAkBnB;IAEF,oBAAoB,IAAI,IAAI;IAK5B,MAAM;IA6DN,QAAQ,MAAO,MAAM,GAAG,MAAM,KAAK,MAAM,GAAG,MAAM,OAAO,OAAO,YAM9D;IACF,eAAe,MAAO,OAAO,KAAK,OAAO,OAAO,OAAO,gBAYrD;IAEF,UAAU,YAAa,MAAM,UAyE3B;IAEF,aAAa,UAAW,MAAM,UAAU,KAAK,aAAa,MAAM,SAAS,MAAM,GAAG,SAAS,GAAG,qBAAqB,EAAE,UA4BnH;IACF,OAAO,CAAC,YAAY,CAelB;CACL"} \ No newline at end of file diff --git a/types/UI/Components/BBS/LookOverBoardInfos.d.ts b/types/UI/Components/BBS/LookOverBoardInfos.d.ts index 1fa9528..1ec0b2b 100644 --- a/types/UI/Components/BBS/LookOverBoardInfos.d.ts +++ b/types/UI/Components/BBS/LookOverBoardInfos.d.ts @@ -60,7 +60,7 @@ export declare class LookOverBoardInfosModal extends React.Component void; private ClearSelect; CheckOutSameTypeBr: (boardList: Board[]) => void; - UpdateSeletctedBr: ((index: number, findSameTypeBrDataKey?: string) => void) & import("mobx").IAction; + UpdateSeletctedBr: ((index: number, findSameTypeBrDataKey?: string, isSelect?: boolean, selectedCount?: number) => void) & import("mobx").IAction; private CheckOutChosenBr; private FilterBr; ModifyBoard: (br: Board, opts: IBoardInfoOptions) => void; diff --git a/types/UI/Components/BBS/LookOverBoardInfos.d.ts.map b/types/UI/Components/BBS/LookOverBoardInfos.d.ts.map index c4789fa..1278978 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":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,UAAU,EAA0B,MAAM,2DAA2D,CAAC;AAa/G,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAK/D,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAS9D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAQ3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAQrD,MAAM,WAAW,YAAY;IAEzB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,KAAK,EAAE,CAAC;CACnB;AACD,UAAU,4BAA4B;IAElC,SAAS,EAAE,CAAC,KAAK,GAAG,aAAa,CAAC,EAAE,CAAC;CACxC;AAGD,cAAM,mBAAmB;IAGrB,qBAAqB;CAIxB;AACD,UAAU,4BAA4B;IAElC,QAAQ,EAAE,MAAM,CAAC;CACpB;AACD,eAAO,MAAM,0BAA0B,qBAA0B,CAAC;AAMlE;;GAEG;AACH,qBACa,uBAAwB,SAAQ,KAAK,CAAC,SAAS,CAAC,4BAA4B,EAAE,4BAA4B,CAAC;IAEpH,QAAQ,EAAE,MAAM,CAAa;IAE7B,QAAQ,EAAE,YAAY,CAA8B;IAExC,UAAU,EAAE,UAAU,EAAE,CAAM;IAC9B,aAAa,EAAE,UAAU,EAAE,CAAM;IACjC,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAM;IACpC,SAAS,EAAE,UAAU,EAAE,CAAM;IAE7B,SAAS,EAAE,YAAY,CAAiB;IAExC,YAAY,SAAM;IAE9B,OAAO,CAAC,gBAAgB,CAA0B;IAElD,OAAO,CAAC,WAAW,CAAkB;IAErC,eAAe,EAAE,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAa;IAE/C,gBAAgB,EAAE,KAAK,EAAE,CAAM;IAE/B,qBAAqB,EAAE,MAAM,CAAC;IAE9B,UAAU,EAAE,OAAO,CAAS;IAExC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAa;IAErD,SAAS,kCAAqC;gBAElC,CAAC,KAAA;IAOb,yBAAyB;IAMzB,iBAAiB,gBAAiB,KAAK,EAAE,UAMvC;IAEF,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,aAAa,CAAC,EAAE;IAShD,IAAI,SAAS,IAAI,KAAK,EAAE,CAGvB;IACD,sBAAsB;IA+DtB,SAAS,aAIP;IAGF,iBAAiB;IAsFjB,oBAAoB;IAOd,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC;KAAE;IAkCrD,2BAA2B,aA4IzB;IAEF,sBAAsB,OAAQ,KAAK,cAkCjC;IAKF,UAAU,aAsBR;IAEF,SAAS,MAAO,MAAM,aAAa,MAAM,EAAE,aAUzC;IAEF,cAAc,QAAS,MAAM,cAY3B;IAKF,eAAe,aAKb;IACF,YAAY,aAGV;IAGF,OAAO,CAAC,WAAW,CAKjB;IAEF,kBAAkB,cAAe,KAAK,EAAE,UAUtC;IAEF,iBAAiB,WAAkB,MAAM,0BAA0B,MAAM,oCA2BtE;IAEH,OAAO,CAAC,gBAAgB,CAUtB;IAEF,OAAO,CAAC,QAAQ,CAwFd;IACF,WAAW,OAAQ,KAAK,QAAQ,iBAAiB,UAwE/C;IAEF,WAAW,MAAO,kBAAkB,CAAC,cAAc,CAAC,SAAS,MAAM,UAyCjE;IAGF,MAAM;IAWN,QAAQ,eAMN;IAEF,eAAe,aAoDb;IAKF,MAAM;CAiJT"} \ No newline at end of file +{"version":3,"file":"LookOverBoardInfos.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/BBS/LookOverBoardInfos.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,UAAU,EAA0B,MAAM,2DAA2D,CAAC;AAc/G,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAK/D,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAU9D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAQ3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAQrD,MAAM,WAAW,YAAY;IAEzB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,MAAM,EAAE,KAAK,EAAE,CAAC;CACnB;AACD,UAAU,4BAA4B;IAElC,SAAS,EAAE,CAAC,KAAK,GAAG,aAAa,CAAC,EAAE,CAAC;CACxC;AAGD,cAAM,mBAAmB;IAGrB,qBAAqB;CAIxB;AACD,UAAU,4BAA4B;IAElC,QAAQ,EAAE,MAAM,CAAC;CACpB;AACD,eAAO,MAAM,0BAA0B,qBAA0B,CAAC;AAMlE;;GAEG;AACH,qBACa,uBAAwB,SAAQ,KAAK,CAAC,SAAS,CAAC,4BAA4B,EAAE,4BAA4B,CAAC;IAEpH,QAAQ,EAAE,MAAM,CAAa;IAE7B,QAAQ,EAAE,YAAY,CAA8B;IAExC,UAAU,EAAE,UAAU,EAAE,CAAM;IAC9B,aAAa,EAAE,UAAU,EAAE,CAAM;IACjC,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAM;IACpC,SAAS,EAAE,UAAU,EAAE,CAAM;IAE7B,SAAS,EAAE,YAAY,CAAiB;IAExC,YAAY,SAAM;IAE9B,OAAO,CAAC,gBAAgB,CAA0B;IAElD,OAAO,CAAC,WAAW,CAAkB;IAErC,eAAe,EAAE,GAAG,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAa;IAE/C,gBAAgB,EAAE,KAAK,EAAE,CAAM;IAE/B,qBAAqB,EAAE,MAAM,CAAC;IAE9B,UAAU,EAAE,OAAO,CAAS;IAExC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAa;IAErD,SAAS,kCAAqC;gBAElC,CAAC,KAAA;IAOb,yBAAyB;IAMzB,iBAAiB,gBAAiB,KAAK,EAAE,UAMvC;IAEF,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,aAAa,CAAC,EAAE;IAShD,IAAI,SAAS,IAAI,KAAK,EAAE,CAGvB;IACD,sBAAsB;IA+DtB,SAAS,aAIP;IAGF,iBAAiB;IAmGjB,oBAAoB;IAOd,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC;KAAE;IAoDrD,2BAA2B,aA0KzB;IAEF,sBAAsB,OAAQ,KAAK,cAqCjC;IAKF,UAAU,aAsBR;IAEF,SAAS,MAAO,MAAM,aAAa,MAAM,EAAE,aAUzC;IAEF,cAAc,QAAS,MAAM,cAY3B;IAKF,eAAe,aAKb;IACF,YAAY,aAGV;IAGF,OAAO,CAAC,WAAW,CAKjB;IAEF,kBAAkB,cAAe,KAAK,EAAE,UAUtC;IAEF,iBAAiB,WAAkB,MAAM,0BAA0B,MAAM,aAAa,OAAO,kBAAkB,MAAM,oCAwDlH;IAEH,OAAO,CAAC,gBAAgB,CAUtB;IAEF,OAAO,CAAC,QAAQ,CAwFd;IACF,WAAW,OAAQ,KAAK,QAAQ,iBAAiB,UA2E/C;IAEF,WAAW,MAAO,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,SAAS,MAAM,UAyCjE;IAGF,MAAM;IAWN,QAAQ,eAMN;IAEF,eAAe,aAyDb;IAKF,MAAM;CA0JT"} \ No newline at end of file diff --git a/types/UI/Components/BBS/SelectBBSDataList.d.ts b/types/UI/Components/BBS/SelectBBSDataList.d.ts new file mode 100644 index 0000000..50a8c0d --- /dev/null +++ b/types/UI/Components/BBS/SelectBBSDataList.d.ts @@ -0,0 +1,24 @@ +export declare class SelectBBSDataTool { + private container; + private mouseOn; + private startX; + private startY; + private selectEl; + private isTouch; + SelectCallBack: (sequence: number[]) => void; + StartCallBack: (e?: MouseEvent) => void; + offsetTop: number; + offsetLeft: number; + pointId: number; + bbsIndexs: any[]; + constructor(container: HTMLElement); + private getOffsetTop; + private getOffsetLeft; + private getPointId; + private Start; + private Move; + private Stop; + private SelectEvent; + Destory(): void; +} +//# sourceMappingURL=SelectBBSDataList.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/BBS/SelectBBSDataList.d.ts.map b/types/UI/Components/BBS/SelectBBSDataList.d.ts.map new file mode 100644 index 0000000..6a1d07b --- /dev/null +++ b/types/UI/Components/BBS/SelectBBSDataList.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"SelectBBSDataList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/BBS/SelectBBSDataList.ts"],"names":[],"mappings":"AAIA,qBAAa,iBAAiB;IAcd,OAAO,CAAC,SAAS;IAZ7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,OAAO,CAAU;IACzB,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC7C,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAEhB,SAAS,QAAM;gBACK,SAAS,EAAE,WAAW;IAQ1C,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,UAAU,CAQhB;IACF,OAAO,CAAC,KAAK,CAsCX;IACF,OAAO,CAAC,IAAI,CA+BV;IACF,OAAO,CAAC,IAAI,CAoBV;IAEF,OAAO,CAAC,WAAW;IAMnB,OAAO;CAaV"} \ No newline at end of file diff --git a/types/UI/Components/Board/ArcBoardOption.d.ts b/types/UI/Components/Board/ArcBoardOption.d.ts new file mode 100644 index 0000000..1f50299 --- /dev/null +++ b/types/UI/Components/Board/ArcBoardOption.d.ts @@ -0,0 +1,17 @@ +import { IObservableValue } from "mobx"; +import { ArcBoardOptions } from "../../../Add-on/ArcBoard/ArcBoardFeeding"; +import { FaceDirection } from "../../../Add-on/DrawDrilling/DrillType"; +import { ArcBoardFeedProcess } from "../../../DatabaseServices/Entity/ArcBoardType"; +interface ICurveBoardOptionProps { + showCurveBoardOpt: IObservableValue; + arcBoardOptions: Map; + arcBoardConfig: { + sweepVisibleFace: FaceDirection; + sweepAngle: number; + isDrawArcGroove: boolean; + arcBoardFeedProcess: ArcBoardFeedProcess; + }; +} +export declare const ArcBoardOption: ({ showCurveBoardOpt, arcBoardOptions, arcBoardConfig }: ICurveBoardOptionProps) => JSX.Element; +export {}; +//# sourceMappingURL=ArcBoardOption.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Board/ArcBoardOption.d.ts.map b/types/UI/Components/Board/ArcBoardOption.d.ts.map new file mode 100644 index 0000000..5f4d6a9 --- /dev/null +++ b/types/UI/Components/Board/ArcBoardOption.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ArcBoardOption.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/ArcBoardOption.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAc,MAAM,MAAM,CAAC;AAGpD,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAIvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AAIpF,UAAU,sBAAsB;IAE5B,iBAAiB,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC7C,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC9C,cAAc,EAAE;QAAE,gBAAgB,EAAE,aAAa,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,OAAO,CAAC;QAAC,mBAAmB,EAAE,mBAAmB,CAAC;KAAE,CAAC;CAChJ;AAID,eAAO,MAAM,cAAc,2DAAsE,sBAAsB,gBAyKpH,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/Board/BehindBoardModal.d.ts.map b/types/UI/Components/Board/BehindBoardModal.d.ts.map index 9b60183..d305ccb 100644 --- a/types/UI/Components/Board/BehindBoardModal.d.ts.map +++ b/types/UI/Components/Board/BehindBoardModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BehindBoardModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BehindBoardModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI1D,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAAE,EAAE,EAAE,CAAC;IAEpF,OAAO,CAAC,gBAAgB,CAGtB;IACU,OAAO,CAAC,OAAO,CAAQ;IACnC,yBAAyB;IAUzB,MAAM;IAsIN,OAAO,CAAC,YAAY,CAelB;CACL"} \ No newline at end of file +{"version":3,"file":"BehindBoardModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BehindBoardModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI1D,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAAE,EAAE,EAAE,CAAC;IAEpF,OAAO,CAAC,gBAAgB,CAGtB;IACU,OAAO,CAAC,OAAO,CAAQ;IACnC,yBAAyB;IAUzB,MAAM;IAuIN,OAAO,CAAC,YAAY,CAelB;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/BoardCommon.d.ts b/types/UI/Components/Board/BoardCommon.d.ts index 6484b6f..5a8cf05 100644 --- a/types/UI/Components/Board/BoardCommon.d.ts +++ b/types/UI/Components/Board/BoardCommon.d.ts @@ -1,3 +1,4 @@ +import { IObservableValue } from 'mobx'; import * as React from 'react'; import { CheckObjectType } from '../../../Common/CheckoutVaildValue'; import { Board } from '../../../DatabaseServices/Entity/Board'; @@ -12,6 +13,7 @@ export interface ISetItemOption { /**不传将默认属性允许为字符串类型 */ uiOption?: IUiOption; isDisabled?: boolean; + isReadOnly?: boolean; placeHolder?: string; onChange?: (e: any, ...arg: any[]) => void; inline?: boolean; @@ -25,6 +27,7 @@ export interface ISetItemOption { isUpper?: boolean; tip?: string; titleStyle?: React.CSSProperties; + inputTitle?: boolean; } interface ISetBlockOption { type: CheckObjectType; @@ -35,7 +38,9 @@ interface ISetBlockOption { isInline?: boolean; onChange?: (e: any, ...arg: any[]) => void; disabled?: boolean; + readonly?: boolean; children?: React.ReactNode; + inputTitle?: boolean; } interface TBProps { par: string[][]; @@ -56,8 +61,10 @@ type ISpaceProps = { calcSpaceSize: string; spaceSize?: number; count?: number; + exprCount?: string; thickness?: number; boardRelative?: BrRelativePos; + exprThickness?: string; }; interface BroadPosProps { uiOption: IUiOption; @@ -76,6 +83,7 @@ export declare class BoardRePosBlock extends React.Component { } export declare class Notes extends React.Component<{ remarks: [string, string][]; + style?: React.CSSProperties; }> { render(): JSX.Element; } @@ -106,6 +114,9 @@ interface I5InputComponent extends ISetItemOption { otherBoardData?: { [key: string]: any; }; + verticalRemark?: boolean; + layerRemark?: boolean; + showHighEdgeProcessing?: IObservableValue; } /** * 一圈输入框 封边+排钻?+备注? @@ -139,6 +150,23 @@ interface IAutoCutCheckboxProps { isFlex?: boolean; onChangeCallback?: () => void; } +interface IRoomAndBoardMaterialInfo extends IBoardMaterialInfo { + data: IBoardMaterialData & { + roomName: string; + cabinetName: string; + }; + vertical?: boolean; +} +export declare const RoomAndBoardMaterialInfo: (props: IRoomAndBoardMaterialInfo) => JSX.Element; +interface IBoardMaterialData extends IBaseOption { + boardMatName: string; + material: string; + color: string; +} +interface IBoardMaterialInfo { + data: IBoardMaterialData; +} +export declare const BoardMaterialInfo: (props: IBoardMaterialInfo) => JSX.Element; export declare class AutoCutCheckbox extends React.Component { static defaultProps: { isFlex: boolean; @@ -149,14 +177,11 @@ export declare class AutoCutCheckbox extends React.Component JSX.Element; export declare function ShowToasterOpenDirAndNameCheck(opt: { name: string; openDir?: BoardOpenDir; }, text: string, callback: () => void): void; -export declare const openDirOptions: { - label: string; - value: BoardOpenDir; -}[]; export {}; //# sourceMappingURL=BoardCommon.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Board/BoardCommon.d.ts.map b/types/UI/Components/Board/BoardCommon.d.ts.map index f04e4f9..047bfbb 100644 --- a/types/UI/Components/Board/BoardCommon.d.ts.map +++ b/types/UI/Components/Board/BoardCommon.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardCommon.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardCommon.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"BoardCommon.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardCommon.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Components/Board/BoardConfigModal.d.ts b/types/UI/Components/Board/BoardConfigModal.d.ts index 8e23427..923efd3 100644 --- a/types/UI/Components/Board/BoardConfigModal.d.ts +++ b/types/UI/Components/Board/BoardConfigModal.d.ts @@ -1,5 +1,8 @@ import { IObservableValue } from "mobx"; import * as React from 'react'; +import { ArcBoardOptions } from "../../../Add-on/ArcBoard/ArcBoardFeeding"; +import { FaceDirection } from "../../../Add-on/DrawDrilling/DrillType"; +import { ArcBoardFeedProcess } from "../../../DatabaseServices/Entity/ArcBoardType"; import { Board } from "../../../DatabaseServices/Entity/Board"; import { ExtrudeContour } from "../../../DatabaseServices/Entity/Extrude"; import { BoardProcessOption } from "../../Store/OptionInterface/BoardProcessOption"; @@ -10,15 +13,26 @@ interface BoardConfigProps { br: Board; canDrawSpeical: IObservableValue; canModeling: IObservableValue; + canSideModeling: IObservableValue; + canCurve: IObservableValue; grooveOption: IGrooveOption; uiBoardConfig: IUiOption; isRightToolbar?: boolean; + arcBoardOptions: Map; + arcBoardConfig: { + sweepVisibleFace: FaceDirection; + sweepAngle: number; + isDrawArcGroove: boolean; + arcBoardFeedProcess: ArcBoardFeedProcess; + }; } export declare class BoardConfigModal extends React.Component { private pars; private groovePars; private processPars; private rotatePars; + isCurveBoard: boolean; + showCurveBoardOpt: IObservableValue; constructor(props: any); componentWillUnmount(): void; render(): JSX.Element; @@ -31,11 +45,14 @@ export declare class BoardConfigModal extends React.Component Promise; ChangeModeling2: (brCurve: ExtrudeContour) => Promise; PickUpModelingOutline3: () => Promise; + PickUpCurveOutline: () => Promise; + ApplyCurveToArcBoard: () => Promise; private ChangeModeling; private getToplinesDetailPolyline; private AddModeling; private AddModeling2; private ChangeModeling3; + private EditorSideModeling; } export {}; //# sourceMappingURL=BoardConfigModal.d.ts.map \ 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 c669a40..658f2ba 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;AAiB/B,OAAO,EAAE,KAAK,EAAuC,MAAM,wCAAwC,CAAC;AAGpG,OAAO,EAAE,cAAc,EAAgB,MAAM,0CAA0C,CAAC;AAYxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAY3G,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;IAuHN;;OAEG;IACH,OAAO,CAAC,YAAY,CAoBlB;IAGF,OAAO,CAAC,qBAAqB,CAiG3B;IAEF,qBAAqB,YAAa,cAAc,iBAW9C;IAGF,sBAAsB,sBA2FpB;IAGF,eAAe,YAAmB,cAAc,mBAyK9C;IAEF,sBAAsB,sBA0FpB;IAGF,OAAO,CAAC,cAAc,CA8FpB;IAGF,OAAO,CAAC,yBAAyB,CAU/B;IAEF,OAAO,CAAC,WAAW,CAiDjB;IAGF,OAAO,CAAC,YAAY,CAgDlB;IAGF,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,EAAc,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAG3E,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAiBvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,KAAK,EAAuC,MAAM,wCAAwC,CAAC;AAIpG,OAAO,EAAE,cAAc,EAAgB,MAAM,0CAA0C,CAAC;AAcxF,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAc3G,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,eAAe,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC3C,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACpC,YAAY,EAAE,aAAa,CAAC;IAC5B,aAAa,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC5C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC9C,cAAc,EAAE;QAAE,gBAAgB,EAAE,aAAa,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,OAAO,CAAC;QAAC,mBAAmB,EAAE,mBAAmB,CAAC;KAAE,CAAC;CAChJ;AAID,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,CAAC;IAEvE,OAAO,CAAC,IAAI,CACV;IACF,OAAO,CAAC,UAAU,CAEhB;IACF,OAAO,CAAC,WAAW,CAEjB;IACF,OAAO,CAAC,UAAU,CAEhB;IACF,YAAY,UAAS;IAErB,iBAAiB,4BAAyB;gBAC9B,KAAK,KAAA;IAKjB,oBAAoB;IAIpB,MAAM;IA0MN;;OAEG;IACH,OAAO,CAAC,YAAY,CAoBlB;IAGF,OAAO,CAAC,qBAAqB,CAiG3B;IAEF,qBAAqB,YAAa,cAAc,iBAW9C;IAGF,sBAAsB,sBA8FpB;IAGF,eAAe,YAAmB,cAAc,mBA2K9C;IAEF,sBAAsB,sBA0FpB;IAGF,kBAAkB,sBAkChB;IAGF,oBAAoB,sBAsElB;IAGF,OAAO,CAAC,cAAc,CA8FpB;IAGF,OAAO,CAAC,yBAAyB,CAU/B;IAEF,OAAO,CAAC,WAAW,CAiDjB;IAGF,OAAO,CAAC,YAAY,CAkDlB;IAGF,OAAO,CAAC,eAAe,CAsErB;IAGF,OAAO,CAAC,kBAAkB,CA0CxB;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/BoardFindCommon.d.ts b/types/UI/Components/Board/BoardFindCommon.d.ts index 99bc398..07475fc 100644 --- a/types/UI/Components/Board/BoardFindCommon.d.ts +++ b/types/UI/Components/Board/BoardFindCommon.d.ts @@ -46,6 +46,7 @@ interface ISealDrillProps { store: UpdateBoardInfosStore | BoardFindStore; onChange?: () => void; selectOptions: string[]; + isUpdateBoardInfos?: boolean; } export declare class SealDrillCom extends React.Component { render(): JSX.Element; diff --git a/types/UI/Components/Board/BoardFindCommon.d.ts.map b/types/UI/Components/Board/BoardFindCommon.d.ts.map index 7c6d6fd..2a81342 100644 --- a/types/UI/Components/Board/BoardFindCommon.d.ts.map +++ b/types/UI/Components/Board/BoardFindCommon.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardFindCommon.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardFindCommon.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAA6C,gBAAgB,EAAa,MAAM,gCAAgC,CAAC;AACxH,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAGrE,MAAM,WAAW,WAAW;IAExB,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,QAAG;IACf,OAAO,CAAC,CAAC,GAAG,IAAI,OAAA,OAAE;CACrB;AAED,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;IACxD,MAAM;CAqDhB;AAED,MAAM,WAAW,eAAe;IAE5B,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,GAAG,EAAE,CAAC;IACpB,WAAW,CAAC,QAAG;CAClB;AACD,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,CAAC;IAClE,MAAM;CAuChB;AAGD,UAAU,iBAAiB;IAEvB,MAAM,EAAE,gBAAgB,GAAG,uBAAuB,CAAC;IACnD,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACvB;AAED,qBACa,WAAY,SAAQ,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC;IAE/D,SAAS,2CAAyB;IAClC,MAAM;IA0FN,OAAO,CAAC,iBAAiB,CAOvB;CACL;AAED,UAAU,eAAe;IAErB,KAAK,EAAE,qBAAqB,GAAG,cAAc,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;CAC3B;AAGD,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC;IAE9D,MAAM;IA4KN,OAAO,CAAC,0BAA0B,CAWhC;IACF,OAAO,CAAC,YAAY,CAMlB;CACL"} \ No newline at end of file +{"version":3,"file":"BoardFindCommon.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardFindCommon.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAA6C,gBAAgB,EAAa,MAAM,gCAAgC,CAAC;AACxH,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAGzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAIrE,MAAM,WAAW,WAAW;IAExB,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,QAAG;IACf,OAAO,CAAC,CAAC,GAAG,IAAI,OAAA,OAAE;CACrB;AAED,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;IAExD,MAAM;CAyDhB;AAED,MAAM,WAAW,eAAe;IAE5B,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,GAAG,EAAE,CAAC;IACpB,WAAW,CAAC,QAAG;CAClB;AACD,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,CAAC;IAElE,MAAM;CAuChB;AAGD,UAAU,iBAAiB;IAEvB,MAAM,EAAE,gBAAgB,GAAG,uBAAuB,CAAC;IACnD,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;CACvB;AAED,qBACa,WAAY,SAAQ,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC;IAE/D,SAAS,2CAAyB;IAClC,MAAM;IAsJN,OAAO,CAAC,iBAAiB,CAOvB;CACL;AAED,UAAU,eAAe;IAErB,KAAK,EAAE,qBAAqB,GAAG,cAAc,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAChC;AAGD,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC;IAE9D,MAAM;IA6LN,OAAO,CAAC,0BAA0B,CAWhC;IACF,OAAO,CAAC,YAAY,CAMlB;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/BoardFindInterface.d.ts b/types/UI/Components/Board/BoardFindInterface.d.ts new file mode 100644 index 0000000..3083f3e --- /dev/null +++ b/types/UI/Components/Board/BoardFindInterface.d.ts @@ -0,0 +1,5 @@ +export declare enum FindModifyStyle { + FuzzyQuery = 0,//模糊匹配 + PreciseQuery = 1 +} +//# sourceMappingURL=BoardFindInterface.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Board/BoardFindInterface.d.ts.map b/types/UI/Components/Board/BoardFindInterface.d.ts.map new file mode 100644 index 0000000..47c3326 --- /dev/null +++ b/types/UI/Components/Board/BoardFindInterface.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"BoardFindInterface.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardFindInterface.ts"],"names":[],"mappings":"AAAA,oBAAY,eAAe;IAEvB,UAAU,IAAI,CAAC,MAAM;IACrB,YAAY,IAAI;CACnB"} \ 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 3336f82..ab67e46 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;AAU/B,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAUlE,UAAU,eAAe;IAErB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;CAC5B;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;IACU,iBAAiB,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAEhD;IACF,OAAO,CAAC,SAAS,CAAyB;gBAC9B,KAAK,KAAA;IASjB,iBAAiB;IAYjB,oBAAoB;IAQpB,OAAO,CAAC,eAAe,CASrB;IACF,OAAO,CAAC,mBAAmB,CAUzB;IACF,OAAO,CAAC,0BAA0B,CAchC;IACF,OAAO,CAAC,iBAAiB,CAGvB;YACY,cAAc;YAQd,iBAAiB;IAQ/B,OAAO,CAAC,iBAAiB,CAavB;IACF,OAAO,CAAC,qBAAqB,CAY3B;IACF,OAAO,CAAC,iBAAiB,CAOvB;IACF,MAAM;CAmkBT"} \ 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;AAW/B,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAWlE,UAAU,eAAe;IAErB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAGD,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC;CAAE,EAAE,eAAe,CAAC;IAE3G,OAAO,CAAC,KAAK,CAAW;IACZ,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAG1C;IACU,iBAAiB,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAEhD;IACF,OAAO,CAAC,SAAS,CAAyB;gBAC9B,KAAK,KAAA;IASjB,iBAAiB;IAYjB,oBAAoB;IAQpB,OAAO,CAAC,eAAe,CASrB;IACF,OAAO,CAAC,mBAAmB,CAUzB;IACF,OAAO,CAAC,0BAA0B,CAchC;IACF,OAAO,CAAC,iBAAiB,CAGvB;YACY,cAAc;YAQd,iBAAiB;IAQ/B,OAAO,CAAC,iBAAiB,CAavB;IACF,OAAO,CAAC,qBAAqB,CAY3B;IACF,OAAO,CAAC,iBAAiB,CAOvB;IACF,MAAM;CAqqBT"} \ 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 5e5eedc..cebfe93 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;AAOrL,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAUlD,MAAM,WAAW,eAAe;IAE5B,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,UAAU,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;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;IAiFN,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;AAO/B,OAAO,EAAoB,UAAU,EAAiH,MAAM,wBAAwB,CAAC;AAOrL,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAUlD,MAAM,WAAW,eAAe;IAE5B,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,UAAU,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;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,oBAwBd;IACF,aAAa;IA0Bb,yBAAyB;IAMzB,oBAAoB;IAKpB,MAAM;IAyFN,OAAO,CAAC,OAAO,CAsBb;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/BoardModalType.d.ts b/types/UI/Components/Board/BoardModalType.d.ts index 48c6a25..9a9ad9a 100644 --- a/types/UI/Components/Board/BoardModalType.d.ts +++ b/types/UI/Components/Board/BoardModalType.d.ts @@ -9,6 +9,7 @@ export declare enum BoardModalType { Ly = "ly", Ve = "ve", Sg = "sg", + ArcBr = "arcBr", Skt = "skt", Dr = "dr", Zx = "zx",//右侧 造型 界面 @@ -52,10 +53,13 @@ export declare enum BoardModalType { BatchModifyPanel = "BatchModifyPanel",//批量修改板件 Sealing = "Sealing",//封边 BoardEdgeRemarks = "boardEdgeRemarks",//板边备注 + ReservedEdge = "ReservedEdge",//预留边 DimStyleConfig = "DimStyleConfig",//标注配置 BulkheadCeiling = "BulkheadCeiling",//吊顶轮廓 BulkheadCeilingContour = "BulkheadCeilingContour",//吊顶轮廓 HeadCeilingProfileMaterial = "HeadCeilingProfileMaterial",//吊顶截面材质 + OneClickInspection = "OneClickInspection",//一键检查 + ArcBoardGrooves = "ArcBoardGrooves",//圆弧板槽配置 AutoHoleFaceSetting = "AutoHoleFaceSetting", SelectThinBehindBoard = "SelectThinBehindBoard", SmoothEdge = "smoothEdge", @@ -63,11 +67,18 @@ export declare enum BoardModalType { UserConfig = "userConfig", CommonPanelStore = "CommonPanelStore", DoorRelatesInfoStore = "doorRelatesInfoStore", + PartsAnalysisStore = "partsAnalysisStore",//复合实体备注 TemplateManage = "TemplateManage",//模板管理界面信息 DatalistStore = "DatalistStore",//数据列表配置 ConfigListMapStore = "ConfigListMapStore",//配置列表排序映射 DrawWallStore = "DrawWallStore",//画墙时使用的配置 BoardInfoDim = "BoardInfoDim",//板件信息标注 - FastDim = "FastDim" + FastDim = "FastDim",//自由标注 + AlignLineGroupStore = "AlignLineGroupStore",//对纹组 + ResourceStoreIcon = "resourceStoreIcon",//模型库列表的显示方式 + SpaceParse = "SpaceParse",//空间解析配置 + BBSModelStore = "bbsModelStore",//bbs模态框位置大小 + FontStyleStore = "FontStyleStore",//字体样式 + HoleGrooveDimConfig = "HoleGrooveDimConfig" } //# sourceMappingURL=BoardModalType.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Board/BoardModalType.d.ts.map b/types/UI/Components/Board/BoardModalType.d.ts.map index 24335e0..e8a2f25 100644 --- a/types/UI/Components/Board/BoardModalType.d.ts.map +++ b/types/UI/Components/Board/BoardModalType.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardModalType.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardModalType.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,oBAAY,cAAc;IAEtB,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,GAAG,QAAQ;IACX,EAAE,OAAO;IACT,EAAE,OAAO,CAAC,UAAU;IACpB,EAAE,OAAO,CAAC,IAAI;IACd,EAAE,UAAU;IACZ,IAAI,WAAW;IACf,EAAE,OAAO;IACT,GAAG,YAAY;IACf,OAAO,mBAAmB;IAC1B,EAAE,WAAW;IACb,KAAK,aAAa;IAClB,UAAU,eAAe;IACzB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,eAAe,oBAAoB;IACnC,EAAE,WAAW;IACb,IAAI,SAAS;IACb,GAAG,cAAc;IACjB,GAAG,eAAe;IAClB,IAAI,SAAS;IACb,EAAE,eAAe;IACjB,WAAW,gBAAgB;IAC3B,UAAU,eAAe;IACzB,0BAA0B,0BAA0B;IACpD,6BAA6B,kCAAkC;IAC/D,iCAAiC,2BAA2B;IAC5D,WAAW,gBAAgB;IAC3B,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,eAAe,oBAAoB;IACnC,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,eAAe,mBAAmB,CAAE,0CAA0C;IAC9E,SAAS,cAAc,CAAE,OAAO;IAChC,YAAY,YAAY,CAAE,MAAM;IAChC,gBAAgB,qBAAqB,CAAE,QAAQ;IAC/C,OAAO,YAAY,CAAE,IAAI;IACzB,gBAAgB,qBAAqB,CAAE,MAAM;IAC7C,cAAc,mBAAmB,CAAC,MAAM;IACxC,eAAe,oBAAoB,CAAC,MAAM;IAC1C,sBAAsB,2BAA2B,CAAC,MAAM;IACxD,0BAA0B,+BAA+B,CAAC,QAAQ;IAGlE,mBAAmB,wBAAwB;IAC3C,qBAAqB,0BAA0B;IAC/C,UAAU,eAAe;IACzB,oBAAoB,yBAAyB;IAC7C,UAAU,eAAe;IACzB,gBAAgB,qBAAqB;IACrC,oBAAoB,yBAAyB;IAC7C,cAAc,mBAAmB,CAAC,UAAU;IAC5C,aAAa,kBAAkB,CAAE,QAAQ;IACzC,kBAAkB,uBAAuB,CAAE,UAAU;IACrD,aAAa,kBAAkB,CAAC,UAAU;IAC1C,YAAY,iBAAiB,CAAE,QAAQ;IACvC,OAAO,YAAY;CACtB"} \ No newline at end of file +{"version":3,"file":"BoardModalType.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardModalType.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,oBAAY,cAAc;IAEtB,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,EAAE,OAAO;IACT,EAAE,OAAO,CAAC,UAAU;IACpB,EAAE,OAAO,CAAC,IAAI;IACd,EAAE,UAAU;IACZ,IAAI,WAAW;IACf,EAAE,OAAO;IACT,GAAG,YAAY;IACf,OAAO,mBAAmB;IAC1B,EAAE,WAAW;IACb,KAAK,aAAa;IAClB,UAAU,eAAe;IACzB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,eAAe,oBAAoB;IACnC,EAAE,WAAW;IACb,IAAI,SAAS;IACb,GAAG,cAAc;IACjB,GAAG,eAAe;IAClB,IAAI,SAAS;IACb,EAAE,eAAe;IACjB,WAAW,gBAAgB;IAC3B,UAAU,eAAe;IACzB,0BAA0B,0BAA0B;IACpD,6BAA6B,kCAAkC;IAC/D,iCAAiC,2BAA2B;IAC5D,WAAW,gBAAgB;IAC3B,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,eAAe,oBAAoB;IACnC,UAAU,eAAe;IACzB,SAAS,cAAc;IACvB,aAAa,kBAAkB;IAC/B,eAAe,oBAAoB;IACnC,eAAe,mBAAmB,CAAE,0CAA0C;IAC9E,SAAS,cAAc,CAAE,OAAO;IAChC,YAAY,YAAY,CAAE,MAAM;IAChC,gBAAgB,qBAAqB,CAAE,QAAQ;IAC/C,OAAO,YAAY,CAAE,IAAI;IACzB,gBAAgB,qBAAqB,CAAE,MAAM;IAC7C,YAAY,iBAAiB,CAAE,KAAK;IACpC,cAAc,mBAAmB,CAAC,MAAM;IACxC,eAAe,oBAAoB,CAAC,MAAM;IAC1C,sBAAsB,2BAA2B,CAAC,MAAM;IACxD,0BAA0B,+BAA+B,CAAC,QAAQ;IAClE,kBAAkB,uBAAuB,CAAC,MAAM;IAChD,eAAe,oBAAoB,CAAC,QAAQ;IAG5C,mBAAmB,wBAAwB;IAC3C,qBAAqB,0BAA0B;IAC/C,UAAU,eAAe;IACzB,oBAAoB,yBAAyB;IAC7C,UAAU,eAAe;IACzB,gBAAgB,qBAAqB;IACrC,oBAAoB,yBAAyB;IAC7C,kBAAkB,uBAAuB,CAAE,QAAQ;IACnD,cAAc,mBAAmB,CAAC,UAAU;IAC5C,aAAa,kBAAkB,CAAE,QAAQ;IACzC,kBAAkB,uBAAuB,CAAE,UAAU;IACrD,aAAa,kBAAkB,CAAC,UAAU;IAC1C,YAAY,iBAAiB,CAAE,QAAQ;IACvC,OAAO,YAAY,CAAC,MAAM;IAC1B,mBAAmB,wBAAwB,CAAC,KAAK;IACjD,iBAAiB,sBAAsB,CAAC,YAAY;IACpD,UAAU,eAAe,CAAC,QAAQ;IAClC,aAAa,kBAAkB,CAAC,YAAY;IAC5C,cAAc,mBAAmB,CAAC,MAAM;IACxC,mBAAmB,wBAAwB;CAC9C"} \ No newline at end of file diff --git a/types/UI/Components/Board/BoardOptionModal.d.ts b/types/UI/Components/Board/BoardOptionModal.d.ts index 4c1ae0f..cd40b7f 100644 --- a/types/UI/Components/Board/BoardOptionModal.d.ts +++ b/types/UI/Components/Board/BoardOptionModal.d.ts @@ -10,6 +10,9 @@ export declare const BoardOptionModal: { _IsSpecialBoard: import("mobx").IObservableValue; canDrawSpecial: import("mobx").IObservableValue; canModeling: import("mobx").IObservableValue; + canSideModeling: import("mobx").IObservableValue; + canCurve: import("mobx").IObservableValue; + arcBoardOptions: Map; remarks: [string, string][]; otherBoardData: { isChaiDan: boolean; @@ -17,11 +20,18 @@ export declare const BoardOptionModal: { isAssociationDrillLock: boolean; } & import("mobx").IObservableObject; _UIConfigOPtion: import("../../Store/OptionInterface/IOptionInterface").IUiOption; + arcBoardConfig: { + sweepVisibleFace: import("../../../Add-on/DrawDrilling/DrillType").FaceDirection; + sweepAngle: number; + isDrawArcGroove: boolean; + arcBoardFeedProcess: import("../../../DatabaseServices/Entity/ArcBoardType").ArcBoardFeedProcess; + } & import("mobx").IObservableObject; + ProcessingGroupList: import("mobx").IObservableArray; readonly CurrentBoard: Board; render(): JSX.Element; setBrConfig: (() => void) & import("mobx").IAction; InitRectBoardDrillOption: (() => void) & import("mobx").IAction; - SetRectHighDrill: () => void; + SetRectHighDrillAndSealColor: () => void; handleComfirmOption: () => void; handleChangeCurrentBoard: (br: Board) => void; context: any; @@ -32,7 +42,7 @@ export declare const BoardOptionModal: { readonly props: Readonly<{ board: Board; }> & Readonly<{ - children?: React.ReactNode; + children?: React.ReactNode | undefined; }>; state: Readonly<{}>; refs: { @@ -66,6 +76,6 @@ export declare const BoardOptionModal: { }>, nextState: Readonly<{}>, nextContext: any): void; }; displayName: string; - contextType?: React.Context; + contextType?: React.Context | undefined; }; //# sourceMappingURL=BoardOptionModal.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Board/BoardOptionModal.d.ts.map b/types/UI/Components/Board/BoardOptionModal.d.ts.map index 9944cef..580446b 100644 --- a/types/UI/Components/Board/BoardOptionModal.d.ts.map +++ b/types/UI/Components/Board/BoardOptionModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardOptionModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardOptionModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AA4I/D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAsC,CAAC"} \ No newline at end of file +{"version":3,"file":"BoardOptionModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardOptionModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAkJ/D,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAsC,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/Board/BoardProcessModal.d.ts b/types/UI/Components/Board/BoardProcessModal.d.ts index 06f90e3..8955e11 100644 --- a/types/UI/Components/Board/BoardProcessModal.d.ts +++ b/types/UI/Components/Board/BoardProcessModal.d.ts @@ -1,8 +1,8 @@ -import { IObservableValue } from 'mobx'; +import { IObservableArray, IObservableValue } from 'mobx'; import * as React from 'react'; import { Board } from '../../../DatabaseServices/Entity/Board'; import { BoardProcessOption } from "../../Store/OptionInterface/BoardProcessOption"; -import { IHightDrillOption, IUiOption } from "../../Store/OptionInterface/IOptionInterface"; +import { IHightDrillOption, IUiOption, TBBoardOption } from "../../Store/OptionInterface/IOptionInterface"; import "../Modal/ModalStyle/BoardProcessModal.less"; import { BoardModalType } from './BoardModalType'; interface BoardProcessProps { @@ -12,10 +12,13 @@ interface BoardProcessProps { isSpecial?: IObservableValue; br?: Board; drillOption?: IHightDrillOption; + topBottomOption?: TBBoardOption; otherBoardData?: { [key: string]: any; }; isEdgeRemarks?: boolean; + ProcessingGroupList?: IObservableArray; + inModal?: boolean; } export declare class BoardProcessModal extends React.Component { private showShops; @@ -23,19 +26,24 @@ export declare class BoardProcessModal extends React.Component; private editorEdgeSealing; private editorEdgeRemarks; - private renderEl; + private editorReservedEdge; + private renderRoomCabinetName; private getOption; private selectGoods; private onProcessInputDbClick; private onAlertConfirm; private IsWineRackORLattice; + getTags(): string[]; private updateTags; private isSplit; private getOptions; + private getBoardValue; UNSAFE_componentWillMount(): Promise; componentDidMount(): void; + componentDidUpdate(prevProps: Readonly, prevState: Readonly<{}>, snapshot?: any): void; render(): JSX.Element; } export {}; diff --git a/types/UI/Components/Board/BoardProcessModal.d.ts.map b/types/UI/Components/Board/BoardProcessModal.d.ts.map index 1f742fa..c9df20a 100644 --- a/types/UI/Components/Board/BoardProcessModal.d.ts.map +++ b/types/UI/Components/Board/BoardProcessModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardProcessModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardProcessModal.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAc,MAAM,MAAM,CAAC;AAEpD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAS/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAE5F,OAAO,4CAA4C,CAAC;AAIpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,UAAU,iBAAiB;IAEvB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,GAAG,EAAE,kBAAkB,CAAC;IACxB,KAAK,CAAC,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACtC,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,cAAc,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KAAE,CAAC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AACD,qBACa,iBAAkB,SAAQ,KAAK,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,CAAC;IACzE,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,SAAS,CAAyB;IAC9B,OAAO,CAAC,IAAI,CAAgB;IACxC,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,OAAO,CAEb;YACY,iBAAiB;YA0BjB,iBAAiB;IAyB/B,OAAO,CAAC,QAAQ,CAkCd;IACF,OAAO,CAAC,SAAS,CAuBf;IACF,OAAO,CAAC,WAAW,CAoBjB;IACF,OAAO,CAAC,qBAAqB,CAG3B;IACF,OAAO,CAAC,cAAc,CAiBpB;IACF,OAAO,CAAC,mBAAmB,CAQzB;IACF,OAAO,CAAC,UAAU,CA0BhB;IACF,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,UAAU;IA4CZ,yBAAyB;IAI/B,iBAAiB;IAIjB,MAAM;CA6PT"} \ No newline at end of file +{"version":3,"file":"BoardProcessModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/BoardProcessModal.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAc,MAAM,MAAM,CAAC;AAEtE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAS/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAE3G,OAAO,4CAA4C,CAAC;AAIpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIlD,UAAU,iBAAiB;IAEvB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,GAAG,EAAE,kBAAkB,CAAC;IACxB,KAAK,CAAC,EAAE,SAAS,CAAC,kBAAkB,CAAC,CAAC;IACtC,SAAS,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACtC,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,eAAe,CAAC,EAAE,aAAa,CAAC;IAChC,cAAc,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KAAE,CAAC;IACzC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,mBAAmB,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AACD,qBACa,iBAAkB,SAAQ,KAAK,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,CAAC;IAEzE,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,SAAS,CAAyB;IAC9B,OAAO,CAAC,IAAI,CAAgB;IACxC,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,OAAO,CAEb;IACF,sBAAsB,4BAAyB;YACjC,iBAAiB;YA0BjB,iBAAiB;YA0BjB,kBAAkB;IA0BhC,OAAO,CAAC,qBAAqB,CAqC3B;IACF,OAAO,CAAC,SAAS,CA4Bf;IACF,OAAO,CAAC,WAAW,CAoBjB;IACF,OAAO,CAAC,qBAAqB,CAG3B;IACF,OAAO,CAAC,cAAc,CAgCpB;IACF,OAAO,CAAC,mBAAmB,CAOzB;IAEF,OAAO;IA2BP,OAAO,CAAC,UAAU,CAMhB;IACF,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,UAAU;IA4ClB,OAAO,CAAC,aAAa,CAwBnB;IAEI,yBAAyB;IAI/B,iBAAiB;IAKjB,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI;IAKzG,MAAM;CA2WT"} \ No newline at end of file diff --git a/types/UI/Components/Board/ClosingStripModal.d.ts b/types/UI/Components/Board/ClosingStripModal.d.ts index 5c629cf..9ef5f7d 100644 --- a/types/UI/Components/Board/ClosingStripModal.d.ts +++ b/types/UI/Components/Board/ClosingStripModal.d.ts @@ -1,4 +1,3 @@ -/// import { ClosingStripStore } from '../../Store/BoardStore'; export declare const ClosingStripModal: (props: { store?: ClosingStripStore; diff --git a/types/UI/Components/Board/ClosingStripModal.d.ts.map b/types/UI/Components/Board/ClosingStripModal.d.ts.map index 2835601..c0370be 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":";AAQA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAK3D,eAAO,MAAM,iBAAiB,UACR;IAAE,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAAE,gBAqH7C,CAAC"} \ No newline at end of file +{"version":3,"file":"ClosingStripModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/ClosingStripModal.tsx"],"names":[],"mappings":"AAYA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAM3D,eAAO,MAAM,iBAAiB,UACR;IAAE,KAAK,CAAC,EAAE,iBAAiB,CAAC;CAAE,gBAwL7C,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/Board/CommonBoardOption.d.ts b/types/UI/Components/Board/CommonBoardOption.d.ts index d8b9e2e..ff53650 100644 --- a/types/UI/Components/Board/CommonBoardOption.d.ts +++ b/types/UI/Components/Board/CommonBoardOption.d.ts @@ -1,6 +1,9 @@ -import { IObservableValue } from 'mobx'; +import { IObservableArray, IObservableValue } from 'mobx'; import * as React from 'react'; +import { ArcBoardOptions } from '../../../Add-on/ArcBoard/ArcBoardFeeding'; +import { FaceDirection } from '../../../Add-on/DrawDrilling/DrillType'; import { IBoardRectHoleType } from '../../../Add-on/DrawDrilling/HoleUtils'; +import { ArcBoardFeedProcess } from '../../../DatabaseServices/Entity/ArcBoardType'; import { Board } from '../../../DatabaseServices/Entity/Board'; import { BoardProcessOption } from "../../Store/OptionInterface/BoardProcessOption"; import { IGrooveOption, IUiOption, SingleBoardOption } from "../../Store/OptionInterface/IOptionInterface"; @@ -14,6 +17,8 @@ export interface ICommonOptionProps { drillsOption?: IBoardRectHoleType; canDrawSpecial?: IObservableValue; canModeling?: IObservableValue; + canSideModeling?: IObservableValue; + canCurve: IObservableValue; _IsSpecialBoard?: IObservableValue; otherBoardData: { [key: string]: any; @@ -21,6 +26,14 @@ export interface ICommonOptionProps { handleChangeCurrentBoard?: (br: Board) => void; uiConfigOption?: IUiOption; remarks?: [string, string][]; + arcBoardOptions: Map; + arcBoardConfig: { + sweepVisibleFace: FaceDirection; + sweepAngle: number; + isDrawArcGroove: boolean; + arcBoardFeedProcess: ArcBoardFeedProcess; + }; + ProcessingGroupList?: IObservableArray; } export declare function AddCommonBoardProps(Com: React.ComponentType): { new (props: any): { @@ -32,6 +45,10 @@ export declare function AddCommonBoardProps(Com: React.ComponentType; canDrawSpecial: IObservableValue; canModeling: IObservableValue; + canSideModeling: IObservableValue; + canCurve: IObservableValue; + arcBoardOptions: Map; + /** 备注条数为板中实际的条数+1,且不少于12条 */ remarks: [string, string][]; otherBoardData: { isChaiDan: boolean; @@ -39,11 +56,18 @@ export declare function AddCommonBoardProps(Com: React.ComponentType; + arcBoardConfig: { + sweepVisibleFace: FaceDirection; + sweepAngle: number; + isDrawArcGroove: boolean; + arcBoardFeedProcess: ArcBoardFeedProcess; + } & import("mobx").IObservableObject; + ProcessingGroupList: IObservableArray; readonly CurrentBoard: Board; render(): JSX.Element; setBrConfig: (() => void) & import("mobx").IAction; InitRectBoardDrillOption: (() => void) & import("mobx").IAction; - SetRectHighDrill: () => void; + SetRectHighDrillAndSealColor: () => void; handleComfirmOption: () => void; handleChangeCurrentBoard: (br: Board) => void; context: any; @@ -54,7 +78,7 @@ export declare function AddCommonBoardProps(Com: React.ComponentType & Readonly<{ - children?: React.ReactNode; + children?: React.ReactNode | undefined; }>; state: Readonly<{}>; refs: { @@ -88,6 +112,6 @@ export declare function AddCommonBoardProps(Com: React.ComponentType, nextState: Readonly<{}>, nextContext: any): void; }; displayName: string; - contextType?: React.Context; + contextType?: React.Context | undefined; }; //# sourceMappingURL=CommonBoardOption.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Board/CommonBoardOption.d.ts.map b/types/UI/Components/Board/CommonBoardOption.d.ts.map index c34a5e8..3b7a990 100644 --- a/types/UI/Components/Board/CommonBoardOption.d.ts.map +++ b/types/UI/Components/Board/CommonBoardOption.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CommonBoardOption.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/CommonBoardOption.tsx"],"names":[],"mappings":"AACA,OAAO,EAAU,gBAAgB,EAAoB,MAAM,MAAM,CAAC;AAClE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,kBAAkB,EAA6D,MAAM,wCAAwC,CAAC;AAOvI,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAM/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AAG3G,MAAM,WAAW,kBAAkB;IAE/B,aAAa,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,cAAc,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC3C,WAAW,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxC,eAAe,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5C,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KAAE,CAAC;IACxC,wBAAwB,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,KAAK,IAAI,CAAC;IAC/C,cAAc,CAAC,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;CAChC;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,CAAC,kBAAkB,CAAC;;uBAKlD,iBAAiB;wBAGhB,kBAAkB;uBAGnB,aAAa;sBAMd,kBAAkB;uBAMjB,iBAAiB,KAAK,CAAC;;;;iBAI7B,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;;;;;;yBAEV,UAAU,iBAAiB,CAAC;;;;;;;uCAyPb,KAAK;;;mBApRF,KAAK;;;;mBAAL,KAAK;;;;;;;;;;mBAAL,KAAK;;;;;mBAAL,KAAK;;;mBAAL,KAAK;;;;;mBAAL,KAAK;;;mBAAL,KAAK;;;mBAAL,KAAK;;;mBAAL,KAAK;;;;;EA2RtD"} \ No newline at end of file +{"version":3,"file":"CommonBoardOption.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/CommonBoardOption.tsx"],"names":[],"mappings":"AACA,OAAO,EAAU,gBAAgB,EAAE,gBAAgB,EAAoB,MAAM,MAAM,CAAC;AACpF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAE3E,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAA6D,MAAM,wCAAwC,CAAC;AAOvI,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAC;AACpF,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAM/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AAG3G,MAAM,WAAW,kBAAkB;IAE/B,aAAa,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IACjC,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,cAAc,CAAC,EAAE,kBAAkB,CAAC;IACpC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,cAAc,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC3C,WAAW,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxC,eAAe,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5C,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACpC,eAAe,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5C,cAAc,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KAAE,CAAC;IACxC,wBAAwB,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,KAAK,IAAI,CAAC;IAC/C,cAAc,CAAC,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC9C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC7B,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC9C,cAAc,EAAE;QAAE,gBAAgB,EAAE,aAAa,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,OAAO,CAAC;QAAC,mBAAmB,EAAE,mBAAmB,CAAC;KAAE,CAAC;IAC7I,mBAAmB,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC;CAC/C;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,CAAC,kBAAkB,CAAC;;uBAKlD,iBAAiB;wBAGhB,kBAAkB;uBAGnB,aAAa;sBAMd,kBAAkB;uBAMjB,gBAAgB,CAAC,KAAK,CAAC;;;;;;;QAO7C,6BAA6B;iBACb,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;;;;;;yBAEV,SAAS,CAAC,iBAAiB,CAAC;;;;;;;;;;;;;;uCAsTb,KAAK;;;mBArVF,KAAK;;;;mBAAL,KAAK;;;;;;;;;;mBAAL,KAAK;;;;;mBAAL,KAAK;;;mBAAL,KAAK;;;;;mBAAL,KAAK;;;mBAAL,KAAK;;;mBAAL,KAAK;;;mBAAL,KAAK;;;;;EA4VtD"} \ No newline at end of file diff --git a/types/UI/Components/Board/ConfigList.d.ts b/types/UI/Components/Board/ConfigList.d.ts index 03243f3..53792ba 100644 --- a/types/UI/Components/Board/ConfigList.d.ts +++ b/types/UI/Components/Board/ConfigList.d.ts @@ -26,7 +26,9 @@ export declare class ConfigList extends React.Component { InputSelect: () => JSX.Element; SaveAndDelete: () => JSX.Element; UserConfig: (errorMag: string) => JSX.Element; + filterConfigsNames(): any[]; ConfigListTag: (errorMsg: string) => JSX.Element; + SyncMasterConfig: () => Promise; renderCustomNumList: () => JSX.Element; renderBody: (errorMsg: string) => JSX.Element; render(): JSX.Element; diff --git a/types/UI/Components/Board/ConfigList.d.ts.map b/types/UI/Components/Board/ConfigList.d.ts.map index c01e984..31dec84 100644 --- a/types/UI/Components/Board/ConfigList.d.ts.map +++ b/types/UI/Components/Board/ConfigList.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ConfigList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/ConfigList.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAKtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AASzD,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,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;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,WAAW,2CAAyB;IACxB,OAAO,CAAC,UAAU,CAAM;IACpC,oBAAoB,2CAAyB;IAC7C,OAAO,CAAC,MAAM,CAAuC;IACrD,cAAc,EAAE,QAAQ,CAAC;IACzB,iBAAiB;IASjB,oBAAoB;IASpB,aAAa,aAAc,MAAM,iBA8B/B;IAEF,WAAW,oBAsGT;IAEF,aAAa,oBAoBX;IAEF,UAAU,aAAc,MAAM,iBAiB5B;IAEF,aAAa,aAAc,MAAM,iBA+F/B;IAEF,mBAAmB,oBA+CjB;IAEF,UAAU,aAAc,MAAM,iBAW5B;IAEF,MAAM;IAcN,OAAO,CAAC,eAAe,CAwBrB;IAEF,OAAO,CAAC,mBAAmB,CAsBzB;CACL"} \ No newline at end of file +{"version":3,"file":"ConfigList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/ConfigList.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAc1B,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAMtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AASzD,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,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;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,WAAW,2CAAyB;IACxB,OAAO,CAAC,UAAU,CAAM;IACpC,oBAAoB,2CAAyB;IAC7C,OAAO,CAAC,MAAM,CAAuC;IACrD,cAAc,EAAE,QAAQ,CAAC;IACzB,iBAAiB;IASjB,oBAAoB;IASpB,aAAa,aAAc,MAAM,iBA8B/B;IAEF,WAAW,oBAoHT;IAEF,aAAa,oBAoBX;IAEF,UAAU,aAAc,MAAM,iBAiB5B;IAEF,kBAAkB;IA0BlB,aAAa,aAAc,MAAM,iBA6G/B;IAEF,gBAAgB,sBAWd;IAEF,mBAAmB,oBA+CjB;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.map b/types/UI/Components/Board/ConfigTagCommand.d.ts.map index 894d398..00fae46 100644 --- a/types/UI/Components/Board/ConfigTagCommand.d.ts.map +++ b/types/UI/Components/Board/ConfigTagCommand.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ConfigTagCommand.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/ConfigTagCommand.ts"],"names":[],"mappings":"AAWA,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;IAkEtE,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc;IAY9E,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc;IAW5C,aAAa;IAYnB,OAAO,CAAC,sBAAsB;IAgB9B,OAAO,CAAC,sBAAsB;IAMxB,gBAAgB;IAmBtB,YAAY;CAOf"} \ No newline at end of file +{"version":3,"file":"ConfigTagCommand.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/ConfigTagCommand.ts"],"names":[],"mappings":"AAWA,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;iBAXmC,MAAM;oBAAc,MAAM;cAAQ,cAAc;OAczG;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;IAkEtE,YAAY,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc;IAY9E,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc;IAW5C,aAAa;IAYnB,OAAO,CAAC,sBAAsB;IAiB9B,OAAO,CAAC,sBAAsB;IAMxB,gBAAgB;IAmBtB,YAAY;CAOf"} \ No newline at end of file diff --git a/types/UI/Components/Board/Door/DoorConfigModal.d.ts b/types/UI/Components/Board/Door/DoorConfigModal.d.ts index 73d8728..94e17c9 100644 --- a/types/UI/Components/Board/Door/DoorConfigModal.d.ts +++ b/types/UI/Components/Board/Door/DoorConfigModal.d.ts @@ -4,6 +4,10 @@ export declare class DoorConfigModal extends React.Component<{ store?: DoorDrawerStore; }> { private uiOption; + showDoorHighEdgeProcessing: import("mobx").IObservableValue; + showLayerHighEdgeProcessing: import("mobx").IObservableValue; + showVerticalHighEdgeProcessing: import("mobx").IObservableValue; + showDrawerHighEdgeProcessing: import("mobx").IObservableValue; private isDoor; private handleDrawerDepth; /** @@ -18,6 +22,7 @@ export declare class DoorConfigModal extends React.Component<{ *渲染抽屉 */ renderDrawer: () => JSX.Element; + CheckDrillOption(): void; UNSAFE_componentWillMount(): void; render(): JSX.Element; } diff --git a/types/UI/Components/Board/Door/DoorConfigModal.d.ts.map b/types/UI/Components/Board/Door/DoorConfigModal.d.ts.map index 2c86fcd..8e36219 100644 --- a/types/UI/Components/Board/Door/DoorConfigModal.d.ts.map +++ b/types/UI/Components/Board/Door/DoorConfigModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DoorConfigModal.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Board/Door/DoorConfigModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAUjF,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,eAAe,CAAC;CAAE,CAAC;IAE9E,OAAO,CAAC,QAAQ,CAAqD;IACrE,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,iBAAiB,CAOvB;IACF;;MAEE;IACF,YAAY,oBA6DV;IAEF;;MAEE;IACF,UAAU,oBA+LR;IAEF;;MAEE;IACF,YAAY,oBA2HV;IAEF,yBAAyB;IAKzB,MAAM;CAQT"} \ No newline at end of file +{"version":3,"file":"DoorConfigModal.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Board/Door/DoorConfigModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAWjF,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,eAAe,CAAC;CAAE,CAAC;IAE9E,OAAO,CAAC,QAAQ,CAAqD;IACrE,0BAA0B,2CAAyB;IACnD,2BAA2B,2CAAyB;IACpD,8BAA8B,2CAAyB;IACvD,4BAA4B,2CAAyB;IACrD,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,iBAAiB,CAOvB;IACF;;MAEE;IACF,YAAY,oBA6DV;IAEF;;MAEE;IACF,UAAU,oBAmSR;IAEF;;MAEE;IACF,YAAY,oBA+IV;IAGF,gBAAgB;IAmBhB,yBAAyB;IAKzB,MAAM;CAUT"} \ No newline at end of file diff --git a/types/UI/Components/Board/Door/DoorModal.d.ts b/types/UI/Components/Board/Door/DoorModal.d.ts index 4ae43ae..8d1e454 100644 --- a/types/UI/Components/Board/Door/DoorModal.d.ts +++ b/types/UI/Components/Board/Door/DoorModal.d.ts @@ -1,12 +1,14 @@ import * as React from 'react'; import { DoorDrawerStore } from '../../../Store/DoorDrawerStore/DoorDrawerStore'; import { BoardModalType } from "../BoardModalType"; +import { DoorConfigModal } from './DoorConfigModal'; export declare class DoorModal extends React.Component<{ store: DoorDrawerStore; type: BoardModalType; }, {}> { private startSelect; UNSAFE_componentWillMount(): void; + doorConfigRef: React.RefObject; private event; componentDidMount(): void; componentWillUnmount(): void; diff --git a/types/UI/Components/Board/Door/DoorModal.d.ts.map b/types/UI/Components/Board/Door/DoorModal.d.ts.map index fe5ee2e..1f2807d 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;AAK/B,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAMjF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMnD,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;IAsGN,OAAO,CAAC,mBAAmB,CAKzB;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;AAK/B,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AAOjF,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,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;IAMzB,aAAa,mCAAsC;IACnD,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IA4BjB,oBAAoB;IAQpB,MAAM;IAgIN,OAAO,CAAC,mBAAmB,CAKzB;IACF,OAAO,CAAC,mBAAmB,CAazB;IACF,OAAO,CAAC,uBAAuB,CAiB7B;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/Door/HingeRule.d.ts.map b/types/UI/Components/Board/Door/HingeRule.d.ts.map index 60c03e3..4026c45 100644 --- a/types/UI/Components/Board/Door/HingeRule.d.ts.map +++ b/types/UI/Components/Board/Door/HingeRule.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HingeRule.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Board/Door/HingeRule.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAMjE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,UAAU,gBAAgB;IAEtB,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC;IAC9B,QAAQ,EAAE,GAAG,CAAC;CACjB;AAOD,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC;IACjD,WAAW,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAM;IAErE,iBAAiB;IASvB,OAAO,CAAC,SAAS;IAajB,oBAAoB;IAKb,MAAM;CA6JhB"} \ No newline at end of file +{"version":3,"file":"HingeRule.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Board/Door/HingeRule.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAMjE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,UAAU,gBAAgB;IAEtB,KAAK,EAAE,SAAS,GAAG,UAAU,CAAC;IAC9B,QAAQ,EAAE,GAAG,CAAC;CACjB;AAOD,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC;IACjD,WAAW,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAM;IAErE,iBAAiB;IASvB,OAAO,CAAC,SAAS;IAajB,oBAAoB;IAKb,MAAM;CAuKhB"} \ No newline at end of file diff --git a/types/UI/Components/Board/DrillCommon.d.ts b/types/UI/Components/Board/DrillCommon.d.ts index e8774e3..7d8b3d5 100644 --- a/types/UI/Components/Board/DrillCommon.d.ts +++ b/types/UI/Components/Board/DrillCommon.d.ts @@ -1,4 +1,3 @@ -import { IOptionProps } from '@blueprintjs/core'; import * as React from 'react'; import { DrillStore } from '../../Store/DrillStore'; export declare class DrillTypeCom extends React.Component<{ @@ -20,8 +19,6 @@ export declare class DrillTypeCom extends React.Component<{ export declare class SelectDrillTemp extends React.Component<{ store: DrillStore; }, {}> { - drillingTempList: IOptionProps[]; - drillingDirList: IOptionProps[]; render(): JSX.Element; private startSelectDrillTemp; } diff --git a/types/UI/Components/Board/DrillCommon.d.ts.map b/types/UI/Components/Board/DrillCommon.d.ts.map index b0f6a75..fe9f0aa 100644 --- a/types/UI/Components/Board/DrillCommon.d.ts.map +++ b/types/UI/Components/Board/DrillCommon.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrillCommon.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/DrillCommon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuD,YAAY,EAAqB,MAAM,mBAAmB,CAAC;AAGzH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAuB,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAQzE,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;CAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;CAAE,CAAC;gBAExG,KAAK,KAAA;IAQjB,OAAO,CAAC,YAAY,CAKlB;IACF,OAAO,CAAC,mBAAmB,CA4BzB;IACF,OAAO,CAAC,cAAc,CAKpB;IACF,OAAO,CAAC,sBAAsB,CAmB5B;IACF,OAAO,CAAC,YAAY,CAYlB;IACF,OAAO,CAAC,YAAY,CAKjB;IACH,OAAO,CAAC,gBAAgB,CAsEtB;IACF,MAAM;CA6FT;AAED,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;CAAE,EAAE,EAAE,CAAC;IAEhE,gBAAgB,EAAE,YAAY,EAAE,CAAM;IACtC,eAAe,EAAE,YAAY,EAAE,CAAM;IACjD,MAAM;IAuBN,OAAO,CAAC,oBAAoB,CAG1B;CACL"} \ No newline at end of file +{"version":3,"file":"DrillCommon.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/DrillCommon.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAuB,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAQzE,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;CAAE,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;CAAE,CAAC;gBAExG,KAAK,KAAA;IAQjB,OAAO,CAAC,YAAY,CAKlB;IACF,OAAO,CAAC,mBAAmB,CA4BzB;IACF,OAAO,CAAC,cAAc,CAKpB;IACF,OAAO,CAAC,sBAAsB,CAmB5B;IACF,OAAO,CAAC,YAAY,CAYlB;IACF,OAAO,CAAC,YAAY,CAKjB;IACH,OAAO,CAAC,gBAAgB,CAsEtB;IACF,MAAM;CA6FT;AAED,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,UAAU,CAAC;CAAE,EAAE,EAAE,CAAC;IAE5E,MAAM;IAuBN,OAAO,CAAC,oBAAoB,CAG1B;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/DrillRules.d.ts.map b/types/UI/Components/Board/DrillRules.d.ts.map index 947b3af..7e0b2f3 100644 --- a/types/UI/Components/Board/DrillRules.d.ts.map +++ b/types/UI/Components/Board/DrillRules.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrillRules.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/DrillRules.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIpD,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,UAAU,CAAC;CAAE,EAAE,EAAE,CAAC;IACjF,MAAM;IAiEN,OAAO,CAAC,SAAS,CAUf;CACL"} \ No newline at end of file +{"version":3,"file":"DrillRules.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/DrillRules.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAIpD,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,UAAU,CAAC;CAAE,EAAE,EAAE,CAAC;IACjF,MAAM;IAmEN,OAAO,CAAC,SAAS,CAUf;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/GangDrillModal.d.ts b/types/UI/Components/Board/GangDrillModal.d.ts index b3e2d12..e7dfed8 100644 --- a/types/UI/Components/Board/GangDrillModal.d.ts +++ b/types/UI/Components/Board/GangDrillModal.d.ts @@ -3,6 +3,8 @@ import { DrillStore } from '../../Store/DrillStore'; export declare class DrillModal extends React.Component<{ store?: DrillStore; }, {}> { + private _ShowShops; + private _ShopsKey; private posPars; private posPars2; private holePars; diff --git a/types/UI/Components/Board/GangDrillModal.d.ts.map b/types/UI/Components/Board/GangDrillModal.d.ts.map index 1fdc90f..2fddacd 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;AAapD,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,CA6Bf;IACF,OAAO,CAAC,eAAe,CAYrB;IACF,OAAO,CAAC,EAAE,CAUR;IACF,OAAO,CAAC,MAAM,CAKZ;IACF,yBAAyB;IAKzB,oBAAoB;IAKpB,MAAM;CA+ST"} \ No newline at end of file +{"version":3,"file":"GangDrillModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/GangDrillModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAapD,qBAEa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,UAAU,CAAC;CAAE,EAAE,EAAE,CAAC;IACxE,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,SAAS,CAAsB;IAEvC,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;IAcb,OAAO,CAAC,SAAS,CA6Bf;IACF,OAAO,CAAC,eAAe,CAYrB;IACF,OAAO,CAAC,EAAE,CAUR;IACF,OAAO,CAAC,MAAM,CAKZ;IACF,yBAAyB;IAKzB,oBAAoB;IAKpB,MAAM;CAmZT"} \ No newline at end of file diff --git a/types/UI/Components/Board/HelpComponent/HelpComponent.d.ts b/types/UI/Components/Board/HelpComponent/HelpComponent.d.ts new file mode 100644 index 0000000..a7f263e --- /dev/null +++ b/types/UI/Components/Board/HelpComponent/HelpComponent.d.ts @@ -0,0 +1,13 @@ +import * as React from 'react'; +import "./HelpComponentCSS.less"; +interface HelpComponentProp { + disabled?: boolean; + helpLink?: string; + helpContent?: string; +} +export declare class HelpComponent extends React.Component { + GetHelpContent: () => string; + render(): JSX.Element; +} +export {}; +//# sourceMappingURL=HelpComponent.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Board/HelpComponent/HelpComponent.d.ts.map b/types/UI/Components/Board/HelpComponent/HelpComponent.d.ts.map new file mode 100644 index 0000000..9431062 --- /dev/null +++ b/types/UI/Components/Board/HelpComponent/HelpComponent.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"HelpComponent.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Board/HelpComponent/HelpComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,yBAAyB,CAAC;AAIjC,UAAU,iBAAiB;IAEvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,CAAC;IAErE,cAAc,eASZ;IAEF,MAAM;CAuBT"} \ No newline at end of file diff --git a/types/UI/Components/Board/HighEdgeProcessingModal.d.ts b/types/UI/Components/Board/HighEdgeProcessingModal.d.ts new file mode 100644 index 0000000..568d591 --- /dev/null +++ b/types/UI/Components/Board/HighEdgeProcessingModal.d.ts @@ -0,0 +1,37 @@ +import { IObservableValue } from "mobx"; +import React from "react"; +import { CheckObjectType } from "../../../Common/CheckoutVaildValue"; +import { GoodsType, IGoodInfo } from "../../MaterialEditor/GoodsList"; +import { IHightDrillOption, IUiOption } from "../../Store/OptionInterface/IOptionInterface"; +type IHighEdgeKeyMap = { + up: string; + down: string; + left: string; + right: string; +}; +interface IHighEdgeProcessingModalProps { + showHighEdgeProcessing: IObservableValue; + option: any; + UIOption: IUiOption; + type: CheckObjectType; + highDrillOption?: IHightDrillOption; + hasDrill?: boolean; + isDrillLock?: boolean; + hasRemark?: boolean; + sealValueMap?: IHighEdgeKeyMap; + sealColorMap?: IHighEdgeKeyMap; + reservedEdgeMap?: IHighEdgeKeyMap; + remarkMap?: IHighEdgeKeyMap; +} +export declare const HighEdgeProcessingModal: (props: IHighEdgeProcessingModalProps) => JSX.Element; +interface ISealMaterialProps { + type: GoodsType; + option: any; + optKey: string; + onChange: (e: any) => void; + handleSelect: (good: IGoodInfo) => void; + style?: React.CSSProperties; +} +export declare const SealMaterialComponent: (props: ISealMaterialProps) => JSX.Element; +export {}; +//# sourceMappingURL=HighEdgeProcessingModal.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Board/HighEdgeProcessingModal.d.ts.map b/types/UI/Components/Board/HighEdgeProcessingModal.d.ts.map new file mode 100644 index 0000000..359c735 --- /dev/null +++ b/types/UI/Components/Board/HighEdgeProcessingModal.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"HighEdgeProcessingModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/HighEdgeProcessingModal.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,KAA2B,MAAM,OAAO,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAiB,MAAM,oCAAoC,CAAC;AAIpF,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAEtE,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAI5F,KAAK,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;CAAE,CAAC;AAClF,UAAU,6BAA6B;IAEnC,sBAAsB,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,EAAE,GAAG,CAAC;IACZ,QAAQ,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC;IACzB,IAAI,EAAE,eAAe,CAAC;IACtB,eAAe,CAAC,EAAE,iBAAiB,CAAC;IACpC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,SAAS,CAAC,EAAE,eAAe,CAAC;CAC/B;AACD,eAAO,MAAM,uBAAuB,UAAW,6BAA6B,gBAkS3E,CAAC;AAEF,UAAU,kBAAkB;IAExB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,CAAC,KAAA,KAAK,IAAI,CAAC;IACtB,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACxC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC/B;AAED,eAAO,MAAM,qBAAqB,UAAoB,kBAAkB,gBAyCtE,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/Board/LayerBoardModal.d.ts b/types/UI/Components/Board/LayerBoardModal.d.ts index 6c1403f..21646d5 100644 --- a/types/UI/Components/Board/LayerBoardModal.d.ts +++ b/types/UI/Components/Board/LayerBoardModal.d.ts @@ -1,4 +1,3 @@ -/// import { LayerBoardStore } from '../../Store/BoardStore'; export declare const LayerBoardModal: (props: { store?: LayerBoardStore; diff --git a/types/UI/Components/Board/LayerBoardModal.d.ts.map b/types/UI/Components/Board/LayerBoardModal.d.ts.map index 007eacc..68c4ee9 100644 --- a/types/UI/Components/Board/LayerBoardModal.d.ts.map +++ b/types/UI/Components/Board/LayerBoardModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"LayerBoardModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/LayerBoardModal.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,eAAO,MAAM,eAAe,UACN;IAAE,KAAK,CAAC,EAAE,eAAe,CAAC;CAAE,gBA0I3C,CAAC"} \ No newline at end of file +{"version":3,"file":"LayerBoardModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/LayerBoardModal.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,eAAO,MAAM,eAAe,UACN;IAAE,KAAK,CAAC,EAAE,eAAe,CAAC;CAAE,gBA0I3C,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/Board/SideModelingEditor.d.ts b/types/UI/Components/Board/SideModelingEditor.d.ts new file mode 100644 index 0000000..1a281f5 --- /dev/null +++ b/types/UI/Components/Board/SideModelingEditor.d.ts @@ -0,0 +1,33 @@ +import { Box3, Matrix4, Vector3 } from "three"; +import { Board } from "../../../DatabaseServices/Entity/Board"; +export declare class SideModelingEditor { + private Board; + private SideFaces; + private AroundBoardMesh; + private SideModelEdgeGeom; + private CurrentFace; + private CurrentFaceIndex; + private CurrentFaceOCS; + private CurrentFaceOCSInv; + private CurrentSideContour; + private Editoring; + private CameraFiler; + private OpacityBak; + private BackUCSMatrix; + private BackVisibleUCS; + private RenderTypeBak; + private ShowSaveCancleButton; + constructor(br: Board); + StartEditor: () => Promise; + AddModelingCurve(): void; + private Init; + private ShowToaster; + private RenderToasterMessage; + private ParseCurveLinkGroup; + private AddModeling; + private Start; + private EndEditor; + private SelectSideFace; +} +export declare function RotateCamera(UCSMatrix: Matrix4, box: Box3, lookAtDir: Vector3, totalSegments?: number, cameraUpDir?: Vector3): Promise; +//# sourceMappingURL=SideModelingEditor.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Board/SideModelingEditor.d.ts.map b/types/UI/Components/Board/SideModelingEditor.d.ts.map new file mode 100644 index 0000000..7478086 --- /dev/null +++ b/types/UI/Components/Board/SideModelingEditor.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"SideModelingEditor.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/SideModelingEditor.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAgB,OAAO,EAAkB,OAAO,EAAE,MAAM,OAAO,CAAC;AAY7E,OAAO,EAAE,KAAK,EAAa,MAAM,wCAAwC,CAAC;AAuB1E,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,iBAAiB,CAAkB;IAC3C,OAAO,CAAC,WAAW,CAAO;IAC1B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,iBAAiB,CAAU;IACnC,OAAO,CAAC,kBAAkB,CAAW;IACrC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,oBAAoB,CAAkB;gBAElC,EAAE,EAAE,KAAK;IAKrB,WAAW,sBAaT;IACF,gBAAgB;IAmFhB,OAAO,CAAC,IAAI;IAmBZ,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,oBAAoB,CAa1B;YAGY,mBAAmB;YA+EnB,WAAW;YAqDX,KAAK;YA6FL,SAAS;IA2BvB,OAAO,CAAC,cAAc,CA6DpB;CACL;AAGD,wBAAsB,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,GAAE,MAAY,EAAE,WAAW,UAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2EpK"} \ No newline at end of file diff --git a/types/UI/Components/Board/SingleBoardModal.d.ts b/types/UI/Components/Board/SingleBoardModal.d.ts index 95affbc..2a596a8 100644 --- a/types/UI/Components/Board/SingleBoardModal.d.ts +++ b/types/UI/Components/Board/SingleBoardModal.d.ts @@ -1,6 +1,6 @@ -/// import { SingleBoardStore } from "../../Store/BoardStore"; export declare const SingleBoardModal: (props: { store?: SingleBoardStore; + isArcBoard?: boolean; }) => JSX.Element; //# sourceMappingURL=SingleBoardModal.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Board/SingleBoardModal.d.ts.map b/types/UI/Components/Board/SingleBoardModal.d.ts.map index aa7fe69..e4a23df 100644 --- a/types/UI/Components/Board/SingleBoardModal.d.ts.map +++ b/types/UI/Components/Board/SingleBoardModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SingleBoardModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/SingleBoardModal.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,eAAO,MAAM,gBAAgB,UACP;IAAE,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAAE,gBAqG5C,CAAC"} \ No newline at end of file +{"version":3,"file":"SingleBoardModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/SingleBoardModal.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG1D,eAAO,MAAM,gBAAgB,UACP;IAAE,KAAK,CAAC,EAAE,gBAAgB,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAAE,gBAsHlE,CAAC"} \ 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 d2b551f..ad019cb 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;AAU3D,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;IAkEN,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;AAO/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAU3D,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;IAkEN,OAAO,CAAC,EAAE,CAcR;IACF,OAAO,CAAC,MAAM,CAKZ;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Board/TopBottomBoardModal.d.ts b/types/UI/Components/Board/TopBottomBoardModal.d.ts index edfae1b..f2b501c 100644 --- a/types/UI/Components/Board/TopBottomBoardModal.d.ts +++ b/types/UI/Components/Board/TopBottomBoardModal.d.ts @@ -1,4 +1,3 @@ -/// import { TopBottomBoardStore } from '../../Store/BoardStore'; export declare const TopBottomBoardModal: (props: { store?: TopBottomBoardStore; diff --git a/types/UI/Components/Board/TopBottomBoardModal.d.ts.map b/types/UI/Components/Board/TopBottomBoardModal.d.ts.map index 1c97241..3f10328 100644 --- a/types/UI/Components/Board/TopBottomBoardModal.d.ts.map +++ b/types/UI/Components/Board/TopBottomBoardModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TopBottomBoardModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/TopBottomBoardModal.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,eAAO,MAAM,mBAAmB,UACV;IAAE,KAAK,CAAC,EAAE,mBAAmB,CAAC;CAAE,gBAsG/C,CAAC"} \ No newline at end of file +{"version":3,"file":"TopBottomBoardModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/TopBottomBoardModal.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,eAAO,MAAM,mBAAmB,UACV;IAAE,KAAK,CAAC,EAAE,mBAAmB,CAAC;CAAE,gBAiI/C,CAAC"} \ 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 cfe5afb..44b5f4a 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;AAc/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAWzE,MAAM,WAAW,0BAA0B;IAEvC,KAAK,EAAE,qBAAqB,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;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;IAyPb,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;AAc/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAWzE,MAAM,WAAW,0BAA0B;IAEvC,KAAK,EAAE,qBAAqB,CAAC;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBACa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC,0BAA0B,CAAC;IAEjF,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;IA0Pb,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/UserConfigComponent.d.ts.map b/types/UI/Components/Board/UserConfigComponent.d.ts.map index bf3ca1d..ff9d9d8 100644 --- a/types/UI/Components/Board/UserConfigComponent.d.ts.map +++ b/types/UI/Components/Board/UserConfigComponent.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"UserConfigComponent.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/UserConfigComponent.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"UserConfigComponent.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/UserConfigComponent.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Components/Board/VerticalBoardModal.d.ts b/types/UI/Components/Board/VerticalBoardModal.d.ts index f8f720c..f82733e 100644 --- a/types/UI/Components/Board/VerticalBoardModal.d.ts +++ b/types/UI/Components/Board/VerticalBoardModal.d.ts @@ -1,4 +1,3 @@ -/// import { VerticalBoardStore } from '../../Store/BoardStore'; export declare const VerticalBoardModal: (props: { store?: VerticalBoardStore; diff --git a/types/UI/Components/Board/VerticalBoardModal.d.ts.map b/types/UI/Components/Board/VerticalBoardModal.d.ts.map index 0116012..0d682da 100644 --- a/types/UI/Components/Board/VerticalBoardModal.d.ts.map +++ b/types/UI/Components/Board/VerticalBoardModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"VerticalBoardModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/VerticalBoardModal.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,eAAO,MAAM,kBAAkB,UACT;IAAE,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAAE,gBAqE9C,CAAC"} \ No newline at end of file +{"version":3,"file":"VerticalBoardModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/VerticalBoardModal.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAG5D,eAAO,MAAM,kBAAkB,UACT;IAAE,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAAE,gBAqE9C,CAAC"} \ 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 c5a85d6..0eda375 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;AAc/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;IAyBjB,oBAAoB;IAKpB,MAAM;CA2ST"} \ 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;AAc/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;IAyBjB,oBAAoB;IAKpB,MAAM;CAiTT"} \ No newline at end of file diff --git a/types/UI/Components/Board/leftRightBoardModal.d.ts b/types/UI/Components/Board/leftRightBoardModal.d.ts index a98bb54..575909a 100644 --- a/types/UI/Components/Board/leftRightBoardModal.d.ts +++ b/types/UI/Components/Board/leftRightBoardModal.d.ts @@ -1,4 +1,3 @@ -/// import { SideBoardStore } from '../../Store/BoardStore'; export declare const LeftRightBoardModal: (props: { store?: SideBoardStore; diff --git a/types/UI/Components/Board/leftRightBoardModal.d.ts.map b/types/UI/Components/Board/leftRightBoardModal.d.ts.map index aef19d3..2193311 100644 --- a/types/UI/Components/Board/leftRightBoardModal.d.ts.map +++ b/types/UI/Components/Board/leftRightBoardModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"leftRightBoardModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/leftRightBoardModal.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,eAAO,MAAM,mBAAmB,UACV;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC;CAAE,gBA6F1C,CAAC"} \ No newline at end of file +{"version":3,"file":"leftRightBoardModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Board/leftRightBoardModal.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,eAAO,MAAM,mBAAmB,UACV;IAAE,KAAK,CAAC,EAAE,cAAc,CAAC;CAAE,gBA6F1C,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/CameraControlButton/CameraControlBtn.d.ts.map b/types/UI/Components/CameraControlButton/CameraControlBtn.d.ts.map index aa4d367..2b01786 100644 --- a/types/UI/Components/CameraControlButton/CameraControlBtn.d.ts.map +++ b/types/UI/Components/CameraControlButton/CameraControlBtn.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CameraControlBtn.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/CameraControlButton/CameraControlBtn.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,gDAAgD,CAAC;AA8CxD,qBAAa,qBAAqB;IAElB,YAAY,EAAE,MAAM,CAAM;IAC1B,eAAe,EAAE,MAAM,CAAW;IAClC,uBAAuB,EAAE,MAAM,CAAU;IACzC,YAAY,EAAE,MAAM,CAAQ;IAE5B,mBAAmB,EAAE,OAAO,CAA+C;IAEvF,OAAO,CAAC,MAAM,CAAC,eAAe,CAAwB;IACtD,MAAM,CAAC,WAAW,IAAI,qBAAqB;IAO3C,OAAO;IA+CP,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,EAG7B;IACD,IAAI,YAAY,IAJQ,MAAM,CAO7B;CACJ;AACD,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAElD,KAAK;;;MAGV;IACU,UAAU,SAAQ;IAE9B,SAAS,EAAE,QAAQ,CAAC;IACpB,iBAAiB;IASjB,oBAAoB;IASpB,MAAM;IA4GN,kBAAkB;IAalB,kBAAkB,oBAmChB;IAEF,cAAc,oBA6CZ;IAEF,sBAAsB,oBAyDpB;CACL"} \ No newline at end of file +{"version":3,"file":"CameraControlBtn.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/CameraControlButton/CameraControlBtn.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,gDAAgD,CAAC;AA+CxD,qBAAa,qBAAqB;IAElB,YAAY,EAAE,MAAM,CAAM;IAC1B,eAAe,EAAE,MAAM,CAAW;IAClC,uBAAuB,EAAE,MAAM,CAAU;IACzC,YAAY,EAAE,MAAM,CAAQ;IAE5B,mBAAmB,EAAE,OAAO,CAA+C;IAEvF,OAAO,CAAC,MAAM,CAAC,eAAe,CAAwB;IACtD,MAAM,CAAC,WAAW,IAAI,qBAAqB;IAO3C,OAAO;IA+CP,IAAI,YAAY,CAAC,KAAK,EAAE,MAAM,EAG7B;IACD,IAAI,YAAY,IAJQ,MAAM,CAO7B;CACJ;AACD,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAElD,KAAK;;;MAGV;IACU,UAAU,SAAQ;IAE9B,SAAS,EAAE,QAAQ,CAAC;IACpB,iBAAiB;IASjB,oBAAoB;IASpB,MAAM;IAyHN,kBAAkB;IAalB,kBAAkB,oBAmChB;IAEF,cAAc,oBA6CZ;IAEF,sBAAsB,oBAyEpB;CACL"} \ No newline at end of file diff --git a/types/UI/Components/CameraControlButton/IVisualType.d.ts b/types/UI/Components/CameraControlButton/IVisualType.d.ts index 34de4af..509f4b4 100644 --- a/types/UI/Components/CameraControlButton/IVisualType.d.ts +++ b/types/UI/Components/CameraControlButton/IVisualType.d.ts @@ -4,6 +4,7 @@ interface IVisualStyle { cmd: CommandNames; } export declare const VisualStyleData: IVisualStyle[]; +export declare const VisualStyleData1: IVisualStyle[]; export declare const VisualStyleData2: IVisualStyle[]; export {}; //# sourceMappingURL=IVisualType.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/CameraControlButton/IVisualType.d.ts.map b/types/UI/Components/CameraControlButton/IVisualType.d.ts.map index d090a44..87bd4b8 100644 --- a/types/UI/Components/CameraControlButton/IVisualType.d.ts.map +++ b/types/UI/Components/CameraControlButton/IVisualType.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"IVisualType.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/CameraControlButton/IVisualType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,UAAU,YAAY;IAElB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,YAAY,CAAC;CACrB;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,EAiBzC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,YAAY,EAyB1C,CAAC"} \ No newline at end of file +{"version":3,"file":"IVisualType.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/CameraControlButton/IVisualType.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,UAAU,YAAY;IAElB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,YAAY,CAAC;CACrB;AAED,eAAO,MAAM,eAAe,EAAE,YAAY,EAiBzC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,YAAY,EAK1C,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,YAAY,EAqB1C,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/Carousel.d.ts.map b/types/UI/Components/Carousel.d.ts.map index 0a26af3..424220d 100644 --- a/types/UI/Components/Carousel.d.ts.map +++ b/types/UI/Components/Carousel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Carousel.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/Carousel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEpE,MAAM,WAAW,aAAa;IAE1B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,WAAW,CAAC;CACtB;AASD;;GAEG;AACH,qBAEa,QAAS,SAAQ,KAAK,CAAC,SAAS,CAAC,aAAa,EAAE,GAAG,CAAC;IAC7D,MAAM,MAAQ;IACF,QAAQ,WAAiB;IACrC,WAAW,aAcT;IACF,WAAW,aAGT;IACF,WAAW,MAAO,MAAM,UAWtB;IACF,oBAAoB;IAIpB,iBAAiB;IAKV,MAAM;CA0DhB"} \ No newline at end of file +{"version":3,"file":"Carousel.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/Carousel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEpE,MAAM,WAAW,aAAa;IAE1B,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,WAAW,CAAC;CACtB;AASD;;GAEG;AACH,qBAEa,QAAS,SAAQ,KAAK,CAAC,SAAS,CAAC,aAAa,EAAE,GAAG,CAAC;IAE7D,MAAM,MAAQ;IACF,QAAQ,WAAiB;IACrC,WAAW,aAcT;IACF,WAAW,aAGT;IACF,WAAW,MAAO,MAAM,UAWtB;IACF,oBAAoB;IAIpB,iBAAiB;IAKV,MAAM;CA0DhB"} \ No newline at end of file diff --git a/types/UI/Components/ChatButton.d.ts b/types/UI/Components/ChatButton.d.ts index acf667c..571878e 100644 --- a/types/UI/Components/ChatButton.d.ts +++ b/types/UI/Components/ChatButton.d.ts @@ -1,4 +1,3 @@ -/// export declare let IsOpenChat: import("mobx").IObservableValue; export declare const ChatReset: () => void; export declare const ChatButton: ({ isLoginInterface }: { diff --git a/types/UI/Components/ChatButton.d.ts.map b/types/UI/Components/ChatButton.d.ts.map index b89ebda..296ecee 100644 --- a/types/UI/Components/ChatButton.d.ts.map +++ b/types/UI/Components/ChatButton.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ChatButton.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/ChatButton.tsx"],"names":[],"mappings":";AAUA,eAAO,IAAI,UAAU,0CAAwB,CAAC;AAG9C,eAAO,MAAM,SAAS,YAqBrB,CAAC;AAEF,eAAO,MAAM,UAAU;;iBA8LtB,CAAC"} \ No newline at end of file +{"version":3,"file":"ChatButton.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/ChatButton.tsx"],"names":[],"mappings":"AAUA,eAAO,IAAI,UAAU,0CAAwB,CAAC;AAG9C,eAAO,MAAM,SAAS,YAqBrB,CAAC;AAEF,eAAO,MAAM,UAAU;;iBA8LtB,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/CommandInput/CommandTypeModal.d.ts b/types/UI/Components/CommandInput/CommandTypeModal.d.ts index 55067eb..c0c7735 100644 --- a/types/UI/Components/CommandInput/CommandTypeModal.d.ts +++ b/types/UI/Components/CommandInput/CommandTypeModal.d.ts @@ -1,4 +1,3 @@ -/// import { CommandStore } from "../../Store/CommandStore"; declare const _default: (props: { store: CommandStore; diff --git a/types/UI/Components/CommandInput/CommandTypeModal.d.ts.map b/types/UI/Components/CommandInput/CommandTypeModal.d.ts.map index 865b956..c087645 100644 --- a/types/UI/Components/CommandInput/CommandTypeModal.d.ts.map +++ b/types/UI/Components/CommandInput/CommandTypeModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CommandTypeModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/CommandInput/CommandTypeModal.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;;;;AA0DxD,wBAA0C"} \ No newline at end of file +{"version":3,"file":"CommandTypeModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/CommandInput/CommandTypeModal.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;gCAGvB;IAAE,KAAK,EAAE,YAAY,CAAC;CAAE;AAuDzD,wBAA0C"} \ No newline at end of file diff --git a/types/UI/Components/CommandInput/TransparentTerminal.d.ts.map b/types/UI/Components/CommandInput/TransparentTerminal.d.ts.map index aeaad39..8bb0a6b 100644 --- a/types/UI/Components/CommandInput/TransparentTerminal.d.ts.map +++ b/types/UI/Components/CommandInput/TransparentTerminal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TransparentTerminal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/CommandInput/TransparentTerminal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,qBAIa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAG5D,gBAAgB,EAAE,WAAW,CAAC;IAC9B,qBAAqB,EAAE,WAAW,CAAC;IACnC,kBAAkB;IAKlB,MAAM;CAyCT"} \ No newline at end of file +{"version":3,"file":"TransparentTerminal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/CommandInput/TransparentTerminal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,qBAIa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAG5D,gBAAgB,EAAE,WAAW,CAAC;IAC9B,qBAAqB,EAAE,WAAW,CAAC;IACnC,kBAAkB;IAKlB,MAAM;CA0CT"} \ No newline at end of file diff --git a/types/UI/Components/CommandLine.d.ts b/types/UI/Components/CommandLine.d.ts index 006d3b4..bd14df6 100644 --- a/types/UI/Components/CommandLine.d.ts +++ b/types/UI/Components/CommandLine.d.ts @@ -2,6 +2,7 @@ import * as React from 'react'; import { CommandMsg } from '../Store/CommandStore'; export declare class CommandLine extends React.Component<{ msg: CommandMsg; + commandInfoLongDisplay?: boolean; }, {}> { render(): JSX.Element; } diff --git a/types/UI/Components/CommandLine.d.ts.map b/types/UI/Components/CommandLine.d.ts.map index 690e58c..5523219 100644 --- a/types/UI/Components/CommandLine.d.ts.map +++ b/types/UI/Components/CommandLine.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CommandLine.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/CommandLine.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,qBAAa,WAAY,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,GAAG,EAAE,UAAU,CAAC;CAAE,EAAE,EAAE,CAAC;IAEtE,MAAM;CAiDT"} \ No newline at end of file +{"version":3,"file":"CommandLine.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/CommandLine.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,qBAAa,WAAY,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,GAAG,EAAE,UAAU,CAAC;IAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAAE,EAAE,EAAE,CAAC;IAExG,MAAM;CAiDT"} \ No newline at end of file diff --git a/types/UI/Components/CommandPanel/CommandItem.d.ts.map b/types/UI/Components/CommandPanel/CommandItem.d.ts.map index 76da9d9..358140f 100644 --- a/types/UI/Components/CommandPanel/CommandItem.d.ts.map +++ b/types/UI/Components/CommandPanel/CommandItem.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CommandItem.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/CommandPanel/CommandItem.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAYzC,MAAM,WAAW,gBAAgB;IAE7B,WAAW,EAAE,QAAQ,CAAC;IACtB,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;CAClD;AAED;;;GAGG;AAEH,qBACa,WAAY,SAAQ,KAAK,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,CAAC;IACtD,OAAO,CAAC,IAAI,CAAuB;IAC/C,OAAO,CAAC,WAAW,CAAmB;IAC1B,OAAO,CAAC,SAAS,CAAkB;IAC/C,OAAO,CAAC,OAAO,CAAS;gBACZ,KAAK,KAAA;IAIjB,iBAAiB;IAkBjB,aAAa,aASX;IACF,cAAc,6BA2CZ;IACF,YAAY,aA2BV;IAGF,iBAAiB,QAAO,MAAM,CAQ5B;IAEF,MAAM;CAkJT"} \ No newline at end of file +{"version":3,"file":"CommandItem.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/CommandPanel/CommandItem.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAYzC,MAAM,WAAW,gBAAgB;IAE7B,WAAW,EAAE,QAAQ,CAAC;IACtB,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;CAClD;AAED;;;GAGG;AAEH,qBACa,WAAY,SAAQ,KAAK,CAAC,SAAS,CAAC,gBAAgB,EAAE,EAAE,CAAC;IACtD,OAAO,CAAC,IAAI,CAAuB;IAC/C,OAAO,CAAC,WAAW,CAAmB;IAC1B,OAAO,CAAC,SAAS,CAAkB;IAC/C,OAAO,CAAC,OAAO,CAAS;gBACZ,KAAK,KAAA;IAIjB,iBAAiB;IAkBjB,aAAa,aASX;IACF,cAAc,6BA4CZ;IACF,YAAY,aA2BV;IAGF,iBAAiB,QAAO,MAAM,CAQ5B;IAEF,MAAM;CAkJT"} \ 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 174b63a..88663d5 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;IACvB,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CACpC;AAGD,eAAO,MAAM,WAAW,EAAE,QAAQ,EAgsGjC,CAAC;AAEF,eAAO,MAAM,cAAc,uBAA8B,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;IACvB,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CACpC;AAGD,eAAO,MAAM,WAAW,EAAE,QAAQ,EAs7GjC,CAAC;AAEF,eAAO,MAAM,cAAc,uBAA8B,CAAC"} \ 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 index 6c69318..0cf9952 100644 --- a/types/UI/Components/CommandPanel/ConfigListType.d.ts.map +++ b/types/UI/Components/CommandPanel/ConfigListType.d.ts.map @@ -1 +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;CAsDhE,CAAC"} \ No newline at end of file +{"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;CAuDhE,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 d74d765..f0c1116 100644 --- a/types/UI/Components/CommandPanel/SystemCommand/UICpmmand.d.ts +++ b/types/UI/Components/CommandPanel/SystemCommand/UICpmmand.d.ts @@ -6,6 +6,9 @@ export declare const RightTabCommandMap: { export declare class Command_PropertiesBar implements Command { exec(): Promise; } +export declare class Command_LayerListBar implements Command { + exec(): Promise; +} export declare class Command_ModuleBar implements Command { exec(): Promise; } diff --git a/types/UI/Components/CommandPanel/SystemCommand/UICpmmand.d.ts.map b/types/UI/Components/CommandPanel/SystemCommand/UICpmmand.d.ts.map index 40a7a64..be40d81 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":"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;IAEhD,SAAS,UAAQ;IACjB,YAAY,UAAQ;IACd,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 +{"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,oBAAqB,YAAW,OAAO;IAE1C,IAAI;CAIb;AAED,qBAAa,iBAAkB,YAAW,OAAO;IAEvC,IAAI;CAIb;AAED,qBAAa,oBAAqB,YAAW,OAAO;IAEhD,SAAS,UAAQ;IACjB,YAAY,UAAQ;IACd,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/Common/Confirm.d.ts b/types/UI/Components/Common/Confirm.d.ts index 7d79439..f84c12a 100644 --- a/types/UI/Components/Common/Confirm.d.ts +++ b/types/UI/Components/Common/Confirm.d.ts @@ -10,13 +10,36 @@ declare class Confirm { message: string | string[]; hasCancel?: boolean; confirmButtonText?: string; + cancelButtonText?: string; intent?: Intent; + ignore?: boolean; }): Promise; show2(option: { message: string | string[]; onConfirm: () => void; onCanel?: () => void; }): void; + /** + * 多按钮确认框 + * @example + * // res=0关闭 res=1确定 res=2取消 res=3帮助 + * const res = await AppConfirm.show3({ + * message: "你确定要删除吗?", + * buttons: [ + * { text: "确定", type: Intent.SUCCESS, status: 1 }, + * { text: "取消", type: Intent.DANGER, status: 2 }, + * { text: "帮助", type: Intent.WARNING, status: 3 }, + * ] + * }) + */ + show3(option: { + message: string | string[]; + buttons?: { + text: string; + type: Intent; + status: number; + }[]; + }): Promise; } interface ICommonConfirmProps { message: string | string[]; @@ -24,7 +47,9 @@ interface ICommonConfirmProps { close: Function; hasCancel: boolean; confirmButtonText?: string; + cancelButtonText?: string; intent?: Intent; + ignore?: boolean; } /** * 类似原生api confirm diff --git a/types/UI/Components/Common/Confirm.d.ts.map b/types/UI/Components/Common/Confirm.d.ts.map index 251fe91..6f4126f 100644 --- a/types/UI/Components/Common/Confirm.d.ts.map +++ b/types/UI/Components/Common/Confirm.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Confirm.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Common/Confirm.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgC,MAAM,EAAiB,MAAM,mBAAmB,CAAC;AAGxF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,cAAM,OAAO;IAET,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO;IAMP,OAAO,CAAC,MAAM,CAAC,eAAe,CAAU;IACxC,MAAM,CAAC,WAAW,IAAI,OAAO;IAO7B,KAAK;IAIC,IAAI,CAAC,MAAM,EAAE;QACf,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,OAAO,CAAC;IAepB,KAAK,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,IAAI,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;KAAE;CAI7F;AAGD,UAAU,mBAAmB;IAEzB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,GAAG,EAAE,QAAQ,CAAC;IACd,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IAEnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC;IAEnE,aAAa,+BAQX;IACF,iBAAiB;IAKjB,oBAAoB;IAKpB,MAAM;IAiBN,OAAO,CAAC,OAAO,CAIb;IACF,OAAO,CAAC,MAAM,CAIZ;IAGF,OAAO,CAAC,OAAO,CASb;IAEF,OAAO,CAAC,KAAK;CAShB;AAqFD,eAAO,MAAM,UAAU,SAAwB,CAAC"} \ No newline at end of file +{"version":3,"file":"Confirm.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Common/Confirm.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgC,MAAM,EAAiB,MAAM,mBAAmB,CAAC;AAGxF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,cAAM,OAAO;IAET,OAAO,CAAC,UAAU,CAAiB;IACnC,OAAO;IAMP,OAAO,CAAC,MAAM,CAAC,eAAe,CAAU;IACxC,MAAM,CAAC,WAAW,IAAI,OAAO;IAO7B,KAAK;IAIC,IAAI,CAAC,MAAM,EAAE;QACf,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,OAAO,CAAC;KACpB,GAAG,OAAO,CAAC,OAAO,CAAC;IAiBpB,KAAK,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAAC,SAAS,EAAE,MAAM,IAAI,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;KAAE;IAK1F;;;;;;;;;;;;OAYG;IACG,KAAK,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;SAAE,EAAE,CAAC;KAAE;CAanH;AAGD,UAAU,mBAAmB;IAEzB,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,GAAG,EAAE,QAAQ,CAAC;IACd,KAAK,EAAE,QAAQ,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,mBAAmB,CAAC;IAEnE,aAAa,+BAQX;IACF,iBAAiB;IAKjB,oBAAoB;IAKpB,MAAM;IAiBN,OAAO,CAAC,OAAO,CAIb;IACF,OAAO,CAAC,MAAM,CAIZ;IAGF,OAAO,CAAC,OAAO,CASb;IAEF,OAAO,CAAC,KAAK;CAShB;AAoKD,eAAO,MAAM,UAAU,SAAwB,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/Common/Datalist.d.ts b/types/UI/Components/Common/Datalist.d.ts index 6294b76..07672fa 100644 --- a/types/UI/Components/Common/Datalist.d.ts +++ b/types/UI/Components/Common/Datalist.d.ts @@ -27,6 +27,7 @@ export interface IDataListProps { isFromResource?: boolean; isTemplateListUse?: boolean; openScaleImages?: IObservableValue; + imageDefaultTemplate?: string; } export declare class DataList extends React.Component { static defaultProps: Partial; diff --git a/types/UI/Components/Common/Datalist.d.ts.map b/types/UI/Components/Common/Datalist.d.ts.map index fdb5f3d..53fc415 100644 --- a/types/UI/Components/Common/Datalist.d.ts.map +++ b/types/UI/Components/Common/Datalist.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Datalist.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Common/Datalist.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,yBAAyB,CAAC;AACjC,OAAO,EAAE,SAAS,EAA6B,MAAM,8CAA8C,CAAC;AAQpG,MAAM,WAAW,cAAc;IAE3B,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,MAAM,EAAE,CAAC,CAAC,KAAA,EAAE,IAAI,KAAA,KAAK,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,CAAC,IAAI,KAAA,KAAK,GAAG,CAAC,OAAO,CAAC;IACtC,kBAAkB,CAAC,EAAE,CAAC,IAAI,KAAA,KAAK,GAAG,CAAC,OAAO,CAAC;IAC3C,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IAC/E,OAAO,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;CAC/C;AAED,qBACa,QAAS,SAAQ,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC;IACzD,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC,CAQ1C;IACF,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,SAAS,CAAyE;IAC1F,OAAO,CAAC,gBAAgB,CAA6H;IACrJ,OAAO,CAAC,cAAc,CAAmC;IAEzD,OAAO,CAAC,cAAc,CA4CpB;IAEF,OAAO,CAAC,mBAAmB,CA2BzB;IAEF,OAAO,CAAC,iBAAiB,CASvB;IAEF,OAAO,CAAC,UAAU,CAIhB;IACF,aAAa,oBAyGX;IACF,WAAW,oBAyFT;IAEF,iBAAiB,IAAI,IAAI;IAKzB,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI;IAQtG,oBAAoB,IAAI,IAAI;IAOrB,MAAM;IAcb,OAAO,CAAC,eAAe,CAKrB;IACF,eAAe,MAAO,gBAAgB,CAAC,WAAW,CAAC,QAAQ,SAAS,UAiBlE;IACF,aAAa,MAAO,gBAAgB,CAAC,WAAW,CAAC,QAAQ,SAAS,UAGhE;IACF,gBAAgB,sBAId;IACF,eAAe,sBAIb;CACL"} \ No newline at end of file +{"version":3,"file":"Datalist.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Common/Datalist.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,yBAAyB,CAAC;AACjC,OAAO,EAAE,SAAS,EAA6B,MAAM,8CAA8C,CAAC;AAQpG,MAAM,WAAW,cAAc;IAE3B,QAAQ,EAAE,GAAG,EAAE,CAAC;IAChB,MAAM,EAAE,CAAC,CAAC,KAAA,EAAE,IAAI,KAAA,KAAK,IAAI,CAAC;IAC1B,eAAe,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,CAAC,IAAI,KAAA,KAAK,GAAG,CAAC,OAAO,CAAC;IACtC,kBAAkB,CAAC,EAAE,CAAC,IAAI,KAAA,KAAK,GAAG,CAAC,OAAO,CAAC;IAC3C,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,0BAA0B;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACvC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IAC/E,OAAO,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5C,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,qBACa,QAAS,SAAQ,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC;IAEzD,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,cAAc,CAAC,CAQ1C;IACF,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,UAAU,CAAqC;IACvD,OAAO,CAAC,SAAS,CAAyE;IAC1F,OAAO,CAAC,gBAAgB,CAA6H;IACrJ,OAAO,CAAC,cAAc,CAAmC;IAEzD,OAAO,CAAC,cAAc,CA4CpB;IAEF,OAAO,CAAC,mBAAmB,CA2BzB;IAEF,OAAO,CAAC,iBAAiB,CASvB;IAEF,OAAO,CAAC,UAAU,CAIhB;IACF,aAAa,oBA+GX;IACF,WAAW,oBAyFT;IAEF,iBAAiB,IAAI,IAAI;IAKzB,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI;IAQtG,oBAAoB,IAAI,IAAI;IAOrB,MAAM;IAcb,OAAO,CAAC,eAAe,CAKrB;IACF,eAAe,MAAO,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,SAAS,UAiBlE;IACF,aAAa,MAAO,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,SAAS,UAGhE;IACF,gBAAgB,sBAId;IACF,eAAe,sBAIb;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Common/DatalistStore.d.ts.map b/types/UI/Components/Common/DatalistStore.d.ts.map index 8ab2994..7fd268b 100644 --- a/types/UI/Components/Common/DatalistStore.d.ts.map +++ b/types/UI/Components/Common/DatalistStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DatalistStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Common/DatalistStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,qBAAa,aAAc,SAAQ,SAAU,YAAW,YAAY;IAEhE,UAAU,SAAQ;IACN,QAAQ,EAAE,oBAAoB,CAAyB;IACnE,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,UAAU;IAIV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,oBAAoB,CAAC;IAIrD,UAAU;CAOb;AAED,eAAO,MAAM,aAAa,eAA+C,CAAC"} \ No newline at end of file +{"version":3,"file":"DatalistStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Common/DatalistStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,qBAAa,aAAc,SAAQ,SAAU,YAAW,YAAY;IAEhE,UAAU,SAAQ;IACN,QAAQ,EAAE,oBAAoB,CAAyB;IACnE,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,UAAU;IAIV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,oBAAoB,CAAC;IAIrD,UAAU;CAOb;AAED,eAAO,MAAM,aAAa,EAAkC,aAAa,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/ContextMenu/KeyWordContextMenu.d.ts b/types/UI/Components/ContextMenu/KeyWordContextMenu.d.ts index a0a8b16..a846780 100644 --- a/types/UI/Components/ContextMenu/KeyWordContextMenu.d.ts +++ b/types/UI/Components/ContextMenu/KeyWordContextMenu.d.ts @@ -6,6 +6,9 @@ import { GetKeyWordsServices } from '../../../Editor/GetKeyWordService'; export declare class KeyWordContextMenu extends React.Component<{ keywordStore?: GetKeyWordsServices; }, {}> { + componentDidUpdate(prevProps: Readonly<{ + keywordStore?: GetKeyWordsServices; + }>, prevState: Readonly<{}>, snapshot?: any): void; render(): JSX.Element; } //# sourceMappingURL=KeyWordContextMenu.d.ts.map \ 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 2dcc96a..48a9fff 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;AAI/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;CAmFhB"} \ No newline at end of file +{"version":3,"file":"KeyWordContextMenu.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/ContextMenu/KeyWordContextMenu.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/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;IAEhG,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC;QAAE,YAAY,CAAC,EAAE,mBAAmB,CAAC;KAAE,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI;IAKxH,MAAM;CAsFhB"} \ No newline at end of file diff --git a/types/UI/Components/EntityModal/EntityColorList.d.ts.map b/types/UI/Components/EntityModal/EntityColorList.d.ts.map index 5a6e741..49ff550 100644 --- a/types/UI/Components/EntityModal/EntityColorList.d.ts.map +++ b/types/UI/Components/EntityModal/EntityColorList.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"EntityColorList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/EntityModal/EntityColorList.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,eAAO,MAAM,SAAS,UAAW;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,aAAa,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CAAE,gBAIzG,CAAC;AAEV,eAAO,MAAM,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAMxC,CAAC;AAEF,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;CAAE,EAAE,EAAE,CAAC;IAE5D,MAAM,UAAS;gBACf,KAAK,KAAA;IAKjB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,cAAc,CAQpB;IAEF,OAAO,CAAC,iBAAiB,CAWvB;IACF,OAAO,CAAC,eAAe,CAMrB;IACF,OAAO,CAAC,WAAW,CAUjB;IACF,oBAAoB;IAIpB,MAAM;CAgET"} \ No newline at end of file +{"version":3,"file":"EntityColorList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/EntityModal/EntityColorList.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,eAAO,MAAM,SAAS,UAAW;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CAAE,gBAIzG,CAAC;AAEV,eAAO,MAAM,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAMxC,CAAC;AAEF,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;CAAE,EAAE,EAAE,CAAC;IAE5D,MAAM,UAAS;gBACf,KAAK,KAAA;IAKjB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,cAAc,CAQpB;IAEF,OAAO,CAAC,iBAAiB,CAWvB;IACF,OAAO,CAAC,eAAe,CAMrB;IACF,OAAO,CAAC,WAAW,CAUjB;IACF,oBAAoB;IAIpB,MAAM;CAsET"} \ No newline at end of file diff --git a/types/UI/Components/EntityModal/EntityModal.d.ts b/types/UI/Components/EntityModal/EntityModal.d.ts index 0b20cea..f64e5d8 100644 --- a/types/UI/Components/EntityModal/EntityModal.d.ts +++ b/types/UI/Components/EntityModal/EntityModal.d.ts @@ -1,4 +1,5 @@ import * as React from 'react'; +import './CurveEntityModal.less'; export declare class EntityModal extends React.Component<{}, {}> { private event; constructor(props: any); diff --git a/types/UI/Components/EntityModal/EntityModal.d.ts.map b/types/UI/Components/EntityModal/EntityModal.d.ts.map index ca4e9f2..7d2cf03 100644 --- a/types/UI/Components/EntityModal/EntityModal.d.ts.map +++ b/types/UI/Components/EntityModal/EntityModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"EntityModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/EntityModal/EntityModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,qBACa,WAAY,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IACpD,OAAO,CAAC,KAAK,CAAW;gBACZ,KAAK,KAAA;IAKjB,aAAa;IAUb,oBAAoB;IAOpB,MAAM;CA+CT"} \ No newline at end of file +{"version":3,"file":"EntityModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/EntityModal/EntityModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,yBAAyB,CAAC;AAIjC,qBACa,WAAY,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAEpD,OAAO,CAAC,KAAK,CAAW;gBACZ,KAAK,KAAA;IAKjB,aAAa;IAUb,oBAAoB;IAOpB,MAAM;CA0DT"} \ No newline at end of file diff --git a/types/UI/Components/EntityModal/EntitySplitList.d.ts b/types/UI/Components/EntityModal/EntitySplitList.d.ts new file mode 100644 index 0000000..5fd1d96 --- /dev/null +++ b/types/UI/Components/EntityModal/EntitySplitList.d.ts @@ -0,0 +1,19 @@ +import * as React from 'react'; +import { EntityStore } from '../../Store/EntityStore'; +export declare class SplitModal extends React.Component<{ + store: EntityStore; +}, {}> { + private _min; + private _max; + private _input; + private _input2; + private _timer; + constructor(props: any); + private AdjustValue; + private handleInput; + private handleClick; + private handleFocus; + showValue: () => JSX.Element; + render(): JSX.Element; +} +//# sourceMappingURL=EntitySplitList.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/EntityModal/EntitySplitList.d.ts.map b/types/UI/Components/EntityModal/EntitySplitList.d.ts.map new file mode 100644 index 0000000..902ba25 --- /dev/null +++ b/types/UI/Components/EntityModal/EntitySplitList.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"EntitySplitList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/EntityModal/EntitySplitList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAGtD,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;CAAE,EAAE,EAAE,CAAC;IAExE,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,OAAO,CAAuC;IACtD,OAAO,CAAC,MAAM,CAAiB;gBAEnB,KAAK,KAAA;IAKjB,OAAO,CAAC,WAAW,CAYjB;IAEF,OAAO,CAAC,WAAW,CASjB;IAEF,OAAO,CAAC,WAAW,CAiCjB;IAEF,OAAO,CAAC,WAAW,CAGjB;IAEF,SAAS,oBAmBP;IAEF,MAAM;CAST"} \ No newline at end of file diff --git a/types/UI/Components/EntityModal/ExtrudeHoleModal.d.ts.map b/types/UI/Components/EntityModal/ExtrudeHoleModal.d.ts.map index f956c3c..9d061cc 100644 --- a/types/UI/Components/EntityModal/ExtrudeHoleModal.d.ts.map +++ b/types/UI/Components/EntityModal/ExtrudeHoleModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ExtrudeHoleModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/EntityModal/ExtrudeHoleModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAK5E,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,MAAM,EAAE,WAAW,CAAC;CAAE,CAAC;IAC3E,OAAO,CAAC,KAAK,CAAW;IACZ,OAAO,CAAC,MAAM,CAGxB;gBACU,KAAK,KAAA;IAIjB,aAAa;IASb,yBAAyB;IAMzB,oBAAoB;IAKpB,MAAM;IAkCN,OAAO,CAAC,OAAO,CAWb;IACF,OAAO,CAAC,MAAM,CAGZ;CACL"} \ No newline at end of file +{"version":3,"file":"ExtrudeHoleModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/EntityModal/ExtrudeHoleModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,WAAW,EAAE,MAAM,+CAA+C,CAAC;AAG5E,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,MAAM,EAAE,WAAW,CAAC;CAAE,CAAC;IAE3E,OAAO,CAAC,KAAK,CAAW;IACZ,OAAO,CAAC,MAAM,CAGxB;gBACU,KAAK,KAAA;IAIjB,aAAa;IASb,yBAAyB;IAMzB,oBAAoB;IAKpB,MAAM;IAoCN,OAAO,CAAC,OAAO,CAWb;IACF,OAAO,CAAC,MAAM,CAGZ;CACL"} \ No newline at end of file diff --git a/types/UI/Components/EntityModal/GetEntityProperty.d.ts.map b/types/UI/Components/EntityModal/GetEntityProperty.d.ts.map index e75f551..e8dfd97 100644 --- a/types/UI/Components/EntityModal/GetEntityProperty.d.ts.map +++ b/types/UI/Components/EntityModal/GetEntityProperty.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"GetEntityProperty.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/EntityModal/GetEntityProperty.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAOjE,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,YAuB3C"} \ No newline at end of file +{"version":3,"file":"GetEntityProperty.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/EntityModal/GetEntityProperty.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAUjE,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,YAiC3C"} \ No newline at end of file diff --git a/types/UI/Components/FilterDrillModal.d.ts b/types/UI/Components/FilterDrillModal.d.ts new file mode 100644 index 0000000..dcae45a --- /dev/null +++ b/types/UI/Components/FilterDrillModal.d.ts @@ -0,0 +1,6 @@ +import { AutoHoleFaceSettingStore } from "../../Add-on/AutoHoleFaceSetting"; +import "../Css/filterDrillModal.less"; +export declare const FilterDrillModal: (props: { + store?: AutoHoleFaceSettingStore; +}) => JSX.Element; +//# sourceMappingURL=FilterDrillModal.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/FilterDrillModal.d.ts.map b/types/UI/Components/FilterDrillModal.d.ts.map new file mode 100644 index 0000000..3237077 --- /dev/null +++ b/types/UI/Components/FilterDrillModal.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"FilterDrillModal.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/FilterDrillModal.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAM5E,OAAO,8BAA8B,CAAC;AAStC,eAAO,MAAM,gBAAgB,UAAqB;IAAE,KAAK,CAAC,EAAE,wBAAwB,CAAC;CAAE,gBAiMpF,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/Gallery/GalleryAdmin/GalleryDetailDrawer.d.ts b/types/UI/Components/Gallery/GalleryAdmin/GalleryDetailDrawer.d.ts index 56bb22b..23429b9 100644 --- a/types/UI/Components/Gallery/GalleryAdmin/GalleryDetailDrawer.d.ts +++ b/types/UI/Components/Gallery/GalleryAdmin/GalleryDetailDrawer.d.ts @@ -5,6 +5,8 @@ interface GalleryDetailDrawerProps { isOpen: boolean; handleOnClose: Function; gallery: IGalleryItem; + galleryFilterParams: any; + currPage: number; } export default class GalleryDetailDrawer extends Component { GalleryStore: GalleryStore; diff --git a/types/UI/Components/Gallery/GalleryAdmin/GalleryDetailDrawer.d.ts.map b/types/UI/Components/Gallery/GalleryAdmin/GalleryDetailDrawer.d.ts.map index c8bc1c0..f69f61e 100644 --- a/types/UI/Components/Gallery/GalleryAdmin/GalleryDetailDrawer.d.ts.map +++ b/types/UI/Components/Gallery/GalleryAdmin/GalleryDetailDrawer.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"GalleryDetailDrawer.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Gallery/GalleryAdmin/GalleryDetailDrawer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAa,SAAS,EAAE,MAAM,OAAO,CAAC;AAI/D,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAG9D,UAAU,wBAAwB;IAE9B,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,QAAQ,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,SAAS,CAAC,wBAAwB,CAAC;IAEhF,YAAY,EAAE,YAAY,CAA8B;IACxD,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,CAAgC;IACvD,kBAAkB,EAAE,OAAO,CAAS;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAS;IAC/C,cAAc,MAAa,MAAM,SAAS,CAAC,eAAe,CAAC,mBAyBzD;IACF,MAAM;CAwIT"} \ No newline at end of file +{"version":3,"file":"GalleryDetailDrawer.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Gallery/GalleryAdmin/GalleryDetailDrawer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAa,MAAM,OAAO,CAAC;AAG/D,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAG9D,UAAU,wBAAwB;IAE9B,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,QAAQ,CAAC;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,mBAAmB,MAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,SAAS,CAAC,wBAAwB,CAAC;IAEhF,YAAY,EAAE,YAAY,CAA8B;IACxD,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,CAAgC;IACvD,kBAAkB,EAAE,OAAO,CAAS;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAS;IAC/C,cAAc,MAAa,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,mBAyBzD;IACF,MAAM;CAwIT"} \ No newline at end of file diff --git a/types/UI/Components/Gallery/GalleryAdmin/ManageClass.d.ts.map b/types/UI/Components/Gallery/GalleryAdmin/ManageClass.d.ts.map index 9f1a782..ddb30a1 100644 --- a/types/UI/Components/Gallery/GalleryAdmin/ManageClass.d.ts.map +++ b/types/UI/Components/Gallery/GalleryAdmin/ManageClass.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ManageClass.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Gallery/GalleryAdmin/ManageClass.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAa,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAI/D,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS;IAE9C,YAAY,EAAE,YAAY,CAA8B;IAExD,gBAAgB,EAAE,SAAS,CAAC,cAAc,CAAC,CAA+B;IAE1E,QAAQ,EAAE,cAAc,CAAC;IAEzB,IAAI,eAAoB;IAExB,MAAM,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAiC;IAExD,SAAS,EAAE,MAAM,CAAS;IAE1B,WAAW,EAAE,OAAO,CAAS;IAE7B,OAAO,EAAE,OAAO,CAAS;IAErC,mBAAmB,aAWjB;IAEF,mBAAmB,MAAa,MAAM,SAAS,mBAyB7C;IAEI,iBAAiB;IAavB,oBAAoB,IAAI,IAAI;IAI5B,MAAM;CAmET;AACD,qBACa,SAAU,SAAQ,SAAS,CAAC;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;CAAE,CAAC;IAE7E,YAAY,EAAE,YAAY,CAA8B;IACxD,MAAM,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAiC;IACxD,MAAM,EAAE,OAAO,CAAS;IACxB,IAAI;;;MAAgE;IACpE,OAAO,EAAE,OAAO,CAAS;IACzB,iBAAiB,EAAE,OAAO,CAAS;IAC/C,QAAQ,MAAa,MAAM,SAAS,CAAC,eAAe,CAAC,mBAyBnD;IACF,WAAW,aAAoB,MAAM,mBAkBnC;IACF,MAAM;CA8ET"} \ No newline at end of file +{"version":3,"file":"ManageClass.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Gallery/GalleryAdmin/ManageClass.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAa,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAI/D,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS;IAE9C,YAAY,EAAE,YAAY,CAA8B;IAExD,gBAAgB,EAAE,SAAS,CAAC,cAAc,CAAC,CAA+B;IAE1E,QAAQ,EAAE,cAAc,CAAC;IAEzB,IAAI,eAAoB;IAExB,MAAM,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAiC;IAExD,SAAS,EAAE,MAAM,CAAS;IAE1B,WAAW,EAAE,OAAO,CAAS;IAE7B,OAAO,EAAE,OAAO,CAAS;IAErC,mBAAmB,aAWjB;IAEF,mBAAmB,MAAa,KAAK,CAAC,SAAS,mBAyB7C;IAEI,iBAAiB;IAavB,oBAAoB,IAAI,IAAI;IAI5B,MAAM;CAmET;AACD,qBACa,SAAU,SAAQ,SAAS,CAAC;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;CAAE,CAAC;IAE7E,YAAY,EAAE,YAAY,CAA8B;IACxD,MAAM,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAiC;IACxD,MAAM,EAAE,OAAO,CAAS;IACxB,IAAI;;;MAAgE;IACpE,OAAO,EAAE,OAAO,CAAS;IACzB,iBAAiB,EAAE,OAAO,CAAS;IAC/C,QAAQ,MAAa,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,mBAyBnD;IACF,WAAW,aAAoB,MAAM,mBAkBnC;IACF,MAAM;CA8ET"} \ No newline at end of file diff --git a/types/UI/Components/Gallery/GalleryAdmin/ManageGallery.d.ts.map b/types/UI/Components/Gallery/GalleryAdmin/ManageGallery.d.ts.map index c5cc163..e416140 100644 --- a/types/UI/Components/Gallery/GalleryAdmin/ManageGallery.d.ts.map +++ b/types/UI/Components/Gallery/GalleryAdmin/ManageGallery.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ManageGallery.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Gallery/GalleryAdmin/ManageGallery.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAa,SAAS,EAAE,MAAM,OAAO,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAM9D,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,SAAS;IAEhD,YAAY,EAAE,YAAY,CAA8B;IACxD,aAAa,EAAE,aAAa,CAA+B;IAC3D,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,CAAgC;IACvD,OAAO,EAAE,OAAO,CAAS;IACzB,UAAU,EAAE,OAAO,CAAS;IAC5B,WAAW,EAAE,YAAY,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAS;IACnC,mBAAmB;;;;;MAE7B;IACU,QAAQ,EAAE,MAAM,CAAK;IACjC,aAAa,aAIX;IACF,eAAe,eAAsB,MAAM,mBAQzC;IACF,UAAU,OAAc,MAAM,SAAS,CAAC,eAAe,CAAC,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,mBAO9F;IACI,iBAAiB;IAIvB,MAAM;CA6LT"} \ No newline at end of file +{"version":3,"file":"ManageGallery.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Gallery/GalleryAdmin/ManageGallery.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAa,MAAM,OAAO,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAK9D,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,SAAS;IAEhD,YAAY,EAAE,YAAY,CAA8B;IACxD,aAAa,EAAE,aAAa,CAA+B;IAC3D,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,CAAgC;IACvD,OAAO,EAAE,OAAO,CAAS;IACzB,UAAU,EAAE,OAAO,CAAS;IAC5B,WAAW,EAAE,YAAY,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAS;IACnC,mBAAmB;;;;;MAE7B;IACU,QAAQ,EAAE,MAAM,CAAK;IACjC,aAAa,aAIX;IACF,eAAe,eAAsB,MAAM,mBAUzC;IACF,UAAU,OAAc,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,mBAO9F;IACI,iBAAiB;IAIvB,MAAM;CA+LT"} \ No newline at end of file diff --git a/types/UI/Components/Gallery/GalleryList/GalleryIndexList.d.ts b/types/UI/Components/Gallery/GalleryList/GalleryIndexList.d.ts index 7cdc16c..eeecd8f 100644 --- a/types/UI/Components/Gallery/GalleryList/GalleryIndexList.d.ts +++ b/types/UI/Components/Gallery/GalleryList/GalleryIndexList.d.ts @@ -15,7 +15,7 @@ export default class GalleryIndexList extends Component { currPage: number; ReloadGalleryIndexList: (params: FetchGalleryIndexListParams) => Promise; FixGalleryItemWidth: () => void; - SwitchGalleryListType: (type: 'GRID' | 'LIST') => "GRID" | "LIST"; + SwitchGalleryListType: (type: "GRID" | "LIST") => "GRID" | "LIST"; componentDidMount(): Promise; componentWillUnmount(): void; render(): JSX.Element; diff --git a/types/UI/Components/Gallery/GalleryStore.d.ts.map b/types/UI/Components/Gallery/GalleryStore.d.ts.map index 06f72a9..1723a48 100644 --- a/types/UI/Components/Gallery/GalleryStore.d.ts.map +++ b/types/UI/Components/Gallery/GalleryStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"GalleryStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Gallery/GalleryStore.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAU,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE7E,OAAO,KAAK,EAAE,EAAa,SAAS,EAAE,MAAM,OAAO,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAI5D,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAMlE,OAAO,EAAsB,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAsB,MAAM,+BAA+B,CAAC;AAG/F,MAAM,CAAC,OAAO,OAAO,YAAY;;IAM7B,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,CAAwB;IACrD,kBAAkB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAuB;IAC5D,UAAU,EAAE,UAAU,CAA4B;IAClD,IAAI,EAAE,YAAY,CAAoB;IAC1B,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAe7D;IACS,OAAO,EAAE,MAAM,CAAK;IAEpB,aAAa,EAAE,MAAM,CAAkB;IACvC,eAAe,EAAE,eAAe,EAAE,CAAoC;IACtE,0BAA0B,EAAE,MAAM,CAAQ;IAC1C,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAU;IACnC,YAAY,EAAE,MAAM,CAAiB;IACrC,kBAAkB,EAAE,OAAO,CAAS;IACpC,eAAe,EAAE,GAAG,CAAC;IACrB,gBAAgB,QAAM;IACtB,gBAAgB,EAAE,YAAY,EAAE,CAAM;IACtC,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,mBAAmB,EAAE,MAAM,CAAK;IAChC,gBAAgB,EAAE,YAAY,EAAE,CAAM;IAClD,kBAAkB,sBAgBhB;IACF,WAAW,MAAO,qBAAqB,UAiCrC;IACF,QAAQ;mBAA6C,UAAU,OAAO,CAAC;qBAAe,uBAAuB;eAgB3G;IACF,WAAW,eAAsB,MAAM,mBA8BrC;IACF,uBAAuB,WAAkB,uBAAuB,mBAa9D;IACF,cAAc,gBAAuB,MAAM,EAAE,mBAgB3C;IACF,uBAAuB,MAAO,MAAM,WAAW,CAAC,gBAAgB,CAAC,UAAU,UAAU,gBAAgB,CAAC,UA8BpG;IACF,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC;IACpC,MAAM,CAAC,WAAW;CAMrB"} \ No newline at end of file +{"version":3,"file":"GalleryStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Gallery/GalleryStore.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,EAAU,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE7E,OAAO,KAAK,EAAE,EAAa,SAAS,EAAE,MAAM,OAAO,CAAC;AAGpD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAI5D,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAMlE,OAAO,EAAsB,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAsB,MAAM,+BAA+B,CAAC;AAG/F,MAAM,CAAC,OAAO,OAAO,YAAY;;IAM7B,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,CAAwB;IACrD,kBAAkB,EAAE,SAAS,CAAC,MAAM,CAAC,CAAuB;IAC5D,UAAU,EAAE,UAAU,CAA4B;IAClD,IAAI,EAAE,YAAY,CAAoB;IAC1B,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAe7D;IACS,OAAO,EAAE,MAAM,CAAK;IAEpB,aAAa,EAAE,MAAM,CAAkB;IACvC,eAAe,EAAE,eAAe,EAAE,CAAoC;IACtE,0BAA0B,EAAE,MAAM,CAAQ;IAC1C,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAU;IACnC,YAAY,EAAE,MAAM,CAAiB;IACrC,kBAAkB,EAAE,OAAO,CAAS;IACpC,eAAe,EAAE,GAAG,CAAC;IACrB,gBAAgB,QAAM;IACtB,gBAAgB,EAAE,YAAY,EAAE,CAAM;IACtC,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,mBAAmB,EAAE,MAAM,CAAK;IAChC,gBAAgB,EAAE,YAAY,EAAE,CAAM;IAClD,kBAAkB,sBAgBhB;IACF,WAAW,MAAO,qBAAqB,UAiCrC;IACF,QAAQ,+BAAgC;QAAE,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QAAC,WAAW,EAAE,uBAAuB,CAAC;KAAE,UAgB9G;IACF,WAAW,eAAsB,MAAM,mBA8BrC;IACF,uBAAuB,WAAkB,uBAAuB,mBAa9D;IACF,cAAc,gBAAuB,MAAM,EAAE,mBAgB3C;IACF,uBAAuB,MAAO,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,UAAU,SAAS,CAAC,gBAAgB,CAAC,UA8BpG;IACF,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC;IACpC,MAAM,CAAC,WAAW;CAMrB"} \ No newline at end of file diff --git a/types/UI/Components/Gallery/StateIcon.d.ts b/types/UI/Components/Gallery/StateIcon.d.ts index 82fd96c..17cf5e9 100644 --- a/types/UI/Components/Gallery/StateIcon.d.ts +++ b/types/UI/Components/Gallery/StateIcon.d.ts @@ -1,4 +1,3 @@ -/// import './less/StateIcon.less'; export declare enum State { wating = "\u7B49\u5F85\u5BA1\u6838", diff --git a/types/UI/Components/Gallery/StateIcon.d.ts.map b/types/UI/Components/Gallery/StateIcon.d.ts.map index fb6b376..7ad8571 100644 --- a/types/UI/Components/Gallery/StateIcon.d.ts.map +++ b/types/UI/Components/Gallery/StateIcon.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"StateIcon.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Gallery/StateIcon.tsx"],"names":[],"mappings":";AACA,OAAO,uBAAuB,CAAC;AAC/B,oBAAY,KAAK;IAEb,MAAM,6BAAS;IACf,KAAK,iBAAO;IACZ,KAAK,6BAAS;IACd,UAAU,6BAAS;CACtB;AACD,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAAE,GAAG,GAAG,CAAC,OAAO,CA8ClF"} \ No newline at end of file +{"version":3,"file":"StateIcon.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Gallery/StateIcon.tsx"],"names":[],"mappings":"AACA,OAAO,uBAAuB,CAAC;AAC/B,oBAAY,KAAK;IAEb,MAAM,6BAAS;IACf,KAAK,iBAAO;IACZ,KAAK,6BAAS;IACd,UAAU,6BAAS;CACtB;AACD,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAAE,GAAG,GAAG,CAAC,OAAO,CA8ClF"} \ No newline at end of file diff --git a/types/UI/Components/Gallery/UploadGalleryDialog.d.ts.map b/types/UI/Components/Gallery/UploadGalleryDialog.d.ts.map index cab37e2..2725f58 100644 --- a/types/UI/Components/Gallery/UploadGalleryDialog.d.ts.map +++ b/types/UI/Components/Gallery/UploadGalleryDialog.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"UploadGalleryDialog.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Gallery/UploadGalleryDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAa,SAAS,EAAE,MAAM,OAAO,CAAC;AAI/D,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAG1C,UAAU,wBAAwB;IAE9B,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,SAAS,CAAC,wBAAwB,CAAC;IAEhF,YAAY,EAAE,YAAY,CAA8B;IACxD,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,CAAgC;IACnE,UAAU,EAAE,UAAU,CAAkB;IACxC,MAAM,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAiC;IACpE,gBAAgB,MAAa,MAAM,SAAS,CAAC,eAAe,CAAC,mBA+B3D;IACF,MAAM;CAqET"} \ No newline at end of file +{"version":3,"file":"UploadGalleryDialog.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Gallery/UploadGalleryDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAa,SAAS,EAAE,MAAM,OAAO,CAAC;AAI/D,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAG1C,UAAU,wBAAwB;IAE9B,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,SAAS,CAAC,wBAAwB,CAAC;IAEhF,YAAY,EAAE,YAAY,CAA8B;IACxD,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,CAAgC;IACnE,UAAU,EAAE,UAAU,CAAkB;IACxC,MAAM,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAiC;IACpE,gBAAgB,MAAa,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,mBA+B3D;IACF,MAAM;CAqET"} \ No newline at end of file diff --git a/types/UI/Components/HeadCeiling/HeadCeilingContourList.d.ts.map b/types/UI/Components/HeadCeiling/HeadCeilingContourList.d.ts.map index 9a9f5ab..d5b5955 100644 --- a/types/UI/Components/HeadCeiling/HeadCeilingContourList.d.ts.map +++ b/types/UI/Components/HeadCeiling/HeadCeilingContourList.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HeadCeilingContourList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/HeadCeiling/HeadCeilingContourList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,sCAAsC,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,uCAAuC,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,WAAW,oBAAoB;IAEjC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,UAAU,MAAC;KAAE,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAEnE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACpC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,GAAG,IAAI,GAAG,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;IACrI,sBAAsB,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAC;CACzD;AAED,qBACa,sBAAuB,SAAQ,KAAK,CAAC,SAAS,CAAC,oBAAoB,EAAE;IAAE,iBAAiB,EAAE,OAAO,CAAC;CAAE,CAAC;gBAClG,KAAK,KAAA;IAOjB,iBAAiB,MAAO,gBAAgB,CAAC,WAAW,CAAC,UAAU,GAAG,UAIhE;IAEF,aAAa,sBAaX;IAGF,gBAAgB,MAAO,gBAAgB,CAAC,WAAW,CAAC,uBA6BlD;IACK,MAAM;CAehB"} \ No newline at end of file +{"version":3,"file":"HeadCeilingContourList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/HeadCeiling/HeadCeilingContourList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,sCAAsC,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,uCAAuC,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,2CAA2C,CAAC;AAErE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,WAAW,oBAAoB;IAEjC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE;QAAE,UAAU,MAAC;KAAE,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAEnE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACpC,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,QAAQ,GAAG,IAAI,GAAG,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,QAAQ,KAAK,IAAI,CAAC;IACrI,sBAAsB,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAC;CACzD;AAED,qBACa,sBAAuB,SAAQ,KAAK,CAAC,SAAS,CAAC,oBAAoB,EAAE;IAAE,iBAAiB,EAAE,OAAO,CAAC;CAAE,CAAC;gBAClG,KAAK,KAAA;IAOjB,iBAAiB,MAAO,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,GAAG,UAIhE;IAEF,aAAa,sBAaX;IAGF,gBAAgB,MAAO,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,uBA6BlD;IACK,MAAM;CAehB"} \ No newline at end of file diff --git a/types/UI/Components/HeadCeiling/HeadCeilingInfoConfigPanel.d.ts b/types/UI/Components/HeadCeiling/HeadCeilingInfoConfigPanel.d.ts index 671394e..53d9fba 100644 --- a/types/UI/Components/HeadCeiling/HeadCeilingInfoConfigPanel.d.ts +++ b/types/UI/Components/HeadCeiling/HeadCeilingInfoConfigPanel.d.ts @@ -2,14 +2,11 @@ import React from "react"; import { DirectoryId } from "../../../Common/Request"; import { HeadCeilingInfoStore } from "../../Store/HeadCeilingStore/HeadCeilingInfoStore"; import { HeadCeilingProfileMaterialStore } from "../../Store/HeadCeilingStore/HeadCeilingMaterialStore"; +import { Display } from "../../Store/OptionInterface/BulkheadCeilingOption"; import { BoardModalType } from "../Board/BoardModalType"; import { ModalState } from "../Modal/ModalInterface"; import { OnlySelectPanelStore } from "../OnlySelectManage/OnlySelectPanelStore"; import './HeadCeiling.less'; -export declare enum Display { - Block = "block", - None = "none" -} interface HeadCeilingInfoConfigPanelProps { store: HeadCeilingInfoStore | HeadCeilingProfileMaterialStore; directoryId: DirectoryId; diff --git a/types/UI/Components/HeadCeiling/HeadCeilingInfoConfigPanel.d.ts.map b/types/UI/Components/HeadCeiling/HeadCeilingInfoConfigPanel.d.ts.map index 849348a..02b6e23 100644 --- a/types/UI/Components/HeadCeiling/HeadCeilingInfoConfigPanel.d.ts.map +++ b/types/UI/Components/HeadCeiling/HeadCeilingInfoConfigPanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HeadCeilingInfoConfigPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/HeadCeiling/HeadCeilingInfoConfigPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAItD,OAAO,EAAyB,oBAAoB,EAAmB,MAAM,mDAAmD,CAAC;AACjI,OAAO,EAAE,+BAA+B,EAAoB,MAAM,uDAAuD,CAAC;AAE1H,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAGhF,OAAO,oBAAoB,CAAC;AAG5B,oBAAY,OAAO;IAEf,KAAK,UAAU;IACf,IAAI,SAAS;CAChB;AAED,UAAU,+BAA+B;IAErC,KAAK,EAAE,oBAAoB,GAAG,+BAA+B,CAAC;IAC9D,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,qBACa,0BAA2B,SAAQ,KAAK,CAAC,SAAS,CAAC,+BAA+B,EAAE,EAAE,CAAC;IAEpF,QAAQ,UAAgB;IACpC,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,MAAM,CAAY;IAC1B,qBAAqB,EAAE,WAAW,CAAC;IACnC,YAAY,EAAE,oBAAoB,CAA4C;gBAElE,KAAK,KAAA;IAmCjB,iBAAiB;IAoBjB,oBAAoB;IAQpB,OAAO,WAAkB,UAAU,mBA2DjC;IAGF,mBAAmB,UAAW,OAAO,UASnC;IAGF,SAAS;IAOT,MAAM;CAqDT"} \ No newline at end of file +{"version":3,"file":"HeadCeilingInfoConfigPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/HeadCeiling/HeadCeilingInfoConfigPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAItD,OAAO,EAAyB,oBAAoB,EAAmB,MAAM,mDAAmD,CAAC;AACjI,OAAO,EAAE,+BAA+B,EAAoB,MAAM,uDAAuD,CAAC;AAC1H,OAAO,EAA+D,OAAO,EAAE,MAAM,mDAAmD,CAAC;AACzI,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAIhF,OAAO,oBAAoB,CAAC;AAE5B,UAAU,+BAA+B;IAErC,KAAK,EAAE,oBAAoB,GAAG,+BAA+B,CAAC;IAC9D,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,qBACa,0BAA2B,SAAQ,KAAK,CAAC,SAAS,CAAC,+BAA+B,EAAE,EAAE,CAAC;IAEpF,QAAQ,UAAgB;IACpC,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,MAAM,CAAY;IAC1B,qBAAqB,EAAE,WAAW,CAAC;IACnC,YAAY,EAAE,oBAAoB,CAA4C;gBAElE,KAAK,KAAA;IAkCjB,iBAAiB;IAoBjB,oBAAoB;IAQpB,OAAO,WAAkB,UAAU,mBA2DjC;IAGF,mBAAmB,UAAW,OAAO,UASnC;IAGF,SAAS;IAOT,MAAM;CAyCT"} \ No newline at end of file diff --git a/types/UI/Components/HeadCeiling/HeadCeilingInfoItem.d.ts b/types/UI/Components/HeadCeiling/HeadCeilingInfoItem.d.ts index 263ba3e..b9c0801 100644 --- a/types/UI/Components/HeadCeiling/HeadCeilingInfoItem.d.ts +++ b/types/UI/Components/HeadCeiling/HeadCeilingInfoItem.d.ts @@ -1,15 +1,14 @@ import React from "react"; import { ICeilingProfileMaterialItem } from "../../Store/HeadCeilingStore/HeadCeilingMaterialStore"; -import { ICeilingItem } from "../../Store/OptionInterface/BulkheadCeilingOption"; +import { Display, ICeilingItem } from "../../Store/OptionInterface/BulkheadCeilingOption"; import { BoardModalType } from "../Board/BoardModalType"; import { OnlySelectPanelStore } from "../OnlySelectManage/OnlySelectPanelStore"; import './HeadCeiling.less'; -import { Display } from "./HeadCeilingInfoConfigPanel"; interface ItemPorps { item: ICeilingItem | ICeilingProfileMaterialItem; itemIndex: number; selectStore: OnlySelectPanelStore; - configType: BoardModalType; + configType?: BoardModalType; display: (display: Display) => void; } export declare class HeadCeilingInfoItem extends React.Component { diff --git a/types/UI/Components/HeadCeiling/HeadCeilingInfoItem.d.ts.map b/types/UI/Components/HeadCeiling/HeadCeilingInfoItem.d.ts.map index 03e2556..ae46ef8 100644 --- a/types/UI/Components/HeadCeiling/HeadCeilingInfoItem.d.ts.map +++ b/types/UI/Components/HeadCeiling/HeadCeilingInfoItem.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HeadCeilingInfoItem.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/HeadCeiling/HeadCeilingInfoItem.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,2BAA2B,EAAE,MAAM,uDAAuD,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,mDAAmD,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAEvD,UAAU,SAAS;IAEf,IAAI,EAAE,YAAY,GAAG,2BAA2B,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,oBAAoB,CAAC;IAClC,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAED,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC;IAEnE,WAAW,UAAuE;IAElF,MAAM;CAqET"} \ No newline at end of file +{"version":3,"file":"HeadCeilingInfoItem.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/HeadCeiling/HeadCeilingInfoItem.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,2BAA2B,EAAE,MAAM,uDAAuD,CAAC;AACpG,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,mDAAmD,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAChF,OAAO,oBAAoB,CAAC;AAE5B,UAAU,SAAS;IAEf,IAAI,EAAE,YAAY,GAAG,2BAA2B,CAAC;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,oBAAoB,CAAC;IAClC,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC;AAED,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC;IAEnE,WAAW,UAAuE;IAElF,MAAM;CAkFT"} \ No newline at end of file diff --git a/types/UI/Components/INumericInput.d.ts b/types/UI/Components/INumericInput.d.ts index a6d19bf..e40ddc6 100644 --- a/types/UI/Components/INumericInput.d.ts +++ b/types/UI/Components/INumericInput.d.ts @@ -1,4 +1,4 @@ -import { NumericInput } from "@blueprintjs/core"; +import { Intent, NumericInput } from "@blueprintjs/core"; import React from "react"; interface INumericInputProps { value: number; @@ -7,10 +7,13 @@ interface INumericInputProps { max?: number; stepSize?: number; float?: number; - onValueChange?: (valueAsNumber: number, valueAsString: string, inputElement: HTMLInputElement) => void; + onValueChange?: (valueAsNumber: number) => void; onBlur?: (e: React.FocusEvent) => void; style?: React.CSSProperties; tooltip?: boolean; + tooltipValue?: string; + intent?: Intent; + inputRef?: React.RefObject; } export declare class INumericInput extends React.Component { _InputRef: React.RefObject; @@ -19,6 +22,7 @@ export declare class INumericInput extends React.Component Promise; + handleShowOptimize: () => Promise; handleOpenFile: (file: IFileInfo, e: React.MouseEvent) => Promise; private StartDesign; private MyDesign; diff --git a/types/UI/Components/MainContent/Content.d.ts.map b/types/UI/Components/MainContent/Content.d.ts.map index 756f123..adc3a35 100644 --- a/types/UI/Components/MainContent/Content.d.ts.map +++ b/types/UI/Components/MainContent/Content.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Content.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/MainContent/Content.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAc,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAI1D,OAAO,oBAAoB,CAAC;AAE5B,qBAEa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,CAAC;IAEjE,OAAO,CAAC,SAAS,CAA4D;IAC7E,UAAU,SAAqB;gBAC/B,KAAK,KAAA;IAQjB,gBAAgB,sBAKd;IACF,cAAc,SAAgB,SAAS,KAAK,gBAAgB,CAAC,WAAW,CAAC,mBAUvE;IAEF,OAAO,CAAC,WAAW,CAWjB;IAEF,OAAO,CAAC,QAAQ,CAuCd;IAEF,aAAa,aAGX;IAEI,iBAAiB;IAsBvB,oBAAoB;IAIpB,MAAM;IAiEN,OAAO,CAAC,eAAe,CAiBrB;IACF,OAAO,CAAC,OAAO,CAMb;CACL"} \ No newline at end of file +{"version":3,"file":"Content.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/MainContent/Content.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAc,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAI1D,OAAO,oBAAoB,CAAC;AAE5B,qBAEa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,CAAC;IAEjE,OAAO,CAAC,SAAS,CAA4D;IAC7E,UAAU,SAAqB;gBAC/B,KAAK,KAAA;IAQjB,gBAAgB,sBAKd;IAEF,kBAAkB,sBAKhB;IAEF,cAAc,SAAgB,SAAS,KAAK,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,mBAUvE;IAEF,OAAO,CAAC,WAAW,CAqBjB;IAEF,OAAO,CAAC,QAAQ,CAuCd;IAEF,aAAa,aAGX;IAEI,iBAAiB;IAsBvB,oBAAoB;IAIpB,MAAM;IAiEN,OAAO,CAAC,eAAe,CAiBrB;IACF,OAAO,CAAC,OAAO,CAMb;CACL"} \ No newline at end of file diff --git a/types/UI/Components/MainContent/Login.d.ts.map b/types/UI/Components/MainContent/Login.d.ts.map index fd66bca..170e3af 100644 --- a/types/UI/Components/MainContent/Login.d.ts.map +++ b/types/UI/Components/MainContent/Login.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Login.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/MainContent/Login.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,aAAa,EAA2B,MAAM,yBAAyB,CAAC;AAKjF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAO1D,UAAU,WAAW;IAEjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAGD,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,QAyCjD;AAKD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,EAAE,WAAW,CAAC;IAE3E,UAAU,UAAS;gBAEnB,KAAK,KAAA;IASjB,WAAW,sBAqFT;IAEF,MAAM;CAiGT"} \ No newline at end of file +{"version":3,"file":"Login.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/MainContent/Login.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,aAAa,EAA2B,MAAM,yBAAyB,CAAC;AAOjF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAQ1D,UAAU,WAAW;IAEjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAGD,wBAAgB,cAAc,CAAC,IAAI,EAAE,aAAa,QAyCjD;AAKD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,EAAE,WAAW,CAAC;IAG3E,UAAU,UAAS;gBAEnB,KAAK,KAAA;IASjB,WAAW,sBAuGT;IAEF,MAAM;CAiGT"} \ No newline at end of file diff --git a/types/UI/Components/MainContent/Regist.d.ts b/types/UI/Components/MainContent/Regist.d.ts index 574247d..dfff25e 100644 --- a/types/UI/Components/MainContent/Regist.d.ts +++ b/types/UI/Components/MainContent/Regist.d.ts @@ -4,7 +4,9 @@ declare enum InputType { PSW = 0, ComfirmPSW = 1, PHONE = 2, - OK = 3 + OK = 3, + InviteCode = 4, + UserName = 5 } export default class Regist extends React.Component<{ store?: TopPanelStore; @@ -18,6 +20,7 @@ export default class Regist extends React.Component<{ private registInput; private openAgreement; private phoneRegex; + private inviteCode; private pswRegex; registering: boolean; constructor(props: any); diff --git a/types/UI/Components/MainContent/Regist.d.ts.map b/types/UI/Components/MainContent/Regist.d.ts.map index 836905f..dd98803 100644 --- a/types/UI/Components/MainContent/Regist.d.ts.map +++ b/types/UI/Components/MainContent/Regist.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Regist.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/MainContent/Regist.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAmB1D,aAAK,SAAS;IAEV,GAAG,IAAI;IACP,UAAU,IAAI;IACd,KAAK,IAAI;IACT,EAAE,IAAI;CACT;AAKD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,CAAC;IAC/D,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAqB;IAEvC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,WAAW,CAAe;IAC9C,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,QAAQ,CAAwC;IAC5C,WAAW,EAAE,OAAO,CAAS;gBAC7B,KAAK,KAAA;IAgBjB,YAAY,sBA+DV;IACF,mBAAmB,SAAgB,MAAM,sBAMvC;IACF,SAAS,sBAoBP;IACF,OAAO,CAAC,OAAO,CAkBb;IAEF,6BAA6B;IA+B7B,SAAS,SAAgB,SAAS,mBA0EhC;IACF,MAAM;CAkKT"} \ No newline at end of file +{"version":3,"file":"Regist.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/MainContent/Regist.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAuB1D,aAAK,SAAS;IAEV,GAAG,IAAI;IACP,UAAU,IAAI;IACd,KAAK,IAAI;IACT,EAAE,IAAI;IACN,UAAU,IAAI;IACd,QAAQ,IAAI;CACf;AAKD,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,CAAC;IAE/D,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,UAAU,CAAqB;IAEvC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,WAAW,CAAe;IAC9C,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,QAAQ,CAAwC;IAC5C,WAAW,EAAE,OAAO,CAAS;gBAC7B,KAAK,KAAA;IAoBjB,YAAY,sBAwEV;IACF,mBAAmB,SAAgB,MAAM,sBAMvC;IACF,SAAS,sBAoBP;IACF,OAAO,CAAC,OAAO,CAkBb;IAEF,6BAA6B;IA+B7B,SAAS,SAAgB,SAAS,mBAyFhC;IACF,MAAM;CAyMT"} \ No newline at end of file diff --git a/types/UI/Components/MaterialExplorer.d.ts b/types/UI/Components/MaterialExplorer.d.ts index 3d976a0..5cfcdd4 100644 --- a/types/UI/Components/MaterialExplorer.d.ts +++ b/types/UI/Components/MaterialExplorer.d.ts @@ -1,7 +1,10 @@ import * as React from 'react'; import { PhysicalMaterialRecord } from '../../DatabaseServices/PhysicalMaterialRecord'; import { MaterialTable } from '../../DatabaseServices/Tables/MaterialTable'; +import { Asset } from './Asset'; import './MaterialExplorer.less'; +export declare const MATERIALLOCK = "\u6750\u8D28\u9501"; +export declare const EDITMATERIAL = "\u7F16\u8F91\u6750\u8D28"; /** * 材质浏览器 * 没有使用装饰器来实现右键菜单的原因: @@ -11,11 +14,13 @@ export declare class MaterialExplorer extends React.Component<{ materialTable: MaterialTable; }, {}> { private _MaterialListPanelRef; + AssetRefs: React.RefObject[]; private _selectMtls; private _RemoveFunc; constructor(p: any, s: any); componentDidMount(): void; componentWillUnmount(): void; + updateAssetRef: () => void; handleDrop: (e: DragEvent) => Promise; handleClick: (mat: PhysicalMaterialRecord) => void; render(): JSX.Element; diff --git a/types/UI/Components/MaterialExplorer.d.ts.map b/types/UI/Components/MaterialExplorer.d.ts.map index d00af6d..d55b5ad 100644 --- a/types/UI/Components/MaterialExplorer.d.ts.map +++ b/types/UI/Components/MaterialExplorer.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"MaterialExplorer.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/MaterialExplorer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AAEvF,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAW5E,OAAO,yBAAyB,CAAC;AAmBjC;;;;EAIE;AACF,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,aAAa,EAAE,aAAa,CAAC;CAAE,EAAE,EAAE,CAAC;IAExF,OAAO,CAAC,qBAAqB,CAAqC;IACtD,OAAO,CAAC,WAAW,CAAqC;IACpE,OAAO,CAAC,WAAW,CAAW;gBAElB,CAAC,KAAA,EAAE,CAAC,KAAA;IAkDhB,iBAAiB;IAKjB,oBAAoB;IAMpB,UAAU,MAAa,SAAS,mBAoD9B;IACF,WAAW,QAAS,sBAAsB,UAYxC;IACF,MAAM;IAyFN,oBAAoB,aAKlB;CACL"} \ No newline at end of file +{"version":3,"file":"MaterialExplorer.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/MaterialExplorer.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAQ5E,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,yBAAyB,CAAC;AAmBjC,eAAO,MAAM,YAAY,uBAAQ,CAAC;AAClC,eAAO,MAAM,YAAY,6BAAS,CAAC;AAEnC;;;;EAIE;AACF,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,aAAa,EAAE,aAAa,CAAC;CAAE,EAAE,EAAE,CAAC;IAExF,OAAO,CAAC,qBAAqB,CAAqC;IAClE,SAAS,2BAGN;IACS,OAAO,CAAC,WAAW,CAAqC;IACpE,OAAO,CAAC,WAAW,CAAkB;gBAEzB,CAAC,KAAA,EAAE,CAAC,KAAA;IAiGhB,iBAAiB;IAKjB,oBAAoB;IAQpB,cAAc,aAMZ;IACF,UAAU,MAAa,SAAS,mBAW9B;IACF,WAAW,QAAS,sBAAsB,UAYxC;IACF,MAAM;IA6GN,oBAAoB,aAKlB;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Modal/CadModal.d.ts b/types/UI/Components/Modal/CadModal.d.ts index be0e08b..9471e6f 100644 --- a/types/UI/Components/Modal/CadModal.d.ts +++ b/types/UI/Components/Modal/CadModal.d.ts @@ -31,6 +31,7 @@ export declare class CADModal { /**锁定后不能关闭和最大化 */ IsLock: boolean; IsLightModal: boolean; + IsBBSModal: Boolean; constructor(_rootContainer: HTMLElement, _rootModal?: CADModal); private RegisterEvent; private onFocus; diff --git a/types/UI/Components/Modal/CadModal.d.ts.map b/types/UI/Components/Modal/CadModal.d.ts.map index 218e29e..09dce70 100644 --- a/types/UI/Components/Modal/CadModal.d.ts.map +++ b/types/UI/Components/Modal/CadModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CadModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/CadModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAIzE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,eAAO,MAAM,QAAQ,kBAAkB,CAAC;AAExC,qBAAa,QAAQ;IAsBwB,OAAO,CAAC,UAAU,CAAC;IApB5D,MAAM,CAAC,gBAAgB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;KAAE,CAA2B;IAClF,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,OAAO,CAAS;IACzB,WAAW,EAAE,OAAO,CAAS;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,WAAW,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,WAAW,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;KAAE,CAAC;IAC/C,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,sBAAsB,CAAkB;IAChD,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,iBAAiB;IACjB,MAAM,UAAS;IACf,YAAY,UAAS;gBACT,cAAc,EAAE,WAAW,EAAU,UAAU,CAAC,EAAE,QAAQ;IAStE,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,OAAO,CAkCb;IACF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,GAAE,WAAgB;IAQpI,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,GAAE,WAAgB;IA8FjG,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,GAAE,WAAgB;IAwEjG,WAAW,CAAC,GAAG,EAAE,aAAa;IA2C9B,OAAO,CAAC,SAAS;IAuDX,OAAO,CAAC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KAAE;IAY3D,QAAQ;IAwCR,cAAc;IAwBd,iBAAiB,CAAC,WAAW,CAAC,EAAE,OAAO;IAIvC,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,WAAW;IAKnB,KAAK;IAKL,aAAa;IAIb,OAAO;IASP,MAAM;CAIT"} \ No newline at end of file +{"version":3,"file":"CadModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/CadModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAMzE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,eAAO,MAAM,QAAQ,kBAAkB,CAAC;AAExC,qBAAa,QAAQ;IAuBwB,OAAO,CAAC,UAAU,CAAC;IArB5D,MAAM,CAAC,gBAAgB,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;KAAE,CAA2B;IAClF,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,OAAO,CAAS;IACzB,WAAW,EAAE,OAAO,CAAS;IAC7B,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY,EAAE,WAAW,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,WAAW,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;KAAE,CAAC;IAC/C,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,CAAC,sBAAsB,CAAkB;IAChD,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,YAAY,CAAS;IAC7B,iBAAiB;IACjB,MAAM,UAAS;IACf,YAAY,UAAS;IACrB,UAAU,EAAE,OAAO,CAAS;gBAChB,cAAc,EAAE,WAAW,EAAU,UAAU,CAAC,EAAE,QAAQ;IAStE,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,OAAO,CAqCb;IACF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,GAAE,WAAgB;IAQpI,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,GAAE,WAAgB;IAsIjG,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,GAAE,WAAgB;IAsFjG,WAAW,CAAC,GAAG,EAAE,aAAa;IA0D9B,OAAO,CAAC,SAAS;IAyDX,OAAO,CAAC,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KAAE;IAY3D,QAAQ;IAqDR,cAAc;IAsCd,iBAAiB,CAAC,WAAW,CAAC,EAAE,OAAO;IAIvC,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,WAAW;IAKnB,KAAK;IAKL,aAAa;IAIb,OAAO;IASP,MAAM;CAIT"} \ No newline at end of file diff --git a/types/UI/Components/Modal/HardwareModal.d.ts b/types/UI/Components/Modal/HardwareModal.d.ts index d0b924d..8376288 100644 --- a/types/UI/Components/Modal/HardwareModal.d.ts +++ b/types/UI/Components/Modal/HardwareModal.d.ts @@ -16,7 +16,7 @@ export declare function GetHardwareModal(Com: any, props: IMetalsModal): { setState(state: {} | ((prevState: Readonly<{}>, props: Readonly<{}>) => {} | Pick<{}, K>) | Pick<{}, K>, callback?: () => void): void; forceUpdate(callback?: () => void): void; readonly props: Readonly<{}> & Readonly<{ - children?: React.ReactNode; + children?: React.ReactNode | undefined; }>; state: Readonly<{}>; refs: { @@ -43,7 +43,7 @@ export declare function GetHardwareModal(Com: any, props: IMetalsModal): { setState(state: {} | ((prevState: Readonly<{}>, props: Readonly<{}>) => {} | Pick<{}, K>) | Pick<{}, K>, callback?: () => void): void; forceUpdate(callback?: () => void): void; readonly props: Readonly<{}> & Readonly<{ - children?: React.ReactNode; + children?: React.ReactNode | undefined; }>; state: Readonly<{}>; refs: { @@ -62,7 +62,7 @@ export declare function GetHardwareModal(Com: any, props: IMetalsModal): { componentWillUpdate?(nextProps: Readonly<{}>, nextState: Readonly<{}>, nextContext: any): void; UNSAFE_componentWillUpdate?(nextProps: Readonly<{}>, nextState: Readonly<{}>, nextContext: any): void; }; - contextType?: React.Context; + contextType?: React.Context | undefined; }; export {}; //# sourceMappingURL=HardwareModal.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Modal/HardwareModal.d.ts.map b/types/UI/Components/Modal/HardwareModal.d.ts.map index 35d11aa..aef16d2 100644 --- a/types/UI/Components/Modal/HardwareModal.d.ts.map +++ b/types/UI/Components/Modal/HardwareModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HardwareModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/HardwareModal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAIzD,UAAU,YAAY;IAElB,KAAK,EAAE,iBAAiB,CAAC;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,GAAG,CAAC;CAClB;AAGD,wBAAgB,gBAAgB,CAAC,GAAG,KAAA,EAAE,KAAK,EAAE,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmFxD"} \ No newline at end of file +{"version":3,"file":"HardwareModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/HardwareModal.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAIzD,UAAU,YAAY;IAElB,KAAK,EAAE,iBAAiB,CAAC;IACzB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,GAAG,CAAC;CAClB;AAGD,wBAAgB,gBAAgB,CAAC,GAAG,KAAA,EAAE,KAAK,EAAE,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsFxD"} \ No newline at end of file diff --git a/types/UI/Components/Modal/HideSelectModal.d.ts b/types/UI/Components/Modal/HideSelectModal.d.ts index 6270f1d..01b84e2 100644 --- a/types/UI/Components/Modal/HideSelectModal.d.ts +++ b/types/UI/Components/Modal/HideSelectModal.d.ts @@ -11,6 +11,9 @@ export declare class HideSelectModal extends React.Component<{ store: HideSelectStore; hideEntitys: Entity[]; }> { + private event; + componentDidMount(): void; + componentWillUnmount(): void; render(): JSX.Element; private isDisable; private showAll; diff --git a/types/UI/Components/Modal/HideSelectModal.d.ts.map b/types/UI/Components/Modal/HideSelectModal.d.ts.map index f65fe56..bc921de 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;AAe1B,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAYjE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,OAAO,wBAAwB,CAAC;AAKhC,KAAK,SAAS,CAAC,CAAC,IAAI;KACf,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CACzB,CAAC;AACF,eAAO,MAAM,SAAS,EAAE,SAAS,CAAC,SAAS,CA+B1C,CAAC;AAuBF,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,eAAe,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;CAAE,CAAC;IAEpG,MAAM;IAsHN,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,CAwRZ;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;AAiB1B,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAkBjE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAI9D,OAAO,wBAAwB,CAAC;AAIhC,KAAK,SAAS,CAAC,CAAC,IAAI;KACf,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM;CACzB,CAAC;AACF,eAAO,MAAM,SAAS,EAAE,SAAS,CAAC,SAAS,CAmC1C,CAAC;AA0BF,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,eAAe,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;CAAE,CAAC;IAEpG,OAAO,CAAC,KAAK,CAAW;IACxB,iBAAiB;IAWjB,oBAAoB;IASpB,MAAM;IAqHN,OAAO,CAAC,SAAS,CAOf;IACF,OAAO,CAAC,OAAO;IAuBf,OAAO,CAAC,MAAM,CAMZ;IACF,OAAO,CAAC,MAAM,CAgBZ;IACF,OAAO,CAAC,WAAW,CAKjB;IACF,OAAO,CAAC,EAAE,CA+BR;IACF,OAAO,CAAC,MAAM,CAOZ;IACF,OAAO,CAAC,QAAQ,CAsCd;IACF,OAAO,CAAC,MAAM,CAgTZ;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/InterfereAnimation.d.ts b/types/UI/Components/Modal/InterfereAnimation.d.ts new file mode 100644 index 0000000..19b2a93 --- /dev/null +++ b/types/UI/Components/Modal/InterfereAnimation.d.ts @@ -0,0 +1,22 @@ +import { Box3 } from "three"; +import { Singleton } from "../../../Common/Singleton"; +import { Entity } from "../../../DatabaseServices/Entity/Entity"; +export declare class InterfereAnimation extends Singleton { + private isAnimating; + private animationInterval; + private previousEns; + calculateViewHeightForBox(box: Box3): number; + /** + * 第一次将相机调整到选中的实体都在视图范围内 + * 相机后退到可以看见当前干涉实体和上次实体的包围盒 + * 移动到干涉实体的位置 + * 放大相机到目标位置 + * + * @param box 干涉部分的包围盒 + * @param selectEnts 选中的实体 + * @param ens 被干涉的实体 + * @param isFirstExecution 是否需要调整选中的实体都在视图范围内 + */ + ZoomToBox(box: Box3, selectEnts: any, ens: Entity[], isFirstExecution: boolean): Promise; +} +//# sourceMappingURL=InterfereAnimation.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Modal/InterfereAnimation.d.ts.map b/types/UI/Components/Modal/InterfereAnimation.d.ts.map new file mode 100644 index 0000000..62d05a1 --- /dev/null +++ b/types/UI/Components/Modal/InterfereAnimation.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"InterfereAnimation.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/InterfereAnimation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAW,MAAM,OAAO,CAAC;AAGtC,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAIjE,qBAAa,kBAAmB,SAAQ,SAAS;IAE7C,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,iBAAiB,CAAiB;IAC1C,OAAO,CAAC,WAAW,CAAM;IAGzB,yBAAyB,CAAC,GAAG,EAAE,IAAI;IAUnC;;;;;;;;;;OAUG;IACH,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,KAAA,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAwG5F"} \ No newline at end of file diff --git a/types/UI/Components/Modal/InterfereModal.d.ts b/types/UI/Components/Modal/InterfereModal.d.ts index 98920bb..77852ee 100644 --- a/types/UI/Components/Modal/InterfereModal.d.ts +++ b/types/UI/Components/Modal/InterfereModal.d.ts @@ -1,18 +1,41 @@ import { Component } from 'react'; import { Mesh } from 'three'; import { Solid3D } from '../../../Common/InterfereUtil'; +import { SweepSolid } from '../../../DatabaseServices/3DSolid/SweepSolid'; +import { ExtrudeSolid } from '../../../DatabaseServices/Entity/Extrude'; +import { HardwareCompositeEntity } from '../../../DatabaseServices/Hardware/HardwareCompositeEntity'; interface IInterfereProps { count: number; data: [Mesh, [Solid3D, Solid3D]][]; + selectEnts: (ExtrudeSolid | SweepSolid | HardwareCompositeEntity)[]; } export declare class InterfereModal extends Component { currentIndex: number; + isFirstExecution: boolean; + previousDataSort: [Mesh, [Solid3D, Solid3D]][]; + isAnimation: boolean; + cellStyle: { + display: string; + justifyContent: string; + alignItems: string; + padding: string; + }; + headerStyle: { + fontWeight: string; + borderBottom: string; + display: string; + justifyContent: string; + alignItems: string; + padding: string; + }; render(): JSX.Element; private close; private restore; private next; private previos; private update; + private handleAnimate; + private handleScroll; } export {}; //# sourceMappingURL=InterfereModal.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Modal/InterfereModal.d.ts.map b/types/UI/Components/Modal/InterfereModal.d.ts.map index 176afd5..2fb2e3e 100644 --- a/types/UI/Components/Modal/InterfereModal.d.ts.map +++ b/types/UI/Components/Modal/InterfereModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"InterfereModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/InterfereModal.tsx"],"names":[],"mappings":"AAGA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAE7B,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAKxD,UAAU,eAAe;IAErB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;CACtC;AAED,qBACa,cAAe,SAAQ,SAAS,CAAC,eAAe,EAAE,EAAE,CAAC;IAClD,YAAY,SAAM;IAC9B,MAAM;IA8CN,OAAO,CAAC,KAAK,CAIX;IACF,OAAO,CAAC,OAAO,CAOb;IACF,OAAO,CAAC,IAAI,CAKV;IACF,OAAO,CAAC,OAAO,CAMb;IACF,OAAO,CAAC,MAAM,CAOZ;CACL"} \ No newline at end of file +{"version":3,"file":"InterfereModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/InterfereModal.tsx"],"names":[],"mappings":"AAGA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAQ,IAAI,EAAW,MAAM,OAAO,CAAC;AAE5C,OAAO,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAC;AAG1E,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4DAA4D,CAAC;AAOrG,UAAU,eAAe;IAErB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IACnC,UAAU,EAAE,CAAC,YAAY,GAAG,UAAU,GAAG,uBAAuB,CAAC,EAAE,CAAC;CACvE;AAED,qBACa,cAAe,SAAQ,SAAS,CAAC,eAAe,EAAE,EAAE,CAAC;IAElD,YAAY,SAAM;IAClB,gBAAgB,UAAQ;IACxB,gBAAgB,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IAC/C,WAAW,UAAS;IAEhC,SAAS;;;;;MAKP;IAEF,WAAW;;;;;;;MAIT;IACF,MAAM;IAqIN,OAAO,CAAC,KAAK,CAIX;IACF,OAAO,CAAC,OAAO,CAOb;IACF,OAAO,CAAC,IAAI,CAMV;IACF,OAAO,CAAC,OAAO,CAOb;IACF,OAAO,CAAC,MAAM,CA4BZ;IAEF,OAAO,CAAC,aAAa,CAMnB;IAGF,OAAO,CAAC,YAAY,CAWlB;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Modal/LightModal.d.ts.map b/types/UI/Components/Modal/LightModal.d.ts.map index 462d297..5e3a0d5 100644 --- a/types/UI/Components/Modal/LightModal.d.ts.map +++ b/types/UI/Components/Modal/LightModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"LightModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/LightModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAgB,MAAM,aAAa,CAAC;AAMxD,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAK/D,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAIzE,UAAU,oBAAoB;IAE1B,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAW;IACzB,UAAU,EAAE,OAAO,CAAS;IAC5B,MAAM,EAAE,KAAK,CAAC;IAC1B,YAAY,EAAE,QAAQ,EAAE,CAAM;gBAElB,KAAK,KAAA;IAMjB,iBAAiB;IAcjB,oBAAoB;IAOpB,OAAO,CAAC,YAAY,CAKlB;IAEF,uBAAuB,QAAe,MAAM,MAAM,MAAM,mBAiCtD;IACF,mBAAmB,MAAa,WAAW,KAAG,QAAQ,IAAI,CAAC,CA4BzD;IACF,yBAAyB;IAKzB,MAAM;CA4LT"} \ No newline at end of file +{"version":3,"file":"LightModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/LightModal.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAgB,MAAM,aAAa,CAAC;AAMxD,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAK/D,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAIzE,UAAU,oBAAoB;IAE1B,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAW;IACzB,UAAU,EAAE,OAAO,CAAS;IAC5B,MAAM,EAAE,KAAK,CAAC;IAC1B,YAAY,EAAE,QAAQ,EAAE,CAAM;gBAElB,KAAK,KAAA;IAMjB,iBAAiB;IAcjB,oBAAoB;IAOpB,OAAO,CAAC,YAAY,CAKlB;IAEF,uBAAuB,QAAe,MAAM,MAAM,MAAM,mBAiCtD;IACF,mBAAmB,MAAa,WAAW,KAAG,OAAO,CAAC,IAAI,CAAC,CA4BzD;IACF,yBAAyB;IAKzB,MAAM;CA4LT"} \ No newline at end of file diff --git a/types/UI/Components/Modal/MaskManage.d.ts b/types/UI/Components/Modal/MaskManage.d.ts index 5ac87b6..5331cdc 100644 --- a/types/UI/Components/Modal/MaskManage.d.ts +++ b/types/UI/Components/Modal/MaskManage.d.ts @@ -3,6 +3,7 @@ */ export declare class MaskManage { _Masking: HTMLElement; + _Islock: boolean; constructor(); get IsShow(): boolean; private RegisterEvent; diff --git a/types/UI/Components/Modal/MaskManage.d.ts.map b/types/UI/Components/Modal/MaskManage.d.ts.map index 5ed4af1..30eeff2 100644 --- a/types/UI/Components/Modal/MaskManage.d.ts.map +++ b/types/UI/Components/Modal/MaskManage.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"MaskManage.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/MaskManage.tsx"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,UAAU;IAEZ,QAAQ,EAAE,WAAW,CAAC;;IAuB7B,IAAI,MAAM,YAGT;IAED,OAAO,CAAC,aAAa;IAQrB,YAAY;IAIZ;;OAEG;IACH,QAAQ,CAAC,aAAa,UAAQ,EAAE,KAAK,UAAQ;IAa7C,KAAK;CAMR"} \ No newline at end of file +{"version":3,"file":"MaskManage.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/MaskManage.tsx"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,UAAU;IAEZ,QAAQ,EAAE,WAAW,CAAC;IAGtB,OAAO,EAAE,OAAO,CAAS;;IAuBhC,IAAI,MAAM,YAGT;IAED,OAAO,CAAC,aAAa;IAQrB,YAAY;IAIZ;;OAEG;IACH,QAAQ,CAAC,aAAa,UAAQ,EAAE,KAAK,UAAQ;IAa7C,KAAK;CAOR"} \ 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 6d140d2..4f04060 100644 --- a/types/UI/Components/Modal/ModalContainer.d.ts +++ b/types/UI/Components/Modal/ModalContainer.d.ts @@ -51,6 +51,7 @@ interface IModalHeaderProps { isPinBtn?: boolean; logo?: boolean; helpUrlName?: string; + isBBSModel?: boolean; } export declare class ModalHeader extends Component { private isPin; @@ -60,7 +61,7 @@ export declare class ModalHeader extends Component { logo: boolean; }; onPinBtnClick: (e: any) => void; - ChangeModalSize: () => void; + ChangeModalSize: (isBBSModel?: boolean) => void; private renderIcon; render(): JSX.Element; } diff --git a/types/UI/Components/Modal/ModalContainer.d.ts.map b/types/UI/Components/Modal/ModalContainer.d.ts.map index ab9d715..f3ef6e2 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/Modal/ModalsManage.d.ts b/types/UI/Components/Modal/ModalsManage.d.ts index 1782e96..717bde4 100644 --- a/types/UI/Components/Modal/ModalsManage.d.ts +++ b/types/UI/Components/Modal/ModalsManage.d.ts @@ -1,4 +1,3 @@ -/// import { Pick } from '../../../Add-on/Array'; import { Editor } from '../../../Editor/Editor'; import { AnyObject } from "../../Store/OptionInterface/IOptionInterface"; @@ -30,6 +29,10 @@ export interface IModalProps { IsLightModal?: boolean; minWidth?: number; minHeight?: number; + defaultWidth?: number; + defaultHeight?: number; + /**是否为BBS模态框 */ + IsBBSModal?: boolean; } export declare class ModalManage { private ed; diff --git a/types/UI/Components/Modal/ModalsManage.d.ts.map b/types/UI/Components/Modal/ModalsManage.d.ts.map index 76aaaa4..37cd8fd 100644 --- a/types/UI/Components/Modal/ModalsManage.d.ts.map +++ b/types/UI/Components/Modal/ModalsManage.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ModalsManage.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/ModalsManage.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"ModalsManage.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/ModalsManage.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Components/Modal/OptionModal/ChaiDanModal.d.ts.map b/types/UI/Components/Modal/OptionModal/ChaiDanModal.d.ts.map index f9b8675..cac6039 100644 --- a/types/UI/Components/Modal/OptionModal/ChaiDanModal.d.ts.map +++ b/types/UI/Components/Modal/OptionModal/ChaiDanModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ChaiDanModal.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Modal/OptionModal/ChaiDanModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS;IAE7C,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,UAAU,CAGhB;IACF,yBAAyB;IAIzB,MAAM;CAwJT"} \ No newline at end of file +{"version":3,"file":"ChaiDanModal.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Modal/OptionModal/ChaiDanModal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS;IAE7C,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,UAAU,CAGhB;IACF,yBAAyB;IAIzB,MAAM;CAuKT"} \ No newline at end of file diff --git a/types/UI/Components/Modal/OptionModal/ConfigDialog.d.ts b/types/UI/Components/Modal/OptionModal/ConfigDialog.d.ts index bc5c77d..4cbb68a 100644 --- a/types/UI/Components/Modal/OptionModal/ConfigDialog.d.ts +++ b/types/UI/Components/Modal/OptionModal/ConfigDialog.d.ts @@ -7,7 +7,7 @@ export declare enum EOptionTabId { Draw = "ht", ChaiDan = "chaidan", Perf = "perf", - TextStyle = "textstyle" + TextConfig = "textConfig" } export declare class ConfigStore extends Singleton { oldBgcolor: string; @@ -19,6 +19,12 @@ export declare class ConfigStore extends Singleton { maxViewHeight: number; zoomSpeed: number; }; + oldSplitParams: { + ARC_SplitLength: number; + ARC_RADIUS_MIN: number; + Arc_MinSplitCount: number; + ARC_MaxSplitCount: number; + }; oldOpenHistoryList: boolean; oldOpenLightConfig: boolean; checkSealing: boolean; diff --git a/types/UI/Components/Modal/OptionModal/ConfigDialog.d.ts.map b/types/UI/Components/Modal/OptionModal/ConfigDialog.d.ts.map index 1369a57..ce759c6 100644 --- a/types/UI/Components/Modal/OptionModal/ConfigDialog.d.ts.map +++ b/types/UI/Components/Modal/OptionModal/ConfigDialog.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ConfigDialog.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Modal/OptionModal/ConfigDialog.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAiBzD,oBAAY,YAAY;IAEpB,IAAI,SAAS;IACb,IAAI,OAAO;IACX,GAAG,QAAQ;IACX,IAAI,OAAO;IACX,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,SAAS,cAAc;CAC1B;AAED,qBAAa,WAAY,SAAQ,SAAS;IAEtC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,EAAE,MAAM,CAAkC;IAChE,qBAAqB,EAAE,MAAM,CAAiC;IAC9D,WAAW;;;;MAIT;IACF,kBAAkB,EAAE,OAAO,CAA8B;IACzD,kBAAkB,EAAE,OAAO,CAA8B;IAC7C,YAAY,UAAS;IACrB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAA8C;IAExF,OAAO,aAgCL;IACF,IAAI,sBA6DF;CACL;AAED;;GAEG;AACH,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,aAAa,EAAE,YAAY,CAAC;CAAE,CAAC;IAEvF,cAAc,EAAE,YAAY,CAAiD;IAC7E,aAAa,SAAQ;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,CAAC,KAAK,CAAW;gBACZ,KAAK,KAAA;IAQjB,IAAI,aAAa,CAAC,KAAK,EAAE,YAAY,EAIpC;IACD,2BAA2B;IAgBrB,iBAAiB;IAgBvB,oBAAoB;IAKpB,WAAW,sBAOT;IACF,MAAM;CAuDT"} \ No newline at end of file +{"version":3,"file":"ConfigDialog.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Modal/OptionModal/ConfigDialog.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAuBzD,oBAAY,YAAY;IAEpB,IAAI,SAAS;IACb,IAAI,OAAO;IACX,GAAG,QAAQ;IACX,IAAI,OAAO;IACX,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,UAAU,eAAe;CAC5B;AAED,qBAAa,WAAY,SAAQ,SAAS;IAEtC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,EAAE,MAAM,CAAkC;IAChE,qBAAqB,EAAE,MAAM,CAAiC;IAC9D,WAAW;;;;MAIT;IACF,cAAc;;;;;MAKZ;IACF,kBAAkB,EAAE,OAAO,CAA8B;IACzD,kBAAkB,EAAE,OAAO,CAA8B;IAC7C,YAAY,UAAS;IACrB,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAA8C;IAExF,OAAO,aAsCL;IACF,IAAI,sBAqGF;CACL;AAED;;GAEG;AACH,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,aAAa,EAAE,YAAY,CAAC;CAAE,CAAC;IAEvF,cAAc,EAAE,YAAY,CAAiD;IAC7E,aAAa,SAAQ;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,CAAC,KAAK,CAAW;gBACZ,KAAK,KAAA;IAQjB,IAAI,aAAa,CAAC,KAAK,EAAE,YAAY,EAIpC;IACD,2BAA2B;IAgBrB,iBAAiB;IAgBvB,oBAAoB;IAKpB,WAAW,sBAOT;IACF,MAAM;CAuDT"} \ No newline at end of file diff --git a/types/UI/Components/Modal/OptionModal/DisplayConfigPanel.d.ts b/types/UI/Components/Modal/OptionModal/DisplayConfigPanel.d.ts index a9a2a90..008a1af 100644 --- a/types/UI/Components/Modal/OptionModal/DisplayConfigPanel.d.ts +++ b/types/UI/Components/Modal/OptionModal/DisplayConfigPanel.d.ts @@ -13,18 +13,27 @@ export declare class DisplayConfigPanel extends React.Component<{ _AAType: string; _ZoomSpeed: number; private errorMsg; + private errorOpaticy; private errorStr; isShow: boolean; _inputEl1: React.RefObject; _inputEl2: React.RefObject; + _inputElOpacity: React.RefObject; _SpeedInputEl: React.RefObject; + _SpeedInputEl1: React.RefObject; + _SpeedInputEl2: React.RefObject; + _SpeedInputEl3: React.RefObject; + _SpeedInputEl4: React.RefObject; _IsPopoverOpen: boolean; _CursorUiData: IUiOption; UNSAFE_componentWillMount(): void; handleChangeColor: (color: ColorResult) => void; handleChangeEdgeColor: (e: React.MouseEvent, type: string) => void; render(): JSX.Element; + checkSplitNum(e: React.ChangeEvent, i: number): void; checkValue(e: React.ChangeEvent, i: number): void; + /** 校验透明度的合法性 */ + checkValueOpacity(e: React.ChangeEvent): void; handleClick: () => void; } //# sourceMappingURL=DisplayConfigPanel.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Modal/OptionModal/DisplayConfigPanel.d.ts.map b/types/UI/Components/Modal/OptionModal/DisplayConfigPanel.d.ts.map index 81717ad..0a59048 100644 --- a/types/UI/Components/Modal/OptionModal/DisplayConfigPanel.d.ts.map +++ b/types/UI/Components/Modal/OptionModal/DisplayConfigPanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DisplayConfigPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Modal/OptionModal/DisplayConfigPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAgB,MAAM,aAAa,CAAC;AAUxD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAEjE,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAG5E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,yBAAyB,CAAC;AAuBjC,eAAO,MAAM,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAKvC,CAAC;AAEF,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;CAAE,CAAC;IAE5E,OAAO,CAAC,UAAU,CAEhB;IACU,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,SAAQ;IACf,UAAU,EAAE,MAAM,CAAiC;IACnD,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,QAAQ,CAAM;IACtB,MAAM,UAAS;IAC3B,SAAS,oCAAuC;IAChD,SAAS,oCAAuC;IAChD,aAAa,oCAAuC;IACpD,cAAc,EAAE,OAAO,CAAS;IAChC,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IAExC,yBAAyB;IAMzB,iBAAiB,UAAW,WAAW,UAQrC;IAEF,qBAAqB,MAAO,gBAAgB,CAAC,gBAAgB,CAAC,QAAQ,MAAM,UAK1E;IACF,MAAM;IAiXN,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,MAAM;IAwC5D,WAAW,aAGT;CACL"} \ No newline at end of file +{"version":3,"file":"DisplayConfigPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Modal/OptionModal/DisplayConfigPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAgB,MAAM,aAAa,CAAC;AAUxD,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAIjE,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAG5E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,yBAAyB,CAAC;AAuBjC,eAAO,MAAM,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAKvC,CAAC;AAEF,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,WAAW,CAAC;CAAE,CAAC;IAE5E,OAAO,CAAC,UAAU,CAEhB;IACU,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,SAAQ;IACf,UAAU,EAAE,MAAM,CAAiC;IACnD,OAAO,CAAC,QAAQ,CAAgE;IAChF,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAM;IACtB,MAAM,UAAS;IAC3B,SAAS,oCAAuC;IAChD,SAAS,oCAAuC;IAChD,eAAe,oCAAuC;IACtD,aAAa,oCAAuC;IAEpD,cAAc,oCAAuC;IACrD,cAAc,oCAAuC;IACrD,cAAc,oCAAuC;IACrD,cAAc,oCAAuC;IACrD,cAAc,EAAE,OAAO,CAAS;IAChC,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IAExC,yBAAyB;IAMzB,iBAAiB,UAAW,WAAW,UAQrC;IAEF,qBAAqB,MAAO,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,QAAQ,MAAM,UAK1E;IACF,MAAM;IAsoBN,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,MAAM;IAU/D,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,MAAM;IAuC5D,gBAAgB;IAChB,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC;IAiBxD,WAAW,aAGT;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Modal/OptionModal/DrawConfigPanel.d.ts b/types/UI/Components/Modal/OptionModal/DrawConfigPanel.d.ts index e1ae872..5c0dc62 100644 --- a/types/UI/Components/Modal/OptionModal/DrawConfigPanel.d.ts +++ b/types/UI/Components/Modal/OptionModal/DrawConfigPanel.d.ts @@ -7,11 +7,14 @@ interface IConfigProps { } export declare class DrawConfigPanel extends React.Component { maxSizeConfig: IUiOption; + private currentOpt; cabinetSpacing: number; private testModeSpacing; private printResolution; private noLid; private allLid; + private autoDeviationMinDist; + private smallGrooveThreshold; _oldShowLine: boolean; _oldShowOpenDirLine: boolean; _toggleDrillingReactor: () => void; diff --git a/types/UI/Components/Modal/OptionModal/DrawConfigPanel.d.ts.map b/types/UI/Components/Modal/OptionModal/DrawConfigPanel.d.ts.map index 164b8a0..5a6f0ee 100644 --- a/types/UI/Components/Modal/OptionModal/DrawConfigPanel.d.ts.map +++ b/types/UI/Components/Modal/OptionModal/DrawConfigPanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawConfigPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Modal/OptionModal/DrawConfigPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAE,aAAa,EAAc,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAG5E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,UAAU,YAAY;IAElB,KAAK,EAAE,WAAW,CAAC;CACtB;AAED,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;IACtD,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IACpD,cAAc,EAAE,MAAM,CAA6B;IACnD,OAAO,CAAC,eAAe,CAAsC;IAC7D,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,MAAM,CAAkC;IAEhD,YAAY,EAAE,OAAO,CAAC;IACtB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,sBAAsB,aAGpB;IACF,WAAW,aAGT;IACF,yBAAyB;IAMzB,oBAAoB;IAiBb,MAAM;CA8QhB"} \ No newline at end of file +{"version":3,"file":"DrawConfigPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Modal/OptionModal/DrawConfigPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,EAAE,aAAa,EAAc,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAI5E,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,UAAU,YAAY;IAElB,KAAK,EAAE,WAAW,CAAC;CACtB;AAED,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;IAEtD,aAAa,EAAE,SAAS,CAAC,aAAa,CAAC,CAAC;IACpD,OAAO,CAAC,UAAU,CAEhB;IACF,cAAc,EAAE,MAAM,CAA6B;IACnD,OAAO,CAAC,eAAe,CAAsC;IAC7D,OAAO,CAAC,eAAe,CAA0C;IACjE,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,oBAAoB,CAAmC;IAC/D,OAAO,CAAC,oBAAoB,CAAmC;IAE/D,YAAY,EAAE,OAAO,CAAC;IACtB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,sBAAsB,aAGpB;IACF,WAAW,aAGT;IACF,yBAAyB;IAMzB,oBAAoB;IAiBb,MAAM;CAoZhB"} \ No newline at end of file diff --git a/types/UI/Components/Modal/OptionModal/TextConfigPanel.d.ts b/types/UI/Components/Modal/OptionModal/TextConfigPanel.d.ts index dbcc708..6e49e71 100644 --- a/types/UI/Components/Modal/OptionModal/TextConfigPanel.d.ts +++ b/types/UI/Components/Modal/OptionModal/TextConfigPanel.d.ts @@ -1,8 +1,6 @@ import * as React from 'react'; export declare class TextConfigPanel extends React.Component<{}> { _isPopoverOpen: boolean; - _textHeight: number; - _appoinTextHeight: boolean; _InputEl: React.RefObject; render(): JSX.Element; } diff --git a/types/UI/Components/Modal/OptionModal/TextConfigPanel.d.ts.map b/types/UI/Components/Modal/OptionModal/TextConfigPanel.d.ts.map index cb66e9b..9a89fe2 100644 --- a/types/UI/Components/Modal/OptionModal/TextConfigPanel.d.ts.map +++ b/types/UI/Components/Modal/OptionModal/TextConfigPanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TextConfigPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Modal/OptionModal/TextConfigPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;IAExC,cAAc,EAAE,OAAO,CAAS;IAChC,WAAW,EAAE,MAAM,CAA4B;IAC/C,iBAAiB,EAAE,OAAO,CAA+C;IACrF,QAAQ,oCAAuC;IAC/C,MAAM;CAuDT"} \ No newline at end of file +{"version":3,"file":"TextConfigPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/Modal/OptionModal/TextConfigPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;IAExC,cAAc,EAAE,OAAO,CAAS;IAC5C,QAAQ,oCAAuC;IAC/C,MAAM;CA6CT"} \ No newline at end of file diff --git a/types/UI/Components/Modal/ProcessingGroupModal.d.ts.map b/types/UI/Components/Modal/ProcessingGroupModal.d.ts.map index a5fba10..021c064 100644 --- a/types/UI/Components/Modal/ProcessingGroupModal.d.ts.map +++ b/types/UI/Components/Modal/ProcessingGroupModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ProcessingGroupModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/ProcessingGroupModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkC,SAAS,EAAQ,MAAM,mBAAmB,CAAC;AAGpF,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAGjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iEAAiE,CAAC;AAOxG,OAAO,qCAAqC,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AA6BrF,UAAU,cAAc;IAEpB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,qBAAqB,CAAC;CACjC;AACD,UAAU,cAAc;IAEpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,EAAE,CAAC;CAClB;AAOD,UAAU,yBAAyB;IAE/B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,yBAA0B,SAAQ,SAAU,YAAW,YAAY;IAE5E,UAAU,EAAE,MAAM,CAAa;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAK;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,QAAQ,UAAS;IAEjB,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAC7C,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAE9C,gBAAgB,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAa;IAEzD,iBAAiB,EAAE,GAAG,CAAC,cAAc,CAAC,CAAa;IACnD,eAAe,EAAE,cAAc,EAAE,CAAM;IACvC,OAAO,EAAE,cAAc,EAAE,CAAM;IAC/B,eAAe,QAAM;IACrB,oBAAoB,EAAE,MAAM,EAAE,CAAM;IACpC,UAAU,aAIR;IACF,YAAY,WAAY,GAAG,UASzB;IACF,UAAU,8BAOR;IACF,SAAS,aAUP;CACL;AAID,qBACa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,yBAAyB,CAAC;CAAE,EAAE,yBAAyB,CAAC;IACvH,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,SAAS,CAA0C;IAE3D,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,mBAAmB,CAAuC;IAClE,OAAO,CAAC,oBAAoB,CAAuC;IAEnE,OAAO,CAAC,WAAW,CAAqD;gBAC5D,KAAK,KAAA;IAYjB,yBAAyB;IAOzB,iBAAiB;IAsBjB,oBAAoB;IAQpB,OAAO,CAAC,UAAU,CAiKhB;IAGF,mBAAmB,UAAW,SAAS,EAAE,aAAa,SAAS,EAAE,UAuB/D;IAGF,OAAO,CAAC,gBAAgB,CAuEtB;IAGF,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,kBAAkB,CAYxB;IAEF,OAAO,aAIL;IAGF,OAAO,CAAC,eAAe,CA0BrB;IAGF,QAAQ,MAAO,qBAAqB,UAMlC;IAGF,OAAO,CAAC,eAAe,CAoErB;IAGF,OAAO,CAAC,UAAU,CAsEhB;IAEF,OAAO,CAAC,WAAW,CAKjB;IAEF,OAAO,CAAC,gBAAgB,CAqCtB;IAGF,OAAO,CAAC,kBAAkB,CA6HxB;IAEF,MAAM;CA8FT"} \ No newline at end of file +{"version":3,"file":"ProcessingGroupModal.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/ProcessingGroupModal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkC,SAAS,EAAQ,MAAM,mBAAmB,CAAC;AAGpF,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAGjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iEAAiE,CAAC;AAOxG,OAAO,qCAAqC,CAAC;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AA6BrF,UAAU,cAAc;IAEpB,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,qBAAqB,CAAC;CACjC;AACD,UAAU,cAAc;IAEpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,EAAE,CAAC;CAClB;AAOD,UAAU,yBAAyB;IAE/B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,yBAA0B,SAAQ,SAAU,YAAW,YAAY;IAE5E,UAAU,EAAE,MAAM,CAAa;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,CAAK;IACjB,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,QAAQ,UAAS;IAEjB,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAC7C,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAE9C,gBAAgB,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAa;IAEzD,iBAAiB,EAAE,GAAG,CAAC,cAAc,CAAC,CAAa;IACnD,eAAe,EAAE,cAAc,EAAE,CAAM;IACvC,OAAO,EAAE,cAAc,EAAE,CAAM;IAC/B,eAAe,QAAM;IACrB,oBAAoB,EAAE,MAAM,EAAE,CAAM;IACpC,UAAU,aAIR;IACF,YAAY,WAAY,GAAG,UASzB;IACF,UAAU,8BAOR;IACF,SAAS,aAUP;CACL;AAID,qBACa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,yBAAyB,CAAC;CAAE,EAAE,yBAAyB,CAAC;IAEvH,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,SAAS,CAA0C;IAE3D,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,mBAAmB,CAAuC;IAClE,OAAO,CAAC,oBAAoB,CAAuC;IAEnE,OAAO,CAAC,WAAW,CAAqD;gBAC5D,KAAK,KAAA;IAYjB,yBAAyB;IAOzB,iBAAiB;IAsBjB,oBAAoB;IAQpB,OAAO,CAAC,UAAU,CAiKhB;IAGF,mBAAmB,UAAW,SAAS,EAAE,aAAa,SAAS,EAAE,UAuB/D;IAGF,OAAO,CAAC,gBAAgB,CAuEtB;IAGF,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,kBAAkB,CAYxB;IAEF,OAAO,aAIL;IAGF,OAAO,CAAC,eAAe,CA0BrB;IAGF,QAAQ,MAAO,qBAAqB,UAMlC;IAGF,OAAO,CAAC,eAAe,CAyErB;IAGF,OAAO,CAAC,UAAU,CAsEhB;IAEF,OAAO,CAAC,WAAW,CAKjB;IAEF,OAAO,CAAC,gBAAgB,CAqCtB;IAGF,OAAO,CAAC,kBAAkB,CAiIxB;IAEF,MAAM;CA0FT"} \ No newline at end of file diff --git a/types/UI/Components/Modal/RecycleBin.d.ts b/types/UI/Components/Modal/RecycleBin.d.ts index d7cf461..ecd437f 100644 --- a/types/UI/Components/Modal/RecycleBin.d.ts +++ b/types/UI/Components/Modal/RecycleBin.d.ts @@ -28,7 +28,9 @@ export declare class RecycleBin extends React.Component { componentDidMount(): void; componentWillUnmount(): void; render(): JSX.Element; - private GetData; + GetData: (queryData?: { + curr_page?: number; + }) => Promise; handleMouseDown: (e: React.MouseEvent) => void; private showContextMenu; handleClickItem: (e: React.MouseEvent) => void; diff --git a/types/UI/Components/Modal/RecycleBin.d.ts.map b/types/UI/Components/Modal/RecycleBin.d.ts.map index 145de42..80b8915 100644 --- a/types/UI/Components/Modal/RecycleBin.d.ts.map +++ b/types/UI/Components/Modal/RecycleBin.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RecycleBin.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/RecycleBin.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAiB/B,MAAM,WAAW,gBAAgB;CAEhC;AACD,UAAU,YAAY;IAElB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACvB;AAID,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC;IACjD,SAAS,UAAQ;IACjB,QAAQ,EAAE,YAAY,EAAE,CAAM;IAC9B,QAAQ;;;;MAIlB;IACF,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,IAAI,CAAiB;IACjB,OAAO,CAAC,QAAQ,CAAqB;IACjD,UAAU,EAAE,OAAO,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAkB;IACrC,UAAU,SAAU,YAAY,iBAkB9B;IACF,UAAU,oBA2CR;IACF,iBAAiB;IAyCjB,oBAAoB;IAOb,MAAM;IAyDb,OAAO,CAAC,OAAO,CAqBb;IACF,eAAe,MAAO,gBAAgB,CAAC,WAAW,CAAC,UAOjD;IACF,OAAO,CAAC,eAAe,CAerB;IACF,eAAe,MAAO,gBAAgB,CAAC,aAAa,CAAC,UASnD;IACF,gBAAgB,sBA4Bd;IACF,iBAAiB,sBAaf;IACF,OAAO,SAAU,YAAY,YAa3B;CACL"} \ No newline at end of file +{"version":3,"file":"RecycleBin.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/RecycleBin.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAc/B,MAAM,WAAW,gBAAgB;CAEhC;AACD,UAAU,YAAY;IAElB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACvB;AAID,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAEjD,SAAS,UAAQ;IACjB,QAAQ,EAAE,YAAY,EAAE,CAAM;IAC9B,QAAQ;;;;MAIlB;IACF,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,IAAI,CAAiB;IACjB,OAAO,CAAC,QAAQ,CAAqB;IACjD,UAAU,EAAE,OAAO,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAkB;IACrC,UAAU,SAAU,YAAY,iBAkB9B;IACF,UAAU,oBA2CR;IACF,iBAAiB;IAyCjB,oBAAoB;IAOb,MAAM;IAyDb,OAAO,eAAsB;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;KAAE,mBAqBlD;IACF,eAAe,MAAO,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,UAOjD;IACF,OAAO,CAAC,eAAe,CAerB;IACF,eAAe,MAAO,KAAK,CAAC,UAAU,CAAC,aAAa,CAAC,UASnD;IACF,gBAAgB,sBA4Bd;IACF,iBAAiB,sBAaf;IACF,OAAO,SAAU,YAAY,YAa3B;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Modal/SwitchServerStore.d.ts.map b/types/UI/Components/Modal/SwitchServerStore.d.ts.map index 816c23c..1556960 100644 --- a/types/UI/Components/Modal/SwitchServerStore.d.ts.map +++ b/types/UI/Components/Modal/SwitchServerStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SwitchServerStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/SwitchServerStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAK3F,MAAM,WAAW,IAAI;IAEjB,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,EAAE,CAAC;CACjB;AACD,qBAAa,iBAAiB;IAEd,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAC1C,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,SAAS,EAAE,OAAO,CAAS;IAC3B,MAAM,UAAS;IACf,aAAa,SAAe;IAC5B,OAAO,EAAE,MAAM,CAAC;IAE5B,QAAQ,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACtC,GAAG,EAAE,MAAM,CAAS;IACpB,GAAG,EAAE,MAAM,CAAS;IACpB,GAAG,EAAE,MAAM,CAAO;IAClB,GAAG,EAAE,MAAM,CAAM;IACjB,SAAS,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACvC,QAAQ,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAGtC,YAAY,wBAAqD;IACjE,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO;IA8CD,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,UAAQ;IAkGtC,UAAU,CAAC,EAAE,CAAC,EAAE,MAAM;IA6C5B,UAAU;IAKV,QAAQ;IAMR,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC;IACzC,MAAM,CAAC,WAAW,IAAI,iBAAiB;CAM1C"} \ No newline at end of file +{"version":3,"file":"SwitchServerStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Modal/SwitchServerStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAK3F,MAAM,WAAW,IAAI;IAEjB,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,EAAE,CAAC;CACjB;AACD,qBAAa,iBAAiB;IAEd,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAC1C,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,SAAS,EAAE,OAAO,CAAS;IAC3B,MAAM,UAAS;IACf,aAAa,SAAe;IAC5B,OAAO,EAAE,MAAM,CAAC;IAE5B,QAAQ,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACtC,GAAG,EAAE,MAAM,CAAS;IACpB,GAAG,EAAE,MAAM,CAAS;IACpB,GAAG,EAAE,MAAM,CAAO;IAClB,GAAG,EAAE,MAAM,CAAM;IACjB,SAAS,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IACvC,QAAQ,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAGtC,YAAY,wBAAqD;IACjE,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO;IA8CD,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,UAAQ;IAkGtC,UAAU,CAAC,EAAE,CAAC,EAAE,MAAM;IA8C5B,UAAU;IAOV,QAAQ;IAMR,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC;IACzC,MAAM,CAAC,WAAW,IAAI,iBAAiB;CAM1C"} \ No newline at end of file diff --git a/types/UI/Components/OnlySelectManage/OnlySelectManage.d.ts.map b/types/UI/Components/OnlySelectManage/OnlySelectManage.d.ts.map index 5bf9d2f..83d13bb 100644 --- a/types/UI/Components/OnlySelectManage/OnlySelectManage.d.ts.map +++ b/types/UI/Components/OnlySelectManage/OnlySelectManage.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"OnlySelectManage.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/OnlySelectManage/OnlySelectManage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,SAAS,EAAQ,MAAM,mBAAmB,CAAC;AAIzE,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,WAAW,EAA2B,MAAM,yBAAyB,CAAC;AAE/E,OAAO,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAIzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,0BAA0B,CAAC;AAElC,MAAM,WAAW,eAAe;IAE5B,EAAE,EAAE,WAAW,GAAG,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB;AACD,UAAU,iBAAiB;IAEvB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,SAAS,CAAC;CACzB;AACD,UAAU,iBAAiB;IAEvB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CAC7C;AACD,qBACa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;gBAE/E,KAAK,KAAA;IAoCjB,YAAY,EAAE,oBAAoB,CAA4C;IAC9E,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAa;IACrD,SAAS,QAAM;IACf,WAAW,EAAE,eAAe,CAItC;IACU,SAAS;;;;MAInB;IACU,UAAU,SAAM;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,MAAQ;IAEf,IAAI,UAAU,YAGb;IAED,iBAAiB;IAUjB,oBAAoB;IAOpB,MAAM;IAoEN,iBAAiB,MAAO,gBAAgB,CAAC,gBAAgB,CAAC,qBAMxD;IAGF,cAAc,sBAGZ;IAGF,WAAW,aAAc,SAAS,eAAe,OAAO,UAKtD;IAGF,gBAAgB,aAAoB,SAAS,aAAa,MAAM,EAAE,mBAQhE;IAGF,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI;IAepE,cAAc,UAAW,MAAM,SAAS,YAAY,MAAM,EAAE,UAoB1D;IAGF,WAAW,SAAU,GAAG,qBAgBtB;IAGF,mBAAmB,aAAc,SAAS,cAAc,OAAO,UAI7D;IAEF;;;;MAIE;IAEF,cAAc,eAAsB;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;KAAE,mBAkCzF;IAGF,oBAAoB,MAAO,UAAU,UAiBnC;IAEF,YAAY,sBAqBV;IAEF,gBAAgB,oBAAqB,eAAe,UAoBlD;IAEF,aAAa,MAAa,MAAM,WAAW,CAAC,gBAAgB,CAAC,mBAS3D;CACL"} \ No newline at end of file +{"version":3,"file":"OnlySelectManage.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/OnlySelectManage/OnlySelectManage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAuB,SAAS,EAAQ,MAAM,mBAAmB,CAAC;AAIzE,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,WAAW,EAA2B,MAAM,yBAAyB,CAAC;AAE/E,OAAO,EAAE,SAAS,EAAE,MAAM,8CAA8C,CAAC;AAIzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,0BAA0B,CAAC;AAElC,MAAM,WAAW,eAAe;IAE5B,EAAE,EAAE,WAAW,GAAG,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACrB;AACD,UAAU,iBAAiB;IAEvB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,SAAS,CAAC;CACzB;AACD,UAAU,iBAAiB;IAEvB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;CAC7C;AACD,qBACa,oBAAqB,SAAQ,KAAK,CAAC,SAAS,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;gBAE/E,KAAK,KAAA;IAoCjB,YAAY,EAAE,oBAAoB,CAA4C;IAC9E,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAa;IACrD,SAAS,QAAM;IACf,WAAW,EAAE,eAAe,CAItC;IACU,SAAS;;;;MAInB;IACU,UAAU,SAAM;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,MAAQ;IAEf,IAAI,UAAU,YAGb;IAED,iBAAiB;IAUjB,oBAAoB;IAOpB,MAAM;IAoEN,iBAAiB,MAAO,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,qBAMxD;IAGF,cAAc,sBAGZ;IAGF,WAAW,aAAc,SAAS,eAAe,OAAO,UAKtD;IAGF,gBAAgB,aAAoB,SAAS,aAAa,MAAM,EAAE,mBAQhE;IAGF,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI;IAepE,cAAc,UAAW,KAAK,CAAC,SAAS,YAAY,MAAM,EAAE,UAoB1D;IAGF,WAAW,SAAU,GAAG,qBAgBtB;IAGF,mBAAmB,aAAc,SAAS,cAAc,OAAO,UAI7D;IAEF;;;;MAIE;IAEF,cAAc,eAAsB;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;KAAE,mBAkCzF;IAGF,oBAAoB,MAAO,UAAU,UAiBnC;IAEF,YAAY,sBAqBV;IAEF,gBAAgB,oBAAqB,eAAe,UAoBlD;IAEF,aAAa,MAAa,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,mBAS3D;CACL"} \ No newline at end of file diff --git a/types/UI/Components/OnlySelectManage/SelectManagePanel.d.ts b/types/UI/Components/OnlySelectManage/SelectManagePanel.d.ts index 83dcb91..3518d07 100644 --- a/types/UI/Components/OnlySelectManage/SelectManagePanel.d.ts +++ b/types/UI/Components/OnlySelectManage/SelectManagePanel.d.ts @@ -1,14 +1,11 @@ import * as React from 'react'; import { DirectoryId } from '../../../Common/Request'; -import { HeadCeilingInfoStore } from '../../Store/HeadCeilingStore/HeadCeilingInfoStore'; -import { HeadCeilingProfileMaterialStore } from '../../Store/HeadCeilingStore/HeadCeilingMaterialStore'; -import { Display } from '../HeadCeiling/HeadCeilingInfoConfigPanel'; +import { Display } from '../../Store/OptionInterface/BulkheadCeilingOption'; import { ModalState } from '../Modal/ModalInterface'; import { OnlySelectPanelStore } from './OnlySelectPanelStore'; interface IDataListProps { directoryId: DirectoryId; setDisplay: (display: Display) => void; - dataStore: HeadCeilingInfoStore | HeadCeilingProfileMaterialStore; selectStore: OnlySelectPanelStore; dispaly: Display; return: (status: ModalState) => void; diff --git a/types/UI/Components/OnlySelectManage/SelectManagePanel.d.ts.map b/types/UI/Components/OnlySelectManage/SelectManagePanel.d.ts.map index 01368b2..329626b 100644 --- a/types/UI/Components/OnlySelectManage/SelectManagePanel.d.ts.map +++ b/types/UI/Components/OnlySelectManage/SelectManagePanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SelectManagePanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/OnlySelectManage/SelectManagePanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mDAAmD,CAAC;AACzF,OAAO,EAAE,+BAA+B,EAAE,MAAM,uDAAuD,CAAC;AACxG,OAAO,EAAE,OAAO,EAAE,MAAM,2CAA2C,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,UAAU,cAAc;IAEpB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,SAAS,EAAE,oBAAoB,GAAG,+BAA+B,CAAC;IAClE,WAAW,EAAE,oBAAoB,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CACxC;AAED,qBACa,qBAAsB,SAAQ,KAAK,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC;IAE1E,MAAM,EAAE,MAAM,CAAM;IACpB,OAAO,EAAE,MAAM,CAAM;gBAET,IAAI,KAAA;IA+BhB,MAAM;IA4CN,OAAO,WAAkB,UAAU,mBAIjC;CACL"} \ No newline at end of file +{"version":3,"file":"SelectManagePanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/OnlySelectManage/SelectManagePanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,mDAAmD,CAAC;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,UAAU,cAAc;IAEpB,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,WAAW,EAAE,oBAAoB,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;CACxC;AAED,qBACa,qBAAsB,SAAQ,KAAK,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC;IAE1E,MAAM,EAAE,MAAM,CAAM;IACpB,OAAO,EAAE,MAAM,CAAM;gBAET,IAAI,KAAA;IA+BhB,MAAM;IA4CN,OAAO,WAAkB,UAAU,mBAIjC;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Panel.d.ts b/types/UI/Components/Panel.d.ts index 38ad6b2..5025a0a 100644 --- a/types/UI/Components/Panel.d.ts +++ b/types/UI/Components/Panel.d.ts @@ -1,7 +1,6 @@ import * as React from 'react'; import '../Css/PanelStyle.less'; import { DownPanelStore } from '../Store/DownPanelStore'; -import { RightPanelStore } from '../Store/RightPanelStore/RightPanelStore'; import { TopPanelStore } from '../Store/TopPanelStore'; interface TopPanelState { isCollapse: boolean; @@ -30,11 +29,11 @@ export declare class DownPanel extends React.Component<{ store: DownPanelStore; }, {}> { showHideSyncEnable: boolean; - rStore: RightPanelStore; private downStore; private handleChange; private operHelper; private GetLightType; + private GetFontStyleOption; componentDidMount(): void; render(): JSX.Element; } diff --git a/types/UI/Components/Panel.d.ts.map b/types/UI/Components/Panel.d.ts.map index 30d285a..806b3c8 100644 --- a/types/UI/Components/Panel.d.ts.map +++ b/types/UI/Components/Panel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/Panel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAqB/B,OAAO,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAqB,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAUvD,UAAU,aAAa;IAEnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;CACxB;AACD,aAAK,aAAa;IAEd,KAAK,UAAU;IACf,IAAI,SAAS;CAChB;AAQD,qBAEa,QAAS,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,EAAE,EAAE,CAAC;IAEzE,OAAO,CAAC,QAAQ,CAAgC;IAChD,KAAK,EAAE,aAAa,CAAC;gBACT,KAAK,KAAA;IASjB,WAAW,qBAGT;IACF,YAAY,aAGV;IACF,iBAAiB,aAcf;IAEF,cAAc,sBAkBZ;IACF,MAAM;IAsGN,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,cAAc,CAMpB;CACL;AAGD,qBAEa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,cAAc,CAAC;CAAE,EAAE,EAAE,CAAC;IAE9D,kBAAkB,UAAS;IACvC,MAAM,EAAE,eAAe,CAAiC;IACxD,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,YAAY,CAmGlB;IACF,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,YAAY;IAYpB,iBAAiB,IAAI,IAAI;IAKzB,MAAM;CAkPT"} \ No newline at end of file +{"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/Panel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAwB/B,OAAO,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAqB,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAUvD,UAAU,aAAa;IAEnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,aAAa,CAAC;CACxB;AACD,aAAK,aAAa;IAEd,KAAK,UAAU;IACf,IAAI,SAAS;CAChB;AAQD,qBAEa,QAAS,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,EAAE,EAAE,CAAC;IAEzE,OAAO,CAAC,QAAQ,CAAgC;IACxC,KAAK,EAAE,aAAa,CAAC;gBACjB,KAAK,KAAA;IASjB,WAAW,qBAGT;IACF,YAAY,aAGV;IACF,iBAAiB,aAcf;IAEF,cAAc,sBAkBZ;IACF,MAAM;IAsGN,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,cAAc,CAMpB;CACL;AAGD,qBAEa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,cAAc,CAAC;CAAE,EAAE,EAAE,CAAC;IAE9D,kBAAkB,UAAS;IACvC,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,YAAY,CA8GlB;IACF,OAAO,CAAC,UAAU;IAuBlB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,kBAAkB;IAe1B,iBAAiB,IAAI,IAAI;IAKzB,MAAM;CA+PT"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/BoardEdgeRemarksComponent.d.ts.map b/types/UI/Components/RightPanel/BoardEdgeRemarksComponent.d.ts.map index 30eb2cc..344f94d 100644 --- a/types/UI/Components/RightPanel/BoardEdgeRemarksComponent.d.ts.map +++ b/types/UI/Components/RightPanel/BoardEdgeRemarksComponent.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardEdgeRemarksComponent.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/BoardEdgeRemarksComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAK9E,qBAEa,yBAA0B,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,eAAe,CAAC;CAAE,CAAC;IAExF,MAAM;IA4DN,OAAO,CAAC,EAAE,CAIR;IACF,OAAO,CAAC,IAAI;CAIf"} \ No newline at end of file +{"version":3,"file":"BoardEdgeRemarksComponent.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/BoardEdgeRemarksComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAK9E,qBAEa,yBAA0B,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,eAAe,CAAC;CAAE,CAAC;IAExF,MAAM;IA2DN,OAAO,CAAC,EAAE,CAIR;IACF,OAAO,CAAC,IAAI;CAIf"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/BoardPropsComponent.d.ts b/types/UI/Components/RightPanel/BoardPropsComponent.d.ts index 30d5d05..d9f9b14 100644 --- a/types/UI/Components/RightPanel/BoardPropsComponent.d.ts +++ b/types/UI/Components/RightPanel/BoardPropsComponent.d.ts @@ -10,6 +10,9 @@ export declare const BoardPropsComponent: { _IsSpecialBoard: import("mobx").IObservableValue; canDrawSpecial: import("mobx").IObservableValue; canModeling: import("mobx").IObservableValue; + canSideModeling: import("mobx").IObservableValue; + canCurve: import("mobx").IObservableValue; + arcBoardOptions: Map; remarks: [string, string][]; otherBoardData: { isChaiDan: boolean; @@ -17,11 +20,18 @@ export declare const BoardPropsComponent: { isAssociationDrillLock: boolean; } & import("mobx").IObservableObject; _UIConfigOPtion: import("../../Store/OptionInterface/IOptionInterface").IUiOption; + arcBoardConfig: { + sweepVisibleFace: import("../../../Add-on/DrawDrilling/DrillType").FaceDirection; + sweepAngle: number; + isDrawArcGroove: boolean; + arcBoardFeedProcess: import("../../../DatabaseServices/Entity/ArcBoardType").ArcBoardFeedProcess; + } & import("mobx").IObservableObject; + ProcessingGroupList: import("mobx").IObservableArray; readonly CurrentBoard: Board; render(): JSX.Element; setBrConfig: (() => void) & import("mobx").IAction; InitRectBoardDrillOption: (() => void) & import("mobx").IAction; - SetRectHighDrill: () => void; + SetRectHighDrillAndSealColor: () => void; handleComfirmOption: () => void; handleChangeCurrentBoard: (br: Board) => void; context: any; @@ -32,7 +42,7 @@ export declare const BoardPropsComponent: { readonly props: Readonly<{ board: Board; }> & Readonly<{ - children?: React.ReactNode; + children?: React.ReactNode | undefined; }>; state: Readonly<{}>; refs: { @@ -66,6 +76,6 @@ export declare const BoardPropsComponent: { }>, nextState: Readonly<{}>, nextContext: any): void; }; displayName: string; - contextType?: React.Context; + contextType?: React.Context | undefined; }; //# sourceMappingURL=BoardPropsComponent.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/RightPanel/BoardPropsComponent.d.ts.map b/types/UI/Components/RightPanel/BoardPropsComponent.d.ts.map index 9b6b196..d1a1e33 100644 --- a/types/UI/Components/RightPanel/BoardPropsComponent.d.ts.map +++ b/types/UI/Components/RightPanel/BoardPropsComponent.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardPropsComponent.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/BoardPropsComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAkH/D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAqC,CAAC"} \ No newline at end of file +{"version":3,"file":"BoardPropsComponent.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/BoardPropsComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AA4H/D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAqC,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/CommonMetalPanel.d.ts b/types/UI/Components/RightPanel/CommonMetalPanel.d.ts index 6ae741b..4a55c1c 100644 --- a/types/UI/Components/RightPanel/CommonMetalPanel.d.ts +++ b/types/UI/Components/RightPanel/CommonMetalPanel.d.ts @@ -1,8 +1,10 @@ import * as React from 'react'; import { Entity } from '../../../DatabaseServices/Entity/Entity'; import { BaseHardwareStore } from '../../Store/RightPanelStore/HardwareStore'; +import { EMetalsType } from './RightPanelInterface'; export interface ICommonMetalPanelProps { store: BaseHardwareStore; + compositeType?: EMetalsType; isTopline?: boolean; entity?: Entity; } @@ -11,10 +13,12 @@ export declare class CommonMetalPanel extends React.Component import { IKnifeProps, IUiOption } from "../../../Store/OptionInterface/IOptionInterface"; interface IKnifeModalProps { id: string; diff --git a/types/UI/Components/RightPanel/Modeling/knifePropsModal.d.ts.map b/types/UI/Components/RightPanel/Modeling/knifePropsModal.d.ts.map index 1934cf4..e3b011d 100644 --- a/types/UI/Components/RightPanel/Modeling/knifePropsModal.d.ts.map +++ b/types/UI/Components/RightPanel/Modeling/knifePropsModal.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"knifePropsModal.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/RightPanel/Modeling/knifePropsModal.tsx"],"names":[],"mappings":";AAQA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAGzF,UAAU,gBAAgB;IAEtB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,WAAW,CAAC;IAC1B,QAAQ,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,QAAG;CAChB;;AAmED,wBAAyC"} \ No newline at end of file +{"version":3,"file":"knifePropsModal.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/RightPanel/Modeling/knifePropsModal.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAGzF,UAAU,gBAAgB;IAEtB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,WAAW,CAAC;IAC1B,QAAQ,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,UAAU,QAAG;CAChB;gCAE+B,gBAAgB;AAiEhD,wBAAyC"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/ReservedEdgeComponrnt.d.ts b/types/UI/Components/RightPanel/ReservedEdgeComponrnt.d.ts new file mode 100644 index 0000000..7f2b1c5 --- /dev/null +++ b/types/UI/Components/RightPanel/ReservedEdgeComponrnt.d.ts @@ -0,0 +1,10 @@ +import * as React from 'react'; +import { RightPanelStore } from '../../Store/RightPanelStore/RightPanelStore'; +export declare class ReservedEdgeComponent extends React.Component<{ + store?: RightPanelStore; +}> { + render(): JSX.Element; + private ok; + private exit; +} +//# sourceMappingURL=ReservedEdgeComponrnt.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/RightPanel/ReservedEdgeComponrnt.d.ts.map b/types/UI/Components/RightPanel/ReservedEdgeComponrnt.d.ts.map new file mode 100644 index 0000000..23699df --- /dev/null +++ b/types/UI/Components/RightPanel/ReservedEdgeComponrnt.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ReservedEdgeComponrnt.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/ReservedEdgeComponrnt.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAK9E,qBAEa,qBAAsB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,eAAe,CAAC;CAAE,CAAC;IAEpF,MAAM;IAkEN,OAAO,CAAC,EAAE,CAaR;IACF,OAAO,CAAC,IAAI;CAIf"} \ 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 5cae884..991f220 100644 --- a/types/UI/Components/RightPanel/RightPanel.d.ts +++ b/types/UI/Components/RightPanel/RightPanel.d.ts @@ -16,7 +16,8 @@ export declare enum RightTabId { Model2 = "modeing2", Model3 = "modeing3", ModuelParams = "moduleparams", - BoardEgdeRemark = "boardedgeremark" + BoardEgdeRemark = "boardedgeremark", + ReservedEdge = "ReservedEdge" } export declare class RightPanel extends React.Component<{ store?: RightPanelStore; diff --git a/types/UI/Components/RightPanel/RightPanel.d.ts.map b/types/UI/Components/RightPanel/RightPanel.d.ts.map index 140601f..9c15c2d 100644 --- a/types/UI/Components/RightPanel/RightPanel.d.ts.map +++ b/types/UI/Components/RightPanel/RightPanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RightPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/RightPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAI9E,OAAO,mBAAmB,CAAC;AAI3B,OAAO,iBAAiB,CAAC;AAKzB,OAAO,sBAAsB,CAAC;AAG9B,oBAAY,UAAU;IAElB,UAAU,eAAe;IACzB,KAAK,YAAY;IACjB,IAAI,YAAY;IAChB,KAAK,aAAa;IAClB,KAAK,WAAW;IAChB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,aAAa,kBAAkB;IAC/B,MAAM,WAAW;IACjB,MAAM,aAAa;IACnB,MAAM,aAAa;IACnB,YAAY,iBAAiB;IAC7B,eAAe,oBAAoB;CACtC;AAED,qBAEa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,eAAe,CAAC;CAAE,CAAC;IAEzE,OAAO,CAAC,WAAW,CAAkC;gBACzC,KAAK,KAAA;IAKjB,KAAK,aAIH;IACF,WAAW;IAIX,iBAAiB;IAUjB,MAAM;CAuCT"} \ No newline at end of file +{"version":3,"file":"RightPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/RightPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAI9E,OAAO,mBAAmB,CAAC;AAI3B,OAAO,iBAAiB,CAAC;AAMzB,OAAO,sBAAsB,CAAC;AAG9B,oBAAY,UAAU;IAElB,UAAU,eAAe;IACzB,KAAK,YAAY;IACjB,IAAI,YAAY;IAChB,KAAK,aAAa;IAClB,KAAK,WAAW;IAChB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,aAAa,kBAAkB;IAC/B,MAAM,WAAW;IACjB,MAAM,aAAa;IACnB,MAAM,aAAa;IACnB,YAAY,iBAAiB;IAC7B,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;CAChC;AAED,qBAEa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,eAAe,CAAC;CAAE,CAAC;IAEzE,OAAO,CAAC,WAAW,CAAkC;gBACzC,KAAK,KAAA;IAKjB,KAAK,aAIH;IACF,WAAW;IAIX,iBAAiB;IAUjB,MAAM;CAwCT"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/RightPanelInterface.d.ts b/types/UI/Components/RightPanel/RightPanelInterface.d.ts index 84dc2cb..117bb05 100644 --- a/types/UI/Components/RightPanel/RightPanelInterface.d.ts +++ b/types/UI/Components/RightPanel/RightPanelInterface.d.ts @@ -13,6 +13,8 @@ export interface IHardwareOption extends IBaseOption { spec: string; comments: string; isHole: boolean; + goodsId?: string; + goodsSn?: string; } export interface ICylMetalsOption extends IHardwareOption { rad: number; @@ -37,6 +39,8 @@ export interface ICompHardwareOption extends IHardwareOption { color: string; [EBoardKeyList.Mat]: string; count: string; + goodsId: string; + goodsSn: string; } export interface IToplineOption extends IHardwareOption { addLen: string; diff --git a/types/UI/Components/RightPanel/RightPanelInterface.d.ts.map b/types/UI/Components/RightPanel/RightPanelInterface.d.ts.map index 4c24d6a..cc0addb 100644 --- a/types/UI/Components/RightPanel/RightPanelInterface.d.ts.map +++ b/types/UI/Components/RightPanel/RightPanelInterface.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RightPanelInterface.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/RightPanelInterface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAE3E,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAEhD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IACjC,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IAErD,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IAErD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,oBAAY,WAAW;IAEnB,MAAM,iBAAO;IACb,IAAI,iBAAO;CACd;AAED,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAExD,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAe,SAAQ,eAAe;IAEnD,MAAM,EAAE,MAAM,CAAC;CAClB"} \ No newline at end of file +{"version":3,"file":"RightPanelInterface.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/RightPanelInterface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAE3E,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAEhD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IACjC,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IAErD,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAiB,SAAQ,eAAe;IAErD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,oBAAY,WAAW;IAEnB,MAAM,iBAAO;IACb,IAAI,iBAAO;CACd;AAED,MAAM,WAAW,mBAAoB,SAAQ,eAAe;IAExD,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAe,SAAQ,eAAe;IAEnD,MAAM,EAAE,MAAM,CAAC;CAClB"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/SealingComponent.d.ts.map b/types/UI/Components/RightPanel/SealingComponent.d.ts.map index 0599337..7900d7e 100644 --- a/types/UI/Components/RightPanel/SealingComponent.d.ts.map +++ b/types/UI/Components/RightPanel/SealingComponent.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SealingComponent.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/SealingComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAM9E,qBAEa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,eAAe,CAAC;CAAE,CAAC;IAE/E,MAAM;IAkEN,OAAO,CAAC,EAAE,CAKR;IACF,OAAO,CAAC,IAAI;CAIf"} \ No newline at end of file +{"version":3,"file":"SealingComponent.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/SealingComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,eAAe,EAAE,MAAM,6CAA6C,CAAC;AAO9E,qBAEa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,eAAe,CAAC;CAAE,CAAC;IAE/E,MAAM;IAkFN,OAAO,CAAC,EAAE,CAKR;IACF,OAAO,CAAC,IAAI;CAIf"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/SunLightGui.d.ts b/types/UI/Components/RightPanel/SunLightGui.d.ts index c4ff4f7..c299379 100644 --- a/types/UI/Components/RightPanel/SunLightGui.d.ts +++ b/types/UI/Components/RightPanel/SunLightGui.d.ts @@ -10,6 +10,7 @@ export default class SunLightGui extends Component { SunLightRotate: (e: React.PointerEvent) => Promise; SetSunLightIntensity: (val: number) => Promise; SetSunLightIndirectIntensity: (val: number) => Promise; + SetSunLightSourceAngle: (val: number) => Promise; SetSunLightPosition: (rotate: number, elevation: number) => void; DrawElevation: () => void; private SyncSunLight; diff --git a/types/UI/Components/RightPanel/SunLightGui.d.ts.map b/types/UI/Components/RightPanel/SunLightGui.d.ts.map index 665f95a..ff57932 100644 --- a/types/UI/Components/RightPanel/SunLightGui.d.ts.map +++ b/types/UI/Components/RightPanel/SunLightGui.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SunLightGui.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/SunLightGui.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAazC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS;IAE9C,YAAY,kCAAqC;IACjD,eAAe,qCAAwC;IACvD,kBAAkB,kCAAqC;IACvD,aAAa,kCAAqC;IAElD,KAAK,gBAA+B;IACpC,iBAAiB,MAAa,kBAAkB,mBAkD9C;IAGF,cAAc,MAAa,kBAAkB,mBA4C3C;IAEF,oBAAoB,QAAe,MAAM,mBA0BvC;IAEF,4BAA4B,QAAe,MAAM,mBA2B/C;IAEF,mBAAmB,WAAY,MAAM,aAAa,MAAM,KAAG,IAAI,CAY7D;IAEF,aAAa,aAmCX;IAGF,OAAO,CAAC,YAAY;IAMpB,iBAAiB;IAMjB,MAAM;CA4dT"} \ No newline at end of file +{"version":3,"file":"SunLightGui.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/SunLightGui.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAezC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS;IAE9C,YAAY,kCAAqC;IACjD,eAAe,qCAAwC;IACvD,kBAAkB,kCAAqC;IACvD,aAAa,kCAAqC;IAElD,KAAK,gBAA+B;IACpC,iBAAiB,MAAa,KAAK,CAAC,YAAY,mBAkD9C;IAGF,cAAc,MAAa,KAAK,CAAC,YAAY,mBA4C3C;IAEF,oBAAoB,QAAe,MAAM,mBA0BvC;IAEF,4BAA4B,QAAe,MAAM,mBA2B/C;IAEF,sBAAsB,QAAe,MAAM,mBA2BzC;IAEF,mBAAmB,WAAY,MAAM,aAAa,MAAM,KAAG,IAAI,CAY7D;IAEF,aAAa,aAmCX;IAGF,OAAO,CAAC,YAAY;IAMpB,iBAAiB;IAMjB,MAAM;CA6hBT"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/SunLightStore.d.ts b/types/UI/Components/RightPanel/SunLightStore.d.ts index 1611404..102f196 100644 --- a/types/UI/Components/RightPanel/SunLightStore.d.ts +++ b/types/UI/Components/RightPanel/SunLightStore.d.ts @@ -1,6 +1,7 @@ export declare class SunLightStore { sunLightIntensity: number; sunLightIndirectLightingIntensity: number; + sunLightSourceAngle: number; sunLightElevationDeg: number; sunLightRotateDeg: number; sunLightColor: string; diff --git a/types/UI/Components/RightPanel/SunLightStore.d.ts.map b/types/UI/Components/RightPanel/SunLightStore.d.ts.map index 24b985c..b65c744 100644 --- a/types/UI/Components/RightPanel/SunLightStore.d.ts.map +++ b/types/UI/Components/RightPanel/SunLightStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SunLightStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/SunLightStore.ts"],"names":[],"mappings":"AAQA,qBAAa,aAAa;IAEV,iBAAiB,EAAE,MAAM,CAAM;IAC/B,iCAAiC,EAAE,MAAM,CAAK;IAC9C,oBAAoB,EAAE,MAAM,CAAM;IAClC,iBAAiB,EAAE,MAAM,CAAO;IAChC,aAAa,EAAE,MAAM,CAAa;IAClC,wBAAwB,EAAE,MAAM,CAAQ;IAEpD,OAAO;IAgDP,UAAU;IAiBV,OAAO,CAAC,MAAM,CAAC,eAAe,CAAgB;IAC9C,MAAM,CAAC,WAAW,IAAI,aAAa;CAMtC"} \ No newline at end of file +{"version":3,"file":"SunLightStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/SunLightStore.ts"],"names":[],"mappings":"AAQA,qBAAa,aAAa;IAEV,iBAAiB,EAAE,MAAM,CAAM;IAC/B,iCAAiC,EAAE,MAAM,CAAK;IAC9C,mBAAmB,EAAE,MAAM,CAAO;IAClC,oBAAoB,EAAE,MAAM,CAAM;IAClC,iBAAiB,EAAE,MAAM,CAAO;IAChC,aAAa,EAAE,MAAM,CAAa;IAClC,wBAAwB,EAAE,MAAM,CAAQ;IAEpD,OAAO;IAgDP,UAAU;IAkBV,OAAO,CAAC,MAAM,CAAC,eAAe,CAAgB;IAC9C,MAAM,CAAC,WAAW,IAAI,aAAa;CAMtC"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/TemplateMaterial.d.ts b/types/UI/Components/RightPanel/TemplateMaterial.d.ts new file mode 100644 index 0000000..0ac59b3 --- /dev/null +++ b/types/UI/Components/RightPanel/TemplateMaterial.d.ts @@ -0,0 +1,14 @@ +import { ITemplateParam } from "../../Store/RightPanelStore/ITemplateParam"; +interface ITemplateMaterialProps { + opt: ITemplateParam; + AddMaterial: (data: { + material_id: string; + name: string; + logo: string; + }, opt: ITemplateParam) => void; + onClose?: () => void; + disabled?: boolean; +} +export declare function TemplateMaterialButton(props: ITemplateMaterialProps): JSX.Element; +export {}; +//# sourceMappingURL=TemplateMaterial.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/RightPanel/TemplateMaterial.d.ts.map b/types/UI/Components/RightPanel/TemplateMaterial.d.ts.map new file mode 100644 index 0000000..17d90a2 --- /dev/null +++ b/types/UI/Components/RightPanel/TemplateMaterial.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"TemplateMaterial.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/RightPanel/TemplateMaterial.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAG5E,UAAU,sBAAsB;IAE5B,GAAG,EAAE,cAAc,CAAC;IACpB,WAAW,EAAE,CAAC,IAAI,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,EAAE,GAAG,EAAE,cAAc,KAAK,IAAI,CAAC;IACvG,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,sBAAsB,eAyEnE"} \ No newline at end of file diff --git a/types/UI/Components/RightPanel/TemplateParamPanel.d.ts b/types/UI/Components/RightPanel/TemplateParamPanel.d.ts index 3197419..8c43e03 100644 --- a/types/UI/Components/RightPanel/TemplateParamPanel.d.ts +++ b/types/UI/Components/RightPanel/TemplateParamPanel.d.ts @@ -21,8 +21,17 @@ export declare class TemplateParamPanel extends React.Component<{}, {}> { private BatchModifyCurrentChildrenCabinetName; private HandleNodeSelect; private GetAllChildFromThisTemplate; + /** + * 删除节点 + * @param {ITreeNode} nodeData 节点 + * @param {DelTempOpera} delTemplateOpera 删除模板操作类型 + */ private DeleteTreeNode; HightightSpace: (node: ITreeNode, type: HighlightingType) => void; + showNode: (node: ITreeNode, isShowNode: boolean) => void; + hiddenNode: (node: ITreeNode, isHiddenNode: boolean) => void; + showChildrenNode: (node: ITreeNode, isShowChildrenNode: boolean) => void; + hiddenChildrenNode: (node: ITreeNode, isHiddenChildrenNode: boolean) => void; SeparateSpace: (nodeData: ITreeNode) => void; FoldAll: () => void; render(): JSX.Element; @@ -31,10 +40,16 @@ export declare class TemplateParamDetail extends React.Component<{}> { store: TemplateParamPanelStore; private onKeydown; GetAssociateBrNums(tr: TemplateRecord): number; + ShowAssocBrs(tr: TemplateRecord): void; ShowSplitType: (tr: TemplateRecord) => "X" | "Y" | "Z" | "空"; ChangeInputUIClass: (par: ITemplateParam) => void; CheckParamExpr: (par: ITemplateParam) => boolean; ApplyParamExpr: () => Promise; + AddMaterial: (data: { + material_id: string; + name: string; + logo: string; + }, opt: ITemplateParam) => Promise; private RenderParams; private HandleRotateValue; private ButtonClickHandleRotateValue; diff --git a/types/UI/Components/RightPanel/TemplateParamPanel.d.ts.map b/types/UI/Components/RightPanel/TemplateParamPanel.d.ts.map index fa98bd2..8b1f613 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,EAA4D,SAAS,EAAwB,MAAM,mBAAmB,CAAC;AAG9H,OAAO,KAAK,MAAM,OAAO,CAAC;AAgB1B,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,CAOxC;IAEF,iBAAiB,OAAQ,cAAc,eAAe,MAAM,UAU1D;IAEF,OAAO,CAAC,qCAAqC,CAW3C;IAIF,OAAO,CAAC,gBAAgB,CAqBtB;IAGF,OAAO,CAAC,2BAA2B,CAKjC;IAGF,OAAO,CAAC,cAAc,CAgBpB;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,2BAejC;IAGF,kBAAkB,QAAS,cAAc,UAIvC;IAKF,cAAc,QAAS,cAAc,aA0BnC;IAGF,cAAc,sBAsCZ;IAEF,OAAO,CAAC,YAAY;IAyCpB,OAAO,CAAC,iBAAiB;YAmBX,4BAA4B;IAkB1C,OAAO,CAAC,6BAA6B;IAwF9B,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,EAA+C,SAAS,EAAQ,MAAM,mBAAmB,CAAC;AAGjG,OAAO,KAAK,MAAM,OAAO,CAAC;AAoB1B,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAMnF,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,qDAAqD,CAAC;AAM9F,aAAK,gBAAgB;IAEjB,IAAI,IAAI;IACR,KAAK,IAAI;CACZ;AAGD,qBACa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAE3D,KAAK,EAAE,uBAAuB,CAAyC;IACvE,iBAAiB;IAKjB,kBAAkB;YAMJ,gBAAgB;IAiB9B,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,eAAe,CA6IrB;IAKF,OAAO,CAAC,QAAQ,CAkBd;IAEF,OAAO,CAAC,WAAW,CAMjB;IAGF,OAAO,CAAC,kCAAkC,CAOxC;IAEF,iBAAiB,OAAQ,cAAc,eAAe,MAAM,UAU1D;IAEF,OAAO,CAAC,qCAAqC,CAW3C;IAIF,OAAO,CAAC,gBAAgB,CAqBtB;IAGF,OAAO,CAAC,2BAA2B,CAKjC;IAEF;;;;OAIG;IACH,OAAO,CAAC,cAAc,CAsCpB;IAGF,cAAc,SAAU,SAAS,QAAQ,gBAAgB,UAoCvD;IAEF,QAAQ,SAAU,SAAS,cAAc,OAAO,UAgB9C;IAGF,UAAU,SAAU,SAAS,gBAAgB,OAAO,UAelD;IAGF,gBAAgB,SAAU,SAAS,sBAAsB,OAAO,UAmB9D;IAGF,kBAAkB,SAAU,SAAS,wBAAwB,OAAO,UAmBlE;IAGF,aAAa,aAAc,SAAS,UAqBlC;IAEF,OAAO,aASL;IAEF,MAAM;CA6DT;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;IAM9C,YAAY,CAAC,EAAE,EAAE,cAAc;IAS/B,aAAa,OAAQ,cAAc,2BAejC;IAGF,kBAAkB,QAAS,cAAc,UAIvC;IAKF,cAAc,QAAS,cAAc,aA0BnC;IAGF,cAAc,sBAsCZ;IAEF,WAAW,SAAgB;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,OAAO,cAAc,mBAkBlG;IAEF,OAAO,CAAC,YAAY;IAkDpB,OAAO,CAAC,iBAAiB;YAmBX,4BAA4B;IAkB1C,OAAO,CAAC,6BAA6B;IAwF9B,MAAM;CAqGhB"} \ No newline at end of file diff --git a/types/UI/Components/Sheet/PulldownSelect.d.ts b/types/UI/Components/Sheet/PulldownSelect.d.ts new file mode 100644 index 0000000..45dd098 --- /dev/null +++ b/types/UI/Components/Sheet/PulldownSelect.d.ts @@ -0,0 +1,36 @@ +import React from "react"; +import "./PulldownSelect.css"; +type optionType = { + value: string; + label: string; +}; +type SelectProps = { + children?: React.ReactNode; + value?: string; + options?: optionType[]; + readOnly?: boolean; + canInput?: boolean; + defaultShow?: boolean; + onChange?: (option: optionType) => void; + onInput?: (value: string) => void; + onBlur?: (e: React.FormEvent) => void; +}; +/** + * 下拉选择器 + * @param {string} [value] 当前选择的值 + * @param {{value: string; label: string;}[]} [options] 选项列表 + * @param {boolean} [readOnly] 是否只读,默认false + * @param {boolean} [canInput] 是否支持输入,默认false + * @param {boolean} [defaultShow] 是否默认显示下拉选项,默认false + * @param {Function} [onChange] 选项变化的回调函数 + * @param {Function} [onInput] 内容输入的回调函数 + * @param {Function} [onBlur] 失去焦点的回调函数 + * @example + const [val, setVal] = React.useState("A"); + const options = [{ value: "A", label: "选项A" }, { value: "B", label: "选项B" }]; + const handleChange = (o: any) => {setVal(o.value)}; + + */ +export declare function PulldownSelect(props: SelectProps): JSX.Element; +export {}; +//# sourceMappingURL=PulldownSelect.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Sheet/PulldownSelect.d.ts.map b/types/UI/Components/Sheet/PulldownSelect.d.ts.map new file mode 100644 index 0000000..f3e5314 --- /dev/null +++ b/types/UI/Components/Sheet/PulldownSelect.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"PulldownSelect.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Sheet/PulldownSelect.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,sBAAsB,CAAC;AAE9B,KAAK,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;CAAE,CAAC;AACpD,KAAK,WAAW,GAAG;IACf,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;CACzD,CAAC;AACF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,eAsDhD"} \ No newline at end of file diff --git a/types/UI/Components/Sheet/TableSheet.d.ts b/types/UI/Components/Sheet/TableSheet.d.ts new file mode 100644 index 0000000..e54a160 --- /dev/null +++ b/types/UI/Components/Sheet/TableSheet.d.ts @@ -0,0 +1,47 @@ +import { CellBase, Matrix } from "react-spreadsheet"; +import "./TableSheet.css"; +type MultiCellValue = { + type?: "text" | "select"; + options?: { + value: string; + label: string; + }[]; +}; +export type ProCellBase = { + multiValue?: MultiCellValue; +} & CellBase; +/** 单元格里的值的类型 */ +export type CellValue = string; +/** TableSheet组件的props类型 */ +type TableSheetProps = { + className?: string; + /** 数据 */ + data: Matrix>; + /** 列标签 */ + columnLabels?: string[]; + /** 行标签 */ + rowLabels?: string[]; + /** 表头是否可拖动调节列宽 */ + resizable?: boolean; + /** 数据变化的回调 */ + onChange?: (data: Matrix>) => void; +}; +/** + * 类Excel的表格组件 + * @param {Matrix>} data 数据 + * @param {string[]} [columnLabels] 列标签 + * @param {string[]} [rowLabels] 行标签 + * @param {(data: Matrix>) => void} [onChange] 数据变化的回调 + * @example + * const columnLabels = ["第A列", "第B列"]; + * const rowLabels = ["第1行", "第2行"]; + * const data = [ + [{ value: "张三" }, { value: "刚满18岁(只读)", readOnly: true }], + [{ value: "李四" }, { value: "80老头有低保", }], + ]; + * const onChange = (data) => console.log(data); + * + */ +export declare function TableSheet(props: TableSheetProps): JSX.Element; +export {}; +//# sourceMappingURL=TableSheet.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Sheet/TableSheet.d.ts.map b/types/UI/Components/Sheet/TableSheet.d.ts.map new file mode 100644 index 0000000..57ac0ce --- /dev/null +++ b/types/UI/Components/Sheet/TableSheet.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"TableSheet.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Sheet/TableSheet.tsx"],"names":[],"mappings":"AAEA,OAAoB,EAAE,QAAQ,EAAoC,MAAM,EAAQ,MAAM,mBAAmB,CAAC;AAE1G,OAAO,kBAAkB,CAAC;AAE1B,KAAK,cAAc,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAAC,OAAO,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;KAAE,EAAE,CAAC;CAAE,CAAC;AACnG,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAAE,UAAU,CAAC,EAAE,cAAc,CAAC;CAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5E,gBAAgB;AAChB,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAC/B,2BAA2B;AAC3B,KAAK,eAAe,GAAG;IAEnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS;IACT,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IACrC,UAAU;IACV,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU;IACV,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,kBAAkB;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc;IACd,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,KAAK,IAAI,CAAC;CAC7D,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,eAkLhD"} \ No newline at end of file diff --git a/types/UI/Components/SourceManage/CommonPanel.d.ts.map b/types/UI/Components/SourceManage/CommonPanel.d.ts.map index 66677a1..2f66b07 100644 --- a/types/UI/Components/SourceManage/CommonPanel.d.ts.map +++ b/types/UI/Components/SourceManage/CommonPanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CommonPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/CommonPanel.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"CommonPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/CommonPanel.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Components/SourceManage/DirTreeComponent.d.ts.map b/types/UI/Components/SourceManage/DirTreeComponent.d.ts.map index f80b73e..f722680 100644 --- a/types/UI/Components/SourceManage/DirTreeComponent.d.ts.map +++ b/types/UI/Components/SourceManage/DirTreeComponent.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DirTreeComponent.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/DirTreeComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA8C,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG7F,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,yBAAyB,CAAC;AAMjC,MAAM,WAAW,MAAM;IAEnB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACzB;AACD,UAAU,YAAY;IAElB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACvE,oBAAoB,CAAC,EAAE,MAAM,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AACD,UAAU,WAAW;IAEjB,YAAY,CAAC,EAAE,CAAC,sBAAsB,EAAE,YAAY,EAAE,EAAE,cAAc,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC/G,eAAe,CAAC,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACrG,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IAC9E,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CAClE;AAED,UAAU,YAAY;IAElB,UAAU,EAAE,eAAe,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,YAAY,CAAC;CAC5B;AAED,UAAU,YAAa,SAAQ,YAAY,EAAE,WAAW;IAEpD,eAAe,CAAC,EAAE,MAAM,GAAG,CAAC,OAAO,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AACD,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC;IAE7E,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,CAIxC;IACF,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,cAAc,CAAc;IACpC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAiB;IACrC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,gBAAgB,CAItB;IAEF,OAAO,CAAC,MAAM,CAAqC;IACnD,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,IAAI,KAAA;IAiBhB,OAAO,CAAC,qBAAqB,CAY3B;IAEF,OAAO,CAAC,eAAe;IAYvB,OAAO,CAAC,WAAW,CAwBjB;IAEF,OAAO,CAAC,eAAe,CA0BrB;IAEF,OAAO,CAAC,oBAAoB,CAwB1B;IAEF,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,UAAU,CAIhB;IAGF,OAAO,CAAC,kBAAkB,CAQxB;IAGF,OAAO,CAAC,aAAa,CAYnB;IAEF,OAAO,CAAC,UAAU,CAMhB;IACF,gBAAgB,WAAY,eAAe,UAMzC;IAOF,OAAO,CAAC,eAAe,CAqBrB;IAGF,OAAO,CAAC,YAAY,CAalB;IAGF,OAAO,CAAC,eAAe,CAOrB;IAGF,eAAe,sBAWb;IAGF,OAAO,CAAC,aAAa,CAoBnB;IAMF,OAAO,CAAC,mBAAmB,CAqBzB;IAEF,OAAO,CAAC,kBAAkB,CAYxB;IAEF,OAAO,CAAC,eAAe,CAqBrB;IACF,OAAO,CAAC,iBAAiB,CAsHvB;IAEF,OAAO,CAAC,kBAAkB,CAoBxB;IAEF,OAAO,CAAC,eAAe,CAqCrB;IAEF,OAAO,CAAC,OAAO,CAqDb;IACF,OAAO,CAAC,WAAW,CAwCjB;IAEF,OAAO,CAAC,gBAAgB,CAOtB;IAGF,oBAAoB,UAAW,aAAa,EAAE,CAAC,EAAE,UAG/C;IAGF,OAAO,CAAC,eAAe,CAiDrB;IACF,iBAAiB;IA2BjB,oBAAoB;IAkBpB,kBAAkB,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI;IAK9G,MAAM,CAAC,wBAAwB,CAAC,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAC;;;;IAcpG,MAAM,IAAI,KAAK,CAAC,SAAS;CAuB5B"} \ No newline at end of file +{"version":3,"file":"DirTreeComponent.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/DirTreeComponent.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Components/SourceManage/FileList.d.ts.map b/types/UI/Components/SourceManage/FileList.d.ts.map index a682391..dac4e63 100644 --- a/types/UI/Components/SourceManage/FileList.d.ts.map +++ b/types/UI/Components/SourceManage/FileList.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"FileList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/FileList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EAAc,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAK1D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,WAAW,cAAc;IAE3B,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;KAAE,KAAK,IAAI,CAAC;IAClD,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,CAAC,CAAC,KAAA,EAAE,IAAI,KAAA,KAAK,IAAI,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAC;IACrC,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,eAAe,CAAC;CAChC;AAED,qBAEa,QAAS,SAAQ,KAAK,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC;IAC7D,cAAc,SAAgB,SAAS,mBAKrC;IAOF,WAAW,OAAc,MAAM,mBA+C7B;IACF,OAAO,CAAC,eAAe,CA6HrB;IACK,MAAM;CAgChB"} \ No newline at end of file +{"version":3,"file":"FileList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/FileList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/B,OAAO,EAAc,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAK1D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,WAAW,cAAc;IAE3B,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;KAAE,KAAK,IAAI,CAAC;IAClD,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,CAAC,CAAC,KAAA,EAAE,IAAI,KAAA,KAAK,IAAI,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAC;IACrC,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,OAAO,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,eAAe,CAAC;CAChC;AAED,qBAEa,QAAS,SAAQ,KAAK,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC;IAE7D,cAAc,SAAgB,SAAS,mBAKrC;IAOF,WAAW,OAAc,MAAM,mBA+C7B;IACF,OAAO,CAAC,eAAe,CAyIrB;IACK,MAAM;CAgChB"} \ No newline at end of file diff --git a/types/UI/Components/SourceManage/ImgList.d.ts.map b/types/UI/Components/SourceManage/ImgList.d.ts.map index 2e1f3cf..8db3f8f 100644 --- a/types/UI/Components/SourceManage/ImgList.d.ts.map +++ b/types/UI/Components/SourceManage/ImgList.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ImgList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/ImgList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG1D,MAAM,WAAW,aAAa;IAE1B,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;KAAE,KAAK,IAAI,CAAC;IAClD,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,CAAC,CAAC,KAAA,EAAE,IAAI,KAAA,KAAK,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,qBAEa,OAAQ,SAAQ,KAAK,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,CAAC;IAC3D,iBAAiB,CAAC,GAAG,KAAA;IAuCrB,eAAe,qBAQb;IAEF,gBAAgB,MAAO,gBAAgB,CAAC,WAAW,CAAC,qBAuBlD;IAEK,MAAM;CAyChB"} \ No newline at end of file +{"version":3,"file":"ImgList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/ImgList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG1D,MAAM,WAAW,aAAa;IAE1B,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;KAAE,KAAK,IAAI,CAAC;IAClD,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,MAAM,CAAC,EAAE,CAAC,CAAC,KAAA,EAAE,IAAI,KAAA,KAAK,IAAI,CAAC;IAC3B,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;KAAE,CAAC;IACrC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,qBAEa,OAAQ,SAAQ,KAAK,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,CAAC;IAC3D,iBAAiB,CAAC,GAAG,KAAA;IAuCrB,eAAe,qBAQb;IAEF,gBAAgB,MAAO,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,qBAuBlD;IAEK,MAAM;CAyChB"} \ No newline at end of file diff --git a/types/UI/Components/SourceManage/MaterialList.d.ts.map b/types/UI/Components/SourceManage/MaterialList.d.ts.map index 3e2a2de..b43a37a 100644 --- a/types/UI/Components/SourceManage/MaterialList.d.ts.map +++ b/types/UI/Components/SourceManage/MaterialList.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"MaterialList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/MaterialList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAwB/B,MAAM,WAAW,aAAa;IAE1B,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAA,KAAK,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC,KAAA,EAAE,IAAI,KAAA,KAAK,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,CAAC;IAChE,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,CAEzC;IACK,KAAK;;MAEV;IACF,OAAO,CAAC,QAAQ,CAAyC;IAEzD,OAAO,CAAC,MAAM,CAQZ;IACF,OAAO,CAAC,eAAe,CAIrB;IACF,OAAO,CAAC,WAAW,CAmHjB;IACF,OAAO,CAAC,QAAQ,CAQd;IACF,OAAO,CAAC,SAAS,CAcf;IACF,OAAO,CAAC,QAAQ,CAuBd;IACF,OAAO,CAAC,WAAW,CAyDjB;IACF,iBAAiB;IAIjB,oBAAoB;IAIb,MAAM;IAmDb,OAAO,CAAC,eAAe,CA+DrB;IAGF,OAAO,CAAC,MAAM,CAOZ;IACF,OAAO,CAAC,eAAe,CAGrB;IACF,OAAO,CAAC,UAAU,CAAyC;IAC3D,OAAO,CAAC,WAAW,CAIjB;CACL;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;CAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAU3F"} \ No newline at end of file +{"version":3,"file":"MaterialList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/MaterialList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAqB/B,MAAM,WAAW,aAAa;IAE1B,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,KAAA,KAAK,IAAI,CAAC;IAC3B,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC,KAAA,EAAE,IAAI,KAAA,KAAK,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC9B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,CAAC;IAEhE,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,CAEzC;IACK,KAAK;;MAEV;IACF,OAAO,CAAC,QAAQ,CAAyC;IAEzD,OAAO,CAAC,MAAM,CAQZ;IACF,OAAO,CAAC,eAAe,CAIrB;IACF,OAAO,CAAC,WAAW,CAkFjB;IACF,OAAO,CAAC,QAAQ,CAQd;IACF,OAAO,CAAC,SAAS,CAcf;IACF,OAAO,CAAC,QAAQ,CAuBd;IACF,OAAO,CAAC,WAAW,CAkCjB;IACF,iBAAiB;IAIjB,oBAAoB;IAIb,MAAM;IAmDb,OAAO,CAAC,eAAe,CA+DrB;IAGF,OAAO,CAAC,MAAM,CAOZ;IACF,OAAO,CAAC,eAAe,CAGrB;IACF,OAAO,CAAC,UAAU,CAAyC;IAC3D,OAAO,CAAC,WAAW,CAIjB;CACL;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;CAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAU3F"} \ No newline at end of file diff --git a/types/UI/Components/SourceManage/SpaceInfoBar.d.ts b/types/UI/Components/SourceManage/SpaceInfoBar.d.ts index c0b11d3..e27833d 100644 --- a/types/UI/Components/SourceManage/SpaceInfoBar.d.ts +++ b/types/UI/Components/SourceManage/SpaceInfoBar.d.ts @@ -1,9 +1,12 @@ import * as React from 'react'; import { TopPanelStore } from '../../Store/TopPanelStore'; +import './SpaceInfoBarDetails.less'; export declare class SpaceInfoBar extends React.Component<{ store?: TopPanelStore; }, {}> { UNSAFE_componentWillMount(): Promise; + loading: boolean; + handlePrivateFileDir: () => Promise; render(): JSX.Element; } //# sourceMappingURL=SpaceInfoBar.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/SourceManage/SpaceInfoBar.d.ts.map b/types/UI/Components/SourceManage/SpaceInfoBar.d.ts.map index 21aad09..a3a52b7 100644 --- a/types/UI/Components/SourceManage/SpaceInfoBar.d.ts.map +++ b/types/UI/Components/SourceManage/SpaceInfoBar.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SpaceInfoBar.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/SpaceInfoBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAY1D,qBAEa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,EAAE,EAAE,CAAC;IAEvE,yBAAyB;IAI/B,MAAM;CAgCT"} \ No newline at end of file +{"version":3,"file":"SpaceInfoBar.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/SourceManage/SpaceInfoBar.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,4BAA4B,CAAC;AAWpC,qBAEa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,EAAE,EAAE,CAAC;IAEvE,yBAAyB;IAInB,OAAO,EAAE,OAAO,CAAQ;IAEpC,oBAAoB,sBAOlB;IACF,MAAM;CA8GT"} \ No newline at end of file diff --git a/types/UI/Components/TaskControl/TaskStore.d.ts b/types/UI/Components/TaskControl/TaskStore.d.ts index 2c8d99c..158179c 100644 --- a/types/UI/Components/TaskControl/TaskStore.d.ts +++ b/types/UI/Components/TaskControl/TaskStore.d.ts @@ -16,7 +16,7 @@ export default class TaskStore { /** 更新运行时间 */ UpdateTime: () => void; /** 获取任务列表 */ - GetTaskList: (task?: Task) => void; + GetTaskList(task?: Task): void; private static _SingleInstance; static GetInstance(): TaskStore; } diff --git a/types/UI/Components/TaskControl/TaskStore.d.ts.map b/types/UI/Components/TaskControl/TaskStore.d.ts.map index f943f06..345c95c 100644 --- a/types/UI/Components/TaskControl/TaskStore.d.ts.map +++ b/types/UI/Components/TaskControl/TaskStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TaskStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/TaskControl/TaskStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAGvD,MAAM,WAAW,QAAQ;IAErB,EAAE,EAAE,GAAG,CAAC;IACR,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,CAAC,OAAO,OAAO,SAAS;IAE1B,cAAc;IACF,UAAU,aAAoB;IAC1C,cAAc;IACF,QAAQ,aAAoB;IACxC,UAAU;IACV,KAAK,MAAC;IACN,WAAW;IACX,OAAO,UAAQ;IAEf,aAAa;IACb,UAAU,aAcR;IAEF,aAAa;IACb,WAAW,UAAW,IAAI,UAkDxB;IAEF,OAAO,CAAC,MAAM,CAAC,eAAe,CAAY;IAC1C,MAAM,CAAC,WAAW,IAAI,SAAS;CAMlC"} \ No newline at end of file +{"version":3,"file":"TaskStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/TaskControl/TaskStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAGvD,MAAM,WAAW,QAAQ;IAErB,EAAE,EAAE,GAAG,CAAC;IACR,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,CAAC,OAAO,OAAO,SAAS;IAE1B,cAAc;IACF,UAAU,EAAS,QAAQ,EAAE,CAAC;IAC1C,cAAc;IACF,QAAQ,EAAS,QAAQ,EAAE,CAAC;IACxC,UAAU;IACV,KAAK,MAAC;IACN,WAAW;IACX,OAAO,UAAQ;IAEf,aAAa;IACb,UAAU,aAcR;IAEF,aAAa;IAEb,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI;IAoDvB,OAAO,CAAC,MAAM,CAAC,eAAe,CAAY;IAC1C,MAAM,CAAC,WAAW,IAAI,SAAS;CAMlC"} \ No newline at end of file diff --git a/types/UI/Components/Template/GetRoomCabName.d.ts b/types/UI/Components/Template/GetRoomCabName.d.ts index f5f3248..fcf58e2 100644 --- a/types/UI/Components/Template/GetRoomCabName.d.ts +++ b/types/UI/Components/Template/GetRoomCabName.d.ts @@ -20,6 +20,8 @@ export interface IGetRoomInfo { lockRoomName?: boolean; lockCabName?: boolean; lockBoardName?: boolean; + isBoard?: boolean; + isHardwareEntity?: boolean; } interface IGetRoomCabNameProps { option: IGetRoomInfo; diff --git a/types/UI/Components/Template/GetRoomCabName.d.ts.map b/types/UI/Components/Template/GetRoomCabName.d.ts.map index 4185f94..77721f3 100644 --- a/types/UI/Components/Template/GetRoomCabName.d.ts.map +++ b/types/UI/Components/Template/GetRoomCabName.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"GetRoomCabName.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Template/GetRoomCabName.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAC;AAG/E,MAAM,WAAW,YAAY;IAEzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,UAAU,oBAAoB;IAE1B,MAAM,EAAE,YAAY,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC,oBAAoB,CAAC;IACrE,OAAO,CAAC,SAAS,CAoBf;IACK,MAAM;IA2Gb,OAAO,CAAC,mBAAmB,CAMzB;CACL"} \ No newline at end of file +{"version":3,"file":"GetRoomCabName.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Template/GetRoomCabName.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAC;AAG/E,MAAM,WAAW,YAAY;IAEzB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;IAChC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC7B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,UAAU,oBAAoB;IAE1B,MAAM,EAAE,YAAY,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC,oBAAoB,CAAC;IAErE,OAAO,CAAC,SAAS,CAoBf;IACK,MAAM;IAgIb,OAAO,CAAC,mBAAmB,CAMzB;CACL"} \ 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 index fed5c26..63f6278 100644 --- a/types/UI/Components/Template/InsertTemplateByBasePoint.d.ts.map +++ b/types/UI/Components/Template/InsertTemplateByBasePoint.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"InsertTemplateByBasePoint.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Template/InsertTemplateByBasePoint.ts"],"names":[],"mappings":"AAeA,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,EAAE,MAAM,UAAQ,iBAyNhH"} \ No newline at end of file +{"version":3,"file":"InsertTemplateByBasePoint.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Template/InsertTemplateByBasePoint.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAUnF,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,wBAAsB,yBAAyB,CAAC,QAAQ,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,YAAY,EAAE,MAAM,UAAQ,iBAsOhH"} \ No newline at end of file diff --git a/types/UI/Components/Template/MaterialTemplateCache.d.ts b/types/UI/Components/Template/MaterialTemplateCache.d.ts new file mode 100644 index 0000000..b5d11cf --- /dev/null +++ b/types/UI/Components/Template/MaterialTemplateCache.d.ts @@ -0,0 +1,5 @@ +import { PhysicalMaterialRecord } from "../../../DatabaseServices/PhysicalMaterialRecord"; +export declare function GetMaterialByIdName(id_name: string): Promise; +export declare function GetMaterialByName(name: string): PhysicalMaterialRecord; +export declare function GetMaterialById(mtlId: string): Promise; +//# sourceMappingURL=MaterialTemplateCache.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Template/MaterialTemplateCache.d.ts.map b/types/UI/Components/Template/MaterialTemplateCache.d.ts.map new file mode 100644 index 0000000..c736f99 --- /dev/null +++ b/types/UI/Components/Template/MaterialTemplateCache.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"MaterialTemplateCache.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Template/MaterialTemplateCache.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAG1F,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,mCAiBxD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,0BAI7C;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,mCAoBlD"} \ No newline at end of file diff --git a/types/UI/Components/Template/TemplateActionDiglog.d.ts b/types/UI/Components/Template/TemplateActionDiglog.d.ts index a9f07cf..b3d472f 100644 --- a/types/UI/Components/Template/TemplateActionDiglog.d.ts +++ b/types/UI/Components/Template/TemplateActionDiglog.d.ts @@ -1,6 +1,7 @@ import { IObservableValue } from 'mobx'; import * as React from 'react'; import { TemplateAction } from '../../../DatabaseServices/Template/Action/TemplateAction'; +import { TempalteActionRadiusType } from '../../../DatabaseServices/Template/Action/TemplateaRadiusAction'; import { ITemplateParam } from "../../Store/RightPanelStore/ITemplateParam"; import { TempalteEditorStore } from '../../Store/TemplateEditorStore'; import { IActionParam } from './TemplateActionList'; @@ -10,7 +11,8 @@ export declare enum EEditorActionType { AddFillet = 2,//添加倒角动作 AddParams = 3,//添加参数 SetMaterial = 4,//设置材质 - SetEdge = 5 + SetEdge = 5,//设置封边 + AddRadius = 6 } export declare enum ActionStretchType { Grips = 0,//夹点 @@ -34,6 +36,7 @@ export declare class TempalteActionDialog extends React.Component private TemplateDrawHingeTool; commonPanel: React.RefObject; currentDirId: string; + curParams: TemplateParam[]; constructor(props: any); private renderNav; private renderMenuItems; @@ -65,9 +67,11 @@ export declare class TemplateManage extends React.Component private findMatchingDirs; private getDirData; private noUseOverAllOptionsChange; + private handleDelete; private renderTemplateList; handleHotKey: (e: KeyboardEvent) => void; private findMatchingItem; + SetImageDefaultTemplate: (id: string) => void; GetOptionConfig(m_Option: ITemplateManageOption, autoCutOption: IDrawBoardAutoCutOption): TemplateManageOption; componentDidMount(): Promise; componentWillUnmount(): void; @@ -77,6 +81,7 @@ export declare class TemplateManage extends React.Component *板名、柜名、房名 openDir跟随 * @param {IGetRoomInfo} entInfo 替换前的模块信息 * @param {TemplateRecord} newTemp 替换后的模块 + * @param {boolean} isHingeOrHandle 复合实体模块时 如果判断是否是IsDoor() 没通过,先判断是否为铰链把手 在判断name.includes("门") */ -export declare function followAttribute(entInfo: IGetRoomInfo, newTemp: TemplateRecord): void; +export declare function followAttribute(entInfo: IGetRoomInfo, newTemp: TemplateRecord, isHingeOrHandle?: boolean): void; //# sourceMappingURL=TemplateComponent.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/Template/TemplateComponent.d.ts.map b/types/UI/Components/Template/TemplateComponent.d.ts.map index 5c79aa3..8d94e26 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;AAgB/B,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAOjE,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAcnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAA2B,eAAe,EAAE,qBAAqB,EAAE,oBAAoB,EAAsB,MAAM,kDAAkD,CAAC;AAO7K,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAM3E,OAAO,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOhE,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,CAAC;IACpE,OAAO,CAAC,MAAM,CAgBZ;IACU,aAAa,EAAE,uBAAuB,CAA4C;IAC9F,OAAO,CAAC,QAAQ,CAA6C;IAE7D,OAAO,CAAC,iBAAiB,CAAa;IAC1B,oBAAoB,EAAE,qBAAqB,CAQrD;IAEF,OAAO,CAAC,iBAAiB,CAAyB;IACtC,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,mBAAmB,CAA2D;IAClG,OAAO,CAAC,qBAAqB,CAAwB;IACrD,WAAW,+BAAkC;IAEjC,YAAY,EAAE,MAAM,CAA2B;gBAE/C,KAAK,KAAA;IAOjB,OAAO,CAAC,SAAS,CA6Bf;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,CAgCzB;IACF,OAAO,CAAC,gBAAgB,CAsHtB;IACF,OAAO,CAAC,YAAY,CAMlB;IAGF,OAAO,CAAC,aAAa,CAwMnB;IAGF,OAAO,CAAC,gBAAgB,CAQtB;IAEF,OAAO,CAAC,yBAAyB,CAiH/B;IAEF;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB,CAmB1B;IAEF;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAkD3B;;;;UAIM;IACN,OAAO,CAAC,yBAAyB;IAkDjC,kBAAkB,CAAC,IAAI,EAAE,MAAM;IA4B/B,OAAO,CAAC,UAAU,CAMhB;IAEF,OAAO,CAAC,wBAAwB,CAQ9B;IAGF,OAAO,CAAC,gBAAgB,CAgCtB;IAEF,OAAO,CAAC,UAAU,CAGhB;IAGF,OAAO,CAAC,yBAAyB,CAS/B;IAEF,OAAO,CAAC,kBAAkB,CA+CxB;IACF,YAAY,MAAO,aAAa,UA2B9B;IAEF,OAAO,CAAC,gBAAgB,CAiBtB;IAEF,eAAe,CAAC,QAAQ,EAAE,qBAAqB,EAAE,aAAa,EAAE,uBAAuB;IAgBjF,iBAAiB;IAQvB,oBAAoB;IAab,MAAM;CAwHhB;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,QAgF7E"} \ 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;AAqB/B,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAKjE,OAAO,EAAE,aAAa,EAAE,MAAM,wDAAwD,CAAC;AAKvF,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAgBnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAA2B,eAAe,EAAE,qBAAqB,EAAE,oBAAoB,EAAsB,MAAM,kDAAkD,CAAC;AAO7K,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAM3E,OAAO,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOhE,qBACa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,CAAC;IAEpE,OAAO,CAAC,MAAM,CAkBZ;IACU,aAAa,EAAE,uBAAuB,CAA4C;IAC9F,OAAO,CAAC,QAAQ,CAA6C;IAE7D,OAAO,CAAC,iBAAiB,CAAa;IAC1B,oBAAoB,EAAE,qBAAqB,CASrD;IAEF,OAAO,CAAC,iBAAiB,CAAyB;IACtC,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,mBAAmB,CAA2D;IAClG,OAAO,CAAC,qBAAqB,CAAwB;IACrD,WAAW,+BAAkC;IAEjC,YAAY,EAAE,MAAM,CAA2B;IAE3D,SAAS,EAAE,aAAa,EAAE,CAAM;gBAEpB,KAAK,KAAA;IAOjB,OAAO,CAAC,SAAS,CA6Bf;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,CAgDlB;IACF,OAAO,CAAC,oBAAoB,CAS1B;IACF,OAAO,CAAC,cAAc,CAkCpB;IACF,OAAO,CAAC,mBAAmB,CAsEzB;IACF,OAAO,CAAC,gBAAgB,CAsHtB;IACF,OAAO,CAAC,YAAY,CAMlB;IAGF,OAAO,CAAC,aAAa,CAkNnB;IAGF,OAAO,CAAC,gBAAgB,CAiBtB;IAEF,OAAO,CAAC,yBAAyB,CAwH/B;IAEF;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;;;OAIG;IACH,OAAO,CAAC,oBAAoB,CAmB1B;IAEF;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAkD3B;;;;UAIM;IACN,OAAO,CAAC,yBAAyB;IAkDjC,kBAAkB,CAAC,IAAI,EAAE,MAAM;IA4B/B,OAAO,CAAC,UAAU,CAMhB;IAEF,OAAO,CAAC,wBAAwB,CAQ9B;IAGF,OAAO,CAAC,gBAAgB,CAgCtB;IAEF,OAAO,CAAC,UAAU,CAGhB;IAGF,OAAO,CAAC,yBAAyB,CAS/B;IACF,OAAO,CAAC,YAAY,CAalB;IAEF,OAAO,CAAC,kBAAkB,CAkDxB;IACF,YAAY,MAAO,aAAa,UA2B9B;IAEF,OAAO,CAAC,gBAAgB,CAiBtB;IAEF,uBAAuB,OAAQ,MAAM,UAWnC;IAEF,eAAe,CAAC,QAAQ,EAAE,qBAAqB,EAAE,aAAa,EAAE,uBAAuB;IAiBjF,iBAAiB;IAQvB,oBAAoB;IAab,MAAM;CAyHhB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe,UAAQ,QAwFtG"} \ No newline at end of file diff --git a/types/UI/Components/Template/TemplateDetail.d.ts b/types/UI/Components/Template/TemplateDetail.d.ts index 9003075..cb3ce53 100644 --- a/types/UI/Components/Template/TemplateDetail.d.ts +++ b/types/UI/Components/Template/TemplateDetail.d.ts @@ -23,6 +23,7 @@ export declare class TemplateDetail extends React.Component; - RelativeMetalsToBoard(allEntitys: Entity[], isLROpen: boolean, door: Board | HardwareCompositeEntity): boolean; + RelativeMetalsToBoard(allEntitys: Entity[], isLROpen: boolean, door: Board | HardwareCompositeEntity, spaceOCS: Matrix4): boolean; private GetHingeMoveNum; } export declare function GetHingeType(door: Entity, openDir: BoardOpenDir, allSpaceEnts: Entity[], isLROpen: boolean): HingeType; diff --git a/types/UI/Components/Template/TemplateDrawHingeTool.d.ts.map b/types/UI/Components/Template/TemplateDrawHingeTool.d.ts.map index 63c4f0c..2348f68 100644 --- a/types/UI/Components/Template/TemplateDrawHingeTool.d.ts.map +++ b/types/UI/Components/Template/TemplateDrawHingeTool.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateDrawHingeTool.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Template/TemplateDrawHingeTool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAgD,MAAM,uDAAuD,CAAC;AAQhI,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAa,MAAM,iDAAiD,CAAC;AAC1F,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAEjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4DAA4D,CAAC;AACrG,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAWnF,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,QAAQ,CAA4B;IAEtC,cAAc,CAAC,IAAI,EAAE,KAAK,GAAG,uBAAuB,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IA2S3I,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,GAAG,uBAAuB;IA8KpG,OAAO,CAAC,eAAe;CAoH1B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAG,SAAS,CAqQtH;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,QAQ9C"} \ No newline at end of file +{"version":3,"file":"TemplateDrawHingeTool.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Template/TemplateDrawHingeTool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,OAAO,EAAW,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAgD,MAAM,uDAAuD,CAAC;AAQhI,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAa,MAAM,iDAAiD,CAAC;AAC1F,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAEjE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4DAA4D,CAAC;AACrG,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAWnF,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,QAAQ,CAA4B;IAEtC,cAAc,CAAC,IAAI,EAAE,KAAK,GAAG,uBAAuB,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IA2S3I,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,GAAG,uBAAuB,EAAE,QAAQ,EAAE,OAAO;IAoLvH,OAAO,CAAC,eAAe;CAsH1B;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,GAAG,SAAS,CAqQtH;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,QAoB9C"} \ No newline at end of file diff --git a/types/UI/Components/Template/TemplateList.d.ts b/types/UI/Components/Template/TemplateList.d.ts index 7afbb06..962e396 100644 --- a/types/UI/Components/Template/TemplateList.d.ts +++ b/types/UI/Components/Template/TemplateList.d.ts @@ -1,10 +1,11 @@ import { IObservableValue } from 'mobx'; import * as React from 'react'; +import { TemplateParam } from '../../../DatabaseServices/Template/Param/TemplateParam'; import { IDrawerDoorTempInfo, ISelectTempInfo } from '../../Store/DoorInterface'; +import { ITemplateManageOption } from '../../Store/OptionInterface/TemplateManageOption'; import { ITemplateParam } from "../../Store/RightPanelStore/ITemplateParam"; import { TempalteEditorStore } from '../../Store/TemplateEditorStore'; import { IDirectoryProps } from '../SourceManage/CommonPanel'; -import { IGetRoomInfo } from './GetRoomCabName'; export interface ITemplateListProps { deleteFun?: (temp: { module_id: any; @@ -25,7 +26,7 @@ export interface ITemplateListProps { /**选择的模板信息 */ selectInfo?: ISelectTempInfo; currentDir?: IDirectoryProps; - cabOption?: IGetRoomInfo; + templateManageOption?: ITemplateManageOption; selectIds?: Set; showInfos?: boolean; insert?: (bool: boolean) => void; @@ -33,6 +34,8 @@ export interface ITemplateListProps { searchDir?: boolean; isShowDetail?: boolean; isFromResource?: boolean; + params: TemplateParam[]; + SetImageDefaultTemplate?: (id: string) => void; } export interface ITempItemBack { diy_logo: string; @@ -47,7 +50,6 @@ export interface ITempItemBack { source?: string; } export declare class TemplateList extends React.Component { - private _params; private watchDir; openResourceTree: IObservableValue; store: TempalteEditorStore; diff --git a/types/UI/Components/Template/TemplateList.d.ts.map b/types/UI/Components/Template/TemplateList.d.ts.map index 6b0210d..48282c9 100644 --- a/types/UI/Components/Template/TemplateList.d.ts.map +++ b/types/UI/Components/Template/TemplateList.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Template/TemplateList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAwB,MAAM,MAAM,CAAC;AAE9D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAe/B,OAAO,EAA2C,mBAAmB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC1H,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,EAAe,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAI3E,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD,MAAM,WAAW,kBAAkB;IAE/B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,SAAS,MAAC;KAAE,KAAK,IAAI,CAAC;IAC3C,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IACnE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe;IACf,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACrC,eAAe;IACf,WAAW,EAAE,mBAAmB,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY;IACZ,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kBAAkB;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa;IACb,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAE1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,CAAC;IACjE,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAAW;IAC3B,gBAAgB,4BAAyB;IACzC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,qBAAqB,EAAE,WAAW,CAAC;IAEnC,eAAe,4BAAyB;IAExC,yBAAyB;IAQzB,oBAAoB;IAKb,MAAM;IA0Cb,OAAO,CAAC,gBAAgB,CAmGtB;IAEF,OAAO,CAAC,eAAe,CAkErB;IAEF,OAAO,CAAC,2BAA2B,CA0BjC;IAGF,OAAO,CAAC,MAAM,CAOZ;IAGF,OAAO,CAAC,WAAW,CA+BjB;IAGF,OAAO,CAAC,SAAS,CAiBf;IAEF,OAAO,CAAC,eAAe,CAGrB;IAGF,OAAO,CAAC,WAAW,CAGjB;IAEF,OAAO,CAAC,aAAa,CAInB;IAGF,OAAO,CAAC,OAAO,CAKb;CACL"} \ No newline at end of file +{"version":3,"file":"TemplateList.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/Template/TemplateList.tsx"],"names":[],"mappings":"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"} \ 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 333f684..5742289 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;AAW/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;IAqJb,OAAO,CAAC,WAAW,CA8BjB;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,CAsD3B;IAEF,OAAO,CAAC,6BAA6B,CAyCnC;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;AAW/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;IAEnF,OAAO,CAAC,aAAa,CAAyB;IAClC,OAAO,CAAC,iBAAiB,CAAS;IAC9C,OAAO,CAAC,YAAY,CAAmB;IACvC,kBAAkB;IAKX,MAAM;IA+Jb,OAAO,CAAC,WAAW,CA8BjB;IACF,OAAO,CAAC,oBAAoB,CA2B1B;IAEF;;OAEG;IACH,OAAO,CAAC,aAAa,CAwBnB;IACF,OAAO,CAAC,aAAa,CAInB;IACF,OAAO,CAAC,UAAU,CAShB;IACF,OAAO,CAAC,mBAAmB,CA0BzB;IAEF,OAAO,CAAC,iBAAiB,CAiDvB;IACF,OAAO,CAAC,oBAAoB,CAa1B;IACF,OAAO,CAAC,qBAAqB,CAsD3B;IAEF,OAAO,CAAC,6BAA6B,CAyCnC;CACL"} \ No newline at end of file diff --git a/types/UI/Components/Template/TemplateSelect.d.ts b/types/UI/Components/Template/TemplateSelect.d.ts index 54da713..9156280 100644 --- a/types/UI/Components/Template/TemplateSelect.d.ts +++ b/types/UI/Components/Template/TemplateSelect.d.ts @@ -1,5 +1,6 @@ import { IObservableValue } from 'mobx'; import * as React from 'react'; +import { TemplateParam } from '../../../DatabaseServices/Template/Param/TemplateParam'; import { DoorDrawerStore } from '../../Store/DoorDrawerStore/DoorDrawerStore'; export interface ITemplateselectProps { open: IObservableValue; @@ -10,6 +11,7 @@ export declare class TemplateSelect extends React.Component void; callback?: Function; selectAll?: boolean; + isHideErrorMsg?: boolean; + inputTitle?: boolean; } /** * 参数option为属性对象 diff --git a/types/UI/Components/Toaster.d.ts.map b/types/UI/Components/Toaster.d.ts.map index 1029e8a..5401a5c 100644 --- a/types/UI/Components/Toaster.d.ts.map +++ b/types/UI/Components/Toaster.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Toaster.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/Toaster.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAA8B,MAAM,mBAAmB,CAAC;AAGtF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,eAAO,MAAM,UAAU,sCAIrB,CAAC;AACH,YAAY;AACZ,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,QAuB7F;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,QAI5C;AAED,UAAU,kBAAmB,SAAQ,cAAc;IAE/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,CAAC,CAAC,CAAC,KAAA,EAAE,QAAQ,CAAC,EAAE,OAAO,OAAE;IAChC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAA,OAAE;IACb,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,KAAA,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;GAEG;AACH,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,CAAC;IAErE,OAAO,CAAC,QAAQ,CAAS;IACb,QAAQ,SAAM;IACd,OAAO,CAAC,YAAY,CAAQ;IACxC,MAAM,CAAC,YAAY;;MAEjB;IAEF,WAAW,MAAO,MAAM,UAWtB;IACF,YAAY,MAAO,MAAM,WAAW,CAAC,gBAAgB,CAAC,UAyCpD;IACF,WAAW,mBAKT;IACF,aAAa,mBAIX;IACF,UAAU,mBAQR;IACF,WAAW,MAAO,gBAAgB,CAAC,gBAAgB,CAAC,UAIlD;IACF,yBAAyB;IAYzB,OAAO,CAAC,kBAAkB,CAAW;IACrC,iBAAiB;IASjB,oBAAoB;IAMpB,gCAAgC,CAAC,SAAS,KAAA;IAO1C,MAAM;CA8BT;AAED,mCAAmC;AACnC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACf,UAiBA"} \ No newline at end of file +{"version":3,"file":"Toaster.d.ts","sourceRoot":"","sources":["../../../../src/UI/Components/Toaster.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAA8B,MAAM,mBAAmB,CAAC;AAGtF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,eAAO,MAAM,UAAU,sCAIrB,CAAC;AACH,YAAY;AACZ,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,QAuB7F;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,QAI5C;AAED,UAAU,kBAAmB,SAAQ,cAAc;IAE/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,CAAC,CAAC,CAAC,KAAA,EAAE,QAAQ,CAAC,EAAE,OAAO,OAAE;IAChC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAA,OAAE;IACb,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,KAAA,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,CAAC;IAErE,OAAO,CAAC,QAAQ,CAAS;IACb,QAAQ,SAAM;IACd,OAAO,CAAC,YAAY,CAAQ;IACxC,MAAM,CAAC,YAAY;;MAEjB;IAEF,WAAW,MAAO,MAAM,UAWtB;IACF,YAAY,MAAO,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,UAyCpD;IACF,WAAW,mBAKT;IACF,aAAa,mBAIX;IACF,UAAU,mBAQR;IACF,WAAW,MAAO,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAIlD;IACF,yBAAyB;IAYzB,OAAO,CAAC,kBAAkB,CAAW;IACrC,iBAAiB;IASjB,oBAAoB;IAMpB,gCAAgC,CAAC,SAAS,KAAA;IAO1C,MAAM;CAgCT;AAED,mCAAmC;AACnC,wBAAgB,yBAAyB,CAAC,MAAM,EAAE;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACf,UAiBA"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/Component/Color.d.ts b/types/UI/Components/ToolBar/Layer/Component/Color.d.ts new file mode 100644 index 0000000..cebbfac --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/Component/Color.d.ts @@ -0,0 +1,27 @@ +import React from "react"; +import "./Color.css"; +/** 颜色选择的弹窗 */ +export declare class ColorDialog extends React.Component<{ + colorIndex: number; + onConfirm?: (colorIndex?: number) => void; +}> { + constructor(props: any); + /** 图层名称输入框的DOM */ + _ColorManagerRef: React.RefObject; + render(): JSX.Element; +} +/** 颜色选择器 */ +declare class ColorManager extends React.Component<{ + colorIndex: number; +}> { + constructor(props: any); + /** 当前选择的颜色索引 */ + colorIndex: number; + render(): JSX.Element; +} +/** 颜色块 */ +export declare const ColorBlock: (props: { + colorIndex: number; +}) => JSX.Element; +export {}; +//# sourceMappingURL=Color.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/Component/Color.d.ts.map b/types/UI/Components/ToolBar/Layer/Component/Color.d.ts.map new file mode 100644 index 0000000..1fc1586 --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/Component/Color.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Color.d.ts","sourceRoot":"","sources":["../../../../../../../src/UI/Components/ToolBar/Layer/Component/Color.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,aAAa,CAAC;AAGrB,cAAc;AACd,qBACa,WAAY,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAAE,CAAC;gBACpG,KAAK,KAAA;IAKjB,kBAAkB;IAClB,gBAAgB,gCAAmC;IAG5C,MAAM;CAkChB;AAED,YAAY;AACZ,cACM,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;CAAE,CAAC;gBACnD,KAAK,KAAA;IAKjB,gBAAgB;IAEhB,UAAU,SAAyB;IAG5B,MAAM;CAchB;AAED,UAAU;AACV,eAAO,MAAM,UAAU,UAAW;IAAE,UAAU,EAAE,MAAM,CAAC;CAAE,gBAAyJ,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/Component/ColorAPI.d.ts b/types/UI/Components/ToolBar/Layer/Component/ColorAPI.d.ts new file mode 100644 index 0000000..4b0ab1a --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/Component/ColorAPI.d.ts @@ -0,0 +1,11 @@ +export declare class ColorAPI { + /** 获取WebCAD中的颜色 */ + static GetColor: (colorIndex: number) => string; + /** 获取WebCAD中的颜色索引(头尾相连) */ + static GetColorIndex: (index: number) => number; + /** RGB转黑白色 */ + static Rgb2Gray: (r: number, g: number, b: number) => 0 | 255; + /** 获取WebCAD中的颜色对应的反向黑白色 */ + static GetGrayColor(colorIndex: number): string; +} +//# sourceMappingURL=ColorAPI.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/Component/ColorAPI.d.ts.map b/types/UI/Components/ToolBar/Layer/Component/ColorAPI.d.ts.map new file mode 100644 index 0000000..2acb53d --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/Component/ColorAPI.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ColorAPI.d.ts","sourceRoot":"","sources":["../../../../../../../src/UI/Components/ToolBar/Layer/Component/ColorAPI.ts"],"names":[],"mappings":"AAEA,qBAAa,QAAQ;IAEjB,mBAAmB;IACnB,MAAM,CAAC,QAAQ,eAAgB,MAAM,YAA2G;IAEhJ,2BAA2B;IAC3B,MAAM,CAAC,aAAa,UAAW,MAAM,YAAmB;IAExD,cAAc;IACd,MAAM,CAAC,QAAQ,MAAO,MAAM,KAAK,MAAM,KAAK,MAAM,aAA6D;IAE/G,2BAA2B;IAC3B,MAAM,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM;CAKzC"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/Component/Icon.d.ts b/types/UI/Components/ToolBar/Layer/Component/Icon.d.ts new file mode 100644 index 0000000..3a9c4e8 --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/Component/Icon.d.ts @@ -0,0 +1,7 @@ +/** 创建一个SVG图标 */ +export declare const IconSVG: (props: { + name: string; + size?: number; + color?: string; +}) => JSX.Element; +//# sourceMappingURL=Icon.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/Component/Icon.d.ts.map b/types/UI/Components/ToolBar/Layer/Component/Icon.d.ts.map new file mode 100644 index 0000000..ca216c6 --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/Component/Icon.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../../../../../../../src/UI/Components/ToolBar/Layer/Component/Icon.tsx"],"names":[],"mappings":"AAEA,gBAAgB;AAChB,eAAO,MAAM,OAAO,UAAW;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CAAE,gBA0C9E,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/Component/Select.d.ts b/types/UI/Components/ToolBar/Layer/Component/Select.d.ts new file mode 100644 index 0000000..e3114c9 --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/Component/Select.d.ts @@ -0,0 +1,26 @@ +import React from "react"; +import "./Select.css"; +export interface ISelectOption { + /** 选项的显示(可以是字符串或JSX) */ + label: string | JSX.Element; + /** key值,可选-(不填表示,只做显示,不做选择) */ + value?: TSelectValue; + /** 用于重载选项的点击事件 */ + onClick?: (currentItem?: ISelectOption, HandleChange?: (currentItem?: ISelectOption) => void) => void; + /** 用于传递的数据(可随意挂载) */ + data?: Record; +} +export type TSelectValue = string | number; +/** 下拉选择器 */ +export declare class SelectInLayer extends React.Component<{ + value: TSelectValue; + options: ISelectOption[]; + style?: React.CSSProperties; + isColorByValue?: boolean; + onChange?: (currentItem?: ISelectOption) => void; +}> { + constructor(props: any); + private _IsShow; + render(): JSX.Element; +} +//# sourceMappingURL=Select.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/Component/Select.d.ts.map b/types/UI/Components/ToolBar/Layer/Component/Select.d.ts.map new file mode 100644 index 0000000..bdd8150 --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/Component/Select.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../../../../../src/UI/Components/ToolBar/Layer/Component/Select.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,cAAc,CAAC;AAEtB,MAAM,WAAW,aAAa;IAE1B,wBAAwB;IACxB,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC;IAC5B,+BAA+B;IAC/B,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,kBAAkB;IAClB,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,YAAY,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,aAAa,KAAK,IAAI,KAAK,IAAI,CAAC;IACtG,qBAAqB;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AACD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3C,YAAY;AACZ,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,aAAa,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;CAAE,CAAC;gBAC/L,KAAK,KAAA;IAYjB,OAAO,CAAC,OAAO,CAAS;IAExB,MAAM;CAkCT"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/LayerCMD.d.ts b/types/UI/Components/ToolBar/Layer/LayerCMD.d.ts new file mode 100644 index 0000000..c2ef086 --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/LayerCMD.d.ts @@ -0,0 +1,44 @@ +import { Entity } from "../../../../DatabaseServices/Entity/Entity"; +import { ViewportEntity } from "../../../../DatabaseServices/ViewportEntity"; +import type { ILayerNode, ILayerTemplate } from "./State/Type"; +/** 图层命令 */ +export declare class LayerCMD { + /** 创建图层 */ + static AppendLayer: () => void; + /** 创建文件夹 */ + static AppendLayerFolder: () => void; + /** 删除图层 */ + static RemoveLayer: (node: ILayerNode, moveWhere?: string) => void; + /** 置为当前图层 */ + static SetCurrentLayer: (node: ILayerNode) => void; + /** 修改实体所在的图层 */ + static PutEntitysInLayer: (ens: Entity[], node: ILayerNode) => void; + /** 设置是否显示 */ + static UpdateShow: (node: ILayerNode) => void; + /** 设置是否锁定 */ + static UpdateLock: (node: ILayerNode, isLock: boolean) => void; + /** 设置是否视口冻结 */ + static UpdateViewPoint: (node: ILayerNode) => void; + /** 设置颜色 */ + static UpdateColor: (node: ILayerNode, colorIndex: number) => void; + /** 重命名图层 */ + static RenameLayer: (node: ILayerNode, name: string) => void; + /** 移动图层 */ + static MoveLayer: (node: ILayerNode, moveWhere: string, isFolder: any) => void; +} +/** 选中图层中的实体 */ +export declare const SelectLayerEntitys: (data: ILayerNode) => void; +/** 选中视口时更新图层状态 */ +export declare const UpdateLayerByViewPoint: (viewPoint: ViewportEntity) => void; +/** 取消视口时更新图层状态 */ +export declare const UpdateLayerByNoViewPoint: () => void; +/** 图层模板命令 */ +export declare class LayerTemplateCMD { + /** 根据模板加载图层 */ + static LoadLayerByTemplate(template: ILayerTemplate): void; + /** 初始化 */ + static Init(): void; + /** 保存 */ + static Save(): void; +} +//# sourceMappingURL=LayerCMD.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/LayerCMD.d.ts.map b/types/UI/Components/ToolBar/Layer/LayerCMD.d.ts.map new file mode 100644 index 0000000..faddf34 --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/LayerCMD.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"LayerCMD.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/Layer/LayerCMD.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,4CAA4C,CAAC;AAMpE,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAM7E,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG/D,WAAW;AACX,qBAAa,QAAQ;IAEjB,WAAW;IACX,MAAM,CAAC,WAAW,aAahB;IAEF,YAAY;IACZ,MAAM,CAAC,iBAAiB,aAWtB;IAEF,WAAW;IACX,MAAM,CAAC,WAAW,SAAU,UAAU,cAAc,MAAM,UAsBxD;IAEF,aAAa;IACb,MAAM,CAAC,eAAe,SAAU,UAAU,UAexC;IAEF,gBAAgB;IAChB,MAAM,CAAC,iBAAiB,QAAS,MAAM,EAAE,QAAQ,UAAU,UAazD;IAEF,aAAa;IACb,MAAM,CAAC,UAAU,SAAU,UAAU,UAWnC;IAEF,aAAa;IACb,MAAM,CAAC,UAAU,SAAU,UAAU,UAAU,OAAO,UAWpD;IAEF,eAAe;IACf,MAAM,CAAC,eAAe,SAAU,UAAU,UAWxC;IAEF,WAAW;IACX,MAAM,CAAC,WAAW,SAAU,UAAU,cAAc,MAAM,UAWxD;IAEF,YAAY;IACZ,MAAM,CAAC,WAAW,SAAU,UAAU,QAAQ,MAAM,UAYlD;IAEF,WAAW;IACX,MAAM,CAAC,SAAS,SAAU,UAAU,aAAa,MAAM,yBAmBrD;CACL;AAED,eAAe;AACf,eAAO,MAAM,kBAAkB,SAAU,UAAU,SAwClD,CAAC;AAEF,kBAAkB;AAClB,eAAO,MAAM,sBAAsB,cAAe,cAAc,SAsB/D,CAAC;AAEF,kBAAkB;AAClB,eAAO,MAAM,wBAAwB,YAIpC,CAAC;AAIF,aAAa;AACb,qBAAa,gBAAgB;IAEzB,eAAe;IACf,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,cAAc;IAQnD,UAAU;IAEV,MAAM,CAAC,IAAI;IAYX,SAAS;IACT,MAAM,CAAC,IAAI;CAMd"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/LayerManager.d.ts b/types/UI/Components/ToolBar/Layer/LayerManager.d.ts new file mode 100644 index 0000000..dd62837 --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/LayerManager.d.ts @@ -0,0 +1,42 @@ +import React from "react"; +import "./LayerManager.css"; +/** 图层管理器 */ +export declare class LayerManager extends React.Component<{}, {}> { + constructor(props: any); + /** 组件注销时清除搜索 */ + componentWillUnmount(): void; + /** 图层列表内部按钮被点击所触发的事件 */ + private ClickInnerEvent; + /** 被双击的节点数据 */ + private _DataByDoubleClick; + /** 图层搜索输入框的DOM */ + private _SearchInputRef; + /** 图层名称输入框的DOM */ + private _NameInputRef; + /** 图层嵌套层级 */ + private _Level; + /** 用于函数防抖 */ + private _CoolDownTime; + /** 用于拖拽显示的DOM */ + private _LineRefs; + /** 用于拖拽显示的DOM */ + private _LastLineRef; + /** 被拖拽的节点 */ + private _MoveWhat; + /** 放置的位置 */ + private _ToWhere; + /** 是否放入文件夹 */ + private _IsFolder; + /** 当前输入的图层名称 */ + private _LayerName; + /** 重命名 */ + private _Rename; + /** 初始化拖拽样式 */ + private InitDragStyle; + /** 右击菜单 */ + private _ShowMenu; + /** 生成图层列表 */ + private CreateList; + render(): JSX.Element; +} +//# sourceMappingURL=LayerManager.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/LayerManager.d.ts.map b/types/UI/Components/ToolBar/Layer/LayerManager.d.ts.map new file mode 100644 index 0000000..1d7eea3 --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/LayerManager.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"LayerManager.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/Layer/LayerManager.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAW1B,OAAO,oBAAoB,CAAC;AAW5B,YAAY;AACZ,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;gBAEzC,KAAK,KAAA;IAejB,gBAAgB;IAChB,oBAAoB;IAMpB,wBAAwB;IACxB,OAAO,CAAC,eAAe;IAKvB,eAAe;IACf,OAAO,CAAC,kBAAkB,CAAC;IAE3B,kBAAkB;IAClB,OAAO,CAAC,eAAe,CAAuC;IAE9D,kBAAkB;IAClB,OAAO,CAAC,aAAa,CAAuC;IAE5D,aAAa;IACb,OAAO,CAAC,MAAM,CAAM;IAEpB,aAAa;IACb,OAAO,CAAC,aAAa,CAAoB;IAEzC,iBAAiB;IACjB,OAAO,CAAC,SAAS,CAAyC;IAE1D,iBAAiB;IACjB,OAAO,CAAC,YAAY,CAAqC;IAEzD,aAAa;IACb,OAAO,CAAC,SAAS,CAAa;IAE9B,YAAY;IACZ,OAAO,CAAC,QAAQ,CAAS;IAEzB,cAAc;IACd,OAAO,CAAC,SAAS,CAAS;IAE1B,gBAAgB;IAEhB,OAAO,CAAC,UAAU,CAAY;IAE9B,UAAU;IACV,OAAO,CAAC,OAAO,CA+Bb;IAEF,cAAc;IACd,OAAO,CAAC,aAAa,CAanB;IAEF,WAAW;IACX,OAAO,CAAC,SAAS;IAyCjB,aAAa;IACb,OAAO,CAAC,UAAU,CAsOhB;IAEF,MAAM;CA4MT"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/LayerPanel.d.ts b/types/UI/Components/ToolBar/Layer/LayerPanel.d.ts new file mode 100644 index 0000000..ee848ed --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/LayerPanel.d.ts @@ -0,0 +1,43 @@ +import * as React from 'react'; +import { Singleton } from "../../../../Common/Singleton"; +import { ISelectOption, TSelectValue } from "./Component/Select"; +import "./LayerPanel.css"; +import type { ILayerNode } from "./State/Type"; +interface IFeatureMatchOption { + colorIndex?: number; + name: string; + value?: number; + onClick?: (currentItem?: ISelectOption, HandleChange?: (currentItem?: ISelectOption) => void) => void; +} +export declare class LayerTopStore extends Singleton { + /** 当前图层key */ + currentLayerValue: string; + /** 颜色key */ + colorValue: TSelectValue; + /** 默认颜色key */ + normalColorValue: TSelectValue; + /** 是否使用默认颜色 */ + isUseNormal: boolean; + /** 特性匹配里的颜色选项 */ + featureMatchOptions: IFeatureMatchOption[]; + /** 点击更多颜色 */ + OpenMoreColor(currentItem: ISelectOption, HandleChange: Function): void; + setColorValue(value: TSelectValue): void; + setIsUseNormal(value: boolean): void; + setColorIndex(colorIndex: number, index?: number): void; + setCurrentLayerValue(value: string): void; +} +/** 图层特性面板 */ +export declare class LayerPanel extends React.Component<{}, {}> { + constructor(props: {}); + /** 组件注销时 */ + componentWillUnmount(): void; + render(): JSX.Element; +} +/** 获取图层选项(一维展开) */ +export declare const getLayerOptions: (layerNodes: ILayerNode[]) => { + label: JSX.Element; + value: string; +}[]; +export {}; +//# sourceMappingURL=LayerPanel.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/LayerPanel.d.ts.map b/types/UI/Components/ToolBar/Layer/LayerPanel.d.ts.map new file mode 100644 index 0000000..b9b6870 --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/LayerPanel.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"LayerPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/Layer/LayerPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAOzD,OAAO,EAAE,aAAa,EAAiB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEhF,OAAO,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAM/C,UAAU,mBAAmB;IAEzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,YAAY,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,aAAa,KAAK,IAAI,KAAK,IAAI,CAAC;CACzG;AAED,qBAAa,aAAc,SAAQ,SAAS;IAExC,cAAc;IAEd,iBAAiB,SAAgC;IAEjD,YAAY;IAEZ,UAAU,EAAE,YAAY,CAAK;IAE7B,cAAc;IAEd,gBAAgB,EAAE,YAAY,CAAK;IAEnC,eAAe;IAEf,WAAW,UAAS;IAEpB,iBAAiB;IAEjB,mBAAmB,EAAE,mBAAmB,EAAE,CAUxC;IAEF,aAAa;IACb,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ;IA+BhE,aAAa,CAAC,KAAK,EAAE,YAAY;IAMjC,cAAc,CAAC,KAAK,EAAE,OAAO;IAM7B,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,SAAI;IAM3C,oBAAoB,CAAC,KAAK,EAAE,MAAM;CAIrC;AAKD,aAAa;AACb,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;gBAEvC,KAAK,EAAE,EAAE;IAKrB,YAAY;IACZ,oBAAoB;IAIpB,MAAM;CA6ET;AAED,mBAAmB;AACnB,eAAO,MAAM,eAAe,eAAgB,UAAU,EAAE;;;GAarD,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/LayerTemplate.d.ts b/types/UI/Components/ToolBar/Layer/LayerTemplate.d.ts new file mode 100644 index 0000000..8022207 --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/LayerTemplate.d.ts @@ -0,0 +1,26 @@ +import React from "react"; +import "./LayerTemplate.css"; +import { ILayerTemplate } from "./State/Type"; +/** 图层模板的弹窗 */ +export declare class LayerTemplateDialog extends React.Component<{}> { + /** 模板名称输入框的DOM */ + private _NameInputRef; + private templateName; + /** 模板搜索输入框的DOM */ + private _SearchInputRef; + /** 保存模板的名称输入框的DOM */ + private _SaveInputRef; + /** 用于函数防抖 */ + private _CoolDownTime; + constructor(props: any); + componentDidMount(): void; + componentWillUnmount(): void; + /** 任意位置点击都取消编辑 */ + ClickOther: () => void; + /** 模板重命名 */ + RenameTemplate(item: ILayerTemplate): void; + /** 生成图层列表 */ + private CreateList; + render(): JSX.Element; +} +//# sourceMappingURL=LayerTemplate.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/LayerTemplate.d.ts.map b/types/UI/Components/ToolBar/Layer/LayerTemplate.d.ts.map new file mode 100644 index 0000000..378ee1c --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/LayerTemplate.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"LayerTemplate.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/Layer/LayerTemplate.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,qBAAqB,CAAC;AAI7B,OAAO,EAAc,cAAc,EAA0B,MAAM,cAAc,CAAC;AAElF,cAAc;AACd,qBACa,mBAAoB,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;IACxD,kBAAkB;IAClB,OAAO,CAAC,aAAa,CAAuC;IAChD,OAAO,CAAC,YAAY,CAAM;IACtC,kBAAkB;IAClB,OAAO,CAAC,eAAe,CAAuC;IAC9D,sBAAsB;IACtB,OAAO,CAAC,aAAa,CAAuC;IAC5D,aAAa;IACb,OAAO,CAAC,aAAa,CAAoB;gBAC7B,KAAK,KAAA;IASjB,iBAAiB,IAAI,IAAI;IAKzB,oBAAoB,IAAI,IAAI;IAK5B,kBAAkB;IAClB,UAAU,aAKR;IAEF,YAAY;IACZ,cAAc,CAAC,IAAI,EAAE,cAAc;IAuBnC,aAAa;IACb,OAAO,CAAC,UAAU,CAqDhB;IAEK,MAAM;CA+QhB"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/State/Action.d.ts b/types/UI/Components/ToolBar/Layer/State/Action.d.ts new file mode 100644 index 0000000..63c3a58 --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/State/Action.d.ts @@ -0,0 +1,105 @@ +import { LayerStore } from "./Store"; +import type { ILayerNode, INode } from "./Type"; +/** 树的基础操作 */ +export declare class TreeAction { + /** 插入节点 + * @param {INode[]} nodes 节点数组 + * @param {INode} newNode 新节点 + * @param {number[]} indexs 索引数组(插入的位置) + * @example + * const nodes = [{name: "文件夹1", children: [{name: "文件1"}]}] + * // 在文件夹1下插入文件2 + * InsertNode(nodes, { name: "文件2" }, [1, 1]); + * // returns [{name: "文件夹1", children: [{name: "文件1"}, {name: "文件2"}]}] + */ + static InsertNode(nodes: INode[], newNode: INode, indexs: number[]): void; + /** 删除节点 + * @param {INode[]} nodes 节点数组 + * @param {string} name 节点名称 + * @example + * const nodes = [{name: "文件夹1", children: [{name: "文件1"}]}] + * // 删除文件1 + * RemoveNode(nodes, "文件1"); + * // returns [{name: "文件夹1", children: []}] + */ + static RemoveNode(nodes: INode[], name: string): void; + /** 修改节点 + * @param {INode[]} nodes 节点数组 + * @param {Function} Callback 回调函数(修改操作) + * @param {Function} Predicate 条件函数(过滤操作) + * @example + * const nodes = [{name: "文件夹1", children: [{name: "文件1"}]}] + * // 修改文件1的名称 + * UpdateNode(nodes, node => node.name = "新文件1", node => node.name === "文件1"); + * // returns [{name: "文件夹1", children: [{name: "新文件1"}]}] + */ + static UpdateNode(nodes: INode[], Callback: (node: INode) => void, Predicate?: (node: INode) => boolean): void; + /** 找到某个节点 + * @param {INode[]} nodes 节点数组 + * @param {Function} Predicate 条件函数(过滤操作) + * @returns {INode | undefined} 节点 + * @example + * const nodes = [{name: "文件夹1", children: [{name: "文件1"}]}] + * // 找到文件1 + * FindNode(nodes, node => node.name === "文件1"); + * // returns {name: "文件1"} + */ + static FindNode(nodes: INode[], Predicate: (node: INode) => boolean): INode | undefined; + /** 通过ID找到某个节点的索引 + * @param {INode[]} nodes 节点数组 + * @param {string} id 节点ID + * @returns {number[]} 索引数组 + * @example + * const nodes = [{name: "文件夹1", children: [{name: "文件1"}]}] + * // 找到文件1的索引 + * FindIndexsByName(nodes, "文件1"); + * // returns [1, 0] + */ + static FindIndexsByName(nodes: INode[], name: string): number[]; + /** 找到某些节点(打平父子结构 + * @param {INode[]} nodes 节点数组 + * @param {Function} Predicate 条件函数(过滤操作) + * @returns {INode | undefined} 节点 + * @example + * const nodes = [{name: "文件夹1", children: [{name: "文件1"}]}] + * // 找到文件1 + * FindNode(nodes, node => node.name === "文件1"); + * // returns {name: "文件1"} + */ + static FindFlatNodes(nodes: INode[], Predicate: (node: INode) => boolean): INode[]; + /** 找到某些节点(保留父子结构且拷贝数据) + * @param {INode[]} nodes 节点数组 + * @param {Function} Predicate 条件函数(过滤操作) + * @returns {INode | undefined} 节点 + * @example + * const nodes = [{name: "文件夹1", children: [{name: "文件1"}]}] + * // 找到文件1 + * FilterNodes(nodes, node => node.name === "文件1"); + * // returns {name: "文件1"} + */ + static FilterNodes(nodes: INode[], Predicate: (node: INode) => boolean): INode[]; +} +/** 图层的基础操作 */ +export declare class LayerAction { + store: LayerStore; + constructor(store: LayerStore); + /** 设置当前图层 */ + SetCurrent(node: ILayerNode): void; + /** 清楚所有图层的isCurrent属性 */ + ClearIsCurrent(): void; + /** 清楚所有图层的visible属性 */ + ClearVisible(): void; + /** 清楚所有图层的selected属性 */ + ClearSelected(): void; + /** 清楚所有图层的changeable属性 */ + ClearChangeable(): void; + /** 找到选中的图层 */ + FindNodeBySelected: () => ILayerNode; + /** 根据名称过滤节点 */ + FindFlatNodesByName(name: String, isFuzzy?: boolean): ILayerNode[]; + /** 搜索图层 */ + SearchByName(name: String): void; + /** 根据名称查找图层 */ + FindNodeByName: (name: string) => ILayerNode; +} +//# sourceMappingURL=Action.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/State/Action.d.ts.map b/types/UI/Components/ToolBar/Layer/State/Action.d.ts.map new file mode 100644 index 0000000..5417603 --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/State/Action.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Action.d.ts","sourceRoot":"","sources":["../../../../../../../src/UI/Components/ToolBar/Layer/State/Action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAEhD,aAAa;AACb,qBAAa,UAAU;IAGnB;;;;;;;;;OASG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;IAYlE;;;;;;;;OAQG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM;IAa9C;;;;;;;;;OASG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,SAAS,UAAU,KAAK,YAAS;IAWpG;;;;;;;;;OASG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,GAAG,KAAK,GAAG,SAAS;IAgBvF;;;;;;;;;OASG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM;IA0BpD;;;;;;;;;OASG;IACH,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,GAAG,KAAK,EAAE;IAiBlF;;;;;;;;;OASG;IACH,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO;CAkBzE;AAED,cAAc;AACd,qBAAa,WAAW;IAED,KAAK,EAAE,UAAU;gBAAjB,KAAK,EAAE,UAAU;IAEpC,aAAa;IACb,UAAU,CAAC,IAAI,EAAE,UAAU;IAM3B,yBAAyB;IACzB,cAAc;IASd,uBAAuB;IACvB,YAAY;IAKZ,wBAAwB;IACxB,aAAa;IAKb,0BAA0B;IAC1B,eAAe;IAKf,cAAc;IACd,kBAAkB,QAAsF,UAAU,CAAC;IAEnH,eAAe;IACf,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAQ,GAEmG,UAAU,EAAE;IAGhK,WAAW;IACX,YAAY,CAAC,IAAI,EAAE,MAAM;IAYzB,eAAe;IACf,cAAc,SAAU,MAAM,KAAqG,UAAU,CAAC;CACjJ"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/State/Store.d.ts b/types/UI/Components/ToolBar/Layer/State/Store.d.ts new file mode 100644 index 0000000..ae5225c --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/State/Store.d.ts @@ -0,0 +1,44 @@ +import { Singleton } from "../../../../../Common/Singleton"; +import type { ILayerNode, ILayerTemplate } from "./Type"; +/** 图层的状态单例 */ +export declare class LayerStore extends Singleton { + /** 自增ID(用于新图层的默认名) */ + ID: { + file: number; + folder: number; + }; + /** 图层数据 */ + data: ILayerNode[]; + /** 当前图层 */ + currentLayer: ILayerNode; + /** 是否显示视口冻结 */ + isShowViewportOff: boolean; + /** 初始化 */ + Init(): void; + /** 克隆图层主要数据 */ + Clone(): any; +} +/** 图层特性 */ +export declare const LayerPropertieStore: { + /** 是否显示 */ + isShow: boolean; +}; +/** 图层模板的状态单例 */ +export declare class LayerTemplateStore extends Singleton { + /** 图层数据 */ + data: ILayerTemplate[]; + Clone(): { + name: string; + visible: boolean; + selected: boolean; + changeable: boolean; + data: import("./Type").TLayerTemplateDataNode[]; + }[]; + /** 添加模板 */ + Append(name: string): ILayerTemplate; + /** 删除模板 */ + Remove(tem: ILayerTemplate): void; + /** 搜索模板 */ + Search(name: string, isFuzzy?: boolean): void; +} +//# sourceMappingURL=Store.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/State/Store.d.ts.map b/types/UI/Components/ToolBar/Layer/State/Store.d.ts.map new file mode 100644 index 0000000..35a5fcd --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/State/Store.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Store.d.ts","sourceRoot":"","sources":["../../../../../../../src/UI/Components/ToolBar/Layer/State/Store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAEzD,cAAc;AACd,qBAAa,UAAW,SAAQ,SAAS;IAErC,sBAAsB;IACtB,EAAE;;;MAA0B;IAE5B,WAAW;IAEX,IAAI,EAAE,UAAU,EAAE,CAEhB;IAEF,WAAW;IAEX,YAAY,aAAgB;IAE5B,eAAe;IAEf,iBAAiB,UAAS;IAE1B,UAAU;IACV,IAAI;IASJ,eAAe;IACf,KAAK;CAaR;AAED,WAAW;AACX,eAAO,MAAM,mBAAmB;IAC5B,WAAW;;CAEd,CAAC;AAEF,gBAAgB;AAChB,qBAAa,kBAAmB,SAAQ,SAAS;IAE7C,WAAW;IAEX,IAAI,EAAE,cAAc,EAAE,CAEpB;IAEF,KAAK;;;;;;;IAYL,WAAW;IAEX,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc;IAOpC,WAAW;IAEX,MAAM,CAAC,GAAG,EAAE,cAAc;IAK1B,WAAW;IAEX,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,UAAQ;CAevC"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/State/Transform.d.ts b/types/UI/Components/ToolBar/Layer/State/Transform.d.ts new file mode 100644 index 0000000..6e843b6 --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/State/Transform.d.ts @@ -0,0 +1,52 @@ +import type { ILayerNode, ILayerTemplate } from "./Type"; +/** 针对图层的数据转换器(Data层->View层) + * @description 该类用于将图层的Data层数据转换为图层的View层数据,便于Undo操作 + * 如:当图纸颜色被改变时(此时Undo只会撤销Data层数据),通过该类可以更新View层数据,实现UI状态的同步改变 + * 比如,LayerCMD中有个方法UpdateColor,该方法用于更新图层的UI颜色(View层) + * 再调用DataToViewForLayer中的UpdateColor方法,使得layerTableRecord的颜色(Data层)也同步更新 + */ +export declare class DataToViewForLayer { + /** 根据Table更新Root(注意这里采用少补不多还) */ + static UpdateRootByTable(): void; + /** 全量更新(根据Root+Record更新View层数据) */ + static UpdateAll(): void; +} +/** 针对图层的数据转换器(View层->Data层) + * @description 该类用于将图层的View层数据转换为图层的Data层数据,便于数据库的读写 + * 如:锁定按钮被点击时(只需要关心按钮状态的UI数据),调用该类对应的方法即可实现图层的锁定功能 + */ +export declare class ViewToDataForLayer { + /** 创建图层 */ + static AppendLayer(node: ILayerNode): void; + /** 创建图层文件夹 */ + static AppendLayerFolder(node: ILayerNode): void; + /** 删除图层 */ + static RemoveLayer(node: ILayerNode, moveWhere: string): void; + /** 置为当前图层 */ + static SetCurrentLayer(): void; + /** 设置是否显示 */ + static UpdateShow(node: ILayerNode): void; + /** 设置是否锁定 */ + static UpdateLock(node: ILayerNode): void; + /** 设置是否视口冻结 */ + static UpdateViewPoint(node: ILayerNode): void; + /** 设置颜色 */ + static UpdateColor(node: ILayerNode): void; + /** 重命名图层 */ + static RenameLayer(oldName: string, newName: string): void; + /** 移动图层 */ + static MoveLayer(node: ILayerNode): void; +} +/** 针对图层模板的数据转换器 */ +export declare class LayerTemplateTransform { + /** 需要保留的图层名称(即追加) */ + static saveLayerNames: Set; + /** 是否跳过同名图层 */ + static isIgnoreSameLayer: boolean; + /** + * @规则1 同名图层 覆盖(以模板为准)vs跳过(以图纸为准) + * @规则2 缺失图层 丢弃(实体归默认)vs追加(图层留下来) + */ + static Update(template: ILayerTemplate): void; +} +//# sourceMappingURL=Transform.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/State/Transform.d.ts.map b/types/UI/Components/ToolBar/Layer/State/Transform.d.ts.map new file mode 100644 index 0000000..c1ebe48 --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/State/Transform.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Transform.d.ts","sourceRoot":"","sources":["../../../../../../../src/UI/Components/ToolBar/Layer/State/Transform.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAEzD;;;;;GAKG;AACH,qBAAa,kBAAkB;IAE3B,iCAAiC;IACjC,MAAM,CAAC,iBAAiB;IAkBxB,mCAAmC;IACnC,MAAM,CAAC,SAAS;CAsEnB;AAqBD;;;GAGG;AACH,qBAAa,kBAAkB;IAE3B,WAAW;IACX,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU;IAwBnC,cAAc;IACd,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAU;IAMzC,WAAW;IACX,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM;IA8BtD,aAAa;IACb,MAAM,CAAC,eAAe;IAMtB,aAAa;IACb,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU;IAWlC,aAAa;IACb,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU;IAclC,gBAAgB;IAChB,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU;IAsCvC,WAAW;IACX,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU;IAkBnC,YAAY;IACZ,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAYnD,WAAW;IACX,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU;CAKpC;AAyED,mBAAmB;AACnB,qBAAa,sBAAsB;IAE/B,qBAAqB;IACrB,MAAM,CAAC,cAAc,cAAqB;IAC1C,eAAe;IACf,MAAM,CAAC,iBAAiB,UAAS;IACjC;;;OAGG;IACH,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,cAAc;CA8HzC"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/State/Type.d.ts b/types/UI/Components/ToolBar/Layer/State/Type.d.ts new file mode 100644 index 0000000..afc980a --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/State/Type.d.ts @@ -0,0 +1,39 @@ +/** 树的基本数据类型 */ +export interface INode { + /** 名称 */ + name: string; + /** 子节点 */ + children?: INode[]; +} +/** 图层的数据类型 */ +export interface ILayerNode extends INode { + children?: ILayerNode[]; + /** 是否为当前图层 */ + isCurrent?: boolean; + /** 是否隐藏 */ + isOff: boolean; + /** 是否锁定 */ + isLock: boolean; + /** 是否视口隐藏(仅在视口模式下有效) */ + isViewportOff?: boolean; + /** 图层颜色索引 */ + colorIndex?: number; + /** 是否显示(用于搜索过滤) */ + visible: boolean; + /** 是否选中 */ + selected: boolean; + /** 是否可输入(用于重命名) */ + changeable: boolean; + /** 是否展开 */ + expanded?: boolean; +} +export type TLayerTemplateDataNode = Pick; +/** 图层模板的数据类型 */ +export interface ILayerTemplate { + name: string; + visible: boolean; + selected: boolean; + changeable: boolean; + data: TLayerTemplateDataNode[]; +} +//# sourceMappingURL=Type.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/State/Type.d.ts.map b/types/UI/Components/ToolBar/Layer/State/Type.d.ts.map new file mode 100644 index 0000000..97e3746 --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/State/Type.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"Type.d.ts","sourceRoot":"","sources":["../../../../../../../src/UI/Components/ToolBar/Layer/State/Type.ts"],"names":[],"mappings":"AAAA,eAAe;AACf,MAAM,WAAW,KAAK;IAElB,SAAS;IACT,IAAI,EAAE,MAAM,CAAC;IACb,UAAU;IACV,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC;CACtB;AAED,cAAc;AACd,MAAM,WAAW,UAAW,SAAQ,KAAK;IAErC,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,cAAc;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW;IACX,KAAK,EAAE,OAAO,CAAC;IACf,WAAW;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,wBAAwB;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IAIpB,mBAAmB;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW;IACX,QAAQ,EAAE,OAAO,CAAC;IAClB,mBAAmB;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW;IACX,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,sBAAsB,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,CAAC,CAAC;AAE1I,gBAAgB;AAChB,MAAM,WAAW,cAAc;IAE3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,sBAAsB,EAAE,CAAC;CAClC"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/layerAPI.d.ts b/types/UI/Components/ToolBar/Layer/layerAPI.d.ts new file mode 100644 index 0000000..c66c73f --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/layerAPI.d.ts @@ -0,0 +1,36 @@ +import { LayerAction } from "./State/Action"; +import { LayerStore } from "./State/Store"; +import type { ILayerNode } from "./State/Type"; +/** 图层API(纯store操作,不含任何UI)提供给LayerCMD使用 */ +export declare class LayerAPI { + store: LayerStore; + layerAction: LayerAction; + constructor(store: LayerStore); + /** 创建一个文件 */ + AppendFile: () => ILayerNode; + /** 创建一个文件夹 */ + AppendFolder: () => ILayerNode; + /** 删除文件 */ + RemoveFile: (node: ILayerNode) => void; + /** 删除文件夹 */ + RemoveFolder: (node: ILayerNode) => void; + /** 设置文件是否显示 */ + UpdateShowFile: (node: ILayerNode, isOff: boolean) => void; + /** 设置文件夹是否显示 */ + UpdateShowFolder: (node: ILayerNode, isOff: boolean) => void; + /** 设置文件是否锁定 */ + UpdateLockFile: (node: ILayerNode, isLock: boolean) => void; + /** 设置文件夹是否锁定 */ + UpdateLockFolder: (node: ILayerNode, isLock: boolean) => void; + /** 设置文件视口冻结 */ + UpdateViewportOffFile: (node: ILayerNode, isViewportOff: boolean) => void; + /** 设置文件夹视口冻结 */ + UpdateViewportOffFolder: (node: ILayerNode, isViewportOff: boolean) => void; + /** 设置图层颜色 */ + UpdateColorFile: (node: ILayerNode, colorIndex: number) => void; + /** 设置当前图层 */ + SetCurrentFile: (node: ILayerNode) => void; + /** 节点重命名 */ + RenameNode: (node: ILayerNode, name: string) => void; +} +//# sourceMappingURL=layerAPI.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Layer/layerAPI.d.ts.map b/types/UI/Components/ToolBar/Layer/layerAPI.d.ts.map new file mode 100644 index 0000000..fcc3295 --- /dev/null +++ b/types/UI/Components/ToolBar/Layer/layerAPI.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"layerAPI.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/Layer/layerAPI.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAc,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,0CAA0C;AAC1C,qBAAa,QAAQ;IAGE,KAAK,EAAE,UAAU;IADpC,WAAW,EAAE,WAAW,CAAC;gBACN,KAAK,EAAE,UAAU;IAKpC,aAAa;IACb,UAAU,mBAuBR;IAEF,cAAc;IACd,YAAY,mBAoBV;IAEF,WAAW;IACX,UAAU,SAAU,UAAU,UAU5B;IAEF,YAAY;IACZ,YAAY,SAAU,UAAU,UAU9B;IAEF,eAAe;IACf,cAAc,SAAU,UAAU,SAAS,OAAO,UAGhD;IAEF,gBAAgB;IAChB,gBAAgB,SAAU,UAAU,SAAS,OAAO,UAIlD;IAEF,eAAe;IACf,cAAc,SAAU,UAAU,UAAU,OAAO,UAGjD;IAEF,gBAAgB;IAChB,gBAAgB,SAAU,UAAU,UAAU,OAAO,UAInD;IAEF,eAAe;IACf,qBAAqB,SAAU,UAAU,iBAAiB,OAAO,UAG/D;IAEF,gBAAgB;IAChB,uBAAuB,SAAU,UAAU,iBAAiB,OAAO,UAIjE;IAEF,aAAa;IACb,eAAe,SAAU,UAAU,cAAc,MAAM,UAGrD;IAEF,aAAa;IACb,cAAc,SAAU,UAAU,UAKhC;IAEF,YAAY;IACZ,UAAU,SAAU,UAAU,QAAQ,MAAM,UAG1C;CACL"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ModifyModel/CeilingInfoModifyPanel.d.ts b/types/UI/Components/ToolBar/ModifyModel/CeilingInfoModifyPanel.d.ts new file mode 100644 index 0000000..0b5a0b1 --- /dev/null +++ b/types/UI/Components/ToolBar/ModifyModel/CeilingInfoModifyPanel.d.ts @@ -0,0 +1,27 @@ +import React from "react"; +import { BulkheadCeiling } from "../../../../DatabaseServices/Room/Entity/Ceiling/BulkheadCeiling"; +import { HeadCeilingInfoStore } from "../../../Store/HeadCeilingStore/HeadCeilingInfoStore"; +import { ModalState } from "../../Modal/ModalInterface"; +import { OnlySelectPanelStore } from "../../OnlySelectManage/OnlySelectPanelStore"; +declare enum Display { + Block = "block", + None = "none" +} +interface CeilingInfoModifyPanelProp { + headCeilingEnt: BulkheadCeiling; + headCeilingInfoStore: HeadCeilingInfoStore; +} +export declare class CeilingInfoModifyPanel extends React.Component { + _Display: Display; + _Event: Function; + _CameraStateContainer: HTMLElement; + _SelectStore: OnlySelectPanelStore; + constructor(props: any); + componentDidMount(): void; + componentWillUnmount(): void; + _Return: (status: ModalState) => Promise; + _OpenSelectTemplate: (style: Display) => void; + render(): JSX.Element; +} +export {}; +//# sourceMappingURL=CeilingInfoModifyPanel.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ModifyModel/CeilingInfoModifyPanel.d.ts.map b/types/UI/Components/ToolBar/ModifyModel/CeilingInfoModifyPanel.d.ts.map new file mode 100644 index 0000000..3a978eb --- /dev/null +++ b/types/UI/Components/ToolBar/ModifyModel/CeilingInfoModifyPanel.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"CeilingInfoModifyPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ModifyModel/CeilingInfoModifyPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,OAAO,EAAE,eAAe,EAAE,MAAM,kEAAkE,CAAC;AAEnG,OAAO,EAAyB,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AACnH,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AAInF,aAAK,OAAO;IAER,KAAK,UAAU;IACf,IAAI,SAAS;CAChB;AAED,UAAU,0BAA0B;IAEhC,cAAc,EAAE,eAAe,CAAC;IAChC,oBAAoB,EAAE,oBAAoB,CAAC;CAC9C;AAED,qBACa,sBAAuB,SAAQ,KAAK,CAAC,SAAS,CAAC,0BAA0B,EAAE,EAAE,CAAC;IAE3E,QAAQ,UAAgB;IACpC,MAAM,EAAE,QAAQ,CAAC;IACjB,qBAAqB,EAAE,WAAW,CAAC;IACnC,YAAY,EAAE,oBAAoB,CAA4C;gBAGlE,KAAK,KAAA;IAiCjB,iBAAiB;IAiBjB,oBAAoB;IAQpB,OAAO,WAAkB,UAAU,mBA0BjC;IAGF,mBAAmB,UAAW,OAAO,UASnC;IAEF,MAAM;CAUT"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ModifyModel/CeilingInfoModifyParam.d.ts b/types/UI/Components/ToolBar/ModifyModel/CeilingInfoModifyParam.d.ts new file mode 100644 index 0000000..363f7ec --- /dev/null +++ b/types/UI/Components/ToolBar/ModifyModel/CeilingInfoModifyParam.d.ts @@ -0,0 +1,17 @@ +import React from "react"; +import { HeadCeilingInfoStore } from "../../../Store/HeadCeilingStore/HeadCeilingInfoStore"; +import { HeadCeilingProfileMaterialStore } from "../../../Store/HeadCeilingStore/HeadCeilingMaterialStore"; +import { Display } from "../../../Store/OptionInterface/BulkheadCeilingOption"; +import { BoardModalType } from "../../Board/BoardModalType"; +import { OnlySelectPanelStore } from "../../OnlySelectManage/OnlySelectPanelStore"; +interface ItemPorps { + store: HeadCeilingInfoStore | HeadCeilingProfileMaterialStore; + openSelectTemplate: (display: Display) => void; + selectStore: OnlySelectPanelStore; + configType?: BoardModalType; +} +export declare class CeilingInfoModifyParam extends React.Component { + render(): JSX.Element; +} +export {}; +//# sourceMappingURL=CeilingInfoModifyParam.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ModifyModel/CeilingInfoModifyParam.d.ts.map b/types/UI/Components/ToolBar/ModifyModel/CeilingInfoModifyParam.d.ts.map new file mode 100644 index 0000000..a0ab4cc --- /dev/null +++ b/types/UI/Components/ToolBar/ModifyModel/CeilingInfoModifyParam.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"CeilingInfoModifyParam.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ModifyModel/CeilingInfoModifyParam.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sDAAsD,CAAC;AAC5F,OAAO,EAAE,+BAA+B,EAAE,MAAM,0DAA0D,CAAC;AAC3G,OAAO,EAAE,OAAO,EAAE,MAAM,sDAAsD,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AAEnF,UAAU,SAAS;IAEf,KAAK,EAAE,oBAAoB,GAAG,+BAA+B,CAAC;IAC9D,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,WAAW,EAAE,oBAAoB,CAAC;IAClC,UAAU,CAAC,EAAE,cAAc,CAAC;CAC/B;AAED,qBACa,sBAAuB,SAAQ,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC;IAEtE,MAAM;CAsCT"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ModifyModel/ModelCommon.d.ts.map b/types/UI/Components/ToolBar/ModifyModel/ModelCommon.d.ts.map index ea6f1a1..b9c91e4 100644 --- a/types/UI/Components/ToolBar/ModifyModel/ModelCommon.d.ts.map +++ b/types/UI/Components/ToolBar/ModifyModel/ModelCommon.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ModelCommon.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ModifyModel/ModelCommon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAU,MAAM,mBAAmB,CAAC;AAGnF,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAsB,OAAO,EAAE,MAAM,OAAO,CAAC;AAMpD,OAAO,EAAE,MAAM,EAAE,MAAM,4CAA4C,CAAC;AAGpE,OAAO,EAAE,QAAQ,EAAE,MAAM,8CAA8C,CAAC;AAExE,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,UAAU,kBAAkB;IAExB,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,EAAE,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,eAAe,GAAG,eAAe,GAAG,cAAc,CAAC,CAAC;IACzF,KAAK,EAAE,MAAM,CAAC;CACjB;AACD,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,CAAC;IAElE,OAAO,gCAAmC;IAC1C,cAAc,EAAE,QAAQ,CAAC;IAEzB,iBAAiB;IASjB,oBAAoB;IAOpB,gBAAgB,aA0Bd;IACF,MAAM;CA0DT;AAED,UAAU,kBAAkB;IAExB,KAAK,EAAE,gBAAgB,CAAC;IACxB,UAAU,EAAE,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC;IACjF,IAAI,EAAE,UAAU,CAAC;CACpB;AACD,qBAAa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,CAAC;IAElE,WAAW,oCAAuC;IAClD,cAAc,EAAE,QAAQ,CAAC;IAEzB,iBAAiB;IASjB,oBAAoB;IAMpB,WAAW,MAAa,kBAAkB,CAAC,WAAW,CAAC,QAAQ,UAAU,mBA0FvE;IAEF,cAAc,SAAgB,UAAU,mBAqDtC;IACF,MAAM;CAsBT;AAED,UAAU,gBAAgB;IAEtB,KAAK,EAAE,gBAAgB,CAAC;IACxB,SAAS,EAAE,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;IAC1E,IAAI,EAAE,QAAQ,CAAC;CAClB;AACD,qBACa,WAAY,SAAQ,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAE9D,SAAS,gCAAmC;IAC5C,cAAc,EAAE,QAAQ,CAAC;IAEzB,iBAAiB;IAUjB,oBAAoB;IAOpB,aAAa,MAAa,kBAAkB,CAAC,cAAc,CAAC,SAAS,QAAQ,mBA0D3E;IACF,YAAY,UAAW,MAAM,SAAS,QAAQ,OAAO,OAAO,QAAQ,OAAO,QAAQ,MAAM,EAAE,UA6BzF;IAEF,eAAe,UAAW,MAAM,KAAG,MAAM,CAWvC;IAEF,YAAY,UAAW,QAAQ,UA4C7B;IACF,MAAM;CA2BT"} \ No newline at end of file +{"version":3,"file":"ModelCommon.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ModifyModel/ModelCommon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAAU,MAAM,mBAAmB,CAAC;AAGnF,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAsB,OAAO,EAAE,MAAM,OAAO,CAAC;AAMpD,OAAO,EAAE,MAAM,EAAE,MAAM,4CAA4C,CAAC;AAGpE,OAAO,EAAE,QAAQ,EAAE,MAAM,8CAA8C,CAAC;AAExE,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,UAAU,kBAAkB;IAExB,KAAK,EAAE,gBAAgB,CAAC;IACxB,OAAO,EAAE,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,eAAe,GAAG,eAAe,GAAG,cAAc,CAAC,CAAC;IACzF,KAAK,EAAE,MAAM,CAAC;CACjB;AACD,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,CAAC;IAElE,OAAO,gCAAmC;IAC1C,cAAc,EAAE,QAAQ,CAAC;IAEzB,iBAAiB;IASjB,oBAAoB;IAOpB,gBAAgB,aA0Bd;IACF,MAAM;CA0DT;AAED,UAAU,kBAAkB;IAExB,KAAK,EAAE,gBAAgB,CAAC;IACxB,UAAU,EAAE,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC;IACjF,IAAI,EAAE,UAAU,CAAC;CACpB;AACD,qBAAa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC,kBAAkB,CAAC;IAElE,WAAW,oCAAuC;IAClD,cAAc,EAAE,QAAQ,CAAC;IAEzB,iBAAiB;IASjB,oBAAoB;IAMpB,WAAW,MAAa,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,QAAQ,UAAU,mBA0FvE;IAEF,cAAc,SAAgB,UAAU,mBAqDtC;IACF,MAAM;CAsBT;AAED,UAAU,gBAAgB;IAEtB,KAAK,EAAE,gBAAgB,CAAC;IACxB,SAAS,EAAE,CAAC,MAAM,gBAAgB,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;IAC1E,IAAI,EAAE,QAAQ,CAAC;CAClB;AACD,qBACa,WAAY,SAAQ,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC;IAE9D,SAAS,gCAAmC;IAC5C,cAAc,EAAE,QAAQ,CAAC;IAEzB,iBAAiB;IAUjB,oBAAoB;IAOpB,aAAa,MAAa,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,SAAS,QAAQ,mBA0D3E;IACF,YAAY,UAAW,MAAM,SAAS,QAAQ,OAAO,OAAO,QAAQ,OAAO,QAAQ,MAAM,EAAE,UA6BzF;IAEF,eAAe,UAAW,MAAM,KAAG,MAAM,CAWvC;IAEF,YAAY,UAAW,QAAQ,UA4C7B;IACF,MAAM;CA2BT"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ModifyModel/RoomFlatTopParams.d.ts b/types/UI/Components/ToolBar/ModifyModel/RoomFlatTopParams.d.ts index e1b6c6b..827ad22 100644 --- a/types/UI/Components/ToolBar/ModifyModel/RoomFlatTopParams.d.ts +++ b/types/UI/Components/ToolBar/ModifyModel/RoomFlatTopParams.d.ts @@ -17,9 +17,12 @@ interface ContourData { extData: BulkheadCeilingShapeTemplateExtendData; } export default class RoomFlatTopParams extends Component { + _HeadCeilingInfoStore: HeadCeilingInfoStore; SetBulkCeilingFaceDefaultMaterial(): void; _PickUpModelingOnFlatTop: () => Promise; _ApplayContour: () => Promise; + _PickUpModelingOnHeadCeiling: () => Promise; + _RedoContour: () => Promise; /** * 根据曲线颜色、形状 添加吊顶形状、材质 * @@ -30,8 +33,7 @@ export default class RoomFlatTopParams extends Component, bulkheadCeiling: BulkheadCeiling): Promise; - _PickUpModelingOnHeadCeiling: () => Promise; - _RedoContour: () => Promise; + private _GetNewContourDate; render(): JSX.Element; } export {}; diff --git a/types/UI/Components/ToolBar/ModifyModel/RoomFlatTopParams.d.ts.map b/types/UI/Components/ToolBar/ModifyModel/RoomFlatTopParams.d.ts.map index d120eb1..7c6bdca 100644 --- a/types/UI/Components/ToolBar/ModifyModel/RoomFlatTopParams.d.ts.map +++ b/types/UI/Components/ToolBar/ModifyModel/RoomFlatTopParams.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RoomFlatTopParams.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ModifyModel/RoomFlatTopParams.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAczC,OAAO,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,2CAA2C,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,8CAA8C,CAAC;AAIxE,OAAO,EAAE,eAAe,EAA+B,MAAM,kEAAkE,CAAC;AAChI,OAAO,EAAE,sCAAsC,EAAE,MAAM,iFAAiF,CAAC;AACzI,OAAO,EAAE,WAAW,EAAE,MAAM,2DAA2D,CAAC;AAKxF,OAAO,EAAqD,oBAAoB,EAAmB,MAAM,sDAAsD,CAAC;AAQhK,OAAO,oBAAoB,CAAC;AAE5B,UAAU,mBAAmB;IAEzB,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,cAAc,CAAC,EAAE,eAAe,CAAC;CACpC;AAED,UAAU,WAAW;IAEjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,sCAAsC,CAAC;CACnD;AAGD,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,SAAS,CAAC,mBAAmB,EAAE,EAAE,CAAC;IAG7E,iCAAiC;IA4BjC,wBAAwB,sBAwDtB;IAGF,cAAc,sBAiGZ;IAEF;;;;;;;;OAQG;IACG,qBAAqB,CAAC,YAAY,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe,EAAE,eAAe;IA8HlJ,4BAA4B,sBAsF1B;IAGF,YAAY,sBA+FV;IAEF,MAAM;CA+BT"} \ No newline at end of file +{"version":3,"file":"RoomFlatTopParams.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ModifyModel/RoomFlatTopParams.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAezC,OAAO,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AAEjE,OAAO,EAAE,KAAK,EAAE,MAAM,2CAA2C,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,8CAA8C,CAAC;AAIxE,OAAO,EAAE,eAAe,EAA4D,MAAM,kEAAkE,CAAC;AAC7J,OAAO,EAAE,sCAAsC,EAAE,MAAM,iFAAiF,CAAC;AACzI,OAAO,EAAE,WAAW,EAAE,MAAM,2DAA2D,CAAC;AAKxF,OAAO,EAAqD,oBAAoB,EAAmB,MAAM,sDAAsD,CAAC;AAShK,OAAO,oBAAoB,CAAC;AAE5B,UAAU,mBAAmB;IAEzB,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,cAAc,CAAC,EAAE,eAAe,CAAC;CACpC;AAED,UAAU,WAAW;IAEjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,sCAAsC,CAAC;CACnD;AAGD,MAAM,CAAC,OAAO,OAAO,iBAAkB,SAAQ,SAAS,CAAC,mBAAmB,EAAE,EAAE,CAAC;IAE7E,qBAAqB,EAAE,oBAAoB,CAA8B;IAGzE,iCAAiC;IA4BjC,wBAAwB,sBAyDtB;IAGF,cAAc,sBAkFZ;IAGF,4BAA4B,sBAyF1B;IAGF,YAAY,sBAkFV;IAEF;;;;;;;;OAQG;IACG,qBAAqB,CAAC,YAAY,EAAE,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,eAAe,EAAE,eAAe;IAsIlJ,OAAO,CAAC,kBAAkB,CAgJxB;IAEF,MAAM;CA8DT"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/PropertiesPanel.d.ts b/types/UI/Components/ToolBar/PropertiesPanel.d.ts index cc37df5..074afbb 100644 --- a/types/UI/Components/ToolBar/PropertiesPanel.d.ts +++ b/types/UI/Components/ToolBar/PropertiesPanel.d.ts @@ -19,10 +19,22 @@ declare enum EntType { } export declare class PropertiesPanel extends React.Component<{}, {}> { _IsSelectDimStyle: boolean; + /** 曲线方向的文字显示 */ + private directionStr; + /** 是否显示曲线方向 */ + private isShowDirection; + /** 更新曲线方向文字显示(用它更新,mobx不报错) */ + UpdateDirectionStr: (str: string) => string; + /** 更新是否显示曲线方向(用它更新,mobx不报错) */ + UpdateIsShowDirection: (isShow: boolean) => boolean; _HandleSelectOnChange(e: React.ChangeEvent): void; _GetEntsByType(ents: Entity[], type: EntType): Entity[]; _ChangeDimStyle(styleName: string, ents: Entity[]): void; + isHaveAccuracy(ents: Entity[]): boolean; + /** 显示曲线方向 */ + ShowDirectionByEntitys(ents: Entity[]): void; render(): JSX.Element; } +export declare function ShowLayer(ent: Entity): JSX.Element; export {}; //# sourceMappingURL=PropertiesPanel.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/PropertiesPanel.d.ts.map b/types/UI/Components/ToolBar/PropertiesPanel.d.ts.map index a69396e..27738b4 100644 --- a/types/UI/Components/ToolBar/PropertiesPanel.d.ts.map +++ b/types/UI/Components/ToolBar/PropertiesPanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"PropertiesPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/ToolBar/PropertiesPanel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAWjE,aAAK,OAAO;IAER,QAAQ,qBAAqB;IAC7B,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,oBAAoB,yBAAyB;IAC7C,iBAAiB,sBAAsB;IACvC,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;IAC7B,SAAS,cAAc;IACvB,KAAK,UAAU;CAClB;AAED,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAExD,iBAAiB,UAAS;IAE1B,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC;IAO7D,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO;IAoB5C,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IAkBjD,MAAM;CA8GT"} \ No newline at end of file +{"version":3,"file":"PropertiesPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/ToolBar/PropertiesPanel.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAoBjE,aAAK,OAAO;IAER,QAAQ,qBAAqB;IAC7B,IAAI,SAAS;IACb,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,oBAAoB,yBAAyB;IAC7C,iBAAiB,sBAAsB;IACvC,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;IACnC,YAAY,iBAAiB;IAC7B,SAAS,cAAc;IACvB,KAAK,UAAU;CAClB;AAED,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAExD,iBAAiB,UAAS;IAE1B,gBAAgB;IACJ,OAAO,CAAC,YAAY,CAAM;IACtC,eAAe;IACH,OAAO,CAAC,eAAe,CAAS;IAC5C,+BAA+B;IACvB,kBAAkB,QAAS,MAAM,YAA6B;IACtE,gCAAgC;IACxB,qBAAqB,WAAY,OAAO,aAAmC;IAEnF,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC;IAO7D,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO;IAoB5C,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IAkBjD,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE;IAS7B,aAAa;IACb,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE;IAmBrC,MAAM;CAoMT;AAGD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,eAqBpC"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Properties_Text.d.ts b/types/UI/Components/ToolBar/Properties_Text.d.ts index 199722f..4ba2acf 100644 --- a/types/UI/Components/ToolBar/Properties_Text.d.ts +++ b/types/UI/Components/ToolBar/Properties_Text.d.ts @@ -1,19 +1,24 @@ +import { NumericInput } from "@blueprintjs/core"; import React from "react"; +import { FontType } from "../../../Add-on/TextStyle/FontStyleInterface"; +import { FontStyleKeyCode } from "../../../DatabaseServices/FontStyle/FontStyleKeyCodeEnum"; import { Text } from "../../../DatabaseServices/Text/Text"; export interface Properties_TextProps { ents: Text[]; } export declare class Properties_Text extends React.Component { _removeFuncs: Function[]; - _textHeightInputEl: React.RefObject; - _numericInputVal: string; - _isPopoverOpen: boolean; + _TextHeight: number; + _TextWidthFactor: number; + _TextFontName: FontType; + _FontType: string; + _HeightInputRef: React.RefObject; + _WidthFactorInputRef: React.RefObject; componentDidMount(): void; componentWillUnmount(): void; - private handleChange; - private handleFocus; - private handleBlur; _HandleSelectOnChange(e: React.ChangeEvent): void; + GetFontStyleOption(): any[]; render(): JSX.Element; + ResetButton(keyCode: FontStyleKeyCode, title: string): React.ReactNode; } //# sourceMappingURL=Properties_Text.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/Properties_Text.d.ts.map b/types/UI/Components/ToolBar/Properties_Text.d.ts.map index 4e4017a..9dfa261 100644 --- a/types/UI/Components/ToolBar/Properties_Text.d.ts.map +++ b/types/UI/Components/ToolBar/Properties_Text.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Properties_Text.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/ToolBar/Properties_Text.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,EAAE,IAAI,EAAc,MAAM,qCAAqC,CAAC;AAGvE,MAAM,WAAW,oBAAoB;IAEjC,IAAI,EAAE,IAAI,EAAE,CAAC;CAChB;AAED,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,CAAC;IAE1E,YAAY,EAAE,QAAQ,EAAE,CAAM;IAC9B,kBAAkB,oCAAuC;IAC7C,gBAAgB,EAAE,MAAM,CAAM;IAC9B,cAAc,EAAE,OAAO,CAAS;IAE5C,iBAAiB;IAkBjB,oBAAoB;IAOpB,OAAO,CAAC,YAAY,CAelB;IACF,OAAO,CAAC,WAAW,CAGjB;IACF,OAAO,CAAC,UAAU,CAoBhB;IACF,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC;IAY7D,MAAM;CAoET"} \ No newline at end of file +{"version":3,"file":"Properties_Text.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/ToolBar/Properties_Text.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAqC,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGpF,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAkB,MAAM,8CAA8C,CAAC;AAIxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0DAA0D,CAAC;AAE5F,OAAO,EAAE,IAAI,EAAc,MAAM,qCAAqC,CAAC;AAIvE,MAAM,WAAW,oBAAoB;IAEjC,IAAI,EAAE,IAAI,EAAE,CAAC;CAChB;AAED,qBACa,eAAgB,SAAQ,KAAK,CAAC,SAAS,CAAC,oBAAoB,EAAE,EAAE,CAAC;IAE1E,YAAY,EAAE,QAAQ,EAAE,CAAM;IAClB,WAAW,EAAE,MAAM,CAAM;IACzB,gBAAgB,EAAE,MAAM,CAAK;IAC7B,aAAa,EAAE,QAAQ,CAAkB;IACzC,SAAS,EAAE,MAAM,CAAkB;IACnC,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,CAAmC;IACjF,oBAAoB,gCAAmC;IAEnE,iBAAiB;IASjB,oBAAoB;IAOpB,qBAAqB,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC;IAY7D,kBAAkB;IAelB,MAAM;IA8IN,WAAW,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,SAAS;CAqBzE"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/BrandAPI.d.ts.map b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/BrandAPI.d.ts.map index dd8d445..03da041 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/BrandAPI.d.ts.map +++ b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/BrandAPI.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BrandAPI.d.ts","sourceRoot":"","sources":["../../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Brand_library/BrandAPI.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAmB,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAe,MAAM,aAAa,CAAC;AAEtD,cAAc;AACd,eAAO,MAAM,SAAS,sBAiBrB,CAAC;AAEF,eAAe;AACf,eAAO,MAAM,QAAQ;;;kBAcpB,CAAC;AAEF,eAAe;AACf,eAAO,MAAM,SAAS;;;;;;;;;yBAqBrB,CAAC;AAEF,WAAW;AACX,eAAO,MAAM,MAAM,SAAgB,iBAAiB,WAAW,QAAQ,WAAW;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAAE,kBA4BpI,CAAC"} \ No newline at end of file +{"version":3,"file":"BrandAPI.d.ts","sourceRoot":"","sources":["../../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Brand_library/BrandAPI.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAmB,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAe,MAAM,aAAa,CAAC;AAEtD,cAAc;AACd,eAAO,MAAM,SAAS,sBAiBrB,CAAC;AAEF,eAAe;AACf,eAAO,MAAM,QAAQ;;;kBAcpB,CAAC;AAEF,eAAe;AACf,eAAO,MAAM,SAAS;;;;;;;;;yBAqBrB,CAAC;AAEF,WAAW;AACX,eAAO,MAAM,MAAM,SAAgB,OAAO,UAAU,WAAW,QAAQ,WAAW;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAAE,kBA4BpI,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/BrandData.d.ts b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/BrandData.d.ts index 43b898b..e5802a5 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/BrandData.d.ts +++ b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/BrandData.d.ts @@ -1,4 +1,3 @@ -/// interface Item { id: string; name: string; diff --git a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/BrandData.d.ts.map b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/BrandData.d.ts.map index cafdfed..a53b34b 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/BrandData.d.ts.map +++ b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/BrandData.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BrandData.d.ts","sourceRoot":"","sources":["../../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Brand_library/BrandData.ts"],"names":[],"mappings":";AAEA,UAAU,IAAI;IAEV,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAGD,aAAa;AACb,eAAO,MAAM,UAAU;IACnB,mBAAmB;;IAEnB,YAAY;;IAEZ,cAAc;;IAEd,cAAc;;IAEd,YAAY;;IAEZ,cAAc;;IAEd,YAAY;;IAEZ,kBAAkB;;IAElB,WAAW;;QAEP,WAAW;;QAEX,WAAW;;QAEX,WAAW;;;IAGf,cAAc;;CAEjB,CAAC;AAEF,aAAa;AACb,eAAO,MAAM,WAAW,SAAU,GAAG,WAAW,QAAQ,SAIvD,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,UAAU,EAAE,QAAQ,CAAC,CAAC;AAEzD,eAAO,MAAM,kBAAkB,8BAAyB,CAAC"} \ No newline at end of file +{"version":3,"file":"BrandData.d.ts","sourceRoot":"","sources":["../../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Brand_library/BrandData.ts"],"names":[],"mappings":"AAEA,UAAU,IAAI;IAEV,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAGD,aAAa;AACb,eAAO,MAAM,UAAU;IACnB,mBAAmB;;IAEnB,YAAY;YACE,IAAI,EAAE;IACpB,cAAc;kBACM,IAAI;IACxB,cAAc;iBACK,IAAI;IACvB,YAAY;WACC,IAAI,EAAE;IACnB,cAAc;iBACK,IAAI;IACvB,YAAY;YACE,IAAI,EAAE;IACpB,kBAAkB;;IAElB,WAAW;;QAEP,WAAW;;QAEX,WAAW;;QAEX,WAAW;;;IAGf,cAAc;;CAEjB,CAAC;AAEF,aAAa;AACb,eAAO,MAAM,WAAW,SAAU,GAAG,WAAW,QAAQ,SAIvD,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,UAAU,EAAE,QAAQ,CAAC,CAAC;AAEzD,eAAO,MAAM,kBAAkB,8BAAyB,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/BaseUI.d.ts.map b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/BaseUI.d.ts.map index c738386..a3d0d78 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/BaseUI.d.ts.map +++ b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/BaseUI.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BaseUI.d.ts","sourceRoot":"","sources":["../../../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/BaseUI.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,eAAe;AACf,eAAO,MAAM,SAAS;SAAiC,MAAM;UAAQ,MAAM;YAAU,MAAM,aAAa;iBAWvG,CAAC;AAEF,eAAe;AACf,eAAO,MAAM,SAAS;UAAmC,MAAM;UAAQ,MAAM;YAAU,MAAM,aAAa;iBAYzG,CAAC"} \ No newline at end of file +{"version":3,"file":"BaseUI.d.ts","sourceRoot":"","sources":["../../../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/BaseUI.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,eAAe;AACf,eAAO,MAAM,SAAS,yBAA0B;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAAE,gBAW1G,CAAC;AAEF,eAAe;AACf,eAAO,MAAM,SAAS,0BAA2B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAAE,gBAY5G,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Brand_List.d.ts b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Brand_List.d.ts index 8c4bded..4570b0d 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Brand_List.d.ts +++ b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Brand_List.d.ts @@ -1,4 +1,3 @@ -/// /** 品牌列表 */ export declare function Brand_List(): JSX.Element; //# sourceMappingURL=Brand_List.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Brand_List.d.ts.map b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Brand_List.d.ts.map index 4983960..9fd84b4 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Brand_List.d.ts.map +++ b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Brand_List.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Brand_List.d.ts","sourceRoot":"","sources":["../../../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Brand_List.tsx"],"names":[],"mappings":";AAKA,WAAW;AACX,wBAAgB,UAAU,gBAsBzB"} \ No newline at end of file +{"version":3,"file":"Brand_List.d.ts","sourceRoot":"","sources":["../../../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Brand_List.tsx"],"names":[],"mappings":"AAKA,WAAW;AACX,wBAAgB,UAAU,gBAsBzB"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Kind_List.d.ts b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Kind_List.d.ts index c8fdb77..46e5d7a 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Kind_List.d.ts +++ b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Kind_List.d.ts @@ -1,4 +1,3 @@ -/// /** 种类列表 */ export declare function Kind_List(): JSX.Element; //# sourceMappingURL=Kind_List.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Kind_List.d.ts.map b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Kind_List.d.ts.map index 6e1532e..5fa9906 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Kind_List.d.ts.map +++ b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Kind_List.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Kind_List.d.ts","sourceRoot":"","sources":["../../../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Kind_List.tsx"],"names":[],"mappings":";AAyBA,WAAW;AACX,wBAAgB,SAAS,gBAkDxB"} \ No newline at end of file +{"version":3,"file":"Kind_List.d.ts","sourceRoot":"","sources":["../../../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Brand_library/Components/Kind_List.tsx"],"names":[],"mappings":"AAsBA,WAAW;AACX,wBAAgB,SAAS,gBAwExB"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/index.d.ts b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/index.d.ts index b0e9867..514cfd7 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/index.d.ts +++ b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/index.d.ts @@ -1,4 +1,3 @@ -/// import "./BrandStyle.css"; /** 品牌库UI */ export default function Resoure_Brand(): JSX.Element; diff --git a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/index.d.ts.map b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/index.d.ts.map index 2b08dc0..7499824 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/index.d.ts.map +++ b/types/UI/Components/ToolBar/ResourceLibrary/Brand_library/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Brand_library/index.tsx"],"names":[],"mappings":";AAWA,OAAO,kBAAkB,CAAC;AAK1B,YAAY;AACZ,MAAM,CAAC,OAAO,UAAU,aAAa,gBAYpC"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Brand_library/index.tsx"],"names":[],"mappings":"AAWA,OAAO,kBAAkB,CAAC;AAK1B,YAAY;AACZ,MAAM,CAAC,OAAO,UAAU,aAAa,gBAYpC"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/ModuleReport.d.ts.map b/types/UI/Components/ToolBar/ResourceLibrary/ModuleReport.d.ts.map index 111545c..c3b4686 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/ModuleReport.d.ts.map +++ b/types/UI/Components/ToolBar/ResourceLibrary/ModuleReport.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ModuleReport.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ResourceLibrary/ModuleReport.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIzC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,wBAAwB,CAAC;AAuBhC,eAAO,MAAM,OAAO,SAAU,IAAI,eAKjC,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,SAAS,CAAC;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;CAAE,EAAE,EAAE,CAAC;IAEtH,KAAK,EAAE,IAAI,EAAE,CAAM;IACP,aAAa;;;;;;;;;;MAIvB;IACU,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;KAAE,EAAE,CAAM;IAChE,eAAe,EAAE,MAAM,EAAE,CAAM;IAC/B,mBAAmB,oCAAuC;IAC9C,aAAa,EAAE,OAAO,CAAS;IAC3C,YAAY,MAAa,MAAM,WAAW,CAAC,gBAAgB,CAAC,mBAS1D;IACF,cAAc,sBAuBZ;IACF,SAAS,UAAW,MAAM,UAIxB;IACF,mBAAmB,MAAO,MAAM,SAAS,CAAC,gBAAgB,CAAC,UAOzD;IACF,QAAQ,MAAO,MAAM,WAAW,SAAS,MAAM,UAQ7C;IACF,MAAM;CA+IT"} \ No newline at end of file +{"version":3,"file":"ModuleReport.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ResourceLibrary/ModuleReport.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAIzC,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,wBAAwB,CAAC;AAuBhC,eAAO,MAAM,OAAO,SAAU,IAAI,eAKjC,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,YAAa,SAAQ,SAAS,CAAC;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,UAAU,CAAC;CAAE,EAAE,EAAE,CAAC;IAEtH,KAAK,EAAE,IAAI,EAAE,CAAM;IACP,aAAa;;;;;;;;;;MAIvB;IACU,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;KAAE,EAAE,CAAM;IAChE,eAAe,EAAE,MAAM,EAAE,CAAM;IAC/B,mBAAmB,oCAAuC;IAC9C,aAAa,EAAE,OAAO,CAAS;IAC3C,YAAY,MAAa,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,mBAS1D;IACF,cAAc,sBAuBZ;IACF,SAAS,UAAW,MAAM,UAIxB;IACF,mBAAmB,MAAO,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAOzD;IACF,QAAQ,MAAO,KAAK,CAAC,WAAW,SAAS,MAAM,UAQ7C;IACF,MAAM;CA+IT"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/Pagination2/Pagination2.d.ts b/types/UI/Components/ToolBar/ResourceLibrary/Pagination2/Pagination2.d.ts index 11cd642..50ef6e6 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/Pagination2/Pagination2.d.ts +++ b/types/UI/Components/ToolBar/ResourceLibrary/Pagination2/Pagination2.d.ts @@ -1,4 +1,3 @@ -/// import './Pagination2.less'; interface Pagination2Props { total: number; diff --git a/types/UI/Components/ToolBar/ResourceLibrary/Pagination2/Pagination2.d.ts.map b/types/UI/Components/ToolBar/ResourceLibrary/Pagination2/Pagination2.d.ts.map index 3750b29..8c1ec11 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/Pagination2/Pagination2.d.ts.map +++ b/types/UI/Components/ToolBar/ResourceLibrary/Pagination2/Pagination2.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Pagination2.d.ts","sourceRoot":"","sources":["../../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Pagination2/Pagination2.tsx"],"names":[],"mappings":";AAEA,OAAO,oBAAoB,CAAC;AAG5B,UAAU,gBAAgB;IAEtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAcD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAK,EAAE,gBAAgB,eA8O1D"} \ No newline at end of file +{"version":3,"file":"Pagination2.d.ts","sourceRoot":"","sources":["../../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Pagination2/Pagination2.tsx"],"names":[],"mappings":"AAEA,OAAO,oBAAoB,CAAC;AAG5B,UAAU,gBAAgB;IAEtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAcD,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,KAAK,EAAE,gBAAgB,eA8O1D"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/ResourcePanel.d.ts b/types/UI/Components/ToolBar/ResourceLibrary/ResourcePanel.d.ts index 593ef49..cea922f 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/ResourcePanel.d.ts +++ b/types/UI/Components/ToolBar/ResourceLibrary/ResourcePanel.d.ts @@ -1,16 +1,6 @@ import { Component } from 'react'; import "./ResourceLibrary.less"; import ResourceStore from "./RsourceStore"; -export declare const ResourcePanelType: { - publicLibrary: symbol; - resourceList: symbol; - myCollect: symbol; - collectList: symbol; - resourceByImg: symbol; - enterpriseFolder: symbol; - enterpriseModule: symbol; - brandLibrary: symbol; -}; export declare class ResourcePanel extends Component<{}, {}> { resourceStore: ResourceStore; constructor(prop: any); diff --git a/types/UI/Components/ToolBar/ResourceLibrary/ResourcePanel.d.ts.map b/types/UI/Components/ToolBar/ResourceLibrary/ResourcePanel.d.ts.map index 2fa284f..bd9120c 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/ResourcePanel.d.ts.map +++ b/types/UI/Components/ToolBar/ResourceLibrary/ResourcePanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ResourcePanel.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ResourceLibrary/ResourcePanel.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,wBAAwB,CAAC;AAMhC,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAI3C,eAAO,MAAM,iBAAiB;;;;;;;;;CAS7B,CAAC;AACF,qBACa,aAAc,SAAQ,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAEhD,aAAa,gBAA+B;gBAChC,IAAI,KAAA;IAMhB,oBAAoB;IAKpB,MAAM;CAgBT"} \ No newline at end of file +{"version":3,"file":"ResourcePanel.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ResourceLibrary/ResourcePanel.tsx"],"names":[],"mappings":"AAEA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,wBAAwB,CAAC;AAOhC,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAI3C,qBACa,aAAc,SAAQ,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAEhD,aAAa,gBAA+B;gBAChC,IAAI,KAAA;IAMhB,oBAAoB;IAKpB,MAAM;CAgBT"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/ResourcePanelType.d.ts b/types/UI/Components/ToolBar/ResourceLibrary/ResourcePanelType.d.ts new file mode 100644 index 0000000..dd9381e --- /dev/null +++ b/types/UI/Components/ToolBar/ResourceLibrary/ResourcePanelType.d.ts @@ -0,0 +1,11 @@ +export declare const ResourcePanelType: { + publicLibrary: symbol; + resourceList: symbol; + myCollect: symbol; + collectList: symbol; + resourceByImg: symbol; + enterpriseFolder: symbol; + enterpriseModule: symbol; + brandLibrary: symbol; +}; +//# sourceMappingURL=ResourcePanelType.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/ResourcePanelType.d.ts.map b/types/UI/Components/ToolBar/ResourceLibrary/ResourcePanelType.d.ts.map new file mode 100644 index 0000000..7f521b1 --- /dev/null +++ b/types/UI/Components/ToolBar/ResourceLibrary/ResourcePanelType.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ResourcePanelType.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ResourceLibrary/ResourcePanelType.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB;;;;;;;;;CAS7B,CAAC"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/Resource_ResourceList.d.ts b/types/UI/Components/ToolBar/ResourceLibrary/Resource_ResourceList.d.ts index 00333c8..be1040d 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/Resource_ResourceList.d.ts +++ b/types/UI/Components/ToolBar/ResourceLibrary/Resource_ResourceList.d.ts @@ -1,3 +1,4 @@ +import { IconName } from '@blueprintjs/core/lib/esm/components'; import React, { Component, RefObject } from 'react'; import { Folder, ModuleData } from './ResourceInterfaces'; import ResourceStore from './RsourceStore'; @@ -9,6 +10,7 @@ export default class Resource_ResourceList extends Component<{}, {}> { */ HandleFilterChange: (key: string, filter: React.FormEvent | React.FormEvent) => Promise; HandlePageChange: (page: number) => Promise; + HandleIconChange: (iconName: IconName) => Promise; render(): JSX.Element; } /** @@ -27,6 +29,7 @@ export declare const GetCssObj: (logo: string, size?: string) => React.CSSProper export declare const RenderDetailImg: (logo: string, size?: string) => JSX.Element; export declare class ResourceItem extends Component<{ module: ModuleData; + icon?: IconName; }, {}> { isOpenFeedBackDialog: boolean; resourceStore: ResourceStore; diff --git a/types/UI/Components/ToolBar/ResourceLibrary/Resource_ResourceList.d.ts.map b/types/UI/Components/ToolBar/ResourceLibrary/Resource_ResourceList.d.ts.map index 9ef5690..54300d2 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/Resource_ResourceList.d.ts.map +++ b/types/UI/Components/ToolBar/ResourceLibrary/Resource_ResourceList.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Resource_ResourceList.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Resource_ResourceList.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAcpD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAiC,MAAM,sBAAsB,CAAC;AAGzF,OAAO,aAA4B,MAAM,gBAAgB,CAAC;AAK1D,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAEhE,aAAa,EAAE,aAAa,CAA+B;IAC3D;;;OAGG;IACH,kBAAkB,QAAe,MAAM,UAAU,MAAM,SAAS,CAAC,gBAAgB,CAAC,GAAG,MAAM,SAAS,CAAC,iBAAiB,CAAC,mBAMrH;IACF,gBAAgB,SAAgB,MAAM,mBAkBpC;IACF,MAAM;CAmQT;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,GAAG,CAAC;CAAE,eAqBtG;AAID,eAAO,MAAM,mBAAmB,SAAU,MAAM,SAAS,MAAM,KAAG,GAiBjE,CAAC;AACF,eAAO,MAAM,SAAS,SAAU,MAAM,SAAS,MAAM,KAAG,MAAM,aAY7D,CAAC;AACF,eAAO,MAAM,eAAe,SAAU,MAAM,SAAS,MAAM,KAAG,WAe7D,CAAC;AACF,qBACa,YAAa,SAAQ,SAAS,CAAC;IAAE,MAAM,EAAE,UAAU,CAAC;CAAE,EAAE,EAAE,CAAC;IAExD,oBAAoB,EAAE,OAAO,CAAS;IAClD,aAAa,EAAE,aAAa,CAA+B;IAC3D,UAAU,EAAE,SAAS,CAAC,cAAc,CAAC,CAAqC;IAC9D,iBAAiB,EAAE,OAAO,CAAS;IAC/C,OAAO,MAAa,gBAAgB,UAAU,UAAU,UAAU,MAAM,mBAyCtE;IACF,WAAW,aAGT;IACF,eAAe,MAAa,gBAAgB,CAAC,cAAc,CAAC,UAAU,UAAU,mBA8C9E;IACF,MAAM;CA4KT"} \ No newline at end of file +{"version":3,"file":"Resource_ResourceList.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Resource_ResourceList.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAA0B,MAAM,sCAAsC,CAAC;AAGxF,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAWpD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAiC,MAAM,sBAAsB,CAAC;AAGzF,OAAO,aAA+C,MAAM,gBAAgB,CAAC;AAK7E,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAEhE,aAAa,EAAE,aAAa,CAA+B;IAC3D;;;OAGG;IACH,kBAAkB,QAAe,MAAM,UAAU,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,iBAAiB,CAAC,mBAMrH;IACF,gBAAgB,SAAgB,MAAM,mBAkBpC;IAEF,gBAAgB,aAAoB,QAAQ,mBAI1C;IACF,MAAM;CAkRT;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,GAAG,CAAC;CAAE,eAqBtG;AAID,eAAO,MAAM,mBAAmB,SAAU,MAAM,SAAS,MAAM,KAAG,GAiBjE,CAAC;AACF,eAAO,MAAM,SAAS,SAAU,MAAM,SAAS,MAAM,KAAG,KAAK,CAAC,aAY7D,CAAC;AACF,eAAO,MAAM,eAAe,SAAU,MAAM,SAAS,MAAM,KAAG,GAAG,CAAC,OAejE,CAAC;AACF,qBACa,YAAa,SAAQ,SAAS,CAAC;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;CAAE,EAAE,EAAE,CAAC;IAEzE,oBAAoB,EAAE,OAAO,CAAS;IAClD,aAAa,EAAE,aAAa,CAA+B;IAC3D,UAAU,EAAE,SAAS,CAAC,cAAc,CAAC,CAAqC;IAC9D,iBAAiB,EAAE,OAAO,CAAS;IAC/C,OAAO,MAAa,KAAK,CAAC,UAAU,UAAU,UAAU,UAAU,MAAM,mBAyCtE;IACF,WAAW,aAGT;IACF,eAAe,MAAa,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,UAAU,mBAmB9E;IACF,MAAM;CA4KT"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/Resource_Search.d.ts.map b/types/UI/Components/ToolBar/ResourceLibrary/Resource_Search.d.ts.map index 1e77f55..f3ba8e4 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/Resource_Search.d.ts.map +++ b/types/UI/Components/ToolBar/ResourceLibrary/Resource_Search.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Resource_Search.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Resource_Search.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAa,MAAM,OAAO,CAAC;AAGpD,OAAO,EAAU,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,aAA4B,MAAM,gBAAgB,CAAC;AAI1D,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAE1D,aAAa,EAAE,aAAa,CAA+B;IAC3D,YAAY,oCAAiC;IAE7C,iBAAiB,sBA8Bf;IAEF,WAAW,MAAa,MAAM,WAAW,CAAC,gBAAgB,CAAC,mBA4BzD;IACF,kBAAkB,SAAU,aAAa,iBA6BvC;IAEF,MAAM;CAoQT"} \ No newline at end of file +{"version":3,"file":"Resource_Search.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Resource_Search.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAa,MAAM,OAAO,CAAC;AAGpD,OAAO,EAAU,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,aAA4B,MAAM,gBAAgB,CAAC;AAI1D,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAE1D,aAAa,EAAE,aAAa,CAA+B;IAC3D,YAAY,oCAAiC;IAE7C,iBAAiB,sBA8Bf;IAEF,WAAW,MAAa,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,mBA4BzD;IACF,kBAAkB,SAAU,aAAa,iBA6BvC;IAEF,MAAM;CAoQT"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/Resoure_Enterprise.d.ts.map b/types/UI/Components/ToolBar/ResourceLibrary/Resoure_Enterprise.d.ts.map index 37022ae..1d441c7 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/Resoure_Enterprise.d.ts.map +++ b/types/UI/Components/ToolBar/ResourceLibrary/Resoure_Enterprise.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Resoure_Enterprise.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Resoure_Enterprise.tsx"],"names":[],"mappings":"AAGA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOzC,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAG3C,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAE7D,aAAa,EAAE,aAAa,CAA+B;IAC3D,MAAM;CAST"} \ No newline at end of file +{"version":3,"file":"Resoure_Enterprise.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ResourceLibrary/Resoure_Enterprise.tsx"],"names":[],"mappings":"AAGA,OAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASzC,OAAO,aAAoC,MAAM,gBAAgB,CAAC;AAGlE,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAE7D,aAAa,EAAE,aAAa,CAA+B;IAC3D,MAAM;CAST"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/RsourceStore.d.ts b/types/UI/Components/ToolBar/ResourceLibrary/RsourceStore.d.ts index 52df5b3..ade4d14 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/RsourceStore.d.ts +++ b/types/UI/Components/ToolBar/ResourceLibrary/RsourceStore.d.ts @@ -1,7 +1,11 @@ import { PhysicalMaterialRecord } from "../../../../DatabaseServices/PhysicalMaterialRecord"; +import { IResourceStoreIcon } from "../../../Store/OptionInterface/IOptionInterface"; +import { IConfigOption } from "../../Board/UserConfigComponent"; import { Folder, ModuleData, ModuleType, PrivateDirs, PrivateDirsParams, PrivateModuleItem, ResourceBrands, ResourceClass, ResourceParams } from "./ResourceInterfaces"; export declare const pageCount: string; export default class ResourceStore { + configName: string; + configsNames: string[]; isInit: boolean; InitAllModulesFolder(): void; class_type: number; @@ -50,6 +54,10 @@ export default class ResourceStore { loading: boolean; }; enterpriseType: Symbol; + option: IResourceStoreIcon; + InitOption(): void; + SaveConfig(): IConfigOption; + UpdateOption(conf: IConfigOption): void; /** * @description 加载所有的类目,参数,品牌参数 */ @@ -113,4 +121,5 @@ export default class ResourceStore { GetPrivateDir: () => Promise; GetPrivateModule: () => Promise; } +export declare const resourceStoreIcon: ResourceStore; //# sourceMappingURL=RsourceStore.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/RsourceStore.d.ts.map b/types/UI/Components/ToolBar/ResourceLibrary/RsourceStore.d.ts.map index f01ae86..6bd6e2f 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/RsourceStore.d.ts.map +++ b/types/UI/Components/ToolBar/ResourceLibrary/RsourceStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RsourceStore.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ResourceLibrary/RsourceStore.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"RsourceStore.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ResourceLibrary/RsourceStore.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/UserCollect.d.ts b/types/UI/Components/ToolBar/ResourceLibrary/UserCollect.d.ts index a00cc2c..7b47ea6 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/UserCollect.d.ts +++ b/types/UI/Components/ToolBar/ResourceLibrary/UserCollect.d.ts @@ -1,3 +1,4 @@ +import { IconName } from '@blueprintjs/core'; import React, { Component } from 'react'; import { Folder, ModuleData } from './ResourceInterfaces'; import ResourceStore from './RsourceStore'; @@ -14,6 +15,7 @@ export default class UserCollect extends Component<{}, {}> { RemoveCollect: (module?: ModuleData) => Promise; ShowContextMenu: (e: React.MouseEvent, module: ModuleData) => Promise; HandleCheckChange: (item: ModuleData) => void; + HandleIconChange: (iconName: IconName) => Promise; render(): JSX.Element; } //# sourceMappingURL=UserCollect.d.ts.map \ No newline at end of file diff --git a/types/UI/Components/ToolBar/ResourceLibrary/UserCollect.d.ts.map b/types/UI/Components/ToolBar/ResourceLibrary/UserCollect.d.ts.map index 669b143..bea2206 100644 --- a/types/UI/Components/ToolBar/ResourceLibrary/UserCollect.d.ts.map +++ b/types/UI/Components/ToolBar/ResourceLibrary/UserCollect.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"UserCollect.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ResourceLibrary/UserCollect.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAezC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAI1D,OAAO,aAAa,MAAM,gBAAgB,CAAC;AAE3C,eAAO,MAAM,cAAc,mBAQ1B,CAAC;AAGF,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAEtD,aAAa,EAAE,aAAa,CAA+B;IAE/C,OAAO,EAAE,OAAO,CAAS;IACzB,WAAW,EAAE,MAAM,EAAE,CAAM;IAC3B,iBAAiB,EAAE,OAAO,CAAS;IAE/C,YAAY,SAAgB,MAAM,mBAWhC;IACF,aAAa,MAAa,MAAM,WAAW,mBAiBzC;IACF,YAAY,WAAkB,MAAM,mBAIlC;IACF,YAAY,WAAkB,MAAM,WAAW,MAAM,mBAKnD;IACF,aAAa,YAAmB,UAAU,mBAwBxC;IACF,eAAe,MAAa,gBAAgB,CAAC,cAAc,CAAC,UAAU,UAAU,mBA8C9E;IAEF,iBAAiB,SAAU,UAAU,UAUnC;IAGF,MAAM;CAiLT"} \ No newline at end of file +{"version":3,"file":"UserCollect.d.ts","sourceRoot":"","sources":["../../../../../../src/UI/Components/ToolBar/ResourceLibrary/UserCollect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmE,QAAQ,EAA2I,MAAM,mBAAmB,CAAC;AAGvP,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AASzC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAI1D,OAAO,aAAoC,MAAM,gBAAgB,CAAC;AAElE,eAAO,MAAM,cAAc,mBAQ1B,CAAC;AAGF,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAEtD,aAAa,EAAE,aAAa,CAA+B;IAE/C,OAAO,EAAE,OAAO,CAAS;IACzB,WAAW,EAAE,MAAM,EAAE,CAAM;IAC3B,iBAAiB,EAAE,OAAO,CAAS;IAE/C,YAAY,SAAgB,MAAM,mBAWhC;IACF,aAAa,MAAa,KAAK,CAAC,WAAW,mBAiBzC;IACF,YAAY,WAAkB,MAAM,mBAIlC;IACF,YAAY,WAAkB,MAAM,WAAW,MAAM,mBAKnD;IACF,aAAa,YAAmB,UAAU,mBAwBxC;IACF,eAAe,MAAa,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,UAAU,UAAU,mBAmB9E;IAEF,iBAAiB,SAAU,UAAU,UAUnC;IAEF,gBAAgB,aAAoB,QAAQ,mBAI1C;IAEF,MAAM;CA+LT"} \ No newline at end of file diff --git a/types/UI/Components/TopToolBar/DimensionPanel.d.ts.map b/types/UI/Components/TopToolBar/DimensionPanel.d.ts.map index 62cd46c..16ae86d 100644 --- a/types/UI/Components/TopToolBar/DimensionPanel.d.ts.map +++ b/types/UI/Components/TopToolBar/DimensionPanel.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DimensionPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/TopToolBar/DimensionPanel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIpD,qBAAa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,eAAe,CAAC;CAAE,EAAE,EAAE,CAAC;IAEhF,MAAM;CAoBT"} \ No newline at end of file +{"version":3,"file":"DimensionPanel.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/TopToolBar/DimensionPanel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIpD,qBAAa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,EAAE,eAAe,CAAC;CAAE,EAAE,EAAE,CAAC;IAEhF,MAAM;CA0BT"} \ No newline at end of file diff --git a/types/UI/Components/TopToolBar/ToolsBlock.d.ts b/types/UI/Components/TopToolBar/ToolsBlock.d.ts index c300914..81dd1d1 100644 --- a/types/UI/Components/TopToolBar/ToolsBlock.d.ts +++ b/types/UI/Components/TopToolBar/ToolsBlock.d.ts @@ -14,12 +14,14 @@ export declare class ToolsBlock extends React.Component { windowWidth: number; private blocksData; private _DisposeAOP; + private reCalcLSNum; + private _DisposeReaction; componentDidMount(): void; componentWillUnmount(): void; + UNSAFE_componentWillReceiveProps(nextProps: Readonly): void; componentDidUpdate(): void; calSmallIconList: () => void; HandleOnClick: (cmd: string) => Promise; - display: (cmd: ICommandIconInfo) => boolean; renderMainList: () => JSX.Element[]; render(): JSX.Element; } diff --git a/types/UI/Components/TopToolBar/ToolsBlock.d.ts.map b/types/UI/Components/TopToolBar/ToolsBlock.d.ts.map index 0c61cda..b40609c 100644 --- a/types/UI/Components/TopToolBar/ToolsBlock.d.ts.map +++ b/types/UI/Components/TopToolBar/ToolsBlock.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ToolsBlock.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/TopToolBar/ToolsBlock.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAW/B,OAAO,EAAE,gBAAgB,EAAgD,MAAM,uBAAuB,CAAC;AAEvG,MAAM,WAAW,eAAe;IAE5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,OAAO,EAAE,QAAQ,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AACD,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,CAAC;IAEpD,YAAY,EAAE,OAAO,CAAS;IAC1C,KAAK,EAAE,cAAc,CAAC;IACV,QAAQ,EAAE,gBAAgB,EAAE,CAAgC;IAC5D,SAAS,EAAE,gBAAgB,EAAE,CAA6B;IAC1D,WAAW,SAAqB;IAC5C,OAAO,CAAC,UAAU,CAAmE;IAErF,OAAO,CAAC,WAAW,CAAW;IAC9B,iBAAiB;IAWjB,oBAAoB;IASpB,kBAAkB;IAOlB,gBAAgB,aA+Cd;IACF,aAAa,QAAe,MAAM,mBAmBhC;IACF,OAAO,QAAS,gBAAgB,aAO9B;IAEF,cAAc,sBA0BZ;IACF,MAAM;CA4ET"} \ No newline at end of file +{"version":3,"file":"ToolsBlock.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/TopToolBar/ToolsBlock.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,EAAE,gBAAgB,EAAuB,MAAM,uBAAuB,CAAC;AAI9E,MAAM,WAAW,eAAe;IAE5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,OAAO,EAAE,QAAQ,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AACD,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,CAAC;IAEpD,YAAY,EAAE,OAAO,CAAS;IAC1C,KAAK,EAAE,cAAc,CAAC;IACV,QAAQ,EAAE,gBAAgB,EAAE,CAAsC;IAClE,SAAS,EAAE,gBAAgB,EAAE,CAAmC;IAChE,WAAW,SAAqB;IAC5C,OAAO,CAAC,UAAU,CAAmE;IAErF,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,gBAAgB,CAAW;IAEnC,iBAAiB;IAgBjB,oBAAoB;IAepB,gCAAgC,CAAC,SAAS,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,IAAI;IAW5E,kBAAkB;IAalB,gBAAgB,aAwBd;IAEF,aAAa,QAAe,MAAM,mBAmBhC;IAEF,cAAc,sBA0BZ;IACF,MAAM;CA2ET"} \ No newline at end of file diff --git a/types/UI/Components/TopToolBar/ToolsBlockStore.d.ts.map b/types/UI/Components/TopToolBar/ToolsBlockStore.d.ts.map index 946caf4..1c1fe63 100644 --- a/types/UI/Components/TopToolBar/ToolsBlockStore.d.ts.map +++ b/types/UI/Components/TopToolBar/ToolsBlockStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ToolsBlockStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/TopToolBar/ToolsBlockStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE9E,qBAAa,eAAgB,SAAQ,SAAS;IAE1C,OAAO,EAAE,QAAQ,CAAuC;IACxD,QAAQ,EAAE,gBAAgB,CAuBxB;IAEF,UAAU,EAAE,mBAAmB,CA0BzB;IAEN,iBAAiB;CAUpB"} \ No newline at end of file +{"version":3,"file":"ToolsBlockStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/TopToolBar/ToolsBlockStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE9E,qBAAa,eAAgB,SAAQ,SAAS;IAE1C,OAAO,EAAE,QAAQ,CAAuC;IACxD,QAAQ,EAAE,gBAAgB,CAwBxB;IAEF,UAAU,EAAE,mBAAmB,CA0BzB;IAEN,iBAAiB;CAUpB"} \ No newline at end of file diff --git a/types/UI/Components/TopToolBar/TopToolBar.d.ts.map b/types/UI/Components/TopToolBar/TopToolBar.d.ts.map index 947e3a2..48a0185 100644 --- a/types/UI/Components/TopToolBar/TopToolBar.d.ts.map +++ b/types/UI/Components/TopToolBar/TopToolBar.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TopToolBar.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/TopToolBar/TopToolBar.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAEvC,OAAO,CAAC,aAAa,CAAiB;IAClD,MAAM;CA0OT"} \ No newline at end of file +{"version":3,"file":"TopToolBar.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/TopToolBar/TopToolBar.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAe/B,qBACa,UAAW,SAAQ,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC;IAEvC,OAAO,CAAC,aAAa,CAAiB;IAClD,MAAM;CAuPT"} \ No newline at end of file diff --git a/types/UI/Components/TopToolBar/TopToolBarInterface.d.ts b/types/UI/Components/TopToolBar/TopToolBarInterface.d.ts index 7cc7c05..cdf05e8 100644 --- a/types/UI/Components/TopToolBar/TopToolBarInterface.d.ts +++ b/types/UI/Components/TopToolBar/TopToolBarInterface.d.ts @@ -10,6 +10,7 @@ export interface ToolsBlockOption { brDraw: ICommandIconInfo[]; brEdit: ICommandIconInfo[]; dim: ICommandIconInfo[]; + style: ICommandIconInfo[]; light: ICommandIconInfo[]; drill: ICommandIconInfo[]; view: ICommandIconInfo[]; diff --git a/types/UI/Components/TopToolBar/TopToolBarInterface.d.ts.map b/types/UI/Components/TopToolBar/TopToolBarInterface.d.ts.map index 060dec1..ed34e88 100644 --- a/types/UI/Components/TopToolBar/TopToolBarInterface.d.ts.map +++ b/types/UI/Components/TopToolBar/TopToolBarInterface.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TopToolBarInterface.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/TopToolBar/TopToolBarInterface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAE7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACnB;AACD,MAAM,WAAW,gBAAgB;IAE7B,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,GAAG,EAAE,gBAAgB,EAAE,CAAC;IACxB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,oBAAoB,EAAE,gBAAgB,EAAE,CAAC;IACzC,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACnC;AACD,MAAM,WAAW,uBAAuB;IAEpC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AACD,MAAM,WAAW,mBAAmB;IAEhC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,IAAI,EAAE,uBAAuB,CAAC;IAC9B,IAAI,EAAE,uBAAuB,CAAC;IAC9B,MAAM,EAAE,uBAAuB,CAAC;IAChC,SAAS,EAAE,uBAAuB,CAAC;IACnC,aAAa,EAAE,uBAAuB,CAAC;CAC1C"} \ No newline at end of file +{"version":3,"file":"TopToolBarInterface.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/TopToolBar/TopToolBarInterface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAE7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACnB;AACD,MAAM,WAAW,gBAAgB;IAE7B,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,GAAG,EAAE,gBAAgB,EAAE,CAAC;IACxB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,IAAI,EAAE,gBAAgB,EAAE,CAAC;IACzB,WAAW,EAAE,gBAAgB,EAAE,CAAC;IAChC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,oBAAoB,EAAE,gBAAgB,EAAE,CAAC;IACzC,WAAW,EAAE,gBAAgB,EAAE,CAAC;CACnC;AACD,MAAM,WAAW,uBAAuB;IAEpC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AACD,MAAM,WAAW,mBAAmB;IAEhC,IAAI,EAAE,uBAAuB,CAAC;IAC9B,IAAI,EAAE,uBAAuB,CAAC;IAC9B,IAAI,EAAE,uBAAuB,CAAC;IAC9B,MAAM,EAAE,uBAAuB,CAAC;IAChC,SAAS,EAAE,uBAAuB,CAAC;IACnC,aAAa,EAAE,uBAAuB,CAAC;CAC1C"} \ No newline at end of file diff --git a/types/UI/Components/commandLineInput/InputHint.d.ts b/types/UI/Components/commandLineInput/InputHint.d.ts index d6c94ce..106b210 100644 --- a/types/UI/Components/commandLineInput/InputHint.d.ts +++ b/types/UI/Components/commandLineInput/InputHint.d.ts @@ -21,20 +21,26 @@ interface InputHitState { export declare class InputHint extends React.Component { state: InputHitState; private inputEl; + private _INPUT_MIN_WIDTH; private selectIndex; private isCNInput; + /** 移除监听输入框提示词 */ + private _RemoveReaction; private coolTime; constructor(p: any, s: any); /** * 创建组件时 */ componentDidMount(): void; + /** 销毁组件时 */ + componentWillUnmount(): void; handleOnChangeIntelliSense(cmd: string): void; handleShowHistoryCommand: () => void; handleCallback(cmd: string): void; handleKeyboardEvent: (e: KeyboardEvent) => void; private handleIntellSence; private Cancel; + private handlePaste; render(): JSX.Element; } export {}; diff --git a/types/UI/Components/commandLineInput/InputHint.d.ts.map b/types/UI/Components/commandLineInput/InputHint.d.ts.map index f880d16..64410fa 100644 --- a/types/UI/Components/commandLineInput/InputHint.d.ts.map +++ b/types/UI/Components/commandLineInput/InputHint.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"InputHint.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/commandLineInput/InputHint.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAWrD,OAAO,EAA+B,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEpF,OAAO,iBAAiB,CAAC;AAEzB,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,UAAU,cAAc;IAEpB,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAE5B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC;CAC9C;AAED,UAAU,aAAa;IAEnB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,qBACa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC,cAAc,EAAE,aAAa,CAAC;IAElE,KAAK,EAAE,aAAa,CAAC;IAC5B,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,SAAS,CAAkB;IAEnC,OAAO,CAAC,QAAQ,CAAoB;gBACxB,CAAC,KAAA,EAAE,CAAC,KAAA;IAWhB;;OAEG;IACH,iBAAiB;IA2CV,0BAA0B,CAAC,GAAG,EAAE,MAAM;IA6HtC,wBAAwB,aAQ7B;IAEK,cAAc,CAAC,GAAG,EAAE,MAAM;IAO1B,mBAAmB,MAAO,aAAa,UAiC5C;IAEF,OAAO,CAAC,iBAAiB;IAqCzB,OAAO,CAAC,MAAM;IAWP,MAAM;CA4GhB"} \ No newline at end of file +{"version":3,"file":"InputHint.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Components/commandLineInput/InputHint.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAWrD,OAAO,EAA+B,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEpF,OAAO,iBAAiB,CAAC;AAEzB,eAAO,MAAM,YAAY,iBAAiB,CAAC;AAE3C,UAAU,cAAc;IAEpB,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IAE5B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,GAAG,CAAC;CAC9C;AAED,UAAU,aAAa;IAEnB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,qBACa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC,cAAc,EAAE,aAAa,CAAC;IAE1D,KAAK,EAAE,aAAa,CAAC;IACpC,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,SAAS,CAAkB;IACnC,iBAAiB;IACjB,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAoB;gBACxB,CAAC,KAAA,EAAE,CAAC,KAAA;IAWhB;;OAEG;IACH,iBAAiB;IA6CjB,YAAY;IACZ,oBAAoB,IAAI,IAAI;IAMrB,0BAA0B,CAAC,GAAG,EAAE,MAAM;IA6HtC,wBAAwB,aAQ7B;IAEK,cAAc,CAAC,GAAG,EAAE,MAAM;IAO1B,mBAAmB,MAAO,aAAa,UAiC5C;IAEF,OAAO,CAAC,iBAAiB;IAqCzB,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,WAAW,CAsBjB;IAEK,MAAM;CAyIhB"} \ No newline at end of file diff --git a/types/UI/DynamicPrompt/DynamicInputBase.d.ts.map b/types/UI/DynamicPrompt/DynamicInputBase.d.ts.map index 41a3292..e88e25e 100644 --- a/types/UI/DynamicPrompt/DynamicInputBase.d.ts.map +++ b/types/UI/DynamicPrompt/DynamicInputBase.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DynamicInputBase.d.ts","sourceRoot":"","sources":["../../../../src/UI/DynamicPrompt/DynamicInputBase.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,qBAAa,YAAY;IAGrB,OAAO,EAAE,gBAAgB,CAAC;IAG1B,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC;IACjC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC;IAEhC,WAAW,UAAS;IACpB,UAAU,UAAS;gBACP,SAAS,EAAE,WAAW;IAyDlC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IAEzB,IAAI,MAAM,CAAC,IAAI,EAAE,OAAO,EAKvB;IACD,IAAI,MAAM,IANO,OAAO,CASvB;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,GAAG,EAMnB;IACD,IAAI,KAAK,IAAI,GAAG,CAGf;IACD,OAAO;IAQP,cAAc,CAAC,CAAC,EAAE,aAAa;IAqC/B,YAAY,CAAC,CAAC,EAAE,aAAa;IAStB,KAAK;IAOZ,OAAO,CAAC,SAAS;IAMV,IAAI;IAgBX,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAWhC,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,EAGnB;IAED,OAAO;IAKP,qBAAqB;CAGxB"} \ No newline at end of file +{"version":3,"file":"DynamicInputBase.d.ts","sourceRoot":"","sources":["../../../../src/UI/DynamicPrompt/DynamicInputBase.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,qBAAa,YAAY;IAGrB,OAAO,EAAE,gBAAgB,CAAC;IAG1B,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC;IACjC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC;IAEhC,WAAW,UAAS;IACpB,UAAU,UAAS;gBACP,SAAS,EAAE,WAAW;IAoElC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IAEzB,IAAI,MAAM,CAAC,IAAI,EAAE,OAAO,EAKvB;IACD,IAAI,MAAM,IANO,OAAO,CASvB;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,GAAG,EAMnB;IACD,IAAI,KAAK,IAAI,GAAG,CAGf;IACD,OAAO;IAQP,cAAc,CAAC,CAAC,EAAE,aAAa;IAqC/B,YAAY,CAAC,CAAC,EAAE,aAAa;IAStB,KAAK;IAOZ,OAAO,CAAC,SAAS;IAMV,IAAI;IAgBX,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;IAWhC,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,EAGnB;IAED,OAAO;IAKP,qBAAqB;CAGxB"} \ No newline at end of file diff --git a/types/UI/IconEnum.d.ts b/types/UI/IconEnum.d.ts index 4a56d6d..dd53cfa 100644 --- a/types/UI/IconEnum.d.ts +++ b/types/UI/IconEnum.d.ts @@ -153,6 +153,7 @@ export declare enum IconEnum { CheckInterference = "CheckInterference.svg", ShareMaterial = "ShareMaterial.svg", ProcessGroup = "ProcessGroup.svg", + AlignLineGroup = "AlignLineGroup.svg", TemplateReplace = "TemplateReplace.svg", CutSpace = "CutSpace.svg", Text2Curve = "Text2Curve.svg", @@ -242,6 +243,13 @@ export declare enum IconEnum { DrawGirder = "DrawGirder.svg",//画房梁 BoardInfoDim = "BoardInfoDim.svg",//板件标注 Modeling = "Modeling.svg",//一键建模 - TemplateGroup = "TemplateGroup.svg" + TemplateGroup = "TemplateGroup.svg",//模块组合 + DrawArcBoard = "DrawArcBoard.svg",//画圆弧板 + OneClickInspection = "OneClickInspection.svg",//一键检查 + MatchProp = "MatchProp.svg",//特性匹配 + ChangeColorByLinesType = "ChangeColorByLinesType.svg",//根据纹路修改颜色 + ExportGLTF = "gltf.svg",//导出GLTF文件 + DimStyle = "DimStyle.svg",//标注样式 + FontStyle = "FontStyle.svg" } //# sourceMappingURL=IconEnum.d.ts.map \ No newline at end of file diff --git a/types/UI/IconEnum.d.ts.map b/types/UI/IconEnum.d.ts.map index 786a309..621d020 100644 --- a/types/UI/IconEnum.d.ts.map +++ b/types/UI/IconEnum.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"IconEnum.d.ts","sourceRoot":"","sources":["../../../src/UI/IconEnum.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"IconEnum.d.ts","sourceRoot":"","sources":["../../../src/UI/IconEnum.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/JsPlugin/InputAutoSize.d.ts b/types/UI/JsPlugin/InputAutoSize.d.ts index ac227c4..2f6260a 100644 --- a/types/UI/JsPlugin/InputAutoSize.d.ts +++ b/types/UI/JsPlugin/InputAutoSize.d.ts @@ -1,7 +1,8 @@ /** * 自适应input的输入框大小,请设置好样式,并加入到dom节点后在调用该函数,如果样式更新,请重新注册. * @param element input元素 - * @param [options] + * @param [options] 配置项 + * @property [options.minWidth] 设置最小宽度 * @returns */ export declare function AutoReSize(element: HTMLInputElement, options?: { diff --git a/types/UI/JsPlugin/InputAutoSize.d.ts.map b/types/UI/JsPlugin/InputAutoSize.d.ts.map index 8bed38b..86d25f8 100644 --- a/types/UI/JsPlugin/InputAutoSize.d.ts.map +++ b/types/UI/JsPlugin/InputAutoSize.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"InputAutoSize.d.ts","sourceRoot":"","sources":["../../../../src/UI/JsPlugin/InputAutoSize.ts"],"names":[],"mappings":"AA+BA;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;CAAE;;;EAqEpF"} \ No newline at end of file +{"version":3,"file":"InputAutoSize.d.ts","sourceRoot":"","sources":["../../../../src/UI/JsPlugin/InputAutoSize.ts"],"names":[],"mappings":"AA+BA;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;CAAE;;;EAqEpF"} \ No newline at end of file diff --git a/types/UI/Layout/ApplicationLayout.d.ts.map b/types/UI/Layout/ApplicationLayout.d.ts.map index ce5e31e..2fd0b23 100644 --- a/types/UI/Layout/ApplicationLayout.d.ts.map +++ b/types/UI/Layout/ApplicationLayout.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ApplicationLayout.d.ts","sourceRoot":"","sources":["../../../../src/UI/Layout/ApplicationLayout.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAO,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAkBhF,OAAO,EAAqB,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAY5F,eAAO,IAAI,KAAK,EAAE,MAAM,CAAC;AAEzB,qBAAa,MAAM;IAEf,GAAG,EAAE,kBAAkB,CAAC;;IA2ExB,cAAc;IAqDd,UAAU;IAQV,cAAc;IAMd,gBAAgB;IAMhB,eAAe;IAMf,gBAAgB;IAyBhB,kBAAkB;IAKlB,yBAAyB;IAazB,aAAa;IAsBb,aAAa;IAab,iBAAiB;IAQjB,iBAAiB;IAIjB,eAAe;IAIf,cAAc;IAKd,kBAAkB,CAAC,KAAK,EAAE,sBAAsB;IAKhD,iBAAiB;CACpB"} \ No newline at end of file +{"version":3,"file":"ApplicationLayout.d.ts","sourceRoot":"","sources":["../../../../src/UI/Layout/ApplicationLayout.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAO,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAoBhF,OAAO,EAAqB,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAa5F,eAAO,IAAI,KAAK,EAAE,MAAM,CAAC;AAEzB,qBAAa,MAAM;IAEf,GAAG,EAAE,kBAAkB,CAAC;;IAiGxB,cAAc;IAqDd,UAAU;IAQV,cAAc;IAMd,gBAAgB;IAMhB,eAAe;IAMf,gBAAgB;IAyBhB,kBAAkB;IAKlB,yBAAyB;IAazB,aAAa;IAsBb,aAAa;IAab,iBAAiB;IAQjB,iBAAiB;IAIjB,eAAe;IAIf,cAAc;IAKd,kBAAkB,CAAC,KAAK,EAAE,sBAAsB;IAKhD,iBAAiB;CACpB"} \ No newline at end of file diff --git a/types/UI/MaterialEditor/CompositeMaterialModal.d.ts b/types/UI/MaterialEditor/CompositeMaterialModal.d.ts new file mode 100644 index 0000000..a00d665 --- /dev/null +++ b/types/UI/MaterialEditor/CompositeMaterialModal.d.ts @@ -0,0 +1,7 @@ +import { MaterialStore } from "../Store/MaterialStore"; +export declare const MaterialConfigModal: (({ store }: { + store?: MaterialStore; +}) => JSX.Element) & import("mobx-react").IWrappedComponent<{ + store?: MaterialStore; +}>; +//# sourceMappingURL=CompositeMaterialModal.d.ts.map \ No newline at end of file diff --git a/types/UI/MaterialEditor/CompositeMaterialModal.d.ts.map b/types/UI/MaterialEditor/CompositeMaterialModal.d.ts.map new file mode 100644 index 0000000..f12f823 --- /dev/null +++ b/types/UI/MaterialEditor/CompositeMaterialModal.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"CompositeMaterialModal.d.ts","sourceRoot":"","sources":["../../../../src/UI/MaterialEditor/CompositeMaterialModal.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAIvD,eAAO,MAAM,mBAAmB,eAAwC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE;YAAhB,aAAa;EA+L5F,CAAC"} \ No newline at end of file diff --git a/types/UI/MaterialEditor/GoodsList.d.ts b/types/UI/MaterialEditor/GoodsList.d.ts index fa3fcb1..5ed6a33 100644 --- a/types/UI/MaterialEditor/GoodsList.d.ts +++ b/types/UI/MaterialEditor/GoodsList.d.ts @@ -1,14 +1,22 @@ -import { IObservableValue } from 'mobx'; import * as React from 'react'; +export declare enum GoodsType { + board = 1, + comp = 2,//组件 + metals = 3,//五金 + sealMaterial = 4 +} export interface IGoodInfo { goods_id: string; + goods_sn: string; name: string; color: string; material: string; + thickness: number; } interface IGoodsListProps { select: (good: IGoodInfo) => void; - open: IObservableValue; + goods_type?: GoodsType; + onClose: () => void; } export declare class GoodsList extends React.Component { private timeId; @@ -19,14 +27,52 @@ export declare class GoodsList extends React.Component { currentPage: number; pageCount: number; }; + /** 板材类型 */ + class_id: string; + /** 设置板材类型 */ + SetClassId: (id: string) => void; private isDesc; UNSAFE_componentWillMount(): void; render(): JSX.Element; handleChange: (e: React.ChangeEvent) => void; - handleSearch: (page?: number) => Promise; + handleSearch: (page?: number, params?: {}) => Promise; private handleKeyDown; private handleHideSelect; private handleOrderGoods; } +interface ITreeNode { + id: string; + label: string; + childNodes?: ITreeNode[]; +} +export declare class TreeCondition extends React.Component<{ + Search: (page?: number, params?: {}) => Promise; + SetClassId: (id: string) => void; + class_type: GoodsType; +}> { + constructor(props: any); + current: string; + isShow: boolean; + isEnabled: boolean; + contents: ITreeNode[]; + UNSAFE_componentWillMount(): void; + Init: () => Promise; + AllExpanded: () => void; + ClearSelected: () => void; + HandleClick: (node: any) => void; + HandleCollapse: (node: any) => void; + HandleExpand: (node: any) => void; + HandleFocus: () => void; + render(): React.ReactNode; +} +type TNode = Record; +/** + * 解析树形结构 + * @function + * @description 用于把一个映射结构,按一定规则,映射成另一个树形结构 + * @param {Tree} tree 旧的树形结构 + * @param {Function} mapRule 映射规则 + */ +export declare const parseTree: (tree: TNode[], mapRule?: (item: TNode, index: number) => TNode, oldChildKey?: string, newChildKey?: string) => any[]; export {}; //# sourceMappingURL=GoodsList.d.ts.map \ 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 b327add..4a70665 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;IAKlB,MAAM;IAqGb,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":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,oBAAY,SAAS;IAEjB,KAAK,IAAI;IACT,IAAI,IAAI,CAAE,IAAI;IACd,MAAM,IAAI,CAAE,IAAI;IAChB,YAAY,IAAI;CACnB;AAED,MAAM,WAAW,SAAS;IAEtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACrB;AACD,UAAU,eAAe;IAErB,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IAClC,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,OAAO,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,qBACa,SAAU,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC;IAE3D,OAAO,CAAC,MAAM,CAAiB;IACnB,SAAS,SAAM;IACf,KAAK,QAAM;IACX,IAAI;;;;MAId;IACF,WAAW;IACX,QAAQ,SAAM;IACd,aAAa;IACb,UAAU,OAAQ,MAAM,UAGtB;IACF,OAAO,CAAC,MAAM,CAAU;IACxB,yBAAyB;IAKlB,MAAM;IAuMb,YAAY,MAAO,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,UAUpD;IACF,YAAY,gDA0BV;IACF,OAAO,CAAC,aAAa,CAMnB;IACF,OAAO,CAAC,gBAAgB,CAGtB;IACF,OAAO,CAAC,gBAAgB,CAUtB;CACL;AAeD,UAAU,SAAS;IAEf,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;CAC5B;AAED,qBACa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAAC,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAAC,UAAU,EAAE,SAAS,CAAC;CAAE,CAAC;gBACvJ,KAAK,KAAA;IAKjB,OAAO,SAAM;IACb,MAAM,UAAS;IACf,SAAS,UAAS;IAClB,QAAQ,EAAE,SAAS,EAAE,CAAM;IAE3B,yBAAyB;IAKzB,IAAI,sBAyBF;IAEF,WAAW,aAQT;IAEF,aAAa,aAQX;IAEF,WAAW,sBAQT;IACF,cAAc,sBAIZ;IACF,YAAY,sBAIV;IACF,WAAW,aAsBT;IACF,MAAM,IAAI,KAAK,CAAC,SAAS;CAuD5B;AAGD,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEjC;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,SAAU,KAAK,EAAE,mBAAmB,KAAK,SAAS,MAAM,gEAsB7E,CAAC"} \ No newline at end of file diff --git a/types/UI/MaterialEditor/GoodsListDiv.d.ts b/types/UI/MaterialEditor/GoodsListDiv.d.ts index 59a66c1..e85f2b1 100644 --- a/types/UI/MaterialEditor/GoodsListDiv.d.ts +++ b/types/UI/MaterialEditor/GoodsListDiv.d.ts @@ -1,15 +1,18 @@ import { IObservableValue } from 'mobx'; import * as React from 'react'; -import { IGoodInfo } from './GoodsList'; +import { GoodsType, IGoodInfo } from './GoodsList'; interface IGoodsListProps { select: (good: IGoodInfo) => void; - open: IObservableValue; + open?: IObservableValue; + goods_type?: GoodsType; + onClose?: () => void; } export declare class GoodsListDiv extends React.Component { _Event: Function; _StateContainer: HTMLElement; _CurrentModalKey: string; constructor(props: any); + onClose: () => void; componentDidMount(): void; componentWillUnmount(): void; render(): JSX.Element; diff --git a/types/UI/MaterialEditor/GoodsListDiv.d.ts.map b/types/UI/MaterialEditor/GoodsListDiv.d.ts.map index 20d85d3..b381677 100644 --- a/types/UI/MaterialEditor/GoodsListDiv.d.ts.map +++ b/types/UI/MaterialEditor/GoodsListDiv.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"GoodsListDiv.d.ts","sourceRoot":"","sources":["../../../../src/UI/MaterialEditor/GoodsListDiv.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAa,SAAS,EAAE,MAAM,aAAa,CAAC;AAInD,UAAU,eAAe;IAErB,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IAClC,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;CACnC;AAED,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC;IAC9D,MAAM,EAAE,QAAQ,CAAC;IACjB,eAAe,EAAE,WAAW,CAAC;IAC7B,gBAAgB,SAAM;gBAEV,KAAK,KAAA;IA2BjB,iBAAiB;IAejB,oBAAoB;IAab,MAAM;CAOhB"} \ No newline at end of file +{"version":3,"file":"GoodsListDiv.d.ts","sourceRoot":"","sources":["../../../../src/UI/MaterialEditor/GoodsListDiv.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,MAAM,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAa,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI9D,UAAU,eAAe;IAErB,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IAClC,IAAI,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,qBACa,YAAa,SAAQ,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC;IAE9D,MAAM,EAAE,QAAQ,CAAC;IACjB,eAAe,EAAE,WAAW,CAAC;IAC7B,gBAAgB,SAAM;gBAEV,KAAK,KAAA;IA4BjB,OAAO,aAML;IACF,iBAAiB;IAejB,oBAAoB;IAab,MAAM;CAOhB"} \ No newline at end of file diff --git a/types/UI/MaterialEditor/MaterialCommon.d.ts.map b/types/UI/MaterialEditor/MaterialCommon.d.ts.map index 013f82e..613d4c1 100644 --- a/types/UI/MaterialEditor/MaterialCommon.d.ts.map +++ b/types/UI/MaterialEditor/MaterialCommon.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"MaterialCommon.d.ts","sourceRoot":"","sources":["../../../../src/UI/MaterialEditor/MaterialCommon.tsx"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"MaterialCommon.d.ts","sourceRoot":"","sources":["../../../../src/UI/MaterialEditor/MaterialCommon.tsx"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/MaterialEditor/MaterialLinkShop.d.ts.map b/types/UI/MaterialEditor/MaterialLinkShop.d.ts.map index 906412e..4aeb6e3 100644 --- a/types/UI/MaterialEditor/MaterialLinkShop.d.ts.map +++ b/types/UI/MaterialEditor/MaterialLinkShop.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"MaterialLinkShop.d.ts","sourceRoot":"","sources":["../../../../src/UI/MaterialEditor/MaterialLinkShop.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,qBAEa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,EAAE,EAAE,CAAC;IAEnF,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,OAAO,CAEb;gBACU,KAAK,KAAA;IAIjB,kBAAkB,aAGhB;IACF,gBAAgB,SAAU,SAAS,UAWjC;IACF,iBAAiB;IAIjB,MAAM;CA+BT"} \ No newline at end of file +{"version":3,"file":"MaterialLinkShop.d.ts","sourceRoot":"","sources":["../../../../src/UI/MaterialEditor/MaterialLinkShop.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,qBAEa,kBAAmB,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,EAAE,EAAE,CAAC;IAEnF,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,OAAO,CAEb;gBACU,KAAK,KAAA;IAIjB,kBAAkB,aAGhB;IACF,gBAAgB,SAAU,SAAS,UAWjC;IACF,iBAAiB;IAIjB,MAAM;CAgCT"} \ No newline at end of file diff --git a/types/UI/MaterialEditor/PropertiesPane.d.ts b/types/UI/MaterialEditor/PropertiesPane.d.ts index dce2f73..72871b8 100644 --- a/types/UI/MaterialEditor/PropertiesPane.d.ts +++ b/types/UI/MaterialEditor/PropertiesPane.d.ts @@ -5,6 +5,7 @@ export declare class PropertiesPane extends React.Component<{ }, {}> { state: { materialExtension: boolean; + extraAttributes: boolean; colorExtension: boolean; texturaExtension: boolean; fresnelExtension: boolean; diff --git a/types/UI/MaterialEditor/PropertiesPane.d.ts.map b/types/UI/MaterialEditor/PropertiesPane.d.ts.map index c0b6d29..fd71b1e 100644 --- a/types/UI/MaterialEditor/PropertiesPane.d.ts.map +++ b/types/UI/MaterialEditor/PropertiesPane.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"PropertiesPane.d.ts","sourceRoot":"","sources":["../../../../src/UI/MaterialEditor/PropertiesPane.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAkBvD,qBAEa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,EAAE,EAAE,CAAC;IAExE,KAAK;;;;;;;;MAQV;IACF,MAAM;CAuMT"} \ No newline at end of file +{"version":3,"file":"PropertiesPane.d.ts","sourceRoot":"","sources":["../../../../src/UI/MaterialEditor/PropertiesPane.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAmBvD,qBAEa,cAAe,SAAQ,KAAK,CAAC,SAAS,CAAC;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;CAAE,EAAE,EAAE,CAAC;IAGxE,KAAK;;;;;;;;;MASV;IACF,MAAM;CA4OT"} \ No newline at end of file diff --git a/types/UI/Store/BBSEditorStore.d.ts.map b/types/UI/Store/BBSEditorStore.d.ts.map index 60e3199..c16d814 100644 --- a/types/UI/Store/BBSEditorStore.d.ts.map +++ b/types/UI/Store/BBSEditorStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BBSEditorStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/BBSEditorStore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,eAAO,MAAM,sBAAsB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAepD,CAAC;AAEF,qBAAa,cAAe,YAAW,YAAY;IAE/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAK;IAClB,UAAU,SAAQ;IAClB,YAAY,QAAM;IAC9B,QAAQ,WAAqD;IACjD,YAAY,WAAsD;IAElE,iBAAiB,UAAQ;IAErC,UAAU;IAMV,UAAU;;;;;;;;IAWV,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC;CAc1C;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"} \ No newline at end of file +{"version":3,"file":"BBSEditorStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/BBSEditorStore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,eAAO,MAAM,sBAAsB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAmBpD,CAAC;AAEF,qBAAa,cAAe,YAAW,YAAY;IAE/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAK;IAClB,UAAU,SAAQ;IAClB,YAAY,QAAM;IAC9B,QAAQ,WAA0D;IACtD,YAAY,WAAsD;IAElE,iBAAiB,UAAQ;IAErC,UAAU;IAMV,UAAU;;;;;;;;IAWV,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC;CAc1C;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"} \ No newline at end of file diff --git a/types/UI/Store/BBSModelStore.d.ts b/types/UI/Store/BBSModelStore.d.ts new file mode 100644 index 0000000..d0b33cd --- /dev/null +++ b/types/UI/Store/BBSModelStore.d.ts @@ -0,0 +1,13 @@ +import { Singleton } from "../../Common/Singleton"; +import { IConfigOption } from "../Components/Board/UserConfigComponent"; +import { IBBSModelOption } from "./OptionInterface/IOptionInterface"; +export declare class BBSModelStore extends Singleton { + configName: string; + configsNames: string[]; + option: IBBSModelOption; + InitOption(): void; + SaveConfig(): IConfigOption; + UpdateOption(conf: IConfigOption): void; +} +export declare const bbsModelStore: BBSModelStore; +//# sourceMappingURL=BBSModelStore.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/BBSModelStore.d.ts.map b/types/UI/Store/BBSModelStore.d.ts.map new file mode 100644 index 0000000..f5242a4 --- /dev/null +++ b/types/UI/Store/BBSModelStore.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"BBSModelStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/BBSModelStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AAErE,qBAAa,aAAc,SAAQ,SAAS;IAExC,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAChB,MAAM,EAAE,eAAe,CAOjC;IAEF,UAAU;IAYV,UAAU;IAOV,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,eAAe,CAAC;CAIpD;AACD,eAAO,MAAM,aAAa,EAAkC,aAAa,CAAC"} \ No newline at end of file diff --git a/types/UI/Store/BoardFindInterface.d.ts b/types/UI/Store/BoardFindInterface.d.ts index 74e875f..17f9927 100644 --- a/types/UI/Store/BoardFindInterface.d.ts +++ b/types/UI/Store/BoardFindInterface.d.ts @@ -1,6 +1,7 @@ import { FaceDirection } from "../../Add-on/DrawDrilling/DrillType"; import { EBoardKeyList } from "../../Common/BoardKeyList"; import { BoardOpenDir, ComposingType, LinesType } from "../../DatabaseServices/Entity/BoardInterface"; +import { FindModifyStyle } from "../Components/Board/BoardFindInterface"; import { IBaseOption } from "./OptionInterface/IOptionInterface"; export declare const DRILL_KEYS: string[]; export declare const SEAL_KEYS: EBoardKeyList[]; @@ -33,6 +34,7 @@ export interface IBoardFindOption extends IBaseOption { upDownDrill: [boolean, boolean]; isClose: boolean; remarks: [string, string][]; + query: FindModifyStyle; extraRemarks: [string, string][]; isChaidan: boolean; [EBoardKeyList.KnifeRad]: string; @@ -40,6 +42,10 @@ export interface IBoardFindOption extends IBaseOption { edgeRemarkDown: string; edgeRemarkLeft: string; edgeRemarkRight: string; + [EBoardKeyList.SpliteHeight]: string; + [EBoardKeyList.SpliteWidth]: string; + [EBoardKeyList.SpliteThickness]: string; + appendRemark: [string, string, number][]; } export interface IFindCondition { [EBoardKeyList.Height]: boolean; @@ -52,6 +58,10 @@ export interface IFindCondition { useDim: boolean; useSpecial: boolean; useModeling: boolean; + useCurve: boolean; + useText: boolean; + noUseBr: boolean; + noUseHwd: boolean; [EBoardKeyList.RoomName]: boolean; [EBoardKeyList.CabinetName]: boolean; brName: boolean; @@ -79,6 +89,9 @@ export interface IFindCondition { edgeRemarkDown: boolean; edgeRemarkLeft: boolean; edgeRemarkRight: boolean; + [EBoardKeyList.SpliteHeight]: boolean; + [EBoardKeyList.SpliteWidth]: boolean; + [EBoardKeyList.SpliteThickness]: boolean; } export interface ICompareType { [EBoardKeyList.Height]: ECompareType; @@ -97,12 +110,22 @@ export interface ICompareType { [EBoardKeyList.ComposingFace]: ECompareType; [EBoardKeyList.OpenDir]: ECompareType; [EBoardKeyList.KnifeRad]: ECompareType; + edgeRemarkUp: ECompareType; + edgeRemarkDown: ECompareType; + edgeRemarkLeft: ECompareType; + edgeRemarkRight: ECompareType; + [EBoardKeyList.SpliteHeight]: ECompareType; + [EBoardKeyList.SpliteWidth]: ECompareType; + [EBoardKeyList.SpliteThickness]: ECompareType; } export interface ITolerance { [EBoardKeyList.Height]: string; [EBoardKeyList.Width]: string; [EBoardKeyList.Thick]: string; [EBoardKeyList.KnifeRad]: string; + [EBoardKeyList.SpliteHeight]: string; + [EBoardKeyList.SpliteWidth]: string; + [EBoardKeyList.SpliteThickness]: string; } export declare enum EFindType { Find = 0, @@ -123,6 +146,8 @@ export declare enum ECompareType { UnEqual = "!=", Greater = ">=", Less = "<=", - Include = "//" + Include = "//",//模糊匹配 + Prefix = "\u524D\u7F00", + Suffix = "\u540E\u7F00" } //# sourceMappingURL=BoardFindInterface.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/BoardFindInterface.d.ts.map b/types/UI/Store/BoardFindInterface.d.ts.map index 46632b3..15928c7 100644 --- a/types/UI/Store/BoardFindInterface.d.ts.map +++ b/types/UI/Store/BoardFindInterface.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardFindInterface.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/BoardFindInterface.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"BoardFindInterface.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/BoardFindInterface.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Store/BoardFindModifyStore.d.ts.map b/types/UI/Store/BoardFindModifyStore.d.ts.map index fba8d4e..030fa56 100644 --- a/types/UI/Store/BoardFindModifyStore.d.ts.map +++ b/types/UI/Store/BoardFindModifyStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardFindModifyStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/BoardFindModifyStore.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAGxE,OAAO,EAA6C,gBAAgB,EAAa,MAAM,sBAAsB,CAAC;AAC9G,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,qBAAa,cAAe,SAAQ,UAAU;IAE9B,QAAQ,EAAE,gBAAgB,CAAsD;IAChF,iBAAiB,UAAS;IAC1B,gBAAgB,UAAS;IACzB,qBAAqB,UAAS;IAC9B,WAAW,UAAS;IAEpB,WAAW,UAAS;;IAMhC,OAAO,CAAC,YAAY;IAWd,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;IA0BrC,UAAU;IAWV,UAAU;IAUV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,gBAAgB,CAAC;IA+DjD,gBAAgB;IAOhB,cAAc;CAIjB"} \ No newline at end of file +{"version":3,"file":"BoardFindModifyStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/BoardFindModifyStore.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAGxE,OAAO,EAA6C,gBAAgB,EAAa,MAAM,sBAAsB,CAAC;AAC9G,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,qBAAa,cAAe,SAAQ,UAAU;IAE9B,QAAQ,EAAE,gBAAgB,CAAsD;IAChF,iBAAiB,UAAS;IAC1B,gBAAgB,UAAS;IACzB,qBAAqB,UAAS;IAC9B,WAAW,UAAS;IAEpB,WAAW,UAAS;;IAMhC,OAAO,CAAC,YAAY;IAWd,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;IA0BrC,UAAU;IAWV,UAAU;IAUV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,gBAAgB,CAAC;IA0GjD,gBAAgB;IAOhB,cAAc;CAIjB"} \ No newline at end of file diff --git a/types/UI/Store/BoardStore.d.ts b/types/UI/Store/BoardStore.d.ts index c369c58..6c258d3 100644 --- a/types/UI/Store/BoardStore.d.ts +++ b/types/UI/Store/BoardStore.d.ts @@ -34,6 +34,7 @@ export declare class BoardStore extends Singleton implements IC remarks: [string, string][]; rectDrillOption: IHightDrillOption; autoCutOption: IDrawBoardAutoCutOption; + grooveOption: IGrooveOption; constructor(); InitOption(): void; protected InitDrillType(): void; @@ -127,6 +128,7 @@ export declare class ClosingStripStore extends BoardStore { m_Option: ClosingStripOption; constructor(); ChangeCabinetName(cof?: IConfigOption): void; + ChangeBrName(cof?: IConfigOption): void; InitOption(): void; UpdateOption(cof: IConfigOption): void; } diff --git a/types/UI/Store/BoardStore.d.ts.map b/types/UI/Store/BoardStore.d.ts.map index 3cb07b6..f794192 100644 --- a/types/UI/Store/BoardStore.d.ts.map +++ b/types/UI/Store/BoardStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/BoardStore.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"BoardStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/BoardStore.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Store/CommandStore.d.ts.map b/types/UI/Store/CommandStore.d.ts.map index 21e318a..cd9b168 100644 --- a/types/UI/Store/CommandStore.d.ts.map +++ b/types/UI/Store/CommandStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"CommandStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/CommandStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAI9D,MAAM,WAAW,OAAO;IAEpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IAEvB,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;CACpB;AAED,qBAAa,YAAY;IAErB,OAAO;IACP,OAAO,CAAC,MAAM,CAAC,eAAe,CAAe;IAC7C,MAAM,CAAC,WAAW,IAAI,YAAY;IAQtB,yBAAyB,EAAE,OAAO,CAAQ;IAEtD,OAAO,CAAC,eAAe,CAAa;IAExB,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAM;IAEnC,aAAa,EAAE,MAAM,CAAM;IAE3B,WAAW,EAAE,OAAO,EAAE,CAAM;IAE5B,cAAc,EAAE,MAAM,EAAE,CAAM;IAC9B,YAAY,UAAS;IAErB,WAAW,YAAgF;IAC3F,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,CAA6B;IAE1D,YAAY,EAAE,OAAO,CAAS;IAE1C;;;OAGG;IAEH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE;IAiBrD;;;OAGG;IAEH,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,EAAE,OAAO;IAcjD,YAAY,EAAE,MAAM,CAAK;IACzB,WAAW,QAAS,MAAM,UAYxB;IAGF,yBAAyB,CAAC,GAAG,EAAE,OAAO;IAiB9B,0BAA0B,CAAC,IAAI,EAAE,OAAO;CAInD"} \ No newline at end of file +{"version":3,"file":"CommandStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/CommandStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAI9D,MAAM,WAAW,OAAO;IAEpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IAEvB,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;CACpB;AAID,qBAAa,YAAY;IAErB,OAAO;IACP,OAAO,CAAC,MAAM,CAAC,eAAe,CAAe;IAC7C,MAAM,CAAC,WAAW,IAAI,YAAY;IAQtB,yBAAyB,EAAE,OAAO,CAAQ;IAEtD,OAAO,CAAC,eAAe,CAAa;IAExB,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAM;IAEnC,aAAa,EAAE,MAAM,CAAM;IAE3B,WAAW,EAAE,OAAO,EAAE,CAAM;IAE5B,cAAc,EAAE,MAAM,EAAE,CAAM;IAC9B,YAAY,UAAS;IAErB,WAAW,YAAgF;IAC3F,eAAe,EAAE,GAAG,CAAC,OAAO,CAAC,CAA6B;IAE1D,YAAY,EAAE,OAAO,CAAS;IAE1C;;;OAGG;IAEH,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE;IAiBrD;;;OAGG;IAEH,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,EAAE,OAAO;IAcjD,YAAY,EAAE,MAAM,CAAK;IACzB,WAAW,QAAS,MAAM,UAYxB;IAGF,yBAAyB,CAAC,GAAG,EAAE,OAAO;IAiB9B,0BAA0B,CAAC,IAAI,EAAE,OAAO;CAInD"} \ No newline at end of file diff --git a/types/UI/Store/DoorDrawerStore/DoorDrawerStore.d.ts.map b/types/UI/Store/DoorDrawerStore/DoorDrawerStore.d.ts.map index 6be2e86..c5730c3 100644 --- a/types/UI/Store/DoorDrawerStore/DoorDrawerStore.d.ts.map +++ b/types/UI/Store/DoorDrawerStore/DoorDrawerStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DoorDrawerStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/DoorDrawerStore/DoorDrawerStore.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAE3E,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACvG,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAKnE,KAAK,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;AAE3C,qBAAa,eAAgB,SAAQ,UAAU,CAAC,0BAA0B,CAAC;IAEvE,QAAQ,EAAE,0BAA0B,CAAC;IACrC,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,0BAA0B,CAAC,CAAC;IAC5D,WAAW,SAAK;IAChB,UAAU,SAAK;IACf,UAAU,SAAK;IACf,SAAS,SAAK;IACd,UAAU,SAAK;IACf,UAAU,SAAK;IACf,WAAW,SAAK;IAChB,WAAW,SAAK;IAChB,YAAY,SAAK;IACjB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,cAAc,CAAC;IACd,eAAe,EAAE,WAAW,EAAE,CAAM;IAChD,iBAAiB;IACL,eAAe,EAAE,cAAc,EAAE,CAAM;IACnD,iBAAiB;IACL,iBAAiB,EAAE,cAAc,EAAE,CAAM;IACzC,kBAAkB,EAAE,eAAe,CAAC;IAChD,OAAO,CAAC,SAAS,CAKf;IAGF,IAAI,eAAe,YASlB;IACD,IAAI,aAAa,YAGhB;IACD,IAAI,eAAe,YAGlB;IACD,IAAI,eAAe;;;;;MAsDlB;IACD,SAAS;IACT,eAAe;IACf,SAAS,CAAC,oBAAoB;IAyB9B,WAAW;IACX,SAAS,CAAC,iBAAiB;IAkD3B,aAAa;IACb,SAAS;IAwCT,WAAW;IACX,IAAI,eAAe,WAGlB;IACD,IAAI,cAAc;;;MAwBjB;IACD,IAAI,aAAa;;;MAoBhB;IACD,OAAO,CAAC,iBAAiB;IAsDzB,SAAS,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM;IAkBjF;;;MAGE;IACF,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,UAAO,EAAE,WAAW,CAAC,EAAE,WAAW;IAuC5E,cAAc,CAAC,IAAI,EAAE,MAAM;IAI3B,UAAU,IAAI,aAAa;IAO3B,YAAY,CAAC,GAAG,EAAE,aAAa;IA2C/B,cAAc;IAWd,SAAS,CAAC,2BAA2B,CAAC,GAAG,EAAE,aAAa,CAAC,0BAA0B,CAAC;IAepF,mCAAmC;IAKnC,sCAAsC;CAIzC"} \ No newline at end of file +{"version":3,"file":"DoorDrawerStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/DoorDrawerStore/DoorDrawerStore.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAE3E,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,0BAA0B,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACvG,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAKnE,KAAK,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;AAE3C,qBAAa,eAAgB,SAAQ,UAAU,CAAC,0BAA0B,CAAC;IAE/D,QAAQ,EAAE,0BAA0B,CAAC;IAC7C,UAAkB,UAAU,EAAE,SAAS,CAAC,0BAA0B,CAAC,CAAC;IACpE,WAAW,SAAK;IAChB,UAAU,SAAK;IACf,UAAU,SAAK;IACf,SAAS,SAAK;IACd,UAAU,SAAK;IACf,UAAU,SAAK;IACf,WAAW,SAAK;IAChB,WAAW,SAAK;IAChB,YAAY,SAAK;IACjB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,cAAc,CAAC;IACd,eAAe,EAAE,WAAW,EAAE,CAAM;IAChD,iBAAiB;IACL,eAAe,EAAE,cAAc,EAAE,CAAM;IACnD,iBAAiB;IACL,iBAAiB,EAAE,cAAc,EAAE,CAAM;IACzC,kBAAkB,EAAE,eAAe,CAAC;IAChD,OAAO,CAAC,SAAS,CAKf;IAGF,IAAI,eAAe,YASlB;IACD,IAAI,aAAa,YAGhB;IACD,IAAI,eAAe,YAGlB;IACD,IAAI,eAAe;;;;;MAsDlB;IACD,SAAS;IACT,eAAe;IACf,SAAS,CAAC,oBAAoB;IAyB9B,WAAW;IACX,SAAS,CAAC,iBAAiB;IAkD3B,aAAa;IACb,SAAS;IAwCT,WAAW;IACX,IAAI,eAAe,WAGlB;IACD,IAAI,cAAc;;;MAwBjB;IACD,IAAI,aAAa;;;MAoBhB;IACD,OAAO,CAAC,iBAAiB;IAsDzB,SAAS,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM;IAkBjF;;;MAGE;IACF,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,UAAO,EAAE,WAAW,CAAC,EAAE,WAAW;IAuC5E,cAAc,CAAC,IAAI,EAAE,MAAM;IAI3B,UAAU,IAAI,aAAa;IAO3B,YAAY,CAAC,GAAG,EAAE,aAAa;IA2C/B,cAAc;IAWd,SAAS,CAAC,2BAA2B,CAAC,GAAG,EAAE,aAAa,CAAC,0BAA0B,CAAC;IAepF,mCAAmC;IAKnC,sCAAsC;CAIzC"} \ No newline at end of file diff --git a/types/UI/Store/DoorDrawerStore/DoorStore.d.ts.map b/types/UI/Store/DoorDrawerStore/DoorStore.d.ts.map index c3250d2..6e71a8a 100644 --- a/types/UI/Store/DoorDrawerStore/DoorStore.d.ts.map +++ b/types/UI/Store/DoorDrawerStore/DoorStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DoorStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/DoorDrawerStore/DoorStore.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAI3E,OAAO,EAAe,iBAAiB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,eAAO,MAAM,YAAY,IAAK,CAAC;AAO/B,MAAM,WAAW,UAAU;IAEvB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,SAAU,SAAQ,eAAe;IAE1C,KAAK,SAAQ;IACD,QAAQ,EAAE,iBAAiB,CAAwC;IACnE,eAAe,EAAE,SAAS,EAAE,CAAM;IAClC,SAAS,UAAS;IAClB,WAAW,EAAE,UAAU,CAMjC;IACU,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAC9B,KAAK,EAAE,UAAU,EAAE,CAAM;IACzB,YAAY,EAAE,MAAM,CAAC;IACjC,SAAS;IAwCT;;MAEE;IACF,aAAa,CAAC,IAAI,EAAE,SAAS;IAwC7B,UAAU;IAyBV,UAAU;;;;;IAQV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,iBAAiB,CAAC;IAQlD,mBAAmB,CAAC,GAAG,EAAE,aAAa,CAAC,iBAAiB,CAAC;IAyDzD,IAAI,MAAM,0BAKT;IACD,UAAU;IA+CJ,UAAU;IAYhB,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC;CAI9C"} \ No newline at end of file +{"version":3,"file":"DoorStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/DoorDrawerStore/DoorStore.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAI3E,OAAO,EAAe,iBAAiB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,eAAO,MAAM,YAAY,IAAK,CAAC;AAO/B,MAAM,WAAW,UAAU;IAEvB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,SAAU,SAAQ,eAAe;IAE1C,KAAK,SAAQ;IACD,QAAQ,EAAE,iBAAiB,CAAwC;IACnE,eAAe,EAAE,SAAS,EAAE,CAAM;IAClC,SAAS,UAAS;IAClB,WAAW,EAAE,UAAU,CAMjC;IACU,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAC9B,KAAK,EAAE,UAAU,EAAE,CAAM;IACzB,YAAY,EAAE,MAAM,CAAC;IACjC,SAAS;IAwCT;;MAEE;IACF,aAAa,CAAC,IAAI,EAAE,SAAS;IAwC7B,UAAU;IAyBV,UAAU;;;;;IAQV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,iBAAiB,CAAC;IAQlD,mBAAmB,CAAC,GAAG,EAAE,aAAa,CAAC,iBAAiB,CAAC;IAiHzD,IAAI,MAAM,0BAKT;IACD,UAAU;IA+CJ,UAAU;IAYhB,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC;CAI9C"} \ No newline at end of file diff --git a/types/UI/Store/DoorDrawerStore/DrawerStore.d.ts.map b/types/UI/Store/DoorDrawerStore/DrawerStore.d.ts.map index 7026d05..91d5e2f 100644 --- a/types/UI/Store/DoorDrawerStore/DrawerStore.d.ts.map +++ b/types/UI/Store/DoorDrawerStore/DrawerStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrawerStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/DoorDrawerStore/DrawerStore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAE3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,qBAAa,WAAY,SAAQ,eAAe;IAE5C,KAAK,SAAQ;IACD,QAAQ,EAAE,mBAAmB,CAA8B;IACvE,IAAI,QAAQ,mCAGX;IACD,SAAS;IA4BT,UAAU;IAQV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAKpD,OAAO,CAAC,mBAAmB;IA8C3B,cAAc;CAWjB"} \ No newline at end of file +{"version":3,"file":"DrawerStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/DoorDrawerStore/DrawerStore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAE3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,qBAAa,WAAY,SAAQ,eAAe;IAE5C,KAAK,SAAQ;IACD,QAAQ,EAAE,mBAAmB,CAA8B;IACvE,IAAI,QAAQ,IAEiB,SAAS,CAAC,mBAAmB,CAAC,CAC1D;IACD,SAAS;IA4BT,UAAU;IAQV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAKpD,OAAO,CAAC,mBAAmB;IAwE3B,cAAc;CAWjB"} \ No newline at end of file diff --git a/types/UI/Store/DoorDrawerStore/HingeStore.d.ts.map b/types/UI/Store/DoorDrawerStore/HingeStore.d.ts.map index ec24064..461bea1 100644 --- a/types/UI/Store/DoorDrawerStore/HingeStore.d.ts.map +++ b/types/UI/Store/DoorDrawerStore/HingeStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HingeStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/DoorDrawerStore/HingeStore.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAG3E,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,qBAAa,UAAW,SAAQ,UAAU;IAE1B,QAAQ,EAAE,kBAAkB,CAAyC;IACrE,WAAW,EAAE,UAAU,CAMjC;IACU,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAC9B,KAAK,EAAE,UAAU,EAAE,CAAM;IACzB,YAAY,EAAE,MAAM,CAAC;IAEjC,UAAU;IAqBV,UAAU;;;;IAOV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,kBAAkB,CAAC;IAQnD,IAAI,MAAM,0BAKT;IACD,UAAU;IA+CJ,UAAU;IAYhB,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC;CAI9C"} \ No newline at end of file +{"version":3,"file":"HingeStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/DoorDrawerStore/HingeStore.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAG3E,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,qBAAa,UAAW,SAAQ,UAAU;IAE1B,QAAQ,EAAE,kBAAkB,CAAyC;IACrE,WAAW,EAAE,UAAU,CAMjC;IACU,MAAM,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAC9B,KAAK,EAAE,UAAU,EAAE,CAAM;IACzB,YAAY,EAAE,MAAM,CAAC;IAEjC,UAAU;IAqBV,UAAU;;;;IAOV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,kBAAkB,CAAC;IAcnD,IAAI,MAAM,0BAKT;IACD,UAAU;IA+CJ,UAAU;IAYhB,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC;CAI9C"} \ No newline at end of file diff --git a/types/UI/Store/DoorInterface.d.ts b/types/UI/Store/DoorInterface.d.ts index effed1e..832d673 100644 --- a/types/UI/Store/DoorInterface.d.ts +++ b/types/UI/Store/DoorInterface.d.ts @@ -21,6 +21,7 @@ export interface IDoorAndDrawerConfigOption extends IBaseOption { thickness: number; depth: number; isAuto: boolean; + isFloor50?: boolean; boardName: string; handleAngle: number; handleHorPos: HandleHorPos; @@ -36,6 +37,11 @@ export interface IDoorAndDrawerConfigOption extends IBaseOption { lbHightDrillOption: IHightDrillOption; useBoardProcessOption?: boolean; isModifyHardwareMaterial: boolean; + boardMatName: string; + material: string; + color: string; + roomName: string; + cabinetName: string; } /** * 门板数据接口 @@ -59,6 +65,39 @@ export interface IDoorConfigOption extends IDoorAndDrawerConfigOption { layerBoardName: string; cbHightDrillOption: IHightDrillOption; deviation: number; + verticalEdgeRemarkUp: string; + verticalEdgeRemarkDown: string; + verticalEdgeRemarkLeft: string; + verticalEdgeRemarkRight: string; + layerEdgeRemarkUp: string; + layerEdgeRemarkDown: string; + layerEdgeRemarkLeft: string; + layerEdgeRemarkRight: string; + parseHinge: boolean; + sealColorUp: string; + sealColorDown: string; + sealColorLeft: string; + sealColorRight: string; + reservedEdgeUp: string; + reservedEdgeDown: string; + reservedEdgeLeft: string; + reservedEdgeRight: string; + layerSealColorUp: string; + layerSealColorDown: string; + layerSealColorLeft: string; + layerSealColorRight: string; + layerReservedEdgeUp: string; + layerReservedEdgeDown: string; + layerReservedEdgeLeft: string; + layerReservedEdgeRight: string; + verticalSealColorUp: string; + verticalSealColorDown: string; + verticalSealColorLeft: string; + verticalSealColorRight: string; + verticalReservedEdgeUp: string; + verticalReservedEdgeDown: string; + verticalReservedEdgeLeft: string; + verticalReservedEdgeRight: string; } /** * 铰链数据接口 @@ -69,6 +108,7 @@ export interface IHingeConfigOption extends IBaseOption { hindeBottomDist: number; useRule: boolean; deviation: number; + parseHinge: boolean; } /** * 抽屉数据接口 @@ -79,6 +119,14 @@ export interface IDrawerConfigOption extends IDoorAndDrawerConfigOption { isAutoSelectTrack: boolean; isLockTopOffset: boolean; isLockBottomOffset: boolean; + sealColorUp: string; + sealColorDown: string; + sealColorLeft: string; + sealColorRight: string; + reservedEdgeUp: string; + reservedEdgeDown: string; + reservedEdgeLeft: string; + reservedEdgeRight: string; } export declare enum DoorPosType { Out = 0,//外盖 diff --git a/types/UI/Store/DoorInterface.d.ts.map b/types/UI/Store/DoorInterface.d.ts.map index df6f709..5ef4826 100644 --- a/types/UI/Store/DoorInterface.d.ts.map +++ b/types/UI/Store/DoorInterface.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DoorInterface.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/DoorInterface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,MAAM,WAAW,0BAA2B,SAAQ,WAAW;IAE3D,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,YAAY,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,wBAAwB,EAAE,OAAO,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,0BAA0B;IAEjE,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,gCAAgC,EAAE,OAAO,CAAC;IAC1C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,iBAAiB,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IAEnD,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,0BAA0B;IAEnE,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,OAAO,CAAC;CAC/B;AAGD,oBAAY,WAAW;IAEnB,GAAG,IAAI,CAAE,IAAI;IACb,EAAE,IAAI;CACT;AAED,oBAAY,YAAY;IAEpB,IAAI,IAAI;IACR,KAAK,IAAI;IACT,GAAG,IAAI;CACV;AACD,oBAAY,WAAW;IAEnB,GAAG,IAAI;IACP,MAAM,IAAI;IACV,GAAG,IAAI;CACV;AAED,oBAAY,WAAW;IAEnB,IAAI,OAAO;IACX,KAAK,OAAO;IACZ,GAAG,OAAO;IACV,MAAM,OAAO;IACb,IAAI,SAAS;CAChB;AAGD,MAAM,WAAW,WAAY,SAAQ,WAAW;IAE5C,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,SAAU,SAAQ,WAAW;IAE1C,OAAO,EAAE,WAAW,CAAC;IAErB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAEhC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAE5B,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,gEAAgE;AAChE,MAAM,WAAW,eAAe;IAE5B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAC;CACtC;AAED,eAAe;AACf,eAAO,MAAM,iBAAiB,UAA+B,CAAC;AAC9D,YAAY;AACZ,eAAO,MAAM,oBAAoB,UAAsE,CAAC;AAExG,aAAa;AACb,eAAO,MAAM,kBAAkB,UAA2F,CAAC"} \ No newline at end of file +{"version":3,"file":"DoorInterface.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/DoorInterface.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Store/DownPanelStore.d.ts b/types/UI/Store/DownPanelStore.d.ts index 9641033..93f6c76 100644 --- a/types/UI/Store/DownPanelStore.d.ts +++ b/types/UI/Store/DownPanelStore.d.ts @@ -28,10 +28,11 @@ export declare enum LightDataModeType { export declare class DownPanelStore { useDynInput: boolean; showType: ToolBarType; + /** 是否显示图层 */ + isLayer: boolean; useDynSnap: boolean; usePass: boolean; useOrtho: boolean; - fontName: string; progressName: string; progress: number; isF3Checked: boolean; @@ -51,6 +52,8 @@ export declare class DownPanelStore { showHideSync: boolean; smartUCS: boolean; capturePenetration: boolean; + fontType: string; + isSelectGroup: boolean; private timeId; private constructor(); private OnWindowsResize; @@ -70,11 +73,11 @@ export declare class DownPanelStore { isF3Checked: boolean; isF11Checked: boolean; snapData: boolean[]; - fontName: string; lightsData: boolean[]; showHideSync: boolean; smartUCS: boolean; capturePenetration: boolean; + isSelectGroup: boolean; }; Upload(): Promise; Update(): Promise; @@ -82,6 +85,8 @@ export declare class DownPanelStore { toggleTopToolBarShow(): void; toggleBottomToolBarShow(): void; TogglePropertiesPanel(): void; + /** 打开/关闭图层列表 */ + ToggleLayerList(): void; ToggleResourcePanel(): void; SetSnapMode(): void; StartProgress(name?: string, progress?: number): void; diff --git a/types/UI/Store/DownPanelStore.d.ts.map b/types/UI/Store/DownPanelStore.d.ts.map index 330ce7d..a953cd4 100644 --- a/types/UI/Store/DownPanelStore.d.ts.map +++ b/types/UI/Store/DownPanelStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DownPanelStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/DownPanelStore.ts"],"names":[],"mappings":"AAeA,oBAAY,WAAW;IAEnB,IAAI,IAAa,CAAC,WAAW;IAC7B,WAAW,IAAI,CAAC,MAAM;IACtB,UAAU,IAAI,CAAC,MAAM;IACrB,eAAe,IAAI,CAAE,cAAc;IACnC,IAAI,IAAI;CACX;AAED,MAAM,WAAW,SAAS;IAEtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IAEvB,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,oBAAY,iBAAiB;IAEzB,CAAC,aAAa;IACd,CAAC,cAAc;IACf,CAAC,kBAAkB;IACnB,CAAC,qBAAqB;IACtB,CAAC,eAAe;CACnB;AAED;;GAEG;AACH,qBAAa,cAAc;IAEX,WAAW,EAAE,OAAO,CAAQ;IAC5B,QAAQ,EAAE,WAAW,CAAK;IAC1B,UAAU,EAAE,OAAO,CAAQ;IAC3B,OAAO,EAAE,OAAO,CAAQ;IACxB,QAAQ,EAAE,OAAO,CAAS;IAC1B,QAAQ,EAAE,MAAM,CAAY;IAE5B,YAAY,SAAM;IAClB,QAAQ,SAAK;IACb,WAAW,EAAE,OAAO,CAAQ;IAC5B,YAAY,EAAE,OAAO,CAAS;IAC1C,KAAK,EAAE,eAAe,CAAC;IACX,QAAQ,UAAS;IACjB,QAAQ,EAAE,SAAS,EAAE,CAmD/B;IACU,UAAU,EAAE,UAAU,EAAE,CA0BlC;IAEU,OAAO,EAAE,OAAO,CAAQ;IAExB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAQ;IAClC,gBAAgB,EAAE,OAAO,CAAQ;IACjC,mBAAmB,EAAE,OAAO,CAAQ;IAEpC,oBAAoB,EAAE,OAAO,CAAS;IACtC,mBAAmB,EAAE,OAAO,CAAS;IACrC,sBAAsB,EAAE,OAAO,CAAS;IACxC,YAAY,EAAE,OAAO,CAAS;IAC9B,QAAQ,EAAE,OAAO,CAAS;IAC1B,kBAAkB,EAAE,OAAO,CAAQ;IAE/C,OAAO,CAAC,MAAM,CAAC;IACf,OAAO;IA+BP,OAAO,CAAC,eAAe,CASrB;IAEF,OAAO,CAAC,MAAM,CAAC,eAAe,CAAiB;IAC/C,MAAM,CAAC,WAAW,IAAI,cAAc;IAOpC,IAAI,MAAM;;;;;;;;;;;;;;;;;;;MAsBT;IACK,MAAM;IAsBN,MAAM;IA6DZ,qBAAqB;IASrB,oBAAoB;IAIpB,uBAAuB;IASvB,qBAAqB;IAIrB,mBAAmB;IAInB,WAAW;IAoBH,aAAa,CAAC,IAAI,SAAK,EAAE,QAAQ,SAAM;IAMvC,WAAW;CAKtB"} \ No newline at end of file +{"version":3,"file":"DownPanelStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/DownPanelStore.ts"],"names":[],"mappings":"AAgBA,oBAAY,WAAW;IAEnB,IAAI,IAAa,CAAC,WAAW;IAC7B,WAAW,IAAI,CAAC,MAAM;IACtB,UAAU,IAAI,CAAC,MAAM;IACrB,eAAe,IAAI,CAAE,cAAc;IACnC,IAAI,IAAI;CACX;AAED,MAAM,WAAW,SAAS;IAEtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IAEvB,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACnB;AAED,oBAAY,iBAAiB;IAEzB,CAAC,aAAa;IACd,CAAC,cAAc;IACf,CAAC,kBAAkB;IACnB,CAAC,qBAAqB;IACtB,CAAC,eAAe;CACnB;AAED;;GAEG;AACH,qBAAa,cAAc;IAEX,WAAW,EAAE,OAAO,CAAQ;IAC5B,QAAQ,EAAE,WAAW,CAAK;IACtC,aAAa;IACD,OAAO,EAAE,OAAO,CAAS;IACzB,UAAU,EAAE,OAAO,CAAQ;IAC3B,OAAO,EAAE,OAAO,CAAQ;IACxB,QAAQ,EAAE,OAAO,CAAS;IAC1B,YAAY,SAAM;IAClB,QAAQ,SAAK;IACb,WAAW,EAAE,OAAO,CAAQ;IAC5B,YAAY,EAAE,OAAO,CAAS;IAC1C,KAAK,EAAE,eAAe,CAAC;IACX,QAAQ,UAAS;IACjB,QAAQ,EAAE,SAAS,EAAE,CAmD/B;IACU,UAAU,EAAE,UAAU,EAAE,CA0BlC;IAEU,OAAO,EAAE,OAAO,CAAQ;IAExB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAQ;IAClC,gBAAgB,EAAE,OAAO,CAAQ;IACjC,mBAAmB,EAAE,OAAO,CAAQ;IAEpC,oBAAoB,EAAE,OAAO,CAAS;IACtC,mBAAmB,EAAE,OAAO,CAAS;IACrC,sBAAsB,EAAE,OAAO,CAAS;IACxC,YAAY,EAAE,OAAO,CAAS;IAC9B,QAAQ,EAAE,OAAO,CAAS;IAC1B,kBAAkB,EAAE,OAAO,CAAQ;IACnC,QAAQ,SAAM;IACd,aAAa,EAAE,OAAO,CAAQ;IAE1C,OAAO,CAAC,MAAM,CAAC;IACf,OAAO;IAiCP,OAAO,CAAC,eAAe,CASrB;IAEF,OAAO,CAAC,MAAM,CAAC,eAAe,CAAiB;IAC/C,MAAM,CAAC,WAAW,IAAI,cAAc;IAOpC,IAAI,MAAM;;;;;;;;;;;;;;;;;;;MAsBT;IACK,MAAM;IAsBN,MAAM;IA6DZ,qBAAqB;IASrB,oBAAoB;IAIpB,uBAAuB;IASvB,qBAAqB;IAMrB,gBAAgB;IAChB,eAAe;IAOf,mBAAmB;IAInB,WAAW;IAoBH,aAAa,CAAC,IAAI,SAAK,EAAE,QAAQ,SAAM;IAMvC,WAAW;CAKtB"} \ No newline at end of file diff --git a/types/UI/Store/DrillStore.d.ts.map b/types/UI/Store/DrillStore.d.ts.map index 8c0d865..5932d59 100644 --- a/types/UI/Store/DrillStore.d.ts.map +++ b/types/UI/Store/DrillStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"DrillStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/DrillStore.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAEzE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAE3F,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAe,MAAM,kBAAkB,CAAC;AAE/D,oBAAY,mBAAmB;IAE3B,OAAO,MAAM,CAAE,IAAI;IACnB,EAAE,MAAM,CAAG,OAAO;IAClB,GAAG,MAAM,CAAE,SAAS;IACpB,GAAG,MAAM;CACZ;AAED,MAAM,WAAW,kBAAkB;IAE/B,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,CAAC;SAAE,CAAC;KAAE,CAAC;CACrE;AAED,qBAAa,UAAW,SAAQ,UAAU;IAE1B,kBAAkB,SAAK;IAEvB,qBAAqB,SAAS;IAE9B,KAAK,EAAE,cAAc,EAAE,CAAM;IAC7B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,gBAAgB,EAAE,MAAM,EAAE,CAAM;IAChC,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAa;IACnE,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAa;IAC/D,eAAe,eAAa;;IAM5B,OAAO,CAAC,gBAAgB;IAqFxB,UAAU;IA2BV,eAAe,CAAC,IAAI,EAAE,MAAM;IAmB5B,cAAc;IA2Cd,UAAU;IAgBV,YAAY,CAAC,GAAG,EAAE,aAAa;IA8B/B,WAAW,CAAC,CAAC,EAAE,MAAM;IASrB,UAAU,aAKR;IACF,cAAc;IAkCd,sBAAsB;IACtB,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IAuDlD,cAAc,CAAC,IAAI,EAAE,cAAc;IAoBnC,YAAY,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;KAAE,EAAE,UAAU,UAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA0BpG,cAAc,CAAC,IAAI,EAAE,kBAAkB;;;IAsCvC,kBAAkB,CAAC,IAAI,EAAE,iBAAiB;CAmHnD"} \ No newline at end of file +{"version":3,"file":"DrillStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/DrillStore.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,WAAW,EAAE,MAAM,4CAA4C,CAAC;AAEzE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAE3F,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAe,MAAM,kBAAkB,CAAC;AAE/D,oBAAY,mBAAmB;IAE3B,OAAO,MAAM,CAAE,IAAI;IACnB,EAAE,MAAM,CAAG,OAAO;IAClB,GAAG,MAAM,CAAE,SAAS;IACpB,GAAG,MAAM;CACZ;AAED,MAAM,WAAW,kBAAkB;IAE/B,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE;YAAE,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,CAAC;SAAE,CAAC;KAAE,CAAC;CACrE;AAED,qBAAa,UAAW,SAAQ,UAAU;IAE1B,kBAAkB,SAAK;IAEvB,qBAAqB,SAAS;IAE9B,KAAK,EAAE,cAAc,EAAE,CAAM;IAC7B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,gBAAgB,EAAE,MAAM,EAAE,CAAM;IACxB,QAAQ,EAAE,cAAc,CAAC;IACjC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAa;IACnE,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAa;IAC/D,eAAe,eAAa;;IAM5B,OAAO,CAAC,gBAAgB;IAyFxB,UAAU;IA2BV,eAAe,CAAC,IAAI,EAAE,MAAM;IAmB5B,cAAc;IA2Cd,UAAU;IAgBV,YAAY,CAAC,GAAG,EAAE,aAAa;IA8B/B,WAAW,CAAC,CAAC,EAAE,MAAM;IASrB,UAAU,aAKR;IACF,cAAc;IAkCd,sBAAsB;IACtB,iBAAiB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IA+ElD,cAAc,CAAC,IAAI,EAAE,cAAc;IAoBnC,YAAY,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;KAAE,EAAE,UAAU,UAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IA0BpG,cAAc,CAAC,IAAI,EAAE,kBAAkB;;;IAsCvC,kBAAkB,CAAC,IAAI,EAAE,iBAAiB;CA2HnD"} \ No newline at end of file diff --git a/types/UI/Store/EntityStore.d.ts b/types/UI/Store/EntityStore.d.ts index e5014f6..b2516ad 100644 --- a/types/UI/Store/EntityStore.d.ts +++ b/types/UI/Store/EntityStore.d.ts @@ -5,9 +5,16 @@ export declare class EntityStore extends Singleton { enMap: Map>; colorIndex: number; colorSet: Set; + displayAccuracy: number; + displayAccuracySet: Set; AddEntitysToMap(ens: Entity[]): void; get IsWorking(): boolean; + /** 是否可以双击实体,显示特性弹窗 */ + get IsCanShowProperties(): boolean; GetEntitys(): Entity[]; + GetCurrentAccuracy(): void; GetCurrentColor(): void; } +/** 是否需要显示独立精度 */ +export declare function IsHasDisplayAccuracy(ent: Entity): boolean; //# sourceMappingURL=EntityStore.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/EntityStore.d.ts.map b/types/UI/Store/EntityStore.d.ts.map index f681a24..7e74bd2 100644 --- a/types/UI/Store/EntityStore.d.ts.map +++ b/types/UI/Store/EntityStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"EntityStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/EntityStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAMnD,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAO9D,qBAAa,WAAY,SAAQ,SAAS;IAE1B,aAAa,SAAS;IACtB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAa;IAC5C,UAAU,SAAK;IACf,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAG9C,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE;IA0C7B,IAAI,SAAS,YAGZ;IAED,UAAU;IAcV,eAAe;CAsBlB"} \ No newline at end of file +{"version":3,"file":"EntityStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/EntityStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAOnD,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAS9D,qBAAa,WAAY,SAAQ,SAAS;IAE1B,aAAa,SAAS;IACtB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAa;IAC5C,UAAU,SAAK;IACf,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAClC,eAAe,SAAK;IACpB,kBAAkB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAGxD,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE;IA4C7B,IAAI,SAAS,YAGZ;IAED,sBAAsB;IACtB,IAAI,mBAAmB,YAKtB;IAED,UAAU;IAcV,kBAAkB;IA6BlB,eAAe;CAsBlB;AAED,iBAAiB;AACjB,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,WAkB/C"} \ No newline at end of file diff --git a/types/UI/Store/HSInterface.d.ts b/types/UI/Store/HSInterface.d.ts index 9d8e6ea..cc9e376 100644 --- a/types/UI/Store/HSInterface.d.ts +++ b/types/UI/Store/HSInterface.d.ts @@ -33,5 +33,9 @@ export interface IHSOption extends IBaseOption { matchType?: ECompareType; customBoardName?: string; visual?: boolean; + spotlight?: boolean; + pointLight?: boolean; + rectAreaLight?: boolean; + text: boolean; } //# sourceMappingURL=HSInterface.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/HSInterface.d.ts.map b/types/UI/Store/HSInterface.d.ts.map index 4db7f29..599cbae 100644 --- a/types/UI/Store/HSInterface.d.ts.map +++ b/types/UI/Store/HSInterface.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HSInterface.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/HSInterface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEjE,MAAM,WAAW,SAAU,SAAQ,WAAW;IAE1C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;CACpB"} \ No newline at end of file +{"version":3,"file":"HSInterface.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/HSInterface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEjE,MAAM,WAAW,SAAU,SAAQ,WAAW;IAE1C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,IAAI,EAAE,OAAO,CAAC;CACjB"} \ No newline at end of file diff --git a/types/UI/Store/HeadCeilingStore/HeadCeilingInfoStore.d.ts b/types/UI/Store/HeadCeilingStore/HeadCeilingInfoStore.d.ts index f98bce0..ec178ed 100644 --- a/types/UI/Store/HeadCeilingStore/HeadCeilingInfoStore.d.ts +++ b/types/UI/Store/HeadCeilingStore/HeadCeilingInfoStore.d.ts @@ -1,6 +1,6 @@ import { IResponseData } from "../../../Common/Request"; import { CADFiler } from "../../../DatabaseServices/CADFiler"; -import { BulkheadCeiling_ContourType } from "../../../DatabaseServices/Room/Entity/Ceiling/BulkheadCeiling"; +import { BulkheadCeiling, BulkheadCeiling_ContourType } from "../../../DatabaseServices/Room/Entity/Ceiling/BulkheadCeiling"; import { IConfigStore } from "../BoardStore"; import { BulkheadCeilingOption } from "../OptionInterface/BulkheadCeilingOption"; export declare const NONE_CONTOUR_ID = -1; @@ -8,6 +8,7 @@ export interface BulkheadCeilingContourData { contourType: BulkheadCeiling_ContourType; contourId: number; color: number; + deviation: number; } export declare class HeadCeilingInfoStore implements IConfigStore { configName: string; @@ -15,6 +16,7 @@ export declare class HeadCeilingInfoStore implements IConfigStore { m_Option: BulkheadCeilingOption; InitOption(): void; InitModelingItems(): void; + InitItemsForBulkheadCeiling(headCeilingEnt: BulkheadCeiling): Promise; /** * 配置 吊顶轮廓编辑时呼出的UI的Items * 保留原有配置后增加 diff --git a/types/UI/Store/HeadCeilingStore/HeadCeilingInfoStore.d.ts.map b/types/UI/Store/HeadCeilingStore/HeadCeilingInfoStore.d.ts.map index 192126c..ad62fd4 100644 --- a/types/UI/Store/HeadCeilingStore/HeadCeilingInfoStore.d.ts.map +++ b/types/UI/Store/HeadCeilingStore/HeadCeilingInfoStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HeadCeilingInfoStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/HeadCeilingStore/HeadCeilingInfoStore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAA2B,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,+DAA+D,CAAC;AAE5G,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AAEjF,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,MAAM,WAAW,0BAA0B;IAEvC,WAAW,EAAE,2BAA2B,CAAC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,oBAAqB,YAAW,YAAY;IAEzC,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,QAAQ,EAAE,qBAAqB,CAAgB;IAE3D,UAAU;IAKV,iBAAiB;IAqBjB;;;;OAIG;IACG,sBAAsB,CAAC,UAAU,EAAE,0BAA0B,EAAE;IAmErE,UAAU;IAKV,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG;IASlC,QAAQ,SAAU,QAAQ,UAmBxB;IAEF,SAAS,CAAC,IAAI,GAAE,QAAuB;IAevC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAuB;IACrD,MAAM,CAAC,WAAW,IAAI,oBAAoB;CAM7C;AAED,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAalG"} \ No newline at end of file +{"version":3,"file":"HeadCeilingInfoStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/HeadCeilingStore/HeadCeilingInfoStore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAA2B,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,2BAA2B,EAAE,MAAM,+DAA+D,CAAC;AAG7H,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAgB,MAAM,0CAA0C,CAAC;AAE/F,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,MAAM,WAAW,0BAA0B;IAEvC,WAAW,EAAE,2BAA2B,CAAC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,oBAAqB,YAAW,YAAY;IAEzC,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,QAAQ,EAAE,qBAAqB,CAAgC;IAE3E,UAAU;IAKV,iBAAiB;IAwBX,2BAA2B,CAAC,cAAc,EAAE,eAAe;IA+BjE;;;;OAIG;IACG,sBAAsB,CAAC,UAAU,EAAE,0BAA0B,EAAE;IAsErE,UAAU,IAEqB,GAAG;IAGlC,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG;IASlC,QAAQ,SAAU,QAAQ,UAsBxB;IAEF,SAAS,CAAC,IAAI,GAAE,QAAuB;IAkBvC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAuB;IACrD,MAAM,CAAC,WAAW,IAAI,oBAAoB;CAM7C;AAED,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAalG"} \ No newline at end of file diff --git a/types/UI/Store/HeadCeilingStore/HeadCeilingMaterialStore.d.ts.map b/types/UI/Store/HeadCeilingStore/HeadCeilingMaterialStore.d.ts.map index 4bd5ce8..317309f 100644 --- a/types/UI/Store/HeadCeilingStore/HeadCeilingMaterialStore.d.ts.map +++ b/types/UI/Store/HeadCeilingStore/HeadCeilingMaterialStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HeadCeilingMaterialStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/HeadCeilingStore/HeadCeilingMaterialStore.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAE9D,OAAO,EAAE,sCAAsC,EAAE,MAAM,8EAA8E,CAAC;AACtI,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,oCAAoC,EAAE,MAAM,0CAA0C,CAAC;AAGhG,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,MAAM,WAAW,2BAA2B;IAExC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KAChB,CAAC;CACL;AAED,qBAAa,+BAAgC,YAAW,YAAY;IAEpD,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,QAAQ,EAAE,oCAAoC,CAAgB;IAE1E,UAAU;IAKV,iBAAiB;IAoBjB;;;;OAIG;IACG,uBAAuB,CAAC,UAAU,EAAE,sCAAsC;IAyEhF,UAAU;IAKV,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG;IASlC,QAAQ,SAAU,QAAQ,UAkBxB;IAEF,SAAS,CAAC,IAAI,GAAE,QAAuB;IAcvC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAkC;IAChE,MAAM,CAAC,WAAW,IAAI,+BAA+B;CAMxD"} \ No newline at end of file +{"version":3,"file":"HeadCeilingMaterialStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/HeadCeilingStore/HeadCeilingMaterialStore.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAE9D,OAAO,EAAE,sCAAsC,EAAE,MAAM,8EAA8E,CAAC;AACtI,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,oCAAoC,EAAE,MAAM,0CAA0C,CAAC;AAGhG,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,MAAM,WAAW,2BAA2B;IAExC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KAChB,CAAC;CACL;AAED,qBAAa,+BAAgC,YAAW,YAAY;IAEpD,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,QAAQ,EAAE,oCAAoC,CAAgB;IAE1E,UAAU;IAKV,iBAAiB;IAoBjB;;;;OAIG;IACG,uBAAuB,CAAC,UAAU,EAAE,sCAAsC;IAyEhF,UAAU,IAEqB,GAAG;IAGlC,YAAY,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,GAAG;IASlC,QAAQ,SAAU,QAAQ,UAkBxB;IAEF,SAAS,CAAC,IAAI,GAAE,QAAuB;IAcvC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAkC;IAChE,MAAM,CAAC,WAAW,IAAI,+BAA+B;CAMxD"} \ No newline at end of file diff --git a/types/UI/Store/HideSelectStore.d.ts.map b/types/UI/Store/HideSelectStore.d.ts.map index 29acbf4..7a66431 100644 --- a/types/UI/Store/HideSelectStore.d.ts.map +++ b/types/UI/Store/HideSelectStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HideSelectStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/HideSelectStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAK1C,qBAAa,eAAgB,YAAW,YAAY;IAEpC,UAAU,SAAQ;IAClB,YAAY,QAAM;IAClB,QAAQ,EAAE,SAAS,CAA0B;IAC7C,KAAK,UAAS;IACd,KAAK,UAAS;IAE1B,UAAU;IAIV,UAAU;;;IAOV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,SAAS,CAAC;IA0C1C,QAAQ;IAYR,QAAQ;IAYR,UAAU;CAgBb;AAED,eAAO,MAAM,eAAe,iBAAwB,CAAC"} \ No newline at end of file +{"version":3,"file":"HideSelectStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/HideSelectStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAK1C,qBAAa,eAAgB,YAAW,YAAY;IAEpC,UAAU,SAAQ;IAClB,YAAY,QAAM;IAClB,QAAQ,EAAE,SAAS,CAA0B;IAC7C,KAAK,UAAS;IACd,KAAK,UAAS;IAE1B,UAAU;IAIV,UAAU;;;IAOV,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,SAAS,CAAC;IAqD1C,QAAQ;IAYR,QAAQ;IAYR,UAAU;CAgBb;AAED,eAAO,MAAM,eAAe,iBAAwB,CAAC"} \ No newline at end of file diff --git a/types/UI/Store/LatticeDrawerStore.d.ts.map b/types/UI/Store/LatticeDrawerStore.d.ts.map index 9a02437..b60f92c 100644 --- a/types/UI/Store/LatticeDrawerStore.d.ts.map +++ b/types/UI/Store/LatticeDrawerStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"LatticeDrawerStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/LatticeDrawerStore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,qBAAa,kBAAmB,SAAQ,UAAU;IAElC,QAAQ,EAAE,cAAc,CAA8B;IAClE,UAAU;IAKV,UAAU;IAOV,YAAY,CAAC,GAAG,EAAE,aAAa;IAoB/B,cAAc;IAMd,mCAAmC;CAItC"} \ No newline at end of file +{"version":3,"file":"LatticeDrawerStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/LatticeDrawerStore.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,qBAAa,kBAAmB,SAAQ,UAAU;IAElC,QAAQ,EAAE,cAAc,CAA8B;IAClE,UAAU;IAKV,UAAU;IAOV,YAAY,CAAC,GAAG,EAAE,aAAa;IA4B/B,cAAc;IAMd,mCAAmC;CAItC"} \ No newline at end of file diff --git a/types/UI/Store/LatticeInterface.d.ts b/types/UI/Store/LatticeInterface.d.ts index a7664d2..92110ad 100644 --- a/types/UI/Store/LatticeInterface.d.ts +++ b/types/UI/Store/LatticeInterface.d.ts @@ -26,5 +26,10 @@ export interface ILatticeOption extends IBaseOption { downCut: number; linesType: number; useBoardProcessOption?: boolean; + boardMatName: string; + material: string; + color: string; + roomName: string; + cabinetName: string; } //# sourceMappingURL=LatticeInterface.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/LatticeInterface.d.ts.map b/types/UI/Store/LatticeInterface.d.ts.map index 8f3afbf..4a44c29 100644 --- a/types/UI/Store/LatticeInterface.d.ts.map +++ b/types/UI/Store/LatticeInterface.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"LatticeInterface.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/LatticeInterface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEjE,oBAAY,iBAAiB;IAEzB,OAAO,IAAI;IACX,OAAO,IAAI;CACd;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IAE/C,SAAS,EAAE,iBAAiB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC"} \ No newline at end of file +{"version":3,"file":"LatticeInterface.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/LatticeInterface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEjE,oBAAY,iBAAiB;IAEzB,OAAO,IAAI;IACX,OAAO,IAAI;CACd;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IAE/C,SAAS,EAAE,iBAAiB,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACvB"} \ No newline at end of file diff --git a/types/UI/Store/MaterialStore.d.ts b/types/UI/Store/MaterialStore.d.ts index 744f5c7..41ee6b7 100644 --- a/types/UI/Store/MaterialStore.d.ts +++ b/types/UI/Store/MaterialStore.d.ts @@ -1,7 +1,7 @@ import { IReactionDisposer } from "mobx"; import { Color } from "three"; import { Singleton } from "../../Common/Singleton"; -import { IGoodProps, PhysicalMaterialRecord } from "../../DatabaseServices/PhysicalMaterialRecord"; +import { IGoodProps, IHardwareProps, PhysicalMaterialRecord } from "../../DatabaseServices/PhysicalMaterialRecord"; import { TextureTableRecord } from "../../DatabaseServices/Texture"; import { IDirectoryProps } from "../Components/SourceManage/CommonPanel"; import { TextureStore } from "./TextureStore"; @@ -38,6 +38,7 @@ export declare class MaterialStore extends Singleton { isOpenTexture: boolean; isOpenImgList: boolean; goodsInfo: IGoodProps; + hardwareAttributeInfo: IHardwareProps; UVtype: import("mobx").IObservableValue; currentEditorStore: TextureStore; currentTextureTable: TextureTableRecord; diff --git a/types/UI/Store/MaterialStore.d.ts.map b/types/UI/Store/MaterialStore.d.ts.map index d193391..fdf4e4c 100644 --- a/types/UI/Store/MaterialStore.d.ts.map +++ b/types/UI/Store/MaterialStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"MaterialStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/MaterialStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,iBAAiB,EAAoB,MAAM,MAAM,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAyB,MAAM,OAAO,CAAC;AAIrD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AACnG,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAIpE,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAI9C,qBAAa,aAAc,SAAQ,SAAS;IAExC,IAAI,0CAAsB;IAC1B,KAAK,0CAA6B;IAClC,GAAG,0CAAsB;IACzB,SAAS,0CAAuB;IAGhC,kBAAkB,0CAAqB;IACvC,mBAAmB,yCAA4C;IAC/D,kBAAkB,yCAAsC;IACxD,qBAAqB,0CAAqB;IAE1C,YAAY,sIAAsC;IAClD,cAAc,2CAAyB;IACvC,WAAW,0CAAqB;IAEhC,aAAa,eAAsB;IACnC,SAAS,0CAAqB;IAC9B,UAAU,eAAsB;IAChC,SAAS,0CAAqB;IAC9B,QAAQ,0CAAqB;IAC7B,eAAe,eAAsB;IAGrC,YAAY,0CAAqB;IAGjC,SAAS,0CAAqB;IAC9B,SAAS,0CAAqB;IAC9B,gBAAgB,0CAAqB;IACrC,iBAAiB,yCAAsC;IACvD,gBAAgB,yCAAsC;IAGtD,eAAe,0CAAqB;IACpC,aAAa,0CAAqB;IAClC,cAAc,0CAAqB;IACnC,cAAc,0CAAuB;IAGrC,UAAU,0CAAqB;IAE/B,SAAS,CAAC,eAAe,EAAE,iBAAiB,CAAC;IACjC,aAAa,UAAS;IACtB,aAAa,UAAS;IACtB,SAAS,EAAE,UAAU,CAI/B;IACF,MAAM,0CAAqB;IAE3B,kBAAkB,EAAE,YAAY,CAAC;IACjC,mBAAmB,EAAE,kBAAkB,CAAC;IACxC,UAAU,EAAE,eAAe,CAAC;IAChB,MAAM,UAAS;IAC3B,UAAU,2CAAyB;;IASnC,IAAI,QAAQ,mCAGX;IACD,IAAI,YAAY,iBAYf;IACD,YAAY;IAqCZ,OAAO;IAqBP,QAAQ,EAAE,sBAAsB,CAAC;IACjC,YAAY,CAAC,QAAQ,EAAE,sBAAsB;IAO7C,aAAa,CAAC,OAAO,EAAE,kBAAkB;IAuBzC,cAAc,sBAqDZ;IAEF,WAAW;IAoCX,gBAAgB;IAMV,UAAU;IAOhB,YAAY,CAAC,OAAO,EAAE,kBAAkB;IAuBlC,gBAAgB,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;KAAE;CAQhD"} \ No newline at end of file +{"version":3,"file":"MaterialStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/MaterialStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,iBAAiB,EAAoB,MAAM,MAAM,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAyB,MAAM,OAAO,CAAC;AAIrD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AACnH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAKpE,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAEzE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAI9C,qBAAa,aAAc,SAAQ,SAAS;IAExC,IAAI,0CAAsB;IAC1B,KAAK,0CAA6B;IAClC,GAAG,0CAAsB;IACzB,SAAS,0CAAuB;IAGhC,kBAAkB,0CAAqB;IACvC,mBAAmB,yCAA4C;IAC/D,kBAAkB,yCAAsC;IACxD,qBAAqB,0CAAqB;IAE1C,YAAY,sIAAsC;IAClD,cAAc,2CAAyB;IACvC,WAAW,0CAAqB;IAEhC,aAAa,eAAsB;IACnC,SAAS,0CAAqB;IAC9B,UAAU,eAAsB;IAChC,SAAS,0CAAqB;IAC9B,QAAQ,0CAAqB;IAC7B,eAAe,eAAsB;IAGrC,YAAY,0CAAqB;IAGjC,SAAS,0CAAqB;IAC9B,SAAS,0CAAqB;IAC9B,gBAAgB,0CAAqB;IACrC,iBAAiB,yCAAsC;IACvD,gBAAgB,yCAAsC;IAGtD,eAAe,0CAAqB;IACpC,aAAa,0CAAqB;IAClC,cAAc,0CAAqB;IACnC,cAAc,0CAAuB;IAGrC,UAAU,0CAAqB;IAE/B,SAAS,CAAC,eAAe,EAAE,iBAAiB,CAAC;IACjC,aAAa,UAAS;IACtB,aAAa,UAAS;IACtB,SAAS,EAAE,UAAU,CAI/B;IAEU,qBAAqB,EAAE,cAAc,CA0D/C;IACF,MAAM,0CAAqB;IAE3B,kBAAkB,EAAE,YAAY,CAAC;IACjC,mBAAmB,EAAE,kBAAkB,CAAC;IACxC,UAAU,EAAE,eAAe,CAAC;IAChB,MAAM,UAAS;IAC3B,UAAU,2CAAyB;;IASnC,IAAI,QAAQ,mCAGX;IACD,IAAI,YAAY,iBAYf;IACD,YAAY;IAqCZ,OAAO;IAqBP,QAAQ,EAAE,sBAAsB,CAAC;IACjC,YAAY,CAAC,QAAQ,EAAE,sBAAsB;IAO7C,aAAa,CAAC,OAAO,EAAE,kBAAkB;IAuBzC,cAAc,sBAsDZ;IAEF,WAAW;IAqCX,gBAAgB;IAMV,UAAU;IAOhB,YAAY,CAAC,OAAO,EAAE,kBAAkB;IAuBlC,gBAAgB,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;KAAE;CAQhD"} \ No newline at end of file diff --git a/types/UI/Store/OptionInterface/AutoDimBrsOption.d.ts b/types/UI/Store/OptionInterface/AutoDimBrsOption.d.ts index 792457e..b26a575 100644 --- a/types/UI/Store/OptionInterface/AutoDimBrsOption.d.ts +++ b/types/UI/Store/OptionInterface/AutoDimBrsOption.d.ts @@ -21,6 +21,8 @@ export interface IAutoDimBrsOption extends IBaseOption { forBoardName: boolean; forBoardNameStr: string; forBoardNameType: ForBoardNameType; + insideOffset: boolean; + insideOffsetDist: number; } export interface IFastDimOption extends IBaseOption { filterSmallSize: boolean; diff --git a/types/UI/Store/OptionInterface/AutoDimBrsOption.d.ts.map b/types/UI/Store/OptionInterface/AutoDimBrsOption.d.ts.map index dbd3549..00cc2ae 100644 --- a/types/UI/Store/OptionInterface/AutoDimBrsOption.d.ts.map +++ b/types/UI/Store/OptionInterface/AutoDimBrsOption.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"AutoDimBrsOption.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/OptionInterface/AutoDimBrsOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,oBAAY,gBAAgB;IAExB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,SAAS,cAAc;CAC1B;AAED,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IAElD,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,gBAAgB,CAAC;CACtC;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IAE/C,eAAe,EAAE,OAAO,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,uBAAuB,EAAE,MAAM,CAAC;IAChC,yBAAyB,EAAE,OAAO,CAAC;IACnC,aAAa,EAAE,gBAAgB,CAAC;IAChC,+BAA+B,EAAE,MAAM,CAAC;CAC3C"} \ No newline at end of file +{"version":3,"file":"AutoDimBrsOption.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/OptionInterface/AutoDimBrsOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,oBAAY,gBAAgB;IAExB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,SAAS,cAAc;CAC1B;AAED,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IAElD,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,EAAE,OAAO,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,YAAY,EAAE,OAAO,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAe,SAAQ,WAAW;IAE/C,eAAe,EAAE,OAAO,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,uBAAuB,EAAE,MAAM,CAAC;IAChC,yBAAyB,EAAE,OAAO,CAAC;IACnC,aAAa,EAAE,gBAAgB,CAAC;IAChC,+BAA+B,EAAE,MAAM,CAAC;CAC3C"} \ No newline at end of file diff --git a/types/UI/Store/OptionInterface/BoardProcessOption.d.ts b/types/UI/Store/OptionInterface/BoardProcessOption.d.ts index faf7802..e82973e 100644 --- a/types/UI/Store/OptionInterface/BoardProcessOption.d.ts +++ b/types/UI/Store/OptionInterface/BoardProcessOption.d.ts @@ -2,7 +2,7 @@ import { FaceDirection } from "../../../Add-on/DrawDrilling/DrillType"; import { EBoardKeyList } from "../../../Common/BoardKeyList"; import { ComposingType, LinesType } from "../../../DatabaseServices/Entity/BoardInterface"; import { ObjectId } from "../../../DatabaseServices/ObjectId"; -import { IHighEdgeRemarkItem, IHighSealedItem } from "./IHighSealedItem"; +import { IHighEdgeRemarkItem, IHighReservedEdgeItem, IHighSealedItem } from "./IHighSealedItem"; import { IBaseOption } from "./IOptionInterface"; export interface BoardProcessOption extends IBaseOption { [EBoardKeyList.RoomName]?: string; @@ -33,5 +33,15 @@ export interface BoardProcessOption extends IBaseOption { edgeRemarkLeft?: string; edgeRemarkRight?: string; highBoardEdgeRemark?: IHighEdgeRemarkItem[]; + reservedEdgeUp?: string; + reservedEdgeDown?: string; + reservedEdgeLeft?: string; + reservedEdgeRight?: string; + highReservedEdge?: IHighReservedEdgeItem[]; + sealColorUp?: string; + sealColorDown?: string; + sealColorLeft?: string; + sealColorRight?: string; + sealColorType?: string; } //# sourceMappingURL=BoardProcessOption.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/OptionInterface/BoardProcessOption.d.ts.map b/types/UI/Store/OptionInterface/BoardProcessOption.d.ts.map index bf29494..821bfbd 100644 --- a/types/UI/Store/OptionInterface/BoardProcessOption.d.ts.map +++ b/types/UI/Store/OptionInterface/BoardProcessOption.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardProcessOption.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/OptionInterface/BoardProcessOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IAEnD,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAClC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC;IACrC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;IAC/B,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;IAC7B,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;IAC/B,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC;IAClC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC1C,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,CAAC;IACxC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC;IACnC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC;IAC9C,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/C,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAClC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC;IACpC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC;IACpC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC;IACrC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC;IACtC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC;IACrC,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC;IAEzC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC5B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,mBAAmB,EAAE,CAAC;CAC/C"} \ No newline at end of file +{"version":3,"file":"BoardProcessOption.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/OptionInterface/BoardProcessOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AAC3F,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IAEnD,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAClC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC;IACrC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;IAC/B,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;IAC7B,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC;IAC/B,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC;IAClC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC1C,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,CAAC;IACxC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC;IACnC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,EAAE,aAAa,CAAC;IAC9C,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/C,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAClC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC;IACpC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC;IACpC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC;IACrC,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC;IACtC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,CAAC;IACrC,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,EAAE,MAAM,CAAC;IAEzC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IAGnB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC5B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAE5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAE3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B"} \ No newline at end of file diff --git a/types/UI/Store/OptionInterface/BulkheadCeilingOption.d.ts b/types/UI/Store/OptionInterface/BulkheadCeilingOption.d.ts index 9c96969..766f323 100644 --- a/types/UI/Store/OptionInterface/BulkheadCeilingOption.d.ts +++ b/types/UI/Store/OptionInterface/BulkheadCeilingOption.d.ts @@ -15,12 +15,18 @@ export interface ICeilingItem { id: number; name: string; logo: string; + deviation: number; }; } export interface BulkheadCeilingOption extends IBaseOption { Item: ICeilingItem[]; + Height: number; } export interface BulkheadCeilingProfileMaterialOption extends IBaseOption { Item: ICeilingProfileMaterialItem[]; } +export declare enum Display { + Block = "block", + None = "none" +} //# sourceMappingURL=BulkheadCeilingOption.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/OptionInterface/BulkheadCeilingOption.d.ts.map b/types/UI/Store/OptionInterface/BulkheadCeilingOption.d.ts.map index 1954d7e..fb90276 100644 --- a/types/UI/Store/OptionInterface/BulkheadCeilingOption.d.ts.map +++ b/types/UI/Store/OptionInterface/BulkheadCeilingOption.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BulkheadCeilingOption.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/OptionInterface/BulkheadCeilingOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+DAA+D,CAAC;AAC5G,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,WAAW,2BAA2B;IAExC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KAChB,CAAC;CACL;AAED,MAAM,WAAW,YAAY;IAEzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE;QACL,WAAW,EAAE,2BAA2B,CAAC;QACzC,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KAChB,CAAC;CACL;AAED,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IAEtD,IAAI,EAAE,YAAY,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,oCAAqC,SAAQ,WAAW;IAErE,IAAI,EAAE,2BAA2B,EAAE,CAAC;CACvC"} \ No newline at end of file +{"version":3,"file":"BulkheadCeilingOption.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/OptionInterface/BulkheadCeilingOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+DAA+D,CAAC;AAC5G,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,WAAW,2BAA2B;IAExC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KAChB,CAAC;CACL;AAED,MAAM,WAAW,YAAY;IAEzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE;QACL,WAAW,EAAE,2BAA2B,CAAC;QACzC,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,CAAC;KACrB,CAAC;CACL;AAED,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IAEtD,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oCAAqC,SAAQ,WAAW;IAErE,IAAI,EAAE,2BAA2B,EAAE,CAAC;CACvC;AAED,oBAAY,OAAO;IAEf,KAAK,UAAU;IACf,IAAI,SAAS;CAChB"} \ No newline at end of file diff --git a/types/UI/Store/OptionInterface/ClosingStripOption.d.ts b/types/UI/Store/OptionInterface/ClosingStripOption.d.ts index 7aa0662..13c6e49 100644 --- a/types/UI/Store/OptionInterface/ClosingStripOption.d.ts +++ b/types/UI/Store/OptionInterface/ClosingStripOption.d.ts @@ -12,5 +12,10 @@ export interface ClosingStripOption extends BoardConfigOption { fzWidth: number; fzThickness: number; addSKTCabinetName: boolean; + brName: string; + FuZhuType: StripType; + fuZhuBrName: string; + fuZhuMaterial: string; + fuZhuColor: string; } //# sourceMappingURL=ClosingStripOption.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/OptionInterface/ClosingStripOption.d.ts.map b/types/UI/Store/OptionInterface/ClosingStripOption.d.ts.map index 697cabe..de4ad60 100644 --- a/types/UI/Store/OptionInterface/ClosingStripOption.d.ts.map +++ b/types/UI/Store/OptionInterface/ClosingStripOption.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"ClosingStripOption.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/OptionInterface/ClosingStripOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,oBAAY,SAAS;IAEjB,CAAC,MAAM;IACP,CAAC,MAAM;CACV;AAED,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAEzD,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;CAC9B"} \ No newline at end of file +{"version":3,"file":"ClosingStripOption.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/OptionInterface/ClosingStripOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iDAAiD,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,oBAAY,SAAS;IAEjB,CAAC,MAAM;IACP,CAAC,MAAM;CACV;AAED,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAEzD,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACtB"} \ No newline at end of file diff --git a/types/UI/Store/OptionInterface/IHighSealedItem.d.ts b/types/UI/Store/OptionInterface/IHighSealedItem.d.ts index 8437c3b..db88408 100644 --- a/types/UI/Store/OptionInterface/IHighSealedItem.d.ts +++ b/types/UI/Store/OptionInterface/IHighSealedItem.d.ts @@ -1,5 +1,6 @@ export interface IHighSealedItem { size: number; + sealColor: string; } export interface ISealingData extends IHighSealedItem { length: number; @@ -9,4 +10,7 @@ export interface ISealingData extends IHighSealedItem { export interface IHighEdgeRemarkItem { description: string; } +export interface IHighReservedEdgeItem { + size: number; +} //# sourceMappingURL=IHighSealedItem.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/OptionInterface/IHighSealedItem.d.ts.map b/types/UI/Store/OptionInterface/IHighSealedItem.d.ts.map index faf75bb..e07dfc8 100644 --- a/types/UI/Store/OptionInterface/IHighSealedItem.d.ts.map +++ b/types/UI/Store/OptionInterface/IHighSealedItem.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"IHighSealedItem.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/OptionInterface/IHighSealedItem.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAE5B,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAa,SAAQ,eAAe;IAEjD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAEhC,WAAW,EAAE,MAAM,CAAC;CACvB"} \ No newline at end of file +{"version":3,"file":"IHighSealedItem.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/OptionInterface/IHighSealedItem.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAE5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAa,SAAQ,eAAe;IAEjD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAEhC,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IAElC,IAAI,EAAE,MAAM,CAAC;CAChB"} \ No newline at end of file diff --git a/types/UI/Store/OptionInterface/IOptionInterface.d.ts b/types/UI/Store/OptionInterface/IOptionInterface.d.ts index 87827c1..90eedd9 100644 --- a/types/UI/Store/OptionInterface/IOptionInterface.d.ts +++ b/types/UI/Store/OptionInterface/IOptionInterface.d.ts @@ -1,6 +1,9 @@ +import { FaceDirection } from "../../../Add-on/DrawDrilling/DrillType"; +import { ArcBoardFeedProcess } from "../../../DatabaseServices/Entity/ArcBoardType"; import { BoardOpenDir, BoardType, BrRelativePos } from "../../../DatabaseServices/Entity/BoardInterface"; import { EOrderType } from "../../../Editor/OrderType"; import { RenderType } from "../../../GraphicsSystem/RenderType"; +import { ECompareType } from "../BoardFindInterface"; import { BehindHeightPositon, RadioType, ViewDirection } from "./OptionEnum"; export interface IBaseOption { version?: number; @@ -16,6 +19,9 @@ export interface BoardConfigOption extends IBaseOption { width?: number; openDir?: BoardOpenDir; cuttingProtrudingPart?: boolean; + sweepAngle?: number; + exprThickness?: string; + exprCount?: string; } export interface RightPlaneLightOption { version: number; @@ -30,6 +36,7 @@ export interface RightPlaneLightOption { SunLightTemperature: number; SunLightElevationDeg: number; SunLightRotateDeg: number; + SunLightSourceAngle: number; ShowExposure: boolean; AutoExposure: boolean; ExposureCompensation: number; @@ -67,6 +74,8 @@ export interface BehindBoardOption extends BoardConfigOption { calcHeight: string; calcSpaceSize: string; calcMoveDist: string; + exprCount: string; + exprThickness: string; } /** *层板参数 @@ -89,6 +98,8 @@ export interface LayerBoardOption extends BoardConfigOption { calcFrontShrink: string; calcLeftShrink: string; calcRightShrink: string; + exprCount: string; + exprThickness: string; } /** *层板钉参数 @@ -125,6 +136,8 @@ export interface VerticalBoardOption extends BoardConfigOption { calcSpaceSize: string; calcFrontShrink: string; calcBottomShrink: string; + exprCount: string; + exprThickness: string; } export interface TBBoardOption extends BoardConfigOption { isDraw: boolean; @@ -142,6 +155,7 @@ export interface TBBoardOption extends BoardConfigOption { footerOffset?: number; isDrawStrengthenStrip?: boolean; divCount?: number; + bigHoleDir?: FaceDirection; } export interface SingleBoardOption extends BoardConfigOption { rotateX: number; @@ -150,10 +164,14 @@ export interface SingleBoardOption extends BoardConfigOption { drawNumber?: number; } export interface IGrooveOption extends IBaseOption { - grooveAddLength: string; - grooveAddWidth: string; - grooveAddDepth: string; + grooveAddLength?: string; + grooveAddWidth?: string; + grooveAddDepth?: string; knifeRadius?: string; + exprGrooveAddLength?: string; + exprGrooveAddWidth?: string; + exprGrooveAddDepth?: string; + exprKnifeRadius?: string; } export interface IShinkOption extends IBaseOption { name: string; @@ -173,11 +191,17 @@ export interface INailRule extends IBaseOption { endDist: number; count: number; } +export declare enum HightDrillOption { + up = "up", + down = "down", + left = "left", + right = "right" +} export interface IHightDrillOption { - up: string; - down: string; - left: string; - right: string; + [HightDrillOption.up]: string; + [HightDrillOption.down]: string; + [HightDrillOption.left]: string; + [HightDrillOption.right]: string; } export interface IBatchModifyPanelOption extends IBaseOption { length: string; @@ -192,7 +216,8 @@ export interface ISmoothEdgeOption extends IBaseOption { smoothEdge: number; edge: number; scale: number; - filterArr: string[]; + filterArrs: string[][]; + filterArr?: string[]; } export interface IDrawBoardAutoCutOption { isAutoCut: boolean; @@ -247,19 +272,24 @@ export interface IDimStyleOption extends IBaseOption { dimALTD: number; dimADEC: number; } -export interface ChangeColorByBoardMaterialOption { +export interface ChangeColorByBoardMaterialOption extends IBaseOption { accordThickness: boolean; accordMaterial: boolean; accordMaterialName: boolean; accordMaterialColor: boolean; + includeNoChaiDanBoard: boolean; } -export interface ShareBoardInfConfigurationOption { +export interface ShareBoardInfConfigurationOption extends IBaseOption { Physical2EdgeColor: number; VisualStyle: RenderType; Viewport: ViewDirection; IsExportBoard: boolean; IsExportHardware: boolean; + IsExportCurve: boolean; + IsExportDimension: boolean; + IsExportText: boolean; showBom: boolean; + expireDays: string; } export interface ProcessingGroupOption { processGroupCategory: string[]; @@ -276,5 +306,91 @@ export interface ChangeColorByRoomOrCabinetOption { } export interface DoorRelatesInfoOption extends IBaseOption { hingeOption: [string, boolean][]; + hingeDecimal: number; + filterNoDoor: boolean; +} +export interface IAutoHoleFaceOption extends IBaseOption { + hight: number; + filterDrill: string; + filterBoards: string; +} +export interface OneClickInspectionOption extends IBaseOption { + InspectionOption: { + isInterfere: boolean; + isMaxSizeBoard: boolean; + isMinSizeBoard: boolean; + isModel: boolean; + isDrill: boolean; + isSpecialBoardContour: boolean; + isSplitBoard: boolean; + isDrawHole: boolean; + }; + excludeDrawHoleOption: { + boardName: boolean; + boardNameValue: string; + processingGroupName: boolean; + processingGroupNameValue: string; + boardThickness: boolean; + boardThicknessValue: number; + IsSplitBoard: boolean; + boardNameCompareType: ECompareType; + processingGroupNameCompareType: ECompareType; + boardThicknessCompareType: ECompareType; + }; + excludeInterfereOption: { + boardName: boolean; + boardNameValue: string; + processingGroupName: boolean; + processingGroupNameValue: string; + hwComposityName: boolean; + hwComposityNameValue: string; + noChaiDanBoard: boolean; + boardNameCompareType: ECompareType; + processingGroupNameCompareType: ECompareType; + hwComposityNameCompareType: ECompareType; + }; +} +export interface IArcBoardGrooveOption extends IBaseOption { + isDrawArcGroove: boolean; + retainedThickness: string; + grooveAddLength: string; + grooveAddWidth: string; + grooveAddDepth: string; + knifeRadius: string; + grooveSpacing2: string; + grooveWidth2: string; + arcExtension2: string; + retainedThickness2: string; + knifeRadius2: string; + grooveAddLength2: string; + grooveAddWidth2: string; + grooveAddDepth2: string; + arcBoardFeedProcess: ArcBoardFeedProcess; +} +export interface IResourceStoreIcon extends IBaseOption { + iconType: string; +} +export interface IBBSModelOption extends IBaseOption { + height: number; + width: number; + top: number; + left: number; + isMax: boolean; +} +export interface PartsAnalysisOption extends IBaseOption { + PartsOption: [string, boolean][]; +} +export interface IHoleGrooveDimOption extends IBaseOption { + isDrawSHInfo: boolean; + sHoleInfo: string; + sHoleMark: string; + isDrawFBHInfo: boolean; + fBHoleInfo: string; + fBHoleMark: string; + isDrawBrInfo: boolean; + brInfo: string; + isDrawEdgeRemark: boolean; + edgeRemarkMark: string; + isDrawSealing: boolean; } //# sourceMappingURL=IOptionInterface.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/OptionInterface/IOptionInterface.d.ts.map b/types/UI/Store/OptionInterface/IOptionInterface.d.ts.map index cdffa83..92f12dc 100644 --- a/types/UI/Store/OptionInterface/IOptionInterface.d.ts.map +++ b/types/UI/Store/OptionInterface/IOptionInterface.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"IOptionInterface.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/OptionInterface/IOptionInterface.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"IOptionInterface.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/OptionInterface/IOptionInterface.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Store/OptionInterface/TemplateManageOption.d.ts b/types/UI/Store/OptionInterface/TemplateManageOption.d.ts index b4b71ef..e71c247 100644 --- a/types/UI/Store/OptionInterface/TemplateManageOption.d.ts +++ b/types/UI/Store/OptionInterface/TemplateManageOption.d.ts @@ -16,6 +16,7 @@ export interface ITemplateManage { store?: TempalteEditorStore; currentTag?: ITempTagProps; R2bReplace?: R2bReplaceProps; + ImageUseTemplate?: boolean; type: "Administration" | "Collection"; } export interface TemplateManageUiOption { @@ -29,6 +30,7 @@ export interface ITemplateManageOption extends IBaseOption { perPageCount: number; useOverallOption: boolean; dirData?: IHasAutoCutOption[]; + imageDefaultTemplate: string; } export interface TemplateOptionInfo extends IGetRoomInfo { hingeMoveParam?: string | number; @@ -56,5 +58,8 @@ export interface TemplateManageOption extends IBaseOption { lockRoomName?: boolean; lockCabName?: boolean; lockBoardName?: boolean; + isBoard?: boolean; + isHardwareEntity?: boolean; + imageDefaultTemplate?: string; } //# sourceMappingURL=TemplateManageOption.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/OptionInterface/TemplateManageOption.d.ts.map b/types/UI/Store/OptionInterface/TemplateManageOption.d.ts.map index 02081fe..45e9e71 100644 --- a/types/UI/Store/OptionInterface/TemplateManageOption.d.ts.map +++ b/types/UI/Store/OptionInterface/TemplateManageOption.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateManageOption.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/OptionInterface/TemplateManageOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,MAAM,WAAW,IAAI;IAEjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,IAAI,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,iBAAkB,SAAQ,IAAI;IAE3C,aAAa,CAAC,EAAE,uBAAuB,CAAC;CAC3C;AAED,MAAM,WAAW,eAAe;IAE5B,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,IAAI,EAAE,gBAAgB,GAAG,YAAY,CAAC;CACzC;AAED,MAAM,WAAW,sBAAsB;IAEnC,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IAEtD,MAAM,EAAE,kBAAkB,CAAC;IAC3B,aAAa,EAAE,uBAAuB,CAAC;IACvC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IAEpD,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IAErD,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B"} \ No newline at end of file +{"version":3,"file":"TemplateManageOption.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/OptionInterface/TemplateManageOption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,MAAM,gDAAgD,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,iDAAiD,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAE1E,MAAM,WAAW,IAAI;IAEjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,IAAI,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,iBAAkB,SAAQ,IAAI;IAE3C,aAAa,CAAC,EAAE,uBAAuB,CAAC;CAC3C;AAED,MAAM,WAAW,eAAe;IAE5B,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,IAAI,EAAE,gBAAgB,GAAG,YAAY,CAAC;CACzC;AAED,MAAM,WAAW,sBAAsB;IAEnC,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IAEtD,MAAM,EAAE,kBAAkB,CAAC;IAC3B,aAAa,EAAE,uBAAuB,CAAC;IACvC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IAEpD,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IAErD,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACjC"} \ No newline at end of file diff --git a/types/UI/Store/RightPanelStore/BoardEdgesEditor.d.ts b/types/UI/Store/RightPanelStore/BoardEdgesEditor.d.ts index 8ccf39e..8e8e098 100644 --- a/types/UI/Store/RightPanelStore/BoardEdgesEditor.d.ts +++ b/types/UI/Store/RightPanelStore/BoardEdgesEditor.d.ts @@ -1,10 +1,11 @@ +import { SealSolid } from "../../../DatabaseServices/3DSolid/SealSolid"; import { Board } from "../../../DatabaseServices/Entity/Board"; import { Curve } from "../../../DatabaseServices/Entity/Curve"; import { Entity } from "../../../DatabaseServices/Entity/Entity"; export declare function ZoomToEntity(en: Entity): void; export declare const Board_Editor_Key = "Board_Editor_Key"; export declare class BoardEdgesEditor { - protected _brMap: Map; + protected _brMap: Map; protected _boardList: Board[]; private _editoring; private _cameraFiler; diff --git a/types/UI/Store/RightPanelStore/BoardEdgesEditor.d.ts.map b/types/UI/Store/RightPanelStore/BoardEdgesEditor.d.ts.map index 22ad944..6e7a8cb 100644 --- a/types/UI/Store/RightPanelStore/BoardEdgesEditor.d.ts.map +++ b/types/UI/Store/RightPanelStore/BoardEdgesEditor.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"BoardEdgesEditor.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/BoardEdgesEditor.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAKjE,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,QAMtC;AAED,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD,qBAAa,gBAAgB;IAEzB,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAa;IAClD,SAAS,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;IAC9B,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,YAAY,CAAW;IAC/B,WAAW,UAAS;cAGJ,QAAQ;IAKxB,SAAS,CAAC,SAAS;IAInB,SAAS,CAAC,WAAW;IAIrB,SAAS,CAAC,SAAS;cAKH,SAAS;IAInB,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE;IAcxB,SAAS;IAsBf,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK;CAgChB"} \ No newline at end of file +{"version":3,"file":"BoardEdgesEditor.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/BoardEdgesEditor.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAC;AAExE,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,yCAAyC,CAAC;AAMjE,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,QAMtC;AAED,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD,qBAAa,gBAAgB;IAEzB,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC,CAAa;IAChE,SAAS,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC;IAC9B,OAAO,CAAC,UAAU,CAAS;IAE3B,OAAO,CAAC,YAAY,CAAW;IAC/B,WAAW,UAAS;cAGJ,QAAQ;IAKxB,SAAS,CAAC,SAAS;IAInB,SAAS,CAAC,WAAW;IAIrB,SAAS,CAAC,SAAS;cAKH,SAAS;IAInB,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE;IAcxB,SAAS;IAsBf,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK;CA6ChB"} \ No newline at end of file diff --git a/types/UI/Store/RightPanelStore/HardwareStore.d.ts.map b/types/UI/Store/RightPanelStore/HardwareStore.d.ts.map index ad7924e..e1f2963 100644 --- a/types/UI/Store/RightPanelStore/HardwareStore.d.ts.map +++ b/types/UI/Store/RightPanelStore/HardwareStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"HardwareStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/HardwareStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,4DAA4D,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,MAAM,oDAAoD,CAAC;AAErF,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AACvH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,8BAAsB,iBAAkB,YAAW,YAAY;IAE/C,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,MAAM,EAAE,eAAe,CAAC;IACZ,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAM;IACtC,MAAM,EAAE,uBAAuB,GAAG,eAAe,CAAC;IAClD,QAAQ,SAAO;;IAK3B,OAAO,CAAC,IAAI;IAIZ,IAAI,MAAM,uBAWT;IACD,UAAU;IAIV,UAAU;IAUV,YAAY,CAAC,GAAG,EAAE,aAAa;IAY/B,cAAc;CAIjB;AAED,qBAAa,sBAAuB,SAAQ,iBAAiB;IAE7C,MAAM,EAAE,mBAAmB,CAAuC;IAC9E,UAAU;IAKV,YAAY,CAAC,GAAG,EAAE,aAAa;CAYlC;AAED,qBAAa,kBAAmB,SAAQ,iBAAiB;IAEzC,MAAM,EAAE,cAAc,CAAqC;IACvE,UAAU;IAKV,YAAY,CAAC,GAAG,EAAE,aAAa;CAalC;AAGD,eAAO,MAAM,oBAAoB,wBAA+B,CAAC;AACjE,eAAO,MAAM,0BAA0B,wBAA+B,CAAC;AACvE,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"} \ No newline at end of file +{"version":3,"file":"HardwareStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/HardwareStore.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,4DAA4D,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,MAAM,oDAAoD,CAAC;AAErF,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AACvH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,8BAAsB,iBAAkB,YAAW,YAAY;IAE/C,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,MAAM,EAAE,eAAe,CAAC;IACZ,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAM;IACtC,MAAM,EAAE,uBAAuB,GAAG,eAAe,CAAC;IAClD,QAAQ,SAAO;;IAK3B,OAAO,CAAC,IAAI;IAIZ,IAAI,MAAM,uBAWT;IACD,UAAU;IAIV,UAAU;IAUV,YAAY,CAAC,GAAG,EAAE,aAAa;IAqB/B,cAAc;CAIjB;AAED,qBAAa,sBAAuB,SAAQ,iBAAiB;IAE7C,MAAM,EAAE,mBAAmB,CAAuC;IAC9E,UAAU;IAKV,YAAY,CAAC,GAAG,EAAE,aAAa;CAYlC;AAED,qBAAa,kBAAmB,SAAQ,iBAAiB;IAEzC,MAAM,EAAE,cAAc,CAAqC;IACvE,UAAU;IAKV,YAAY,CAAC,GAAG,EAAE,aAAa;CAalC;AAGD,eAAO,MAAM,oBAAoB,wBAA+B,CAAC;AACjE,eAAO,MAAM,0BAA0B,wBAA+B,CAAC;AACvE,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"} \ 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 87e6e9f..d6ffe67 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;AAY1B,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,EAAsB,MAAM,cAAc,CAAC;AAE9D,UAAU,qBAAqB;IAE3B,KAAK,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,YAAY,CAAC;IAC1B,SAAS,EAAE,cAAc,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CAChB;AAGD,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC,qBAAqB,EAAE,EAAE,CAAC;IAEhE,OAAO,EAAE,MAAM,CAA6N;IAC5O,SAAS,EAAE,MAAM,CAA0E;IACvG,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,QAAQ,CAAoB;IACpC,iBAAiB;IAgBjB,oBAAoB;IAOpB,kBAAkB,UAAiB,KAAK,gBAAgB,OAAO,eAAe,OAAO,mBAsCnF;IAGF,OAAO,CAAC,SAAS;IASjB,MAAM;CA6VT;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,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,OAAO,CAAC;CAAE,EAAE,EAAE,CAAC;IAE5L,OAAO,EAAE,MAAM,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAoB;IAEpC,OAAO,CAAC,SAAS;IAUX,QAAQ,CAAC,KAAK,EAAE,MAAM;IA0D5B,YAAY,CAAC,KAAK,EAAE,MAAM;IAoC1B,MAAM;CAmIT"} \ 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;AAY1B,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,EAAsB,MAAM,cAAc,CAAC;AAE9D,UAAU,qBAAqB;IAE3B,KAAK,EAAE,UAAU,CAAC;IAClB,WAAW,EAAE,YAAY,CAAC;IAC1B,SAAS,EAAE,cAAc,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CAChB;AAGD,qBACa,gBAAiB,SAAQ,KAAK,CAAC,SAAS,CAAC,qBAAqB,EAAE,EAAE,CAAC;IAEhE,OAAO,EAAE,MAAM,CAA6N;IAC5O,SAAS,EAAE,MAAM,CAA0E;IACvG,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,QAAQ,CAAoB;IACpC,iBAAiB;IAgBjB,oBAAoB;IAOpB,kBAAkB,UAAiB,KAAK,gBAAgB,OAAO,eAAe,OAAO,mBAsCnF;IAGF,OAAO,CAAC,SAAS;IASjB,MAAM;CAkWT;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,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,OAAO,CAAC;CAAE,EAAE,EAAE,CAAC;IAE5L,OAAO,EAAE,MAAM,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAoB;IAEpC,OAAO,CAAC,SAAS;IAUX,QAAQ,CAAC,KAAK,EAAE,MAAM;IA0D5B,YAAY,CAAC,KAAK,EAAE,MAAM;IAoC1B,MAAM;CAmIT"} \ No newline at end of file diff --git a/types/UI/Store/RightPanelStore/LightStore.d.ts.map b/types/UI/Store/RightPanelStore/LightStore.d.ts.map index 806fce8..1699e8c 100644 --- a/types/UI/Store/RightPanelStore/LightStore.d.ts.map +++ b/types/UI/Store/RightPanelStore/LightStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"LightStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/LightStore.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"LightStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/LightStore.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/types/UI/Store/RightPanelStore/Modeling2Store.d.ts b/types/UI/Store/RightPanelStore/Modeling2Store.d.ts index e02dc30..92b6b86 100644 --- a/types/UI/Store/RightPanelStore/Modeling2Store.d.ts +++ b/types/UI/Store/RightPanelStore/Modeling2Store.d.ts @@ -11,7 +11,7 @@ export interface IKnifeInfo2 { export interface IVModelingInfo { id: string; offset: number; - depth: number; + depth: string; knife: IKnifeInfo2; } type IUIVModelingInfo = Pick, "offset" | "depth">[]; diff --git a/types/UI/Store/RightPanelStore/Modeling2Store.d.ts.map b/types/UI/Store/RightPanelStore/Modeling2Store.d.ts.map index a2030ac..f211688 100644 --- a/types/UI/Store/RightPanelStore/Modeling2Store.d.ts.map +++ b/types/UI/Store/RightPanelStore/Modeling2Store.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Modeling2Store.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/Modeling2Store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAG7E,MAAM,WAAW,WAAW;IAExB,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,CAAC;CAChD;AAED,MAAM,WAAW,cAAc;IAE3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,CAAC;CACtB;AACD,KAAK,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC;AAC9E,MAAM,WAAW,cAAc;IAE3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,aAAa,CAAC;IACnB,KAAK,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAExB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,aAAa,CAAC;IACnB,KAAK,EAAE,gBAAgB,CAAC;CAC3B;AAED,qBAAa,cAAe,YAAW,YAAY;IAEnC,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,aAAa,EAAE,cAAc,EAAE,CAAM;IACrC,cAAc,EAAE,WAAW,EAAE,CAAM;IAC/C,gBAAgB,UAAS;IACzB,UAAU,EAAE,GAAG,CAAC;IAChB,OAAO,CAAC,eAAe,CAAK;;IAK5B,IAAI,EAAE,WAGL;IAED,iBAAiB;IAmDjB,QAAQ,CAAC,KAAK,EAAE,MAAM;IAetB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAM3C,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW;IAoBpD,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,aAAa,CAAC;KAAE;IAqBrF,UAAU;IAIV,UAAU;IAOV,cAAc;IA2Bd,YAAY,CAAC,GAAG,EAAE,aAAa;CAKlC"} \ No newline at end of file +{"version":3,"file":"Modeling2Store.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/Modeling2Store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAG7E,MAAM,WAAW,WAAW;IAExB,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,CAAC;CAChD;AAED,MAAM,WAAW,cAAc;IAE3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,CAAC;CACtB;AACD,KAAK,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC;AAC9E,MAAM,WAAW,cAAc;IAE3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,aAAa,CAAC;IACnB,KAAK,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAExB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,aAAa,CAAC;IACnB,KAAK,EAAE,gBAAgB,CAAC;CAC3B;AAED,qBAAa,cAAe,YAAW,YAAY;IAEnC,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,aAAa,EAAE,cAAc,EAAE,CAAM;IACrC,cAAc,EAAE,WAAW,EAAE,CAAM;IAC/C,gBAAgB,UAAS;IACzB,UAAU,EAAE,GAAG,CAAC;IAChB,OAAO,CAAC,eAAe,CAAK;;IAK5B,IAAI,EAAE,WAGL;IAED,iBAAiB;IAmDjB,QAAQ,CAAC,KAAK,EAAE,MAAM;IAetB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAM3C,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW;IAoBpD,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,aAAa,CAAC;KAAE;IAqBrF,UAAU;IAIV,UAAU;IAOV,cAAc;IA2Bd,YAAY,CAAC,GAAG,EAAE,aAAa;CAelC"} \ No newline at end of file diff --git a/types/UI/Store/RightPanelStore/ModelingStore.d.ts.map b/types/UI/Store/RightPanelStore/ModelingStore.d.ts.map index 8be3bdc..d3714ab 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":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,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;IAE7D,gBAAgB,UAAS;;IAMzB,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":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,wCAAwC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,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;IAE7D,gBAAgB,UAAS;;IAMzB,iBAAiB;IA2BjB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS;IAmBlD,UAAU;IAIV,UAAU;IAQV,YAAY,CAAC,GAAG,EAAE,aAAa;CA8BlC"} \ No newline at end of file diff --git a/types/UI/Store/RightPanelStore/ReservedEdgeStore.d.ts b/types/UI/Store/RightPanelStore/ReservedEdgeStore.d.ts new file mode 100644 index 0000000..60fe3e5 --- /dev/null +++ b/types/UI/Store/RightPanelStore/ReservedEdgeStore.d.ts @@ -0,0 +1,28 @@ +import { IConfigOption } from "../../Components/Board/UserConfigComponent"; +import { IConfigStore } from "../BoardStore"; +import { BoardEdgesEditor } from "./BoardEdgesEditor"; +export declare class ReservedEdgeStore extends BoardEdgesEditor implements IConfigStore { + isNotUpdateStore: boolean; + highReservedEdge: string[]; + private static _SingleInstance; + static GetInstance(): ReservedEdgeStore; + option: { + highReservedEdge: string[]; + }; + InitData(): Promise; + configName: string; + configsNames: string[]; + InitOption(): void; + SaveConfig(): { + option: { + highReservedEdge: string[]; + }; + }; + UpdateOption(cof: IConfigOption): void; + protected InitCurve(): void; + protected ShowToaster(): void; + private _dataMap; + protected ParseData(isCheck?: boolean): void; + protected WriteData(): Promise; +} +//# sourceMappingURL=ReservedEdgeStore.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/RightPanelStore/ReservedEdgeStore.d.ts.map b/types/UI/Store/RightPanelStore/ReservedEdgeStore.d.ts.map new file mode 100644 index 0000000..bb7fdb9 --- /dev/null +++ b/types/UI/Store/RightPanelStore/ReservedEdgeStore.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"ReservedEdgeStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/ReservedEdgeStore.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAoB,MAAM,oBAAoB,CAAC;AAExE,qBAAa,iBAAkB,SAAQ,gBAAiB,YAAW,YAAY;IAE3E,gBAAgB,UAAS;IAEb,gBAAgB,EAAE,MAAM,EAAE,CAAuB;IAC7D,OAAO,CAAC,MAAM,CAAC,eAAe,CAAoB;IAClD,MAAM,CAAC,WAAW,IAAI,iBAAiB;IAO3B,MAAM;;MAA+C;IAC3D,QAAQ;IAIF,UAAU,EAAE,MAAM,CAAQ;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,UAAU;IAKV,UAAU;;;;;IAKV,YAAY,CAAC,GAAG,EAAE,aAAa;IAI/B,SAAS,CAAC,SAAS;IAgEnB,SAAS,CAAC,WAAW;IAarB,OAAO,CAAC,QAAQ,CAAkD;IAClE,SAAS,CAAC,SAAS,CAAC,OAAO,UAAQ;cAoCnB,SAAS;CAc5B"} \ No newline at end of file diff --git a/types/UI/Store/RightPanelStore/RightPanelStore.d.ts b/types/UI/Store/RightPanelStore/RightPanelStore.d.ts index 0bb2664..a1028f9 100644 --- a/types/UI/Store/RightPanelStore/RightPanelStore.d.ts +++ b/types/UI/Store/RightPanelStore/RightPanelStore.d.ts @@ -6,6 +6,7 @@ import { DrillingStore } from "./DrillingStore"; import { LightStore } from "./LightStore"; import { Modeling2Store } from "./Modeling2Store"; import { ModelingStore } from "./ModelingStore"; +import { ReservedEdgeStore } from "./ReservedEdgeStore"; import { SealingStore } from "./SealingStore"; export declare class RightPanelStore { m_TabId: TabId; @@ -17,6 +18,7 @@ export declare class RightPanelStore { lightStore: LightStore; sealingStore: SealingStore; boardEdgeRemarksStore: BoardEdgeRemarksStore; + reservedEdgeStore: ReservedEdgeStore; drillingStore: DrillingStore; modeling2Store: Modeling2Store; modeling3Store: Modeling2Store; diff --git a/types/UI/Store/RightPanelStore/RightPanelStore.d.ts.map b/types/UI/Store/RightPanelStore/RightPanelStore.d.ts.map index 8783e1e..d8e6603 100644 --- a/types/UI/Store/RightPanelStore/RightPanelStore.d.ts.map +++ b/types/UI/Store/RightPanelStore/RightPanelStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"RightPanelStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/RightPanelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAIxD,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,qBAAa,eAAe;IAEZ,OAAO,EAAE,KAAK,CAAoB;IAClC,QAAQ,UAAS;IACjB,YAAY,EAAE,KAAK,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,gBAAgB,EAAE,CAAM;IAC5D,aAAa,gBAAuB;IACpC,UAAU,aAA4B;IACtC,YAAY,eAA8B;IAC1C,qBAAqB,wBAAuC;IAC5D,aAAa,gBAAuB;IACpC,cAAc,iBAAwB;IACtC,cAAc,iBAAwB;IACtC,QAAQ;gBAA6C,WAAW;OAAQ;IACxE,OAAO;IAuBP,OAAO,CAAC,MAAM,CAAC,eAAe,CAAkB;IAChD,MAAM,CAAC,WAAW,IAAI,eAAe;IAOrC,uBAAuB,YAAa,MAAM,UAOxC;CACL"} \ No newline at end of file +{"version":3,"file":"RightPanelStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/RightPanelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAIxD,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,qBAAa,eAAe;IAEZ,OAAO,EAAE,KAAK,CAAoB;IAClC,QAAQ,UAAS;IACjB,YAAY,EAAE,KAAK,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,gBAAgB,EAAE,CAAM;IAC5D,aAAa,gBAAuB;IACpC,UAAU,aAA4B;IACtC,YAAY,eAA8B;IAC1C,qBAAqB,wBAAuC;IAC5D,iBAAiB,oBAAmC;IACpD,aAAa,gBAAuB;IACpC,cAAc,iBAAwB;IACtC,cAAc,iBAAwB;IACtC,QAAQ;gBAA6C,WAAW;OAAQ;IACxE,OAAO;IAuBP,OAAO,CAAC,MAAM,CAAC,eAAe,CAAkB;IAChD,MAAM,CAAC,WAAW,IAAI,eAAe;IAOrC,uBAAuB,YAAa,MAAM,UAOxC;CACL"} \ No newline at end of file diff --git a/types/UI/Store/RightPanelStore/SealingStore.d.ts b/types/UI/Store/RightPanelStore/SealingStore.d.ts index 547824a..ffe5b98 100644 --- a/types/UI/Store/RightPanelStore/SealingStore.d.ts +++ b/types/UI/Store/RightPanelStore/SealingStore.d.ts @@ -1,13 +1,21 @@ +import { SealSolid } from "../../../DatabaseServices/3DSolid/SealSolid"; +import { Curve } from "../../../DatabaseServices/Entity/Curve"; import { IConfigOption } from "../../Components/Board/UserConfigComponent"; import { IConfigStore } from "../BoardStore"; import { BoardEdgesEditor } from "./BoardEdgesEditor"; +interface IHighSizeItem { + size: string; + sealColor: string; +} export declare class SealingStore extends BoardEdgesEditor implements IConfigStore { isNotUpdateStore: boolean; - highSizes: string[]; + highSizes: IHighSizeItem[]; + curvesMap: Map; private static _SingleInstance; static GetInstance(): SealingStore; option: { - highSizes: string[]; + version: number; + highSizes: IHighSizeItem[]; }; InitData(): Promise; configName: string; @@ -15,7 +23,8 @@ export declare class SealingStore extends BoardEdgesEditor implements IConfigSto InitOption(): void; SaveConfig(): { option: { - highSizes: string[]; + version: number; + highSizes: IHighSizeItem[]; }; }; UpdateOption(cof: IConfigOption): void; @@ -26,4 +35,5 @@ export declare class SealingStore extends BoardEdgesEditor implements IConfigSto protected WriteData(): Promise; Check(): boolean; } +export {}; //# sourceMappingURL=SealingStore.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/RightPanelStore/SealingStore.d.ts.map b/types/UI/Store/RightPanelStore/SealingStore.d.ts.map index f8826ed..958b8a2 100644 --- a/types/UI/Store/RightPanelStore/SealingStore.d.ts.map +++ b/types/UI/Store/RightPanelStore/SealingStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"SealingStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/SealingStore.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAoB,MAAM,oBAAoB,CAAC;AAExE,qBAAa,YAAa,SAAQ,gBAAiB,YAAW,YAAY;IAEtE,gBAAgB,UAAS;IAEb,SAAS,EAAE,MAAM,EAAE,CAAuB;IACtD,OAAO,CAAC,MAAM,CAAC,eAAe,CAAe;IAC7C,MAAM,CAAC,WAAW,IAAI,YAAY;IAOtB,MAAM;;MAAiC;IAC7C,QAAQ;IAIF,UAAU,EAAE,MAAM,CAAQ;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,UAAU;IAKV,UAAU;;;;;IAKV,YAAY,CAAC,GAAG,EAAE,aAAa;IAI/B,SAAS,CAAC,SAAS;IAgEnB,SAAS,CAAC,WAAW;IAarB,OAAO,CAAC,QAAQ,CAA4C;IAC5D,SAAS,CAAC,SAAS,CAAC,OAAO,UAAQ;cAoCnB,SAAS;IAezB,KAAK;CA2BR"} \ No newline at end of file +{"version":3,"file":"SealingStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/SealingStore.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,6CAA6C,CAAC;AAExE,OAAO,EAAE,KAAK,EAAE,MAAM,wCAAwC,CAAC;AAI/D,OAAO,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAE3E,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,gBAAgB,EAAoB,MAAM,oBAAoB,CAAC;AACxE,UAAU,aAAa;IAEnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,YAAa,SAAQ,gBAAiB,YAAW,YAAY;IAEtE,gBAAgB,UAAS;IAEb,SAAS,EAAE,aAAa,EAAE,CAAgD;IACtF,SAAS,wBAA+B;IAGxC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAe;IAC7C,MAAM,CAAC,WAAW,IAAI,YAAY;IAOtB,MAAM;;;MAGhB;IACI,QAAQ;IAIF,UAAU,EAAE,MAAM,CAAQ;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,UAAU;IAMV,UAAU;;;;;;IAKV,YAAY,CAAC,GAAG,EAAE,aAAa;IAe/B,SAAS,CAAC,SAAS;IAmFnB,SAAS,CAAC,WAAW;IAarB,OAAO,CAAC,QAAQ,CAA4C;IAC5D,SAAS,CAAC,SAAS,CAAC,OAAO,UAAQ;cAqCnB,SAAS;IAqBzB,KAAK;CA2BR"} \ No newline at end of file diff --git a/types/UI/Store/RightPanelStore/TemplateParamPanelStore.d.ts.map b/types/UI/Store/RightPanelStore/TemplateParamPanelStore.d.ts.map index e1e49bc..a46ba0e 100644 --- a/types/UI/Store/RightPanelStore/TemplateParamPanelStore.d.ts.map +++ b/types/UI/Store/RightPanelStore/TemplateParamPanelStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateParamPanelStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/TemplateParamPanelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,SAAS,EAAgB,MAAM,mBAAmB,CAAC;AAY1E,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAEnF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIlD,qBAAa,uBAAuB;IAGpB,YAAY,UAAS;IAErB,UAAU,UAAS;IAE/B,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,kBAAkB,CAAS;IACvB,MAAM,EAAE,cAAc,EAAE,CAAM;IAC9B,SAAS,EAAE,SAAS,EAAE,CAAM;IAE5B,SAAS,UAAQ;IACjB,QAAQ,UAAS;IACjB,MAAM,UAAS;IACf,gBAAgB,UAAS;IACzB,gBAAgB,UAAS;IAErC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,cAAc,CAAC;IAG3B,OAAO;IAKP,OAAO,CAAC,MAAM,CAAC,eAAe,CAA0B;IACxD,MAAM,CAAC,WAAW,IAAI,uBAAuB;IAS7C,IAAI,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAM/B;IAED,OAAO,CAAC,gBAAgB,CAA0B;IAElD,OAAO,CAAC,IAAI;IA4EZ,kBAAkB,IAAI,cAAc,GAAG,SAAS;IAuFhD,uBAAuB,aAAc,cAAc,KAAG,cAAc,EAAE,CAcpE;IAEF,iBAAiB,aAAc,cAAc,KAAG,SAAS,CAkCvD;IAIF,UAAU;IAyHV,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI;IAavE,YAAY,CAAC,QAAQ,EAAE,cAAc;CAcxC"} \ No newline at end of file +{"version":3,"file":"TemplateParamPanelStore.d.ts","sourceRoot":"","sources":["../../../../../src/UI/Store/RightPanelStore/TemplateParamPanelStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,SAAS,EAAgB,MAAM,mBAAmB,CAAC;AAY1E,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAEnF,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAIlD,qBAAa,uBAAuB;IAGpB,YAAY,UAAS;IAErB,UAAU,UAAS;IAE/B,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,kBAAkB,CAAS;IACvB,MAAM,EAAE,cAAc,EAAE,CAAM;IAC9B,SAAS,EAAE,SAAS,EAAE,CAAM;IAE5B,SAAS,UAAQ;IACjB,QAAQ,UAAS;IACjB,MAAM,UAAS;IACf,gBAAgB,UAAS;IACzB,gBAAgB,UAAS;IAErC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,cAAc,CAAC;IAG3B,OAAO;IAKP,OAAO,CAAC,MAAM,CAAC,eAAe,CAA0B;IACxD,MAAM,CAAC,WAAW,IAAI,uBAAuB;IAS7C,IAAI,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAM/B;IAED,OAAO,CAAC,gBAAgB,CAA0B;IAElD,OAAO,CAAC,IAAI;IA4EZ,kBAAkB,IAAI,cAAc,GAAG,SAAS;IAuFhD,uBAAuB,aAAc,cAAc,KAAG,cAAc,EAAE,CAcpE;IAEF,iBAAiB,aAAc,cAAc,KAAG,SAAS,CAkCvD;IAIF,UAAU;IAmIV,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI;IAavE,YAAY,CAAC,QAAQ,EAAE,cAAc;CAexC"} \ No newline at end of file diff --git a/types/UI/Store/TemplateEditorStore.d.ts.map b/types/UI/Store/TemplateEditorStore.d.ts.map index 317e69c..a4d03ea 100644 --- a/types/UI/Store/TemplateEditorStore.d.ts.map +++ b/types/UI/Store/TemplateEditorStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateEditorStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/TemplateEditorStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAInD,OAAO,EAA4B,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAE1G,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,eAAO,MAAM,YAAY,UAAuC,CAAC;AAEjE,qBAAa,mBAAoB,SAAQ,SAAU,YAAW,YAAY;IAE1D,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,QAAQ,EAAE,cAAc,CAAC;IAEb,MAAM,EAAE,cAAc,EAAE,CAAM;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IACtC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAC5B,WAAW,EAAE,SAAS,EAAE,CAAM;IAC1C,WAAW,SAAK;IAChB,UAAU;IAqBV,UAAU;IAIV,YAAY,CAAC,GAAG,EAAE,aAAa;IAoC/B,UAAU;CAOb"} \ No newline at end of file +{"version":3,"file":"TemplateEditorStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/TemplateEditorStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAInD,OAAO,EAA4B,cAAc,EAAE,MAAM,gDAAgD,CAAC;AAE1G,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,eAAO,MAAM,YAAY,UAAuC,CAAC;AAEjE,qBAAa,mBAAoB,SAAQ,SAAU,YAAW,YAAY;IAE1D,UAAU,SAAQ;IAClB,YAAY,EAAE,MAAM,EAAE,CAAM;IACxC,QAAQ,EAAE,cAAc,CAAC;IAEb,MAAM,EAAE,cAAc,EAAE,CAAM;IAC9B,iBAAiB,EAAE,MAAM,CAAC;IACtC,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAa;IAC5B,WAAW,EAAE,SAAS,EAAE,CAAM;IAC1C,WAAW,SAAK;IAChB,UAAU;IA8BV,UAAU;IAIV,YAAY,CAAC,GAAG,EAAE,aAAa;IAoC/B,UAAU;CAOb"} \ No newline at end of file diff --git a/types/UI/Store/TemplateManageStore.d.ts b/types/UI/Store/TemplateManageStore.d.ts index b48b251..21ced58 100644 --- a/types/UI/Store/TemplateManageStore.d.ts +++ b/types/UI/Store/TemplateManageStore.d.ts @@ -3,6 +3,7 @@ import { CADFiler } from "../../DatabaseServices/CADFiler"; import { IDrawBoardAutoCutOption } from "./OptionInterface/IOptionInterface"; import { IHasAutoCutOption, ITemplateManageOption, TemplateManageOption } from "./OptionInterface/TemplateManageOption"; export declare class TempalteManageStore extends Singleton { + getImageDefaultTemplate(): Promise; UpdateOption(m_Option: ITemplateManageOption, autoCutOption: IDrawBoardAutoCutOption): Promise; SaveConfig(newConfig: TemplateManageOption): Promise; WriteFlie(cof: ITemplateManageOption, autoCutOption: IDrawBoardAutoCutOption): any[]; diff --git a/types/UI/Store/TemplateManageStore.d.ts.map b/types/UI/Store/TemplateManageStore.d.ts.map index 0371f21..0aacff3 100644 --- a/types/UI/Store/TemplateManageStore.d.ts.map +++ b/types/UI/Store/TemplateManageStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TemplateManageStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/TemplateManageStore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAG3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAGxH,qBAAa,mBAAoB,SAAQ,SAAS;IAGxC,YAAY,CAAC,QAAQ,EAAE,qBAAqB,EAAE,aAAa,EAAE,uBAAuB;IAkDpF,UAAU,CAAC,SAAS,EAAE,oBAAoB;IAahD,SAAS,CAAC,GAAG,EAAE,qBAAqB,EAAE,aAAa,EAAE,uBAAuB;IA2B5E,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE;CAU5D;AAED,eAAO,MAAM,mBAAmB,qBAAoC,CAAC"} \ No newline at end of file +{"version":3,"file":"TemplateManageStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/TemplateManageStore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAG3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAGxH,qBAAa,mBAAoB,SAAQ,SAAS;IAExC,uBAAuB;IAWvB,YAAY,CAAC,QAAQ,EAAE,qBAAqB,EAAE,aAAa,EAAE,uBAAuB;IAsEpF,UAAU,CAAC,SAAS,EAAE,oBAAoB;IAahD,SAAS,CAAC,GAAG,EAAE,qBAAqB,EAAE,aAAa,EAAE,uBAAuB;IAgC5E,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE;CAU5D;AAED,eAAO,MAAM,mBAAmB,qBAAoC,CAAC"} \ No newline at end of file diff --git a/types/UI/Store/TopPanelStore.d.ts b/types/UI/Store/TopPanelStore.d.ts index aac9606..51d8fbf 100644 --- a/types/UI/Store/TopPanelStore.d.ts +++ b/types/UI/Store/TopPanelStore.d.ts @@ -1,3 +1,4 @@ +import { RequestStatus } from "../../Common/Request"; import { IFileInfo } from "../../DatabaseServices/FileServer"; export interface ICloudInfo { zone_size: string; @@ -22,7 +23,10 @@ export declare class TopPanelStore { left_size: string; used_size: string; used_percentage: string; + left_percentage: string; }; + privateFileDirCapacity: string[][]; + fileDetailsInfo: string[][]; userName: string; editoring: boolean; dealerInfo: IDealerInfo; @@ -37,8 +41,11 @@ export declare class TopPanelStore { UpdateFileList(): Promise; /**更新云盘信息 */ UpdateClound(): Promise; + /**私有文件目录容量查询 */ + UpdatePrivateFileDirCapacity(): Promise; onToggleTheme(): void; private AddPathByFileInfos; private getPath; + private sizeInfoToPercentage; } //# sourceMappingURL=TopPanelStore.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/TopPanelStore.d.ts.map b/types/UI/Store/TopPanelStore.d.ts.map index ba72d4b..b2cf6bb 100644 --- a/types/UI/Store/TopPanelStore.d.ts.map +++ b/types/UI/Store/TopPanelStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"TopPanelStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/TopPanelStore.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAG9D,MAAM,WAAW,UAAU;IAEvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAExB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACrB;AASD,qBAAa,aAAa;IAEV,gBAAgB,EAAE,OAAO,CAAS;IAElC,UAAU,EAAE,SAAS,EAAE,CAAM;IAC7B,YAAY,UAAS;IACrB,OAAO,UAAS;IAChB,UAAU,UAAS;IACnB,QAAQ,UAAQ;IAChB,SAAS;;;;;MAKnB;IACU,QAAQ,SAAM;IACd,SAAS,UAAS;IAClB,UAAU,EAAE,WAAW,CAAC;IACpC,YAAY,UAAS;IACrB,UAAU,UAAS;IACnB,YAAY,UAAS;IACrB,YAAY,UAAS;IACrB,MAAM,EAAE,MAAM,CAAC;;IAkDf,OAAO,CAAC,MAAM,CAAC,eAAe,CAAgB;IAC9C,MAAM,CAAC,WAAW,IAAI,aAAa;IAO7B,cAAc;IAapB,YAAY;IACN,YAAY;IA6BlB,aAAa;YAGC,kBAAkB;IAehC,OAAO,CAAC,OAAO;CAyClB"} \ No newline at end of file +{"version":3,"file":"TopPanelStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/TopPanelStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyB,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG5E,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAG9D,MAAM,WAAW,UAAU;IAEvB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAExB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACrB;AASD,qBAAa,aAAa;IAEV,gBAAgB,EAAE,OAAO,CAAS;IAElC,UAAU,EAAE,SAAS,EAAE,CAAM;IAC7B,YAAY,UAAS;IACrB,OAAO,UAAS;IAChB,UAAU,UAAS;IACnB,QAAQ,UAAQ;IAChB,SAAS;;;;;;MAMnB;IACU,sBAAsB,EAAE,MAAM,EAAE,EAAE,CAAM;IACxC,eAAe,EAAE,MAAM,EAAE,EAAE,CAAM;IACjC,QAAQ,SAAM;IACd,SAAS,UAAS;IAClB,UAAU,EAAE,WAAW,CAAC;IACpC,YAAY,UAAS;IACrB,UAAU,UAAS;IACnB,YAAY,UAAS;IACrB,YAAY,UAAS;IACrB,MAAM,EAAE,MAAM,CAAC;;IAkDf,OAAO,CAAC,MAAM,CAAC,eAAe,CAAgB;IAC9C,MAAM,CAAC,WAAW,IAAI,aAAa;IAO7B,cAAc;IAapB,YAAY;IACN,YAAY;IAuClB,gBAAgB;IACV,4BAA4B;IAuBlC,aAAa;YAGC,kBAAkB;IAehC,OAAO,CAAC,OAAO;IA0Cf,OAAO,CAAC,oBAAoB,CAiB1B;CACL"} \ No newline at end of file diff --git a/types/UI/Store/UserConfigStore.d.ts b/types/UI/Store/UserConfigStore.d.ts index 75eb7bb..83bdd52 100644 --- a/types/UI/Store/UserConfigStore.d.ts +++ b/types/UI/Store/UserConfigStore.d.ts @@ -23,17 +23,23 @@ export declare class UserConfigStore extends Singleton { InitWinerackConfig(): Promise; InitUserConfig(): Promise; InitBBSTabIndex(): Promise; + InitBBSModelStore(): Promise; InitCommonPanelStore(): Promise; InitDatalistStore(): Promise; InitModelingStore(): Promise; InitDoorRelatesInfoStore(): Promise; + InitAutoHoleFaceSettingStore(): Promise; + InitResourceStoreIcon(): Promise; + InitFeedConfigStore(): Promise; private InitDoorWindowPanelStore; + InitOneClickInspectionStore(): Promise; private InitConfigListMap; /**处理用户登陆后的信息 */ InitUserData(): Promise; GetConfig(type: BoardModalType): Promise; private ChangeDrillRuleMap; GetAllConfigs(key: BoardModalType | string, isChangeRuleMap?: boolean): Promise | undefined>; + SubAccountInitSaveConfig(type: BoardModalType, store: IConfigStore): Promise; SaveConfig(type: BoardModalType, store: IConfigStore, option?: ISaveOption, tagName?: string): Promise; UploadUserConfigNames(dbStore: IndexedDbStore): Promise; DeleteConfig(type: BoardModalType, store: IConfigStore): Promise; diff --git a/types/UI/Store/UserConfigStore.d.ts.map b/types/UI/Store/UserConfigStore.d.ts.map index 25b6ca9..3f3cba6 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":"AAUA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAWnD,OAAO,EAAE,cAAc,EAAa,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAQxE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAM5C,OAAO,EAAE,SAAS,EAA6F,MAAM,oCAAoC,CAAC;AAS1J,UAAU,WAAW;IAEjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACrC;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;IAwBf,0BAA0B;IAY1B,kBAAkB;IAQlB,cAAc;IAmDd,eAAe;IAQf,oBAAoB;IAiBpB,iBAAiB;IASjB,iBAAiB;IAcjB,wBAAwB;IAS9B,OAAO,CAAC,wBAAwB;YAOlB,iBAAiB;IAc/B,gBAAgB;IACV,YAAY;IAoCZ,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAepE,OAAO,CAAC,kBAAkB;IAapB,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,EAAE,eAAe,UAAO,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IAiClH,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,GAAE,WAAgB,EAAE,OAAO,CAAC,EAAE,MAAM;IAmFhG,qBAAqB,CAAC,OAAO,EAAE,cAAc;IAU7C,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY;IAsE5D;;MAEE;IACI,eAAe,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAuDjG,iBAAiB,MAAa,MAAM,QAAQ,cAAc,SAAS,YAAY,mBAW7E;IACF,OAAO,CAAC,gBAAgB;IAsBlB,eAAe;IA+Cf,iBAAiB;IAKjB,eAAe,CAAC,GAAG,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;KAAE,EAAE;IAwBpD,kBAAkB;IAalB,aAAa;IAMb,aAAa;IAwCnB,aAAa;CAehB;AAED,eAAO,MAAM,eAAe,iBAAgC,CAAC"} \ No newline at end of file +{"version":3,"file":"UserConfigStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/UserConfigStore.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAWnD,OAAO,EAAE,cAAc,EAAa,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAUxE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAO5C,OAAO,EAAE,SAAS,EAAuM,MAAM,oCAAoC,CAAC;AASpQ,UAAU,WAAW;IAEjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACrC;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;IAwBf,0BAA0B;IAY1B,kBAAkB;IAQlB,cAAc;IAmDd,eAAe;IAQf,iBAAiB;IAQjB,oBAAoB;IAiBpB,iBAAiB;IASjB,iBAAiB;IAcjB,wBAAwB;IAWxB,4BAA4B;IAS5B,qBAAqB;IASrB,mBAAmB;IAazB,OAAO,CAAC,wBAAwB;IAO1B,2BAA2B;YASnB,iBAAiB;IAc/B,gBAAgB;IACV,YAAY;IAyCZ,SAAS,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAepE,OAAO,CAAC,kBAAkB;IAapB,aAAa,CAAC,GAAG,EAAE,cAAc,GAAG,MAAM,EAAE,eAAe,UAAO,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IAiClH,wBAAwB,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY;IAsDlE,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,GAAE,WAAgB,EAAE,OAAO,CAAC,EAAE,MAAM;IAmFhG,qBAAqB,CAAC,OAAO,EAAE,cAAc;IAU7C,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY;IAuE5D;;MAEE;IACI,eAAe,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAuDjG,iBAAiB,MAAa,MAAM,QAAQ,cAAc,SAAS,YAAY,mBAW7E;IACF,OAAO,CAAC,gBAAgB;IAsBlB,eAAe;IA8Cf,iBAAiB;IAKjB,eAAe,CAAC,GAAG,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;KAAE,EAAE;IAwBpD,kBAAkB;IAalB,aAAa;IAMb,aAAa;IAwCnB,aAAa;CAmBhB;AAED,eAAO,MAAM,eAAe,iBAAgC,CAAC"} \ No newline at end of file diff --git a/types/UI/Store/WineRackInterface.d.ts b/types/UI/Store/WineRackInterface.d.ts index f4da684..a225b7d 100644 --- a/types/UI/Store/WineRackInterface.d.ts +++ b/types/UI/Store/WineRackInterface.d.ts @@ -56,6 +56,11 @@ export interface IWineRackOption extends IBaseOption { isExtendsBH2: boolean; followNarrow: boolean; useBoardProcessOption?: boolean; + boardMatName: string; + material: string; + color: string; + roomName: string; + cabinetName: string; } export interface IR2WROption { depth: number; diff --git a/types/UI/Store/WineRackInterface.d.ts.map b/types/UI/Store/WineRackInterface.d.ts.map index b22e9f6..ba2e378 100644 --- a/types/UI/Store/WineRackInterface.d.ts.map +++ b/types/UI/Store/WineRackInterface.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"WineRackInterface.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/WineRackInterface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEjE,oBAAY,aAAa;IAErB,OAAO,IAAI;IACX,OAAO,IAAI;CACd;AAED,UAAU;AACV,oBAAY,cAAc;IAEtB,YAAY,IAAI,CAAC,MAAM;IACvB,WAAW,IAAI;CAClB;AAED,oBAAY,eAAe;IAEvB,OAAO,IAAI;IACX,OAAO,IAAI;IACX,KAAK,IAAI;CACZ;AAED,UAAU;AACV,oBAAY,SAAS;IAEjB,QAAQ,IAAI;IACZ,OAAO,IAAI;IACX,QAAQ,IAAI;CACf;AAED,iBAAiB;AACjB,oBAAY,QAAQ;IAEhB,IAAI,IAAI;IACR,KAAK,IAAI;CACZ;AAED,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAEhD,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,EAAE,cAAc,CAAC;IAC9B,SAAS,EAAE,eAAe,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAExB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IACjC,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IACnC,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IACnC,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CACvC"} \ No newline at end of file +{"version":3,"file":"WineRackInterface.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/WineRackInterface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEjE,oBAAY,aAAa;IAErB,OAAO,IAAI;IACX,OAAO,IAAI;CACd;AAED,UAAU;AACV,oBAAY,cAAc;IAEtB,YAAY,IAAI,CAAC,MAAM;IACvB,WAAW,IAAI;CAClB;AAED,oBAAY,eAAe;IAEvB,OAAO,IAAI;IACX,OAAO,IAAI;IACX,KAAK,IAAI;CACZ;AAED,UAAU;AACV,oBAAY,SAAS;IAEjB,QAAQ,IAAI;IACZ,OAAO,IAAI;IACX,QAAQ,IAAI;CACf;AAED,iBAAiB;AACjB,oBAAY,QAAQ;IAEhB,IAAI,IAAI;IACR,KAAK,IAAI;CACZ;AAED,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAEhD,IAAI,EAAE,aAAa,CAAC;IACpB,aAAa,EAAE,cAAc,CAAC;IAC9B,SAAS,EAAE,eAAe,CAAC;IAC3B,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAExB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IACjC,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IACnC,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IACnC,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CACvC"} \ No newline at end of file diff --git a/types/UI/Store/WineRackStore.d.ts.map b/types/UI/Store/WineRackStore.d.ts.map index 8f8cd0a..a97891e 100644 --- a/types/UI/Store/WineRackStore.d.ts.map +++ b/types/UI/Store/WineRackStore.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"WineRackStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/WineRackStore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uEAAuE,CAAC;AAE/G,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAkB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtE,qBAAa,aAAc,SAAQ,UAAU,CAAC,eAAe,CAAC;IAE1D,cAAc,EAAE,sBAAsB,CAAC;IAC3B,QAAQ,EAAE,eAAe,CAA4C;IACjF,cAAc;IAId,UAAU;IAKV,UAAU;IAOV,YAAY,CAAC,GAAG,EAAE,aAAa;IA+B/B,mCAAmC;CAItC"} \ No newline at end of file +{"version":3,"file":"WineRackStore.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/WineRackStore.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uEAAuE,CAAC;AAE/G,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAkB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtE,qBAAa,aAAc,SAAQ,UAAU,CAAC,eAAe,CAAC;IAElD,cAAc,EAAE,sBAAsB,CAAC;IACnC,QAAQ,EAAE,eAAe,CAA4C;IACjF,cAAc;IAId,UAAU;IAKV,UAAU;IAOV,YAAY,CAAC,GAAG,EAAE,aAAa;IAwC/B,mCAAmC;CAItC"} \ No newline at end of file diff --git a/types/UI/Store/drillInterface.d.ts b/types/UI/Store/drillInterface.d.ts index a9fe4f1..fb945bc 100644 --- a/types/UI/Store/drillInterface.d.ts +++ b/types/UI/Store/drillInterface.d.ts @@ -46,10 +46,14 @@ export interface DrillingOption extends IBaseOption { woodPinPos: string; ymjPos: string; canSameType: boolean; + useNormalGroup: boolean; useTemp: boolean; tempId: string; tempName: string; - autoDeviation?: boolean; allowPxl: boolean; + goodsId: string; + goodsSn: string; + woodGoodsId: string; + woodGoodsSn: string; } //# sourceMappingURL=drillInterface.d.ts.map \ No newline at end of file diff --git a/types/UI/Store/drillInterface.d.ts.map b/types/UI/Store/drillInterface.d.ts.map index 0edbe8a..38f0933 100644 --- a/types/UI/Store/drillInterface.d.ts.map +++ b/types/UI/Store/drillInterface.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"drillInterface.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/drillInterface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEjE,oBAAY,WAAW;IAEnB,UAAU,OAAO;IACjB,SAAS,UAAU;CACtB;AACD;;;GAGG;AACH,MAAM,WAAW,cAAe,SAAQ,WAAW;IAE/C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;CACrB"} \ No newline at end of file +{"version":3,"file":"drillInterface.d.ts","sourceRoot":"","sources":["../../../../src/UI/Store/drillInterface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEjE,oBAAY,WAAW;IAEnB,UAAU,OAAO;IACjB,SAAS,UAAU;CACtB;AACD;;;GAGG;AACH,MAAM,WAAW,cAAe,SAAQ,WAAW;IAE/C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACvB"} \ No newline at end of file diff --git a/types/csg/core/FuzzyFactory3d.d.ts b/types/csg/core/FuzzyFactory3d.d.ts index 3c300e2..2e01596 100644 --- a/types/csg/core/FuzzyFactory3d.d.ts +++ b/types/csg/core/FuzzyFactory3d.d.ts @@ -1,6 +1,6 @@ import { FuzzyFactory } from "./FuzzyFactory"; -import { Polygon } from "./math/Polygon3"; import { Plane } from "./math/Plane"; +import { Polygon } from "./math/Polygon3"; import { Vertex3D } from "./math/Vertex3"; export declare class FuzzyCSGFactory { vertexfactory: FuzzyFactory; diff --git a/types/csg/core/FuzzyFactory3d.d.ts.map b/types/csg/core/FuzzyFactory3d.d.ts.map index 1edb59d..8622139 100644 --- a/types/csg/core/FuzzyFactory3d.d.ts.map +++ b/types/csg/core/FuzzyFactory3d.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"FuzzyFactory3d.d.ts","sourceRoot":"","sources":["../../../../src/csg/core/FuzzyFactory3d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,qBAAa,eAAe;IAExB,aAAa,eAA4B;IACzC,YAAY,eAA4B;;IAGxC,SAAS,CAAC,YAAY,EAAE,QAAQ,GAAG,QAAQ;IAO3C,QAAQ,CAAC,WAAW,EAAE,KAAK,GAAG,KAAK;IAOnC,UAAU,CAAC,aAAa,EAAE,OAAO,EAAE,aAAa,UAAgB,GAAG,OAAO;CA2B7E"} \ No newline at end of file +{"version":3,"file":"FuzzyFactory3d.d.ts","sourceRoot":"","sources":["../../../../src/csg/core/FuzzyFactory3d.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,qBAAa,eAAe;IAExB,aAAa,eAA4B;IACzC,YAAY,eAA4B;;IAGxC,SAAS,CAAC,YAAY,EAAE,QAAQ,GAAG,QAAQ;IAO3C,QAAQ,CAAC,WAAW,EAAE,KAAK,GAAG,KAAK;IAOnC,UAAU,CAAC,aAAa,EAAE,OAAO,EAAE,aAAa,UAAgB,GAAG,OAAO;CA2B7E"} \ No newline at end of file diff --git a/types/csg/core/math/Vector2.d.ts.map b/types/csg/core/math/Vector2.d.ts.map index 2956d8c..3b5a360 100644 --- a/types/csg/core/math/Vector2.d.ts.map +++ b/types/csg/core/math/Vector2.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Vector2.d.ts","sourceRoot":"","sources":["../../../../../src/csg/core/math/Vector2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,qBAAa,QAAS,SAAQ,OAAO;IAGjC,UAAU,CAAC,CAAC,EAAE,MAAM;IAIpB,KAAK;IAKL,MAAM;IAKN,KAAK,CAAC,CAAC,EAAE,OAAO;CAInB"} \ No newline at end of file +{"version":3,"file":"Vector2.d.ts","sourceRoot":"","sources":["../../../../../src/csg/core/math/Vector2.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,qBAAa,QAAS,SAAQ,OAAO;IAGjC,UAAU,CAAC,CAAC,EAAE,MAAM;IAIpB,KAAK,IAEsC,IAAI;IAG/C,MAAM;IAKN,KAAK,CAAC,CAAC,EAAE,OAAO;CAInB"} \ No newline at end of file diff --git a/types/csg/core/math/Vector3.d.ts.map b/types/csg/core/math/Vector3.d.ts.map index 63b0c4e..c49bf2f 100644 --- a/types/csg/core/math/Vector3.d.ts.map +++ b/types/csg/core/math/Vector3.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"Vector3.d.ts","sourceRoot":"","sources":["../../../../../src/csg/core/math/Vector3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC;;GAEG;AACH,qBAAa,QAAS,SAAQ,OAAO;IAEjC,KAAK;IAKL,uBAAuB;IAcvB,QAAQ;CAYX"} \ No newline at end of file +{"version":3,"file":"Vector3.d.ts","sourceRoot":"","sources":["../../../../../src/csg/core/math/Vector3.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC;;GAEG;AACH,qBAAa,QAAS,SAAQ,OAAO;IAEjC,KAAK,IAE8C,IAAI;IAGvD,uBAAuB;IAcvB,QAAQ;CAYX"} \ No newline at end of file