You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
webcad-api/api.cjs.js.map

1 line
2.0 MiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{"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<string, DrillingOption[]> = 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<Texture> { return; }\r\n async LoadMetalEnv(): Promise<Texture> { 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<any>;\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<string, any>();\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<T extends CADObject = CADObject>\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<T extends ISerialize = CADObject>(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<this>;\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<this>;\r\n\r\n get Id(): ObjectId<this>\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<this>;\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<number, ObjectId> = 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<RenderType, Object3D>();\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 (<PhysicalMaterialRecord>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<Vector3>\r\n {\r\n return [];\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\r\n * @param {Array<number>} indexList 拉伸点索引列表.\r\n * @param {Vector3} vec 移动向量\r\n */\r\n MoveStretchPoints(indexList: Array<number>, 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<any> | 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<T>(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<T extends Vector2 | Vector3>(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<Object3D>): 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<string, compareVectorFn> = 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轴坐标系统之间的坐标系统坐标系统的原点坐标系和原点坐标系统坐标轴的坐标系分别设置为XAxisYAxis和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<T extends { x: number, y: number, z: number; }>(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<any>} arr 需要操作的数组\r\n * @param {*} el 需要移除的元素\r\n */\r\nexport function arrayRemove<T>(arr: Array<T>, el: T): Array<T>\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<T>(arr: Array<T>, el: T): Array<T>\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<T>(arr: Array<T>, checkFuntion: (e: T) => boolean): Array<T>\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<T>(arr: Array<T>): T\r\n{\r\n return arr[0];\r\n}\r\n\r\nexport function arrayLast<T>(arr: { [key: number]: T, length: number; }): T\r\n{\r\n return arr[arr.length - 1];\r\n}\r\n\r\nexport function FindLast<T>(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<T>} arr\r\n * @returns {Array<T>} 返回自身\r\n */\r\nexport function arraySortByNumber<T>(arr: Array<T>): Array<T>\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<string, any>, reverse: boolean = false): Map<string, any>\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<T>} 返回自身\r\n */\r\nexport function arrayRemoveDuplicateBySort<T>(arr: Array<T>, checkFuction: (e1: T, e2: T) => boolean = checkEqual): Array<T>\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<T>(arr: Array<T>, mapFunc: (v: T) => T): Array<T>\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<T>(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<T>(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<T>(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<T>(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<T>(s: Set<T>, fn: (el: T) => boolean): Set<T>\r\n{\r\n let ns = new Set<T>();\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<number, LineBasicMaterial>();\r\n private static _BasicMaterialMap = new Map<number, MeshBasicMaterial>();\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<number, LineDashedMaterial>();\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<number, MeshBasicMaterial>();\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<string, ShaderMaterial> = 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<string, MeshBasicMaterial> = 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<string, MeshBasicMaterial> = 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<BufferGeometry, Geometry>();\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<any> { 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<Curve> { return; }\r\n //未完善\r\n GetCurveAtParamRange(startParam: number, EndParam: number): Array<Curve> { return; }\r\n GetSplitCurvesByPts(pt: Vector3[] | Vector3): Array<Curve>\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<Curve> { 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<number>, 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<THREE.Vector3>\r\n {\r\n return [this.StartPoint, this.EndPoint];\r\n }\r\n MoveStretchPoints(indexList: Array<number>, 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<Curve>();\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<Line>\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<Vector3>\r\n {\r\n return this.GetGripPoints();\r\n }\r\n GetGripPoints(): Array<Vector3>\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<number>, vec: Vector3)\r\n {\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n }\r\n MoveGripPoints(indexList: Array<number>, 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<Arc>();\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<Vector3>\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<number>, 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<Vector3>\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<number>, 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<number, Vector3>();\r\n let cacheTange = new Map<number, Vector3>();\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<number, Vector3>();\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<Spline>\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<number>, 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<number>, 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<Curve, Box3> = new Map();\r\n\r\n /**\r\n * 交点数据集,key 为曲线 value 为和它相交的(曲线和交点的Map)\r\n */\r\n intersect: Map<Curve, Map<Curve, Vector3[]>> = new Map();\r\n //交点参数集\r\n intersect2: Map<Curve, [number, Vector3][]> = 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<Curve, Vector3[]>\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<Vector3, Vertice>();\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<Curve, Curve[]> = 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 => <number>(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<Vertice>\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<Route>[]) =>\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<Polyline | Arc> = sourceOutline.GetSplitCurves(pars1);\r\n let targetCus: Array<Polyline | Arc> = 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<Route>[]) =>\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<Curve, number[]>();\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<Curve, Curve>();//分裂后->原始曲线 映射\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 (<typeof CurveTreeNode>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((<Arc>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((<Arc>n.curve).Center, (<Arc>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<Curve>();\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<EndParam)...\r\n */\r\n get EndParam(): number\r\n {\r\n if (this._LineData.length === 0) return 0;\r\n\r\n //闭合且起点不等于终点\r\n if (this._ClosedMark &&\r\n !equalv2(this._LineData[0].pt, arrayLast(this._LineData).pt)\r\n )\r\n return this._LineData.length;\r\n return this._LineData.length - 1;\r\n }\r\n get Area2()\r\n {\r\n if (this.EndParam < 2)\r\n return 0;\r\n\r\n let { pts, buls } = this.PtsBuls;\r\n let area = 0;\r\n for (let i = 0; i < pts.length - 1; i++)\r\n {\r\n let startV = pts[i];\r\n let endV = pts[i + 1];\r\n let det = getDeterminantFor2V(startV, endV);\r\n\r\n let bul = buls[i];\r\n if (bul !== 0)\r\n {\r\n let arc = new Arc().ParseFromBul(startV, endV, bul);\r\n let rSq = arc.Radius ** 2;\r\n //弓形面积\r\n let arcArea = rSq * arc.AllAngle * 0.5 - 0.5 * rSq * Math.sin(arc.AllAngle);\r\n //我们可以知道 正的凸度总是增加逆时针的面积, 负的凸度总是增加顺时针的面积\r\n det += arcArea * Math.sign(bul) * 2;\r\n }\r\n area += det;\r\n }\r\n return area / 2;\r\n }\r\n get Area()\r\n {\r\n return Math.abs(this.Area2);\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 || (this.EndParam > 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<Polyline>\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<Curve>\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((<Arc>c1).Center, (<Arc>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<Vector3>\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<number>} indexList\r\n * @param {Vector3} vec\r\n */\r\n MoveStretchPoints(indexList: Array<number>, 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<Vector3>} 校验完成后的点表\r\n */\r\nfunction CheckPointOnCurve(intRes: IntersectResult[], c1: Curve, c2: Curve, extType: IntersectOption, tolerance = 1e-6): Array<IntersectResult>\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<Vector3>\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<number>, 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<Vector3>\r\n {\r\n return [this.StartPoint, this.EndPoint];\r\n }\r\n\r\n MoveStretchPoints(indexList: Array<number>, 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<any, number>();\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<Array<Curve>>} 返回如下\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<Array<Curve>>\r\n{\r\n //返回的曲线组\r\n let groupCus = new Array<Array<Curve>>();\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<T> extends Function\r\n{\r\n prototype: T;\r\n}\r\n\r\nexport interface ConstructorFunctionType<T = any> extends PrototypeType<T>\r\n{\r\n new(...args: any[]): T;\r\n}\r\n\r\nexport type ConstructorType<T = unknown, Static extends Record<string, any> = PrototypeType<T>> = (ConstructorFunctionType<T> | PrototypeType<T>) & {\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<T extends Singleton>(this: ConstructorType<T, typeof Singleton>): 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<number>, 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<number>, 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<Contour, Box3>();\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<Vector3>\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<string, CylinderBufferGeometry>();\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<string, BufferGeometry>();\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<Task, \"key\" | \"data\" | \"then\">;\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<Task, \"key\">;\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<any> | 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<T>(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 <cross> 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 <cross> 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 <cross> 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 <cross> 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 <cross> 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 <cross> 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 <cross> 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 <cross> 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<number, Entity>;\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<Curve, {\r\n idx: number[];\r\n count: number,\r\n isMove: boolean,\r\n }>();\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<Arc, number>();\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<T = IHardwareType>\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<string, (Hole | IHardwareType)[]> = new Map();\r\n private sealMap: Map<string, number> = new Map();\r\n private boardMap = new Map<string, Board[]>();\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<Board>[] = [];\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<number, number>();\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<T>(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<number, Set<number>>();//深度->刀半径Set\r\n let thicknessGroovesMap = new Map<number, ExtrudeSolid[]>();//深度->刀半径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<Curve, Map<Curve, IntersectResult[]>>();\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<Vector3, Matrix4>();\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<BufferGeometry, Material[]>)\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<Vector3>\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<number>, 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<number>, 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] !== (<Entity>(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] = (<Entity>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<Vector3>\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<Vector3>\r\n {\r\n return this.GetGripOrStretchPoints(DragPointType.Stretch);\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\r\n *\r\n * @param {Array<number>} indexList 拉伸点索引列表.\r\n * @param {Vector3} vec 移动向量\r\n * @memberof Entity\r\n */\r\n MoveStretchPoints(indexList: Array<number>, 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: \"板件有造型或者自定义排钻无法加工,请运行造型检测命令<checkmodeing>确认\",\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<number, number>();\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<Board, Vector3>\r\n {\r\n let brMap: Map<string, Board[]> = 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<Board, Vector3> = 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<Curve> = 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<Curve, IHighSealedItem>();\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<ObjectId, ObjectId[][]> = 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<ObjectId>(); //排钻关联锁\r\n\r\n //仅在渲染器中使用倒角\r\n protected bevelEnabled: boolean = true;\r\n\r\n //二维刀路 id -> polyline\r\n private _KnifePolylineMap: Map<string, Polyline> = 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>(): 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<ObjectId>\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] !== (<Entity>(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<string, Polyline>)\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<string, number>();\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<boolean>((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<Polyline, { [key: string]: Polyline; }>();\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<number>, 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<BufferGeometry, LineBasicMaterial>[]\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<number>, 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<Vector3>\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<number>, 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<Curve> = 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<Route>[]) =>\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<ExtrudeHole, Box3Ext>();\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<Point>): 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<void>\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<number>; } = {};\r\n private static CacheRect = new Map<string, Path>();\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<T, E>(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 //直线与盒子相交,或者被盒子包含. CohenSutherland裁剪算法\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<any>} arr 需要操作的数组\r\n * @param {*} el 需要移除的元素\r\n */\r\nexport function arrayRemove<T>(arr: Array<T>, el: T): Array<T>\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<T>(arr: Array<T>, el: T): Array<T>\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<T>(arr: Array<T>, checkFuntion: (e: T) => boolean): Array<T>\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<T>(arr: Array<T>): T\r\n{\r\n return arr[0];\r\n}\r\n\r\nexport function arrayLast<T>(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<T>} arr\r\n * @returns {Array<T>} 返回自身\r\n */\r\nexport function arraySortByNumber<T>(arr: Array<T>): Array<T>\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<T>} 返回自身\r\n */\r\nexport function arrayRemoveDuplicateBySort<T>(arr: Array<T>, checkFuction: (e1: T, e2: T) => boolean = checkEqual): Array<T>\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<T>(arr: Array<T>, mapFunc: (v: T) => T): Array<T>\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<T>(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<T>(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<T>(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<T>(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<T>(s: Set<T>, fn: (el: T) => boolean): Set<T>\r\n{\r\n let ns = new Set<T>();\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<number>();\r\n let yset = new Set<number>();\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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"}