webcad-ue4-api/api.esm.js.map
2024-08-29 20:03:59 +08:00

1 line
4.3 MiB
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"file":"api.esm.js","sources":["../src/Common/ArrayExt.ts","../src/Common/BoardKeyList.ts","../src/Geometry/CoordinateSystem.ts","../src/Common/SystemEnum.ts","../src/GraphicsSystem/RenderType.ts","../src/ApplicationServices/HostApplicationServices.ts","../src/Common/Dispose.ts","../src/Common/LayerConstant.ts","../src/Common/Status.ts","../src/Geometry/Box.ts","../src/DatabaseServices/AutoRecord.ts","../src/DatabaseServices/CADFactory.ts","../src/DatabaseServices/ObjectId.ts","../src/DatabaseServices/CADFiler.ts","../src/DatabaseServices/AllObjectData.ts","../src/DatabaseServices/EraseEntityData.ts","../src/DatabaseServices/CADObject.ts","../src/DatabaseServices/HistorycRecord.ts","../src/Add-on/testEntity/USE_WORLD_UV.ts","../src/DatabaseServices/SymbolTableRecord.ts","../src/DatabaseServices/MaterialTableRecord.ts","../src/DatabaseServices/PhysicalMaterialRecord.ts","../src/DatabaseServices/Entity/Entity.ts","../src/Common/StoreageKeys.ts","../src/Common/eval.ts","../src/Common/Utils.ts","../src/Geometry/GeUtils.ts","../src/Common/Matrix4Utils.ts","../src/Editor/ObjectSnapMode.ts","../src/GLSL/GoochShader.ts","../src/Common/ColorPalette.ts","../src/Editor/BufferGeometry2GeometryCacheMap.ts","../src/Geometry/BufferGeometryUtils.ts","../src/Geometry/Orbit.ts","../src/GraphicsSystem/IntersectWith.ts","../src/DatabaseServices/Entity/Curve.ts","../src/Geometry/Matrix2.ts","../src/Geometry/Plane.ts","../src/Geometry/RotateUV.ts","../src/DatabaseServices/Entity/Line.ts","../src/DatabaseServices/Entity/Ellipse.ts","../src/DatabaseServices/Entity/Arc.ts","../src/DatabaseServices/Entity/DragPointType.ts","../src/DatabaseServices/Entity/Circle.ts","../src/Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams.ts","../src/DatabaseServices/Shape2.ts","../src/Geometry/CreatePolylinePath.ts","../src/Geometry/CurveMap.ts","../src/GraphicsSystem/OffsetPolyline.ts","../src/DatabaseServices/PointInPolyline.ts","../src/DatabaseServices/Entity/Polyline.ts","../src/Geometry/RegionParse.ts","../src/Add-on/BoardCutting/SplitPolyline.ts","../src/DatabaseServices/SplineConver2Polyline.ts","../src/DatabaseServices/Spline.ts","../src/Geometry/Count.ts","../src/Common/CurveUtils.ts","../src/Geometry/CurveIntersection.ts","../src/Geometry/CreateContour2.ts","../src/GraphicsSystem/BoolOperateUtils.ts","../src/DatabaseServices/Contour.ts","../src/DatabaseServices/Entity/BoardInterface.ts","../src/DatabaseServices/Entity/GenUVForWorld.ts","../src/DatabaseServices/Entity/GenLocalUv.ts","../src/DatabaseServices/Shape.ts","../src/csg/core/constants.ts","../src/csg/core/FuzzyFactory.ts","../src/csg/core/math/IsMirrot.ts","../src/csg/core/math/Polygon3.ts","../src/csg/core/FuzzyFactory3d.ts","../src/csg/core/Geometry2CSG.ts","../src/Add-on/DrawDrilling/DrillType.ts","../src/Add-on/ArcBoard/ArcBoardBuild.ts","../src/Add-on/ArcBoard/ArcBoardFeeding.ts","../src/Add-on/testEntity/BoxLine.ts","../src/Add-on/BoardCutting/LinearCuttingForSweep.ts","../src/Common/Log.ts","../src/Common/Toaster.ts","../src/Nest/Common/Util.ts","../src/DatabaseServices/3DSolid/Hole.ts","../src/DatabaseServices/3DSolid/CylinderHole.ts","../src/Add-on/DrawDrilling/HoleUtils.ts","../src/UI/Components/Board/BoardFindInterface.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/Geometry/Board2DModelCSG/BoardSideModelCSGBuilder.ts","../src/Geometry/CreateWireframe.ts","../src/Geometry/SimpleExtrudeEdgeGeometry.ts","../src/Geometry/UVUtils.ts","../src/Geometry/WordUVGenerator.ts","../src/Common/CSGIntersect.ts","../src/Geometry/BSPGroupParse.ts","../src/Add-on/BoardCutting/BoardCuttingForSweep.ts","../src/Geometry/BoardUVGenerator.ts","../src/DatabaseServices/ShapeManager.ts","../src/DatabaseServices/Entity/Region.ts","../src/Geometry/DrillParse/CanDrawHoleFuzz.ts","../src/Geometry/DrillParse/Sement1dUntils.ts","../src/Geometry/DrillParse/Face.ts","../src/Geometry/DrillParse/BoardGetFace.ts","../src/Geometry/FastOffset.ts","../src/Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2.ts","../src/DatabaseServices/Entity/Extrude.ts","../src/DatabaseServices/3DSolid/ExtrudeHole.ts","../src/DatabaseServices/GroupTableRecord.ts","../src/Common/AddEntityDrawObject.ts","../src/DatabaseServices/Entity/CompositeEntity.ts","../src/DatabaseServices/Hardware/HardwareCompositeEntity.ts","../src/Common/Singleton.ts","../src/Production/Convert2PtsBul.ts","../src/GraphicsSystem/ToolPath/OptimizeToolPath.ts","../src/GraphicsSystem/ToolPath/FeedingToolPath.ts","../src/Production/Product.ts","../src/GraphicsSystem/ParseEdgeSealDir.ts","../src/GraphicsSystem/CalcEdgeSealing.ts","../src/Add-on/BoardCutting/SplitBoardSideModel.ts","../src/Add-on/BoardEditor/Board2Regions.ts","../src/Add-on/BoardEditor/SerializeBoardData.ts","../src/GraphicsSystem/ToolPath/VKnifToolPath.ts","../src/Geometry/Board2DModelCSG/Board2DModelCSGBuilder.ts","../src/Geometry/CSGSubtract/CSGSubtractTaskManager.ts","../src/Geometry/EdgeGeometry.ts","../src/Geometry/PointShapeUtils.ts","../src/DatabaseServices/Text/Text.ts","../src/DatabaseServices/Entity/Board.ts","../src/DatabaseServices/Room/ParseService/RangeUtils.ts","../src/DatabaseServices/Room/ParseService/CurveTrim.ts","../src/Common/EntityUpdateWrap.ts","../src/DatabaseServices/Room/Entity/RoomBase.ts","../src/DatabaseServices/Room/Entity/Wall/WallSnapMode.ts","../src/DatabaseServices/Room/Entity/Wall/RoomWallBase.ts","../src/DatabaseServices/Room/Entity/Wall/RoomWallLine.ts","../src/DatabaseServices/Room/ParseService/GetCurveParam.ts","../src/Nest/Common/ClipperCpp.ts","../src/Nest/Common/Area.ts","../src/Nest/Common/Vector2.ts","../src/Nest/Common/Box2.ts","../src/Nest/Core/Path.ts","../src/Nest/Converter/Curves2Points.ts","../src/DatabaseServices/Room/Entity/Flat/RoomFlatBase.ts","../src/DatabaseServices/Room/Entity/Flat/RoomFlatFloor.ts","../src/DatabaseServices/Room/Entity/Flat/RoomFlatTop.ts","../src/DatabaseServices/Room/Entity/Region/RoomRegion.ts","../src/Nest/Converter/Path2Polyline.ts","../src/Nest/Core/NestCache.ts","../src/DatabaseServices/Room/ParseService/ParseRegionTextPos.ts","../src/DatabaseServices/Room/ParseService/RegionReplacement.ts","../src/DatabaseServices/Room/ParseService/RoomRegionParse.ts","../src/DatabaseServices/Room/ParseService/RoomWallExtendAndBreak.ts","../src/DatabaseServices/Room/ParseService/RoomWallParse.ts","../src/DatabaseServices/Room/Entity/Wall/RoomWallArc.ts","../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHoleBase.ts","../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline.ts","../src/DatabaseServices/Room/ParseService/Hole/RoomWallPlaceIHoleHelper.ts","../src/Reactor/RoomHoleReactor.ts","../src/Common/LoadParamMaterial.ts","../src/Geometry/SpaceParse/ISpaceParse.ts","../src/DatabaseServices/Template/Action/TemplateAction.ts","../src/Editor/PromptResult.ts","../src/Add-on/FilletUtils.ts","../src/DatabaseServices/Template/Action/TemplateFilletAction.ts","../src/UI/Components/ApplyGoodInfo.tsx","../src/DatabaseServices/Template/Action/TemplateMaterialAction.ts","../src/DatabaseServices/Template/Param/TemplateParamType.ts","../src/DatabaseServices/Template/Param/TemplateParam.ts","../src/Geometry/SpaceParse/ClampSpaceParse.ts","../src/Geometry/SpaceParse/ClampSpaceParseFix.ts","../src/DatabaseServices/Template/Positioning/Positioning.ts","../src/DatabaseServices/Template/Positioning/PositioningClampSpace.ts","../src/DatabaseServices/Template/Positioning/PositioningTemporary.ts","../src/DatabaseServices/Template/TemplateType.ts","../src/DatabaseServices/Template/TemplateRecord.ts","../src/Add-on/Purge.ts","../src/DatabaseServices/DimStyle/DimstyleKeyCodeEnum.ts","../src/DatabaseServices/DimStyle/DimStyleRecord.ts","../src/DatabaseServices/Dimension/Dimension.ts","../src/DatabaseServices/CreateObjectData.ts","../src/DatabaseServices/RemoveObjectData.ts","../src/DatabaseServices/ObjectCollection.ts","../src/DatabaseServices/BlockTableRecord.ts","../src/DatabaseServices/ObjectAllDataHistoryRecord.ts","../src/DatabaseServices/CommandHistoryRecord.ts","../src/DatabaseServices/AlignLine/AlignLineGroupTable.ts","../src/GraphicsSystem/CameraUpdate.ts","../src/DatabaseServices/CameraSnapshoot/CameraSnapshootRecord.ts","../src/DatabaseServices/DeepCloneFiler.ts","../src/DatabaseServices/Tables/SymbolTable.ts","../src/DatabaseServices/DimStyle/DimStyleTable.ts","../src/DatabaseServices/GroupTable.ts","../src/Editor/CommandState.ts","../src/DatabaseServices/HistoricManage.ts","../src/DatabaseServices/LayerTableRecord.ts","../src/DatabaseServices/Lights/Light.ts","../src/DatabaseServices/Lights/AmbientLight.ts","../src/DatabaseServices/Lights/SunLightHelper.ts","../src/DatabaseServices/Lights/DirectionalLight.ts","../src/DatabaseServices/Lights/HemisphereLight.ts","../src/DatabaseServices/ProcessingGroup/ProcessingGroupTable.ts","../src/DatabaseServices/Tables/LayerTable.ts","../src/DatabaseServices/Tables/MaterialTable.ts","../src/DatabaseServices/Tables/TextureTable.ts","../src/DatabaseServices/Template/TemplateTable.ts","../src/DatabaseServices/Texture.ts","../src/DatabaseServices/WblockCloneFiler.ts","../src/DatabaseServices/Database.ts","../src/DatabaseServices/FaceEntity.ts","../src/DatabaseServices/Entity/EntityFbx.ts","../src/DatabaseServices/Entity/EntityRef.ts","../src/DatabaseServices/IMaterialDefaultParam.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateArcWindowRecord.ts","../src/Add-on/DrawBoard/BuildBoardTool.ts","../src/Add-on/LatticeDrawer/LatticeDrawerTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateLatticeRecord.ts","../src/DatabaseServices/Template/Positioning/PositioningFixed.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateRoomDoorRecord.ts","../src/Add-on/DrawBoard/BuildTopBottomBoardTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateWindowRecord.ts","../src/Add-on/DrawWineRack/DrawWinRackTool.ts","../src/Add-on/DrawWineRack/DrawObliqueWineRackTool.ts","../src/Add-on/DrawWineRack/DrawUprightWineRackTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord.ts","../src/Add-on/HideSelect/HideSelectUtils.ts","../src/Editor/VisualSpaceBox.ts","../src/DatabaseServices/ViewportEntity.ts","../src/DatabaseServices/3DSolid/Cylineder.ts","../src/DatabaseServices/3DSolid/RevolveSolid.ts","../src/DatabaseServices/AlignLine/AlignLineGroupRecord.ts","../src/DatabaseServices/Dimension/GetDimLineMaterial.ts","../src/DatabaseServices/Dimension/2LineAngularDimension.ts","../src/DatabaseServices/Dimension/AlignedDimension.ts","../src/DatabaseServices/Dimension/ArcDimension.ts","../src/DatabaseServices/Dimension/RadiusDimension.ts","../src/DatabaseServices/Dimension/DiameterDimension.ts","../src/DatabaseServices/Dimension/LinearDimension.ts","../src/DatabaseServices/Dimension/MLeaderDimension.ts","../src/DatabaseServices/Entity/BoxSolid.ts","../src/DatabaseServices/Entity/Point.ts","../src/DatabaseServices/Lights/PointLightHelper.ts","../src/DatabaseServices/Lights/PointLight.ts","../src/DatabaseServices/Lights/RectAreaLightHelper.ts","../src/DatabaseServices/Lights/RectAreaLight.ts","../src/DatabaseServices/Lights/SpotLightHelper.ts","../src/DatabaseServices/Lights/SpotLight.ts","../src/DatabaseServices/ProcessingGroup/ProcessingGroupRecord.ts","../src/DatabaseServices/Room/Entity/Ceiling/BulkheadCeiling.ts","../src/DatabaseServices/Room/Entity/Wall/Hole/RoomHoleLine.ts","../src/DatabaseServices/Tables/BlockTable.ts","../src/DatabaseServices/Template/Action/TempateThicknessAction.ts","../src/DatabaseServices/Template/Action/TemplateMoveAction.ts","../src/DatabaseServices/Template/Action/TemplateSetSealAction.ts","../src/DatabaseServices/Template/Action/TemplateStretchGripAction.ts","../src/DatabaseServices/Template/Action/TemplateStretchScaleBoxAction.ts","../src/DatabaseServices/Template/Action/TemplateaRadiusAction.ts","../src/DatabaseServices/Template/Positioning/PositioningBoardSpace.ts","../src/DatabaseServices/Template/Positioning/PositioningHandleSpace.ts","../src/Add-on/DrawBoard/CuttingProtrudingPart.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateBehindBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateEntityRef.ts","../src/GraphicsSystem/GripScene.ts","../src/Editor/SelectFilter.ts","../src/Editor/SelectBox.ts","../src/Editor/PointPick.ts","../src/Add-on/DrawBoard/ActivityLayerBoardTool.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateLayerBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateLeftRightBoardRecord.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateSizeBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateVerticalBoard.ts","../src/DatabaseServices/Template/ProgramTempate/TemplateVisualSpace.ts","../src/DatabaseServices/ViewportEntity/ViewportEntity2.ts"],"sourcesContent":["/**\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","\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 { 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 { Database } from '../DatabaseServices/Database';\r\nimport { LayerTableRecord } from '../DatabaseServices/LayerTableRecord';\r\nimport { ObjectId } from '../DatabaseServices/ObjectId';\r\nimport { ICursorConfig } from '../Editor/ICursorConfig';\r\nimport { RenderType } from '../GraphicsSystem/RenderType';\r\nimport { DrillingOption } from '../UI/Store/drillInterface';\r\n\r\nexport class IHostApplicationServices\r\n{\r\n Database: Database;//app.Db\r\n\r\n DefaultMeshMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n DefaultFloorMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n DefaultWallMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n DefaultBulkheadCeilingMaterial?: MeshBasicMaterial | MeshStandardMaterial;\r\n\r\n IsRoomEntityVisible = true;//室内实体可见\r\n\r\n CurrentDimStyle: ObjectId;\r\n CurrentLayer: ObjectId<LayerTableRecord>;\r\n /** 当前画笔的颜色索引 */\r\n CurrentColorindex: number = 7;\r\n\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 cancelHoleProcessing: false,//填写拆单尺寸板件取消孔槽加工\r\n isCheckCustomBoardNumber: false,//是否开启自动板件编号校验\r\n };\r\n\r\n @ProxyValue viewSize = {\r\n minViewHeight: 1e-3,\r\n maxViewHeight: 3e6,\r\n zoomSpeed: 0.6\r\n };\r\n\r\n @ProxyValue cursorSize: ICursorConfig = {\r\n D2: 1000,\r\n D3: 100,\r\n SquareSize: 10,\r\n };\r\n\r\n @ProxyValue dimTextHeight = 60;\r\n @ProxyValue boardCustomNumberTextHeight = 60; //板编号字体高度\r\n @ProxyValue lineWidth = 2; //打印线框\r\n @ProxyValue fractionDigitsType: FractionDigitsType = FractionDigitsType.two;\r\n @ProxyValue throughModelSegmentedDrill = false; //挖穿造型分段排钻\r\n @ProxyValue autoDeviation = false; //排钻碰撞智能偏移\r\n\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\nexport const ByLayerColorIndex = 260;\r\n","\r\n\r\n\r\nexport enum Status\r\n{\r\n False = 0,\r\n True = 1,\r\n Side = 2,\r\n Canel = -1,\r\n\r\n ConverToCircle = 101,\r\n\r\n DuplicateRecordName = 102,\r\n}\r\n\r\nexport enum UpdateDraw\r\n{\r\n None = 0,\r\n Matrix = 1,\r\n Geometry = 2,\r\n Material = 4,\r\n All = ~(~0 << 6)\r\n}\r\n\r\n/**\r\n * WblockClne时,遇到重复记录的操作方式\r\n */\r\nexport enum DuplicateRecordCloning\r\n{\r\n Ignore = 1,\r\n Replace = 2,\r\n Rename = 3,\r\n}\r\n","import { Box3, Vector3 } from 'three';\r\n\r\n/**\r\n * 盒子的切割类型\r\n */\r\nexport enum SplitType\r\n{\r\n X = 0,\r\n Y = 1,\r\n Z = 2,\r\n}\r\n\r\n/**\r\n * 扩展Box3,添加切割方法,体积等\r\n */\r\nexport class Box3Ext extends Box3\r\n{\r\n TempData: any;\r\n get Volume()\r\n {\r\n let size = this.getSize(new Vector3());\r\n return size.x * size.y * size.z;\r\n }\r\n\r\n //每个轴的大小必须大于最小的size\r\n isSolid(minSize = 1)\r\n {\r\n return BoxIsSolid(this, minSize);\r\n }\r\n substract(b: Box3Ext, spaceType: SplitType)\r\n {\r\n let interBox = this.clone().intersect(b) as this;\r\n if (interBox.isEmpty() || !interBox.isSolid())\r\n return [this];\r\n\r\n let p1 = interBox.min.clone().setComponent(spaceType, this.min.getComponent(spaceType));\r\n let p2 = interBox.max.clone().setComponent(spaceType, interBox.min.getComponent(spaceType));\r\n\r\n let p3 = interBox.min.clone().setComponent(spaceType, interBox.max.getComponent(spaceType));\r\n let p4 = interBox.max.clone().setComponent(spaceType, this.max.getComponent(spaceType));\r\n\r\n return [\r\n new Box3Ext(p1, p2),\r\n new Box3Ext(p3, p4)\r\n ].filter(b => b.isSolid());\r\n }\r\n clampSpace(b2: Box3Ext, splitType: SplitType)\r\n {\r\n let interBox = this.clone();\r\n interBox.min.max(b2.min);\r\n interBox.max.min(b2.max);\r\n interBox.min.setComponent(splitType, Math.min(this.max.getComponent(splitType), b2.max.getComponent(splitType)));\r\n interBox.max.setComponent(splitType, Math.max(this.min.getComponent(splitType), b2.min.getComponent(splitType)));\r\n return interBox;\r\n }\r\n containsBox(box: Box3, fuzz = 1e-8): boolean\r\n {\r\n return this.min.x <= box.min.x + fuzz && box.max.x <= this.max.x + fuzz &&\r\n this.min.y <= box.min.y + fuzz && box.max.y <= this.max.y + fuzz &&\r\n this.min.z <= box.min.z + fuzz && box.max.z <= this.max.z + fuzz;\r\n }\r\n intersectsBox(box: Box3, fuzz = 1e-8): boolean\r\n {\r\n return IntersectsBox(this, box, fuzz);\r\n }\r\n}\r\n\r\nexport function IntersectsBox(box1: Box3, box2: Box3, fuzz = 1e-6): boolean\r\n{\r\n return box2.max.x < box1.min.x - fuzz || box2.min.x > box1.max.x + fuzz ||\r\n box2.max.y < box1.min.y - fuzz || box2.min.y > box1.max.y + fuzz ||\r\n box2.max.z < box1.min.z - fuzz || box2.min.z > box1.max.z + fuzz ? false : true;\r\n}\r\n\r\n/**盒子二维面是否相交 */\r\nexport function IntersectBox2(box1: Box3, box2: Box3, fuzz = 1e-3)\r\n{\r\n return box2.max.x < box1.min.x - fuzz || box2.min.x > box1.max.x + fuzz ||\r\n box2.max.y < box1.min.y - fuzz || box2.min.y > box1.max.y + fuzz ? false : true;\r\n}\r\n\r\nlet size = new Vector3;\r\nexport function BoxIsSolid(box: Box3, minSize = 1)\r\n{\r\n box.getSize(size);\r\n return size.x > minSize && size.y > minSize && size.z > minSize;\r\n}\r\n","\r\n\r\nexport const ISPROXYKEY = \"_isProxy\";\r\n\r\n/**\r\n * 自动对CADObject的属性添加属性记录器,自动调用 `WriteAllObjectRecord`\r\n * 如果属性是数组,那么自动添加`Proxy`.\r\n * 可以使用`ISPROXYKEY`覆盖这个函数的代理行为(使用CADObject.CreateProxyArray快速覆盖)\r\n *\r\n * ! 仅在{数组}或者{值}类型上使用,如果是Object,请使用AutoRecordObject\r\n *\r\n * @param target\r\n * @param property\r\n * @param [descriptor]\r\n */\r\nexport function AutoRecord(\r\n target: { WriteAllObjectRecord: () => void; },\r\n property: string,\r\n descriptor?: PropertyDecorator)\r\n{\r\n let privateKey = '__' + property;\r\n Object.defineProperty(target, property,\r\n {\r\n set: function (value)\r\n {\r\n if (value instanceof Array)\r\n {\r\n if (!this[privateKey])\r\n {\r\n if (value[ISPROXYKEY])\r\n this[privateKey] = value;\r\n else\r\n this[privateKey] = new Proxy(value, {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n this.WriteAllObjectRecord();\r\n return Reflect.set(target, key, value, receiver);\r\n },\r\n get: (target, key, receiver) =>\r\n {\r\n if (key === ISPROXYKEY)\r\n return true;\r\n //实体先被删除后在触发length = xxx\r\n if (key === \"splice\" || key === \"pop\" || key === \"shift\")\r\n this.WriteAllObjectRecord();\r\n return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n else\r\n {\r\n let arr = this[privateKey] as Array<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\n\r\n/**\r\n * 保存对象创建或者修改时的所有数据记录\r\n */\r\n@Factory\r\nexport class AllObjectData implements ISerialize\r\n{\r\n file: CADFiler;\r\n constructor(obj?: ISerialize)\r\n {\r\n this.file = new CADFiler();\r\n if (obj)\r\n obj.WriteFile(this.file);\r\n }\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n let data = file.Read();\r\n this.file.Data = data;\r\n return this;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.file.Data);\r\n return this;\r\n }\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { ISerialize } from './ISerialize';\r\n@Factory\r\nexport class EraseEntityData implements ISerialize\r\n{\r\n ReadFile(file: CADFiler): this\r\n {\r\n this.isErase = file.ReadBool();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.WriteBool(this.isErase);\r\n return this;\r\n }\r\n constructor(public isErase = true)\r\n {\r\n }\r\n}\r\n","import { iaop } from 'xaop';\r\nimport { AllObjectData } from './AllObjectData';\r\nimport { ISPROXYKEY } from './AutoRecord';\r\nimport { CADFactory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CommandHistoryRecord } from './CommandHistoryRecord';\r\nimport { Database } from './Database';\r\nimport { EraseEntityData } from './EraseEntityData';\r\nimport { ISerialize } from './ISerialize';\r\nimport { ObjectId } from './ObjectId';\r\n\r\nexport abstract class CADObject\r\n{\r\n protected _Owner: ObjectId;\r\n /**\r\n * 用于储存临时数据\r\n */\r\n public TempData: any;\r\n\r\n //下面的三个数据由Rect2Board使用\r\n __CacheBox__: any;\r\n __CacheBoard__: any;\r\n __CacheSize__: any;\r\n __CachePolyline__: any;\r\n\r\n set Owner(owner: ObjectId)\r\n {\r\n this._Owner = owner;\r\n }\r\n get Owner()\r\n {\r\n return this._Owner;\r\n }\r\n\r\n Destroy()\r\n {\r\n //在效果图同步反应器中需要知道被删除的实体的id,所以不删除这个属性\r\n // this.objectId = undefined;\r\n this._db = undefined;\r\n if (this.objectId)\r\n this.objectId.Object = undefined;//解除绑定(关联bug:绘制关联切割板后删除切割板,在pu时调用了这个,此时obj被删除但是还会被拷贝,导致错误崩溃)\r\n }\r\n\r\n //对象被彻底遗弃\r\n GoodBye(): any\r\n {\r\n this.Destroy();\r\n this.Erase(true);\r\n }\r\n\r\n /**\r\n * 当实体异步更新绘制实体完成后触发这个函数.\r\n * Application通过注入的方式得知这个事件,刷新视图显示.\r\n */\r\n @iaop\r\n AsyncUpdated()\r\n {\r\n }\r\n\r\n //-------------------------DB-------------------------\r\n protected _db: Database;\r\n get Db(): Database\r\n {\r\n return this._db;\r\n }\r\n\r\n //对象在加入数据库时,必须指定一个源数据库,否则无法读取引用id.\r\n SetDefaultDb(db: Database)\r\n {\r\n if (!this._db)\r\n this._db = db;\r\n else\r\n console.warn(\"重复设置默认Database!\");\r\n\r\n return this;\r\n }\r\n\r\n //private 私有的方法,暴露给Db的添加对象,方法使用.\r\n //只用对象加入到db中,我们才初始化ObjectId.\r\n //从db池中分配id给自身使用. 除非你创建对象往db里面加,否则不要调用该方法\r\n SetOwnerDatabase(db: Database)\r\n {\r\n if (!this._db)\r\n {\r\n this._db = db;\r\n this.objectId = db.AllocateId() as ObjectId<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 { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { CADObject } from \"./CADObject\";\r\nimport { HistorycRecord } from \"./HistorycRecord\";\r\nimport { ISerialize } from \"./ISerialize\";\r\nimport { SymbolTable } from \"./Tables/SymbolTable\";\r\n\r\nexport abstract class SymbolTableRecord extends CADObject\r\n{\r\n protected name: string = \"\";\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (this.name === name) return;\r\n\r\n let undoData = this.UndoRecord();\r\n if (undoData)\r\n {\r\n let hr = new HistorycRecord();\r\n hr.undoData = new NameData(this.name);\r\n hr.redoData = new NameData(name);\r\n undoData.WriteObjectHistoryPath(this, hr);\r\n }\r\n\r\n if (this.Owner)\r\n {\r\n let symbolTable = this.Owner.Object as SymbolTable;\r\n if (!symbolTable.ChangeRecordName(this, name))\r\n return;\r\n }\r\n this.name = name;\r\n }\r\n\r\n Add(obj: CADObject, isCheckObjectCleanly = true): Status\r\n {\r\n return Status.False;\r\n }\r\n\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);\r\n file.Write(this.name);\r\n }\r\n\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n file.Read();\r\n this.name = file.Read();\r\n }\r\n\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n if (undoData instanceof NameData)\r\n {\r\n if (this.name === undoData.name)\r\n return;\r\n if (this.Owner)\r\n {\r\n let symbolTable = this.Owner.Object as SymbolTable;\r\n if (!symbolTable.ChangeRecordName(this, undoData.name))\r\n return;\r\n }\r\n this.name = undoData.name;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 记录当前Name的序列化数据\r\n */\r\n@Factory\r\nexport class NameData implements ISerialize\r\n{\r\n ReadFile(file: CADFiler): this\r\n {\r\n this.name = file.Read();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.Write(this.name);\r\n return this;\r\n }\r\n constructor(public name: string) { }\r\n}\r\n","import { Factory } from \"./CADFactory\";\r\nimport { SymbolTableRecord } from \"./SymbolTableRecord\";\r\n\r\n@Factory\r\nexport class MaterialTableRecord extends SymbolTableRecord\r\n{\r\n}\r\n","import { Color, FrontSide, MeshPhysicalMaterial, Side } from \"three\";\r\nimport { USE_WORLD_UV, U_WORLD_MOVE, U_WORLD_REP, U_WORLD_RO, V_WORLD_MOVE, V_WORLD_REP } from \"../Add-on/testEntity/USE_WORLD_UV\";\r\nimport { HostApplicationServices } from \"../ApplicationServices/HostApplicationServices\";\r\nimport { 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\r\n private _isMaterialLock: boolean = false;//材质锁\r\n private material = new MeshPhysicalMaterial({});\r\n\r\n constructor()\r\n {\r\n super();\r\n\r\n Object.defineProperty(this.material, \"ObjectId\", {\r\n get: () =>\r\n {\r\n return this?.objectId?.Index;\r\n }\r\n });\r\n }\r\n\r\n async Update()\r\n {\r\n await this.PhysicalMaterialUpdate();\r\n }\r\n\r\n //因为Asset.tsx监听了Update的事件,然后又要去调用这个,导致重复监听,所以分离出这个函数\r\n async PhysicalMaterialUpdate()\r\n {\r\n this.material[USE_WORLD_UV] = this.UseWorldUV;\r\n if (this.material[USE_WORLD_UV])\r\n {\r\n this.material[U_WORLD_REP] = this.UWroldRep;\r\n this.material[V_WORLD_REP] = this.VWroldRep;\r\n\r\n this.material[U_WORLD_RO] = this.UWroldRo;\r\n\r\n this.material[U_WORLD_MOVE] = this.UWorldMove;\r\n this.material[V_WORLD_MOVE] = this.VWorldMove;\r\n }\r\n\r\n if (!this.material.color)\r\n this.material.color = new Color(this.color);\r\n else\r\n this.material.color.set(this.color);\r\n\r\n this.material.transparent = this.transparent;\r\n\r\n if (this.type === \"玻璃\")\r\n {\r\n this.material.metalness = 0.2;\r\n this.material.reflectivity = Math.abs(this.refraction);\r\n } else\r\n this.material.metalness = this.matalness;\r\n\r\n this.material.side = this.side;\r\n\r\n this.material.opacity = Math.max(0.1, this.opacity);\r\n this.material.depthTest = this.depthTest;\r\n this.material.bumpScale = this.bumpScale;\r\n this.material.roughness = this.roughness;\r\n\r\n\r\n if (this.material.metalness > 0.9)\r\n HostApplicationServices.LoadMetalEnv().then(env =>\r\n {\r\n this.material.envMap = env;\r\n this.material.needsUpdate = true;\r\n });\r\n else\r\n HostApplicationServices.LoadDefaultExr().then(exr =>\r\n {\r\n this.material.envMap = exr;\r\n this.material.needsUpdate = true;\r\n });\r\n\r\n this.material.needsUpdate = true;\r\n if (this.useMap && this.map?.Object && !this.map.IsErase)\r\n {\r\n let map = this.map.Object as TextureTableRecord;\r\n let texture = map.GetThreeTexture();\r\n await map.WaitUpdate();\r\n this.material.map = texture;\r\n this.material.needsUpdate = true;\r\n }\r\n else\r\n this.material.map = undefined;\r\n\r\n if (this.type === \"自发光\")\r\n {\r\n this.material.emissiveIntensity = this.selfLuminous;\r\n this.material.emissive.copy(this.material.color);\r\n this.material.emissiveMap = this.material.map;\r\n }\r\n else\r\n {\r\n this.material.emissiveIntensity = 1;\r\n this.material.emissive.setRGB(0, 0, 0);\r\n this.material.emissiveMap = undefined;\r\n }\r\n\r\n if (this.useMap && this.useBumpMap && this.bumpMap?.Object && !this.bumpMap.IsErase)\r\n {\r\n let map = this.bumpMap.Object as TextureTableRecord;\r\n let texture = map.GetThreeTexture();\r\n await map.WaitUpdate();\r\n this.material.bumpMap = texture;\r\n this.material.needsUpdate = true;\r\n }\r\n else\r\n this.material.bumpMap = undefined;\r\n\r\n if (this.useMap && this.roughnessMap?.Object && !this.roughnessMap.IsErase)\r\n {\r\n let map = this.roughnessMap.Object as TextureTableRecord;\r\n let texture = map.GetThreeTexture();\r\n await map.WaitUpdate();\r\n this.material.roughnessMap = texture;\r\n this.material.needsUpdate = true;\r\n }\r\n else\r\n this.material.roughnessMap = undefined;\r\n\r\n this.material.needsUpdate = true;\r\n\r\n this.AsyncUpdated();\r\n }\r\n get Material(): MeshPhysicalMaterial\r\n {\r\n return this.material;\r\n }\r\n get GoodsInfo()\r\n {\r\n return this._goodsInfo;\r\n }\r\n set GoodsInfo(info: IGoodProps)\r\n {\r\n if (info.color === this._goodsInfo.color\r\n && info.material === this._goodsInfo.material\r\n && info.name === this._goodsInfo.name\r\n )\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._goodsInfo, info);\r\n }\r\n get IsMaterialLock()\r\n {\r\n return !this.IsErase && this._isMaterialLock;\r\n }\r\n set IsMaterialLock(v)\r\n {\r\n if (this._isMaterialLock === v) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._isMaterialLock = v;\r\n }\r\n //#region -------------------------File-------------------------\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n if (ver === 1)\r\n this.name = file.Read();\r\n this.color = file.Read();\r\n this.transparent = file.Read();\r\n this.matalness = file.Read();\r\n this.opacity = file.Read();\r\n this.depthTest = file.Read();\r\n this.map = file.ReadObjectId();\r\n this.bumpMap = file.ReadObjectId();\r\n this.bumpScale = file.Read();\r\n this.roughnessMap = file.ReadObjectId();\r\n this.roughness = file.Read();\r\n this.useMap = file.Read();\r\n this.useBumpMap = file.Read();\r\n this.useRoughnessMap = file.Read();\r\n if (ver <= 2)\r\n file.Read();\r\n if (ver > 2)\r\n {\r\n this._goodsInfo.name = file.Read();\r\n this._goodsInfo.material = file.Read();\r\n this._goodsInfo.color = file.Read();\r\n }\r\n\r\n if (ver > 3)\r\n this.IsFull = file.Read();\r\n\r\n if (ver > 4)\r\n {\r\n this.baseColorLuminance = file.Read();\r\n this.baseColorLightColor.r = file.Read();\r\n this.baseColorLightColor.g = file.Read();\r\n this.baseColorLightColor.b = file.Read();\r\n\r\n this.baseColorDarkColor.r = file.Read();\r\n this.baseColorDarkColor.g = file.Read();\r\n this.baseColorDarkColor.b = file.Read();\r\n\r\n this.baseColorSaturability = file.Read();\r\n\r\n this.opacityContrast = file.Read();\r\n this.opacityBorder = file.Read();\r\n this.opacityMaximum = file.Read();\r\n this.opacityMinimum = file.Read();\r\n\r\n this.specular = file.Read();\r\n this.selfLuminous = file.Read();\r\n\r\n this.fresnelPO = file.Read();\r\n this.fresnelST = file.Read();\r\n this.fresnelLuminance = file.Read();\r\n\r\n this.fresnelLightColor.r = file.Read();\r\n this.fresnelLightColor.g = file.Read();\r\n this.fresnelLightColor.b = file.Read();\r\n\r\n this.fresnelDarkColor.r = file.Read();\r\n this.fresnelDarkColor.g = file.Read();\r\n this.fresnelDarkColor.b = file.Read();\r\n\r\n this.sharpen = file.Read();\r\n\r\n if (ver > 5)\r\n this.UVType = file.Read();\r\n\r\n if (ver > 6)\r\n this.type = file.Read();\r\n if (ver > 7)\r\n this.ref = file.Read();\r\n\r\n if (ver > 8)\r\n {\r\n this.UWroldRep = file.Read();\r\n this.VWroldRep = file.Read();\r\n this.UWroldRo = file.Read();\r\n this.UWorldMove = file.Read();\r\n this.VWorldMove = file.Read();\r\n }\r\n if (ver > 9)\r\n {\r\n this.refraction = file.Read();\r\n this.side = file.Read();\r\n }\r\n if (ver > 10)\r\n {\r\n this._isMaterialLock = file.Read();\r\n }\r\n }\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(11);\r\n file.Write(this.color);\r\n file.Write(this.transparent);\r\n file.Write(this.matalness);\r\n file.Write(this.opacity);\r\n file.Write(this.depthTest);\r\n file.WriteHardObjectId(this.map);\r\n file.WriteHardObjectId(this.bumpMap);\r\n file.Write(this.bumpScale);\r\n file.WriteHardObjectId(this.roughnessMap);\r\n file.Write(this.roughness);\r\n file.Write(this.useMap);\r\n file.Write(this.useBumpMap);\r\n file.Write(this.useRoughnessMap);\r\n file.Write(this._goodsInfo.name);\r\n file.Write(this._goodsInfo.material);\r\n file.Write(this._goodsInfo.color);\r\n file.Write(this.IsFull);\r\n\r\n //ver 5\r\n file.Write(this.baseColorLuminance);\r\n file.Write(this.baseColorLightColor.r);\r\n file.Write(this.baseColorLightColor.g);\r\n file.Write(this.baseColorLightColor.b);\r\n\r\n file.Write(this.baseColorDarkColor.r);\r\n file.Write(this.baseColorDarkColor.g);\r\n file.Write(this.baseColorDarkColor.b);\r\n\r\n file.Write(this.baseColorSaturability);\r\n\r\n file.Write(this.opacityContrast);\r\n file.Write(this.opacityBorder);\r\n file.Write(this.opacityMaximum);\r\n file.Write(this.opacityMinimum);\r\n\r\n file.Write(this.specular);\r\n file.Write(this.selfLuminous);\r\n\r\n file.Write(this.fresnelPO);\r\n file.Write(this.fresnelST);\r\n file.Write(this.fresnelLuminance);\r\n\r\n file.Write(this.fresnelLightColor.r);\r\n file.Write(this.fresnelLightColor.g);\r\n file.Write(this.fresnelLightColor.b);\r\n\r\n file.Write(this.fresnelDarkColor.r);\r\n file.Write(this.fresnelDarkColor.g);\r\n file.Write(this.fresnelDarkColor.b);\r\n\r\n file.Write(this.sharpen);\r\n\r\n //ver 6\r\n file.Write(this.UVType);\r\n\r\n //ver 7\r\n file.Write(this.type);\r\n\r\n //ver8\r\n file.Write(this.ref);\r\n\r\n //ver9\r\n file.Write(this.UWroldRep);\r\n file.Write(this.VWroldRep);\r\n file.Write(this.UWroldRo);\r\n file.Write(this.UWorldMove);\r\n file.Write(this.VWorldMove);\r\n\r\n //ver10\r\n file.Write(this.refraction);\r\n file.Write(this.side);\r\n\r\n //ver11\r\n file.Write(this.IsMaterialLock);\r\n }\r\n //#endregion\r\n}\r\n","import { Frustum, Material, Matrix3, Matrix4, MeshStandardMaterial, Object3D, Vector3 } from 'three';\r\nimport { iaop } from 'xaop';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { ByLayerColorIndex } from '../../Common/LayerConstant';\r\nimport { MatrixPlanarizere, matrixIsCoplane, tempMatrix1 } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { GetBox, IdentityMtx4, UpdateBoundingSphere, equaln, equalv3 } from '../../Geometry/GeUtils';\r\nimport { Vec3 } from '../../Geometry/IVec3';\r\nimport { IntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { CADObject } from '../CADObject';\r\nimport { HistorycRecord } from '../HistorycRecord';\r\nimport { ISerialize } from '../ISerialize';\r\nimport { LayerTableRecord } from '../LayerTableRecord';\r\nimport { ObjectId } from '../ObjectId';\r\nimport { PhysicalMaterialRecord } from '../PhysicalMaterialRecord';\r\n\r\n/**\r\n * Entity 是所有图元的基类,绘制的实体都集成该类.\r\n */\r\n@Factory\r\nexport class Entity extends CADObject\r\n{\r\n\r\n ParentEntity: Entity; //当这个实体是内嵌实体时,提供了一个访问它父亲的链接\r\n IsEmbedEntity = false;//当这个值为true时,这个实体是复合实体的内嵌实体\r\n\r\n /**\r\n * 该实体的只有一个渲染类型,任何渲染类型都一个样\r\n */\r\n protected OnlyRenderType = false;\r\n protected HasEdgeRenderType = false;//拥有封边检查绘制模式\r\n protected HasPlaceFaceRenderType = false;//拥有排版面绘制模式\r\n protected HasBigHoleFaceRenderType = false;//拥有大孔面绘制模式\r\n\r\n protected _CacheDrawObject = new Map<RenderType, Object3D>();\r\n //材质id\r\n protected _MaterialId: ObjectId<PhysicalMaterialRecord>;\r\n protected _Color: number = HostApplicationServices.CurrentColorindex;\r\n protected _Layer: ObjectId<LayerTableRecord>;\r\n\r\n //自身坐标系\r\n protected _Matrix = new Matrix4();\r\n\r\n constructor()\r\n {\r\n super();\r\n if (this._drawObject)\r\n throw \"未知错误 实体内部已经有对象\";\r\n\r\n this._drawObject = undefined;\r\n }\r\n\r\n //模块空间的标系\r\n protected _SpaceOCS: Matrix4 = new Matrix4();\r\n get CacheDrawObject() { return this._CacheDrawObject; }\r\n\r\n get SpaceCSNoClone() { return this._SpaceOCS; }\r\n get SpaceOCS()\r\n {\r\n return this._SpaceOCS.clone();\r\n }\r\n\r\n set SpaceOCS(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._SpaceOCS.copy(m);\r\n }\r\n\r\n get SpaceOCSInv()\r\n {\r\n return new Matrix4().getInverse(this._SpaceOCS);\r\n }\r\n\r\n protected _Visible = true;\r\n protected _VisibleInRender = true;//在渲染器中显示\r\n protected _Freeze = false;//冻结(无法被选中)\r\n\r\n get Freeze() { return this._Freeze; }\r\n set Freeze(f: boolean)\r\n {\r\n if (f === this._Freeze) return;\r\n this.WriteAllObjectRecord();\r\n this._Freeze = f;\r\n this.Update(UpdateDraw.Material);\r\n }\r\n\r\n get VisibleInRender() { return this._VisibleInRender; }\r\n set VisibleInRender(v: boolean)\r\n {\r\n if (this._VisibleInRender !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._VisibleInRender = v;\r\n }\r\n }\r\n\r\n protected _LockMaterial = false;// 锁定材质\r\n\r\n get LockMaterial() { return this._LockMaterial; }\r\n set LockMaterial(f: boolean)\r\n {\r\n if (f === this._LockMaterial) return;\r\n this.WriteAllObjectRecord();\r\n this._LockMaterial = f;\r\n }\r\n\r\n @AutoRecord GroupId: ObjectId;\r\n @AutoRecord Template: ObjectId;\r\n //加工组\r\n @AutoRecord ProcessingGroupList: ObjectId[] = [];\r\n\r\n /**\r\n * 当AutoUpdate为false时,记录需要更新的标志.\r\n * 以便延迟更新时找到相应的更新标志.\r\n */\r\n NeedUpdateFlag: UpdateDraw = UpdateDraw.None;\r\n AutoUpdate = true;\r\n CopyInRenderTpye: RenderType; //记录在哪种RenderType下copy的\r\n set Material(materialId: ObjectId<PhysicalMaterialRecord>)\r\n {\r\n if (this.LockMaterial)\r\n return;\r\n\r\n if (materialId === this._MaterialId) return;\r\n\r\n if (this._db && materialId?.Object)//我们放宽校验,当图形未加入到图纸时,我们允许它任意设置材质\r\n {\r\n if (!(materialId.Object instanceof PhysicalMaterialRecord))\r\n throw \"程序内部错误!设置材质错误:该对象不是材质\";\r\n\r\n if (materialId.Object.Db !== this.Db)\r\n throw \"程序内部错误!设置材质错误:不同图纸间材质\";\r\n }\r\n const _obj = this._MaterialId?.Object;\r\n if (_obj?.IsMaterialLock) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._MaterialId = materialId;\r\n for (let [type, obj] of this._CacheDrawObject)\r\n this.UpdateDrawObjectMaterial(type, obj);\r\n }\r\n\r\n get Material()\r\n {\r\n if (this._MaterialId?.IsErase)\r\n return;\r\n return this._MaterialId;\r\n }\r\n\r\n GetMaterialSlots() { }\r\n\r\n IsMtlLockAtSlot(slotIndex?: number)\r\n {\r\n if (this.LockMaterial)\r\n return true;\r\n return this.Material?.Object?.IsMaterialLock;\r\n }\r\n\r\n SetMaterialAtSlot(mtl: ObjectId<PhysicalMaterialRecord>, slotIndex?: number)\r\n {\r\n if (this.IsMtlLockAtSlot())\r\n return;\r\n this.WriteAllObjectRecord();\r\n this.Material = mtl;\r\n }\r\n\r\n GetMtlLockedStatus()\r\n {\r\n const locked = this.Material?.Object?.IsMaterialLock;\r\n return {\r\n allMtlLocked: locked,\r\n partMtlLocked: locked,\r\n };\r\n }\r\n\r\n GetPhyMtlRecords(): PhysicalMaterialRecord[]\r\n {\r\n const mtl = this.Material;\r\n if (mtl?.Object)\r\n return [mtl.Object];\r\n return [];\r\n }\r\n\r\n get HasLayer() { return this._Layer?.Object !== undefined; }\r\n\r\n get Layer(): ObjectId<LayerTableRecord>\r\n {\r\n return this._Layer?.Object ? this._Layer : HostApplicationServices.Database.LayerTable.Current ?? HostApplicationServices.Database.DefaultLayer.Id;\r\n }\r\n\r\n set Layer(id: ObjectId<LayerTableRecord>)\r\n {\r\n if (!id || id === this._Layer) return;\r\n this.WriteAllObjectRecord();\r\n const oldLayerIsOff = this._Layer?.Object?.IsOff;\r\n const oldLayerIsLocked = this._Layer?.Object?.IsLocked;\r\n const oldLayerColorIndex = this._Layer?.Object?.ColorIndex;\r\n this._Layer = id;\r\n // 更新隐藏\r\n if (id.Object.IsOff !== oldLayerIsOff)\r\n this.UpdateVisible();\r\n // 更新锁定\r\n if (id.Object.IsLocked !== oldLayerIsLocked)\r\n {\r\n this.Freeze = id.Object.IsLocked;\r\n for (let [type, obj] of this._CacheDrawObject)\r\n this.UpdateDrawObjectMaterial(type, obj);\r\n }\r\n // 更新颜色\r\n else if (this._Color === ByLayerColorIndex && id.Object.ColorIndex !== oldLayerColorIndex)\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n this.UpdateDrawObjectMaterial(type, obj);\r\n }\r\n }\r\n SetAllMaterialAtSlot(mtl: ObjectId<PhysicalMaterialRecord>)\r\n {\r\n if (this.LockMaterial)\r\n return;\r\n this.SetMaterialAtSlot(mtl);\r\n }\r\n\r\n set ColorIndex(color: number)\r\n {\r\n if (color !== this._Color)\r\n {\r\n let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.redoData = new EntityColorHistoryRecord(color);\r\n hisRec.undoData = new EntityColorHistoryRecord(this._Color);\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n\r\n this._Color = color;\r\n this.Update(UpdateDraw.Material);\r\n }\r\n }\r\n\r\n get ColorIndex(): number\r\n {\r\n return this._Color;\r\n }\r\n\r\n get DrawColorIndex(): number\r\n {\r\n return this._Color === ByLayerColorIndex ? this.Layer.Object.ColorIndex : this._Color;\r\n }\r\n\r\n /**\r\n * 炸开实体\r\n */\r\n Explode(): Entity[] { return []; }\r\n\r\n /**\r\n * 返回对象的包围框.\r\n */\r\n get BoundingBox()\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n return GetBox(obj);\r\n return GetBox(this.GetDrawObjectFromRenderType());\r\n }\r\n\r\n /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let mtxBak = this._Matrix;\r\n this._Matrix = IdentityMtx4;\r\n let isClearDraw = this._CacheDrawObject.size === 0;\r\n let box = this.BoundingBox;\r\n this._Matrix = mtxBak;\r\n if (isClearDraw)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n obj.matrix = this._Matrix;//因为使用了备份的矩阵,导致此时这个矩形是错误的,这里还原它\r\n this.Update(UpdateDraw.Matrix);//保证盒子是正确的\r\n }\r\n return new Box3Ext().copy(box);\r\n }\r\n\r\n GetBoundingBoxInMtx(mtx: Matrix4): Box3Ext\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCS.premultiply(mtx));\r\n }\r\n\r\n get BoundingBoxInSpaceCS(): Box3Ext\r\n {\r\n return this.GetBoundingBoxInMtx(this.SpaceOCSInv);\r\n }\r\n\r\n get OCS(): Matrix4\r\n {\r\n return this._Matrix.clone();\r\n }\r\n\r\n get OCSNoClone()\r\n {\r\n return this._Matrix;\r\n }\r\n\r\n //直接设置实体的矩阵,谨慎使用该函数,没有更新实体.\r\n set OCS(mat4: Matrix4)\r\n {\r\n this._Matrix.copy(mat4);\r\n }\r\n get Normal(): Vector3\r\n {\r\n return new Vector3().setFromMatrixColumn(this._Matrix, 2);\r\n }\r\n get Position(): Vector3\r\n {\r\n return new Vector3().setFromMatrixPosition(this._Matrix);\r\n }\r\n\r\n Move(v: Vec3)\r\n {\r\n if (equaln(v.x, 0) && equaln(v.y, 0) && equaln(v.z, 0)) return this;\r\n tempMatrix1.identity().setPosition(v.x, v.y, v.z);\r\n this.ApplyMatrix(tempMatrix1);\r\n return this;\r\n }\r\n\r\n set Position(pt: Vector3)\r\n {\r\n let moveX = pt.x - this._Matrix.elements[12];\r\n let moveY = pt.y - this._Matrix.elements[13];\r\n let moveZ = pt.z - this._Matrix.elements[14];\r\n\r\n this.Move({ x: moveX, y: moveY, z: moveZ });\r\n }\r\n\r\n get Z() { return this._Matrix.elements[14]; }\r\n set Z(z: number)\r\n {\r\n if (equaln(this.Z, z)) return;\r\n this.Move({ x: 0, y: 0, z: z - this.Z });\r\n }\r\n\r\n //Z轴归0\r\n Z0()\r\n {\r\n if (this._Matrix.elements[14] === 0) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n this.Move({ x: 0, y: 0, z: -this.Z });\r\n return this;\r\n }\r\n\r\n //坐标系二维化\r\n MatrixPlanarizere()\r\n {\r\n let z = this._Matrix.elements[10];\r\n if (equaln(Math.abs(z), 1, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n MatrixPlanarizere(this._Matrix, false);\r\n }\r\n return this;\r\n }\r\n\r\n get OCSInv(): Matrix4\r\n {\r\n return new Matrix4().getInverse(this._Matrix);\r\n }\r\n\r\n /**\r\n * 与指定实体是否共面.\r\n */\r\n IsCoplaneTo(e: Entity): boolean\r\n {\r\n return matrixIsCoplane(this._Matrix, e.OCSNoClone, 1e-4);\r\n }\r\n\r\n /**\r\n * 测试两个实体的包围盒是否相交.\r\n */\r\n BoundingBoxIntersectWith(en: Entity): boolean\r\n {\r\n let box = this.BoundingBox;\r\n let box2 = en.BoundingBox;\r\n return box && box2 && box.intersectsBox(box2);\r\n }\r\n\r\n //#region Draw\r\n\r\n ClearDraw()\r\n {\r\n if (this._drawObject)\r\n {\r\n DisposeThreeObj(this._drawObject);\r\n this._drawObject = undefined;\r\n }\r\n\r\n for (let [, obj] of this._CacheDrawObject)\r\n DisposeThreeObj(obj);\r\n this._CacheDrawObject.clear();\r\n return this;\r\n }\r\n ClearDrawOfJig()\r\n {\r\n let jig = this._CacheDrawObject.get(RenderType.Jig);\r\n if (jig)\r\n this._CacheDrawObject.delete(RenderType.Jig);\r\n for (let [type, obj] of this._CacheDrawObject)\r\n DisposeThreeObj(obj);\r\n this._CacheDrawObject.clear();\r\n if (jig)\r\n this._CacheDrawObject.set(RenderType.Jig, jig);\r\n }\r\n\r\n get IsOnlyRender()\r\n {\r\n return this.OnlyRenderType;\r\n }\r\n\r\n protected get CaseShadow()\r\n {\r\n if (!this.MeshMaterial) return true;\r\n if (Array.isArray(this.MeshMaterial)) return true;\r\n return !this.MeshMaterial.transparent || this.MeshMaterial.opacity === 1;\r\n }\r\n\r\n protected get ReceiveShadow()\r\n {\r\n return this.CaseShadow;\r\n }\r\n\r\n _drawObject: Object3D = undefined;\r\n\r\n get DrawObject()\r\n {\r\n if (this.constructor.name === \"Entity\" || this.constructor.name === \"CADObject\")\r\n throw \"出错了\";\r\n\r\n if (this._drawObject)\r\n return this._drawObject;\r\n\r\n this._drawObject = new Object3D();\r\n if (!this.IsEmbedEntity)\r\n this._drawObject.userData.Entity = this;\r\n if (this.IsVisible)\r\n {\r\n this._CurRenderType = HostApplicationServices._renderType;\r\n let obj = this.GetDrawObjectFromRenderType(HostApplicationServices._renderType);\r\n if (obj) this._drawObject.add(obj);\r\n }\r\n else\r\n this._drawObject.visible = false;\r\n return this._drawObject;\r\n }\r\n\r\n get JigObject()\r\n {\r\n let obj = this.GetDrawObjectFromRenderType(RenderType.Jig);\r\n if (obj && !this.IsEmbedEntity)\r\n obj.userData.Entity = this;\r\n return obj;\r\n }\r\n\r\n DestroyJigObject()\r\n {\r\n let obj = this._CacheDrawObject.get(RenderType.Jig);\r\n if (obj)\r\n {\r\n this._CacheDrawObject.delete(RenderType.Jig);\r\n DisposeThreeObj(obj);\r\n if (obj.parent)\r\n obj.parent.remove(obj);\r\n }\r\n }\r\n\r\n //当前绘制类型,在.DrawObject 和 UpdateRenderType中初始化和更新\r\n protected _CurRenderType: RenderType;\r\n UpdateRenderType(type: RenderType)\r\n {\r\n if (this._CurRenderType !== type || this.DrawObject.children.length === 0)\r\n {\r\n this._CurRenderType = type;\r\n if ((this.OnlyRenderType && this.DrawObject.children.length > 0) || !this._Visible) return;\r\n Object3DRemoveAll(this.DrawObject);\r\n let obj = this.GetDrawObjectFromRenderType(type);\r\n if (obj) this.DrawObject.add(obj);\r\n }\r\n }\r\n\r\n GetDrawObjectFromRenderType(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (this.OnlyRenderType)\r\n {\r\n if (renderType === RenderType.Jig)\r\n return;\r\n if (renderType < 100)\r\n renderType = RenderType.Wireframe;\r\n else\r\n renderType = RenderType.WireframePrint;\r\n }\r\n if (renderType === RenderType.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 if (!this._CacheDrawObject) return;\r\n\r\n /**\r\n * br1 - br2 关联切割(斜的)\r\n let temp = br1.Clone() 临时的对象来计算切割后的结果\r\n temp br2 因为求交集,所以要访问temp.csg temp.MeshGeom (drawObjectsize = 0)\r\n temp.setContour update失败\r\n */\r\n if (mode & UpdateDraw.Geometry)// && this._CacheDrawObject.size > 0 因为有时提前获取了MeshGeom 如果判断绘制的个数 会导致没有刷新\r\n this.UpdateDrawGeometry();\r\n\r\n this.UpdateVisible();\r\n\r\n let isJigIng = this._CacheDrawObject.has(RenderType.Jig);\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n if (isJigIng && type !== RenderType.Jig)\r\n continue;\r\n\r\n if (mode & UpdateDraw.Geometry)\r\n {\r\n if (obj.userData.IsClone)\r\n {\r\n let parent = obj.parent;\r\n DisposeThreeObj(obj);\r\n this._CacheDrawObject.delete(type);\r\n let newObj = this.GetDrawObjectFromRenderType(type);\r\n if (parent)\r\n {\r\n parent.remove(obj);\r\n parent.add(newObj);\r\n }\r\n obj = newObj;\r\n }\r\n else\r\n this.UpdateDrawObject(type, obj);\r\n }\r\n\r\n if (mode & UpdateDraw.Material)\r\n this.UpdateDrawObjectMaterial(type, obj);\r\n\r\n if (mode & UpdateDraw.Matrix || mode & UpdateDraw.Geometry)\r\n {\r\n obj.updateMatrixWorld(true);\r\n // if (this.Id)//如果这个是Jig实体,那么我们更新这个盒子球似乎也没有意义 (虽然这在某些情况能改进性能,但是在绘制圆弧的时候,因为没有更新圆弧的盒子,导致绘制出来的圆弧无法被选中)\r\n obj.traverse(UpdateBoundingSphere);\r\n }\r\n\r\n }\r\n this.NeedUpdateFlag = UpdateDraw.None;\r\n }\r\n\r\n /**\r\n * 当实体需要更新时,需要重载该方法,实现实体更新\r\n */\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n\r\n }\r\n\r\n /**\r\n * 当实体需要被更新时,更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n\r\n }\r\n\r\n protected get MeshMaterial(): Material | Material[]\r\n {\r\n const mtlId = this._MaterialId;\r\n if (!mtlId?.IsErase && mtlId?.Object)\r\n return mtlId.Object.Material as MeshStandardMaterial;\r\n return HostApplicationServices.DefaultMeshMaterial;\r\n }\r\n\r\n /**\r\n * 更新实体Jig状态时的材质\r\n */\r\n UpdateJigMaterial(color = 8)\r\n {\r\n }\r\n RestoreJigMaterial()\r\n {\r\n for (let [type, en] of this._CacheDrawObject)\r\n this.UpdateDrawObjectMaterial(type, en);\r\n }\r\n get Visible()\r\n {\r\n return this._Visible;\r\n }\r\n set Visible(v: boolean)\r\n {\r\n if (v !== this._Visible)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Visible = v;\r\n this.UpdateVisible();\r\n }\r\n }\r\n\r\n get IsVisible()\r\n {\r\n return !this._isErase && this._Visible && !this.Layer.Object.IsOff;\r\n }\r\n\r\n UpdateVisible()\r\n {\r\n if (this._drawObject)\r\n {\r\n this._drawObject.visible = this.IsVisible;\r\n if (this.IsVisible)\r\n this.UpdateRenderType(HostApplicationServices._renderType);\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n GoodBye()\r\n {\r\n super.GoodBye();\r\n if (this._drawObject && this._drawObject.parent)\r\n this._drawObject.parent.remove(this._drawObject);\r\n this.ClearDraw();\r\n }\r\n\r\n Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this._isErase)\r\n return;\r\n this.__UpdateVersion__++;\r\n super.Erase(isErase);\r\n this.UpdateVisible();\r\n this.EraseEvent(isErase);\r\n }\r\n\r\n @iaop\r\n EraseEvent(isErase: boolean)\r\n {\r\n\r\n }\r\n\r\n static _xa = new Vector3;\r\n static _ya = new Vector3;\r\n static _za = new Vector3;\r\n /**\r\n * 使用统一的方法设置对象的矩阵.\r\n * 需要对缩放矩形进行重载.避免对象矩阵不是单位矩阵\r\n */\r\n ApplyMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n m.extractBasis(Entity._xa, Entity._ya, Entity._za);\r\n if (\r\n equaln(Entity._xa.lengthSq(), 1, 1e-4) &&\r\n equaln(Entity._ya.lengthSq(), 1, 1e-4) &&\r\n equaln(Entity._za.lengthSq(), 1, 1e-4)\r\n )\r\n {\r\n this._Matrix.multiplyMatrices(m, this._Matrix);\r\n this._SpaceOCS.multiplyMatrices(m, this._SpaceOCS);\r\n if (!equalv3(Entity._xa.cross(Entity._ya).normalize(), Entity._za))\r\n this.ApplyMirrorMatrix(m);\r\n }\r\n else\r\n this.ApplyScaleMatrix(m);\r\n this.Update(UpdateDraw.Matrix);\r\n return this;\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n return this;\r\n }\r\n\r\n /**\r\n *\r\n * @param snapMode 捕捉模式(单一)\r\n * @param pickPoint const\r\n * @param lastPoint const\r\n * @param viewXform const 最近点捕捉需要这个变量\r\n * @returns object snap points\r\n */\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3,\r\n frustum?: Frustum,\r\n ): Vector3[]\r\n {\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n return [];\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n\r\n }\r\n\r\n GetStretchPoints(): Array<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() as ObjectId<PhysicalMaterialRecord>;\r\n if (!this._MaterialId)\r\n this._MaterialId = file.database?.DefaultMaterial?.Id;\r\n this._Matrix.fromArray(file.Read());\r\n\r\n if (ver === 2)\r\n this.Owner = file.ReadObjectId();\r\n\r\n if (ver > 3)\r\n this.Template = file.ReadObjectId();\r\n\r\n if (ver > 4)\r\n this.GroupId = file.ReadHardObjectId();\r\n\r\n if (ver > 5)\r\n this._Visible = file.ReadBool();\r\n if (ver > 6)\r\n this._SpaceOCS.fromArray(file.Read());\r\n if (ver > 7)\r\n {\r\n let count = file.Read();\r\n this.ProcessingGroupList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadHardObjectId();\r\n if (id) this.ProcessingGroupList.push(id);\r\n }\r\n }\r\n\r\n if (ver > 8)\r\n this._Freeze = file.ReadBool();\r\n else\r\n this._Freeze = false;\r\n\r\n if (ver > 9)\r\n this._VisibleInRender = file.ReadBool();\r\n else\r\n this._VisibleInRender = true;\r\n\r\n if (ver > 10)\r\n this._Layer = file.ReadObjectId() as ObjectId<LayerTableRecord>;\r\n else\r\n this._Layer = undefined;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(11);\r\n super.WriteFile(file);\r\n file.Write(this._Color);\r\n file.WriteHardObjectId(this._MaterialId);\r\n file.Write(this._Matrix.toArray());\r\n file.WriteObjectId(this.Template);\r\n file.WriteHardObjectId(this.GroupId);\r\n file.WriteBool(this._Visible);\r\n file.Write(this._SpaceOCS.toArray());\r\n\r\n file.Write(this.ProcessingGroupList.length);\r\n for (let id of this.ProcessingGroupList)\r\n file.WriteHardObjectId(id);\r\n\r\n file.WriteBool(this._Freeze);\r\n file.WriteBool(this._VisibleInRender);\r\n file.WriteHardObjectId(this._Layer);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n if (undoData instanceof EntityColorHistoryRecord)\r\n this.ColorIndex = undoData.color;\r\n }\r\n\r\n override CopyFrom(obj: CADObject)\r\n {\r\n let templateIdBak = this.Template;\r\n super.CopyFrom(obj);\r\n this.Update();\r\n this.Template = templateIdBak;\r\n }\r\n\r\n //#endregion\r\n}\r\n\r\n@Factory\r\nexport class EntityColorHistoryRecord implements ISerialize\r\n{\r\n constructor(public color: number) { }\r\n ReadFile(file: CADFiler): this\r\n {\r\n this.color = file.Read();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.Write(this.color);\r\n return this;\r\n }\r\n}\r\n","export enum StoreageKeys\r\n{\r\n IsLogin = \"isLogin\",\r\n PlatSession = \"platSession\",\r\n PlatToken = \"platToken\",\r\n UserName = \"userName\",\r\n UserPhone = \"userPhone\",\r\n ShopName = \"shopName\",\r\n ShopProps = \"ShopProps\",\r\n\r\n AgentShopName = \"AgentShopName\",//经销商名称\r\n AgentPhone = \"AgentPhone\",//经销商电话\r\n VersionName = \"VersionName\",//版本名称\r\n RegisterTime = \"RegisterTime\",//注册时间\r\n\r\n RenderType = \"renderType\",\r\n ExactDrill = \"openExactDrill\",\r\n ConfigName = \"configName_\",\r\n IsNewErp = \"isNewErp\",\r\n RoomName = \"roomName\",\r\n LastOpenFileId = \"lastfid\",\r\n Uid = \"uid\",\r\n Goods = \"Goods_\",\r\n DrillTemp = \"drilltemp_\",\r\n DrillReactor = \"drillRreactor\",\r\n kjlConfig = \"kjl\",\r\n HistoryWs = \"HistoryWs\",\r\n}\r\n","import { MathUtils } from \"three\";\r\nimport { equaln } from \"../Geometry/GeUtils\";\r\nimport { clamp as CLAMP, FixedNotZero } from \"./Utils\";\r\n\r\nlet OPERATORS = new Set([\"+\", \"-\", \"*\", \"/\"]);\r\n\r\n/**\r\n * eval2(\"+10\", { L: 100 }, \"L\")\r\n * @param expr\r\n * @param [params]\r\n * @param [defaultParam] 当输入 +10 这样的表达式时,设置默认的操作变量\r\n * @returns 计算结果\r\n */\r\nexport function eval2(expr: string, params?: {}, defaultParam?: string): number\r\n{\r\n //eval_gen_code\r\n let abs = Math.abs;\r\n let acos = Math.acos;\r\n let acosh = Math.acosh;\r\n let asin = Math.asin;\r\n let asinh = Math.asinh;\r\n let atan = Math.atan;\r\n let atanh = Math.atanh;\r\n let atan2 = Math.atan2;\r\n let ceil = Math.ceil;\r\n let cbrt = Math.cbrt;\r\n let expm1 = Math.expm1;\r\n let clz32 = Math.clz32;\r\n let cos = Math.cos;\r\n let cosh = Math.cosh;\r\n let exp = Math.exp;\r\n let floor = Math.floor;\r\n let fround = Math.fround;\r\n let hypot = Math.hypot;\r\n let imul = Math.imul;\r\n let log = Math.log;\r\n let log1p = Math.log1p;\r\n let log2 = Math.log2;\r\n let log10 = Math.log10;\r\n let max = Math.max;\r\n let min = Math.min;\r\n let pow = Math.pow;\r\n let random = Math.random;\r\n let round = Math.round;\r\n let sign = Math.sign;\r\n let sin = Math.sin;\r\n let sinh = Math.sinh;\r\n let sqrt = Math.sqrt;\r\n let tan = Math.tan;\r\n let tanh = Math.tanh;\r\n let trunc = Math.trunc;\r\n let E = Math.E;\r\n let LN10 = Math.LN10;\r\n let LN2 = Math.LN2;\r\n let LOG10E = Math.LOG10E;\r\n let LOG2E = Math.LOG2E;\r\n let PI = Math.PI;\r\n let SQRT1_2 = Math.SQRT1_2;\r\n let SQRT2 = Math.SQRT2;\r\n let clamp = CLAMP;\r\n let eq = equaln;\r\n let r2d = MathUtils.radToDeg;\r\n let d2r = MathUtils.degToRad;\r\n let R2D = MathUtils.RAD2DEG;\r\n let D2R = MathUtils.DEG2RAD;\r\n let fix = FixedNotZero;\r\n //eval_gen_code\r\n\r\n let code = \"\";\r\n //模板材质变量的value默认是\"\",会导致eval报错,params[name]为\"\"时换成0\r\n if (params)\r\n for (let name in params)\r\n code += `let ${name} = ${params[name] != \"\" ? params[name] : \"0\"};`;\r\n\r\n if (defaultParam)\r\n {\r\n expr = expr.trimLeft();\r\n if (expr[0] && OPERATORS.has(expr[0]))\r\n expr = defaultParam + expr;\r\n }\r\n\r\n code += expr;\r\n\r\n let result = eval(code);\r\n\r\n if (typeof result === \"function\")\r\n 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 { 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)\r\n {\r\n let key = `${color},${side},${enableTransparent ? 1 : 0}`;\r\n if (this._ConceptualMaterial.has(key))\r\n return this._ConceptualMaterial.get(key);\r\n\r\n let shaderParams = GetGoodShaderSimple(new Vector3().fromArray(this.GetColor(color).toArray()), side, ColorMaterial.UseLogBuf);\r\n let mtl = new ShaderMaterial(shaderParams);\r\n if (enableTransparent)\r\n {\r\n Object.defineProperty(mtl, \"transparent\", {\r\n get: () => mtl.uniforms.opacity.value !== 1\r\n });\r\n Object.defineProperty(mtl.uniforms.opacity, \"value\", {\r\n get: () => HostApplicationServices.ConceptualOpacity\r\n });\r\n }\r\n this._ConceptualMaterial.set(key, mtl);\r\n return mtl;\r\n }\r\n\r\n 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 + 1);\r\n }\r\n offset += count;\r\n }\r\n\r\n }\r\n\r\n // merge indices\r\n\r\n if (isIndexed)\r\n {\r\n\r\n let indexOffset = 0;\r\n let mergedIndex = [];\r\n\r\n for (let i = 0; i < geometries.length; ++i)\r\n {\r\n\r\n let index = geometries[i].index;\r\n\r\n for (let j = 0; j < index.count; ++j)\r\n {\r\n\r\n mergedIndex.push(index.getX(j) + indexOffset);\r\n\r\n }\r\n\r\n indexOffset += geometries[i].attributes.position.count;\r\n\r\n }\r\n\r\n mergedGeometry.setIndex(mergedIndex);\r\n\r\n }\r\n\r\n // merge attributes\r\n\r\n for (let name in attributes)\r\n {\r\n\r\n let mergedAttribute = MergeBufferAttributes(attributes[name]);\r\n\r\n if (!mergedAttribute) return null;\r\n\r\n mergedGeometry.setAttribute(name, mergedAttribute);\r\n\r\n }\r\n\r\n // merge morph attributes\r\n\r\n for (let name in morphAttributes)\r\n {\r\n\r\n let numMorphTargets = morphAttributes[name][0].length;\r\n\r\n if (numMorphTargets === 0) break;\r\n\r\n mergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\r\n mergedGeometry.morphAttributes[name] = [];\r\n\r\n for (let i = 0; i < numMorphTargets; ++i)\r\n {\r\n\r\n let morphAttributesToMerge: any[] = [];\r\n\r\n for (let j = 0; j < morphAttributes[name].length; ++j)\r\n {\r\n\r\n morphAttributesToMerge.push(morphAttributes[name][j][i]);\r\n\r\n }\r\n\r\n let mergedMorphAttribute = MergeBufferAttributes(morphAttributesToMerge);\r\n\r\n if (!mergedMorphAttribute) return null;\r\n\r\n mergedGeometry.morphAttributes[name].push(mergedMorphAttribute);\r\n\r\n }\r\n\r\n }\r\n\r\n return mergedGeometry;\r\n\r\n }\r\n\r\n export function MergeBufferAttributes(attributes: BufferAttribute[]): BufferAttribute\r\n {\r\n let TypedArray;\r\n let itemSize: number;\r\n let normalized: boolean;\r\n let arrayLength = 0;\r\n\r\n for (let i = 0; i < attributes.length; ++i)\r\n {\r\n\r\n let attribute = attributes[i];\r\n\r\n if (TypedArray === undefined) TypedArray = attribute.array.constructor;\r\n if (TypedArray !== attribute.array.constructor) return null;\r\n\r\n if (itemSize === undefined) itemSize = attribute.itemSize;\r\n if (itemSize !== attribute.itemSize) return null;\r\n\r\n if (normalized === undefined) normalized = attribute.normalized;\r\n if (normalized !== attribute.normalized) return null;\r\n\r\n arrayLength += attribute.array.length;\r\n\r\n }\r\n\r\n let array = new TypedArray(arrayLength);\r\n let offset = 0;\r\n\r\n for (let i = 0; i < attributes.length; ++i)\r\n {\r\n\r\n array.set(attributes[i].array, offset);\r\n\r\n offset += attributes[i].array.length;\r\n\r\n }\r\n\r\n return new BufferAttribute(array, itemSize, normalized);\r\n\r\n }\r\n\r\n}\r\n","import { MathUtils, Vector3 } from \"three\";\r\nimport { equaln, YAxis, ZAxis } from \"./GeUtils\";\r\n\r\n/**\r\n * 轨道控制的数学类,观察向量和角度的互相转换\r\n * 当x当抬头或者低头到90度时,触发万向锁.\r\n */\r\nexport class Orbit\r\n{\r\n //抬头低头 正数抬头 负数低头\r\n private phi: number = 0;//Φ\r\n\r\n //身体旋转 0为正右边 逆时针旋转\r\n theta: number = 0;//θ\r\n\r\n get RoX()\r\n {\r\n return this.phi;\r\n }\r\n set RoX(v)\r\n {\r\n this.phi = MathUtils.clamp(v, Math.PI * -0.49, Math.PI * 0.49);\r\n }\r\n\r\n /**\r\n * 使用旋转角度 计算观察向量\r\n * @param [outDirection] 引用传入,如果传入,那么就不构造新的向量\r\n * @returns 返回观察向量\r\n */\r\n UpdateDirection(outDirection = new Vector3()): Vector3\r\n {\r\n outDirection.z = Math.sin(this.phi);\r\n //归一化专用.\r\n let d = Math.abs(Math.cos(this.phi));\r\n\r\n outDirection.x = Math.cos(this.theta) * d;\r\n outDirection.y = Math.sin(this.theta) * d;\r\n\r\n return outDirection;\r\n }\r\n\r\n /**\r\n * 使用观察向量,计算旋转角度\r\n * @param dir 这个向量会被修改成单位向量.\r\n */\r\n SetFromDirection(dir: Vector3): void\r\n {\r\n dir.normalize();\r\n this.phi = Math.asin(dir.z);\r\n if (equaln(dir.x, 0) && equaln(dir.y, 0))\r\n if (dir.z > 0)\r\n this.theta = Math.PI * -0.5;\r\n else\r\n this.theta = Math.PI * 0.5;\r\n else\r\n this.theta = Math.atan2(dir.y, dir.x);\r\n }\r\n\r\n /**\r\n * 参考任意轴坐标系算法.\r\n * http://help.autodesk.com/view/ACD/2017/CHS/?guid=GUID-E19E5B42-0CC7-4EBA-B29F-5E1D595149EE\r\n */\r\n static ComputUpDirection(n: Vector3, ay: Vector3 = new Vector3(), ax: Vector3 = new Vector3()): Vector3\r\n {\r\n n.normalize();\r\n if (Math.abs(n.x) < 0.015625 && Math.abs(n.y) < 0.015625)\r\n ax.crossVectors(YAxis, n);\r\n else\r\n ax.crossVectors(ZAxis, n);\r\n ay.crossVectors(n, ax);\r\n ax.normalize();\r\n ay.normalize();\r\n return ay;\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from 'three';\r\nimport { arrayRemoveDuplicateBySort } from '../Common/ArrayExt';\r\nimport { clamp } from '../Common/Utils';\r\nimport { Arc } from '../DatabaseServices/Entity/Arc';\r\nimport { Circle } from '../DatabaseServices/Entity/Circle';\r\nimport { Curve } from '../DatabaseServices/Entity/Curve';\r\nimport { Ellipse } from '../DatabaseServices/Entity/Ellipse';\r\nimport { Line } from '../DatabaseServices/Entity/Line';\r\nimport { Polyline } from '../DatabaseServices/Entity/Polyline';\r\nimport { ComparePointFnGenerate, equaln, equalv2, equalv3 } from '../Geometry/GeUtils';\r\n\r\n/**\r\n * 相交延伸选项.\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum IntersectOption\r\n{\r\n /**\r\n * 两者都不延伸\r\n */\r\n ExtendNone = 0,\r\n /**\r\n * 延伸自身\r\n */\r\n ExtendThis = 1,\r\n /**\r\n * 延伸参数\r\n */\r\n ExtendArg = 2,\r\n /**\r\n * 延伸两者\r\n */\r\n ExtendBoth = 3,\r\n}\r\n\r\nexport interface IntersectResult\r\n{\r\n pt: Vector3,\r\n thisParam: number,\r\n argParam: number,\r\n}\r\n\r\n//延伸自身还是参数反转\r\nexport function reverseIntersectOption(intType: IntersectOption)\r\n{\r\n if (intType === IntersectOption.ExtendThis)\r\n intType = IntersectOption.ExtendArg;\r\n else if (intType === IntersectOption.ExtendArg)\r\n intType = IntersectOption.ExtendThis;\r\n return intType;\r\n}\r\n/**\r\n * 校验相交点是否满足延伸选项\r\n * 算法会计算无限延伸状态下的曲线交点,调用该方法进行校验返回校验后的点表\r\n *\r\n * @param {Vector3[]} intRes 相交点.曲线当作完全状态下的相交点\r\n * @param {Curve} c1 曲线1 由this参数传入\r\n * @param {Curve} c2 曲线2 由arg 参数传入\r\n * @param {Intersect} extType 延伸选项.\r\n * @returns {Array<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 { 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 //直接提供点在线上的参数,不管点有没有在线上\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\r\n /**\r\n * 偏移曲线\r\n * @param offsetDist 左边负数 右边正数\r\n * @returns 返回偏移后的曲线 可能返回多条曲线\r\n */\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.DrawColorIndex));\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n */\r\n override UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let pts = this.Shape.getPoints(this.GetDrawCount());\r\n let plObj = obj as TLine;\r\n let geo = plObj.geometry as BufferGeometry | LineGeometry;\r\n if (geo instanceof LineGeometry)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, 0);\r\n (geo as LineGeometry).setPositions(array);\r\n }\r\n else\r\n {\r\n //@ts-ignore\r\n for (let p of pts) p.z = 0;\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts as unknown as Vector3[]))\r\n updateGeometry(plObj, new BufferGeometry().setFromPoints(pts));\r\n }\r\n }\r\n\r\n /**\r\n * 重载:更新实体材质\r\n */\r\n override UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (type === RenderType.WireframePrint)\r\n {\r\n //打印模式暂时不需要改颜色\r\n }\r\n else\r\n {\r\n let m = obj as Line;\r\n m.material = material || ColorMaterial.GetLineMaterial(this.DrawColorIndex);\r\n }\r\n }\r\n\r\n override UpdateJigMaterial(color = 8)\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n this.UpdateDrawObjectMaterial(type, obj, ColorMaterial.GetLineMaterial(color));\r\n }\r\n }\r\n}\r\n\r\nexport const DbCurve = Curve;\r\n","import { Matrix4, Vector2, Vector3 } from \"three\";\r\n\r\nexport class Matrix2\r\n{\r\n //column-major\r\n el = [1, 0, 0, 1]; //ix iy jx jy [a c b d]\r\n\r\n set(ix: number, iy: number, jx: number, jy: number)\r\n {\r\n this.el[0] = ix;\r\n this.el[1] = iy;\r\n this.el[2] = jx;\r\n this.el[3] = jy;\r\n\r\n return this;\r\n }\r\n\r\n applyVector(vec: Vector2 | Vector3)\r\n {\r\n let x = vec.x;\r\n let y = vec.y;\r\n let e = this.el;\r\n vec.x = e[0] * x + e[2] * y;\r\n vec.y = e[1] * x + e[3] * y;\r\n return this;\r\n }\r\n\r\n fromMatrix4(mtx4: Matrix4)\r\n {\r\n this.set(mtx4.elements[0], mtx4.elements[1],\r\n mtx4.elements[3], mtx4.elements[4]\r\n );\r\n }\r\n\r\n setRotate(theta: number): this\r\n {\r\n let c = Math.cos(theta);\r\n let s = Math.sin(theta);\r\n this.set(c, s, -s, c);\r\n return this;\r\n }\r\n\r\n //自我求逆矩阵,返回自身\r\n invert(): this\r\n {\r\n //ref:https://www.mathsisfun.com/algebra/matrix-inverse.html\r\n let [a, c, b, d] = this.el;\r\n let det = 1 / (a * d - b * c);\r\n this.set(d * det, -c * det,\r\n -b * det, a * det\r\n );\r\n return this;\r\n }\r\n}\r\n","import { Line3, Plane, Ray, Vector3 } from \"three\";\r\n\r\nexport class PlaneExt extends Plane\r\n{\r\n constructor(normal = new Vector3(0, 0, 1), constant?: number | Vector3)\r\n {\r\n super(normal);\r\n if (typeof constant === \"number\")\r\n this.constant = constant;\r\n else if (constant)\r\n this.parseConstantFromPoint(constant);\r\n }\r\n\r\n parseConstantFromPoint(constant: Vector3)\r\n {\r\n this.constant = -this.normal.dot(constant);\r\n }\r\n\r\n intersectLine(line: Line3, optionalTarget = new Vector3(), extendLine = false): Vector3\r\n {\r\n let v1 = new Vector3();\r\n\r\n let direction = line.delta(v1);\r\n\r\n let denominator = this.normal.dot(direction);\r\n\r\n if (denominator === 0)\r\n {\r\n // line is coplanar, return origin\r\n if (this.distanceToPoint(line.start) === 0)\r\n {\r\n return optionalTarget.copy(line.start);\r\n }\r\n // Unsure if this is the correct method to handle this case.\r\n return undefined;\r\n }\r\n\r\n let t = - (line.start.dot(this.normal) + this.constant) / denominator;\r\n //If you not extendLine,check intersect point in Line\r\n if (!extendLine && (t < -1e-6 || t > 1))\r\n {\r\n return undefined;\r\n }\r\n\r\n return optionalTarget.copy(direction).multiplyScalar(t).add(line.start);\r\n }\r\n intersectRay(ray: Ray, optionalTarget?: Vector3, extendLine?: boolean): Vector3\r\n {\r\n // 从射线初始位置\r\n let line = new Line3(ray.origin.clone(), ray.origin.clone().add(ray.direction));\r\n return this.intersectLine(line, optionalTarget, extendLine);\r\n }\r\n}\r\n","import { Matrix2 } from './Matrix2';\r\n\r\nexport const ROTATE_MTX2 = new Matrix2().set(0, -1, 1, 0);\r\nexport function RotateUVs(geo: THREE.Geometry)\r\n{\r\n for (let uvs of geo.faceVertexUvs)\r\n {\r\n for (let uv of uvs)\r\n {\r\n for (let v of uv)\r\n ROTATE_MTX2.applyVector(v);\r\n }\r\n }\r\n geo.uvsNeedUpdate = true;\r\n}\r\n","import { Box3, BufferGeometry, Line3, Matrix3, Matrix4, Object3D, Shape, Line as TLine, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector2, MoveMatrix, equaln, equalv3, isParallelTo, updateGeometry } from '../../Geometry/GeUtils';\r\nimport { PlaneExt } from '../../Geometry/Plane';\r\nimport { ROTATE_MTX2 } from '../../Geometry/RotateUV';\r\nimport { IntersectEllipseAndLine, IntersectLineAndArc, IntersectLineAndCircle, IntersectLineAndLine, IntersectOption, IntersectPolylineAndCurve, IntersectResult, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\nimport { Arc } from './Arc';\r\nimport { Circle } from './Circle';\r\nimport { Curve } from './Curve';\r\nimport { Ellipse } from './Ellipse';\r\nimport { Polyline } from './Polyline';\r\n\r\n@Factory\r\nexport class Line extends Curve\r\n{\r\n\r\n constructor(private _StartPoint = new Vector3,\r\n private _EndPoint = new Vector3)\r\n {\r\n super();\r\n }\r\n\r\n get Is2D()\r\n {\r\n return super.Is2D && equaln(this._StartPoint.z, 0) && equaln(this._EndPoint.z, 0);\r\n }\r\n\r\n get Shape()\r\n {\r\n return new Shape([AsVector2(this._StartPoint), AsVector2(this._EndPoint)]);\r\n }\r\n\r\n Z0()\r\n {\r\n this.WriteAllObjectRecord();\r\n let ocsInv = this.OCSInv;\r\n let sp = this.StartPoint.setZ(0).applyMatrix4(ocsInv);\r\n let ep = this.EndPoint.setZ(0).applyMatrix4(ocsInv);\r\n this._StartPoint.copy(sp);\r\n this._EndPoint.copy(ep);\r\n this.Update();\r\n return this;\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this.StartPoint = this.StartPoint.applyMatrix4(m);\r\n this.EndPoint = this.EndPoint.applyMatrix4(m);\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n this.StartPoint = sp;\r\n this.EndPoint = ep;\r\n return this;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let pts = [this._StartPoint, this._EndPoint];\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, p.z);\r\n let geometry = new LineGeometry().setPositions(array);\r\n return new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n }\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n return new TLine(geo, ColorMaterial.GetLineMaterial(this.DrawColorIndex));\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let pts = [this._StartPoint, this._EndPoint];\r\n let plObj = obj as TLine;\r\n let geo = plObj.geometry as BufferGeometry | LineGeometry;\r\n if (geo instanceof LineGeometry)\r\n {\r\n let array: number[] = [];\r\n for (let p of pts) array.push(p.x, p.y, p.z);\r\n (geo as LineGeometry).setPositions(array);\r\n }\r\n else\r\n {\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts as unknown as Vector3[]))\r\n updateGeometry(plObj, new BufferGeometry().setFromPoints(pts));\r\n }\r\n }\r\n\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return [this.StartPoint, this.EndPoint];\r\n case ObjectSnapMode.Mid:\r\n return [this.GetPointAtParam(0.5)];\r\n case ObjectSnapMode.Nea:\r\n {\r\n let derv = this.GetFirstDeriv(0).normalize();\r\n let viewNormal = new Vector3().fromArray(viewXform.elements, 2 * 3);\r\n\r\n //平行不捕捉\r\n if (isParallelTo(viewNormal, derv))\r\n return [];\r\n\r\n let fNormal = new Vector3().crossVectors(viewNormal, derv);\r\n fNormal.crossVectors(derv, fNormal);\r\n\r\n let plane = new PlaneExt(fNormal, this.StartPoint);\r\n let plocal = plane.intersectLine(new Line3(pickPoint, pickPoint.clone().add(viewNormal)), new Vector3(), true);\r\n let pclosest = this.GetClosestPointTo(plocal, false);\r\n return [pclosest];\r\n }\r\n case ObjectSnapMode.Ext:\r\n return [this.GetClosestPointTo(pickPoint, true)];\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n let { closestPt, param } = this.GetClosestAtPoint(lastPoint, true);\r\n if (this.ParamOnCurve(param))\r\n return [closestPt];\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n return [this.StartPoint, this.GetPointAtParam(0.5), this.EndPoint];\r\n }\r\n MoveGripPoints(indexList: Array<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 return [];\r\n }\r\n default:\r\n return [];\r\n }\r\n }\r\n IntersectWith2(curve: Curve, intType: IntersectOption)\r\n {\r\n //TODO:优化椭圆和椭圆,椭圆和圆相交\r\n if (curve instanceof Line)\r\n {\r\n return SwapParam(IntersectEllipseAndLine(curve, this, reverseIntersectOption(intType)));\r\n }\r\n else if (curve instanceof Circle || curve instanceof Arc)\r\n {\r\n return IntersectEllipseAndCircleOrArc(this, curve, intType);\r\n }\r\n else if (curve instanceof Polyline)\r\n {\r\n return SwapParam(IntersectPolylineAndCurve(curve, this, intType));\r\n }\r\n else if (curve instanceof Ellipse)\r\n {\r\n return IntersectEllipse(this, curve, intType);\r\n }\r\n else\r\n return [];\r\n }\r\n\r\n GetStretchPoints(): Array<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\r\n\r\n Convert2Polyline(count = 0): Polyline\r\n {\r\n const MIN_LEN = 80;\r\n const par = this.TotalAngle / Math.PI * 0.5;\r\n if (!count)\r\n {\r\n count = Math.floor(this.Length / par / MIN_LEN);\r\n count = MathUtils.clamp(count, 15, 80);\r\n }\r\n\r\n count = Math.floor(count * par);\r\n\r\n if ((count & 1) === 0)\r\n count++;\r\n\r\n let pts = this.Shape.getPoints(count);\r\n if (this.IsClose)\r\n pts.pop();\r\n\r\n //忽略空多段线怎么样?\r\n if (pts.length < 2)\r\n {\r\n let pl = new Polyline;\r\n return pl;\r\n }\r\n\r\n let pl = Pts2Polyline(pts, this.IsClose);\r\n pl.ColorIndex = this.ColorIndex;\r\n pl.ApplyMatrix(this.OCS);\r\n if (this.IsClose)\r\n pl.CloseMark = true;\r\n return pl;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._radX = file.Read();\r\n this._radY = file.Read();\r\n this._rotate = file.Read();\r\n this._startAngle = file.Read();\r\n this._endAngle = file.Read();\r\n this.Update();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);\r\n file.Write(this.RadX);\r\n file.Write(this.RadY);\r\n file.Write(this.Rotation);\r\n file.Write(this._startAngle);\r\n file.Write(this._endAngle);\r\n }\r\n\r\n}\r\n","import { Box3, Matrix3, Matrix4, Vector2, Vector3 } from 'three';\r\nimport { GetTanPtsOnArcOrCircle, getArcOrCirNearPts, getCircleCenter } from '../../Common/CurveUtils';\r\nimport { SetMtxVector, TransformVector, reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { Status } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { AsVector3, MoveMatrix, ZeroVec, angle, clampRad, equaln, equalv2, equalv3, polar } from '../../Geometry/GeUtils';\r\nimport { Orbit } from '../../Geometry/Orbit';\r\nimport { IntersectArcAndArc, IntersectCircleAndArc, IntersectEllipseAndCircleOrArc, IntersectLineAndArc, IntersectOption, IntersectPolylineAndCurve, IntersectResult, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Shape2 } from '../Shape2';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\nimport { Circle } from './Circle';\r\nimport { Curve } from './Curve';\r\nimport { Ellipse } from './Ellipse';\r\nimport { Line } from './Line';\r\nimport { Polyline } from './Polyline';\r\n\r\n/**\r\n * 圆弧实体类\r\n * 与ACAD不同,这个类加入了时针变量,并且默认构造的圆弧为顺时针圆弧.\r\n *\r\n * 关于时针圆弧:\r\n * 起始圆弧到终止圆弧总是在0-2PI之间.(一个完整的圆).\r\n * 圆弧的绘制从起始圆弧绘制到终止圆弧. 按照时针绘制.\r\n * 参考计算圆弧的完整角度方法查看该计算方式.\r\n */\r\n@Factory\r\nexport class Arc extends Curve\r\n{\r\n private _DisplayAccuracy = 0;\r\n constructor(center: Vector3 = ZeroVec, radius: number = 0.1, startAngle: number = 0.1, endAngle: number = 0, clockwise = true)\r\n {\r\n super();\r\n this._Matrix.setPosition(center);\r\n this._Radius = radius;\r\n this._StartAngle = clampRad(startAngle);\r\n this._EndAngle = clampRad(endAngle);\r\n this._Clockwise = clockwise;\r\n }\r\n private _Radius: number;\r\n private _StartAngle: number;\r\n private _EndAngle: number;\r\n /**\r\n * 曲线为顺时针\r\n */\r\n private _Clockwise = true;\r\n\r\n get Shape()\r\n {\r\n let sp = new Shape2();\r\n sp.absarc(0, 0, this._Radius, this._StartAngle, this._EndAngle, this._Clockwise);\r\n if (this._DisplayAccuracy !== 0)\r\n {\r\n sp.DisplayAccuracy = this._DisplayAccuracy;\r\n }\r\n return sp;\r\n }\r\n\r\n get Center()\r\n {\r\n return this.Position;\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.Position = v;\r\n }\r\n\r\n get Normal()\r\n {\r\n return new Vector3().setFromMatrixColumn(this._Matrix, 2);\r\n }\r\n set Normal(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n SetMtxVector(this._Matrix, 2, v);\r\n this.Update();\r\n }\r\n\r\n get DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n get Area(): number\r\n {\r\n return 0.5 * this.AllAngle * this.Radius * this.Radius;\r\n }\r\n //获得曲线的面积,逆时针为正,顺时针为负.\r\n get Area2(): number\r\n {\r\n let clockwise = this._Clockwise ? -1 : 1;\r\n return 0.5 * this.AllAngle * this.Radius * this.Radius * clockwise;\r\n }\r\n get IsClose(): boolean\r\n {\r\n return false;\r\n }\r\n\r\n private get BoundingBoxPtsInOCS()\r\n {\r\n let pts = [\r\n polar(new Vector3(), this._StartAngle, this._Radius),\r\n polar(new Vector3(), this._EndAngle, this._Radius),\r\n ];\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(0)))\r\n pts.push(new Vector3(this._Radius, 0));\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(Math.PI / 2)))\r\n pts.push(new Vector3(0, this._Radius));\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(Math.PI)))\r\n pts.push(new Vector3(-this._Radius, 0));\r\n\r\n if (this.ParamOnCurve(this.GetParamAtAngle(Math.PI * 3 / 2)))\r\n pts.push(new Vector3(0, -this._Radius));\r\n return pts;\r\n }\r\n\r\n private static _X = new Vector3;\r\n private static _Y = new Vector3;\r\n private static _Z = new Vector3;\r\n private static _Mtx = new Matrix4;\r\n get BoundingBox(): Box3\r\n {\r\n Arc._Z.setFromMatrixColumn(this._Matrix, 2);\r\n Orbit.ComputUpDirection(Arc._Z, Arc._Y, Arc._X);\r\n\r\n Arc._Mtx.makeBasis(Arc._X, Arc._Y, Arc._Z).setPosition(this._Matrix.elements[12], this._Matrix.elements[13], this._Matrix.elements[14]);\r\n\r\n let pts = [\r\n polar(new Vector3(), this._StartAngle, this._Radius),\r\n polar(new Vector3(), this._EndAngle, this._Radius),\r\n ];\r\n\r\n let ocsInv = this.OCSInv;\r\n\r\n for (let p of [new Vector3(this._Radius), new Vector3(0, this._Radius), new Vector3(-this._Radius), new Vector3(0, -this._Radius)])\r\n {\r\n p.applyMatrix4(Arc._Mtx).applyMatrix4(ocsInv);\r\n if (this.ParamOnCurve(this.GetParamAtAngle(angle(p))))\r\n pts.push(p);\r\n }\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(this.OCSNoClone);\r\n\r\n return new Box3Ext().setFromPoints(pts);\r\n }\r\n\r\n /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext().setFromPoints(this.BoundingBoxPtsInOCS);\r\n }\r\n\r\n get Radius()\r\n {\r\n return this._Radius;\r\n }\r\n set Radius(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Radius = v <= 0 ? 1e-19 : v;\r\n this.Update();\r\n }\r\n\r\n get IsClockWise()\r\n {\r\n return this._Clockwise;\r\n }\r\n set IsClockWise(v: boolean)\r\n {\r\n if (v !== this._Clockwise)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Clockwise = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n get StartAngle()\r\n {\r\n return this._StartAngle;\r\n }\r\n set StartAngle(v: number)\r\n {\r\n // if (equaln(v, this._StartAngle)) return;//优化导致测试用例失败\r\n this.WriteAllObjectRecord();\r\n this._StartAngle = v;\r\n this.Update();\r\n }\r\n\r\n get EndAngle()\r\n {\r\n return this._EndAngle;\r\n }\r\n set EndAngle(v: number)\r\n {\r\n // if (equaln(v, this._EndAngle)) return;//优化导致测试用例失败\r\n this.WriteAllObjectRecord();\r\n this._EndAngle = v;\r\n this.Update();\r\n }\r\n\r\n //******************** Curve function start*****************//\r\n get StartPoint()\r\n {\r\n return polar(new Vector3(), this._StartAngle, this._Radius).applyMatrix4(this.OCS);\r\n }\r\n set StartPoint(v: Vector3)\r\n {\r\n let vTemp = v.clone().applyMatrix4(this.OCSInv);\r\n this.StartAngle = angle(vTemp);\r\n }\r\n get EndPoint()\r\n {\r\n return polar(new Vector3(), this._EndAngle, this._Radius).applyMatrix4(this.OCS);\r\n }\r\n set EndPoint(v: Vector3)\r\n {\r\n let vTemp = v.clone().applyMatrix4(this.OCSInv);\r\n this.EndAngle = angle(vTemp);\r\n }\r\n get StartParam()\r\n {\r\n return 0;\r\n }\r\n get EndParam()\r\n {\r\n return 1;\r\n }\r\n get Length()\r\n {\r\n return this.AllAngle * this._Radius;\r\n }\r\n\r\n GetParamAtPoint2(pt: Vector3): number\r\n {\r\n return this.GetParamAtAngle(this.GetAngleAtPoint(pt));\r\n }\r\n //点在曲线上,已经确定点在曲线的延伸线上\r\n PtOnCurve3(p: Vector3, fuzz = 1e-6): boolean\r\n {\r\n let param = this.GetParamAtPoint2(p);\r\n return this.ParamOnCurve(param, fuzz);\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Center = this.Center.applyMatrix4(m);\r\n this.Radius = this.Radius * m.getMaxScaleOnAxis();\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n this._Clockwise = !this._Clockwise;\r\n this.StartPoint = sp;\r\n this.EndPoint = ep;\r\n return this;\r\n }\r\n GetPointAtParam(param: number)\r\n {\r\n let an = this.GetAngleAtParam(param);\r\n return polar(new Vector3(), an, this._Radius).applyMatrix4(this.OCSNoClone);\r\n }\r\n GetPointAtDistance(distance: number)\r\n {\r\n let len = this.Length;\r\n if (len === 0) return;\r\n return this.GetPointAtParam(distance / len);\r\n }\r\n\r\n GetDistAtParam(param: number)\r\n {\r\n return Math.abs(param * this.Length);\r\n }\r\n\r\n GetDistAtPoint(pt: Vector3)\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n return this.GetDistAtParam(param);\r\n }\r\n\r\n GetParamAtPoint(pt: Vector3, fuzz = 1e-6)\r\n {\r\n if (this._Radius == 0 ||\r\n this.AllAngle == 0 ||\r\n !equaln(pt.distanceTo(this.Center), this._Radius, fuzz))\r\n return NaN;\r\n\r\n return this.GetParamAtAngle(this.GetAngleAtPoint(pt));\r\n }\r\n\r\n /**\r\n * 利用角度计算该角度在圆弧中代表的参数.\r\n * 如果角度在圆弧内,那么返回0-1\r\n * 如果角度不在圆弧内,那么尝试返回离圆弧起始或者结束的较近的参数\r\n *\r\n * @param {number} an\r\n * @returns\r\n * @memberof Arc\r\n */\r\n GetParamAtAngle(an: number)\r\n {\r\n //如果以pt为终点,那么所有的角度为\r\n let ptAllAn = this.ComputeAnlge(an);\r\n let allAn = this.AllAngle;\r\n\r\n //减去圆弧角度,剩余角度的一半\r\n let surplusAngleHalf = Math.PI - allAn / 2;\r\n\r\n if (ptAllAn > allAn + surplusAngleHalf)//返回负数\r\n return ((ptAllAn - allAn) - (surplusAngleHalf * 2)) / allAn;\r\n else//返回正数\r\n return ptAllAn / allAn;\r\n }\r\n\r\n /**\r\n * 根据角度获得参数,不过在这里我们可以指定我们是要获取前面的参数还是后面的参数(正负)\r\n * @param an\r\n * @param [isStart] true:返回负数false 返回正数\r\n * @returns\r\n */\r\n GetParamAtAngle2(an: number, isStart = true)\r\n {\r\n //如果以pt为终点,那么所有的角度为\r\n let ptAllAn = this.ComputeAnlge(an);\r\n let allAn = this.AllAngle;\r\n\r\n //减去圆弧角度,剩余角度的一半\r\n let surplusAngleHalf = Math.PI - allAn / 2;\r\n\r\n if (isStart)//返回负数\r\n return ((ptAllAn - allAn) - (surplusAngleHalf * 2)) / allAn;\r\n else//返回正数\r\n return ptAllAn / allAn;\r\n }\r\n\r\n private static __PointTemp__ = new Vector3;\r\n GetAngleAtPoint(pt: Vector3)\r\n {\r\n return angle(Arc.__PointTemp__.copy(pt).applyMatrix4(this.OCSInv));\r\n }\r\n\r\n GetAngleAtParam(param: number)\r\n {\r\n return clampRad(this._StartAngle + param * this.AllAngle * (this._Clockwise ? -1 : 1));\r\n }\r\n\r\n GetSplitCurves(param: number[] | number): Arc[]\r\n {\r\n let params = this.SplitParamSort(param);\r\n //角度列表\r\n let ans = params.map(p => this.GetAngleAtParam(p));\r\n //返回圆弧表\r\n let arcs: Arc[] = [];\r\n for (let i = 0; i < ans.length - 1; i++)\r\n {\r\n let arc = this.Clone() as Arc;\r\n arc.ColorIndex = this.ColorIndex;\r\n arc.StartAngle = ans[i];\r\n arc.EndAngle = ans[i + 1];\r\n arcs.push(arc);\r\n }\r\n return arcs;\r\n }\r\n GetOffsetCurves(offsetDist: number)\r\n {\r\n if (this._Clockwise) offsetDist *= -1;\r\n if ((offsetDist + this._Radius) > 0)\r\n {\r\n let arc = this.Clone() as Arc;\r\n arc.Radius = offsetDist + this._Radius;\r\n return [arc];\r\n }\r\n return [];\r\n }\r\n Extend(newParam: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (newParam < 0)\r\n {\r\n this._StartAngle = this.GetAngleAtParam(newParam);\r\n }\r\n else if (newParam > 1)\r\n {\r\n this._EndAngle = this.GetAngleAtParam(newParam);\r\n }\r\n this.Update();\r\n }\r\n\r\n Join(cu: Curve): Status\r\n {\r\n if (cu instanceof Arc)\r\n {\r\n //非常小的圆弧直接结束\r\n if (cu.AllAngle < 5e-6) return Status.False;\r\n\r\n if (equalv3(cu.Center, this.Center) && equaln(cu._Radius, this._Radius))\r\n {\r\n this.WriteAllObjectRecord();\r\n let [sa, ea] = [cu.StartAngle, cu.EndAngle];\r\n if (cu._Clockwise != this._Clockwise)\r\n [sa, ea] = [ea, sa];\r\n\r\n let allAn = this.AllAngle;\r\n let saAllan = this.ComputeAnlge(sa);\r\n let eaAllan = this.ComputeAnlge(ea);\r\n\r\n if (equaln(sa, this._StartAngle)) //this起点对起点\r\n {\r\n if (eaAllan > allAn)\r\n this.EndAngle = ea;\r\n\r\n return Status.True;\r\n }\r\n else if (equaln(sa, this._EndAngle))//this终点对起点\r\n {\r\n if (eaAllan < allAn || equaln(ea, this._StartAngle))\r\n return Status.ConverToCircle;\r\n else\r\n this.EndAngle = ea;\r\n\r\n return Status.True;\r\n }\r\n else if (equaln(ea, this.StartAngle))//this起点对终点\r\n {\r\n if (saAllan < allAn)\r\n return Status.ConverToCircle;\r\n else\r\n this.StartAngle = sa;\r\n return Status.True;\r\n }\r\n else if (equaln(ea, this._EndAngle))//this终点对终点\r\n {\r\n if (saAllan > allAn)\r\n this.StartAngle = sa;\r\n return Status.True;\r\n }\r\n else if (this.ParamOnCurve(this.GetParamAtAngle(sa)))\r\n {\r\n if (eaAllan < saAllan)\r\n return Status.ConverToCircle;\r\n else if (eaAllan > allAn)\r\n this.EndAngle = ea;\r\n return Status.True;\r\n }\r\n else if (this.ParamOnCurve(this.GetParamAtAngle(ea)))\r\n {\r\n this.StartAngle = sa;\r\n return Status.True;\r\n }\r\n\r\n //使用按负方向去计算它的参数\r\n let saParam: number;\r\n if (saAllan > allAn)\r\n saParam = (saAllan - Math.PI * 2) / allAn;\r\n else\r\n saParam = saAllan / allAn;\r\n\r\n let eaParam: number;\r\n if (eaAllan > saAllan && saAllan > allAn)\r\n eaParam = (eaAllan - Math.PI * 2) / allAn;\r\n else\r\n eaParam = eaAllan / allAn;\r\n\r\n let pMin = Math.max(0, saParam);\r\n let pMax = Math.min(1, eaParam);\r\n\r\n if (pMin <= pMax + 1e-5)\r\n {\r\n if (saParam < 0)\r\n this.StartAngle = sa;\r\n if (eaParam > 1)\r\n this.EndAngle = ea;\r\n return Status.True;\r\n }\r\n }\r\n }\r\n return Status.False;\r\n }\r\n\r\n Reverse(): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Clockwise = !this._Clockwise;\r\n [this._StartAngle, this._EndAngle] = [this._EndAngle, this._StartAngle];\r\n return this;\r\n }\r\n\r\n IntersectWith2(curve: Curve, intType: IntersectOption, tolerance = 1e-4): IntersectResult[]\r\n {\r\n if (curve instanceof Arc || curve.constructor.name === \"RoomWallArc\")\r\n {\r\n return IntersectArcAndArc(this, curve as Arc, intType, tolerance);\r\n }\r\n if (curve instanceof Line || curve.constructor.name === \"RoomWallLine\")\r\n {\r\n return SwapParam(IntersectLineAndArc(curve as Line, this, reverseIntersectOption(intType), tolerance));\r\n }\r\n if (curve instanceof Circle)\r\n {\r\n return SwapParam(IntersectCircleAndArc(curve, this, reverseIntersectOption(intType), tolerance));\r\n }\r\n if (curve instanceof Polyline)\r\n return SwapParam(IntersectPolylineAndCurve(curve, this, reverseIntersectOption(intType), tolerance));\r\n\r\n if (curve instanceof Ellipse)\r\n return SwapParam(IntersectEllipseAndCircleOrArc(curve, this, intType));\r\n return [];\r\n }\r\n\r\n /**\r\n * 计算出圆弧所包含的角度\r\n *\r\n * @readonly\r\n * @type {number}\r\n * @memberof Arc\r\n */\r\n get AllAngle(): number\r\n {\r\n return this.ComputeAnlge(this._EndAngle);\r\n }\r\n\r\n get Bul(): number\r\n {\r\n if (equaln(this.AllAngle, Math.PI * 2))\r\n return 1;\r\n return Math.tan(this.AllAngle * 0.25) * (this.IsClockWise ? -1 : 1);\r\n }\r\n\r\n /**\r\n * 计算所包含的角度\r\n * @param {number} endAngle 结束的角度\r\n */\r\n ComputeAnlge(endAngle: number): number\r\n {\r\n //顺时针\r\n if (this._Clockwise)\r\n {\r\n if (this._StartAngle > endAngle)\r\n return this.StartAngle - endAngle;\r\n else //越过0点绘制圆弧\r\n return (Math.PI * 2) - (endAngle - this._StartAngle);\r\n }\r\n else\r\n {\r\n if (endAngle > this._StartAngle)\r\n return endAngle - this._StartAngle;\r\n else\r\n return (Math.PI * 2) - (this._StartAngle - endAngle);\r\n }\r\n }\r\n\r\n /**\r\n * 解析两点和凸度所构成的圆弧\r\n * ref http://www.lee-mac.com/bulgeconversion.html\r\n * @param {Vector2} p1\r\n * @param {Vector2} p2\r\n * @param {number} bul 凸度,在cad中,凸度为 <(四分之一圆心角)的正切值>\r\n */\r\n ParseFromBul(p1: Vector3 | Vector2, p2: Vector3 | Vector2, bul: number): Arc\r\n {\r\n if (p1 instanceof Vector2)\r\n p1 = AsVector3(p1);\r\n if (p2 instanceof Vector2)\r\n p2 = AsVector3(p2);\r\n\r\n let ocsInv = this.OCSInv;\r\n p1 = p1.clone().applyMatrix4(ocsInv);\r\n p2 = p2.clone().applyMatrix4(ocsInv);\r\n\r\n //a (* 2 (atan b))\r\n let a = Math.atan(bul) * 2;\r\n //r (/ (distance p1 p2) 2 (sin a))\r\n let r = p1.distanceTo(p2) / 2 / Math.sin(a);\r\n //c (polar p1 (+ (- (/ pi 2) a) (angle p1 p2)) r)\r\n let c = polar(p1.clone(), Math.PI / 2 - a + angle(p2.clone().sub(p1)), r);\r\n\r\n this._Radius = Math.abs(r);\r\n\r\n this._StartAngle = angle(p1.sub(c));\r\n this._EndAngle = angle(p2.sub(c));\r\n\r\n this._Clockwise = bul < 0;\r\n\r\n this.Center = c.applyMatrix4(this.OCSNoClone);\r\n\r\n return this;\r\n }\r\n FromThreePoint(pt1: Vector3, pt2: Vector3, pt3: Vector3)\r\n {\r\n if (!(pt1 && pt2 && pt3))\r\n return this;\r\n\r\n let ocsInv = this.OCSInv;\r\n pt1 = pt1.clone().applyMatrix4(ocsInv).setZ(0);\r\n pt2 = pt2.clone().applyMatrix4(ocsInv).setZ(0);\r\n pt3 = pt3.clone().applyMatrix4(ocsInv).setZ(0);\r\n\r\n let center = getCircleCenter(pt1, pt2, pt3);\r\n if (!center)\r\n {\r\n this.ParseFromBul(pt1.applyMatrix4(this.OCSNoClone), pt3.applyMatrix4(this.OCSNoClone), 1e-3);//faker line\r\n return this;\r\n };\r\n\r\n this.Center = center.clone().applyMatrix4(this.OCS);\r\n //用圆心和其中一个点求距离得到半径:\r\n this._Radius = center.distanceTo(pt1);\r\n //起始角度 端点角度\r\n this._StartAngle = angle(pt1.clone().sub(center));\r\n this._EndAngle = angle(pt3.clone().sub(center));\r\n //求出向量p1->p2,p1->p3\r\n let p1 = pt2.clone().sub(pt1);\r\n let p2 = pt3.clone().sub(pt1);\r\n\r\n this._Clockwise = p1.cross(p2).z < 0;\r\n return this;\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return [this.StartPoint, this.EndPoint];\r\n case ObjectSnapMode.Mid:\r\n return [this.GetPointAtParam(0.5)];\r\n case ObjectSnapMode.Nea:\r\n return getArcOrCirNearPts(this, pickPoint, viewXform)\r\n .filter(p => this.PtOnCurve(p));\r\n case ObjectSnapMode.Ext:\r\n return [this.GetClosestPointTo(pickPoint, true)];\r\n case ObjectSnapMode.Cen:\r\n return [this.Center];\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n if (equaln(lastPoint.distanceToSquared(this.Center), 0, 1e-10))\r\n return [];\r\n let l = new Line(this.Center, lastPoint);\r\n return l.IntersectWith(this, IntersectOption.ExtendBoth).filter(p => this.PtOnCurve(p));\r\n }\r\n case ObjectSnapMode.Tan:\r\n let pts = GetTanPtsOnArcOrCircle(this, lastPoint);\r\n if (pts)\r\n return pts.filter(p => this.PtOnCurve(p));\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array<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 if (ver > 2)\r\n {\r\n this._DisplayAccuracy = file.Read();\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n file.Write(this._Radius);\r\n file.Write(this._StartAngle);\r\n file.Write(this._EndAngle);\r\n file.WriteBool(this._Clockwise);\r\n file.Write(this._DisplayAccuracy);\r\n }\r\n //#endregion\r\n}\r\n","export enum DragPointType\r\n{\r\n Grip = 0,\r\n Stretch = 1,\r\n End = 2,//捕捉端点\r\n}\r\n","import { BufferGeometry, EllipseCurve, Material, Matrix3, Matrix4, Object3D, Line as TLine, Vector3 } from 'three';\r\nimport { Line2 } from 'three/examples/jsm/lines/Line2';\r\nimport { LineGeometry } from 'three/examples/jsm/lines/LineGeometry';\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from '../../Common/ArrayExt';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { GetTanPtsOnArcOrCircle, getArcOrCirNearPts } from '../../Common/CurveUtils';\r\nimport { reviseMirrorMatrix } from '../../Common/Matrix4Utils';\r\nimport { clamp } from '../../Common/Utils';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector3, MoveMatrix, ZeroVec, angle, equaln, equalv2, polar } from '../../Geometry/GeUtils';\r\nimport { Orbit } from '../../Geometry/Orbit';\r\nimport { IntersectCircleAndArc, IntersectCircleAndCircle, IntersectEllipseAndCircleOrArc, IntersectLineAndCircle, IntersectOption, IntersectPolylineAndCurve, IntersectResult, reverseIntersectOption } from '../../GraphicsSystem/IntersectWith';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Shape2 } from '../Shape2';\r\nimport { SwapParam } from './../../Common/CurveUtils';\r\nimport { Arc } from './Arc';\r\nimport { Curve } from './Curve';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Ellipse } from './Ellipse';\r\nimport { Line } from './Line';\r\nimport { Polyline } from './Polyline';\r\n\r\nlet circleGeometry: BufferGeometry;\r\nfunction GetCircleGeometry()\r\n{\r\n if (!circleGeometry)\r\n circleGeometry = BufferGeometryUtils.CreateFromPts(\r\n new EllipseCurve(0, 0, 1, 1, 0, 2 * Math.PI, false, 0).getPoints(360).map(AsVector3)\r\n );\r\n return circleGeometry;\r\n}\r\n\r\n@Factory\r\nexport class Circle extends Curve\r\n{\r\n private _DisplayAccuracy = 0;\r\n constructor(center?: Vector3, radius: number = 1e-6)\r\n {\r\n super();\r\n center && this._Matrix.setPosition(center);\r\n this._Radius = radius;\r\n }\r\n private _Radius: number;\r\n\r\n get DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n get Shape()\r\n {\r\n let sp = new Shape2();\r\n sp.ellipse(0, 0, this._Radius, this._Radius, 0, 2 * Math.PI, false, 0);\r\n if (this._DisplayAccuracy !== 0)\r\n {\r\n sp.DisplayAccuracy = this._DisplayAccuracy;\r\n }\r\n return sp;\r\n }\r\n\r\n get Center()\r\n {\r\n return new Vector3().setFromMatrixPosition(this._Matrix);\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.setPosition(v);\r\n this.Update();\r\n }\r\n get Radius()\r\n {\r\n return this._Radius;\r\n }\r\n set Radius(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Radius = clamp(v, 1e-9, 1e19);\r\n this.Update();\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Center = this.Center.applyMatrix4(m);\r\n this.Radius = this.Radius * m.getMaxScaleOnAxis();\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n return this;\r\n }\r\n\r\n //******************** Curve function start*****************//\r\n\r\n get StartPoint(): Vector3\r\n {\r\n return this.GetPointAtParam(0);\r\n }\r\n get StartParam(): number\r\n {\r\n return 0;\r\n }\r\n get EndPoint(): Vector3\r\n {\r\n return this.GetPointAtParam(0);\r\n }\r\n get EndParam(): number\r\n {\r\n return 1;\r\n }\r\n PtInCurve(pt: Vector3)\r\n {\r\n return pt.distanceToSquared(this.Center) < Math.pow(this.Radius, 2);\r\n }\r\n get Area()\r\n {\r\n return Math.PI * this._Radius ** 2;\r\n }\r\n get Area2()\r\n {\r\n return Math.PI * this._Radius ** 2;\r\n }\r\n get Length()\r\n {\r\n return Math.PI * 2 * this._Radius;\r\n }\r\n\r\n get IsClose(): boolean\r\n {\r\n return true;\r\n }\r\n\r\n //曲线为顺时针\r\n get IsClockWise(): boolean { return false; }\r\n\r\n GetPointAtParam(param: number)\r\n {\r\n return (polar(new Vector3(), param * 2 * Math.PI, this._Radius) as Vector3).applyMatrix4(this._Matrix);\r\n }\r\n\r\n GetPointAtDistance(distance: number)\r\n {\r\n let param = distance / (Math.PI * 2 * this._Radius);\r\n return this.GetPointAtParam(param);\r\n }\r\n\r\n GetDistAtParam(param: number)\r\n {\r\n return Math.PI * 2 * this._Radius * param;\r\n }\r\n\r\n GetDistAtPoint(pt: Vector3)\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n return this.GetDistAtParam(param);\r\n }\r\n\r\n GetParamAtDist(d: number)\r\n {\r\n return d / (Math.PI * 2 * this._Radius);\r\n }\r\n\r\n GetSplitCurves(param: number[] | number)\r\n {\r\n let params: number[];\r\n if (param instanceof Array)\r\n {\r\n params = param.filter(p => this.ParamOnCurve(p));\r\n params.sort((a1, a2) => a2 - a1);//从大到小\r\n arrayRemoveDuplicateBySort(params);\r\n if (params.length < 2) return [];\r\n }\r\n else //圆不能被单个参数切割\r\n return [];\r\n\r\n //补上最后一个到第一个的弧\r\n params.unshift(arrayLast(params));\r\n\r\n let anglelist = params.map(param => Math.PI * 2 * param);\r\n\r\n let curvelist = new Array<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.DrawColorIndex));\r\n obj.add(line);\r\n }\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n obj.children[0].scale.set(this._Radius, this._Radius, this._Radius);\r\n obj.children[0].updateMatrix();\r\n }\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material: Material)\r\n {\r\n if (type === RenderType.WireframePrint)\r\n {\r\n //TODO:打印线需要其他颜色?\r\n }\r\n else\r\n {\r\n let m = obj.children[0] as TLine;\r\n m.material = material ? material : ColorMaterial.GetLineMaterial(this.DrawColorIndex);\r\n return obj;\r\n }\r\n\r\n }\r\n\r\n GetDragPointCount(drag: DragPointType): number\r\n {\r\n if (drag === DragPointType.Grip)\r\n return 5;\r\n else\r\n return 1;\r\n }\r\n\r\n GetGripPoints(): Array<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 break;\r\n case ObjectSnapMode.End:\r\n {\r\n let pts = this.GetGripPoints();\r\n pts.shift();\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n MoveGripPoints(indexList: Array<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 if (cu.DisplayAccuracy > 0)\r\n splitCount = cu.DisplayAccuracy;\r\n for (let i = 0; i < splitCount; i++)\r\n xparams.push(i / splitCount);\r\n }\r\n\r\n else\r\n //分段1\r\n for (let i = 0; i < cu.EndParam; i++)\r\n {\r\n xparams.push(i);\r\n if (!equaln(cu.GetBulgeAt(i), 0, BUL_IS_LINE_FUZZ))// is arc\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = GetArcDrawCount(arc);\r\n if (splitCount === 0)\r\n continue;\r\n\r\n let a = Math.PI * 2 / splitCount;\r\n let params: number[] = [];\r\n for (let j = 0; j < splitCount; j++)\r\n {\r\n let param = arc.GetParamAtAngle(a * j);\r\n if (arc.ParamOnCurve(param))\r\n params.push(param);\r\n }\r\n arraySortByNumber(params);\r\n if (params.length === 0)\r\n continue;\r\n\r\n for (let p of params)\r\n {\r\n if (p > 1e-5 && p < 0.99999)\r\n xparams.push(p + i);\r\n }\r\n }\r\n }\r\n xparams.push(cu.EndParam);\r\n return xparams;\r\n}\r\n\r\nexport function SplitCurvePoints(cu: ExtrudeContourCurve): Vector3[]\r\n{\r\n let pts: Vector3[] = [];\r\n if (cu instanceof Circle)\r\n {\r\n let splitCount = GetArcDrawCount(cu);\r\n for (let i = 0; i < splitCount; i++)\r\n pts.push(cu.GetPointAtParam(i / splitCount));\r\n }\r\n\r\n else\r\n //分段1\r\n for (let i = 0; i < cu.EndParam; i++)\r\n {\r\n pts.push(AsVector3(cu.GetPoint2dAt(i)).applyMatrix4(cu.OCSNoClone));\r\n if (!equaln(cu.GetBulgeAt(i), 0, BUL_IS_LINE_FUZZ))// is arc\r\n {\r\n let arc = cu.GetCurveAtIndex(i) as Arc;\r\n let splitCount = GetArcDrawCount(arc);\r\n if (splitCount === 0)\r\n continue;\r\n\r\n let divParam = 1 / splitCount;\r\n for (let j = 1; j < splitCount - 1; j++)\r\n {\r\n let p = arc.GetPointAtParam(divParam * j);\r\n pts.push(p);\r\n }\r\n }\r\n }\r\n pts.push(cu.EndPoint);\r\n return pts;\r\n}\r\n\r\nexport function SplitArcParams(arc: Arc): number[]\r\n{\r\n let splitCount = GetArcDrawCount(arc);\r\n if (splitCount === 0)\r\n return [];\r\n\r\n let a = Math.PI * 2 / splitCount;\r\n let params: number[] = [];\r\n for (let j = 0; j < splitCount; j++)\r\n {\r\n let param = arc.GetParamAtAngle(a * j);\r\n if (arc.ParamOnCurve(param))\r\n params.push(param);\r\n }\r\n arraySortByNumber(params);\r\n if (params.length === 0)\r\n return [];\r\n\r\n return params.filter(p => p > 1e-5 && p < 9.99999);\r\n}\r\n","import { EllipseCurve, Shape, Vector2 } from \"three\";\r\nimport { GetArcDrawCount } from \"../Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams\";\r\nimport { equaln, equalv2 } from \"../Geometry/GeUtils\";\r\nimport { Arc } from \"./Entity/Arc\";\r\n\r\nlet tempArc: Arc;\r\nexport class Shape2 extends Shape\r\n{\r\n private _DisplayAccuracy: number = 0;\r\n\r\n get DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n this._DisplayAccuracy = v;\r\n }\r\n getPoints(divisions: number = 12, optimizeArc = true): Vector2[]\r\n {\r\n let points: Vector2[] = [],\r\n last: Vector2;\r\n for (let i = 0, curves = this.curves; i < curves.length; i++)\r\n {\r\n let curve = curves[i] as EllipseCurve;\r\n let resolution = divisions;\r\n\r\n //@ts-ignore\r\n if (curve && curve.isEllipseCurve)\r\n {\r\n if (optimizeArc)\r\n {\r\n if (!tempArc) tempArc = new Arc;\r\n else tempArc.ClearDraw();\r\n\r\n tempArc.IsClockWise = curve.aClockwise;\r\n tempArc.StartAngle = curve.aStartAngle;\r\n tempArc.EndAngle = curve.aEndAngle;\r\n tempArc.Radius = Math.abs(curve.xRadius);\r\n //根据圆的半径来确定绘制个数(与SplitCurveParams一致)\r\n let splitCount = GetArcDrawCount(tempArc);\r\n if (this._DisplayAccuracy > 0)\r\n {\r\n splitCount = this._DisplayAccuracy;\r\n }\r\n resolution = Math.max(1, Math.ceil(Math.abs((tempArc.AllAngle * 0.5) / Math.PI) * splitCount * 0.5)) * 2;\r\n }\r\n else\r\n resolution = divisions * 2;\r\n }\r\n else\r\n {\r\n //@ts-ignore\r\n resolution = (curve && (curve.isLineCurve || curve.isLineCurve3)) ? 1\r\n //@ts-ignore\r\n : (curve && curve.isSplineCurve) ? divisions * curve.points.length\r\n : divisions;\r\n }\r\n\r\n let pts = curve.getPoints(resolution);\r\n\r\n for (let j = 0; j < pts.length; j++)\r\n {\r\n let point = pts[j];\r\n if (last && equalv2(last, point, 1e-4))\r\n continue; // ensures no consecutive points are duplicates\r\n\r\n points.push(point);\r\n last = point;\r\n\r\n if (j === pts.length - 1)\r\n point[\"_mask_\"] = true;\r\n }\r\n }\r\n if (this.autoClose\r\n && points.length > 1\r\n && !points[points.length - 1].equals(points[0]))\r\n {\r\n points.push(points[0]);\r\n }\r\n return points;\r\n }\r\n\r\n\r\n absellipse(aX: number, aY: number, xRadius: number, yRadius: number, aStartAngle: number, aEndAngle: number, aClockwise: boolean, aRotation: number): this\r\n {\r\n let curve = new EllipseCurve(aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation);\r\n\r\n /*\r\n if (this.curves.length > 0)\r\n {\r\n // if a previous curve is present, attempt to join\r\n let firstPoint = curve.getPoint(0);\r\n if (!equalv2(firstPoint, this.currentPoint))\r\n {\r\n this.lineTo(firstPoint.x, firstPoint.y);\r\n }\r\n }\r\n */\r\n\r\n this.curves.push(curve);\r\n\r\n let lastPoint = curve.getPoint(1);\r\n this.currentPoint.copy(lastPoint);\r\n\r\n return this;\r\n }\r\n}\r\n","import { Vector2 } from 'three';\r\nimport { Shape2 } from '../DatabaseServices/Shape2';\r\nimport { angle, equaln, equalv2, polar } from './GeUtils';\r\n\r\n//解析二维圆弧\r\nclass Arc2d\r\n{\r\n _StartAn: number;\r\n _EndAn: number;\r\n _Center: Vector2;\r\n _Radius: number;\r\n constructor(p1: Vector2, p2: Vector2, bul: number)\r\n {\r\n p1 = p1.clone();\r\n p2 = p2.clone();\r\n\r\n //a (* 2 (atan b))\r\n let a = Math.atan(bul) * 2;\r\n //r (/ (distance p1 p2) 2 (sin a))\r\n let r = p1.distanceTo(p2) / 2 / Math.sin(a);\r\n //c (polar p1 (+ (- (/ pi 2) a) (angle p1 p2)) r)\r\n let c = polar(p1.clone(), Math.PI / 2 - a + angle(p2.clone().sub(p1)), r);\r\n\r\n this._Radius = Math.abs(r);\r\n\r\n this._StartAn = angle(p1.sub(c));\r\n this._EndAn = angle(p2.sub(c));\r\n\r\n this._Center = c;\r\n }\r\n}\r\n\r\n//创建轮廓 通过点表和凸度\r\nexport function CreatePolylinePath(pts: Vector2[], buls: number[], displayAccuracy = 0): Shape2\r\n{\r\n let shape = new Shape2();\r\n shape.DisplayAccuracy = displayAccuracy;\r\n if (pts.length === 0) return shape;\r\n let firstPt = pts[0];\r\n\r\n shape.moveTo(firstPt.x, firstPt.y);\r\n for (let i = 0; i < pts.length - 1; i++)\r\n {\r\n let prePt = pts[i];\r\n let nextPt = pts[i + 1];\r\n if (equaln(buls[i], 0, 1e-8) || equalv2(prePt, nextPt, 1e-2))\r\n {\r\n shape.lineTo(nextPt.x, nextPt.y);\r\n }\r\n else\r\n {\r\n //参考\r\n //http://www.dorodnic.com/blog/tag/three-js/ 绘制一个齿轮\r\n //https://www.kirupa.com/html5/drawing_circles_canvas.htm //html5\r\n let arc2 = new Arc2d(prePt, nextPt, buls[i]);\r\n let cen = arc2._Center;\r\n shape.absarc(cen.x, cen.y, arc2._Radius, arc2._StartAn, arc2._EndAn, buls[i] < 0);\r\n }\r\n }\r\n return shape;\r\n}\r\n\r\nexport function CreateShapeFromPoints()\r\n{\r\n\r\n}\r\n","import { 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 { 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 _AllowConverToCircle = true;\r\n\r\n /**\r\n *\r\n * @param _Polyline\r\n * @param _OffsetDist\r\n * @param [_ToolPath=false] 走刀模式(在这个模式下,我们会进行圆弧过渡(或者直线过渡)避免尖角过大)\r\n * @param [_OffsetDistSq=(_OffsetDist ** 2) * 2.1] 允许的最大尖角长度 默认值差不多是矩形的尖角大一点\r\n * @param [_JoinType=PolylineJoinType.Round] 尖角的处理方式,默认是圆弧过渡,可以切换成直线过渡\r\n */\r\n constructor(public _Polyline: Polyline, public _OffsetDist: number, public _ToolPath = false,\r\n private _OffsetDistSq = (_OffsetDist ** 2) * 2.1,//对直角走刀不进行圆弧过度\r\n private _JoinType = PolylineJoinType.Round //仅在走刀路径时生效\r\n )\r\n {\r\n }\r\n\r\n Do(): Polyline[]\r\n {\r\n this._OffsetDistSign = Math.sign(this._OffsetDist);\r\n this._TrimPolylineContours = [];\r\n this._TrimCircleContours = [];\r\n this._TrimArcContours = [];\r\n\r\n this._RetCurves = [];\r\n this._CurveTreeNodes = [];\r\n\r\n this.InitSubCurves();\r\n if (this._SubCurves.length === 0)\r\n return this._RetCurves;\r\n\r\n this.GeneralCirclesAndVertexs();\r\n this.OffsetSubCurves();\r\n this.LinkSubCurves();\r\n\r\n if (this._SubOffsetedCurves.length === 0)\r\n {\r\n this._SubOffsetedCurves.push({ curve: this._Circles[0], index: 0, paddingCurve: this._Circles.slice(1) });\r\n\r\n this._TrimPolylineContours.push(\r\n ...this._Circles.map(c => Contour.CreateContour(c, false)),\r\n ...this._SubCurves.map(c => Contour.CreateContour([c, new Line(c.StartPoint, c.EndPoint)], false))\r\n );\r\n }\r\n else\r\n this.GeneralTrimContours();\r\n\r\n // for (let c of this._SubOffsetedCurves)\r\n // {\r\n // TestDraw(c.curve.Clone(), 1);\r\n // if (c.paddingCurve)\r\n // for (let cc of c.paddingCurve)\r\n // TestDraw(cc.Clone(), 2);\r\n // }\r\n // for (let c of this._TrimPolylineContours)\r\n // {\r\n // TestDraw(c.Curve.Clone(), 3);\r\n // }\r\n\r\n this.TrimByContours();\r\n this.FilterInvalidCurve();\r\n this.JoinCollinear();\r\n this.LinkResultPolyline();\r\n this.RepairResultPolylineClosemark();\r\n return this._RetCurves;\r\n }\r\n\r\n InitSubCurves()\r\n {\r\n this._CacheOCS = this._Polyline.OCS;\r\n this._IsClose = this._Polyline.IsClose;\r\n this._Polyline.OCS = IdentityMtx4;\r\n this._SubCurves = this._Polyline.Explode().filter(c => c.Length > 1e-4);//TODO: 简化这个 并且生成圆 顶点 圆\r\n this._Polyline.OCS = this._CacheOCS;\r\n return this;\r\n }\r\n\r\n protected GeneralCirclesAndVertexs()\r\n {\r\n this._Vertexs = this._SubCurves.map(c => c.StartPoint);\r\n let lastCu = arrayLast(this._SubCurves);\r\n if (!equalv3(lastCu.EndPoint, this._Vertexs[0], 1e-3))\r\n this._Vertexs.push(lastCu.EndPoint);\r\n\r\n let radius = Math.abs(this._OffsetDist);\r\n this._Circles = this._Vertexs.map(p => new Circle(p, radius));\r\n }\r\n\r\n protected OffsetSubCurves()\r\n {\r\n this._SubOffsetedCurves = [];\r\n for (let index = 0; index < this._SubCurves.length; index++)\r\n {\r\n let curveOld = this._SubCurves[index];\r\n if (curveOld.Length > 1e-6)\r\n {\r\n let curve = curveOld.GetOffsetCurves(this._OffsetDist)[0];\r\n if (curve)\r\n this._SubOffsetedCurves.push({ curve, index });\r\n else\r\n this._TrimArcContours.push(Contour.CreateContour([curveOld, new Line(curveOld.StartPoint, curveOld.EndPoint)], false));\r\n }\r\n }\r\n }\r\n\r\n //连接(延伸)曲线,或者补(圆弧,直线)\r\n LinkSubCurves()\r\n {\r\n let count = this._SubOffsetedCurves.length;\r\n if (!this._IsClose) count--;\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n let curveResNow = this._SubOffsetedCurves[i];\r\n let iNext = FixIndex(i + 1, this._SubOffsetedCurves);\r\n let curveResNext = this._SubOffsetedCurves[iNext];\r\n let curveNow = curveResNow.curve;\r\n let curveNext = curveResNext.curve;\r\n let isNeighbor = FixIndex(curveResNow.index + 1, this._SubCurves) === curveResNext.index;\r\n\r\n if (isNeighbor)\r\n {\r\n let sp = curveNow.EndPoint;\r\n let ep = curveNext.StartPoint;\r\n //直连\r\n 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 && this._AllowConverToCircle)\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 _DisplayAccuracy = 0;\r\n private _ClosedMark: boolean = false;\r\n constructor(private _LineData: PolylineProps[] = [])\r\n {\r\n super();\r\n }\r\n\r\n UpdateOCSTo(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p = new Vector3().setFromMatrixPosition(m);\r\n p.applyMatrix4(this.OCSInv);\r\n if (equaln(p.z, 0))\r\n {\r\n let dir = Math.sign(this.Area2);\r\n let tm = matrixAlignCoordSys(this.OCSNoClone, m);\r\n for (let p of this._LineData)\r\n {\r\n let p3 = AsVector3(p.pt);\r\n p3.applyMatrix4(tm);\r\n p.pt.set(p3.x, p3.y);\r\n }\r\n this.OCS = m;\r\n let newDir = Math.sign(this.Area2);\r\n if (dir !== newDir)\r\n for (let p of this._LineData)\r\n p.bul *= -1;\r\n }\r\n }\r\n\r\n /**\r\n * 原地翻转,仅改变法向量\r\n */\r\n Flip()\r\n {\r\n this.WriteAllObjectRecord();\r\n let x = new Vector3();\r\n let y = new Vector3();\r\n let z = new Vector3();\r\n this._Matrix.extractBasis(x, y, z);\r\n z.negate();\r\n y.crossVectors(z, x);\r\n let p = this.Position;\r\n this._Matrix.makeBasis(x, y, z).setPosition(p);\r\n\r\n for (let d of this._LineData)\r\n {\r\n d.pt.y *= -1;\r\n d.bul *= -1;\r\n }\r\n this.Update();\r\n return this;\r\n }\r\n\r\n //翻转曲线,首尾调换\r\n Reverse(): this\r\n {\r\n if (this._LineData.length === 0)\r\n return this;\r\n this.WriteAllObjectRecord();\r\n\r\n let pts = [];\r\n let buls = [];\r\n for (let data of this._LineData)\r\n {\r\n pts.push(data.pt);\r\n buls.push(-data.bul);\r\n }\r\n\r\n let lastBul = buls.pop();\r\n buls.reverse();\r\n buls.push(lastBul);\r\n\r\n pts.reverse();\r\n\r\n if (this._ClosedMark && !equalv2(pts[0], arrayLast(pts)))\r\n {\r\n pts.unshift(pts.pop());\r\n buls.unshift(buls.pop());\r\n }\r\n\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let d = this._LineData[i];\r\n d.pt = pts[i];\r\n d.bul = buls[i];\r\n }\r\n\r\n return this;\r\n }\r\n\r\n get DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n set LineData(data: PolylineProps[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData = data;\r\n this.Update();\r\n }\r\n get LineData()\r\n {\r\n return this._LineData;\r\n }\r\n\r\n get NumberOfVertices(): number\r\n {\r\n return this._LineData.length;\r\n }\r\n\r\n /**\r\n * 在指定位置插入点.\r\n * 例如:\r\n * pl.AddVertexAt(pl.NumberOfVertices,p);//在末尾插入一个点\r\n *\r\n * @param {number} index 索引位置\r\n * @param {Vector2} pt 点\r\n * @returns {this}\r\n * @memberof Polyline\r\n */\r\n AddVertexAt(index: number, pt: Vector2 | Vector2[]): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let pts: PolylineProps[];\r\n if (Array.isArray(pt))\r\n {\r\n pts = pt.map(p =>\r\n {\r\n return {\r\n pt: p.clone(),\r\n bul: 0\r\n };\r\n });\r\n }\r\n else\r\n pts = [{ pt: pt.clone(), bul: 0 }];\r\n\r\n this._LineData.splice(index, 0, ...pts);\r\n this.Update();\r\n return this;\r\n }\r\n RemoveVertexAt(index: number): this\r\n {\r\n if (index < this._LineData.length)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.splice(index, 1);\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n RemoveVertexIn(from: number, to: number): this\r\n {\r\n if (from + 1 < this._LineData.length && to > from)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.splice(from + 1, to - from - 1);\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n\r\n /**\r\n * 重设闭合多段线的起点\r\n * @param index 起始index,如果index非整数,将用最接近的整数作为起始索引\r\n */\r\n ResetStartPoint(index: number)\r\n {\r\n if (!this.IsClose || index >= this.EndParam) return false;\r\n\r\n if (equalv2(this._LineData[0].pt, arrayLast(this._LineData).pt))\r\n this._LineData.pop();\r\n\r\n changeArrayStartIndex(this._LineData, Math.floor(index + 0.5));\r\n this._LineData.push({\r\n pt: this._LineData[0].pt.clone(),\r\n bul: 0\r\n });\r\n return true;\r\n }\r\n GetPoint2dAt(index: number): Vector2 | undefined\r\n {\r\n if (index >= 0 && this._LineData.length > index)\r\n return this._LineData[index].pt.clone();\r\n }\r\n /**\r\n * 设置指定点的位置\r\n *\r\n * @param {number} index\r\n * @param {Vector2} pt\r\n * @memberof Polyline\r\n */\r\n SetPointAt(index: number, pt: Vector2): this\r\n {\r\n let d = this._LineData[index];\r\n if (d)\r\n {\r\n this.WriteAllObjectRecord();\r\n d.pt.copy(pt);\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let inv = this.OCSInv;\r\n for (let i = 0; i <= this.EndParam; i++)\r\n {\r\n let p = this.GetPointAtParam(i);\r\n p.applyMatrix4(m).applyMatrix4(inv);\r\n this.SetPointAt(i, AsVector2(p));\r\n }\r\n return this;\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let oldPts = this.GetStretchPoints();\r\n reviseMirrorMatrix(this._Matrix);\r\n let inv = this.OCSInv;\r\n for (let i = 0; i < oldPts.length; i++)\r\n {\r\n let newP = oldPts[i].applyMatrix4(inv);\r\n let newBul = -this.GetBulgeAt(i);\r\n this.SetPointAt(i, AsVector2(newP));\r\n this.SetBulgeAt(i, newBul);\r\n }\r\n this.Reverse();\r\n return this;\r\n }\r\n\r\n SetBulgeAt(index: number, bul: number): this\r\n {\r\n let d = this._LineData[index];\r\n if (d)\r\n {\r\n this.WriteAllObjectRecord();\r\n d.bul = bul;\r\n this.Update();\r\n }\r\n return this;\r\n }\r\n\r\n GetBulgeAt(index: number): number\r\n {\r\n return this._LineData[index].bul;\r\n }\r\n\r\n Rectangle(length: number, height: number): this\r\n {\r\n this.LineData = [\r\n { pt: new Vector2(), bul: 0 },\r\n { pt: new Vector2(length), bul: 0 },\r\n { pt: new Vector2(length, height), bul: 0 },\r\n { pt: new Vector2(0, height), bul: 0 }];\r\n this.CloseMark = true;\r\n return this;\r\n }\r\n\r\n RectangleFrom2Pt(p1: Vector3, p2: Vector3): this\r\n {\r\n let box = new Box3();\r\n box.setFromPoints([p2, p1].map((p: Vector3) => p.clone().applyMatrix4(this.OCSInv)));\r\n\r\n let px1 = AsVector2(box.min);\r\n let px3 = AsVector2(box.max);\r\n let px2 = new Vector2(px3.x, px1.y);\r\n let px4 = new Vector2(px1.x, px3.y);\r\n\r\n this.LineData = [\r\n { pt: px1, bul: 0 },\r\n { pt: px2, bul: 0 },\r\n { pt: px3, bul: 0 },\r\n { pt: px4, bul: 0 }];\r\n\r\n this.CloseMark = true;\r\n return this;\r\n }\r\n\r\n FromPoints2d(pts: Vec2[]): this\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LineData.length = 0;\r\n for (let p of pts)\r\n this._LineData.push({ pt: AsVector2(p), bul: 0 });\r\n this.Update();\r\n return this;\r\n }\r\n\r\n //多段线起点\r\n get StartPoint()\r\n {\r\n if (this._LineData.length > 0)\r\n return AsVector3(this._LineData[0].pt).applyMatrix4(this.OCS);\r\n return new Vector3();\r\n }\r\n set StartPoint(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n p = p.clone().applyMatrix4(this.OCSInv);\r\n\r\n if (this._LineData.length === 0)\r\n this.AddVertexAt(0, AsVector2(p));\r\n else if (this._LineData.length === 1)\r\n this.SetPointAt(0, AsVector2(p));\r\n else\r\n {\r\n let bul = this.GetBulgeAt(0);\r\n if (bul !== 0)\r\n {\r\n let arc = this.GetCurveAtParam(0) as Arc;\r\n arc.StartPoint = p;\r\n //前面线的凸度调整\r\n this.SetBulgeAt(0, Math.tan(arc.AllAngle / 4) * Math.sign(bul));\r\n }\r\n this.SetPointAt(0, AsVector2(p));\r\n }\r\n }\r\n get EndPoint()\r\n {\r\n if (this._ClosedMark) return this.StartPoint;\r\n if (this._LineData.length > 0)\r\n return AsVector3(this._LineData[this.EndParam].pt).applyMatrix4(this.OCS);\r\n return new Vector3();\r\n }\r\n set EndPoint(p: Vector3)\r\n {\r\n if (this._LineData.length < 2 || this.CloseMark)\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n p = p.clone().applyMatrix4(this.OCSInv);\r\n\r\n let bul = this.GetBulgeAt(this.EndParam - 1);\r\n if (bul !== 0)\r\n {\r\n let arc = this.GetCurveAtParam(this.EndParam - 1) as Arc;\r\n arc.ApplyMatrix(this.OCSInv);\r\n arc.EndPoint = p;\r\n //前面线的凸度调整\r\n this.SetBulgeAt(this.EndParam - 1, Math.tan(arc.AllAngle / 4) * Math.sign(bul));\r\n }\r\n this.SetPointAt(this.EndParam, AsVector2(p));\r\n }\r\n\r\n get CurveCount(): number\r\n {\r\n return this.EndParam;\r\n }\r\n\r\n get StartParam()\r\n {\r\n return 0;\r\n }\r\n\r\n /**\r\n * 表示最后一条曲线的终止参数,使用该参数可以直接遍历到多段线的所有子线段. for(i<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, fuzz = 1e-5): number\r\n {\r\n let cus = this.Explode();\r\n if (cus.length === 0) return NaN;\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let param = cu.GetParamAtPoint(pt, fuzz);\r\n if (cu.ParamOnCurve(param, fuzz))\r\n return i + param; //返回点在曲线内部的参数\r\n }\r\n\r\n //当曲线闭合时,不需要延伸首尾去判断参数\r\n if (this._ClosedMark) return NaN;\r\n\r\n //起点终点参数集合\r\n let seParams: number[] = [];\r\n //点在第一条曲线上的参数\r\n let startParam = cus[0].GetParamAtPoint(pt, fuzz);\r\n if (!isNaN(startParam) && startParam < 0)\r\n seParams.push(startParam);\r\n //点在最后一条线上的参数\r\n let endParam = cus[cus.length - 1].GetParamAtPoint(pt, fuzz);\r\n if (!isNaN(endParam) && endParam > 0)\r\n seParams.push(endParam + this.EndParam - 1);\r\n\r\n if (seParams.length == 1)\r\n {\r\n return seParams[0];\r\n }\r\n else if (seParams.length == 2)\r\n {\r\n //返回较近的参数\r\n if (pt.distanceToSquared(this.StartPoint)\r\n < pt.distanceToSquared(this.EndPoint))\r\n return seParams[0];\r\n else\r\n return seParams[1];\r\n }\r\n return NaN;\r\n }\r\n GetParamAtDist(dist: number): number\r\n {\r\n if (equaln(dist, 0)) return 0;\r\n\r\n let cus: (Line | Arc)[] = [];\r\n for (let i = 0; i < this.EndParam; i++)\r\n {\r\n let cu = this.GetCurveAtIndex(i);\r\n let len = cu.Length;\r\n if (len < 1e-6) continue;\r\n\r\n cus.push(cu);\r\n\r\n if (dist <= len)\r\n return i + cu.GetParamAtDist(dist);\r\n else if (equaln(dist, len, 1e-8))\r\n return i + 1;\r\n\r\n dist -= len;\r\n }\r\n\r\n if (!this._ClosedMark)\r\n return cus.length + cus[cus.length - 1].GetParamAtDist(dist);\r\n\r\n return NaN;\r\n }\r\n GetDistAtPoint(pt: Vector3): number\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n if (!this.ParamOnCurve(param)) return NaN;\r\n return this.GetDistAtParam(param);\r\n }\r\n\r\n /**\r\n * 这个方法允许点在曲线的延伸线上\r\n * @param pt 需要保证传入的点路径上\r\n * @returns\r\n */\r\n GetDistAtPoint2(pt: Vector3): number\r\n {\r\n let param = this.GetParamAtPoint(pt);\r\n if (param < 0)\r\n {\r\n let c1 = this.GetCurveAtIndex(0);\r\n return c1.Length * param;\r\n }\r\n else if (param > this.EndParam)\r\n {\r\n let ce = this.GetCurveAtIndex(this.EndParam - 1);\r\n return this.Length + ce.Length * (param - this.EndParam);\r\n }\r\n return this.GetDistAtParam(param);\r\n }\r\n\r\n /**\r\n * 返回曲线的一阶导数.\r\n * 当曲线闭合(标志)且点不在曲线上.\r\n * 或者曲线不闭合(标志) 且点不在曲线上也不在延伸上\r\n *\r\n * @param {(number | Vector3)} param\r\n * @returns {Vector3}\r\n * @memberof Polyline\r\n */\r\n GetFirstDeriv(param: number | Vector3): Vector3\r\n {\r\n if (param instanceof Vector3)\r\n param = this.GetParamAtPoint(param);\r\n\r\n if (isNaN(param))\r\n return undefined;\r\n\r\n let cu = this.GetCurveAtParam(param);\r\n\r\n if (!cu) return undefined;\r\n\r\n return cu.GetFirstDeriv(this.GetCurveParamAtParam(param));\r\n }\r\n GetSplitCurves(param: number[] | number): Array<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 + Math.abs(newParam - ptIndex)));\r\n\r\n this.Update();\r\n }\r\n\r\n //const this\r\n MatrixAlignTo2(toMatrix: Matrix4)\r\n {\r\n if (!matrixIsCoplane(this._Matrix, toMatrix, 1e-4))\r\n return this.PtsBuls;\r\n\r\n let m = matrixAlignCoordSys(this._Matrix, toMatrix);\r\n\r\n let z1 = this.Normal;\r\n let z2 = new Vector3().setFromMatrixColumn(toMatrix, 2);\r\n let isMirror = equalv3(z1, z2.negate());\r\n\r\n let pts: Vector2[] = [];\r\n let buls: number[] = [];\r\n for (let d of this._LineData)\r\n {\r\n let p = AsVector2(AsVector3(d.pt).applyMatrix4(m));\r\n pts.push(p);\r\n buls.push(isMirror ? -d.bul : d.bul);\r\n }\r\n return { pts, buls };\r\n }\r\n\r\n 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, this._DisplayAccuracy);\r\n }\r\n get SVG()\r\n {\r\n let sp = this.StartPoint;\r\n let str = `M${sp.x} ${sp.y} `;\r\n for (let i = 1; i <= this.EndParam; i++)\r\n {\r\n let bul = this.GetBulgeAt(i - 1);\r\n let p = this.GetPointAtParam(i);\r\n if (bul === 0)\r\n str += `L${p.x} ${p.y} `;\r\n else\r\n {\r\n let arc = this.GetCurveAtIndex(i - 1) as Arc;\r\n str += `A ${arc.Radius} ${arc.Radius} 0 ${Math.abs(bul) >= 1 ? 1 : 0} ${arc.IsClockWise ? 0 : 1} ${p.x} ${p.y}`;\r\n }\r\n }\r\n return str;\r\n }\r\n\r\n GetDragPointCount(drag: DragPointType): number\r\n {\r\n if (drag === DragPointType.Grip)\r\n {\r\n let count = this.EndParam * 2 + 1;\r\n if (this.CloseMark) count--;\r\n return count;\r\n }\r\n else\r\n {\r\n return this._LineData.length;\r\n }\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n let midPts = [];\r\n let enParam = this.EndParam;\r\n for (let i = 0.5; i < enParam; i++)\r\n {\r\n let p = this.GetPointAtParam(i);\r\n p && midPts.push(p);\r\n }\r\n return midPts;\r\n case ObjectSnapMode.Nea:\r\n {\r\n let nea: Vector3[] = [];\r\n for (let cu of this.Explode())\r\n {\r\n let neaa = cu.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n if (neaa)\r\n nea.push(...neaa);\r\n }\r\n return nea;\r\n }\r\n case ObjectSnapMode.Ext:\r\n {\r\n let cp = this.GetClosestPointTo(pickPoint, true);\r\n if (cp)\r\n return [cp];\r\n break;\r\n }\r\n case ObjectSnapMode.Cen:\r\n let cenPts: Vector3[] = [];\r\n for (let i = 0; i < this._LineData.length; i++)\r\n {\r\n let data = this._LineData[i];\r\n if (!equaln(data.bul, 0))\r\n {\r\n let cu = this.GetCurveAtIndex(i) as Arc;\r\n if (cu)//end bul !== 0 但是并没有圆弧\r\n cenPts.push(cu.Center);\r\n }\r\n }\r\n return cenPts;\r\n case ObjectSnapMode.Per:\r\n if (lastPoint)\r\n {\r\n let cp = this.GetClosestPointTo(pickPoint, false);\r\n if (!cp) return [];\r\n let cparam = this.GetParamAtPoint(cp);\r\n let cu = this.GetCurveAtParam(cparam);\r\n if (cu)\r\n {\r\n let closestPt = cu.GetClosestPointTo(lastPoint, true);\r\n if (closestPt && this.PtOnCurve(closestPt))\r\n return [closestPt];\r\n }\r\n }\r\n case ObjectSnapMode.Tan:\r\n if (lastPoint)\r\n {\r\n let clostPt = this.GetClosestPointTo(pickPoint, false);\r\n if (!clostPt) return [];\r\n let par = this.GetParamAtPoint(clostPt);\r\n let cu = this.GetCurveAtParam(par);\r\n if (cu instanceof Arc)\r\n return cu.GetObjectSnapPoints(snapMode, pickPoint, lastPoint);\r\n return [];\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n GetGripPoints(): Array<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 { 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 { arrayLast } from \"../../Common/ArrayExt\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { ComparePointFnGenerate } from \"../../Geometry/GeUtils\";\r\nimport { RegionParse } from \"../../Geometry/RegionParse\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\n\r\n/**\r\n * 线性切割多线段\r\n * @param {Polyline} meatPl 被切割的曲线\r\n * @param {Polyline[]} knifePls 刀曲线\r\n * @param {boolean} [isSweep = false] 是否为圆弧板(被切割的曲线是否为圆弧板的轮廓)\r\n * @return {Polyline[]} 切割后的多线段\r\n */\r\nexport function SplitPolyline(meatPl: Polyline, knifePls: Polyline[], isSweep = false): Polyline[]\r\n{\r\n let allSplitPls: Polyline[] = [];\r\n let allIntersePts: Vector3[] = [];\r\n for (let pl of knifePls)\r\n {\r\n\r\n let ipts = pl.IntersectWith(meatPl, IntersectOption.ExtendThis);\r\n allIntersePts.push(...ipts);\r\n if (pl.LineData.length === 2 && ipts.length > 1) //直线切割,且有2个已经的顶点\r\n {\r\n if (ipts.length === 2)\r\n {\r\n pl.StartPoint = ipts[0];\r\n pl.EndPoint = ipts[1];\r\n }\r\n else\r\n {\r\n ipts.sort(ComparePointFnGenerate(\"xy\"));\r\n pl.StartPoint = ipts[0];\r\n pl.EndPoint = arrayLast(ipts);\r\n }\r\n }\r\n else\r\n {\r\n let iptsNotExt = ipts.filter(p => pl.PtOnCurve(p));\r\n if (iptsNotExt.length < 2 && ipts.length === 2)\r\n {\r\n let params = ipts.map(p => pl.GetParamAtPoint(p));\r\n pl.Extend(params[0]);\r\n pl.Extend(params[1]);\r\n }\r\n }\r\n\r\n let splitPls = pl.GetSplitCurvesByPts(ipts) as Polyline[];\r\n allSplitPls.push(...splitPls);\r\n }\r\n\r\n let brSplitCus = meatPl.GetSplitCurvesByPts(allIntersePts) as Polyline[];\r\n\r\n allSplitPls = allSplitPls.filter(pl =>\r\n {\r\n return meatPl.PtInCurve(pl.GetPointAtParam(pl.EndParam / 2)); //切割线必须在板内才有用\r\n });\r\n\r\n let regionParse = new RegionParse(brSplitCus.concat(allSplitPls));\r\n\r\n let cus = regionParse.RegionsInternal.map(r =>\r\n {\r\n let pl = new Polyline();\r\n for (let route of r)\r\n pl.Join(route.curve);\r\n if (pl.Area2 < 0)\r\n pl.Reverse();\r\n // 针对圆弧板特殊处理(去除多余的控制点)\r\n if (isSweep)\r\n {\r\n pl = pl.GetOffsetCurves(10)[0];\r\n pl = pl.GetOffsetCurves(-10)[0];\r\n }\r\n return pl;\r\n });\r\n return cus;\r\n}\r\n","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 { TransformVector } from '../Common/Matrix4Utils';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { AsVector2, AsVector3, ZeroVec, equalv3 } from '../Geometry/GeUtils';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Curve } from './Entity/Curve';\r\nimport { Polyline } from './Entity/Polyline';\r\nimport { SplineConver2Polyline } from './SplineConver2Polyline';\r\n\r\n\r\nconst DrawSplitCount = 120;\r\n\r\n@Factory\r\nexport class Spline extends Curve\r\n{\r\n private _ClosedMark: boolean = false;\r\n constructor(private _PointList: Vector3[] = [])\r\n {\r\n super();\r\n }\r\n\r\n get Shape()\r\n {\r\n return new CatmullRomCurve3(this.Points, this._ClosedMark);\r\n }\r\n\r\n get Length()\r\n {\r\n //TODO:这个的性能挺低的(因为还需要重新获取一遍点表(如果我们有绘制对象,应该用绘制对象的点表来计算长度))\r\n return this.Shape.getLength();\r\n }\r\n\r\n get Points()\r\n {\r\n return this._PointList;\r\n }\r\n set Points(pts: Vector3[])\r\n {\r\n if (pts.length < 2) return;\r\n this.WriteAllObjectRecord();\r\n let ocsInv = this.OCSInv;\r\n this._PointList = pts.map(p => p.clone().applyMatrix4(ocsInv));\r\n\r\n if (pts.length > 2 && equalv3(this._PointList[0], arrayLast(this._PointList), 1e-3))\r\n {\r\n this._PointList.pop();\r\n this._ClosedMark = true;\r\n }\r\n\r\n this.Update();\r\n }\r\n //闭合标志\r\n get CloseMark(): boolean\r\n {\r\n return this._ClosedMark;\r\n }\r\n //曲线是否闭合\r\n get IsClose(): boolean\r\n {\r\n return this.CloseMark || (equalv3(this.StartPoint, this.EndPoint, 1e-4)) && this.EndParam > 1;\r\n }\r\n set CloseMark(v: boolean)\r\n {\r\n if (this._ClosedMark === v) return;\r\n this.WriteAllObjectRecord();\r\n this._ClosedMark = v;\r\n this.Update();\r\n }\r\n get StartPoint()\r\n {\r\n return this._PointList[0];\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 = TransformVector(vec.clone(), this.OCSInv).setZ(0);\r\n if (equalv3(vec, ZeroVec)) return;\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n this._PointList[index].add(vec);\r\n this.Update();\r\n }\r\n MoveStretchPoints(indexList: Array<number>, vec: Vector3)\r\n {\r\n vec = TransformVector(vec.clone(), this.OCSInv).setZ(0);\r\n if (equalv3(vec, ZeroVec)) return;\r\n this.WriteAllObjectRecord();\r\n for (let index of indexList)\r\n this._PointList[index].add(vec);\r\n this.Update();\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetDrawCount()\r\n {\r\n return this.EndParam * DrawSplitCount;\r\n }\r\n\r\n Convert2Polyline(): Polyline\r\n {\r\n return SplineConver2Polyline(this);\r\n }\r\n\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n let count = file.Read();\r\n this._PointList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this._PointList.push(new Vector3().fromArray(file.Read()));\r\n if (ver > 1)\r\n this._ClosedMark = file.Read();\r\n }\r\n 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","\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 { SplitPolyline } from '../Add-on/BoardCutting/SplitPolyline';\r\nimport { Arc } from '../DatabaseServices/Entity/Arc';\r\nimport { Circle } from '../DatabaseServices/Entity/Circle';\r\nimport { Curve } from '../DatabaseServices/Entity/Curve';\r\nimport { Ellipse } from '../DatabaseServices/Entity/Ellipse';\r\nimport { Line } from '../DatabaseServices/Entity/Line';\r\nimport { BUL_IS_LINE_FUZZ, Polyline } from '../DatabaseServices/Entity/Polyline';\r\nimport { IsPointInBowArc } from '../DatabaseServices/PointInPolyline';\r\nimport { Spline } from '../DatabaseServices/Spline';\r\nimport { Count } from '../Geometry/Count';\r\nimport { CurveMap, Vertice } from '../Geometry/CurveMap';\r\nimport { AsVector2, AsVector3, XAxis, YAxis, ZAxis, ZeroVec, equaln, equalv2, equalv3, isParallelTo } from '../Geometry/GeUtils';\r\nimport { Vec3 } from '../Geometry/IVec3';\r\nimport { Matrix2 } from '../Geometry/Matrix2';\r\nimport { Orbit } from '../Geometry/Orbit';\r\nimport { PlaneExt } from '../Geometry/Plane';\r\nimport { IntersectOption, IntersectResult } from '../GraphicsSystem/IntersectWith';\r\nimport { OffsetPolyline } from '../GraphicsSystem/OffsetPolyline';\r\nimport { arrayLast, arrayRemoveDuplicateBySort, arrayRemoveIf, changeArrayStartIndex, equalArray } from './ArrayExt';\r\nimport { Status } from './Status';\r\nimport { FixIndex, LINK_FUZZ } from './Utils';\r\n\r\n//3点获取圆心\r\nexport function getCircleCenter(pt1: Vector3, pt2: Vector3, pt3: Vector3)\r\n{\r\n if (!(pt1 && pt2 && pt3))\r\n return;\r\n let A1 = pt1.x - pt2.x;\r\n let B1 = pt1.y - pt2.y;\r\n let C1 = (Math.pow(pt1.x, 2) - Math.pow(pt2.x, 2) + Math.pow(pt1.y, 2) - Math.pow(pt2.y, 2)) / 2;\r\n let A2 = pt3.x - pt2.x;\r\n let B2 = pt3.y - pt2.y;\r\n let C2 = (Math.pow(pt3.x, 2) - Math.pow(pt2.x, 2) + Math.pow(pt3.y, 2) - Math.pow(pt2.y, 2)) / 2;\r\n //令temp = A1*B2 - A2*B1\r\n let temp = A1 * B2 - A2 * B1;\r\n let center = new Vector3();\r\n //判断三点是否共线\r\n if (equaln(temp, 0, 1e-5))\r\n {\r\n return;\r\n }\r\n else\r\n {\r\n //不共线则求出圆心:\r\n center.x = (C1 * B2 - C2 * B1) / temp;\r\n center.y = (A1 * C2 - A2 * C1) / temp;\r\n }\r\n\r\n return center;\r\n}\r\n\r\n// 弦长+切线获取圆心角\r\nexport function getCirAngleByChordAndTangent(chord: Vector3, tangentLine: Vector3)\r\n{\r\n let dir = tangentLine.clone().cross(chord).normalize();\r\n\r\n let ctAngle = chord.angleTo(tangentLine);\r\n\r\n // 圆心角\r\n let cirAng = Math.PI - 2 * Math.abs(ctAngle - Math.PI / 2);\r\n\r\n if (ctAngle > Math.PI / 2)\r\n cirAng = Math.PI * 2 - cirAng;\r\n return cirAng *= dir.z;\r\n}\r\n//行列式\r\nexport function getDeterminantFor2V(v1: Vector2, v2: Vector2): number\r\n{\r\n return v1.x * v2.y - v1.y * v2.x;\r\n}\r\n\r\nexport function getDeterminantFor3V(v1: Vector3, v2: Vector3, v3: Vector3)\r\n{\r\n let mat = new Matrix3();\r\n mat.set(v1.x, v1.y, v1.z, v2.x, v2.y, v2.z, v3.x, v3.y, v3.z);\r\n return mat.determinant();\r\n}\r\n\r\n/**\r\n * 曲线根据连接来分组,每组都是一条首尾相连的曲线表.\r\n *\r\n * @export\r\n * @param {Curve[]} cus 传入的分组的曲线表\r\n * @returns {Array<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.OCSNoClone);\r\n return pts;\r\n }\r\n }\r\n}\r\n\r\nexport function CircleInternalTangentLines(cir0: Circle, cir1: Circle): Line[]\r\n{\r\n let c0 = new Vector3();\r\n let c1 = cir1.Center.applyMatrix4(cir0.OCSInv);\r\n\r\n let dist = c0.distanceTo(c1);\r\n\r\n if (dist - (cir0.Radius + cir1.Radius) < 0)\r\n return [];\r\n else if (equaln(dist - (cir0.Radius + cir1.Radius), 0))\r\n return [];\r\n else\r\n {\r\n let m = cir0.Radius / cir1.Radius;\r\n let h0 = (m * dist) / (m + 1);\r\n let h1 = dist / (m + 1);\r\n\r\n let i = new Vector3(\r\n (h1 * c0.x + h0 * c1.x) / dist,\r\n (h1 * c0.y + h0 * c1.y) / dist\r\n ).applyMatrix4(cir0.OCSNoClone);\r\n\r\n let [c0p0, c0p1] = GetTanPtsOnArcOrCircle(cir0, i);\r\n let [c1p0, c1p1] = GetTanPtsOnArcOrCircle(cir1, i);\r\n return [\r\n new Line(c0p0, c1p0),\r\n new Line(c0p1, c1p1),\r\n ];\r\n }\r\n}\r\n\r\n//ref https://github1s.com/ArashPartow/wykobi/blob/master/wykobi.inl#L6575-L6576\r\n//获取2个圆的外切线\r\nexport function CircleOuterTangentLines(circle0: Circle, circle1: Circle): Line[]\r\n{\r\n let c0 = circle0.Center;\r\n let c1 = circle1.Center;\r\n\r\n let dist = c0.distanceTo(c1);\r\n\r\n let rd = Math.abs(circle0.Radius - circle1.Radius);\r\n if (dist < rd)\r\n return [];\r\n else if (equaln(Math.abs(dist - rd), 0))\r\n return [];\r\n else if (equaln(circle0.Radius, circle1.Radius))\r\n {\r\n let cp = circle0.GetClosestPointTo(c1, true);\r\n let derv = circle0.GetFirstDeriv(cp).multiplyScalar(circle0.Radius);\r\n let dervn = derv.clone().negate();\r\n\r\n let c0p0 = c0.clone().add(derv);\r\n let c0p1 = c0.clone().add(dervn);\r\n\r\n let c1p0 = c1.clone().add(derv);\r\n let c1p1 = c1.clone().add(dervn);\r\n\r\n return [\r\n new Line(c0p0, c1p0),\r\n new Line(c0p1, c1p1),\r\n ];\r\n }\r\n else\r\n {\r\n let c0 = new Vector3();\r\n let c1 = circle1.Center.applyMatrix4(circle0.OCSInv);\r\n\r\n let p: Vector3;\r\n if (circle0.Radius > circle1.Radius)\r\n p = new Vector3(\r\n c1.x * circle0.Radius - c0.x * circle1.Radius,\r\n c1.y * circle0.Radius - c0.y * circle1.Radius\r\n );\r\n else\r\n p = new Vector3(\r\n c0.x * circle1.Radius - c1.x * circle0.Radius,\r\n c0.y * circle1.Radius - c1.y * circle0.Radius\r\n );\r\n\r\n let diff = Math.abs(circle0.Radius - circle1.Radius);\r\n\r\n p.x /= diff;\r\n p.y /= diff;\r\n\r\n p.applyMatrix4(circle0.OCSNoClone);\r\n\r\n let [c0p0, c0p1] = GetTanPtsOnArcOrCircle(circle0, p);\r\n let [c1p0, c1p1] = GetTanPtsOnArcOrCircle(circle1, p);\r\n\r\n return [\r\n new Line(c0p0, c1p0),\r\n new Line(c0p1, c1p1),\r\n ];\r\n }\r\n}\r\n\r\nexport function getArcOrCirNearPts(cu: Circle | Arc | Ellipse, pickPoint: Vector3, viewXform: Matrix3)\r\n{\r\n let viewNormal = new Vector3().fromArray(viewXform.elements, 2 * 3);\r\n\r\n let plane = new PlaneExt(cu.Normal, cu.Center);\r\n\r\n let pickLocal = plane.intersectLine(new Line3(pickPoint, pickPoint.clone().add(viewNormal)), new Vector3(), true);\r\n\r\n if (pickLocal)\r\n {\r\n let x = new Vector3().fromArray(viewXform.elements, 0).add(pickLocal);\r\n let y = new Vector3().fromArray(viewXform.elements, 3).add(pickLocal);\r\n\r\n x = plane.intersectLine(new Line3(x, x.clone().add(viewNormal)), new Vector3(), true);\r\n y = plane.intersectLine(new Line3(y, y.clone().add(viewNormal)), new Vector3(), true);\r\n\r\n let lx = new Line(pickLocal, x);\r\n let ly = new Line(pickLocal, y);\r\n\r\n let ins = cu.IntersectWith(lx, IntersectOption.ExtendBoth);\r\n ins.push(...cu.IntersectWith(ly, IntersectOption.ExtendBoth));\r\n return ins;\r\n }\r\n else\r\n {\r\n let ptLocal = plane.projectPoint(pickPoint, new Vector3());\r\n let lz = new Line(ptLocal, ptLocal.clone().add(viewNormal));\r\n return cu.IntersectWith(lz, IntersectOption.ExtendBoth);\r\n }\r\n}\r\n\r\nexport function getTanPtsOnEllipse(cu: Ellipse, lastPoint: Vector3)\r\n{\r\n return [];\r\n}\r\n\r\nexport interface IRectInfo\r\n{\r\n size: Vector3;\r\n box: Box3;\r\n OCS: Matrix4;\r\n}\r\n\r\n/**\r\n * 判断多段线是不是矩形\r\n * 因为用户画的垃圾图,所以我们会给容差\r\n * 1.简化点表成4个点\r\n * -得到x向量,构建二维旋转矩阵\r\n * -所有的点旋转\r\n * 2.构建box\r\n * 3.4个点都在盒子里,面积是矩形\r\n * @param cu\r\n */\r\nexport function IsRect(cu: Curve): IRectInfo | undefined\r\n{\r\n if (cu instanceof Polyline)\r\n {\r\n //如果不封闭(就不是矩形)\r\n if (!cu.IsClose) return;\r\n\r\n //如果点个数小于4(就不是矩形)\r\n if (cu.LineData.length < 4) return;\r\n\r\n //如果有圆弧(就不是矩形)\r\n for (let i = 0; i < cu.LineData.length; i++)\r\n {\r\n let d = cu.LineData[i];\r\n if (equaln(d.bul, 0, BUL_IS_LINE_FUZZ))\r\n continue;\r\n let next = FixIndex(i + 1, cu.LineData);\r\n if (equalv2(d.pt, cu.LineData[next].pt))\r\n continue;\r\n return;\r\n }\r\n\r\n let pts2d = cu.LineData.map(d => d.pt);\r\n\r\n //去除重复点\r\n arrayRemoveDuplicateBySort(pts2d, (p1, p2) => equalv2(p1, p2));\r\n if (equalv2(pts2d[0], pts2d[pts2d.length - 1]))\r\n pts2d.pop();\r\n\r\n //这里我们判断它是不是有4个90度的角,并且有4个点\r\n let preV = pts2d[0].clone().sub(pts2d[pts2d.length - 1]).negate();//preVector\r\n let preL = preV.length();//preLength\r\n let nowV = new Vector2;//nowVector\r\n let crossV = 0;//永远相同方向的90度,如果不是(就不是矩形)\r\n\r\n let pts4: Vector2[] = [];//简化成4个点\r\n\r\n for (let i = 0; i < pts2d.length; i++)\r\n {\r\n nowV.subVectors(pts2d[FixIndex(i + 1, pts2d.length)], pts2d[i]);\r\n\r\n let cross = preV.cross(nowV) / preL;\r\n\r\n let nowL = nowV.length();//nowLength\r\n\r\n if (equaln(cross, 0, 0.01))//平行 此时的cross = 三角形的高(其中preL是三角形的底边) 我们认为它移动了0.01是可以接受的\r\n continue;//TODOX:我们可能要合并这条线? 把preV preL更新一下?\r\n\r\n cross /= nowL;//此时的cross = sin@\r\n\r\n //如果不等于90度(就不是矩形)\r\n if (!equaln(Math.abs(cross), 1, 1e-5))\r\n return;\r\n\r\n cross = Math.sign(cross);\r\n\r\n if (!crossV)\r\n crossV = cross;\r\n else if (crossV !== cross)//如果方向不一致(没有绕着90度)(就不是矩形)\r\n return;\r\n\r\n pts4.push(pts2d[i]);\r\n if (pts4.length > 4)//如果超过4个点(就不是矩形)\r\n return;\r\n\r\n preL = nowL;\r\n preV.copy(nowV).negate();//翻转它 以便下一次计算\r\n }\r\n\r\n if (pts4.length !== 4 || !crossV)//没有90度 (就不是矩形)\r\n return;\r\n\r\n let rectOCS: Matrix4;\r\n\r\n preV.subVectors(pts4[1], pts4[0]);\r\n let box = new Box2;\r\n if (equaln(preV.x, 0, 1e-3) || equaln(preV.y, 0, 1e-3))//判断是不是与X轴平行或者与Y轴平行,精度容差在0.001 看起来没问题\r\n {\r\n rectOCS = cu.OCS;\r\n box.setFromPoints(pts4);\r\n }\r\n else//如果矩形不与X轴平行,我们旋转这个点表,然后变换它\r\n {\r\n let a = Math.atan2(preV.y, preV.x);\r\n let r = new Matrix2().setRotate(-a);\r\n\r\n let p0 = pts4[0];\r\n pts4 = pts4.map(p =>\r\n {\r\n p = p.clone().sub(p0);\r\n r.applyVector(p);\r\n return p;\r\n });\r\n box.setFromPoints(pts4);\r\n\r\n nowV.set(-preV.y, preV.x);//旋转90度\r\n\r\n rectOCS = new Matrix4().makeBasis(\r\n AsVector3(preV.normalize()),\r\n AsVector3(nowV.normalize()),\r\n ZAxis,\r\n ).setPosition(p0.x, p0.y, 0);\r\n\r\n rectOCS.multiplyMatrices(cu.OCSNoClone, rectOCS);\r\n }\r\n\r\n //4个点都在角上\r\n if (!pts4.every(p =>\r\n {\r\n return (equaln(p.x, box.min.x, 0.01) || equaln(p.x, box.max.x, 0.01))\r\n && (equaln(p.y, box.min.y, 0.01) || equaln(p.y, box.max.y, 0.01));\r\n }))\r\n return;\r\n\r\n let size = box.getSize(new Vector2);\r\n\r\n return {\r\n size: AsVector3(size),\r\n box: new Box3(AsVector3(box.min), AsVector3(box.max)),\r\n OCS: rectOCS,\r\n };\r\n }\r\n}\r\n\r\n/**用4个矩形点构造矩形 */\r\nexport function getRectFrom4Pts(pts: Vector3[])\r\n{\r\n if (pts.length !== 4) return;\r\n let p = pts.shift();\r\n pts.sort((p1, p2) => p.distanceTo(p1) - p.distanceTo(p2));\r\n pts.splice(1, 0, p);\r\n let lineData = pts.map(p =>\r\n {\r\n return {\r\n pt: new Vector2(p.x, p.y),\r\n bul: 0\r\n };\r\n });\r\n let l = new Polyline(lineData);\r\n l.CloseMark = true;\r\n return l;\r\n}\r\n\r\nexport function MergeCurvelist(cus: Curve[])\r\n{\r\n arrayRemoveIf(cus, c => c.Length < LINK_FUZZ);\r\n\r\n let cir: Circle;\r\n arrayRemoveDuplicateBySort(cus, (c1, c2) =>\r\n {\r\n if (cir) return true;\r\n\r\n let status = c1.Join(c2, false, LINK_FUZZ);\r\n if (status === Status.ConverToCircle)\r\n {\r\n let arc = c1 as Arc;\r\n cir = new Circle(arc.Center, arc.Radius);\r\n return true;\r\n }\r\n return status === Status.True;\r\n });\r\n\r\n if (cir)\r\n {\r\n cus.length = 0;\r\n cus.push(cir);\r\n }\r\n return cus;\r\n}\r\n\r\nexport function SwapParam(res: IntersectResult[]): IntersectResult[]\r\n{\r\n for (let r of res)\r\n [r.thisParam, r.argParam] = [r.argParam, r.thisParam];\r\n return res;\r\n}\r\n\r\nexport function ComputerCurvesNormalOCS(curves: Curve[], allowAutoCalc: boolean = true): Matrix4 | undefined\r\n{\r\n if (!curves || curves.length === 0) return;\r\n\r\n const IsNorZeroVector = (v: Vector3) => v && !equalv3(v, ZeroVec, 1e-3);\r\n\r\n //准备计算多段线的法向量\r\n let normal: Vector3;\r\n let firstV: Vector3;\r\n for (let c of curves)\r\n {\r\n if (c instanceof Arc || c instanceof Circle)\r\n {\r\n normal = c.Normal;\r\n break;\r\n }\r\n else if (firstV)\r\n {\r\n let v = c.GetFirstDeriv(0);\r\n if (IsNorZeroVector(v))\r\n {\r\n v.normalize().cross(firstV);\r\n if (IsNorZeroVector(v))//避免平行向量\r\n {\r\n normal = v.normalize();\r\n break;\r\n }\r\n }\r\n }\r\n else\r\n {\r\n let cus = c.Explode() as Curve[];\r\n let ocs = ComputerCurvesNormalOCS(cus, false);\r\n if (ocs)\r\n return ocs;\r\n let fv = c.GetFirstDeriv(0);\r\n if (IsNorZeroVector(fv))//先判断零向量\r\n firstV = fv.normalize();//再归一化\r\n }\r\n }\r\n\r\n if (!normal && !allowAutoCalc) return;\r\n\r\n let x = new Vector3();\r\n let y = new Vector3();\r\n if (!normal)\r\n {\r\n if (!firstV)\r\n return curves[0].OCS;\r\n\r\n normal = firstV.normalize();\r\n Orbit.ComputUpDirection(normal, y, x);\r\n [x, y, normal] = [normal, x, y];\r\n }\r\n else\r\n {\r\n if (equalv3(normal, curves[0].Normal.negate(), 1e-5))\r\n normal.negate();\r\n Orbit.ComputUpDirection(normal, y, x);\r\n }\r\n return new Matrix4().makeBasis(x, y, normal).setPosition(curves[0].StartPoint);\r\n}\r\n\r\n\r\nexport function Pts2Polyline(pts: (Vec3 | Vec2)[], isClose: boolean): Polyline\r\n{\r\n let pl = new Polyline();\r\n for (let i = 0; i < pts.length; i += 2)\r\n {\r\n let p1 = AsVector3(pts[i]);\r\n let arc: Arc | Line;\r\n let p2: Vector3;\r\n let p3: Vector3;\r\n\r\n if (isClose)\r\n {\r\n p2 = AsVector3(pts[FixIndex(i + 1, pts.length)]);\r\n p3 = AsVector3(pts[FixIndex(i + 2, pts.length)]);\r\n }\r\n else\r\n {\r\n if (i >= pts.length - 2) break;\r\n p2 = AsVector3(pts[i + 1]);\r\n p3 = AsVector3(pts[i + 2]);\r\n }\r\n let v1 = p1.clone().sub(p2);\r\n let v2 = p2.clone().sub(p3);\r\n\r\n if (equaln(v1.angleTo(v2), 0))\r\n arc = new Line(p1, p3);\r\n else\r\n arc = new Arc().FromThreePoint(p1, p2, p3);\r\n pl.Join(arc);\r\n }\r\n return pl;\r\n}\r\n\r\n/**\r\n * 将封闭的多段线,通过和y轴平行的线,分割成多个矩形\r\n * @param outline 这个多边形是横平竖直的,否则返回自身\r\n * @param polylineParalleXYFuzz 平行x或y的容差\r\n * @returns 裁剪后的矩形集\r\n */\r\nexport function PolylineSpliteRect(outline: Polyline, polylineParalleXYFuzz = 1e-3): Polyline[]\r\n{\r\n if (!outline.IsClose || IsRect(outline))\r\n return [outline];\r\n\r\n let cus = outline.Explode();\r\n\r\n let xSet: Set<number> = new Set();\r\n for (let c of cus)\r\n {\r\n if (c instanceof Arc) return [outline];\r\n let derv = c.GetFirstDeriv(0).normalize();\r\n if (isParallelTo(derv, YAxis, polylineParalleXYFuzz))\r\n xSet.add(c.StartPoint.x);\r\n else if (!isParallelTo(derv, XAxis, polylineParalleXYFuzz))\r\n return [outline];\r\n }\r\n\r\n //轮廓的每条线段都平行于X或Y轴 可直接按端点切割\r\n const knifePls: Polyline[] = [];\r\n const xList = Array.from(xSet).sort((a, b) => a - b);\r\n\r\n for (let x of xList)\r\n knifePls.push(new Polyline([{ pt: AsVector2({ x, y: 0 }), bul: 0 }, { pt: AsVector2({ x, y: 1 }), bul: 0 }]));\r\n\r\n //裁剪结果\r\n let rects = SplitPolyline(outline, knifePls).filter(pl => pl.IsClose);\r\n\r\n return rects;\r\n}\r\n","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 { Matrix4, Vector3 } from \"three\";\r\nimport { arrayPushArray } from \"../Common/ArrayExt\";\r\nimport { ComputerCurvesNormalOCS } from \"../Common/CurveUtils\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { Ellipse } from \"../DatabaseServices/Entity/Ellipse\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { Spline } from \"../DatabaseServices/Spline\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\nimport { CurveIntersection2 } from \"./CurveIntersection\";\r\nimport { AsVector2, equalv3, ZAxisN } from \"./GeUtils\";\r\nimport { RegionParse } from \"./RegionParse\";\r\n\r\n/**\r\n * 某些时候我们不能创建轮廓,此时我们使用类似c2r的方法来构建一个外部轮廓.\r\n */\r\nexport function CreateContours(curves: Curve[], fuzz = 1e-4): Contour[]\r\n{\r\n let contours: Contour[] = [];\r\n let extendsMinDistSq = fuzz * fuzz;\r\n //炸开多段线(防止自交多段线)\r\n let newCurves: Curve[] = [];\r\n for (let cu of curves)\r\n {\r\n if (cu instanceof Circle)\r\n contours.push(Contour.CreateContour(cu.Clone()));//避免将原始曲线传递给板,导致撤销这个圆失败\r\n else if (cu instanceof Polyline)\r\n arrayPushArray(newCurves, cu.Explode());\r\n else if (cu instanceof Spline)\r\n {\r\n let pl = cu.Convert2Polyline();\r\n if (pl.IsClose)\r\n contours.push(Contour.CreateContour(pl, false));\r\n else\r\n newCurves.push(pl);\r\n }\r\n else if (cu instanceof Ellipse)\r\n Contour.CreateContour(cu.Convert2Polyline(), false);\r\n else\r\n newCurves.push(cu);\r\n }\r\n\r\n let intersect = new CurveIntersection2(newCurves, false, IntersectOption.ExtendBoth, fuzz);\r\n\r\n let curves2: Curve[] = [];\r\n\r\n //延伸+打断\r\n for (let [cu, pmap] of intersect.intersect)\r\n {\r\n let sp = cu.StartPoint;\r\n let ep = cu.EndPoint;\r\n\r\n let epExtend: Vector3;\r\n let epDist = Infinity;\r\n let spExtend: Vector3;\r\n let spDist = Infinity;\r\n\r\n let isClose = cu.IsClose;\r\n\r\n let ipts: Vector3[] = [];\r\n for (let [, pts] of pmap)\r\n {\r\n arrayPushArray(ipts, pts);\r\n\r\n if (!isClose)\r\n for (let p of pts)\r\n {\r\n let d = p.distanceToSquared(ep);\r\n if (d < epDist)\r\n {\r\n epDist = d;\r\n epExtend = p;\r\n }\r\n d = p.distanceToSquared(sp);\r\n if (d < spDist)\r\n {\r\n spDist = d;\r\n spExtend = p;\r\n }\r\n }\r\n }\r\n\r\n if (!isClose)\r\n {\r\n //延伸\r\n if (epDist > 0 && epDist < extendsMinDistSq)\r\n {\r\n let param = cu.GetParamAtPoint(epExtend);\r\n if (param > cu.EndParam)\r\n cu.Extend(param);\r\n }\r\n if (spDist > 0 && spDist < extendsMinDistSq)\r\n {\r\n let param = cu.GetParamAtPoint(spExtend);\r\n if (param < 0)\r\n cu.Extend(param);\r\n }\r\n }\r\n\r\n //打断\r\n let curves: Curve[];\r\n if (ipts.length > 0)\r\n curves = cu.GetSplitCurvesByPts(ipts);\r\n else\r\n curves = [cu];\r\n\r\n let tempCus: Curve[] = [];\r\n for (let c of curves)\r\n {\r\n if (c instanceof Polyline)\r\n arrayPushArray(tempCus, c.Explode());\r\n else\r\n tempCus.push(c);\r\n }\r\n\r\n arrayPushArray(curves2, tempCus);\r\n }\r\n\r\n let parse = new RegionParse(curves2);\r\n\r\n for (let rs of parse.RegionsOutline)\r\n {\r\n const polyline = new Polyline;\r\n polyline.CloseMark = true;\r\n\r\n //获取曲线所在平面矩阵\r\n const OCS = ComputerCurvesNormalOCS([rs[0].curve, rs[1].curve]);\r\n const OCSInv = new Matrix4().getInverse(OCS);\r\n\r\n for (let r of rs)\r\n {\r\n let bul = 0;\r\n if (r.curve instanceof Arc)\r\n {\r\n bul = r.curve.Bul;\r\n if (equalv3(r.curve.Normal.applyMatrix4(OCSInv), ZAxisN, 1e-3))\r\n bul *= -1;\r\n if (r.isReverse)\r\n bul *= -1;\r\n }\r\n polyline.LineData.push({\r\n pt: AsVector2(r.s.applyMatrix4(OCSInv)),\r\n bul\r\n });\r\n }\r\n polyline.ApplyMatrix(OCS);\r\n\r\n let contour = Contour.CreateContour(polyline, false);\r\n if (contour)\r\n contours.push(contour);\r\n }\r\n return contours;\r\n}\r\n\r\nexport function CreateContour2(curves: Curve[], fuzz = 1e-4): Contour | undefined\r\n{\r\n return CreateContours(curves, fuzz)[0];\r\n}\r\n","import { Box2, Vector3 } from 'three';\r\nimport { Circle } from '../DatabaseServices/Entity/Circle';\r\nimport { Curve } from '../DatabaseServices/Entity/Curve';\r\nimport { Ellipse } from '../DatabaseServices/Entity/Ellipse';\r\nimport { Polyline } from '../DatabaseServices/Entity/Polyline';\r\nimport { IntersectOption } from './IntersectWith';\r\n\r\nexport enum BoolOpeartionType\r\n{\r\n Intersection = 0,\r\n Union = 1,\r\n Subtract = 2\r\n}\r\n\r\nconst fuzz = 1e-3;\r\nlet fuzzV3 = new Vector3(fuzz, fuzz, fuzz);\r\n\r\n//判断小曲线是不是被大曲线包含(或者重叠?)\r\nexport function isTargetCurInOrOnSourceCur(bigCurve: Polyline | Circle | Ellipse, smallCurve: Curve)\r\n{\r\n //#fix fileid 2087494 使用二维的box来计算看起来没有问题\r\n if (!Box2.prototype.containsBox.apply(bigCurve.BoundingBox.expandByVector(fuzzV3), [smallCurve.BoundingBox]))\r\n return false;\r\n\r\n let cus: Curve[] = [];\r\n if (smallCurve instanceof Polyline)\r\n cus = smallCurve.Explode();\r\n else\r\n cus = [smallCurve];\r\n\r\n return cus.every(c =>\r\n {\r\n let pts = getIntPtContextPts(bigCurve, c);\r\n if (pts.length <= 1)\r\n pts.push(c.StartPoint, c.EndPoint);\r\n return IsPtsAllInOrOnReg(bigCurve, pts);\r\n });\r\n}\r\n\r\n//获取交点处上下距0.01par的点\r\nfunction getIntPtContextPts(sourceCur: Curve, cu: Curve, pts: Vector3[] = [])\r\n{\r\n let interPts = cu.IntersectWith(sourceCur, IntersectOption.ExtendNone);\r\n if (interPts.length > 0)\r\n {\r\n let pars = interPts.map(pt => cu.GetParamAtPoint(pt));\r\n for (let par of pars)\r\n {\r\n if (par >= 0.02)\r\n pts.push(cu.GetPointAtParam(par - 0.01));\r\n\r\n if (par <= (cu.EndParam - 0.02))\r\n pts.push(cu.GetPointAtParam(par + 0.01));\r\n }\r\n }\r\n return pts;\r\n}\r\n//判断点点是否全部都在封闭区域内或者在曲线上\r\nfunction IsPtsAllInOrOnReg(sourceReg: Polyline | Circle | Ellipse, pts: Vector3[])\r\n{\r\n return pts.every(pt =>\r\n {\r\n //是否点在封闭曲线内\r\n return sourceReg.PtOnCurve(pt) || sourceReg.PtInCurve(pt);\r\n });\r\n}\r\n\r\n//判断点是否全部都在封闭区域外或者在曲线上\r\nexport function IsPtsAllOutOrOnReg(sourceReg: Polyline | Circle, pts: Vector3[])\r\n{\r\n return pts.every(pt =>\r\n {\r\n //是否点在封闭曲线内\r\n return sourceReg.PtOnCurve(pt) || !sourceReg.PtInCurve(pt);\r\n });\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from \"../Common/ArrayExt\";\r\nimport { curveLinkGroup, equalCurve } from \"../Common/CurveUtils\";\r\nimport { Status } from \"../Common/Status\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { IntersectBox2 } from \"../Geometry/Box\";\r\nimport { CreateContour2 } from \"../Geometry/CreateContour2\";\r\nimport { Route } from \"../Geometry/CurveMap\";\r\nimport { equaln, equalv2, equalv3 } from \"../Geometry/GeUtils\";\r\nimport { RegionParse } from \"../Geometry/RegionParse\";\r\nimport { isTargetCurInOrOnSourceCur } from \"../GraphicsSystem/BoolOperateUtils\";\r\nimport { IntersectOption, IntersectResult } from \"../GraphicsSystem/IntersectWith\";\r\nimport { Arc } from \"./Entity/Arc\";\r\nimport { Circle } from \"./Entity/Circle\";\r\nimport { Curve } from \"./Entity/Curve\";\r\nimport { Polyline } from \"./Entity/Polyline\";\r\n\r\nlet cache = new WeakMap();\r\n\r\nconst COMBINE_FUZZ = 1e-2;\r\n\r\nexport class Contour\r\n{\r\n private _Curve: Polyline | Circle;\r\n\r\n protected SetCurve(cu: Polyline | Circle)\r\n {\r\n if (cu instanceof Polyline)\r\n {\r\n if (cu.Area2 < 0)\r\n cu.Reverse();\r\n }\r\n this._Curve = cu;\r\n }\r\n /**会将传入的闭合轮廓改为逆时针 */\r\n static CreateContour(cus: Curve[] | Polyline | Circle, needLink = true)\r\n {\r\n if (cus instanceof Curve)\r\n {\r\n if (cus.IsClose)\r\n {\r\n let c = new Contour();\r\n c.SetCurve(cus);\r\n return c;\r\n }\r\n return;\r\n }\r\n\r\n let closeCurve = Contour.Combine(cus, needLink, COMBINE_FUZZ) as Polyline | Circle;\r\n if (closeCurve && closeCurve.IsClose)\r\n {\r\n if (closeCurve instanceof Polyline && closeCurve.CloseMark === false)\r\n {\r\n closeCurve.CloseMark = true;\r\n closeCurve.RemoveVertexAt(closeCurve.NumberOfVertices - 1);\r\n }\r\n\r\n let c = new Contour();\r\n c.SetCurve(closeCurve);\r\n return c;\r\n }\r\n }\r\n get Curve(): Polyline | Circle\r\n {\r\n return this._Curve;\r\n }\r\n get Area()\r\n {\r\n return this._Curve.Area;\r\n }\r\n get BoundingBox()\r\n {\r\n return this._Curve.BoundingBox;\r\n }\r\n /**\r\n * 不等比例缩放\r\n * @param {number} ref 缩放参考值,大于该值的点缩放\r\n * @param {number} dist 缩放距离\r\n * @param {string} dir x y z\r\n */\r\n UnEqualProportionScale(ref: number, dist: number, dir: \"x\" | \"y\")\r\n {\r\n let cu = this._Curve;\r\n if (cu instanceof Polyline)\r\n {\r\n let lineData = cu.LineData;\r\n let length = lineData.length;\r\n let p = cu.Position[dir];\r\n\r\n let moveIndexs: number[] = [];\r\n for (let i = 0; i < length; i++)\r\n {\r\n if (lineData[i].pt[dir] + p > ref)\r\n moveIndexs.push(i);\r\n }\r\n let moveVec = new Vector3();\r\n moveVec[dir] = dist;\r\n cu.MoveStretchPoints(moveIndexs, moveVec);\r\n return true;\r\n }\r\n return false;\r\n }\r\n Clone()\r\n {\r\n return Contour.CreateContour([this._Curve.Clone()]);\r\n }\r\n //交集:结果数组为空则失败\r\n IntersectionBoolOperation(target: Contour): Contour[]\r\n {\r\n if (!IntersectBox2(this.BoundingBox, target.BoundingBox))\r\n return [];\r\n let resultCus = this.GetIntersetAndUnionList(target);\r\n return Contour.GetAllContour(resultCus.intersectionList);\r\n }\r\n //并集:结果轮廓数组长度大于2,则失败.等于1则成功.\r\n UnionBoolOperation(target: Contour): { contours: Contour[], holes: Contour[]; }\r\n {\r\n let resultCus = this.GetIntersetAndUnionList(target);\r\n\r\n //快速\r\n if (resultCus.unionList.every(c => c.IsClose))\r\n return {\r\n contours: Contour.GetAllContour(resultCus.unionList),\r\n holes: [],\r\n };\r\n\r\n //并集后的线段表如果有共线的直接合并起来\r\n let cus: Curve[] = [];\r\n for (let pl of resultCus.unionList)\r\n {\r\n if (pl instanceof Polyline)\r\n cus.push(...pl.Explode());\r\n else\r\n cus.push(pl);\r\n }\r\n let cuGroups = curveLinkGroup(cus);\r\n for (let g of cuGroups)\r\n {\r\n for (let i = 0; i < g.length; i++)\r\n {\r\n let c1 = g[i];\r\n let nextI = FixIndex(i + 1, g);\r\n let c2 = g[nextI];\r\n\r\n let status = c1.Join(c2);\r\n if (status === Status.True)\r\n {\r\n g.splice(nextI, 1);\r\n i--;\r\n }\r\n else if (status === Status.ConverToCircle)\r\n {\r\n g.length = 0;\r\n let a = c1 as Arc;\r\n g.push(new Circle(a.Center, a.Radius));\r\n break;\r\n }\r\n }\r\n }\r\n let allContour = Contour.GetAllContour(cuGroups);\r\n if (allContour.length < 2)\r\n {\r\n return {\r\n contours: allContour,\r\n holes: [],\r\n };\r\n }\r\n else\r\n {\r\n let cache = new WeakMap();\r\n for (let c of allContour)\r\n cache.set(c, c.Area);\r\n allContour.sort((a, b) => cache.get(b) - cache.get(a));\r\n return {\r\n contours: [allContour[0]],\r\n holes: allContour.slice(1)\r\n };\r\n }\r\n\r\n }\r\n //差集:等于0完全被减去\r\n SubstactBoolOperation(target: Contour): Contour[]\r\n {\r\n let subtractList = this.GetSubtractList(target);\r\n\r\n //纯网洞\r\n if (subtractList.every(c => c.IsClose))\r\n return Contour.GetAllContour(subtractList);\r\n\r\n let regParse = new RegionParse(subtractList, 2);\r\n\r\n let contours: Contour[] = [];\r\n //分析封闭包围区域\r\n const parseRoute = (routeSet: Array<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","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 { 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(bGeo: BufferGeometry, mtl: Material, scale = 1e-3)\r\n {\r\n if (!bGeo.boundingBox)\r\n bGeo.computeBoundingBox();\r\n\r\n let normals = bGeo.getAttribute(\"normal\") as BufferAttribute;\r\n let pos = bGeo.getAttribute(\"position\") as BufferAttribute;\r\n let uvs = bGeo.getAttribute(\"uv\") as BufferAttribute;\r\n\r\n if (!pos || !uvs || pos.count === 0) return;\r\n\r\n for (let y = 0; y < pos.count; y++)\r\n {\r\n let index = y * 3;\r\n let mtx = this.GetMtxInv(normals.array[index], normals.array[index + 1], normals.array[index + 2]);\r\n\r\n this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]);\r\n\r\n this._X.applyMatrix4(mtx);\r\n\r\n this._Box.copy(bGeo.boundingBox);\r\n this._Box.applyMatrix4(mtx);\r\n\r\n //@ts-ignore\r\n uvs.array[y * 2] = (((this._X.x - (this._Box.min.x + this._Box.max.x) * 0.5)) * scale + mtl[U_WORLD_MOVE]) * mtl[U_WORLD_REP] + 0.5;\r\n //@ts-ignore\r\n uvs.array[y * 2 + 1] = (((this._X.y - (this._Box.min.y + this._Box.max.y) * 0.5)) * scale + mtl[V_WORLD_MOVE]) * mtl[V_WORLD_REP] + 0.5;\r\n }\r\n\r\n uvs.needsUpdate = true;\r\n }\r\n}\r\n","import { BufferAttribute, BufferGeometry, Float32BufferAttribute, Matrix4, Vector3 } from \"three\";\r\nimport { Orbit } from \"../../Geometry/Orbit\";\r\nimport { GetFaceDir } from \"./GenUVForWorld\";\r\n\r\n//板件的UV计算\r\nexport class GenLocalUv\r\n{\r\n private InvMtxMap = new Map<Vector3, Matrix4>();\r\n\r\n private _Z = new Vector3;\r\n private _X = new Vector3;\r\n private _Y = new Vector3;\r\n\r\n private GetMtxInv({ normalX, normalY, normalZ }: { normalX: number, normalY: number, normalZ: number; }, IsReverse: boolean)\r\n {\r\n this._Z.set(normalX, normalY, normalZ);\r\n let n = GetFaceDir(this._Z);\r\n let mtx = this.InvMtxMap.get(n);\r\n\r\n if (mtx)\r\n return mtx;\r\n\r\n this._Z.copy(n);\r\n if (n.z != 0 && !IsReverse)//正面和背面不旋转\r\n Orbit.ComputUpDirection(this._Z, this._Y, this._X);\r\n else\r\n Orbit.ComputUpDirection(this._Z, this._X, this._Y);\r\n mtx = new Matrix4().makeBasis(this._X, this._Y, this._Z);;\r\n mtx.getInverse(mtx);\r\n\r\n this.InvMtxMap.set(n, mtx);\r\n return mtx;\r\n }\r\n\r\n //计算uv值\r\n CalculateUv(geo: BufferGeometry, IsReverse: boolean, scale = 1e-3)\r\n {\r\n if (!geo.boundingBox)\r\n geo.computeBoundingBox();\r\n\r\n let normals = geo.getAttribute(\"normal\") as BufferAttribute;\r\n let pos = geo.getAttribute(\"position\") as BufferAttribute;\r\n const uvs = [];\r\n for (let y = 0; y < pos.count; y++)\r\n {\r\n let index = y * 3;\r\n const normalX = normals.array[index];\r\n const normalY = normals.array[index + 1];\r\n const normalZ = normals.array[index + 2];\r\n let mtx = this.GetMtxInv({ normalX, normalY, normalZ }, IsReverse);\r\n\r\n this._X.set(pos.array[index], pos.array[index + 1], pos.array[index + 2]);\r\n this._X.applyMatrix4(mtx);\r\n\r\n uvs.push(this._X.x * scale);\r\n uvs.push(this._X.y * scale);\r\n }\r\n geo.setAttribute(\"uv\", new Float32BufferAttribute(uvs, 2));\r\n }\r\n}\r\n","import { Box3, Matrix3, Matrix4, Path, Shape as TShape, Vector3 } from 'three';\r\nimport { arrayRemoveIf } from '../Common/ArrayExt';\r\nimport { ObjectSnapMode } from '../Editor/ObjectSnapMode';\r\nimport { IntersectBox2 } from '../Geometry/Box';\r\nimport { equaln } from '../Geometry/GeUtils';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Contour } from './Contour';\r\nimport { Circle } from './Entity/Circle';\r\nimport { Curve } from './Entity/Curve';\r\nimport { Polyline } from './Entity/Polyline';\r\nimport { Shape2 } from './Shape2';\r\n\r\nexport class Shape\r\n{\r\n private _DisplayAccuracy = 0;\r\n constructor(\r\n private _Outline: Contour = new Contour,\r\n private _Holes: Contour[] = []\r\n )\r\n {\r\n }\r\n\r\n get DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n this._DisplayAccuracy = v;\r\n }\r\n\r\n get Outline()\r\n {\r\n return this._Outline;\r\n }\r\n get Holes()\r\n {\r\n return this._Holes;\r\n }\r\n get Area()\r\n {\r\n let outlineArea = this._Outline.Area;\r\n let holeArea = this._Holes.map(l => l.Area).reduce((a1, a2) => a1 + a2, 0);\r\n return outlineArea - holeArea;\r\n }\r\n get BoundingBox()\r\n {\r\n return this._Outline.BoundingBox;\r\n }\r\n set Outline(con: Contour)\r\n {\r\n this._Outline = con;\r\n }\r\n set Holes(holes: Contour[])\r\n {\r\n this._Holes = holes;\r\n }\r\n\r\n get Shape(): TShape\r\n {\r\n let shape = this.Outline.Shape;\r\n for (let h of this._Holes)\r\n {\r\n if (h.Curve instanceof Polyline)\r\n h.Curve.UpdateOCSTo(this.Outline.Curve.OCS);\r\n\r\n if (h.Curve instanceof Circle)\r\n {\r\n let sp = new Path();\r\n let cen = h.Curve.Center.applyMatrix4(this.Outline.Curve.OCSInv);\r\n sp.ellipse(cen.x, cen.y, h.Curve.Radius, h.Curve.Radius, 0, 2 * Math.PI, false, 0);\r\n shape.holes.push(sp);\r\n }\r\n else\r\n shape.holes.push(h.Shape);\r\n }\r\n (shape as Shape2).DisplayAccuracy = this._DisplayAccuracy;\r\n return shape;\r\n }\r\n\r\n get Position()\r\n {\r\n return this._Outline.Curve.Position;\r\n }\r\n set Position(p: Vector3)\r\n {\r\n let vec = p.clone().sub(this._Outline.Curve.Position);\r\n this._Outline.Curve.Position = p;\r\n for (let h of this._Holes)\r\n h.Curve.Position = h.Curve.Position.add(vec);\r\n }\r\n Z0()\r\n {\r\n this._Outline.Curve.Z0();\r\n for (let h of this._Holes)\r\n h.Curve.Z0();\r\n return this;\r\n }\r\n\r\n MatrixPlanarizere()\r\n {\r\n this._Outline.Curve.MatrixPlanarizere();\r\n for (let h of this._Holes)\r\n h.Curve.MatrixPlanarizere();\r\n }\r\n\r\n ApplyMatrix(m: Matrix4)\r\n {\r\n this._Outline.Curve.ApplyMatrix(m);\r\n this._Holes.forEach(h => h.Curve.ApplyMatrix(m));\r\n return this;\r\n }\r\n ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n\r\n let cu = this.Outline.Curve;\r\n let cus = this._Holes.map(h => h.Curve);\r\n cus.unshift(cu);\r\n for (let c of cus)\r\n {\r\n c.ApplyMatrix(c.OCS);\r\n c.ApplyMatrix(m);\r\n c.ApplyMatrix(c.OCSInv);\r\n }\r\n\r\n return this;\r\n }\r\n Explode()\r\n {\r\n let cus: Curve[] = [];\r\n let contours: Contour[] = [this._Outline, ...this._Holes];\r\n for (let con of contours)\r\n {\r\n if (con.Curve instanceof Polyline)\r\n cus.push(...con.Curve.Explode());\r\n else\r\n cus.push(con.Curve.Clone());\r\n }\r\n return cus;\r\n }\r\n Clone()\r\n {\r\n let shape = new Shape();\r\n shape.Outline = this._Outline.Clone();\r\n shape.Holes = this.Holes.map(h => h.Clone());\r\n return shape;\r\n }\r\n SetColor(color: number)\r\n {\r\n this._Outline.Curve.ColorIndex = color;\r\n this._Holes.forEach(h => h.Curve.ColorIndex = color);\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let cus: Curve[] = [this._Outline.Curve];\r\n for (let h of this._Holes)\r\n {\r\n cus.push(h.Curve);\r\n }\r\n let pts: Vector3[] = [];\r\n for (let c of cus)\r\n {\r\n pts.push(...c.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n GetGripPoints()\r\n {\r\n let pts = this.Outline.Curve.GetGripPoints();\r\n for (let h of this._Holes)\r\n {\r\n pts.push(...h.Curve.GetGripPoints());\r\n }\r\n return pts;\r\n }\r\n MoveGripPoints(indexList: Array<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","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 { Matrix4, Vector3 } from \"three\";\r\n\r\nlet x = new Vector3();\r\nlet y = new Vector3();\r\nlet z = new Vector3();\r\nexport function IsMirror(mtx: Matrix4): boolean\r\n{\r\n mtx.extractBasis(x, y, z);\r\n // for a true orthogonal, non-mirrored base, u.cross(v) == w\r\n // If they have an opposite direction then we are mirroring\r\n const mirrorvalue = x.cross(y).dot(z);\r\n const ismirror = (mirrorvalue < 0);\r\n return ismirror;\r\n}\r\n","import { Matrix4 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort } from \"../../../Common/ArrayExt\";\r\nimport { equalv3 } from \"../../../Geometry/GeUtils\";\r\nimport { EPS, _CSGDEBUG } from \"../constants\";\r\nimport { IsMirror } from \"./IsMirrot\";\r\nimport { Plane } from \"./Plane\";\r\nimport { Vector3D } from \"./Vector3\";\r\nimport { Vertex3D } from \"./Vertex3\";\r\n\r\nexport enum Type\r\n{\r\n CoplanarFront = 0,\r\n CoplanarBack = 1,\r\n Front = 2,\r\n Back = 3,\r\n Spanning = 4,\r\n}\r\n\r\n\r\ninterface SplitPolygonData\r\n{\r\n type: Type;\r\n front: Polygon;\r\n back: Polygon;\r\n}\r\n\r\n/** Class Polygon\r\n * Represents a convex polygon. The vertices used to initialize a polygon must\r\n * be coplanar and form a convex loop. They do not have to be `Vertex`\r\n * instances but they must behave similarly (duck typing can be used for\r\n * customization).\r\n * <br>\r\n * Each convex polygon has a `shared` property, which is shared between all\r\n * polygons that are clones of each other or were split from the same polygon.\r\n * This can be used to define per-polygon properties (such as surface color).\r\n * <br>\r\n * The plane of the polygon is calculated from the vertex coordinates if not provided.\r\n * The plane can alternatively be passed as the third argument to avoid calculations.\r\n *\r\n *表示凸多边形。 用于初始化多边形的顶点必须共面并形成凸环。\r\n *多边形是彼此克隆或从同一多边形分割的多边形。\r\n *这可用于定义每个多边形属性(例如表面颜色)。\r\n */\r\nexport class Polygon\r\n{\r\n cachedBoundingSphere: [Vector3D, number];\r\n cachedBoundingBox: [Vector3D, Vector3D];\r\n constructor(public vertices: Vertex3D[], public plane?: Plane)\r\n {\r\n if (!plane)\r\n this.plane = Plane.fromVector3Ds(vertices[0].pos, vertices[1].pos, vertices[2].pos);\r\n\r\n if (_CSGDEBUG)\r\n if (!this.checkIfConvex()) throw new Error(\"Not convex!\");\r\n }\r\n\r\n /** Check whether the polygon is convex. (it should be, otherwise we will get unexpected results)*/\r\n checkIfConvex(): boolean\r\n {\r\n return Polygon.verticesConvex(this.vertices, this.plane.normal);\r\n }\r\n\r\n // returns an array with a Vector3D (center point) and a radius\r\n\r\n boundingSphere()\r\n {\r\n if (!this.cachedBoundingSphere)\r\n {\r\n let box = this.boundingBox();\r\n let middle = box[0].clone().add(box[1]).multiplyScalar(0.5);\r\n let radius3 = box[1].clone().sub(middle);\r\n let radius = radius3.length();\r\n this.cachedBoundingSphere = [middle, radius];\r\n }\r\n return this.cachedBoundingSphere;\r\n }\r\n\r\n // returns an array of two Vector3Ds (minimum coordinates and maximum coordinates)\r\n\r\n boundingBox(): Vector3D[]\r\n {\r\n if (!this.cachedBoundingBox)\r\n {\r\n let minpoint: Vector3D;\r\n let maxpoint: Vector3D;\r\n let vertices = this.vertices;\r\n let numvertices = vertices.length;\r\n if (numvertices === 0)\r\n minpoint = new Vector3D(0, 0, 0);\r\n else\r\n minpoint = vertices[0].pos.clone();\r\n maxpoint = minpoint.clone();\r\n for (let i = 1; i < numvertices; i++)\r\n {\r\n let point = vertices[i].pos;\r\n minpoint.min(point);\r\n maxpoint.max(point);\r\n }\r\n this.cachedBoundingBox = [minpoint, maxpoint];\r\n }\r\n return this.cachedBoundingBox;\r\n }\r\n\r\n flipped()\r\n {\r\n let newvertices = this.vertices.map(v => v.flipped());\r\n newvertices.reverse();\r\n let newplane = this.plane.flipped();\r\n return new Polygon(newvertices, newplane);\r\n }\r\n\r\n // Affine transformation of polygon. Returns a new Polygon\r\n transform(matrix4x4: Matrix4)\r\n {\r\n let newvertices = this.vertices.map(v => v.transform(matrix4x4));\r\n let newplane = this.plane.transform(matrix4x4);\r\n if (IsMirror(matrix4x4))\r\n {\r\n // need to reverse the vertex order\r\n // in order to preserve the inside/outside orientation:\r\n newvertices.reverse();\r\n }\r\n return new Polygon(newvertices, newplane);\r\n }\r\n\r\n splitByPlane(plane: Plane): SplitPolygonData\r\n {\r\n let result: SplitPolygonData = { type: null, front: null, back: null };\r\n // cache in local lets (speedup):\r\n let planeNormal = plane.normal;\r\n let vertices = this.vertices;\r\n let numVertices = vertices.length;\r\n if (this.plane.coplanarTo(plane))\r\n {\r\n result.type = Type.CoplanarFront;\r\n }\r\n else\r\n {\r\n let thisW = plane.w;\r\n let hasFront = false;\r\n let hasBack = false;\r\n let vertexIsBack: boolean[] = [];\r\n let MINEPS = -EPS;\r\n for (let i = 0; i < numVertices; i++)\r\n {\r\n let t = planeNormal.dot(vertices[i].pos) - thisW;\r\n let isBack = t < 0;\r\n vertexIsBack.push(isBack);\r\n if (t > EPS) hasFront = true;\r\n if (t < MINEPS) hasBack = true;\r\n }\r\n if (!hasFront && !hasBack)\r\n {\r\n // all points coplanar\r\n let t = planeNormal.dot(this.plane.normal);\r\n result.type = t >= 0 ? Type.CoplanarFront : Type.CoplanarBack;\r\n }\r\n else if (!hasBack)\r\n result.type = Type.Front;\r\n else if (!hasFront)\r\n result.type = Type.Back;\r\n else\r\n {\r\n result.type = Type.Spanning;\r\n let frontVertices: Vertex3D[] = [];\r\n let backVertices: Vertex3D[] = [];\r\n let isBack = vertexIsBack[0];\r\n for (\r\n let vertexIndex = 0;\r\n vertexIndex < numVertices;\r\n vertexIndex++\r\n )\r\n {\r\n let vertex = vertices[vertexIndex];\r\n let nextVertexindex = vertexIndex + 1;\r\n if (nextVertexindex >= numVertices) nextVertexindex = 0;\r\n let nextIsBack = vertexIsBack[nextVertexindex];\r\n if (isBack === nextIsBack)\r\n {\r\n // line segment is on one side of the plane:\r\n if (isBack)\r\n backVertices.push(vertex);\r\n else\r\n frontVertices.push(vertex);\r\n }\r\n else\r\n {\r\n let intersectionVertex = plane.splitLineBetweenPoints(vertex, vertices[nextVertexindex]);\r\n if (isBack)\r\n {\r\n backVertices.push(vertex);\r\n backVertices.push(intersectionVertex);\r\n frontVertices.push(intersectionVertex);\r\n }\r\n else\r\n {\r\n frontVertices.push(vertex);\r\n frontVertices.push(intersectionVertex);\r\n backVertices.push(intersectionVertex);\r\n }\r\n }\r\n isBack = nextIsBack;\r\n } // for vertexindex\r\n // remove duplicate vertices:\r\n arrayRemoveDuplicateBySort(backVertices, (v1, v2) => equalv3(v1.pos, v2.pos, EPS));\r\n if (backVertices.length > 2 && equalv3(backVertices[0].pos, arrayLast(backVertices).pos, EPS))\r\n backVertices.pop();\r\n arrayRemoveDuplicateBySort(frontVertices, (v1, v2) => equalv3(v1.pos, v2.pos, EPS));\r\n if (frontVertices.length > 2 && equalv3(frontVertices[0].pos, arrayLast(frontVertices).pos, EPS))\r\n frontVertices.pop();\r\n if (frontVertices.length >= 3)\r\n result.front = new Polygon(frontVertices, this.plane);\r\n if (backVertices.length >= 3)\r\n result.back = new Polygon(backVertices, this.plane);\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * 是一个凸多边形\r\n * @param vertices 顶点列表\r\n * @param planenormal 平面法线\r\n * @returns true:是凸多边形 false:不是凸多边形\r\n */\r\n static verticesConvex(vertices: Vertex3D[], planenormal: Vector3D): boolean\r\n {\r\n let count = vertices.length;\r\n if (count < 3) return false;\r\n\r\n let prevPrevPos = vertices[count - 2].pos;\r\n let prevPos = vertices[count - 1].pos;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let pos = vertices[i].pos;\r\n if (!Polygon.isConvexPoint(prevPrevPos, prevPos, pos, planenormal))\r\n return false;\r\n\r\n prevPrevPos = prevPos;\r\n prevPos = pos;\r\n }\r\n return true;\r\n }\r\n\r\n // 计算3点是否凸角\r\n static isConvexPoint(prevpoint: Vector3D, point: Vector3D, nextpoint: Vector3D, normal: Vector3D)\r\n {\r\n let crossproduct = point.clone().sub(prevpoint).cross(nextpoint.clone().sub(point));\r\n let crossdotnormal = crossproduct.dot(normal);\r\n return crossdotnormal >= 0;\r\n }\r\n}\r\n","import { FuzzyFactory } from \"./FuzzyFactory\";\r\nimport { EPS } from \"./constants\";\r\nimport { Plane } from \"./math/Plane\";\r\nimport { Polygon } from \"./math/Polygon3\";\r\nimport { Vertex3D } from \"./math/Vertex3\";\r\n\r\nexport class FuzzyCSGFactory\r\n{\r\n vertexfactory = new FuzzyFactory(3, EPS);\r\n planefactory = new FuzzyFactory(4, EPS);\r\n constructor() { }\r\n\r\n getVertex(sourcevertex: Vertex3D): Vertex3D\r\n {\r\n let elements = [sourcevertex.pos.x, sourcevertex.pos.y, sourcevertex.pos.z];\r\n let result = this.vertexfactory.lookupOrCreate(elements, sourcevertex);\r\n return result;\r\n }\r\n\r\n getPlane(sourceplane: Plane): Plane\r\n {\r\n let elements: number[] = [sourceplane.normal.x, sourceplane.normal.y, sourceplane.normal.z, sourceplane.w];\r\n let result = this.planefactory.lookupOrCreate(elements, sourceplane);\r\n return result;\r\n }\r\n\r\n getPolygon(sourcePolygon: Polygon, outputPolygon = sourcePolygon): Polygon\r\n {\r\n let newPlane = this.getPlane(sourcePolygon.plane);\r\n let newVertices = sourcePolygon.vertices.map(vertex => this.getVertex(vertex));\r\n // two vertices that were originally very close may now have become\r\n // truly identical (referring to the same Vertex object).\r\n // Remove duplicate vertices:\r\n let newVerticesDedup: Vertex3D[] = [];//新的顶点列表(已过滤重复)\r\n if (newVertices.length > 0)\r\n {\r\n let prevVertexTag = newVertices[newVertices.length - 1].getTag();\r\n for (let vertex of newVertices)\r\n {\r\n let vertextag = vertex.getTag();\r\n if (vertextag !== prevVertexTag)\r\n newVerticesDedup.push(vertex);\r\n prevVertexTag = vertextag;\r\n }\r\n }\r\n // If it's degenerate, remove all vertices:\r\n if (newVerticesDedup.length < 3)\r\n newVerticesDedup = [];\r\n\r\n outputPolygon.vertices = newVertices;\r\n outputPolygon.plane = newPlane;\r\n return outputPolygon;\r\n }\r\n}\r\n","import geom3, { Geom3 } from \"@jscad/modeling/src/geometries/geom3\";\r\nimport { create, Poly3 } from \"@jscad/modeling/src/geometries/poly3\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport retessellate from \"@jscad/modeling/src/operations/modifiers/retessellate\";\r\nimport { BufferGeometry, Face3, Geometry, Plane, Vector2, Vector3 } from \"three\";\r\nimport { Geom3Res } from \"../../Common/CSGIntersect\";\r\nimport { AsVector2, AsVector3, equalv3, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { CSG } from \"./CSG\";\r\nimport { Polygon } from \"./math/Polygon3\";\r\nimport { Vector2D } from \"./math/Vector2\";\r\nimport { Vector3D } from \"./math/Vector3\";\r\nimport { Vertex3D } from \"./math/Vertex3\";\r\n\r\n//弃用\r\nexport function Geometry2CSG(geometry: Geometry | BufferGeometry): CSG\r\n{\r\n if (geometry instanceof BufferGeometry)\r\n geometry = new Geometry().fromBufferGeometry(geometry);\r\n\r\n let polygons: Polygon[] = [];\r\n for (let i = 0; i < geometry.faces.length; i++)\r\n {\r\n let face = geometry.faces[i];\r\n let faceVertexUvs = geometry.faceVertexUvs[0][i];\r\n let vertices: Vertex3D[] = [];\r\n\r\n if (face instanceof Face3)\r\n {\r\n let uv = faceVertexUvs ? faceVertexUvs[0].clone() : null;\r\n let vertex1 = new Vertex3D(Vector3ToVector3D(geometry.vertices[face.a]), new Vector2D(uv.x, uv.y));\r\n vertices.push(vertex1);\r\n\r\n uv = faceVertexUvs ? faceVertexUvs[1].clone() : null;\r\n let vertex2 = new Vertex3D(Vector3ToVector3D(geometry.vertices[face.b]), new Vector2D(uv.x, uv.y));\r\n vertices.push(vertex2);\r\n\r\n uv = faceVertexUvs ? faceVertexUvs[2].clone() : null;\r\n let vertex3 = new Vertex3D(Vector3ToVector3D(geometry.vertices[face.c]), new Vector2D(uv.x, uv.y));\r\n vertices.push(vertex3);\r\n }\r\n\r\n let polygon = new Polygon(vertices);\r\n let normal = AsVector3(polygon.plane.normal);\r\n if (!isNaN(polygon.plane.w) && !equalv3(normal, new Vector3()))\r\n polygons.push(polygon);\r\n }\r\n\r\n return new CSG(polygons);\r\n}\r\n\r\nexport function CSG2Geometry(csg: CSG): Geometry\r\n{\r\n let geo = new Geometry;\r\n let uvs: Vector2[][] = geo.faceVertexUvs[0];\r\n\r\n for (let poly of csg.polygons)\r\n {\r\n let normal = AsVector3(poly.plane.normal);\r\n if (equalv3(normal, ZeroVec)) continue;\r\n for (let v of poly.vertices)\r\n {\r\n v.tag = geo.vertices.length;\r\n geo.vertices.push(AsVector3(v.pos));\r\n }\r\n\r\n let firstVertex = poly.vertices[0];\r\n\r\n for (let i = poly.vertices.length - 3; i >= 0; i--)\r\n {\r\n let [a, b, c] = [\r\n firstVertex.tag,\r\n poly.vertices[i + 1].tag,\r\n poly.vertices[i + 2].tag\r\n ];\r\n let f = new Face3(a, b, c, normal);\r\n\r\n geo.faces.push(f);\r\n uvs.push([\r\n AsVector2(firstVertex.uv),\r\n AsVector2(poly.vertices[i + 1].uv),\r\n AsVector2(poly.vertices[i + 2].uv)\r\n ]);\r\n }\r\n }\r\n return geo;\r\n}\r\n\r\nexport function Geometry2CSG2(geometry: Geometry | BufferGeometry): Geom3\r\n{\r\n if (geometry instanceof BufferGeometry)\r\n geometry = new Geometry().fromBufferGeometry(geometry);\r\n\r\n let polygons: Poly3[] = [];\r\n for (let i = 0; i < geometry.faces.length; i++)\r\n {\r\n let face = geometry.faces[i];\r\n let vertices: Vec3[] = [];\r\n if (face instanceof Face3)\r\n {\r\n vertices.push(geometry.vertices[face.a].toArray() as Vec3);\r\n vertices.push(geometry.vertices[face.b].toArray() as Vec3);\r\n vertices.push(geometry.vertices[face.c].toArray() as Vec3);\r\n }\r\n polygons.push(create(vertices));\r\n }\r\n return retessellate(geom3.create(polygons)) as Geom3;\r\n}\r\n\r\nexport function CSG2Geometry2(csg: Geom3 | Geom3Res): Geometry\r\n{\r\n let geo = new Geometry;\r\n for (let poly of csg.polygons)\r\n {\r\n let normal: Vector3;//面的法线\r\n //@ts-ignore\r\n if (poly.plane)\r\n //@ts-ignore\r\n normal = new Vector3().fromArray(poly.plane);\r\n\r\n let startIndex = geo.vertices.length;\r\n for (let v of poly.vertices)\r\n geo.vertices.push(new Vector3().fromArray(v));\r\n\r\n if (!normal && poly.vertices.length > startIndex + 2)//如果没有法线,则自己计算\r\n normal = new Plane().setFromCoplanarPoints(geo.vertices[startIndex], geo.vertices[startIndex + 1], geo.vertices[startIndex + 2]).normal;\r\n\r\n for (let i = poly.vertices.length - 3; i >= 0; i--)\r\n {\r\n let f = new Face3(\r\n startIndex,\r\n startIndex + i + 1,\r\n startIndex + i + 2,\r\n normal);\r\n\r\n geo.faces.push(f);\r\n }\r\n }\r\n return geo;\r\n}\r\n\r\nfunction Vector3ToVector3D(v: Vector3): Vector3D\r\n{\r\n return new Vector3D(v.x, v.y, v.z);\r\n}\r\n","/**\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","import geom3, { toPolygons } from \"@jscad/modeling/src/geometries/geom3\";\r\nimport { Poly3 } from \"@jscad/modeling/src/geometries/types\";\r\nimport mat4 from \"@jscad/modeling/src/maths/mat4\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport measureBoundingBox from \"@jscad/modeling/src/measurements/measureBoundingBox\";\r\nimport splitPolygonByPlane from \"@jscad/modeling/src/operations/booleans/trees/splitPolygonByPlane\";\r\nimport retessellate from \"@jscad/modeling/src/operations/modifiers/retessellate\";\r\nimport { transform } from \"@jscad/modeling/src/operations/transforms\";\r\nimport { BufferAttribute, BufferGeometry, Line3, Matrix4, Plane, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board, IModeling } from \"../../DatabaseServices/Entity/Board\";\r\nimport { LinesType } from \"../../DatabaseServices/Entity/BoardInterface\";\r\nimport { GenLocalUv } from \"../../DatabaseServices/Entity/GenLocalUv\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { GetArcDrawCount } from \"../../Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams\";\r\nimport { equaln, equalv2, rotatePoint } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { OffsetPolyline } from \"../../GraphicsSystem/OffsetPolyline\";\r\nimport { FuzzyFactory } from \"../../csg/core/FuzzyFactory\";\r\nimport { CSG2Geometry2, Geometry2CSG2 } from \"../../csg/core/Geometry2CSG\";\r\nimport { FaceDirection } from \"../DrawDrilling/DrillType\";\r\n\r\n\r\nexport class ArcBoardBuild\r\n{\r\n //每段放样长度\r\n private _SweepLengths: number[]; //主Path的长度表\r\n\r\n private _SweepCurves1: (Line | Arc)[];//Path 主Path(见光)\r\n private _SweepCurves2: (Line | Arc)[];//Path 副Path(不见光面)\r\n\r\n private _SweepPath1: Polyline; //主Path (见光)\r\n private _SweepPath2: Polyline; //副Path (不见光)\r\n\r\n //将OCS坐标系 转换为旋转板后的坐标系\r\n _OCS2RotateMtx: Matrix4;//当板上某个点需要变换时, 先将它转换为旋转状态 在转换映射 在使用下面的矩阵变换到OCS\r\n _Rotate2OCSMtx: Matrix4;\r\n\r\n //弃用\r\n // private _SweepParamRanges: [number, number][];//Path 每段的起点参数和终点参数 基于SweepCurves1\r\n\r\n constructor(private _board: Board,\r\n //放样路径\r\n private _SweepPath: Polyline = _board.GetSweepPath(),\r\n //路径基于板旋转\r\n private _SweepAngle: number = _board.SweepAngle,\r\n private _FaceDir = _board.SweepVisibleFace,//(见光面正面时,开槽面为反面) (总是相反)\r\n )\r\n {\r\n this.ParseContourLength();\r\n }\r\n\r\n get SweepPath1() { return this._SweepPath1; }\r\n get SweepPath2() { return this._SweepPath2; }\r\n\r\n ParseContourLength()\r\n {\r\n if (this._SweepAngle !== 0 && !this._Rotate2OCSMtx)\r\n this.ParseRotateMtx();\r\n }\r\n\r\n //针对本算法特殊定制的偏移算法 避免偏移后起点丢失(主要是圆)\r\n static OffsetPolyline(path: Polyline, dist: number): Polyline\r\n {\r\n let offset = new OffsetPolyline(path, dist);\r\n offset._AllowConverToCircle = false;\r\n return offset.Do()[0];\r\n }\r\n\r\n get OCS2RotateMtx(): Matrix4\r\n {\r\n if (!this._OCS2RotateMtx)\r\n this.ParseRotateMtx();\r\n\r\n return this._OCS2RotateMtx;\r\n\r\n\r\n }\r\n get Rotate2OCSMtx(): Matrix4\r\n {\r\n if (!this._OCS2RotateMtx)\r\n this.ParseRotateMtx();\r\n\r\n return this._Rotate2OCSMtx;\r\n }\r\n ParseRotateMtx()\r\n {\r\n if (this._SweepAngle === 0) this._OCS2RotateMtx = new Matrix4;\r\n\r\n let con = this._board.ContourCurve.Clone();\r\n let mtx = new Matrix4().makeRotationZ(-this._SweepAngle);\r\n con.ApplyMatrix(mtx);\r\n let box = con.BoundingBox;\r\n mtx.setPosition(box.min.negate());\r\n\r\n this._OCS2RotateMtx = mtx;\r\n this._Rotate2OCSMtx = new Matrix4().getInverse(mtx);\r\n }\r\n\r\n get SweepCurves1()\r\n {\r\n return this._SweepCurves1;\r\n }\r\n\r\n get SweepCurves2()\r\n {\r\n return this._SweepCurves2;\r\n }\r\n\r\n ParseSweepCurves()\r\n {\r\n let path = ArcBoardBuild.OffsetPolyline(this._SweepPath, -this._board.Thickness);\r\n if (this._FaceDir === FaceDirection.Back)\r\n {\r\n this._SweepPath1 = ArcBoardBuild.OffsetPolyline(path, this._board.Thickness);\r\n this._SweepPath2 = path;\r\n\r\n this._SweepCurves1 = this._SweepPath1.Explode();\r\n this._SweepCurves2 = this._SweepCurves1.map(c =>\r\n {\r\n let offsetC = c.GetOffsetCurves(-this._board.Thickness)[0];\r\n if (!offsetC)\r\n offsetC = new Line(c.StartPoint, c.StartPoint);\r\n return offsetC;\r\n });\r\n }\r\n else\r\n {\r\n this._SweepPath1 = path;\r\n this._SweepPath2 = ArcBoardBuild.OffsetPolyline(this._SweepPath1, this._board.Thickness);\r\n\r\n this._SweepCurves1 = this._SweepPath1.Explode();\r\n this._SweepCurves2 = this._SweepCurves1.map(c =>\r\n {\r\n let offsetC = c.GetOffsetCurves(this._board.Thickness)[0];\r\n if (!offsetC)\r\n offsetC = new Line(c.StartPoint, c.StartPoint);\r\n return offsetC;\r\n });\r\n }\r\n\r\n this._SweepLengths = this._SweepCurves1.map(c => c.Length);\r\n return this;\r\n }\r\n\r\n get SweepLengths()\r\n {\r\n if (!this._SweepLengths)\r\n this.ParseSweepCurves();\r\n return this._SweepLengths;\r\n }\r\n\r\n get SweepLength()\r\n {\r\n let length = 0;\r\n for (let l of this.SweepLengths)\r\n length += l;\r\n return length;\r\n }\r\n\r\n private _SweepEndDists: number[];\r\n get SweepEndDists()\r\n {\r\n if (this._SweepEndDists) return this._SweepEndDists;\r\n this._SweepEndDists = [];\r\n let sumLength = 0;\r\n for (let i = 0; i < this.SweepLengths.length; i++)\r\n {\r\n let length = this.SweepLengths[i];\r\n sumLength += length;\r\n this._SweepEndDists.push(sumLength);\r\n }\r\n\r\n return this._SweepEndDists;\r\n }\r\n\r\n // //稳健折弯\r\n // private ParseSweepLengths2()\r\n // {\r\n // let sweepCurves = this.SweepCurves;\r\n // let sweepCurves2 = this.SweepCurves2;\r\n // let lengths: number[] = [];\r\n // this._SweepParamRanges = [];\r\n\r\n // for (let i = 0; i < sweepCurves.length; i++)\r\n // {\r\n // let c1 = sweepCurves[i];\r\n // let c2 = sweepCurves2[i];\r\n\r\n // if (c1 instanceof Line)\r\n // {\r\n // let param = new GetLineParam(c1);\r\n\r\n // //我们这里得到了折弯处的参数 或许可以有用?\r\n // let sp = param.GetParamAtPoint(c2.StartPoint);\r\n // let ep = param.GetParamAtPoint(c2.EndPoint);\r\n\r\n // this._SweepParamRanges.push([sp, ep]);\r\n\r\n // sp = Math.min(sp, 0);\r\n // ep = Math.max(ep, 1);\r\n\r\n // lengths.push(param.Length * (ep - sp));\r\n // }\r\n // else\r\n // {\r\n // let sa = c1.GetAngleAtPoint(c2.StartPoint);\r\n // let ea = c1.GetAngleAtPoint(c2.EndPoint);\r\n\r\n // let sp = c1.GetParamAtAngle(sa);\r\n // let ep = c1.GetParamAtAngle(ea);\r\n\r\n // this._SweepParamRanges.push([sp, ep]);\r\n\r\n // sp = Math.min(sp, 0);\r\n // ep = Math.max(ep, 1);\r\n\r\n // //背面为c1 正面为c2\r\n // lengths.push((this._FaceDir === FaceDirection.Front ? c2.Length : c1.Length) * (ep - sp));\r\n // }\r\n // }\r\n\r\n // this._SweepLengths = lengths;\r\n // }\r\n\r\n //用于缓存X位置->映射点和方向\r\n _CacheFuzzXFactory = new FuzzyFactory(1, 1e-3);//唯一映射x\r\n _Cache_X_PosDirMap: Map<number, [Vector3, Vector3]> = new Map;\r\n //拐角Fuzz\r\n _CornerFuzzFactory: FuzzyFactory;//唯一拐角x\r\n _CornerSet: Set<number>;//所有的拐角X\r\n /** 临时板 计算平板的CSG */\r\n _csgBoard: Board;\r\n /** 切割的位置 */\r\n private _splitXList: number[];\r\n\r\n get CSGBoard()\r\n {\r\n if (!this._csgBoard)\r\n this.ParseCSGBoard();\r\n return this._csgBoard;\r\n }\r\n\r\n get SplitXList()\r\n {\r\n if (!this._splitXList)\r\n this.ParseSplitXlist();\r\n return this._splitXList;\r\n }\r\n\r\n /** 解析切割的位置 */\r\n private ParseSplitXlist()\r\n {\r\n //每段线段的结束距离\r\n let dists: number[] = [];\r\n let split_xs: number[] = [];//分割位置\r\n\r\n //解析每段长度 解析分割位置\r\n let sumLength = 0;\r\n for (let i = 0; i < this.SweepLengths.length; i++)\r\n {\r\n let length = this.SweepLengths[i];\r\n if (this._SweepCurves1[i] instanceof Arc)//在圆弧时分段切割\r\n {\r\n let splitCount = GetArcDrawCount(this._SweepCurves1[i] as Arc);\r\n let divDist = length / splitCount;\r\n for (let j = 1; j < splitCount; j++)\r\n split_xs.push(sumLength + (divDist * j));\r\n }\r\n\r\n sumLength += length;\r\n dists.push(sumLength);\r\n split_xs.push(sumLength);\r\n }\r\n split_xs.pop();//最后一段不在切割\r\n\r\n this._SweepEndDists = dists;\r\n this._splitXList = split_xs;\r\n }\r\n\r\n /** 解析临时板 */\r\n private ParseCSGBoard()\r\n {\r\n //特性坍塌 我们记录所有转角处的x位置 以便我们遇到这个位置的坐标时,求正确的dir.\r\n this.ParseCorner();\r\n\r\n //拿CSG过来分割\r\n // let br = new Board;\r\n // br.Thickness = this._board.Thickness;\r\n // br.ContourCurve = this._board.ContourCurve;\r\n let br = this._board.Clone();\r\n br.Name = \"临时板\";\r\n br.SetSweepPath(undefined, 0);\r\n\r\n let arcBoardOptions = this._board.ArcBoardOptions;\r\n\r\n //构建转角处的槽\r\n let mmm: IModeling[] = [];\r\n for (let i = 0; i < this.SweepEndDists.length - 1; i++)\r\n {\r\n const arcBoardOption = arcBoardOptions.get(-1);\r\n\r\n let c1 = this._SweepCurves1[i];\r\n let c2 = this._SweepCurves1[i + 1];\r\n\r\n let co1 = this._SweepCurves2[i];\r\n let co2 = this._SweepCurves2[i + 1];\r\n\r\n //避免多余槽\r\n if (co1.Length < 0.1 || co2.Length < 0.1 || equalv2(co1.EndPoint, co2.StartPoint, 0.1)) continue;\r\n\r\n let p = co1.IntersectWith(co2, IntersectOption.ExtendNone, 0.1);\r\n if (p.length === 1)\r\n {\r\n let cp1 = c1.GetClosestPointTo(p[0], false);\r\n let cp2 = c2.GetClosestPointTo(p[0], false);\r\n\r\n let dist1 = c1.GetDistAtPoint(cp1);\r\n let dist2 = c2.GetDistAtPoint(cp2);\r\n\r\n dist1 = this.SweepLengths[i] - dist1;\r\n\r\n if (dist1 + dist2 < 0.1) continue;\r\n\r\n let d = this.SweepEndDists[i];\r\n\r\n let zValue = arcBoardOption.retainedThickness;\r\n let thickness = br.Thickness - zValue;\r\n if (this._FaceDir === FaceDirection.Front)\r\n zValue = 0;\r\n\r\n let pl = new Polyline().Rectangle(dist1 + dist2, 10000).Move(new Vector3(d - dist1, -100, 0));\r\n\r\n if (this._SweepAngle !== 0)\r\n pl.ApplyMatrix(this.Rotate2OCSMtx);\r\n\r\n let data: IModeling = {\r\n shape: new Shape(Contour.CreateContour(pl)),\r\n thickness: thickness,\r\n dir: 1 - this._FaceDir,//见光面和开槽面相反 这里翻转它\r\n knifeRadius: 3,\r\n addLen: 0,\r\n };\r\n mmm.push(data);\r\n }\r\n else if (p.length === 0)\r\n {\r\n let d = this.SweepEndDists[i];\r\n let zValue = arcBoardOption.retainedThickness;\r\n let thickness = br.Thickness - zValue;\r\n let pl = new Polyline().Rectangle(1, 10000).Move(new Vector3(d - 0.5, -100, 0));\r\n if (this._SweepAngle !== 0)\r\n pl.ApplyMatrix(this.Rotate2OCSMtx);\r\n\r\n let data: IModeling = {\r\n shape: new Shape(Contour.CreateContour(pl)),\r\n thickness: thickness,\r\n dir: 1 - this._FaceDir,//见光面和开槽面相反 这里翻转它\r\n knifeRadius: 3,\r\n addLen: 0,\r\n };\r\n mmm.push(data);\r\n }\r\n }\r\n // mmm = [];\r\n\r\n br.BoardModeling = this._board.BoardModeling.concat(mmm);\r\n // br.Modeling2D = this._board.Modeling2D;\r\n // br.Modeling3D = this._board.Modeling3D;\r\n\r\n //TestDraw(br.Clone());\r\n this._csgBoard = br;\r\n }\r\n /** 生成圆弧板的Geometry */\r\n BuildMeshEdgeGeom(): [BufferGeometry, BufferGeometry]\r\n {\r\n let br = this.CSGBoard;\r\n let csg = this.CSGBoard.CSG;\r\n //旋转 r+m 逆矩阵(m+r) 将板轮廓旋转后 移动到WCS0(包围盒)\r\n let min: Vec3, max: Vec3;\r\n if (this._SweepAngle !== 0)\r\n {\r\n //根据csg旋转\r\n let roMtx = mat4.create();\r\n mat4.rotateZ(roMtx, roMtx, -this._SweepAngle);\r\n csg = transform(roMtx, csg);\r\n [min, max] = measureBoundingBox(csg);\r\n let moveMtx = mat4.create();\r\n mat4.translate(moveMtx, moveMtx, min.map(v => -v) as Vec3);\r\n csg = transform(moveMtx, csg);\r\n if (max[0] > this.SweepLength)\r\n console.log(\"出错\");\r\n\r\n // let geom = CSG2Geometry2(geom3.create(toPolygons(csg)));\r\n // geom.computeVertexNormals();\r\n // TestDraw(new Mesh(geom, new MeshNormalMaterial));\r\n\r\n this._OCS2RotateMtx = new Matrix4().makeRotationZ(-this._SweepAngle).setPosition(-min[0], -min[1], -min[2]);//rotate + move\r\n this._Rotate2OCSMtx = new Matrix4().makeRotationZ(this._SweepAngle).multiply(new Matrix4().setPosition(min[0], min[1], min[2]));//move + rotate\r\n }\r\n\r\n let remPolys: Poly3[] = toPolygons(csg);\r\n let plane: [number, number, number, number] = [1, 0, 0, 0];\r\n let splitedPolys: Poly3[] = [];\r\n for (let x of this.SplitXList)\r\n {\r\n plane[3] = x;\r\n\r\n let leftPolys: Poly3[] = [];\r\n let rightPolys: Poly3[] = [];\r\n\r\n for (let poly of remPolys)\r\n {\r\n // Returns object:\r\n // .type:\r\n // 0: coplanar-front\r\n // 1: coplanar-back\r\n // 2: front\r\n // 3: back\r\n // 4: spanning\r\n // In case the polygon is spanning, returns:\r\n // .front: a Polygon3 of the front part\r\n // .back: a Polygon3 of the back part\r\n if (!poly) // 先临时处理为null的情况以免Error\r\n continue;\r\n let res = splitPolygonByPlane(plane, poly);\r\n if (res.type === 0)\r\n leftPolys.push(poly);\r\n else if (res.type === 1)\r\n leftPolys.push(poly);\r\n else if (res.type === 2)\r\n rightPolys.push(poly);\r\n else if (res.type === 3)\r\n leftPolys.push(poly);\r\n else if (res.type === 4)\r\n {\r\n if (res.back)\r\n leftPolys.push(res.back);\r\n if (res.front)\r\n rightPolys.push(res.front);\r\n }\r\n }\r\n\r\n splitedPolys.push(...toPolygons(retessellate(geom3.create(leftPolys))));\r\n remPolys = rightPolys;\r\n }\r\n\r\n splitedPolys.push(...toPolygons(retessellate(geom3.create(remPolys))));\r\n //分割结束\r\n\r\n //生成UV\r\n let geom = CSG2Geometry2(geom3.create(splitedPolys));\r\n const bufferGeometry = new BufferGeometry().fromGeometry(geom);\r\n //旋转板先变换到原始状态计算uv\r\n if (this._SweepAngle !== 0)\r\n bufferGeometry.applyMatrix4(this._Rotate2OCSMtx);\r\n const gen = new GenLocalUv();\r\n gen.CalculateUv(bufferGeometry, this._board.BoardProcessOption.lines === LinesType.Reverse);\r\n\r\n //变换回来映射\r\n if (this._SweepAngle !== 0)\r\n bufferGeometry.applyMatrix4(this._OCS2RotateMtx);\r\n\r\n //收集所有的x\r\n let pos = bufferGeometry.getAttribute(\"position\") as BufferAttribute;\r\n let xs: number[] = [];\r\n for (let y = 0; y < pos.count; y++)\r\n xs.push(pos.array[y * 3]);\r\n\r\n arraySortByNumber(xs);\r\n arrayRemoveDuplicateBySort(xs, equaln);\r\n\r\n //映射所有的x\r\n this.ParseAllX_Map(xs);\r\n\r\n //变换所有的点\r\n let tempP = new Vector3;\r\n for (let i = 0; i < pos.count; i++)\r\n {\r\n tempP.fromArray(pos.array, i * 3);\r\n this.PosMap2ArcPos(tempP);\r\n pos.setXYZ(i, tempP.x, tempP.y, tempP.z);\r\n }\r\n\r\n //#region 构建线框\r\n let edgeGeom = br.EdgeGeometry;\r\n pos = edgeGeom.getAttribute(\"position\") as BufferAttribute;\r\n\r\n let plane2 = new Plane(new Vector3(-1, 0, 0), 0);\r\n let remLiens: Line3[] = [];\r\n\r\n for (let y = 0; y < pos.count; y += 2)\r\n {\r\n let p1 = new Vector3().fromArray(pos.array, y * 3);\r\n let p2 = new Vector3().fromArray(pos.array, (y + 1) * 3);\r\n if (this._OCS2RotateMtx)\r\n {\r\n p1.applyMatrix4(this._OCS2RotateMtx);\r\n p2.applyMatrix4(this._OCS2RotateMtx);\r\n }\r\n let line3 = new Line3(p1, p2);\r\n remLiens.push(line3);\r\n }\r\n\r\n //所有的线被切割分组\r\n let lines: Line3[] = [];\r\n for (let x of this.SplitXList)\r\n {\r\n plane2.constant = x;\r\n let rightLines: Line3[] = [];\r\n\r\n for (let line of remLiens)\r\n {\r\n let ip = plane2.intersectLine(line, tempP);\r\n if (ip)\r\n {\r\n if (line.start.x < line.end.x)\r\n {\r\n lines.push(new Line3(line.start, ip.clone()));\r\n rightLines.push(new Line3(ip.clone(), line.end));\r\n }\r\n else\r\n {\r\n lines.push(new Line3(ip.clone(), line.end));\r\n rightLines.push(new Line3(line.start, ip.clone()));\r\n }\r\n }\r\n else if (line.start.x > x)\r\n rightLines.push(line);\r\n else\r\n lines.push(line);\r\n }\r\n remLiens = rightLines;\r\n }\r\n lines = lines.concat(remLiens);\r\n\r\n //转换为点表\r\n let pts: Vector3[] = [];\r\n for (let l of lines)\r\n pts.push(l.start, l.end);\r\n\r\n xs = pts.map(p => p.x);\r\n arraySortByNumber(xs);\r\n arrayRemoveDuplicateBySort(xs, equaln);\r\n\r\n this.ParseAllX_Map(xs);\r\n\r\n //变换所有的点\r\n for (let p of pts)\r\n this.PosMap2ArcPos(p);\r\n\r\n edgeGeom = BufferGeometryUtils.CreateFromPts(pts);\r\n //#endregion 结束线框构建\r\n\r\n // TestDraw(new Mesh(bufferGeometry.clone(), new MeshNormalMaterial));\r\n\r\n if (this._SweepAngle !== 0)//将板从旋转状态转回原始状态\r\n {\r\n edgeGeom.applyMatrix4(this._Rotate2OCSMtx);\r\n bufferGeometry.applyMatrix4(this._Rotate2OCSMtx);\r\n }\r\n\r\n bufferGeometry.computeBoundingBox();\r\n bufferGeometry.computeVertexNormals();\r\n\r\n // TestDraw(new Mesh(bufferGeometry, new MeshNormalMaterial));\r\n return [bufferGeometry, edgeGeom];\r\n }\r\n\r\n /** 生成大孔面 */\r\n BuildBigHoleFace()\r\n {\r\n //每段线段的结束距离\r\n let dists: number[] = [];\r\n let split_xs: number[] = [];//分割位置\r\n\r\n //解析每段长度 解析分割位置\r\n let sumLength = 0;\r\n for (let i = 0; i < this.SweepLengths.length; i++)\r\n {\r\n let length = this.SweepLengths[i];\r\n if (this._SweepCurves1[i] instanceof Arc)//在圆弧时分段切割\r\n {\r\n let splitCount = GetArcDrawCount(this._SweepCurves1[i] as Arc);\r\n let divDist = length / splitCount;\r\n for (let j = 1; j < splitCount; j++)\r\n split_xs.push(sumLength + (divDist * j));\r\n }\r\n\r\n sumLength += length;\r\n dists.push(sumLength);\r\n split_xs.push(sumLength);\r\n }\r\n split_xs.pop();//最后一段不在切割\r\n\r\n //拿CSG过来分割\r\n let br = new Board;\r\n br.Thickness = this._board.Thickness;\r\n br.ContourCurve = this._board.ContourCurve;\r\n br.BoardProcessOption[EBoardKeyList.BigHole] = this._board.BoardProcessOption[EBoardKeyList.BigHole];\r\n let csg = Geometry2CSG2(br.BigHoleFaceGeo);\r\n\r\n //旋转 r+m 逆矩阵(m+r) 将板轮廓旋转后 移动到WCS0(包围盒)\r\n let min: Vec3, max: Vec3;\r\n let Rotate2OCSMtx = new Matrix4();\r\n if (this._SweepAngle !== 0)\r\n {\r\n //根据csg旋转\r\n let roMtx = mat4.create();\r\n mat4.rotateZ(roMtx, roMtx, -this._SweepAngle);\r\n csg = transform(roMtx, csg);\r\n [min, max] = measureBoundingBox(csg);\r\n let moveMtx = mat4.create();\r\n mat4.translate(moveMtx, moveMtx, [-min[0], -min[1], 0]);\r\n csg = transform(moveMtx, csg);\r\n if (max[0] > this.SweepLength)\r\n console.log(\"出错\");\r\n\r\n Rotate2OCSMtx = new Matrix4().makeRotationZ(this._SweepAngle).multiply(new Matrix4().setPosition(min[0], min[1], 0));//move + rotate\r\n }\r\n\r\n let remPolys: Poly3[] = toPolygons(csg);\r\n let plane: [number, number, number, number] = [1, 0, 0, 0];\r\n let splitedPolys: Poly3[] = [];\r\n for (let x of split_xs)\r\n {\r\n plane[3] = x;\r\n\r\n let leftPolys: Poly3[] = [];\r\n let rightPolys: Poly3[] = [];\r\n\r\n for (let poly of remPolys)\r\n {\r\n if (!poly) // 先临时处理为null的情况以免Error\r\n continue;\r\n let res = splitPolygonByPlane(plane, poly);\r\n if (res.type === 0)\r\n leftPolys.push(poly);\r\n else if (res.type === 1)\r\n leftPolys.push(poly);\r\n else if (res.type === 2)\r\n rightPolys.push(poly);\r\n else if (res.type === 3)\r\n leftPolys.push(poly);\r\n else if (res.type === 4)\r\n {\r\n leftPolys.push(res.back);\r\n rightPolys.push(res.front);\r\n }\r\n }\r\n splitedPolys.push(...toPolygons(retessellate(geom3.create(leftPolys))));\r\n remPolys = rightPolys;\r\n }\r\n splitedPolys.push(...toPolygons(retessellate(geom3.create(remPolys))));\r\n //分割结束\r\n\r\n //生成UV\r\n let geom = CSG2Geometry2(geom3.create(splitedPolys));\r\n const bufferGeometry = new BufferGeometry().fromGeometry(geom);\r\n\r\n //收集所有的x\r\n let pos = bufferGeometry.getAttribute(\"position\") as BufferAttribute;\r\n let xs: number[] = [];\r\n for (let y = 0; y < pos.count; y++)\r\n xs.push(pos.array[y * 3]);\r\n\r\n arraySortByNumber(xs);\r\n arrayRemoveDuplicateBySort(xs, equaln);\r\n\r\n //映射所有的x\r\n // 为了不影响this._CacheFuzzXFactory和this._Cache_X_PosDirMap这里重新定义(否则可能导致错误,但目前没测到)\r\n const [cacheFuzzXFactory, cache_X_PosDirMap] = this.ParseAllX_Map_BigHole(xs);\r\n\r\n //变换所有的点\r\n let tempP = new Vector3;\r\n for (let i = 0; i < pos.count; i++)\r\n {\r\n tempP.fromArray(pos.array, i * 3);\r\n this.PosMap2ArcPos(tempP, cacheFuzzXFactory, cache_X_PosDirMap);\r\n pos.setXYZ(i, tempP.x, tempP.y, tempP.z);\r\n }\r\n\r\n if (this._SweepAngle !== 0)//将板从旋转状态转回原始状态\r\n {\r\n bufferGeometry.applyMatrix4(Rotate2OCSMtx);\r\n }\r\n\r\n return bufferGeometry;\r\n }\r\n\r\n //\r\n private ParseCorner()\r\n {\r\n this._CornerSet = new Set<number>();\r\n this._CornerFuzzFactory = new FuzzyFactory(3, 1e-3);\r\n for (let d of this.SweepEndDists)\r\n {\r\n d = this._CornerFuzzFactory.lookupOrCreate([d], d);\r\n this._CornerSet.add(d);\r\n }\r\n }\r\n\r\n ParseAllX_Map(xs: number[])\r\n {\r\n if (!this._CornerSet) this.ParseCorner();\r\n\r\n let dists = this.SweepEndDists;\r\n let fuzzX = this._CacheFuzzXFactory;\r\n let curveIndex = 0;\r\n let curSum = dists[0];\r\n let preSum = 0;\r\n let rotateAngle = this._FaceDir === FaceDirection.Back ? Math.PI / 2 : -Math.PI / 2;\r\n for (let x of xs)\r\n {\r\n while (x > curSum && curveIndex < dists.length - 1)\r\n {\r\n curveIndex++;\r\n preSum = curSum;\r\n curSum = dists[curveIndex];\r\n }\r\n\r\n let c = this._SweepCurves1[curveIndex];\r\n let param = ((x - preSum) / this._SweepLengths[curveIndex]);\r\n\r\n let onlyX = fuzzX.lookupOrCreate([x], x);\r\n let derv = c.GetFirstDeriv(param);\r\n // if (c instanceof Line)\r\n // derv.divideScalar(this._SweepLengths[curveIndex]);\r\n // else\r\n // derv.divideScalar(c.Radius);\r\n derv.normalize();\r\n rotatePoint(derv, rotateAngle);\r\n\r\n let onlyD = this._CornerFuzzFactory.lookupOrCreate([x], x);\r\n if (this._CornerSet.has(onlyD))//坍塌\r\n {\r\n // console.log(\"坍塌\");\r\n let p2 = this._SweepPath2.GetPointAtParam(curveIndex + Math.round(param));\r\n derv = p2.sub(c.GetPointAtParam(param)).divideScalar(this._board.Thickness);\r\n }\r\n\r\n this._Cache_X_PosDirMap.set(onlyX, [c.GetPointAtParam(param), derv]);\r\n }\r\n }\r\n\r\n ParseAllX_Map_BigHole(xs: number[])\r\n {\r\n const cacheFuzzXFactory = new FuzzyFactory(1, 1e-3);\r\n const cache_X_PosDirMap: Map<number, [Vector3, Vector3]> = new Map;\r\n let dists = this.SweepEndDists;\r\n let curveIndex = 0;\r\n let curSum = dists[0];\r\n let preSum = 0;\r\n let rotateAngle = this._FaceDir === FaceDirection.Back ? Math.PI / 2 : -Math.PI / 2;\r\n for (let x of xs)\r\n {\r\n while (x > curSum && curveIndex < dists.length - 1)\r\n {\r\n curveIndex++;\r\n preSum = curSum;\r\n curSum = dists[curveIndex];\r\n }\r\n\r\n let c = this._SweepCurves1[curveIndex];\r\n let param = ((x - preSum) / this._SweepLengths[curveIndex]);\r\n\r\n let onlyX = cacheFuzzXFactory.lookupOrCreate([x], x);\r\n let derv = c.GetFirstDeriv(param);\r\n\r\n derv.normalize();\r\n rotatePoint(derv, rotateAngle);\r\n\r\n let onlyD = this._CornerFuzzFactory.lookupOrCreate([x], x);\r\n if (this._CornerSet.has(onlyD))//坍塌\r\n {\r\n let p2 = this._SweepPath2.GetPointAtParam(curveIndex + Math.round(param));\r\n derv = p2.sub(c.GetPointAtParam(param)).divideScalar(this._board.Thickness);\r\n }\r\n\r\n cache_X_PosDirMap.set(onlyX, [c.GetPointAtParam(param), derv]);\r\n }\r\n return [cacheFuzzXFactory, cache_X_PosDirMap] as [FuzzyFactory, Map<number, [Vector3, Vector3]>];\r\n }\r\n\r\n PosMap2ArcPos(p: Vector3, cacheFuzzXFactory = this._CacheFuzzXFactory, cache_X_PosDirMap = this._Cache_X_PosDirMap)\r\n {\r\n let [x, y, z] = p.toArray();\r\n let onlyX = cacheFuzzXFactory.lookupOrCreate([x], x);\r\n let arr = cache_X_PosDirMap.get(onlyX);\r\n if (!arr)\r\n {\r\n console.error(\"未知情况?\");\r\n return;\r\n }\r\n let [pox, v] = arr;\r\n\r\n if (this._FaceDir === FaceDirection.Front)\r\n z = this._board.Thickness - z;\r\n\r\n p.copy(v).multiplyScalar(z).add(pox);\r\n [p.y, p.z] = [y, p.y];\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board, IModeling } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { equalv2 } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { FaceDirection } from \"../DrawDrilling/DrillType\";\r\nimport { ArcBoardBuild } from \"./ArcBoardBuild\";\r\n\r\nexport interface ArcBoardOptions\r\n{\r\n arcLength: number;\r\n grooveSpacing: number;\r\n grooveWidth: number;\r\n retainedThickness: number;\r\n knifeRadius: number;\r\n grooveAddLength: number;\r\n grooveAddWidth: number;\r\n grooveAddDepth: number;\r\n arcExtension: number;\r\n};\r\n\r\n//圆弧默认的槽配置\r\nexport const defultArcBoardOption: ArcBoardOptions = {\r\n arcLength: 0,\r\n grooveSpacing: 6,\r\n grooveWidth: 6,\r\n retainedThickness: 2,\r\n knifeRadius: 3,\r\n grooveAddLength: 0,\r\n grooveAddWidth: 0,\r\n grooveAddDepth: 0,\r\n arcExtension: 0,\r\n};\r\n\r\n\r\n/**\r\n * 解析圆弧板需要的走刀数据\r\n * @param br\r\n * @param path 圆弧放样路径\r\n * @param angle 角度\r\n * @param dir 圆弧板见光面 见光面正面走刀颜色黄色,背面颜色红色\r\n * @param [onlyVert=false] 仅解析交点位置 (默认解析所有的槽)\r\n * @returns 返回需要增加的槽的数据\r\n */\r\nexport function ParseBoardArcFeed(br: Board, path: Polyline, angle: number, dir: FaceDirection, arcBoardOptions: Map<number, ArcBoardOptions>, onlyVert = false): IModeling[]\r\n{\r\n const arcBoardBuild = new ArcBoardBuild(br);\r\n arcBoardBuild.ParseSweepCurves();\r\n //每段线段的起始位置\r\n const dists: number[] = [];\r\n\r\n //解析每段长度\r\n let sumLength = 0;\r\n dists.push(sumLength);\r\n let SweepLengths = arcBoardBuild.SweepLengths;\r\n for (let i = 0; i < SweepLengths.length; i++)\r\n {\r\n let length = SweepLengths[i];\r\n sumLength += length;\r\n dists.push(sumLength);\r\n }\r\n\r\n const board = new Board();\r\n board.Thickness = br.Thickness;\r\n board.ContourCurve = br.ContourCurve;\r\n\r\n //获取板形状\r\n const c1 = br.Shape;\r\n if (angle !== 0)\r\n c1.ApplyMatrix(arcBoardBuild.OCS2RotateMtx);\r\n\r\n //记录每个转角槽信息\r\n const grooveInfo = new Map<number, { l: number, r: number; }>();\r\n for (let i = 0; i < dists.length - 2; i++)\r\n {\r\n const arcBoardOption = arcBoardOptions.get(-1);\r\n\r\n let c1 = arcBoardBuild.SweepCurves1[i];\r\n let c2 = arcBoardBuild.SweepCurves1[i + 1];\r\n\r\n let co1 = arcBoardBuild.SweepCurves2[i];\r\n let co2 = arcBoardBuild.SweepCurves2[i + 1];\r\n\r\n //避免多余槽\r\n if (equalv2(co1.EndPoint, co2.StartPoint, 0.1)) continue;\r\n\r\n let p = co1.IntersectWith(co2, IntersectOption.ExtendNone, 0.1);\r\n if (p.length === 1)\r\n {\r\n let cp1 = c1.GetClosestPointTo(p[0], false);\r\n let cp2 = c2.GetClosestPointTo(p[0], false);\r\n\r\n let dist1 = c1.GetDistAtPoint(cp1);\r\n let dist2 = c2.GetDistAtPoint(cp2);\r\n\r\n dist1 = arcBoardBuild.SweepLengths[i] - dist1;\r\n\r\n if (dist1 + dist2 < 0.1) continue;\r\n grooveInfo.set(i, { l: dist1, r: dist2 });\r\n }\r\n else if (p.length === 0)\r\n {\r\n grooveInfo.set(i, { l: arcBoardOption.grooveWidth / 2, r: arcBoardOption.grooveWidth / 2 });\r\n }\r\n }\r\n\r\n const appendModel = (grooveWidth: number, x: number, arcBoardOption: ArcBoardOptions) =>\r\n {\r\n const pl = new Polyline().Rectangle(grooveWidth, 10000).Move(new Vector3(x, 0, 0));\r\n const c2 = new Shape(Contour.CreateContour(pl));\r\n for (const contour of c1.IntersectionBoolOperation(c2))\r\n {\r\n if (angle !== 0)\r\n contour.Outline.Curve.ApplyMatrix(arcBoardBuild.Rotate2OCSMtx);\r\n\r\n mmm.push({\r\n shape: contour,\r\n thickness: br.Thickness - arcBoardOption.retainedThickness,\r\n dir: dir === 0 ? FaceDirection.Back : FaceDirection.Front,\r\n knifeRadius: arcBoardOption.knifeRadius,\r\n addLen: arcBoardOption.grooveAddLength,\r\n addWidth: arcBoardOption.grooveAddWidth,\r\n addDepth: arcBoardOption.grooveAddDepth,\r\n });\r\n }\r\n };\r\n\r\n //构建槽\r\n const mmm: IModeling[] = [];\r\n for (let i = 0; i < dists.length - 1; i++)\r\n {\r\n const cu = arcBoardBuild.SweepCurves1[i];\r\n const startGroove = grooveInfo.get(i - 1);\r\n if (startGroove)\r\n {\r\n const arcBoardOption = arcBoardOptions.get(-1);\r\n const grooveWidth = startGroove.l + startGroove.r;\r\n const x = dists[i] - startGroove.l;\r\n appendModel(grooveWidth, x, arcBoardOption);\r\n }\r\n\r\n if (!onlyVert && (cu instanceof Arc))\r\n {\r\n const arcBoardOption = arcBoardOptions.get(i);\r\n const { grooveWidth, grooveSpacing, arcExtension } = arcBoardOption;\r\n\r\n const firstGrooveLength = grooveInfo.get(i - 1)?.r ?? 0;\r\n const lastGrooveLength = grooveInfo.get(i)?.l ?? 0;\r\n\r\n //挖槽的规律是先挖最左右两个槽,再根据最大槽间距、槽宽和剩余长度计算出比例挖槽\r\n let remainLength = cu.Length - firstGrooveLength - lastGrooveLength; //剩余长度\r\n if (remainLength > 0)\r\n {\r\n //更新起始距离\r\n let startDist = dists[i];\r\n if (!firstGrooveLength)\r\n {\r\n const cu1 = arcBoardBuild.SweepCurves1[i - 1];\r\n //判断是否满足头部延伸\r\n if (arcExtension && cu1 && cu1 instanceof Line)\r\n {\r\n remainLength += arcExtension - grooveWidth;\r\n startDist -= arcExtension;\r\n const x = dists[i] - arcExtension;\r\n appendModel(grooveWidth, x, arcBoardOption);\r\n }\r\n else\r\n {\r\n remainLength -= grooveWidth;\r\n const x = dists[i];\r\n appendModel(grooveWidth, x, arcBoardOption);\r\n }\r\n }\r\n\r\n if (!lastGrooveLength)\r\n {\r\n const cu1 = arcBoardBuild.SweepCurves1[i + 1];\r\n //判断是否满足尾部延伸\r\n if (arcExtension && cu1 && cu1 instanceof Line)\r\n {\r\n remainLength += arcExtension - grooveWidth;\r\n const x = dists[i + 1] - grooveWidth + arcExtension;\r\n appendModel(grooveWidth, x, arcBoardOption);\r\n }\r\n else\r\n {\r\n remainLength -= grooveWidth;\r\n const x = dists[i + 1] - grooveWidth;\r\n appendModel(grooveWidth, x, arcBoardOption);\r\n }\r\n }\r\n\r\n const pericycleWidth = grooveSpacing + grooveWidth; //周期宽度\r\n const length = remainLength + grooveWidth;\r\n const count = Math.ceil(length / pericycleWidth);\r\n const newSpacing = (length / count) - grooveWidth;\r\n const newPericycleWidth = newSpacing + grooveWidth;\r\n\r\n for (let j = 0; j < count - 1; j++)\r\n {\r\n const x = startDist + j * newPericycleWidth + (firstGrooveLength ? firstGrooveLength : grooveWidth) + newSpacing;\r\n appendModel(grooveWidth, x, arcBoardOption);\r\n }\r\n }\r\n }\r\n }\r\n return mmm;\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { equalv3 } from \"../../Geometry/GeUtils\";\r\n\r\n\r\nexport function BoxLine(box: Box3): Line[]\r\n{\r\n if (box.isEmpty())\r\n return [];\r\n let pts = [\r\n new Vector3(box.min.x, box.min.y, box.min.z),\r\n new Vector3(box.min.x, box.min.y, box.max.z),\r\n new Vector3(box.min.x, box.max.y, box.min.z),\r\n new Vector3(box.min.x, box.max.y, box.max.z),\r\n\r\n new Vector3(box.max.x, box.min.y, box.min.z),\r\n new Vector3(box.max.x, box.min.y, box.max.z),\r\n new Vector3(box.max.x, box.max.y, box.min.z),\r\n new Vector3(box.max.x, box.max.y, box.max.z),\r\n ];\r\n\r\n let lines: Line[] = [];\r\n for (let line of [\r\n [0, 1], [2, 3], [0, 2], [1, 3],\r\n [4, 5], [6, 7], [4, 6], [5, 7],\r\n\r\n [0, 4], [2, 6],\r\n\r\n [1, 5], [3, 7],\r\n ])\r\n {\r\n let p1 = pts[line[0]];\r\n let p2 = pts[line[1]];\r\n if (!equalv3(p1, p2))\r\n lines.push(new Line(p1, p2));\r\n }\r\n return lines;\r\n}\r\n","import { Box3, Matrix4, Vector2, Vector3 } from \"three\";\r\nimport { ComputerCurvesNormalOCS } from \"../../Common/CurveUtils\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Entity } from \"../../DatabaseServices/Entity/Entity\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline, PolylineProps } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { GetArcDrawCount } from \"../../Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams\";\r\nimport { AsVector2, AsVector3, equaln, equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { ArcBoardBuild } from \"../ArcBoard/ArcBoardBuild\";\r\nimport { FaceDirection } from \"../DrawDrilling/DrillType\";\r\nimport { BoxLine } from \"../testEntity/BoxLine\";\r\nimport { SplitPolyline } from \"./SplitPolyline\";\r\n\r\n/** 针对圆弧板的线性切割 */\r\nexport class LinearCuttingForSweep\r\n{\r\n /** 点集生成二维刀 */\r\n static CreateSplitPl(pts: Vector3[])\r\n {\r\n /** 刀(线段簇) */\r\n const splitLines: Line[] = CurveManager.PtsToLines(pts);\r\n /** 刀(多段线) */\r\n const splitPl = CurveManager.LinesToPl(splitLines);\r\n return splitPl;\r\n };\r\n\r\n /** 生成圆弧板的切割器*/\r\n constructor(public br: Board, public splitPl: Polyline)\r\n {\r\n this.br = br;\r\n this.splitPl = splitPl.Clone();\r\n }\r\n\r\n /**\r\n * 进行切割\r\n * @param {Polyline[]} clipPls 用于切割的刀\r\n * @returns {[Polyline[], Polyline[], {x:number; y:number}[]]} [切割后轮廓, 切割后路径, 切割后轮廓的偏移值]\r\n * @第一步 判断当前切割的视图类型\r\n * @第二步 根据视图类型判断切割的是路径还是面\r\n * @第三步 把被切割对象(路径与板包围盒)平移到对应视图的平面\r\n * @第四步 旋转被切割对象到XOY平面\r\n * @第五步 在XOY平面下进行切割\r\n */\r\n Split(ucs: Matrix4, clipPls?: Polyline[]): [Polyline[], Polyline[], { x: number; y: number; }[]]\r\n {\r\n /** 当前切割的视图类型 */\r\n const viewStr = this.GetViewStr(ucs);\r\n if (viewStr === ViewType.Normal && clipPls && clipPls.length > 0)\r\n {\r\n // 暂时采用旧的切割方案\r\n return this.SplitBySweep(this.br, clipPls);\r\n }\r\n const isPathOrPlane = this.IsPathOrPlane(viewStr);\r\n if (isPathOrPlane === \"路径\")\r\n {\r\n // 平移\r\n const sweepPathInWCS = this.MovePathToView(viewStr);\r\n // 切割\r\n return this.SplitInPath(sweepPathInWCS);\r\n }\r\n if (isPathOrPlane === \"面\")\r\n {\r\n // 统一\r\n const brBox = this.UnifyBrBoxAndPathBox();\r\n // 平移\r\n const sweepPathInWCS = this.MovePathToView(viewStr);\r\n const brBoxLines = this.MoveBrBoxToView(viewStr, brBox);\r\n // 旋转\r\n const pathBoxPl = this.RotateToXOY(sweepPathInWCS, brBoxLines, new Matrix4().getInverse(ucs));\r\n // 切割\r\n return this.SplitInPlane(sweepPathInWCS, brBoxLines, pathBoxPl);\r\n }\r\n // 其他情况返回空数组,表示不做切割\r\n return [[], [], []];\r\n }\r\n\r\n /**\r\n * 切割面\r\n * @param {Polyline} sweepPathInWCS 放样路径\r\n * @param {Line[]} brBoxLines 板包围盒\r\n * @param {Polyline} pathBoxPl 路径包围盒\r\n * @第一步 计算刀与板包围盒的交点,以及在盒内的顶点,记住采样点\r\n * @第二步 记录采样点在刀上的位置,并移动到路径所在的平面\r\n * @第三步 根据采样点生成垂直于XOY平面的直线\r\n * @第四步 计算这些直线与路径的交点\r\n * @第五步 将这些交点映射到展开后的路径上\r\n * @第六步 根据记录的位置排序这些点,并生成新的刀\r\n */\r\n SplitInPlane(sweepPathInWCS: Polyline, brBoxLines: Line[], pathBoxPl: Polyline)\r\n {\r\n const splitPl = this.splitPl;\r\n /** 采样点(一定在包围盒内) */\r\n const ptsInbrBox = this.GetPtsInbrBox(brBoxLines);\r\n /** 路径所在平面与X轴垂直否 */\r\n const isVerticalWithX = equaln(sweepPathInWCS.Normal.dot(new Vector3(1, 0, 0)), 0);\r\n // 细化\r\n ptsInbrBox.push(...this.Tessellate(sweepPathInWCS, brBoxLines, isVerticalWithX));\r\n // 规范超出的部分\r\n const [yLineMax, yLineMin] = this.AdjustOverBox(sweepPathInWCS, pathBoxPl);\r\n /** 构成新刀的数据集 */\r\n const splitDatasList: { pt: Vector3; index: number; }[][] = [];\r\n /** 路径上的点(用于偏移后求交) */\r\n const pathPt = pathBoxPl.GetPointAtParam(0);\r\n /** 展开后的路径 */\r\n const expandPath = CurveManager.CreateExpandPl(this.GetSweepPathInOCSWithBr());\r\n this.ToSplitPosition(expandPath);\r\n let minLength = Infinity;\r\n const inptsData: { pts: Vector3[], index: number, bias: number; }[] = [];\r\n // 移动到路径所在的平面,然后作垂线并与路径求交\r\n for (const ptInbrBox of ptsInbrBox)\r\n {\r\n /** 在刀上的位置 */\r\n const ptInbrBoxIndex = splitPl.GetParamAtPoint(ptInbrBox);\r\n let biasX = ptInbrBox.x - pathPt.x;\r\n // 往刀所在的平面移动\r\n if (isVerticalWithX)\r\n {\r\n biasX = ptInbrBox.y - pathPt.y;\r\n ptInbrBox.y = pathPt.y;\r\n }\r\n else\r\n ptInbrBox.x = pathPt.x;\r\n const zLine = CurveManager.CreateZLine(ptInbrBox);\r\n const inptsInPath = zLine.IntersectWith(sweepPathInWCS, IntersectOption.ExtendThis, 0.01).reverse();\r\n minLength = Math.min(minLength, inptsInPath.length);\r\n inptsData.push({ pts: inptsInPath, index: ptInbrBoxIndex, bias: biasX });\r\n }\r\n for (const data of inptsData)\r\n {\r\n // 点映射\r\n for (let i = 0; i < minLength; i++)\r\n {\r\n const inptInPath = data.pts[i];\r\n const param = sweepPathInWCS.GetParamAtPoint(inptInPath);\r\n const ptInExpand = expandPath.GetPointAtParam(param);\r\n // 偏移\r\n ptInExpand.y += Math.abs(data.bias);\r\n // 初始化\r\n if (!splitDatasList[i]) splitDatasList[i] = [];\r\n // 添加\r\n splitDatasList[i].push({ pt: ptInExpand, index: data.index });\r\n }\r\n }\r\n for (let splitDatas of splitDatasList)\r\n {\r\n splitDatas = splitDatas.sort((a, b) => a.index - b.index);\r\n // 修正刀\r\n for (let i = 0; i < splitDatas.length; i++)\r\n {\r\n const splitData = splitDatas[i];\r\n const basePt = splitData.pt;\r\n const backPt = splitDatas[i - 1]?.pt;\r\n const nextPt = splitDatas[i + 1]?.pt;\r\n // 目前先只针对首尾点\r\n if (backPt && nextPt)\r\n continue;\r\n /** @todo 这里先按水平延伸来修正 */\r\n if (yLineMax.PtOnCurve(basePt, 1e-3))\r\n {\r\n let sign = 1;\r\n if (backPt) sign = Math.sign(basePt.x - backPt.x);\r\n else if (nextPt) sign = Math.sign(basePt.x - nextPt.x);\r\n const pt = basePt.clone().add(new Vector3(sign * 2000, 0, 0));\r\n const index = splitData.index + ((backPt && !yLineMax.PtOnCurve(backPt)) ? 0.01 : -0.01);\r\n splitDatas.unshift({ pt, index });\r\n i++;\r\n }\r\n else if (yLineMin.PtOnCurve(basePt, 1e-3))\r\n {\r\n let sign = 1;\r\n if (backPt) sign = Math.sign(basePt.x - backPt.x);\r\n else if (nextPt) sign = Math.sign(basePt.x - nextPt.x);\r\n const pt = basePt.clone().add(new Vector3(sign * 2000, 0, 0));\r\n const index = splitData.index + ((backPt && !yLineMin.PtOnCurve(backPt)) ? 0.01 : -0.01);\r\n splitDatas.unshift({ pt, index });\r\n i++;\r\n }\r\n }\r\n // 排序\r\n splitDatas = splitDatas.sort((a, b) => a.index - b.index);\r\n }\r\n /** 新刀 */\r\n const newSplitPls: Polyline[] = [];\r\n for (const splitDatas of splitDatasList)\r\n {\r\n const newSplitPl = CurveManager.CreatePolyline(splitDatas.map(e => AsVector2(e.pt)));\r\n newSplitPls.push(newSplitPl);\r\n }\r\n // 切割板\r\n return this.SplitBrByKnifes(newSplitPls);\r\n }\r\n\r\n /** 判断视图类型 */\r\n private GetViewStr(ucs: Matrix4)\r\n {\r\n const viewType = ViewManager.MatrixIsView(ucs);\r\n if (viewType === ViewType.Unknown)\r\n {\r\n const axisUsc = CurveManager.CreateAxis(ucs);\r\n const axisBr = CurveManager.CreateAxis(this.br.OCS);\r\n const brZArrow = axisBr[2];\r\n const brZAxis = brZArrow.EndPoint.clone().sub(brZArrow.StartPoint);\r\n const uscZArrow = axisUsc[2];\r\n const uscZAxis = uscZArrow.EndPoint.clone().sub(uscZArrow.StartPoint);\r\n const isInPositive = equaln(brZAxis.angleTo(uscZAxis), 0) || equaln(brZAxis.angleTo(uscZAxis), Math.PI);\r\n if (isInPositive) return \"正视图\";\r\n }\r\n return viewType;\r\n }\r\n\r\n /** 判断切割的是路径还是面 */\r\n private IsPathOrPlane(viewStr: ViewType | \"正视图\")\r\n {\r\n /** 放样路径的包围盒 */\r\n const sweepBoxInWCS = this.br.GetSweepPathInWCS().BoundingBox;\r\n // 前视图下没有Y说明切割的就直接是路径\r\n if (viewStr === ViewType.Front)\r\n return equaln(sweepBoxInWCS.min.y, sweepBoxInWCS.max.y) ? \"路径\" : \"面\";\r\n // 左视图下没有X说明切割的就直接是路径\r\n if (viewStr === ViewType.Left)\r\n return equaln(sweepBoxInWCS.min.x, sweepBoxInWCS.max.x) ? \"路径\" : \"面\";\r\n // 俯视图下没有Z说明切割的就直接是路径\r\n if (viewStr === ViewType.Down)\r\n return equaln(sweepBoxInWCS.min.z, sweepBoxInWCS.max.z) ? \"路径\" : \"面\";\r\n return undefined;\r\n }\r\n\r\n /** 获取调整角度(用于处理放样角度带来的影响) */\r\n private GetAdjustAngle()\r\n {\r\n /** @todo 角度 < 0 或 角度 > 90 会有问题 */\r\n const sweepAngle = this.br.SweepAngle;\r\n /** 调整的角度 */\r\n let angle = sweepAngle;\r\n if (equaln(sweepAngle, Math.PI))\r\n angle = 0;\r\n else if (equaln(sweepAngle, -Math.PI / 2))\r\n angle = 0;\r\n else if (sweepAngle > Math.PI / 4)\r\n angle = sweepAngle - Math.PI / 2;\r\n return angle;\r\n }\r\n\r\n /** 统一板包围盒与路径包围盒一致 */\r\n private UnifyBrBoxAndPathBox()\r\n {\r\n const br = this.br;\r\n /** 调整的角度 */\r\n const adjustAngle = this.GetAdjustAngle();\r\n const sweepPathInWCS = br.GetSweepPathInWCS();\r\n // 处理旋转情况下,路径的包围盒不在正交平面内\r\n EntityManager.RotateEntity(sweepPathInWCS, -adjustAngle);\r\n const brBox = br.BoundingBox;\r\n const pathBox = sweepPathInWCS.BoundingBox;\r\n // 约束二者的包围盒\r\n if (!equaln(pathBox.max.x, pathBox.min.x))\r\n {\r\n brBox.max.x = pathBox.max.x;\r\n brBox.min.x = pathBox.min.x;\r\n }\r\n if (!equaln(pathBox.max.y, pathBox.min.y))\r\n {\r\n brBox.max.y = pathBox.max.y;\r\n brBox.min.y = pathBox.min.y;\r\n }\r\n if (!equaln(pathBox.max.z, pathBox.min.z))\r\n {\r\n brBox.max.z = pathBox.max.z;\r\n brBox.min.z = pathBox.min.z;\r\n }\r\n return brBox;\r\n }\r\n\r\n /** 平移路径到对应视图平面 */\r\n private MovePathToView(viewStr: ViewType | \"正视图\")\r\n {\r\n /** 放样路径(世界坐标系下的) */\r\n const sweepPathInWCS = this.br.GetSweepPathInWCS();\r\n /** 偏移向量 */\r\n const biasV = new Vector3(0, 0, 0);\r\n switch (viewStr)\r\n {\r\n case ViewType.Front:\r\n biasV.y = -sweepPathInWCS.BoundingBox.min.y;\r\n break;\r\n case ViewType.Left:\r\n biasV.x = -sweepPathInWCS.BoundingBox.min.x;\r\n break;\r\n case ViewType.Down:\r\n biasV.z = -sweepPathInWCS.BoundingBox.max.z;\r\n break;\r\n }\r\n // 路径-基点归零(在世界坐标系下)\r\n sweepPathInWCS.Move(biasV);\r\n return sweepPathInWCS;\r\n }\r\n\r\n /** 平移板包围盒到对应视图平面 */\r\n private MoveBrBoxToView(viewStr: ViewType | \"正视图\", brBox: Box3Ext)\r\n {\r\n // 板包围盒-基点归零(在世界坐标系下)\r\n const brBoxLines = BoxLine(brBox);\r\n const biasV = new Vector3(0, 0, 0);\r\n switch (viewStr)\r\n {\r\n case ViewType.Front:\r\n biasV.y = -brBox.min.y;\r\n break;\r\n case ViewType.Left:\r\n biasV.x = -brBox.min.x;\r\n break;\r\n case ViewType.Down:\r\n biasV.z = -brBox.max.z;\r\n break;\r\n }\r\n brBoxLines.forEach(e => e.Move(biasV));\r\n return brBoxLines;\r\n }\r\n\r\n /** 旋转到俯视图下(即XOY平面) */\r\n private RotateToXOY(sweepPathInWCS: Polyline, brBoxLines: Line[], ucsInv: Matrix4)\r\n {\r\n const splitPl = this.splitPl;\r\n // 修改放样路径的坐标系(有时会导致sweepPathInWCS的形状都发生改变所以先注释了其实大概率也用不上)\r\n // sweepPathInWCS.UpdateOCSTo(new Matrix4());\r\n // 包围盒\r\n const pathBoxPl = EntityManager.GetEnBoxPl(sweepPathInWCS);\r\n // 转换到俯视图下\r\n sweepPathInWCS.ApplyMatrix(ucsInv);\r\n pathBoxPl.ApplyMatrix(ucsInv);\r\n splitPl.ApplyMatrix(ucsInv);\r\n splitPl.UpdateOCSTo(new Matrix4());\r\n brBoxLines.forEach(e => e.ApplyMatrix(ucsInv));\r\n // 依角度调整使得路径垂直于XOY平面\r\n this.AdjustForSweepAngle(sweepPathInWCS, brBoxLines, pathBoxPl);\r\n return pathBoxPl;\r\n }\r\n\r\n /** 修正放样角度带来的影响(比如求不到交点) */\r\n private AdjustForSweepAngle(sweepPathInWCS: Polyline, brBoxLines: Line[], pathBoxPl: Polyline)\r\n {\r\n const splitPl = this.splitPl;\r\n /** 调整的角度 */\r\n const adjustAngle = this.GetAdjustAngle();\r\n const pathOCSInv = sweepPathInWCS.OCSInv;\r\n const pathOCS = sweepPathInWCS.OCS;\r\n /** 逆旋转矩阵 */\r\n const invRotateMatrix = new Matrix4().makeRotationY(-adjustAngle);\r\n // 在Three默认矩阵左乘(作行变换),故越靠右的矩阵越先运算\r\n // 所以这里的运算顺序是先pathOCSInv再invRotateMatrix最后再pathOCS\r\n // en.ApplyMatrix(mtx) = en.ApplyMatrix(pathOCSInv).ApplyMatrix(invRotateMatrix).ApplyMatrix(pathOCS)\r\n const mtx = pathOCS.clone().multiply(invRotateMatrix).multiply(pathOCSInv);\r\n sweepPathInWCS.ApplyMatrix(mtx);\r\n pathBoxPl.ApplyMatrix(mtx);\r\n splitPl.ApplyMatrix(mtx);\r\n brBoxLines.forEach(e => e.ApplyMatrix(mtx));\r\n }\r\n\r\n /** 对路径进行细化 */\r\n private Tessellate(sweepPathInWCS: Polyline, brBoxLines: Line[], isVerticalWithX: boolean)\r\n {\r\n const splitPl = this.splitPl;\r\n const sweepCusInWCS = sweepPathInWCS.Explode();\r\n const brBox = EntityManager.GetEntitysBox(brBoxLines);\r\n const ptsInbrBox: Vector3[] = [];\r\n for (const sweepCuInWCS of sweepCusInWCS)\r\n {\r\n if (sweepCuInWCS instanceof Arc)\r\n {\r\n const SPET = 20;\r\n if (isVerticalWithX)\r\n {\r\n const splitPlLen = splitPl.Length;\r\n const cuBox = sweepCuInWCS.BoundingBox;\r\n for (let dist = 0; dist < splitPlLen; dist += SPET)\r\n {\r\n const pt = splitPl.GetPointAtDistance(dist);\r\n if (pt.x > cuBox.min.x && pt.x < cuBox.max.x)\r\n {\r\n if (pt.y > brBox.min.y && pt.y < brBox.max.y)\r\n ptsInbrBox.push(pt);\r\n }\r\n }\r\n }\r\n else\r\n {\r\n const splitPlLen = splitPl.Length;\r\n const cuBox = sweepCuInWCS.BoundingBox;\r\n for (let dist = 0; dist < splitPlLen; dist += SPET)\r\n {\r\n const pt = splitPl.GetPointAtDistance(dist);\r\n if (pt.x > brBox.min.x && pt.x < brBox.max.x)\r\n {\r\n if (pt.y > cuBox.min.y && pt.y < cuBox.max.y)\r\n ptsInbrBox.push(pt);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return ptsInbrBox;\r\n }\r\n\r\n /** 规范超出的部分 */\r\n private AdjustOverBox(sweepPathInWCS: Polyline, pathBoxPl: Polyline)\r\n {\r\n const pathBoxMax = { x: -Infinity, y: -Infinity };\r\n const pathBoxMin = { x: Infinity, y: Infinity };\r\n for (let param = 0; param < pathBoxPl.LineData.length; param++)\r\n {\r\n const pt = pathBoxPl.GetPointAtParam(param);\r\n pathBoxMax.x = Math.max(pathBoxMax.x, pt.x);\r\n pathBoxMax.y = Math.max(pathBoxMax.y, pt.y);\r\n pathBoxMin.x = Math.min(pathBoxMin.x, pt.x);\r\n pathBoxMin.y = Math.min(pathBoxMin.y, pt.y);\r\n }\r\n const pathMaxPt = new Vector3(pathBoxMax.x, pathBoxMax.y, 0);\r\n const pathMinPt = new Vector3(pathBoxMin.x, pathBoxMin.y, 0);\r\n const zLineMax = CurveManager.CreateZLine(pathMaxPt);\r\n const zLineMin = CurveManager.CreateZLine(pathMinPt);\r\n const inptMax = zLineMax.IntersectWith(sweepPathInWCS, IntersectOption.ExtendThis, 0.01)[0];\r\n const inptMin = zLineMin.IntersectWith(sweepPathInWCS, IntersectOption.ExtendThis, 0.01)[0];\r\n if (!inptMax || !inptMin)\r\n return [zLineMax, zLineMin];\r\n const paramMax = sweepPathInWCS.GetParamAtPoint(inptMax);\r\n const paramMin = sweepPathInWCS.GetParamAtPoint(inptMin);\r\n /** 展开后的路径 */\r\n const expandPath = CurveManager.CreateExpandPl(this.GetSweepPathInOCS());\r\n let maxPoint = expandPath.GetPointAtParam(paramMax);\r\n let minPoint = expandPath.GetPointAtParam(paramMin);\r\n if (maxPoint.x < minPoint.x) [maxPoint, minPoint] = [minPoint, maxPoint];\r\n const yLineMax = CurveManager.CreateYLine(maxPoint);\r\n const yLineMin = CurveManager.CreateYLine(minPoint);\r\n return [yLineMax, yLineMin];\r\n }\r\n\r\n /** 获取板件坐标系下的放样路径 */\r\n private GetSweepPathInOCS()\r\n {\r\n const br = this.br;\r\n /** 放样路径(世界坐标系下的) */\r\n const sweepPathInWCS = br.GetSweepPathInWCS();\r\n /** 放样路径(板件坐标系下的) */\r\n const sweepPathInOCS = sweepPathInWCS.Clone().ApplyMatrix(sweepPathInWCS.OCSInv);\r\n return sweepPathInOCS;\r\n }\r\n\r\n /** 获取板件坐标系下的放样路径并与板件的边对齐 */\r\n private GetSweepPathInOCSWithBr()\r\n {\r\n const br = this.br;\r\n /** 放样路径(世界坐标系下的) */\r\n const sweepPathInWCS = br.GetSweepPathInWCS();\r\n /** 放样路径(板件坐标系下的) */\r\n const sweepPathInOCS = sweepPathInWCS.Clone().ApplyMatrix(br.OCSInv);\r\n return sweepPathInOCS;\r\n }\r\n\r\n /** 求得的板包围盒的交点与盒内的顶点 */\r\n private GetPtsInbrBox(brBoxLines: Line[])\r\n {\r\n const splitPl = this.splitPl;\r\n const brBox = EntityManager.GetEntitysBox(brBoxLines);\r\n const inptsInbrBox: Vector3[] = [];\r\n // 求包围盒的交\r\n for (const brBoxLine of brBoxLines)\r\n {\r\n inptsInbrBox.push(...brBoxLine.IntersectWith(splitPl, IntersectOption.ExtendNone, 0.01));\r\n }\r\n // 包围盒内的顶点\r\n for (let i = 0; i < splitPl.LineData.length; i++)\r\n {\r\n const pt = splitPl.LineData[i].pt;\r\n if (pt.x > brBox.min.x && pt.x < brBox.max.x && pt.y > brBox.min.y && pt.y < brBox.max.y)\r\n {\r\n inptsInbrBox.push(splitPl.GetPointAtParam(i));\r\n }\r\n }\r\n return inptsInbrBox;\r\n }\r\n\r\n /** 切割路径 */\r\n SplitInPath(sweepPathInWCS: Polyline)\r\n {\r\n const splitPl = this.splitPl;\r\n // 求交\r\n const inptsInPath = sweepPathInWCS.IntersectWith(splitPl, IntersectOption.ExtendNone);\r\n /** 新刀 */\r\n const newSplitPls: Polyline[] = [];\r\n /** 展开后的路径 */\r\n const expandPath = CurveManager.CreateExpandPl(this.GetSweepPathInOCSWithBr());\r\n this.ToSplitPosition(expandPath);\r\n // 生成刀\r\n for (const inptInPath of inptsInPath)\r\n {\r\n const param = sweepPathInWCS.GetParamAtPoint(inptInPath);\r\n const basePoint = expandPath.GetPointAtParam(param);\r\n const newSplitPl = CurveManager.CreatePolyline([new Vector2(basePoint.x, basePoint.y - 1000), new Vector2(basePoint.x, basePoint.y + 1000)]);\r\n newSplitPls.push(newSplitPl);\r\n }\r\n return this.SplitBrByKnifes(newSplitPls);\r\n }\r\n\r\n /** 获取原始位置与切割位置的变换信息 */\r\n private GetPositionData()\r\n {\r\n const br = this.br;\r\n /** 放样路径的旋转角度 */\r\n const sweepAngle = br.SweepAngle;\r\n /** 旋转矩阵 */\r\n const rotateMatrix = new Matrix4().makeRotationZ(sweepAngle);\r\n /** 逆旋转矩阵 */\r\n const invRotateMatrix = new Matrix4().makeRotationZ(-sweepAngle);\r\n /** 板轮廓(肉) */\r\n const brContour = br.ContourCurve.Clone() as Polyline;\r\n brContour.ApplyMatrix(invRotateMatrix);\r\n const biasV = new Vector3(-brContour.BoundingBox.min.x, 0, 0);\r\n const biasV2 = new Vector3(brContour.BoundingBox.min.x, 0, 0);\r\n brContour.ApplyMatrix(rotateMatrix);\r\n return { to: { m: invRotateMatrix, v: biasV }, re: { m: rotateMatrix, v: biasV2 } };\r\n }\r\n\r\n /** 旋转平移到切割位置 */\r\n private ToSplitPosition(pl: Polyline | Polyline[])\r\n {\r\n const { to, re } = this.GetPositionData();\r\n if (pl instanceof Polyline)\r\n {\r\n pl.ApplyMatrix(to.m);\r\n pl.Move(to.v);\r\n }\r\n else\r\n {\r\n pl = pl.map(e =>\r\n {\r\n e.ApplyMatrix(to.m);\r\n e.Move(to.v);\r\n return e;\r\n });\r\n }\r\n }\r\n\r\n /** 平移旋转到原始位置 */\r\n private ReSplitPosition(pl: Polyline | Polyline[])\r\n {\r\n const { to, re } = this.GetPositionData();\r\n if (pl instanceof Polyline)\r\n {\r\n pl.Move(re.v);\r\n pl.ApplyMatrix(re.m);\r\n }\r\n else\r\n {\r\n pl = pl.map(e =>\r\n {\r\n e.Move(re.v);\r\n e.ApplyMatrix(re.m);\r\n return e;\r\n });\r\n }\r\n }\r\n\r\n /** 用刀去切割板(包括轮廓与路径) */\r\n private SplitBrByKnifes(knifes: Polyline[])\r\n {\r\n const br = this.br;\r\n /** 放样路径(板件坐标系下的) */\r\n const sweepPathInOCS = this.GetSweepPathInOCS();\r\n /** 板轮廓(肉) */\r\n const brContour = br.ContourCurve.Clone() as Polyline;\r\n // 旋转平移到切割位置\r\n this.ToSplitPosition(brContour);\r\n // 平移旋转到原始位置\r\n this.ReSplitPosition(brContour);\r\n this.ReSplitPosition(knifes);\r\n // 切割板\r\n const cus = SplitPolyline(brContour, knifes, true);\r\n const contours = [];\r\n // 旋转平移到切割位置\r\n for (const cu of cus)\r\n {\r\n const contour = cu.Clone();\r\n this.ToSplitPosition(contour);\r\n contours.push(contour);\r\n }\r\n // 修正路径起点不为0的情况\r\n const firstPt = sweepPathInOCS.LineData[0].pt.clone();\r\n sweepPathInOCS.Move(AsVector3(firstPt.clone().negate()));\r\n /* ---- [2] 获取正确的放样路径集 ---- */\r\n const [sweepPaths, contourBiases] = this.GetSweepPaths(br, contours, sweepPathInOCS);\r\n return [cus, sweepPaths, contourBiases] as [Polyline[], Polyline[], { x: number; y: number; }[]];\r\n }\r\n\r\n /**\r\n * @todo 这个是旧方案,先临时用一用,后面再重构\r\n * 针对圆弧板进行切割\r\n * @param br 被切割的板\r\n * @param clipPls 用于切割的线\r\n * @问 圆弧板的切割与普通板有何区别?\r\n * @答 切割位置应变长(因为板弯曲了,而板轮廓没有),且放样路径也应被切割\r\n * @着手点 [1]修正板轮廓的切割位置 [2]获取正确的放样路径集\r\n * @修正位置 通过param进行逆映射从而得到正确的切割位置\r\n * @获取路径 首先要明确一件事,路径需要改变,是因为切割后的板的基点(aabb中X最小的点)可能发生变化\r\n * 所以,我们需要根据新的基点生成新的路径,新基点沿路径方向与旧基点的差值(恒正)作为生成新路径的切割线(垂直X轴)\r\n * 若切割线与路径平行,则新旧基点一致,无需修改\r\n */\r\n private SplitBySweep(br: Board, clipPls: Polyline[])\r\n {\r\n /* ---- 前置处理:获取实际的放样路径 ---- */\r\n const SP2OP = (path: Polyline) => ArcBoardBuild.OffsetPolyline(path, -br.Thickness);\r\n const path = br.GetSweepPath();\r\n /** 路径 */\r\n const sweepPath = br.SweepVisibleFace === FaceDirection.Front ? SP2OP(path) : path;\r\n // 修正路径起点不为0的情况\r\n const firstPt = sweepPath.LineData[0].pt.clone();\r\n sweepPath.Move(AsVector3(firstPt.clone().negate()));\r\n /* ---- [1] 修正板轮廓的切割位置 ---- */\r\n /** 新的刀 */\r\n const newSplitPls = this.GetSplitPls(br, clipPls, sweepPath);\r\n /** 板轮廓(肉) */\r\n const brContour = br.ContourCurve.Clone() as Polyline;\r\n const cus = SplitPolyline(brContour, newSplitPls, true);\r\n /* ---- [2] 获取正确的放样路径集 ---- */\r\n /** 放样路径的旋转角度 */\r\n const sweepAngle = br.SweepAngle;\r\n /** 逆旋转矩阵 */\r\n const invRotateMatrix = new Matrix4().makeRotationZ(-sweepAngle);\r\n const contours: Polyline[] = [];\r\n for (const cu of cus)\r\n {\r\n const contour = cu.Clone();\r\n contour.ApplyMatrix(invRotateMatrix);\r\n contours.push(contour);\r\n }\r\n const [sweepPaths, contourBiases] = this.GetSweepPaths(br, contours, sweepPath);\r\n return [cus, sweepPaths, contourBiases] as [Polyline[], Polyline[], { x: number; y: number; }[]];;\r\n }\r\n\r\n /** 获得新的刀(多段线) */\r\n private GetSplitPls(br: Board, splitPls: Polyline[], sweepPath: Polyline)\r\n {\r\n /** 新的刀 */\r\n const newSplitPls: Polyline[] = [];\r\n /* ---- [2] 旋转:把肉和路径旋转负的放样角度 ---- */\r\n /** 放样角度 */\r\n const sweepAngle = br.SweepAngle;\r\n const rotateMatrix = new Matrix4().makeRotationZ(sweepAngle);\r\n const invRotateMatrix = new Matrix4().makeRotationZ(-sweepAngle);\r\n /* ---- [3] 展开:把路径展开 ---- */\r\n const expandPath = CurveManager.CreateExpandPl(sweepPath);\r\n /* ---- [4] 范围生成路径X轴的包围线并把肉包围盒收缩至包围线内 ---- */\r\n /** 包围线 */\r\n const pathBox = sweepPath.BoundingBox;\r\n const pathArcs: Arc[] = [];\r\n const cus = sweepPath.Explode();\r\n for (const cu of cus)\r\n {\r\n if (cu instanceof Arc)\r\n {\r\n pathArcs.push(cu);\r\n }\r\n }\r\n const xInPathByBox = pathBox.max.clone().sub(pathBox.min).x;\r\n const diffLen = expandPath.Length - xInPathByBox;\r\n const GetBoxContour = (box: Box3Ext, diffLen?: number) =>\r\n {\r\n const max = box.max.sub(box.min);\r\n const min = box.min.sub(box.min);\r\n if (diffLen)\r\n {\r\n max.x -= diffLen * Math.cos(sweepAngle);\r\n max.y -= diffLen * Math.sin(sweepAngle);\r\n }\r\n const pl = new Polyline([\r\n { pt: new Vector2(min.x, min.y), bul: 0 },\r\n { pt: new Vector2(max.x, min.y), bul: 0 },\r\n { pt: new Vector2(max.x, max.y), bul: 0 },\r\n { pt: new Vector2(min.x, max.y), bul: 0 },\r\n { pt: new Vector2(min.x, min.y), bul: 0 },\r\n ]);\r\n return pl;\r\n };\r\n /** 包围盒 */\r\n const brBoxContour = GetBoxContour(br.ContourCurve.BoundingBoxInOCS, diffLen);\r\n brBoxContour.ApplyMatrix(invRotateMatrix);\r\n const pathMin = pathBox.min.clone();\r\n pathMin.y = 0;\r\n brBoxContour.Move(pathMin);\r\n /* ---- [5] 求交:求得刀在包围盒和包围线上的交点 ---- */\r\n for (const splitPl of splitPls)\r\n {\r\n splitPl.ApplyMatrix(invRotateMatrix);\r\n /** 在包围线内的顶点 */\r\n const pts: Vector3[] = [];\r\n for (let i = 0; i < splitPl.LineData.length; i++)\r\n {\r\n const pt = AsVector3(splitPl.GetPointAtParam(i));\r\n if (pathBox.min.x - 1e-3 < pt.x && pt.x < pathBox.max.x + 1e-3)\r\n pts.push(pt);\r\n // 不是首尾点的顶点也算进去\r\n else if (!equalv3(pt, splitPl.StartPoint) && !equalv3(pt, splitPl.EndPoint))\r\n pts.push(pt);\r\n }\r\n /** 在包围盒的交点 */\r\n const ipts = brBoxContour.IntersectWith(splitPl, IntersectOption.ExtendNone);\r\n ipts.push(...pts);\r\n // 紧密贴合\r\n for (const pathArc of pathArcs)\r\n {\r\n const MAX_SPLIT_COUNT = 36;\r\n const SPLIT_RATE = 0.5;\r\n const splitCount = Math.min(GetArcDrawCount(pathArc) * SPLIT_RATE, MAX_SPLIT_COUNT);\r\n const divDist = pathArc.Length / splitCount;\r\n for (let i = 0; i < splitCount; i++)\r\n {\r\n const pInArc = pathArc.GetPointAtDistance(i * divDist);\r\n const vertical = CurveManager.CreateYLine(pInArc);\r\n const iptsInArc = splitPl.IntersectWith(vertical, IntersectOption.ExtendArg);\r\n for (const iptInArc of iptsInArc)\r\n {\r\n ipts.push(iptInArc);\r\n }\r\n }\r\n }\r\n /** 用于连成新的刀的点 */\r\n const splitPts: { index: number; value: Vector3; }[] = [];\r\n for (const ipt of ipts)\r\n {\r\n const index = splitPl.GetParamAtPoint(ipt);\r\n /* ---- [6] 垂直:交点作垂线垂直映射到路径上 ---- */\r\n const vertical2 = CurveManager.CreateYLine(ipt);\r\n const ipts2 = sweepPath.IntersectWith(vertical2, IntersectOption.ExtendArg);\r\n // 对于多值函数的临时处理(只去最后一次的值,强行变成单射)\r\n const ipt2 = ipts2[ipts2.length - 1];\r\n if (ipt2)\r\n {\r\n /* ---- [7] 长度:根据点在路径上的长度位置,映射到展开后的路径上 ---- */\r\n const param = sweepPath.GetParamAtPoint(ipt2);\r\n const ept = expandPath.GetPointAtParam(param);\r\n /* ---- [8] 水平:根据展开后的点与展开前的距离差,进行水平偏移 ---- */\r\n const biasPt = ipt.clone();\r\n const len = ept.x - ipt.x;\r\n biasPt.x += len;\r\n splitPts.push({ index: index, value: biasPt });\r\n // 超出则添加水平偏移点\r\n if (ipt2.x > pathBox.max.x - 1e-3)\r\n {\r\n const otherPt = biasPt.clone();\r\n otherPt.x += 1000;\r\n const line = splitPl.GetCurveAtParam(index);\r\n // 根据方向判断index的值\r\n const dir = line.EndPoint.x - line.StartPoint.x;\r\n if (dir > 0)\r\n {\r\n if (equalv3(line.EndPoint, splitPl.EndPoint))\r\n splitPts.push({ index: index + 1, value: otherPt });\r\n }\r\n else\r\n {\r\n if (equalv3(line.StartPoint, splitPl.StartPoint))\r\n splitPts.push({ index: index - 1, value: otherPt });\r\n }\r\n }\r\n // 镜像情况(todo定稿后可以与上面的if何在一起)\r\n else if (ipt2.x < pathBox.min.x + 1e-3)\r\n {\r\n const otherPt = biasPt.clone();\r\n otherPt.x -= 1000;\r\n const line = splitPl.GetCurveAtParam(index);\r\n // 根据方向判断index的值\r\n const dir = line.EndPoint.x - line.StartPoint.x;\r\n if (dir < 0)\r\n {\r\n if (equalv3(line.EndPoint, splitPl.EndPoint))\r\n splitPts.push({ index: index + 1, value: otherPt });\r\n }\r\n else\r\n {\r\n if (equalv3(line.StartPoint, splitPl.StartPoint))\r\n splitPts.push({ index: index - 1, value: otherPt });\r\n }\r\n }\r\n }\r\n else\r\n splitPts.push({ index: index, value: ipt });\r\n }\r\n /* ---- [9] 连线:将偏移后的点连成线(就是新的刀) ---- */\r\n const arr = splitPts.sort((a, b) => a.index - b.index);\r\n const newSplitPl = CurveManager.CreatePolyline(arr.map(e => AsVector2(e.value)));\r\n newSplitPl.ApplyMatrix(rotateMatrix);\r\n newSplitPls.push(newSplitPl);\r\n }\r\n return newSplitPls;\r\n }\r\n\r\n /** 获取被切割后的放样路径集 */\r\n private GetSweepPaths(br: Board, contours: Polyline[], sweepPath: Polyline): [Polyline[], { x: number; y: number; }[]]\r\n {\r\n /** 切割后的放样曲线 */\r\n const sweepPaths: Polyline[] = [];\r\n /** 用于修正轮廓位置的偏移值 */\r\n const contourBiases: { x: number, y: number; }[] = [];\r\n /** 放样角度 */\r\n const sweepAngle = br.SweepAngle;\r\n const firstPt = sweepPath.LineData[0].pt.clone();\r\n sweepPath.Move(AsVector3(firstPt));\r\n /** 展开的点映射成弯曲的点 */\r\n const FlatToCurved = (ipt: Vector3) =>\r\n {\r\n const dist = ipt.x;\r\n const p = sweepPath.GetPointAtDistance(dist);\r\n const param = sweepPath.GetParamAtDist(dist);\r\n // 这里多返回一些,可能会用到\r\n return [p, param, dist] as [Vector3, number, number];\r\n };\r\n const OP2SP = (offsetPath: Polyline) => ArcBoardBuild.OffsetPolyline(offsetPath, br.Thickness);\r\n /** 限制向量的最大值(用于修复可能产生的精度问题,如首尾相连时) */\r\n const LimitMaxInVector3 = (vec: Vector3, max: { x?: number, y?: number, z?: number; }) =>\r\n {\r\n const v = vec.clone();\r\n max.x !== undefined && (v.x = Math.min(v.x, max.x));\r\n max.y !== undefined && (v.y = Math.min(v.y, max.y));\r\n max.z !== undefined && (v.z = Math.min(v.z, max.z));\r\n return v;\r\n };\r\n for (const contour of contours)\r\n {\r\n // 切割路径\r\n const cu = contour.Clone();\r\n const box = cu.BoundingBox;\r\n const [pA, paramA, distA] = FlatToCurved(box.min);\r\n const [pB, paramB, distB] = FlatToCurved(LimitMaxInVector3(box.max, { x: sweepPath.Length }));\r\n const sweepPathCopy = sweepPath.Clone();\r\n const partPath = CurveManager.Get_Pl_InPtAtoPtB(sweepPathCopy, pA, pB);\r\n // 修正轮廓\r\n let baseLen = pA.x - box.min.x - firstPt.x;\r\n const biasX = Math.cos(sweepAngle) * baseLen;\r\n const biasY = Math.sin(sweepAngle) * baseLen;\r\n contourBiases.push({ x: biasX, y: biasY });\r\n // 修正路径(保证放样路径都是从(0,0)开始todo也不一定是(0,0)因为见光面的原因\r\n const bias = -partPath.LineData[0].pt.x + firstPt.x;\r\n partPath.LineData.forEach(e => { e.pt.x += bias; });\r\n const factPath = br.SweepVisibleFace === FaceDirection.Front ? OP2SP(partPath) : partPath;\r\n sweepPaths.push(factPath);\r\n }\r\n return [sweepPaths, contourBiases];\r\n };\r\n}\r\n\r\n/** 视图类型 */\r\nexport enum ViewType\r\n{\r\n Normal = \"正视图\",\r\n Front = \"前视图\",\r\n Left = \"左视图\",\r\n Right = \"右视图\",\r\n Down = \"俯视图\",\r\n Unknown = \"未知视图\",\r\n}\r\n\r\n/** 视图管理器 */\r\nexport class ViewManager\r\n{\r\n /** 获取视图对应的矩阵 */\r\n static GetViewMatrix(viewType: ViewType)\r\n {\r\n if (viewType === ViewType.Front)\r\n {\r\n const frontMatrix = new Matrix4();\r\n frontMatrix.elements = [1, 0, 0, 0, 0, 0, 1, 0, 0, -1, 0, 0, 0, 0, 0, 1];\r\n return frontMatrix;\r\n }\r\n if (viewType === ViewType.Left)\r\n {\r\n const leftMatrix = new Matrix4();\r\n leftMatrix.elements = [0, -1, 0, 0, 0, 0, 1, 0, -1, 0, 0, 0, 0, 0, 0, 1];\r\n return leftMatrix;\r\n }\r\n if (viewType === ViewType.Down)\r\n {\r\n const downMatrix = new Matrix4();\r\n downMatrix.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\r\n return downMatrix;\r\n }\r\n if (viewType === ViewType.Right)\r\n {\r\n const rightMatrix = new Matrix4();\r\n rightMatrix.elements = [0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1];\r\n return rightMatrix;\r\n }\r\n return new Matrix4();\r\n };\r\n\r\n /** 判断矩阵位于哪个视图 */\r\n static MatrixIsView(m: Matrix4)\r\n {\r\n const frontMatrix = this.GetViewMatrix(ViewType.Front);\r\n const leftMatrix = this.GetViewMatrix(ViewType.Left);\r\n const downMatrix = this.GetViewMatrix(ViewType.Down);\r\n const rightMatrix = this.GetViewMatrix(ViewType.Right);\r\n const EqualnMatrix = (m1: Matrix4, m2: Matrix4) =>\r\n {\r\n for (let i = 0; i < m1.elements.length; i++)\r\n {\r\n const e1 = m1.elements[i];\r\n const e2 = m2.elements[i];\r\n if (!equaln(e1, e2))\r\n return false;\r\n }\r\n return true;\r\n };\r\n const isFrontView = EqualnMatrix(m, frontMatrix);\r\n const isLeftView = EqualnMatrix(m, leftMatrix);\r\n const isDownView = EqualnMatrix(m, downMatrix);\r\n const isRightView = EqualnMatrix(m, rightMatrix);\r\n return isFrontView ? ViewType.Front : isLeftView ? ViewType.Left : isDownView ? ViewType.Down : isRightView ? ViewType.Right : ViewType.Unknown;\r\n };\r\n}\r\n\r\n/** 线段管理器 */\r\nexport class CurveManager\r\n{\r\n /** X轴的平行线 */\r\n static CreateXLine = (p: Vector3) => new Line(new Vector3(p.x - 1000, p.y, p.z), new Vector3(p.x + 1000, p.y, p.z));\r\n /** Y轴的平行线 */\r\n static CreateYLine = (p: Vector3) => new Line(new Vector3(p.x, p.y - 1000, p.z), new Vector3(p.x, p.y + 1000, p.z));\r\n /** Z轴的平行线 */\r\n static CreateZLine = (p: Vector3) => new Line(new Vector3(p.x, p.y, p.z - 1000), new Vector3(p.x, p.y, p.z + 1000));\r\n /** 通过点集生成多段线 */\r\n static CreatePolyline = (ps: Vector2[]) => new Polyline(ps.map(p => { return { pt: p, bul: 0 } as PolylineProps; }));\r\n /* 多段线展开直线(类型依旧是多段线) */\r\n static CreateExpandPl(pl: Polyline)\r\n {\r\n const cus = pl.Explode();\r\n let len = 0;\r\n const ps: Vector2[] = [];\r\n for (const cu of cus)\r\n {\r\n ps.push(new Vector2(len, 0));\r\n len += cu.Length;\r\n }\r\n ps.push(new Vector2(len, 0));\r\n return this.CreatePolyline(ps).ApplyMatrix(pl.OCS);\r\n };\r\n /** 绘制矩阵所表示的坐标系 */\r\n static CreateAxis(m: Matrix4)\r\n {\r\n const len = 100;\r\n const xArrow = new Line(new Vector3(0, 0, 0), new Vector3(len, 0, 0));\r\n const yArrow = new Line(new Vector3(0, 0, 0), new Vector3(0, len, 0));\r\n const zArrow = new Line(new Vector3(0, 0, 0), new Vector3(0, 0, len));\r\n xArrow.ColorIndex = 1;\r\n yArrow.ColorIndex = 3;\r\n zArrow.ColorIndex = 5;\r\n xArrow.ApplyMatrix(m);\r\n yArrow.ApplyMatrix(m);\r\n zArrow.ApplyMatrix(m);\r\n return [xArrow, yArrow, zArrow];\r\n };\r\n /** 点集转线段簇 */\r\n static PtsToLines(pts: Vector3[]): Line[]\r\n {\r\n const lines: Line[] = [];\r\n for (let i = 1; i < pts.length; i++)\r\n {\r\n const p1 = pts[i - 1];\r\n const p2 = pts[i];\r\n const line = new Line(p1, p2);\r\n lines.push(line);\r\n }\r\n return lines;\r\n };\r\n /** 线段簇转多段线 */\r\n static LinesToPl(lines: Line[]): Polyline\r\n {\r\n const pl = new Polyline();\r\n // 确保坐标系不要沿着直线方向\r\n const lines2: Line[] = [];\r\n if (lines.length === 1)\r\n {\r\n lines2.push(lines[0]);\r\n const p1 = lines[0].EndPoint;\r\n const p2 = p1.clone().add(p1.clone().normalize().multiplyScalar(1));\r\n const line = new Line(p1, p2);\r\n lines2.push(line);\r\n pl.OCS = ComputerCurvesNormalOCS(lines2);\r\n }\r\n else\r\n {\r\n pl.OCS = ComputerCurvesNormalOCS(lines);\r\n }\r\n // 转成多段线\r\n pl.ColorIndex = lines[0].ColorIndex;\r\n for (const splitLine of lines)\r\n {\r\n pl.Join(splitLine, false, 0.01);\r\n }\r\n return pl;\r\n };\r\n /** 获取pA-pB之间的曲线 */\r\n static Get_Pl_InPtAtoPtB(pl: Polyline, pA: Vector3, pB: Vector3)\r\n {\r\n // 确保pA在pB前面\r\n if (pl.GetParamAtPoint(pA) > pl.GetParamAtPoint(pB))\r\n {\r\n const temp = pA;\r\n pA = pB;\r\n pB = temp;\r\n }\r\n const paramA = pl.GetParamAtPoint(pA);\r\n const pls = pl.GetSplitCurves(paramA);\r\n pl = pls[1] || pls[0];\r\n const paramB = pl.GetParamAtPoint(pB);\r\n return pl.GetSplitCurves(paramB)[0];\r\n };\r\n}\r\n\r\n/** 实体管理器 */\r\nclass EntityManager\r\n{\r\n /** 旋转实体 */\r\n static RotateEntity(en: Entity, angle: number)\r\n {\r\n const oldOCS = en.OCS;\r\n const rotateMatrix = new Matrix4().makeRotationY(angle);\r\n en.ApplyMatrix(en.OCSInv).ApplyMatrix(rotateMatrix).ApplyMatrix(oldOCS);\r\n };\r\n /** 求实体集的包围盒 */\r\n static GetEntitysBox(ens: Entity[])\r\n {\r\n const box = new Box3;\r\n for (const en of ens)\r\n box.union(en.BoundingBox);\r\n return box;\r\n };\r\n /** 获取实体的包围盒线 */\r\n static GetEnBoxPl(en: Entity)\r\n {\r\n const box = en.BoundingBox;\r\n const boxPl = new Polyline([\r\n {\r\n pt: new Vector2(box.min.x, box.min.y),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(box.max.x, box.min.y),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(box.max.x, box.max.y),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(box.min.x, box.max.y),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(box.min.x, box.min.y),\r\n bul: 0\r\n },\r\n ]);\r\n boxPl.Z = box.min.z;\r\n return boxPl;\r\n };\r\n}\r\n","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","//为了避免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 { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Entity } from '../Entity/Entity';\r\nimport { ObjectId } from '../ObjectId';\r\nimport { GangDrillType } from './CylinderHole';\r\n\r\n@Factory\r\nexport abstract class Hole extends Entity\r\n{\r\n @AutoRecord FId: ObjectId;\r\n @AutoRecord MId: ObjectId;//层板钉:{mid=层板} 排钻:{mid=面}\r\n protected _Height: number;\r\n @AutoRecord OtherHalfTongKong: ObjectId;\r\n protected allowHoleAtBoardEdge: boolean = false; //允许大孔面在板边缘\r\n protected type: GangDrillType = GangDrillType.Pxl;\r\n\r\n get Height()\r\n {\r\n return this._Height;\r\n }\r\n set Height(v: number)\r\n {\r\n if (this._Height !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Height = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n get Type()\r\n {\r\n return this.type;\r\n }\r\n set Type(t: GangDrillType)\r\n {\r\n if (this.type !== t)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.type = t;\r\n }\r\n }\r\n\r\n get AllowPxl()\r\n {\r\n return this.allowHoleAtBoardEdge;\r\n }\r\n set AllowPxl(v: boolean)\r\n {\r\n if (this.allowHoleAtBoardEdge !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.allowHoleAtBoardEdge = v;\r\n }\r\n }\r\n\r\n Clone()\r\n {\r\n let ent = super.Clone();\r\n ent.OtherHalfTongKong = null;\r\n return ent;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n if (ver <= 4)\r\n {\r\n //临时兼容旧图纸排钻,更新旧图纸后去掉兼容代码\r\n file['readIndex']--;\r\n }\r\n else\r\n {\r\n this._Height = file.Read();\r\n this.FId = file.ReadSoftObjectId();\r\n this.MId = file.ReadSoftObjectId();\r\n }\r\n if (ver > 5)\r\n {\r\n this.OtherHalfTongKong = file.ReadSoftObjectId();\r\n }\r\n if (ver > 6)\r\n {\r\n this.allowHoleAtBoardEdge = file.ReadBool();\r\n }\r\n else\r\n {\r\n this.allowHoleAtBoardEdge = false;\r\n }\r\n if (ver > 8)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(9);\r\n file.Write(this._Height);\r\n file.WriteSoftObjectId(this.FId);\r\n file.WriteSoftObjectId(this.MId);\r\n file.WriteSoftObjectId(this.OtherHalfTongKong);\r\n file.WriteBool(this.allowHoleAtBoardEdge);\r\n\r\n // ver9\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n}\r\n","import { BufferGeometry, CylinderBufferGeometry, Float32BufferAttribute, FrontSide, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Shape as TShape, Vector3 } from \"three\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { CADFactory, Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Circle } from \"../Entity/Circle\";\r\nimport { Hole } from \"./Hole\";\r\n\r\nexport enum GangDrillType\r\n{\r\n /**偏心轮 */\r\n Pxl = 0,\r\n /**连接杆 */\r\n Ljg = 1,\r\n /**预埋件 */\r\n Ymj = 2,\r\n /**层板钉 */\r\n Nail = 3,\r\n /** 木销 */\r\n Wood = 4,\r\n /** 通孔 */\r\n TK = 5,\r\n WoodPXL = 6,\r\n}\r\n\r\nlet TempCircle1 = new Circle();\r\nlet TempCircle2 = new Circle();\r\n\r\n@Factory\r\nexport class CylinderHole extends Hole\r\n{\r\n private _Radius: number = 1;\r\n //同侧面 常规单头连杆、偏心轮、预埋件三合一排钻(原先是)是双头三合一\r\n private _SameSideHole: boolean = false;\r\n private _GoodsId: string = \"\";\r\n private _GoodsSn: string = \"\";\r\n\r\n constructor()\r\n {\r\n super();\r\n this._Color = 1;\r\n }\r\n static CreateCylHole(radius: number, height: number, type: GangDrillType)\r\n {\r\n let drill = new CylinderHole();\r\n drill.Height = height;\r\n drill._Radius = radius;\r\n drill.type = type;\r\n return drill;\r\n }\r\n\r\n set Radius(r: number)\r\n {\r\n if (r !== this._Radius)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._MeshGeometry = null;\r\n this._EdgeGeometry = null;\r\n this._Radius = r;\r\n this.Update();\r\n }\r\n }\r\n get Height()\r\n {\r\n return super.Height;\r\n }\r\n set Height(v: number)\r\n {\r\n if (this._Height !== v)\r\n {\r\n this._MeshGeometry = null;\r\n this._EdgeGeometry = null;\r\n super.Height = v;\r\n }\r\n }\r\n\r\n //同侧面排钻\r\n get SameSideHole(): boolean\r\n {\r\n return this._SameSideHole;\r\n }\r\n set SameSideHole(value: boolean)\r\n {\r\n if (this._SameSideHole !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._SameSideHole = value;\r\n }\r\n }\r\n\r\n get Radius()\r\n {\r\n return this._Radius;\r\n }\r\n get BoundingBox()\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this._Matrix);\r\n }\r\n\r\n get GoodsId(): string\r\n {\r\n return this._GoodsId;\r\n }\r\n set GoodsId(value: string)\r\n {\r\n if (this._GoodsId !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._GoodsId = value;\r\n }\r\n }\r\n\r\n get GoodsSn(): string\r\n {\r\n return this._GoodsSn;\r\n }\r\n set GoodsSn(value: string)\r\n {\r\n if (this._GoodsSn !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._GoodsSn = value;\r\n }\r\n }\r\n\r\n /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return new Box3Ext(new Vector3(-this._Radius, -this._Radius, 0), new Vector3(this._Radius, this._Radius, this._Height));\r\n }\r\n\r\n private _MeshGeometry: CylinderBufferGeometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n this._MeshGeometry = FastDrillingMeshGeometry(this.Radius, this.Height);\r\n return this._MeshGeometry;\r\n }\r\n\r\n private _EdgeGeometry: BufferGeometry;\r\n private get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n this._EdgeGeometry = FastDrillingEdgeGeometry(this._Radius, this.Height);\r\n return this._EdgeGeometry;\r\n }\r\n GetGripPoints()\r\n {\r\n let cir = new Circle(new Vector3(), this._Radius);\r\n let pts = cir.GetGripPoints();\r\n pts.push(...pts.map(p => p.clone().add(new Vector3(0, 0, this.Height))));\r\n return pts.map(p => p.applyMatrix4(this.OCS));\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n TempCircle1.Radius = this.Radius;\r\n TempCircle1.OCS = this._Matrix;\r\n TempCircle2.Radius = this.Radius;\r\n TempCircle2.OCS = this._Matrix;\r\n TempCircle2.Position = TempCircle2.Position.add(this.Normal.multiplyScalar(this.Height));\r\n\r\n for (let c of [TempCircle2, TempCircle1])\r\n {\r\n pts.push(...c.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this.IsErase) return;\r\n super.Erase(isErase);\r\n if (!isErase) return;\r\n\r\n if (this.OtherHalfTongKong && !this.OtherHalfTongKong.IsErase)\r\n {\r\n let cy = this.OtherHalfTongKong.Object as this;\r\n cy.Type = GangDrillType.Ymj;\r\n cy.OtherHalfTongKong = null;\r\n }\r\n }\r\n\r\n InitDrawObject(renderType: RenderType)\r\n {\r\n return this.GetObject3DByRenderType(renderType);\r\n }\r\n\r\n private GetObject3DByRenderType(renderType: RenderType)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n else if (renderType === RenderType.CustomNumber || renderType === RenderType.ModelGroove)\r\n return;//不绘制了\r\n // return new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex, FrontSide, true));\r\n else\r\n return new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n obj.add(this.GetObject3DByRenderType(type));\r\n }\r\n\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D)\r\n {\r\n if (type === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else\r\n {\r\n let mesh = obj as Mesh;\r\n if (type === RenderType.CustomNumber || type === RenderType.ModelGroove)\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex, FrontSide, true);\r\n else\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n }\r\n\r\n ClearDraw(): this\r\n {\r\n if (this._EdgeGeometry)\r\n this._EdgeGeometry.dispose();\r\n this._EdgeGeometry = undefined;\r\n if (this._MeshGeometry)\r\n this._MeshGeometry.dispose();\r\n this._MeshGeometry = undefined;\r\n return super.ClearDraw();\r\n }\r\n\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._Radius = file.Read();\r\n if (ver <= 4)\r\n {\r\n //临时兼容旧排钻\r\n this._Height = file.Read();\r\n this.type = file.Read();\r\n this.FId = file.ReadSoftObjectId();\r\n this.MId = file.ReadSoftObjectId();\r\n }\r\n else\r\n {\r\n this.type = file.Read();\r\n }\r\n\r\n if (ver > 5)\r\n this.SameSideHole = file.Read();\r\n\r\n if (ver > 6)\r\n {\r\n this.GoodsId = file.Read();\r\n this.GoodsSn = file.Read();\r\n }\r\n }\r\n\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(7);//ver\r\n file.Write(this._Radius);\r\n file.Write(this.type);\r\n\r\n file.Write(this.SameSideHole);\r\n file.Write(this.GoodsId);\r\n file.Write(this.GoodsSn);\r\n }\r\n}\r\n\r\nlet cache = new Map<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)\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 (HostApplicationServices.forceFilterPxl)\r\n {\r\n if (pxl.AllowPxl)\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 else\r\n return outline.IntersectWith(cir, 0).length <= 1 && !outline.PtInCurve(center);\r\n }))\r\n return false;\r\n }\r\n if (woodPXL)\r\n {\r\n let center = woodPXL.Position.applyMatrix4(ocs).setZ(0);\r\n let cir = new Circle(center, woodPXL.Radius - SCALAR);\r\n if (outline.IntersectWith(cir, 0).length > 0 || !outline.PtInCurve(center))\r\n return false;\r\n }\r\n\r\n if (ljg)\r\n {\r\n let c1 = ljg.Position.applyMatrix4(ocs).setZ(0);\r\n let minPt = c1.clone().add(nor.clone().multiplyScalar(ljg.Height / 2));\r\n let c2 = c1.clone().add(nor.clone().multiplyScalar(ljg.Height - SCALAR));\r\n c1.add(nor.clone().multiplyScalar(SCALAR));\r\n\r\n rotatePoint(nor, Math.PI / 2);\r\n c1.add(nor.multiplyScalar(ljg.Radius));\r\n c2.add(nor.negate());\r\n\r\n let rect = new Polyline().RectangleFrom2Pt(c1, c2);\r\n\r\n let intPtsLen = outline.IntersectWith(rect, 0).length;\r\n if (intPtsLen > 2 || (intPtsLen === 0 && !outline.PtInCurve(minPt)))\r\n return false;\r\n }\r\n\r\n if (wood)\r\n {\r\n let c1 = wood.Position.applyMatrix4(ocs).setZ(0);\r\n let c2 = c1.clone().add(nor.clone().multiplyScalar(wood.Height));\r\n\r\n rotatePoint(nor, Math.PI / 2);\r\n let dir = nor.multiplyScalar(wood.Radius);\r\n let p1 = c1.clone().add(dir);\r\n let p2 = c2.clone().add(dir);\r\n let p3 = c1.clone().add(dir.negate());\r\n let p4 = c2.clone().add(dir);\r\n let l1 = new Line(p1, p2);\r\n let l2 = new Line(p3, p4);\r\n if (l1.IntersectWith(outline, 0).length !== 1 || l2.IntersectWith(outline, 0).length !== 1)\r\n return false;\r\n }\r\n\r\n }\r\n return true;\r\n}\r\n\r\n/**\r\n * 板的排钻 <上下左右>\r\n */\r\nexport interface IBoardRectHoleType\r\n{\r\n up: string;\r\n down: string;\r\n left: string;\r\n right: string;\r\n}\r\n\r\n/**分析上下左右排钻 */\r\nexport function ParseBoardRectHoleType(br: Board, outBrRectHoleType: IBoardRectHoleType = {} as any)\r\n{\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n let hightDrill = br.BoardProcessOption.highDrill;\r\n let cus = br.ContourCurve.Explode() as Curve[];\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n let derv = c.GetFirstDeriv(0).multiplyScalar(dir);\r\n\r\n if (Math.abs(derv.x) > Math.abs(derv.y))\r\n {\r\n if (derv.x > 0)\r\n outBrRectHoleType.down = hightDrill[i];\r\n else\r\n outBrRectHoleType.up = hightDrill[i];\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n outBrRectHoleType.right = hightDrill[i];\r\n else\r\n outBrRectHoleType.left = hightDrill[i];\r\n }\r\n }\r\n\r\n return outBrRectHoleType;\r\n}\r\nexport function ExtureHoleInBoard(holes: ExtrudeHole[], board: Board, ocs: Matrix4)\r\n{\r\n //TODO:自定义排钻判断\r\n return true;\r\n}\r\n\r\nexport function HoleInBoard(holes: Hole[], br: Board, ocs?: Matrix4)\r\n{\r\n if (holes.length === 0) return false;\r\n\r\n if (holes[0] instanceof CylinderHole)\r\n {\r\n return CyHoleInBoard(holes as CylinderHole[], br, ocs ?? br.OCSInv);\r\n }\r\n else\r\n {\r\n return ExtureHoleInBoard(holes as ExtrudeHole[], br, ocs ?? br.OCSInv);\r\n }\r\n}\r\n\r\n/**上下左右排钻写入到板件的高级排钻中 */\r\nexport function SetBrHighHoleTypeFromRectHoleType(br: Board, brRectHoleType: IBoardRectHoleType)\r\n{\r\n let dir = Math.sign(br.ContourCurve.Area2);\r\n let highDrill = br.BoardProcessOption.highDrill;\r\n let cus = br.ContourCurve.Explode() as Curve[];\r\n highDrill.length = 0;\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n let derv = c.GetFirstDeriv(0).multiplyScalar(dir);\r\n\r\n if (Math.abs(derv.x) > Math.abs(derv.y))\r\n {\r\n if (derv.x > 0)\r\n highDrill.push(brRectHoleType.down);\r\n else\r\n highDrill.push(brRectHoleType.up);\r\n }\r\n else\r\n {\r\n if (derv.y > 0)\r\n highDrill.push(brRectHoleType.right);\r\n else\r\n highDrill.push(brRectHoleType.left);\r\n }\r\n }\r\n let types = new Set(highDrill);\r\n if (types.size === 1 && highDrill[0] !== DrillType.None)\r\n br.BoardProcessOption[EBoardKeyList.DrillType] = highDrill[0];\r\n else if (types.size > 1)\r\n br.BoardProcessOption[EBoardKeyList.DrillType] = DrillType.More;\r\n}\r\n","export enum FindModifyStyle\r\n{\r\n FuzzyQuery = 0,//模糊匹配\r\n PreciseQuery = 1, //精确匹配\r\n}\r\n","import { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { IBaseOption } from \"../../Store/OptionInterface/IOptionInterface\";\r\n\r\nexport interface IHardwareOption extends IBaseOption\r\n{\r\n name: string;\r\n unit: string;\r\n [EBoardKeyList.RoomName]: string;\r\n [EBoardKeyList.CabinetName]: string;\r\n costExpr: string;\r\n actualExpr: string;\r\n model: string;\r\n factory: string;\r\n brand: string;\r\n spec: string;\r\n comments: string;\r\n isHole: boolean;\r\n goodsId?: string;\r\n goodsSn?: string;\r\n}\r\n\r\nexport interface ICylMetalsOption extends IHardwareOption\r\n{\r\n rad: number;\r\n height: number;\r\n count: string;\r\n}\r\n\r\nexport interface IExtMetalsOption extends IHardwareOption\r\n{\r\n thickness: number;\r\n knifeRad: number;\r\n addLen: number;\r\n isHole: boolean;\r\n count: string;\r\n}\r\n\r\nexport enum EMetalsType\r\n{\r\n Metals = \"五金\",\r\n Comp = \"组件\",\r\n}\r\n\r\nexport interface ICompHardwareOption extends IHardwareOption\r\n{\r\n type: EMetalsType;\r\n isSplite: boolean;//拆解\r\n isSplitePrice: boolean;\r\n color: string;\r\n [EBoardKeyList.Mat]: string;\r\n count: string;\r\n goodsId: string;\r\n goodsSn: string;\r\n}\r\n\r\nexport interface IToplineOption extends IHardwareOption\r\n{\r\n addLen: string;\r\n}\r\n","import { FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { BoardOpenDir, ComposingType, LinesType } from \"../../DatabaseServices/Entity/BoardInterface\";\r\nimport { FindModifyStyle } from \"../Components/Board/BoardFindInterface\";\r\nimport { IBaseOption } from \"./OptionInterface/IOptionInterface\";\r\n\r\nexport const DRILL_KEYS = [\"downDrill\", \"rightDrill\", \"upDrill\", \"leftDrill\"]; //这个顺序不能变\r\nexport const SEAL_KEYS = [EBoardKeyList.UpSealed, EBoardKeyList.DownSealed, EBoardKeyList.RightSealed, EBoardKeyList.LeftSealed];\r\nexport const EDGEREMARK_KEYS = [\"edgeRemarkUp\", \"edgeRemarkDown\", \"edgeRemarkLeft\", \"edgeRemarkRight\"];\r\n\r\n\r\nexport interface IBoardFindOption extends IBaseOption\r\n{\r\n condition: IFindCondition;\r\n compareType: ICompareType;\r\n tolerance: ITolerance;\r\n // layer: string; //似乎已经没用了\r\n [EBoardKeyList.Height]: string;\r\n [EBoardKeyList.Width]: string;\r\n [EBoardKeyList.Thick]: string;\r\n [EBoardKeyList.RoomName]: string;\r\n [EBoardKeyList.CabinetName]: string;\r\n brName: string; //板名\r\n hardwareName: string; //五金实体名\r\n [EBoardKeyList.BrMat]: string; //板材\r\n [EBoardKeyList.Mat]: string;\r\n [EBoardKeyList.Color]: string;\r\n [EBoardKeyList.Lines]: LinesType;\r\n [EBoardKeyList.BigHole]: FaceDirection;\r\n [EBoardKeyList.DrillType]: string;\r\n [EBoardKeyList.ComposingFace]: ComposingType;\r\n [EBoardKeyList.OpenDir]: BoardOpenDir;\r\n [EBoardKeyList.UpSealed]: string;\r\n [EBoardKeyList.DownSealed]: string;\r\n [EBoardKeyList.LeftSealed]: string;\r\n [EBoardKeyList.RightSealed]: string;\r\n hardwareDoorName: string;\r\n highDrill: string[];\r\n upDownDrill: [boolean, boolean];\r\n isClose: boolean;\r\n remarks: [string, string][];\r\n query: FindModifyStyle;\r\n extraRemarks: [string, string][];\r\n isChaidan: boolean;\r\n [EBoardKeyList.KnifeRad]: string;\r\n edgeRemarkUp: string; //板边备注上下左右\r\n edgeRemarkDown: string;\r\n edgeRemarkLeft: string;\r\n edgeRemarkRight: string;\r\n [EBoardKeyList.SpliteHeight]: string;\r\n [EBoardKeyList.SpliteWidth]: string;\r\n [EBoardKeyList.SpliteThickness]: string;\r\n}\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 edgeRemarkUp: boolean;\r\n edgeRemarkDown: boolean;\r\n edgeRemarkLeft: boolean;\r\n edgeRemarkRight: boolean;\r\n [EBoardKeyList.SpliteHeight]: boolean;\r\n [EBoardKeyList.SpliteWidth]: boolean;\r\n [EBoardKeyList.SpliteThickness]: boolean;\r\n}\r\n\r\nexport interface ICompareType\r\n{\r\n [EBoardKeyList.Height]: ECompareType;\r\n [EBoardKeyList.Width]: ECompareType;\r\n [EBoardKeyList.Thick]: ECompareType;\r\n [EBoardKeyList.RoomName]: ECompareType;\r\n [EBoardKeyList.CabinetName]: ECompareType;\r\n brName: ECompareType;\r\n hardwareName: ECompareType;\r\n [EBoardKeyList.BrMat]: ECompareType;\r\n [EBoardKeyList.Mat]: ECompareType;\r\n [EBoardKeyList.Color]: ECompareType;\r\n [EBoardKeyList.Lines]: ECompareType;\r\n [EBoardKeyList.BigHole]: ECompareType;\r\n [EBoardKeyList.DrillType]: ECompareType;\r\n [EBoardKeyList.ComposingFace]: ECompareType;\r\n [EBoardKeyList.OpenDir]: ECompareType;\r\n [EBoardKeyList.KnifeRad]: ECompareType;\r\n edgeRemarkUp: ECompareType,\r\n edgeRemarkDown: ECompareType,\r\n edgeRemarkLeft: ECompareType,\r\n edgeRemarkRight: ECompareType,\r\n [EBoardKeyList.SpliteHeight]: ECompareType;\r\n [EBoardKeyList.SpliteWidth]: ECompareType;\r\n [EBoardKeyList.SpliteThickness]: ECompareType;\r\n}\r\nexport interface ITolerance\r\n{\r\n [EBoardKeyList.Height]: string;\r\n [EBoardKeyList.Width]: string;\r\n [EBoardKeyList.Thick]: string;\r\n [EBoardKeyList.KnifeRad]: string;\r\n [EBoardKeyList.SpliteHeight]: string;\r\n [EBoardKeyList.SpliteWidth]: string;\r\n [EBoardKeyList.SpliteThickness]: string;\r\n}\r\n\r\nexport enum EFindType\r\n{\r\n Find = 0,\r\n Modify = 1,\r\n FindMaxSize = 2,\r\n FindSplite = 3,\r\n GetOption = 4,\r\n RemoveModeling = 5,\r\n RemoveSpecialShape = 6,\r\n RemoveModelingAndSpecial = 7,\r\n ModifyHardware = 8,\r\n FindMinSize = 9,\r\n GetHardWareOption = 10,\r\n RemoveSplitSize = 11, //去除拆单尺寸\r\n}\r\n\r\nexport enum ECompareType\r\n{\r\n Equal = \"=\",\r\n UnEqual = \"!=\",\r\n Greater = \">=\",\r\n Less = \"<=\",\r\n Include = \"//\", //模糊匹配\r\n Prefix = \"前缀\",\r\n Suffix = \"后缀\",\r\n}\r\n","import { IBaseOption, IHightDrillOption } from \"./OptionInterface/IOptionInterface\";\r\nimport { ITemplateParam } from \"./RightPanelStore/ITemplateParam\";\r\n\r\nexport interface IDoorAndDrawerConfigOption extends IBaseOption\r\n{\r\n col: number;\r\n row: number;\r\n isAllSelect: boolean; //是否行列全选\r\n topOffset: number; //上留空\r\n bottomOffset: number; //下留空\r\n doorPosType: DoorPosType;\r\n offset: number; //内偏移\r\n topExt: number;//上延申\r\n bottomExt: number;//下延申\r\n leftExt: number;//左延申\r\n rightExt: number;//右延申\r\n topSpace: number; //上预留间隙\r\n bottomSpace: number;//下预留间隙\r\n leftSpace: number;//左预留间隙\r\n rightSpace: number;//右预留间隙\r\n midSpace: number;//中预留间隙\r\n verticalBoardName: string; //立板名称\r\n thickness: number; //立板厚度\r\n depth: number; //立板深度\r\n isAuto: boolean; //智能识别\r\n isFloor50?: boolean; //取整50倍(因为Door不需要该属性故为可选)\r\n boardName: string; //柜名\r\n handleAngle: number; //拉手\r\n handleHorPos: HandleHorPos; //水平位置距离\r\n horSpacing: number;\r\n handleVePos: HandleVePos; // 垂直位置距离\r\n veSpacing: number;\r\n upOffsetExpr: string;\r\n downOffsetExpr: string;\r\n lbSealedUp: number;//立板封边上下左右\r\n lbSealedDown: number;\r\n lbSealedLeft: number;\r\n lbSealedRight: number;\r\n lbHightDrillOption: IHightDrillOption; //立板高级排钻\r\n useBoardProcessOption?: boolean; //使用周围板件数据\r\n isModifyHardwareMaterial: boolean; //使用周围板件数据时五金是否应用\r\n boardMatName: string;//板材名\r\n material: string;//材料\r\n color: string;//颜色\r\n roomName: string;//房名\r\n cabinetName: string;//柜名\r\n}\r\n\r\n/**\r\n * 门板数据接口\r\n */\r\nexport interface IDoorConfigOption extends IDoorAndDrawerConfigOption\r\n{\r\n doorThickness: number; //门板厚度\r\n topBrSeal: number; //层板封边\r\n bottomBrSeal: number;\r\n leftBrSeal: number;\r\n rightBrSeal: number;\r\n topDoorSeal: number; //门板封边\r\n bottomDoorSeal: number;\r\n leftDoorSeal: number;\r\n rightDoorSeal: number;\r\n hingeCount: number; //铰链\r\n hindeTopDist: number;\r\n hindeBottomDist: number;\r\n useRule: boolean;\r\n changeTemplateBoardNameOfOpenDir: boolean;//使用模块时,修改板件名称\r\n frontAndBackDrill: boolean; //正反面排孔\r\n layerBoardName: string;\r\n cbHightDrillOption: IHightDrillOption; //层板高级排钻\r\n deviation: number; //铰链碰撞单次偏移量\r\n verticalEdgeRemarkUp: string; //立板板边备注上下左右\r\n verticalEdgeRemarkDown: string;\r\n verticalEdgeRemarkLeft: string;\r\n verticalEdgeRemarkRight: string;\r\n layerEdgeRemarkUp: string; //层板板边备注上下左右\r\n layerEdgeRemarkDown: string;\r\n layerEdgeRemarkLeft: string;\r\n layerEdgeRemarkRight: string;\r\n parseHinge: boolean;//铰链信息写入门板备注\r\n}\r\n\r\n/**\r\n * 铰链数据接口\r\n */\r\nexport interface IHingeConfigOption extends IBaseOption\r\n{\r\n hingeCount: number; //铰链\r\n hindeTopDist: number;\r\n hindeBottomDist: number;\r\n useRule: boolean;\r\n deviation: number; //铰链碰撞单次偏移量\r\n parseHinge: boolean;\r\n}\r\n\r\n/**\r\n * 抽屉数据接口\r\n */\r\nexport interface IDrawerConfigOption extends IDoorAndDrawerConfigOption\r\n{\r\n drawerTotalDepth: number; //抽屉总深\r\n trackDepth: number; //轨道深度\r\n isAutoSelectTrack: boolean;\r\n isLockTopOffset: boolean;\r\n isLockBottomOffset: boolean;\r\n}\r\n\r\n//门板位置类型\r\nexport enum DoorPosType\r\n{\r\n Out = 0, //外盖\r\n In = 1,\r\n}\r\n\r\nexport enum HandleHorPos\r\n{\r\n Left = 0,\r\n Right = 1,\r\n Mid = 2,\r\n}\r\nexport enum HandleVePos\r\n{\r\n Top = 0,\r\n Bottom = 1,\r\n Mid = 2,\r\n}\r\n//门板开门类型\r\nexport enum DoorOpenDir\r\n{\r\n Left = \"lf\",\r\n Right = \"rt\",\r\n Top = \"tp\",\r\n Bottom = \"bm\",\r\n None = \"none\",\r\n}\r\n\r\n//抽屉门板信息\r\nexport interface IDrawerInfo extends IBaseOption\r\n{\r\n row: number,\r\n col: number,\r\n divWidth: number, //预览UI尺寸\r\n divHeight: number,\r\n showWidth: string, //UI展示数据\r\n showHeight: string,\r\n width: number, //门板计算尺寸\r\n height: number,\r\n isLockWidth: boolean,\r\n isLockHeight: boolean,\r\n isSelect: boolean;\r\n tempInfo: ISelectTempInfo;\r\n marginRight?: number;\r\n}\r\n\r\nexport interface IDoorInfo extends IDrawerInfo\r\n{\r\n openDir: DoorOpenDir,\r\n\r\n isDrawLayer: boolean;\r\n isDrawVer: boolean;\r\n}\r\n\r\nexport interface IDrawerDoorTempInfo\r\n{\r\n name: string;\r\n id: string;\r\n logo?: string;\r\n props?: ITemplateParam[];\r\n title?: string;\r\n isHandle?: boolean;\r\n isHinge?: boolean;\r\n tagName?: string;\r\n isKuGan?: boolean;\r\n diy_logo?: string;\r\n}\r\n\r\nexport interface IWindowTempInfo\r\n{\r\n logo?: string;\r\n}\r\n\r\n/**选择的模板信息,temp-抽屉或门板,handletemp-拉手模板,windowTemp-窗户模板,其他是铰链模板 */\r\nexport interface ISelectTempInfo\r\n{\r\n temp: IDrawerDoorTempInfo;\r\n handleTemp?: IDrawerDoorTempInfo;\r\n hingeTemp?: IDrawerDoorTempInfo;\r\n [key: string]: IDrawerDoorTempInfo;\r\n}\r\n\r\n/**抽屉一定要有的参数 */\r\nexport const DrawerTempParName = [\"ZYS\", \"YYS\", \"SYS\", \"XYS\"];\r\n/**禁止改的属性 */\r\nexport const DisableChangeParName = [\"L\", \"W\", \"H\", \"ZYS\", \"YYS\", \"SYS\", \"XYS\", \"ZG\", \"YG\", \"SG\", \"XG\"];\r\n\r\n/**门板需要的参数 */\r\nexport const DoorNeedParamNames = [\"L\", \"W\", \"H\", \"PX\", \"PY\", \"PZ\", \"RX\", \"RY\", \"RZ\", \"SG\", \"XG\", \"ZG\", \"YG\", \"XBH\", \"BH\"];\r\n","import { IBaseOption } from \"./OptionInterface/IOptionInterface\";\r\n\r\nexport enum ELatticeArrayType\r\n{\r\n ByWidth = 0,\r\n ByCount = 1,\r\n}\r\n\r\nexport interface ILatticeOption extends IBaseOption\r\n{\r\n arrayType: ELatticeArrayType;\r\n gripWidth: number;\r\n gripDepth: number;\r\n widthCount: number;\r\n depthCount: number;\r\n knifeRad: number,\r\n thickness: number,\r\n arcLen: number;\r\n downDist: number;\r\n space: number; //四周间隙\r\n grooveAddWidth: number; //齿加宽\r\n upSealed: number;\r\n downSealed: number;\r\n leftSealed: number;\r\n rightSealed: number;\r\n isAuto: boolean; //自动识别弧长\r\n isChange: boolean; //左右侧板跟随变化\r\n isOpenCut: boolean;\r\n upCut: number;\r\n downCut: number;\r\n linesType: number; //纹路\r\n useBoardProcessOption?: boolean; //使用周围的板件数据\r\n boardMatName: string;//板材名\r\n material: string;//材料\r\n color: string;//颜色\r\n roomName: string;//房名\r\n cabinetName: string;//柜名\r\n}\r\n","import { IBaseOption } from \"./IOptionInterface\";\r\n\r\nexport enum ForBoardNameType\r\n{\r\n Same = \"same\",\r\n NoSame = \"nosame\",\r\n Include = \"include\",\r\n NoInclude = \"noinclude\"\r\n}\r\n\r\nexport interface IAutoDimBrsOption extends IBaseOption\r\n{\r\n total: boolean; //整体标注\r\n out: boolean; //柜外标注(前视图标注)\r\n inW: boolean; //柜内宽标注\r\n inH: boolean; //柜内高标注\r\n noRepeat: boolean; //删除重复\r\n noSmSize: boolean; //过滤小尺寸\r\n noAppointSize: boolean; //过滤指定尺寸\r\n noInSize: boolean; //空间小于该数值时 不标注内空\r\n noShowMinSize: number;\r\n noShowMinInSize: number;\r\n noShowAppointSizes: string;\r\n useParseGroups: string;\r\n forBoardName: boolean;\r\n forBoardNameStr: string;\r\n forBoardNameType: ForBoardNameType;\r\n}\r\n\r\nexport interface IFastDimOption extends IBaseOption\r\n{\r\n filterSmallSize: boolean; //过滤小尺寸\r\n filterSmallSizeValue: number; //过滤小尺寸值\r\n filterAppointSize: boolean; //过滤指定尺寸\r\n filterAppointSizeValues: string;//过滤指定尺寸的值\r\n filterAppointForBoardName: boolean;///根据板名过滤\r\n conditionType: ForBoardNameType; //根据板名过滤条件\r\n filterAppointForBoardNameValues: string;//根据板名过滤的值\r\n}\r\n","import { IBaseOption } from \"./IOptionInterface\";\r\n\r\nexport enum CurtailType\r\n{\r\n PerBr = \"0\",\r\n Total = \"1\",\r\n OCS = \"2\"\r\n}\r\n\r\nexport interface IBoardBatchCurtailOption extends IBaseOption\r\n{\r\n type: CurtailType;\r\n front: number;\r\n back: number;\r\n left: number;\r\n right: number;\r\n moveBrs: boolean;\r\n}\r\n","import { BrRelativePos } from \"../../../DatabaseServices/Entity/BoardInterface\";\r\nimport { BoardConfigOption } from \"./IOptionInterface\";\r\n\r\nexport enum StripType\r\n{\r\n H = \"h\",\r\n V = \"v\"\r\n}\r\n\r\nexport interface ClosingStripOption extends BoardConfigOption\r\n{\r\n boardRelative: BrRelativePos;\r\n striptype: StripType; //收口条类型\r\n frontShrink: number; //前缩\r\n isDrawFuZhu: boolean; //是否绘制辅助条\r\n fzWidth: number;\r\n fzThickness: number;\r\n addSKTCabinetName: boolean; //柜名加收口名称\r\n brName: string;//收口条板名 name被辅助条占用\r\n FuZhuType: StripType;//辅助条类型\r\n fuZhuBrName: string;//辅助条板材名\r\n fuZhuMaterial: string;//辅助条材料\r\n fuZhuColor: string;//辅助条颜色\r\n}\r\n","/**\r\n *背板靠上还是靠下\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\nexport enum BehindHeightPositon\r\n{\r\n ForTop = \"top\",\r\n ForBottom = \"bottom\",\r\n AllHeight = \"all\" //总高\r\n}\r\n/**\r\n *板件相对位置\r\n *\r\n * @export\r\n * @enum {number}\r\n */\r\n\r\nexport enum ViewDirection\r\n{\r\n Left = 1,\r\n Right = 2,\r\n Up = 3,\r\n Front = 4,\r\n Bottom = 5,\r\n Back = 6,\r\n Southwest = 7\r\n}\r\n\r\nexport enum ViewportPosition\r\n{\r\n Vertical = \"vertical\",\r\n Horizontal = \"horizontal\",\r\n Left = \"left\",\r\n Right = \"right\",\r\n Bottom = \"bottom\",\r\n Top = \"top\"\r\n}\r\n\r\nexport enum RadioType\r\n{\r\n lefttop = \"1\",\r\n leftbottom = \"2\",\r\n righttop = \"3\",\r\n rightbottom = \"4\"\r\n}\r\n","import { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { IBaseOption } from \"./OptionInterface/IOptionInterface\";\r\n\r\nexport enum EWineRackType\r\n{\r\n Oblique = 0,\r\n Upright = 1,\r\n}\r\n\r\n/**酒格样式 */\r\nexport enum EWineRackStyle\r\n{\r\n WholeLattice = 0,//全格优先\r\n Semilattice = 1, //半格优先\r\n}\r\n\r\nexport enum EWRackArrayType\r\n{\r\n ByWidth = 0,\r\n ByCount = 1,\r\n Fixed = 2, //固定\r\n}\r\n\r\n/**铺满方式 */\r\nexport enum EFullType\r\n{\r\n ByHeight = 0,\r\n ByWidth = 1,\r\n Symmetry = 2,\r\n}\r\n\r\n/**高度优先时靠左还是靠右 */\r\nexport enum EFullDir\r\n{\r\n Left = 0,\r\n Right = 1,\r\n}\r\n\r\nexport interface IWineRackOption extends IBaseOption\r\n{\r\n type: EWineRackType;\r\n wineRackStyle: EWineRackStyle,\r\n arrayType: EWRackArrayType;\r\n fullType: EFullType;\r\n isFull: boolean;\r\n fullDir: EFullDir;\r\n isLock: boolean;\r\n heightCount: number;\r\n widthCount: number;\r\n isTotalDepth: boolean;\r\n depth: number; //格子深\r\n calcDepth: string;\r\n gripWidth: number; //格子宽度\r\n boardThick: number;\r\n grooveWidthAdd: number;\r\n leftEdge: number;\r\n rightEdge: number;\r\n topEdge: number;\r\n bottomEdge: number;\r\n frontCut: number;\r\n leftCut: number;\r\n rightCut: number;\r\n topCut: number;\r\n grooveLengthAdd: number;\r\n isDrawLy: boolean;\r\n isDrawVer: boolean;\r\n brThick2: number; //补板厚\r\n isExtendsBH2: boolean;//是否继承\r\n followNarrow: boolean;//酒格补板前缩跟随\r\n useBoardProcessOption?: boolean; //使用周围的板件数据\r\n boardMatName: string;//板材名\r\n material: string;//材料\r\n color: string;//颜色\r\n roomName: string;//房名\r\n cabinetName: string;//柜名\r\n}\r\n\r\nexport interface IR2WROption\r\n{\r\n depth: number;\r\n addLen: number;\r\n knifeRadius: number;\r\n [EBoardKeyList.UpSealed]: number;\r\n [EBoardKeyList.DownSealed]: number;\r\n [EBoardKeyList.LeftSealed]: number;\r\n [EBoardKeyList.RightSealed]: number;\r\n}\r\n","export enum EOrderType\r\n{\r\n ByCreate = \"create_date desc\",\r\n ByCreate2 = \"create_date\",\r\n ByUpdate = \"update_date desc\",\r\n ByUpdate2 = \"update_date\",\r\n ByName = \"name\",\r\n ByName2 = \"name desc\",\r\n}\r\n","import { FaceDirection } from \"../Add-on/DrawDrilling/DrillType\";\r\nimport { 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 { SpaceParseOption } from \"../Geometry/SpaceParse/SpaceParseOption\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { FindModifyStyle } from \"../UI/Components/Board/BoardFindInterface\";\r\nimport { IUpdateBoardInfosOption } from \"../UI/Components/Board/UpdateBoardInfointerface\";\r\nimport { EMetalsType, ICompHardwareOption, ICylMetalsOption, IExtMetalsOption, IToplineOption } from \"../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { IKuGangDrawOption } from \"../UI/Components/Template/TemplateInterface\";\r\nimport { ECompareType, IBoardFindOption } from \"../UI/Store/BoardFindInterface\";\r\nimport { DoorPosType, HandleHorPos, HandleVePos, IDoorConfigOption, IDrawerConfigOption, IHingeConfigOption } from \"../UI/Store/DoorInterface\";\r\nimport { IHSOption } from \"../UI/Store/HSInterface\";\r\nimport { ELatticeArrayType, ILatticeOption } from \"../UI/Store/LatticeInterface\";\r\nimport { ForBoardNameType, IAutoDimBrsOption, IFastDimOption } from \"../UI/Store/OptionInterface/AutoDimBrsOption\";\r\nimport { CurtailType, IBoardBatchCurtailOption } from \"../UI/Store/OptionInterface/BoardBatchCurtailOption \";\r\nimport { BoardProcessOption } from \"../UI/Store/OptionInterface/BoardProcessOption\";\r\nimport { BulkheadCeilingOption } from \"../UI/Store/OptionInterface/BulkheadCeilingOption\";\r\nimport { ClosingStripOption, StripType } from \"../UI/Store/OptionInterface/ClosingStripOption\";\r\nimport { BehindBoardOption, BoardConfigOption, ChangeColorByBoardMaterialOption, ChangeColorByRoomOrCabinetOption, CommonPanelConfigOption, DatalistConfigOption, DoorRelatesInfoOption, IArcBoardGrooveOption, IBatchModifyPanelOption, IDimStyleOption, LayerBoardOption, LayerNailOption, ModifyTextsConfigOption, OneClickInspectionOption, RightPlaneLightOption, ShareBoardInfConfigurationOption, SideBoardOption, SingleBoardOption, TBBoardOption, VerticalBoardOption, WindowPanelConfigOption } from \"../UI/Store/OptionInterface/IOptionInterface\";\r\nimport { PointLightOption, RectAreaLightOption, SpotLightOption } from \"../UI/Store/OptionInterface/LightConfigOption\";\r\nimport { BehindHeightPositon, RadioType, ViewDirection, ViewportPosition } from \"../UI/Store/OptionInterface/OptionEnum\";\r\nimport { Viewport2ConfigOption, Viewport3ConfigOption, Viewport4ConfigOption, ViewportConfigOption } from \"../UI/Store/OptionInterface/ViewportConfigOption\";\r\nimport { EFullDir, EFullType, EWRackArrayType, EWineRackStyle, EWineRackType, IWineRackOption } from \"../UI/Store/WineRackInterface\";\r\nimport { EOrderType } from \"./OrderType\";\r\n\r\nexport const DefaultLayerBoardConfig: LayerBoardOption = {\r\n version: 4,\r\n type: BoardType.Layer,\r\n name: \"层板\",\r\n frontShrink: 0,\r\n leftShrink: 0,\r\n rightShrink: 0,\r\n calcHeight: \"W\",\r\n isTotalLength: true,\r\n boardRelative: BrRelativePos.Div,\r\n thickness: 18,\r\n count: 1,\r\n spaceSize: 300,\r\n isActive: false,\r\n calcSpaceSize: \"0\",\r\n calcFrontShrink: \"0\",\r\n calcLeftShrink: \"0\",\r\n calcRightShrink: \"0\",\r\n exprCount: \"1\",\r\n exprThickness: \"18\"\r\n};\r\nObject.freeze(DefaultLayerBoardConfig);\r\n\r\nexport const DefaultVerticalBoardConfig: VerticalBoardOption = {\r\n version: 4,\r\n type: BoardType.Vertical,\r\n name: \"立板\",\r\n frontShrink: 0,\r\n bottomShrink: 0,\r\n calcWidth: \"W\",\r\n calcHeight: \"H\",\r\n isTotalLength: true,\r\n isTotalWidth: true,\r\n boardRelative: BrRelativePos.Div,\r\n thickness: 18,\r\n count: 1,\r\n spaceSize: 0,\r\n calcSpaceSize: \"0\",\r\n calcBottomShrink: \"0\",\r\n calcFrontShrink: \"0\",\r\n exprCount: \"1\",\r\n exprThickness: \"18\"\r\n};\r\nObject.freeze(DefaultVerticalBoardConfig);\r\n\r\nexport const DefaultBehindBoardConfig: BehindBoardOption = {\r\n version: 3,\r\n type: BoardType.Behind,\r\n name: \"背板\",\r\n leftExt: 0,\r\n rightExt: 0,\r\n topExt: 0,\r\n bottomExt: 0,\r\n thickness: 18,\r\n boardPosition: BehindHeightPositon.AllHeight,\r\n calcHeight: \"H\",\r\n moveDist: 0,\r\n boardRelative: BrRelativePos.Back,\r\n spaceSize: 0,\r\n count: 1,\r\n calcSpaceSize: \"0\",\r\n calcMoveDist: \"0\",\r\n exprCount: \"1\",\r\n exprThickness: \"18\"\r\n};\r\nObject.freeze(DefaultBehindBoardConfig);\r\n\r\nexport const DefaultWineRackConfig: IWineRackOption = {\r\n version: 6,\r\n type: EWineRackType.Oblique,\r\n wineRackStyle: EWineRackStyle.WholeLattice,\r\n arrayType: EWRackArrayType.ByWidth,\r\n fullType: EFullType.ByWidth,\r\n isFull: false,\r\n isLock: false,\r\n fullDir: EFullDir.Left,\r\n heightCount: 3.5,\r\n widthCount: 3.5,\r\n isTotalDepth: true,\r\n depth: 0,\r\n gripWidth: 100,\r\n calcDepth: \"W\",\r\n boardThick: 18,\r\n grooveWidthAdd: 0,\r\n leftEdge: 1,\r\n rightEdge: 1,\r\n topEdge: 1,\r\n bottomEdge: 1,\r\n frontCut: 0,\r\n leftCut: 0,\r\n rightCut: 0,\r\n topCut: 0,\r\n grooveLengthAdd: 3,\r\n isDrawLy: false,\r\n isDrawVer: false,\r\n brThick2: 18,\r\n isExtendsBH2: false,\r\n followNarrow: false,\r\n useBoardProcessOption: true,\r\n boardMatName: \"\",//板材名\r\n material: \"\",//材料\r\n color: \"\",//颜色\r\n roomName: \"\",//房名\r\n cabinetName: \"\",//柜名\r\n};\r\nObject.freeze(DefaultWineRackConfig);\r\n\r\nexport const DefaultTopBoardOption: TBBoardOption = {\r\n version: 2,\r\n type: BoardType.Layer,\r\n name: \"顶板\",\r\n isDraw: true,\r\n thickness: 18,\r\n frontDist: 0,\r\n behindDistance: 0,\r\n isWrapSide: false,\r\n useLFData: true,\r\n leftExt: 0,\r\n rightExt: 0,\r\n offset: 0,\r\n};\r\nObject.freeze(DefaultTopBoardOption);\r\n\r\nexport const DefaultBottomBoardOption: TBBoardOption = {\r\n version: 3,\r\n type: BoardType.Layer,\r\n name: \"底板\",\r\n isDraw: true,\r\n thickness: 18,\r\n frontDist: 0,\r\n behindDistance: 0,\r\n isWrapSide: false,\r\n useLFData: true,\r\n leftExt: 0,\r\n rightExt: 0,\r\n offset: 80,\r\n footThickness: 18,\r\n isDrawFooter: true,\r\n footBehindShrink: 0,\r\n isDrawBackFooter: false,\r\n isDrawStrengthenStrip: false,\r\n footerOffset: 0,\r\n divCount: 1,\r\n bigHoleDir: FaceDirection.Front,\r\n};\r\nObject.freeze(DefaultBottomBoardOption);\r\n\r\n\r\nexport const DefaultSideBoardOption: SideBoardOption = {\r\n version: 2,\r\n type: BoardType.Vertical,\r\n name: \"\",\r\n height: 2000,\r\n width: 600,\r\n thickness: 18,\r\n spaceSize: 1200,\r\n leftShrink: 0,\r\n rightShrink: 0,\r\n};\r\nObject.freeze(DefaultSideBoardOption);\r\n\r\nexport const DefaultViewportConfigOption: ViewportConfigOption = {\r\n view: ViewDirection.Up,\r\n renderType: RenderType.Print,\r\n revertRotation: false\r\n};\r\nObject.freeze(DefaultViewportConfigOption);\r\n\r\nexport const DefaultViewport2ConfigOption: Viewport2ConfigOption = {\r\n viewportPosition: ViewportPosition.Vertical,\r\n renderType: [RenderType.Print, RenderType.Print],\r\n view1: ViewDirection.Left,\r\n view2: ViewDirection.Up,\r\n revertRotation: false\r\n};\r\nObject.freeze(DefaultViewport2ConfigOption);\r\n\r\nexport const DefaultViewport3ConfigOption: Viewport3ConfigOption = {\r\n viewportPosition: ViewportPosition.Vertical,\r\n renderType: [RenderType.Print, RenderType.Print, RenderType.Print],\r\n view: [ViewDirection.Front, ViewDirection.Up, ViewDirection.Southwest],\r\n revertRotation: false\r\n};\r\nObject.freeze(DefaultViewport3ConfigOption);\r\n\r\nexport const DefaultViewport4ConfigOption: Viewport4ConfigOption = {\r\n view: [ViewDirection.Front, ViewDirection.Left, ViewDirection.Up, ViewDirection.Southwest],\r\n renderType: [RenderType.Print, RenderType.Print, RenderType.Print, RenderType.Print],\r\n revertRotation: false\r\n};\r\nObject.freeze(DefaultViewport4ConfigOption);\r\n\r\nexport const DefaultModifyTextsOption: ModifyTextsConfigOption = {\r\n changeTexts: Array.from({ length: 5 }, () => [\"\", \"\"]),\r\n};\r\nObject.freeze(DefaultModifyTextsOption);\r\n\r\n\r\nexport const DefaultPointLightOption: PointLightOption = {\r\n version: 1,\r\n lightColor: \"#FFFFFF\",\r\n temperature: 6500,\r\n Intensity: 100,\r\n IndirectLightingIntensity: 3,\r\n SpecularScale: 1,\r\n SourceRadius: 10,\r\n SoftSourceRadius: 0,\r\n SourceLength: 0,\r\n CaseShadow: true,\r\n};\r\nObject.freeze(DefaultPointLightOption);\r\n\r\nexport const DefaultSpotLightOption: SpotLightOption = {\r\n version: 1,\r\n lightColor: \"#FFFFFF\",\r\n temperature: 6500,\r\n Intensity: 100,\r\n IndirectLightingIntensity: 3,\r\n SpecularScale: 1,\r\n SourceRadius: 10,\r\n SoftSourceRadius: 30,\r\n SourceLength: 0,\r\n Angle: 45,\r\n InnerConeAngle: 30,\r\n AttenuationRadius: 300,\r\n CaseShadow: true,\r\n ShowHelper: true,\r\n};\r\nObject.freeze(DefaultSpotLightOption);\r\n\r\nexport const DefaultRectAreaLightOption: RectAreaLightOption = {\r\n version: 1,\r\n lightColor: \"#FFFFFF\",\r\n temperature: 6500,\r\n Intensity: 100,\r\n IndirectLightingIntensity: 3,\r\n SpecularScale: 1,\r\n AttenuationRadius: 300,\r\n Width: 150,\r\n Height: 150,\r\n BarnDoorAngle: 90,\r\n BarnDoorLength: 20,\r\n CaseShadow: true,\r\n ShowHelper: true,\r\n};\r\nObject.freeze(DefaultRectAreaLightOption);\r\n\r\nexport const DefaultRightPlaneLightOption: RightPlaneLightOption = {\r\n version: 3,\r\n ShowHemiLight: true,\r\n ShowSunLight: true,\r\n SkyLightColor: \"#FFFFFF\",\r\n SkyLightIntensity: 1,\r\n SkyLightIndirectLightingIntensity: 3,\r\n SunLightIntensity: 50,\r\n SunLightIndirectLightingIntensity: 3,\r\n SunLightColor: \"#FFFFFF\",\r\n SunLightTemperature: 6500,\r\n SunLightElevationDeg: 60,\r\n SunLightRotateDeg: 300,\r\n SunLightSourceAngle: 0.5,\r\n ShowExposure: true,\r\n AutoExposure: false,\r\n ExposureCompensation: 0,\r\n SunTime: \"默认\",\r\n};\r\nObject.freeze(DefaultRightPlaneLightOption);\r\n\r\nexport const DefaultArcBoardOption: BoardConfigOption = {\r\n version: 1,\r\n name: \"圆弧板\",\r\n type: BoardType.Layer,\r\n height: 1200,\r\n thickness: 18,\r\n};\r\nObject.freeze(DefaultArcBoardOption);\r\n\r\nexport const DefaultSingleBoardOption: SingleBoardOption = {\r\n version: 1,\r\n name: \"层板\",\r\n type: BoardType.Layer,\r\n height: 1200,\r\n width: 600,\r\n thickness: 18,\r\n rotateX: 0,\r\n rotateY: 0,\r\n rotateZ: 0,\r\n drawNumber: 1\r\n};\r\nObject.freeze(DefaultSingleBoardOption);\r\n\r\nexport const DefaultClosingStripOption: ClosingStripOption = {\r\n version: 6,\r\n type: BoardType.Vertical,\r\n name: \"收口条\", //辅助条占用\r\n striptype: StripType.H,\r\n boardRelative: BrRelativePos.Left,\r\n width: 54,\r\n thickness: 18,\r\n frontShrink: 0,\r\n isDrawFuZhu: true,\r\n fzWidth: 80,\r\n fzThickness: 18,\r\n addSKTCabinetName: true,\r\n brName: \"左收口条\",\r\n FuZhuType: StripType.V,\r\n fuZhuBrName: '',\r\n fuZhuMaterial: '',\r\n fuZhuColor: '',\r\n};\r\nObject.freeze(DefaultClosingStripOption);\r\n\r\nexport const DefaultBoardFindOption: IBoardFindOption = {\r\n version: 12,\r\n condition: {\r\n // layer: false, //这个KEY看起来没用了\r\n height: false,\r\n width: false,\r\n thickness: false,\r\n useWood: false,\r\n useDrill: false,\r\n useNail: false,\r\n useDoor: false,\r\n useDim: false,\r\n useSpecial: false,\r\n useModeling: false,\r\n roomName: false,\r\n hardwareName: false,\r\n cabinetName: false,\r\n brName: false,\r\n material: false,\r\n lines: false,\r\n bigHoleDir: false,\r\n drillType: false,\r\n useKeyWord: false,\r\n addRemarks: false,\r\n composingFace: false,\r\n openDir: false,\r\n sealedUp: false,\r\n sealedDown: false,\r\n sealedLeft: false,\r\n sealedRight: false,\r\n upDrill: false,\r\n downDrill: false,\r\n leftDrill: false,\r\n rightDrill: false,\r\n useZhengFanDrill: false,\r\n useChaidan: false,\r\n [EBoardKeyList.KnifeRad]: false,\r\n edgeRemarkUp: false,\r\n edgeRemarkDown: false,\r\n edgeRemarkLeft: false,\r\n edgeRemarkRight: false,\r\n [EBoardKeyList.SpliteHeight]: false,\r\n [EBoardKeyList.SpliteWidth]: false,\r\n [EBoardKeyList.SpliteThickness]: false,\r\n },\r\n compareType: {\r\n height: ECompareType.Equal,\r\n width: ECompareType.Equal,\r\n thickness: ECompareType.Equal,\r\n roomName: ECompareType.Equal,\r\n cabinetName: ECompareType.Equal,\r\n brName: ECompareType.Equal,\r\n hardwareName: ECompareType.Equal,\r\n [EBoardKeyList.Mat]: ECompareType.Equal,\r\n [EBoardKeyList.Color]: ECompareType.Equal,\r\n [EBoardKeyList.BrMat]: ECompareType.Equal,\r\n lines: ECompareType.Equal,\r\n bigHoleDir: ECompareType.Equal,\r\n drillType: ECompareType.Equal,\r\n composingFace: ECompareType.Equal,\r\n openDir: ECompareType.Equal,\r\n [EBoardKeyList.KnifeRad]: ECompareType.Equal,\r\n edgeRemarkUp: ECompareType.Equal,\r\n edgeRemarkDown: ECompareType.Equal,\r\n edgeRemarkLeft: ECompareType.Equal,\r\n edgeRemarkRight: ECompareType.Equal,\r\n [EBoardKeyList.SpliteHeight]: ECompareType.Equal,\r\n [EBoardKeyList.SpliteWidth]: ECompareType.Equal,\r\n [EBoardKeyList.SpliteThickness]: ECompareType.Equal,\r\n\r\n },\r\n tolerance: {\r\n height: \"\",\r\n width: \"\",\r\n thickness: \"\",\r\n [EBoardKeyList.KnifeRad]: \"\",\r\n [EBoardKeyList.SpliteHeight]: \"\",\r\n [EBoardKeyList.SpliteWidth]: \"\",\r\n [EBoardKeyList.SpliteThickness]: \"\",\r\n },\r\n // layer: \"0\", 删除无用的key\r\n height: \"\",\r\n width: \"\",\r\n thickness: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n brName: \"\",\r\n hardwareName: \"\",\r\n [EBoardKeyList.BrMat]: \"\",\r\n material: \"\",\r\n color: \"\",\r\n lines: LinesType.Positive,\r\n bigHoleDir: FaceDirection.Front,\r\n drillType: \"\",\r\n composingFace: ComposingType.Positive,\r\n openDir: BoardOpenDir.None,\r\n hardwareDoorName: \"\",\r\n sealedUp: \"\",\r\n sealedDown: \"\",\r\n sealedLeft: \"\",\r\n sealedRight: \"\",\r\n highDrill: [],\r\n upDownDrill: [true, true],\r\n isClose: false,\r\n remarks: Array.from({ length: 10 }, () => [\"\", \"\"]),\r\n extraRemarks: Array.from({ length: 10 }, () => [\"\", \"\"]),\r\n isChaidan: false,\r\n [EBoardKeyList.KnifeRad]: \"\",\r\n edgeRemarkUp: \"\",\r\n edgeRemarkDown: \"\",\r\n edgeRemarkLeft: \"\",\r\n edgeRemarkRight: \"\",\r\n query: FindModifyStyle.FuzzyQuery,\r\n [EBoardKeyList.SpliteHeight]: \"\",\r\n [EBoardKeyList.SpliteWidth]: \"\",\r\n [EBoardKeyList.SpliteThickness]: \"\",\r\n};\r\nObject.freeze(DefaultBoardFindOption);\r\n\r\nexport const DefaultLatticOption: ILatticeOption = {\r\n version: 4,\r\n arrayType: ELatticeArrayType.ByWidth,\r\n gripWidth: 100,\r\n gripDepth: 100,\r\n widthCount: 3,\r\n depthCount: 4,\r\n knifeRad: 3,\r\n thickness: 18,\r\n arcLen: 50,\r\n downDist: 0,\r\n space: 0.2,\r\n grooveAddWidth: 0.2,\r\n upSealed: 1,\r\n downSealed: 1,\r\n leftSealed: 1,\r\n rightSealed: 1,\r\n isAuto: true,\r\n isChange: true,\r\n isOpenCut: false,\r\n upCut: 0,\r\n downCut: 4,\r\n linesType: LinesType.Reverse,\r\n useBoardProcessOption: true,\r\n boardMatName: \"\",//板材名\r\n material: \"\",//材料\r\n color: \"\",//颜色\r\n roomName: \"\",//房名\r\n cabinetName: \"\",//柜名\r\n};\r\nObject.freeze(DefaultLatticOption);\r\n\r\nexport const DefaultDoorOption: IDoorConfigOption = {\r\n version: 12,\r\n col: 2,\r\n row: 1,\r\n isAllSelect: true,\r\n topOffset: 0,\r\n bottomOffset: 0,\r\n doorPosType: DoorPosType.Out,\r\n offset: 0,\r\n topExt: 18,\r\n bottomExt: 18,\r\n leftExt: 18,\r\n rightExt: 18,\r\n topSpace: 2,\r\n bottomSpace: 2,\r\n leftSpace: 2,\r\n rightSpace: 2,\r\n midSpace: 2,\r\n thickness: 18,\r\n depth: 0,\r\n isAuto: true,\r\n boardName: \"\",\r\n doorThickness: 18,\r\n topBrSeal: 1,\r\n bottomBrSeal: 1,\r\n leftBrSeal: 1,\r\n rightBrSeal: 1,\r\n topDoorSeal: 1,\r\n bottomDoorSeal: 1,\r\n cbHightDrillOption: { up: \"\", down: \"\", left: \"\", right: \"\" },\r\n leftDoorSeal: 1,\r\n rightDoorSeal: 1,\r\n handleAngle: 0,\r\n handleHorPos: HandleHorPos.Right,\r\n horSpacing: 50,\r\n handleVePos: HandleVePos.Mid,\r\n veSpacing: 10,\r\n hingeCount: 0,\r\n hindeTopDist: 0,\r\n hindeBottomDist: 0,\r\n downOffsetExpr: \"0\",\r\n upOffsetExpr: \"0\",\r\n useRule: false,\r\n changeTemplateBoardNameOfOpenDir: true,\r\n frontAndBackDrill: false,\r\n verticalBoardName: \"立板\",\r\n layerBoardName: \"层板\",\r\n lbSealedUp: 1,\r\n lbSealedDown: 1,\r\n lbSealedLeft: 1,\r\n lbSealedRight: 1,\r\n lbHightDrillOption: { up: \"\", down: \"\", left: \"\", right: \"\" },\r\n useBoardProcessOption: true,\r\n isModifyHardwareMaterial: false,\r\n deviation: 100,//偏移量\r\n boardMatName: \"\",//板材名\r\n material: \"\",//材料\r\n color: \"\",//颜色\r\n roomName: \"\",//房名\r\n cabinetName: \"\",//柜名\r\n layerEdgeRemarkUp: '', //层板板边备注上下左右\r\n layerEdgeRemarkDown: '',\r\n layerEdgeRemarkLeft: '',\r\n layerEdgeRemarkRight: '',\r\n verticalEdgeRemarkUp: '', //立板板边备注上下左右\r\n verticalEdgeRemarkDown: '',\r\n verticalEdgeRemarkLeft: '',\r\n verticalEdgeRemarkRight: '',\r\n parseHinge: false,\r\n};\r\nObject.freeze(DefaultDoorOption);\r\nexport const DefaultHingeOption: IHingeConfigOption = {\r\n version: 1,\r\n hingeCount: 0,\r\n hindeTopDist: 0,\r\n hindeBottomDist: 0,\r\n useRule: false,\r\n deviation: 100,\r\n parseHinge: false,\r\n};\r\nObject.freeze(DefaultHingeOption);\r\nexport const DefaultDrawerOption: IDrawerConfigOption = {\r\n version: 9,\r\n col: 1,\r\n row: 1,\r\n isAllSelect: true,\r\n topOffset: 0,\r\n bottomOffset: 0,\r\n doorPosType: DoorPosType.Out,\r\n offset: 0,\r\n topExt: 18,\r\n bottomExt: 18,\r\n leftExt: 18,\r\n rightExt: 18,\r\n topSpace: 2,\r\n bottomSpace: 2,\r\n leftSpace: 2,\r\n rightSpace: 2,\r\n midSpace: 2,\r\n thickness: 18,\r\n depth: 0,\r\n isAuto: true,\r\n isFloor50: true,\r\n boardName: \"\",\r\n handleAngle: 90,\r\n handleHorPos: HandleHorPos.Mid,\r\n horSpacing: 10,\r\n handleVePos: HandleVePos.Mid,\r\n veSpacing: 10,\r\n drawerTotalDepth: 0,\r\n trackDepth: 0,\r\n isAutoSelectTrack: true,\r\n isLockTopOffset: false,\r\n isLockBottomOffset: false,\r\n downOffsetExpr: \"0\",\r\n upOffsetExpr: \"0\",\r\n verticalBoardName: \"立板\",\r\n lbSealedUp: 1,\r\n lbSealedDown: 1,\r\n lbSealedLeft: 1,\r\n lbSealedRight: 1,\r\n lbHightDrillOption: { up: \"\", down: \"\", left: \"\", right: \"\" },\r\n useBoardProcessOption: true,\r\n isModifyHardwareMaterial: false,\r\n boardMatName: \"\",//板材名\r\n material: \"\",//材料\r\n color: \"\",//颜色\r\n roomName: \"\",//房名\r\n cabinetName: \"\",//柜名\r\n};\r\nObject.freeze(DefaultDrawerOption);\r\n\r\nexport const DefaultBoardBatchCurtailOption: IBoardBatchCurtailOption = {\r\n version: 1,\r\n type: CurtailType.Total,\r\n front: 0,\r\n back: 0,\r\n left: 0,\r\n right: 0,\r\n moveBrs: false,\r\n};\r\nObject.freeze(DefaultBoardBatchCurtailOption);\r\n\r\nexport const DefaultBatchModifyPanelOption: IBatchModifyPanelOption = {\r\n version: 1,\r\n length: \"L\",\r\n width: \"W\",\r\n thick: \"H\",\r\n position: RadioType.lefttop,\r\n};\r\nObject.freeze(DefaultBatchModifyPanelOption);\r\n\r\nexport const DefaultLatticeConfig: ILatticeOption = {\r\n version: 1,\r\n arrayType: ELatticeArrayType.ByWidth,\r\n gripWidth: 100,\r\n gripDepth: 100,\r\n widthCount: 3,\r\n depthCount: 4,\r\n knifeRad: 3,\r\n thickness: 18,\r\n arcLen: 50,\r\n downDist: 0,\r\n space: 0.5,\r\n grooveAddWidth: 0,\r\n upSealed: 1,\r\n downSealed: 0,\r\n leftSealed: 0,\r\n rightSealed: 0,\r\n isAuto: true,\r\n isChange: true,\r\n isOpenCut: false,\r\n upCut: 0,\r\n downCut: 4,\r\n linesType: LinesType.Reverse,\r\n useBoardProcessOption: true,\r\n boardMatName: \"\",//板材名\r\n material: \"\",//材料\r\n color: \"\",//颜色\r\n roomName: \"\",//房名\r\n cabinetName: \"\",//柜名\r\n};\r\nObject.freeze(DefaultLatticeConfig);\r\n\r\nexport const DefaultNailOption: LayerNailOption = {\r\n version: 1,\r\n isDraw: true,\r\n addCount: 0,\r\n dist: 50,\r\n isGroup: false,\r\n isInBack: false,\r\n front: 50,\r\n behind: 50,\r\n count: 2,\r\n rad: 2.5,\r\n length: 34,\r\n depth: 11,\r\n};\r\nObject.freeze(DefaultNailOption);\r\n\r\nexport const DefaultCylinederMetalsOption: ICylMetalsOption = {\r\n version: 2,\r\n rad: 50,\r\n height: 200,\r\n name: \"圆柱体\",\r\n unit: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"L*R*R*3.14\",\r\n actualExpr: \"L*R*R*3.14*3\",\r\n model: \"X-1\",\r\n factory: \"晨丰\",\r\n brand: \"晨丰\",\r\n spec: \"个\",\r\n count: \"1\",\r\n comments: \"\",\r\n isHole: true,\r\n};\r\nObject.freeze(DefaultCylinederMetalsOption);\r\nexport const DefaultExtruderMetalsOption: IExtMetalsOption = {\r\n version: 1,\r\n thickness: 100,\r\n knifeRad: 0,\r\n isHole: true,\r\n addLen: 0,\r\n name: \"拉伸实体\",\r\n unit: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"L*W*H*100\",\r\n actualExpr: \"L*W*H*200\",\r\n model: \"X-1\",\r\n factory: \"晨丰\",\r\n brand: \"晨丰\",\r\n spec: \"个\",\r\n count: \"1\",\r\n comments: \"\",\r\n};\r\nObject.freeze(DefaultExtruderMetalsOption);\r\nexport const DefaultCompositeMetalsOption: ICompHardwareOption = {\r\n version: 3,\r\n type: EMetalsType.Metals,\r\n isSplite: false,\r\n isSplitePrice: false,\r\n name: \"复合实体\",\r\n unit: \"\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"L*W*H*100\",\r\n actualExpr: \"L*W*H*300\",\r\n model: \"X-1\",\r\n factory: \"晨丰\",\r\n brand: \"晨丰\",\r\n spec: \"个\",\r\n count: \"1\",\r\n color: \"\",\r\n material: \"\",\r\n comments: \"\",\r\n isHole: true,\r\n goodsId: \"\",\r\n goodsSn: \"\"\r\n};\r\nObject.freeze(DefaultCompositeMetalsOption);\r\nexport const DefaultToplineMetalsOption: IToplineOption = {\r\n version: 3,\r\n name: \"顶线\",\r\n unit: \"毫米\",\r\n roomName: \"\",\r\n cabinetName: \"\",\r\n costExpr: \"\",\r\n actualExpr: \"\",\r\n model: \"\",\r\n factory: \"\",\r\n brand: \"\",\r\n spec: \"\",\r\n comments: \"\",\r\n addLen: \"0\",\r\n isHole: false,\r\n goodsId: \"\",\r\n goodsSn: \"\"\r\n};\r\nObject.freeze(DefaultToplineMetalsOption);\r\n\r\nexport const DefaultBoardProcessOption: BoardProcessOption = {\r\n version: 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: 2,\r\n depthExpr: \"W\",\r\n drillType: \"\",\r\n sealedDown: \"1\",\r\n sealedLeft: \"1\",\r\n sealedRight: \"1\",\r\n sealedUp: \"1\",\r\n remarks: Array.from({ length: 12 }, () => [\"\", \"\"]),\r\n maxThickness: 20,\r\n layerShrink: 0,\r\n vertialShrink: 0,\r\n useBoardProcessOption: true,\r\n boardMatName: \"\",//板材名\r\n material: \"\",//材料\r\n color: \"\",//颜色\r\n roomName: \"\",//房名\r\n cabinetName: \"\",//柜名\r\n};\r\nObject.freeze(DefaultR2b2Option);\r\n\r\nexport const DefaultHSOption: IHSOption = {\r\n version: 7,\r\n isAll: true,\r\n isHide: true,\r\n isDelete: false,\r\n behind: false,\r\n layer: false,\r\n vertial: false,\r\n footer: false,\r\n tbBoard: false,\r\n specialShape: false,\r\n hole: false,\r\n door: false,\r\n drawer: false,\r\n closingStrip: false,\r\n noChaiDan: false,\r\n winerack: false,\r\n wood: false,\r\n nails: false,\r\n topline: false,\r\n handle: false,\r\n hinge: false,\r\n hwComposity: false,\r\n lattice: false,\r\n dim: false,\r\n visual: false,\r\n curve: false,\r\n line: false,\r\n polyline: false,\r\n circle: false,\r\n arc: false,\r\n custom: false,\r\n spotlight: false,\r\n pointLight: false,\r\n rectAreaLight: false,\r\n customBoardName: \"\",\r\n matchType: ECompareType.Equal,\r\n text: false,\r\n};\r\n\r\nexport const DefaultCommonPanelOption: CommonPanelConfigOption = {\r\n version: 1,\r\n orderMap: {},\r\n orderType: EOrderType.ByUpdate,\r\n};\r\nObject.freeze(DefaultCommonPanelOption);\r\n\r\nexport const DefaultDatalistOption: DatalistConfigOption = {\r\n resizeUI: {}\r\n};\r\nObject.freeze(DefaultDatalistOption);\r\n\r\nexport const DefaultAutoDimBrsOption: IAutoDimBrsOption = {\r\n version: 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 version: 1,\r\n Physical2EdgeColor: 7,\r\n VisualStyle: RenderType.Conceptual,\r\n Viewport: ViewDirection.Southwest,\r\n IsExportBoard: true,\r\n IsExportHardware: true,\r\n showBom: true,\r\n expireDays: \"\",\r\n};\r\nObject.freeze(DefaultShareBoardInfConfigurationOption);\r\n\r\nexport const DefaultBulkheadCeilingOption: BulkheadCeilingOption = {\r\n Item: [],\r\n Height: 300\r\n};\r\nObject.freeze(DefaultBulkheadCeilingOption);\r\n\r\nexport const DefaultChangeColorByRoomOrCabinetOption: ChangeColorByRoomOrCabinetOption = {\r\n accordCabinetName: true,\r\n accordRoomName: true\r\n};\r\nObject.freeze(DefaultChangeColorByRoomOrCabinetOption);\r\n\r\nexport const DefaultDoorRelatesInfoOption: DoorRelatesInfoOption = {\r\n version: 2,\r\n hingeOption: [],\r\n hingeDecimal: 1,\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\nexport const DefaultOneClickInspectionOption: OneClickInspectionOption = {\r\n version: 2,\r\n InspectionOption: {\r\n isInterfere: true,\r\n isMaxSizeBoard: true,\r\n isMinSizeBoard: true,\r\n isModel: true,\r\n isDrill: true,\r\n isSpecialBoardContour: true,\r\n isSplitBoard: true,\r\n isDrawHole: true,\r\n },\r\n excludeDrawHoleOption: {\r\n boardName: false,\r\n boardNameValue: \"\",\r\n processingGroupName: false,\r\n processingGroupNameValue: \"\",\r\n boardThickness: false,\r\n boardThicknessValue: 18,\r\n IsSplitBoard: false,\r\n boardNameCompareType: ECompareType.Include,\r\n processingGroupNameCompareType: ECompareType.Include,\r\n boardThicknessCompareType: ECompareType.Less,\r\n },\r\n excludeInterfereOption: {\r\n boardName: false,\r\n boardNameValue: \"\",\r\n processingGroupName: false,\r\n processingGroupNameValue: \"\",\r\n hwComposityName: false,\r\n hwComposityNameValue: \"\",\r\n noChaiDanBoard: false,\r\n boardNameCompareType: ECompareType.Include,\r\n processingGroupNameCompareType: ECompareType.Include,\r\n hwComposityNameCompareType: ECompareType.Include,\r\n }\r\n};\r\nObject.freeze(DefaultOneClickInspectionOption);\r\n\r\nexport const DefaultArcBoardGrooveOption: IArcBoardGrooveOption = {\r\n version: 2,\r\n isDrawArcGroove: true,\r\n retainedThickness: \"2\",\r\n knifeRadius: \"3\",\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n grooveSpacing2: \"6\",\r\n grooveWidth2: \"6\",\r\n arcExtension2: \"0\",\r\n retainedThickness2: \"2\",\r\n knifeRadius2: \"3\",\r\n grooveAddLength2: \"0\",\r\n grooveAddWidth2: \"0\",\r\n grooveAddDepth2: \"0\",\r\n};\r\nObject.freeze(DefaultArcBoardGrooveOption);\r\n\r\nexport const DefaultSpaceParseOption: SpaceParseOption = {\r\n autoParseDepth: false,\r\n};\r\nObject.freeze(DefaultSpaceParseOption);\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, BufferAttribute, BufferGeometry, Frustum, LineSegments, Matrix3, Matrix4, Mesh, Object3D, Line as TLine, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { arrayPushArray, arrayRemoveDuplicateBySort } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { curveLinkGroup } from \"../../Common/CurveUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { Log, LogType } from \"../../Common/Log\";\r\nimport { tempMatrix1 } from \"../../Common/Matrix4Utils\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { SelectPick } from \"../../Editor/SelectPick\";\r\nimport { AsVector3, MoveMatrix, ZAxis, ZeroVec, equaln, equalv3, isParallelTo } from '../../Geometry/GeUtils';\r\nimport { ProjectionToPlane, SweepGeometry } from '../../Geometry/SweepGeometry';\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Circle } from \"../Entity/Circle\";\r\nimport { Curve } from \"../Entity/Curve\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { Polyline } from '../Entity/Polyline';\r\nimport { IsPointInPolyLine } from '../PointInPolyline';\r\nimport { Spline } from \"../Spline\";\r\nimport { OBB } from './../../Geometry/OBB/obb';\r\n\r\n@Factory\r\nexport class SweepSolid extends Entity\r\n{\r\n private _DisplayAccuracy = 0;\r\n static UseRectFakerContour = false;\r\n\r\n protected _Contour: Polyline;\r\n protected _PathCurve: Curve | Curve[];\r\n constructor(contour?: Polyline, pathCurve?: Curve | Curve[])\r\n {\r\n super();\r\n this._Contour = contour;\r\n this._PathCurve = pathCurve;\r\n\r\n if (this._Contour && this._Contour.Id)\r\n this._Contour = this._Contour.Clone();\r\n\r\n if (this._Contour && this._PathCurve)\r\n {\r\n this.TransfromPathToWCS();\r\n\r\n //将OCS变换成第一个路径的OCS(合理一点)\r\n let paths = this.Paths;\r\n let path = paths[0];\r\n\r\n this.OCS = path.OCSNoClone;\r\n this._SpaceOCS.copy(path.OCSNoClone);\r\n\r\n let ocsInv = this.OCSInv;\r\n for (let p of paths)\r\n p.ApplyMatrix(ocsInv);\r\n }\r\n }\r\n\r\n Explode()\r\n {\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n const explode: Curve[] = [this._Contour.Clone().ApplyMatrix(this._Matrix)];\r\n for (let path of this._PathCurve)\r\n {\r\n explode.push(path.Clone().ApplyMatrix(this._Matrix));\r\n }\r\n return explode;\r\n }\r\n return [this._Contour.Clone().ApplyMatrix(this._Matrix), this._PathCurve.Clone().ApplyMatrix(this._Matrix)];\r\n }\r\n\r\n get DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n get Contour()\r\n {\r\n return this._Contour;\r\n }\r\n get Path()\r\n {\r\n return this._PathCurve;\r\n }\r\n\r\n //单纯的返回数组\r\n get Paths()\r\n {\r\n return Array.isArray(this._PathCurve) ? this._PathCurve : [this._PathCurve];\r\n }\r\n\r\n Reverse()\r\n {\r\n this.WriteAllObjectRecord();\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n for (let path of this._PathCurve)\r\n path.Reverse();\r\n this._PathCurve.reverse();\r\n }\r\n else this._PathCurve.Reverse();\r\n this.Update();\r\n }\r\n\r\n /**\r\n * 将轮廓变换到wcs空间,当用户选定某个与扫描线起点相切的轮廓时.\r\n */\r\n private TransfromPathToWCS()\r\n {\r\n if (Array.isArray(this._PathCurve)) return;\r\n if (equalv3(this._Contour.Normal, ZAxis))\r\n return;\r\n\r\n let fDir = this._PathCurve.GetFirstDeriv(0);\r\n if (isParallelTo(fDir, this._Contour.Normal))\r\n {\r\n //构建回家的矩阵\r\n let toWcsMat4Inv = new Matrix4();\r\n let zv = fDir.normalize();\r\n let yv = this._PathCurve.Normal;\r\n let xv = zv.clone().cross(yv);\r\n\r\n toWcsMat4Inv.makeBasis(xv, yv, zv);\r\n toWcsMat4Inv.setPosition(this._PathCurve.StartPoint);\r\n\r\n let toWcsMat4 = new Matrix4().getInverse(toWcsMat4Inv);\r\n this._Contour.ApplyMatrix(toWcsMat4);\r\n\r\n let z = this._Contour.StartPoint.z;\r\n if (IsPointInPolyLine(this._Contour, new Vector3(0, 0, z)))\r\n {\r\n let z = this._Contour.StartPoint.z;\r\n this._Contour.ApplyMatrix(MoveMatrix(new Vector3(0, 0, -z)));\r\n return;\r\n }\r\n else\r\n this._Contour.ApplyMatrix(toWcsMat4Inv);\r\n }\r\n\r\n let lDir = this._PathCurve.GetFirstDeriv(this._PathCurve.EndParam);\r\n if (isParallelTo(lDir, this._Contour.Normal))\r\n {\r\n //再次构建回家的矩阵\r\n let toWcsMat4Inv = new Matrix4();\r\n let zv = lDir.negate().normalize();\r\n let yv = this._PathCurve.Normal;\r\n let xv = zv.clone().cross(yv);\r\n\r\n toWcsMat4Inv.makeBasis(xv, yv, zv);\r\n toWcsMat4Inv.setPosition(this._PathCurve.EndPoint);\r\n\r\n let toWcsMat4 = new Matrix4().getInverse(toWcsMat4Inv);\r\n this._Contour.ApplyMatrix(toWcsMat4);\r\n\r\n let z = this._Contour.StartPoint.z;\r\n if (IsPointInPolyLine(this._Contour, new Vector3(0, 0, z)))\r\n {\r\n let z = this._Contour.StartPoint.z;\r\n this._Contour.ApplyMatrix(MoveMatrix(new Vector3(0, 0, -z)));\r\n\r\n this._PathCurve.Reverse();\r\n return;\r\n }\r\n else\r\n this._Contour.ApplyMatrix(toWcsMat4);\r\n }\r\n Log(\"错误:提供的轮廓没有和路径垂直!\", LogType.Error);\r\n }\r\n\r\n private _MeshGeometry: SweepGeometry | BufferGeometry;\r\n private _LineGeom: LineGeometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n try\r\n {\r\n let contour = this._Contour;\r\n if (SweepSolid.UseRectFakerContour && contour.EndParam > 10)\r\n {\r\n let box = contour.BoundingBox;\r\n contour = new Polyline().RectangleFrom2Pt(box.min, box.max);\r\n }\r\n\r\n if (this._PathCurve instanceof Arc || this._PathCurve instanceof Circle || this._PathCurve instanceof Polyline)\r\n {\r\n this._PathCurve.DisplayAccuracy = this._DisplayAccuracy;\r\n }\r\n this._Contour.DisplayAccuracy = this._DisplayAccuracy;\r\n this._MeshGeometry = new SweepGeometry(contour, this._PathCurve);\r\n this._EdgeGeometry = this._MeshGeometry.EdgeGeom;\r\n this._LineGeom = this._MeshGeometry.LineGeom;\r\n this._MeshGeometry.edgePts = undefined;\r\n\r\n \r\n\r\n return this._MeshGeometry;\r\n }\r\n catch (error)\r\n {\r\n return new BoxBufferGeometry(1000, 1000, 1000);\r\n }\r\n }\r\n\r\n private _EdgeGeometry: BufferGeometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n this.MeshGeometry;\r\n return this._EdgeGeometry;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType): Object3D\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Edge)\r\n {\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex));\r\n\r\n // for (let p of this.Paths)\r\n // {\r\n // p.IsEmbedEntity = true;\r\n // let lineObj = p.GetDrawObjectFromRenderType(RenderType.Wireframe) as TLine;\r\n // lineObj.material = ColorMaterial.GetWallLineMtl(1);\r\n // lineObj.computeLineDistances();\r\n // lineObj.matrix.copy(p.OCSNoClone);\r\n // line.add(lineObj);\r\n // }\r\n\r\n return line;\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())\r\n );\r\n }\r\n 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.DrawColorIndex);\r\n\r\n // Object3DRemoveAll(l);\r\n // for (let p of this.Paths)\r\n // {\r\n // p.IsEmbedEntity = true;\r\n // let lineObj = p.GetDrawObjectFromRenderType(RenderType.Wireframe) as TLine;\r\n // lineObj.material = ColorMaterial.GetWallLineMtl(1);\r\n // lineObj.computeLineDistances();\r\n // l.add(lineObj);\r\n // }\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n Object3DRemoveAll(obj);\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.geometry = this.MeshGeometry;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n Object3DRemoveAll(obj);\r\n if (Array.isArray(this._PathCurve))\r\n for (let path of this._PathCurve)\r\n obj.add(path.DrawObject);\r\n else\r\n obj.add((this._PathCurve.DrawObject));\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n Object3DRemoveAll(obj);\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, this.MeshMaterial),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * 当实体需要被更新时,更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D)\r\n {\r\n if (type === RenderType.Wireframe)\r\n {\r\n let l = obj as TLine;\r\n l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex);\r\n }\r\n else if (type === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.DrawColorIndex);\r\n }\r\n else if (type === RenderType.Physical2)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n let geom = this.MeshGeometry;\r\n\r\n if (!geom)\r\n {\r\n console.error(\"SweepSolid无法建模\");\r\n return new Box3;\r\n }\r\n\r\n if (!geom.boundingBox)\r\n geom.computeBoundingBox();\r\n\r\n return geom.boundingBox.clone().applyMatrix4(this._Matrix);\r\n }\r\n\r\n get OBB(): OBB\r\n {\r\n let box = this.BoundingBox;\r\n let size = box.getSize(new Vector3);\r\n return new OBB(MoveMatrix(box.min), size.multiplyScalar(0.5));\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3,\r\n frustum?: Frustum,\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetEndPoint();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let pts: Vector3[] = [];\r\n\r\n //拷贝来自圆弧板最近点捕捉\r\n if (snapMode === ObjectSnapMode.Nea)\r\n {\r\n //这里实现对线框的快速捕捉\r\n let edgeGeom = this.EdgeGeometry;\r\n let pos = edgeGeom.getAttribute(\"position\") as BufferAttribute;\r\n let p1 = new Vector3;\r\n let p2 = new Vector3;\r\n\r\n let line = new Line(p1, p2);\r\n line.ApplyMatrix(this.OCSNoClone);\r\n\r\n let sel: SelectPick = frustum[\"_select_\"];\r\n for (let y = 0; y < pos.count; y += 2)\r\n {\r\n p1.fromArray(pos.array, y * 3);\r\n p2.fromArray(pos.array, (y + 1) * 3);\r\n p1.applyMatrix4(this._Matrix);\r\n p2.applyMatrix4(this._Matrix);\r\n\r\n sel.WorldToScreenPoint(p1);\r\n sel.WorldToScreenPoint(p2);\r\n\r\n if (sel.IntersectLine(p1, p2))\r\n {\r\n p1.fromArray(pos.array, y * 3);\r\n p2.fromArray(pos.array, (y + 1) * 3);\r\n arrayPushArray(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n }\r\n return pts;\r\n }\r\n\r\n let pathArr = Array.isArray(this._PathCurve) ? this._PathCurve : [this._PathCurve];\r\n for (let path of pathArr)\r\n {\r\n let contour = path.Clone();\r\n contour.ApplyMatrix(this.OCSNoClone);\r\n arrayPushArray(pts, contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n if (snapMode === ObjectSnapMode.Mid)\r\n arrayPushArray(pts, this.GetMidPoints());\r\n }\r\n\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n //缓存夹点和子实体的索引\r\n private _GripSubIndexMap: Map<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 if (!isClosePath)\r\n pts.push(...ProjectionToPlane(shapePts3d, pathNormals[0], pathPts[0], undefined, pathPts[1]));\r\n\r\n //遍历所有的路径节点进行顶点投射\r\n for (let i = 1; i < pathPts.length; i++)\r\n {\r\n if (i === pathPts.length - 1)\r\n {\r\n if (isClosePath)\r\n pts.push(...ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1], pathPts[1]));\r\n else\r\n pts.push(...ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1]));\r\n }\r\n else\r\n {\r\n pts.push(...ProjectionToPlane(shapePts3d, pathNormals[i], pathPts[i], pathPts[i - 1], pathPts[i + 1]));\r\n }\r\n }\r\n\r\n for (let pt of pts) pt.applyMatrix4(this.OCSNoClone);\r\n return pts;\r\n }\r\n\r\n private GetMidPoints()\r\n {\r\n let conPts = this._Contour.GetStretchPoints();\r\n const pts: Vector3[] = [];\r\n const UpdateEndMtx = (path: Curve) =>\r\n {\r\n for (let i = 0.5; i < path.EndParam; i++)\r\n {\r\n let pos = path.GetPointAtParam(i);\r\n let dir = path.GetFirstDeriv(i).normalize();\r\n let y = path.Normal;\r\n let roMat = new Matrix4().extractRotation(this.OCS);\r\n let z = dir.applyMatrix4(roMat);\r\n let x = z.clone().cross(y);\r\n tempMatrix1.makeBasis(x, y, z);\r\n tempMatrix1.setPosition(pos.applyMatrix4(this.OCS));\r\n pts.push(...conPts.map(p => p.clone().applyMatrix4(tempMatrix1)));\r\n }\r\n };\r\n if (Array.isArray(this._PathCurve))\r\n for (let path of this._PathCurve)\r\n UpdateEndMtx(path);\r\n else\r\n UpdateEndMtx(this._PathCurve);\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n let ptsLengths = 0;\r\n for (let i = 0; i < this._PathCurve.length; i += 1)\r\n {\r\n const path = this._PathCurve[i];\r\n const pathGripPts = path.GetGripPoints();\r\n const idxList = indexList.filter(v => v >= ptsLengths && v < (ptsLengths + pathGripPts.length)).map((v) => v - ptsLengths);\r\n\r\n ptsLengths += pathGripPts.length;\r\n\r\n if (idxList.length === 0) continue;\r\n\r\n let isMoveLine = (path instanceof Line && idxList.length === 1 && idxList[0] === 1);\r\n let isMovePolylineStart = (path instanceof Polyline) && idxList.length === 1 && idxList.includes(1);\r\n let isMovePolylineEnd = (path instanceof Polyline) && idxList.length === 1 && idxList.includes(pathGripPts.length - 2);\r\n\r\n //如果不是整体移动,那么vec被限制在CURVE OCS Z0\r\n let isMove = isMoveLine || idxList.length === pathGripPts.length;\r\n if (!isMove)\r\n {\r\n vec = vec.clone()\r\n .applyMatrix4(path.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(path.OCS.setPosition(0, 0, 0));\r\n }\r\n\r\n //我们校验它的前后曲线支不支持它移动这个点\r\n let prePath = this._PathCurve[FixIndex(i - 1, this._PathCurve)];\r\n let nextPath = this._PathCurve[FixIndex(i + 1, this._PathCurve)];\r\n\r\n if ((isMoveLine || idxList.includes(0) || isMovePolylineStart)//(move line ) or (move start) or(move pl start)\r\n && (i || equalv3(prePath.EndPoint, path.StartPoint, 1e-3)))//连接到下一段\r\n {\r\n //vec限制在上一段的坐标系内 无z\r\n vec = vec.clone()\r\n .applyMatrix4(prePath.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(prePath.OCS.setPosition(0, 0, 0));\r\n\r\n if (isMoveLine || isMovePolylineStart)//顺带移动上一段\r\n prePath.MoveGripPoints([prePath.GetGripPoints().length - 1], vec);\r\n\r\n }\r\n if ((isMoveLine || idxList.includes(pathGripPts.length - 1) || isMovePolylineEnd)//(move line ) or (move end) or(move pl end)\r\n && (i < this._PathCurve.length - 2 || equalv3(path.EndPoint, nextPath.StartPoint, 1e-3)))//连接到上一段\r\n {\r\n //vec限制在下一段的坐标系内 无z\r\n vec = vec.clone()\r\n .applyMatrix4(nextPath.OCSInv.setPosition(0, 0, 0))\r\n .setZ(0)\r\n .applyMatrix4(nextPath.OCS.setPosition(0, 0, 0));\r\n\r\n if (isMoveLine || isMovePolylineEnd)//顺带移动下一段\r\n nextPath.MoveGripPoints([0], vec);\r\n }\r\n\r\n if (isMove)\r\n path.Move(vec);\r\n else\r\n path.MoveGripPoints(idxList, vec);\r\n }\r\n }\r\n else\r\n {\r\n this._PathCurve.MoveGripPoints(indexList, vec);\r\n }\r\n this.Update();\r\n }\r\n\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n let ptsLengths = 0;\r\n let pathIndexMap = new Map<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 if (ver > 2)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n\r\n if (ver > 3)\r\n this._DisplayAccuracy = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(4);//ver\r\n file.WriteObject(this._Contour);\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n file.Write(this._PathCurve.length);\r\n for (let c of this._PathCurve)\r\n file.WriteObject(c);\r\n }\r\n else\r\n {\r\n file.Write(1);\r\n file.WriteObject(this._PathCurve);\r\n }\r\n\r\n // ver3\r\n file.WriteBool(this._LockMaterial);\r\n // ver4\r\n file.Write(this._DisplayAccuracy);\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { DefaultToplineMetalsOption } from \"../../Editor/DefaultConfig\";\r\nimport { AsVector3, ZeroVec, equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { ProjectionToPlane } from \"../../Geometry/SweepGeometry\";\r\nimport { Max } from \"../../Nest/Common/Util\";\r\nimport { IToplineOption } from \"../../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { SweepSolid } from \"../3DSolid/SweepSolid\";\r\nimport { AutoRecord, AutoRecordObject } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Curve } from \"../Entity/Curve\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\n\r\n@Factory\r\nexport class HardwareTopline extends SweepSolid\r\n{\r\n @AutoRecordObject HardwareOption: IToplineOption = { ...DefaultToplineMetalsOption };\r\n @AutoRecord DataList: [string, string][] = [];\r\n private _contourRotation = 0;\r\n get ContourRotation()\r\n {\r\n return this._contourRotation;\r\n }\r\n\r\n /**\r\n *延伸取最大最小轮廓每段首尾到前面线段,取最长线段作为分段长\r\n */\r\n get Segmentations(): Curve[]\r\n {\r\n //轮廓点表\r\n let contourPts = this._Contour.Shape.getPoints(4).map(AsVector3);\r\n for (let p of contourPts)\r\n p.applyMatrix4(this._Contour.OCSNoClone);\r\n\r\n //收集所有的点\r\n let pathCurves: (Line | Arc)[] = [];\r\n if (Array.isArray(this._PathCurve))\r\n {\r\n for (let p of this._PathCurve)\r\n {\r\n if (p instanceof Polyline)\r\n pathCurves.push(...p.Explode() as Line[]);\r\n else\r\n pathCurves.push(p.Clone() as Line);\r\n }\r\n }\r\n else\r\n if (this._PathCurve instanceof Polyline)\r\n pathCurves.push(...this._PathCurve.Explode() as Line[]);\r\n else\r\n pathCurves.push(this._PathCurve.Clone() as Line);\r\n\r\n\r\n let isClosePath = equalv3(pathCurves[0].StartPoint, pathCurves[pathCurves.length - 1].EndPoint, 1e-3);\r\n\r\n\r\n let radiusMap = new Map<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 if (ver > 1)\r\n {\r\n this.HardwareOption.goodsId = file.Read();\r\n this.HardwareOption.goodsSn = file.Read();\r\n }\r\n\r\n if (ver > 2)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);//ver\r\n\r\n file.Write(this._contourRotation);\r\n\r\n file.Write(this.HardwareOption.addLen);\r\n file.Write(this.HardwareOption.name);\r\n file.Write(this.HardwareOption.roomName);\r\n file.Write(this.HardwareOption.cabinetName);\r\n file.Write(this.HardwareOption.costExpr);\r\n file.Write(this.HardwareOption.actualExpr);\r\n file.Write(this.HardwareOption.model);\r\n file.Write(this.HardwareOption.factory);\r\n file.Write(this.HardwareOption.brand);\r\n file.Write(this.HardwareOption.spec);\r\n file.Write(this.HardwareOption.comments);\r\n\r\n file.Write(this.DataList.length);\r\n for (let data of this.DataList)\r\n {\r\n file.Write(data[0]);\r\n file.Write(data[1]);\r\n }\r\n\r\n file.Write(this.HardwareOption.goodsId);\r\n file.Write(this.HardwareOption.goodsSn);\r\n\r\n // ver3\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { Log, LogType } from \"../../Common/Log\";\r\nimport { Intent, Toaster, ToasterShowEntityMsg } from \"../../Common/Toaster\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { ParseExpr, safeEval } from \"../../Common/eval\";\r\nimport { CylinderHole, GangDrillType } from \"../../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { ExtrudeHole } from \"../../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Hole } from \"../../DatabaseServices/3DSolid/Hole\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Entity } from \"../../DatabaseServices/Entity/Entity\";\r\nimport { GroupRecord } from \"../../DatabaseServices/GroupTableRecord\";\r\nimport { HardwareCompositeEntity } from \"../../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { HardwareTopline } from \"../../DatabaseServices/Hardware/HardwareTopline\";\r\nimport { ProcessingGroupRecord } from '../../DatabaseServices/ProcessingGroup/ProcessingGroupRecord';\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { GetSealedBoardContour } from \"../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { IHardwareType, Production } from \"../../Production/Product\";\r\nimport { ISealingData } from \"../../UI/Store/OptionInterface/IHighSealedItem\";\r\nimport { HoleInBoard } from \"../DrawDrilling/HoleUtils\";\r\n\r\nexport interface ICountType<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 goodsId?: string;\r\n goodsSn?: string;\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 {\r\n for (let drill of v)\r\n {\r\n let goodsSn = (drill as CylinderHole).GoodsSn;\r\n let drillGroup = drillCount.find(d => d.name === k && d.goodsSn === goodsSn); //区分排钻商品ID\r\n if (drillGroup)\r\n drillGroup.count += 1;\r\n else\r\n drillCount.push({ name: k, count: 1, goodsSn, goodsId: (drill as CylinderHole).GoodsId });\r\n }\r\n }\r\n else if (k === \"层板钉\")\r\n drillCount.push({ name: k, count: v.length });\r\n else\r\n {\r\n for (let drill of v)\r\n {\r\n let goodsSn = (drill as CylinderHole).GoodsSn;\r\n let drillGroup = drillCount.find(d => d.name === k && d.goodsSn === goodsSn); //区分排钻商品ID\r\n if (drillGroup)\r\n drillGroup.count += 1;\r\n else\r\n drillCount.push({ name: k, count: 1, goodsSn, goodsId: (drill as CylinderHole).GoodsId });\r\n }\r\n }\r\n else\r\n {\r\n this.ParseHardwareCount(k, v as IHardwareType[], hardwareCount);\r\n }\r\n }\r\n hardwareCount.sort((h1, h2) => h1.name.localeCompare(h2.name));\r\n //加入封边信息\r\n for (let [k, v] of this.sealMap)\r\n {\r\n sealCount.push({ name: k, count: v / 1000, unit: \"米\" });\r\n }\r\n\r\n for (let [k, bs] of this.boardMap)\r\n {\r\n const chaiDan = IsBbsCountChaidan ? bs : bs.filter(b => b.IsChaiDan);\r\n areaCount.push({\r\n entity: bs[0],\r\n count: chaiDan.length,\r\n count2: this.GetBoardsArea(chaiDan)\r\n });\r\n }\r\n\r\n return { drillCount, hardwareCount, sealCount, areaCount };\r\n };\r\n private Update(ens: (Board | IHardwareType)[], options: GetCountOption = null, IsBbsCountChaidan?: boolean)\r\n {\r\n //计算排钻个数\r\n const addDrillToMap = (spiteName: string, d: Hole | IHardwareType) =>\r\n {\r\n if (!this.drillTypeMap.has(spiteName))\r\n this.drillTypeMap.set(spiteName, [d]);\r\n else\r\n {\r\n let ds = this.drillTypeMap.get(spiteName);\r\n if (!ds.includes(d))\r\n ds.push(d);\r\n }\r\n };\r\n\r\n const brsProps: Board[] = [];\r\n const hardwares: IHardwareType[] = [];\r\n\r\n for (let e of ens)\r\n {\r\n if (e instanceof Board)\r\n brsProps.push(e);\r\n else\r\n hardwares.push(e);\r\n }\r\n for (let h of hardwares)\r\n {\r\n let { name, unit, factory, spec, model, brand, goodsSn } = h.HardwareOption;\r\n let tags = this.ParseProcessingGroupTags(h);\r\n // :254行 代码对关联复合实体又进行一遍分析 需同步修改\r\n addDrillToMap(`${name},${unit},${this.ParseSpec(h, factory)},${this.ParseSpec(h, spec)},${this.ParseSpec(h, model)},${this.ParseSpec(h, brand)},${tags.join(\",\")},${goodsSn}`, h);\r\n }\r\n\r\n this.UpdateBoardMap(brsProps);\r\n\r\n //统计 排钻 封边 关联的五金(排钻?)\r\n for (let br of brsProps)\r\n {\r\n if (!IsBbsCountChaidan && !br.IsChaiDan)//非拆单板我们不统计\r\n continue;\r\n\r\n //排钻 层板钉\r\n let dlist = br.DrillList;\r\n if (equaln(br.ContourCurve.Area, 0))\r\n {\r\n ToasterShowEntityMsg({\r\n msg: `${br.BoardProcessOption.roomName} ${br.BoardProcessOption.cabinetName} ${br.Name}轮廓有有问题,请检查`,\r\n timeout: 5000,\r\n intent: Intent.DANGER,\r\n ent: br\r\n });\r\n continue;\r\n }\r\n\r\n for (let [id, idList] of dlist)\r\n {\r\n for (let ids of idList)\r\n {\r\n let holes = ids.map(id => id.Object).filter(h => h) as Hole[];\r\n\r\n if (!holes[0] || !HoleInBoard(holes, br))\r\n continue;\r\n\r\n let isTk = false;\r\n let spliteName: string;\r\n let hole: Hole;\r\n let pxlCount = 0;\r\n findHole:\r\n for (let objId of ids)\r\n {\r\n let gd = objId.Object as CylinderHole | ExtrudeHole;\r\n if (!gd || gd.IsErase) break;\r\n\r\n const group = gd.GroupId?.Object as GroupRecord;\r\n\r\n if (!group)\r\n {\r\n Toaster({ message: `柜名:${br.BoardProcessOption.cabinetName} 房间名:${br.BoardProcessOption.roomName} 板名:${br.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, timeout: 5000, intent: Intent.DANGER });\r\n Log(`柜名:${br.BoardProcessOption.cabinetName} 房间名:${br.BoardProcessOption.roomName} 板名:${br.Name} 的排钻的编组丢失,统计排钻个数时会丢失该个数!`, LogType.Error, [br, gd]);\r\n break;\r\n }\r\n\r\n if (gd instanceof CylinderHole)\r\n {\r\n switch (gd.Type)\r\n {\r\n case GangDrillType.Pxl:\r\n pxlCount++;\r\n break;\r\n case GangDrillType.Ljg:\r\n case GangDrillType.Ymj:\r\n break;\r\n case GangDrillType.TK:\r\n isTk = true;\r\n break;\r\n case GangDrillType.Wood:\r\n case GangDrillType.WoodPXL:\r\n spliteName = \"木销\";\r\n break;\r\n default:\r\n break findHole;\r\n }\r\n options?.getHoles && options?.getHoles(spliteName || group.Name || \"未命名\", gd);\r\n }\r\n else\r\n {\r\n if (gd.isThrough)\r\n isTk = true;\r\n }\r\n if (!spliteName)\r\n spliteName = group.Name || \"未命名\";\r\n if (!hole)\r\n hole = gd;\r\n }\r\n\r\n if (spliteName && hole)\r\n {\r\n if (isTk && HostApplicationServices.chaidanOption.statTk)\r\n {\r\n addDrillToMap(\"通孔\" + spliteName, hole);\r\n }\r\n else if (pxlCount === 2 && HostApplicationServices.chaidanOption.statSt)\r\n {\r\n addDrillToMap(\"双头\" + spliteName, hole);\r\n }\r\n else\r\n {\r\n addDrillToMap(spliteName, hole);\r\n }\r\n }\r\n }\r\n }\r\n // 被复制的层板钉暂未加入LayerNails数组 等做好关联后解除注释\r\n if (br.LayerNails.length > 0)\r\n for (let objId of br.LayerNails)\r\n {\r\n if (!objId?.IsErase)\r\n addDrillToMap(\"层板钉\", objId.Object as CylinderHole);\r\n }\r\n\r\n //分析五金\r\n for (const mId of br.RelativeHardware)\r\n {\r\n let metal = mId?.Object as IHardwareType;\r\n if (metal && !metal.IsErase && metal.HardwareOption)\r\n {\r\n let { name, unit, factory, spec, model, brand, goodsSn } = metal.HardwareOption;\r\n let tags = this.ParseProcessingGroupTags(metal);\r\n // :135行 代码对关联复合实体又进行一遍分析 需同步修改\r\n addDrillToMap(`${name},${unit},${this.ParseSpec(metal, factory)},${this.ParseSpec(metal, spec)},${this.ParseSpec(metal, model)},${this.ParseSpec(metal, brand)},${tags.join(\",\")},${goodsSn}`, metal);\r\n }\r\n }\r\n\r\n //封边\r\n let sealdData = GetSealedBoardContour(br);\r\n if (!sealdData)\r\n {\r\n ToasterShowEntityMsg({\r\n intent: Intent.DANGER,\r\n msg: \"板件扣封边失败,请检查板件轮廓!\",\r\n timeout: 10000,\r\n ent: br\r\n });\r\n throw \"错误:板扣除封边失败!\";\r\n }\r\n\r\n let 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 { Geom3, transform } from \"@jscad/modeling/src/geometries/geom3\";\r\nimport { Mat4 } from \"@jscad/modeling/src/maths/mat4\";\r\nimport { Matrix4 } from \"three\";\r\nimport { MakeMirrorMtx } from \"../../Common/Matrix4Utils\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { GetBoardContour } from \"../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { Geometry2CSG2 } from \"../../csg/core/Geometry2CSG\";\r\nimport { ZAxis } from \"../GeUtils\";\r\n\r\nexport function BoardSideModelCSGBuilder(board: Board): Geom3[]\r\n{\r\n const sideModeingCsgs: Geom3[] = [];\r\n\r\n if (!(board.SideModelingMap.size || board.RelevanceSideModelMap.size))\r\n return sideModeingCsgs;\r\n\r\n let con = GetBoardContour(board);\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n const mirrorMtxZ = MakeMirrorMtx(ZAxis);\r\n\r\n for (let [index, soilds] of board.AllSideModelGrooveMap)\r\n {\r\n let cu = cus[index];\r\n if (!cu) continue;\r\n\r\n let mt4 = GetSideCuFaceMtx(cus[index], inverseZ);\r\n\r\n for (let soild of soilds)\r\n {\r\n let s = soild.Clone();\r\n let geom3 = Geometry2CSG2(s.MeshGeometry);\r\n geom3 = transform(mirrorMtxZ.elements as Mat4, geom3);\r\n geom3 = transform(mt4.clone().multiply(soild.OCS).elements as Mat4, geom3);\r\n sideModeingCsgs.push(geom3);\r\n }\r\n }\r\n\r\n return sideModeingCsgs;\r\n}\r\n\r\nexport function GetSideCuFaceMtx(cu: Curve, inverseZ = false): Matrix4\r\n{\r\n let x = cu.GetFirstDeriv(0).normalize();\r\n let y = ZAxis;\r\n let z = x.clone().cross(y);\r\n if (inverseZ) z.negate();\r\n\r\n let basePt = cu.StartPoint;\r\n\r\n return new Matrix4().makeBasis(x, y, z).setPosition(basePt);\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, Geometry, Line, LineBasicMaterial, LineSegments, Matrix4, Object3D, Vector3 } from \"three\";\r\nimport { FaceDirection } from \"../Add-on/DrawDrilling/DrillType\";\r\nimport { ColorMaterial } from \"../Common/ColorPalette\";\r\nimport { MakeMirrorMtx } from \"../Common/Matrix4Utils\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { ExtrudeHole } from \"../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Board } from \"../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { ExtrudeSolid } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Shape } from \"../DatabaseServices/Shape\";\r\nimport { Shape2 } from \"../DatabaseServices/Shape2\";\r\nimport { GetBoardContour } from \"../GraphicsSystem/CalcEdgeSealing\";\r\nimport { GetSideCuFaceMtx } from \"./Board2DModelCSG/BoardSideModelCSGBuilder\";\r\nimport { MatrixIsIdentityCS, MoveMatrix, ZAxis } from \"./GeUtils\";\r\n\r\n//FIXME: #IWBPB 性能缺陷和BUG. 等待废弃或者改进\r\nexport function CreateWireframe(en3D: Board | ExtrudeSolid)\r\n{\r\n let mat = ColorMaterial.GetLineMaterial(1);\r\n let lines: Object3D[] = [];\r\n\r\n let upShape = new Shape(Contour.CreateContour(en3D.ContourCurve));\r\n let downShape = new Shape(Contour.CreateContour(en3D.ContourCurve));\r\n\r\n if (en3D instanceof Board)\r\n {\r\n for (let m of en3D.BoardModeling)\r\n {\r\n let geo = new BufferGeometry().setFromPoints(m.shape.Shape.getPoints(10));\r\n let ocs = m.shape.Outline.Curve.OCS;\r\n let cloneShape = m.shape.Clone();\r\n cloneShape.Outline.Curve.Position = cloneShape.Outline.Curve.Position.setZ(0);\r\n\r\n let isCut = false;\r\n appendLines(m.shape.Outline.Curve, en3D.Thickness, lines, mat);\r\n\r\n if (m.thickness < en3D.Thickness)\r\n {\r\n appendLines(m.shape.Outline.Curve, m.thickness, lines, mat);\r\n //正面\r\n if (m.dir === FaceDirection.Front)\r\n {\r\n let ss = upShape.SubstactBoolOperation([cloneShape]);\r\n if (ss.length > 0 && ss[0].Holes.length === 0)\r\n {\r\n upShape = ss[0];\r\n isCut = true;\r\n }\r\n }\r\n else\r\n {\r\n let ss = downShape.SubstactBoolOperation([cloneShape]);\r\n if (ss.length > 0 && ss[0].Holes.length === 0)\r\n {\r\n downShape = ss[0];\r\n isCut = true;\r\n }\r\n }\r\n }\r\n if (!isCut || m.dir === FaceDirection.Back)\r\n {\r\n let geoClone = geo.clone();\r\n geoClone.applyMatrix4(MoveMatrix(new Vector3(0, 0, m.thickness))).applyMatrix4(ocs);\r\n lines.push(new Line(geoClone, mat));\r\n }\r\n\r\n if (!isCut || m.dir === FaceDirection.Front)\r\n {\r\n lines.push(new Line(geo.applyMatrix4(ocs), mat));\r\n }\r\n }\r\n }\r\n\r\n let downGeo = new BufferGeometry().setFromPoints(downShape.Shape.getPoints(10))\r\n .applyMatrix4(en3D.ContourCurve.OCS);\r\n let upGeo = new BufferGeometry().setFromPoints(upShape.Shape.getPoints(10))\r\n .applyMatrix4(MoveMatrix(new Vector3(0, 0, en3D.Thickness)))\r\n .applyMatrix4(en3D.ContourCurve.OCS);\r\n\r\n lines.push(\r\n new Line(downGeo, mat),\r\n new Line(upGeo, mat));\r\n\r\n appendLines(en3D.ContourCurve, en3D.Thickness, lines, mat);\r\n\r\n return lines;\r\n}\r\n\r\nfunction appendLines(cu: Curve, thick: number, lines: Object3D[], mat: LineBasicMaterial)\r\n{\r\n let pts = cu.GetStretchPoints();\r\n for (let p of pts)\r\n {\r\n let geo = new Geometry().setFromPoints([p, p.clone().add(new Vector3(0, 0, thick))]);\r\n lines.push(new Line(geo, mat));\r\n }\r\n}\r\n\r\n//使用lineseg来生成拉伸的边框,避免生成过多的实体导致的drawcall次数增多\r\nexport function FastWireframe(br: ExtrudeSolid, color = 0, divCount = 6, optArc = true): Line<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 if (br instanceof Board && br.HasSideModel)\r\n {\r\n let con = GetBoardContour(br);\r\n if (con)\r\n {\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n const mirrorMtxZ = MakeMirrorMtx(ZAxis);\r\n\r\n for (let [index, soilds] of br.SideModelingMap)\r\n {\r\n let cu = cus[index];\r\n if (!cu) continue;\r\n\r\n let mt4 = GetSideCuFaceMtx(cus[index], inverseZ);\r\n for (let soild of soilds)\r\n {\r\n let lines = FastWireframe(soild, color, 3, false);\r\n for (let line of lines)\r\n {\r\n line.applyMatrix4(mirrorMtxZ);\r\n line.applyMatrix4(soild.OCSNoClone);\r\n line.applyMatrix4(mt4);\r\n result.push(line);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function FastExtrudeEdgeGeometryOfShape(shape: Shape2, z0: number, z1: number, divCount = 6, optArc = true, coords: number[] = [])\r\n{\r\n let ptss = [shape.getPoints(divCount, optArc)];\r\n for (let hole of shape.holes)\r\n ptss.push((hole as Shape2).getPoints(divCount, optArc));\r\n\r\n for (let pts of ptss)\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let p = pts[i];\r\n let nextp = pts[FixIndex(i + 1, pts)];\r\n //底面\r\n coords.push(p.x, p.y, z0, nextp.x, nextp.y, z0);\r\n //顶面\r\n coords.push(p.x, p.y, z1, nextp.x, nextp.y, z1);\r\n\r\n if (p[\"_mask_\"])//侧面\r\n coords.push(p.x, p.y, z0, p.x, p.y, z1);\r\n }\r\n\r\n return coords;\r\n}\r\n\r\nlet tempP = new Vector3;\r\n//这个代码天生不和Mesh对齐,因为独立坐标系的原因,槽的坐标系可能和主题的坐标系不一致导致的\r\nexport function FastExtrudeEdgeGeometry(ext: ExtrudeSolid, color = 0, divCount = 6, optArc = true, coords: number[] = [], inv: Matrix4 = undefined)\r\n{\r\n color = color || ext.ColorIndex;\r\n\r\n let thickness = ext.Thickness;\r\n\r\n let cu = ext.ContourCurve;\r\n let pts = cu.Shape.getPoints(divCount, optArc);\r\n\r\n let startIndex = coords.length / 3;\r\n\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let p = pts[i];\r\n let nextp = pts[FixIndex(i + 1, pts)];\r\n //底面\r\n coords.push(p.x, p.y, 0, nextp.x, nextp.y, 0);\r\n //顶面\r\n coords.push(p.x, p.y, thickness, nextp.x, nextp.y, thickness);\r\n\r\n if (p[\"_mask_\"])//侧面\r\n coords.push(p.x, p.y, 0, p.x, p.y, thickness);\r\n }\r\n\r\n let m = inv ? (ext.Grooves.length ? inv.clone() : inv).multiply(cu.OCSNoClone) : cu.OCSNoClone;\r\n\r\n if (!MatrixIsIdentityCS(m))\r\n {\r\n let count = coords.length / 3;\r\n for (let i = startIndex; i < count; i++)\r\n {\r\n let a = i * 3;\r\n let b = a + 1;\r\n let c = a + 2;\r\n\r\n tempP.set(coords[a], coords[b], coords[c]);\r\n tempP.applyMatrix4(m);\r\n coords[a] = tempP.x;\r\n coords[b] = tempP.y;\r\n coords[c] = tempP.z;\r\n }\r\n }\r\n\r\n let ocsInv = inv ? (inv.multiply(ext.OCSInv)) : ext.OCSInv;\r\n optArc = ext.Grooves.length < 100;\r\n for (let g of ext.Grooves)\r\n {\r\n FastExtrudeEdgeGeometry(g, color, divCount, optArc, coords, ocsInv.clone().multiply(g.OCSNoClone));\r\n }\r\n\r\n return coords;\r\n}\r\n\r\nexport function FastWireframe2(dr: ExtrudeHole, color = 0)\r\n{\r\n color = color || dr.ColorIndex;\r\n let material = ColorMaterial.GetLineMaterial(color);\r\n\r\n let height = dr.Height;\r\n\r\n let cu = dr.ContourCurve;\r\n let pts = cu.Shape.getPoints(6);\r\n\r\n let geo = new BufferGeometry();\r\n let coords: number[] = [];\r\n let edgeCoords: number[] = [];\r\n\r\n for (let p of pts)\r\n {\r\n coords.push(p.x, p.y, 0);\r\n if (p[\"_mask_\"])\r\n edgeCoords.push(p.x, p.y, 0, p.x, p.y, height);\r\n }\r\n for (let p of pts)\r\n coords.push(p.x, p.y, height);\r\n\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(edgeCoords, 3));\r\n geo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n\r\n let line = new Line(geo, material);\r\n line.applyMatrix4(cu.OCS);\r\n\r\n let edge = new LineSegments(edgeGeo, material);\r\n edge.applyMatrix4(cu.OCS);\r\n\r\n let result = [line, edge];\r\n\r\n return result;\r\n}\r\n","import { BufferGeometry, Vector3 } from \"three\";\r\nimport { arrayLast, arrayPushArray } from \"../Common/ArrayExt\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { equalv3 } from \"./GeUtils\";\r\n\r\n//使用轮廓点表快速拉伸\r\nexport function GenerateExtrudeEdgeGeometry(contourPoints: Vector3[][], height: number): BufferGeometry\r\n{\r\n let pts: Vector3[] = [];\r\n for (let cs of contourPoints)\r\n arrayPushArray(pts, GenerateExtrudeEdgeGeometryPoints(cs, height));\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n return geo;\r\n}\r\n\r\n//拉伸点表成为Geom\r\nfunction GenerateExtrudeEdgeGeometryPoints(contourPoints: Vector3[], height: number): Vector3[]\r\n{\r\n if (contourPoints.length < 3) return [];\r\n if (equalv3(contourPoints[0], arrayLast(contourPoints)))\r\n contourPoints.pop();\r\n let pts: Vector3[] = [];\r\n let hpts = contourPoints.map(p => new Vector3(p.x, p.y, height));\r\n let count = contourPoints.length;\r\n for (let i = 0; i < count; i++)\r\n {\r\n pts.push(contourPoints[i], contourPoints[FixIndex(i + 1, count)], hpts[i], hpts[FixIndex(i + 1, count)], contourPoints[i], hpts[i]);\r\n }\r\n return pts;\r\n}\r\n\r\n//创建一个盒子几何体\r\nexport function GenerateBoxEdgeGeometry(length: number, width: number, height: number): BufferGeometry\r\n{\r\n let pts = [new Vector3(), new Vector3(length), new Vector3(length, width), new Vector3(0, width)];\r\n return GenerateExtrudeEdgeGeometry([pts], height);\r\n}\r\n","import { 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 { ExtrudeBufferGeometry, UVGenerator, Vector2 } from \"three\";\r\n\r\n//https://github.com/mrdoob/three.js/blob/master/src/geometries/ExtrudeGeometry.js#L727\r\nclass WorldUVGenerator implements UVGenerator\r\n{\r\n generateTopUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number)\r\n {\r\n const a_x = vertices[indexA * 3];\r\n const a_y = vertices[indexA * 3 + 1];\r\n const b_x = vertices[indexB * 3];\r\n const b_y = vertices[indexB * 3 + 1];\r\n const c_x = vertices[indexC * 3];\r\n const c_y = vertices[indexC * 3 + 1];\r\n\r\n return [\r\n new Vector2(a_x, a_y),\r\n new Vector2(b_x, b_y),\r\n new Vector2(c_x, c_y)\r\n ];\r\n }\r\n\r\n generateSideWallUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number, indexD: number)\r\n {\r\n const a_x = vertices[indexA * 3];\r\n const a_y = vertices[indexA * 3 + 1];\r\n const a_z = vertices[indexA * 3 + 2];\r\n const b_x = vertices[indexB * 3];\r\n const b_y = vertices[indexB * 3 + 1];\r\n const b_z = vertices[indexB * 3 + 2];\r\n const c_x = vertices[indexC * 3];\r\n const c_y = vertices[indexC * 3 + 1];\r\n const c_z = vertices[indexC * 3 + 2];\r\n const d_x = vertices[indexD * 3];\r\n const d_y = vertices[indexD * 3 + 1];\r\n const d_z = vertices[indexD * 3 + 2];\r\n\r\n if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x))\r\n {\r\n return [\r\n new Vector2(a_x, 1 - a_z),\r\n new Vector2(b_x, 1 - b_z),\r\n new Vector2(c_x, 1 - c_z),\r\n new Vector2(d_x, 1 - d_z)\r\n ];\r\n }\r\n else\r\n {\r\n return [\r\n new Vector2(a_y, 1 - a_z),\r\n new Vector2(b_y, 1 - b_z),\r\n new Vector2(c_y, 1 - c_z),\r\n new Vector2(d_y, 1 - d_z)\r\n ];\r\n }\r\n }\r\n}\r\n\r\nexport const worldUVGenerator = new WorldUVGenerator();\r\n","import geom3 from \"@jscad/modeling/src/geometries/geom3\";\r\nimport { Geom3 } from \"@jscad/modeling/src/geometries/types\";\r\nimport { Mat4 } from \"@jscad/modeling/src/maths/mat4\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport { intersect } from \"@jscad/modeling/src/operations/booleans\";\r\nimport { Matrix4 } from \"three\";\r\n\r\nexport interface PolygonRes\r\n{\r\n vertices: Array<Vec3>,\r\n plane: [number, number, number, number];\r\n}\r\n\r\nexport interface Geom3Res\r\n{\r\n polygons: Array<{\r\n vertices: Array<Vec3>,\r\n plane: [number, number, number, number];\r\n }>;\r\n}\r\n\r\nexport function CSGIntersect(csg1: Geom3, csg2: Geom3, csg2tranfrom: Matrix4): Geom3\r\n{\r\n //因为内部使用geom3进行box cache 所以我们新建了一个geom3 避免被cache导致错误\r\n let csg1Clone = geom3.create(csg1.polygons.concat());\r\n let csg2Clone = geom3.create(csg2.polygons.concat());\r\n csg2Clone.transforms = csg2tranfrom.elements as Mat4;\r\n return intersect(csg1Clone, csg2Clone);\r\n}\r\n","import { Geom3, Poly3 } from \"@jscad/modeling/src/geometries/types\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport { Vector3 } from \"three\";\r\nimport { ToFixed } from \"../Common/Utils\";\r\n\r\n/**\r\n * 解决 THREEBSP(CSG) 产生的结果没有办法得到分裂的个数.\r\n * 本类分析了THREEBSP的组合情况.\r\n *\r\n * Example:\r\n *\r\n * let topology = new BSPGroupParse(csg);\r\n * topology.parse();\r\n */\r\nexport class BSPGroupParse\r\n{\r\n constructor(bsp?: Geom3, public fractionDigits = 1)\r\n {\r\n if (bsp)\r\n for (let poly of bsp.polygons)\r\n this.Add(poly);\r\n }\r\n Add(poly: Poly3)\r\n {\r\n let strs = poly.vertices.map(p => this.GenerateP(p));\r\n let str0 = strs[0];\r\n let s0 = this.Get(str0);\r\n for (let i = 1; i < strs.length; i++)\r\n {\r\n let stri = strs[i];\r\n s0.add(stri);\r\n this.Get(stri).add(str0);\r\n }\r\n }\r\n\r\n /**\r\n * 返回组合点\r\n */\r\n Parse(): Vector3[][]\r\n {\r\n let set = new Set([...this.map.keys()]);\r\n let res: Vector3[][] = [];\r\n while (set.size > 0)\r\n {\r\n let fp = set[Symbol.iterator]().next().value;\r\n set.delete(fp);\r\n let cset = new Set<string>();\r\n cset.add(fp);\r\n this.GetPts(fp, cset, set);\r\n let pts = [...cset].map(str =>\r\n {\r\n let v3 = this.vecMap.get(str);\r\n return new Vector3().fromArray(v3);\r\n });\r\n res.push(pts);\r\n }\r\n return res;\r\n }\r\n private map = new Map<string, Set<string>>();\r\n private Get(vstr: string): Set<string>\r\n {\r\n if (!this.map.has(vstr))\r\n {\r\n let s = new Set<string>();\r\n this.map.set(vstr, s);\r\n return s;\r\n }\r\n return this.map.get(vstr);\r\n }\r\n private GetPts(p: string, cset: Set<string>, oset: Set<string>)\r\n {\r\n let strs = this.map.get(p);\r\n for (let str of strs)\r\n {\r\n if (!cset.has(str))\r\n {\r\n cset.add(str);\r\n oset.delete(str);\r\n this.GetPts(str, cset, oset);\r\n }\r\n }\r\n }\r\n private vecMap: Map<string, Vec3> = new Map();\r\n private GenerateP(v: Vec3)\r\n {\r\n let str = v.map(n => ToFixed(n, this.fractionDigits)).join(\",\");\r\n this.vecMap.set(str, v);\r\n return str;\r\n }\r\n}\r\n","import geom3, { toPolygons } from \"@jscad/modeling/src/geometries/geom3\";\r\nimport { Geom3 } from \"@jscad/modeling/src/geometries/types\";\r\nimport { Mat4 } from \"@jscad/modeling/src/maths/mat4\";\r\nimport { measureAggregateVolume } from \"@jscad/modeling/src/measurements\";\r\nimport { intersect, scission } from \"@jscad/modeling/src/operations/booleans\";\r\nimport { Vector2, Vector3 } from \"three\";\r\nimport { CSGIntersect } from \"../../Common/CSGIntersect\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { ExtrudeSolid } from \"../../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline, PolylineProps } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { BSPGroupParse } from \"../../Geometry/BSPGroupParse\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { CreateContour2 } from \"../../Geometry/CreateContour2\";\r\nimport { AsVector2, AsVector3, MoveMatrix, equaln, equalv3 } from \"../../Geometry/GeUtils\";\r\n/**\r\n * @Finish 目前已实现\r\n * 1. 圆弧板垂直切普通板\r\n * 2. 普通板穿透切圆弧板\r\n * @TODO 当前问题记录\r\n * 1. 普通板切圆弧板,凹槽的长度与厚度如何确定?(目前写死厚度切穿, 长度切断)\r\n * 2. 圆弧板切普通版, 若二者不垂直,存在夹角,怎么办?(目前不考虑)\r\n * 3. 圆弧板切圆弧板,如何处理?(目前不考虑)\r\n * 4. 平行情况,如何处理?(目前不考虑)\r\n * @Log 2024/06/20\r\n * 处理问题1采用CSG的包围盒与路径求交方式来确定凹槽的长度\r\n * @Log 2024/06/21\r\n * 发现问题并处理: 若圆弧板为异形板,垂直切普通板,生成的凹槽还是整段路径\r\n * 发现问题并处理: 由于精度问题,导致切割后在切割,依旧有交集,故这里加了体积过滤\r\n * @Log 2024/06/25\r\n * 优化: 优化体积过滤改用CSG真实的体积计算\r\n * 重构: 重构了代码结构修复了普通板切圆弧板的bug(采用点集投影,而非之前的包围盒)\r\n * @Log 2024/06/26\r\n * 处理问题2采用对CSG上下面进行投影然后转为面域做并集从而生成凹槽\r\n * @Log 2024/06/27\r\n * 优化问题2面域的布尔运算很慢容易造成肉眼可见的卡顿(约1-2秒)现在改用project\r\n * @Log 2024/07/02\r\n * 发现问题并处理: project存在精度问题导致凹槽的长度不准确故做了修正(若快切断则为切断)\r\n * @Log 2024/07/10\r\n * 优化: 当普通版斜切圆弧板时,采用逆映射生成凹槽轮廓,而非原有的矩形轮廓\r\n * @Log 2024/07/11\r\n * 优化: 改用C2R生成凹槽的轮廓线而非之前的project因为它不准\r\n * 处理问题3通过逆映射实现圆弧板切圆弧板\r\n */\r\n\r\n/** 针对圆弧板的板件切割*/\r\nexport class BoardCuttingForSweep\r\n{\r\n /** 生成圆弧板的切割器*/\r\n constructor(private meat: Board, private knife: Board)\r\n {\r\n this.meat = meat;\r\n this.knife = knife;\r\n }\r\n\r\n /** 生成凹槽 */\r\n ConverToLocalGroove()\r\n {\r\n const meat = this.meat;\r\n const knife = this.knife;\r\n // 确保圆弧板构建成功\r\n meat.MeshGeometry;\r\n knife.MeshGeometry;\r\n // 二者都是圆弧板\r\n if (knife.IsArcBoard && meat.IsArcBoard)\r\n return this.ArcCutArc();\r\n // 刀是圆弧板\r\n if (knife.IsArcBoard)\r\n return this.ArcCutBoard();\r\n // 肉是圆弧板\r\n if (meat.IsArcBoard)\r\n return this.BoardCutArc();\r\n return [];\r\n }\r\n\r\n /** 圆弧板切普通板 */\r\n private ArcCutBoard()\r\n {\r\n const meat = this.meat;\r\n const knife = this.knife;\r\n /** 生成轮廓-垂直切 */\r\n const CreateContour = () =>\r\n {\r\n const contours: Polyline[] = [];\r\n // 路径信息\r\n const path1 = knife.GetSweepPath1InWCS().ApplyMatrix(meat.OCSInv);\r\n const path2 = knife.GetSweepPath2InWCS().ApplyMatrix(meat.OCSInv);\r\n path1.Z0();\r\n path2.Z0();\r\n // 不垂直\r\n if (!equalv3(path1.Normal, new Vector3(0, 0, 1)) && !equalv3(path1.Normal, new Vector3(0, 0, -1)))\r\n return CreateContourByOblique();\r\n // CSG\r\n const interCSG = CSGIntersect(meat.CSG, knife.CSG, meat.OCSInv.multiply(knife.OCSNoClone));\r\n const interCSGs = scission(interCSG as unknown as Geom3) as unknown as Geom3[];\r\n for (const interCSG of interCSGs)\r\n {\r\n // 过滤掉小于肉的1/10000体积的凹槽\r\n const interVolume = measureAggregateVolume(interCSG);\r\n const meatVolume = measureAggregateVolume(meat.CSG);\r\n if (interVolume < meatVolume / 10000)\r\n continue;\r\n // 投影取点\r\n const pts = this.ProjectCSGToPts(interCSG, \"Z\");\r\n const range1 = this.GetParamRange(pts, path1);\r\n const range2 = this.GetParamRange(pts, path2);\r\n // 获取局部路径\r\n const sp1 = path1.GetPointAtParam(range1.sParam);\r\n const ep1 = path1.GetPointAtParam(range1.eParam);\r\n const sp2 = path2.GetPointAtParam(range2.sParam);\r\n const ep2 = path2.GetPointAtParam(range2.eParam);\r\n const localPath1 = this.Get_Pl_InAtoB(path1, sp1, ep1);\r\n const localPath2 = this.Get_Pl_InAtoB(path2, sp2, ep2);\r\n // 围成轮廓\r\n const line1 = new Line(localPath1.StartPoint, localPath2.StartPoint);\r\n const line2 = new Line(localPath1.EndPoint, localPath2.EndPoint);\r\n const contour = localPath1.Clone() as Polyline;\r\n contour.Join(line1);\r\n contour.Join(line2);\r\n contour.Join(localPath2);\r\n // 修正轮廓\r\n this.AdjustPolyline(contour);\r\n contours.push(contour);\r\n }\r\n return contours;\r\n };\r\n /** 生成轮廓-斜切(任意角度) */\r\n const CreateContourByOblique = () =>\r\n {\r\n const contours: Polyline[] = [];\r\n // CSG\r\n const interCSG = CSGIntersect(meat.CSG, knife.CSG, meat.OCSInv.multiply(knife.OCSNoClone));\r\n const interCSGs = scission(interCSG as unknown as Geom3) as unknown as Geom3[];\r\n for (const interCSG of interCSGs)\r\n {\r\n // 过滤掉小于肉的1/10000体积的凹槽\r\n const interVolume = measureAggregateVolume(interCSG);\r\n const meatVolume = measureAggregateVolume(meat.CSG);\r\n if (interVolume < meatVolume / 10000)\r\n continue;\r\n const contour = this.CSGToPolyline(interCSG);\r\n // 修正轮廓\r\n this.AdjustPolyline(contour);\r\n contours.push(contour);\r\n }\r\n return contours;\r\n };\r\n /** 生成凹槽 */\r\n const CreateGroove = (contourCurve: Polyline) =>\r\n {\r\n /** 凹槽 */\r\n const groove = new ExtrudeSolid();\r\n // @ts-ignore 直接修改即可(省略OCS转换)\r\n groove.contourCurve = contourCurve;\r\n // 获取凹槽的厚度\r\n const interCSG = CSGIntersect(meat.CSG, knife.CSG, meat.OCSInv.multiply(knife.OCSNoClone));\r\n const topology = new BSPGroupParse(interCSG);\r\n const interBox = new Box3Ext();\r\n for (let pts of topology.Parse())\r\n interBox.setFromPoints(pts);\r\n const interBoxSize = interBox.getSize(new Vector3());\r\n groove.Thickness = interBoxSize.z;\r\n // 修正厚度\r\n if (equaln(groove.Thickness, meat.Thickness, 0.1))\r\n groove.Thickness = meat.Thickness;\r\n // 修正位置\r\n groove.OCS = meat.OCS;\r\n if (interBox.min.z > 0)\r\n groove.ApplyMatrix(MoveMatrix(meat.Normal.multiplyScalar(meat.Thickness - groove.Thickness)));\r\n return groove;\r\n };\r\n const grooves: ExtrudeSolid[] = [];\r\n // 1.生成轮廓\r\n const grooveContours = CreateContour();\r\n // 2.生成凹槽\r\n for (const grooveContour of grooveContours)\r\n {\r\n const groove = CreateGroove(grooveContour);\r\n grooves.push(groove);\r\n }\r\n return grooves;\r\n }\r\n\r\n /** 普通板切圆弧板 */\r\n private BoardCutArc()\r\n {\r\n const meat = this.meat;\r\n const knife = this.knife;\r\n /** 生成轮廓-垂直切 */\r\n const CreateContour = () =>\r\n {\r\n const contours: Polyline[] = [];\r\n // 路径信息\r\n const path = meat.GetSweepPathInWCS().ApplyMatrix(meat.OCSInv);\r\n const tempPath = meat.GetSweepPathInWCS().ApplyMatrix(knife.OCSInv);\r\n // 不垂直(或有放样角度,这里偷懒了,懒得去算了,直接按不垂直处理)\r\n if (!equalv3(tempPath.Normal, new Vector3(0, 0, 1)) && !equalv3(tempPath.Normal, new Vector3(0, 0, -1)) || meat.SweepAngle !== 0)\r\n return CreateContourByOblique();\r\n // CSG\r\n const csg1Clone = geom3.create(meat.CSG.polygons.concat());\r\n const csg2Clone = geom3.create(knife.CSG.polygons.concat());\r\n csg1Clone.transforms = meat.OCS.elements as Mat4;\r\n csg2Clone.transforms = knife.OCS.elements as Mat4;\r\n const interCSG = intersect(csg1Clone, csg2Clone);\r\n interCSG.transforms = meat.OCSInv.elements as Mat4;\r\n intersect(interCSG, interCSG);\r\n const interCSGs = scission(interCSG);\r\n for (const interCSG of interCSGs)\r\n {\r\n // 过滤掉小于肉的100体积的凹槽(这里甩固定值)\r\n const interVolume = measureAggregateVolume(interCSG);\r\n if (interVolume < 100)\r\n continue;\r\n const topology = new BSPGroupParse(interCSG);\r\n /** 交集部分的包围盒 */\r\n const box = new Box3Ext(new Vector3(Infinity, Infinity, Infinity), new Vector3(-Infinity, -Infinity, -Infinity));\r\n const ptsList = topology.Parse();\r\n for (let pts of ptsList)\r\n {\r\n box.min.x = Math.min(box.min.x, ...pts.map(p => p.x));\r\n box.min.y = Math.min(box.min.y, ...pts.map(p => p.y));\r\n box.min.z = Math.min(box.min.z, ...pts.map(p => p.z));\r\n box.max.x = Math.max(box.max.x, ...pts.map(p => p.x));\r\n box.max.y = Math.max(box.max.y, ...pts.map(p => p.y));\r\n box.max.z = Math.max(box.max.z, ...pts.map(p => p.z));\r\n }\r\n // 投影取点\r\n const pts = this.ProjectCSGToPts(interCSG, \"Y\");\r\n // 计算槽的长度\r\n const range = this.GetParamRange(pts, path);\r\n // 获取局部路径\r\n const sDist1 = path.GetDistAtParam(range.sParam);\r\n const eDist1 = path.GetDistAtParam(range.eParam);\r\n /** 凹槽轮廓-多段线 */\r\n const contour = new Polyline();\r\n contour.LineData.push({ pt: new Vector2(sDist1, box.min.y), bul: 0 });\r\n contour.LineData.push({ pt: new Vector2(eDist1, box.min.y), bul: 0 });\r\n contour.LineData.push({ pt: new Vector2(eDist1, box.max.y), bul: 0 });\r\n contour.LineData.push({ pt: new Vector2(sDist1, box.max.y), bul: 0 });\r\n contour.LineData.push({ pt: new Vector2(sDist1, box.min.y), bul: 0 });\r\n // 修正轮廓\r\n this.AdjustPolyline(contour);\r\n contours.push(contour);\r\n }\r\n return contours;\r\n };\r\n /** 生成轮廓-斜切(任意角度) */\r\n const CreateContourByOblique = () =>\r\n {\r\n const contours: Polyline[] = [];\r\n // CSG\r\n const CSG = CSGIntersect(meat.CSG, knife.CSG, meat.OCSInv.multiply(knife.OCSNoClone)) as unknown as Geom3;\r\n CSG.transforms = meat.OCS.elements as Mat4;\r\n const interCSGs = scission(CSG as unknown as Geom3) as unknown as Geom3[];\r\n for (const interCSG of interCSGs)\r\n {\r\n // 过滤掉小于肉的1/10000体积的凹槽\r\n const interVolume = measureAggregateVolume(interCSG);\r\n const meatVolume = measureAggregateVolume(meat.CSG);\r\n if (interVolume < meatVolume / 10000)\r\n continue;\r\n // 对CSG进行逆映射\r\n this.InverseCSG(interCSG);\r\n const contour = this.CSGToPolyline(interCSG);\r\n // 修正轮廓\r\n this.AdjustPolyline(contour);\r\n contours.push(contour);\r\n }\r\n return contours;\r\n };\r\n /** 生成凹槽 */\r\n const CreateGroove = (contourCurve: Polyline) =>\r\n {\r\n /** 凹槽 */\r\n const groove = new ExtrudeSolid();\r\n // @ts-ignore 直接修改即可(省略OCS转换)\r\n groove.contourCurve = contourCurve;\r\n // 更新凹槽的厚度\r\n this.UpdateGrooveThickness(groove);\r\n return groove;\r\n };\r\n const grooves: ExtrudeSolid[] = [];\r\n const grooveContours = CreateContour();\r\n for (const grooveContour of grooveContours)\r\n {\r\n /** 凹槽 */\r\n const groove = CreateGroove(grooveContour);\r\n grooves.push(groove);\r\n }\r\n return grooves;\r\n }\r\n\r\n /** 圆弧板切圆弧板 */\r\n private ArcCutArc()\r\n {\r\n const meat = this.meat;\r\n const knife = this.knife;\r\n /** 生成轮廓 */\r\n const CreateContour = () =>\r\n {\r\n const contours: Polyline[] = [];\r\n // CSG\r\n const CSG = CSGIntersect(meat.CSG, knife.CSG, meat.OCSInv.multiply(knife.OCSNoClone)) as unknown as Geom3;\r\n CSG.transforms = meat.OCS.elements as Mat4;\r\n const interCSGs = scission(CSG as unknown as Geom3) as unknown as Geom3[];\r\n for (const interCSG of interCSGs)\r\n {\r\n // 过滤掉小于肉的1/10000体积的凹槽\r\n const interVolume = measureAggregateVolume(interCSG);\r\n const meatVolume = measureAggregateVolume(meat.CSG);\r\n if (interVolume < meatVolume / 10000)\r\n continue;\r\n // 对CSG进行逆映射\r\n this.InverseCSG(interCSG);\r\n const contour = this.CSGToPolyline(interCSG);\r\n // 修正轮廓\r\n this.AdjustPolyline(contour);\r\n contours.push(contour);\r\n }\r\n return contours;\r\n };\r\n /** 生成凹槽 */\r\n const CreateGroove = (contourCurve: Polyline) =>\r\n {\r\n /** 凹槽 */\r\n const groove = new ExtrudeSolid();\r\n // @ts-ignore 直接修改即可(省略OCS转换)\r\n groove.contourCurve = contourCurve;\r\n // 更新凹槽的厚度\r\n this.UpdateGrooveThickness(groove);\r\n return groove;\r\n };\r\n const grooves: ExtrudeSolid[] = [];\r\n const grooveContours = CreateContour();\r\n for (const grooveContour of grooveContours)\r\n {\r\n /** 凹槽 */\r\n const groove = CreateGroove(grooveContour);\r\n grooves.push(groove);\r\n }\r\n return grooves;\r\n }\r\n\r\n /** 更新凹槽厚度 */\r\n private UpdateGrooveThickness(groove: ExtrudeSolid)\r\n {\r\n const meat = this.meat;\r\n const knife = this.knife;\r\n let grooveThickness = meat.Thickness;\r\n let dir = false;\r\n const interCSG = CSGIntersect(meat.CSG, knife.CSG, meat.OCSInv.multiply(knife.OCSNoClone));\r\n /** 通过包围盒获取凹槽厚度 */\r\n const GetThinknessByBox = (): [number, boolean] =>\r\n {\r\n const topology = new BSPGroupParse(interCSG);\r\n const interBox = new Box3Ext();\r\n for (let pts of topology.Parse())\r\n interBox.setFromPoints(pts);\r\n const interBoxSize = interBox.getSize(new Vector3());\r\n const grooveThickness = interBoxSize.z;\r\n const dir = interBox.min.z > 0;\r\n return [grooveThickness, dir];\r\n };\r\n /** 通过路径获取凹槽厚度 */\r\n const GetThinknessByPath = (): [number, boolean] =>\r\n {\r\n const path1 = meat.GetSweepPath1InWCS().ApplyMatrix(meat.OCSInv);\r\n const path2 = meat.GetSweepPath2InWCS().ApplyMatrix(meat.OCSInv);\r\n const pts = this.ProjectCSGToPts(interCSG, \"Y\");\r\n const isInPath1 = pts.some(pt => path1.PtOnCurve(pt, 0.5));\r\n const grooveThickness = this.GetDistToPl(pts, isInPath1 ? path1 : path2);\r\n const dir = !isInPath1;\r\n return [grooveThickness, dir];\r\n };\r\n if (meat.IsArcBoard)\r\n {\r\n [grooveThickness, dir] = GetThinknessByPath();\r\n // 如果很小说明是CSG的有平面导致只有一侧的顶点故此时可以改用包围盒\r\n if (grooveThickness < 0.1)\r\n [grooveThickness] = GetThinknessByBox();\r\n }\r\n else\r\n [grooveThickness, dir] = GetThinknessByBox();\r\n groove.Thickness = grooveThickness;\r\n // 修正厚度\r\n if (equaln(groove.Thickness, meat.Thickness, 0.1))\r\n groove.Thickness = meat.Thickness;\r\n // 修正位置\r\n groove.OCS = meat.OCS;\r\n if (dir)\r\n groove.ApplyMatrix(MoveMatrix(meat.Normal.multiplyScalar(meat.Thickness - groove.Thickness)));\r\n }\r\n\r\n /** 计算点集到多段线的距离 */\r\n private GetDistToPl(pts: Vector3[], pl: Polyline)\r\n {\r\n let dist = 0;\r\n for (const pt of pts)\r\n {\r\n const closestPt = pl.GetClosestPointTo(pt, false);\r\n dist = Math.max(closestPt.distanceTo(pt), dist);\r\n }\r\n return dist;\r\n }\r\n\r\n /** 对CSG进行逆映射(根据放样路径) */\r\n private InverseCSG(interCSG: Geom3)\r\n {\r\n const meat = this.meat;\r\n const pathWCS = meat.GetSweepPathInWCS();\r\n const path = pathWCS.Clone().ApplyMatrix(pathWCS.OCSInv);\r\n for (const polygon of interCSG.polygons)\r\n {\r\n for (const vertice of polygon.vertices)\r\n {\r\n const p = new Vector3(vertice[0], vertice[1], vertice[2]);\r\n p.applyMatrix4(pathWCS.OCSInv);\r\n const cp = path.GetClosestPointTo(p, false);\r\n const param = Math.max(path.GetParamAtPoint(cp), 0);\r\n const x = path.GetDistAtParam(param);\r\n const y = -p.z;\r\n p.y = y;\r\n p.x = x;\r\n vertice[0] = p.x;\r\n vertice[1] = p.y;\r\n }\r\n }\r\n }\r\n\r\n /** 对CSG进行投影返回点集 */\r\n private ProjectCSGToPts(CSG: Geom3, dir: \"X\" | \"Y\" | \"Z\" = \"Z\")\r\n {\r\n // 转为点集\r\n const topology = new BSPGroupParse(CSG);\r\n const ps: Vector3[] = [];\r\n for (let pts of topology.Parse())\r\n {\r\n for (const pt of pts)\r\n {\r\n const fuzz = 0.1;\r\n // 对CSG进行投影\r\n if (dir === \"Z\")\r\n {\r\n if (!ps.find(p => equaln(p.x, pt.x, fuzz) && equaln(p.y, pt.y, fuzz)))\r\n {\r\n pt.z = 0;\r\n ps.push(pt);\r\n }\r\n }\r\n else if (dir === \"Y\")\r\n {\r\n if (!ps.find(p => equaln(p.x, pt.x, fuzz) && equaln(p.z, pt.z, fuzz)))\r\n {\r\n pt.y = 0;\r\n ps.push(pt);\r\n }\r\n }\r\n }\r\n }\r\n return ps;\r\n };\r\n\r\n /** 对CSG进行投影返回多段线 */\r\n private CSGToPolyline(CSG: Geom3)\r\n {\r\n const polygons = toPolygons(CSG);\r\n const pls: Polyline[] = [];\r\n for (const polygon of polygons)\r\n {\r\n const pl = new Polyline();\r\n for (const v of polygon.vertices)\r\n {\r\n const pt = new Vector2(v[0], v[1]);\r\n pl.LineData.push({ pt, bul: 0 });\r\n pl.CloseMark = true; // 强制闭合\r\n }\r\n pls.push(pl);\r\n }\r\n // 若报错可能是c2r的精度不足导致的\r\n return CreateContour2(pls).Curve as Polyline;\r\n };\r\n\r\n /** 获取CSG在路径上的param范围 */\r\n private GetParamRange(pts: Vector3[], path: Polyline)\r\n {\r\n // 与路径匹配\r\n const range = {\r\n sParam: Infinity,\r\n eParam: -Infinity\r\n };\r\n for (const pt of pts)\r\n {\r\n const cpt = path.GetClosestPointTo(pt, false);\r\n const param = path.GetParamAtPoint(cpt);\r\n if (param || param === 0)\r\n {\r\n range.sParam = Math.min(range.sParam, param);\r\n range.eParam = Math.max(range.eParam, param);\r\n }\r\n }\r\n // 避免应精度出现小于0的情况\r\n range.sParam = Math.max(0, range.sParam);\r\n return range;\r\n }\r\n\r\n /** 获取pA-pB之间的曲线 */\r\n private Get_Pl_InAtoB(pl: Polyline, pA: Vector3, pB: Vector3)\r\n {\r\n const paramA = pl.GetParamAtPoint(pA);\r\n const pls = pl.GetSplitCurves(paramA);\r\n pl = pls[1] || pls[0];\r\n const paramB = pl.GetParamAtPoint(pB);\r\n const pls2 = pl.GetSplitCurves(paramB);\r\n return pls2[0];\r\n };\r\n\r\n /** 修正轮廓线(避免造型的布尔运算错误) */\r\n private AdjustPolyline(pl: Polyline)\r\n {\r\n const meat = this.meat;\r\n // 修正轮廓\r\n const newData: PolylineProps[] = [];\r\n for (const LineData of pl.LineData)\r\n {\r\n // 针对放样角度做出修正\r\n const pt = AsVector3(LineData.pt).applyMatrix4(pl.OCS).applyMatrix4(meat.ArcBuild.Rotate2OCSMtx);\r\n // 针对边缘噪点做出修正\r\n this.AdjustPtClosePl(pt, meat.ContourCurve as Polyline);\r\n pt.applyMatrix4(pl.OCSInv);\r\n newData.push({ pt: AsVector2(pt), bul: LineData.bul });\r\n }\r\n pl.LineData = newData;\r\n }\r\n\r\n /** 调整点到线的最近点 */\r\n private AdjustPtClosePl(pt: Vector3, pl: Polyline)\r\n {\r\n const closestPt = pl.GetClosestPointTo(pt, false);\r\n const dist = pt.distanceTo(closestPt);\r\n if (dist < 1e-1)\r\n pt.copy(closestPt);\r\n };\r\n}\r\n","import { ExtrudeBufferGeometry, UVGenerator, Vector2 } from \"three\";\r\n\r\nclass BoardUVGenerator implements UVGenerator\r\n{\r\n generateTopUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number)\r\n {\r\n const a_x = vertices[indexA * 3];\r\n const a_y = vertices[indexA * 3 + 1];\r\n const b_x = vertices[indexB * 3];\r\n const b_y = vertices[indexB * 3 + 1];\r\n const c_x = vertices[indexC * 3];\r\n const c_y = vertices[indexC * 3 + 1];\r\n\r\n return [\r\n new Vector2(a_x, a_y),\r\n new Vector2(b_x, b_y),\r\n new Vector2(c_x, c_y)\r\n ];\r\n }\r\n generateSideWallUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number, indexD: number)\r\n {\r\n const a_x = vertices[indexA * 3];\r\n const a_y = vertices[indexA * 3 + 1];\r\n const a_z = vertices[indexA * 3 + 2];\r\n const b_x = vertices[indexB * 3];\r\n const b_y = vertices[indexB * 3 + 1];\r\n const b_z = vertices[indexB * 3 + 2];\r\n const c_x = vertices[indexC * 3];\r\n const c_y = vertices[indexC * 3 + 1];\r\n const c_z = vertices[indexC * 3 + 2];\r\n const d_x = vertices[indexD * 3];\r\n const d_y = vertices[indexD * 3 + 1];\r\n const d_z = vertices[indexD * 3 + 2];\r\n\r\n if (Math.abs(a_y - b_y) < Math.abs(a_x - b_x))\r\n {\r\n return [\r\n new Vector2(a_z - 1, a_x),\r\n new Vector2(b_z - 1, b_x),\r\n new Vector2(c_z - 1, c_x),\r\n new Vector2(d_z - 1, d_x)\r\n ];\r\n }\r\n else\r\n {\r\n return [\r\n new Vector2(a_z - 1, a_y),\r\n new Vector2(b_z - 1, b_y),\r\n new Vector2(c_z - 1, c_y),\r\n new Vector2(d_z - 1, d_y)\r\n ];\r\n }\r\n }\r\n}\r\n\r\nclass BoardUVGenerator2 extends BoardUVGenerator\r\n{\r\n generateTopUV(geometry: ExtrudeBufferGeometry, vertices: number[], indexA: number, indexB: number, indexC: number)\r\n {\r\n const a_x = vertices[indexA * 3];\r\n const a_y = vertices[indexA * 3 + 1];\r\n const b_x = vertices[indexB * 3];\r\n const b_y = vertices[indexB * 3 + 1];\r\n const c_x = vertices[indexC * 3];\r\n const c_y = vertices[indexC * 3 + 1];\r\n\r\n return [\r\n new Vector2(a_y, a_x),\r\n new Vector2(b_y, b_x),\r\n new Vector2(c_y, c_x)\r\n ];\r\n }\r\n}\r\n\r\nexport let boardUVGenerator = new BoardUVGenerator();\r\nexport let boardUVGenerator2 = new BoardUVGenerator2();\r\n","import { Matrix4 } from 'three';\r\nimport { IntersectBox2 } from '../Geometry/Box';\r\nimport { BoolOpeartionType } from '../GraphicsSystem/BoolOperateUtils';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Shape } from './Shape';\r\n\r\n\r\nexport class ShapeManager\r\n{\r\n constructor(private _ShapeList: Shape[] = [])\r\n {\r\n\r\n }\r\n\r\n get ShapeList(): Shape[]\r\n {\r\n return this._ShapeList.slice();\r\n }\r\n get ShapeCount()\r\n {\r\n return this._ShapeList.length;\r\n }\r\n get ShapeArea()\r\n {\r\n return this._ShapeList.map(s => s.Area).reduce((a1, a2) => a1 + a2, 0);\r\n }\r\n AppendShapeList(shapes: Shape | Shape[])\r\n {\r\n Array.isArray(shapes) ? this._ShapeList.push(...shapes) : this._ShapeList.push(shapes);\r\n return this;\r\n }\r\n Clear()\r\n {\r\n this._ShapeList.length = 0;\r\n }\r\n BoolOper(otherMg: ShapeManager, booltype: BoolOpeartionType)\r\n {\r\n switch (booltype)\r\n {\r\n case BoolOpeartionType.Intersection:\r\n return this.IntersectionBoolOperation(otherMg);\r\n case BoolOpeartionType.Union:\r\n return this.UnionBoolOperation(otherMg);\r\n case BoolOpeartionType.Subtract:\r\n return this.SubstactBoolOperation(otherMg);\r\n }\r\n }\r\n //交集 如果成功返回一个面域 失败返回0个\r\n IntersectionBoolOperation(target: ShapeManager)\r\n {\r\n let shapes: Shape[] = [];\r\n for (let srcShape of this._ShapeList)\r\n {\r\n for (let tarShape of target._ShapeList)\r\n {\r\n let tmpShapes = srcShape.IntersectionBoolOperation(tarShape);\r\n shapes.push(...tmpShapes);\r\n }\r\n }\r\n this.Clear();\r\n this._ShapeList = shapes;\r\n return this._ShapeList.length > 0;\r\n }\r\n //并集,如果有一个形状并集成功,就成功\r\n UnionBoolOperation(targetMg: ShapeManager)\r\n {\r\n let isSuccess = false;\r\n let srcShapes = this._ShapeList;\r\n let tarShapes = targetMg._ShapeList;\r\n\r\n let alones: Shape[] = [];//孤立的形状\r\n\r\n const boxCache = new WeakMap();\r\n\r\n for (let src of srcShapes)\r\n {\r\n let notUnions: Shape[] = [];//未被合并的形状列表 来自tarShapes\r\n let srcBox = src.BoundingBox;\r\n for (let tar of tarShapes)\r\n {\r\n let tarBox = boxCache.get(tar);\r\n if (!tarBox)\r\n {\r\n tarBox = tar.BoundingBox;\r\n boxCache.set(tar, tarBox);\r\n }\r\n if (!IntersectBox2(srcBox, tarBox))\r\n {\r\n notUnions.push(tar);\r\n continue;\r\n }\r\n let unions = src.UnionBoolOperation(tar);\r\n if (unions.length === 1)//并集成功\r\n {\r\n isSuccess = true;\r\n src = unions[0];//src设置为 合并完的形状\r\n }\r\n else//并集失败\r\n notUnions.push(tar); //设置为未计算\r\n }\r\n\r\n //如果发现src和任意一个形状并集成功,那么\r\n if (notUnions.length !== tarShapes.length)\r\n {\r\n notUnions.push(src); //加入src 进行下一轮\r\n tarShapes = notUnions;\r\n }\r\n else\r\n alones.push(src);//它是孤独的一个形状\r\n }\r\n\r\n this._ShapeList = alones.concat(tarShapes);\r\n return isSuccess;\r\n }\r\n\r\n SubstactBoolOperation(target: ShapeManager)\r\n {\r\n let newShapes: Shape[] = [];\r\n for (let s of this._ShapeList)\r\n {\r\n let ss = s.SubstactBoolOperation(target.ShapeList);\r\n newShapes.push(...ss);\r\n }\r\n this._ShapeList = newShapes;\r\n return true;\r\n }\r\n\r\n /**\r\n * 与region.ApplyMatrix不同的是,这个是直接操作内部对象.\r\n * 通常用来计算布尔运算时需要真实的移动这个位置.\r\n * 并且将不会刷新显示\r\n *\r\n * @param {Matrix4} mat4\r\n * @memberof ShapeManager\r\n */\r\n ApplyMatrix(mat4: Matrix4)\r\n {\r\n for (let s of this._ShapeList)\r\n {\r\n s.Outline.Curve.ApplyMatrix(mat4);\r\n s.Holes.forEach(o => o.Curve.ApplyMatrix(mat4));\r\n }\r\n\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();//1\r\n let cout = file.Read();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let obj = new Shape();\r\n obj.ReadFile(file);\r\n this._ShapeList.push(obj);\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);//ver\r\n file.Write(this.ShapeList.length);\r\n for (let s of this.ShapeList)\r\n {\r\n s.WriteFile(file);\r\n }\r\n }\r\n}\r\n","import { Box3, BufferGeometry, LineSegments, Material, Matrix3, Matrix4, Mesh, Object3D, ShapeGeometry, Vector2, Vector3 } from 'three';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { BufferGeometryUtils, BufferGeometryUtils as BufferGeometryUtils2 } from '../../Geometry/BufferGeometryUtils';\r\nimport { AsVector3, MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { ScaleUV } from '../../Geometry/UVUtils';\r\nimport { BoolOpeartionType } from '../../GraphicsSystem/BoolOperateUtils';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Contour } from '../Contour';\r\nimport { Shape } from '../Shape';\r\nimport { ShapeManager } from '../ShapeManager';\r\nimport { Curve } from './Curve';\r\nimport { Entity } from './Entity';\r\n\r\n@Factory\r\nexport class Region extends Entity\r\n{\r\n static CreateFromCurves(cus: Curve[] | (Curve[])[]): Region | undefined\r\n {\r\n let shapes = Contour.GetAllContour(cus).map(out => new Shape(out));\r\n if (shapes.length > 0)\r\n {\r\n let reg = new Region();\r\n //MarkX:曲线同面域一起移动\r\n reg.ApplyMatrix(shapes[0].Outline.Curve.OCS);\r\n reg.ShapeManager.AppendShapeList(shapes);\r\n return reg;\r\n }\r\n }\r\n\r\n constructor(private _ShapeManager: ShapeManager = new ShapeManager())\r\n {\r\n super();\r\n }\r\n\r\n //如果需要修改获取到的属性,需要Clone后进行操作,否则会对原实体进行破坏\r\n get ShapeManager()\r\n {\r\n return this._ShapeManager;\r\n }\r\n get Area()\r\n {\r\n return this.ShapeManager.ShapeArea;\r\n }\r\n get BoundingBox()\r\n {\r\n let box = new Box3();\r\n for (let s of this._ShapeManager.ShapeList)\r\n box.union(s.BoundingBox);\r\n return box;\r\n }\r\n Explode()\r\n {\r\n let shapeList = this._ShapeManager.ShapeList;\r\n if (shapeList.length <= 1)\r\n {\r\n return shapeList[0].Explode();\r\n }\r\n else\r\n {\r\n let regs: Region[] = [];\r\n shapeList.forEach(s =>\r\n {\r\n let reg = new Region().ApplyMatrix(this.OCS);\r\n reg.ShapeManager.AppendShapeList(s);\r\n regs.push(reg);\r\n });\r\n return regs;\r\n }\r\n }\r\n\r\n /**\r\n * 对于布尔操作,这个将会变换内部轮廓到对方坐标系.\r\n * 并且这个变换不会更新图形绘制.\r\n * @param {Matrix4} m\r\n * @memberof Region\r\n */\r\n ShapeApplyMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ShapeManager.ApplyMatrix(m);\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let pts: Vector3[] = [];\r\n for (let s of this._ShapeManager.ShapeList)\r\n {\r\n pts.push(...s.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n GetGripPoints(): Array<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.DrawColorIndex));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex)),\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)),\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n return mesh;\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(0));\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n return new Object3D().add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex)),\r\n mesh,\r\n );\r\n }\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return obj.add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex)),\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)),\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.geometry = this.MeshGeometry;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n return obj.add(\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex)),\r\n mesh,\r\n );\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n let l = obj as LineSegments;\r\n l.geometry = this.EdgeGeometry;\r\n l.material = ColorMaterial.GetLineMaterial(0);\r\n }\r\n }\r\n\r\n /**\r\n * 当实体需要被更新时,更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (type === RenderType.Wireframe || type === RenderType.Print)\r\n {\r\n let line = obj as LineSegments;\r\n line.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex);\r\n }\r\n else if (type === RenderType.Conceptual)\r\n {\r\n for (let i = 0; i < obj.children.length; i++)\r\n {\r\n if (i % 2 === 0)\r\n {\r\n let l = obj.children[i] as LineSegments;\r\n l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex);\r\n }\r\n else\r\n {\r\n let mesh = obj.children[i] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.DrawColorIndex);\r\n }\r\n }\r\n }\r\n else if (type === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n }\r\n\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._ShapeManager.Clear();\r\n this._ShapeManager.ReadFile(file);\r\n if (ver > 1)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n this._ShapeManager.WriteFile(file);\r\n\r\n // ver2\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n}\r\n","\r\n\r\nexport const CanDrawHoleFuzz = 0.1;\r\n","import { Segment1d } from \"../../Editor/TranstrolControl/Segment1dUtil\";\r\n\r\nconst FUZZ = 1e-5;\r\n\r\n//Segment1d列表中 合并相交的区间\r\nexport function Segment1dJoin(segment: Segment1d[]): Segment1d[]\r\n{\r\n if (segment.length < 2)\r\n return segment;\r\n\r\n segment.sort((a, b) => a[0] - b[0]);\r\n\r\n const NewSegment: Segment1d[] = [];\r\n\r\n for (let i = 0; i < segment.length; i++)\r\n {\r\n let segment1 = segment[i];\r\n\r\n if (i === segment.length - 1)\r\n {\r\n NewSegment.push(segment1);\r\n break;\r\n }\r\n\r\n for (let j = i + 1; j < segment.length; j++)\r\n {\r\n let segment2 = segment[j];\r\n if (segment2[0] < segment1[1] + FUZZ)\r\n segment1 = [segment1[0], Math.max(segment1[1], segment2[1])];\r\n else\r\n {\r\n NewSegment.push(segment1);\r\n break;\r\n }\r\n\r\n if (j === segment.length - 1)\r\n {\r\n NewSegment.push(segment1);\r\n i = segment.length - 1;\r\n }\r\n }\r\n }\r\n\r\n return NewSegment;\r\n}\r\n\r\n//获取多个区间列表相交的部分\r\nexport function IntersectSegment1ds(segment1: Segment1d[], segment2: Segment1d[]): Segment1d[]\r\n{\r\n const IntersectSegments: Segment1d[] = [];\r\n\r\n for (let s1 of segment1)\r\n {\r\n for (let s2 of segment2)\r\n {\r\n //[1,10] + [5,15] = [5,10]\r\n if ((s2[0] > s1[0] - FUZZ && s2[0] < s1[1]) || (s1[0] > s2[0] - FUZZ && s1[0] < s2[1]))\r\n {\r\n IntersectSegments.push([Math.max(s1[0], s2[0]), Math.min(s1[1], s2[1])]);\r\n }\r\n }\r\n }\r\n\r\n return IntersectSegments;\r\n}\r\n","import { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { MatrixPlanarizere } from \"../../Common/Matrix4Utils\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\nimport { Segment1d } from \"../../Editor/TranstrolControl/Segment1dUtil\";\r\nimport { BoolOpeartionType } from \"../../GraphicsSystem/BoolOperateUtils\";\r\nimport { Box3Ext } from \"../Box\";\r\nimport { XAxis, equaln } from \"../GeUtils\";\r\nimport { BoardFaceType } from \"./BoardGetFace\";\r\nimport { IntersectSegment1ds, Segment1dJoin } from \"./Sement1dUntils\";\r\n\r\nexport interface BoardFaceParams\r\n{\r\n type: BoardFaceType;\r\n length: number;\r\n width: number;\r\n localBoard: Board;\r\n matrix4: Matrix4;\r\n region?: Region;\r\n isRect?: boolean;\r\n drillType?: string;\r\n polyLineOCS?: Matrix4;\r\n CurveBoardFaceRegionPolyline?: Polyline;\r\n}\r\nexport class Face\r\n{\r\n type: BoardFaceType;\r\n Length: number;\r\n Width: number;\r\n private _Region: Region;\r\n LocalBoard: Board;\r\n InterBoard: Board; //提供侧面的作为相交面\r\n isEqualType: boolean = false;\r\n OCS: Matrix4 = new Matrix4();\r\n IsRect: boolean = true;\r\n DrillType: string;\r\n FixedInterval: Segment1d[]; //造型、凹槽周围包围圈 厚度半个排钻宽度\r\n Segment1D: Segment1d[]; //可放置的区间\r\n PolyLineOCS: Matrix4 = new Matrix4();\r\n CurveBoardFaceRegionPolyline: Polyline; //曲线板分段面轮廓\r\n constructor(parameters?: BoardFaceParams)\r\n {\r\n if (parameters)\r\n {\r\n this.type = parameters.type;\r\n this._Region = parameters.region;\r\n this.LocalBoard = parameters.localBoard;\r\n this.OCS = parameters.matrix4;\r\n this.Length = parameters.length;\r\n this.Width = parameters.width;\r\n if (parameters.isRect !== undefined)\r\n this.IsRect = parameters.isRect;\r\n if (parameters.drillType)\r\n this.DrillType = parameters.drillType;\r\n else\r\n this.DrillType = this.LocalBoard.BoardProcessOption.drillType;\r\n if (parameters.polyLineOCS)\r\n this.PolyLineOCS = parameters.polyLineOCS;\r\n\r\n if (parameters.CurveBoardFaceRegionPolyline)\r\n this.CurveBoardFaceRegionPolyline = parameters.CurveBoardFaceRegionPolyline;\r\n }\r\n }\r\n get Region()\r\n {\r\n if (!this._Region)\r\n {\r\n let curve: Curve = this.CurveBoardFaceRegionPolyline ?? new Polyline().Rectangle(this.Length, this.Width);\r\n this._Region = Region.CreateFromCurves([curve]);\r\n }\r\n return this._Region;\r\n }\r\n get OCSInv()\r\n {\r\n return new Matrix4().getInverse(this.OCS);\r\n }\r\n get Normal()\r\n {\r\n return new Vector3().setFromMatrixColumn(this.OCS, 2);\r\n }\r\n Intersect(f: Face): Face[]\r\n {\r\n //获得侧面和非侧面\r\n let [sideFace, noSideFace] = this.type === BoardFaceType.Side ? [this, f] : [f, this];\r\n\r\n //同侧面排钻时 厚度小的那块当做第一块\r\n if (sideFace.type === noSideFace.type)\r\n [sideFace, noSideFace] = this.Width > f.Width ? [f, this] : [this, f];\r\n\r\n //布尔面和被布尔面得差异矩阵\r\n let diffMtx = sideFace.OCSInv.multiply(noSideFace.OCS);\r\n MatrixPlanarizere(diffMtx);\r\n\r\n let isSuccess = false;\r\n\r\n let x = new Vector3().setFromMatrixColumn(diffMtx, 0);\r\n let ang = x.angleTo(XAxis);\r\n //盒子旋转0,90,180度不会被破坏\r\n let canUseBoxCalc = equaln(ang, 0) || equaln(ang, Math.PI / 2) || equaln(ang, Math.PI);\r\n\r\n let retBoxs: Box3Ext[] = [];\r\n let sizes: Vector3[] = [];\r\n\r\n //如果不是矩形,用布尔运算,如果\r\n if (!noSideFace.IsRect || !canUseBoxCalc)\r\n {\r\n let sideReg = sideFace.Region?.Clone();\r\n if (!sideReg || !noSideFace.Region) return [];\r\n\r\n let toReg = noSideFace.Region.Clone().ApplyMatrix(diffMtx);\r\n //注意: 排钻因为布尔运算失败的重灾区\r\n // TestDraw(sideReg.Clone(), 1);\r\n // TestDraw(toReg.Clone(), 2);\r\n\r\n isSuccess = sideReg.BooleanOper(toReg, BoolOpeartionType.Intersection);\r\n\r\n //挖穿造型分段排钻\r\n const throughModelSegmentedDrill = HostApplicationServices.throughModelSegmentedDrill;\r\n\r\n if (throughModelSegmentedDrill)\r\n {\r\n let boardModeling = noSideFace.LocalBoard.BoardModeling;\r\n if (boardModeling?.length)\r\n {\r\n let boardThickness = noSideFace.LocalBoard.Thickness;\r\n for (let modal of boardModeling)\r\n {\r\n if (boardThickness - modal.thickness > 1e-5) continue;\r\n let modalReg = Region.CreateFromCurves([modal.shape.Outline.Curve]).ApplyMatrix(diffMtx);\r\n isSuccess = sideReg.BooleanOper(modalReg, BoolOpeartionType.Subtract);\r\n }\r\n }\r\n }\r\n\r\n for (let s of sideReg.ShapeManager.ShapeList)\r\n {\r\n if (!throughModelSegmentedDrill)\r\n {\r\n let box = s.BoundingBox as Box3Ext;\r\n retBoxs.push(box);\r\n sizes.push(box.getSize(new Vector3()));\r\n }\r\n else\r\n {\r\n //求以X轴和Y=Thickness轴上的点 相互切割形成的矩形面\r\n const XLists: Segment1d[] = [];\r\n const TLists: Segment1d[] = [];\r\n const Thickness = s.BoundingBox.getSize(new Vector3).y;\r\n\r\n for (let cu of s.Outline.Shape.curves)\r\n {\r\n let pt1 = cu.getPoint(0);\r\n let pt2 = cu.getPoint(1);\r\n\r\n let x1 = Math.abs(pt1.x);\r\n let x2 = Math.abs(pt2.x);\r\n\r\n\r\n if (equaln(pt1.y, 0) && equaln(pt2.y, 0))\r\n XLists.push([Math.min(x1, x2), Math.max(x1, x2)]);\r\n\r\n if (equaln(Math.abs(pt1.y), Thickness) && equaln(Math.abs(pt2.y), Thickness))\r\n TLists.push([Math.min(x1, x2), Math.max(x1, x2)]);\r\n }\r\n //合并可以相连的区间 如[0100] + [100,200] = [0,200]\r\n const XJoinLists: Segment1d[] = Segment1dJoin(XLists);\r\n const TJoinLists: Segment1d[] = Segment1dJoin(TLists);\r\n //X轴和厚度轴相交的区间\r\n const IntersectSegments = IntersectSegment1ds(XJoinLists, TJoinLists);\r\n\r\n //造型切割出来会有Position点 其他都是000\r\n let startPt = new Vector3(s.Position.x);\r\n\r\n for (let segment of IntersectSegments)\r\n {\r\n let minV: Vector3;\r\n let maxV: Vector3;\r\n //圆弧板面宽度具有方向性\r\n if (sideFace.Width > 0)\r\n {\r\n minV = new Vector3(segment[0]);\r\n maxV = new Vector3(segment[1], Thickness);\r\n }\r\n else\r\n {\r\n minV = new Vector3(segment[0], sideFace.Width);\r\n maxV = new Vector3(segment[1]);\r\n }\r\n\r\n let box = new Box3Ext(minV.add(startPt), maxV.add(startPt));\r\n retBoxs.push(box);\r\n sizes.push(box.getSize(new Vector3));\r\n }\r\n }\r\n }\r\n\r\n if (throughModelSegmentedDrill && !retBoxs.length) isSuccess = false;\r\n }\r\n else\r\n {\r\n let minV: Vector3;\r\n let maxV: Vector3;\r\n //圆弧板面宽度具有方向性\r\n if (sideFace.Width > 0)\r\n {\r\n minV = new Vector3();\r\n maxV = new Vector3(sideFace.Length, sideFace.Width);\r\n }\r\n else\r\n {\r\n minV = new Vector3(0, sideFace.Width);\r\n maxV = new Vector3(sideFace.Length, 0);\r\n }\r\n\r\n let retBox = new Box3Ext(minV, maxV);\r\n let p1 = new Vector3().setFromMatrixPosition(diffMtx);\r\n let p2 = new Vector3(noSideFace.Length, noSideFace.Width).applyMatrix4(diffMtx);\r\n let box3 = new Box3Ext().setFromPoints([p1, p2]);\r\n\r\n if (retBox.intersectsBox(box3))\r\n {\r\n retBox.intersect(box3);\r\n let size = retBox.getSize(new Vector3());\r\n isSuccess = !equaln(size.x * size.y, 0);\r\n retBoxs = [retBox];\r\n sizes = [size];\r\n }\r\n }\r\n\r\n let newFaces: Face[] = [];\r\n\r\n if (isSuccess)\r\n {\r\n for (let i = 0; i < sizes.length; i++)\r\n {\r\n let newFace = new Face();\r\n //提供侧面的板件作为相交面\r\n newFace.LocalBoard = noSideFace.LocalBoard;\r\n newFace.InterBoard = sideFace.LocalBoard;\r\n\r\n newFace.Length = sizes[i].x;\r\n newFace.Width = sizes[i].y;\r\n\r\n let min = retBoxs[i].min;\r\n min.applyMatrix4(sideFace.OCS);\r\n\r\n //构建碰撞面坐标系\r\n newFace.OCS = sideFace.OCS.clone().setPosition(min);\r\n\r\n newFace.DrillType = sideFace.DrillType;\r\n //都是侧面\r\n if (this.type === f.type)\r\n newFace.isEqualType = true;\r\n newFaces.push(newFace);\r\n }\r\n }\r\n return newFaces;\r\n }\r\n IsIntersect(f: Face, fuzz = 1e-6, currentCoverBoxes: Box3[] = []): { isInt: boolean, coverBoxesList?: Box3[]; }\r\n {\r\n //获得侧面和非侧面\r\n let [sideFace, noSideFace] = this.type === BoardFaceType.Side ? [this, f] : [f, this];\r\n\r\n //布尔面和被布尔面得差异矩阵\r\n let diffMtx = sideFace.OCSInv.multiply(noSideFace.OCS);\r\n MatrixPlanarizere(diffMtx);\r\n\r\n let x = new Vector3().setFromMatrixColumn(diffMtx, 0);\r\n let ang = x.angleTo(XAxis);\r\n //盒子旋转0,90,180度不会被破坏\r\n let canUseBoxCalc = equaln(ang, 0) || equaln(ang, Math.PI / 2) || equaln(ang, Math.PI);\r\n\r\n //如果不是矩形,用布尔运算,如果\r\n if (!noSideFace.IsRect || !canUseBoxCalc)\r\n {\r\n let c1 = new Polyline().Rectangle(sideFace.Length, sideFace.Width);\r\n let c2 = noSideFace.LocalBoard.ContourCurve.Clone().ApplyMatrix(diffMtx);\r\n let box = c1.BoundingBox.intersect(c2.BoundingBox);\r\n\r\n let size = box.getSize(new Vector3);\r\n\r\n if (equaln(size.x * size.y, 0))\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n\r\n let con1 = Contour.CreateContour(c1);\r\n let con2 = Contour.CreateContour(c2);\r\n let cs = con1.IntersectionBoolOperation(con2);\r\n let width = 0;\r\n let boxList: Box3[] = [];\r\n //当前碰撞区域如果遮光直接退出\r\n for (let c of cs)\r\n {\r\n let b = c.BoundingBox;\r\n b.getSize(size);\r\n width += size.x;\r\n if (width / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n boxList.push(b);\r\n }\r\n if (currentCoverBoxes.length === 0)\r\n {\r\n return { isInt: false, coverBoxesList: boxList };\r\n }\r\n //与旧盒子合并后测试是否遮光\r\n width = 0;\r\n while (currentCoverBoxes.length > 0)\r\n {\r\n let b = currentCoverBoxes.pop();\r\n let isInt = false;\r\n for (let box of boxList)\r\n {\r\n if (box.intersectsBox(b))\r\n {\r\n isInt = true;\r\n box.union(b);\r\n break;\r\n }\r\n }\r\n if (!isInt)\r\n boxList.push(b);\r\n }\r\n\r\n for (let b of boxList)\r\n {\r\n b.getSize(size);\r\n width += size.x;\r\n if (width / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n }\r\n\r\n return { isInt: false, coverBoxesList: boxList };\r\n }\r\n else\r\n {\r\n let minV: Vector3;\r\n let maxV: Vector3;\r\n if (sideFace.Width > 0)\r\n {\r\n minV = new Vector3();\r\n maxV = new Vector3(sideFace.Length, sideFace.Width);\r\n }\r\n else\r\n {\r\n minV = new Vector3(0, sideFace.Width);\r\n maxV = new Vector3(sideFace.Length, 0);\r\n }\r\n\r\n let retBox = new Box3Ext(minV, maxV);\r\n\r\n let p1 = new Vector3().setFromMatrixPosition(diffMtx);\r\n let p2 = new Vector3(noSideFace.Length, noSideFace.Width).applyMatrix4(diffMtx);\r\n let box3 = new Box3Ext().setFromPoints([p1, p2]);\r\n\r\n if (retBox.intersectsBox(box3))\r\n {\r\n retBox.intersect(box3);\r\n let size = retBox.getSize(new Vector3());\r\n if (equaln(size.x * size.y, 0) || Math.abs(size.y / sideFace.Width) <= fuzz)\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n\r\n if (size.x / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n if (currentCoverBoxes.length === 0)\r\n {\r\n return { isInt: false, coverBoxesList: [retBox] };\r\n }\r\n for (let b of currentCoverBoxes)\r\n {\r\n if (b.intersectsBox(retBox))\r\n {\r\n b.union(retBox);\r\n retBox = null;\r\n break;\r\n }\r\n }\r\n if (retBox)\r\n currentCoverBoxes.push(retBox);\r\n let width = 0;\r\n for (let b of currentCoverBoxes)\r\n {\r\n b.getSize(size);\r\n width += size.x;\r\n if (width / sideFace.Length > fuzz)\r\n return { isInt: true };\r\n }\r\n\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n }\r\n return { isInt: false, coverBoxesList: currentCoverBoxes };\r\n }\r\n }\r\n}\r\n","import { Matrix4, Vector2, Vector3 } from \"three\";\r\nimport { ArcBoardBuild } from \"../../Add-on/ArcBoard/ArcBoardBuild\";\r\nimport { SplitPolyline } from \"../../Add-on/BoardCutting/SplitPolyline\";\r\nimport { DrillType, FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { MergeCurvelist } from \"../../Common/CurveUtils\";\r\nimport { MakeMirrorMtx } from \"../../Common/Matrix4Utils\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\nimport { GetBoardContour, GetBoardHighSeal } from \"../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { IHighSealedItem } from \"../../UI/Store/OptionInterface/IHighSealedItem\";\r\nimport { GetSideCuFaceMtx } from \"../Board2DModelCSG/BoardSideModelCSGBuilder\";\r\nimport { AsVector2, ZAxis, angle, equaln, equalv3 } from \"../GeUtils\";\r\nimport { CanDrawHoleFuzz } from \"./CanDrawHoleFuzz\";\r\nimport { Face } from \"./Face\";\r\n\r\n\r\nexport enum BoardFaceType\r\n{\r\n Side = 0,\r\n NoSide = 1\r\n}\r\nexport class BoardGetFace\r\n{\r\n Faces: Face[] = [];\r\n constructor(public Board: Board)\r\n {\r\n this.ParseFaces();\r\n }\r\n ParseFaces()\r\n {\r\n if (this.Board.IsArcBoard)\r\n {\r\n this.GetArcBoardFaces();\r\n return;\r\n }\r\n //正反面\r\n this.GetTopAndBottomFace();\r\n //侧面\r\n this.GetSideFaces();\r\n }\r\n GetTopAndBottomFace(isEdgeFace = false)\r\n {\r\n let curve = this.Board.ContourCurve;\r\n let reg: Region;\r\n if (this.Board.IsSpecialShape)\r\n reg = Region.CreateFromCurves([curve]);\r\n\r\n let thickness = this.Board.Thickness;\r\n let ocs = this.Board.OCS;\r\n const opt = this.Board.BoardProcessOption;\r\n //挖穿造型分段排钻\r\n let throughModelSegmentedDrill = HostApplicationServices.throughModelSegmentedDrill;\r\n let isRect = throughModelSegmentedDrill ? (this.Board.IsRect && !this.Board.BoardModeling.length) : this.Board.IsRect;\r\n //正反面\r\n if (opt.frontDrill || isEdgeFace)\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.NoSide,\r\n region: reg,\r\n isRect,\r\n localBoard: this.Board,\r\n matrix4: ocs.clone().multiply(\r\n new Matrix4().setPosition(new Vector3(0, 0, thickness))),\r\n length: this.Board.Width,\r\n width: this.Board.Height\r\n }));\r\n\r\n if (opt.backDrill || isEdgeFace)\r\n {\r\n let mtx = MakeMirrorMtx(ZAxis);\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.NoSide,\r\n localBoard: this.Board,\r\n isRect,\r\n region: reg ? reg.Clone() : undefined,\r\n matrix4: new Matrix4().multiplyMatrices(ocs, mtx),\r\n length: this.Board.Width,\r\n width: this.Board.Height\r\n }));\r\n }\r\n }\r\n GetSideFaces()\r\n {\r\n let con = this.Board.ContourCurve.Clone();\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n const highDrill = this.Board.BoardProcessOption.highDrill.slice();\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let length = cu.Length;\r\n if ((highDrill.length > 0 && highDrill[i] === DrillType.None)\r\n || equaln(length, 0)\r\n || cu instanceof Arc)\r\n continue;\r\n let mtx = GetSideFaceMtx(cu, inverseZ);\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.Side,\r\n localBoard: this.Board,\r\n matrix4: new Matrix4().multiplyMatrices(this.Board.OCS.clone(), mtx),\r\n length,\r\n width: this.Board.Thickness,\r\n drillType: highDrill.length > 0 && highDrill[i]\r\n }));\r\n }\r\n }\r\n\r\n //获取曲线板的正反 侧面\r\n GetArcBoardFaces(faceSealingDataMap?: Map<Face, number>, highSealingData?: IHighSealedItem[], sealCu?: Curve[])\r\n {\r\n let br = this.Board;\r\n const opt = br.BoardProcessOption;\r\n\r\n //排钻反应器 实体渲染赋值可能延迟 手动构造ArcBoardBuild\r\n let sweepArcBoardBuild = new ArcBoardBuild(br);\r\n sweepArcBoardBuild.ParseSweepCurves();\r\n\r\n let conCus = sweepArcBoardBuild.SweepCurves1.map(c => c.Clone());\r\n\r\n //曲线路径相对曲线板\r\n const RX = new Matrix4().makeRotationX(Math.PI / 2);\r\n const PathOCS = new Matrix4().multiplyMatrices(br.OCS, RX);\r\n\r\n // //弧形板旋转角度\r\n const AMtx = new Matrix4().makeRotationY(br.SweepAngle);\r\n PathOCS.multiply(AMtx);\r\n\r\n let basePt = new Vector3().applyMatrix4(new Matrix4().multiplyMatrices(RX, sweepArcBoardBuild.OCS2RotateMtx));\r\n PathOCS.multiply(new Matrix4().setPosition(basePt));\r\n\r\n const PathOCSInv = new Matrix4().getInverse(PathOCS);\r\n\r\n for (let cu of conCus)\r\n cu.ApplyMatrix(PathOCS);\r\n\r\n const ZNormal = new Vector3().setFromMatrixColumn(PathOCS, 2);\r\n let currentLength = 0;\r\n\r\n const FaceDir = br.SweepVisibleFace === FaceDirection.Front ? -1 : 1;\r\n\r\n const ContourCurve = br.ContourCurve.Clone() as Polyline;\r\n\r\n //弧形板旋转角度\r\n ContourCurve.ApplyMatrix(sweepArcBoardBuild.OCS2RotateMtx);\r\n if (highSealingData)\r\n {\r\n let cus = (br.ContourCurve.Clone() as Polyline).Explode();\r\n highSealingData.push(...GetBoardHighSeal(br, cus));\r\n sealCu.push(...cus);\r\n }\r\n\r\n let contourLength = br.ParseBoardLengthInArcSweep();\r\n\r\n for (let i = 0; i < conCus.length; i++)\r\n {\r\n if (currentLength > contourLength)\r\n continue;\r\n\r\n //按分段曲线 对板轮廓裁剪\r\n let conCu = conCus[i];\r\n let length = currentLength + conCu.Length;\r\n\r\n //跳过圆弧\r\n if (conCu instanceof Arc)\r\n {\r\n currentLength = length;\r\n continue;\r\n }\r\n\r\n let starKnifePls = new Polyline([{ pt: AsVector2({ x: currentLength, y: -1 }), bul: 0 }, { pt: AsVector2({ x: currentLength, y: 10000 }), bul: 0 }]);\r\n let endKnifePls = new Polyline([{ pt: AsVector2({ x: length, y: -1 }), bul: 0 }, { pt: AsVector2({ x: length, y: 10000 }), bul: 0 }]);\r\n\r\n //裁剪结果\r\n let faceRegions = SplitPolyline(ContourCurve, [starKnifePls, endKnifePls]);\r\n faceRegions = faceRegions.filter((faceRegion) =>\r\n {\r\n let x = faceRegion.BoundingBox.getCenter(new Vector3).x;\r\n return x > currentLength && x < length;\r\n });\r\n\r\n if (faceRegions.length)\r\n {\r\n let c = conCu.Clone().ApplyMatrix(PathOCSInv);\r\n let lineToward = c.EndPoint.clone().sub(c.StartPoint);\r\n let ro = angle(lineToward);\r\n\r\n let ocs = PathOCS.setPosition(0, 0, 0);\r\n ocs = new Matrix4().multiplyMatrices((new Matrix4().makeRotationAxis(ZNormal, ro)), ocs).setPosition(conCu.StartPoint);\r\n ocs.multiply(new Matrix4().getInverse(RX));\r\n\r\n for (let faceRegion of faceRegions)\r\n {\r\n //添加正反面\r\n for (let data of faceRegion.LineData)\r\n data.pt.add(new Vector2(-currentLength));\r\n\r\n let frontMat: Matrix4;\r\n let backMat: Matrix4;\r\n let mtx = MakeMirrorMtx(ZAxis);\r\n\r\n if (br.SweepVisibleFace === FaceDirection.Front)\r\n {\r\n frontMat = new Matrix4().multiplyMatrices(ocs, mtx.setPosition(new Vector3(0, faceRegion.BoundingBox.min.y, br.Thickness * FaceDir)));\r\n backMat = new Matrix4().multiplyMatrices(ocs, new Matrix4().setPosition(new Vector3(0, faceRegion.BoundingBox.min.y)));\r\n }\r\n else\r\n {\r\n frontMat = new Matrix4().multiplyMatrices(ocs, new Matrix4().setPosition(new Vector3(0, faceRegion.BoundingBox.min.y, br.Thickness * FaceDir)));\r\n backMat = new Matrix4().multiplyMatrices(ocs, mtx.setPosition(new Vector3(0, faceRegion.BoundingBox.min.y)));\r\n }\r\n\r\n if (opt.frontDrill)\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.NoSide,\r\n localBoard: br,\r\n matrix4: frontMat,\r\n length: conCu.Length,\r\n width: faceRegion.BoundingBox.max.y,\r\n CurveBoardFaceRegionPolyline: faceRegion\r\n }));\r\n\r\n if (opt.backDrill)\r\n {\r\n this.Faces.push(new Face({\r\n type: BoardFaceType.NoSide,\r\n localBoard: br,\r\n matrix4: backMat,\r\n length: conCu.Length,\r\n width: faceRegion.BoundingBox.max.y,\r\n CurveBoardFaceRegionPolyline: faceRegion\r\n }));\r\n }\r\n\r\n //侧面\r\n let cus = faceRegion.Explode();\r\n\r\n //应用新轮廓 计算排钻顺序\r\n let cloneBr = br.Clone();\r\n cloneBr.ContourCurve = faceRegion;\r\n const HighDrill = cloneBr.BoardProcessOption.highDrill.slice();\r\n\r\n for (let j = 0; j < cus.length; j++)\r\n {\r\n if (HighDrill.length > 0 && HighDrill[j] === DrillType.None) continue;\r\n\r\n let cu = cus[j];\r\n let mtx = GetSideFaceMtx(cu, faceRegion.IsClockWise);\r\n let ocs = PathOCS.clone().setPosition(0, 0, 0);\r\n ocs = new Matrix4().multiplyMatrices((new Matrix4().makeRotationAxis(ZNormal, ro)), ocs).setPosition(conCu.StartPoint);\r\n ocs.multiply(new Matrix4().getInverse(RX)).multiply(mtx);\r\n\r\n let f = new Face({\r\n type: BoardFaceType.Side,\r\n localBoard: br,\r\n matrix4: ocs,\r\n length: cu.Length,\r\n width: br.Thickness * FaceDir,\r\n drillType: HighDrill.length > 0 && HighDrill[j]\r\n });\r\n\r\n if (faceSealingDataMap)\r\n {\r\n let pt = cu.GetPointAtParam(0.5).add(new Vector3(currentLength));\r\n let index = Math.floor(ContourCurve.GetParamAtPoint(pt));\r\n if (!isNaN(index))\r\n faceSealingDataMap.set(f, index);\r\n }\r\n this.Faces.push(f);\r\n }\r\n }\r\n }\r\n\r\n currentLength = length;\r\n }\r\n // 测试代码\r\n // for (let f of this.Faces)\r\n // {\r\n // let r = f.Region.Clone().ApplyMatrix(f.OCS);\r\n // TestDraw(r);\r\n // }\r\n }\r\n\r\n IntersectFace(br: BoardGetFace, bInsEqual: boolean = false): Face[]\r\n {\r\n let collisionFaces: Face[] = [];\r\n\r\n for (let f1 of this.Faces)\r\n {\r\n for (let f2 of br.Faces)\r\n {\r\n //都是正面,或者不允许侧面同侧面并且2板件类型不一样就跳过\r\n if (f1.type === f2.type\r\n && (f1.type === BoardFaceType.NoSide || !bInsEqual || br.Board.BoardType !== this.Board.BoardType)\r\n )\r\n continue;\r\n //不共面\r\n if (!MatrixIsCoplane2(f1.OCS, f2.OCS, CanDrawHoleFuzz))\r\n continue;\r\n collisionFaces.push(...f1.Intersect(f2));\r\n }\r\n }\r\n return collisionFaces;\r\n }\r\n static GetAllSidesFaces(br: Board, isMergeFace = false)\r\n {\r\n let faces: Face[] = [];\r\n let con = br.ContourCurve;\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n if (isMergeFace)\r\n MergeCurvelist(cus);\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n let length = cu.Length;\r\n let mtx = GetSideFaceMtx(cu, inverseZ);\r\n faces.push(new Face({\r\n type: BoardFaceType.Side,\r\n localBoard: br,\r\n matrix4: new Matrix4().multiplyMatrices(br.OCS.clone(), mtx),\r\n length,\r\n width: br.Thickness,\r\n }));\r\n }\r\n return faces;\r\n }\r\n}\r\n\r\n//坐标系共面且法线相反\r\nexport function MatrixIsCoplane2(matrixFrom: Matrix4, matrixTo: Matrix4, zFuzz: number): boolean\r\n{\r\n let nor1 = new Vector3().setFromMatrixColumn(matrixFrom, 2);\r\n let nor2 = new Vector3().setFromMatrixColumn(matrixTo, 2);\r\n\r\n //法线共面\r\n if (!equalv3(nor1, nor2.negate(), 1e-4))\r\n return false;\r\n\r\n //高共面\r\n let pt = new Vector3().setFromMatrixPosition(matrixTo);\r\n //变换到自身对象坐标系.\r\n pt.applyMatrix4(new Matrix4().getInverse(matrixFrom));\r\n\r\n return equaln(pt.z, 0, zFuzz);\r\n}\r\nexport function GetSideFaceMtx(cu: Curve, inverseZ = false): Matrix4\r\n{\r\n let x = cu.GetFirstDeriv(0).normalize();\r\n let y = ZAxis;\r\n let z = x.clone().cross(y);\r\n if (inverseZ) z.negate();\r\n\r\n let basePt: Vector3;\r\n if ((equaln(x.x, 0, 1e-5) && x.y > 0) || x.x < -1e-5)\r\n {\r\n x.negate();\r\n basePt = cu.EndPoint;\r\n }\r\n else\r\n basePt = cu.StartPoint;\r\n //构建面矩阵\r\n return new Matrix4()\r\n .makeBasis(x, y, z)\r\n .setPosition(basePt);\r\n}\r\n\r\nexport class ParseBoardSideFace extends BoardGetFace\r\n{\r\n constructor(public Board: Board)\r\n {\r\n super(Board);\r\n }\r\n\r\n ParseFaces()\r\n {\r\n this.GetSideFaces();\r\n }\r\n\r\n GetSideFaces()\r\n {\r\n let con = GetBoardContour(this.Board);\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n for (let cu of cus)\r\n {\r\n let type = BoardFaceType.Side;\r\n\r\n let length = cu.Length;\r\n if (equaln(length, 0) || cu instanceof Arc)\r\n type = BoardFaceType.NoSide;\r\n\r\n let mtx = GetSideCuFaceMtx(cu, inverseZ);\r\n let face = new Face({\r\n type,\r\n localBoard: this.Board,\r\n matrix4: new Matrix4().multiplyMatrices(this.Board.OCS.clone(), mtx),\r\n length,\r\n width: this.Board.Thickness,\r\n });\r\n this.Faces.push(face);\r\n }\r\n }\r\n}\r\n","import { Vec2, Vector2, Vector3 } from \"three\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { AsVector3 } from \"./GeUtils\";\r\n\r\n/**\r\n * 快速的对点表进行偏移\r\n * @param contour\r\n * @param [offsetDist=1]\r\n * @param [ignoreSpike=true] 忽略尖角优化(如果不忽略,那么尖角将会变钝(有点奇怪))\r\n * @returns 偏移后的点表\r\n */\r\nexport function FastOffset(contour: Vector3[], offsetDist = 1, ignoreSpike = true): Vector3[]\r\n{\r\n let res: Vector3[] = [];\r\n\r\n for (let i = 0; i < contour.length; i++)\r\n {\r\n let v = AsVector3(getBevelVec(contour[i], contour[FixIndex(i - 1, contour)], contour[FixIndex(i + 1, contour)]));\r\n // TestDraw(new Line(contour[i], contour[i].clone().add(v)), 3);\r\n let p = v.multiplyScalar(offsetDist).add(contour[i]);\r\n res.push(p);\r\n }\r\n return res;\r\n}\r\n\r\n//Ref:threejs ExtrudeGeometry源码\r\nfunction getBevelVec(inPt: Vec2, inPrev: Vec2, inNext: Vec2, ignoreSpike = true): Vector2\r\n{\r\n\r\n // computes for inPt the corresponding point inPt' on a new contour\r\n // shifted by 1 unit (length of normalized vector) to the left\r\n // if we walk along contour clockwise, this new contour is outside the old one\r\n //\r\n // inPt' is the intersection of the two lines parallel to the two\r\n // adjacent edges of inPt at a distance of 1 unit on the left side.\r\n\r\n let v_trans_x: number, v_trans_y: number, shrink_by: number; // resulting translation vector for inPt\r\n\r\n // good reading for geometry algorithms (here: line-line intersection)\r\n // http://geomalgorithms.com/a05-_intersect-1.html\r\n\r\n const v_prev_x = inPt.x - inPrev.x,\r\n v_prev_y = inPt.y - inPrev.y;\r\n const v_next_x = inNext.x - inPt.x,\r\n v_next_y = inNext.y - inPt.y;\r\n\r\n const v_prev_lensq = (v_prev_x * v_prev_x + v_prev_y * v_prev_y);\r\n\r\n // check for collinear edges\r\n const collinear0 = (v_prev_x * v_next_y - v_prev_y * v_next_x);\r\n\r\n if (Math.abs(collinear0) > Number.EPSILON)\r\n {\r\n // not collinear\r\n // length of vectors for normalizing\r\n const v_prev_len = Math.sqrt(v_prev_lensq);\r\n const v_next_len = Math.sqrt(v_next_x * v_next_x + v_next_y * v_next_y);\r\n // shift adjacent points by unit vectors to the left\r\n const ptPrevShift_x = (inPrev.x - v_prev_y / v_prev_len);\r\n const ptPrevShift_y = (inPrev.y + v_prev_x / v_prev_len);\r\n\r\n const ptNextShift_x = (inNext.x - v_next_y / v_next_len);\r\n const ptNextShift_y = (inNext.y + v_next_x / v_next_len);\r\n // scaling factor for v_prev to intersection point\r\n const sf = ((ptNextShift_x - ptPrevShift_x) * v_next_y -\r\n (ptNextShift_y - ptPrevShift_y) * v_next_x) /\r\n (v_prev_x * v_next_y - v_prev_y * v_next_x);\r\n\r\n // vector from inPt to intersection point\r\n\r\n v_trans_x = (ptPrevShift_x + v_prev_x * sf - inPt.x);\r\n v_trans_y = (ptPrevShift_y + v_prev_y * sf - inPt.y);\r\n\r\n // Don't normalize!, otherwise sharp corners become ugly\r\n // but prevent crazy spikes\r\n const v_trans_lensq = (v_trans_x * v_trans_x + v_trans_y * v_trans_y);\r\n if (v_trans_lensq <= 2 || ignoreSpike)\r\n return new Vector2(v_trans_x, v_trans_y);\r\n else\r\n shrink_by = Math.sqrt(v_trans_lensq / 2);\r\n }\r\n else\r\n {\r\n // handle special case of collinear edges\r\n let direction_eq = false; // assumes: opposite\r\n\r\n if (v_prev_x > Number.EPSILON)\r\n {\r\n if (v_next_x > Number.EPSILON)\r\n direction_eq = true;\r\n }\r\n else\r\n {\r\n if (v_prev_x < - Number.EPSILON)\r\n {\r\n if (v_next_x < - Number.EPSILON)\r\n direction_eq = true;\r\n }\r\n else\r\n {\r\n if (Math.sign(v_prev_y) === Math.sign(v_next_y))\r\n direction_eq = true;\r\n }\r\n }\r\n\r\n if (direction_eq || ignoreSpike)\r\n {\r\n // console.log(\"Warning: lines are a straight sequence\");\r\n v_trans_x = - v_prev_y;\r\n v_trans_y = v_prev_x;\r\n shrink_by = Math.sqrt(v_prev_lensq);\r\n }\r\n else\r\n {\r\n // console.log(\"Warning: lines are a straight spike\");\r\n v_trans_x = v_prev_x;\r\n v_trans_y = v_prev_y;\r\n shrink_by = Math.sqrt(v_prev_lensq / 2);\r\n }\r\n }\r\n return new Vector2(v_trans_x / shrink_by, v_trans_y / shrink_by);\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, BufferGeometry, Float32BufferAttribute, MathUtils, Matrix4, ShapeUtils, Shape as TShape, Vector3 } from \"three\";\r\nimport { arrayPushArray, arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { ComputerCurvesNormalOCS, curveLinkGroup } from \"../../Common/CurveUtils\";\r\nimport { Status } from '../../Common/Status';\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { Contour, fastCurveInCurve2 } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { LinesType } from \"../../DatabaseServices/Entity/BoardInterface\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { ExtrudeContourCurve, ExtrudeSolid, MaxDrawGrooveCount } from \"../../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline, PolylineProps } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { IntersectOption, IntersectResult } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { FuzzyFactory } from '../../csg/core/FuzzyFactory';\r\nimport { IntersectsBox } from \"../Box\";\r\nimport { CreateContour2 } from \"../CreateContour2\";\r\nimport { FastOffset } from \"../FastOffset\";\r\nimport { AsVector2, IdentityMtx4, equaln, equalv2, equalv3 } from \"../GeUtils\";\r\nimport { RegionParse } from \"../RegionParse\";\r\nimport { SplitCurveParams } from './SplitCurveParams';\r\n\r\nexport enum DepthType\r\n{\r\n Front = 1,\r\n Back = 2,\r\n All = 3,\r\n}\r\n\r\nexport const ExtrudeBuildConfig = { bevel: false };\r\n\r\n/**\r\n * 槽的几何数据,包括槽的墙面和槽的盖子\r\n */\r\nexport class Groove\r\n{\r\n contourWall: ExtudeWall;//槽轮廓的墙\r\n holeWalls: ExtudeWall[] = [];//槽的网洞的墙\r\n private lid: CurveTapeShape;//槽的盖子\r\n constructor(contour: Contour,\r\n holes: Contour[],\r\n public depthType: DepthType,\r\n public depth: number,\r\n public allDepth: number,\r\n private box = contour.BoundingBox\r\n )\r\n {\r\n this.contourWall = new ExtudeWall(contour.Curve, depthType, depth, allDepth, DirectionType.Inner);\r\n for (let h of holes)\r\n this.holeWalls.push(new ExtudeWall(h.Curve, depthType, depth, allDepth, DirectionType.Outer));\r\n\r\n this.lid = new CurveTapeShape(contour, holes);\r\n }\r\n\r\n /**\r\n * @param groove this - groove\r\n * @param [eachOther=true] 相互裁剪\r\n */\r\n ClipTo(groove: Groove, eachOther = true)\r\n {\r\n //相同深度和面不用操作\r\n if (groove.depthType === this.depthType && groove.depth === this.depth) return;\r\n\r\n if (!IntersectsBox(this.box, groove.box)) return;\r\n\r\n this.ClipLid(groove);\r\n groove.ClipLid(this);\r\n\r\n //一正一反,不交集\r\n if (this.depthType + groove.depthType === 3 && this.depth + groove.depth < this.allDepth)\r\n return;\r\n\r\n this.contourWall.ClipTo(groove, true);\r\n for (let wall of this.holeWalls)\r\n wall.ClipTo(groove, true);\r\n\r\n if (eachOther)\r\n {\r\n groove.contourWall.ClipTo(this, false);\r\n for (let wall of groove.holeWalls)\r\n wall.ClipTo(this, false);\r\n }\r\n }\r\n\r\n private ClipLid(groove: Groove)\r\n {\r\n if (this.depthType === DepthType.All) return;\r\n // if (groove.depthType === DepthType.All) return;\r\n\r\n if (this.depthType === groove.depthType)\r\n {\r\n if (groove.depth > this.depth)\r\n this.lid.ClipTo(groove.lid, true);\r\n else\r\n this.lid.SplitTo(groove.lid);\r\n }\r\n else\r\n {\r\n if (this.depth + groove.depth >= this.allDepth)\r\n this.lid.ClipTo(groove.lid, true);\r\n else\r\n this.lid.SplitTo(groove.lid);\r\n }\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], edgeBuild: EdgeGeometryBuild, rotateUv: boolean, displayAccuracy = 0)\r\n {\r\n this.contourWall.Draw(verticesArray, uvArray, edgeBuild, displayAccuracy);\r\n for (let wall of this.holeWalls)\r\n wall.Draw(verticesArray, uvArray, edgeBuild);\r\n\r\n if (this.depthType === DepthType.All) return;\r\n\r\n let isFront = this.depthType === DepthType.Front;\r\n this.lid.Draw(verticesArray, uvArray, isFront, isFront ? this.allDepth - this.depth : this.depth, rotateUv, this.allDepth);\r\n }\r\n}\r\n\r\nfunction GetShape(cu: ExtrudeContourCurve): TShape\r\n{\r\n if (cu instanceof Circle)\r\n {\r\n let sp = new TShape();\r\n let cen = cu.Center;\r\n sp.ellipse(cen.x, cen.y, cu.Radius, cu.Radius, 0, 2 * Math.PI, false, 0);\r\n return sp;\r\n }\r\n else\r\n {\r\n if (cu.OCSNoClone !== IdentityMtx4)\r\n cu.UpdateOCSTo(IdentityMtx4);\r\n return cu.Shape;\r\n }\r\n}\r\n\r\nfunction CreateTape(faceType: DepthType, startParam: number, endParam: number, depth: number, allDepth: number): Tape\r\n{\r\n if (faceType === DepthType.Front)\r\n return new Tape(startParam, endParam, allDepth - depth, allDepth);\r\n else\r\n return new Tape(startParam, endParam, 0, depth);\r\n}\r\n\r\n//朝向类型\r\nenum DirectionType\r\n{\r\n Outer = 0,//外墙\r\n Inner = 1 //内墙\r\n}\r\n\r\n//轮廓树节点,用于重新确认外墙和网洞的关系\r\nexport class ContourTreeNode\r\n{\r\n parent: ContourTreeNode;//当存在Parent时,表示它是一个洞(如果有多层时,使用IsHole判断)\r\n\r\n box: Box3;\r\n area: number;\r\n constructor(public contour: Contour, public children: ContourTreeNode[] = []) { }\r\n\r\n SetParent(node: ContourTreeNode)\r\n {\r\n if (this.parent)\r\n throw \"ContourTreeNode重复设置父对象\";\r\n this.parent = node;\r\n node.children.push(this);\r\n }\r\n\r\n get Depth(): number\r\n {\r\n let depth = 0;\r\n let parent = this.parent;\r\n while (parent)\r\n {\r\n depth++;\r\n parent = parent.parent;\r\n\r\n if (depth > 10)\r\n throw \"ContourTreeNode嵌套超过10层\";\r\n }\r\n return depth;\r\n }\r\n\r\n get IsHole(): boolean\r\n {\r\n return this.Depth % 2 === 1;\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], front: boolean, z: number, rotateUv: boolean, allDepth: number)//, depth = 1\r\n {\r\n // TestDraw(this.contour.Curve, depth);\r\n let pts = this.contour.Curve.GetStretchPoints();\r\n\r\n let isFace: boolean;\r\n let ptsChoking: Vector3[];\r\n if (ExtrudeBuildConfig.bevel)\r\n {\r\n //进行内缩,使得可以正常倒角\r\n isFace = (z === 0 || z === 18);//是正反面\r\n if (isFace)\r\n {\r\n ptsChoking = FastOffset(pts, 1, true);\r\n [pts, ptsChoking] = [ptsChoking, pts];\r\n }\r\n }\r\n\r\n let vertices = pts.concat();\r\n let holes = this.children.map(h =>\r\n {\r\n // TestDraw(h.contour.Curve, depth + 1);\r\n let pts = h.contour.Curve.GetStretchPoints();\r\n arrayPushArray(vertices, pts);\r\n return pts;\r\n });\r\n\r\n let faces = ShapeUtils.triangulateShape(pts, holes);\r\n\r\n for (let f of faces)\r\n {\r\n if (front)\r\n {\r\n AddVertice(vertices[f[0]]);\r\n AddVertice(vertices[f[1]]);\r\n AddVertice(vertices[f[2]]);\r\n }\r\n else\r\n {\r\n AddVertice(vertices[f[0]]);\r\n AddVertice(vertices[f[2]]);\r\n AddVertice(vertices[f[1]]);\r\n }\r\n }\r\n\r\n function AddVertice(v: Vector3, inz = z)\r\n {\r\n verticesArray.push(v.x, v.y, inz);\r\n if (rotateUv)\r\n uvArray.push(v.y * 1e-3, v.x * 1e-3);\r\n else\r\n uvArray.push(v.x * 1e-3, v.y * 1e-3);\r\n }\r\n\r\n for (let hole of this.children)\r\n {\r\n for (let h of hole.children)\r\n {\r\n h.Draw(verticesArray, uvArray, front, z, rotateUv, allDepth);//, depth + 2\r\n }\r\n }\r\n\r\n if (!ExtrudeBuildConfig.bevel || !isFace) return;//如果不倒角 就不执行下面的代码\r\n\r\n let z2 = front ? z - 1 : z + 1;\r\n\r\n //构建倒角边\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let p1 = pts[i];\r\n let nextIndex = FixIndex(i + 1, pts);\r\n let p2 = pts[nextIndex];\r\n\r\n let p3 = ptsChoking[i];\r\n let p4 = ptsChoking[nextIndex];\r\n\r\n if (front)\r\n {\r\n AddVertice(p3, z2);\r\n AddVertice(p4, z2);\r\n AddVertice(p1);\r\n\r\n AddVertice(p1);\r\n AddVertice(p4, z2);\r\n AddVertice(p2);\r\n }\r\n else\r\n {\r\n AddVertice(p3, z2);\r\n AddVertice(p1);\r\n AddVertice(p4, z2);\r\n\r\n AddVertice(p1);\r\n AddVertice(p2);\r\n AddVertice(p4, z2);\r\n }\r\n }\r\n }\r\n\r\n static ParseContourTree(contourNodes: ContourTreeNode[], ignoreInCurve = false, checkIntersect = false): void\r\n {\r\n if (contourNodes.length < 2) return;\r\n\r\n let fb = new Flatbush(contourNodes.length);\r\n for (let node of contourNodes)\r\n {\r\n node.box = node.contour.BoundingBox;\r\n node.area = node.contour.Area;\r\n fb.add(node.box.min.x, node.box.min.y, node.box.max.x, node.box.max.y);\r\n }\r\n fb.finish();\r\n\r\n for (let i = 0; i < contourNodes.length; i++)\r\n {\r\n const node1 = contourNodes[i];\r\n let p = node1.contour.Curve.StartPoint;\r\n\r\n let ids = fb.search(node1.box.min.x, node1.box.min.y, node1.box.max.x, node1.box.max.y);\r\n ids.sort((i1, i2) => contourNodes[i1].area - contourNodes[i2].area);\r\n for (let id of ids)\r\n {\r\n if (id === i) continue;\r\n\r\n let node2 = contourNodes[id];\r\n if (node2.parent === node1 || node2.area < node1.area) continue;//避免自己的儿子成为自己的父亲\r\n\r\n //检查是否有交集\r\n if (checkIntersect && node1.contour.Curve.IntersectWith(node2.contour.Curve, IntersectOption.ExtendNone)?.length)\r\n continue;\r\n\r\n if (node2.contour.Curve.PtInCurve(p) || ignoreInCurve)\r\n {\r\n node1.SetParent(node2);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass EdgeGeometryBuild\r\n{\r\n lineVerticesArray: number[] = [];\r\n\r\n frontLines: Line[] = [];\r\n backLines: Line[] = [];\r\n constructor(public allDepth: number) { }\r\n AddLidLine(p1: Vector3, p2: Vector3, depth: number)\r\n {\r\n if (depth === 0)\r\n {\r\n p1 = p1.clone().setZ(0);\r\n p2 = p2.clone().setZ(0);\r\n let line = new Line(p1, p2);\r\n this.backLines.push(line);\r\n }\r\n else if (depth === this.allDepth)\r\n {\r\n p1 = p1.clone().setZ(0);\r\n p2 = p2.clone().setZ(0);\r\n let line = new Line(p1, p2);\r\n this.frontLines.push(line);\r\n }\r\n }\r\n\r\n BuildLid(verticesArray: number[], uvArray: number[], rotateUv: boolean)\r\n {\r\n let arr = [this.backLines, this.frontLines];\r\n\r\n for (let index = 0; index < 2; index++)\r\n {\r\n let lines = arr[index];\r\n let parse = new RegionParse(lines, 2);\r\n let contourNodes: ContourTreeNode[] = [];\r\n\r\n //对于未被面域分析出来的线,我们进行join操作\r\n let unusedLines: Line[] = [];\r\n for (let l of lines)\r\n if (!parse.GetCueveUsed(l))\r\n unusedLines.push(l);\r\n if (unusedLines.length > 2)\r\n {\r\n let groups = curveLinkGroup(unusedLines, 1);\r\n for (let g of groups)\r\n {\r\n if (g.length < 2) continue;\r\n let pl = new Polyline();\r\n pl.ColorIndex = g[0].ColorIndex;\r\n pl.OCS = ComputerCurvesNormalOCS(g);\r\n for (let cu of g)\r\n {\r\n if (pl.Join(cu, false, 0.1) === Status.True)\r\n cu.Erase();\r\n }\r\n\r\n pl.CloseMark = true;\r\n let c = Contour.CreateContour(pl, false) ?? CreateContour2(pl.Explode(), 0.1);;\r\n if (c && c.Area > 0.1)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"错误:构建板件的MeshGeometry的盖子生成轮廓失败了!\");\r\n }\r\n }\r\n\r\n for (let routes of parse.RegionsOutline)\r\n {\r\n let cs: Curve[] = routes.map(r => r.curve);\r\n let c = Contour.CreateContour(cs, false) ?? CreateContour2(cs) ?? CreateContour2(cs, 0.1);\r\n if (c)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"错误:构建板件的MeshGeometry的盖子生成轮廓失败了!\");\r\n }\r\n\r\n ContourTreeNode.ParseContourTree(contourNodes);\r\n\r\n for (let j = contourNodes.length; j--;)\r\n {\r\n let node = contourNodes[j];\r\n if (node.parent) continue;\r\n\r\n node.Draw(verticesArray, uvArray, index === 1, this.allDepth * index, rotateUv, this.allDepth);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 胶带\r\n */\r\nexport class Tape\r\n{\r\n constructor(\r\n public start: number,\r\n public end: number,\r\n\r\n public bottom: number,\r\n public top: number\r\n )\r\n {\r\n\r\n }\r\n\r\n //用于测试\r\n get Curve()\r\n {\r\n return new Polyline().RectangleFrom2Pt(new Vector3(this.start, this.bottom), new Vector3(this.end, this.top));\r\n }\r\n\r\n Clip(t: this): Tape[]\r\n {\r\n let yr = IntersectRange(this.bottom, this.top, t.bottom, t.top, 1e5);\r\n if (yr === undefined) return [this];\r\n\r\n let xr = IntersectRange(this.start, this.end, t.start, t.end, 1e5);\r\n if (xr === undefined) return [this];\r\n\r\n let rem = SubtractRange(this.start, this.end, t.start, t.end, 1e5).map(r =>\r\n {\r\n return new Tape(r[0], r[1], this.bottom, this.top);\r\n });\r\n\r\n let remR = SubtractRange(this.bottom, this.top, t.bottom, t.top, 1e5);\r\n for (let hr of remR)\r\n {\r\n rem.push(new Tape(xr[0], xr[1], hr[0], hr[1]));\r\n }\r\n return rem;\r\n }\r\n\r\n Split(xlst: number[]): Tape[]\r\n {\r\n let ret: Tape[] = [];\r\n let pre = this.start;\r\n for (let x of xlst)\r\n {\r\n if (x > pre)\r\n {\r\n if (x >= this.end) x = this.end;\r\n if (equaln(pre, x)) continue;\r\n ret.push(new Tape(pre, x, this.bottom, this.top));\r\n pre = x;\r\n if (x === this.end) break;\r\n }\r\n }\r\n\r\n if (pre < this.end)//避免最后一个切割元素小于终点时没有补上最后一个\r\n ret.push(new Tape(pre, this.end, this.bottom, this.top));\r\n return ret;\r\n }\r\n}\r\n\r\n/**\r\n * 二维形状,内部用曲线胶带表示(用来计算盖子差集算法)\r\n */\r\nexport class CurveTapeShape\r\n{\r\n children: CurveTapeShape[] = [];\r\n contour: CurveTape;\r\n holes: CurveTape[];\r\n constructor(contour: Contour, holes: Contour[])\r\n {\r\n this.contour = new CurveTape(contour, DirectionType.Outer);\r\n this.holes = holes.map(h => new CurveTape(h, DirectionType.Inner));\r\n }\r\n\r\n CloneNew()\r\n {\r\n let s = new CurveTapeShape(this.contour.contour, this.holes.map(h => h.contour));\r\n return s;\r\n }\r\n\r\n /**\r\n * 删除包含,同向\r\n */\r\n ClipTo(s: CurveTapeShape, append: boolean = false)\r\n {\r\n for (let c of [this.contour, ... this.holes])\r\n if (c.tapes.length > 0)\r\n c.ClipTo(s);\r\n\r\n if (append)\r\n {\r\n let sn = s.CloneNew();\r\n sn.ReverseClipTo(this);\r\n this.children.push(sn);\r\n }\r\n }\r\n\r\n //合理打断(以保证三维网格对齐(否则圆弧点将无法正确的对齐))\r\n SplitTo(s: CurveTapeShape)\r\n {\r\n for (let c of [this.contour, ...this.holes])\r\n {\r\n for (let c2 of [s.contour, ...s.holes])\r\n {\r\n let int = GetIntersection(c.contour.Curve, c2.contour.Curve);\r\n c.splitParams.push(...int.map(i => i.thisParam));\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 只保留被包含部分\r\n */\r\n private ReverseClipTo(s: CurveTapeShape): this\r\n {\r\n for (let c of [this.contour, ... this.holes])\r\n if (c.tapes.length > 0)\r\n c.ReverseClipTo(s);\r\n\r\n return this;\r\n }\r\n\r\n ChildrenClip()\r\n {\r\n for (let i = 0; i < this.children.length; i++)\r\n {\r\n let s1 = this.children[i];\r\n for (let j = i + 1; j < this.children.length; j++)\r\n {\r\n let s2 = this.children[j];\r\n\r\n s1.ClipTo(s2, false);\r\n s2.ClipTo(s1, false);\r\n }\r\n }\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], front: boolean, z: number, rotateUv: boolean, allDepth: number)\r\n {\r\n this.ChildrenClip();\r\n\r\n let polylines: Polyline[] = this.contour.Curves;\r\n\r\n for (let h of this.holes)\r\n polylines.push(...h.Curves);\r\n\r\n for (let s of this.children)\r\n {\r\n polylines.push(...s.contour.Curves);\r\n for (let h of s.holes)\r\n polylines.push(...h.Curves);\r\n }\r\n\r\n // TestDraw(polylines, z);\r\n let groups = curveLinkGroup(polylines);\r\n let contourNodes: ContourTreeNode[] = [];\r\n for (let cus of groups)\r\n {\r\n let c = Contour.CreateContour(cus, false);\r\n if (c)\r\n contourNodes.push(new ContourTreeNode(c));\r\n else\r\n console.error(\"出错\");\r\n }\r\n\r\n ContourTreeNode.ParseContourTree(contourNodes);\r\n\r\n for (let j = contourNodes.length; j--;)\r\n {\r\n let node = contourNodes[j];\r\n // TestDraw(s.contour.Curve.Clone(), z);\r\n if (node.parent) continue;\r\n\r\n node.Draw(verticesArray, uvArray, front, z, rotateUv, allDepth);\r\n }\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 曲线胶带(一维)\r\n */\r\nclass CurveTape\r\n{\r\n tapes: Range[];\r\n splitParams: number[] = [];\r\n constructor(public contour: Contour, public wallType: DirectionType)\r\n {\r\n this.tapes = [[0, this.contour.Curve.EndParam]];\r\n }\r\n\r\n get Curves(): Polyline[]\r\n {\r\n let xparams: number[] = SplitCurveParams(this.contour.Curve);\r\n if (this.splitParams.length > 0)\r\n {\r\n xparams.push(...this.splitParams);\r\n arraySortByNumber(xparams);\r\n arrayRemoveDuplicateBySort(xparams, (p1, p2) => equaln(p1, p2));\r\n }\r\n\r\n let polylines: Polyline[] = [];\r\n\r\n function TD(p: Vector3): PolylineProps\r\n {\r\n return { pt: AsVector2(p), bul: 0 };\r\n }\r\n\r\n const addPolyline = (t: Range) =>\r\n {\r\n let pts = [TD(this.contour.Curve.GetPointAtParam(t[0]))];\r\n for (let x of xparams)\r\n {\r\n if (x <= t[0]) continue;\r\n if (x >= t[1]) break;\r\n\r\n pts.push(TD(this.contour.Curve.GetPointAtParam(x)));\r\n }\r\n pts.push(TD(this.contour.Curve.GetPointAtParam(t[1])));\r\n\r\n let pl = new Polyline(pts);\r\n polylines.push(pl);\r\n };\r\n\r\n for (let t of this.tapes)\r\n {\r\n if (t[0] > t[1])\r\n {\r\n addPolyline([0, t[1]]);\r\n addPolyline([t[0], this.contour.Curve.EndParam]);\r\n }\r\n else\r\n addPolyline(t);\r\n }\r\n return polylines;\r\n }\r\n\r\n /**\r\n * 分析与另一个形状的包含关系\r\n */\r\n Parse(s: CurveTapeShape): CurveParamRangeRelation\r\n {\r\n let [res1] = ParseCurveParamRangeRelation(this.contour.Curve, s.contour.contour.Curve);\r\n if (this.wallType === DirectionType.Inner)\r\n [res1.syntropy, res1.reverse] = [res1.reverse, res1.syntropy];\r\n if (res1.container.length > 0)\r\n {\r\n for (let h of s.holes)\r\n {\r\n let [res2] = ParseCurveParamRangeRelation(this.contour.Curve, h.contour.Curve);\r\n if (this.wallType === DirectionType.Outer)\r\n [res2.syntropy, res2.reverse] = [res2.reverse, res2.syntropy];\r\n\r\n res1.syntropy.push(...res2.syntropy);\r\n res1.reverse.push(...res2.reverse);\r\n\r\n res1.container = SubtractRanges(res1.container, res2.container, this.contour.Curve.EndParam);\r\n res1.container = SubtractRanges(res1.container, res2.syntropy, this.contour.Curve.EndParam);\r\n res1.container = SubtractRanges(res1.container, res2.reverse, this.contour.Curve.EndParam);\r\n }\r\n }\r\n return res1;\r\n }\r\n\r\n /**\r\n * 删除包含,同向面\r\n */\r\n ClipTo(s: CurveTapeShape): this\r\n {\r\n let d = this.Parse(s);\r\n\r\n this.tapes = SubtractRanges(this.tapes, d.container, this.contour.Curve.EndParam);\r\n this.tapes = SubtractRanges(this.tapes, d.syntropy, this.contour.Curve.EndParam);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 保留被包含的部分\r\n */\r\n ReverseClipTo(s: CurveTapeShape): this\r\n {\r\n this.tapes = this.Parse(s).container;\r\n return this;\r\n }\r\n}\r\n\r\nclass ExtudeWall\r\n{\r\n //胶带(立面)\r\n private Tape: Tape[];\r\n constructor(public curve: ExtrudeContourCurve,\r\n public depthType: DepthType,\r\n public depth: number,\r\n public allDepth: number,\r\n public wallType: DirectionType\r\n )\r\n {\r\n //一整段\r\n this.Tape = [CreateTape(depthType, 0, this.curve.EndParam, depth, allDepth)];\r\n }\r\n\r\n /**\r\n * 减去在另一个groove内的部分\r\n * @param groove this - groove\r\n * @param [clipSyntropy=false] 删除同向的面\r\n */\r\n ClipTo(groove: Groove, clipSyntropy = false)\r\n {\r\n let [res1] = ParseCurveParamRangeRelation(this.curve, groove.contourWall.curve);\r\n if (this.wallType !== groove.contourWall.wallType)\r\n [res1.syntropy, res1.reverse] = [res1.reverse, res1.syntropy];\r\n if (res1.container.length > 0)\r\n {\r\n for (let h of groove.holeWalls)\r\n {\r\n let [resh1] = ParseCurveParamRangeRelation(this.curve, h.curve);\r\n\r\n //翻转\r\n if (this.wallType !== h.wallType)\r\n [resh1.syntropy, resh1.reverse] = [resh1.reverse, resh1.syntropy];\r\n\r\n //删除在网洞内的\r\n let subParams: [number, number][];\r\n if (clipSyntropy)\r\n subParams = resh1.container;//删除共面,\r\n else\r\n subParams = [...resh1.container, ...resh1.syntropy];//保留共面部分\r\n\r\n for (let i of subParams)\r\n {\r\n let rems: [number, number][] = [];\r\n for (let r of res1.container)\r\n rems.push(...SubtractRange(r[0], r[1], i[0], i[1], this.curve.EndParam));\r\n res1.container = rems;\r\n }\r\n }\r\n }\r\n\r\n let params = [...res1.container, ...res1.reverse];\r\n if (clipSyntropy)\r\n params.push(...res1.syntropy);\r\n\r\n for (let c of params)\r\n this.ClipFromParam(c[0], c[1], groove.depthType, groove.depth);\r\n }\r\n\r\n ClipReverse(wall: this)\r\n {\r\n let [res1] = ParseCurveParamRangeRelation(this.curve, wall.curve);\r\n for (let c of res1.syntropy)\r\n this.ClipFromParam(c[0], c[1], wall.depthType, wall.depth);\r\n }\r\n\r\n /**\r\n * 当起始参数大于终止参数时,裁剪的区域经过终点\r\n *\r\n * @param startParam 起始参数\r\n * @param endParam 终止参数\r\n * @param faceType 裁剪面朝向\r\n * @param depth 裁剪面的深度\r\n */\r\n ClipFromParam(startParam: number, endParam: number, faceType: DepthType, depth: number)\r\n {\r\n if (equaln(startParam, endParam)) return;\r\n if (startParam > endParam)\r\n {\r\n this.ClipFromParam(startParam, this.curve.EndParam, faceType, depth);\r\n this.ClipFromParam(0, endParam, faceType, depth);\r\n return this;\r\n }\r\n\r\n let subTape = CreateTape(faceType, startParam, endParam, depth, this.allDepth);\r\n let taps: Tape[] = [];\r\n for (let t of this.Tape)\r\n taps.push(...t.Clip(subTape));\r\n\r\n this.Tape = taps;\r\n return this;\r\n }\r\n\r\n Draw(verticesArray: number[], uvArray: number[], edgeBuild: EdgeGeometryBuild, displayAccuracy = 0)\r\n {\r\n this.curve.DisplayAccuracy = displayAccuracy;\r\n let xparams = SplitCurveParams(this.curve);\r\n\r\n let isOuter = this.wallType === DirectionType.Outer;\r\n let allDepth = this.allDepth;\r\n\r\n function AddVertice(v: Vector3)\r\n {\r\n verticesArray.push(v.x);\r\n verticesArray.push(v.y);\r\n\r\n if (isOuter && ExtrudeBuildConfig.bevel)//如果倒角,则执行下面的代码\r\n {\r\n if (v.z === 0)\r\n verticesArray.push(1);\r\n else if (v.z === allDepth)\r\n verticesArray.push(allDepth - 1);\r\n else\r\n verticesArray.push(v.z);\r\n }\r\n else\r\n verticesArray.push(v.z);\r\n }\r\n\r\n let tapes: Tape[] = [];\r\n this.Tape.sort((t1, t2) => t1.start - t2.start);\r\n for (let tape of this.Tape)\r\n tapes.push(...tape.Split(xparams));\r\n for (let i = 0; i < tapes.length; i++)\r\n {\r\n let preIndex = FixIndex(i - 1, tapes);\r\n let nextIndex = FixIndex(i + 1, tapes);\r\n\r\n let tape = tapes[i];\r\n let preTape = tapes[preIndex];\r\n let nextTape = tapes[nextIndex];\r\n\r\n let p1 = this.curve.GetPointAtParam(tape.start).setZ(tape.bottom);\r\n let p2 = this.curve.GetPointAtParam(tape.end).setZ(tape.bottom);\r\n let vs = [p1, p2, p2.clone().setZ(tape.top), p1.clone().setZ(tape.top), p1];\r\n edgeBuild.AddLidLine(p1, p2, tape.bottom);\r\n edgeBuild.AddLidLine(p1, p2, tape.top);\r\n\r\n //#region 构造线框\r\n {\r\n let leftRanges: Range[];\r\n let rightRange: Range[];\r\n\r\n const IsInteger = (n: number) => equaln(n, Math.round(n), 1e-8);\r\n\r\n if (!IsInteger(tape.start) && equaln(tape.start, preTape.end))\r\n leftRanges = SubtractRange(tape.bottom, tape.top, preTape.bottom, preTape.top, this.allDepth);\r\n else\r\n leftRanges = [[tape.bottom, tape.top]];\r\n\r\n if (equaln(tape.end, nextTape.start))\r\n rightRange = SubtractRange(tape.bottom, tape.top, nextTape.bottom, nextTape.top, this.allDepth);\r\n else\r\n rightRange = [[tape.bottom, tape.top]];\r\n\r\n //上下两条线\r\n edgeBuild.lineVerticesArray.push(\r\n p1.x, p1.y, p1.z,\r\n p2.x, p2.y, p2.z,\r\n\r\n p1.x, p1.y, tape.top,\r\n p2.x, p2.y, tape.top,\r\n );\r\n\r\n //左右线\r\n for (let range of leftRanges)\r\n {\r\n edgeBuild.lineVerticesArray.push(\r\n p1.x, p1.y, range[0],\r\n p1.x, p1.y, range[1]);\r\n }\r\n for (let range of rightRange)\r\n {\r\n edgeBuild.lineVerticesArray.push(\r\n p2.x, p2.y, range[0],\r\n p2.x, p2.y, range[1]);\r\n }\r\n }\r\n //#endregion\r\n\r\n //和X平行平行\r\n let isXPar = equaln(vs[0].x, vs[1].x, 1e-2);\r\n\r\n function AddUv(p: Vector3)\r\n {\r\n if (isXPar)\r\n uvArray.push((p.z - 1) * 1e-3, p.y * 1e-3);\r\n else\r\n uvArray.push((p.z - 1) * 1e-3, p.x * 1e-3);\r\n }\r\n if (this.wallType === DirectionType.Outer)\r\n {\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[1]);\r\n AddUv(vs[1]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n AddVertice(vs[3]);\r\n AddUv(vs[3]);\r\n }\r\n else\r\n {\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n AddVertice(vs[1]);\r\n AddUv(vs[1]);\r\n\r\n AddVertice(vs[0]);\r\n AddUv(vs[0]);\r\n AddVertice(vs[3]);\r\n AddUv(vs[3]);\r\n AddVertice(vs[2]);\r\n AddUv(vs[2]);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 曲线参数范围关系(包含,分离,同向共线,反向共线)\r\n * 用来表示某一曲线在另一个曲线内的关系\r\n */\r\ninterface CurveParamRangeRelation\r\n{\r\n outer: Range[];//外部\r\n container: Range[];//被包含\r\n syntropy: Range[];//同向\r\n reverse: Range[];//反向\r\n}\r\n\r\nfunction CloneCurveRange(r: CurveParamRangeRelation): CurveParamRangeRelation\r\n{\r\n return {\r\n outer: r.outer.slice(),\r\n container: r.container.slice(),\r\n syntropy: r.syntropy.slice(),\r\n reverse: r.reverse.slice(),\r\n };\r\n}\r\n\r\ninterface CurveSegs\r\n{\r\n outer: Curve[];//外部\r\n container: Curve[];//被包含\r\n syntropy: Curve[];//同向\r\n reverse: Curve[];//反向\r\n}\r\n\r\nfunction binarySearch(arr: number[], el: number): number\r\n{\r\n let m = 0;\r\n let n = arr.length - 1;\r\n while (m <= n)\r\n {\r\n let k = (n + m) >> 1;\r\n let cmp = (el - arr[k]);\r\n if (cmp > 1e8)\r\n m = k + 1;\r\n else if (cmp < -1e8)\r\n n = k - 1;\r\n else\r\n return k;\r\n }\r\n return -m - 1;\r\n}\r\n\r\nfunction CurveSplit(cu: Curve, range: CurveParamRangeRelation): CurveSegs\r\n{\r\n let segs = { outer: [], container: [], syntropy: [], reverse: [] };\r\n\r\n let ranges: Range[] = [...range.outer, ...range.container, ...range.syntropy, ...range.reverse];\r\n\r\n ranges.sort((r1, r2) => r1[0] - r2[0]);\r\n\r\n let params: number[] = ranges.flat();\r\n arrayRemoveDuplicateBySort(params, (p1, p2) => equaln(p1, p2));\r\n let cus = cu.GetSplitCurves(params);\r\n\r\n for (let key in range)\r\n {\r\n for (let r of range[key])\r\n {\r\n let i = binarySearch(params, r[0]);\r\n segs[key].push(cus[i]);\r\n }\r\n }\r\n\r\n return segs;\r\n}\r\n\r\n/**\r\n * 分析两个曲线关系(包含,分离,同向共线,反向共线)(用参数范围表示)\r\n */\r\nfunction ParseCurveParamRangeRelation(cu1: ExtrudeContourCurve, cu2: ExtrudeContourCurve, reverseParse = false): [CurveParamRangeRelation, CurveParamRangeRelation]\r\n{\r\n let ins = GetIntersection(cu1, cu2);\r\n ins.sort((a1, a2) => a1.thisParam - a2.thisParam);\r\n //点重复->下方ins会sort,导致交点对应不上,导致错误\r\n arrayRemoveDuplicateBySort(ins, (i1, i2) => equalv3(i1.pt, i2.pt, 1e-4));\r\n if (ins.length > 1 && equalv3(ins[0].pt, ins[ins.length - 1].pt, 1e-4)) ins.pop();\r\n\r\n let c1Res: CurveParamRangeRelation = { container: [], syntropy: [], reverse: [], outer: [] };\r\n let c2Res: CurveParamRangeRelation = { container: [], syntropy: [], reverse: [], outer: [] };\r\n if (ins.length === 0)\r\n {\r\n if (cu1 instanceof Circle && cu2 instanceof Circle && equaln(cu1.Radius, cu2.Radius, 1e-4) && equalv2(cu1.Center, cu2.Center, 1e-4))\r\n {\r\n c1Res.syntropy.push([0, 1]);\r\n c2Res.syntropy.push([0, 1]);\r\n return [c1Res, c2Res];\r\n }\r\n\r\n let a1 = cu1.Area, a2 = cu2.Area;\r\n\r\n if (a2 > a1 && cu2.PtInCurve(cu1.StartPoint))//cu2包含cu1\r\n c1Res.container.push([0, cu1.EndParam]);\r\n else\r\n c1Res.outer.push([0, cu1.EndParam]);\r\n\r\n if (a1 > a2 && cu1.PtInCurve(cu2.StartPoint))//cu1包含cu2\r\n c2Res.container.push([0, cu2.EndParam]);\r\n else\r\n c2Res.outer.push([0, cu2.EndParam]);\r\n\r\n return [c1Res, c2Res];\r\n }\r\n\r\n if (ins.length === 1)\r\n {\r\n let a1 = cu1.Area, a2 = cu2.Area;\r\n\r\n if (a2 > a1 && fastCurveInCurve2(cu2, cu1))//cu2包含cu1\r\n c1Res.container.push([0, cu1.EndParam]);\r\n else\r\n c1Res.outer.push([0, cu1.EndParam]);\r\n\r\n if (a1 > a2 && fastCurveInCurve2(cu1, cu2))//cu1包含cu2\r\n c2Res.container.push([0, cu2.EndParam]);\r\n else\r\n c2Res.outer.push([0, cu2.EndParam]);\r\n\r\n return [c1Res, c2Res];\r\n }\r\n\r\n type CurveSeg = {\r\n startParam: number;\r\n endParam: number;\r\n startPoint: Vector3;\r\n endPoint: Vector3;\r\n used?: boolean;\r\n };\r\n\r\n //解析出线段列表\r\n let c1Curves: CurveSeg[] = [];\r\n let c2Curves: CurveSeg[] = [];\r\n\r\n for (let i = 0; i < ins.length; i++)\r\n {\r\n let n1 = ins[i];\r\n let n2 = ins[FixIndex(i + 1, ins)];\r\n c1Curves.push({ startParam: n1.thisParam, endParam: n2.thisParam, startPoint: n1.pt, endPoint: n2.pt });\r\n }\r\n ins.sort((a1, a2) => a1.argParam - a2.argParam);\r\n for (let i = 0; i < ins.length; i++)\r\n {\r\n let n1 = ins[i];\r\n let n2 = ins[FixIndex(i + 1, ins)];\r\n c2Curves.push({ startParam: n1.argParam, endParam: n2.argParam, startPoint: n1.pt, endPoint: n2.pt });\r\n }\r\n\r\n //分析共边关系和包含关系\r\n for (let c of c1Curves)\r\n {\r\n let c1MidPoint = CenterPoint(cu1, c.startParam, c.endParam);\r\n for (let c2 of c2Curves)\r\n {\r\n if (c2.used)\r\n continue;\r\n\r\n let c2MidPoint = CenterPoint(cu2, c2.startParam, c2.endParam);\r\n if (!equalv3(c1MidPoint, c2MidPoint, 1e-4))\r\n continue;\r\n\r\n c.used = true;\r\n if (c.startPoint === c2.startPoint\r\n && c.endPoint === c2.endPoint)\r\n {\r\n c1Res.syntropy.push([c.startParam, c.endParam]);\r\n c2Res.syntropy.push([c2.startParam, c2.endParam]);\r\n c2.used = true;\r\n break;\r\n }\r\n else if (c.startPoint === c2.endPoint\r\n && c.endPoint === c2.startPoint)\r\n {\r\n c1Res.reverse.push([c.startParam, c.endParam]);\r\n c2Res.reverse.push([c2.startParam, c2.endParam]);\r\n c2.used = true;\r\n break;\r\n }\r\n else\r\n c.used = false;\r\n }\r\n\r\n if (!c.used)\r\n {\r\n if (cu2.PtInCurve(c1MidPoint))\r\n c1Res.container.push([c.startParam, c.endParam]);\r\n else\r\n c1Res.outer.push([c.startParam, c.endParam]);\r\n }\r\n }\r\n\r\n //只分析包含关系\r\n if (reverseParse)\r\n for (let c of c2Curves)\r\n {\r\n if (c.used) continue;\r\n let p = CenterPoint(cu2, c.startParam, c.endParam);\r\n if (cu1.PtInCurve(p))\r\n c2Res.container.push([c.startParam, c.endParam]);\r\n else\r\n c2Res.outer.push([c.startParam, c.endParam]);\r\n }\r\n return [c1Res, c2Res];\r\n}\r\n\r\nfunction CenterPoint(cu: ExtrudeContourCurve, start: number, end: number)\r\n{\r\n let lenStart = cu.GetDistAtParam(start);\r\n let lenEnd = cu.GetDistAtParam(end);\r\n if (end > start)\r\n return cu.GetPointAtDistance((lenEnd + lenStart) * 0.5);\r\n\r\n let lenAll = cu.Length;\r\n let lenDiv = ((lenAll - lenStart) + lenEnd) * 0.5;\r\n\r\n if (lenStart + lenDiv >= lenAll)\r\n return cu.GetPointAtDistance(lenStart + lenDiv - lenAll);\r\n else\r\n return cu.GetPointAtDistance(lenStart + lenDiv);\r\n}\r\n\r\n//求参数并集部分,交集部分,差集部分\r\n\r\n//求 ab 和 cd 的并集部分\r\nfunction UnionRange(a: number, b: number, c: number, d: number, end: number): [number, number][]\r\n{\r\n let b1 = b < a ? b + end : b;\r\n let d1 = d < c ? d + end : d;\r\n let a1 = a;\r\n let c1 = c;\r\n\r\n if (c < a)\r\n [a1, b1, c1, d1] = [c1, d1, a1, b1];\r\n\r\n if (c1 > b1)\r\n return [[a, b], [c, d]];\r\n\r\n let e = Math.max(b1, d1);\r\n if (e >= end)\r\n {\r\n e -= end;\r\n if (e > a1)\r\n return [[0, end]];\r\n }\r\n\r\n return [[a1, e]];\r\n}\r\n\r\n\r\n\r\n/**\r\n *\r\n * @param orgStart 被裁剪范围的起点(如果起点大于终点,那么表示 s->end + 0->e)\r\n * @param orgEnd\r\n * @param clipStart\r\n * @param clipEnd\r\n * @param end\r\n * @returns\r\n */\r\nexport function SubtractRange(orgStart: number, orgEnd: number, clipStart: number, clipEnd: number, end: number): Range[]\r\n{\r\n if (orgStart < 0\r\n || orgEnd < 0\r\n || orgEnd > end\r\n || orgStart > end\r\n || clipStart < 0\r\n || clipEnd < 0\r\n || clipStart > end\r\n || clipEnd > end) return [];\r\n\r\n if (orgStart > orgEnd)\r\n return SubtractRange(orgStart, end, clipStart, clipEnd, end).concat(SubtractRange(0, orgEnd, clipStart, clipEnd, end));\r\n if (clipStart > clipEnd)\r\n {\r\n let arr = SubtractRange(orgStart, orgEnd, clipStart, end, end);\r\n let rem: [number, number][] = [];\r\n for (let s of arr)\r\n arrayPushArray(rem, SubtractRange(s[0], s[1], 0, clipEnd, end));\r\n return rem;\r\n }\r\n\r\n if (clipStart >= orgEnd || clipEnd <= orgStart)\r\n return [[orgStart, orgEnd]];\r\n\r\n if (clipStart <= orgStart)// c1 a1 b1\r\n {\r\n if (clipEnd >= orgEnd) return [];\r\n return [[clipEnd, orgEnd]];\r\n }\r\n\r\n if (clipEnd < orgEnd)\r\n return [[orgStart, clipStart], [clipEnd, orgEnd]];\r\n return [[orgStart, clipStart]];\r\n}\r\n\r\nexport function SubtractRange2(r: Range, sr: Range, end: number): Range[]\r\n{\r\n return SubtractRange(r[0], r[1], sr[0], sr[1], end);\r\n}\r\n\r\ntype Range = [number, number];\r\nfunction SubtractRanges(ranges: Range[], subRanges: Range[], end: number): Range[]\r\n{\r\n let rets: Range[] = ranges;\r\n for (let sr of subRanges)\r\n {\r\n let temps: Range[] = [];\r\n for (let r of rets)\r\n arrayPushArray(temps, SubtractRange2(r, sr, end));\r\n rets = temps;\r\n }\r\n return rets;\r\n}\r\n\r\nfunction IntersectRange(a: number, b: number, c: number, d: number, end: number): Range\r\n{\r\n let b1 = b < a ? b + end : b;\r\n let d1 = d < c ? d + end : d;\r\n let a1 = a;\r\n let c1 = c;\r\n\r\n if (c < a)\r\n [a1, b1, c1, d1] = [c1, d1, a1, b1];\r\n\r\n if (c1 > b1)\r\n return;\r\n\r\n return [c1, Math.min(b1, d1)];\r\n}\r\n\r\nconst alMatrix4 = new Matrix4;\r\n\r\nexport class ExtrudeGeometryBuilder\r\n{\r\n verticesArray: number[] = [];//用于构建三维网格\r\n uvArray: number[] = [];//uv\r\n\r\n edgeAndLidBuilder: EdgeGeometryBuild;\r\n\r\n constructor(private br: ExtrudeSolid, rotateUv: boolean = false)\r\n {\r\n this.GenerateMeshData(br, rotateUv);\r\n }\r\n\r\n protected GenerateMeshData(br: ExtrudeSolid, rotateUv: boolean)\r\n {\r\n this.edgeAndLidBuilder = new EdgeGeometryBuild(this.br.Thickness);\r\n rotateUv = rotateUv || (br instanceof Board && br.BoardProcessOption.lines === LinesType.Reverse);\r\n\r\n //计算墙(创建轮廓取出,为了得到正确的轮廓曲线(逆时针之类的))\r\n let outerWall = new ExtudeWall(Contour.CreateContour(br.ContourCurve.Clone()).Curve, DepthType.All, br.Thickness, br.Thickness, DirectionType.Outer);\r\n let grooves = this.ParseGrooves();\r\n if (grooves.length < MaxDrawGrooveCount)//只能绘制1000个以下的造型\r\n for (let i = 0; i < grooves.length; i++)\r\n {\r\n let s1 = grooves[i];\r\n outerWall.ClipTo(s1, false);\r\n s1.contourWall.ClipReverse(outerWall);\r\n for (let j = i + 1; j < grooves.length; j++)\r\n {\r\n let s2 = grooves[j];\r\n s1.ClipTo(s2, true);\r\n }\r\n\r\n s1.Draw(this.verticesArray, this.uvArray, this.edgeAndLidBuilder, rotateUv, br.DisplayAccuracy);\r\n }\r\n outerWall.Draw(this.verticesArray, this.uvArray, this.edgeAndLidBuilder);\r\n\r\n //这里构建盖子\r\n this.edgeAndLidBuilder.BuildLid(this.verticesArray, this.uvArray, rotateUv);\r\n\r\n intCache.clear();\r\n }\r\n\r\n get MeshGeometry(): BufferGeometry\r\n {\r\n let geo = new BufferGeometry();\r\n geo.setAttribute('position', new Float32BufferAttribute(this.verticesArray, 3));\r\n geo.setAttribute('uv', new Float32BufferAttribute(this.uvArray, 2));\r\n geo.computeVertexNormals();\r\n return geo;\r\n }\r\n\r\n get EdgeGeometry(): BufferGeometry\r\n {\r\n let geo = new BufferGeometry();\r\n geo.setAttribute('position', new Float32BufferAttribute(this.edgeAndLidBuilder.lineVerticesArray, 3));\r\n return geo;\r\n }\r\n\r\n protected ParseGrooves()\r\n {\r\n let br = this.br;\r\n const brOcsInv = br.OCSInv;\r\n let grooves: Groove[] = [];\r\n\r\n //备份原始的槽,下面的代码为了合并槽,会将板的槽先清空,后续我们在还原它 (未来我们可能不强制合并板的槽 而是在这里合并? 保证板的槽的纯粹?例如矩形)\r\n let bakGrooves: ExtrudeSolid[];\r\n {\r\n //合并深度相同 但是半径不相同的槽\r\n\r\n let thicknessKnifsMap = new Map<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 { Geom3 } from '@jscad/modeling/src/geometries/geom3';\r\nimport Flatbush from 'flatbush';\r\nimport { Box3, BoxGeometry, BufferGeometry, ExtrudeGeometry, ExtrudeGeometryOptions, Float32BufferAttribute, FrontSide, Frustum, Geometry, Group, InstancedInterleavedBuffer, InterleavedBufferAttribute, LineSegments, Material, Matrix3, Matrix4, Mesh, Object3D, Line as TLine, UVGenerator, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { BoardCuttingForSweep } from '../../Add-on/BoardCutting/BoardCuttingForSweep';\r\nimport { SplitPolyline } from '../../Add-on/BoardCutting/SplitPolyline';\r\nimport { arrayClone, arrayLast, arrayRemoveIf, arrayRemoveOnce, arraySortByNumber, arraySum } from \"../../Common/ArrayExt\";\r\nimport { CSGIntersect } from '../../Common/CSGIntersect';\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { PolylineSpliteRect, equalCurve } from \"../../Common/CurveUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { InteractionLog, Log, LogType } from \"../../Common/Log\";\r\nimport { MakeMirrorMtx, TransformVector, Vector2ApplyMatrix4, reviseMirrorMatrix, tempMatrix1 } from \"../../Common/Matrix4Utils\";\r\nimport { Status, UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { BSPGroupParse } from '../../Geometry/BSPGroupParse';\r\nimport { GetSideCuFaceMtx } from '../../Geometry/Board2DModelCSG/BoardSideModelCSGBuilder';\r\nimport { boardUVGenerator } from \"../../Geometry/BoardUVGenerator\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { FastExtrudeEdgeGeometry, FastExtrudeEdgeGeometryOfShape, FastWireframe } from \"../../Geometry/CreateWireframe\";\r\nimport { ParseBoardSideFace } from '../../Geometry/DrillParse/BoardGetFace';\r\nimport { EdgesGeometry } from \"../../Geometry/EdgeGeometry\";\r\nimport { ExtrudeGeometryBuilder } from \"../../Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2\";\r\nimport { AsVector2, IdentityMtx4, MoveMatrix, XAxis, YAxis, ZAxis, ZeroVec, equaln, equalv2, equalv3, isIntersect, isParallelTo, isPerpendicularityTo } from \"../../Geometry/GeUtils\";\r\nimport { OBB } from \"../../Geometry/OBB/obb\";\r\nimport { ScaleUV, ScaleUV2 } from \"../../Geometry/UVUtils\";\r\nimport { GetBoardContour } from '../../GraphicsSystem/CalcEdgeSealing';\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Geometry2CSG2 } from \"../../csg/core/Geometry2CSG\";\r\nimport { BlockTableRecord } from \"../BlockTableRecord\";\r\nimport { CADFactory, Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Contour } from \"../Contour\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { PhysicalMaterialRecord } from \"../PhysicalMaterialRecord\";\r\nimport { Shape } from \"../Shape\";\r\nimport { Shape2 } from '../Shape2';\r\nimport { ShapeManager } from \"../ShapeManager\";\r\nimport { Spline } from \"../Spline\";\r\nimport { Board } from \"./Board\";\r\nimport { Circle } from \"./Circle\";\r\nimport { Curve } from './Curve';\r\nimport { DragPointType } from \"./DragPointType\";\r\nimport { Ellipse } from \"./Ellipse\";\r\nimport { Entity } from \"./Entity\";\r\nimport { ExtrudeConfig } from \"./ExtrudeConfig\";\r\nimport { GenUVForWorld } from './GenUVForWorld';\r\nimport { Line } from \"./Line\";\r\nimport { Polyline } from \"./Polyline\";\r\nimport { Region } from \"./Region\";\r\n\r\nexport type ExtrudeContourCurve = Polyline | Circle;\r\nexport type ExtrudeContour = Polyline | Circle | ExtrudeSolid | Region;\r\n\r\nexport const MaxDrawGrooveCount = 1000;//最大的绘制槽个数(但是还是会绘制线)\r\n\r\n\r\n@Factory\r\nexport class ExtrudeSolid extends Entity\r\n{\r\n private _DisplayAccuracy = 0;\r\n\r\n /*\r\n y-----------\r\n ^ |\r\n | ↑ |\r\n | | | height\r\n | ↓ |\r\n | |\r\n 0---width->x\r\n */\r\n\r\n protected height: number = 1;//y\r\n protected width: number = 1;//x\r\n\r\n /**\r\n * 拉伸实体的厚度\r\n * 我们允许它是一个负数,但是这个时候这个实体已经是一个无效的拉伸实体了.\r\n * 允许负数,用来校验凹槽的合理性.\r\n */\r\n protected thickness: number = 1;\r\n\r\n protected isRect = true;\r\n\r\n protected bevelEnabled = false;\r\n\r\n IsKnife = false;\r\n\r\n RelevanceMeats: ObjectId[];\r\n RelevanceKnifs: ObjectId[];\r\n __OriginalId__: ObjectId;\r\n __OriginalEnt__: this;\r\n /**\r\n * 拉伸形状\r\n * 出于优化考虑,可能未初始化,请注意调用this.ContourCurve\r\n * 形状位于WCS 0点位置,不随OCS变化而变化\r\n * 注意:这个时针不一定为逆时针\r\n */\r\n protected contourCurve: ExtrudeContourCurve;\r\n\r\n /**\r\n * 正面和反面的凹槽造型\r\n */\r\n protected grooves: ExtrudeSolid[] = [];\r\n\r\n protected knifeRadius: number = 3;\r\n protected groovesAddLength: number = 0;\r\n protected groovesAddWidth: number = 0;\r\n protected groovesAddDepth: number = 0;\r\n\r\n __TempIndexVersion__: { Index: number, Version: number; };\r\n constructor()\r\n {\r\n super();\r\n this.RelevanceKnifs = this.CreateProxyArray((v) =>\r\n {\r\n //可以更新自己,但是不建议,建议手动更新\r\n });\r\n this.RelevanceMeats = this.CreateProxyArray((v) =>\r\n {\r\n //可以更新肉,简单是不建议,建议手动更新\r\n });\r\n }\r\n\r\n set Material(materialId: ObjectId<PhysicalMaterialRecord>)\r\n {\r\n let oldMaterial = this.Material ?? this._db?.DefaultMaterial?.objectId;\r\n super.Material = materialId;\r\n\r\n let isf_old = Boolean(oldMaterial?.Object?.IsFull);\r\n let isf_new = Boolean(materialId?.Object?.IsFull);\r\n if (isf_old !== isf_new)\r\n this.Update();\r\n else if (materialId?.Object?.UseWorldUV)\r\n {\r\n if (this._MeshGeometry)\r\n this.GenWorldUV(this._MeshGeometry);\r\n }\r\n }\r\n\r\n get Material() { return super.Material; }\r\n\r\n get DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n get KnifeRadius()\r\n {\r\n return this.knifeRadius;\r\n }\r\n set KnifeRadius(v: number)\r\n {\r\n if (!equaln(v, this.knifeRadius))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.knifeRadius = v;\r\n\r\n //在双击板修改的时候,我们希望它能修改绘制版本,这样它的关联实体也会被刷新\r\n this.__UpdateVersion__++;\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone);\r\n }\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n if (this.width > 0 && this.height > 0 && this.thickness > 0)\r\n return new Box3Ext(new Vector3, new Vector3(this.width, this.height, this.thickness));\r\n else\r\n return new Box3Ext().setFromPoints([new Vector3, new Vector3(this.width, this.height, this.thickness)]);\r\n }\r\n\r\n get OBB(): OBB\r\n {\r\n return new OBB(this.OCS, new Vector3(this.width, this.height, this.thickness).multiplyScalar(0.5));\r\n }\r\n\r\n get GroovesAddLength()\r\n {\r\n return this.groovesAddLength;\r\n }\r\n\r\n set GroovesAddLength(v: number)\r\n {\r\n if (!equaln(v, this.groovesAddLength))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.groovesAddLength = v;\r\n\r\n //更改它的时候,关联切割被更新,拆单的时候才会正确,否则使用缓存将不正确\r\n this.__UpdateVersion__++;\r\n }\r\n }\r\n get GroovesAddWidth()\r\n {\r\n return this.groovesAddWidth;\r\n }\r\n\r\n set GroovesAddWidth(v: number)\r\n {\r\n if (!equaln(v, this.groovesAddWidth))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.groovesAddWidth = v;\r\n\r\n //更改它的时候,关联切割被更新,拆单的时候才会正确,否则使用缓存将不正确\r\n this.__UpdateVersion__++;\r\n }\r\n }\r\n get GroovesAddDepth()\r\n {\r\n return this.groovesAddDepth;\r\n }\r\n\r\n set GroovesAddDepth(v: number)\r\n {\r\n if (!equaln(v, this.groovesAddDepth))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.groovesAddDepth = v;\r\n\r\n //更改它的时候,关联切割被更新,拆单的时候才会正确,否则使用缓存将不正确\r\n this.__UpdateVersion__++;\r\n }\r\n }\r\n\r\n Clone()\r\n {\r\n let en = super.Clone();\r\n return en;\r\n }\r\n\r\n ApplyMatrix(m: Matrix4)\r\n {\r\n //暂时关闭更新,避免内部实体还没有更新位置时,先更新了实体的Geometry,导致后续没有进行更新\r\n let updateBak = this.AutoUpdate;\r\n this.AutoUpdate = false;\r\n super.ApplyMatrix(m);\r\n\r\n let normal = this.Normal.negate();\r\n\r\n for (let g of this.grooves)\r\n {\r\n g._SpaceOCS.copy(this._SpaceOCS);//因为在镜像(Extrude.ApplyMirrorMatrix)的时候 没有设置这个会导致错误(参考该函数的代码,似乎是为了实现柜子镜像) 所以拷贝一下\r\n g.objectId = new ObjectId;\r\n g.ApplyMatrix(m);\r\n\r\n //如果是镜像,如果槽的方向相反了,那么需要修正\r\n let gNormal = g.Normal;\r\n if (equalv3(normal, gNormal, 1e-3))\r\n {\r\n let p = g.Position.add(gNormal.multiplyScalar(g.thickness * 0.5));\r\n g.ApplyMatrix(MakeMirrorMtx(normal, p));\r\n }\r\n\r\n g.objectId = undefined;\r\n }\r\n\r\n //del_exp2_start\r\n //由于修改矩阵会导致矩阵错误\r\n this.csg = undefined;\r\n //del_exp2_end\r\n this.AutoUpdate = updateBak;\r\n\r\n let te = m.elements;\r\n let scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2];\r\n let scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6];\r\n let scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10];\r\n\r\n if (!equaln(scaleXSq, 1, 1e-4) || !equaln(scaleYSq, 1, 1e-4) || !equaln(scaleZSq, 1, 1e-4))\r\n this.Update(UpdateDraw.Geometry);\r\n else if (this.AutoUpdate)\r\n this.DeferUpdate();\r\n return this;\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let cu = this.ContourCurve;\r\n cu.ApplyMatrix(this.OCSNoClone);\r\n cu.ApplyMatrix(m);\r\n cu.ApplyMatrix(this.OCSInv);\r\n this.CheckContourCurve();\r\n return this;\r\n }\r\n\r\n //实现了这个函数后 实现了柜子的镜像\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n const curve = this.ContourCurve;\r\n if (curve instanceof Polyline && !equalv3(curve.Position, ZeroVec))//移除多段线的OCS(目前只判断了基点)\r\n {\r\n let pts = curve.LineData;\r\n if (equalv2(pts[0].pt, arrayLast(pts).pt))\r\n pts.pop();\r\n let ocs = curve.OCSNoClone;\r\n for (let p of pts)\r\n Vector2ApplyMatrix4(ocs, p.pt);\r\n curve.OCS = IdentityMtx4;\r\n }\r\n\r\n let nor = this.Normal.applyMatrix4(this.SpaceOCSInv.setPosition(ZeroVec));//法向量在柜子坐标系中的表示\r\n if (equaln(Math.abs(nor.z), 1))//在柜子中是一个层板\r\n {\r\n reviseMirrorMatrix(this._Matrix, 1);\r\n if (curve instanceof Circle)\r\n curve.ApplyMatrix(new Matrix4().makeRotationX(Math.PI));\r\n else\r\n reviseMirrorMatrix(curve.OCSNoClone, 1);\r\n\r\n this.SetContourCurve(curve);\r\n }\r\n else if (equaln(Math.abs(nor.x), 1))//立板\r\n {\r\n reviseMirrorMatrix(this._Matrix, 2);\r\n this._Matrix.setPosition(this.Position.add(this.Normal.multiplyScalar(-this.Thickness)));\r\n }\r\n else//背板?\r\n {\r\n reviseMirrorMatrix(this._Matrix, 0);\r\n if (curve instanceof Circle)\r\n curve.ApplyMatrix(new Matrix4().makeRotationY(Math.PI));\r\n else\r\n reviseMirrorMatrix(curve.OCSNoClone, 0);\r\n\r\n this.SetContourCurve(curve);\r\n }\r\n\r\n if (this.grooves.length)\r\n this.Update(UpdateDraw.Geometry);\r\n\r\n return this;\r\n }\r\n\r\n get Width()\r\n {\r\n return this.width;\r\n }\r\n get Height()\r\n {\r\n return this.height;\r\n }\r\n\r\n get Thickness()\r\n {\r\n return this.thickness;\r\n }\r\n set Thickness(thickness: number)\r\n {\r\n if (!equaln(thickness, this.thickness, 1e-4))//避免18.0009 无法改成 18\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n if (this.grooves.length > 0)\r\n {\r\n let inv = this.OCSInv;\r\n let v = this.Normal.multiplyScalar(thickness - this.thickness);\r\n let m = new Matrix4().setPosition(v);\r\n\r\n for (let g of this.grooves)\r\n {\r\n let p = g.Position.applyMatrix4(inv);\r\n\r\n if (equaln(g.thickness, this.thickness))\r\n g.Thickness = thickness;\r\n else if (!equaln(p.z, 0))\r\n g.ApplyMatrix(m);\r\n }\r\n }\r\n\r\n this.thickness = thickness;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n }\r\n\r\n //修复#I7CBHO的过程中 直接修改了这个属性\r\n get Grooves()\r\n {\r\n return this.grooves;\r\n }\r\n\r\n //侧面造型\r\n get SideModelingMap(): Map<any, any>\r\n {\r\n return undefined;\r\n }\r\n\r\n /**\r\n * 返回未拷贝的轮廓曲线\r\n */\r\n get ContourCurve()\r\n {\r\n if (!this.contourCurve)\r\n this.GeneralRectContour();\r\n // 默认轮廓都是白的\r\n this.contourCurve.ColorIndex = 7;\r\n return this.contourCurve;\r\n }\r\n\r\n set ContourCurve(cu: ExtrudeContourCurve)\r\n {\r\n this.SetContourCurve(cu);\r\n }\r\n\r\n /**\r\n * 生成矩形轮廓(强制)\r\n */\r\n GeneralRectContour()\r\n {\r\n if (!this.contourCurve || !(this.contourCurve instanceof Polyline))\r\n this.contourCurve = new Polyline();\r\n\r\n this.contourCurve.Rectangle(this.width, this.height);\r\n this.contourCurve.OCS = IdentityMtx4;\r\n this.ContourCurve = this.contourCurve;\r\n }\r\n\r\n /**\r\n * 转换成矩形拉伸实体\r\n */\r\n ConverToRectSolid(width = this.width, height = this.height, thickness = this.thickness)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.height = height;\r\n this.width = width;\r\n this.thickness = thickness;\r\n\r\n this.isRect = true;\r\n\r\n this.GeneralRectContour();\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 更新拉伸实体的轮廓\r\n * @param curve 曲线已经存在WCS坐标系0点\r\n */\r\n SetContourCurve(curve: ExtrudeContourCurve)\r\n {\r\n if (!curve.IsClose) return;\r\n\r\n let area = curve.Area;\r\n if (!area || equaln(area, 0)) return;\r\n\r\n if (curve instanceof Spline || curve instanceof Ellipse)\r\n curve = curve.Convert2Polyline();\r\n\r\n if (curve instanceof Polyline)\r\n {\r\n curve.CloseMark = true;\r\n let pts = curve.LineData;\r\n if (equalv2(pts[0].pt, arrayLast(pts).pt))\r\n pts.pop();\r\n\r\n //如果曲线被旋转了,那么修正它的旋转矩阵,避免纹路错误\r\n let ocs = curve.OCS;\r\n\r\n let x = new Vector3().setFromMatrixColumn(ocs, 0);\r\n let y = new Vector3().setFromMatrixColumn(ocs, 1);\r\n let z = new Vector3().setFromMatrixColumn(ocs, 2);\r\n let z1 = x.cross(y);\r\n\r\n let isMirror = equaln(ocs.elements[10], -1, 1e-4) || !equalv3(z, z1);\r\n let isRotate = !equaln(ocs.elements[0], 1);\r\n\r\n if (isMirror || isRotate)// || ocs.elements[9] || ocs.elements[10]\r\n {\r\n for (let p of pts)\r\n {\r\n Vector2ApplyMatrix4(ocs, p.pt);\r\n if (isMirror)\r\n p.bul *= -1;\r\n }\r\n curve.OCS = IdentityMtx4;\r\n }\r\n }\r\n else\r\n {\r\n curve.OCS = new Matrix4().setPosition(curve.Position);\r\n }\r\n curve.ClearDraw();\r\n\r\n this.WriteAllObjectRecord();\r\n this.contourCurve = curve;\r\n this.CheckContourCurve();\r\n this.Update();\r\n }\r\n\r\n /**\r\n * 在不改变Normal和实体显示的情况下,修改X轴的指向\r\n * @param xAxis\r\n */\r\n SetXAxis(xAxis: Vector3): this\r\n {\r\n let ocsInv = this.OCSInv;\r\n let x = TransformVector(xAxis.clone(), ocsInv).setZ(0).normalize();\r\n if (equalv3(ZeroVec, x, 1e-5)) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let a = Math.atan2(x.y, x.x);\r\n\r\n x.transformDirection(this._Matrix);\r\n let z = this.Normal;\r\n let y = z.cross(x);\r\n\r\n this._Matrix.elements[0] = x.x;\r\n this._Matrix.elements[1] = x.y;\r\n this._Matrix.elements[2] = x.z;\r\n\r\n this._Matrix.elements[4] = y.x;\r\n this._Matrix.elements[5] = y.y;\r\n this._Matrix.elements[6] = y.z;\r\n\r\n this.ContourCurve.ApplyMatrix(tempMatrix1.makeRotationZ(-a));//复用了这个矩阵\r\n this.CheckContourCurve();\r\n if (this.contourCurve instanceof Polyline)\r\n this.contourCurve.UpdateOCSTo(IdentityMtx4);\r\n\r\n this.Update();\r\n return this;\r\n }\r\n\r\n /**\r\n * 检验轮廓曲线,通常当轮廓曲线被修改时,都需要检验轮廓曲线,并更新实体大小和轮廓位置.\r\n * >计算轮廓大小\r\n * >判断是否矩形\r\n * >修正轮廓基点\r\n * >保证轮廓是逆时针(不再设置)\r\n */\r\n CheckContourCurve()\r\n {\r\n let box = this.ContourCurve.BoundingBox;\r\n let size = box.getSize(new Vector3());\r\n this.width = size.x;\r\n this.height = size.y;\r\n if (equaln(size.x, 0) || equaln(size.y, 0))\r\n Log(`注意!!该板件尺寸为0!`, LogType.Warning);\r\n this.isRect = equaln(this.width * this.height, this.ContourCurve.Area, 0.1);\r\n\r\n // if (area2 < 0)\r\n // this.contourCurve.Reverse();//矩形板的封边与排钻不需要考虑 异形板的排钻封边可能会错误(无所谓了)\r\n\r\n //修正轮廓基点\r\n if (!equalv3(box.min, ZeroVec))\r\n {\r\n this.contourCurve.Position = this.contourCurve.Position.sub(box.min);\r\n\r\n TransformVector(box.min, this.OCSNoClone);\r\n this._Matrix.setPosition(this.Position.add(box.min));\r\n }\r\n }\r\n\r\n get IsRect()\r\n {\r\n return this.isRect;\r\n }\r\n\r\n /**\r\n * 这个拉伸实体的面域形状\r\n */\r\n get Shape() { return this.GetShape(false); }\r\n\r\n private GetShape(filterSmallGroove = false)\r\n {\r\n let contour = Contour.CreateContour(this.ContourCurve.Clone(), false);\r\n\r\n let holes: Contour[] = [];\r\n\r\n for (let g of this.grooves)\r\n {\r\n if (equaln(g.thickness, this.thickness, 1e-3) && (!filterSmallGroove || g.ContourCurve.Area > 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\r\n if (unionShapes.length === 1)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n //防止重复添加\r\n this.grooves = this.grooves.filter((g) => !equaln(g.thickness, target.thickness, 1e-3));//过滤掉一样的 因为已经在shape里\r\n // [ + ] 产生网洞.\r\n for (let hole of unionShapes[0].Holes)\r\n {\r\n let g = new ExtrudeSolid();\r\n g.thickness = this.thickness;\r\n g.ContourCurve = hole.Curve;\r\n g.ApplyMatrix(this.OCS);\r\n\r\n this.AppendGroove(g);\r\n }\r\n\r\n this.ContourCurve = unionShapes[0].Outline.Curve;\r\n\r\n for (let tg of target.grooves)\r\n if (!equaln(tg.thickness, target.thickness, 1e-3))//过滤掉一样的 因为已经在shape里\r\n this.grooves.push(tg.Clone());\r\n\r\n MergeRelevance();\r\n this.GrooveCheckMerge();\r\n this.Update();\r\n\r\n return Status.True;\r\n }\r\n }\r\n else\r\n {\r\n if (!isIntersect(0, this.thickness, targetZMin, targetZMax, 1e-5))\r\n return Status.False;\r\n\r\n let matrixToLocal = this.OCSInv.multiply(target.OCS);\r\n\r\n let thisCurve = this.ContourCurve;\r\n let targetCurve = target.ContourCurve.Clone().ApplyMatrix(matrixToLocal);\r\n targetCurve.Position = targetCurve.Position.setZ(0);\r\n if (equalCurve(thisCurve, targetCurve))\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n if (targetZMin < 0)\r\n this.Position = this.Position.add(n.multiplyScalar(targetZMin));\r\n\r\n this.Thickness = Math.max(this.Thickness, targetZMax) - Math.min(0, targetZMin);\r\n\r\n this.grooves.push(...target.grooves.map(g => g.Clone()));\r\n\r\n MergeRelevance();\r\n\r\n this.GrooveCheckMerge();\r\n this.Update();\r\n\r\n return Status.True;\r\n }\r\n }\r\n return Status.False;\r\n }\r\n\r\n get Volume()\r\n {\r\n let sum = this.ContourCurve.Area * this.thickness;\r\n for (let g of this.grooves)\r\n sum -= g.Volume;\r\n return sum;\r\n }\r\n\r\n /**\r\n * 被切割\r\n * @param extrudes 切割刀\r\n * @param [output=undefined] 如果实体被分裂,那么输出分裂的其他实体(如果为空,则尝试入当前实体的容器中)\r\n * @param [checkIntersect=true] 检查相交,性能优化\r\n * @returns 切割是否成功\r\n */\r\n Subtract(extrudes: ExtrudeSolid[], output: ExtrudeSolid[] = undefined, checkIntersect = true): boolean\r\n {\r\n //del_exp2_start\r\n if (checkIntersect)\r\n {\r\n let box = this.BoundingBox;\r\n extrudes = extrudes.filter(e => box.intersectsBox(e.BoundingBox));\r\n }\r\n\r\n //清除原先的关联关系\r\n if (this.Id)\r\n {\r\n let ids = new Set<number>();\r\n for (let e of extrudes)\r\n {\r\n if (!e.Id) continue;\r\n arrayRemoveOnce(e.RelevanceMeats, this.Id);\r\n ids.add(e.Id.Index);\r\n }\r\n arrayRemoveIf(this.RelevanceKnifs, id => ids.has(id.Index));\r\n }\r\n\r\n let { grooves, relevanceSideModelMap } = this.ParseGrooves(extrudes);\r\n\r\n if (!grooves.length && !relevanceSideModelMap.size) return false;\r\n\r\n this.AppendSideModel(relevanceSideModelMap);\r\n\r\n let area1 = this.ContourCurve.Area;\r\n let sum1 = this.Volume;\r\n this.AppendGrooves(grooves, output);\r\n let sum2 = this.Volume;\r\n let area2 = this.ContourCurve.Area;\r\n\r\n if (!equaln(sum1, sum2) || !equaln(area1, area2) || relevanceSideModelMap.size)\r\n {\r\n if (!this.ReadFileIng && this instanceof Board)\r\n {\r\n if (this.Id)\r\n InteractionLog([{ msg: `${this.Name}(${this.Id.Index})`, entity: [this] }, { msg: \"被切割成功\" }], LogType.Info);\r\n else if (this.__OriginalId__)\r\n InteractionLog([{ msg: `${this.Name}(${this.__OriginalId__.Index})`, entity: [this] }, { msg: \"关联切割成功更新槽!\" }], LogType.Info);\r\n }\r\n return true;\r\n }\r\n //del_exp2_end\r\n return false;\r\n }\r\n\r\n //将相交部分转换为正反面槽或侧槽\r\n ParseGrooves(knifeExtrudes: ExtrudeSolid[])\r\n {\r\n let faces: ParseBoardSideFace;\r\n let con: ExtrudeContourCurve;\r\n let inverseZ: boolean;\r\n let cus: Curve[];\r\n let mirrorMtxZ: Matrix4;\r\n\r\n let grooves: ExtrudeSolid[] = [];\r\n let relevanceSideModelMap: Map<number, ExtrudeSolid[]> = new Map();\r\n\r\n //切割的侧槽\r\n const GetSideModelList = (extrude: ExtrudeSolid) =>\r\n {\r\n let knifeCon = extrude.ContourCurve.Clone();\r\n let knifeConIsCircle = knifeCon instanceof Circle;\r\n\r\n if (this instanceof Board)\r\n {\r\n let intersectFaceIndex = 0;\r\n let intersectFaceIndexs: number[] = [];\r\n\r\n if (!faces)\r\n {\r\n faces = new ParseBoardSideFace(this);\r\n con = GetBoardContour(this);\r\n inverseZ = con.Area2 < 0;\r\n cus = con.Explode() as Curve[];\r\n mirrorMtxZ = MakeMirrorMtx(ZAxis);\r\n }\r\n\r\n //相交SCG\r\n //使用克隆 防止正反面槽mesh丢失\r\n let cloneEnt = this.Clone();\r\n let interCSG = CSGIntersect(cloneEnt.CSG, extrude.CSG, this.OCSInv.multiply(extrude.OCS));\r\n\r\n //转换至相交面的尺寸\r\n let topology = new BSPGroupParse(interCSG as any);\r\n let ptsList = topology.Parse();\r\n\r\n for (let pts of ptsList)\r\n {\r\n // ------- 求相交面索引 begin ----------\r\n intersectFaceIndexs = []; let checkBox = new Box3Ext().setFromPoints(pts);\r\n\r\n for (let i = 0; i < faces.Faces.length; i++)\r\n {\r\n let face = faces.Faces[i];\r\n let region = face.Region.Clone();\r\n region.ApplyMatrix(this.OCSInv.multiply(face.OCS));\r\n if (checkBox.intersectsBox(region.BoundingBox))\r\n intersectFaceIndexs.push(i);\r\n }\r\n\r\n if (!intersectFaceIndexs.length)\r\n continue;\r\n else if (intersectFaceIndexs.length === 1)\r\n intersectFaceIndex = intersectFaceIndexs[0];\r\n else\r\n {\r\n //截面小的为正面\r\n intersectFaceIndexs.sort((i, j) =>\r\n {\r\n let faceOCSInv1 = faces.Faces[i].OCSInv;\r\n let faceOCSInv2 = faces.Faces[j].OCSInv;\r\n let box1 = checkBox.clone().applyMatrix4(this.OCS).applyMatrix4(faceOCSInv1).getSize(new Vector3);\r\n let box2 = checkBox.clone().applyMatrix4(this.OCS).applyMatrix4(faceOCSInv2).getSize(new Vector3);\r\n\r\n return knifeConIsCircle ? box1.x - box2.x : box2.x - box1.x;\r\n });\r\n intersectFaceIndex = intersectFaceIndexs[0];\r\n }\r\n\r\n intersectFaceIndexs = [];\r\n // ------- 求相交面索引 end ----------\r\n\r\n const faceMtx = GetSideCuFaceMtx(cus[intersectFaceIndex], inverseZ);\r\n const faceMtxInv = new Matrix4().getInverse(faceMtx);\r\n const faceMtxOnBoard = this.OCS.multiply(faceMtx).multiply(mirrorMtxZ);\r\n const mtx = new Matrix4().getInverse(faceMtx.clone().multiply(mirrorMtxZ));\r\n\r\n //测试绘制\r\n // TestDrawGeom3s([interCSG], 1);\r\n let sideModelCon: ExtrudeContourCurve;\r\n\r\n let yv = extrude.Normal;\r\n let zv = new Vector3().setFromMatrixColumn(faceMtxOnBoard, 2);\r\n if (isParallelTo(yv, zv))\r\n {\r\n sideModelCon = knifeCon.Clone();\r\n\r\n yv = new Vector3().setFromMatrixColumn(extrude.OCS, 0);\r\n }\r\n\r\n let xv = yv.clone().cross(zv);\r\n yv.copy(zv).cross(xv);\r\n xv.normalize();\r\n yv.normalize();\r\n zv.normalize();\r\n\r\n const grooveMtx = new Matrix4().makeBasis(xv, yv, zv).copyPosition(faceMtxOnBoard);\r\n const grooveMtxInv = new Matrix4().getInverse(grooveMtx).multiply(faceMtxOnBoard).multiply(mtx);\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(grooveMtxInv);\r\n\r\n let box = new Box3Ext().setFromPoints(pts);\r\n if (!box.isSolid(0.1))\r\n continue;\r\n let size = box.getSize(new Vector3());\r\n\r\n let solid = new ExtrudeSolid();\r\n solid.groovesAddDepth = extrude.groovesAddDepth;\r\n solid.groovesAddLength = extrude.groovesAddLength;\r\n solid.groovesAddWidth = extrude.groovesAddWidth;\r\n solid.knifeRadius = extrude.knifeRadius;\r\n solid.ConverToRectSolid(size.x, size.y, size.z);\r\n\r\n if (sideModelCon)\r\n {\r\n if (sideModelCon instanceof Circle)\r\n {\r\n if (equaln(size.x, size.y))\r\n solid.ContourCurve = sideModelCon;\r\n else\r\n {\r\n //保留圆形切割\r\n const r = (sideModelCon as Circle).Radius * 2;\r\n const cuLength = cus[intersectFaceIndex].Length;\r\n let splitLeft = false;\r\n\r\n let intersectX = 0;\r\n if (equaln(box.min.x, 0))\r\n intersectX = r - box.max.x + sideModelCon.BoundingBox.min.x;\r\n else\r\n {\r\n splitLeft = true;\r\n intersectX = cuLength - box.min.x + sideModelCon.BoundingBox.min.x;\r\n }\r\n\r\n let starKnifePls = new Polyline([{ pt: AsVector2({ x: intersectX, y: 1 }), bul: 0 }, { pt: AsVector2({ x: intersectX, y: 0 }), bul: 0 }]);\r\n let faceRegions = SplitPolyline(sideModelCon as unknown as Polyline, [starKnifePls]);\r\n faceRegions = faceRegions.filter((faceRegion) =>\r\n {\r\n let x = faceRegion.BoundingBox.getCenter(new Vector3).x;\r\n return splitLeft ? x < intersectX : x > intersectX;\r\n });\r\n\r\n if (faceRegions.length)\r\n solid.ContourCurve = faceRegions[0];\r\n }\r\n\r\n solid.ApplyMatrix(grooveMtx.clone().setPosition(box.min.applyMatrix4(grooveMtx)).multiply(mirrorMtxZ));\r\n solid.ApplyMatrix(this.OCSInv);\r\n solid.ApplyMatrix(faceMtxInv);\r\n }\r\n else\r\n {\r\n sideModelCon.ApplyMatrix(new Matrix4().setPosition(sideModelCon.BoundingBox.min.negate()));\r\n sideModelCon.ApplyMatrix(extrude.OCS);\r\n sideModelCon.ApplyMatrix(this.OCSInv);\r\n sideModelCon.ApplyMatrix(new Matrix4().getInverse(faceMtx));\r\n solid.ContourCurve = sideModelCon;\r\n //确保侧面造型槽solid在XY平面上\r\n solid.Z0();\r\n }\r\n }\r\n else\r\n {\r\n solid.ApplyMatrix(grooveMtx.clone().setPosition(box.min.applyMatrix4(grooveMtx)).multiply(mirrorMtxZ));\r\n solid.ApplyMatrix(this.OCSInv);\r\n solid.ApplyMatrix(faceMtxInv);\r\n }\r\n\r\n let sideModelList = relevanceSideModelMap.get(intersectFaceIndex);\r\n if (sideModelList)\r\n sideModelList.push(solid);\r\n else\r\n sideModelList = [solid];\r\n\r\n relevanceSideModelMap.set(intersectFaceIndex, sideModelList);\r\n }\r\n }\r\n };\r\n\r\n for (let extrude of knifeExtrudes)\r\n {\r\n let gs = this.ConverToLocalGroove(extrude);\r\n\r\n if (gs.length)\r\n {\r\n let sideGrooves: ExtrudeSolid[] = [];\r\n for (let g of gs)\r\n {\r\n //侧槽\r\n if (this.GrooveCheckPosition(g) === Status.Side)\r\n sideGrooves.push(g);\r\n else\r\n grooves.push(g);\r\n }\r\n\r\n if (sideGrooves.length)\r\n {\r\n if (sideGrooves.length === gs.length)\r\n GetSideModelList(extrude);\r\n else\r\n {\r\n for (let g of sideGrooves)\r\n GetSideModelList(g);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return { grooves, relevanceSideModelMap };\r\n }\r\n\r\n RelevanceSubtract(knif: ExtrudeSolid, check = false)\r\n {\r\n if (!this.Id || !knif.Id) return;\r\n\r\n //判断是否已经存在\r\n if (check)\r\n {\r\n let index = this.RelevanceKnifs.findIndex(id => id.Index === knif.Id.Index);\r\n if (index !== -1) return;\r\n }\r\n\r\n this.RelevanceKnifs.push(knif.Id);\r\n knif.RelevanceMeats.push(this.Id);\r\n }\r\n\r\n /**\r\n * 当实体被分裂后,加入新图纸时,需要修复关联拉槽\r\n */\r\n RepairRelevance()\r\n {\r\n if (!this.Id)\r\n {\r\n console.error(\"不能修复未加入到图纸的板件!\");\r\n return;\r\n }\r\n\r\n for (let id of this.RelevanceKnifs)\r\n {\r\n if (id && !id.IsErase)\r\n {\r\n let br = id.Object as ExtrudeSolid;\r\n br.RelevanceMeats.push(this.Id);\r\n }\r\n }\r\n for (let id of this.RelevanceMeats)\r\n {\r\n if (id && !id.IsErase)\r\n {\r\n let br = id.Object as ExtrudeSolid;\r\n br.RelevanceKnifs.push(this.Id);\r\n }\r\n }\r\n }\r\n\r\n AppendGroove(groove: ExtrudeSolid)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.grooves.push(groove);\r\n }\r\n\r\n /** 添加槽进板件,并且自动分裂.\r\n * 通常槽已经校验过准确性,所以不在校验\r\n */\r\n AppendGrooves(grooves: ExtrudeSolid[], output: ExtrudeSolid[] = undefined)\r\n {\r\n if (grooves.length === 0) return;\r\n this.WriteAllObjectRecord();\r\n this.grooves.push(...grooves);\r\n this.GrooveCheckAllAutoSplit(output);\r\n }\r\n\r\n /**\r\n * 添加侧面槽\r\n * 通常槽已经校验过准确性,所以不在校验\r\n */\r\n AppendRelevanceSideModel(relevanceSideModelMap: Map<number, ExtrudeSolid[]>)\r\n {\r\n if (this instanceof Board)\r\n {\r\n this.ClearSideModelingCache();\r\n this.RelevanceSideModelMap = relevanceSideModelMap;\r\n }\r\n }\r\n\r\n AppendSideModel(relevanceSideModelMap: Map<number, ExtrudeSolid[]>)\r\n {\r\n if (relevanceSideModelMap.size && this instanceof Board)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n const sideModelMap: Map<number, ExtrudeSolid[]> = this.SideModelingMap;\r\n\r\n for (let [num, soilds] of relevanceSideModelMap)\r\n {\r\n let ss: ExtrudeSolid[] = this.SideModelingMap.get(num) ?? [];\r\n\r\n for (let soild of soilds)\r\n ss.push(soild);\r\n\r\n sideModelMap.set(num, ss);\r\n }\r\n this.SideModelingMap = sideModelMap;\r\n }\r\n }\r\n\r\n override GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3,\r\n frustum?: Frustum,\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripOrStretchPoints(DragPointType.End);\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let contour = this.ContourCurve.Clone();\r\n contour.ApplyMatrix(this.OCSNoClone);\r\n let pts = contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n\r\n contour.Position = contour.Position.add(this.Normal.multiplyScalar(this.thickness));\r\n pts.push(\r\n ...contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n let ps = this.contourCurve.GetStretchPoints();\r\n for (let p of ps)\r\n {\r\n let l = new Line(p, p.clone().setZ(this.thickness));\r\n l.ApplyMatrix(this.OCSNoClone);\r\n pts.push(\r\n ...l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n }\r\n\r\n if (this.grooves.length < 100)\r\n for (let g of this.grooves)\r\n {\r\n if (!frustum || frustum.intersectsBox(g.BoundingBox))\r\n pts.push(...g.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum));\r\n }\r\n\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n //#region Stretch\r\n\r\n protected GetStrectchPointCountList(dragType: DragPointType): number[]\r\n {\r\n let counts: number[] = [this.ContourCurve.GetDragPointCount(dragType) * 2];\r\n for (let g of this.grooves)\r\n {\r\n let c = g.ContourCurve.GetDragPointCount(dragType) * 2;\r\n for (let g1 of g.grooves)\r\n c += g1.contourCurve.GetDragPointCount(dragType) * 2;\r\n\r\n counts.push(c);\r\n }\r\n return counts;\r\n }\r\n GetGripOrStretchPoints(dragType: DragPointType)\r\n {\r\n let pts: Vector3[];\r\n if (dragType === DragPointType.Grip)\r\n pts = this.ContourCurve.GetGripPoints();\r\n else if (dragType === DragPointType.Stretch)\r\n pts = this.ContourCurve.GetStretchPoints();\r\n else if (dragType === DragPointType.End)\r\n {\r\n if (this.contourCurve instanceof Circle)\r\n pts = this.ContourCurve.GetGripPoints();\r\n else\r\n pts = this.ContourCurve.GetStretchPoints();\r\n }\r\n else\r\n pts = [];\r\n\r\n let v = new Vector3(0, 0, this.thickness);\r\n pts.push(...pts.map(p => p.clone().add(v)));\r\n pts.forEach(p => { p.applyMatrix4(this.OCSNoClone); });\r\n\r\n for (let g of this.grooves)\r\n {\r\n let gpts = g.GetGripOrStretchPoints(dragType);\r\n pts.push(...gpts);\r\n }\r\n return pts;\r\n }\r\n MoveGripOrStretchPoints(indexList: number[], vec: Vector3, dragType: DragPointType)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let counts = this.GetStrectchPointCountList(dragType);\r\n const isGrip = dragType === DragPointType.Grip;\r\n\r\n if (!isGrip && indexList.length === arraySum(counts))\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n\r\n arraySortByNumber(indexList);\r\n\r\n let updateBak = this.AutoUpdate;\r\n this.AutoUpdate = false;\r\n\r\n if (!this.grooves.length && !this.HasSideModel)\r\n {\r\n this.MoveGripOrStretchPointsOnly(indexList, vec, dragType);\r\n }\r\n else\r\n {\r\n let i = 0;\r\n let icount = indexList.length;\r\n let offset = 0;\r\n\r\n let grooveIndex = -1;\r\n let sideModelIndex = -1;\r\n\r\n let cus: Curve[];\r\n let baseIndexList: Set<number> = new Set();\r\n let sideModelSealCurveMtxCache: Map<number, Matrix4> = new Map();\r\n\r\n //获取侧面的OCS\r\n const GetSideModelSealCurveMtx = (num: number): Matrix4 =>\r\n {\r\n if (!cus) cus = GetBoardContour(this as unknown as Board)?.Explode() as Curve[];\r\n let mtx = sideModelSealCurveMtxCache.get(num);\r\n\r\n if (!mtx && cus?.length)\r\n {\r\n let cu = cus[num];\r\n if (!cu) return new Matrix4;\r\n\r\n let x = cu.GetFirstDeriv(0).normalize().applyMatrix4(this.OCS.setPosition(0, 0, 0));\r\n let y = this.Normal;\r\n let z = x.clone().cross(y);\r\n mtx = new Matrix4().getInverse(new Matrix4().makeBasis(x, y, z));\r\n\r\n sideModelSealCurveMtxCache.set(num, mtx);\r\n }\r\n\r\n return mtx ?? new Matrix4;\r\n };\r\n\r\n for (let count of counts)\r\n {\r\n offset += count;\r\n let ilist = [];\r\n for (; i < icount; i++)\r\n {\r\n if (indexList[i] < offset)\r\n ilist.push(indexList[i] - offset + count);\r\n else\r\n break;\r\n }\r\n\r\n if (ilist.length > 0)\r\n {\r\n if (grooveIndex === -1)\r\n {\r\n let orgCus: Curve[];\r\n\r\n if (this.HasSideModel)\r\n orgCus = GetBoardContour(this as unknown as Board).Explode() as Curve[];\r\n\r\n this.MoveGripOrStretchPointsOnly(ilist, vec, dragType);\r\n\r\n if (this.HasSideModel)\r\n {\r\n //修正点的索引 判断侧面造型的起点是否被移动\r\n let stretchCount = this.ContourCurve.GetDragPointCount(dragType);\r\n for (let num of ilist)\r\n {\r\n if (num < stretchCount)\r\n baseIndexList.add(num);\r\n else\r\n baseIndexList.add(num - stretchCount);\r\n }\r\n let isChangeThiness = this.IsStretchThickness(Array.from(baseIndexList));\r\n //起点被拉伸时反向移动 达到相对静止状态\r\n const sideModelingMap: Map<number, ExtrudeSolid[]> = this.SideModelingMap;\r\n\r\n for (let [num, soilds] of sideModelingMap)\r\n {\r\n let firstIndex = num;\r\n let secondIndex = (num + 1) === stretchCount ? 0 : num + 1;\r\n\r\n if (isGrip)\r\n {\r\n firstIndex = num * 2;\r\n //拉取中点时\r\n secondIndex = (firstIndex - 1) < 0 ? (stretchCount - 1) : (firstIndex - 1);\r\n }\r\n\r\n //Grip的时候点选中点时两边相连的 也反向移动 firstIndex - 1\r\n if (\r\n !isGrip && (baseIndexList.has(firstIndex) && !baseIndexList.has(secondIndex)) ||\r\n isGrip && (baseIndexList.has(firstIndex) || baseIndexList.has(secondIndex)) ||\r\n isChangeThiness && ilist[0] < stretchCount\r\n )\r\n {\r\n for (let s of soilds)\r\n {\r\n let mtx = GetSideModelSealCurveMtx(num);\r\n let v = vec.clone().applyMatrix4(mtx).setZ(0);\r\n if (isChangeThiness)\r\n {\r\n v.setX(0);\r\n }\r\n else\r\n {\r\n if (cus?.length && cus[num])\r\n v = new Vector3(orgCus[num].Length - cus[num].Length);\r\n else\r\n v.setY(0);\r\n }\r\n\r\n s.ApplyMatrix(new Matrix4().setPosition(v.clone().multiplyScalar(-1)));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n else if (grooveIndex < this.grooves.length)\r\n this.grooves[grooveIndex].MoveGripOrStretchPoints(ilist, vec, dragType);\r\n else\r\n {\r\n //侧面造型拉伸\r\n const sideModelingMap: Map<number, ExtrudeSolid[]> = this.SideModelingMap;\r\n\r\n let soildCount = 0;\r\n const isMainChangeThiness = this.IsStretchThickness(Array.from(baseIndexList));\r\n\r\n for (let [num, soilds] of sideModelingMap)\r\n {\r\n soildCount += soilds.length;\r\n\r\n if (sideModelIndex < soildCount)\r\n {\r\n let mtx = GetSideModelSealCurveMtx(num);\r\n let v = vec.clone().applyMatrix4(mtx);\r\n\r\n if (isMainChangeThiness) v.setX(0);\r\n\r\n let soild = soilds[soilds.length - (soildCount - sideModelIndex)];\r\n const stretchPtLength = soild.ContourCurve.GetStretchPoints().length;\r\n const firstIndex = num;\r\n const secondIndex = (num + 1) === stretchPtLength ? 0 : num + 1;\r\n\r\n const mainSoildIList: number[] = [];\r\n const grooveSoildIList: number[] = [];\r\n\r\n for (let k of ilist)\r\n {\r\n if (k < stretchPtLength * 2)\r\n mainSoildIList.push(k);\r\n else\r\n grooveSoildIList.push(k);\r\n }\r\n\r\n //改变侧面造型厚度\r\n if (soild.IsStretchThickness(mainSoildIList))\r\n {\r\n if (mainSoildIList.every(i => i >= stretchPtLength))\r\n {\r\n //造型 底边\r\n v.setZ(-v.z);\r\n }\r\n else if ((baseIndexList.has(firstIndex) && baseIndexList.has(secondIndex)))\r\n {\r\n //造型见光面 和侧面一起移动\r\n ilist = [];\r\n for (let k = 0; k < stretchPtLength; k++)\r\n ilist.push(k + stretchPtLength);\r\n\r\n //有选中子槽端点 默认一起改变\r\n if (grooveSoildIList.length)\r\n {\r\n const grooveStretchPtLength = soild.grooves[0].ContourCurve.GetStretchPoints().length;\r\n\r\n for (let k = 0; k < grooveStretchPtLength; k++)\r\n ilist.push(k + grooveStretchPtLength + stretchPtLength * 2);\r\n }\r\n }\r\n else\r\n break;\r\n }\r\n else if (!isMainChangeThiness && baseIndexList.has(firstIndex) && baseIndexList.has(secondIndex))\r\n break;\r\n else\r\n v.setZ(0);\r\n\r\n soild.MoveGripOrStretchPoints(ilist, v, dragType);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n grooveIndex++;\r\n\r\n if (grooveIndex >= this.grooves.length)\r\n sideModelIndex++;\r\n }\r\n }\r\n\r\n if (this.objectId || (this.IsEmbedEntity && this.ParentEntity.objectId))\r\n {\r\n this.CheckContourCurve();\r\n let splitEntitys: this[] = [];\r\n this.GrooveCheckAll(splitEntitys);\r\n\r\n if (this.HasSideModel)\r\n {\r\n let board = (this as unknown as Board);\r\n board.SplitBoardSideModelUtil.Init(board);\r\n board.SplitBoardSideModelUtil.SpiltSideModelOfBrContour(board);\r\n board.SplitBoardSideModelUtil.SpiltSideModelOfBrThickness(board, board.Thickness);\r\n }\r\n\r\n if (splitEntitys.length > 0 && this.Owner)\r\n {\r\n let ms = this.Owner.Object as BlockTableRecord;\r\n for (let e of splitEntitys)\r\n ms.Append(e);\r\n }\r\n }\r\n this.AutoUpdate = updateBak;\r\n this.Update();\r\n }\r\n\r\n GetGripPoints(): Array<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 //del_exp2_start\r\n /**\r\n * 当调用Draw时,可以生成bsp信息\r\n */\r\n\r\n private csg: Geom3;\r\n get CSG(): Geom3\r\n {\r\n if (this.csg) return this.csg;\r\n\r\n this.csg = Geometry2CSG2(this.MeshGeometry);\r\n return this.csg;\r\n }\r\n\r\n /**\r\n * (步骤1.2.)\r\n * 将目标拉伸实体转换成在板件内部可用的凹槽实体\r\n * @param target 该对象可能被修改(内部不拷贝该实体)\r\n * @param useClone 转换后的实体是目标实体拷贝后修改的\r\n */\r\n ConverToLocalGroove(target: ExtrudeSolid): ExtrudeSolid[]\r\n {\r\n // 针对圆弧板\r\n if (target instanceof Board && this instanceof Board && (target.IsArcBoard || this.IsArcBoard))\r\n {\r\n const boardCuttingForSweep = new BoardCuttingForSweep(this, target);\r\n return boardCuttingForSweep.ConverToLocalGroove();\r\n }\r\n\r\n if (!this.OBB.intersectsOBB(target.OBB)) return [];\r\n\r\n let n1 = this.Normal;\r\n let n2 = target.Normal;\r\n\r\n //0不平行 1同向,2反向 () 这里保证判断平行和判断方向相反的判断方式是一样的 #I3BUSY\r\n const __eqfuzz__ = 1e-3;\r\n let parType = equalv3(n1, n2, __eqfuzz__) ? 1 : equalv3(n1, n2.clone().negate(), __eqfuzz__) ? 2 : 0;\r\n\r\n if (parType > 0)\r\n {\r\n target = target.Clone().ClearDraw();\r\n if (parType === 2)\r\n {\r\n let p = target.Position;\r\n p.add(n2.clone().multiplyScalar(target.thickness * 0.5));\r\n target.ApplyMatrix(MakeMirrorMtx(n2, p));\r\n }\r\n\r\n const status = this.GrooveCheckPosition(target);\r\n\r\n if (status === Status.Side)\r\n return [target];\r\n else if (status !== Status.True)\r\n return [];\r\n\r\n return [target];\r\n }\r\n else\r\n {\r\n //当切割刀是矩形板,并且没有槽的时候,如果轴对齐,我们可以直接用aabb进行求交\r\n if (target.isRect && target.grooves.length === 0)\r\n {\r\n let diffMtx = target.OCS.premultiply(this.OCSInv);\r\n let box = target.BoundingBoxInOCS.applyMatrix4(diffMtx);\r\n let size = box.getSize(new Vector3);\r\n\r\n //轴对齐\r\n if (equaln(size.x * size.y * size.z, target.Width * target.Height * target.Thickness, 1))\r\n {\r\n let ibox = this.BoundingBoxInOCS.intersect(box);\r\n ibox.getSize(size);\r\n if (size.x < 0.99 || size.y < 0.99 || size.z < 0.1) return [];\r\n\r\n //构造新槽(因为我们当前的槽加长是根据槽的长短边进行加长的,所以我们可以这么构建)\r\n let g2 = new ExtrudeSolid().ConverToRectSolid(size.x, size.y, size.z);\r\n g2.Position = ibox.min;\r\n g2.ApplyMatrix(this._Matrix);\r\n g2.groovesAddDepth = target.groovesAddDepth;\r\n g2.groovesAddLength = target.groovesAddLength;\r\n g2.groovesAddWidth = target.groovesAddWidth;\r\n g2.knifeRadius = target.knifeRadius;\r\n return [g2];\r\n }\r\n }\r\n\r\n let grooves: ExtrudeSolid[] = [];\r\n let project = ProjectBoard(target, this);\r\n if (!project)\r\n {\r\n let yv = n2;\r\n let zv = n1;\r\n let xv = yv.clone().cross(zv);\r\n yv.copy(zv).cross(xv);\r\n //必须修正向量,否则会出错 #I3BUSY\r\n xv.normalize();\r\n yv.normalize();\r\n zv.normalize();\r\n let m = new Matrix4().makeBasis(xv, yv, zv).copyPosition(this.OCS);\r\n let mi = new Matrix4().getInverse(m).multiply(this.OCS);\r\n\r\n //使用克隆 防止正反面槽mesh丢失\r\n let cloneEnt = this.Clone();\r\n let interCSG = CSGIntersect(cloneEnt.CSG, target.CSG, this.OCSInv.multiply(target.OCSNoClone));\r\n\r\n //测试绘制\r\n // TestDraw(new Mesh(CSG2Geometry2(interBSP), ColorMaterial.GetConceptualMaterial(1, DoubleSide)));\r\n\r\n let topology = new BSPGroupParse(interCSG);\r\n let grooves: ExtrudeSolid[] = [];\r\n for (let pts of topology.Parse())\r\n {\r\n for (let p of pts)\r\n p.applyMatrix4(mi);\r\n let box = new Box3Ext().setFromPoints(pts);\r\n if (!box.isSolid(0.1))\r\n continue;\r\n let size = box.getSize(new Vector3());\r\n\r\n let ext = new ExtrudeSolid();\r\n ext.groovesAddDepth = target.groovesAddDepth;\r\n ext.groovesAddLength = target.groovesAddLength;\r\n ext.groovesAddWidth = target.groovesAddWidth;\r\n ext.knifeRadius = target.knifeRadius;\r\n ext.ConverToRectSolid(size.x, size.y, size.z);\r\n ext.OCS = m.clone().setPosition(box.min.applyMatrix4(m));\r\n\r\n grooves.push(ext);\r\n }\r\n return grooves;\r\n }\r\n // project.ApplyMatrix(target.OCSInv);\r\n if (!(project.Area > 1))\r\n {\r\n Log(\"无法切割板\", LogType.Info, [this, target]);\r\n return [];\r\n }\r\n\r\n project.Z0();\r\n let c1 = Contour.CreateContour(project);\r\n let c2 = Contour.CreateContour(target.ContourCurve);\r\n //投影轮廓列表\r\n let contours = c1.IntersectionBoolOperation(c2);\r\n let outlines: ExtrudeContourCurve[] = [];\r\n for (let c of contours)\r\n {\r\n if (c.Curve instanceof Polyline)\r\n outlines.push(...PolylineSpliteRect(c.Curve));\r\n else\r\n outlines.push(c.Curve);\r\n }\r\n let xv = n1;\r\n let zv = n2;\r\n let yv = zv.clone().cross(xv);\r\n\r\n //把<投影轮廓>对齐到肉的侧面坐标系上\r\n let projection2SideMatrix4 = new Matrix4().makeBasis(xv, yv, zv);\r\n for (let c of outlines)\r\n {\r\n let g = target.Clone().ClearDraw();\r\n let gs = [g];\r\n g.ContourCurve = c;\r\n g.GrooveCheckAll(gs);\r\n\r\n for (let g1 of gs)\r\n {\r\n //按g1的位置设置\r\n projection2SideMatrix4.setPosition(g1.Position);\r\n\r\n //投影到肉的侧面坐标系,求槽在肉里面的长度(x)和厚度(z)\r\n let alm = new Matrix4().getInverse(projection2SideMatrix4).multiply(g1.OCS);\r\n g1.ContourCurve.ApplyMatrix(alm);//破坏它\r\n let box = g1.ContourCurve.BoundingBox;\r\n let size = box.getSize(new Vector3);\r\n if (equaln(size.x, 0, 1e-2) || equaln(size.y, 0, 1e-2)) continue;\r\n\r\n //构造新槽\r\n let g2 = new ExtrudeSolid().ConverToRectSolid(size.y, g1.Thickness, size.x);\r\n g2.groovesAddDepth = target.groovesAddDepth;\r\n g2.groovesAddLength = target.groovesAddLength;\r\n g2.groovesAddWidth = target.groovesAddWidth;\r\n g2.knifeRadius = target.knifeRadius;\r\n g2.ApplyMatrix(OverturnMatrix);//翻转到和原先的投影曲线(肉侧面)一样的状态\r\n g2.ApplyMatrix(MoveMatrix(box.min));//和投影曲线重叠\r\n g2.ApplyMatrix(projection2SideMatrix4);//按照矩形还原回去\r\n\r\n grooves.push(g2);\r\n }\r\n }\r\n return grooves;\r\n }\r\n }\r\n\r\n //del_exp2_end\r\n\r\n /**\r\n * (步骤2)\r\n * 更新凹槽位置和厚度(校验凹槽的Z轴位置是否存在交集)\r\n */\r\n GrooveCheckPosition(target: ExtrudeSolid): Status\r\n {\r\n if (target.Width < 1e-1 || target.Height < 1e-1 || target.Thickness < 1e-1)\r\n return Status.False;\r\n\r\n let tp = target.Position.applyMatrix4(this.OCSInv);\r\n\r\n let minZ = tp.z;\r\n let maxZ = tp.z + target.thickness;\r\n if (minZ <= 1e-2)//背面\r\n {\r\n target.Thickness = Math.min(maxZ, this.thickness);\r\n if (!(equaln(minZ, 0)))\r\n target.ApplyMatrix(\r\n MoveMatrix(this.Normal.multiplyScalar(-minZ))\r\n );\r\n }\r\n else if (maxZ >= (this.thickness - 1e-2) && minZ > 0 && (this.thickness - minZ) > 0.01)//正面\r\n target.Thickness = this.thickness - minZ;\r\n else if (minZ > 1e-2 && maxZ < (this.thickness - 1e-2))\r\n return Status.Side;\r\n else\r\n return Status.False;\r\n\r\n if (equaln(target.thickness, this.thickness, 1e-2))\r\n target.thickness = this.thickness;\r\n\r\n return target.thickness > 1e-2 ? Status.True : Status.False;\r\n }\r\n\r\n /**\r\n * (步骤3)\r\n * 计算凹槽合并\r\n */\r\n GrooveCheckMerge(checkGrooveContourCurve = true)\r\n {\r\n if (this.grooves.length < 2) return;\r\n //生命周期:初始化->used->undefined\r\n type ExtData = {\r\n index: number;\r\n used: boolean;\r\n box: Box3;\r\n };\r\n\r\n //构建二维空间索引\r\n let ocsInv = this.OCSInv;\r\n let mtx = new Matrix4;\r\n let fb = new Flatbush(this.grooves.length);\r\n for (let i = 0; i < this.grooves.length; i++)\r\n {\r\n let g = this.grooves[i];\r\n mtx.multiplyMatrices(ocsInv, g.OCSNoClone);\r\n let cu = g.ContourCurve.Clone().ApplyMatrix(mtx);\r\n let box = cu.BoundingBox;\r\n g.TempData = { index: i, used: false, box };\r\n fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n }\r\n fb.finish();\r\n\r\n let retGs: ExtrudeSolid[] = [];//新的槽列表\r\n\r\n for (let i = 0; i < this.grooves.length; i++)\r\n {\r\n let startG = this.grooves[i];\r\n\r\n if (startG.TempData === undefined)//已经被使用\r\n continue;\r\n\r\n retGs.push(startG);\r\n\r\n let stack = [startG];\r\n\r\n for (let j = 0; j < stack.length; j++)\r\n {\r\n let g = stack[j];\r\n let gd = g.TempData as ExtData;//能入栈的都是未被使用的\r\n\r\n let ids = fb.search(gd.box.min.x - 1e-2, gd.box.min.y - 1e-2, gd.box.max.x + 1e-2, gd.box.max.y + 1e-2, (id =>\r\n {\r\n if (id <= i) return false;//(id比它小(如果能合并 早就合并了))\r\n let gd = this.grooves[id].TempData as ExtData;\r\n return gd && !gd.used;//判断被使用\r\n }));\r\n\r\n for (let id of ids)\r\n {\r\n let ng = this.grooves[id];\r\n if (equaln(startG.knifeRadius, ng.knifeRadius, 1e-3) && startG.Join(ng) === Status.True)\r\n {\r\n (ng.TempData as ExtData).used = true;\r\n stack.push(ng);\r\n }\r\n }\r\n\r\n g.TempData = undefined;//总是保证被使用的造型这个数据为空\r\n }\r\n }\r\n\r\n if (checkGrooveContourCurve && retGs.length !== this.grooves.length)\r\n {\r\n this.grooves = retGs;\r\n for (let g of this.grooves)\r\n g.CheckContourCurve();\r\n }\r\n }\r\n\r\n /**\r\n * (步骤4.1)\r\n * 计算凹槽轮廓在本实体中的约束状态(可能分裂)\r\n * @param groove 凹槽(不拷贝,直接被修改)\r\n * @returns this[] 凹槽在本实体中正确的约束状态.(可能分裂成为多个)\r\n */\r\n private GrooveCheckContour(groove: ExtrudeSolid): ExtrudeSolid[]\r\n {\r\n let matrixToTarget = groove.OCSInv.multiply(this.OCS);\r\n matrixToTarget.elements[14] = 0;//z->0\r\n\r\n //理论上只有大洞才需要优化,小洞无所谓了\r\n let thisShape = this.GetShape(true).ApplyMatrix(matrixToTarget);\r\n let targetShape = new Shape(Contour.CreateContour([groove.ContourCurve.Clone()], false));\r\n\r\n let inters = thisShape.IntersectionBoolOperation(targetShape);\r\n\r\n if (inters.length === 1)\r\n {\r\n groove.ContourCurve = inters[0].Outline.Curve;\r\n let grooves = [groove];\r\n groove.GrooveCheckAll(grooves);\r\n return grooves;\r\n }\r\n else\r\n {\r\n let grooves: ExtrudeSolid[] = [];\r\n for (let contour of inters)\r\n {\r\n let ext = groove.Clone().ClearDraw();\r\n ext.ContourCurve = contour.Outline.Curve;\r\n ext.GrooveCheckAll(grooves);\r\n grooves.push(ext);\r\n }\r\n return grooves;\r\n }\r\n }\r\n\r\n /** (步骤4.2.1) 针对圆弧板-修正路径 */\r\n AdjustPath(ext: ExtrudeSolid, outline: Polyline | Circle) { }\r\n /** (步骤4.2.2) 针对圆弧板-修正位置 */\r\n AdjustPosition(ext: ExtrudeSolid, basePoint: Vector3) { }\r\n\r\n /**\r\n * (步骤4.2)\r\n * 计算本实体被全身的凹槽差集后正确的实体轮廓,和有可能的分裂实体\r\n * @param splitEntitys 分裂出来的实体\r\n * @returns [Status] Status : 消失不见\r\n */\r\n ContourCheckSubtract(splitEntitys: this[]): boolean\r\n {\r\n let shapeManager = new ShapeManager();\r\n shapeManager.AppendShapeList(\r\n new Shape(Contour.CreateContour(this.ContourCurve.Clone(), false))\r\n );\r\n let subtractShape = new ShapeManager();\r\n\r\n let allDepthGrooves: ExtrudeSolid[] = [];//全深槽\r\n arrayRemoveIf(this.grooves, groove =>\r\n {\r\n if (equaln(groove.thickness, this.thickness))\r\n {\r\n let grooveCurve = groove.ContourCurve.Clone();\r\n let matrixToLocal = this.OCSInv.multiply(groove.OCS);\r\n grooveCurve.ApplyMatrix(matrixToLocal);\r\n\r\n subtractShape.AppendShapeList(\r\n new Shape(\r\n Contour.CreateContour([grooveCurve], false),\r\n groove.grooves.filter(g => equaln(g.thickness, groove.thickness)).map(g =>\r\n {\r\n let gc = g.ContourCurve.Clone();\r\n let mtx = g.OCS.premultiply(groove.OCSInv).premultiply(matrixToLocal);\r\n gc.ApplyMatrix(mtx);\r\n return Contour.CreateContour([gc], false);\r\n })\r\n )\r\n );\r\n\r\n allDepthGrooves.push(groove);\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n // 测试绘制黄色为原始轮廓 红色为切割轮廓\r\n // TestDraw(new Region(shapeManager).Clone(), 2);\r\n // TestDraw(new Region(subtractShape).Clone(), 1);\r\n\r\n shapeManager.SubstactBoolOperation(subtractShape);\r\n let shapes = shapeManager.ShapeList;\r\n\r\n //不做任何改变\r\n if (shapeManager.ShapeCount === 1 && shapes[0].Holes.length === allDepthGrooves.length)\r\n {\r\n //在拉伸夹点后,全深槽如果不改原始的板的信息,那么它无法在递归检查,这个时候如果不校验,那么它将不会在被校验\r\n for (let g of allDepthGrooves)\r\n g.CheckContourCurve();\r\n\r\n this.grooves.push(...allDepthGrooves);\r\n return true;\r\n }\r\n\r\n //分裂\r\n for (let i = 1; i < shapeManager.ShapeCount; i++)\r\n {\r\n let ext = this.Clone();\r\n let shape = shapes[i];\r\n for (let hole of shape.Holes)\r\n {\r\n let groove = new ExtrudeSolid();\r\n\r\n //#endregion 保持旧的槽数据 (必须在这里写代码 因为下面会修改hole.Curve)\r\n let p = hole.Curve.StartPoint;\r\n let oldGrooveIndex = subtractShape.ShapeList.findIndex(s => s.Outline.Curve.PtOnCurve(p));\r\n let oldGroove = allDepthGrooves[Math.max(oldGrooveIndex, 0)];\r\n\r\n groove.knifeRadius = oldGroove.knifeRadius;\r\n groove.groovesAddWidth = oldGroove.groovesAddWidth;\r\n groove.groovesAddDepth = oldGroove.groovesAddDepth;\r\n groove.groovesAddLength = oldGroove.groovesAddLength;\r\n //#endregion\r\n\r\n groove.OCS = this.OCSNoClone;\r\n groove.ContourCurve = hole.Curve;\r\n groove.thickness = this.thickness;\r\n\r\n ext.grooves.push(groove);\r\n }\r\n const shapeOutline = shape.Outline.Curve.Clone();\r\n // 针对圆弧板-修正路径\r\n this.AdjustPath(ext, shapeOutline);\r\n const shapeBasePoint = shape.Outline.Curve.StartPoint;\r\n ext.ContourCurve = shape.Outline.Curve;\r\n ext.GrooveCheckAll(splitEntitys);\r\n // 针对圆弧板-修正位置\r\n this.AdjustPosition(ext, shapeBasePoint);\r\n ext.Update();\r\n splitEntitys.push(ext);\r\n }\r\n\r\n if (shapes.length > 0)\r\n {\r\n let shape = shapes[0];\r\n for (let hole of shape.Holes)\r\n {\r\n let groove = new ExtrudeSolid();\r\n\r\n //#endregion 保持旧的槽数据 (必须在这里写代码 因为下面会修改hole.Curve)\r\n let p = hole.Curve.StartPoint;\r\n let oldGrooveIndex = subtractShape.ShapeList.findIndex(s => s.Outline.Curve.PtOnCurve(p));\r\n let oldGroove = allDepthGrooves[Math.max(oldGrooveIndex, 0)];\r\n\r\n groove.knifeRadius = oldGroove.knifeRadius;\r\n groove.groovesAddWidth = oldGroove.groovesAddWidth;\r\n groove.groovesAddDepth = oldGroove.groovesAddDepth;\r\n groove.groovesAddLength = oldGroove.groovesAddLength;\r\n //#endregion\r\n\r\n groove.OCS = this.OCSNoClone;\r\n groove.ContourCurve = hole.Curve;\r\n groove.thickness = this.thickness;\r\n this.grooves.push(groove);\r\n }\r\n\r\n if (!equaln(this.contourCurve.Area, shape.Outline.Area))\r\n this.ContourCurve = shape.Outline.Curve;\r\n\r\n return true;\r\n }\r\n else\r\n return false;\r\n }\r\n\r\n IsLazyGrooveCheck: boolean;\r\n IsNeedGrooveCheck: boolean;\r\n /**\r\n * 无法知道修改了轮廓是否为更新到内部凹槽.\r\n * 无法知道修改了内部凹槽之后是否会更新到轮廓.\r\n * 所以默认全部校验内部的凹槽\r\n */\r\n GrooveCheckAll(splitEntitys: this[])\r\n {\r\n if (this.IsLazyGrooveCheck)\r\n {\r\n this.IsNeedGrooveCheck = true;\r\n return;\r\n }\r\n this.IsNeedGrooveCheck = false;\r\n this.WriteAllObjectRecord();\r\n\r\n //校验Z轴位置\r\n arrayRemoveIf(this.grooves, g =>\r\n {\r\n return this.GrooveCheckPosition(g) === Status.False;\r\n });\r\n\r\n //清除全深洞的子槽\r\n for (let g of this.grooves)\r\n {\r\n if (equaln(g.thickness, this.thickness, 1e-3))\r\n {\r\n /*\r\n 此刻我们直接将它的子槽清空,虽然子槽可能将这个槽分裂成2个,\r\n 但是这样的情况只能在造型应用中才会产生\r\n\r\n 变更:2024/4/9 现在允许全深槽的子槽 会将板分裂成2个 由于一个奇怪的用例 ref:https://gitee.com/cf-fz/WebCAD/pulls/2667\r\n */\r\n // g.grooves.length = 0;\r\n }\r\n else\r\n arrayRemoveIf(g.grooves, subg => !equaln(g.thickness, subg.thickness, 1e-3));\r\n }\r\n\r\n //合并\r\n this.GrooveCheckMerge();\r\n //修改本实体轮廓\r\n if (this.grooves.some(g => equaln(g.thickness, this.thickness, 1e-3)))\r\n {\r\n if (!this.ContourCheckSubtract(splitEntitys))\r\n {\r\n this.Erase();\r\n return;\r\n }\r\n }\r\n\r\n //修正凹槽轮廓\r\n let splitGrooves: ExtrudeSolid[] = [];\r\n let thisArea = this.contourCurve.Area;\r\n for (let i = 0; i < this.grooves.length; i++)\r\n {\r\n let g = this.grooves[i];\r\n if (equaln(g.thickness, this.thickness, 1e-3))\r\n splitGrooves.push(g);\r\n else\r\n {\r\n let gs = this.GrooveCheckContour(g);\r\n if (gs.length === 1)\r\n {\r\n let gg = gs[0];\r\n if (gg.grooves.length === 0 && equaln(gg.contourCurve.Area, thisArea))\r\n {\r\n //判断正反面\r\n let p = gg.Position.applyMatrix4(this.OCSInv);\r\n if (equaln(p.z, 0))\r\n {\r\n this.thickness -= gg.thickness;\r\n let n = this.Normal;\r\n n.multiplyScalar(gg.thickness);\r\n this._Matrix.elements[12] += n.x;\r\n this._Matrix.elements[13] += n.y;\r\n this._Matrix.elements[14] += n.z;\r\n }\r\n else\r\n {\r\n this.thickness -= gg.thickness;\r\n }\r\n this.grooves.splice(i, 1);\r\n this.GrooveCheckAll(splitEntitys);\r\n return;\r\n }\r\n }\r\n splitGrooves.push(...gs);\r\n }\r\n }\r\n\r\n this.grooves = splitGrooves;\r\n\r\n this.Update();\r\n }\r\n\r\n /** 校验内部槽并且自动分裂 */\r\n GrooveCheckAllAutoSplit(output: ExtrudeSolid[] = undefined)\r\n {\r\n let splitEntitys: this[] = [];\r\n this.GrooveCheckAll(splitEntitys);\r\n\r\n if (output)\r\n output.push(...splitEntitys);\r\n else if (this._Owner)\r\n {\r\n let record = this._Owner.Object as BlockTableRecord;\r\n for (let e of splitEntitys)\r\n {\r\n record.Add(e);\r\n e.RepairRelevance();\r\n }\r\n this.HandleSpliteEntitys(splitEntitys);\r\n }\r\n }\r\n\r\n //分裂后重新将排钻实体设置给不同的实体\r\n HandleSpliteEntitys(splitEntitys: this[]) { }\r\n\r\n LazyGrooveCheckAll()\r\n {\r\n this.IsLazyGrooveCheck = false;\r\n if (this.IsNeedGrooveCheck)\r\n this.GrooveCheckAllAutoSplit();\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Draw\r\n GetPrintObject3D()\r\n {\r\n let geometry = new LineGeometry();\r\n let lineSegments = new Float32Array(this.EdgeGeometry.attributes.position.array);\r\n let instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\r\n geometry.setAttribute('instanceStart', new InterleavedBufferAttribute(instanceBuffer, 3, 0));\r\n geometry.setAttribute('instanceEnd', new InterleavedBufferAttribute(instanceBuffer, 3, 3));\r\n let line = new Line2(geometry, ColorMaterial.PrintLineMatrial);\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetPrintConceptualMaterial());\r\n return [line, mesh];\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex, this.Freeze));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, this.GetConceptualMaterial()),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n\r\n return mesh;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D().add(...FastWireframe(this));\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return new Object3D().add(...this.GetPrintObject3D());\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n\r\n return new Object3D().add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())\r\n );\r\n }\r\n }\r\n get UCGenerator(): UVGenerator\r\n {\r\n return boardUVGenerator;\r\n }\r\n\r\n __CacheKnifVersion__: { [key: number]: number; };\r\n get NeedUpdateRelevanceGroove()\r\n {\r\n //在同步反应器中,当存在关联拉槽的实体和本实体一起被删除后,会更新本实体,然后导致同步认为它没有子实体\r\n if (this._isErase) return false;\r\n\r\n if (!this.__CacheKnifVersion__) return true;\r\n\r\n for (let k of this.RelevanceKnifs)\r\n {\r\n if (!k || !k.Object) continue;\r\n\r\n if (this.__CacheKnifVersion__[k.Index] !== (<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 protected CalcRelevanceGroove()\r\n {\r\n //避免Jig实体更新,导致性能暴跌.\r\n if (!this.Id) return;\r\n\r\n this.__CacheKnifVersion__ = {};\r\n\r\n let knifs: ExtrudeSolid[] = [];\r\n this.GetRelevanceKnifes(knifs);\r\n\r\n //如果是切割圆弧板或刀是圆弧板,先不切割\r\n // if (this instanceof Board && this.IsArcBoard) knifs = [];\r\n // knifs = knifs.filter(e => !(e instanceof Board && e.IsArcBoard));\r\n\r\n if (knifs.length > 0)\r\n {\r\n for (let k of knifs) //复合实体(五金)的子实体没有id\r\n this.__CacheKnifVersion__[k.Id?.Index ?? k.__TempIndexVersion__?.Index] = k.__TempIndexVersion__?.Version ?? k.__UpdateVersion__;\r\n\r\n let tempExtrude = this.Clone();\r\n tempExtrude.RelevanceKnifs.length = 0;//避免递归\r\n\r\n if (tempExtrude instanceof Board)\r\n tempExtrude.SideModelingMap.clear();\r\n\r\n if (!this.ReadFileIng)\r\n tempExtrude.__OriginalId__ = this.Id;//在读取文件时不打印日志\r\n let output: ExtrudeSolid[] = [tempExtrude];\r\n let ok = tempExtrude.Subtract(knifs, output);\r\n this.__CacheSplitExtrudes = output as this[];\r\n\r\n if (tempExtrude instanceof Board)\r\n this.AppendRelevanceSideModel(tempExtrude.SideModelingMap);\r\n\r\n if (ok)\r\n {\r\n this.__CacheVolume__ = tempExtrude.Volume;\r\n let meshs: BufferGeometry[] = [];\r\n let edges: BufferGeometry[] = [];\r\n let inv = this.OCSInv;\r\n let diff = new Matrix4;\r\n for (let e2 of output)\r\n {\r\n diff.multiplyMatrices(inv, e2._Matrix);\r\n meshs.push(e2.MeshGeometry.applyMatrix4(diff));\r\n edges.push(e2.EdgeGeometry.applyMatrix4(diff));\r\n this.__CacheVolume__ += e2.Volume;\r\n\r\n }\r\n if (output.length === 1)\r\n {\r\n this._MeshGeometry = tempExtrude.MeshGeometry;\r\n this._EdgeGeometry = tempExtrude.EdgeGeometry;\r\n }\r\n else\r\n {\r\n this._MeshGeometry = BufferGeometryUtils.MergeBufferGeometries(meshs);\r\n this._MeshGeometry[\"IsMesh\"] = true;\r\n this._EdgeGeometry = BufferGeometryUtils.MergeBufferGeometries(edges);\r\n }\r\n\r\n //因为这里更新了mesh geom 所以我们必须更新它.\r\n this._MeshGeometry = this.UpdateMeshGeom(this._MeshGeometry);\r\n this._MeshGeometry[\"IsMesh\"] = true;\r\n\r\n //我们加入一些拓展信息,以便排钻能够使用(或者其他的,比如发送到效果图?,BBS)(布局视口会直接添加实体到场景,所以我们只在这里设置OriginEntity)\r\n for (let i = 0; i < this.__CacheSplitExtrudes.length; i++)\r\n {\r\n this.__CacheSplitExtrudes[i].objectId = new ObjectId(this.Id.Index * -100 - i);\r\n this.__CacheSplitExtrudes[i].__OriginalEnt__ = this;\r\n }\r\n }\r\n else\r\n {\r\n let id = this.Id ?? this.__OriginalId__;\r\n if (\r\n !this.ReadFileIng &&\r\n id &&\r\n this instanceof Board &&\r\n this.__CacheVolume__ !== undefined &&\r\n !equaln(this.__CacheVolume__, this.Volume)\r\n )\r\n InteractionLog([{ msg: `${this.Name}(${id.Index})`, entity: [this] }, { msg: \"关联槽已逃离!\" }], LogType.Warning);\r\n this.__CacheVolume__ = undefined;\r\n\r\n this.__CacheSplitExtrudes = [this];\r\n }\r\n }\r\n else\r\n {\r\n if (\r\n !this.ReadFileIng &&\r\n this.Id &&\r\n this instanceof Board &&\r\n this.__CacheVolume__ !== undefined &&\r\n !equaln(this.__CacheVolume__, this.Volume)\r\n )\r\n {\r\n InteractionLog([{ msg: `${this.Name}(${this.Id.Index})`, entity: [this] }, { msg: \"关联槽已逃离或者被清除!\" }], LogType.Warning);\r\n //清除关联侧槽\r\n this.AppendRelevanceSideModel(new Map());\r\n }\r\n this.__CacheSplitExtrudes = [this];\r\n this.__CacheVolume__ = undefined;\r\n }\r\n }\r\n\r\n /**\r\n * 如果实体被切割,那么将返回分裂的实体数组,否则返回自身\r\n */\r\n get SplitExtrudes(): this[]\r\n {\r\n if (this.NeedUpdateRelevanceGroove)\r\n this.Update(UpdateDraw.Geometry);//我们先直接更新绘制\r\n if (this.NeedUpdateRelevanceGroove)//如果更新失败,那么我们更新这个槽(似乎也证明了我们没有绘制实体)\r\n this.CalcRelevanceGroove();//注意,这也将更新绘制的实体(EdgeGeo,MeshGeo)(如果拆单也用这个,可能会带来性能损耗)\r\n\r\n if (this.__CacheSplitExtrudes)\r\n for (let e of this.__CacheSplitExtrudes)\r\n e._MaterialId = this._MaterialId;\r\n return this.__CacheSplitExtrudes;\r\n }\r\n\r\n protected GetRelevanceKnifes(knifs: ExtrudeSolid[])\r\n {\r\n for (let e of this.RelevanceKnifs)\r\n {\r\n if (!e.IsErase)\r\n knifs.push(e.Object as ExtrudeSolid);\r\n else if (this.__CacheKnifVersion__)\r\n this.__CacheKnifVersion__[e.Index] = (<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 protected _MeshGeometry: BufferGeometry;\r\n get MeshGeometry(): BufferGeometry\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n if (this.thickness <= 0)\r\n return new BufferGeometry();\r\n\r\n if (!ExtrudeConfig.DisableRefCut)\r\n this.CalcRelevanceGroove();\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n this._EdgeGeometry = undefined;//清理掉(以便在被csg切割后得到edgegeom)\r\n\r\n let grooves = this.Grooves;\r\n /**\r\n * 如果要板件圆造型的挖穿跟不挖穿的效果一致\r\n * 则把下段代码的判断,改为 if (grooves.length === 0)\r\n */\r\n if (grooves.every(g => equaln(g.thickness, this.thickness)) || grooves.length === 0)\r\n {\r\n let contour = this.ContourCurve.Clone();\r\n let holes: Contour[] = [];\r\n\r\n let ocsInv = this.OCSInv;\r\n let alMatrix4 = new Matrix4();\r\n if (grooves.length < MaxDrawGrooveCount)\r\n for (let g of grooves)\r\n {\r\n alMatrix4.multiplyMatrices(ocsInv, g.OCSNoClone);\r\n let gContour = g.ContourCurve.Clone();\r\n gContour.ApplyMatrix(alMatrix4);\r\n holes.push(Contour.CreateContour(gContour));\r\n }\r\n\r\n let shape = new Shape(Contour.CreateContour(contour), holes);\r\n\r\n let extrudeSettings: ExtrudeGeometryOptions = {\r\n steps: 1,\r\n UVGenerator: this.UCGenerator,\r\n depth: this.bevelEnabled ? this.thickness - 4 : this.thickness,\r\n bevelEnabled: this.bevelEnabled,\r\n bevelThickness: 2,\r\n bevelSize: 2,\r\n bevelOffset: -2,\r\n bevelSegments: 1,\r\n };\r\n shape.DisplayAccuracy = this._DisplayAccuracy;\r\n let geo = new ExtrudeGeometry(shape.Shape, extrudeSettings);\r\n geo.applyMatrix4(contour.OCSNoClone);\r\n\r\n if (this.bevelEnabled)\r\n geo.translate(0, 0, 2);\r\n\r\n this.UpdateUV(geo, contour.OCSNoClone);\r\n //板在某些时候需要布尔运算(二维刀路)\r\n this._MeshGeometry = this.UpdateMeshGeom(geo);\r\n this._MeshGeometry[\"IsMesh\"] = true;\r\n\r\n let mtl = this.Material?.Object as PhysicalMaterialRecord ?? this.Db?.DefaultMaterial;\r\n if (mtl?.UseWorldUV)\r\n {\r\n //类型转换\r\n if (this._MeshGeometry instanceof Geometry)\r\n this._MeshGeometry = new BufferGeometry().fromGeometry(this._MeshGeometry);\r\n let gen = new GenUVForWorld();\r\n gen.GenGeoUV(this._MeshGeometry, mtl.Material);\r\n }\r\n\r\n //edge geometry\r\n if (grooves.length < MaxDrawGrooveCount && !this._EdgeGeometry)//这个代码保证线框和概念对齐\r\n {\r\n let coords = FastExtrudeEdgeGeometryOfShape((shape.Shape as Shape2), 0, this.thickness, 12, true);\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n edgeGeo.applyMatrix4(contour.OCSNoClone);\r\n this._EdgeGeometry = edgeGeo;\r\n }\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n let builder = new ExtrudeGeometryBuilder(this);\r\n\r\n this._MeshGeometry = builder.MeshGeometry;\r\n this._MeshGeometry = this.UpdateMeshGeom(this._MeshGeometry);\r\n if (grooves.length < MaxDrawGrooveCount && !this._EdgeGeometry)\r\n this._EdgeGeometry = builder.EdgeGeometry;\r\n this.UpdateUV(null, null);\r\n this.GenWorldUV(this._MeshGeometry);\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n //子类重载,用于二次计算几何体(例如二维刀路布尔运算)\r\n UpdateMeshGeom(geo: BufferGeometry | Geometry): BufferGeometry\r\n {\r\n return geo as BufferGeometry;\r\n }\r\n\r\n protected get Has2DPath() { return false; }\r\n protected get HasSideModel() { return false; }\r\n protected _EdgeGeometry: EdgesGeometry | BufferGeometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n if (!ExtrudeConfig.DisableRefCut)\r\n this.CalcRelevanceGroove();\r\n\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n //这里我们超过100就用这个,为了性能 和MaxDrawGrooveCount不一致\r\n if (this.grooves.length > 100 || (!this.Has2DPath && !this.HasSideModel && (this.grooves.length === 0 || this.grooves.every(g => equaln(g.thickness, this.thickness))))\r\n )\r\n {\r\n let coords = FastExtrudeEdgeGeometry(this, this.DrawColorIndex, 12, true);\r\n let edgeGeo = new BufferGeometry();\r\n edgeGeo.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n this._EdgeGeometry = edgeGeo;\r\n return this._EdgeGeometry;\r\n }\r\n\r\n if (this._MeshGeometry)\r\n {\r\n this._MeshGeometry.dispose();\r\n this._MeshGeometry = undefined;\r\n }\r\n this.MeshGeometry;\r\n return this._EdgeGeometry;\r\n }\r\n\r\n UpdateUV(geo: Geometry, ocs: Matrix4, isRev = false)\r\n {\r\n let mtl = (this.Material?.Object as PhysicalMaterialRecord) ?? this.Db?.DefaultMaterial;\r\n\r\n if (mtl?.IsFull)\r\n {\r\n if (geo)\r\n ScaleUV2(geo, ocs, this.width, this.height, isRev);\r\n else\r\n this.UpdateBufferGeometryUvs(isRev);\r\n }\r\n else\r\n {\r\n if (geo)\r\n ScaleUV(geo);\r\n }\r\n }\r\n\r\n GenWorldUV(geo: BufferGeometry)\r\n {\r\n let mtl = (this.Material?.Object as PhysicalMaterialRecord) ?? this.Db?.DefaultMaterial;\r\n\r\n if (mtl?.UseWorldUV)\r\n {\r\n let gen = new GenUVForWorld;\r\n gen.GenGeoUV(geo, mtl.Material);\r\n }\r\n }\r\n\r\n UpdateBufferGeometryUvs(isRev: boolean)\r\n {\r\n let uvs = this._MeshGeometry.attributes.uv;\r\n for (let i = 0; i < uvs.count; i++)\r\n {\r\n let x = uvs.getX(i) * 1e3;\r\n let y = uvs.getY(i) * 1e3;\r\n if (isRev)\r\n uvs.setXY(i, x / this.height, y / this.width);\r\n else\r\n uvs.setXY(i, x / this.width, y / this.height);\r\n }\r\n }\r\n DeferUpdate()\r\n {\r\n if (this.NeedUpdateFlag & UpdateDraw.Matrix)\r\n {\r\n //如果是Jig实体,那么就算它有关联切割,我们也不更新实体(因为似乎没必要?)\r\n if (this.Id && this.RelevanceKnifs.some(id => !id.IsErase))\r\n this.NeedUpdateFlag |= UpdateDraw.Geometry;\r\n }\r\n super.DeferUpdate();\r\n }\r\n\r\n //del_exp2_start\r\n UpdateDrawGeometry()\r\n {\r\n this.csg = undefined;\r\n if (this._EdgeGeometry)\r\n this._EdgeGeometry.dispose();\r\n this._EdgeGeometry = undefined;\r\n if (this._MeshGeometry)\r\n this._MeshGeometry.dispose();\r\n this._MeshGeometry = undefined;\r\n }\r\n //del_exp2_end\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.DrawColorIndex, this.Freeze);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return obj.add(\r\n new Mesh(this.MeshGeometry, this.GetConceptualMaterial()),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())\r\n );\r\n }\r\n else if (renderType === RenderType.ModelGroove)\r\n {\r\n obj.add(\r\n // new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(9, FrontSide, true, this.Freeze)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetConceptualEdgeMaterial())\r\n );\r\n obj.add(this.GetModelGroove());\r\n\r\n //侧槽\r\n obj.add(this.GetSideModelGroove());\r\n }\r\n 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\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as TLine;\r\n l.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex, this.Freeze);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = this.GetConceptualMaterial();\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n }\r\n //获取概念视图材质 冻结状态使用257色号 半透明\r\n private GetConceptualMaterial()\r\n {\r\n let mtl: Material;\r\n if (this.Freeze)\r\n mtl = ColorMaterial.GetBasicMaterialTransparent2(257, 0.5);\r\n else\r\n mtl = ColorMaterial.GetConceptualMaterial(this.DrawColorIndex, FrontSide, true);\r\n\r\n return mtl;\r\n }\r\n\r\n private GetModelGroove()\r\n {\r\n const grooves: ExtrudeSolid[] = [];\r\n for (const sp of this.__CacheSplitExtrudes ?? [])\r\n {\r\n grooves.push(...sp.grooves);\r\n }\r\n const group = new Group();\r\n for (const groove of grooves)\r\n {\r\n const grooveClone = groove.Clone();\r\n grooveClone.UpdateDrawGeometry();\r\n const mtx = new Matrix4().premultiply(grooveClone.OCSNoClone).premultiply(this.OCSInv);\r\n\r\n const edgeGeo = grooveClone.EdgeGeometry;\r\n edgeGeo.applyMatrix4(mtx);\r\n const line = new LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(1, this.Freeze));\r\n\r\n const meshGeo = grooveClone.MeshGeometry;\r\n meshGeo.applyMatrix4(mtx);\r\n const mesh = new Mesh(meshGeo, ColorMaterial.GetBasicMaterialTransparent2(1, 0.6));\r\n group.add(mesh, line);\r\n }\r\n return group;\r\n }\r\n\r\n private GetSideModelGroove()\r\n {\r\n let board = this as unknown as Board;\r\n\r\n const AllSideModelGrooveMap = board.AllSideModelGrooveMap;\r\n const group = new Group();\r\n\r\n if (AllSideModelGrooveMap.size)\r\n {\r\n let con = GetBoardContour(board);\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n const mirrorMtxZ = MakeMirrorMtx(ZAxis);\r\n\r\n for (let [index, soilds] of AllSideModelGrooveMap)\r\n {\r\n let cu = cus[index];\r\n if (!cu) continue;\r\n\r\n let mt4 = GetSideCuFaceMtx(cus[index], inverseZ);\r\n\r\n for (let soild of soilds)\r\n {\r\n const edgeGeo = soild.EdgeGeometry;\r\n const line = new LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(1, this.Freeze));\r\n line.applyMatrix4(mirrorMtxZ);\r\n line.applyMatrix4(mt4.clone().multiply(soild.OCS));\r\n\r\n const meshGeo = soild.MeshGeometry;\r\n const mesh = new Mesh(meshGeo, ColorMaterial.GetBasicMaterialTransparent2(1, 0.6));\r\n mesh.applyMatrix4(mirrorMtxZ);\r\n mesh.applyMatrix4(mt4.clone().multiply(soild.OCS));\r\n group.add(mesh, line);\r\n }\r\n }\r\n }\r\n\r\n return group;\r\n }\r\n\r\n UpdateJigMaterial(color = 8)\r\n {\r\n\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n /**\r\n * 简化的文件读取和写入,只写入必要的数据,没有id,没有其他版本号\r\n */\r\n ReadFileLite(file: CADFiler)\r\n {\r\n this.ReadFileOnly(file);\r\n this._Matrix.fromArray(file.Read());\r\n }\r\n WriteFileLite(file: CADFiler)\r\n {\r\n this.WriteFileOnly(file);\r\n file.Write(this._Matrix.toArray());\r\n }\r\n\r\n private ReadFileOnly(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.height = Number(file.Read());\r\n this.width = Number(file.Read());\r\n this.thickness = Number(file.Read());\r\n this.isRect = file.Read();\r\n this.contourCurve = file.ReadObject() as ExtrudeContourCurve;\r\n\r\n let grooveCount = file.Read();\r\n this.grooves.length = 0;\r\n for (let i = 0; i < grooveCount; i++)\r\n {\r\n if (this.grooves[i] === undefined)\r\n this.grooves[i] = new ExtrudeSolid();\r\n\r\n this.grooves[i].ReadFileLite(file);\r\n }\r\n\r\n this.knifeRadius = file.Read();\r\n this.groovesAddLength = file.Read();\r\n if (ver > 1)\r\n {\r\n this.groovesAddWidth = file.Read();\r\n this.groovesAddDepth = file.Read();\r\n }\r\n\r\n if (ver > 2)\r\n {\r\n this.RelevanceMeats.length = 0;\r\n this.RelevanceKnifs.length = 0;\r\n\r\n let count = file.Read() as number;\r\n for (let index = 0; index < count; index++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this.RelevanceMeats.push(id);\r\n }\r\n\r\n count = file.Read() as number;\r\n for (let index = 0; index < count; index++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this.RelevanceKnifs.push(id);\r\n }\r\n }\r\n\r\n if (ver > 3)\r\n {\r\n this._DisplayAccuracy = file.Read();\r\n }\r\n }\r\n private WriteFileOnly(file: CADFiler)\r\n {\r\n file.Write(4);\r\n file.Write(this.height);\r\n file.Write(this.width);\r\n file.Write(this.thickness);\r\n file.Write(this.isRect);\r\n file.WriteObject(this.ContourCurve);\r\n\r\n file.Write(this.grooves.length);\r\n for (let groove of this.grooves)\r\n groove.WriteFileLite(file);\r\n\r\n file.Write(this.knifeRadius);\r\n file.Write(this.groovesAddLength);\r\n file.Write(this.groovesAddWidth);\r\n file.Write(this.groovesAddDepth);\r\n\r\n //3\r\n file.Write(this.RelevanceMeats.length);\r\n for (let id of this.RelevanceMeats)\r\n file.WriteSoftObjectId(id);\r\n\r\n file.Write(this.RelevanceKnifs.length);\r\n for (let id of this.RelevanceKnifs)\r\n file.WriteSoftObjectId(id);\r\n\r\n file.Write(this._DisplayAccuracy);\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n this.ReadFileOnly(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n this.WriteFileOnly(file);\r\n }\r\n //#endregion\r\n}\r\n\r\nexport function FastMeshGeometry(width: number, height: number, thickness: number)\r\n{\r\n let geo = new BoxGeometry(width, height, thickness);\r\n geo.translate(width * 0.5, height * 0.5, thickness * 0.5);\r\n return geo;\r\n}\r\n\r\n\r\nCADFactory.RegisterObjectAlias(ExtrudeSolid, \"ExtureSolid\");\r\n\r\nfunction ProjectBoard(knifBoard: ExtrudeSolid, projectBoard: ExtrudeSolid)\r\n{\r\n let n1 = knifBoard.Normal;\r\n let n2 = projectBoard.Normal;\r\n if (!isPerpendicularityTo(n1, n2)) return;\r\n\r\n let p1 = projectBoard.Position;\r\n let p2 = n2.clone().multiplyScalar(projectBoard.Thickness).add(p1);\r\n\r\n let ocsInv = knifBoard.OCSInv;\r\n p1.applyMatrix4(ocsInv).setZ(0);\r\n p2.applyMatrix4(ocsInv).setZ(0);\r\n\r\n let dir = new Vector3().crossVectors(n1, n2).applyMatrix4(ocsInv.clone().setPosition(ZeroVec));\r\n\r\n let lineLength = projectBoard.Width + projectBoard.Height;//两边之和大于第三边\r\n let pts = [\r\n dir.clone().multiplyScalar(lineLength).add(p1),\r\n dir.clone().multiplyScalar(-lineLength).add(p1),\r\n dir.clone().multiplyScalar(-lineLength).add(p2),\r\n dir.clone().multiplyScalar(lineLength).add(p2),\r\n ];\r\n\r\n let pl = new Polyline(pts.map(p =>\r\n {\r\n return { pt: AsVector2(p), bul: 0 };\r\n }));\r\n pl.CloseMark = true;\r\n\r\n // pl.ApplyMatrix(knifBoard.OCS);\r\n return pl;\r\n}\r\n\r\n//用于翻转绘制出来的槽\r\nconst OverturnMatrix = new Matrix4().makeBasis(YAxis, ZAxis, XAxis);\r\n","import { 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 { worldUVGenerator } from \"../../Geometry/WordUVGenerator\";\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 { Circle } from \"../Entity/Circle\";\r\nimport { DragPointType } from \"../Entity/DragPointType\";\r\nimport { ExtrudeContourCurve, ExtrudeSolid } from \"../Entity/Extrude\";\r\nimport { GenUVForWorld } from \"../Entity/GenUVForWorld\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\nimport { PhysicalMaterialRecord } from \"../PhysicalMaterialRecord\";\r\nimport { Shape } from \"../Shape\";\r\nimport { OBB } from './../../Geometry/OBB/obb';\r\nimport { GangDrillType } from \"./CylinderHole\";\r\nimport { Hole } from \"./Hole\";\r\n\r\n@Factory\r\nexport class ExtrudeHole extends Hole\r\n{\r\n private _DisplayAccuracy = 0;\r\n private _contourCurve: ExtrudeContourCurve = new Polyline();\r\n private _EdgeGeometry: BufferGeometry;\r\n protected _knifeRadius: number = 3;\r\n private _GoodsId: string = \"\";\r\n private _GoodsSn: string = \"\";\r\n @AutoRecord isHole = true;\r\n @AutoRecord isThrough = false;\r\n\r\n get KnifeRadius()\r\n {\r\n return this._knifeRadius;\r\n }\r\n set KnifeRadius(v: number)\r\n {\r\n if (!equaln(v, this._knifeRadius))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._knifeRadius = v;\r\n }\r\n }\r\n\r\n get GoodsId(): string\r\n {\r\n return this._GoodsId;\r\n }\r\n set GoodsId(value: string)\r\n {\r\n if (this._GoodsId !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._GoodsId = value;\r\n }\r\n }\r\n\r\n get GoodsSn(): string\r\n {\r\n return this._GoodsSn;\r\n }\r\n set GoodsSn(value: string)\r\n {\r\n if (this._GoodsSn !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._GoodsSn = value;\r\n }\r\n }\r\n\r\n Explode()\r\n {\r\n return [this.ContourCurve.Clone().ApplyMatrix(this.OCS)];\r\n }\r\n get ContourCurve()\r\n {\r\n return this._contourCurve;\r\n }\r\n\r\n set ContourCurve(curve: ExtrudeContourCurve)\r\n {\r\n if (!curve.IsClose) return;\r\n\r\n if (curve instanceof Polyline)\r\n {\r\n curve.CloseMark = true;\r\n let pts = curve.LineData;\r\n if (equalv2(pts[0].pt, arrayLast(pts).pt))\r\n pts.pop();\r\n\r\n //如果曲线被旋转了,那么修正它的旋转矩阵,避免纹路错误\r\n let ocs = curve.OCS;\r\n if (!equaln(ocs.elements[0], 1))// || ocs.elements[9] || ocs.elements[10]\r\n {\r\n for (let p of pts)\r\n Vector2ApplyMatrix4(ocs, p.pt);\r\n curve.OCS = new Matrix4();\r\n }\r\n curve.ClearDraw();\r\n }\r\n\r\n this.WriteAllObjectRecord();\r\n this._contourCurve = curve;\r\n this.CheckContourCurve();\r\n this.Update();\r\n }\r\n CheckContourCurve()\r\n {\r\n let box = this._contourCurve.BoundingBox;\r\n\r\n //修正轮廓基点\r\n if (!equalv3(box.min, ZeroVec))\r\n {\r\n this._contourCurve.Position =\r\n this._contourCurve.Position.sub(box.min);\r\n\r\n let v = box.min.applyMatrix4(this.OCS.setPosition(ZeroVec));\r\n this._Matrix.setPosition(this.Position.add(v));\r\n }\r\n }\r\n Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this.IsErase) return;\r\n super.Erase(isErase);\r\n if (!isErase) return;\r\n\r\n if (this.OtherHalfTongKong && !this.OtherHalfTongKong.IsErase)\r\n {\r\n let cy = this.OtherHalfTongKong.Object as this;\r\n cy.isThrough = false;\r\n cy.OtherHalfTongKong = null;\r\n }\r\n }\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let cu = this.ContourCurve;\r\n cu.ApplyMatrix(this.OCS);\r\n cu.ApplyMatrix(m);\r\n cu.ApplyMatrix(this.OCSInv);\r\n this.CheckContourCurve();\r\n this.Update();\r\n return this;\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n if (this._contourCurve instanceof Circle)\r\n return this.GetGripPoints();\r\n return this.GetStretchPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Cen:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n case ObjectSnapMode.Tan:\r\n {\r\n let contour = this.ContourCurve.Clone();\r\n contour.ApplyMatrix(this.OCS);\r\n let pts = contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n\r\n contour.Position = contour.Position.add(this.Normal.multiplyScalar(this.Height));\r\n pts.push(\r\n ...contour.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform)\r\n );\r\n if (snapMode === ObjectSnapMode.Mid)\r\n pts.push(...contour.GetStretchPoints().map(p => p.add(this.Normal.multiplyScalar(-this.Height / 2))));\r\n return pts;\r\n }\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n get DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\r\n }\r\n get Shape()\r\n {\r\n let contour = Contour.CreateContour(this.ContourCurve.Clone(), false);\r\n\r\n return new Shape(contour);\r\n }\r\n get BoundingBoxInOCS()\r\n {\r\n let box = new Box3Ext().copy(this.ContourCurve.BoundingBox);\r\n box.max.add(new Vector3(0, 0, this.Height));\r\n return box;\r\n }\r\n get BoundingBox()\r\n {\r\n let box = this.ContourCurve.BoundingBox;\r\n box.max.add(new Vector3(0, 0, this.Height));\r\n box.applyMatrix4(this.OCSNoClone);\r\n return box;\r\n }\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n let pts = [this.ContourCurve.Shape.getPoints(6).map(AsVector3)];\r\n this._EdgeGeometry = GenerateExtrudeEdgeGeometry(pts, this.Height).applyMatrix4(this._contourCurve.OCSNoClone);\r\n return this._EdgeGeometry;\r\n }\r\n private _MeshGeometry: BufferGeometry | Geometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n this._MeshGeometry = this.GeneralMeshGeometry();\r\n return this._MeshGeometry;\r\n }\r\n private GeneralMeshGeometry()\r\n {\r\n let extrudeSettings: ExtrudeGeometryOptions = {\r\n curveSegments: 6,\r\n steps: 1,\r\n bevelEnabled: false,\r\n depth: this.Height,\r\n UVGenerator: worldUVGenerator,\r\n };\r\n if (this.ContourCurve instanceof Circle || this.ContourCurve instanceof Polyline)\r\n {\r\n this.ContourCurve.DisplayAccuracy = this._DisplayAccuracy;\r\n }\r\n let geo = new ExtrudeGeometry(this.ContourCurve.Shape, extrudeSettings);\r\n geo.applyMatrix4(this._contourCurve.OCSNoClone);\r\n\r\n let mtl = this.Material?.Object as PhysicalMaterialRecord ?? this.Db?.DefaultMaterial;\r\n if (mtl?.UseWorldUV)\r\n {\r\n let bgeo = new BufferGeometry().fromGeometry(geo);\r\n let gen = new GenUVForWorld();\r\n gen.GenGeoUV(bgeo, mtl.Material);\r\n return bgeo;\r\n }\r\n else\r\n ScaleUV(geo);\r\n return geo;\r\n }\r\n GetGripOrStretchPoints(dragType: DragPointType)\r\n {\r\n let isGrip = dragType === DragPointType.Grip;\r\n\r\n let pts = isGrip ? this.ContourCurve.GetGripPoints() : this.ContourCurve.GetStretchPoints();\r\n let v = new Vector3(0, 0, this.Height);\r\n pts.push(...pts.map(p => p.clone().add(v)));\r\n pts.forEach(p => { p.applyMatrix4(this.OCSNoClone); });\r\n\r\n return pts;\r\n }\r\n private GetStrectchPointCountList(dragType: DragPointType): number\r\n {\r\n return this.ContourCurve.GetDragPointCount(dragType) * 2;\r\n }\r\n MoveGripOrStretchPoints(indexList: number[], vec: Vector3, dragType: DragPointType)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (dragType === DragPointType.Stretch && indexList.length === this.GetStrectchPointCountList(dragType))\r\n {\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n arraySortByNumber(indexList);\r\n this.MoveGripOrStretchPointsOnly(indexList, vec, dragType);\r\n this.CheckContourCurve();\r\n this.Update();\r\n }\r\n IsStretchHeight(indexs: number[])\r\n {\r\n let count = this.ContourCurve.GetStretchPoints().length;\r\n if (indexs.length === count)\r\n {\r\n let isF = indexs[0] < count;\r\n return indexs.every(i => isF === (i < count));\r\n }\r\n return false;\r\n }\r\n MoveGripOrStretchPointsOnly(indexList: Array<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.DrawColorIndex));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n\r\n return new Object3D().add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())\r\n );\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n return mesh;\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D().add(...FastWireframe2(this));\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return new Object3D().add(...this.GetPrintObject3D());\r\n }\r\n }\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n\r\n if (renderType !== RenderType.Wireframe)\r\n Object3DRemoveAll(obj);\r\n\r\n this._EdgeGeometry = undefined;\r\n this._MeshGeometry = undefined;\r\n this.MeshGeometry;\r\n\r\n if (renderType === RenderType.Wireframe || 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.DrawColorIndex);\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n obj.add(...this.GetPrintObject3D());\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.geometry = this.MeshGeometry;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n\r\n Object.defineProperty(mesh, \"castShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n Object.defineProperty(mesh, \"receiveShadow\", {\r\n get: () => this.CaseShadow\r\n });\r\n\r\n return obj.add(\r\n mesh,\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetPhysical2EdgeMaterial())\r\n );\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n obj.add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n }\r\n 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.DrawColorIndex);\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.DrawColorIndex);\r\n }\r\n }\r\n\r\n ClearDraw(): this\r\n {\r\n if (this._EdgeGeometry)\r\n this._EdgeGeometry.dispose();\r\n this._EdgeGeometry = undefined;\r\n if (this._MeshGeometry)\r\n this._MeshGeometry.dispose();\r\n this._MeshGeometry = undefined;\r\n return super.ClearDraw();\r\n }\r\n\r\n get OBB(): OBB\r\n {\r\n let size = this.ContourCurve.BoundingBox.getSize(new Vector3).setZ(this.Height);\r\n return new OBB(this.OCS, size.multiplyScalar(0.5));\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n this._contourCurve = file.ReadObject() as ExtrudeContourCurve;\r\n this._knifeRadius = file.Read();\r\n if (ver > 1)\r\n {\r\n this.isHole = file.Read();\r\n }\r\n if (ver > 2)\r\n this.isThrough = file.Read();\r\n\r\n if (ver > 3)\r\n this.type = file.Read();\r\n else\r\n this.type = GangDrillType.Ljg;\r\n\r\n //回退版本5弃用\r\n if (ver > 4)\r\n {\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n file.ReadSoftObjectId();\r\n }\r\n\r\n if (ver > 5)\r\n {\r\n this._GoodsId = file.Read();\r\n this._GoodsSn = file.Read();\r\n }\r\n\r\n if (ver > 6)\r\n {\r\n this._DisplayAccuracy = file.Read();\r\n }\r\n\r\n this.Update();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(7);\r\n file.WriteObject(this._contourCurve);\r\n file.Write(this._knifeRadius);\r\n file.Write(this.isHole);\r\n file.Write(this.isThrough);\r\n file.Write(this.type);\r\n\r\n //ver = 5 弃用\r\n file.Write(0);\r\n\r\n //ver = 6\r\n file.Write(this._GoodsId);\r\n file.Write(this._GoodsSn);\r\n\r\n //ver = 7\r\n file.Write(this._DisplayAccuracy);\r\n }\r\n}\r\n","import { arrayRemoveIf } from \"../Common/ArrayExt\";\r\nimport { AutoRecord, ISPROXYKEY } from \"./AutoRecord\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Entity } from \"./Entity/Entity\";\r\nimport { ObjectId } from \"./ObjectId\";\r\nimport { SymbolTableRecord } from \"./SymbolTableRecord\";\r\n\r\n@Factory\r\nexport class GroupRecord extends SymbolTableRecord\r\n{\r\n @AutoRecord Entitys: ObjectId[];\r\n\r\n constructor()\r\n {\r\n super();\r\n\r\n this.Entitys = new Proxy([], {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n {\r\n if (this.WriteAllObjectRecord())\r\n {\r\n if (value instanceof ObjectId && value.Object instanceof Entity)\r\n {\r\n if (!this.Id)\r\n console.warn(\"请先添加到Database后在进行操作!\");\r\n else\r\n value.Object.GroupId = this.Id;\r\n }\r\n }\r\n }\r\n return Reflect.set(target, key, value, receiver);\r\n },\r\n get: (target, key, receiver) =>\r\n {\r\n if (key === ISPROXYKEY)\r\n return true;\r\n return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (name !== this.name)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.name = name;\r\n }\r\n }\r\n\r\n Purge()\r\n {\r\n arrayRemoveIf(this.Entitys, id => !id || id.IsErase);\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n let count = file.Read() as number;\r\n\r\n this.Entitys.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Entitys.push(id);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.Write(this.Entitys.length);\r\n for (let id of this.Entitys)\r\n file.WriteObjectId(id);\r\n }\r\n\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\n\r\n//将嵌入的实体绘制对象添加到当前的绘制对象(由于内嵌的实体可能被重复引用)\r\nexport function AddEntityDrawObject(obj: Object3D, embedEntity: Entity, renderType: RenderType = RenderType.Wireframe)\r\n{\r\n let embedObject = embedEntity.GetDrawObjectFromRenderType(renderType);\r\n if (embedObject.parent)\r\n obj.children.push(embedObject);//为了避免这个内嵌实体加入到不同的Object中(因为我们有PrintObject),这个写法能行,是因为我们会在其他地方更新它的矩阵\r\n else\r\n obj.add(embedObject);\r\n}\r\n","import { Frustum, 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 { ObjectId } from \"../ObjectId\";\r\nimport { PhysicalMaterialRecord } from \"../PhysicalMaterialRecord\";\r\nimport { DragPointType } from \"./DragPointType\";\r\nimport { Entity } from \"./Entity\";\r\nimport { ExtrudeSolid } from \"./Extrude\";\r\n\r\n\r\n@Factory\r\nexport abstract class CompositeEntity extends Entity\r\n{\r\n constructor()\r\n {\r\n super();\r\n }\r\n //如果你需要修改内部实体,则需要写入记录\r\n @AutoRecord Entitys: Entity[] = [];\r\n\r\n /**\r\n * 返回对象在自身坐标系下的Box\r\n */\r\n override get BoundingBoxInOCS(): Box3Ext\r\n {\r\n //这个代码可能是错误的. 当复合实体是子实体时,复合实体的矩阵和世界坐标垂直,但是父实体没有垂直时,此时的结果是错误的 所以注释掉这个代码\r\n // if (\r\n // (equaln(this._Matrix.elements[0], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[1], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[2], 1, 1e-5)\r\n // //3\r\n // )\r\n // &&\r\n // (equaln(this._Matrix.elements[4], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[5], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[6], 1, 1e-5)\r\n // //7\r\n // )\r\n // &&\r\n // (equaln(this._Matrix.elements[8], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[9], 1, 1e-5) ||\r\n // equaln(this._Matrix.elements[10], 1, 1e-5)\r\n // )\r\n // )\r\n // return this.GetBoundingBoxInMtx(this.OCSInv);\r\n // else\r\n {\r\n let box = new Box3Ext;\r\n for (let e of this.Entitys)\r\n box.union(e.BoundingBoxInOCS.applyMatrix4(e.OCSNoClone));\r\n return box;\r\n }\r\n }\r\n\r\n //#region 绘制\r\n // OnlyRenderType = true; //我们现在不需要这样,因为我们每个绘制类型的Object的子实体都有子实体的渲染类型(唯一的缺点可能是渲染速度变慢了?)\r\n /**\r\n * 初始化绘制的threejs实体,子类型重载该函数初始化绘制实体.\r\n */\r\n override Explode()\r\n {\r\n return this.Entitys.map(e =>\r\n {\r\n if (!e.Db && this._db)\r\n e.SetDatabase(this._db);\r\n let cloneE = e.Clone(false);\r\n if (!(cloneE instanceof CompositeEntity))\r\n cloneE.Material = e.Material;\r\n return cloneE.ApplyMatrix(this.OCSNoClone);\r\n });\r\n }\r\n Traverse(callback: (arg0: Entity) => void)\r\n {\r\n callback(this);\r\n for (let en of this.Entitys)\r\n {\r\n if (en instanceof CompositeEntity)\r\n en.Traverse(callback);\r\n else\r\n callback(en);\r\n }\r\n }\r\n\r\n //实体在被内嵌时,它绘制对象的世界矩阵会被影响,所以这里我们不直接计算它的盒子,而是用绘制对象的盒子来计算包围盒,避免错误\r\n //例如 复合扫略实体 的ZoomObject在这个实现下是错误的(因为扫略实体也是直接取绘制对象的包围盒)\r\n // get BoundingBox()\r\n // {\r\n // let box = new Box3Ext();\r\n // for (let e of this.Entitys)\r\n // box.union(e.BoundingBox);\r\n // return box.applyMatrix4(this.OCSNoClone);\r\n // }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n /**\r\n * 如果复合实体里面有圆,并且使用了拉伸夹点功能,在UpdateDrawObject时,会因为无法得到Jig对象而导致的错误.\r\n * 索性我们去掉Jig实体的功能.\r\n */\r\n if (renderType === RenderType.Jig) return;\r\n\r\n let object = new Object3D();\r\n this.UpdateDrawObject(renderType, object);\r\n return object;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n Object3DRemoveAll(obj);\r\n if (renderType === RenderType.ModelGroove) return;\r\n for (let e of this.Entitys)\r\n {\r\n e.IsEmbedEntity = true;\r\n e.ParentEntity = this.ParentEntity || this;\r\n\r\n // //内嵌实体在某些时候可能被清理,修复它\r\n // if (e.DrawObject.children.length === 0)\r\n // e.ClearDraw();\r\n let rtype = renderType;\r\n if (renderType === RenderType.Print && e.IsOnlyRender)\r\n rtype += 100;\r\n\r\n let o = e.GetDrawObjectFromRenderType(rtype);\r\n if (o)\r\n {\r\n o.traverse(obj => obj.userData = {});\r\n AddEntityDrawObject(obj, e, rtype);\r\n }\r\n }\r\n }\r\n\r\n 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 SetAllMaterialAtSlot(mtl: ObjectId<PhysicalMaterialRecord>)\r\n {\r\n if (this.LockMaterial)\r\n return;\r\n this.WriteAllObjectRecord();\r\n this.Traverse(e =>\r\n {\r\n if (e === this)\r\n return;\r\n e.SetAllMaterialAtSlot(mtl);\r\n });\r\n\r\n this.Update(UpdateDraw.Material);\r\n }\r\n\r\n GetMtlLockedStatus()\r\n {\r\n let partMtlLocked = false;\r\n let allMtlLocked = true;\r\n this.Traverse(e =>\r\n {\r\n if (e === this)\r\n return;\r\n const res = e.GetMtlLockedStatus();\r\n if (res.partMtlLocked)\r\n {\r\n partMtlLocked = true;\r\n if (!res.allMtlLocked)\r\n allMtlLocked = false;\r\n }\r\n else\r\n allMtlLocked = false;\r\n });\r\n return {\r\n partMtlLocked,\r\n allMtlLocked,\r\n };\r\n }\r\n\r\n GetPhyMtlRecords()\r\n {\r\n const materials: PhysicalMaterialRecord[] = [];\r\n\r\n this.Traverse(e =>\r\n {\r\n if (e === this)\r\n return;\r\n const res = e.GetPhyMtlRecords();\r\n if (res.length)\r\n arrayPushArray(materials, res);\r\n });\r\n\r\n return materials;\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n this.Traverse(e =>\r\n {\r\n if (e === this)\r\n return;\r\n\r\n let o = e.GetDrawObjectFromRenderType(renderType);\r\n e.UpdateDrawObjectMaterial(renderType, o);\r\n });\r\n this.UpdateDrawObject(renderType, obj);\r\n }\r\n\r\n RestoreJigMaterial()\r\n {\r\n //我们不做任何事情,避免更新材质引起的重绘,因为我们没有实现Jig材质,所以我们也不需要还原它\r\n }\r\n\r\n //#endregion\r\n\r\n //#region 交互操作\r\n\r\n /**\r\n *\r\n * @param snapMode 捕捉模式(单一)\r\n * @param pickPoint const\r\n * @param lastPoint const\r\n * @param viewXform const 最近点捕捉需要这个变量\r\n * @returns object snap points\r\n */\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3,\r\n frustum?: Frustum,\r\n ): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n for (let e of this.Entitys)\r\n arrayPushArray(pts, e.Clone().ApplyMatrix(this.OCSNoClone).GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum));\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Array<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 if (v > 1)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this.Entitys.length);\r\n for (let e of this.Entitys)\r\n file.WriteObject(e);\r\n\r\n // ver2\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n //#endregion\r\n}\r\n","import { Matrix4 } from \"three\";\r\nimport { DefaultCompositeMetalsOption } from \"../../Editor/DefaultConfig\";\r\nimport { ICompHardwareOption } from \"../../UI/Components/RightPanel/RightPanelInterface\";\r\nimport { AutoRecord, AutoRecordObject } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { CompositeEntity } from \"../Entity/CompositeEntity\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { ObjectId } from \"../ObjectId\";\r\n\r\n@Factory\r\nexport class HardwareCompositeEntity extends CompositeEntity\r\n{\r\n @AutoRecordObject HardwareOption: ICompHardwareOption = { ...DefaultCompositeMetalsOption };\r\n /**\r\n * 备注\r\n */\r\n @AutoRecord DataList: [string, string][] = [];\r\n @AutoRecord RelevanceBoards: ObjectId[] = [];\r\n @AutoRecord RelevanceHardware: ObjectId[] = []; //当这个实体为复合板时,关联五金的信息\r\n @AutoRecord RelevanceHandle: ObjectId[] = []; //关联拉手\r\n /**\r\n *\r\n * @param [checkIsHole=false] true:只获取是孔的实体 false:返回所有实体\r\n * @param [checkFilter] 过滤函数\r\n * @returns\r\n */\r\n GetAllEntity(checkIsHole: boolean = false, checkFilter?: (e: Entity) => boolean)\r\n {\r\n let holes: Entity[] = [];\r\n for (let e of this.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n if (!checkIsHole || e.HardwareOption.isHole)\r\n holes.push(...e.GetAllEntity(checkIsHole, checkFilter).map(h => h.ApplyMatrix(this.OCSNoClone)));\r\n }\r\n else\r\n {\r\n if (!checkFilter || checkFilter(e))\r\n holes.push(e.Clone().ApplyMatrix(this.OCSNoClone));\r\n }\r\n }\r\n return holes;\r\n }\r\n\r\n ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n super.ApplyMirrorMatrix(m);\r\n\r\n //\"左\",\"右\"互换\r\n if (this.HardwareOption.model.includes(\"左\"))\r\n this.HardwareOption.model = this.HardwareOption.model.replace(\"左\", \"右\");\r\n else if (this.HardwareOption.model.includes(\"右\"))\r\n this.HardwareOption.model = this.HardwareOption.model.replace(\"右\", \"左\");\r\n\r\n return this;\r\n }\r\n\r\n\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let v = file.Read();\r\n\r\n this.HardwareOption.type = file.Read();\r\n this.HardwareOption.isSplite = file.Read();\r\n this.HardwareOption.isSplitePrice = file.Read();\r\n this.HardwareOption.color = file.Read();\r\n this.HardwareOption.material = file.Read();\r\n this.HardwareOption.name = file.Read();\r\n this.HardwareOption.roomName = file.Read();\r\n this.HardwareOption.cabinetName = file.Read();\r\n this.HardwareOption.costExpr = file.Read();\r\n this.HardwareOption.actualExpr = file.Read();\r\n this.HardwareOption.model = file.Read();\r\n this.HardwareOption.factory = file.Read();\r\n this.HardwareOption.brand = file.Read();\r\n this.HardwareOption.spec = file.Read();\r\n this.HardwareOption.count = file.Read();\r\n this.HardwareOption.comments = file.Read();\r\n this.HardwareOption.unit = file.Read();\r\n\r\n let count = file.Read();\r\n this.DataList.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let d: [string, string] = [\r\n file.Read(),\r\n file.Read()\r\n ];\r\n this.DataList.push(d);\r\n }\r\n\r\n if (v > 1)\r\n this.HardwareOption.isHole = file.Read();\r\n\r\n if (v > 2)\r\n {\r\n let count = file.Read();\r\n this.RelevanceBoards.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.RelevanceBoards.push(file.ReadSoftObjectId());\r\n }\r\n\r\n if (v > 3)\r\n {\r\n let count = file.Read();\r\n this.RelevanceHardware.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.RelevanceHardware.push(file.ReadSoftObjectId());\r\n }\r\n\r\n if (v > 4)\r\n {\r\n let count = file.Read();\r\n this.RelevanceHandle.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let objId = file.ReadObjectId();\r\n if (objId)\r\n this.RelevanceHandle.push(objId);\r\n }\r\n }\r\n\r\n if (v > 5)\r\n {\r\n this.HardwareOption.goodsId = file.Read();\r\n this.HardwareOption.goodsSn = file.Read();\r\n }\r\n }\r\n\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(6);\r\n\r\n file.Write(this.HardwareOption.type);\r\n file.Write(this.HardwareOption.isSplite);\r\n file.Write(this.HardwareOption.isSplitePrice);\r\n file.Write(this.HardwareOption.color);\r\n file.Write(this.HardwareOption.material);\r\n file.Write(this.HardwareOption.name);\r\n file.Write(this.HardwareOption.roomName);\r\n file.Write(this.HardwareOption.cabinetName);\r\n file.Write(this.HardwareOption.costExpr);\r\n file.Write(this.HardwareOption.actualExpr);\r\n file.Write(this.HardwareOption.model);\r\n file.Write(this.HardwareOption.factory);\r\n file.Write(this.HardwareOption.brand);\r\n file.Write(this.HardwareOption.spec);\r\n file.Write(this.HardwareOption.count);\r\n file.Write(this.HardwareOption.comments);\r\n file.Write(this.HardwareOption.unit);\r\n\r\n file.Write(this.DataList.length);\r\n for (let data of this.DataList)\r\n {\r\n file.Write(data[0]);\r\n file.Write(data[1]);\r\n }\r\n\r\n file.Write(this.HardwareOption.isHole);\r\n file.Write(this.RelevanceBoards.length);\r\n for (let id of this.RelevanceBoards)\r\n file.WriteSoftObjectId(id);\r\n\r\n file.Write(this.RelevanceHardware.length);\r\n for (let id of this.RelevanceHardware)\r\n file.WriteSoftObjectId(id);\r\n\r\n file.Write(this.RelevanceHandle.length);\r\n for (let id of this.RelevanceHandle)\r\n file.WriteSoftObjectId(id);\r\n\r\n file.Write(this.HardwareOption.goodsId);\r\n file.Write(this.HardwareOption.goodsSn);\r\n }\r\n}\r\n","\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 { 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 { 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 { Box3, Matrix4, Vector3 } from \"three\";\r\nimport { FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { ConverCircleToPolyline, IsRect, MergeCurvelist, equalCurve } from \"../../Common/CurveUtils\";\r\nimport { LogEnable } from \"../../Common/Log\";\r\nimport { MakeMirrorMtx } from \"../../Common/Matrix4Utils\";\r\nimport { Singleton } from \"../../Common/Singleton\";\r\nimport { ExtrudeHole } from \"../../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Board, IModeling } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { ExtrudeContourCurve, ExtrudeSolid } from \"../../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { ShapeManager } from \"../../DatabaseServices/ShapeManager\";\r\nimport { GetSideCuFaceMtx } from \"../../Geometry/Board2DModelCSG/BoardSideModelCSGBuilder\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { Route } from \"../../Geometry/CurveMap\";\r\nimport { ParseBoardSideFace } from \"../../Geometry/DrillParse/BoardGetFace\";\r\nimport { CanDrawHoleFuzz } from \"../../Geometry/DrillParse/CanDrawHoleFuzz\";\r\nimport { AsVector2, ZAxis, equaln, isParallelTo } from \"../../Geometry/GeUtils\";\r\nimport { RegionParse } from \"../../Geometry/RegionParse\";\r\nimport { FixIndex } from \"../../Nest/Common/Util\";\r\nimport { ConverToPtsBul } from \"../../Production/Convert2PtsBul\";\r\nimport { IOriginSideModelingData, ModelType, ParseArcBoardHoles } from \"../../Production/Product\";\r\nimport { BoolOpeartionType, isTargetCurInOrOnSourceCur } from \"../BoolOperateUtils\";\r\nimport { GetBoardContour } from \"../CalcEdgeSealing\";\r\nimport { IntersectOption } from \"../IntersectWith\";\r\nimport { GetCurveToInDir, GetOffsetCurves, OptimizeToolPath } from \"./OptimizeToolPath\";\r\n\r\n/**\r\n *计算走刀工具类\r\n */\r\nexport class FeedingToolPath extends Singleton\r\n{\r\n /**\r\n * 处理形状,内偏移\r\n * @param shape 造型Shape\r\n * @param knifRadius 刀半径/偏移距离\r\n * @param [isOut=true] 是否是最外轮廓,如果是,洞需要外偏移一个刀半径,多段线偏移保留不闭合轮廓\r\n */\r\n private HandleShape(shape: Shape, knifRadius: number, isOut: boolean, redundancyKnif = 0): Curve[]\r\n {\r\n let outline = shape.Outline.Curve;\r\n if (isOut)\r\n outline = outline.Clone();\r\n\r\n let dir = GetCurveToInDir(outline);\r\n\r\n let offsetCus: Curve[] = [outline];\r\n //获得形状外孔轮廓\r\n let holes: Contour[] = [];\r\n /**用于判断孤岛是否与外轮廓相交 */\r\n let holeOffsetCus: Curve[] = [];\r\n\r\n for (let h of shape.Holes)\r\n {\r\n if (!isOut)\r\n holes.push(h.Clone());\r\n else\r\n {\r\n let dir = -GetCurveToInDir(h.Curve);\r\n let cus: Curve[];\r\n if (h.Curve instanceof Circle)\r\n cus = h.Curve.GetOffsetCurves(knifRadius * dir);\r\n else\r\n cus = h.Curve.GetFeedingToolPath(knifRadius * dir);\r\n\r\n holeOffsetCus.push(...h.Curve.GetOffsetCurves(knifRadius * dir).filter(c => c.IsClose));\r\n\r\n holes.push(...this.GetContours(cus as Polyline[], offsetCus));\r\n }\r\n }\r\n\r\n let offsetDist = 0;\r\n\r\n let rectInfo = IsRect(outline);\r\n\r\n while (true)\r\n {\r\n let hasRedK = false;\r\n if ((!isOut || offsetDist >= knifRadius) && rectInfo)\r\n {\r\n hasRedK = true;\r\n offsetDist += knifRadius * 2 - redundancyKnif;\r\n }\r\n else\r\n offsetDist += knifRadius;\r\n\r\n //理论上最大的宽度为1220,所以2000已经是种仁慈.\r\n //更好的算法应该是, 如果线不在outline里面, 那么已经算是错误的,但是理论上如果线已经往外偏太多了,就一定会使得这个判断生效\r\n if (offsetDist > 2000)\r\n throw \"无法加工的造型!已经超过了最大的走刀范围2000!\";\r\n\r\n let retCus: Curve[] = [];\r\n\r\n let tempOffsetCus = GetOffsetCurves(outline, offsetDist * dir, rectInfo);\r\n retCus.push(...tempOffsetCus);\r\n\r\n //最后一次内偏移如果是矩形\r\n if (retCus.length === 0 && rectInfo && offsetDist > knifRadius)\r\n {\r\n const rectMinLengthHalf = Math.min(rectInfo.size.x, rectInfo.size.y) / 2;\r\n //如果最后一个矩形最小边区间一半小于刀半径减去冗余值的一半,则偏移到中心处切一次\r\n if (!equaln(offsetDist, rectMinLengthHalf, 1e-5) && offsetDist - rectMinLengthHalf - 1e-5 < knifRadius - redundancyKnif / 2)\r\n {\r\n retCus.push(...GetOffsetCurves(outline, rectMinLengthHalf * dir, rectInfo));\r\n }\r\n }\r\n\r\n if (retCus.length === 0) break;\r\n\r\n //是否和孤岛相交\r\n let isInt = false;\r\n for (let c of retCus)\r\n {\r\n if (holes.length > 0)\r\n {\r\n isInt = holes.some(h =>\r\n {\r\n let ipts = h.Curve.IntersectWith2(c, 0);\r\n return ipts.length > 0 || h.ContainerCurve(c, false, ipts);\r\n });\r\n\r\n if (isInt) break;\r\n }\r\n if (isOut && offsetDist === knifRadius)\r\n c.TempData = { isOut: true };\r\n offsetCus.push(c);\r\n }\r\n if (isInt)\r\n {\r\n //洞形状管理器\r\n let holesMg = new ShapeManager();\r\n if (isOut)\r\n holes = Shape.mergeContours(holes, false); //#I1MUQD 正好擦边的孔不合并\r\n holesMg.AppendShapeList(holes.map(h => new Shape(h)));\r\n let shapeMg = new ShapeManager();\r\n let cons = this.GetContours(retCus as Polyline[], offsetCus);\r\n shapeMg.AppendShapeList(cons.map(c => new Shape(c)));\r\n\r\n //testcode\r\n // let reg = new Region(shapeMg).Clone();\r\n // let reg2 = new Region(holesMg).Clone();\r\n // TestDraw(reg, 1);\r\n // TestDraw(reg2, 2);\r\n\r\n shapeMg.BoolOper(holesMg, BoolOpeartionType.Subtract);\r\n\r\n // let reg3 = new Region(shapeMg).Clone();\r\n // TestDraw(reg3, 3);\r\n\r\n for (let s of shapeMg.ShapeList)\r\n {\r\n if (isOut && tempOffsetCus.length > 1)\r\n s.Outline.Curve.TempData = { isOut: true };\r\n offsetCus.push(...this.HandleShape(s, knifRadius, false));\r\n }\r\n break;\r\n }\r\n }\r\n\r\n let vailHoles: Contour[] = [];\r\n\r\n //内偏(走刀方式)\r\n let outlineOffsetCusOfTool = GetOffsetCurves(outline, dir * knifRadius).filter(c => c.IsClose) as Curve[];\r\n let maxArea = Math.max(...(outlineOffsetCusOfTool.map(c => c.Area)));\r\n\r\n for (let i = 0; i < holes.length; i++)\r\n {\r\n let h = holes[i];\r\n //如果加工洞外圈和最外轮廓相交,则去掉\r\n if (h.Curve.IntersectWith(outline, 0).length > 0)\r\n continue;\r\n let isVail = true;\r\n //若最外轮廓内偏移一个刀半径的曲线 和最内轮廓相交或者被包含,则去掉.且不与洞曲线相等\r\n if (isOut)\r\n {\r\n let holeOffsetCurve = holeOffsetCus[i];//网洞走刀曲线\r\n for (let j = 0; j < outlineOffsetCusOfTool.length; j++)\r\n {\r\n let outlineCurveOffsetInside = outlineOffsetCusOfTool[j];\r\n if (h.Curve.IntersectWith(outlineCurveOffsetInside, 0).length > 0)\r\n {\r\n if (!(equalCurve(holeOffsetCurve, outlineCurveOffsetInside) || isTargetCurInOrOnSourceCur(outlineCurveOffsetInside as Polyline, h.Curve)))\r\n {\r\n isVail = false;\r\n break;\r\n }\r\n else if (isTargetCurInOrOnSourceCur(h.Curve, outlineCurveOffsetInside as Polyline))\r\n {\r\n offsetCus.push(outlineCurveOffsetInside);\r\n isVail = false;\r\n break;\r\n }\r\n }\r\n else if (holeOffsetCurve.Area > maxArea)\r\n {\r\n isVail = false;\r\n break;\r\n }\r\n }\r\n }\r\n if (isVail)\r\n vailHoles.push(h);\r\n }\r\n\r\n offsetCus.push(...vailHoles.map(h => h.Curve));\r\n return offsetCus;\r\n }\r\n\r\n /**用于测试走刀路径 */\r\n TestCalcPath(br: Board, isCd = false, rk = 0)\r\n {\r\n let modelings = br.BoardModeling;\r\n let { modeling } = GetModelingFromCustomDrill(br);\r\n modelings.push(...modeling);\r\n if (isCd && HostApplicationServices.chaidanOption.useDefaultRad)\r\n modelings.forEach(m => m.knifeRadius = HostApplicationServices.chaidanOption.radius);\r\n if (isCd)\r\n arrayRemoveIf(modelings, m =>\r\n {\r\n let c = m.shape.Outline.Curve;\r\n if (m.shape.Holes.length === 0 && c instanceof Circle && c.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n return true;\r\n return false;\r\n });\r\n\r\n return this.CalcPath(modelings, br, rk);\r\n }\r\n\r\n /**\r\n * 计算走刀路径\r\n */\r\n CalcPath(modelings: IModeling[], br: Board, rk = 0): Curve[]\r\n {\r\n let cus: Curve[] = [];\r\n for (let m of modelings)\r\n {\r\n cus.push(...this.GetModelFeedPath(br, m, rk));\r\n }\r\n return cus;\r\n }\r\n\r\n //获取造型走刀\r\n GetModelFeedPath(br: { Thickness: number, ContourCurve: ExtrudeContourCurve; }, modeling: IModeling, redundancyKnif = 0): Curve[]\r\n {\r\n const brThickness = br.Thickness;\r\n let cus: Curve[] = [];//返回走刀路径\r\n let { shape, thickness, knifeRadius, addLen, addWidth, addDepth } = modeling;\r\n if (!knifeRadius) knifeRadius = 3;\r\n if (addDepth)\r\n thickness += addDepth;\r\n if (thickness < 1e-5) return cus;\r\n shape = shape.Clone();\r\n shape.Z0();\r\n this.GrooveAddSize(shape, addLen, addWidth);\r\n this.HandleThoughGroove(br.ContourCurve, shape, knifeRadius);\r\n\r\n //造型半径和刀半径相等,返回重合点的线\r\n let outline = shape.Outline.Curve;\r\n if (outline instanceof Circle && equaln(outline.Radius, modeling.knifeRadius))\r\n return [new Polyline([{ pt: AsVector2(outline.Center), bul: 0 }, { pt: AsVector2(outline.Center), bul: 0 }])];\r\n\r\n if (thickness >= brThickness) //通孔只切一刀\r\n {\r\n let dir = GetCurveToInDir(outline);\r\n let paths: Curve[];\r\n if (outline instanceof Circle)\r\n outline = ConverCircleToPolyline(outline);\r\n\r\n paths = outline.GetFeedingToolPath(dir * knifeRadius);\r\n for (let path of paths)\r\n {\r\n if (dir < 0)\r\n path.Reverse();\r\n\r\n // 有些走刀会变成一条线,或者某些地方退化成线,这个时候这个判断是错误的\r\n // if (!path.IsClockWise)\r\n // throw \"程序错误:全深网洞加工数据并不为逆时针!\";\r\n }\r\n cus.push(...paths);\r\n }\r\n else\r\n {\r\n let offsetCus = this.HandleShape(shape, knifeRadius, true, redundancyKnif);\r\n if (offsetCus.length > 1)\r\n cus.push(...OptimizeToolPath(offsetCus, shape, knifeRadius));\r\n }\r\n return cus;\r\n }\r\n\r\n //获取侧面造型走刀\r\n GetSideModelFeedPath(solid: ExtrudeSolid, faceContour: Polyline, redundancyKnif = 0): Curve[]\r\n {\r\n let cus: Curve[] = [];//返回走刀路径\r\n\r\n let shape = solid.Shape;\r\n let thickness = solid.Thickness;\r\n let knifeRadius = solid.KnifeRadius;\r\n let addLen = solid.GroovesAddLength;\r\n let addDepth = solid.GroovesAddDepth;\r\n let addWidth = solid.GroovesAddWidth;\r\n\r\n if (!knifeRadius) knifeRadius = 3;\r\n\r\n if (addDepth)\r\n thickness += addDepth;\r\n\r\n if (thickness < 1e-5) return cus;\r\n shape = shape.Clone().ApplyMatrix(solid.OCSNoClone);\r\n shape.Z0();\r\n this.GrooveAddSize(shape, addLen, addWidth);\r\n this.HandleThoughGroove(faceContour, shape, knifeRadius);\r\n\r\n //造型半径和刀半径相等,返回重合点的线\r\n let outline = shape.Outline.Curve;\r\n if (outline instanceof Circle && equaln(outline.Radius, knifeRadius))\r\n return [new Polyline([{ pt: AsVector2(outline.Center), bul: 0 }, { pt: AsVector2(outline.Center), bul: 0 }])];\r\n\r\n // {\r\n // todo 全深槽\r\n // }\r\n\r\n let offsetCus = this.HandleShape(shape, knifeRadius, true, redundancyKnif);\r\n if (offsetCus.length > 1)\r\n cus.push(...OptimizeToolPath(offsetCus, shape, knifeRadius));\r\n\r\n return cus;\r\n }\r\n\r\n private GrooveAddSize(shape: Shape, addLen: number, addWidth: number)\r\n {\r\n shape.Outline.Curve.Position = shape.Outline.Curve.Position.setZ(0);\r\n //若是矩形,应用槽加长\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 //检查正反面造型\r\n CheckModeling(br: Board)\r\n {\r\n let errorIndexs: number[] = [];\r\n let modelings = br.BoardModeling;\r\n for (let i = 0; i < modelings.length; i++)\r\n {\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n modelings[i].knifeRadius = HostApplicationServices.chaidanOption.radius;\r\n let m = modelings[i];\r\n let cu = m.shape.Outline.Curve;\r\n if (m.shape.Holes.length === 0 && cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n let cus = this.GetModelFeedPath(br, m);\r\n if (cus.length === 0)\r\n errorIndexs.push(i);\r\n }\r\n return errorIndexs;\r\n }\r\n\r\n //检查侧面造型\r\n CheckSideModeling(br: Board)\r\n {\r\n let allSideModelGrooveMap = br.AllSideModelGrooveMap;\r\n if (!allSideModelGrooveMap?.size) return [];\r\n\r\n let errorSideModel: ExtrudeSolid[] = [];\r\n\r\n let faces = new ParseBoardSideFace(br);\r\n\r\n let con = GetBoardContour(br);\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n const mirrorMtxZ = MakeMirrorMtx(ZAxis);\r\n\r\n for (let [n, solids] of allSideModelGrooveMap)\r\n {\r\n let faceContour = faces.Faces[n].Region.ShapeManager.ShapeList[0].Outline.Curve as Polyline;\r\n let mt4 = GetSideCuFaceMtx(cus[n], inverseZ);\r\n\r\n for (let solid of solids)\r\n {\r\n // 圆造型拆成孔\r\n // let cu = solid.Shape.Outline.Curve;\r\n // if (!solid.Shape.Holes.length && cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n // continue;\r\n\r\n let paths = this.GetSideModelFeedPath(solid, faceContour);//走刀路径\r\n if (!paths.length)\r\n {\r\n let s = solid.Clone();\r\n s.ApplyMatrix(mirrorMtxZ);\r\n s.ApplyMatrix(mt4);\r\n s.ApplyMatrix(br.OCS);\r\n errorSideModel.push(s);\r\n }\r\n }\r\n }\r\n return errorSideModel;\r\n }\r\n\r\n CheckCustomHole(br: Board)\r\n {\r\n let { modeling } = GetModelingFromCustomDrill(br);\r\n\r\n let errHoles: ExtrudeHole[] = [];\r\n\r\n for (let m of modeling)\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (m.shape.Holes.length === 0 && cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n m.knifeRadius = HostApplicationServices.chaidanOption.radius;\r\n let cus = this.GetModelFeedPath(br, m);\r\n if (cus.length === 0)\r\n errHoles.push(m.originEn);\r\n }\r\n\r\n return errHoles;\r\n }\r\n\r\n //当槽与板的边缘重叠时,因为刀的圆形加工特性,这里将造型加大,使得走刀的路径和板边缘平行\r\n HandleThoughGroove(brCon: ExtrudeContourCurve, shape: Shape, knifeRadius: number)\r\n {\r\n let outline = shape.Outline.Curve;\r\n if (outline instanceof Circle) return;\r\n\r\n let cus = outline.Explode();\r\n MergeCurvelist(cus);\r\n let hasChange = false;\r\n let curveBak: Curve;\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let c = cus[i];\r\n if (c instanceof Line)\r\n {\r\n let mp = (curveBak ?? c).Midpoint;\r\n curveBak = undefined;\r\n let param = brCon.GetParamAtPoint(mp);\r\n\r\n let curveOnContour = false;\r\n if (brCon.ParamOnCurve(param))\r\n {\r\n //#I7MYN9 在长的槽里面,我们防止它加长,短的槽就无所谓了\r\n if (c.Length > 100)\r\n {\r\n let curve = (brCon as Polyline).GetCurveAtParam(param);\r\n curveOnContour = curve.PtOnCurve(c.GetPointAtParam(0.2), 0.1) && curve.PtOnCurve(c.GetPointAtParam(0.8), 0.1);\r\n }\r\n else\r\n curveOnContour = true;\r\n }\r\n\r\n if (curveOnContour)\r\n {\r\n hasChange = true;\r\n let cs = c.GetOffsetCurves(knifeRadius);\r\n cus[i] = cs[0];\r\n let fline = cus[FixIndex(i - 1, cus.length)];\r\n\r\n let isAddLine = false;\r\n\r\n if (fline instanceof Line)\r\n {\r\n let intPts = fline.IntersectWith2(cs[0], 3);\r\n if (intPts.length === 0)\r\n {\r\n console.error(\"未知错误情况\");\r\n return;\r\n }\r\n\r\n if (intPts[0].thisParam >= 0 && intPts[0].argParam <= 1)\r\n {\r\n fline.EndPoint = intPts[0].pt;\r\n cs[0].StartPoint = intPts[0].pt;\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n\r\n if (isAddLine)\r\n {\r\n let newLine = new Line(fline.EndPoint, cs[0].StartPoint);\r\n if (i === 0)\r\n {\r\n cus.push(newLine);\r\n }\r\n else\r\n {\r\n cus.splice(i, 0, newLine);\r\n i++;\r\n }\r\n }\r\n\r\n let backLine = cus[FixIndex(i + 1, cus.length)];\r\n\r\n isAddLine = false;\r\n\r\n if (backLine instanceof Line)\r\n {\r\n let intPts = backLine.IntersectWith2(cs[0], 3);\r\n if (intPts.length === 0)\r\n {\r\n if (LogEnable.Display)\r\n console.error(\"在造型走刀的时候,尝试和前一条线求交时失败了!(未知情况,未处理)\");\r\n return;\r\n }\r\n\r\n if (intPts[0].thisParam <= 1 && intPts[0].argParam >= 0)\r\n {\r\n curveBak = backLine.Clone();\r\n backLine.StartPoint = intPts[0].pt;\r\n cs[0].EndPoint = intPts[0].pt;\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n }\r\n else\r\n {\r\n isAddLine = true;\r\n }\r\n if (isAddLine)\r\n {\r\n let newLine = new Line(cs[0].EndPoint, backLine.StartPoint);\r\n if (i + 1 === cus.length)\r\n {\r\n cus.unshift(newLine);\r\n }\r\n else\r\n {\r\n cus.splice(i + 1, 0, newLine);\r\n i++;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (hasChange)\r\n {\r\n let con = Contour.CreateContour(Polyline.Combine(cus));\r\n if (con)\r\n shape.Outline = con;\r\n else\r\n console.error(\"在造型走刀时构建轮廓失败了!(未知情况,未处理)\");\r\n }\r\n }\r\n}\r\n\r\nexport function GetModelingFromCustomDrill(br: Board)\r\n{\r\n let normal = br.Normal;\r\n let brInv = br.OCSInv;\r\n let originOutline = GetBoardContour(br) as Polyline;\r\n let outline = originOutline;\r\n\r\n let modeling: (IModeling & { originEn: ExtrudeHole; })[] = [];\r\n let sideModeling: IOriginSideModelingData[] = [];\r\n\r\n const holes: ExtrudeHole[] = [];\r\n let bbox = br.BoundingBoxInOCS;\r\n\r\n let holeBoxMap = new WeakMap<ExtrudeHole, Box3Ext>();\r\n\r\n if (br.IsArcBoard && br.DrillList.size)\r\n ParseArcBoardHoles(br, new Vector3);\r\n\r\n const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption;\r\n\r\n for (let [objetId, idss] of br.DrillList)\r\n {\r\n let linkBoard = objetId?.Object as Board;\r\n if (cancelHoleProcessing && linkBoard)\r\n {\r\n const [L, W, H] = [linkBoard.BoardProcessOption.spliteHeight, linkBoard.BoardProcessOption.spliteWidth, linkBoard.BoardProcessOption.spliteThickness];\r\n if ((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H))\r\n continue;\r\n }\r\n\r\n for (let ids of idss)\r\n {\r\n for (let id of ids)\r\n {\r\n if (!id?.Object || id.Object.IsErase)\r\n continue;\r\n\r\n let hole = id.Object;\r\n\r\n if (hole instanceof ExtrudeHole && hole.isHole)\r\n {\r\n if (!(hole.ContourCurve instanceof Circle))\r\n {\r\n hole[\"__CacheChaiDanName__\"] = ids.Name;\r\n if (br.IsArcBoard)\r\n {\r\n let ocs = hole[\"__CacheBrOCS__\"];\r\n if (!ocs) continue;\r\n\r\n brInv = new Matrix4().getInverse(ocs);\r\n let holeBox = hole.GetBoundingBoxInMtx(brInv);\r\n holeBoxMap.set(hole, holeBox);\r\n if (hole.BoundingBox.clone().intersect(br.BoundingBox).isSolid(0.1))\r\n holes.push(hole);\r\n }\r\n else\r\n {\r\n let holeBox = hole.GetBoundingBoxInMtx(brInv);\r\n holeBoxMap.set(hole, holeBox);\r\n if (holeBox.clone().intersect(bbox).isSolid(0.1))\r\n holes.push(hole);\r\n }\r\n continue;\r\n }\r\n }\r\n\r\n hole[\"__CacheAddPos__\"] = undefined;\r\n hole[\"__CacheBrOCS__\"] = undefined;\r\n hole[\"__CacheContour__\"] = undefined;\r\n }\r\n }\r\n }\r\n\r\n\r\n for (let hole of holes)\r\n {\r\n let box = holeBoxMap.get(hole);\r\n let max = box.max;\r\n let min = box.min;\r\n let dir: FaceDirection;\r\n let shape = hole.Shape;\r\n\r\n let faceRegions: Polyline[];\r\n let faceRegionsBox: Box3;\r\n let addPos: Vector3;\r\n\r\n let chaiDanName: string = hole[\"__CacheChaiDanName__\"];\r\n hole[\"__CacheChaiDanName__\"] = undefined;\r\n\r\n if (br.IsArcBoard)\r\n {\r\n addPos = hole[\"__CacheAddPos__\"];\r\n faceRegions = hole[\"__CacheContour__\"];\r\n let ocs = hole[\"__CacheBrOCS__\"];\r\n\r\n hole[\"__CacheAddPos__\"] = undefined;\r\n hole[\"__CacheBrOCS__\"] = undefined;\r\n hole[\"__CacheContour__\"] = undefined;\r\n\r\n if (!ocs || !addPos || !faceRegions?.length)\r\n return;\r\n else\r\n {\r\n brInv = new Matrix4().getInverse(ocs);\r\n normal = new Vector3().setFromMatrixColumn(ocs, 2);\r\n\r\n faceRegionsBox = new Box3();\r\n for (let pl of faceRegions)\r\n faceRegionsBox.union(pl.BoundingBox);\r\n\r\n let boxSize = faceRegionsBox.getSize(new Vector3);\r\n let extrude = Board.CreateBoard(boxSize.y, boxSize.x, 1);\r\n outline = extrude.ContourCurve as Polyline;\r\n }\r\n }\r\n\r\n let diff = brInv.clone().multiply(hole.OCS);\r\n shape.ApplyMatrix(diff);\r\n let thickness: number;\r\n if (isParallelTo(normal, hole.Normal))\r\n {\r\n if (min.z > br.Thickness - 1e-6) continue;\r\n\r\n //在板件的世界,0.01的误差应该不能被看出来,所以我们允许0.01的容差(这样应该是没问题的)\r\n //也避免了一些二维转三维出现的缝隙排钻不能被拆解的问题\r\n if (max.z >= br.Thickness - CanDrawHoleFuzz)\r\n {\r\n dir = FaceDirection.Front;\r\n shape.Position = shape.Position.setZ(min.z);\r\n thickness = br.Thickness - min.z;\r\n }\r\n else if (min.z < CanDrawHoleFuzz)\r\n {\r\n dir = FaceDirection.Back;\r\n thickness = max.z;\r\n }\r\n else\r\n continue;\r\n\r\n if (thickness > 1e-6 && isTargetCurInOrOnSourceCur(outline, shape.Outline.Curve.Clone().Z0()))\r\n {\r\n if (br.IsArcBoard)\r\n {\r\n //弧形板需要单独增加差值\r\n shape.Position = shape.Position.add(addPos);\r\n\r\n if (br.SweepAngle)\r\n {\r\n let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx);\r\n shape.ApplyMatrix(ocsInv);\r\n }\r\n }\r\n\r\n modeling.push({\r\n shape,\r\n thickness,\r\n dir,\r\n knifeRadius: hole.KnifeRadius,\r\n addLen: 0,\r\n originEn: hole,\r\n });\r\n }\r\n }\r\n else\r\n {\r\n if (min.z <= 0 || max.z >= br.Thickness) continue;\r\n let spt = hole.Position.applyMatrix4(brInv).setZ(0);\r\n // 有可能Z向量朝向轮廓内部\r\n // if (outline.PtOnCurve(spt)) continue;\r\n\r\n let line = new Line(spt, hole.Position.add(hole.Normal.multiplyScalar(hole.Height)).applyMatrix4(brInv).setZ(0));\r\n let pt = outline.IntersectWith(line, IntersectOption.ExtendNone, 1e-5)[0];\r\n if (!pt) continue;\r\n\r\n let thickness = 0;\r\n for (let p of [line.StartPoint, line.EndPoint])\r\n {\r\n if (outline.PtInCurve(p))\r\n {\r\n thickness = p.distanceTo(pt);\r\n break;\r\n }\r\n }\r\n\r\n //漏网之鱼 过滤掉不在板内的排钻 :677计算的弧形板包围盒不准确导致\r\n if (thickness < 1e-3) continue;\r\n\r\n let index = Math.floor(outline.GetParamAtPoint(pt));\r\n\r\n let vec = line.GetFirstDeriv(0).normalize().multiplyScalar(thickness);\r\n shape.Position = shape.Position.add(vec);\r\n\r\n if (br.IsArcBoard)\r\n {\r\n //弧形板需要单独增加差值\r\n shape.Position = shape.Position.add(addPos);\r\n pt = pt.add(addPos);\r\n\r\n if (br.SweepAngle)\r\n {\r\n let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx);\r\n pt.applyMatrix4(ocsInv);\r\n shape.ApplyMatrix(ocsInv);\r\n }\r\n }\r\n\r\n if (br.IsArcBoard)\r\n {\r\n //侧面造型仅在多段线直线上\r\n //因为侧面造型起点特殊性 要处理一下\r\n index = Math.floor(originOutline.GetParamAtPoint(pt));\r\n let cu = originOutline.GetCurveAtIndex(index);\r\n\r\n if (cu)\r\n shape.ApplyMatrix(new Matrix4().getInverse(GetSideCuFaceMtx(cu)));\r\n else\r\n {\r\n console.error(\"圆弧板非圆侧孔求交失败\");\r\n continue;\r\n }\r\n }\r\n else\r\n {\r\n let cu = outline.GetCurveAtIndex(index);\r\n shape.ApplyMatrix(new Matrix4().getInverse(GetSideCuFaceMtx(cu)));\r\n }\r\n\r\n sideModeling.push({\r\n outline: ConverToPtsBul(shape.Outline.Curve, false),\r\n holes: shape.Holes.map((cu) => ConverToPtsBul(cu.Curve, false)),\r\n thickness,\r\n dir: index,\r\n knifeRadius: hole.KnifeRadius,\r\n addLen: 0,\r\n addDepth: 0,\r\n addWidth: 0,\r\n chaiDanName,\r\n modelType: ModelType.drill\r\n });\r\n }\r\n }\r\n\r\n return { modeling, sideModeling };\r\n}\r\n","import { Box3, Matrix4, Vector2, Vector3 } from \"three\";\r\nimport { SplitPolyline } from \"../Add-on/BoardCutting/SplitPolyline\";\r\nimport { FaceDirection } from \"../Add-on/DrawDrilling/DrillType\";\r\nimport { SCALAR } from \"../Add-on/DrawDrilling/HoleUtils\";\r\nimport { lookOverBoardInfosTool } from \"../Add-on/LookOverBoardInfos/LookOverBoardInfosTool\";\r\nimport { HostApplicationServices } from \"../ApplicationServices/HostApplicationServices\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { InteractionLog, LogType } from \"../Common/Log\";\r\nimport { Intent, Toaster, ToasterShowEntityMsg } from \"../Common/Toaster\";\r\nimport { FixedNotZero } from \"../Common/Utils\";\r\nimport { ParseExpr, safeEval } from \"../Common/eval\";\r\nimport { CylinderHole, GangDrillType } from \"../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { ExtrudeHole } from \"../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Hole } from \"../DatabaseServices/3DSolid/Hole\";\r\nimport { Contour } from \"../DatabaseServices/Contour\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Board, I2DModeingItem, IKnifeInfo, IModeling } from \"../DatabaseServices/Entity/Board\";\r\nimport { BoardOpenDir } from \"../DatabaseServices/Entity/BoardInterface\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { ExtrudeContourCurve } from \"../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { GroupRecord } from \"../DatabaseServices/GroupTableRecord\";\r\nimport { HardwareCompositeEntity } from \"../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { HardwareTopline } from \"../DatabaseServices/Hardware/HardwareTopline\";\r\nimport { Shape } from \"../DatabaseServices/Shape\";\r\nimport { ParseBoardSideFace } from \"../Geometry/DrillParse/BoardGetFace\";\r\nimport { CanDrawHoleFuzz } from \"../Geometry/DrillParse/CanDrawHoleFuzz\";\r\nimport { AsVector2, IsBetweenA2B, MoveMatrix, XAxis, angle, angleTo, equaln, equalv2, equalv3, isIntersect2, isParallelTo, isPerpendicularityTo } from \"../Geometry/GeUtils\";\r\nimport { BrSealedData, 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\nexport interface I3DContourData\r\n{\r\n pts: Vector3[];\r\n buls: number[];\r\n}\r\nexport type IHardwareType = HardwareTopline | HardwareCompositeEntity;\r\n\r\n\r\nexport interface IModelingData\r\n{\r\n feeding: IContourData[];\r\n thickness: number;\r\n dir: FaceDirection | number;\r\n knifeRadius: number;\r\n origin: IOriginModelingData;\r\n}\r\n\r\nexport interface IDrillingOption\r\n{\r\n position: Vector3;\r\n radius: number;\r\n type: GangDrillType;\r\n depth: number;\r\n face: FaceDirection;\r\n endPt?: Vector3;\r\n angle?: number;\r\n name: string;\r\n goodsId?: string;\r\n}\r\n\r\nexport interface IBoardHoleInfo\r\n{\r\n frontBackHoles: IDrillingOption[];\r\n sideHoles: IDrillingOption[];\r\n}\r\n\r\ninterface IBoardProdInfo\r\n{\r\n id: number;\r\n name: string;\r\n [EBoardKeyList.RoomName]: string;\r\n [EBoardKeyList.CabinetName]: string;\r\n [EBoardKeyList.Mat]: string;\r\n [EBoardKeyList.BrMat]: string;\r\n [EBoardKeyList.Color]: string;\r\n [EBoardKeyList.Lines]: number;\r\n [EBoardKeyList.DrillType]: string;\r\n [EBoardKeyList.Thick]: number;\r\n spliteHeight: string;\r\n spliteThickness: string;\r\n spliteWidth: string;\r\n\r\n isRect: boolean;\r\n remarks: [string, string][];\r\n kaiLiaoWidth: number;\r\n kaiLiaoHeight: number;\r\n openDir: BoardOpenDir;\r\n}\r\n\r\nexport interface I2DModeling\r\n{\r\n path: IContourData;\r\n dir: FaceDirection;\r\n items: I2DModeingItem[];\r\n}\r\nexport interface I3DModeling\r\n{\r\n path: I3DContourData;\r\n dir: FaceDirection;\r\n knife: IKnifeInfo;\r\n}\r\n\r\n/**拆单数据 */\r\nexport interface ISpliteOrderData\r\n{\r\n info: IBoardProdInfo; //板件基本信息\r\n outline: IContourData; //拆单轮廓信息\r\n sealing: ISealingData[]; //封边信息\r\n boardEdgeRemark: IHighEdgeRemarkItem[]; //板边备注信息\r\n modeling: IModelingData[]; //造型信息\r\n curveBoardModeling: IModeling[];\r\n holes: IBoardHoleInfo; //孔信息\r\n sideModeling: IOriginSideModelingData[]; //侧面造型信息\r\n offsetTanslation: Vector3;\r\n originOutlin: IContourData; //不扣封边拆单原始轮廓\r\n metalsData?: { metals: number, comp: number; }; //板件五金\r\n boardContour: IContourData; //板件轮廓\r\n modeling2D: I2DModeling[];\r\n modeling3D: I3DModeling[];\r\n}\r\n\r\nexport interface IBoardMetalsData\r\n{\r\n metals: ISpliteHardwareData[];\r\n comp: ISpliteHardwareData[];\r\n}\r\n\r\nexport interface ISpliteHardwareData\r\n{\r\n metalsOption: IHardwareOption;\r\n dataList: [string, string][];\r\n children: ISpliteHardwareData[];\r\n length?: number;\r\n size: Vector3;\r\n}\r\n\r\nexport interface IOriginModelingData\r\n{\r\n outline: IContourData,\r\n holes: IContourData[];\r\n thickness?: number;\r\n dir?: FaceDirection | number;\r\n knifeRadius?: number;\r\n addLen?: number;\r\n addWidth?: number;\r\n addDepth?: number;\r\n}\r\n\r\nexport interface IOriginSideModelingData extends IOriginModelingData\r\n{\r\n chaiDanName: string;\r\n modelType: ModelType;\r\n}\r\n\r\nexport enum ModelType\r\n{\r\n frontBackModel = 0, //正反面造型槽\r\n sideModel = 1,//绘制的侧槽造型\r\n drill = 2, //自定义排钻生成的非圆侧孔\r\n sideHoleModel = 3,//绘制的圆侧槽\r\n}\r\n\r\ninterface IChaiDanFeedingData extends IOriginModelingData\r\n{\r\n boardContour: IContourData;\r\n brThickness: number;\r\n}\r\n\r\nexport 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 const curveBoardModeling = br.ArcBoardModeling;\r\n\r\n //正反面造型 自定义不规则排钻孔\r\n let { modeling, sideModeling } = GetBoardModelingData(br, offsetTanslation, redundancyKnif, curveBoardModeling);\r\n //侧面造型\r\n let { sideModel, sideHole } = GetBoardSideModelingData(br, true);\r\n sideModeling.push(...sideModel);\r\n\r\n let boardContour: IContourData;\r\n if (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)\r\n {\r\n perSealData.reverse();\r\n\r\n //对应sealedOutlinePtsBul顺序 解析孔时翻转orgContour\r\n orgContour.Reverse();\r\n }\r\n\r\n let holes = GetBoardHolesData(br, offsetTanslation, orgContour);\r\n holes.sideHoles.push(...sideHole);\r\n\r\n return {\r\n info: GetBoardInfo(br, size),\r\n originOutlin: originOutlinePtsBul,//拼错了 未扣封边的点表\r\n outline: sealedOutlinePtsBul, //扣完封边的点表\r\n sealing: perSealData,//每段曲线的封边信息\r\n boardEdgeRemark: perBoardEdgeRemarkData, //每段曲线的板边备注信息\r\n modeling,\r\n curveBoardModeling,\r\n holes,\r\n sideModeling,\r\n offsetTanslation,\r\n metalsData: GetBoardMetals(br),\r\n boardContour,\r\n modeling2D: Get2DModeing(br, offsetTanslation),\r\n modeling3D: Get3DModeing(br, offsetTanslation),\r\n };\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 [EBoardKeyList.Thick]: br.Thickness,\r\n spliteHeight: spliteSize ? spliteSize.spliteHeight.toString() : \"\",\r\n spliteThickness: spliteSize ? spliteSize.spliteThickness.toString() : \"\",\r\n spliteWidth: spliteSize ? spliteSize.spliteWidth.toString() : \"\",\r\n isRect,\r\n remarks: data.remarks.slice(),\r\n kaiLiaoWidth: size.x,\r\n kaiLiaoHeight: size.y,\r\n openDir: br.OpenDir,\r\n };\r\n }\r\n\r\n export function GetMetalTotalEntitys(md: HardwareCompositeEntity, isHole = false, filter?: (e: Entity) => boolean)\r\n {\r\n let holes: Entity[] = [];\r\n if (isHole && !md.HardwareOption.isHole) return [];\r\n\r\n for (let e of md.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n if (!isHole || md.HardwareOption.isHole)\r\n holes.push(...GetMetalTotalEntitys(e, isHole, filter).map(h => h.ApplyMatrix(md.OCS)));\r\n }\r\n else\r\n {\r\n if (!filter || filter(e))\r\n {\r\n holes.push(e.Clone().ApplyMatrix(md.OCS));\r\n }\r\n }\r\n }\r\n return holes;\r\n }\r\n\r\n export function GetOriginBoardModelingData(br: Board)\r\n {\r\n const getModelings = (ms: IModeling[]): IOriginModelingData[] =>\r\n {\r\n let data: IOriginModelingData[] = [];\r\n\r\n for (let m of ms)\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (m.shape.Holes.length === 0 && cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n m.knifeRadius = HostApplicationServices.chaidanOption.radius;\r\n\r\n data.push({\r\n outline: ConverToPtsBul(cu, false),\r\n holes: m.shape.Holes.map(h => ConverToPtsBul(h.Curve, false)),\r\n thickness: m.thickness + (m.addDepth ?? 0),\r\n dir: m.dir,\r\n knifeRadius: m.knifeRadius,\r\n });\r\n\r\n }\r\n return data;\r\n };\r\n\r\n let allModeling = GetModelingFromCustomDrill(br);\r\n let modeling = getModelings([...br.BoardModeling, ...allModeling.modeling]);\r\n let sideModeling = GetBoardSideModelingData(br);\r\n\r\n return { modeling, sideModeling };\r\n }\r\n\r\n /**\r\n * 计算板的造型走刀数据(包括自定义排钻的走刀 侧面走刀)\r\n * @param br\r\n * @param offsetTanslation\r\n */\r\n export function GetBoardModelingData(br: Board, offsetTanslation: Vector3, redundancyKnif = 0, curveBoardModeling: IModeling[])\r\n {\r\n const tool = FeedingToolPath.GetInstance();\r\n const tMtx = MoveMatrix(offsetTanslation.clone().negate());\r\n const getModelings = (ms: IModeling[]): IModelingData[] =>\r\n {\r\n let data: IModelingData[] = [];\r\n\r\n for (let m of ms)\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (m.shape.Holes.length === 0 && cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n continue;\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n m.knifeRadius = HostApplicationServices.chaidanOption.radius;\r\n let paths = tool.GetModelFeedPath(br, m, redundancyKnif);//走刀路径\r\n paths.forEach(path => path.ApplyMatrix(tMtx));\r\n\r\n //走刀的ptsbuls\r\n let feeding = paths.map((c: ExtrudeContourCurve) => ConverToPtsBul(c, false));\r\n if (feeding.length > 0)\r\n data.push({\r\n feeding,\r\n thickness: m.thickness + (m.addDepth ?? 0),\r\n dir: m.dir,\r\n knifeRadius: m.knifeRadius,\r\n origin: {\r\n outline: ConverToPtsBul(cu, false),\r\n holes: m.shape.Holes.map(h => ConverToPtsBul(h.Curve, false)),\r\n addLen: m.addLen,\r\n addWidth: m.addWidth,\r\n addDepth: m.addDepth,\r\n }\r\n });\r\n else\r\n {\r\n Toaster({\r\n message: \"板件有造型或者自定义排钻无法加工,请运行造型检测命令<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, ...curveBoardModeling]).filter(f => f.feeding.length > 0);\r\n // 拆单值有效的板件勾选取消孔槽加工\r\n const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption;\r\n const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness];\r\n if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing)\r\n {\r\n modeling.length = 0;\r\n allModeling.sideModeling.length = 0;\r\n }\r\n return { modeling, sideModeling: allModeling.sideModeling };\r\n }\r\n\r\n export function GetBoardSideModelingData(br: Board, toaster = false)\r\n {\r\n let sideModel: IOriginSideModelingData[] = [];\r\n let sideHole: IDrillingOption[] = [];\r\n\r\n let hasSplitSize = (br.BoardProcessOption[EBoardKeyList.SpliteHeight]\r\n || br.BoardProcessOption[EBoardKeyList.SpliteWidth]\r\n || br.BoardProcessOption[EBoardKeyList.SpliteThickness]\r\n );\r\n\r\n let allSideModelGrooveMap = br.AllSideModelGrooveMap;\r\n\r\n //跳过有拆单尺寸板件 避免拆单错误\r\n if (!allSideModelGrooveMap.size || hasSplitSize) return { sideModel, sideHole };\r\n\r\n const tool = FeedingToolPath.GetInstance();\r\n let faces = new ParseBoardSideFace(br);\r\n\r\n for (let [num, solids] of allSideModelGrooveMap)\r\n {\r\n let faceContour = faces.Faces[num].Region.ShapeManager.ShapeList[0].Outline.Curve as Polyline;\r\n for (let solid of solids)\r\n {\r\n let cu = solid.Shape.Outline.Curve.Clone().ApplyMatrix(solid.OCSNoClone);\r\n let modelType = ModelType.sideModel;\r\n\r\n // 圆造型拆成孔类型\r\n if (!solid.Shape.Holes.length && cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n {\r\n let mtx = br.OCSInv.multiply(faces.Faces[num].OCS);\r\n let position = cu.Position.clone().applyMatrix4(mtx);\r\n let endPt = cu.Position.clone().setZ(-solid.Thickness).applyMatrix4(mtx);\r\n\r\n /**拆单那边需要把侧孔 z 坐标转换为从上到下 */\r\n InvertPosition(position, br.Thickness);\r\n InvertPosition(endPt, br.Thickness);\r\n // cu.ApplyMatrix(mtx);\r\n // TestDraw(cu);\r\n // TestDraw(new Point(position));\r\n // TestDraw(new Point(endPt));\r\n sideHole.push({\r\n position, //排钻开始位置\r\n endPt, //排钻结束的位置(在板的坐标系)\r\n radius: cu.Radius, //排钻半径\r\n depth: solid.Thickness, //排钻的插入深度\r\n face: num, //板在哪个边上\r\n name: \"\",\r\n type: null\r\n });\r\n\r\n continue;\r\n }\r\n\r\n let knifeRadius = solid.KnifeRadius;\r\n\r\n if (HostApplicationServices.chaidanOption.useDefaultRad)\r\n knifeRadius = HostApplicationServices.chaidanOption.radius;\r\n let paths = tool.GetSideModelFeedPath(solid, faceContour);//走刀路径\r\n\r\n if (paths.length)\r\n {\r\n sideModel.push({\r\n thickness: solid.Thickness + (solid.GroovesAddDepth ?? 0),\r\n dir: num,\r\n knifeRadius,\r\n outline: ConverToPtsBul(cu, false),\r\n holes: solid.Shape.Holes.map((cu) => ConverToPtsBul(cu.Curve.Clone().ApplyMatrix(solid.OCSNoClone), false)),\r\n addLen: solid.GroovesAddLength,\r\n addWidth: solid.GroovesAddWidth,\r\n addDepth: solid.GroovesAddDepth,\r\n chaiDanName: \"\",\r\n modelType,\r\n });\r\n }\r\n else if (toaster)\r\n {\r\n Toaster({\r\n message: \"板件有侧面造型或者自定义排钻无法加工,请运行造型检测命令<checkmodeing>确认\",\r\n timeout: 5000,\r\n intent: Intent.DANGER,\r\n key: \"侧面造型加工错误\"\r\n });\r\n }\r\n }\r\n }\r\n\r\n return { sideModel, sideHole };\r\n }\r\n\r\n //获得拆单尺寸\r\n export function 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 const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption;\r\n // 拆单值有效的板件勾选取消孔槽加工\r\n const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness];\r\n if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing)\r\n {\r\n return data;\r\n }\r\n let brNormal = br.Normal;\r\n\r\n // 性能优化的解析板件网洞类\r\n // new ParseBoardHoleData(br, offsetTanslation, sealedContour);\r\n\r\n //是弧形板件时解析排钻在路径的相对位置\r\n if (br.IsArcBoard && br.DrillList.size)\r\n {\r\n offsetTanslation = ParseArcBoardHoles(br, offsetTanslation);\r\n }\r\n\r\n for (let [key, driss] of br.DrillList)\r\n {\r\n let linkBoard = key?.Object as Board;\r\n if (cancelHoleProcessing && linkBoard)\r\n {\r\n const [L, W, H] = [linkBoard.BoardProcessOption.spliteHeight, linkBoard.BoardProcessOption.spliteWidth, linkBoard.BoardProcessOption.spliteThickness];\r\n if ((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H))\r\n {\r\n continue;\r\n }\r\n }\r\n for (let dris of driss)\r\n {\r\n for (let dId of dris)\r\n {\r\n if (!dId || dId.IsErase)\r\n continue;\r\n let d = dId.Object as CylinderHole;\r\n if (d instanceof ExtrudeHole)\r\n ParseExtrudeHoles(d, br, offsetTanslation, data, sealedContour);\r\n else\r\n ParseCylHoles(d, br, offsetTanslation, data, sealedContour);\r\n }\r\n }\r\n }\r\n\r\n if (br.RelativeHardware)\r\n {\r\n for (let dId of br.RelativeHardware)\r\n {\r\n if (dId.IsErase) continue;\r\n let d = dId.Object;\r\n let holes: Hole[] = [];\r\n if (d instanceof HardwareCompositeEntity)\r\n {\r\n holes.push(...GetMetalTotalEntitys(d, true, (e) => e instanceof Hole) as Hole[]);\r\n }\r\n for (let h of holes)\r\n {\r\n if (h instanceof ExtrudeHole)\r\n ParseExtrudeHoles(h, br, offsetTanslation, data, sealedContour, true, true);\r\n else\r\n ParseCylHoles(h as CylinderHole, br, offsetTanslation, data, sealedContour);\r\n }\r\n }\r\n }\r\n\r\n let modelings = br.BoardModeling;\r\n for (let nid of br.LayerNails)\r\n {\r\n if (!nid || !nid.Object || nid.IsErase)\r\n continue;\r\n let nail = nid.Object as CylinderHole;\r\n let linkBoard = nail.MId?.Object as Board;\r\n if (cancelHoleProcessing && linkBoard)\r\n {\r\n const [L, W, H] = [linkBoard.BoardProcessOption.spliteHeight, linkBoard.BoardProcessOption.spliteWidth, linkBoard.BoardProcessOption.spliteThickness];\r\n if ((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H))\r\n {\r\n continue;\r\n }\r\n }\r\n if (!isParallelTo(nail.Normal, brNormal, CanDrawHoleFuzz)) continue;\r\n\r\n let sp = nail.Position.applyMatrix4(br.OCSInv);\r\n let nor = nail.Normal.multiplyScalar(nail.Height);\r\n let ep = nail.Position.add(nor).applyMatrix4(br.OCSInv);\r\n let [z0, z1] = sp.z < ep.z ? [sp.z, ep.z] : [ep.z, sp.z];\r\n\r\n let face = !equalv3(nail.Normal, brNormal, CanDrawHoleFuzz) ? FaceDirection.Front : FaceDirection.Back;\r\n let depth = Math.min(z1, br.Thickness) - Math.max(z0, 0);\r\n\r\n if (\r\n Math.max(z0, 0) < Math.min(z1, br.Thickness) - 1e-6\r\n && br.ContourCurve.PtInCurve(sp.setZ(0))\r\n //层板钉中心点不在造型槽内\r\n && modelings.every(m =>\r\n {\r\n if (m.dir !== face && (depth + m.thickness) < br.Thickness)//不相交\r\n return true;\r\n\r\n // if (m.shape.Holes.some(h => h.Curve.PtInCurve(sp))) return true; //层板钉在孤岛内 现实中应该不会有\r\n return !m.shape.Outline.Curve.PtInCurve(sp);\r\n })\r\n )\r\n {\r\n\r\n data.frontBackHoles.push({\r\n type: nail.Type,\r\n position: sp.sub(offsetTanslation),\r\n radius: nail.Radius,\r\n depth,\r\n face,\r\n name: '层板钉'\r\n });\r\n }\r\n }\r\n\r\n for (let m of modelings)\r\n {\r\n let cu = m.shape.Outline.Curve;\r\n if (m.shape.Holes.length === 0 && cu instanceof Circle && cu.Radius < HostApplicationServices.chaidanOption.modeling2HoleRad + 1e-6)\r\n {\r\n let center = cu.Center.setZ(0).sub(offsetTanslation);\r\n data.frontBackHoles.push(\r\n {\r\n type: GangDrillType.Ljg,//设置为偏心轮导致我们分析大孔面方向和板的大孔面一致时错误,所以改成连接杆\r\n position: center,\r\n radius: cu.Radius,\r\n depth: m.thickness,\r\n face: m.dir as number,\r\n name: GetGroupName(cu)\r\n }\r\n );\r\n }\r\n }\r\n\r\n return data;\r\n }\r\n /**拆单那边需要把侧孔 z 坐标转换为从上到下 */\r\n function InvertPosition(pos: Vector3, thickness: number)\r\n {\r\n pos.z = thickness - pos.z;\r\n }\r\n function HoleInBoard(center: Vector3, radius: number, outline: ExtrudeContourCurve, allowPxl: boolean, isYMJ = false)\r\n {\r\n let cir = new Circle(center, radius - SCALAR);\r\n if (isYMJ)\r\n {\r\n return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center);\r\n }\r\n else\r\n {\r\n if (allowPxl || !HostApplicationServices.forceFilterPxl)\r\n return outline.IntersectWith(cir, 0).length > 1 || outline.PtInCurve(center);\r\n else\r\n return outline.IntersectWith(cir, 0).length === 0 && outline.PtInCurve(center);\r\n }\r\n }\r\n /**分析常规排钻 */\r\n function ParseCylHoles(cyHole: CylinderHole, br: Board, offsetTanslation: Vector3, data: IBoardHoleInfo, outline: ExtrudeContourCurve)\r\n {\r\n let brInv = br.OCSInv;\r\n let brNormal = br.Normal;\r\n let outlineWidth = br.Width;\r\n let outlineHeight = br.Height;\r\n let faceRegions: Polyline[];\r\n let faceRegionsBox: Box3;\r\n\r\n let addPos: Vector3;\r\n if (br.IsArcBoard)\r\n {\r\n addPos = cyHole[\"__CacheAddPos__\"];\r\n faceRegions = cyHole[\"__CacheContour__\"];\r\n let ocs = cyHole[\"__CacheBrOCS__\"];\r\n\r\n cyHole[\"__CacheAddPos__\"] = undefined;\r\n cyHole[\"__CacheBrOCS__\"] = undefined;\r\n cyHole[\"__CacheContour__\"] = undefined;\r\n\r\n if (!ocs || !addPos || !faceRegions?.length)\r\n return;\r\n else\r\n {\r\n brInv = new Matrix4().getInverse(ocs);\r\n brNormal = new Vector3().setFromMatrixColumn(ocs, 2);\r\n\r\n faceRegionsBox = new Box3();\r\n for (let pl of faceRegions)\r\n faceRegionsBox.union(pl.BoundingBox);\r\n\r\n let boxSize = faceRegionsBox.getSize(new Vector3);\r\n outlineWidth = boxSize.x;\r\n outlineHeight = boxSize.y;\r\n\r\n let extrude = Board.CreateBoard(boxSize.y, boxSize.x, 1);\r\n outline = extrude.ContourCurve;\r\n }\r\n }\r\n\r\n let brInvRo = new Matrix4().extractRotation(brInv);\r\n let position = cyHole.Position.applyMatrix4(brInv);\r\n let holes = data.frontBackHoles;\r\n let face: FaceDirection;//孔面方向\r\n let isPush = false;\r\n let endPt: Vector3;\r\n let depth = cyHole.Height;\r\n let diffMat = brInv.clone().multiply(cyHole.OCSNoClone);\r\n let x = new Vector3().setFromMatrixColumn(diffMat, 0);\r\n let angle = angleTo(XAxis, x);\r\n\r\n let cyNormal = cyHole.Normal.applyMatrix4(brInvRo);\r\n let pos2 = position.clone().add(cyNormal.multiplyScalar(depth));\r\n\r\n if (cyHole.Type === GangDrillType.Pxl || cyHole.Type === GangDrillType.WoodPXL)\r\n {\r\n if (isParallelTo(cyHole.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n if (!IsBetweenA2B(position.x, -cyHole.Radius, outlineWidth + cyHole.Radius, 1e-6)\r\n || !IsBetweenA2B(position.y, -cyHole.Radius, outlineHeight + cyHole.Radius, 1e-6)\r\n || !HoleInBoard(position.clone().setZ(0), cyHole.Radius, outline, cyHole.AllowPxl)) return;\r\n\r\n position.sub(offsetTanslation);\r\n\r\n //#region 求得真实的求交范围\r\n let z0 = position.z;\r\n let z1 = pos2.z;\r\n if (z0 > z1) [z0, z1] = [z1, z0];\r\n\r\n let i1 = Math.max(z0, 0);\r\n let i2 = Math.min(z1, br.Thickness);\r\n if (i2 - i1 < CanDrawHoleFuzz) return;//相交范围小于0.1\r\n\r\n if (equaln(i1, 0, CanDrawHoleFuzz)) face = FaceDirection.Back;\r\n else if (equaln(i2, br.Thickness, CanDrawHoleFuzz)) face = FaceDirection.Front;\r\n else return;//不在正面 也不在反面\r\n\r\n depth = i2 - i1;//真实的相交范围\r\n //#endregion\r\n\r\n isPush = true;\r\n }\r\n }\r\n else if (cyHole.Type === GangDrillType.Ljg || cyHole.Type === GangDrillType.Wood || cyHole.SameSideHole)\r\n {\r\n if (isPerpendicularityTo(cyHole.Normal, brNormal, CanDrawHoleFuzz))//侧孔\r\n {\r\n let z = position.z;\r\n if (!IsBetweenA2B(z, -cyHole.Radius, br.Thickness + cyHole.Radius, 1e-6)) return;\r\n\r\n let sp = position.clone().setZ(0); //真实数据\r\n let ep = position.clone().add(cyHole.Normal.multiplyScalar(cyHole.Height).applyMatrix4(brInvRo)).setZ(0); //真实数据\r\n let testLine = new Line(sp, ep);\r\n let iPt: Vector3;\r\n\r\n if (br.IsArcBoard)\r\n {\r\n if (faceRegions?.length)\r\n {\r\n for (let pl of faceRegions)\r\n {\r\n pl.UpdateOCSTo(new Matrix4().setPosition(faceRegionsBox.min));\r\n let newPl = new Polyline(pl.LineData);\r\n iPt = newPl.IntersectWith(testLine, 0, CanDrawHoleFuzz)[0];\r\n if (iPt)\r\n {\r\n outline = newPl;\r\n break;\r\n }\r\n }\r\n }\r\n else\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: \"侧孔与板无交点,无法加工该侧孔!\" }], LogType.Warning);\r\n return;\r\n }\r\n }\r\n else\r\n iPt = outline.IntersectWith(testLine, 0, CanDrawHoleFuzz)[0];\r\n\r\n if (!iPt)\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: \"侧孔与板无交点,无法加工该侧孔!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n position = iPt.clone().setZ(z);//排钻开始的位置\r\n for (let p of [sp, ep])\r\n {\r\n if (outline.PtInCurve(p))\r\n {\r\n endPt = p.setZ(z);//排钻插入后的位置\r\n break;\r\n }\r\n }\r\n if (!endPt)\r\n {\r\n //同侧面生成常规单头排钻 连接杆在Curve边缘时不提示错误\r\n if (!cyHole.SameSideHole)\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, cyHole] }, { msg: \"侧孔位置有问题,排钻不在板轮廓内!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n holes = data.sideHoles;\r\n face = Math.floor(outline.GetParamAtPoint(iPt));//板在那个边上\r\n isPush = true;\r\n depth = position.distanceTo(endPt);\r\n angle = undefined;\r\n\r\n InvertPosition(position, br.Thickness);\r\n InvertPosition(endPt, br.Thickness);\r\n }\r\n else if (cyHole.Type === GangDrillType.Wood)//木销\r\n {\r\n if (!outline.PtInCurve(position.clone().setZ(0))) return;\r\n position.sub(offsetTanslation);\r\n\r\n //#region 求得真实的求交范围\r\n let z0 = position.z;\r\n let z1 = pos2.z;\r\n if (z0 > z1) [z0, z1] = [z1, z0];\r\n\r\n let i1 = Math.max(z0, 0);\r\n let i2 = Math.min(z1, br.Thickness);\r\n if (i2 - i1 < CanDrawHoleFuzz) return;//相交范围小于0.1\r\n\r\n if (equaln(i1, 0, CanDrawHoleFuzz)) face = FaceDirection.Back;\r\n else if (equaln(i2, br.Thickness, CanDrawHoleFuzz)) face = FaceDirection.Front;\r\n else return;//不在正面 也不在反面\r\n\r\n depth = i2 - i1;//真实的相交范围\r\n //#endregion\r\n\r\n holes = data.frontBackHoles;\r\n isPush = true;\r\n }\r\n }\r\n else\r\n {\r\n if (isParallelTo(cyHole.Normal, brNormal, CanDrawHoleFuzz))\r\n {\r\n if (!IsBetweenA2B(position.x, -cyHole.Radius, outlineWidth + cyHole.Radius, CanDrawHoleFuzz)\r\n || !IsBetweenA2B(position.y, -cyHole.Radius, outlineHeight + cyHole.Radius, CanDrawHoleFuzz)\r\n || !isIntersect2(0, br.Thickness, position.z, pos2.z, -CanDrawHoleFuzz)\r\n || !HoleInBoard(position.clone().setZ(0), cyHole.Radius, outline, cyHole.AllowPxl, true)) return;\r\n\r\n position.sub(offsetTanslation);\r\n holes = data.frontBackHoles;\r\n face = !equalv3(cyHole.Normal, brNormal, CanDrawHoleFuzz) ? FaceDirection.Front : FaceDirection.Back;\r\n isPush = true;\r\n }\r\n }\r\n\r\n if (isPush)\r\n {\r\n if (br.IsArcBoard)\r\n {\r\n //弧形板需要单独增加差值\r\n position = position.add(addPos);\r\n endPt = endPt?.add(addPos);\r\n\r\n if (br.SweepAngle)\r\n {\r\n let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx);\r\n position.applyMatrix4(ocsInv);\r\n endPt?.applyMatrix4(ocsInv);\r\n }\r\n }\r\n\r\n holes.push({\r\n type: cyHole.Type,\r\n position,//排钻开始位置\r\n endPt, //排钻结束的位置(在板的坐标系)\r\n radius: cyHole.Radius,//排钻半径\r\n depth,//排钻的插入深度\r\n face,//板在哪个边上\r\n angle,\r\n name: GetGroupName(cyHole),\r\n goodsId: cyHole.GoodsId, //商品编号\r\n });\r\n }\r\n }\r\n\r\n /**分析自定义圆柱排钻\r\n *\r\n * isRelativeHardware 关联的五金使用此类型误差\r\n * CanDrawHoleFuzz)//区间交集必须大于CanDrawHoleFuzz\r\n * CanDrawHoleFuzz)//区间交集必须大于CanDrawHoleFuzz\r\n *\r\n */\r\n function ParseExtrudeHoles(d: ExtrudeHole, br: Board, offsetTanslation: Vector3, data: IBoardHoleInfo, outline: ExtrudeContourCurve, isCheckGroove = false, isRelativeHardware = false)\r\n {\r\n if (!d.isHole)\r\n return;\r\n\r\n let brInv = br.OCSInv;\r\n let brNormal = br.Normal;\r\n let cir = d.ContourCurve;\r\n\r\n let outlineWidth = br.Width;\r\n let outlineHeight = br.Height;\r\n\r\n let addPos: Vector3;\r\n let faceRegions: Polyline[];\r\n let faceRegionsBox: Box3;\r\n\r\n if (br.IsArcBoard)\r\n {\r\n addPos = d[\"__CacheAddPos__\"];\r\n faceRegions = d[\"__CacheContour__\"];\r\n let ocs = d[\"__CacheBrOCS__\"];\r\n\r\n d[\"__CacheAddPos__\"] = undefined;\r\n d[\"__CacheBrOCS__\"] = undefined;\r\n d[\"__CacheContour__\"] = undefined;\r\n\r\n if (!ocs || !addPos || !faceRegions?.length)\r\n return;\r\n else\r\n {\r\n brInv = new Matrix4().getInverse(ocs);\r\n brNormal = new Vector3().setFromMatrixColumn(ocs, 2);\r\n\r\n faceRegionsBox = new Box3();\r\n for (let pl of faceRegions)\r\n faceRegionsBox.union(pl.BoundingBox);\r\n\r\n let boxSize = faceRegionsBox.getSize(new Vector3);\r\n outlineWidth = boxSize.x;\r\n outlineHeight = boxSize.y;\r\n\r\n let extrude = Board.CreateBoard(boxSize.y, boxSize.x, 1);\r\n outline = extrude.ContourCurve;\r\n }\r\n }\r\n\r\n if (cir instanceof Circle)\r\n {\r\n let diffMtx = brInv.multiply(d.OCS);\r\n let nor = d.Normal;\r\n let sp = cir.Center.applyMatrix4(diffMtx);\r\n let ep = cir.Center.add(new Vector3(0, 0, d.Height)).applyMatrix4(diffMtx);\r\n let x = new Vector3().setFromMatrixColumn(diffMtx, 0);\r\n //#I2DPFO 在挖穿造型内的五金不加工\r\n const grooves = br.Grooves.filter(g => equaln(g.Thickness, br.Thickness));\r\n const groovesOutlines = isCheckGroove ? grooves.map(g => g.ContourCurve.Clone().ApplyMatrix(g.OCS).ApplyMatrix(br.OCSInv).Z0()) : [];\r\n\r\n if (isParallelTo(nor, brNormal, CanDrawHoleFuzz))//正反面孔\r\n {\r\n let z0 = Math.min(sp.z, ep.z);\r\n let z1 = Math.max(sp.z, ep.z);\r\n\r\n //检测排钻中心孔位与板轮廓outline交集关系时,不考虑offsetTanslation的差值 因为传进来的outline都不是封边轮廓\r\n let p = sp.clone().setZ(0);\r\n\r\n //区间没有交集\r\n if (!(Math.max(z0, 0) < (Math.min(z1, br.Thickness) - CanDrawHoleFuzz))) return;\r\n\r\n if (!(z0 < CanDrawHoleFuzz || z1 > (br.Thickness - CanDrawHoleFuzz)))//禁止在中间挖洞\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: \"的孔嵌在板中间,无法加工,已经跳过!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n if (!(outline.PtInCurve(p)))//在轮廓内\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: \"的孔不在板轮廓内,无法加工,已经跳过!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n if (groovesOutlines.some(g => g.PtInCurve(p)))//在洞内\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: \"的孔在造型内,无法加工,已经跳过!\" }], LogType.Warning);\r\n return;\r\n }\r\n\r\n p.sub(offsetTanslation);\r\n\r\n let depth = z0 < CanDrawHoleFuzz ? z1 : br.Thickness - z0;\r\n let angle = angleTo(XAxis, x);\r\n if (equaln(angle, Math.PI))\r\n angle = 0;\r\n if (depth > CanDrawHoleFuzz)\r\n {\r\n let position = z0 < CanDrawHoleFuzz ? p : p.setZ(br.Thickness);\r\n\r\n if (br.IsArcBoard)\r\n {\r\n //弧形板需要单独增加差值\r\n position = position.add(addPos);\r\n\r\n if (br.SweepAngle)\r\n {\r\n let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx);\r\n position.applyMatrix4(ocsInv);\r\n }\r\n }\r\n data.frontBackHoles.push({\r\n type: d.isThrough ? GangDrillType.TK : (isRelativeHardware ? GangDrillType.Ljg : d.Type),\r\n position,\r\n radius: cir.Radius,\r\n depth,\r\n face: z0 < CanDrawHoleFuzz ? FaceDirection.Back : FaceDirection.Front,\r\n angle: angle,\r\n name: GetGroupName(d)\r\n });\r\n }\r\n }\r\n else//侧孔\r\n {\r\n let oldZ = sp.z;\r\n let [minX, maxX] = sp.x < ep.x ? [sp.x, ep.x] : [ep.x, sp.x];\r\n let [minY, maxY] = sp.y < ep.y ? [sp.y, ep.y] : [ep.y, sp.y];\r\n\r\n if (sp.z > -cir.Radius\r\n && sp.z < br.Thickness + cir.Radius\r\n && Math.max(minX, 0) < (Math.min(outlineWidth, maxX) + (isRelativeHardware ? -CanDrawHoleFuzz : 1e-6))//区间交集必须大于CanDrawHoleFuzz\r\n && Math.max(minY, 0) < (Math.min(outlineHeight, maxY) + (isRelativeHardware ? -CanDrawHoleFuzz : 1e-6))//区间交集必须大于CanDrawHoleFuzz\r\n )\r\n {\r\n sp.setZ(0);\r\n ep.setZ(0);\r\n let line = new Line(sp, ep);\r\n let pt = outline.IntersectWith(line, 0, 1e-5)[0];\r\n if (!pt)\r\n {\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板件${br.Name}`, entity: [br, d] }, { msg: `的${isRelativeHardware ? \"五金\" : \"排钻\"}嵌在板件内部,已经跳过!` }], LogType.Warning);\r\n return;\r\n }\r\n let position = pt.clone().setZ(oldZ);\r\n let endPt: Vector3;\r\n let face = Math.floor(outline.GetParamAtPoint(pt));\r\n for (let p of [line.StartPoint, line.EndPoint])\r\n {\r\n if (!equalv2(p, position) && outline.PtInCurve(p))\r\n {\r\n endPt = p.setZ(oldZ);\r\n break;\r\n }\r\n }\r\n if (!endPt)\r\n return;\r\n let depth = position.distanceTo(endPt);\r\n\r\n if (equaln(depth, 0, CanDrawHoleFuzz))\r\n return;\r\n\r\n InvertPosition(position, br.Thickness);\r\n InvertPosition(endPt, br.Thickness);\r\n\r\n if (br.IsArcBoard)\r\n {\r\n //弧形板需要单独增加差值\r\n position = position.add(addPos);\r\n endPt = endPt.add(addPos);\r\n\r\n if (br.SweepAngle)\r\n {\r\n let ocsInv = new Matrix4().getInverse(br.ArcBuild.OCS2RotateMtx);\r\n position.applyMatrix4(ocsInv);\r\n endPt.applyMatrix4(ocsInv);\r\n }\r\n }\r\n\r\n data.sideHoles.push({\r\n type: GangDrillType.Ljg,\r\n endPt,\r\n position,\r\n radius: cir.Radius,\r\n depth,\r\n face,\r\n name: GetGroupName(d)\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n function GetBoardMetals(br: Board)\r\n {\r\n let mids = br.RelativeHardware;\r\n let metalsData = {\r\n metals: 0,\r\n comp: 0\r\n };\r\n for (let id of mids)\r\n {\r\n if (!id || id.IsErase) continue;\r\n\r\n let metals = id.Object as HardwareCompositeEntity;\r\n if (!metals.HardwareOption)\r\n continue;\r\n if (metals.HardwareOption.type === EMetalsType.Metals)\r\n {\r\n metalsData.metals++;\r\n }\r\n else\r\n {\r\n metalsData.comp++;\r\n }\r\n }\r\n return metalsData;\r\n }\r\n\r\n export function GetHardwareCompositeData(en: HardwareCompositeEntity): ISpliteHardwareData\r\n {\r\n const accuracy = HostApplicationServices.chaidanOption.hardwareExpressionFormattingAccuracy;\r\n let size = en.BoundingBoxInOCS.getSize(new Vector3);\r\n let data = { ...en.HardwareOption } as ICompHardwareOption;\r\n const actualVal = safeEval(data.actualExpr, { L: size.x, W: size.y, H: size.z });\r\n data.actualExpr = actualVal ? 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\r\n export function Data2Polyline(data: IContourData, isClose = true)\r\n {\r\n let pl = new Polyline(data.pts.map((p, i) => ({ pt: new Vector2(p.x, p.y), bul: data.buls[i] })));\r\n if (isClose)\r\n pl.CloseMark = true;\r\n return pl;\r\n }\r\n\r\n export function Get2DModeing(br: Board, offset: Vector3)\r\n {\r\n let res: I2DModeling[] = [];\r\n // 拆单值有效的板件勾选取消孔槽加工\r\n const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption;\r\n const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness];\r\n if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing)\r\n {\r\n return res;\r\n }\r\n let tmtx = MoveMatrix(offset.clone().negate());\r\n for (let m of br.Modeling2D)\r\n {\r\n let path = m.path.Clone().ApplyMatrix(tmtx) as Polyline;\r\n res.push({\r\n path: ConverToPtsBul(path, false),\r\n dir: m.dir,\r\n items: m.items.map(item => ({ ...item }))\r\n });\r\n }\r\n return res;\r\n }\r\n\r\n export function Get3DModeing(br: Board, offset: Vector3)\r\n {\r\n let res: I3DModeling[] = [];\r\n // 拆单值有效的板件勾选取消孔槽加工\r\n const { partialSplitValueCanTakesEffect, cancelHoleProcessing } = HostApplicationServices.chaidanOption;\r\n const [L, W, H] = [br.BoardProcessOption.spliteHeight, br.BoardProcessOption.spliteWidth, br.BoardProcessOption.spliteThickness];\r\n if (((partialSplitValueCanTakesEffect && (L || W || H)) || (L && W && H)) && cancelHoleProcessing)\r\n {\r\n return res;\r\n }\r\n for (let m of br.Modeling3D)\r\n {\r\n let d: I3DModeling = {\r\n path: { pts: [], buls: [] },\r\n knife: { ...m.knife },\r\n dir: m.dir\r\n };\r\n for (let i = 0; i < m.path.length - 1; i++)\r\n {\r\n let d1 = m.path[i];\r\n let d2 = m.path[i + 1];\r\n if (equaln(d1.bul, 0))\r\n {\r\n let p = d1.pt.clone();\r\n InvertPosition(p, br.Thickness);\r\n p.sub(offset);\r\n d.path.pts.push(p);\r\n d.path.buls.push(0);\r\n }\r\n else\r\n {\r\n let arc = new Arc().ParseFromBul(d1.pt.clone().sub(offset), d2.pt.clone().sub(offset), d1.bul);\r\n let r = ConverArcToPtsBul(arc, false);\r\n r.pts.forEach(p => InvertPosition(p, br.Thickness));\r\n d.path.pts.push(...r.pts);\r\n d.path.buls.push(...r.buls);\r\n }\r\n if (i === m.path.length - 2)\r\n {\r\n let p = d2.pt.clone();\r\n InvertPosition(p, br.Thickness);\r\n p.sub(offset);\r\n d.path.pts.push(p);\r\n d.path.buls.push(0);\r\n }\r\n }\r\n res.push(d);\r\n }\r\n return res;\r\n }\r\n\r\n export function GetChaiDanFeedingPath(data: IChaiDanFeedingData, redundancyKnif = 0)\r\n {\r\n const { thickness, boardContour, dir, addLen, addWidth, addDepth, knifeRadius, brThickness } = data;\r\n let brContour = Data2Polyline(boardContour);\r\n const tool = FeedingToolPath.GetInstance();\r\n const outline = Contour.CreateContour(Data2Polyline(data.outline));\r\n const holes = data.holes.map(h => Contour.CreateContour(Data2Polyline(h)));\r\n let shape = new Shape(outline, holes);\r\n\r\n const paths = tool.GetModelFeedPath(\r\n { Thickness: brThickness, ContourCurve: brContour },\r\n {\r\n shape,\r\n thickness,\r\n dir, knifeRadius, addLen, addWidth, addDepth\r\n },\r\n redundancyKnif);\r\n\r\n return paths.map((c: ExtrudeContourCurve) => ConverToPtsBul(c, false));\r\n }\r\n export function GetGroupName(ent: Entity): string\r\n {\r\n let group = ent.GroupId?.Object as GroupRecord;\r\n if (!group || !(group instanceof GroupRecord)) return \"未知(无拆单名称)\";\r\n return group.Name;\r\n }\r\n}\r\n\r\nexport function ParseArcBoardHoles(br: Board, offsetTanslation: Vector3)\r\n{\r\n const ArcBoardBuild = br.ArcBuild;\r\n ArcBoardBuild.ParseSweepCurves();\r\n let cus = ArcBoardBuild.SweepCurves1;\r\n\r\n let ContourCurve = br.Shape.Outline.Curve.Clone().ApplyMatrix(ArcBoardBuild.OCS2RotateMtx) as Polyline;\r\n let brBoxSize = ContourCurve.BoundingBox.getSize(new Vector3);\r\n let currentLength = 0;\r\n\r\n if (br.SweepAngle)\r\n offsetTanslation = offsetTanslation.clone().applyMatrix4(ArcBoardBuild.OCS2RotateMtx.clone().setPosition(0, 0, 0));\r\n\r\n for (let cu of cus)\r\n {\r\n if (currentLength > brBoxSize.x) break;\r\n\r\n if (cu instanceof Arc)\r\n {\r\n currentLength = currentLength + cu.Length;\r\n continue;\r\n }\r\n\r\n //直线所在坐标系\r\n let cuBox = new Box3(new Vector3, new Vector3(cu.Length, brBoxSize.y, br.Thickness));\r\n let an = angle(cu.EndPoint.clone().sub(cu.StartPoint));\r\n let m = new Matrix4().makeRotationY(-an);\r\n\r\n let ocs = br.OCS;\r\n if (br.SweepAngle)\r\n ocs.multiply(ArcBoardBuild.Rotate2OCSMtx);\r\n\r\n ocs.multiply(m.setPosition(cu.StartPoint.clone().applyMatrix4(new Matrix4().makeRotationX(Math.PI / 2))));\r\n\r\n //正面时翻转Z向量\r\n if (br.SweepVisibleFace === FaceDirection.Front)\r\n ocs.setPosition(new Vector3(0, 0, -br.Thickness).applyMatrix4(ocs));\r\n\r\n // 测试代码\r\n // let pt = new Vector3().applyMatrix4(ocs);\r\n // let l1 = new Line(pt, pt.clone().add(new Vector3().setFromMatrixColumn(ocs, 0).normalize().multiplyScalar(100)));\r\n // let l2 = new Line(pt, pt.clone().add(new Vector3().setFromMatrixColumn(ocs, 1).normalize().multiplyScalar(100)));\r\n // let l3 = new Line(pt, pt.clone().add(new Vector3().setFromMatrixColumn(ocs, 2).normalize().multiplyScalar(100)));\r\n // TestDraw(new Point(pt));\r\n // TestDraw(l1, 1);\r\n // TestDraw(l2, 3);\r\n // TestDraw(l3, 5);\r\n //裁剪 计算每个分段轮廓\r\n let length = currentLength + cu.Length;\r\n let starKnifePls = new Polyline([{ pt: AsVector2({ x: currentLength, y: -1 }), bul: 0 }, { pt: AsVector2({ x: currentLength, y: 10000 }), bul: 0 }]);\r\n let endKnifePls = new Polyline([{ pt: AsVector2({ x: length, y: -1 }), bul: 0 }, { pt: AsVector2({ x: length, y: 10000 }), bul: 0 }]);\r\n\r\n //裁剪结果\r\n let faceRegions = SplitPolyline(ContourCurve, [starKnifePls, endKnifePls]);\r\n faceRegions = faceRegions.filter((faceRegion) =>\r\n {\r\n let x = faceRegion.BoundingBox.getCenter(new Vector3).x;\r\n return x > currentLength && x < length;\r\n });\r\n\r\n for (let [, driss] of br.DrillList)\r\n {\r\n for (let dris of driss)\r\n {\r\n for (let dId of dris)\r\n {\r\n if (!dId || dId.IsErase)\r\n continue;\r\n let d = dId.Object as Hole;\r\n if (d[\"__CacheBrOCS__\"]) continue;\r\n let b = d.BoundingBox.applyMatrix4(new Matrix4().getInverse(ocs));\r\n\r\n if (cuBox.intersectsBox(b))\r\n {\r\n d[\"__CacheBrOCS__\"] = ocs;\r\n //记录分段路径的起点与原点差值\r\n d[\"__CacheAddPos__\"] = new Vector3(currentLength);\r\n d[\"__CacheContour__\"] = faceRegions;\r\n }\r\n }\r\n }\r\n }\r\n currentLength = length;\r\n }\r\n\r\n return offsetTanslation;\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, Vector3 } from \"three\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { XAxis, YAxis } from '../Geometry/GeUtils';\r\n\r\n/**\r\n * 分析曲线的上下左右位置的线\r\n * @param curves\r\n */\r\nexport function ParseEdgeSealDir(curves: Curve[]): [number, number, number, number]\r\n{\r\n let boxAll = new Box3;\r\n let boxs: Box3[] = [];\r\n\r\n let fb = new Flatbush(curves.length);\r\n\r\n for (let c of curves)\r\n {\r\n let box = c.BoundingBox;\r\n boxs.push(box);\r\n boxAll.union(box);\r\n\r\n fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n }\r\n\r\n fb.finish();\r\n\r\n let leftids = fb.search(boxAll.min.x - 1, boxAll.min.y - 1, boxAll.min.x + 1, boxAll.max.y + 1);\r\n let rightids = fb.search(boxAll.max.x - 1, boxAll.min.y - 1, boxAll.max.x + 1, boxAll.max.y + 1);\r\n let topids = fb.search(boxAll.min.x - 1, boxAll.max.y - 1, boxAll.max.x + 1, boxAll.max.y + 1);\r\n let bottomids = fb.search(boxAll.min.x - 1, boxAll.min.y - 1, boxAll.max.x + 1, boxAll.min.y + 1);\r\n\r\n const FindBestCurveIndex = (ids: number[], dirRef: Vector3) =>\r\n {\r\n if (ids.length === 1) return ids[0];\r\n\r\n let maxLength = -Infinity;\r\n let bestIndex = -1;\r\n for (let id of ids)\r\n {\r\n let c = curves[id];\r\n let dir = c.EndPoint.sub(c.StartPoint).normalize();\r\n let length = Math.abs(dir.dot(dirRef));//取模(模越长 表示和dirRef越平行(接近))\r\n if (length > maxLength)\r\n {\r\n bestIndex = id;\r\n maxLength = length;\r\n }\r\n }\r\n return bestIndex;\r\n };\r\n\r\n let left = FindBestCurveIndex(leftids, YAxis);\r\n let right = FindBestCurveIndex(rightids, YAxis);\r\n let top = FindBestCurveIndex(topids, XAxis);\r\n let bottom = FindBestCurveIndex(bottomids, XAxis);\r\n\r\n return [left, right, top, bottom];\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayRemoveIf } from \"../Common/ArrayExt\";\r\nimport { EBoardKeyList } from \"../Common/BoardKeyList\";\r\nimport { MergeCurvelist } from \"../Common/CurveUtils\";\r\nimport { InteractionLog, LogType } from \"../Common/Log\";\r\nimport { Intent, Toaster } from \"../Common/Toaster\";\r\nimport { FixIndex } 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 hasSealedErr?: boolean;//调用 GetSealedBoardContour 方法时判断是否有出现封边异常\r\n}\r\n\r\nclass OffsetPolyline2 extends OffsetPolyline\r\n{\r\n override InitSubCurves()\r\n {\r\n this._IsTopoOffset = true;\r\n return this;\r\n }\r\n protected override OffsetSubCurves(): void { }\r\n\r\n protected override GeneralCirclesAndVertexs(): void { }\r\n\r\n protected override GeneralTrimContours(): void\r\n {\r\n super.GeneralTrimContours();\r\n arrayRemoveIf(this._TrimPolylineContours, con => con.Curve.Area < 0.01);//因为局部偏移可能为0,产生0面积的轮廓\r\n }\r\n\r\n CheckPointDir(pt: Vector3): boolean\r\n {\r\n let dir = this.GetPointAtCurveDir(pt);\r\n return dir === 0 || dir === this._OffsetDistSign;//因为局部偏移可能为0,所以在线上的我们也保留了\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 获取板件的轮廓(没有扣封边)(拆单时表现)\r\n * 在拆单的时候 我们用这个轮廓(为了数据对应准确性)\r\n * 修改时 请注意函数 GetSealedBoardContour\r\n*/\r\nexport function GetBoardContour(br: Board): ExtrudeContourCurve | undefined\r\n{\r\n if (Math.abs(br.ContourCurve.Area) < 10)\r\n 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 let hasSealedErr = false;\r\n //如果有多个 取最大\r\n if (sealedContours.length > 1)\r\n {\r\n hasSealedErr = true;\r\n Toaster({\r\n message: `有板计算封边异常,请检查!(点击左下角提示可以查看该板)`,\r\n timeout: 15000,\r\n intent: Intent.WARNING,\r\n key: \"sealerror\"\r\n });\r\n\r\n InteractionLog([{ msg: \"警告:\" }, { msg: `板:${br.Name}`, entity: [br] }, { msg: `在扣除封边计算中,得到了${sealedContours.length}条轮廓,请检查!` }], LogType.Warning);\r\n\r\n let areas = sealedContours.map(p => p.Area);\r\n let maxIndex = Max(areas, (a1, a2) => a2 > a1);\r\n sealedContours = [sealedContours[maxIndex]];\r\n }\r\n\r\n //如果不闭合 则尝试闭合\r\n let sealedContour = sealedContours[0];\r\n if (sealedContour && !sealedContour.IsClose)\r\n {\r\n if (sealedContour.StartPoint.distanceTo(sealedContour.EndPoint) < 0.1)\r\n sealedContour.CloseMark = true;\r\n else\r\n sealedContour = CreateContour2([sealedContour])?.Curve as Polyline;\r\n }\r\n\r\n if (!sealedContour)\r\n return;\r\n\r\n //逆时针\r\n if (sealedContour && sealedContour.Area2 < 0)\r\n sealedContour.Reverse();\r\n\r\n let res: BrSealedData = {\r\n brContour,\r\n sealedContour,\r\n brCurves: curves,\r\n highSeals,\r\n hasSealedErr\r\n };\r\n\r\n return res;\r\n}\r\n\r\n\r\n/**\r\n * 将11对应的封边数值改成WebCAD的高级封边\r\n * @param seals 每段曲线的封边\r\n * @param curves 曲线表\r\n * @returns 转换成高级封边后的封边值 (圆弧会编组)\r\n */\r\nexport function ConverEachSeal2HightSealData(seals: IHighSealedItem[], curves: Curve[]): IHighSealedItem[]\r\n{\r\n curves = curves.concat();\r\n seals = seals.concat();\r\n let lastSeal = seals[seals.length - 1];\r\n\r\n for (let i = seals.length; i < curves.length; i++)\r\n seals.push(lastSeal);\r\n\r\n let map = new Map<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 if (sealCurves.length === 0)\r\n return;\r\n let [left, right, top, bottom] = ParseEdgeSealDir(sealCurves);\r\n br.BoardProcessOption[EBoardKeyList.LeftSealed] = sealDatas[left].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.RightSealed] = sealDatas[right].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.UpSealed] = sealDatas[top].size.toString();\r\n br.BoardProcessOption[EBoardKeyList.DownSealed] = sealDatas[bottom].size.toString();\r\n }\r\n}\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 { Matrix4, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../../Common/ArrayExt\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Curve } from \"../../DatabaseServices/Entity/Curve\";\r\nimport { ExtrudeSolid } from \"../../DatabaseServices/Entity/Extrude\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { AsVector2, equaln } from \"../../Geometry/GeUtils\";\r\nimport { GetBoardSealingCurves, SubsectionCurvesOfHightSeal } from \"../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { FixIndex } from \"../../Nest/Common/Util\";\r\nimport { SplitPolyline } from \"./SplitPolyline\";\r\n\r\n//侧面造型分裂\r\nexport class SplitBoardSideModelUtil\r\n{\r\n //备份原始二维刀路在世界坐标系中\r\n private OrgBoardOCS: Matrix4 = new Matrix4();\r\n private CacheSideModel: Map<number, ExtrudeSolid[]> = new Map();\r\n private OldSealCurves: Curve[] = [];\r\n\r\n constructor(br: Board)\r\n {\r\n this.Init(br);\r\n }\r\n\r\n Init(br: Board, isSpecialShape = false)\r\n {\r\n this.OrgBoardOCS = br.OCS;\r\n let curves = GetBoardSealingCurves(br);\r\n\r\n //取消异型操作会提前令isSpecialShape = false\r\n if (isSpecialShape)\r\n SubsectionCurvesOfHightSeal(curves);\r\n\r\n let oldSealCurves: Curve[] = [];\r\n\r\n for (let c of curves)\r\n if (c instanceof Polyline)\r\n oldSealCurves.push(...c.Explode());\r\n else\r\n oldSealCurves.push(c);\r\n\r\n this.OldSealCurves = oldSealCurves;\r\n\r\n const sideModelMap: Map<number, ExtrudeSolid[]> = new Map();\r\n\r\n for (let [num, soilds] of br.SideModelingMap)\r\n sideModelMap.set(num, soilds);\r\n\r\n this.CacheSideModel = sideModelMap;\r\n }\r\n\r\n CheckSideModel(): boolean\r\n {\r\n let maxSideIndex = 0;\r\n for (let [num, soilds] of this.CacheSideModel)\r\n maxSideIndex = Math.max(num, maxSideIndex);\r\n\r\n return this.OldSealCurves.length >= maxSideIndex;\r\n }\r\n\r\n SetBoardSideModel(br: Board)\r\n {\r\n if (!this.CacheSideModel.size) return;\r\n\r\n if (this.CheckSideModel())\r\n {\r\n this.SpiltSideModelOfBrContour(br);\r\n }\r\n }\r\n\r\n //新轮廓切割原始轮廓\r\n SpiltSideModelOfBrContour(br: Board)\r\n {\r\n let curves = GetBoardSealingCurves(br);\r\n\r\n let newSealCurves: Curve[] = [];\r\n\r\n for (let c of curves)\r\n if (c instanceof Polyline)\r\n newSealCurves.push(...c.Explode());\r\n else\r\n newSealCurves.push(c);\r\n\r\n let sideMadelMap: Map<number, ExtrudeSolid[]> = new Map();\r\n for (let [nmu, soilds] of this.CacheSideModel)\r\n {\r\n if (soilds?.length)\r\n {\r\n let oldCu = this.OldSealCurves[nmu]?.Clone();\r\n if (!oldCu) continue;\r\n\r\n oldCu.ApplyMatrix(this.OrgBoardOCS);\r\n for (let i = 0; i < newSealCurves.length; i++)\r\n {\r\n let newCu = newSealCurves[i].Clone().ApplyMatrix(br.OCSNoClone) as Line;\r\n let p = newCu.GetPointAtParam(newCu.EndParam * 0.5);\r\n\r\n let spliteEnts: ExtrudeSolid[] = [];\r\n\r\n if (oldCu.PtOnCurve(p))\r\n {\r\n let startX = oldCu.GetDistAtPoint(newCu.StartPoint);\r\n let endX = oldCu.GetDistAtPoint(newCu.EndPoint);\r\n let box = new Box3Ext(new Vector3(startX), new Vector3(endX, br.Thickness));\r\n\r\n let knifePls: Polyline[] = [];\r\n\r\n for (let soild of soilds)\r\n {\r\n if (soild.Thickness <= 0) continue;\r\n\r\n let sCon = soild.ContourCurve.Clone().ApplyMatrix(soild.OCSNoClone) as Polyline;\r\n let thickness = soild.Thickness;\r\n\r\n let newNeighborCus: Curve[] = [];\r\n newNeighborCus.push(newSealCurves[FixIndex(i - 1, newSealCurves)].Clone().ApplyMatrix(br.OCSNoClone));\r\n newNeighborCus.push(newSealCurves[FixIndex(i + 1, newSealCurves)].Clone().ApplyMatrix(br.OCSNoClone));\r\n\r\n const offsetCus = newCu.GetOffsetCurves(-thickness);\r\n const xPtList: number[] = [startX, endX];\r\n\r\n for (let cu of offsetCus)\r\n {\r\n for (let nbCu of newNeighborCus)\r\n {\r\n const intersectPts = cu.IntersectWith(nbCu, IntersectOption.ExtendThis);\r\n for (let pt of intersectPts)\r\n {\r\n let { closestPt } = newCu.GetClosestAtPoint(pt, true);\r\n let ptX = oldCu.GetDistAtPoint(closestPt);\r\n xPtList.push(ptX);\r\n }\r\n }\r\n }\r\n\r\n xPtList.sort((a, b) => a - b);\r\n\r\n for (let x of [xPtList[0], arrayLast(xPtList)])\r\n knifePls.push(new Polyline([{ pt: AsVector2({ x, y: 0 }), bul: 0 }, { pt: AsVector2({ x, y: 1 }), bul: 0 }]));\r\n\r\n let splitSideModelCons = SplitPolyline(sCon, knifePls);\r\n\r\n if (!splitSideModelCons.length)\r\n splitSideModelCons.push(sCon);\r\n\r\n for (let j = 0; j < splitSideModelCons.length; j++)\r\n {\r\n let intersectBox = box.clone().intersect(splitSideModelCons[j].BoundingBox);\r\n if (box.intersectsBox(splitSideModelCons[j].BoundingBox, 1) && !equaln(intersectBox.max.x, intersectBox.min.x))\r\n {\r\n let soildClone = soild.Clone();\r\n soildClone.ContourCurve = splitSideModelCons[j].ApplyMatrix(soild.OCSInv);\r\n soildClone.GrooveCheckAllAutoSplit();\r\n soildClone.ApplyMatrix(new Matrix4().setPosition(-startX, 0, 0));\r\n spliteEnts.push(soildClone);\r\n }\r\n }\r\n }\r\n\r\n if (spliteEnts.length)\r\n sideMadelMap.set(i, spliteEnts);\r\n }\r\n }\r\n }\r\n }\r\n\r\n br.SideModelingMap = sideMadelMap;\r\n }\r\n\r\n //修改板厚度时裁剪侧面造型\r\n SpiltSideModelOfBrThickness(br: Board, thickness: number)\r\n {\r\n this.Init(br);\r\n\r\n let sideMadelMap: Map<number, ExtrudeSolid[]> = new Map();\r\n for (let [nmu, soilds] of this.CacheSideModel)\r\n {\r\n if (soilds?.length)\r\n {\r\n let cu = this.OldSealCurves[nmu]?.Clone();\r\n if (!cu) continue;\r\n cu.ApplyMatrix(this.OrgBoardOCS);\r\n\r\n let spliteEnts: ExtrudeSolid[] = [];\r\n let knifePls: Polyline[] = [];\r\n let box = new Box3Ext(new Vector3(), new Vector3(cu.Length, thickness));\r\n\r\n for (let soild of soilds)\r\n {\r\n if (soild.Thickness <= 0) continue;\r\n\r\n let sCon = soild.ContourCurve.Clone().ApplyMatrix(soild.OCSNoClone) as Polyline;\r\n\r\n knifePls.push(new Polyline([{ pt: AsVector2({ x: 0, y: 0 }), bul: 0 }, { pt: AsVector2({ x: 1, y: 0 }), bul: 0 }]));\r\n knifePls.push(new Polyline([{ pt: AsVector2({ x: 0, y: thickness }), bul: 0 }, { pt: AsVector2({ x: 1, y: thickness }), bul: 0 }]));\r\n\r\n let splitSideModelCons = SplitPolyline(sCon, knifePls);\r\n\r\n if (!splitSideModelCons.length)\r\n splitSideModelCons.push(sCon);\r\n\r\n for (let con of splitSideModelCons)\r\n {\r\n let intersectBox = box.clone().intersect(con.BoundingBox);\r\n if (box.intersectsBox(con.BoundingBox, 1) && !equaln(intersectBox.max.y, intersectBox.min.y))\r\n {\r\n let soildClone = soild.Clone();\r\n soildClone.ContourCurve = con.ApplyMatrix(soild.OCSInv);\r\n soildClone.GrooveCheckAllAutoSplit();\r\n spliteEnts.push(soildClone);\r\n }\r\n }\r\n }\r\n\r\n if (spliteEnts.length)\r\n sideMadelMap.set(nmu, spliteEnts);\r\n }\r\n }\r\n\r\n br.SideModelingMap = sideMadelMap;\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { ConverCircleToPolyline } from \"../../Common/CurveUtils\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../../DatabaseServices/Entity/Circle\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { Region } from \"../../DatabaseServices/Entity/Region\";\r\n\r\n/**\r\n * 把板件炸开成面域,0,1为正反面,其余的为边面(没有圆弧面)\r\n */\r\nexport function Board2Regions(br: Board): Region[]\r\n{\r\n let ocs = br.OCS;\r\n\r\n let cu = br.ContourCurve.Clone();\r\n\r\n if (cu instanceof Circle)\r\n cu = ConverCircleToPolyline(cu);\r\n\r\n let frontReg = Region.CreateFromCurves([cu.Clone()]);\r\n let regFrontOcs = ocs.clone();\r\n regFrontOcs.setPosition(br.Position.add(br.Normal.multiplyScalar(br.Thickness)));\r\n frontReg.ApplyMatrix(regFrontOcs);\r\n\r\n let backReg = Region.CreateFromCurves([cu.Flip()]);\r\n backReg.ApplyMatrix(ocs);\r\n\r\n let resultRegs = [frontReg, backReg];\r\n\r\n //edges\r\n let lines = cu.Explode().filter(c => c instanceof Line);\r\n\r\n\r\n for (let l of lines)\r\n {\r\n let rectPl = new Polyline().Rectangle(l.Length, br.Thickness);\r\n let reg = Region.CreateFromCurves([rectPl]);\r\n if (!reg) continue;\r\n\r\n let p = l.StartPoint.applyMatrix4(ocs);\r\n let x = l.GetFirstDeriv(0).transformDirection(ocs);\r\n let y = br.Normal;\r\n let z = new Vector3().crossVectors(x, y);\r\n\r\n let mtx = new Matrix4().makeBasis(x, y, z).setPosition(p);\r\n reg.ApplyMatrix(mtx);\r\n resultRegs.push(reg);\r\n }\r\n\r\n return resultRegs;\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { CADFiler } from \"../../DatabaseServices/CADFiler\";\r\nimport { I2DModeling, I3DModeling, IPathItem } from \"../../DatabaseServices/Entity/Board\";\r\nimport { ExtrudeSolid } from \"../../DatabaseServices/Entity/Extrude\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { BoardProcessOption } from \"../../UI/Store/OptionInterface/BoardProcessOption\";\r\n\r\n/**序列化板件数据 */\r\nexport function serializeBoardData(file: CADFiler, processData: BoardProcessOption)\r\n{\r\n file.Write(processData[EBoardKeyList.RoomName]);\r\n file.Write(processData[EBoardKeyList.CabinetName]);\r\n file.Write(processData[EBoardKeyList.BrMat]);\r\n file.Write(processData[EBoardKeyList.Mat]);\r\n file.Write(processData[EBoardKeyList.Color]);\r\n file.Write(processData[EBoardKeyList.Lines]);\r\n file.Write(processData[EBoardKeyList.BigHole]);\r\n file.Write(processData[EBoardKeyList.DrillType]);\r\n file.Write(processData[EBoardKeyList.ComposingFace]);\r\n file.Write(processData[EBoardKeyList.HighSealed].length);\r\n for (let n of processData[EBoardKeyList.HighSealed])\r\n {\r\n file.Write(n.size);\r\n }\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 file.Write(item.depthExpr);\r\n }\r\n }\r\n}\r\nexport function SerializeBoard3DModeingData(file: CADFiler, modelList: I3DModeling[])\r\n{\r\n file.Write(modelList.length);\r\n for (let item of modelList)\r\n {\r\n file.Write(item.path.length);\r\n for (let d of item.path)\r\n {\r\n file.Write(d.pt.toArray());\r\n file.Write(d.bul);\r\n }\r\n file.Write(item.dir);\r\n file.Write(item.knife.id);\r\n file.Write(item.knife.radius);\r\n file.Write(item.knife.angle);\r\n file.Write(item.knife.name);\r\n }\r\n}\r\n\r\n//反序列化板件数据\r\nexport function DeserializationBoard2DModeingData(file: CADFiler, data: I2DModeling[], ver: number)\r\n{\r\n data.length = 0;\r\n const count = file.Read();\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n let path = file.ReadObject() as Polyline;\r\n let dir = file.Read();\r\n let m: I2DModeling = {\r\n path,\r\n dir,\r\n items: []\r\n };\r\n const itemCount = file.Read();\r\n\r\n for (let j = 0; j < itemCount; j++)\r\n {\r\n let depth = file.Read();\r\n let offset = file.Read();\r\n let knifeId = file.Read();\r\n let knifeRad = file.Read();\r\n let knifeAngle = file.Read();\r\n let knifeName = file.Read();\r\n let depthExpr: string;\r\n if (ver > 19)\r\n {\r\n depthExpr = file.Read();\r\n }\r\n else\r\n {\r\n depthExpr = depth.toString();\r\n }\r\n m.items.push({\r\n depth, offset, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName }, depthExpr\r\n });\r\n }\r\n data.push(m);\r\n }\r\n}\r\n//反序列化板件数据\r\nexport function DeserializationBoard3DModeingData(file: CADFiler, data: I3DModeling[], ver: number)\r\n{\r\n data.length = 0;\r\n const count = file.Read();\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n let pathCount = file.Read();\r\n let path: IPathItem[] = [];\r\n for (let i = 0; i < pathCount; i++)\r\n {\r\n let pt = new Vector3().fromArray(file.Read());\r\n let bul = file.Read();\r\n path.push({ pt, bul });\r\n }\r\n let dir = file.Read();\r\n let knifeId = file.Read();\r\n let knifeRad = file.Read();\r\n let knifeAngle = file.Read();\r\n let knifeName = file.Read();\r\n data.push({\r\n path, dir, knife: { id: knifeId, radius: knifeRad, angle: knifeAngle, name: knifeName }\r\n });\r\n }\r\n}\r\n\r\nexport function SerializeBoardSideModeingData(file: CADFiler, sideModelingMap: Map<number, ExtrudeSolid[]>)\r\n{\r\n file.Write(sideModelingMap.size);\r\n\r\n for (let [index, sideModelingList] of sideModelingMap)\r\n {\r\n file.Write(index);\r\n file.Write(sideModelingList.length);\r\n\r\n for (let data of sideModelingList)\r\n file.WriteObject(data);\r\n }\r\n}\r\n\r\nexport function DeserializationBoardSideModeingData(file: CADFiler, sideModelingMap: Map<number, ExtrudeSolid[]>)\r\n{\r\n sideModelingMap.clear();\r\n\r\n const count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let index = file.Read();\r\n let listCount = file.Read();\r\n let sideModelingList: ExtrudeSolid[] = [];\r\n\r\n for (let j = 0; j < listCount; j++)\r\n {\r\n let obj = file.ReadObject() as ExtrudeSolid;\r\n sideModelingList.push(obj);\r\n }\r\n\r\n sideModelingMap.set(index, sideModelingList);\r\n }\r\n}\r\n","import { 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 geom2, { Geom2 } from \"@jscad/modeling/src/geometries/geom2\";\r\nimport geom3, { Geom3, transform } from \"@jscad/modeling/src/geometries/geom3\";\r\nimport poly3 from \"@jscad/modeling/src/geometries/poly3\";\r\nimport { Mat4 } from \"@jscad/modeling/src/maths/mat4\";\r\nimport { Vec2 } from \"@jscad/modeling/src/maths/vec2\";\r\nimport { Vec3 } from \"@jscad/modeling/src/maths/vec3\";\r\nimport { intersect } from \"@jscad/modeling/src/operations/booleans\";\r\nimport extrudeLinear from \"@jscad/modeling/src/operations/extrusions/extrudeLinear\";\r\nimport extrudeRotate from \"@jscad/modeling/src/operations/extrusions/extrudeRotate\";\r\nimport { retessellate } from \"@jscad/modeling/src/operations/modifiers\";\r\nimport { Matrix4, Object3D, Vector3 } from \"three\";\r\nimport { FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { arrayLast } from \"../../Common/ArrayExt\";\r\nimport { Log, LogType } from \"../../Common/Log\";\r\nimport { MakeMirrorMtx, Vector2ApplyMatrix4, ZMirrorMatrix } from \"../../Common/Matrix4Utils\";\r\nimport { FixIndex } from \"../../Common/Utils\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board, I2DModeingItem } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { VData2Curve, VKnifToolPath } from \"../../GraphicsSystem/ToolPath/VKnifToolPath\";\r\nimport { FuzzyFactory } from \"../../csg/core/FuzzyFactory\";\r\nimport { GetArcDrawCount } from \"../ExtrudeMeshGeomBuilder/SplitCurveParams\";\r\nimport { ZAxis, angle, angleTo, equalv3 } from \"../GeUtils\";\r\nimport { SweepGeometrySimple } from \"../SweepGeometry\";\r\n\r\nconst HALF_PI = Math.PI / 2;\r\n\r\n//根据二维刀路路径和刀截面建模\r\nexport function Board2DModelCSGBuilder(board: Board)\r\n{\r\n let _2DPathCsgs: Geom3[] = [];\r\n let modelKnifePtsCache: Map<string, Vec2[]> = new Map();\r\n\r\n let tempVec = new Vector3;\r\n //geom3缓存\r\n let geom3Cache: Map<string, geom3.Geom3> = new Map();\r\n //端点geom3缓存\r\n let pathGripsSet = new Set();\r\n\r\n let hasError = false;\r\n\r\n for (let vm of board.Modeling2D)\r\n {\r\n let path = vm.path;\r\n let fuzzy = new FuzzyFactory;\r\n\r\n //获取端点部分的csg(使用旋转建模)\r\n const GetGripsCsgs = (pts: Vector3[], geom3s: Geom3[], knifeGeom: Geom2, knifeId: string, rMtxs?: Matrix4[], rAngle?: number) =>\r\n {\r\n for (let i = 0; i < pts.length; i++)\r\n {\r\n let pt = pts[i];\r\n if (!pt) continue;\r\n\r\n let key = fuzzy.lookupOrCreate([pt.x, pt.y], pt);\r\n if (!pathGripsSet.has(key))\r\n {\r\n let id = knifeId;\r\n if (rAngle && i === 1)\r\n id = `${knifeId}_${rAngle.toFixed(3)}`;\r\n\r\n let rotateGeom = geom3Cache.get(id);\r\n\r\n if (!rotateGeom)\r\n {\r\n let normalAngle = 2 * Math.PI;\r\n if (rAngle && i === 1)\r\n normalAngle = rAngle;\r\n\r\n try\r\n {\r\n rotateGeom = extrudeRotate({ segments: 8, angle: normalAngle }, knifeGeom);\r\n rotateGeom = retessellate(rotateGeom);\r\n geom3Cache.set(id, rotateGeom);\r\n }\r\n catch (error)\r\n {\r\n hasError = true;\r\n return;\r\n }\r\n }\r\n // TestDrawGeom3s([rotateGeom]);\r\n let rMtx: Matrix4;\r\n\r\n rMtx = rMtxs[i] ?? rMtxs[0];\r\n\r\n rotateGeom = transform((rMtx ?? new Matrix4).setPosition(pt).elements as Mat4, rotateGeom);\r\n geom3s.push(rotateGeom);\r\n pathGripsSet.add(key);\r\n }\r\n }\r\n };\r\n\r\n for (let item of vm.items)\r\n {\r\n let tempPath = GetOffsetPath(board, path, item);\r\n if (tempPath)\r\n {\r\n let sweepContour = board.KnifePolylineMap.get(item.knife.id);\r\n if (true || !sweepContour)//如果没有轮廓的时候,我们还是依然绘制线段 (因为现在我们没有线框生成 所以强制true)\r\n {\r\n if (!board._2DPathDrawObject) board._2DPathDrawObject = new Object3D;\r\n\r\n let curves = VData2Curve(VKnifToolPath(tempPath, item.depth, item.knife.angle / 2));//走刀+提刀曲线\r\n let pathObject = new Object3D();//走刀路径绘制线\r\n for (let c of curves)\r\n {\r\n // 修正精度-走刀路径\r\n if (c instanceof Arc || c instanceof Polyline)\r\n c.DisplayAccuracy = board.DisplayAccuracy;\r\n c.ColorIndex = tempPath.ColorIndex;\r\n pathObject.add(c.GetDrawObjectFromRenderType(RenderType.Wireframe));\r\n }\r\n if (vm.dir === FaceDirection.Back)\r\n {\r\n pathObject.applyMatrix4(ZMirrorMatrix);\r\n pathObject.position.z = item.depth;\r\n }\r\n else\r\n pathObject.position.z = board.Thickness - item.depth;\r\n pathObject.updateMatrix();\r\n board._2DPathDrawObject.add(pathObject);\r\n }\r\n if (!sweepContour) continue;\r\n\r\n let geom3s: Geom3[] = [];\r\n\r\n //刀截面轮廓Pts\r\n let knifeGeomPts: Vec2[] = modelKnifePtsCache.get(item.knife.id);\r\n\r\n if (!knifeGeomPts?.length)\r\n {\r\n\r\n let shapePts = sweepContour.Shape.getPoints();\r\n for (let p of shapePts)\r\n Vector2ApplyMatrix4(sweepContour.OCSNoClone, p);\r\n\r\n knifeGeomPts = shapePts.map(p => [p.x, p.y]);\r\n\r\n if (sweepContour.IsClockWise) knifeGeomPts.reverse();\r\n }\r\n\r\n //刀截面geom\r\n let knifeGeom = geom2.fromPoints(knifeGeomPts);\r\n\r\n //分解路径\r\n let cus = tempPath.Explode();\r\n // 修正精度-切割CSG\r\n cus.forEach(c => (c instanceof Arc || c instanceof Polyline) && (c.DisplayAccuracy = board.DisplayAccuracy));\r\n if (item.knife.angle)\r\n {\r\n //提刀建模\r\n let sweepGeom = new SweepGeometrySimple(sweepContour, cus);\r\n\r\n //这里我们对盖子进行精简\r\n let lidPolys: poly3.Poly3[] = [];\r\n\r\n let fuzz = new FuzzyFactory;\r\n let lidVerts = sweepGeom.shapePts2d.map((p, i) =>\r\n {\r\n fuzz.lookupOrCreate([p.x, p.y], i);\r\n return [p.x, p.y, 0] as Vec3;\r\n });\r\n\r\n for (let face of sweepGeom.TriFaces)\r\n lidPolys.push(poly3.create(face.map(index => lidVerts[index])));\r\n\r\n let lidGeom3 = retessellate(geom3.create(lidPolys));\r\n\r\n let hasBadIndex = false;\r\n let lidPolygons = lidGeom3.polygons.map(p => p.vertices.map(v =>\r\n {\r\n let index = fuzz.lookupOrCreate([v[0], v[1]], -1);\r\n if (index === -1)\r\n hasBadIndex = true;\r\n return index;\r\n }));\r\n //精简结束\r\n\r\n //遍历每个水管\r\n for (let i = 0; i < sweepGeom.SidePolygons.length; i++)\r\n {\r\n let polygons = sweepGeom.SidePolygons[i];\r\n let polys: poly3.Poly3[] = [];\r\n for (let polygon of polygons)\r\n {\r\n let pts = polygon.map(i => sweepGeom.vertices[i]);//这是水管盖子的点\r\n\r\n //水管前进的方向\r\n let dir = polygon[\"dir\"] as Vector3;\r\n\r\n //如果水管的侧面自交了,我们选择性的删掉一个无用面\r\n let dir1 = tempVec.subVectors(pts[3], pts[0]).normalize();\r\n if (!equalv3(dir, dir1))//如果反向1\r\n {\r\n let l1 = new Line(pts[0], pts[1]);\r\n let l2 = new Line(pts[2], pts[3]);\r\n let p = l1.IntersectWith(l2, 0)[0];\r\n\r\n if (!p) continue;//弃用了这个多边形\r\n\r\n // polys.push(poly3.create([vertices[3], p.toArray() as Vec3, vertices[0]]));//弃用了无效的自交三角形\r\n polys.push(poly3.create([p.toArray() as Vec3, pts[1].toArray() as Vec3, pts[2].toArray() as Vec3]));\r\n continue;\r\n }\r\n\r\n let dir2 = tempVec.subVectors(pts[2], pts[1]).normalize();\r\n if (!equalv3(dir, dir2))//如果反向2\r\n {\r\n let l1 = new Line(pts[0], pts[1]);\r\n let l2 = new Line(pts[2], pts[3]);\r\n let p = l1.IntersectWith(l2, 0)[0];\r\n\r\n if (!p) continue;//弃用了这个多边形\r\n\r\n polys.push(poly3.create([pts[0].toArray() as Vec3, p.toArray() as Vec3, pts[3].toArray() as Vec3]));\r\n // polys.push(poly3.create([p.toArray() as Vec3, vertices[2], vertices[1]]));//弃用了无效的自交三角形\r\n continue;\r\n }\r\n\r\n polys.push(poly3.create(pts.map(p => p.toArray() as Vec3)));//如果没有反向,那么我们直接返回多边形\r\n }\r\n\r\n //构建水管的盖子\r\n let curVerts = sweepGeom.shapeVerts[FixIndex(i, sweepGeom.shapeVerts)];\r\n let nextVerts = sweepGeom.shapeVerts[FixIndex(i + 1, sweepGeom.shapeVerts)];\r\n let lid1: poly3.Poly3[] = [];\r\n let lid2: poly3.Poly3[] = [];\r\n if (!hasBadIndex)\r\n for (let lidPolygon of lidPolygons)//我们使用已经精简过的盖子索引\r\n {\r\n lid1.push(poly3.create(lidPolygon.map(index => curVerts[index].toArray() as Vec3)));\r\n lid2.push(poly3.create(lidPolygon.reverse().map(index => nextVerts[index].toArray() as Vec3)));\r\n lidPolygon.reverse();//这里偷懒了\r\n }\r\n else\r\n {\r\n for (let face of sweepGeom.TriFaces)\r\n {\r\n lid1.push(poly3.create(face.map(index => curVerts[index].toArray() as Vec3)));\r\n lid2.push(poly3.create(face.map(index => nextVerts[index].toArray() as Vec3).reverse()));\r\n }\r\n }\r\n\r\n let lidGeom1 = geom3.create(lid1);\r\n let lidGeom2 = geom3.create(lid2);\r\n\r\n if (hasBadIndex)\r\n {\r\n lidGeom1 = retessellate(lidGeom1);\r\n lidGeom2 = retessellate(lidGeom2);\r\n }\r\n\r\n let intGeom = intersect(lidGeom1, lidGeom2);\r\n if (intGeom.polygons.length)\r\n polys.push(...intGeom.polygons);\r\n else\r\n polys.push(...lidGeom1.polygons, ...lidGeom2.polygons);\r\n\r\n geom3s.push(geom3.create(polys));\r\n }\r\n\r\n //获取端点旋转矩阵 使8段圆对齐曲线\r\n let rMtx1 = GetRMtxOfCurveOfAngle(cus[0]);\r\n let rMtx2 = GetRMtxOfCurveOfAngle(arrayLast(cus), false);\r\n\r\n //提刀轮廓 未闭合路径增加圆角 端点部分\r\n if (!tempPath.IsClose)\r\n GetGripsCsgs([tempPath.StartPoint, tempPath.EndPoint], geom3s, knifeGeom, item.knife.id, [rMtx1, rMtx2]);\r\n }\r\n else\r\n {\r\n //非提刀建模\r\n let mt4Z = new Matrix4().makeRotationZ(HALF_PI);\r\n let mt4Y = new Matrix4().makeRotationY(HALF_PI);\r\n\r\n for (let i = 0; i < cus.length; i++)\r\n {\r\n let cu = cus[i];\r\n if (cu instanceof Line)\r\n {\r\n //直线部分\r\n //旋转至 X为正方向\r\n let lineShape = extrudeLinear({ height: cu.Length }, knifeGeom);\r\n lineShape = retessellate(lineShape);\r\n lineShape = transform(mt4Z.elements as Mat4, lineShape);\r\n lineShape = transform(mt4Y.elements as Mat4, lineShape);\r\n //平移到原点为中心\r\n let mtx = new Matrix4().setPosition((new Vector3(-cu.Length / 2, 0, 0)));\r\n lineShape = transform(mtx.elements as Mat4, lineShape);\r\n //旋转直线正确方向\r\n let pt = cu.StartPoint.sub(cu.EndPoint);\r\n let rMtx = new Matrix4().makeRotationZ(Math.atan2(pt.y, pt.x));\r\n lineShape = transform(rMtx.elements as Mat4, lineShape);\r\n //平移到线段中点\r\n mtx = new Matrix4().setPosition(cu.Midpoint);\r\n lineShape = transform(mtx.elements as Mat4, lineShape);\r\n geom3s.push(lineShape);\r\n\r\n let attribute = { rRange: 0, drawCircularAngle: 0 };\r\n let secondMtx: Matrix4;\r\n\r\n let j = i + 1;\r\n if (j < cus.length)\r\n {\r\n let cu2 = cus[j];\r\n attribute = GetRMtxOfCurve(cu, cu2);\r\n secondMtx = new Matrix4().makeRotationZ(attribute?.rRange ?? 0);\r\n }\r\n\r\n //闭合曲线\r\n if (j === cus.length && path.IsClose)\r\n {\r\n let cu2 = cus[0];\r\n attribute = GetRMtxOfCurve(cu, cu2);\r\n secondMtx = new Matrix4().makeRotationZ(attribute?.rRange ?? 0);\r\n }\r\n\r\n let startPt = (j < cus.length && i > 0 || i === 0 && path.IsClose) ? undefined : cu.StartPoint;\r\n //端点部分\r\n GetGripsCsgs([startPt, cu.EndPoint], geom3s, knifeGeom, item.knife.id, [rMtx, secondMtx], attribute?.drawCircularAngle);\r\n }\r\n else if (cu instanceof Arc)\r\n {\r\n //弧线部分\r\n //获取针对弧形扫掠Geom\r\n let mt4 = new Matrix4().setPosition(cu.Radius, 0, 0);\r\n let arcKnifeGeom = geom2.transform(mt4.elements as Mat4, knifeGeom);\r\n // 修正精度-切割CSG\r\n const displayAccuracy = board.DisplayAccuracy || GetArcDrawCount(cu.Radius);\r\n const resolution = Math.ceil(displayAccuracy / 4) * 4;\r\n let rotateGeom = extrudeRotate({ segments: resolution, angle: cu.AllAngle }, arcKnifeGeom);\r\n //圆弧的旋转分量\r\n let extractRotation = new Matrix4().extractRotation(cu.OCSNoClone);\r\n rotateGeom = retessellate(rotateGeom);\r\n //放置Geom\r\n let rotateMat = new Matrix4().makeRotationZ(cu.IsClockWise ? cu.EndAngle : cu.StartAngle).setPosition(cu.Position).multiply(extractRotation);\r\n rotateGeom = transform(rotateMat.elements as Mat4, rotateGeom);\r\n geom3s.push(rotateGeom);\r\n let startAngleMtx = new Matrix4().makeRotationZ(cu.StartAngle).multiply(extractRotation);\r\n let endAngleMtx = new Matrix4().makeRotationZ(cu.EndAngle).multiply(extractRotation);\r\n\r\n //夹角的端点旋转角度和圆的大小分量\r\n let attribute = { rRange: 0, drawCircularAngle: 0 };\r\n\r\n //获取端点旋转矩阵 使8段圆对齐曲线 (非提刀部分)\r\n let j = i + 1;\r\n if (j < cus.length)\r\n {\r\n let cu2 = cus[j];\r\n attribute = GetRMtxOfCurve(cu, cu2);\r\n endAngleMtx = new Matrix4().makeRotationZ(attribute?.rRange ?? 0);\r\n }\r\n\r\n //闭合曲线\r\n if (j === cus.length && path.IsClose)\r\n {\r\n let cu2 = cus[0];\r\n attribute = GetRMtxOfCurve(cu, cu2);\r\n endAngleMtx = new Matrix4().makeRotationZ(attribute?.rRange ?? 0);\r\n }\r\n\r\n let startPt = (j < cus.length && i > 0 || i === 0 && path.IsClose) ? undefined : cu.StartPoint;\r\n //端点部分\r\n GetGripsCsgs([startPt, cu.EndPoint], geom3s, knifeGeom, item.knife.id, [startAngleMtx, endAngleMtx], attribute?.drawCircularAngle);\r\n }\r\n }\r\n }\r\n\r\n //正反面设置\r\n let mtx: Matrix4;\r\n if (vm.dir === FaceDirection.Front)\r\n mtx = new Matrix4().setPosition(0, 0, board.Thickness - item.depth);\r\n else\r\n mtx = MakeMirrorMtx(ZAxis, new Vector3(0, 0, item.depth * 0.5));\r\n\r\n for (let geom of geom3s)\r\n {\r\n geom = transform(mtx.elements as Mat4, geom);\r\n _2DPathCsgs.push(geom);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (hasError)\r\n Log(`板:${board.Name} 二维刀路建模异常!`, LogType.Error, [board]);\r\n\r\n return _2DPathCsgs;\r\n}\r\n\r\nfunction GetOffsetPath(br: Board, path: Polyline, item: I2DModeingItem): Polyline\r\n{\r\n if (item.offset === 0)\r\n {\r\n return path;\r\n }\r\n else\r\n {\r\n let cache = br.OffsetPathCache.get(path);\r\n if (!cache)\r\n {\r\n cache = {};\r\n br.OffsetPathCache.set(path, cache);\r\n }\r\n let tempPath = cache[item.offset.toString()];\r\n if (!tempPath)\r\n {\r\n tempPath = path.GetOffsetCurves(item.offset)[0];\r\n cache[item.offset.toString()] = tempPath;\r\n }\r\n return tempPath;\r\n }\r\n}\r\n\r\n//获取端点旋转矩阵 使8段圆对齐曲线 (提刀部分)\r\nfunction GetRMtxOfCurveOfAngle(cu: Line | Arc, startPt = true)\r\n{\r\n if (cu instanceof Line)\r\n {\r\n let pt1 = cu.StartPoint.sub(cu.EndPoint);\r\n return new Matrix4().makeRotationZ(Math.atan2(pt1.y, pt1.x));\r\n }\r\n else if (cu instanceof Arc)\r\n {\r\n let extractRotation = new Matrix4().extractRotation(cu.OCSNoClone);\r\n let angle = 0;\r\n let fuzzAngle = Math.PI / GetArcDrawCount(cu.Radius);\r\n if (startPt)\r\n angle = cu.IsClockWise ? (cu.StartAngle - fuzzAngle) : (cu.StartAngle + fuzzAngle);\r\n else\r\n angle = cu.IsClockWise ? (fuzzAngle + cu.EndAngle) : (cu.EndAngle - fuzzAngle);\r\n\r\n return new Matrix4().makeRotationZ(angle).multiply(extractRotation);\r\n }\r\n};\r\n\r\n//获取端点旋转矩阵 使8段圆对齐曲线 (非提刀部分)\r\nfunction GetRMtxOfCurve(cu1: Line | Arc, cu2: Line | Arc)\r\n{\r\n if (cu1 instanceof Line)\r\n {\r\n if (cu2 instanceof Line)\r\n {\r\n let v1 = cu1.StartPoint.sub(cu1.EndPoint);\r\n let v2 = cu2.EndPoint.sub(cu2.StartPoint);\r\n let angleToV = angleTo(v1, v2);\r\n\r\n //补角的圆度数\r\n let drawCircularAngle = Math.PI - Math.abs(angleToV);\r\n let addAng = 0;\r\n let cuV1 = angle(v1);\r\n\r\n if (angleToV > 0)\r\n addAng = Math.PI - drawCircularAngle;\r\n\r\n let rRange = cuV1 + HALF_PI + addAng;\r\n return { rRange, drawCircularAngle };\r\n }\r\n else if (cu2 instanceof Arc)\r\n {\r\n let v1 = cu1.StartPoint.sub(cu1.EndPoint);\r\n let v2 = cu2.Center.sub(cu2.StartPoint).applyMatrix4(new Matrix4().makeRotationZ(-HALF_PI));\r\n let angleToV = angleTo(v1, v2);\r\n\r\n //补角的圆度数\r\n let drawCircularAngle = cu2.IsClockWise ? Math.abs(angleToV) : (Math.PI - Math.abs(angleToV));\r\n let addAng = 0;\r\n let cuV1 = angle(v1);\r\n\r\n if (angleToV > 0)\r\n addAng = cu2.IsClockWise ? HALF_PI : (-HALF_PI - drawCircularAngle);\r\n else\r\n addAng = cu2.IsClockWise ? (angleToV - HALF_PI) : HALF_PI;\r\n\r\n let rRange = cuV1 + addAng;\r\n return { rRange, drawCircularAngle };\r\n }\r\n\r\n }\r\n else if (cu1 instanceof Arc)\r\n {\r\n if (cu2 instanceof Line)\r\n {\r\n let v1 = cu1.Center.sub(cu1.EndPoint).applyMatrix4(new Matrix4().makeRotationZ(-HALF_PI));\r\n let v2 = cu2.EndPoint.sub(cu2.StartPoint);\r\n let angleToV = angleTo(v1, v2);\r\n\r\n //补角的圆度数\r\n let drawCircularAngle = cu1.IsClockWise ? Math.PI - Math.abs(angleToV) : Math.abs(angleToV);\r\n let cuV2 = angle(v2);\r\n let addAng = 0;\r\n\r\n if (angleToV > 0)\r\n addAng = cu1.IsClockWise ? HALF_PI : -(drawCircularAngle + HALF_PI);\r\n else\r\n addAng = cu1.IsClockWise ? -(drawCircularAngle + HALF_PI) : HALF_PI;\r\n\r\n let rRange = cuV2 + addAng;\r\n return { rRange, drawCircularAngle };\r\n }\r\n else if (cu2 instanceof Arc)\r\n {\r\n let v1 = cu1.Center.sub(cu1.EndPoint).applyMatrix4(new Matrix4().makeRotationZ(cu1.IsClockWise ? -HALF_PI : HALF_PI));\r\n let v2 = cu2.Center.sub(cu1.EndPoint).applyMatrix4(new Matrix4().makeRotationZ(cu2.IsClockWise ? HALF_PI : -HALF_PI));\r\n let angleToV = angleTo(v1, v2);\r\n\r\n //补角的圆度数\r\n let drawCircularAngle = Math.PI - Math.abs(angleToV);\r\n let addAng = 0;\r\n let cuV1 = angle(v1);\r\n\r\n if (angleToV > 0)\r\n addAng = Math.PI - drawCircularAngle;\r\n\r\n let rRange = cuV1 + HALF_PI + addAng;\r\n return { rRange, drawCircularAngle };\r\n }\r\n }\r\n};\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","import { Box3, BufferGeometry, Face3, Float32BufferAttribute, Geometry, Line3, Triangle, Vector3 } from \"three\";\r\nimport { arraySortByNumber } from \"../Common/ArrayExt\";\r\nimport { Geom3Res, PolygonRes } from \"../Common/CSGIntersect\";\r\nimport { FixIndex } from \"../Common/Utils\";\r\nimport { FuzzyFactory } from \"../csg/core/FuzzyFactory\";\r\nimport { FuzzyCSGFactory } from \"../csg/core/FuzzyFactory3d\";\r\nimport { equalv3 } from \"./GeUtils\";\r\n//ref: https://github.com/mrdoob/js/issues/10517\r\n\r\nconst keys = ['a', 'b', 'c'];\r\n\r\nexport class EdgesGeometry extends BufferGeometry\r\n{\r\n /**\r\n * 在使用Extrude实体的时候,有可能导致面无限分裂,并且有可能造成丢线问题,使用FromCSG方法可解.\r\n */\r\n FromGeometry(geometry, thresholdAngle: number = 1)\r\n {\r\n let geometry2: Geometry;\r\n\r\n if (geometry.isBufferGeometry)\r\n geometry2 = new Geometry().fromBufferGeometry(geometry);\r\n else\r\n geometry2 = geometry.clone();\r\n\r\n geometry2.mergeVertices();\r\n geometry2.computeFaceNormals();\r\n\r\n let vertices = geometry2.vertices;\r\n let faces = geometry2.faces;\r\n\r\n let count = faces.length;\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n if (faces.length > count * 2)\r\n {\r\n console.warn(\"EdgeGeometry的分裂已经到达2倍!\");\r\n break;\r\n }\r\n let face = faces[i];\r\n\r\n if (FaceArea(face, vertices) < 1e-5)\r\n continue;\r\n\r\n for (let j = 0; j < 3; j++)\r\n {\r\n let e1 = face[keys[j]];\r\n let e2 = face[keys[(j + 1) % 3]];\r\n let e3 = face[keys[(j + 2) % 3]];\r\n\r\n let line = new Line3(vertices[e1], vertices[e2]);\r\n\r\n //split triangle\r\n for (let e = 0, l = vertices.length; e < l; e++)\r\n {\r\n if (e === e1 || e === e2 || e === e3)\r\n continue;\r\n\r\n let p = vertices[e];\r\n let closestPoint = line.closestPointToPoint(p, true, new Vector3());\r\n if (equalv3(closestPoint, vertices[e1], 1e-5) || equalv3(closestPoint, vertices[e2]))\r\n continue;\r\n if (equalv3(closestPoint, p, 1e-5))\r\n {\r\n face[\"splitted\"] = true;\r\n let f1 = new Face3(e, e3, e1, face.normal);\r\n let f2 = new Face3(e, e3, e2, face.normal);\r\n faces.push(f1, f2);\r\n break;\r\n }\r\n }\r\n if (face[\"splitted\"])\r\n break;\r\n }\r\n }\r\n\r\n let edge = [0, 0];\r\n let hash: { [key: string]: { vert1: number, vert2: number, face1: Face3, face2?: Face3; }; } = {};\r\n\r\n for (let i = 0, l = faces.length; i < l; i++)\r\n {\r\n let face = faces[i];\r\n\r\n if (face[\"splitted\"]) continue;\r\n\r\n for (let j = 0; j < 3; j++)\r\n {\r\n edge[0] = face[keys[j]];\r\n edge[1] = face[keys[(j + 1) % 3]];\r\n arraySortByNumber(edge);\r\n\r\n let key = edge.toString();\r\n\r\n if (hash[key] === undefined)\r\n hash[key] = { vert1: edge[0], vert2: edge[1], face1: face };\r\n else\r\n hash[key].face2 = face;\r\n }\r\n }\r\n\r\n let coords: number[] = [];\r\n let thresholdDot = Math.cos(Math.PI / 180 * thresholdAngle);\r\n\r\n for (let key in hash)\r\n {\r\n let h = hash[key];\r\n\r\n // An edge is only rendered if the angle (in degrees) between the face normals of the adjoining faces exceeds this value. default = 1 degree.\r\n if (h.face2 && h.face1.normal.dot(h.face2.normal) <= thresholdDot)\r\n {\r\n let vertex = vertices[h.vert1];\r\n coords.push(vertex.x);\r\n coords.push(vertex.y);\r\n coords.push(vertex.z);\r\n\r\n vertex = vertices[h.vert2];\r\n coords.push(vertex.x);\r\n coords.push(vertex.y);\r\n coords.push(vertex.z);\r\n }\r\n }\r\n this.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * 解决原来算法性能低下并且结果不理想的问题\r\n */\r\n FromCSG(csg: Geom3Res)\r\n {\r\n let fuzzyfactory = new FuzzyCSGFactory();\r\n\r\n let polygonsPerPlane = new Map<any, PolygonRes[]>();\r\n\r\n for (let polygon of csg.polygons)\r\n {\r\n polygon.plane = fuzzyfactory.planefactory.lookupOrCreate(polygon.plane, polygon.plane);\r\n\r\n let arr = polygonsPerPlane.get(polygon.plane);\r\n if (!arr)\r\n {\r\n arr = [];\r\n polygonsPerPlane.set(polygon.plane, arr);\r\n }\r\n\r\n arr.push(polygon);\r\n }\r\n\r\n let coords: number[] = [];\r\n\r\n for (let [, polygonArr] of polygonsPerPlane)\r\n {\r\n this.PolygonsOutline(polygonArr, coords);\r\n }\r\n this.setAttribute('position', new Float32BufferAttribute(coords, 3));\r\n return this;\r\n }\r\n\r\n PolygonsOutline(polygons: PolygonRes[], coords: number[])\r\n {\r\n let pts: Vector3[] = [];\r\n let ff = new FuzzyFactory(3, 1e-7);\r\n let record: { [key: string]: { p1: Vector3, p2: Vector3, count: number; }; } = {};\r\n\r\n for (let polygon of polygons)\r\n {\r\n for (let i = 0, count = polygon.vertices.length; i < count; i++)\r\n {\r\n let p = polygon.vertices[i];\r\n let vp = ff.lookupOrCreate(p, new Vector3().fromArray(p));\r\n //@ts-ignore\r\n p.pos = vp;\r\n if (!(\"_added_\" in vp))\r\n {\r\n vp[\"_added_\"] = pts.length;\r\n pts.push(vp);\r\n }\r\n }\r\n }\r\n\r\n for (let polygon of polygons)\r\n {\r\n for (let i = 0, count = polygon.vertices.length; i < count; i++)\r\n {\r\n //@ts-ignore\r\n let p1 = polygon.vertices[i].pos as Vector3;\r\n //@ts-ignore\r\n let p2 = polygon.vertices[FixIndex(i + 1, count)].pos;\r\n\r\n let delta = p2.clone().sub(p1);\r\n let lengthSq = delta.dot(delta);\r\n\r\n let splitPts: { param: number, pt: Vector3; }[] = [];\r\n\r\n let box = new Box3().setFromPoints([p1, p2]).expandByVector(new Vector3(1, 1, 1));\r\n\r\n for (let p of pts)\r\n {\r\n if (p === p1 || p === p2) continue;\r\n\r\n if (!box.containsPoint(p)) continue;\r\n\r\n let delta2 = p.clone().sub(p1);\r\n let len2 = delta2.dot(delta);\r\n\r\n let t = len2 / lengthSq;\r\n\r\n if (t > 0 && t < 1)\r\n {\r\n let closestPoint = delta.clone().multiplyScalar(t).add(p1);\r\n if (equalv3(closestPoint, p, 1e-3))\r\n splitPts.push({ param: t, pt: p });\r\n }\r\n }\r\n\r\n splitPts.sort((p1, p2) => p1.param - p2.param);\r\n splitPts.push({ param: 1, pt: p2 });\r\n\r\n let lastP = p1;\r\n\r\n for (let p of splitPts)\r\n {\r\n let tag1 = lastP[\"_added_\"] as number;\r\n let tag2 = p.pt[\"_added_\"] as number;\r\n\r\n let key: string;\r\n if (tag1 < tag2) key = `${tag1},${tag2}`;\r\n else key = `${tag2},${tag1}`;\r\n\r\n if (key in record)\r\n record[key].count++;\r\n else\r\n record[key] = { p1: lastP, p2: p.pt, count: 1 };\r\n\r\n lastP = p.pt;\r\n }\r\n }\r\n }\r\n\r\n for (let key in record)\r\n {\r\n let d = record[key];\r\n if (d.count === 1)\r\n coords.push(d.p1.x, d.p1.y, d.p1.z, d.p2.x, d.p2.y, d.p2.z);\r\n }\r\n }\r\n}\r\n\r\nlet triangle = new Triangle();\r\nfunction FaceArea(f: Face3, pts: Vector3[])\r\n{\r\n triangle.a = pts[f.a];\r\n triangle.b = pts[f.b];\r\n triangle.c = pts[f.c];\r\n\r\n return triangle.getArea();\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { BoardOpenDir, LinesType } from \"../DatabaseServices/Entity/BoardInterface\";\r\n\r\nexport class PointShapeUtils\r\n{\r\n //方形点表\r\n static SquarePts(size: number)\r\n {\r\n return [\r\n new Vector3(-size, -size),\r\n new Vector3(size, -size),\r\n new Vector3(size, size),\r\n new Vector3(-size, size),\r\n new Vector3(-size, -size),\r\n ];\r\n }\r\n //方形外圈十字直线点表\r\n static OutsideLinePts(squareSize: number, lineLength: number)\r\n {\r\n return [\r\n //-X\r\n new Vector3(-squareSize, 0),\r\n new Vector3(-lineLength, 0),\r\n //X\r\n new Vector3(squareSize, 0),\r\n new Vector3(lineLength, 0),\r\n //Y\r\n new Vector3(0, squareSize),\r\n new Vector3(0, lineLength),\r\n\r\n //-Y\r\n new Vector3(0, -squareSize),\r\n new Vector3(0, -lineLength),\r\n ];\r\n }\r\n //十字直线点表\r\n static CrossLinePts(lineLength: number)\r\n {\r\n return [\r\n new Vector3(0, -lineLength),\r\n new Vector3(0, lineLength),\r\n\r\n new Vector3(lineLength, 0),\r\n new Vector3(-lineLength, 0),\r\n ];\r\n }\r\n static CrossLine3DPts(lineLength: number)\r\n {\r\n return [\r\n [new Vector3(lineLength, 0),\r\n new Vector3(-lineLength / 2, 0)],\r\n [new Vector3(0, -lineLength / 2),\r\n new Vector3(0, lineLength)],\r\n [new Vector3(0, 0, -lineLength / 2),\r\n new Vector3(0, 0, lineLength)],\r\n ];\r\n }\r\n\r\n static TrianglePts(size: number)\r\n {\r\n return [\r\n new Vector3(size, -size),\r\n new Vector3(0, size),\r\n new Vector3(-size, -size),\r\n new Vector3(size, -size),\r\n ];\r\n }\r\n\r\n static CirclePts(size: number)\r\n {\r\n let pts = [];\r\n let a = Math.PI * 2 / 8;\r\n for (let i = 0; i < 9; i++)\r\n pts.push(new Vector3(Math.sin(a * i) * size, Math.cos(a * i) * size));\r\n return pts;\r\n }\r\n\r\n static ObliqueCrossPts(size: number)\r\n {\r\n return [new Vector3(-size, size), new Vector3(size, -size), new Vector3(-size, -size), new Vector3(size, size)];\r\n }\r\n static ObliqueCrossLinePts(size: number)\r\n {\r\n return [new Vector3(-size, size), new Vector3(size, -size), new Vector3(), new Vector3(-size, -size), new Vector3(size, size)];\r\n }\r\n\r\n static SandClockPts(size: number)\r\n {\r\n return [\r\n new Vector3(size, size),\r\n new Vector3(-size, size),\r\n new Vector3(size, -size),\r\n new Vector3(-size, -size),\r\n new Vector3(size, size),\r\n ];\r\n }\r\n\r\n static TangentPts(size: number)\r\n {\r\n let pts = [\r\n new Vector3(-size, size),\r\n new Vector3(size, size),\r\n new Vector3(size / 2, size),\r\n ];\r\n let a = Math.PI * 2 / 8;\r\n for (let i = 0; i < 9; i++)\r\n pts.push(new Vector3(Math.sin(a * i + Math.PI / 2) * size, Math.cos(a * i + Math.PI / 2) * size));\r\n return pts;\r\n }\r\n\r\n static PerPts(size: number)\r\n {\r\n return [\r\n new Vector3(-size, size),\r\n new Vector3(-size, -size),\r\n new Vector3(size, -size),\r\n new Vector3(0, -size),\r\n new Vector3(0, 0),\r\n new Vector3(-size, 0),\r\n ];\r\n }\r\n\r\n static LinesDirPts(len: number, width: number, lineType: LinesType)\r\n {\r\n if (lineType === LinesType.Reverse)\r\n {\r\n return [\r\n new Vector3(-len / 2), new Vector3(-len / 2 + width / 2, width / 2),\r\n new Vector3(-len / 2), new Vector3(-len / 2 + width / 2, -width / 2),\r\n new Vector3(-len / 2), new Vector3(len / 2),\r\n new Vector3(len / 2), new Vector3(len / 2 - width / 2, width / 2),\r\n new Vector3(len / 2), new Vector3(len / 2 - width / 2, -width / 2),\r\n ];\r\n }\r\n else if (lineType === LinesType.Positive)\r\n return [\r\n new Vector3(0, -len / 2), new Vector3(-width / 2, -len / 2 + width / 2),\r\n new Vector3(0, -len / 2), new Vector3(width / 2, -len / 2 + width / 2),\r\n new Vector3(0, -len / 2), new Vector3(0, len / 2),\r\n new Vector3(0, len / 2), new Vector3(-width / 2, len / 2 - width / 2),\r\n new Vector3(0, len / 2), new Vector3(width / 2, len / 2 - width / 2),\r\n\r\n ];\r\n else\r\n {\r\n let w1 = Math.min(len, width) / 5;\r\n\r\n return [\r\n new Vector3(0, len / 2), new Vector3(0, -len / 2),\r\n new Vector3(-width / 2), new Vector3(width / 2),\r\n\r\n new Vector3(-width / 2), new Vector3(-width / 2 + w1, w1),\r\n new Vector3(-width / 2), new Vector3(-width / 2 + w1, -w1),\r\n new Vector3(width / 2), new Vector3(width / 2 - w1, w1),\r\n new Vector3(width / 2), new Vector3(width / 2 - w1, -w1),\r\n\r\n new Vector3(0, len / 2), new Vector3(-w1, len / 2 - w1),\r\n new Vector3(0, len / 2), new Vector3(w1, len / 2 - w1),\r\n new Vector3(0, -len / 2), new Vector3(-w1, -len / 2 + w1),\r\n new Vector3(0, -len / 2), new Vector3(w1, -len / 2 + w1),\r\n ];\r\n }\r\n }\r\n\r\n //开门方向纹路\r\n static LinesOpenDirPts(len: number, width: number, openDir: BoardOpenDir)\r\n {\r\n if (openDir === BoardOpenDir.Right)\r\n {\r\n return [\r\n new Vector3(-width / 2, -len / 2), new Vector3(width / 2, 0),\r\n new Vector3(width / 2, 0), new Vector3(-width / 2, len / 2)\r\n ];\r\n }\r\n else if (openDir === BoardOpenDir.Left)\r\n {\r\n return [\r\n new Vector3(width / 2, -len / 2), new Vector3(-width / 2, 0),\r\n new Vector3(-width / 2, 0), new Vector3(width / 2, len / 2)\r\n ];\r\n }\r\n else if (openDir === BoardOpenDir.Up)\r\n {\r\n return [\r\n new Vector3(-width / 2, -len / 2), new Vector3(0, len / 2),\r\n new Vector3(0, len / 2), new Vector3(width / 2, -len / 2)\r\n ];\r\n }\r\n else if (openDir === BoardOpenDir.Down)\r\n {\r\n return [\r\n new Vector3(-width / 2, len / 2), new Vector3(0, -len / 2),\r\n new Vector3(0, -len / 2), new Vector3(width / 2, len / 2)\r\n ];\r\n }\r\n }\r\n\r\n}\r\n","import { BufferGeometry, Geometry, Matrix3, Matrix4, Mesh, Object3D, ShapeGeometry, Vector3 } from 'three';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { GetBox, MoveMatrix, XAxis, XAxisN, YAxis, YAxisN, ZAxisN } from '../../Geometry/GeUtils';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { equaln } from '../../Nest/Common/Util';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Entity } from '../Entity/Entity';\r\n\r\nexport enum TextAligen\r\n{\r\n LeftTop = 3, Top = 1, RightTop = 5,\r\n LeftMid = 2, Mid = 0, RightMid = 4,\r\n LeftDown = 10, Down = 8, RightDown = 12,\r\n}\r\n\r\nconst ShapeCache = new Map<string, ShapeGeometry>();\r\nexport function DisposeTextShapeCache()\r\n{\r\n for (let [key, geo] of ShapeCache)\r\n geo.dispose();\r\n ShapeCache.clear();\r\n};\r\n\r\n/**\r\n * 单行文字实体\r\n */\r\n@Factory\r\nexport class Text extends Entity\r\n{\r\n protected OnlyRenderType = true;\r\n\r\n IsDoubleMesh = false;//文字使用双面网格体\r\n IsFsText = false;//文字写在俯视图上\r\n\r\n private _Align: TextAligen = TextAligen.LeftDown;\r\n constructor(pos?: Vector3,\r\n private _TextString: string = \"\",\r\n public _FontName: string = \"songti\",\r\n private _Height: number = 60,\r\n private _TextRotation: number = 0,\r\n )\r\n {\r\n super();\r\n pos && this._Matrix.setPosition(pos);\r\n }\r\n get TextRotation()\r\n {\r\n return this._TextRotation;\r\n }\r\n set TextRotation(v: number)\r\n {\r\n if (this._TextRotation === v) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._TextRotation = v;\r\n this.UpdateTranslate();\r\n }\r\n get TextString()\r\n {\r\n return this._TextString;\r\n }\r\n set TextString(str: string)\r\n {\r\n if (str !== this._TextString)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._TextString = str;\r\n this.Update();\r\n }\r\n }\r\n\r\n set TextAligen(al: TextAligen)\r\n {\r\n if (al === this._Align) return;\r\n this.WriteAllObjectRecord();\r\n this._Align = al;\r\n this.UpdateTranslate();\r\n }\r\n get TextAligen()\r\n {\r\n return this._Align;\r\n }\r\n\r\n get Height()\r\n {\r\n return this._Height;\r\n }\r\n set Height(v: number)\r\n {\r\n if (equaln(v, this._Height)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Height = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n //创建字体对象\r\n async AsyncUpdateDrawObject(obj: Object3D, renderType: RenderType)\r\n {\r\n \r\n }\r\n /**大概宽度 */\r\n get Width()\r\n {\r\n let count = 0;\r\n for (let i = 0; i < this._TextString.length; i++)\r\n {\r\n let code = this._TextString.charCodeAt(i);\r\n if (code > 255)\r\n count++;\r\n else\r\n count += 0.5;\r\n }\r\n return count * this._Height * 1.35;\r\n }\r\n\r\n get HasBoundingBox() { return this._CacheDrawObject.has(RenderType.Wireframe); }\r\n\r\n get BoundingBox()\r\n {\r\n let obj = this._CacheDrawObject.get(RenderType.Wireframe);\r\n if (obj && obj.children.length === 1)\r\n return GetBox(obj);\r\n\r\n return this.BoundingBoxInOCS.applyMatrix4((this.OCSNoClone));\r\n }\r\n\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let width = this.Width;\r\n let height = this.Height;\r\n\r\n let obj = this._CacheDrawObject.get(RenderType.Wireframe);\r\n if (obj && obj.children.length === 1)\r\n {\r\n let geo = (obj.children[0] as Mesh).geometry as BufferGeometry;\r\n if (geo)\r\n {\r\n if (!geo.boundingBox)\r\n geo.computeBoundingBox();\r\n\r\n width = geo.boundingBox.max.x - geo.boundingBox.min.x;\r\n height = geo.boundingBox.max.y - geo.boundingBox.min.y;\r\n }\r\n }\r\n\r\n let w = Math.max(Math.abs(width / 2), 1);\r\n let h = Math.max(Math.abs(height / 2), 1);\r\n let box = new Box3Ext(\r\n new Vector3(-w, -h, 0),\r\n new Vector3(w, h, 0)\r\n );\r\n\r\n let offset = new Vector3;\r\n if (this.TextAligen & TextAligen.LeftMid)\r\n offset.x = w;\r\n if (this.TextAligen & TextAligen.RightMid)\r\n offset.x = -w;\r\n if (this.TextAligen & TextAligen.Top)\r\n offset.y = -h;\r\n if (this.TextAligen & TextAligen.Down)\r\n offset.y = h;\r\n\r\n box.translate(offset);\r\n return box;\r\n }\r\n\r\n UpdateTranslate()\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n this.UpdateObjectTranslate(obj);\r\n }\r\n }\r\n\r\n private UpdateObjectTranslate(obj: Object3D)\r\n {\r\n if (obj.children.length > 0)\r\n {\r\n let [mesh, mesh2] = obj.children as [Mesh, Mesh];\r\n\r\n let box = mesh.geometry.boundingBox;\r\n\r\n let p = new Vector3();\r\n if (this._Align & TextAligen.LeftMid)\r\n p.x = box.min.x;\r\n else if (this._Align & TextAligen.RightMid)\r\n p.x = box.max.x;\r\n else\r\n p.x = (box.min.x + box.max.x) / 2;\r\n\r\n if (this._Align & TextAligen.Top)\r\n p.y = box.max.y;\r\n else if (this._Align & TextAligen.Down)\r\n p.y = box.min.y;\r\n\r\n else\r\n p.y = (box.min.y + box.max.y) / 2;\r\n\r\n mesh.matrix = new Matrix4().makeRotationZ(this.TextRotation).multiply(\r\n new Matrix4().setPosition(p.negate())\r\n );\r\n\r\n if (mesh2 && this.IsDoubleMesh)\r\n {\r\n //左右视图时应该这样,俯视图是X,-Y,-Z(y+=(xxx)\r\n if (this.IsFsText)\r\n {\r\n p.y += (box.max.y - box.min.y);\r\n mesh2.matrix = new Matrix4().makeBasis(XAxis, YAxisN, ZAxisN).premultiply(\r\n new Matrix4().makeRotationZ(this.TextRotation).multiply(\r\n new Matrix4().setPosition(p)\r\n )\r\n );\r\n }\r\n else\r\n {\r\n p.x += (box.max.x - box.min.x);\r\n mesh2.matrix = new Matrix4().makeBasis(XAxisN, YAxis, ZAxisN).premultiply(\r\n new Matrix4().makeRotationZ(this.TextRotation).multiply(\r\n new Matrix4().setPosition(p)\r\n )\r\n );\r\n }\r\n }\r\n\r\n obj.updateMatrixWorld(true);\r\n }\r\n }\r\n\r\n ApplyMatrix(m: Matrix4): this\r\n {\r\n super.ApplyMatrix(m);\r\n return this;\r\n }\r\n\r\n protected ApplyScaleMatrix(m: Matrix4): this\r\n {\r\n this.WriteAllObjectRecord();\r\n let p1 = this.Position;\r\n let p2 = new Vector3(0, this._Height).applyMatrix4(this.OCS);\r\n [p1, p2].forEach(p => p.applyMatrix4(m));\r\n this.Position = p1;\r\n this.Height = p1.distanceTo(p2);\r\n return this;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let g = new Object3D();\r\n\r\n if (renderType !== RenderType.Wireframe)\r\n {\r\n let obj = this.CacheDrawObject.get(RenderType.Wireframe);\r\n if (obj && obj.children.length === 1 && (obj.children[0] as Mesh<Geometry>).geometry)\r\n {\r\n let color = (renderType > 100 || renderType === RenderType.Print) ? 0 : this.DrawColorIndex;\r\n let mesh = new Mesh((obj.children[0] as Mesh<Geometry>).geometry, ColorMaterial.GetBasicMaterial(color));\r\n g.add((mesh));\r\n g.updateMatrixWorld(true);\r\n this.UpdateObjectTranslate(g);\r\n return g;\r\n }\r\n }\r\n\r\n this.AsyncUpdateDrawObject(g, renderType);\r\n return g;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n this.AsyncUpdateDrawObject(obj, type);\r\n }\r\n UpdateDrawObjectMaterial(renderType: RenderType, en: Object3D)\r\n {\r\n if (en && en.children.length === 1)\r\n {\r\n let mesh = en.children[0] as Mesh;\r\n //因为我们是OnlyRnderType 所以Print会变成WireframePrint,所以要用下面的写法\r\n let color = (renderType > 100 || renderType === RenderType.Print) ? 0 : this.DrawColorIndex;\r\n mesh.material = ColorMaterial.GetBasicMaterialDoubleSide(color);\r\n }\r\n }\r\n GetGripPoints(): Array<Vector3>\r\n {\r\n return [this.Position, new Vector3(0, this.Height).applyMatrix4(this.OCS)];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n\r\n if (indexList[0] === 0)\r\n this.Position = this.Position.add(vec);\r\n else\r\n {\r\n let v = vec.clone().applyMatrix4(this.OCSInv.setPosition(new Vector3));\r\n this.Height = this.Height + v.y;\r\n }\r\n }\r\n //捕捉点\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n if (snapMode === ObjectSnapMode.End)\r\n {\r\n let box = this.BoundingBoxInOCS;\r\n let p2 = new Vector3(box.min.x, box.max.y);\r\n let p3 = new Vector3(box.max.x, box.min.y);\r\n let pts = [box.min, p2, p3, box.max];\r\n for (let p of pts)\r\n p.applyMatrix4(this.OCSNoClone);\r\n return pts;\r\n }\r\n return [];\r\n }\r\n GetStretchPoints(): Array<Vector3>\r\n {\r\n return [this.Position];\r\n }\r\n MoveStretchPoints(indexList: Array<number>, vec: Vector3)\r\n {\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n }\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._TextString = file.Read();\r\n this._Height = file.Read();\r\n this.TextRotation = file.Read();\r\n this._FontName = file.Read();\r\n this._Align = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n file.Write(this._TextString);\r\n file.Write(this._Height);\r\n file.Write(this.TextRotation);\r\n file.Write(this._FontName);\r\n file.Write(this._Align);\r\n }\r\n //#endregion-----------------------------File End-----------------------------\r\n}\r\n\r\n\r\nexport const DbText = Text;\r\n","import Geom3 from '@jscad/modeling/src/geometries/geom3/type';\r\nimport { BufferAttribute, BufferGeometry, Euler, FrontSide, Frustum, Geometry, LineSegments, Matrix3, Matrix4, Mesh, Object3D, ShapeGeometry, Line as TLine, UVGenerator, Vector3 } from 'three';\r\nimport { ArcBoardBuild } from '../../Add-on/ArcBoard/ArcBoardBuild';\r\nimport { ArcBoardOptions, ParseBoardArcFeed, defultArcBoardOption } from '../../Add-on/ArcBoard/ArcBoardFeeding';\r\nimport { CurveManager } from '../../Add-on/BoardCutting/LinearCuttingForSweep';\r\nimport { SplitBoardSideModelUtil } from '../../Add-on/BoardCutting/SplitBoardSideModel';\r\nimport { Board2Regions } from '../../Add-on/BoardEditor/Board2Regions';\r\nimport { DeserializationBoard2DModeingData, DeserializationBoard3DModeingData, DeserializationBoardSideModeingData, SerializeBoard2DModeingData, SerializeBoard3DModeingData, SerializeBoardSideModeingData, deserializationBoardData, serializeBoardData } from '../../Add-on/BoardEditor/SerializeBoardData';\r\nimport { DrillType, FaceDirection } from \"../../Add-on/DrawDrilling/DrillType\";\r\nimport { CyHoleInBoard, IBoardRectHoleType, ParseBoardRectHoleType, SetBrHighHoleTypeFromRectHoleType } from '../../Add-on/DrawDrilling/HoleUtils';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { AddEntityDrawObject } from '../../Common/AddEntityDrawObject';\r\nimport { arrayLast, arrayPushArray, arrayRemoveDuplicateBySort, arrayRemoveIf, arraySortByNumber, arraySum } from '../../Common/ArrayExt';\r\nimport { EBoardKeyList } from '../../Common/BoardKeyList';\r\nimport { Geom3Res } from '../../Common/CSGIntersect';\r\nimport { ColorMaterial } from '../../Common/ColorPalette';\r\nimport { DisposeThreeObj, Object3DRemoveAll } from '../../Common/Dispose';\r\nimport { Log, LogType } from '../../Common/Log';\r\nimport { MakeMirrorMtx, TransformVector, tempMatrix1 } from '../../Common/Matrix4Utils';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { FixedNotZero } from '../../Common/Utils';\r\nimport { safeEval } from '../../Common/eval';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { SelectPick } from '../../Editor/SelectPick';\r\nimport { Board2DModelCSGBuilder } from '../../Geometry/Board2DModelCSG/Board2DModelCSGBuilder';\r\nimport { BoardSideModelCSGBuilder, GetSideCuFaceMtx } from '../../Geometry/Board2DModelCSG/BoardSideModelCSGBuilder';\r\nimport { boardUVGenerator, boardUVGenerator2 } from '../../Geometry/BoardUVGenerator';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { BufferGeometryUtils } from '../../Geometry/BufferGeometryUtils';\r\nimport { AddCSGSubtractTask, CSGTask, TerminateCSGTask } from '../../Geometry/CSGSubtract/CSGSubtractTaskManager';\r\nimport { EdgesGeometry } from '../../Geometry/EdgeGeometry';\r\nimport { AsVector2, AsVector3, IdentityMtx4, UpdateBoundingSphere, XAxis, XAxisN, YAxis, YAxisN, ZAxis, ZeroVec, equaln, equalv2, equalv3 } from '../../Geometry/GeUtils';\r\nimport { PointShapeUtils } from '../../Geometry/PointShapeUtils';\r\nimport { GetBoardContour, GetBoardHighSeal, GetBoardSealingCurves, GetHighBoardEdgeRemark, SetBoardEdgeRemarkData, SetBoardTopDownLeftRightSealData } from '../../GraphicsSystem/CalcEdgeSealing';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { BoardProcessOption } from \"../../UI/Store/OptionInterface/BoardProcessOption\";\r\nimport { CSG2Geometry2, Geometry2CSG2 } from '../../csg/core/Geometry2CSG';\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 { HistorycRecord } from '../HistorycRecord';\r\nimport { ObjectId } from '../ObjectId';\r\nimport { Shape } from '../Shape';\r\nimport { Text as DbText, TextAligen } from \"../Text/Text\";\r\nimport { Arc } from './Arc';\r\nimport { BoardOpenDir, BoardType, ComposingType, LinesType } from './BoardInterface';\r\nimport { Circle } from './Circle';\r\nimport { Curve } from './Curve';\r\nimport { DragPointType } from './DragPointType';\r\nimport { Entity } from './Entity';\r\nimport { ExtrudeContourCurve, ExtrudeSolid } from './Extrude';\r\nimport { ExtrudeConfig } from './ExtrudeConfig';\r\nimport { GenLocalUv } from './GenLocalUv';\r\nimport { Line } from './Line';\r\nimport { Polyline } from './Polyline';\r\n\r\n//排钻配置名是合法的 可用的\r\nfunction IsValidDriName(name: string): boolean\r\n{\r\n return name === DrillType.None || HostApplicationServices.DrillConfigs.has(name);\r\n}\r\n\r\nexport interface IModeling\r\n{\r\n shape: Shape;\r\n thickness: number;\r\n dir: FaceDirection;\r\n knifeRadius: number;\r\n addLen: number;\r\n addWidth?: number;\r\n addDepth?: number;\r\n}\r\n\r\nexport interface IKnifeInfo\r\n{\r\n angle: number;\r\n radius: number;\r\n id: string;\r\n name: string;\r\n}\r\n\r\nexport interface I2DModeingItem\r\n{\r\n depth: number;\r\n depthExpr: string;\r\n offset: number;\r\n knife: IKnifeInfo;\r\n}\r\n\r\nexport interface I2DModeling\r\n{\r\n path: Polyline;\r\n dir: FaceDirection;\r\n items: I2DModeingItem[];\r\n}\r\n\r\nexport interface IPathItem { pt: Vector3, bul: number; }\r\n\r\nexport interface I3DModeling\r\n{\r\n path: IPathItem[];\r\n dir: FaceDirection;\r\n knife: IKnifeInfo;\r\n}\r\n\r\nexport interface ObjectIdArr extends Array<ObjectId>\r\n{\r\n Name?: string;\r\n}\r\n\r\n/**\r\n * 板件实体\r\n */\r\n@Factory\r\nexport class Board extends ExtrudeSolid\r\n{\r\n protected HasEdgeRenderType = true;\r\n protected HasPlaceFaceRenderType = true;\r\n protected HasBigHoleFaceRenderType = true;\r\n\r\n private _Rotation = {\r\n x: 0,\r\n y: 0,\r\n z: 0\r\n };\r\n private _BoardType: BoardType;\r\n private _Name = \"\";\r\n private _BoardProcessOption: BoardProcessOption;\r\n //板件排钻表,与之碰撞板件为key\r\n private _DrillList: Map<ObjectId, ObjectIdArr[]> = new Map();\r\n private _LayerNails: ObjectId[] = [];\r\n @AutoRecord RelativeHardware: ObjectId[] = [];\r\n private _OpenDir: BoardOpenDir = BoardOpenDir.None;\r\n @AutoRecord RelativeHandle: ObjectId[] = [];\r\n private _IsChaiDan: boolean = true;\r\n private _2DModelingList: I2DModeling[] = [];\r\n private _3DModelingList: I3DModeling[] = [];\r\n //侧面造型\r\n private _SideModelingMap: Map<number, ExtrudeSolid[]> = new Map();\r\n private _CustomNumber: number = null;//自定义编号\r\n private _DrillLock = false; //排钻独立锁\r\n private _DrillAssociationLock = new Set<ObjectId>(); //排钻关联锁\r\n @AutoRecord AlignLineObject: ObjectId; //对纹组\r\n\r\n //放样路径 基于OPt X Z -Y 坐标系为基准的路径\r\n private _SweepPath: Polyline = undefined;\r\n private _SweepAngle: number = 0;\r\n /** 见光面 */\r\n private _SweepVisibleFace: FaceDirection = FaceDirection.Front;\r\n\r\n _SweepArcBoardBuild: ArcBoardBuild = undefined;//用于建模和计算的类 不保证其正确性(绘制更新可能存在延迟)\r\n //圆弧板每一段圆弧的槽配置\r\n private _ArcBoardOptions: Map<number, ArcBoardOptions> = new Map();\r\n private _isDrawArcGroove: boolean = true;\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 private _jigSweepPath: Polyline; // 拖拽时见光面的SweepPath\r\n private _jigPath2WCSMtx: Matrix4; // 拖拽时路径转世界坐标系矩阵\r\n\r\n constructor()\r\n {\r\n super();\r\n this.InitBoardData();\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n if (this._SweepPath)\r\n return new Box3Ext().copy(this.MeshGeometry.boundingBox);\r\n return super.BoundingBoxInOCS;\r\n }\r\n\r\n get IsDrawArcGroove()\r\n {\r\n return this._isDrawArcGroove;\r\n }\r\n\r\n set IsDrawArcGroove(v: boolean)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._isDrawArcGroove = v;\r\n }\r\n\r\n /**\r\n * path 发生改变,更新圆弧配置\r\n * @param {{ key: number, arc: Arc; }[]} oldArcs 旧圆弧和对应的board options key\r\n * @param {Polyline} nPath 新路径(未进行起点偏移)\r\n * @return {*} {void}\r\n */\r\n private UpdateArcBoardOptionsByPath(oldArcs: { key: number, arc: Arc; }[], nPath: Polyline): void\r\n {\r\n if (oldArcs.length === 0) return;\r\n\r\n const nCurves = nPath.Explode();\r\n const newArcs: { key: number, arc: Arc; }[] = [];\r\n for (let i = 0; i < nCurves.length; i++)\r\n if (nCurves[i] instanceof Arc)\r\n newArcs.push({ key: i, arc: nCurves[i] as Arc });\r\n\r\n const newOpts = new Map<number, ArcBoardOptions>();\r\n const oldOpts = this._ArcBoardOptions;\r\n newOpts.set(-1, oldOpts.get(-1));\r\n\r\n // 设置新圆弧对应的原始配置\r\n for (let i = 0; i < newArcs.length; i++)\r\n for (const item of oldArcs)\r\n {\r\n const oldArc = item.arc;\r\n const oldKey = item.key;\r\n const newArc = newArcs[i].arc;\r\n const newKey = newArcs[i].key;\r\n if (equalv3(newArc.StartPoint, oldArc.StartPoint, 1e-5) || equalv3(newArc.EndPoint, oldArc.EndPoint, 1e-5)) // 若圆弧的头或尾部位置相同,说明是同一段圆弧\r\n {\r\n newOpts.set(newKey, { ...oldOpts.get(oldKey), arcLength: parseFloat(FixedNotZero(newArc.Length, 5)) });\r\n break;\r\n }\r\n }\r\n\r\n // 曲线从头拉到尾部后面,或者从尾拉到头部前面\r\n if (newArcs.length === 1 && newOpts.size === 1)\r\n {\r\n let oldArcIndex = 0;// 第一个圆弧\r\n if (equalv3(newArcs[0].arc.StartPoint, arrayLast(oldArcs).arc.EndPoint, 1e-3)) // 从头拉伸到尾部后面,则新圆弧的起点和旧圆弧的尾点相等。\r\n oldArcIndex = oldArcs.length - 1; // 最后一个圆弧\r\n const oldKey = oldArcs[oldArcIndex].key;\r\n const newKey = newArcs[0].key;\r\n newOpts.set(newKey, { ...oldOpts.get(oldKey), arcLength: parseFloat(FixedNotZero(newArcs[0].arc.Length, 5)) });\r\n }\r\n\r\n this._ArcBoardOptions.clear();\r\n this._ArcBoardOptions = newOpts;\r\n }\r\n\r\n get ArcBoardOptions()\r\n {\r\n if (this._ArcBoardOptions.size > 0)\r\n return this._ArcBoardOptions;\r\n\r\n let cus = new ArcBoardBuild(this).ParseSweepCurves().SweepCurves1;\r\n\r\n //key=-1 为通用转角槽配置\r\n this._ArcBoardOptions.set(-1, { ...defultArcBoardOption });\r\n cus.forEach((cu, i) =>\r\n {\r\n if (cu instanceof Arc)\r\n this._ArcBoardOptions.set(i, { ...defultArcBoardOption, arcLength: parseFloat(FixedNotZero(cu.Length, 5)) });\r\n });\r\n\r\n return this._ArcBoardOptions;\r\n }\r\n\r\n set ArcBoardOptions(opt: Map<number, ArcBoardOptions>)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ArcBoardOptions = opt;\r\n this.UpdateArcBoardOptions(false);\r\n this.Update();\r\n }\r\n\r\n UpdateArcBoardOptions(isNewPath: boolean): void\r\n {\r\n //更新ArcBuild曲线数据\r\n this._SweepArcBoardBuild = new ArcBoardBuild(this).ParseSweepCurves();\r\n let cus = this.GetSweepPathInWCS().Explode();\r\n\r\n let newOpts = new Map<number, ArcBoardOptions>();\r\n newOpts.set(-1, this._ArcBoardOptions.get(-1));\r\n //如果是新的多段线信息,就更新全部数据\r\n if (isNewPath)\r\n {\r\n cus.forEach((cu, i) =>\r\n {\r\n if (cu instanceof Arc)\r\n newOpts.set(i, { ...this._ArcBoardOptions.get(i), arcLength: parseFloat(FixedNotZero(cu.Length, 5)) });\r\n });\r\n }\r\n else if (cus.filter(cu => cu instanceof Arc).length <= this._ArcBoardOptions.size - 1)\r\n {\r\n cus.forEach((cu, i) =>\r\n {\r\n if (cu instanceof Arc && this._ArcBoardOptions.has(i))\r\n newOpts.set(i, { ...this._ArcBoardOptions.get(i), arcLength: parseFloat(FixedNotZero(cu.Length, 5)) });\r\n });\r\n }\r\n this._ArcBoardOptions = newOpts;\r\n }\r\n\r\n get IsArcBoard()\r\n {\r\n return this._SweepPath != undefined;\r\n }\r\n\r\n get ArcBuild()\r\n {\r\n if (!this._SweepArcBoardBuild) this._SweepArcBoardBuild = new ArcBoardBuild(this);\r\n return this._SweepArcBoardBuild;\r\n }\r\n\r\n SetSweepPath(path: Polyline, sweepAngle: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._SweepPath = path;\r\n this._SweepAngle = sweepAngle;\r\n this.Update();\r\n }\r\n\r\n private _FixContourByArcSweepPath_Ing = false;\r\n FixContourByArcSweepPath()\r\n {\r\n if (!this._SweepPath) return;\r\n\r\n //标记正在修改轮廓 避免重复进入\r\n this._FixContourByArcSweepPath_Ing = true;\r\n\r\n let build = new ArcBoardBuild(this);\r\n let length = build.SweepLength;\r\n if (this._SweepAngle === 0)\r\n {\r\n if (!equaln(length, this.width, 1e-3))\r\n this.Width = length;//直接拉大拉小\r\n }\r\n else if (equaln(Math.abs(this._SweepAngle), Math.PI / 2))\r\n {\r\n if (!equaln(length, this.height, 1e-3))\r\n this.Height = length;//直接拉大拉小\r\n }\r\n else\r\n {\r\n let con = this.ContourCurve.Clone();\r\n let ro = new Matrix4().makeRotationZ(-this._SweepAngle);\r\n con.ApplyMatrix(ro);\r\n con.Move(con.StartPoint.negate());\r\n\r\n let box = con.BoundingBox;\r\n let size = box.max.x - box.min.x;\r\n if (!equaln(size, length))\r\n {\r\n let contour = Contour.CreateContour(con, false);\r\n let isSuccess = contour.UnEqualProportionScale(size / 2, length - size, \"x\");\r\n\r\n let ro = new Matrix4().makeRotationZ(this._SweepAngle);\r\n contour.Curve.ApplyMatrix(ro);\r\n contour.Curve.Move(contour.Curve.BoundingBox.min.negate());\r\n\r\n this.SetContourCurve(contour.Curve);\r\n }\r\n }\r\n\r\n this._FixContourByArcSweepPath_Ing = false;\r\n }\r\n\r\n FixArcSweepPathLength()\r\n {\r\n if (!this._SweepPath) return;\r\n\r\n let build = new ArcBoardBuild(this);\r\n let length = build.SweepLength;\r\n\r\n let brLength: number = this.ParseBoardLengthInArcSweep();\r\n\r\n if (equaln(brLength, length, 1e-3)) return;\r\n\r\n if (brLength > length)\r\n {\r\n //延伸路径\r\n let endp = this._SweepPath.EndPoint;\r\n let derv = this._SweepPath.GetFirstDeriv(this._SweepPath.EndParam).normalize();\r\n if (this._SweepPath.GetCurveAtParam(this._SweepPath.EndParam - 0.5) instanceof Arc)\r\n this._SweepPath.AddVertexAt(this._SweepPath.LineData.length, AsVector2(endp.add(derv.multiplyScalar(brLength - length))));\r\n else\r\n this._SweepPath.LineData[this._SweepPath.LineData.length - 1].pt.copy(AsVector2(endp.add(derv.multiplyScalar(brLength - length))));\r\n }\r\n else\r\n {\r\n if (this._SweepVisibleFace === FaceDirection.Back)\r\n {\r\n //裁剪路径\r\n let param = this._SweepPath.GetParamAtDist(brLength);\r\n this._SweepPath = this._SweepPath.GetSplitCurves(param)[0];\r\n }\r\n else\r\n {\r\n //裁剪路径\r\n let param = build.SweepPath1.GetParamAtDist(brLength);\r\n let path = build.SweepPath1.GetSplitCurves(param)[0];\r\n this._SweepPath = ArcBoardBuild.OffsetPolyline(path, this.thickness);\r\n }\r\n }\r\n }\r\n\r\n ParseBoardLengthInArcSweep(): number\r\n {\r\n let brLength: number;\r\n if (this._SweepAngle === 0)\r\n brLength = this.width;\r\n else if (equaln(Math.abs(this._SweepAngle), Math.PI / 2))\r\n brLength = this.height;\r\n\r\n else\r\n {\r\n let con = this.ContourCurve.Clone();\r\n let ro = new Matrix4().makeRotationZ(-this._SweepAngle);\r\n con.ApplyMatrix(ro);\r\n let box = con.BoundingBox;\r\n brLength = box.max.x - box.min.x;\r\n }\r\n return brLength;\r\n }\r\n\r\n ClearSweepPath()\r\n {\r\n this.WriteAllObjectRecord();\r\n this._SweepPath = undefined;\r\n this._SweepAngle = 0;\r\n this.Update();\r\n }\r\n GetSweepPath(): Polyline\r\n {\r\n return this._SweepPath;\r\n }\r\n\r\n //获得见光path\r\n GetSweepPathInWCS(): Polyline\r\n {\r\n if (!this._SweepPath) return;\r\n let path = this.ArcBuild.SweepPath1.Clone();\r\n let mtx = new Matrix4().makeBasis(XAxis, ZAxis, YAxisN)\r\n .premultiply(this.ArcBuild.Rotate2OCSMtx)\r\n .premultiply(this.OCSNoClone);\r\n path.ApplyMatrix(mtx);\r\n\r\n return path;\r\n }\r\n\r\n //背面\r\n GetSweepPath1InWCS(): Polyline\r\n {\r\n if (!this._SweepPath) return;\r\n let path = this._SweepPath.Clone();\r\n let mtx = new Matrix4().makeBasis(XAxis, ZAxis, YAxisN)\r\n .premultiply(this.ArcBuild.Rotate2OCSMtx)\r\n .premultiply(this.OCSNoClone);\r\n path.ApplyMatrix(mtx);\r\n return path;\r\n }\r\n //正面\r\n GetSweepPath2InWCS(): Polyline\r\n {\r\n if (!this._SweepPath) return;\r\n let path = this._SweepVisibleFace === FaceDirection.Back ? this.ArcBuild.SweepPath2.Clone() : this.ArcBuild.SweepPath1.Clone();\r\n let mtx = new Matrix4().makeBasis(XAxis, ZAxis, YAxisN)\r\n .premultiply(this.ArcBuild.Rotate2OCSMtx)\r\n .premultiply(this.OCSNoClone);\r\n path.ApplyMatrix(mtx);\r\n return path;\r\n }\r\n\r\n /** 获取见光面 */\r\n get SweepVisibleFace()\r\n {\r\n return this._SweepVisibleFace;\r\n }\r\n /** 设置见光面 */\r\n set SweepVisibleFace(dir: FaceDirection)\r\n {\r\n if (dir === this._SweepVisibleFace) return;\r\n this.WriteAllObjectRecord();\r\n this._SweepVisibleFace = dir;\r\n this.FixContourByArcSweepPath();\r\n this.Update();\r\n }\r\n\r\n get SweepAngle(): number\r\n {\r\n return this._SweepAngle;\r\n }\r\n set SweepAngle(v: number)\r\n {\r\n if (equaln(v, this._SweepAngle)) return;\r\n this.WriteAllObjectRecord();\r\n this._SweepAngle = v;\r\n this.FixArcSweepPathLength();\r\n this.Update();\r\n }\r\n\r\n override AdjustPath(br: Board, outline: Polyline | Circle)\r\n {\r\n if (this.IsArcBoard)\r\n {\r\n const path = this.GetSweepPath();\r\n // 1.将放样路径展开\r\n const pathWCS = this.GetSweepPathInWCS();\r\n pathWCS.ApplyMatrix(pathWCS.OCSInv);\r\n const expandPath = CurveManager.CreateExpandPl(pathWCS);\r\n // 2.将轮廓进行旋转\r\n outline.ApplyMatrix(new Matrix4().makeRotationZ(-this.SweepAngle));\r\n // 3.根据轮廓的左右两侧,截取取对应的放样路径\r\n const leftParam = expandPath.GetParamAtDist(outline.BoundingBox.min.x);\r\n const rightParam = expandPath.GetParamAtDist(outline.BoundingBox.max.x);\r\n const leftPt = path.GetPointAtParam(leftParam);\r\n const rightPt = path.GetPointAtParam(rightParam);\r\n const newPath = CurveManager.Get_Pl_InPtAtoPtB(path, leftPt, rightPt);\r\n // 4.路径起点为原点\r\n newPath.Move(newPath.StartPoint.negate());\r\n br.SetSweepPath(newPath, this.SweepAngle);\r\n }\r\n }\r\n\r\n override AdjustPosition(br: Board, basePoint: Vector3)\r\n {\r\n if (this.IsArcBoard)\r\n {\r\n // 映射shape上的基点\r\n basePoint.applyMatrix4(this.ArcBuild.OCS2RotateMtx);\r\n this.ArcBuild.ParseAllX_Map([basePoint.x]);\r\n this.ArcBuild.PosMap2ArcPos(basePoint);\r\n basePoint.applyMatrix4(this.ArcBuild.Rotate2OCSMtx);\r\n basePoint.applyMatrix4(this.OCSNoClone);\r\n // 映射board上的基点\r\n const basePointInBoard = br.ContourCurve.StartPoint;\r\n basePointInBoard.applyMatrix4(br.ArcBuild.OCS2RotateMtx);\r\n br.ArcBuild.ParseAllX_Map([basePointInBoard.x]);\r\n br.ArcBuild.PosMap2ArcPos(basePointInBoard);\r\n basePointInBoard.applyMatrix4(br.ArcBuild.Rotate2OCSMtx);\r\n basePointInBoard.applyMatrix4(br.OCSNoClone);\r\n // 移动(boardBasePoint -> basePoint)\r\n br.Move(basePoint.sub(basePointInBoard));\r\n }\r\n }\r\n\r\n /**\r\n * 创建一个代理数组,数组改变时被监听\r\n */\r\n private CreateArray<T>(): 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 return this;\r\n }\r\n static CreateBoard(length: number, width: number, thickness: number, boardType: BoardType = BoardType.Layer)\r\n {\r\n let board = new Board();\r\n board.InitBoard(length, width, thickness, boardType);\r\n board.ApplyMatrix(board.RotateMat);\r\n board._SpaceOCS.identity();\r\n return board;\r\n }\r\n get DrillList()\r\n {\r\n return this._DrillList;\r\n }\r\n\r\n get DrillLock()\r\n {\r\n return this._DrillLock;\r\n }\r\n\r\n set DrillLock(v: boolean)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DrillLock = v;\r\n }\r\n get isDrillAssociationLock()\r\n {\r\n //有一块关联的板就返回true\r\n for (const o of this._DrillAssociationLock)\r\n {\r\n if (o.Object && !(o.Object as Board).IsErase)\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n get DrillAssociationLock(): Set<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 hardware = e.Object;\r\n if (hardware instanceof HardwareCompositeEntity)\r\n {\r\n if (hardware.HardwareOption.isHole)\r\n {\r\n let holes = hardware.GetAllEntity(true, e => e instanceof ExtrudeHole || e instanceof ExtrudeSolid) as (ExtrudeHole | ExtrudeSolid)[];\r\n\r\n for (let i = 0; i < holes.length; i++)\r\n {\r\n let h = holes[i];\r\n let g = h instanceof ExtrudeHole ? h.Convert2ExtrudeSolid() : h;\r\n g.__TempIndexVersion__ = { Index: hardware.Id.Index, Version: hardware.__UpdateVersion__ };\r\n knifs.push(g);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n ClearRelevance(en?: ExtrudeSolid)\r\n {\r\n for (let id of this.RelativeHardware)\r\n {\r\n let e = id.Object;\r\n if (e instanceof HardwareCompositeEntity)\r\n {\r\n arrayRemoveIf(e.RelevanceBoards, i => !i || i.Index === this.Id.Index);\r\n }\r\n }\r\n this.RelativeHardware.length = 0;\r\n super.ClearRelevance(en);\r\n }\r\n\r\n get SplitBoards()\r\n {\r\n let brs = this.SplitExtrudes;\r\n\r\n let highDrills: string[];\r\n let ocsInv: Matrix4;\r\n if (brs.some(br => br.__OriginalEnt__))\r\n {\r\n if (this._BoardProcessOption.highDrill\r\n && this._BoardProcessOption.highDrill.length > 1\r\n && !this._BoardProcessOption.highDrill.every(d => d === this._BoardProcessOption.drillType))\r\n {\r\n highDrills = this._BoardProcessOption.highDrill;\r\n }\r\n\r\n ocsInv = this.OCSInv;\r\n }\r\n\r\n let oldContour = this.ContourCurve;//旧的轮廓\r\n let oldHightSealCurves = GetBoardSealingCurves(this);//旧的封边轮廓\r\n let oldHightSealDatas = GetBoardHighSeal(this, oldHightSealCurves);//旧的封边数据\r\n\r\n //拆单或者bbs的时候会重新加入最新的原板件的排钻和层板钉数据\r\n for (let br of brs)\r\n {\r\n if (br.__OriginalEnt__)\r\n {\r\n br._Name = this._Name;\r\n br._DrillList = new Map(this._DrillList.entries());\r\n br._LayerNails = [...this._LayerNails];\r\n br.ProcessingGroupList = [...this.ProcessingGroupList];\r\n br.AlignLineObject = this.AlignLineObject;\r\n br._BoardProcessOption = { ...this._BoardProcessOption };\r\n br._CustomNumber = this._CustomNumber;//因为CustomNumber不会刷新绘制,所以拷贝这个\r\n br._DrillLock = this._DrillLock; //!2726 关联切割后的引用实体需要复制这个属性,否则反应器无法更新\r\n br._SideModelingMap = this.SideModelingMap;\r\n br.RelevanceSideModelMap = this.RelevanceSideModelMap; //关联切割侧槽\r\n\r\n let new2old_edgeMap: number[];\r\n //修正排钻边的数据\r\n if (highDrills)\r\n {\r\n br.BoardProcessOption.highDrill = [];//因为上面用了拷贝,所以这里不能直接改它的数据(我们新建一个数组来改它,否则原始板件的数据就被改掉了)\r\n new2old_edgeMap = ParseNewBr2OldBr_EdgeMap(br, this, ocsInv);\r\n for (let index of new2old_edgeMap)\r\n {\r\n let dri = highDrills[index];\r\n if (dri !== undefined)\r\n br._BoardProcessOption.highDrill.push(dri);\r\n else\r\n br._BoardProcessOption.highDrill.push(br._BoardProcessOption.drillType);\r\n }\r\n }\r\n else//填充默认类型就好了\r\n br._BoardProcessOption.highDrill = Array(br.contourCurve.EndParam).fill(br._BoardProcessOption.drillType);\r\n\r\n //保持封边属性(代码来自SetContourCurve)\r\n br._BoardProcessOption.highSealed = [];\r\n if (br.isRect)\r\n {\r\n SetBoardTopDownLeftRightSealData(br, oldHightSealDatas, oldHightSealCurves, oldContour);\r\n }\r\n else//变成了异形\r\n {\r\n let newhightSealCurves = GetBoardSealingCurves(br);\r\n\r\n for (let i = 0; i < newhightSealCurves.length; i++)\r\n {\r\n let newC = newhightSealCurves[i];\r\n let p = newC.GetPointAtParam(newC.EndParam * 0.5);\r\n\r\n let closesIndex = 0;\r\n let closesDistance = Infinity;\r\n\r\n for (let j = 0; j < oldHightSealCurves.length; j++)\r\n {\r\n let oldC = oldHightSealCurves[j];\r\n let d = oldC.GetClosestPointTo(p, false).distanceTo(p);\r\n if (d < closesDistance)\r\n {\r\n closesIndex = j;\r\n closesDistance = d;\r\n }\r\n }\r\n\r\n br._BoardProcessOption.highSealed.push(oldHightSealDatas[closesIndex]);\r\n }\r\n }\r\n }\r\n }\r\n return brs;\r\n }\r\n get ArcBoardModeling()\r\n {\r\n if (!this.IsArcBoard || !this.IsDrawArcGroove) return [];\r\n const { _SweepPath: path, _SweepAngle: angle, SweepVisibleFace: dir, ArcBoardOptions } = this;\r\n return ParseBoardArcFeed(this, path, angle, dir, ArcBoardOptions, false);\r\n }\r\n\r\n get BoardModeling()\r\n {\r\n let models: IModeling[] = [];\r\n for (let g of this.grooves)\r\n {\r\n let cu = g.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(g.OCSNoClone));\r\n cu.Erase(false);//当内部造型超过100个时,不校验时,这个曲线就是erase的状态,所以设置这个状态,避免无法绘制出来\r\n if (cu instanceof Circle)//这里保证这个圆是正常坐标系 I3BUSY#note_4525213\r\n cu.OCS = new Matrix4().setPosition(cu.Position);\r\n\r\n let outline = Contour.CreateContour(cu, false);\r\n let holes: Contour[] = [];\r\n for (let subG of g.Grooves)\r\n {\r\n let holeCu = subG.ContourCurve.Clone().ApplyMatrix(this.OCSInv.multiply(subG.OCSNoClone));\r\n holes.push(Contour.CreateContour(holeCu, false));\r\n }\r\n\r\n let s = new Shape(outline, holes);\r\n\r\n models.push({\r\n shape: s,\r\n thickness: g.Thickness,\r\n dir: equaln(g.Position.applyMatrix4(this.OCSInv).z, 0) && g.Thickness < this.thickness - 1e-6 ? FaceDirection.Back : FaceDirection.Front,\r\n knifeRadius: g.KnifeRadius,\r\n addLen: g.GroovesAddLength,\r\n addWidth: g.GroovesAddWidth,\r\n addDepth: g.GroovesAddDepth,\r\n });\r\n }\r\n return models;\r\n }\r\n\r\n set BoardModeling(models: IModeling[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this.grooves.length = 0;\r\n\r\n for (let model of models)\r\n {\r\n let g = new ExtrudeSolid();\r\n g.ContourCurve = model.shape.Outline.Curve;\r\n g.Thickness = model.thickness;\r\n g.GroovesAddLength = model.addLen;\r\n g.KnifeRadius = model.knifeRadius;\r\n\r\n for (let hole of model.shape.Holes)\r\n {\r\n let subG = new ExtrudeSolid();\r\n subG.ContourCurve = hole.Curve;\r\n subG.Thickness = model.thickness;\r\n\r\n g.AppendGroove(subG);\r\n }\r\n\r\n let gz = 0;//槽的z轴位置 (由于旋转轮廓或者镜像轮廓在Set时会被清除掉坐标系,我们还是需要正确的搞定z轴)\r\n if (model.dir === FaceDirection.Front)\r\n gz = this.thickness - g.Thickness;\r\n let moveZ = gz - g.Position.z;\r\n if (!equaln(moveZ, 0))\r\n g.Move({ x: 0, y: 0, z: moveZ });\r\n\r\n g.ApplyMatrix(this.OCSNoClone);\r\n\r\n this.grooves.push(g);\r\n }\r\n this.GrooveCheckAllAutoSplit();\r\n this.Update();\r\n }\r\n\r\n //二维刀路\r\n get Modeling2D()\r\n {\r\n for (const m of this._2DModelingList)\r\n {\r\n for (const item of m.items)\r\n {\r\n let d = safeEval(item.depthExpr, { BH: this.thickness });\r\n if (!isNaN(d) && d != item.depth)\r\n {\r\n item.depth = d;\r\n }\r\n }\r\n }\r\n\r\n return [...this._2DModelingList];\r\n }\r\n\r\n set Modeling2D(ms: I2DModeling[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._2DModelingList = ms;\r\n this.Clear2DPathCache();\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n get Modeling3D()\r\n {\r\n return [...this._3DModelingList];\r\n }\r\n set Modeling3D(ms: I3DModeling[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Clear3DPathCache();\r\n this._3DModelingList = ms;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n //侧面关联槽\r\n RelevanceSideModelMap: Map<number, ExtrudeSolid[]> = new Map();\r\n\r\n //侧面造型\r\n get SideModelingMap()\r\n {\r\n return this._SideModelingMap;\r\n }\r\n\r\n set SideModelingMap(sideModelingMap: Map<number, ExtrudeSolid[]>)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.ClearSideModelingCache();\r\n this._SideModelingMap = sideModelingMap;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n //获取侧面关联槽和侧面造型\r\n get AllSideModelGrooveMap(): Map<number, ExtrudeSolid[]>\r\n {\r\n let allSideModelGrooveMap: Map<number, ExtrudeSolid[]> = new Map();\r\n\r\n for (let [n, soilds] of this._SideModelingMap)\r\n allSideModelGrooveMap.set(n, [...soilds]);\r\n\r\n for (let [n, soilds] of this.RelevanceSideModelMap)\r\n {\r\n let ss = allSideModelGrooveMap.get(n) ?? [];\r\n\r\n for (let soild of soilds)\r\n ss.push(soild);\r\n\r\n allSideModelGrooveMap.set(n, ss);\r\n }\r\n\r\n return allSideModelGrooveMap;\r\n }\r\n\r\n ClearSideModeling()\r\n {\r\n if (!this._SideModelingMap.size) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this.ClearSideModelingCache();\r\n this._SideModelingMap.clear();\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n ClearModeling2DList()\r\n {\r\n if (this._2DModelingList.length === 0) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._2DModelingList.length = 0;\r\n this.Clear2DPathCache();\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n ClearModeling3DList()\r\n {\r\n if (this._3DModelingList.length === 0) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._3DModelingList.length = 0;\r\n this.Clear3DPathCache();\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n get IsChaiDan()\r\n {\r\n return this._IsChaiDan;\r\n }\r\n\r\n set IsChaiDan(v: boolean)\r\n {\r\n if (this._IsChaiDan !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._IsChaiDan = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n }\r\n\r\n get OpenDir()\r\n {\r\n return this._OpenDir;\r\n }\r\n\r\n set OpenDir(v: BoardOpenDir)\r\n {\r\n if (this._OpenDir !== v)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._OpenDir = v;\r\n //开门方向改变更新\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n }\r\n\r\n ClearBoardModeling()\r\n {\r\n if (this.grooves.length === 0) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this.grooves.length = 0;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n /**\r\n * 注意传入的排钻列表,避免指针被引用\r\n */\r\n AppendDrillList(k: ObjectId, drs: ObjectIdArr[])\r\n {\r\n this.WriteAllObjectRecord();\r\n let oldDrs = this._DrillList.get(k);\r\n\r\n if (oldDrs)\r\n oldDrs.push(...drs);//同类型板件时,会触发这里.\r\n else\r\n this._DrillList.set(k, drs);\r\n }\r\n ClearDrillList(k: ObjectId)\r\n {\r\n let drids = this._DrillList.get(k);\r\n if (drids)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let drillents of drids)\r\n {\r\n for (let objId of drillents)\r\n {\r\n if (objId && !objId.IsErase)\r\n objId.Object.Erase();\r\n }\r\n }\r\n this._DrillList.delete(k);\r\n\r\n if (k && k.Object)\r\n {\r\n //必须在这里删除\r\n let br = k.Object as Board;\r\n br.ClearDrillList(this.Id);\r\n }\r\n }\r\n }\r\n\r\n ClearAllDrillList()\r\n {\r\n for (const [id] of this._DrillList)\r\n {\r\n this.ClearDrillList(id);\r\n }\r\n }\r\n Erase(isErase: boolean = true)\r\n {\r\n if (isErase === this.IsErase) return;\r\n super.Erase(isErase);\r\n\r\n if (!isErase) return;\r\n\r\n //记录数据,避免下面记录的时候,排钻已经被删除,导致排钻数据被优化掉.\r\n this.WriteAllObjectRecord();\r\n\r\n for (const [, driss] of this._DrillList)\r\n {\r\n for (let dris of driss)\r\n for (let d of dris)\r\n if (d && d.Object)\r\n d.Object.Erase();\r\n }\r\n\r\n this.ClearLayerNails();\r\n }\r\n get RotateMat()\r\n {\r\n let roMat = new Matrix4();\r\n\r\n switch (this._BoardType)\r\n {\r\n case BoardType.Layer:\r\n roMat.makeBasis(\r\n YAxis,\r\n XAxisN,\r\n ZAxis\r\n );\r\n break;\r\n case BoardType.Vertical:\r\n roMat.makeBasis(\r\n YAxis,\r\n ZAxis,\r\n XAxis\r\n );\r\n break;\r\n case BoardType.Behind:\r\n roMat.makeBasis(\r\n XAxis,\r\n ZAxis,\r\n YAxisN\r\n );\r\n }\r\n return roMat;\r\n }\r\n get Height()\r\n {\r\n return this.height;\r\n }\r\n set Height(v: number)\r\n {\r\n if (this.ContourCurve instanceof Circle)\r\n return;\r\n\r\n if (!equaln(v, this.height, 1e-2))\r\n {\r\n this.WriteAllObjectRecord();\r\n let refHeight = this.height / 2;\r\n let dist = v - this.height;\r\n\r\n let contour = Contour.CreateContour(this.ContourCurve, false);\r\n let isSuccess = contour.UnEqualProportionScale(refHeight, dist, \"y\");\r\n\r\n if (isSuccess)\r\n {\r\n this.height = v;\r\n this.GrooveCheckAllAutoSplit();\r\n\r\n if (this._SweepPath && !this._FixContourByArcSweepPath_Ing)\r\n this.FixArcSweepPathLength();\r\n\r\n if (this.HasSideModel)\r\n this.SplitBoardSideModelUtil.SpiltSideModelOfBrContour(this);\r\n\r\n this.Update();\r\n }\r\n }\r\n }\r\n get Width()\r\n {\r\n return this.width;\r\n }\r\n set Width(v: number)\r\n {\r\n if (this.ContourCurve instanceof Circle)\r\n return;\r\n\r\n if (!equaln(v, this.width, 1e-2))\r\n {\r\n this.WriteAllObjectRecord();\r\n let refDist = this.width / 2;\r\n let dist = v - this.width;\r\n let contour = Contour.CreateContour(this.ContourCurve, false);\r\n let isSuccess = contour.UnEqualProportionScale(refDist, dist, \"x\");\r\n if (isSuccess)\r\n {\r\n this.width = v;\r\n this.GrooveCheckAllAutoSplit();\r\n\r\n if (this._SweepPath && !this._FixContourByArcSweepPath_Ing)\r\n this.FixArcSweepPathLength();\r\n\r\n if (this.HasSideModel)\r\n this.SplitBoardSideModelUtil.SpiltSideModelOfBrContour(this);\r\n\r\n this.Update();\r\n }\r\n }\r\n }\r\n\r\n get Thickness() { return super.Thickness; }\r\n set Thickness(thickness: number)\r\n {\r\n if (!equaln(thickness, this.thickness, 1e-4))//避免18.0009 无法改成 18\r\n {\r\n if (this.HasSideModel)\r\n this.SplitBoardSideModelUtil.SpiltSideModelOfBrThickness(this, thickness);\r\n\r\n super.Thickness = thickness;\r\n if (this._SweepPath && !this._FixContourByArcSweepPath_Ing)\r\n this.FixContourByArcSweepPath();\r\n }\r\n }\r\n\r\n get BoardType(): BoardType\r\n {\r\n return this._BoardType;\r\n }\r\n set BoardType(type: BoardType)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (type !== this._BoardType)\r\n {\r\n let spaceCS = this._SpaceOCS.clone();\r\n this._BoardType = type;\r\n this.ApplyMatrix(this.OCSInv);\r\n\r\n this.ApplyMatrix(this.RotateMat);\r\n\r\n this._SpaceOCS.identity();\r\n\r\n this.ApplyMatrix(spaceCS);\r\n\r\n this.Update();\r\n }\r\n }\r\n\r\n //设置板件类型并且不做任何的事情\r\n SetBoardType(type: BoardType)\r\n {\r\n if (type === this._BoardType) return;\r\n this.WriteAllObjectRecord();\r\n this._BoardType = type;\r\n }\r\n\r\n //最左下角的点\r\n get MinPoint(): Vector3\r\n {\r\n switch (this._BoardType)\r\n {\r\n case BoardType.Layer:\r\n return new Vector3(0, this.height).applyMatrix4(this.OCS);\r\n case BoardType.Vertical:\r\n return this.Position;\r\n case BoardType.Behind:\r\n return new Vector3(0, 0, this.thickness).applyMatrix4(this.OCS);\r\n }\r\n }\r\n get MaxPoint(): Vector3\r\n {\r\n let pt = new Vector3(this.width, this.height, -this.thickness);\r\n pt.applyMatrix4(this.OCS);\r\n return pt;\r\n }\r\n\r\n get IsRect()\r\n {\r\n return this.isRect;\r\n }\r\n\r\n get IsSpecialShape()\r\n {\r\n return !this.isRect;\r\n }\r\n\r\n get HasGroove()\r\n {\r\n return this.grooves.length > 0;\r\n }\r\n\r\n get Name()\r\n {\r\n return this._Name;\r\n }\r\n set Name(n: string)\r\n {\r\n if (n === this._Name) return;\r\n this.WriteAllObjectRecord();\r\n this._Name = n;\r\n }\r\n\r\n private UpdateSplitBoardSideModelUtil = true;\r\n private _SplitBoardSideModelUtil: SplitBoardSideModelUtil;\r\n\r\n get SplitBoardSideModelUtil(): SplitBoardSideModelUtil\r\n {\r\n if (!this._SplitBoardSideModelUtil)\r\n this._SplitBoardSideModelUtil = new SplitBoardSideModelUtil(this);\r\n\r\n return this._SplitBoardSideModelUtil;\r\n }\r\n\r\n override GeneralRectContour()\r\n {\r\n //取消异型时,强制使用矩形轮廓 导致原始轮廓数据丢失\r\n if (this.HasSideModel)\r\n {\r\n this.UpdateSplitBoardSideModelUtil = false;\r\n this.SplitBoardSideModelUtil.Init(this, true);\r\n super.GeneralRectContour();\r\n this.UpdateSplitBoardSideModelUtil = true;\r\n }\r\n else\r\n super.GeneralRectContour();\r\n }\r\n\r\n /**\r\n * 板件的轮廓,在板件坐标系中的表现方式.\r\n */\r\n override get ContourCurve()\r\n {\r\n return super.ContourCurve;\r\n }\r\n\r\n //设置新的板件轮廓,这里重载为了保持正确的排钻封边映射\r\n override set ContourCurve(newContour: ExtrudeContourCurve)\r\n {\r\n /**\r\n * 保持排钻边和封边数据对应正确性\r\n * (2x2种可能性)\r\n * 矩形->矩形\r\n * 矩形->异形\r\n * 异形->异形\r\n * 异形->矩形\r\n */\r\n\r\n //上下左右排钻属性(在矩形时生效)\r\n let rectHoleOpt: IBoardRectHoleType = {} as any;\r\n ParseBoardRectHoleType(this, rectHoleOpt);//分析旧的上下左右排钻\r\n\r\n let oldHightSealCurves = GetBoardSealingCurves(this);//旧的封边轮廓\r\n let oldHightSealDatas = GetBoardHighSeal(this, oldHightSealCurves);//旧的封边数据\r\n let oldHighBoardEdgeRemarkDatas = GetHighBoardEdgeRemark(this, oldHightSealCurves);//旧的封边数据\r\n\r\n let splitSideModel = false;\r\n\r\n if (this.UpdateSplitBoardSideModelUtil && this.HasSideModel)\r\n {\r\n this.SplitBoardSideModelUtil.Init(this); //旧的侧面造型\r\n\r\n //记录侧面造型后清空 防止在分裂侧面造型时带入更新mesh\r\n this.WriteAllObjectRecord();\r\n this._SideModelingMap.clear();\r\n splitSideModel = true;\r\n }\r\n\r\n let oldContour = this.ContourCurve;//旧的轮廓\r\n\r\n let defaultDrillType = this._BoardProcessOption.drillType;\r\n if (!IsValidDriName(defaultDrillType) && this._BoardProcessOption.highDrill)\r\n for (let name of this._BoardProcessOption.highDrill)\r\n if (IsValidDriName(name))\r\n {\r\n defaultDrillType = name;\r\n break;\r\n }\r\n if (!IsValidDriName(defaultDrillType))\r\n defaultDrillType = HostApplicationServices.DrillConfigs.size ? HostApplicationServices.DrillConfigs.entries().next().value[0] : DrillType.None;\r\n\r\n super.ContourCurve = newContour;//设置新的轮廓\r\n\r\n //保持排钻边属性\r\n if (this.isRect && rectHoleOpt.up)//矩形->矩形\r\n SetBrHighHoleTypeFromRectHoleType(this, rectHoleOpt);//直接应用旧的矩形数据\r\n else//异形->矩形 矩形->异形 异形->异形\r\n {\r\n let indexMap: number[] = [];\r\n\r\n for (let i = 0; i < newContour.EndParam; i++)\r\n {\r\n let p = newContour.GetPointAtParam(i + 0.5);\r\n\r\n let cp = oldContour.GetClosestPointTo(p, false);\r\n let cparam = oldContour.GetParamAtPoint2(cp);\r\n indexMap.push(Math.floor(cparam));\r\n }\r\n\r\n let highDrill: string[] = [];\r\n for (let index of indexMap)\r\n highDrill.push(this._BoardProcessOption.highDrill[index] ?? defaultDrillType);\r\n\r\n this._BoardProcessOption.highDrill = highDrill;\r\n }\r\n\r\n this._BoardProcessOption.highSealed.length = 0;\r\n this._BoardProcessOption.highBoardEdgeRemark.length = 0;\r\n //保持封边属性\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 if (splitSideModel || this.HasSideModel)\r\n this.SplitBoardSideModelUtil.SetBoardSideModel(this);\r\n }\r\n\r\n Explode()\r\n {\r\n return Board2Regions(this);\r\n }\r\n\r\n /**\r\n * 在不改变Normal和实体显示的情况下,修改X轴的指向\r\n * @param xAxis\r\n */\r\n override SetXAxis(xAxis: Vector3, isKeepLines = false): this\r\n {\r\n let ocsInv = this.OCSInv;\r\n let x = TransformVector(xAxis.clone(), ocsInv).setZ(0).normalize();\r\n if (equalv3(ZeroVec, x, 1e-5)) return this;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let highSeals = GetBoardHighSeal(this, GetBoardSealingCurves(this));\r\n\r\n let a = Math.atan2(x.y, x.x);\r\n\r\n if (isKeepLines && this.BoardProcessOption.lines !== LinesType.CanReversal && (equaln(x.y, 1, 1e-5) || equaln(x.y, -1, 1e-5)))\r\n this.BoardProcessOption.lines = 1 - this.BoardProcessOption.lines;//翻转纹路 1=>0 0=>1\r\n\r\n x.transformDirection(this._Matrix);\r\n let z = this.Normal;\r\n let y = z.cross(x);\r\n\r\n this._Matrix.elements[0] = x.x;\r\n this._Matrix.elements[1] = x.y;\r\n this._Matrix.elements[2] = x.z;\r\n\r\n this._Matrix.elements[4] = y.x;\r\n this._Matrix.elements[5] = y.y;\r\n this._Matrix.elements[6] = y.z;\r\n\r\n this.ContourCurve.ApplyMatrix(tempMatrix1.makeRotationZ(-a));//复用了这个矩阵\r\n this.CheckContourCurve();\r\n if (this.contourCurve instanceof Polyline)\r\n this.contourCurve.UpdateOCSTo(IdentityMtx4);\r\n\r\n SetBoardTopDownLeftRightSealData(this, highSeals);//这里不可以用缓存的曲线 否则分析错误,必须重新开始分析曲线\r\n\r\n this.Update();\r\n return this;\r\n }\r\n\r\n RotateBoard(rox: number, roy: number, roz: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n this._Rotation.x = rox;\r\n this._Rotation.y = roy;\r\n this._Rotation.z = roz;\r\n\r\n let spcocs = this.SpaceOCS;\r\n let roMatX = new Matrix4().makeRotationX(rox);\r\n let roMatY = new Matrix4().makeRotationY(roy);\r\n let roMatZ = new Matrix4().makeRotationZ(roz);\r\n\r\n this.ApplyMatrix(this.OCSInv)\r\n .ApplyMatrix(this.RotateMat)\r\n .ApplyMatrix(roMatX)\r\n .ApplyMatrix(roMatY)\r\n .ApplyMatrix(roMatZ)\r\n .ApplyMatrix(spcocs);\r\n\r\n this._SpaceOCS.copy(spcocs);\r\n this.Update();\r\n }\r\n\r\n /**实际上这个值可能被改变,应该适当的去校验它(仅在重新设计模块时,这个值会被改变!) */\r\n get Rotation()\r\n {\r\n let roMtx = this.RotateMat;\r\n let roMtxInv = roMtx.getInverse(roMtx);\r\n\r\n let csInSpace = this.SpaceOCSInv.multiply(this.OCSNoClone);//逆到模块坐标系\r\n csInSpace.multiply(roMtxInv);//(正确)\r\n csInSpace.setPosition(0, 0, 0);\r\n\r\n let euRoMtx = new Matrix4().makeRotationFromEuler(new Euler(this._Rotation.x, this._Rotation.y, this._Rotation.z, \"ZYX\"));\r\n\r\n if (euRoMtx.elements.every((v, i) => equaln(v, csInSpace.elements[i])))\r\n return this._Rotation;\r\n else\r\n {\r\n let eu = new Euler(0, 0, 0, \"ZYX\").setFromRotationMatrix(csInSpace);\r\n return eu;\r\n }\r\n }\r\n\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n if (!this.Id)\r\n {\r\n // super.ApplyMirrorMatrix(m); //这个变更导致镜像错误 因为实体没有正常的被更新(更新下面的属性?). 所以需要注意的是,如果需要镜像变更,需要给实体一个id!!!\r\n return this;//为了优化性能,在jig模式下不去计算封边排钻等属性,不重绘板\r\n }\r\n\r\n this.ContourCurve;//因为下面翻转孔面的代码,所以必须初始化这个\r\n\r\n let hasSplitSize = (this.BoardProcessOption[EBoardKeyList.SpliteHeight]\r\n && this.BoardProcessOption[EBoardKeyList.SpliteWidth]\r\n && this.BoardProcessOption[EBoardKeyList.SpliteThickness]\r\n );\r\n\r\n let highSealsCurves = GetBoardSealingCurves(this);\r\n let highSeals = GetBoardHighSeal(this, highSealsCurves);\r\n let isStartSealToBack = !equalv3(highSealsCurves[0].StartPoint, this.contourCurve.StartPoint, 1e-4);//第一段封边往后搜索了\r\n\r\n super.ApplyMirrorMatrix(m);\r\n\r\n if (this.contourCurve.Area2 < 0)\r\n {\r\n this.contourCurve.Reverse();\r\n highSeals.reverse();\r\n\r\n if (isStartSealToBack)//如果第一段封边往后搜索了,那么封边在镜像后 第一段封边保持不变\r\n highSeals.unshift(highSeals.pop());\r\n\r\n this.BoardProcessOption.highDrill?.reverse();\r\n\r\n if (hasSplitSize)\r\n {\r\n [\r\n this.BoardProcessOption.sealedUp,\r\n this.BoardProcessOption.sealedLeft,\r\n this.BoardProcessOption.sealedDown,\r\n this.BoardProcessOption.sealedRight,\r\n ]\r\n =\r\n [\r\n this.BoardProcessOption.sealedUp,\r\n this.BoardProcessOption.sealedRight,\r\n this.BoardProcessOption.sealedDown,\r\n this.BoardProcessOption.sealedLeft,\r\n ];\r\n }\r\n }\r\n else\r\n this.BoardProcessOption[EBoardKeyList.BigHole] = 1 - this.BoardProcessOption[EBoardKeyList.BigHole];//反转大孔面\r\n\r\n this.BoardProcessOption.highSealed = highSeals;\r\n\r\n if (!hasSplitSize)//&& this.isRect\r\n SetBoardTopDownLeftRightSealData(this, highSeals);\r\n //重新构建SpaceOCS\r\n this._SpaceOCS.multiplyMatrices(this._Matrix, new Matrix4().getInverse(this.RotateMat));\r\n\r\n //\"左\",\"右\"互换\r\n if (this.Name.includes(\"左\"))\r\n this.Name = this.Name.replace(\"左\", \"右\");\r\n else if (this.Name.includes(\"右\"))\r\n this.Name = this.Name.replace(\"右\", \"左\");\r\n\r\n //开门方向\"左\",\"右\"互换\r\n if (this.OpenDir === BoardOpenDir.Left)\r\n this.OpenDir = BoardOpenDir.Right;\r\n else if (this.OpenDir === BoardOpenDir.Right)\r\n this.OpenDir = BoardOpenDir.Left;\r\n\r\n return this;\r\n }\r\n\r\n get UCGenerator(): UVGenerator\r\n {\r\n if (this.BoardProcessOption.lines === LinesType.Positive)\r\n return boardUVGenerator;\r\n else\r\n return boardUVGenerator2;\r\n }\r\n\r\n UpdateUV(geo: Geometry, ocs: Matrix4, isRev = false)\r\n {\r\n super.UpdateUV(geo, ocs, this.BoardProcessOption.lines === LinesType.Reverse);\r\n }\r\n\r\n //从一个实体拷贝数据,实体类型必须相同.\r\n CopyFrom(obj: Board)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let drillBak = this._DrillList;\r\n this._DrillList = new Map();\r\n let layerNailsBak = this._LayerNails;\r\n this._LayerNails = [];\r\n\r\n super.CopyFrom(obj);\r\n\r\n this._DrillList = drillBak;\r\n this._LayerNails = layerNailsBak;\r\n }\r\n\r\n Clone(): 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 let brWidth = this.width;\r\n let brHeight = this.height;\r\n\r\n switch (this.BoardProcessOption.lines)\r\n {\r\n case LinesType.Positive:\r\n len = brHeight / 3;\r\n width = Math.min(brWidth, brHeight) / 8;\r\n break;\r\n case LinesType.Reverse:\r\n len = brWidth / 2;\r\n width = Math.min(brWidth, brHeight) / 8;\r\n break;\r\n case LinesType.CanReversal:\r\n len = brHeight / 3;\r\n width = brWidth / 2;\r\n default:\r\n break;\r\n }\r\n\r\n l = new LineSegments(\r\n BufferGeometryUtils.CreateFromPts(PointShapeUtils.LinesDirPts(len, width, this.BoardProcessOption.lines)),\r\n ColorMaterial.GetLineMaterial(8)\r\n );\r\n let l1 = l.clone();\r\n l1.material = ColorMaterial.GetLineMaterial(7);\r\n l.position.set(brWidth / 2, brHeight / 2, 0);\r\n l1.position.set(brWidth / 2, brHeight / 2, this.thickness);\r\n\r\n if (this._SweepPath)\r\n {\r\n let pts = [l.position, l1.position];\r\n\r\n let x: Vector3, y: Vector3;\r\n\r\n if (this._SweepAngle !== 0)\r\n {\r\n l.position.z -= 1;\r\n l1.position.z += 1;\r\n\r\n x = l.position.clone().add(XAxis);\r\n y = l.position.clone().add(YAxis);\r\n pts.push(x, y);\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(this.ArcBuild.OCS2RotateMtx);\r\n }\r\n else\r\n {\r\n x = l.position.clone().add(XAxis);\r\n y = l.position.clone().add(YAxis);\r\n pts.push(x, y);\r\n }\r\n\r\n let xs: number[] = pts.map(p => p.x);\r\n arraySortByNumber(xs);\r\n arrayRemoveDuplicateBySort(xs, equaln);\r\n\r\n this.ArcBuild.ParseAllX_Map(xs);\r\n for (let p of pts)\r\n this.ArcBuild.PosMap2ArcPos(p);\r\n\r\n if (this._SweepAngle !== 0)\r\n for (let p of pts)\r\n p.applyMatrix4(this.ArcBuild.Rotate2OCSMtx);\r\n\r\n x.sub(l.position).normalize();\r\n y.sub(l.position).normalize();\r\n let z = new Vector3().crossVectors(x, y);\r\n let mtx = new Matrix4().makeBasis(x, y, z);\r\n\r\n l.rotation.setFromRotationMatrix(mtx);\r\n l1.rotation.setFromRotationMatrix(mtx);\r\n }\r\n\r\n l.updateMatrix();\r\n l1.updateMatrix();\r\n\r\n return [l, l1];\r\n }\r\n\r\n private GetLinesOpenDir()\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 //del_exp2_start\r\n if (this._2DModelingList.length === 0)\r\n return this._2DPathCsgs;\r\n\r\n this._2DPathCsgs = Board2DModelCSGBuilder(this);\r\n //del_exp2_end\r\n\r\n return this._2DPathCsgs;\r\n }\r\n //#endregion\r\n\r\n //#region 侧面造型\r\n _SideModeingCsgs: Geom3[];\r\n private GetSideModeingCsgs(): Geom3[]\r\n {\r\n if (this._SideModeingCsgs)\r\n return this._SideModeingCsgs;\r\n\r\n this._SideModeingCsgs = [];\r\n\r\n if (!this._SideModelingMap.size && !this.RelevanceSideModelMap.size)\r\n return this._SideModeingCsgs;\r\n\r\n this._SideModeingCsgs = BoardSideModelCSGBuilder(this);\r\n\r\n return this._SideModeingCsgs;\r\n }\r\n\r\n //清除侧面造型Csgs的缓存\r\n ClearSideModelingCache()\r\n {\r\n this._SideModeingCsgs = undefined;\r\n }\r\n //#endregion 侧面造型\r\n\r\n get HasSideModel() { return this._SideModelingMap.size > 0; }\r\n private _asyncSideModelIng = false;\r\n get AsyncSideModeling() { return this._asyncSideModelIng; }\r\n\r\n protected get Has2DPath() { return this._2DModelingList.length > 0; }\r\n private _workerCalcedGeom: Geom3 = null;//worker计算后,暂时存入到这里\r\n private _async2DPathIng = false;\r\n\r\n get Async2DPathing() { return this._async2DPathIng; }\r\n override GoodBye(): void\r\n {\r\n super.GoodBye();\r\n TerminateCSGTask({ key: this });\r\n }\r\n\r\n private _Promise2DPathRes: (res: boolean) => void;//回调函数\r\n private _2DPathBuildPromise: Promise<boolean>;\r\n async Load2DPathPromise()\r\n {\r\n if (!this._2DPathBuildPromise)\r\n this._2DPathBuildPromise = new Promise<boolean>((res) =>\r\n {\r\n this._Promise2DPathRes = res;\r\n });\r\n\r\n return this._2DPathBuildPromise;\r\n }\r\n //del_exp2_start\r\n //二维刀路切割后返回几何体\r\n override UpdateMeshGeom(geo: Geometry): BufferGeometry\r\n {\r\n if (!this._workerCalcedGeom)\r\n {\r\n const AllSubtractCSGs: Geom3[] = [];\r\n\r\n this._async2DPathIng = false;\r\n this._asyncSideModelIng = false;\r\n\r\n if (HostApplicationServices.show2DPathObject)\r\n for (let csg of this.Get2DPathCsgs())\r\n {\r\n AllSubtractCSGs.push(csg);\r\n this._async2DPathIng = true;\r\n }\r\n\r\n for (let csg of this.GetSideModeingCsgs())\r\n {\r\n AllSubtractCSGs.push(csg);\r\n this._asyncSideModelIng = true;\r\n }\r\n\r\n if (!AllSubtractCSGs.length)\r\n {\r\n if (geo instanceof Geometry)\r\n return new BufferGeometry().fromGeometry(geo);\r\n return geo;\r\n }\r\n\r\n let geom = Geometry2CSG2(geo);\r\n\r\n // 使用线程池\r\n const task: CSGTask = {\r\n key: this,\r\n data: [AllSubtractCSGs, geom],\r\n then: (e) =>\r\n {\r\n let data = e.data as { status: number, geom: Geom3; };\r\n if (data.status || !data.geom.polygons)\r\n {\r\n this._AsyncIngTextEntity.TextString = \"二维刀路或侧面造型建模失败\";\r\n Log(`板:${this.Name}二维刀路或侧面造型建模失败!`, LogType.Error, [this]);\r\n return;\r\n }\r\n\r\n this.UpdateDrawGeometry();\r\n this._workerCalcedGeom = data.geom;\r\n this.Update();\r\n this.AsyncUpdated();\r\n this.MeshGeometry;//保证刷新这个\r\n\r\n this._workerCalcedGeom = null;\r\n\r\n if (this._Promise2DPathRes)\r\n {\r\n this._Promise2DPathRes(true);\r\n this._Promise2DPathRes = undefined;\r\n this._2DPathBuildPromise = undefined;\r\n }\r\n },\r\n //TODO: 被取消的事件\r\n };\r\n AddCSGSubtractTask(task); // 往线程池里添加任务\r\n\r\n //进入到异步后,直接先返回\r\n if (geo instanceof Geometry)\r\n return new BufferGeometry().fromGeometry(geo);\r\n return geo;\r\n }\r\n\r\n this._async2DPathIng = false;\r\n this._asyncSideModelIng = false;\r\n const newGeom = this._workerCalcedGeom;\r\n this._workerCalcedGeom = undefined;//保护\r\n\r\n this._EdgeGeometry = new EdgesGeometry().FromCSG(newGeom as unknown as Geom3Res);\r\n const geometry = CSG2Geometry2(newGeom);\r\n\r\n const bufferGeometry = new BufferGeometry().fromGeometry(geometry);\r\n const gen = new GenLocalUv();\r\n gen.CalculateUv(bufferGeometry, this.BoardProcessOption.lines === LinesType.Reverse);\r\n\r\n return bufferGeometry;\r\n }\r\n //del_exp2_end\r\n\r\n //分裂后重新将排钻实体 关联五金 设置给不同的实体\r\n override HandleSpliteEntitys(splitEntitys: this[])\r\n {\r\n if (!splitEntitys.length) return;\r\n this.WriteAllObjectRecord();\r\n\r\n //层板钉\r\n let nails: ObjectId[] = [];\r\n for (let nail of this._LayerNails)\r\n {\r\n if (nail?.Object && !nail.IsErase)\r\n nails.push(nail);\r\n }\r\n\r\n //如果没有开排钻反应器,那么需要重新关联排钻\r\n //排钻列表\r\n let dris: [ObjectId, ObjectId[][]][] = [];\r\n if (!HostApplicationServices.openDrillingReactor || this.DrillLock || this.isDrillAssociationLock)\r\n {\r\n for (let d of this._DrillList)\r\n {\r\n dris.push(d);\r\n\r\n //离婚,分割财产\r\n let fbr = d[0]?.Object as Board;\r\n if (fbr)\r\n {\r\n fbr.WriteAllObjectRecord();\r\n fbr._DrillList.delete(this.Id);\r\n }\r\n }\r\n\r\n this._DrillList.clear();//开启反应器时,这个行为由排钻重排控制,没有开启时,我们暂时清空,下面会重新计算关联\r\n }\r\n\r\n //清除所有层板钉(因为下面会重新关联)(这个和排钻反应器没有关联,必须全部清除)\r\n this._LayerNails.length = 0;\r\n\r\n //所有的实体,包括自己\r\n let ents: this[] = [this].concat(splitEntitys);\r\n\r\n for (let en of ents)\r\n {\r\n let ocsInv = en.OCSInv;\r\n //把层板钉送给有缘人\r\n nails = nails.filter(id =>\r\n {\r\n let n = id.Object as CylinderHole;\r\n let position = n.Position.applyMatrix4(ocsInv).setZ(0);\r\n if (en.contourCurve.PtInCurve(position))\r\n {\r\n if (en === this)\r\n {\r\n this._LayerNails.push(id);\r\n return false;\r\n }\r\n //异形换位,把排钻给别人\r\n if (n.MId === this.Id)\r\n n.MId = en.Id;\r\n else if (n.FId === this.Id)\r\n n.FId = en.Id;\r\n //新的板需要关联这个id\r\n en._LayerNails.push(id);\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n //如果没有开排钻反应器,那么需要重新关联排钻\r\n if (!HostApplicationServices.openDrillingReactor || this.DrillLock || this.isDrillAssociationLock)\r\n {\r\n for (let d of dris)\r\n {\r\n let [bid, drIdss] = d;\r\n let board = bid?.Object as Board;//另一个父亲\r\n\r\n drIdss = drIdss.filter(ids =>\r\n {\r\n if (!ids[0]?.Object || ids[0].IsErase) return false;\r\n let holes = ids.map(i => i.Object) as CylinderHole[];\r\n if (holes[0] instanceof CylinderHole)\r\n {\r\n let isInBoard = CyHoleInBoard(holes, en, en.OCSInv);\r\n if (isInBoard)\r\n {\r\n if (board)//重新拥有父亲的身份.\r\n board.AppendDrillList(en.Id, [ids]);\r\n\r\n en.AppendDrillList(bid, [ids]);//拥有新的母亲的身份\r\n\r\n for (let h of holes)\r\n {\r\n //成了别人的新娘\r\n if (h.FId === this.Id)\r\n h.FId = en.Id;\r\n if (h.MId === this.Id)\r\n h.MId = en.Id;\r\n }\r\n return false;\r\n }\r\n }\r\n else\r\n {\r\n //直接删除,毫不留情\r\n for (let id of ids)\r\n {\r\n let object = id?.Object;\r\n if (object && !object.IsErase)\r\n object.Erase();\r\n }\r\n return false;\r\n }\r\n return true;\r\n });\r\n\r\n d[1] = drIdss;\r\n }\r\n }\r\n }\r\n\r\n //删除无父母的排钻\r\n for (let d of dris)\r\n {\r\n for (let ids of d[1])\r\n for (let id of ids)\r\n {\r\n let object = id?.Object;\r\n if (object && !object.IsErase)\r\n object.Erase();\r\n }\r\n }\r\n\r\n //重新关联复合实体\r\n arrayRemoveIf(this.RelativeHardware, (hwdObjId) =>\r\n {\r\n if (!hwdObjId || hwdObjId.IsErase) return true;\r\n for (let ent of splitEntitys)\r\n {\r\n let hwd = (hwdObjId.Object as HardwareCompositeEntity);\r\n if (ent.BoundingBox.intersectsBox(hwd.BoundingBox))\r\n {\r\n //原始板件删除这个五金\r\n arrayRemoveIf(hwd.RelevanceBoards, (rbr) => rbr?.Object === this);\r\n\r\n //五金与分裂的板关联\r\n hwd.RelevanceBoards.push(ent.objectId);\r\n ent.RelativeHardware.push(hwdObjId);\r\n\r\n //如果五金是把手 写入分裂的板的RelativeHandle\r\n if (this.RelativeHandle.includes(hwdObjId))\r\n {\r\n arrayRemoveIf(this.RelativeHandle, (handle) => handle === hwdObjId);\r\n ent.RelativeHandle.push(hwdObjId);\r\n }\r\n return true;\r\n }\r\n }\r\n });\r\n }\r\n\r\n private BuildArcGeometry()\r\n {\r\n //针对圆弧板\r\n let build = new ArcBoardBuild(this);\r\n [this._MeshGeometry, this._EdgeGeometry] = build.BuildMeshEdgeGeom();\r\n // 圆弧板的二维刀路与侧面造型\r\n if (build.CSGBoard.Async2DPathing || build.CSGBoard.AsyncSideModeling)\r\n {\r\n build.CSGBoard.Load2DPathPromise().then(() =>\r\n {\r\n /** @todo 圆弧板暂时先不显示二维刀路的线框吧 */\r\n this._2DPathDrawObject = undefined;\r\n // 完毕后,不再显示二维刀路/侧面造型建模中的文字\r\n this._async2DPathIng = false;\r\n this._asyncSideModelIng = false;\r\n this.UpdateDrawGeometry();//销毁旧的\r\n [this._MeshGeometry, this._EdgeGeometry] = build.BuildMeshEdgeGeom();\r\n // 更新\r\n for (let [type, obj] of this.CacheDrawObject)\r\n {\r\n this.UpdateDrawObject(type, obj);\r\n obj.updateMatrixWorld(true);\r\n obj.traverse(UpdateBoundingSphere);\r\n }\r\n });\r\n }\r\n this._SweepArcBoardBuild = build;//记录\r\n }\r\n\r\n get EdgeGeometry()\r\n {\r\n if (this._SweepPath) //针对圆弧板\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n // 关联切割\r\n if (!ExtrudeConfig.DisableRefCut)\r\n this.CalcRelevanceGroove();\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n this.BuildArcGeometry();\r\n\r\n return this._EdgeGeometry;\r\n }\r\n else\r\n {\r\n return super.EdgeGeometry;\r\n }\r\n }\r\n\r\n get MeshGeometry()\r\n {\r\n if (this._SweepPath)//针对圆弧板\r\n {\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n // 关联切割\r\n if (this.thickness <= 0)\r\n return new BufferGeometry();\r\n if (!ExtrudeConfig.DisableRefCut)\r\n this.CalcRelevanceGroove();\r\n if (this._MeshGeometry)\r\n return this._MeshGeometry;\r\n\r\n this.BuildArcGeometry();\r\n\r\n return this._MeshGeometry;\r\n }\r\n else\r\n {\r\n return super.MeshGeometry;\r\n }\r\n }\r\n\r\n //del_exp2_start\r\n InitDrawObject(renderType = RenderType.Wireframe)\r\n {\r\n let obj: Object3D;\r\n if (renderType === RenderType.Edge //封边检查\r\n || renderType === RenderType.PlaceFace //排版面检查\r\n || renderType === RenderType.BigHoleFace //大孔面检查\r\n || renderType === RenderType.CustomNumber //自定义编号\r\n || renderType === RenderType.CustomNumberPrint//自定义编号打印\r\n || renderType === RenderType.ModelGroove //造型槽\r\n || this.IsEmbedEntity && !this.ParentEntity.objectId // 复合实体\r\n )\r\n {\r\n obj = new Object3D();\r\n this.UpdateDrawObject(renderType, obj);\r\n }\r\n else\r\n {\r\n obj = super.InitDrawObject(renderType);\r\n this.UpdateDrawObjectByBoardInfo(renderType, obj);\r\n this.DrawAsyncText(obj);\r\n }\r\n return obj;\r\n }\r\n\r\n //del_exp2_start\r\n UpdateDrawGeometry()\r\n {\r\n super.UpdateDrawGeometry();\r\n\r\n //当更新时,我们通知之前的二维刀路构建 结束任务\r\n if (this._SweepArcBoardBuild?._csgBoard?.Async2DPathing)\r\n TerminateCSGTask({ key: this._SweepArcBoardBuild._csgBoard });\r\n }\r\n //del_exp2_end\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n // 圆弧板和复合实体内的圆弧板Jig时实时显示见光面路径\r\n if (this._SweepPath && (renderType === RenderType.Jig || this.IsEmbedEntity && !this.ParentEntity.objectId))\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n\r\n if (!this._jigSweepPath)\r\n return;\r\n\r\n const path2BoardMtx = new Matrix4();\r\n const invMtx = new Matrix4().getInverse(this._Matrix);\r\n path2BoardMtx.multiplyMatrices(invMtx, this._jigPath2WCSMtx);\r\n const pts = this._jigSweepPath.Shape.getPoints().map(AsVector3);\r\n const geo = new BufferGeometry().setFromPoints(pts);\r\n const line = new TLine(geo, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n line.matrix = path2BoardMtx;\r\n obj.add(line);\r\n this._jigSweepPath = undefined;\r\n this._jigPath2WCSMtx = undefined;\r\n return;\r\n }\r\n\r\n let o = super.UpdateDrawObject(renderType, obj);\r\n if (renderType === RenderType.Edge)\r\n {\r\n obj.add(new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(8)));\r\n this.CheckSealing(obj);\r\n }\r\n else if (renderType === RenderType.PlaceFace)\r\n {\r\n let isArbitrary = this._BoardProcessOption[EBoardKeyList.ComposingFace] === ComposingType.Arbitrary;\r\n\r\n obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(8)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n\r\n if (!isArbitrary)//如果不是任意面\r\n obj.add(this.GetPlaceFace());\r\n }\r\n else if (renderType === RenderType.BigHoleFace)\r\n {\r\n obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(8)),\r\n new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(7))\r\n );\r\n\r\n obj.add(this.GetBigHoleFace());\r\n }\r\n else if (renderType === RenderType.CustomNumber || renderType === RenderType.CustomNumberPrint)\r\n {\r\n if (renderType === RenderType.CustomNumberPrint)\r\n obj.add(...this.GetPrintObject3D());\r\n else\r\n obj.add(new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex, FrontSide, true)));\r\n\r\n //#region 添加文字\r\n if (!this._CustomNumberTextEntity)\r\n {\r\n this._CustomNumberTextEntity = new DbText();\r\n this._CustomNumberTextEntity.TextAligen = TextAligen.Mid;\r\n this._CustomNumberTextEntity.IsDoubleMesh = true;\r\n this._CustomNumberTextEntity.IsFsText = this._BoardType === BoardType.Layer;\r\n\r\n this._CustomNumberTextEntity.IsEmbedEntity = true;\r\n }\r\n if (this._BoardType === BoardType.Layer)\r\n this._CustomNumberTextEntity.OCSNoClone.makeRotationZ(-Math.PI / 2).setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5);\r\n else\r\n this._CustomNumberTextEntity.OCSNoClone.identity().setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5);\r\n\r\n this._CustomNumberTextEntity.TextString = this._CustomNumber?.toString() ?? (this.objectId?.Index > 0 ? \"未编号\" : \" \");\r\n\r\n if (this._CustomNumberTextEntity.TextString === \"未编号\")\r\n this._CustomNumberTextEntity.Height = 60;\r\n else\r\n this._CustomNumberTextEntity.Height = HostApplicationServices.boardCustomNumberTextHeight;\r\n\r\n let o = this._CustomNumberTextEntity.GetDrawObjectFromRenderType(RenderType.Conceptual);\r\n if (o)\r\n {\r\n o.traverse(obj => obj.userData = {});\r\n AddEntityDrawObject(obj, this._CustomNumberTextEntity, RenderType.Conceptual);\r\n }\r\n //#endregion\r\n }\r\n\r\n this.UpdateDrawObjectByBoardInfo(renderType, obj);\r\n\r\n this.DrawAsyncText(obj);\r\n\r\n return o;\r\n }\r\n\r\n private DrawAsyncText(obj: Object3D)\r\n {\r\n if (this._async2DPathIng || this._asyncSideModelIng)\r\n {\r\n //#region 添加文字\r\n if (!this._AsyncIngTextEntity)\r\n {\r\n this._AsyncIngTextEntity = new DbText();\r\n this._AsyncIngTextEntity.TextAligen = TextAligen.Mid;\r\n this._AsyncIngTextEntity.IsDoubleMesh = true;\r\n this._AsyncIngTextEntity.IsFsText = this._BoardType === BoardType.Layer;\r\n\r\n this._AsyncIngTextEntity.IsEmbedEntity = true;\r\n }\r\n if (this._BoardType === BoardType.Layer)\r\n this._AsyncIngTextEntity.OCSNoClone.makeRotationZ(-Math.PI / 2).setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5);\r\n\r\n else\r\n this._AsyncIngTextEntity.OCSNoClone.identity().setPosition(this.width * 0.5, this.height * 0.5, this.thickness * 0.5);\r\n\r\n if (this._async2DPathIng)\r\n this._AsyncIngTextEntity.TextString = \"二维刀路建模中!\";\r\n else if (this._asyncSideModelIng)\r\n this._AsyncIngTextEntity.TextString = \"侧面造型建模中!\";\r\n\r\n let o = this._AsyncIngTextEntity.GetDrawObjectFromRenderType(RenderType.Conceptual);\r\n if (o)\r\n {\r\n o.traverse(obj => obj.userData = {});\r\n AddEntityDrawObject(obj, this._AsyncIngTextEntity, RenderType.Conceptual);\r\n }\r\n //#endregion\r\n }\r\n }\r\n //del_exp2_end\r\n\r\n //绘制排版面时使用的颜色\r\n private get PlaceColor() { return this._Color === 8 ? 9 : this.DrawColorIndex; }\r\n //排版面网格\r\n private GetPlaceFace(): Mesh\r\n {\r\n let shapeGeom = new 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 get BigHoleFaceGeo()\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 return shapeGeom;\r\n }\r\n\r\n //大孔面网格\r\n private GetBigHoleFace(): Mesh\r\n {\r\n if (this._SweepPath) //针对圆弧板\r\n {\r\n const geometry = this._SweepArcBoardBuild.BuildBigHoleFace();\r\n let mesh = new Mesh(geometry, ColorMaterial.GetBasicMaterialDoubleSide(this.PlaceColor));\r\n return mesh;\r\n }\r\n let shapeGeom = this.BigHoleFaceGeo;\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 this.GetSideModeingCsgs();\r\n }\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n super.UpdateDrawObjectMaterial(renderType, obj);\r\n\r\n if (renderType === RenderType.PlaceFace || renderType === RenderType.BigHoleFace)\r\n {\r\n let face = obj.children[2] as Mesh;\r\n if (!face) return;\r\n face.material = ColorMaterial.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 private AddSideModelGripPoints(pts: Vector3[], dragPointType: DragPointType)\r\n {\r\n let con = GetBoardContour(this);\r\n let inverseZ = con.Area2 < 0;\r\n let cus = con.Explode() as Curve[];\r\n\r\n for (let [index, soilds] of this.SideModelingMap)\r\n {\r\n let cu = cus[index];\r\n if (!cu) continue;\r\n\r\n let mt4 = GetSideCuFaceMtx(cus[index], inverseZ);\r\n\r\n for (let soild of soilds)\r\n {\r\n const MirrorMtxZ = MakeMirrorMtx(ZAxis);\r\n let s = soild.Clone();\r\n s.ApplyMatrix(MirrorMtxZ);\r\n s.ApplyMatrix(mt4);\r\n s.ApplyMatrix(this.OCSNoClone);\r\n pts.push(...s.GetGripOrStretchPoints(dragPointType));\r\n }\r\n }\r\n }\r\n\r\n override GetStrectchPointCountList(dragType: DragPointType): number[]\r\n {\r\n let counts = super.GetStrectchPointCountList(dragType);\r\n if (this.HasSideModel)\r\n {\r\n for (let [num, soilds] of this.SideModelingMap)\r\n {\r\n for (let soild of soilds)\r\n {\r\n let c = soild.ContourCurve.GetDragPointCount(dragType) * 2;\r\n for (let g of soild.Grooves)\r\n c += g.ContourCurve.GetDragPointCount(dragType) * 2;\r\n\r\n counts.push(c);\r\n }\r\n }\r\n }\r\n return counts;\r\n }\r\n\r\n //因为圆弧板 我们重载了它\r\n override GetGripPoints(): Vector3[]\r\n {\r\n let pts = super.GetGripPoints();\r\n pts = this.MapToArcPoints(pts, DragPointType.Grip);\r\n return pts;\r\n }\r\n\r\n private MapToArcPoints(pts: Vector3[], dragPointType: DragPointType): Vector3[]\r\n {\r\n if (this._SweepPath)\r\n {\r\n if (!this._SweepArcBoardBuild)\r\n this._SweepArcBoardBuild = new ArcBoardBuild(this);\r\n\r\n let inv = this.OCSInv;\r\n let mtx = this.OCSNoClone;\r\n if (this._SweepArcBoardBuild._OCS2RotateMtx)\r\n {\r\n inv.multiplyMatrices(this._SweepArcBoardBuild._OCS2RotateMtx, inv);\r\n mtx = new Matrix4().multiplyMatrices(mtx, this._SweepArcBoardBuild._Rotate2OCSMtx);\r\n }\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(inv);\r\n\r\n let xs = pts.map(p => p.x);\r\n arraySortByNumber(xs);\r\n arrayRemoveDuplicateBySort(xs);\r\n this._SweepArcBoardBuild.ParseAllX_Map(xs);\r\n\r\n for (let p of pts)\r\n {\r\n this._SweepArcBoardBuild.PosMap2ArcPos(p);\r\n p.applyMatrix4(mtx);\r\n }\r\n } else if (this.HasSideModel)\r\n this.AddSideModelGripPoints(pts, dragPointType);\r\n\r\n return pts;\r\n }\r\n\r\n override MoveGripPoints(indexList: number[], vec: Vector3): void\r\n {\r\n if (indexList.length === 0) return;\r\n this.ClearSideModelingCache();\r\n if (this._SweepPath)\r\n {\r\n this.MoveArcBoardPoints(indexList, vec, DragPointType.Grip);\r\n this.Update();\r\n }\r\n else\r\n super.MoveGripPoints(indexList, vec);\r\n }\r\n\r\n GetStretchPoints()\r\n {\r\n let pts = this.GetGripOrStretchPoints(DragPointType.Stretch);\r\n pts = this.MapToArcPoints(pts, DragPointType.Stretch);\r\n for (let m of this._2DModelingList)\r\n {\r\n pts.push(...m.path.GetStretchPoints().map(p => p.add(new Vector3(0, 0, m.dir === FaceDirection.Front ? this.thickness : 0)).applyMatrix4(this.OCSNoClone)));\r\n }\r\n\r\n return pts;\r\n }\r\n\r\n MoveStretchPoints(indexList: Array<number>, vec: Vector3)\r\n {\r\n if (indexList.length === 0)\r\n {\r\n let undoData = this.UndoRecord();\r\n if (undoData)\r\n undoData.WriteObjectHistoryPath(this, new HistorycRecord);\r\n return;\r\n }\r\n let exCount = arraySum(this.GetStrectchPointCountList(DragPointType.Stretch));\r\n let originIndexList: number[] = [];\r\n let mIndexList: number[] = [];\r\n for (let i of indexList)\r\n {\r\n if (i < exCount)\r\n originIndexList.push(i);\r\n else\r\n mIndexList.push(i - exCount);\r\n }\r\n\r\n let oldOcs = this.OCS;\r\n\r\n if (this._SweepPath)\r\n this.MoveArcBoardPoints(originIndexList, vec, DragPointType.Stretch);\r\n else\r\n super.MoveStretchPoints(originIndexList, vec);\r\n\r\n if (!this.Id) return;\r\n\r\n arraySortByNumber(mIndexList);\r\n let ocsInv = this.OCSInv;\r\n let localVec = TransformVector(vec.clone(), ocsInv);\r\n let offset = 0;\r\n let icount = mIndexList.length;\r\n let i = 0;\r\n\r\n for (let m of this._2DModelingList)\r\n {\r\n let count = m.path.GetDragPointCount(DragPointType.Stretch);\r\n offset += count;\r\n\r\n let iList: number[] = [];\r\n\r\n for (; i < icount; i++)\r\n {\r\n if (mIndexList[i] < offset)\r\n iList.push(mIndexList[i] - offset + count);\r\n else\r\n break;\r\n }\r\n if (iList.length > 0)\r\n {\r\n m.path.MoveStretchPoints(iList, localVec);\r\n }\r\n m.path.ApplyMatrix(oldOcs).ApplyMatrix(ocsInv);\r\n }\r\n\r\n this.Clear2DPathCache();\r\n this.Clear3DPathCache();\r\n this.ClearSideModelingCache();\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3,\r\n frustum?: Frustum,\r\n ): Vector3[]\r\n {\r\n if (this._SweepPath)\r\n {\r\n if (snapMode === ObjectSnapMode.Nea)\r\n {\r\n let pts: Vector3[] = [];\r\n //这里实现对线框的快速捕捉\r\n let edgeGeom = this.EdgeGeometry;\r\n let pos = edgeGeom.getAttribute(\"position\") as BufferAttribute;\r\n let p1 = new Vector3;\r\n let p2 = new Vector3;\r\n\r\n let line = new Line(p1, p2);\r\n line.ApplyMatrix(this.OCSNoClone);\r\n\r\n let sel: SelectPick = frustum[\"_select_\"];\r\n for (let y = 0; y < pos.count; y += 2)\r\n {\r\n p1.fromArray(pos.array, y * 3);\r\n p2.fromArray(pos.array, (y + 1) * 3);\r\n p1.applyMatrix4(this._Matrix);\r\n p2.applyMatrix4(this._Matrix);\r\n\r\n sel.WorldToScreenPoint(p1);\r\n sel.WorldToScreenPoint(p2);\r\n\r\n if (sel.IntersectLine(p1, p2))\r\n {\r\n p1.fromArray(pos.array, y * 3);\r\n p2.fromArray(pos.array, (y + 1) * 3);\r\n arrayPushArray(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n }\r\n return pts;\r\n }\r\n }\r\n\r\n let pts = super.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform, frustum);\r\n if (snapMode === ObjectSnapMode.End)\r\n {\r\n for (let vm of this._2DModelingList)\r\n {\r\n if (!this.OffsetPathCache.has(vm.path)) continue;\r\n for (let item of vm.items)\r\n {\r\n if (item.offset === 0) continue;\r\n\r\n let paths = this.OffsetPathCache.get(vm.path);\r\n let polyline = paths[item.offset.toString()];\r\n if (!polyline) continue;//多段线可能偏移失败\r\n\r\n let ps = polyline.GetStretchPoints();\r\n\r\n for (let p of ps)\r\n {\r\n if (vm.dir === FaceDirection.Front)\r\n p.add(new Vector3(0, 0, this.thickness));\r\n p.applyMatrix4(this.OCS);\r\n }\r\n pts.push(...ps);\r\n }\r\n }\r\n }\r\n else if (snapMode === ObjectSnapMode.Mid)\r\n {\r\n for (let vm of this._2DModelingList)\r\n {\r\n let ps = vm.path.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n for (let p of ps)\r\n {\r\n if (vm.dir === FaceDirection.Front)\r\n p.add(new Vector3(0, 0, this.thickness));\r\n p.applyMatrix4(this.OCS);\r\n }\r\n pts.push(...ps);\r\n }\r\n }\r\n\r\n //为圆弧板映射新的点表\r\n if (this._SweepPath)\r\n {\r\n let inv = this.OCSInv;\r\n let mtx = this._Matrix;\r\n\r\n if (this._SweepAngle !== 0)\r\n {\r\n inv.multiplyMatrices(this.ArcBuild.OCS2RotateMtx, inv);\r\n mtx = new Matrix4().multiplyMatrices(mtx, this.ArcBuild.Rotate2OCSMtx);\r\n }\r\n\r\n for (let p of pts) p.applyMatrix4(inv);\r\n\r\n let xs = pts.map(p => p.x);\r\n arraySortByNumber(xs);\r\n arrayRemoveDuplicateBySort(xs, equaln);\r\n this.ArcBuild.ParseAllX_Map(xs);\r\n\r\n for (let p of pts)\r\n {\r\n this.ArcBuild.PosMap2ArcPos(p);\r\n p.applyMatrix4(mtx);\r\n }\r\n }\r\n\r\n return pts;\r\n }\r\n\r\n private MoveArcBoardPoints(indexList: Array<number>, vec: Vector3, dragType: DragPointType)\r\n {\r\n this.WriteAllObjectRecord();\r\n const isGrip = dragType === DragPointType.Grip;\r\n const oldPts = isGrip ? this.GetGripPoints() : this.GetStretchPoints();\r\n const MoveBack = () => isGrip ? super.MoveGripPoints(indexList, offsetVec.clone().negate()) : super.MoveStretchPoints(indexList, offsetVec.clone().negate());\r\n\r\n let path = this.ArcBuild.SweepPath1.Clone();\r\n\r\n // 1、计算沿着SweepPath偏移的向量\r\n const offsetVec = this.GetOffsetVecAlongPath(oldPts[indexList[0]].clone(), vec, path);\r\n\r\n const oldPos = this.Position;\r\n const oldCon = this.ContourCurve.Clone();\r\n const ocs2rot = this.ArcBuild.OCS2RotateMtx;\r\n oldCon.ApplyMatrix(ocs2rot);\r\n const oldBox = oldCon.BoundingBox;\r\n\r\n // 2、移动平板上的点\r\n isGrip ? super.MoveGripPoints(indexList, offsetVec) : super.MoveStretchPoints(indexList, offsetVec);\r\n\r\n const newPos = this.Position;\r\n const conMoveVec = TransformVector(newPos.clone().sub(oldPos), this.OCSInv);//轮廓在OCS中移动的向量\r\n const newCon = this.ContourCurve.Clone();\r\n newCon.Move(conMoveVec);\r\n newCon.ApplyMatrix(ocs2rot);\r\n const newBox = newCon.BoundingBox;\r\n\r\n this._jigSweepPath = path.Clone();\r\n\r\n // 特殊场景闭合SweepPath其对应的首尾不能发生变化否者会发生path和Contour映射错误。\r\n if (path.CloseMark && !(equaln(newBox.min.x, oldBox.min.x) && equaln(newBox.max.x, oldBox.max.x)))\r\n {\r\n MoveBack();// 若头尾被拖拽过,需要恢复回去\r\n return;\r\n }\r\n\r\n // 特殊场景:某些操作,对弧形板进行移动(如当拖拽中间点),未发生路径改变,则重新移动回去\r\n const newSize = newBox.getSize(new Vector3);\r\n const oldSize = oldBox.getSize(new Vector3);\r\n if (equaln(newSize.x, oldSize.x, 1e-3))\r\n {\r\n const newPts = isGrip ? this.GetGripPoints() : this.GetStretchPoints();\r\n if (oldPts.length === newPts.length)\r\n {\r\n const vec = oldPts[0].clone().sub(newPts[0]);\r\n const isMoveArcBoard = oldPts.every((pt, i) => equalv3(pt.clone().sub(newPts[i]), vec));\r\n if (isMoveArcBoard)\r\n {\r\n MoveBack();\r\n return;\r\n }\r\n }\r\n }\r\n\r\n // 3、修正SweepPath\r\n path = this.FixSweepPathByContourBondingbox(newBox, oldBox, path);\r\n // 特殊场景path 计算发生错误,需要恢复板的状态\r\n if (!path)\r\n {\r\n MoveBack();\r\n return;\r\n }\r\n\r\n // 4、计算弧形板偏移矩阵\r\n if (this.objectId || (this.IsEmbedEntity && this.ParentEntity.objectId))\r\n {\r\n const pts1 = isGrip ? newCon.GetGripPoints() : newCon.GetStretchPoints();\r\n const pts2 = isGrip ? oldCon.GetGripPoints() : oldCon.GetStretchPoints();\r\n const count = Math.min(pts1.length, pts2.length);\r\n this._SweepArcBoardBuild = undefined;\r\n for (let i = 0; i < count; i++)\r\n {\r\n if (equalv2(pts1[i], pts2[i], 1e-3)) // 找到新板和旧板上不变的点,计算出偏移矩阵\r\n {\r\n const pts = isGrip ? this.GetGripPoints() : this.GetStretchPoints();\r\n this.Move(oldPts[i].sub(pts[i]));\r\n break;\r\n }\r\n }\r\n this._SweepArcBoardBuild = undefined;\r\n }\r\n }\r\n\r\n private GetOffsetVecAlongPath(oldP: Vector3, vec: Vector3, path: Polyline): Vector3\r\n {\r\n const p = oldP.clone().add(vec);//拉伸后的点 在世界坐标系中\r\n\r\n const path2WCSMtx = new Matrix4().makeBasis(XAxis, ZAxis, YAxisN);\r\n if (this._SweepAngle !== 0)\r\n path2WCSMtx.premultiply(this.ArcBuild.Rotate2OCSMtx);\r\n path2WCSMtx.premultiply(this.OCSNoClone);\r\n const wcs2PathMtx = new Matrix4().getInverse(path2WCSMtx);\r\n this._jigPath2WCSMtx = path2WCSMtx.clone();\r\n\r\n //变换到路径坐标系\r\n p.applyMatrix4(wcs2PathMtx);\r\n oldP.applyMatrix4(wcs2PathMtx);\r\n\r\n // 限制p, 在见光面的曲面中,计算偏移向量\r\n const cp = path.GetClosestPointTo(p, true);\r\n\r\n const oldZ = oldP.z;\r\n const newZ = p.z;\r\n\r\n const oldPCp = path.GetClosestPointTo(oldP.setZ(0), false);//旧的最近点\r\n const oldDist = path.GetDistAtPoint2(oldPCp);// 移动前的Dist\r\n const movedDist = path.GetDistAtPoint2(cp);// 移动后的Dist\r\n\r\n const moveVec = new Vector3(movedDist - oldDist, - newZ + oldZ, 0);\r\n\r\n //将moveVec转换到世界坐标系\r\n if (this._SweepAngle !== 0)\r\n TransformVector(moveVec, this.ArcBuild.Rotate2OCSMtx);\r\n TransformVector(moveVec, this.OCSNoClone);\r\n\r\n return moveVec;\r\n }\r\n\r\n /**\r\n * @private 通过新旧轮廓的Bondingbox修正路径\r\n * @param {Box3Ext} newBox 路径坐标系下新轮廓的Bondingbox\r\n * @param {Box3Ext} oldBox 路径坐标系下旧轮廓的Bondingbox\r\n * @param {Polyline} path 见光面路径\r\n * @return {*} {Polyline} 修正好的路径\r\n */\r\n private FixSweepPathByContourBondingbox(newBox: Box3Ext, oldBox: Box3Ext, path: Polyline): Polyline\r\n {\r\n // 若头部和尾部重合,则直接不处理\r\n if (equaln(newBox.min.x, newBox.max.x, 0.1))\r\n return;\r\n\r\n const GetArcAndKeys = (): { key: number, arc: Arc; }[] =>\r\n {\r\n const curves = path.Explode();\r\n const arcs: { key: number, arc: Arc; }[] = [];\r\n for (let i = 0; i < curves.length; i++)\r\n if (curves[i] instanceof Arc)\r\n arcs.push({ key: i, arc: curves[i].Clone() as Arc });\r\n return arcs;\r\n };\r\n const arcKeys = GetArcAndKeys();\r\n\r\n const MovePath = (pathToMove: Polyline, mVec: Vector3) =>\r\n {\r\n // 修正SWeepPath\r\n pathToMove.Move(mVec);\r\n const { pts: pathPts, buls } = pathToMove.MatrixAlignTo2(new Matrix4);\r\n pathToMove.OCSNoClone.identity();\r\n for (let i = 0; i < pathToMove.LineData.length; i++)\r\n {\r\n pathToMove.LineData[i].pt.copy(pathPts[i]);\r\n pathToMove.LineData[i].bul = buls[i];\r\n }\r\n };\r\n\r\n let jigSpt: Vector3 = undefined;\r\n const FixHead = () =>\r\n {\r\n if (!equaln(newBox.min.x, 0, 1e-3)) // 头部\r\n {\r\n const c1 = path.GetCurveAtIndex(0);\r\n if (newBox.min.x < 0)\r\n path.Extend(newBox.min.x / c1.Length); // 延伸\r\n else\r\n path = path.GetSplitCurves(path.GetParamAtDist(newBox.min.x))[1]; // 裁剪\r\n\r\n jigSpt = path.StartPoint.clone();\r\n MovePath(path, path.StartPoint.clone().negate());// 修正Path\r\n }\r\n };\r\n\r\n const FixTail = () =>\r\n {\r\n if (!equaln(newBox.max.x, oldBox.max.x, 1e-3)) // 尾部\r\n {\r\n const dist = newBox.max.x - oldBox.max.x;\r\n const ce = path.GetCurveAtIndex(path.EndParam - 1);\r\n if (dist > 0)\r\n path.Extend(path.EndParam + ((dist) / ce.Length)); // 延伸\r\n else\r\n path = path.GetSplitCurves(path.GetParamAtDist(newBox.max.x - newBox.min.x))[0]; // 裁剪, PS: 从尾部点拉伸到头部点之前newBox.min.x不为零\r\n }\r\n };\r\n\r\n /**\r\n * 某些异形板左侧头部拉伸到尾部后面示意图:\r\n * ___________\r\n * A | |\r\n * |_______ |\r\n * | |\r\n * old B |___|\r\n * _____\r\n * | | A\r\n * ___|_____|\r\n * | |\r\n * new B |___|\r\n */\r\n const outofTail = newBox.min.x >= oldBox.max.x\r\n || equaln(newBox.min.x, oldBox.max.x, 1e-3) // 矩形板:拉伸后,新板头和旧板尾部相同\r\n || newBox.min.x > oldBox.min.x && newBox.max.x > oldBox.max.x; // 某些异形板:新板头会在旧板中间某处,新板尾超过旧版尾\r\n if (outofTail)\r\n {\r\n // 头部拉伸在超过尾部即新头部大于等于原尾部。则先对尾部延伸再裁剪头部若先裁剪头部则path可能会为空\r\n FixTail();\r\n FixHead();\r\n } else\r\n {\r\n FixHead();\r\n FixTail();\r\n }\r\n\r\n // 计算 this._SweepPath\r\n let sweepPath = undefined;\r\n if (this._SweepVisibleFace === FaceDirection.Back)\r\n {\r\n sweepPath = path;\r\n // 做offset偏移查看path是否会被裁剪。若被裁剪会破坏板和路径的映射关系则不能继续其他操作\r\n if (this.objectId || (this.IsEmbedEntity && this.ParentEntity.objectId))\r\n {\r\n const frontPath = ArcBoardBuild.OffsetPolyline(sweepPath, -this.thickness); // 正面path\r\n const backPath = ArcBoardBuild.OffsetPolyline(frontPath, this.thickness); // 背面path\r\n if (!equaln(backPath.Length, sweepPath.Length, 1e-3))\r\n return;\r\n }\r\n }\r\n else\r\n {\r\n sweepPath = ArcBoardBuild.OffsetPolyline(path, this.thickness);\r\n // 做offset偏移查看path是否会被裁剪。若被裁剪会破坏板和路径的映射关系则不能继续其他操作\r\n if (this.objectId || (this.IsEmbedEntity && this.ParentEntity.objectId))\r\n {\r\n const frontPath = ArcBoardBuild.OffsetPolyline(sweepPath, -this.thickness);// 正面path\r\n if (!equaln(frontPath.Length, path.Length, 1e-3))\r\n return;\r\n }\r\n }\r\n this._SweepPath = sweepPath;\r\n\r\n this._jigSweepPath = path.Clone();\r\n if (jigSpt)\r\n MovePath(this._jigSweepPath, jigSpt);// 新路径,但是未进行起始点偏移。方便拖拽时,实时显示当前路径\r\n\r\n // 更新圆弧配置\r\n if (this.objectId || (this.IsEmbedEntity && this.ParentEntity.objectId))\r\n this.UpdateArcBoardOptionsByPath(arcKeys, this._jigSweepPath);\r\n\r\n return path;\r\n }\r\n\r\n DeferUpdate()\r\n {\r\n if (this.NeedUpdateFlag & UpdateDraw.Matrix)\r\n {\r\n if (this.RelativeHardware.some(id => !id.IsErase))\r\n this.NeedUpdateFlag |= UpdateDraw.Geometry;\r\n }\r\n super.DeferUpdate();\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n if (ver < 6)\r\n this._SpaceOCS.fromArray(file.Read());\r\n this._BoardType = file.Read();\r\n this._Name = file.Read();\r\n //兼容旧版本\r\n if (ver > 2)\r\n {\r\n deserializationBoardData(file, this._BoardProcessOption, ver);\r\n }\r\n else\r\n {\r\n let opt = file.Read();\r\n this._BoardProcessOption = Object.assign(this._BoardProcessOption,\r\n typeof opt === \"string\" ? JSON.parse(opt) : opt);\r\n }\r\n\r\n //读取排钻列表\r\n this._DrillList.clear();\r\n let size = file.Read();\r\n\r\n //没有与任何板件关联的排钻\r\n let noRelevancyDrillings: ObjectId[][] = [];\r\n for (let i = 0; i < size; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let drIdList: ObjectId[][] = [];\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let drIDs: ObjectIdArr = [];\r\n let count1 = file.Read();\r\n for (let j = 0; j < count1; j++)\r\n {\r\n let fileId = file.ReadObjectId();\r\n fileId && drIDs.push(fileId);\r\n }\r\n\r\n if (ver > 21)\r\n drIDs.Name = file.Read();\r\n\r\n if (drIDs.length > 0)\r\n drIdList.push(drIDs);\r\n }\r\n\r\n if (drIdList.length === 0)\r\n continue;\r\n\r\n if (!id)\r\n noRelevancyDrillings.push(...drIdList);\r\n else\r\n this._DrillList.set(id, drIdList);\r\n }\r\n\r\n if (noRelevancyDrillings.length > 0)\r\n this._DrillList.set(undefined, noRelevancyDrillings);\r\n\r\n if (ver > 1)\r\n {\r\n this._LayerNails.length = 0;\r\n let nailsCount = file.Read();\r\n for (let i = 0; i < nailsCount; i++)\r\n {\r\n let objId = file.ReadObjectId();\r\n if (objId)\r\n this._LayerNails.push(objId);\r\n }\r\n }\r\n if (ver > 4)\r\n this._Rotation = { x: file.Read(), y: file.Read(), z: file.Read() };\r\n if (ver >= 7)\r\n {\r\n let count = file.Read();\r\n this.RelativeHardware.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let objId = file.ReadObjectId();\r\n if (objId)\r\n this.RelativeHardware.push(objId);\r\n }\r\n }\r\n if (ver >= 8)\r\n this.OpenDir = file.Read();\r\n\r\n if (ver >= 9)\r\n this._IsChaiDan = file.Read();\r\n\r\n if (ver >= 10)\r\n {\r\n DeserializationBoard2DModeingData(file, this._2DModelingList, ver);\r\n DeserializationBoard3DModeingData(file, this._3DModelingList, ver);\r\n }\r\n\r\n this.Clear2DPathCache();\r\n this.Clear3DPathCache();\r\n\r\n if (ver > 10)\r\n this._CustomNumber = file.Read();\r\n else\r\n this._CustomNumber = null;\r\n\r\n this._KnifePolylineMap.clear();\r\n if (ver > 11)\r\n {\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let id = file.Read();\r\n let pl = file.ReadObject() as Polyline;\r\n this._KnifePolylineMap.set(id, pl);\r\n }\r\n }\r\n\r\n // if (this.width === 0 || this.height === 0) //板件变成0长度,无法绘制\r\n // this._isErase = true;\r\n\r\n if (ver > 12)\r\n {\r\n let count = file.Read();\r\n this.RelativeHandle.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let objId = file.ReadObjectId();\r\n if (objId)\r\n this.RelativeHandle.push(objId);\r\n }\r\n }\r\n\r\n const processData = this._BoardProcessOption;\r\n if (ver > 13)\r\n {\r\n processData.edgeRemarkUp = file.Read();\r\n processData.edgeRemarkDown = file.Read();\r\n processData.edgeRemarkLeft = file.Read();\r\n processData.edgeRemarkRight = file.Read();\r\n let count = file.Read();\r\n processData.highBoardEdgeRemark = file.ReadArray(count);\r\n }\r\n\r\n this._DrillAssociationLock.clear();\r\n if (ver > 14)\r\n {\r\n this._DrillLock = file.Read();\r\n\r\n //读取关联排钻锁映射\r\n const size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n const id = file.ReadObjectId();\r\n if (id)\r\n this._DrillAssociationLock.add(id);\r\n }\r\n }\r\n\r\n if (ver > 15)\r\n {\r\n this._SweepPath = file.ReadObject();\r\n if (this._SweepPath)\r\n {\r\n this._SweepAngle = file.Read();\r\n if (ver > 16)\r\n this._SweepVisibleFace = file.Read();\r\n if (ver > 17)\r\n this._isDrawArcGroove = file.Read();\r\n this._ArcBoardOptions.clear();\r\n const count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let key = file.Read();\r\n let opt: ArcBoardOptions = {\r\n arcLength: file.Read(),\r\n grooveSpacing: file.Read(),\r\n grooveWidth: file.Read(),\r\n retainedThickness: file.Read(),\r\n grooveAddDepth: file.Read(),\r\n grooveAddLength: file.Read(),\r\n grooveAddWidth: file.Read(),\r\n knifeRadius: file.Read(),\r\n arcExtension: 0,\r\n };\r\n if (ver > 18)\r\n opt.arcExtension = file.Read();\r\n this._ArcBoardOptions.set(key, opt);\r\n }\r\n }\r\n }\r\n\r\n if (ver > 19)\r\n this.AlignLineObject = file.ReadHardObjectId();\r\n\r\n if (ver > 20)\r\n DeserializationBoardSideModeingData(file, this._SideModelingMap);\r\n this.ClearSideModelingCache();\r\n\r\n if (ver > 22)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n }\r\n\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(23);\r\n // file.Write(this._SpaceOCS.toArray()); ver < 6\r\n file.Write(this._BoardType);\r\n file.Write(this._Name);\r\n serializeBoardData(file, this._BoardProcessOption);\r\n\r\n file.Write(this._DrillList.size);\r\n for (let [id, idList] of this._DrillList)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(idList.length);\r\n for (let ids of idList)\r\n {\r\n file.Write(ids.length);\r\n for (let id of ids)\r\n file.WriteObjectId(id);\r\n\r\n file.Write(ids.Name);\r\n }\r\n }\r\n\r\n file.Write(this._LayerNails.length);\r\n for (let nail of this._LayerNails)\r\n file.WriteHardObjectId(nail);\r\n\r\n file.Write(this._Rotation.x);\r\n file.Write(this._Rotation.y);\r\n file.Write(this._Rotation.z);\r\n\r\n file.Write(this.RelativeHardware.length);\r\n for (let id of this.RelativeHardware)\r\n file.WriteObjectId(id);\r\n\r\n file.Write(this.OpenDir);\r\n file.Write(this._IsChaiDan);\r\n\r\n SerializeBoard2DModeingData(file, this._2DModelingList);\r\n SerializeBoard3DModeingData(file, this._3DModelingList);\r\n\r\n file.Write(this._CustomNumber);\r\n\r\n file.Write(this._KnifePolylineMap.size);\r\n for (let [id, pl] of this._KnifePolylineMap)\r\n {\r\n file.Write(id);\r\n file.WriteObject(pl);\r\n }\r\n\r\n file.Write(this.RelativeHandle.length);\r\n for (let id of this.RelativeHandle)\r\n file.WriteObjectId(id);\r\n\r\n const processData = this._BoardProcessOption;\r\n file.Write(processData.edgeRemarkUp);\r\n file.Write(processData.edgeRemarkDown);\r\n file.Write(processData.edgeRemarkLeft);\r\n file.Write(processData.edgeRemarkRight);\r\n file.Write(processData.highBoardEdgeRemark.length);\r\n for (let r of processData.highBoardEdgeRemark)\r\n {\r\n file.Write(r);\r\n }\r\n\r\n //ver>14\r\n {\r\n file.Write(this._DrillLock);\r\n const count = this._DrillAssociationLock.size;\r\n file.Write(count);\r\n for (const id of this._DrillAssociationLock)\r\n {\r\n file.WriteObjectId(id);\r\n }\r\n }\r\n\r\n //ver 16\r\n file.WriteObject(this._SweepPath);\r\n if (this._SweepPath)\r\n {\r\n file.Write(this._SweepAngle);\r\n file.Write(this._SweepVisibleFace);\r\n file.Write(this._isDrawArcGroove);\r\n file.Write(this._ArcBoardOptions.size);\r\n for (const [k, v] of this._ArcBoardOptions)\r\n {\r\n file.Write(k);\r\n file.Write(v.arcLength);\r\n file.Write(v.grooveSpacing);\r\n file.Write(v.grooveWidth);\r\n file.Write(v.retainedThickness);\r\n file.Write(v.grooveAddDepth);\r\n file.Write(v.grooveAddLength);\r\n file.Write(v.grooveAddWidth);\r\n file.Write(v.knifeRadius);\r\n file.Write(v.arcExtension);\r\n }\r\n }\r\n\r\n //ver 20\r\n file.WriteHardObjectId(this.AlignLineObject);\r\n\r\n //ver 21\r\n SerializeBoardSideModeingData(file, this._SideModelingMap);\r\n\r\n // ver 23\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n}\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 { 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 { Box3, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort } from \"../../../Common/ArrayExt\";\r\nimport { equalv3 } from \"../../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../../GraphicsSystem/IntersectWith\";\r\nimport { equaln } from \"../../../Nest/Common/Util\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Arc } from \"../../Entity/Arc\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\nimport { Line } from \"../../Entity/Line\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { InsertRangeAndUnion, InsertRangeIndex } from \"./RangeUtils\";\r\n\r\n\r\nexport class CurveTrim\r\n{\r\n _TrimParams: [number, number][] = [];\r\n _IsErase = false;\r\n public _Box: Box3;\r\n constructor(public _curve: Line | Arc)\r\n {\r\n this._Box = _curve.BoundingBox.expandByVector(new Vector3(0.01, 0.01));\r\n }\r\n\r\n TrimBy(contour: Contour, box: Box3, saveSyntropy = false)\r\n {\r\n if (this._IsErase) return;\r\n\r\n //交点参数列表\r\n let iParams = this._curve.IntersectWith2(contour.Curve, IntersectOption.ExtendNone).map(p => p.thisParam).filter(p => p > 1e-6 && p < 0.999999);\r\n iParams.push(0, 1);\r\n iParams.sort((a, b) => a - b);\r\n arrayRemoveDuplicateBySort(iParams, (a1, a2) => equaln(a1, a2, 1e-6));\r\n\r\n if (iParams.length === 2)//[0,1]全包含 或者在外部\r\n {\r\n let p = this.GetPointAtParam(0.5);\r\n if (this.PointInContour(p, contour, box, saveSyntropy))\r\n this._IsErase = true;\r\n return;\r\n }\r\n\r\n for (let i = 0; i < iParams.length - 1; i++)\r\n {\r\n let sparam = iParams[i], eparam = iParams[i + 1];\r\n\r\n let insertIndex = InsertRangeIndex(this._TrimParams, iParams[i]);\r\n\r\n if (insertIndex !== 0 && this._TrimParams[insertIndex - 1][1] > eparam)//包含在已经被切割的范围内,那么直接不用重复判断 (只可能被前一段包含)\r\n continue;\r\n\r\n let midParam = (sparam + eparam) * 0.5;\r\n let p = this.GetPointAtParam(midParam);\r\n if (this.PointInContour(p, contour, box, saveSyntropy))\r\n {\r\n InsertRangeAndUnion(this._TrimParams, sparam, eparam, insertIndex);\r\n\r\n if (this._TrimParams.length === 1 && this._TrimParams[0][0] === 0 && this._TrimParams[0][1] === 1)\r\n {\r\n this._IsErase = true;\r\n return;\r\n }\r\n }\r\n }\r\n\r\n }\r\n\r\n PointInContour(p: Vector3, contour: Contour, contourBox: Box3, saveSyntropy = false)\r\n {\r\n return contourBox.containsPoint(p) && (contour.Curve.PtInCurve(p) && !contour.Curve.PtOnCurve(p));\r\n }\r\n\r\n TrimParam(sparam: number, eparam: number)\r\n {\r\n let insertIndex = InsertRangeIndex(this._TrimParams, sparam);\r\n\r\n if (insertIndex !== 0 && this._TrimParams[insertIndex - 1][1] > eparam)//包含在已经被切割的范围内,那么直接不用重复判断 (只可能被前一段包含)\r\n return;\r\n InsertRangeAndUnion(this._TrimParams, sparam, eparam, insertIndex);\r\n\r\n if (this._TrimParams.length === 1 && this._TrimParams[0][0] < 1e-6 && this._TrimParams[0][1] > (1 - 1e-6))\r\n {\r\n this._IsErase = true;\r\n }\r\n }\r\n\r\n GetPointAtParam(param: number): Vector3\r\n {\r\n return this._curve.GetPointAtParam(param);\r\n }\r\n\r\n get Curves(): Curve[]\r\n {\r\n return [];\r\n }\r\n}\r\n\r\nexport class CurveTrimLine extends CurveTrim\r\n{\r\n constructor(curve: Line,\r\n private derv: Vector3,\r\n private _Sp = curve.StartPoint,\r\n private _Fd = curve.GetFirstDeriv(0))\r\n {\r\n super(curve);\r\n }\r\n\r\n override GetPointAtParam(param: number): Vector3\r\n {\r\n return this._Fd.clone().multiplyScalar(param).add(this._Sp);\r\n }\r\n\r\n override PointInContour(p: Vector3, contour: Contour, contourBox: Box3, saveSyntropy = false)\r\n {\r\n if (!contourBox.containsPoint(p)) return false;\r\n\r\n let pl = contour.Curve as Polyline;\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n let cu = pl.GetCurveAtIndex(i);\r\n if (cu instanceof Line)\r\n {\r\n let d = cu.GetClosestAtPoint(p, true);\r\n if (cu.ParamOnCurve(d.param) && equalv3(d.closestPt, p, 1e-5))//点在线上\r\n {\r\n let derv = cu.GetFirstDeriv(d.param).normalize();\r\n return equalv3(derv, this.derv, 1e-4) || (saveSyntropy && equalv3(derv.negate(), this.derv, 1e-4));//因为墙体为顺时针 轮廓为逆时针 所以这里相等=反向\r\n }\r\n }\r\n else\r\n {\r\n if (cu.PtOnCurve(p, 1e-5))\r\n {\r\n let derv = cu.GetFirstDeriv(cu.GetParamAtPoint2(p)).normalize();\r\n return equalv3(this.derv, derv, 1e-4) || (saveSyntropy && equalv3(derv.negate(), this.derv, 1e-4));\r\n }\r\n }\r\n }\r\n\r\n return contour.Curve.PtInCurve(p);\r\n }\r\n\r\n override get Curves(): Line[]\r\n {\r\n if (this._IsErase) return [];\r\n\r\n if (this._TrimParams.length === 0) return [this._curve as Line];\r\n\r\n let lines: Line[] = [];\r\n\r\n if (this._TrimParams[0][0] !== 0)\r\n lines.push(new Line(this.GetPointAtParam(0), this.GetPointAtParam(this._TrimParams[0][0])));\r\n\r\n for (let i = 0; i < this._TrimParams.length - 1; i++)\r\n {\r\n let param1 = this._TrimParams[i][1];\r\n let param2 = this._TrimParams[i + 1][0];\r\n lines.push(new Line(this.GetPointAtParam(param1), this.GetPointAtParam(param2)));\r\n }\r\n\r\n if (this._TrimParams[this._TrimParams.length - 1][1] !== 1)\r\n lines.push(new Line(this.GetPointAtParam(this._TrimParams[this._TrimParams.length - 1][1]), this.GetPointAtParam(1)));\r\n\r\n return lines;\r\n }\r\n}\r\n\r\nexport class CurveTrimArc extends CurveTrim\r\n{\r\n constructor(\r\n public _curve: Arc,\r\n private _IsLeft = false\r\n )\r\n {\r\n super(_curve);\r\n }\r\n override PointInContour(p: Vector3, contour: Contour, contourBox: Box3, saveSyntropy = false)\r\n {\r\n if (!contourBox.containsPoint(p)) return false;\r\n\r\n let pl = contour.Curve as Polyline;\r\n let thisDerv = this._curve.GetFirstDeriv(p).normalize();\r\n if (this._IsLeft) thisDerv.negate();\r\n\r\n for (let i = 0; i < pl.EndParam; i++)\r\n {\r\n let cu = pl.GetCurveAtIndex(i);\r\n if (cu instanceof Line)\r\n {\r\n let d = cu.GetClosestAtPoint(p, true);\r\n if (cu.ParamOnCurve(d.param) && equalv3(d.closestPt, p, 1e-5))//点在线上 //这个代码似乎是错误的,因为直线和圆弧不可能重合\r\n {\r\n let derv = cu.GetFirstDeriv(d.param).normalize();\r\n return equalv3(derv, thisDerv, 1e-4) || (saveSyntropy && equalv3(derv.negate(), thisDerv, 1e-4));//因为墙体为顺时针 轮廓为逆时针 所以这里相等=反向\r\n }\r\n }\r\n else\r\n {\r\n if (cu.PtOnCurve(p, 1e-5))\r\n {\r\n let cuDerv = cu.GetFirstDeriv(cu.GetParamAtPoint2(p)).normalize();\r\n return equalv3(thisDerv, cuDerv, 1e-4) || (saveSyntropy && equalv3(cuDerv.negate(), thisDerv, 1e-4));\r\n }\r\n }\r\n }\r\n\r\n return contour.Curve.PtInCurve(p);\r\n }\r\n\r\n override get Curves(): Arc[]\r\n {\r\n if (this._IsErase) return [];\r\n\r\n if (this._TrimParams.length === 0) return [this._curve];\r\n\r\n let arcs: Arc[] = [];\r\n let center = this._curve.Center;\r\n for (let i = 0; i < this._TrimParams.length - 1; i++)\r\n {\r\n let param1 = this._TrimParams[i][1];\r\n let param2 = this._TrimParams[i + 1][0];\r\n arcs.push(new Arc(center, this._curve.Radius, this._curve.GetAngleAtParam(param1), this._curve.GetAngleAtParam(param2), this._curve.IsClockWise));\r\n }\r\n\r\n if (this._TrimParams[0][0] !== 0)\r\n arcs.push(new Arc(center, this._curve.Radius, this._curve.StartAngle, this._curve.GetAngleAtParam(this._TrimParams[0][0]), this._curve.IsClockWise));\r\n\r\n if (this._TrimParams[this._TrimParams.length - 1][1] !== 1)\r\n arcs.push(new Arc(center, this._curve.Radius, this._curve.GetAngleAtParam(this._TrimParams[this._TrimParams.length - 1][1]), this._curve.EndAngle, this._curve.IsClockWise));\r\n\r\n return arcs;\r\n }\r\n}\r\n\r\nexport function CreateCurveTrim(cu: Line | Arc)\r\n{\r\n if (cu instanceof Line) return new CurveTrimLine(cu, undefined);\r\n else return new CurveTrimArc(cu);\r\n}\r\n","import { Entity } from \"../DatabaseServices/Entity/Entity\";\r\n\r\nexport function EntityUpdateWrap(ent: Entity, exec: Function)\r\n{\r\n let oldAutoUpdate = ent.AutoUpdate;\r\n ent.AutoUpdate = false;\r\n exec();\r\n if (oldAutoUpdate)//如果原先是自动更新的,那么我们更新它,否则还是不更新(避免层层嵌套导致的性能优化丢失)\r\n ent.DeferUpdate();\r\n ent.AutoUpdate = oldAutoUpdate;\r\n}\r\n\r\nexport function EntitysUpdateWrap(ens: Entity[], exec: Function)\r\n{\r\n let baks = ens.map(e =>\r\n {\r\n let oldAutoUpdate = e.AutoUpdate;\r\n e.AutoUpdate = false;\r\n return oldAutoUpdate;\r\n });\r\n\r\n exec();\r\n\r\n for (let i = 0; i < ens.length; i++)\r\n {\r\n if (baks[i])\r\n {\r\n let en = ens[i];\r\n en.DeferUpdate();\r\n en.AutoUpdate = true;\r\n }\r\n }\r\n}\r\n","import { HostApplicationServices } from \"../../../ApplicationServices/HostApplicationServices\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\n\r\n\r\n/**\r\n * 户型元件的基类\r\n * 墙 平面(地板 天花)\r\n */\r\n@Factory\r\nexport abstract class RoomBase extends Entity\r\n{\r\n override get IsVisible()\r\n {\r\n return HostApplicationServices.IsRoomEntityVisible && super.IsVisible;\r\n }\r\n}\r\n","\r\nexport enum WallSnapMode\r\n{\r\n None = 0,\r\n Center = 1,\r\n Out = 2,\r\n All = 3\r\n}\r\n","import { Material, Mesh, MeshPhysicalMaterial, MeshStandardMaterial, Object3D, Line as TLine } from \"three\";\r\nimport { HostApplicationServices } from \"../../../../ApplicationServices/HostApplicationServices\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { UpdateDraw } from \"../../../../Common/Status\";\r\nimport { equaln } from \"../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { AutoRecord } from \"../../../AutoRecord\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { CADObject } from \"../../../CADObject\";\r\nimport { Arc } from \"../../../Entity/Arc\";\r\nimport { Curve } from \"../../../Entity/Curve\";\r\nimport { Line } from \"../../../Entity/Line\";\r\nimport { Polyline } from \"../../../Entity/Polyline\";\r\nimport { ObjectId } from \"../../../ObjectId\";\r\nimport { PhysicalMaterialRecord } from \"../../../PhysicalMaterialRecord\";\r\nimport { RoomBase } from \"../RoomBase\";\r\nimport { RoomHolePolyline } from \"./Hole/RoomHolePolyline\";\r\nimport { WallSnapMode } from \"./WallSnapMode\";\r\n\r\nexport const CURVE_FACE_TYPE_KEY = \"__CURVE_FACE_TYPE_KEY__\";//用来存储墙体类型的key\r\nexport const CURVE_DIR_TYPE_KEY = \"__CURVE_DIR_TYPE_KEY__\";//方向\r\nexport const CURVE_WALL_TYPE_KEY = \"__CURVE_WALL_TYPE_KEY__\";//墙\r\n\r\nexport enum WallFaceType\r\n{\r\n Inside = 0,//内部\r\n Pillar = 1,//柱子\r\n Outside = 2,//外墙\r\n}\r\n\r\ninterface HoleData\r\n{\r\n StartParam: number;\r\n EndParam: number;\r\n Bottom: number;\r\n Top: number;\r\n}\r\n\r\n@Factory\r\nexport abstract class RoomWallBase extends RoomBase\r\n{\r\n static SnapMode: WallSnapMode = WallSnapMode.All;\r\n\r\n @AutoRecord RelevancyHoles: ObjectId<RoomHolePolyline>[] = [];\r\n Holes: HoleData[] = [];\r\n\r\n get RealHoles(): HoleData[]\r\n {\r\n return this.Holes.filter(h => h.EndParam > h.StartParam && h.Top > h.Bottom);\r\n }\r\n\r\n protected _Thickness = 120;\r\n protected _Height = 2700;\r\n\r\n get Height()\r\n {\r\n return this._Height;\r\n }\r\n set Height(_newHeight)\r\n {\r\n if (_newHeight <= 0.1 || equaln(this._Height, _newHeight)) return;\r\n this.WriteAllObjectRecord();\r\n this._Height = _newHeight;\r\n this.Update();\r\n }\r\n\r\n get Thickness() { return this._Thickness; }\r\n set Thickness(t: number)\r\n {\r\n if (t <= 0.1 || equaln(this._Thickness, t)) return;\r\n this.WriteAllObjectRecord();\r\n this._Thickness = t;\r\n this.Update();\r\n }\r\n\r\n\r\n //中心轴线\r\n get CenterAxisCurve(): Arc | Line { return; }\r\n\r\n //从曲线更新墙体\r\n UpdateCurve(cu: Curve) { }\r\n\r\n //绘制相关\r\n LeftCurves: (Arc | Line)[];\r\n RightCurves: (Arc | Line)[];\r\n LidCurves: (Arc | Line)[];\r\n Region: Polyline;\r\n OverWriteMaterial = new Map<number, ObjectId<PhysicalMaterialRecord>>();//section index -> materialId\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj.children[1] as TLine;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n // let mesh = obj.children[0] as Mesh;\r\n // mesh.material = this.MeshMaterial;\r\n }\r\n else\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n }\r\n\r\n IsMtlLockAtSlot(slotIndex: number)\r\n {\r\n if (this.LockMaterial)\r\n return true;\r\n\r\n const curMtl = this.OverWriteMaterial.get(slotIndex);\r\n if (curMtl)\r\n {\r\n if (curMtl?.Object?.IsMaterialLock)\r\n return true;\r\n }\r\n else if (this.Material?.Object?.IsMaterialLock)\r\n return true;\r\n return false;\r\n }\r\n\r\n SetMaterialAtSlot(mtl: ObjectId<PhysicalMaterialRecord>, slotIndex: number)\r\n {\r\n if (this.IsMtlLockAtSlot(slotIndex))\r\n return;\r\n\r\n if (this.OverWriteMaterial.get(slotIndex) !== mtl)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.OverWriteMaterial.set(slotIndex, mtl);\r\n this.Update(UpdateDraw.Material);\r\n }\r\n }\r\n\r\n SetAllMaterialAtSlot(mtl: ObjectId<PhysicalMaterialRecord>)\r\n {\r\n if (this.LockMaterial)\r\n return;\r\n this.WriteAllObjectRecord();\r\n for (const [k, v] of this.OverWriteMaterial)\r\n {\r\n if (v?.Object?.IsMaterialLock)\r\n continue;\r\n this.OverWriteMaterial.set(k, mtl);\r\n }\r\n if (!this.Material?.Object?.IsMaterialLock)\r\n this.Material = mtl;\r\n\r\n this.Update(UpdateDraw.Material);\r\n }\r\n\r\n GetMtlLockedStatus()\r\n {\r\n let partMtlLocked = false;\r\n let allMtlLocked = true;\r\n\r\n for (const [, v] of this.OverWriteMaterial)\r\n {\r\n if (v?.Object?.IsMaterialLock)\r\n {\r\n partMtlLocked = true;\r\n continue;\r\n }\r\n allMtlLocked = false;\r\n }\r\n\r\n const meshSize = this.MeshMaterials.length;\r\n if (this.OverWriteMaterial.size !== meshSize)\r\n {\r\n if (super.Material?.Object?.IsMaterialLock)\r\n partMtlLocked = true;\r\n else\r\n allMtlLocked = false;\r\n }\r\n\r\n return {\r\n partMtlLocked,\r\n allMtlLocked,\r\n };\r\n }\r\n\r\n GetPhyMtlRecords()\r\n {\r\n const materials: PhysicalMaterialRecord[] = [];\r\n\r\n for (const [, v] of this.OverWriteMaterial)\r\n {\r\n if (!v?.IsErase && v?.Object)\r\n materials.push(v?.Object);\r\n }\r\n\r\n const meshSize = this.MeshMaterials.length;\r\n if (this.OverWriteMaterial.size !== meshSize && super.Material?.Object)\r\n materials.push(super.Material.Object);\r\n\r\n return materials;\r\n }\r\n\r\n protected get MeshMaterial()\r\n {\r\n const mtlId = this._MaterialId;\r\n if (!mtlId?.IsErase && mtlId?.Object)\r\n return mtlId.Object.Material as MeshStandardMaterial;\r\n return HostApplicationServices.DefaultWallMaterial ?? HostApplicationServices.DefaultMeshMaterial;\r\n }\r\n\r\n private _GetValidOWMtl(index: number): MeshPhysicalMaterial | undefined\r\n {\r\n const obj = this.OverWriteMaterial.get(index)?.Object;\r\n const owMtl = !obj?.IsErase && obj?.Material;\r\n if (!owMtl) return;\r\n return owMtl;\r\n }\r\n\r\n get MeshMaterials(): Material[]\r\n {\r\n let defaultMtl = this.MeshMaterial;\r\n\r\n let materials: Material[] = [];\r\n let materialIndex = 0;\r\n\r\n const addMaterial = (curves: (Arc | Line)[]) =>\r\n {\r\n if (curves)\r\n for (let c of curves)\r\n {\r\n if (c[CURVE_FACE_TYPE_KEY] === WallFaceType.Outside)\r\n continue;\r\n\r\n materials.push(this._GetValidOWMtl(materialIndex) ?? defaultMtl);\r\n materialIndex++;\r\n //这里不使用1\r\n if (materialIndex === 1)\r\n {\r\n materials.push(defaultMtl);\r\n materialIndex++;\r\n }\r\n }\r\n };\r\n\r\n addMaterial(this.LeftCurves);\r\n addMaterial(this.RightCurves);\r\n addMaterial(this.LidCurves);\r\n\r\n if (this.Region)\r\n {\r\n materials.push(this._GetValidOWMtl(materialIndex) ?? defaultMtl);\r\n if (HostApplicationServices.DrawWallBottomFace)\r\n materials.push(this._GetValidOWMtl(materialIndex + 1) ?? defaultMtl);\r\n }\r\n\r\n return materials;\r\n }\r\n\r\n //标记算法 求出分裂或合并墙时材质状态\r\n ResetSign(oldSign: Map<number, number>, newSign: Map<number, number>, allChange?: boolean, isLid?: boolean)\r\n {\r\n let materials = Array.from(this.OverWriteMaterial).sort((a, b) => a[0] - b[0]);\r\n //单面墙面增加时 找到增加的位置n n+1面使用n的材质 n+1后材质OverWriteMaterial索引都加1\r\n if (oldSign.size < newSign.size)\r\n {\r\n for (let [signNum, data] of oldSign)\r\n {\r\n let num = signNum + (allChange ? 1 : 0);\r\n let sign = newSign.get(num);\r\n if (!equaln(sign, data, 1e-5))\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let [n, m] of materials)\r\n {\r\n if (n > num)\r\n this.OverWriteMaterial.set(n + 1, m);\r\n }\r\n let index = num + 1;\r\n if (index === 1)\r\n {\r\n index++;\r\n }\r\n this.OverWriteMaterial.set(index, this.OverWriteMaterial.get(num));\r\n break;\r\n }\r\n }\r\n }\r\n else if (oldSign.size > newSign.size)\r\n {\r\n //单面墙面减少时 找到减少的位置n n+1后材质OverWriteMaterial索引都减1\r\n if (!materials.length) return;\r\n if (isLid)\r\n for (let [signNum, data] of oldSign)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (materials.filter((m) => m[0] === signNum).length)\r\n {\r\n this.OverWriteMaterial.delete(materials[materials.length - 1][0]);\r\n break;\r\n }\r\n }\r\n else\r\n for (let [signNum, data] of newSign)\r\n {\r\n let num = signNum + (allChange ? 1 : 0);\r\n let sign = oldSign.get(num);\r\n if (!equaln(sign, data, 1e-5))\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let [n, m] of materials)\r\n {\r\n\r\n if (n > num)\r\n {\r\n let index = n;\r\n if (index === 2) index--;\r\n this.OverWriteMaterial.set(index - 1, m);\r\n }\r\n }\r\n\r\n this.OverWriteMaterial.delete(materials[materials.length - 1][0]);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n //绘制相关_end\r\n\r\n //为了支持F后正确的保持洞\r\n override CopyFrom(obj: CADObject)\r\n {\r\n let bak = this.RelevancyHoles.concat();\r\n super.CopyFrom(obj);\r\n this.RelevancyHoles = bak;\r\n }\r\n\r\n //为了支持F,看起来不大行\r\n // override Clone(): this\r\n // {\r\n // let ent = super.Clone();\r\n // ent.Holes = this.Holes.concat();\r\n // return ent;\r\n // }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n this._Thickness = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n let count = file.Read();\r\n this.RelevancyHoles.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id)\r\n this.RelevancyHoles.push(id as ObjectId<RoomHolePolyline>);\r\n }\r\n }\r\n\r\n if (ver > 2)\r\n {\r\n this._Height = file.Read();\r\n }\r\n\r\n if (ver > 3)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(4);\r\n super.WriteFile(file);\r\n file.Write(this._Thickness);\r\n\r\n file.Write(this.RelevancyHoles.length);\r\n for (let id of this.RelevancyHoles)\r\n file.WriteObjectId(id);\r\n\r\n file.Write(this._Height);\r\n\r\n // ver4\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n //#endregion\r\n}\r\n\r\n// @ts-ignore\r\nexport interface RoomWallBase extends RoomBase, Curve { }\r\n\r\nexport const CURVE_MESH_NAMES = [\r\n \"Shape\",\r\n \"GetDrawCount\",\r\n\r\n \"Midpoint\",\r\n \"MidParam\",\r\n \"StartParam\",\r\n \"EndParam\",\r\n \"Area\",\r\n \"Area2\",\r\n \"Length\",\r\n \"IsClose\",\r\n \"IsClockWise\",\r\n\r\n \"GetPointAtParam\",\r\n \"GetPointAtDistance\",\r\n \"GetDistAtParam\",\r\n \"GetDistAtPoint\",\r\n \"GetParamAtPoint\",\r\n \"GetParamAtPoint2\",\r\n \"GetParamAtDist\",\r\n \"GetClosestAtPoint\",\r\n \"GetFirstDeriv\",\r\n \"GetFirstDerivAngle\",\r\n \"GetSplitCurves\",\r\n \"GetCurveAtParamRange\",\r\n \"GetSplitCurvesByPts\",\r\n \"Extend\",\r\n \"Join\",\r\n \"Reverse\",\r\n \"PtOnCurve\",\r\n \"PtOnCurve2\",\r\n \"PtOnCurve3\",\r\n \"ParamOnCurve\",\r\n \"GetOffsetCurves\",\r\n \"GetClosestPointTo\",\r\n \"IntersectWith\",\r\n \"IntersectWith2\",\r\n \"SplitParamSort\",\r\n\r\n \"SetStartEndPoint\",\r\n];\r\n\r\n// This can live anywhere in your codebase:\r\nexport function applyMixins(derivedCtor: any, constructor: any, methons = CURVE_MESH_NAMES)\r\n{\r\n for (let name of methons)\r\n Object.defineProperty(\r\n derivedCtor.prototype,\r\n name,\r\n Object.getOwnPropertyDescriptor(constructor.prototype, name) ?? Object.getOwnPropertyDescriptor(Curve.prototype, name) ?? Object.create(null)\r\n );\r\n}\r\n","import { Box3, BufferGeometry, Color, Face3, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, LineSegments, MathUtils, Matrix3, Mesh, Object3D, ShapeUtils, Line as TLine, Vector2, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { HostApplicationServices } from \"../../../../ApplicationServices/HostApplicationServices\";\r\nimport { arrayPushArray } from \"../../../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { EntityUpdateWrap } from \"../../../../Common/EntityUpdateWrap\";\r\nimport { ObjectSnapMode } from \"../../../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../../../Geometry/Box\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { SubtractRange, Tape } from \"../../../../Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2\";\r\nimport { MoveMatrix, ZAxis, ZeroVec, equaln, equalv3, midPoint } from \"../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { Curve } from \"../../../Entity/Curve\";\r\nimport { Line } from \"../../../Entity/Line\";\r\nimport { ObjectId } from \"../../../ObjectId\";\r\nimport { PhysicalMaterialRecord } from \"../../../PhysicalMaterialRecord\";\r\nimport { GetLineParam } from \"../../ParseService/GetCurveParam\";\r\nimport { CURVE_FACE_TYPE_KEY, RoomWallBase, WallFaceType, applyMixins } from \"./RoomWallBase\";\r\nimport { WallSnapMode } from \"./WallSnapMode\";\r\n\r\nconst SnapTempLine = new Line;\r\nconst TempP = new Vector3;\r\n\r\n@Factory\r\nexport class RoomWallLine extends RoomWallBase\r\n{\r\n\r\n constructor(private _StartPoint = new Vector3,\r\n private _EndPoint = new Vector3,\r\n _Thickness = 120,\r\n _Height = 2700\r\n )\r\n {\r\n super();\r\n this.Thickness = _Thickness;\r\n this.Height = _Height;\r\n }\r\n\r\n private _LeftCurveSign: Map<number, number> = new Map();\r\n private _RightCurveSign: Map<number, number> = new Map();\r\n private _LidCurveSign: Map<number, number> = new Map();\r\n\r\n\r\n UpdateOCSToMinBox()\r\n {\r\n this.WriteAllObjectRecord();\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n\r\n let x = this.GetFirstDeriv(0).normalize();\r\n let z = ZAxis;\r\n let y = z.clone().cross(x).normalize();\r\n this._Matrix.makeBasis(x, y, z).setPosition(sp);\r\n\r\n let inv = this.OCSInv;\r\n this._StartPoint.copy(sp).applyMatrix4(inv);\r\n this._EndPoint.copy(ep).applyMatrix4(inv);\r\n }\r\n\r\n get StartPoint(): Vector3\r\n {\r\n return this._StartPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n get EndPoint(): Vector3\r\n {\r\n return this._EndPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n set StartPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._StartPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._StartPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n set EndPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._EndPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._EndPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n Reverse(): this\r\n {\r\n this.WriteAllObjectRecord();\r\n [this._EndPoint, this._StartPoint] = [this._StartPoint, this._EndPoint];\r\n return this;\r\n }\r\n\r\n //中心轴线\r\n override get CenterAxisCurve(): Line\r\n {\r\n let line = new Line(this._StartPoint.clone(), this._EndPoint.clone());\r\n line.OCSNoClone.copy(this.OCSNoClone);\r\n return line;\r\n }\r\n\r\n get BoundingBox(): Box3\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let line = new Line(this._StartPoint, this._EndPoint);\r\n let parse = new GetLineParam(line);\r\n if (parse.Length > 1e-5)\r\n {\r\n let p1 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * 0.5);//left\r\n let p2 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let p3 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * 0.5);//left\r\n let p4 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n p1.z = this._Height;\r\n\r\n return new Box3Ext().setFromPoints([p1, p2, p3, p4]);\r\n }\r\n\r\n return new Box3Ext().setFromPoints([this._StartPoint, this._EndPoint]);\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform: Matrix3\r\n ): Vector3[]\r\n {\r\n let pts = [];\r\n pts = pts.concat(Line.prototype.GetObjectSnapPoints.call(this, snapMode, pickPoint, lastPoint, viewXform));\r\n const CurveSnap = (curve: Curve) =>\r\n {\r\n let bakZ = curve.Z;\r\n //底部线\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n //顶部线\r\n curve.Z += this._Height;\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n curve.Z = bakZ;\r\n\r\n //柱子线\r\n SnapTempLine.OCSNoClone.copy(curve.OCSNoClone);\r\n //@ts-ignore\r\n SnapTempLine._StartPoint.copy(curve._StartPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.copy(curve._StartPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.z += this._Height;\r\n\r\n arrayPushArray(pts, SnapTempLine.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n //@ts-ignore\r\n SnapTempLine._StartPoint.copy(curve._EndPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.copy(curve._EndPoint);\r\n //@ts-ignore\r\n SnapTempLine._EndPoint.z += this._Height;\r\n\r\n arrayPushArray(pts, SnapTempLine.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n };\r\n\r\n if (this.LeftCurves && (RoomWallBase.SnapMode & WallSnapMode.Out) > 0)\r\n {\r\n this.LeftCurves.forEach(CurveSnap);\r\n this.RightCurves.forEach(CurveSnap);\r\n this.LidCurves.forEach(CurveSnap);\r\n }\r\n\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n let sp = this.StartPoint;\r\n let ep = this.EndPoint;\r\n let pts = [sp, midPoint(sp, ep), ep];\r\n for (let i = 0; i < 3; i++)\r\n {\r\n let p = pts[i].clone();\r\n pts.push(p.setZ(p.z + this._Height));\r\n }\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexs: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec, 1e-4)) return;\r\n this.WriteAllObjectRecord();\r\n\r\n let set = new Set<number>();\r\n for (let i of indexs)\r\n if (i > 2) set.add(i - 3);\r\n else set.add(i);\r\n\r\n EntityUpdateWrap(this, () =>\r\n {\r\n for (let index of set)\r\n {\r\n if (index === 0)\r\n this.StartPoint = this.StartPoint.add(vec);\r\n else if (index === 2)\r\n this.EndPoint = this.EndPoint.add(vec);\r\n else\r\n {\r\n let m = MoveMatrix(vec);\r\n this.ApplyMatrix(m);\r\n }\r\n }\r\n });\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n return [this.StartPoint, this.EndPoint];\r\n }\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (equalv3(vec, ZeroVec, 1e-4)) return;\r\n this.WriteAllObjectRecord();\r\n EntityUpdateWrap(this, () =>\r\n {\r\n for (let index of indexList)\r\n {\r\n if (index === 0)\r\n this.StartPoint = this.StartPoint.add(vec);\r\n else\r\n this.EndPoint = this.EndPoint.add(vec);\r\n }\r\n });\r\n }\r\n\r\n //#region //绘制\r\n UpdateDrawGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n this._EdgeGeometry.dispose();\r\n this._EdgeGeometry = undefined;\r\n if (this._MeshGeometry)\r\n this._MeshGeometry.dispose();\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n\r\n private _EdgeGeometry: BufferGeometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry) return this._EdgeGeometry;\r\n\r\n for (let hole of this.RealHoles)\r\n if (hole.StartParam > hole.EndParam)\r\n [hole.StartParam, hole.EndParam] = [hole.EndParam, hole.StartParam];\r\n\r\n let pts: Vector3[];\r\n if (!this.LeftCurves)\r\n {\r\n let line = new Line(this._StartPoint, this._EndPoint);\r\n let parse = new GetLineParam(line);\r\n if (parse.Length > 0.1)\r\n {\r\n let p1 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * 0.5);//left\r\n let p2 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let p3 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * 0.5);//left\r\n let p4 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let [pz1, pz2, pz3, pz4] = [p1, p2, p3, p4].map(p => p.clone().setZ(this._Height));\r\n pts = [p1, p2, p2, p4, p4, p3, p3, p1,\r\n pz1, pz2, pz2, pz4, pz4, pz3, pz3, pz1,\r\n\r\n p1, pz1,\r\n p2, pz2,\r\n p3, pz3,\r\n p4, pz4\r\n ];\r\n }\r\n }\r\n else\r\n {\r\n pts = [];\r\n let inv = this.OCSInv;\r\n const DrawCurve = (curve: Curve, _leftRanges: [number, number][], _rightRanges: [number, number][]) =>\r\n {\r\n if (curve instanceof Line)\r\n {\r\n let p1 = curve.StartPoint.applyMatrix4(inv);\r\n let p2 = curve.EndPoint.applyMatrix4(inv);\r\n pts.push(p1, p2);\r\n\r\n for (let range of _leftRanges)\r\n pts.push(p1.clone().setZ(range[0]), p1.clone().setZ(range[1]));\r\n for (let range of _rightRanges)\r\n pts.push(p2.clone().setZ(range[0]), p2.clone().setZ(range[1]));\r\n\r\n pts.push(p1.clone().setZ(this._Height), p2.clone().setZ(this._Height));\r\n }\r\n };\r\n\r\n let lidRanges: [number, number][] = [[0, this._Height]];\r\n let leftRanges = lidRanges;\r\n let rightRanges = lidRanges;\r\n for (let hole of this.RealHoles)\r\n {\r\n if (equaln(hole.StartParam, 0))\r\n {\r\n let newLeftRanges = [];\r\n for (let range of leftRanges)\r\n arrayPushArray(newLeftRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n leftRanges = newLeftRanges;\r\n }\r\n\r\n if (equaln(hole.EndParam, 1))\r\n {\r\n let newRightRanges = [];\r\n for (let range of rightRanges)\r\n arrayPushArray(newRightRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n rightRanges = newRightRanges;\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.LeftCurves.length; i++)\r\n {\r\n let curve = this.LeftCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.LeftCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.RightCurves.length; i++)\r\n {\r\n let curve = this.RightCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.RightCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.LidCurves.length; i++)\r\n {\r\n let curve = this.LidCurves[i];\r\n DrawCurve(curve, lidRanges, lidRanges);\r\n }\r\n }\r\n\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(pts ?? []);\r\n return this._EdgeGeometry;\r\n }\r\n\r\n private _MeshGeometry: Geometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n this._MeshGeometry = new Geometry;\r\n\r\n let geo = this._MeshGeometry;\r\n\r\n let normal = this.Normal;\r\n let normaln = normal.clone().negate();\r\n\r\n let line = new Line(this._StartPoint, this._EndPoint);\r\n let parse = new GetLineParam(line);\r\n\r\n let materialIndex = 0;\r\n let expMaterialIndex = 0;\r\n\r\n if (!this.LeftCurves)\r\n {\r\n if (parse.Length > 0.1)\r\n {\r\n let p1 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * 0.5);//left\r\n let p2 = parse.OffsetPoint(this._StartPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let p3 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * 0.5);//left\r\n let p4 = parse.OffsetPoint(this._EndPoint.clone(), this.Thickness * -0.5);//right\r\n\r\n let [pz1, pz2, pz3, pz4] = [p1, p2, p3, p4].map(p => p.clone().setZ(this._Height));\r\n\r\n geo.vertices.push(p1, p2, p3, p4, pz1, pz2, pz3, pz4);\r\n\r\n geo.faces.push(\r\n //底部\r\n new Face3(0, 2, 1, normaln),\r\n new Face3(1, 2, 3, normaln),\r\n //顶部\r\n new Face3(0 + 4, 1 + 4, 2 + 4, normal),\r\n new Face3(1 + 4, 3 + 4, 2 + 4, normal),\r\n //开始盖子\r\n new Face3(0, 1, 5, parse.Direction.clone().negate()),\r\n new Face3(0, 5, 4, parse.Direction.clone().negate()),\r\n //结束盖子\r\n new Face3(2, 7, 3, parse.Direction),\r\n new Face3(2, 6, 7, parse.Direction),\r\n //left\r\n new Face3(0, 6, 2, parse.LeftDir),\r\n new Face3(0, 4, 6, parse.LeftDir),\r\n //right\r\n new Face3(1, 3, 7, parse.LeftDir.clone().negate()),\r\n new Face3(1, 7, 5, parse.LeftDir.clone().negate()),\r\n );\r\n\r\n //x\r\n let x = parse.Length * 1e-3;\r\n let y = this.Thickness * 1e-3;\r\n let z = this._Height * 1e-3;\r\n geo.faceVertexUvs[0].push(\r\n //floor\r\n [new Vector2(0, 0), new Vector2(x, 0), new Vector2(0, y)],\r\n [new Vector2(0, y), new Vector2(x, 0), new Vector2(x, y)],\r\n //top\r\n [new Vector2(0, 0), new Vector2(0, y), new Vector2(x, 0)],\r\n [new Vector2(0, y), new Vector2(x, y), new Vector2(x, 0)],\r\n //start lid\r\n [new Vector2(0, 0), new Vector2(y, 0), new Vector2(y, z)],\r\n [new Vector2(0, 0), new Vector2(y, z), new Vector2(0, z)],\r\n //end lid\r\n [new Vector2(y, 0), new Vector2(0, z), new Vector2(0, 0)],\r\n [new Vector2(y, 0), new Vector2(y, z), new Vector2(0, z)],\r\n //left\r\n [new Vector2(0, 0), new Vector2(x, z), new Vector2(x, 0)],\r\n [new Vector2(0, 0), new Vector2(0, z), new Vector2(x, z)],\r\n //right\r\n [new Vector2(0, 0), new Vector2(x, 0), new Vector2(0, z)],\r\n [new Vector2(0, 0), new Vector2(0, z), new Vector2(0, z)],\r\n );\r\n\r\n\r\n }\r\n }\r\n else\r\n {\r\n let inv = this.OCSInv;\r\n let thisParam = new GetLineParam(this as unknown as Line);\r\n let newLeftSign: Map<number, number> = new Map();\r\n let newRightSign: Map<number, number> = new Map();\r\n let newLidSign: Map<number, number> = new Map();\r\n\r\n const BuildLeftFace = (curve: Curve) =>\r\n {\r\n if (curve[CURVE_FACE_TYPE_KEY] === WallFaceType.Outside)\r\n {\r\n \r\n materialIndex = 1;\r\n }\r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n if (curveParam.Length === 0)\r\n return;\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (equaln(start, end, 1e-8)) continue;//重复的点造成了绘制错误\r\n\r\n if (start > end) [start, end] = [end, start];\r\n start = Math.max(0, start);\r\n end = Math.min(1, end);\r\n if (start >= end) continue;\r\n\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n //记录左墙线段面域\r\n let n = newLeftSign.get(materialIndex) ?? 0;\r\n if (n < endX)\r\n newLeftSign.set(materialIndex, endX);\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 2, startIndex + 1, parse.LeftDir, undefined, materialIndex),\r\n new Face3(startIndex + 1, startIndex + 2, startIndex + 3, parse.LeftDir, undefined, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n\r\n //如果是1的话 是渲染器走的\r\n if (materialIndex === 1)\r\n {\r\n materialIndex = expMaterialIndex;\r\n }\r\n else\r\n {\r\n materialIndex++;\r\n expMaterialIndex++;\r\n //这里不使用1\r\n if (materialIndex === 1)\r\n {\r\n materialIndex++;\r\n expMaterialIndex++;\r\n }\r\n }\r\n }\r\n };\r\n const BuildRightFace = (curve: Curve, isLid?: boolean) =>\r\n {\r\n if (curve[CURVE_FACE_TYPE_KEY] === WallFaceType.Outside)\r\n {\r\n \r\n materialIndex = 1;\r\n }\r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n if (curveParam.Length === 0)\r\n return;\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (equaln(start, end, 1e-8)) continue;//重复的点造成了绘制错误\r\n\r\n if (start > end) [start, end] = [end, start];\r\n start = Math.max(0, start);\r\n end = Math.min(1, end);\r\n if (start >= end) continue;\r\n\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n //记录右墙线段面域 或墙边面域\r\n if (isLid)\r\n {\r\n let n = newLidSign.get(materialIndex) ?? 0;\r\n if (n < endX)\r\n newLidSign.set(materialIndex, endX);\r\n }\r\n else\r\n {\r\n let n = newRightSign.get(materialIndex) ?? 0;\r\n if (n < endX)\r\n newRightSign.set(materialIndex, endX);\r\n }\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 1, startIndex + 2, curveParam.RightDir, undefined, materialIndex),\r\n new Face3(startIndex + 1, startIndex + 3, startIndex + 2, curveParam.RightDir, undefined, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(endX, startZ), new Vector2(startX, endZ)],\r\n [new Vector2(endX, startZ), new Vector2(endX, endZ), new Vector2(startX, endZ)],\r\n );\r\n }\r\n\r\n //如果是1的话 是渲染器走的\r\n if (materialIndex === 1)\r\n {\r\n materialIndex = expMaterialIndex;\r\n }\r\n else\r\n {\r\n materialIndex++;\r\n expMaterialIndex++;\r\n //这里不使用1\r\n if (materialIndex === 1)\r\n {\r\n materialIndex++;\r\n expMaterialIndex++;\r\n }\r\n }\r\n }\r\n };\r\n\r\n this.LeftCurves.forEach(BuildLeftFace);\r\n this.RightCurves.forEach((cu) => BuildRightFace(cu));\r\n this.LidCurves.forEach((cu) => BuildRightFace(cu, true));\r\n\r\n this.ResetSign(this._LeftCurveSign, newLeftSign);\r\n let allChange = this._LeftCurveSign.size !== newLeftSign.size && this._RightCurveSign.size !== newRightSign.size;\r\n this.ResetSign(this._RightCurveSign, newRightSign, allChange);\r\n this.ResetSign(this._LidCurveSign, newLidSign, false, true);\r\n\r\n this._LeftCurveSign = newLeftSign;\r\n this._RightCurveSign = newRightSign;\r\n this._LidCurveSign = newLidSign;\r\n\r\n if (this.Region)\r\n {\r\n let bakZ = this.Region.OCSNoClone.elements[14];\r\n this.Region.OCSNoClone.elements[14] = this._Matrix.elements[14];\r\n\r\n let pts = this.Region.MatrixAlignTo2(this.OCSNoClone).pts;\r\n this.Region.OCSNoClone.elements[14] = bakZ;\r\n\r\n let faces = ShapeUtils.triangulateShape(pts, []);\r\n\r\n let startIndex = geo.vertices.length;\r\n for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, this._Height));\r\n if (HostApplicationServices.DrawWallBottomFace) for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, 0));\r\n\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n geo.faces.push(new Face3(startIndex + a, startIndex + b, startIndex + c, normal, new Color, materialIndex));\r\n let uvs = faces[i].map(index => pts[index].clone());\r\n geo.faceVertexUvs[0].push(uvs);\r\n if (HostApplicationServices.DrawWallBottomFace)\r\n {\r\n geo.faces.push(new Face3(startIndex + pts.length + c, startIndex + pts.length + b, startIndex + pts.length + a, normaln, new Color, materialIndex + 1));\r\n geo.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n }\r\n\r\n // //todo:为了优化显示 我们可以把侧面也画出来 (应该使用和酷家乐一样的技术 在视线对准时,隐藏整个墙)\r\n // let d = this._EndPoint.clone().sub(this._StartPoint).normalize();\r\n // let pre = pts[pts.length - 1];\r\n // let tempV = new Vector3;\r\n // for (let i = 0; i < pts.length; i++)\r\n // {\r\n // let p = pts[i];\r\n // tempV.set(p.x - pre.x, p.y - pre.y, 0).normalize();\r\n // //todo:盖子会重复绘制\r\n // if (!isParallelTo(d, tempV, 1e-3) && !isPerpendicularityTo(d, tempV, 1e-3))\r\n // {\r\n // startIndex = geo.vertices.length;\r\n // geo.vertices.push(AsVector3(pre), AsVector3(p));\r\n // geo.vertices.push(AsVector3(pre).setZ(this._Height));\r\n // geo.vertices.push(AsVector3(p).setZ(this._Height));\r\n\r\n // LEFT_ROTATE_MTX2.applyVector(tempV);\r\n // tempV.negate();\r\n\r\n // let n = tempV.clone();\r\n\r\n // geo.faces.push(\r\n // new Face3(startIndex, startIndex + 1, startIndex + 2, n),\r\n // new Face3(startIndex + 1, startIndex + 3, startIndex + 2, n),\r\n // );\r\n\r\n // geo.faceVertexUvs[0].push(\r\n // [new Vector2(), new Vector2(0, 0), new Vector2(0, 0)],\r\n // [new Vector2(0, 0), new Vector2(0, 0), new Vector2(0, 0)],\r\n // );\r\n // }\r\n\r\n // pre = p;\r\n // }\r\n }\r\n }\r\n\r\n geo.computeFaceNormals();\r\n geo.verticesNeedUpdate = true;\r\n geo.uvsNeedUpdate = true;\r\n\r\n return geo;\r\n }\r\n\r\n 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): Object3D\r\n {\r\n if (renderType === RenderType.Physical)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterials);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n return mesh;\r\n }\r\n\r\n let obj = new Object3D;\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let pts = [this._StartPoint, this._EndPoint];\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n let axisLine = new TLine(geo, ColorMaterial.GetWallLineMtl(1));\r\n axisLine.computeLineDistances();\r\n obj.add(axisLine);\r\n\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex));\r\n obj.add(line);\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.Conceptual)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex));\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex));\r\n obj.add(mesh, line);\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} renderType\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let [axisLine, outWallLine] = obj.children as [TLine<BufferGeometry>, TLine<BufferGeometry>];\r\n\r\n BufferGeometryUtils.UpdatePts(axisLine.geometry, [this._StartPoint, this._EndPoint]);\r\n axisLine.computeLineDistances();\r\n\r\n if (outWallLine.geometry !== this.EdgeGeometry)\r\n {\r\n outWallLine.geometry.dispose();\r\n outWallLine.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh<Geometry>;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let line = obj.children[1] as LineSegments<BufferGeometry>;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh<Geometry>;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n //优化代码 保证在布局是打印模式时,在模型空间删除洞时候 布局空间能正常更新.\r\n let mesh = obj.children[1] as Mesh<Geometry>;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let line = obj.children[0] as LineSegments<BufferGeometry>;\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\r\n line.geometry.dispose();\r\n line.geometry = geometry;\r\n }\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterials;\r\n }\r\n }\r\n\r\n ClearDraw()\r\n {\r\n if (this._MeshGeometry)\r\n this._MeshGeometry = undefined;\r\n if (this._EdgeGeometry)\r\n this._EdgeGeometry = undefined;\r\n\r\n return super.ClearDraw();\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n this._StartPoint.set(file.Read(), file.Read(), file.Read());\r\n this._EndPoint.set(file.Read(), file.Read(), file.Read());\r\n\r\n this.OverWriteMaterial.clear();\r\n this._LeftCurveSign.clear();\r\n this._RightCurveSign.clear();\r\n this._LidCurveSign.clear();\r\n this.LeftCurves = [];\r\n this.RightCurves = [];\r\n this.LidCurves = [];\r\n\r\n if (ver > 1)\r\n {\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let index = file.Read();\r\n let id = file.ReadHardObjectId() as ObjectId<PhysicalMaterialRecord>;\r\n this.OverWriteMaterial.set(index, id);\r\n }\r\n }\r\n }\r\n\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n\r\n file.WriteVec3(this._StartPoint);\r\n file.WriteVec3(this._EndPoint);\r\n\r\n file.Write(this.OverWriteMaterial.size);\r\n for (let [index, id] of this.OverWriteMaterial)\r\n {\r\n file.Write(index);\r\n file.WriteHardObjectId(id);\r\n }\r\n }\r\n //#endregion\r\n}\r\n\r\napplyMixins(RoomWallLine, Line);\r\n","import { Vector2, Vector3 } from \"three\";\r\nimport { Matrix2 } from \"../../../Geometry/Matrix2\";\r\nimport { Arc } from \"../../Entity/Arc\";\r\nimport { Line } from \"../../Entity/Line\";\r\nimport { RoomWallBase } from \"../Entity/Wall/RoomWallBase\";\r\nimport { RoomWallLine } from \"../Entity/Wall/RoomWallLine\";\r\n\r\nexport const LEFT_ROTATE_MTX2 = new Matrix2().set(0, 1, -1, 0);\r\n\r\nconst TempDiffVec = new Vector3;\r\n\r\nexport interface GetCurveParam\r\n{\r\n // Direction: Vector3;\r\n // NegDirection: Vector3;\r\n // Length: number;\r\n // LeftDir: Vector3;\r\n // RightDir: Vector3;\r\n\r\n GetParamAtPoint(p: Vector3): number;\r\n GetParamAtPoint2(p: Vector3): [number, boolean];\r\n GetPointAtParam(param: number): Vector3;\r\n // OffsetPoint(p: Vector3, dis: number): Vector3;\r\n}\r\n\r\nexport function CreateGetCurveParam(curve: Line | Arc | RoomWallBase)\r\n{\r\n if (curve instanceof Line || curve instanceof RoomWallLine) return new GetLineParam(curve as Line);\r\n else return new GetArcParam(curve as Arc);\r\n}\r\n\r\nexport class GetLineParam\r\n{\r\n Direction: Vector3;\r\n Length: number;\r\n LeftDir: Vector3;\r\n\r\n private _StartPoint: Vector3;\r\n constructor(line: Line)\r\n {\r\n this.Direction = line.GetFirstDeriv(0);\r\n this.Length = this.Direction.length();\r\n this.Direction.divideScalar(this.Length);\r\n this._StartPoint = line.StartPoint;\r\n\r\n this.LeftDir = this.Direction.clone();\r\n\r\n LEFT_ROTATE_MTX2.applyVector(this.LeftDir);\r\n }\r\n\r\n private _RightDir: Vector3;\r\n get RightDir()\r\n {\r\n if (!this._RightDir) this._RightDir = this.LeftDir.clone().negate();\r\n\r\n return this._RightDir;\r\n }\r\n\r\n private _NegDirection: Vector3;\r\n get NegDirection()\r\n {\r\n if (!this._NegDirection) this._NegDirection = this.Direction.clone().negate();\r\n return this._NegDirection;\r\n }\r\n\r\n GetParamAtPoint(p: Vector3)\r\n {\r\n TempDiffVec.subVectors(p, this._StartPoint);\r\n let param = this.Direction.dot(TempDiffVec);\r\n\r\n return param / this.Length;\r\n }\r\n\r\n //获取参数 并且判断点是不是在线上\r\n GetParamAtPoint2(p: Vector3): [number, boolean]\r\n {\r\n let param = this.GetParamAtPoint(p);\r\n let np = this.GetPointAtParam(param);\r\n return [param, Vector2.prototype.distanceToSquared.call(np, p) < 1e-4];\r\n }\r\n\r\n GetPointAtParam(param: number)\r\n {\r\n return this.Direction.clone().multiplyScalar(param * this.Length).add(this._StartPoint);\r\n }\r\n\r\n OffsetPoint(p: Vector3, dis: number)\r\n {\r\n return p.add(this.LeftDir.clone().multiplyScalar(dis));\r\n }\r\n}\r\n\r\nexport class GetArcParam implements GetCurveParam\r\n{\r\n constructor(private _Arc: Arc)\r\n {\r\n\r\n }\r\n\r\n GetParamAtPoint2(p: Vector3): [number, boolean]\r\n {\r\n let param = this._Arc.GetParamAtAngle(this._Arc.GetAngleAtPoint(p));\r\n return [param, this._Arc.ParamOnCurve(param)];\r\n }\r\n\r\n GetPointAtParam(param: number): Vector3\r\n {\r\n return this._Arc.GetPointAtParam(param);\r\n }\r\n\r\n GetParamAtPoint(p: Vector3): number\r\n {\r\n return this._Arc.GetParamAtAngle(this._Arc.GetAngleAtPoint(p));\r\n }\r\n}\r\n","import * 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 \r\n clipperLib.NativeClipperLibRequestedFormat.AsmJsOnly\r\n\r\n ).then(c =>\r\n {\r\n clipperCpp.lib = c;\r\n res();\r\n // console.log(\"载入成功!\");//不再需要\r\n });\r\n });\r\n}\r\n","import { Point } from \"./Point\";\r\n\r\n//点表面积\r\nexport function Area(pts: Point[]): number\r\n{\r\n let cnt = pts.length;\r\n if (cnt < 3)\r\n return 0;\r\n let a = 0;\r\n for (let i = 0, j = cnt - 1; i < cnt; ++i)\r\n {\r\n a += (pts[j].x + pts[i].x) * (pts[j].y - pts[i].y);\r\n j = i;\r\n }\r\n return -a * 0.5;\r\n}\r\n","import { Point } from \"./Point\";\r\n\r\nexport class Vector2\r\n{\r\n x: number;\r\n y: number;\r\n readonly isVector2: boolean = true;\r\n constructor(x: number = 0, y: number = 0)\r\n {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n get width(): number { return this.x; }\r\n set width(value: number) { this.x = value; }\r\n get height(): number { return this.y; }\r\n set height(value: number) { this.y = value; }\r\n set(x: number, y: number): Vector2\r\n {\r\n this.x = x;\r\n this.y = y;\r\n return this;\r\n }\r\n setScalar(scalar: number): Vector2\r\n {\r\n this.x = scalar;\r\n this.y = scalar;\r\n return this;\r\n }\r\n setX(x: number): Vector2\r\n {\r\n this.x = x;\r\n return this;\r\n }\r\n setY(y: number): Vector2\r\n {\r\n this.y = y;\r\n return this;\r\n }\r\n setComponent(index: number, value: number): Vector2\r\n {\r\n switch (index)\r\n {\r\n case 0: this.x = value; break;\r\n case 1: this.y = value; break;\r\n default: throw new Error('index is out of range: ' + index);\r\n }\r\n return this;\r\n }\r\n getComponent(index: number): number\r\n {\r\n switch (index)\r\n {\r\n case 0: return this.x;\r\n case 1: return this.y;\r\n default: throw new Error('index is out of range: ' + index);\r\n }\r\n }\r\n clone(): Vector2\r\n {\r\n return new (this.constructor as any)().copy(this);\r\n }\r\n copy(v: Vector2): Vector2\r\n {\r\n this.x = v.x;\r\n this.y = v.y;\r\n return this;\r\n }\r\n add(v: Point): Vector2\r\n {\r\n this.x += v.x;\r\n this.y += v.y;\r\n return this;\r\n }\r\n addScalar(s: number): Vector2\r\n {\r\n this.x += s;\r\n this.y += s;\r\n return this;\r\n }\r\n addVectors(a: Vector2, b: Vector2): Vector2\r\n {\r\n this.x = a.x + b.x;\r\n this.y = a.y + b.y;\r\n return this;\r\n }\r\n addScaledVector(v: Vector2, s: number): Vector2\r\n {\r\n this.x += v.x * s;\r\n this.y += v.y * s;\r\n return this;\r\n }\r\n sub(v: Vector2): Vector2\r\n {\r\n this.x -= v.x;\r\n this.y -= v.y;\r\n return this;\r\n }\r\n subScalar(s: number): Vector2\r\n {\r\n this.x -= s;\r\n this.y -= s;\r\n return this;\r\n }\r\n subVectors(a: Vector2, b: Vector2): Vector2\r\n {\r\n this.x = a.x - b.x;\r\n this.y = a.y - b.y;\r\n return this;\r\n }\r\n multiply(v: Vector2): Vector2\r\n {\r\n this.x *= v.x;\r\n this.y *= v.y;\r\n return this;\r\n }\r\n multiplyScalar(scalar: number): Vector2\r\n {\r\n if (isFinite(scalar))\r\n {\r\n this.x *= scalar;\r\n this.y *= scalar;\r\n } else\r\n {\r\n this.x = 0;\r\n this.y = 0;\r\n }\r\n return this;\r\n }\r\n divide(v: Vector2): Vector2\r\n {\r\n this.x /= v.x;\r\n this.y /= v.y;\r\n return this;\r\n }\r\n divideScalar(scalar: number): Vector2\r\n {\r\n return this.multiplyScalar(1 / scalar);\r\n }\r\n min(v: Point): Vector2\r\n {\r\n this.x = Math.min(this.x, v.x);\r\n this.y = Math.min(this.y, v.y);\r\n return this;\r\n }\r\n max(v: Point): Vector2\r\n {\r\n this.x = Math.max(this.x, v.x);\r\n this.y = Math.max(this.y, v.y);\r\n return this;\r\n }\r\n clamp(min: Vector2, max: Vector2): Vector2\r\n {\r\n // This function assumes min < max, if this assumption isn't true it will not operate correctly\r\n this.x = Math.max(min.x, Math.min(max.x, this.x));\r\n this.y = Math.max(min.y, Math.min(max.y, this.y));\r\n return this;\r\n }\r\n private static clampScalar_min = new Vector2();\r\n private static clampScalar_max = new Vector2();\r\n clampScalar(minVal: number, maxVal: number): Vector2\r\n {\r\n const min: Vector2 = Vector2.clampScalar_min.set(minVal, minVal);\r\n const max: Vector2 = Vector2.clampScalar_max.set(maxVal, maxVal);\r\n return this.clamp(min, max);\r\n }\r\n clampLength(min: number, max: number): Vector2\r\n {\r\n const length: number = this.length();\r\n return this.multiplyScalar(Math.max(min, Math.min(max, length)) / length);\r\n }\r\n floor(): Vector2\r\n {\r\n this.x = Math.floor(this.x);\r\n this.y = Math.floor(this.y);\r\n return this;\r\n }\r\n ceil(): Vector2\r\n {\r\n this.x = Math.ceil(this.x);\r\n this.y = Math.ceil(this.y);\r\n return this;\r\n }\r\n round(): Vector2\r\n {\r\n this.x = Math.round(this.x);\r\n this.y = Math.round(this.y);\r\n return this;\r\n }\r\n roundToZero(): Vector2\r\n {\r\n this.x = (this.x < 0) ? Math.ceil(this.x) : Math.floor(this.x);\r\n this.y = (this.y < 0) ? Math.ceil(this.y) : Math.floor(this.y);\r\n return this;\r\n }\r\n negate(): Vector2\r\n {\r\n this.x = - this.x;\r\n this.y = - this.y;\r\n return this;\r\n }\r\n dot(v: Vector2): number\r\n {\r\n return this.x * v.x + this.y * v.y;\r\n }\r\n lengthSq(): number\r\n {\r\n return this.x * this.x + this.y * this.y;\r\n }\r\n length(): number\r\n {\r\n return Math.sqrt(this.x * this.x + this.y * this.y);\r\n }\r\n lengthManhattan(): number\r\n {\r\n return Math.abs(this.x) + Math.abs(this.y);\r\n }\r\n normalize(): Vector2\r\n {\r\n return this.divideScalar(this.length());\r\n }\r\n angle(): number\r\n {\r\n // computes the angle in radians with respect to the positive x-axis\r\n let angle: number = Math.atan2(this.y, this.x);\r\n if (angle < 0) angle += 2 * Math.PI;\r\n return angle;\r\n }\r\n distanceTo(v: Vector2): number\r\n {\r\n return Math.sqrt(this.distanceToSquared(v));\r\n }\r\n distanceToSquared(v: Vector2): number\r\n {\r\n const dx: number = this.x - v.x, dy: number = this.y - v.y;\r\n return dx * dx + dy * dy;\r\n }\r\n distanceToManhattan(v: Vector2): number\r\n {\r\n return Math.abs(this.x - v.x) + Math.abs(this.y - v.y);\r\n }\r\n setLength(length: number): Vector2\r\n {\r\n return this.multiplyScalar(length / this.length());\r\n }\r\n lerp(v: Vector2, alpha: number): Vector2\r\n {\r\n this.x += (v.x - this.x) * alpha;\r\n this.y += (v.y - this.y) * alpha;\r\n return this;\r\n }\r\n lerpVectors(v1: Vector2, v2: Vector2, alpha: number): Vector2\r\n {\r\n return this.subVectors(v2, v1).multiplyScalar(alpha).add(v1);\r\n }\r\n equals(v: Vector2): boolean\r\n {\r\n return ((v.x === this.x) && (v.y === this.y));\r\n }\r\n fromArray(array: Float32Array | number[], offset: number = 0): Vector2\r\n {\r\n this.x = array[offset];\r\n this.y = array[offset + 1];\r\n return this;\r\n }\r\n toArray(array: Float32Array | number[] = [], offset: number = 0): Float32Array | number[]\r\n {\r\n array[offset] = this.x;\r\n array[offset + 1] = this.y;\r\n return array;\r\n }\r\n fromAttribute(attribute: any, index: number, offset: number = 0): Vector2\r\n {\r\n index = index * attribute.itemSize + offset;\r\n this.x = attribute.array[index];\r\n this.y = attribute.array[index + 1];\r\n return this;\r\n }\r\n rotateAround(center: Vector2, angle: number): Vector2\r\n {\r\n const c: number = Math.cos(angle), s: number = Math.sin(angle);\r\n const x: number = this.x - center.x;\r\n const y: number = this.y - center.y;\r\n this.x = x * c - y * s + center.x;\r\n this.y = x * s + y * c + center.y;\r\n return this;\r\n }\r\n}\r\n","import { Vector2 } from \"./Vector2\";\r\nimport { Point } from \"./Point\";\r\n\r\nexport class Box2\r\n{\r\n min: Vector2;\r\n max: Vector2;\r\n constructor(min = new Vector2(+ Infinity, + Infinity), max = new Vector2(- Infinity, - Infinity))\r\n {\r\n this.min = min;\r\n this.max = max;\r\n }\r\n\r\n get area(): number\r\n {\r\n return (this.max.x - this.min.x) * (this.max.y - this.min.y);\r\n }\r\n\r\n set(min: Vector2, max: Vector2): Box2\r\n {\r\n this.min.copy(min);\r\n this.max.copy(max);\r\n return this;\r\n }\r\n setFromPoints(points: Iterable<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 { 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 { 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 { Box3, BufferGeometry, Geometry, LineSegments, Mesh, Object3D, ShapeGeometry, Line as TLine, Vector2, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { Box3Ext } from \"../../../../Geometry/Box\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { AsVector3 } from \"../../../../Geometry/GeUtils\";\r\nimport { ScaleUV } from \"../../../../Geometry/UVUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { Polyline } from \"../../../Entity/Polyline\";\r\nimport { ObjectId } from \"../../../ObjectId\";\r\nimport { RoomBase } from \"../RoomBase\";\r\n\r\nconst TempPolyline = new Polyline;\r\nexport function UpdateTempPolyline(_ContourData: { pts: Vector2[], buls: number[]; })\r\n{\r\n TempPolyline.LineData.length = 0;;\r\n for (let i = 0; i < _ContourData.pts.length; i++)\r\n TempPolyline.LineData.push({ pt: _ContourData.pts[i], bul: _ContourData.buls[i] });\r\n return TempPolyline;\r\n}\r\n\r\n/**\r\n * 平面实体基类\r\n * 子类:地板 天花\r\n */\r\n@Factory\r\nexport class RoomFlatBase extends RoomBase\r\n{\r\n protected _RegionId: ObjectId;\r\n protected _ContourData: { pts: Vector2[]; buls: number[]; };\r\n\r\n protected _HoleDatas: { pts: Vector2[]; buls: number[]; }[];\r\n\r\n constructor(\r\n _Contour?: Polyline,//为了防止contour被删除(所以我们直接备份这个)\r\n _Holes: Polyline[] = []\r\n )\r\n {\r\n super();\r\n if (_Contour) this.Contour = _Contour;\r\n\r\n this._HoleDatas = _Holes.map(h => h.MatrixAlignTo2(this.OCSNoClone));\r\n }\r\n\r\n get ContourData(): { pts: Vector2[]; buls: number[]; }\r\n {\r\n return this._ContourData;\r\n }\r\n\r\n set ContourData(value: { pts: Vector2[]; buls: number[]; })\r\n {\r\n }\r\n\r\n get HoleDatas(): { pts: Vector2[]; buls: number[]; }[]\r\n {\r\n return this._HoleDatas;\r\n }\r\n set HoleDatas(value: { pts: Vector2[]; buls: number[]; }[])\r\n {\r\n }\r\n\r\n get Area()\r\n {\r\n let area = this.Contour.Area;\r\n\r\n for (let hole of this._HoleDatas)\r\n area -= UpdateTempPolyline(hole).Area;\r\n\r\n return area;\r\n }\r\n\r\n get BoundingBoxInOCS(): Box3Ext\r\n {\r\n return this.Contour.BoundingBoxInOCS;\r\n }\r\n\r\n get BoundingBox(): Box3\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this._Matrix);\r\n }\r\n\r\n public UpdateContourHoles(_Contour: Polyline, _Holes: Polyline[])\r\n {\r\n let conData = _Contour.MatrixAlignTo2(this.OCSNoClone);\r\n let holeData = _Holes.map(h => h.MatrixAlignTo2(this.OCSNoClone));\r\n\r\n this.WriteAllObjectRecord();\r\n this._ContourData = conData;\r\n this._HoleDatas = holeData;\r\n this.Update();\r\n }\r\n\r\n\r\n public set Contour(_Contour: Polyline)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ContourData = _Contour.MatrixAlignTo2(this.OCSNoClone);\r\n this.Update();\r\n }\r\n public get Contour()\r\n {\r\n return UpdateTempPolyline(this._ContourData);\r\n }\r\n\r\n public set Holes(_Holes: Polyline[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._HoleDatas = _Holes.map(h => h.MatrixAlignTo2(this.OCSNoClone));\r\n this.Update();\r\n }\r\n\r\n public get RegionId(): ObjectId\r\n {\r\n return this._RegionId;\r\n }\r\n public set RegionId(value: ObjectId)\r\n {\r\n if (value === this._RegionId) return;\r\n this.WriteAllObjectRecord();\r\n this._RegionId = value;\r\n }\r\n\r\n override GetGripPoints(): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n const Add2Pts = (p: Vector2) => { pts.push(AsVector3(p).applyMatrix4(this.OCSNoClone)); };\r\n this._ContourData.pts.forEach(Add2Pts);\r\n this._HoleDatas.forEach(h => h.pts.forEach(Add2Pts));\r\n return pts;\r\n }\r\n override MoveGripPoints(indexList: number[], vec: Vector3): void\r\n {\r\n }\r\n\r\n override GetStretchPoints(): Vector3[]\r\n {\r\n return this.GetGripPoints();\r\n // return [new Vector3(1e10, 1e10, 1e10)];//我们允许拉伸内部轮廓 但是不允许拉伸外部轮廓\r\n }\r\n\r\n override MoveStretchPoints(indexList: number[], vec: Vector3): void\r\n {\r\n\r\n }\r\n\r\n //绘制\r\n override UpdateDrawGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n this._EdgeGeometry.dispose();\r\n this._EdgeGeometry = undefined;\r\n if (this._MeshGeometry)\r\n this._MeshGeometry.dispose();\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n protected _EdgeGeometry: BufferGeometry;\r\n protected get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n return this._EdgeGeometry;\r\n\r\n let pts = this.Contour.Shape.getPoints(30).map(AsVector3);\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(pts);\r\n return this._EdgeGeometry;\r\n }\r\n\r\n protected _MeshGeometry: Geometry;\r\n protected get MeshGeometry(): Geometry\r\n {\r\n if (!this._MeshGeometry)\r\n {\r\n let shape = this.Contour.Shape;\r\n for (let hole of this._HoleDatas)\r\n shape.holes.push(UpdateTempPolyline(hole).Shape);\r\n this._MeshGeometry = new ShapeGeometry(shape);\r\n ScaleUV(this.MeshGeometry, 1e-3);\r\n }\r\n return this._MeshGeometry;\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as TLine;\r\n l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n // let mesh = obj.children[0] as Mesh;\r\n // mesh.material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n // let mesh = obj.children[0] as Mesh;\r\n // mesh.material = this.MeshMaterial;\r\n }\r\n else if (renderType === 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 override InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n // return new Object3D;//在二维线框中,如果显示这个线框,操作时会选到这个,所以不绘制\r\n\r\n //避免在二维线框下无法选中!\r\n return new TLine(BufferGeometryUtils.CreateFromPts([AsVector3(this.ContourData.pts[0]), AsVector3(this.ContourData.pts[0])]), ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n return new Object3D().add(\r\n new Mesh(this.MeshGeometry, ColorMaterial.GetBasicMaterialTransparent2(this.ColorIndex, 0.1)),\r\n new TLine(this.EdgeGeometry, ColorMaterial.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.Print)\r\n {\r\n return new Mesh(this.MeshGeometry, ColorMaterial.GetPrintConceptualMaterial());\r\n }\r\n else if (renderType === RenderType.Jig)\r\n {\r\n return new Object3D;\r\n }\r\n }\r\n\r\n override UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n let l = obj as TLine<BufferGeometry>;\r\n BufferGeometryUtils.UpdatePts(l.geometry, [AsVector3(this.ContourData.pts[0]), AsVector3(this.ContourData.pts[0])]);\r\n\r\n // l.geometry = this.EdgeGeometry;\r\n // l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh<Geometry>;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let line = obj.children[1] as LineSegments<BufferGeometry>;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical || renderType === RenderType.Print)\r\n {\r\n let mesh = obj as Mesh;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n }\r\n }\r\n\r\n ClearDraw()\r\n {\r\n this.UpdateDrawGeometry();\r\n return super.ClearDraw();\r\n }\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n\r\n this._RegionId = file.ReadObjectId();\r\n\r\n this._ContourData = ReadContour();\r\n\r\n let count = file.Read();\r\n this._HoleDatas = [];\r\n for (let i = 0; i < count; i++)\r\n this._HoleDatas.push(ReadContour());\r\n\r\n function ReadContour()\r\n {\r\n let count = file.Read() as number;\r\n let conData = { pts: [], buls: [] };\r\n for (let i = 0; i < count; i++)\r\n {\r\n conData.pts.push(new Vector2(file.Read(), file.Read()));\r\n conData.buls.push(file.Read());\r\n }\r\n return conData;\r\n }\r\n\r\n if (ver > 1)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n\r\n file.WriteObjectId(this._RegionId);\r\n\r\n WriteContour(this._ContourData);\r\n file.Write(this._HoleDatas.length);\r\n for (let h of this._HoleDatas)\r\n WriteContour(h);\r\n\r\n function WriteContour(conData: { pts: Vector2[], buls: number[]; })\r\n {\r\n file.Write(conData.pts.length);\r\n for (let i = 0; i < conData.pts.length; i++)\r\n {\r\n let p = conData.pts[i];\r\n file.Write(p.x);\r\n file.Write(p.y);\r\n file.Write(conData.buls[i]);\r\n }\r\n }\r\n\r\n // ver2\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n}\r\n","import { MeshStandardMaterial } from \"three\";\r\nimport { HostApplicationServices } from \"../../../../ApplicationServices/HostApplicationServices\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { RoomFlatBase } from \"./RoomFlatBase\";\r\n\r\n\r\n/**\r\n * 地板\r\n */\r\n@Factory\r\nexport class RoomFlatFloor extends RoomFlatBase\r\n{\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n }\r\n\r\n protected get MeshMaterial()\r\n {\r\n const mtl = this._MaterialId;\r\n if (!mtl?.IsErase && mtl?.Object)\r\n return mtl.Object.Material as MeshStandardMaterial;\r\n return HostApplicationServices.DefaultFloorMaterial ?? HostApplicationServices.DefaultMeshMaterial;\r\n }\r\n}\r\n","import { Face3, Geometry, MeshStandardMaterial, ShapeUtils, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../../../ApplicationServices/HostApplicationServices\";\r\nimport { arrayPushArray } from \"../../../../Common/ArrayExt\";\r\nimport { AsVector3 } from \"../../../../Geometry/GeUtils\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { RoomFlatBase, UpdateTempPolyline } from \"./RoomFlatBase\";\r\n\r\n\r\n/**\r\n * 天花板\r\n */\r\n@Factory\r\nexport class RoomFlatTop extends RoomFlatBase\r\n{\r\n protected override get MeshGeometry(): Geometry\r\n {\r\n if (!this._MeshGeometry)\r\n {\r\n this._MeshGeometry = new Geometry;\r\n let shape = this.Contour.Shape;\r\n for (let hole of this._HoleDatas)\r\n shape.holes.push(UpdateTempPolyline(hole).Shape);\r\n\r\n const points = shape.extractPoints(30);\r\n let shapeVertices = points.shape;\r\n const shapeHoles = points.holes;\r\n\r\n const faces = ShapeUtils.triangulateShape(shapeVertices, shapeHoles);\r\n\r\n for (let hole of shapeHoles)\r\n arrayPushArray(shapeVertices, hole);\r\n\r\n for (let p of shapeVertices)\r\n {\r\n this._MeshGeometry.vertices.push(AsVector3(p));\r\n p.multiplyScalar(1e-3);\r\n }\r\n\r\n let normal = new Vector3(0, 0, -1);\r\n // incides\r\n for (let i = 0, l = faces.length; i < l; i++)\r\n {\r\n const face = faces[i];\r\n\r\n const a = face[2];\r\n const b = face[1];\r\n const c = face[0];\r\n\r\n this._MeshGeometry.faces.push(new Face3(a, b, c, normal));\r\n this._MeshGeometry.faceVertexUvs[0].push([shapeVertices[a], shapeVertices[b], shapeVertices[c]]);\r\n }\r\n }\r\n return this._MeshGeometry;\r\n }\r\n\r\n protected override get CaseShadow()\r\n {\r\n return true;\r\n }\r\n protected override get ReceiveShadow()\r\n {\r\n return false;\r\n }\r\n\r\n protected get MeshMaterial()\r\n {\r\n const mtl = this._MaterialId;\r\n if (!mtl?.IsErase && mtl?.Object)\r\n return mtl.Object.Material as MeshStandardMaterial;\r\n return HostApplicationServices.DefaultWallMaterial ?? HostApplicationServices.DefaultMeshMaterial;\r\n }\r\n}\r\n","import { BufferGeometry, Line, Object3D, Vector2, Vector3 } from \"three\";\r\nimport { AddEntityDrawObject } from \"../../../../Common/AddEntityDrawObject\";\r\nimport { FixedNotZero } from \"../../../../Common/Utils\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { AsVector3, equaln } from \"../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { ObjectId } from \"../../../ObjectId\";\r\nimport { Text, TextAligen } from \"../../../Text/Text\";\r\nimport { RoomFlatBase } from \"../Flat/RoomFlatBase\";\r\nimport { RoomBase } from \"../RoomBase\";\r\n\r\nexport const ROOM_REGION_CURVES_KEY = \"__ROOM_REGION_CURVES_KEY__\";\r\n\r\n/**\r\n * 户型区域:厨房,客厅,主卧,卫生间\r\n * 绑定了天花板和地板对象\r\n */\r\n@Factory\r\nexport class RoomRegion extends RoomBase\r\n{\r\n _Text: Text;\r\n constructor(\r\n private _Name: string = \"\",//名称\r\n\r\n private _Top: ObjectId,//天花板\r\n\r\n private _Floor: ObjectId,//地板\r\n private _Area = 0,\r\n )\r\n {\r\n super();\r\n }\r\n\r\n public get Area()\r\n {\r\n return this._Area;\r\n }\r\n\r\n public set Area(value)\r\n {\r\n if (equaln(value, this._Area, 1e-3)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Area = value;\r\n this.Update();\r\n }\r\n\r\n get TextString() { return this._Name; }\r\n set TextString(name: string)\r\n {\r\n if (name === this._Name) return;\r\n this._Name = name;\r\n this.Update();\r\n }\r\n\r\n public get Top(): ObjectId\r\n {\r\n return this._Top;\r\n }\r\n\r\n public set Top(value: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Top = value;\r\n }\r\n\r\n public get Floor(): ObjectId\r\n {\r\n return this._Floor;\r\n }\r\n public set Floor(value: ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Floor = value;\r\n }\r\n\r\n private get Text()\r\n {\r\n if (!this._Text)\r\n this._Text = new Text(undefined, undefined, \"yahei\", 100);\r\n\r\n return this._Text;\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n let obj = (this._Floor?.Object ?? this._Top?.Object) as RoomFlatBase;\r\n if (obj)\r\n {\r\n const Add2Pts = (p: Vector2) => { pts.push(AsVector3(p).applyMatrix4(obj.OCSNoClone)); };\r\n obj.ContourData.pts.forEach(Add2Pts);\r\n obj.HoleDatas.forEach(h => h.pts.forEach(Add2Pts));\r\n }\r\n return pts;\r\n }\r\n\r\n //TODO:绘制时只绘制文字对象\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let obj = new Object3D;\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} type\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Conceptual)\r\n {\r\n obj.remove(...obj.children.slice(0));\r\n this.Text.TextAligen = TextAligen.Mid;\r\n this._Text.TextString = `${this.TextString || \"未命名\"} ${FixedNotZero(this._Area * 1e-6, 2)}m²`;\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n }\r\n else\r\n {\r\n //避免在真实视图无法选中!\r\n let line = obj.children[0] as Line<BufferGeometry>;\r\n let pts = this.GetGripPoints();\r\n if (pts.length)\r\n {\r\n let p = pts[0].applyMatrix4(this.OCSInv);\r\n if (!line)\r\n obj.add(new Line(BufferGeometryUtils.CreateFromPts([p, p])));\r\n else\r\n BufferGeometryUtils.UpdatePts(line.geometry, [p, p]);\r\n }\r\n }\r\n }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this._Name = file.Read();\r\n this._Top = file.ReadObjectId();\r\n this._Floor = file.ReadObjectId();\r\n if (ver > 1)\r\n this._Area = file.Read();\r\n\r\n this[ROOM_REGION_CURVES_KEY] = undefined;//因为撤销重做时会导致这个曲线关联变更,所以移除这个曲线,如果需要则重新计算\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._Name);\r\n file.WriteObjectId(this._Top);\r\n file.WriteObjectId(this._Floor);\r\n file.Write(this._Area);\r\n }\r\n //#endregion\r\n}\r\n","import { 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 \"../Common/Point\";\r\nimport { Path } from \"./Path\";\r\n\r\nconst MAX_CACHE_LEN = 100000;\r\n\r\nexport class NestCache\r\n{\r\n //放置零件时,命中缓存的次数\r\n static CachePartPosCount = 0;\r\n //放置零件时,命中无法放置缓存的次数\r\n static CacheNoSetCount = 0;//noset\r\n\r\n private static _PositionCache: { [key: string]: Point; } = {};\r\n private static _PosCacheCount: 0;//缓存个数\r\n private static _NoPutCache: { [key: string]: Set<number>; } = {};\r\n private static _NoPutCacheCount: 0;//缓存个数\r\n\r\n static SetPos(key: string, value: Point)\r\n {\r\n if (this._PosCacheCount > MAX_CACHE_LEN)\r\n {\r\n // this._PosCacheCount = 0;\r\n // this._PositionCache = {};\r\n return;\r\n }\r\n\r\n this._PositionCache[key] = value;\r\n this._PosCacheCount++;\r\n }\r\n\r\n static GetPos(key: string): Point\r\n {\r\n return this._PositionCache[key];\r\n }\r\n\r\n static SetNoPut(key: string, value: Set<number>)\r\n {\r\n if (this._NoPutCacheCount > MAX_CACHE_LEN)\r\n {\r\n // this._NoPutCacheCount = 0;\r\n // this._NoPutCache = {};\r\n return;\r\n }\r\n\r\n this._NoPutCache[key] = value;\r\n this._NoPutCacheCount++;\r\n }\r\n\r\n static GetNoPut(key: string): Set<number>\r\n {\r\n return this._NoPutCache[key];\r\n }\r\n\r\n /**\r\n * 用于创建原点在0点的矩形路径\r\n */\r\n static CreatePath(x: number, y: number, knifRadius = 3.5): Path\r\n {\r\n let minX = -knifRadius;\r\n let maxX = x + knifRadius;\r\n let minY = -knifRadius;\r\n let maxY = y + knifRadius;\r\n return new Path([\r\n { x: minX, y: minY },\r\n { x: maxX, y: minY },\r\n { x: maxX, y: maxY },\r\n { x: minX, y: maxY },\r\n ]);\r\n }\r\n\r\n static Clear()\r\n {\r\n this.CachePartPosCount = 0;\r\n this.CacheNoSetCount = 0;\r\n this._PositionCache = {};\r\n this._PosCacheCount = 0;\r\n this._NoPutCache = {};\r\n this._NoPutCacheCount = 0;\r\n }\r\n}\r\n","import polylabel from \"polylabel\";\r\nimport { Vector3 } from \"three\";\r\nimport { Area } from \"../../../Nest/Common/Area\";\r\nimport { Point } from \"../../../Nest/Common/Point\";\r\nimport { Max } from \"../../../Nest/Common/Util\";\r\nimport { Path2Polyline } from \"../../../Nest/Converter/Path2Polyline\";\r\nimport { NestCache } from \"../../../Nest/Core/NestCache\";\r\nimport { Path, PathScale, PathTranslate_Self } from \"../../../Nest/Core/Path\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { Shape } from \"../../Shape\";\r\nimport { ShapeManager } from \"../../ShapeManager\";\r\n\r\nconst TEXT_BOX = NestCache.CreatePath(570, 110);\r\n\r\n/**\r\n * 分析文字放置位置\r\n * @param contour 轮廓点表\r\n * @param holes 网洞点表\r\n * @param [textBox=TEXT_BOX] 标签盒子\r\n * @param [allowReturnNullPos=false] 允许返回null 当没有找到合适的位置返回null\r\n * @returns Vector3\r\n */\r\nexport function ParseRegionTextPos(contour: Point[], holes: (Point[])[], textBox = TEXT_BOX, allowReturnNullPos = false): Vector3 | undefined\r\n{\r\n let hasTextBox = true;\r\n let path = new Path(contour);\r\n let nfps: Polyline[] = path.GetInsideNFP(textBox)?.map(nfp => Path2Polyline(PathTranslate_Self(PathScale(nfp, 1e-4), path.OrigionMinPoint.x, path.OrigionMinPoint.y))); //可能无法获得\r\n if (!nfps || nfps.length === 0)\r\n {\r\n if (allowReturnNullPos) return;\r\n\r\n nfps = [Path2Polyline(contour)];\r\n hasTextBox = false;\r\n }\r\n\r\n let holeNFPs: Contour[] = [];\r\n for (let hole of holes)\r\n {\r\n let hpath = new Path(hole);\r\n let nfps = hpath.GetOutsideNFP(textBox);\r\n let nfp = nfps[Max(nfps, (n1, n2) => Area(n2) > Area(n1))];\r\n\r\n let pl = Path2Polyline(PathTranslate_Self(PathScale(nfp, 1e-4), hpath.OrigionMinPoint.x, hpath.OrigionMinPoint.y));\r\n let box = pl.BoundingBox;\r\n\r\n let boxpl = new Polyline().RectangleFrom2Pt(new Vector3(box.min.x - 1e5, box.min.y - 1), new Vector3(box.max.x + 1e5, box.min.y + 1));\r\n\r\n let con1 = Contour.CreateContour(pl, false);\r\n let con2 = Contour.CreateContour(boxpl, false);\r\n\r\n holeNFPs.push(\r\n ...con1.UnionBoolOperation(con2).contours\r\n );\r\n }\r\n\r\n let shapes = nfps.map(pl => new Shape(Contour.CreateContour(pl, false)));\r\n let subShapes = new ShapeManager;\r\n holeNFPs.forEach(pl =>\r\n {\r\n subShapes.UnionBoolOperation(new ShapeManager([new Shape(pl)]));\r\n });\r\n\r\n let resShapes: Shape[] = [];\r\n for (let shape of shapes)\r\n {\r\n // TestDraw(shape.Outline.Curve, 6);\r\n resShapes.push(...shape.SubstactBoolOperation(subShapes.ShapeList)); //可能减完丢了\r\n }\r\n\r\n if (resShapes.length === 0)\r\n {\r\n //允许返回空的点 因为无法放置\r\n if (allowReturnNullPos) return;\r\n resShapes = shapes;\r\n }\r\n\r\n let maxDist = -Infinity;\r\n let minp: number[];\r\n let curve: Polyline;\r\n\r\n for (let shape of resShapes)\r\n {\r\n let pl = shape.Outline.Curve as Polyline;\r\n if (pl.Area < 1)\r\n {\r\n if (!minp) minp = pl.BoundingBox.getCenter(new Vector3).toArray();\r\n continue;\r\n }\r\n // TestDraw(pl, 3); //绘制裁剪后的线\r\n let p = polylabel([pl.LineData.map(p => p.pt.toArray())], 1.0);//这里不再需要转换 因为我们传递进来的就是没有凸度的点表\r\n\r\n let dist = p[\"distance\"];\r\n if (dist > maxDist)\r\n {\r\n maxDist = dist;\r\n let pos = pl.Position;\r\n minp = p;\r\n minp[0] += pos.x;\r\n minp[1] += pos.y;\r\n\r\n curve = pl;\r\n }\r\n }\r\n\r\n let p = new Vector3(minp[0], minp[1]);\r\n //左右均分\r\n // TestDraw(new Point(p));\r\n // let line = new Line(p, p.clone().setX(minp[0] + 1));\r\n\r\n // let pts = curve.IntersectWith(line, IntersectOption.ExtendArg);\r\n // pts.push(p);\r\n // pts.sort(ComparePoint(\"xyz\"));\r\n // let index = pts.indexOf(p);\r\n // p = midPoint(pts[index - 1], pts[index + 1]);\r\n // TestDraw(new Point(p));\r\n\r\n // //上下居中\r\n // line = new Line(p, p.clone().setY(p.y + 1));\r\n // pts = curve.IntersectWith(line, IntersectOption.ExtendArg);\r\n // pts.push(p);\r\n // pts.sort(ComparePoint(\"xyz\"));\r\n // index = pts.indexOf(p);\r\n // p = midPoint(pts[index - 1], pts[index + 1]);\r\n // TestDraw(new Point(p));\r\n\r\n if (hasTextBox)\r\n {\r\n p.x += textBox.Size.x * 0.5;\r\n p.y += textBox.Size.y * 0.5;\r\n }\r\n return p;\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Vector3 } from 'three';\r\nimport { Polyline } from '../../Entity/Polyline';\r\nimport { RoomFlatBase, UpdateTempPolyline } from \"../Entity/Flat/RoomFlatBase\";\r\nimport { RoomRegion } from \"../Entity/Region/RoomRegion\";\r\n\r\n//区域更迭(新老新区交换)\r\nexport class RegionReplacement\r\n{\r\n fb: Flatbush;\r\n contours: [Polyline, Polyline[]][] = [];\r\n constructor(private oldRegions: RoomRegion[])\r\n {\r\n if (oldRegions.length === 0) return;\r\n this.fb = new Flatbush(oldRegions.length);\r\n oldRegions.forEach(r =>\r\n {\r\n let flat = (r.Floor?.Object ?? r.Top.Object) as RoomFlatBase;\r\n //TODO:备份轮廓和网洞\r\n let box = flat.BoundingBox;\r\n this.fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n\r\n this.contours.push([flat.Contour.Clone().ApplyMatrix(flat.OCSNoClone), flat.HoleDatas.map(h => UpdateTempPolyline(h).Clone().ApplyMatrix(flat.OCSNoClone))]);\r\n });\r\n this.fb.finish();\r\n }\r\n\r\n //获得旧的区域\r\n GetReplaceOldReg(p: Vector3)\r\n {\r\n if (!this.fb) return;\r\n\r\n let ids = this.fb.search(p.x - 1, p.y - 1, p.x + 1, p.y + 1);\r\n for (let id of ids)\r\n {\r\n let [con, holes] = this.contours[id];\r\n if (con.PtInCurve(p) && !holes.some(h => h.PtInCurve(p)))\r\n {\r\n return this.oldRegions[id];\r\n }\r\n }\r\n }\r\n}\r\n","import { EntitysUpdateWrap } from \"../../../Common/EntityUpdateWrap\";\r\nimport { Route } from \"../../../Geometry/CurveMap\";\r\nimport { ContourTreeNode } from \"../../../Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2\";\r\nimport { RegionParse } from \"../../../Geometry/RegionParse\";\r\nimport { Polyline2Points } from \"../../../Nest/Converter/Curves2Points\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Database } from \"../../Database\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { UpdateTempPolyline } from \"../Entity/Flat/RoomFlatBase\";\r\nimport { RoomFlatFloor } from \"../Entity/Flat/RoomFlatFloor\";\r\nimport { RoomFlatTop } from \"../Entity/Flat/RoomFlatTop\";\r\nimport { ROOM_REGION_CURVES_KEY, RoomRegion } from \"../Entity/Region/RoomRegion\";\r\nimport { CURVE_DIR_TYPE_KEY, CURVE_FACE_TYPE_KEY, CURVE_WALL_TYPE_KEY, RoomWallBase, WallFaceType } from \"../Entity/Wall/RoomWallBase\";\r\nimport { ParseRegionTextPos } from \"./ParseRegionTextPos\";\r\nimport { RegionReplacement } from \"./RegionReplacement\";\r\n\r\n//获取所有的曲线 ?:并且知道每个曲线是墙体的左边还是右边 (有没有用?)\r\n\r\n//分析面域\r\n\r\n//分析可用的内空间(墙面方向指向空间内部为内空间) 否则为外墙空间\r\n\r\n//构造面域树? 不需要了? 还是需要的 需要一个最大的天花板\r\n\r\n//区域对象 (地面+天花?)\r\n\r\n\r\n//墙内曲线的类型\r\nexport enum WallCurveDirType\r\n{\r\n left = 0,\r\n right = 1,\r\n lid = 2,\r\n}\r\n\r\n\r\n/**\r\n * 区域分析(房间+外墙+全屋顶)\r\n */\r\nexport class RoomRegionParse\r\n{\r\n rr: RegionReplacement;//区域替换工具\r\n reped: Set<RoomRegion>;//已经替换的区域\r\n oldregs: RoomRegion[];//旧的区域\r\n\r\n /**\r\n * @param _UpdateDb 当提供db时,我们更新了区域的信息\r\n */\r\n constructor(private _UpdateDb: Database)\r\n {\r\n if (this._UpdateDb)\r\n {\r\n this.oldregs = this._UpdateDb.ModelSpace.Entitys.filter(e => !e.IsErase && e instanceof RoomRegion) as RoomRegion[];\r\n this.rr = new RegionReplacement(this.oldregs);\r\n this.reped = new Set<RoomRegion>();\r\n }\r\n }\r\n\r\n Do(walls: RoomWallBase[])\r\n {\r\n let curves: Curve[] = [];\r\n\r\n let aloneWalls: RoomWallBase[] = [];\r\n\r\n let leftCurves = new Set<Curve>();\r\n\r\n for (let wall of walls)\r\n {\r\n if (!wall.LeftCurves)\r\n {\r\n aloneWalls.push(wall);\r\n continue;\r\n }\r\n\r\n for (let c of wall.LeftCurves)\r\n {\r\n curves.push(c);\r\n leftCurves.add(c);\r\n c[CURVE_DIR_TYPE_KEY] = WallCurveDirType.left;\r\n c[CURVE_WALL_TYPE_KEY] = wall;\r\n }\r\n for (let c of wall.RightCurves)\r\n {\r\n curves.push(c);\r\n c[CURVE_DIR_TYPE_KEY] = WallCurveDirType.right;\r\n c[CURVE_WALL_TYPE_KEY] = wall;\r\n }\r\n\r\n for (let c of wall.LidCurves)\r\n {\r\n curves.push(c);\r\n c[CURVE_DIR_TYPE_KEY] = WallCurveDirType.lid;\r\n c[CURVE_WALL_TYPE_KEY] = wall;\r\n }\r\n }\r\n\r\n const REGION_PARSE_NUM = 3;\r\n const POLYLINE_JOIN_FUZZ = Math.pow(10, -REGION_PARSE_NUM);\r\n\r\n let regParse = new RegionParse(curves, REGION_PARSE_NUM);\r\n\r\n for (let [orgArc, arcs] of regParse.ExpLineMap)\r\n {\r\n if (leftCurves.has(orgArc))\r\n for (let arc of arcs)\r\n leftCurves.add(arc);\r\n }\r\n\r\n let regionPolylines: Polyline[] = [];\r\n\r\n let regPolyline2RoutesMap = new Map<Polyline, Route[]>();//区域轮廓多段线->墙线 映射\r\n\r\n //分析内外墙1内2外\r\n for (let routes of regParse.RegionsOutline)\r\n {\r\n let pl = Polyline.Combine(routes.map(r => r.curve), POLYLINE_JOIN_FUZZ);\r\n\r\n // for (let i = 0; i < routes.length; i++)\r\n // {\r\n if (leftCurves.has(routes[0].curve))\r\n pl.ColorIndex = routes[0].isReverse ? 1 : 2;\r\n else //if (right.has(routes[0].curve))\r\n pl.ColorIndex = routes[0].isReverse ? 2 : 1;\r\n // else //因为盖子不分左右 所以我们忽略盖子 (现在盖子和右侧的一致)\r\n // continue;\r\n\r\n // break;\r\n // }\r\n\r\n // TestDraw(routes[0].curve); //test\r\n regionPolylines.push(pl);\r\n regPolyline2RoutesMap.set(pl, routes);\r\n }\r\n\r\n //不可能有内部轮廓 如果有 就证明错了\r\n for (let routes of regParse.RegionsInternal)\r\n {\r\n let pl = Polyline.Combine(routes.map(r => r.curve));\r\n pl.ColorIndex = pl.Area2 > 0 ? 3 : 4;\r\n // throw \"未知错误 出现外部轮廓\"\r\n }\r\n\r\n //面域分析炸开的线和原始轮廓的关联关系\r\n for (let [orgArc, newArcs] of regParse.ExpLineMap)\r\n {\r\n for (let arc of newArcs)\r\n {\r\n arc[CURVE_DIR_TYPE_KEY] = orgArc[CURVE_DIR_TYPE_KEY];\r\n arc[CURVE_WALL_TYPE_KEY] = orgArc[CURVE_WALL_TYPE_KEY];\r\n }\r\n }\r\n\r\n let cons = regionPolylines.map(pl => new ContourTreeNode(Contour.CreateContour(pl, false)));\r\n ContourTreeNode.ParseContourTree(cons);\r\n\r\n let roofs: Polyline[] = [];\r\n\r\n //解析 天花板区域 内空区域\r\n for (let con of cons)\r\n {\r\n let maxZ = -Infinity;\r\n let minZ = Infinity;\r\n\r\n let routes = regPolyline2RoutesMap.get(con.contour.Curve as Polyline);\r\n\r\n for (let r of routes)\r\n {\r\n let wall = r.curve[CURVE_WALL_TYPE_KEY] as RoomWallBase;\r\n minZ = Math.min(minZ, wall.Position.z);\r\n maxZ = Math.max(maxZ, wall.Position.z + wall.Height);\r\n }\r\n\r\n if (con.contour.Curve.ColorIndex === 2)//天花板区域(或者柱子)\r\n {\r\n if (con.Depth !== 0 || con.area < 1e6)//柱子\r\n for (let r of routes)\r\n r.curve[CURVE_FACE_TYPE_KEY] = WallFaceType.Pillar;\r\n else\r\n for (let r of routes)\r\n r.curve[CURVE_FACE_TYPE_KEY] = WallFaceType.Outside;\r\n\r\n //我们需要返回这个轮廓,以便在ue中可以绘制真正的屋顶\r\n con.contour.Curve[\"MaxZ\"] = maxZ;\r\n con.contour.Curve[\"MinZ\"] = minZ;\r\n roofs.push(con.contour.Curve as Polyline);\r\n }\r\n else if (con.contour.Curve.ColorIndex === 1)//内空区域\r\n {\r\n for (let r of routes)\r\n r.curve[CURVE_FACE_TYPE_KEY] = WallFaceType.Inside;\r\n\r\n if (this._UpdateDb && con.contour.Area > 1e4)\r\n {\r\n //组合外圈和网洞 画出来 就行了\r\n let floor = new RoomFlatFloor();\r\n let top = new RoomFlatTop();\r\n floor.OCS = con.contour.Curve.OCSNoClone;//设置坐标系 以便我们正常的应用轮廓\r\n top.OCS = con.contour.Curve.OCSNoClone;\r\n\r\n floor.Contour = con.contour.Curve as Polyline;\r\n top.Contour = con.contour.Curve as Polyline;\r\n\r\n floor.Holes = con.children.map(c => c.contour.Curve as Polyline);\r\n top.Holes = con.children.map(c => c.contour.Curve as Polyline);\r\n\r\n floor.Z = minZ;\r\n top.Z = maxZ;//等轮廓设置完在移动 否则设置失败\r\n\r\n let conPts = Polyline2Points(floor.Contour, false, 0)[1];\r\n let holePts = floor.HoleDatas.map(h => Polyline2Points(UpdateTempPolyline(h), false, 0)[1]);\r\n\r\n let pos = ParseRegionTextPos(conPts, holePts);\r\n pos.applyMatrix4(floor.OCSNoClone);\r\n let oldR = this.rr.GetReplaceOldReg(pos);\r\n\r\n let name = \"\";\r\n if (oldR)\r\n {\r\n if (this.reped.has(oldR)) //新增\r\n {\r\n //继承信息\r\n if (oldR.TextString)//继承名称\r\n {\r\n name = oldR.TextString;\r\n }\r\n }\r\n else//替换旧的\r\n {\r\n floor = oldR.Floor.Object as RoomFlatFloor;\r\n top = oldR.Top.Object as RoomFlatTop;\r\n\r\n EntitysUpdateWrap([floor, top, oldR], () =>\r\n {\r\n top.WriteAllObjectRecord();//因为修改了ocs 所以我们先记录下原始数据\r\n top.OCS = con.contour.Curve.OCSNoClone;\r\n\r\n floor.WriteAllObjectRecord();\r\n floor.OCS = con.contour.Curve.OCSNoClone;\r\n\r\n floor.UpdateContourHoles(con.contour.Curve as Polyline, con.children.map(c => c.contour.Curve as Polyline));\r\n top.UpdateContourHoles(con.contour.Curve as Polyline, con.children.map(c => c.contour.Curve as Polyline));\r\n\r\n floor.Z = minZ;\r\n top.Z = maxZ;//等轮廓设置完在移动 否则设置失败\r\n\r\n oldR.Position = pos;\r\n oldR.Area = floor.Area;\r\n });\r\n\r\n oldR[ROOM_REGION_CURVES_KEY] = routes.map(r => r.curve);\r\n this.reped.add(oldR);\r\n continue;\r\n }\r\n }\r\n\r\n this._UpdateDb.ModelSpace.Append(floor);\r\n this._UpdateDb.ModelSpace.Append(top);\r\n let region = new RoomRegion(name, top.Id, floor.Id, floor.Area);\r\n region[ROOM_REGION_CURVES_KEY] = routes.map(r => r.curve);\r\n region.Position = pos;\r\n this._UpdateDb.ModelSpace.Append(region);\r\n floor.RegionId = region.Id;\r\n top.RegionId = region.Id;\r\n }\r\n }\r\n }\r\n\r\n for (let [orgArc, arcs] of regParse.ExpLineMap)\r\n orgArc[CURVE_FACE_TYPE_KEY] = arcs[0][CURVE_FACE_TYPE_KEY];//圆弧不可能被两个房间拥有,所以这个写法没问题\r\n\r\n for (let wall of walls)\r\n {\r\n // 因为我们现在没有分裂圆弧 所以我们不需要在合并线\r\n // wall.LeftCurves && arrayRemoveDuplicateBySort(wall.LeftCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n // wall.RightCurves && arrayRemoveDuplicateBySort(wall.RightCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n wall.Update();\r\n }\r\n\r\n for (let roof of roofs)\r\n roof.Z0();\r\n\r\n return roofs;\r\n }\r\n\r\n End()\r\n {\r\n if (this._UpdateDb)\r\n {\r\n for (let r of this.oldregs)\r\n if (!this.reped.has(r))\r\n {\r\n r.Erase();\r\n r.Floor?.Object.Erase();\r\n r.Top?.Object.Erase();\r\n }\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../../Common/ArrayExt\";\r\nimport { CurveIntersection2 } from \"../../../Geometry/CurveIntersection\";\r\nimport { equaln } from \"../../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../../GraphicsSystem/IntersectWith\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\n\r\n/**\r\n * 1.自动合理的延伸墙体,以便保证吸附失败的时候自动吸附(当被MOVE时,我们希望修复吸附失败的问题!)\r\n * 可延伸的距离等于墙体的厚度\r\n *\r\n * 2.在交点处把墙体打断,以便我们分析区域\r\n */\r\nexport class RoomWallExtendAndBreak\r\n{\r\n\r\n //曲线->分裂曲线的映射\r\n _Curve2SplitCurveMap = new Map<Curve, Curve[]>();\r\n //分裂曲线->原始曲线的映射\r\n _SplitCurve2OrgCurveMap = new Map<Curve, Curve>();\r\n\r\n ExtendCurves = new Set<Curve>();\r\n AloneCurves: Curve[] = [];\r\n\r\n OrgCurveMapGroup: (Curve[])[] = [];\r\n\r\n constructor(curves: Curve[])\r\n {\r\n let intersect = new CurveIntersection2(curves, true, IntersectOption.ExtendBoth, 100, true);\r\n\r\n let breakCurves: Curve[] = [];\r\n //延伸+打断\r\n for (let [cu, pmap] of intersect.intersect2)\r\n {\r\n pmap.sort((p1, p2) => p1[0] - p2[0]);\r\n\r\n if (pmap.length > 0) breakCurves.push(cu);\r\n else this.AloneCurves.push(cu);\r\n\r\n //#region 1.延伸\r\n let hasExtend = false;\r\n let endParam = cu.EndParam;\r\n\r\n //最接近起点的点(我们使用这个点来决定我们是否延伸,这样有效避免了距离小于间距的一半时,但是距离却又大于设置参数时延伸时的尴尬!) 例如 | --|--------- 该例子不延伸到左边\r\n let index1 = FindMin(pmap, 0);\r\n let index2 = FindMin(pmap, endParam);\r\n\r\n let start = pmap[index1];\r\n let end = pmap[index2];\r\n\r\n if (start[0] < -1e-8)\r\n {\r\n cu.Extend(start[0]);\r\n hasExtend = true;\r\n }\r\n\r\n if (end[0] > (endParam + 1e-8))\r\n {\r\n cu.Extend(hasExtend ? cu.GetParamAtPoint(end[1]) : end[0]);\r\n hasExtend = true;\r\n\r\n pmap.splice(index2);//移除多余的交点参数\r\n }\r\n\r\n if (start[0] < -1e-8)\r\n pmap.splice(0, index1);//移除多余的交点参数\r\n\r\n if (hasExtend)//记录这个曲线被延伸了\r\n this.ExtendCurves.add(cu);\r\n }\r\n\r\n //有效的相交数据(用来切割)\r\n let intersectData = new Map<Curve, number[]>();\r\n for (let cu of breakCurves)\r\n intersectData.set(cu, []);\r\n\r\n //去除无效的交点 移除多余的交点参数\r\n for (let [c1, c2, pts] of intersect.intersect3)\r\n {\r\n let c1arr = intersectData.get(c1);\r\n let c2arr = intersectData.get(c2);\r\n\r\n for (let p of pts)\r\n {\r\n let c1param = c1.GetParamAtPoint(p);\r\n if (!c1.ParamOnCurve(c1param)) continue;\r\n\r\n let c2param = c2.GetParamAtPoint(p);\r\n\r\n if (!c2.ParamOnCurve(c2param)) continue;\r\n\r\n c1arr.push(c1param);\r\n c2arr.push(c2param);\r\n }\r\n }\r\n\r\n //打断\r\n for (let [cu, params] of intersectData)\r\n {\r\n params = params.filter(p => p > 1e-3 && p < 0.999);\r\n // let isArc = cu instanceof Arc;\r\n // if (isArc)\r\n // {\r\n // let param = cu.GetParamAtPoint2((cu as Arc).Center.add(YAxisN));\r\n // if (cu.ParamOnCurve(param))\r\n // params.push(param);//保证切割\r\n // }\r\n if (params.length)\r\n {\r\n arraySortByNumber(params);\r\n arrayRemoveDuplicateBySort(params, (e1, e2) => equaln(e1, e2, 1e-4));\r\n // if (equaln(params[params.length - 1], 1, 1e-4)) //已经filter 不再需要\r\n // params[params.length - 1] = 1;\r\n }\r\n\r\n let splitCurves = params.length === 0 ? [cu.Clone()] : cu.GetSplitCurves(params);\r\n\r\n // if (isArc && splitCurves.length > 1)//将短圆弧转换为直线 我们由上层业务代码决定何时转换 不在此转换\r\n // {\r\n // // for (let i = 0; i < splitCurves.length; i++)\r\n // // {\r\n // // let c = splitCurves[i] as Arc;\r\n // // if (c.Radius < 100) //不能歧视 否则轮廓就错了\r\n // // splitCurves[i] = new Line(c.StartPoint, c.EndPoint);\r\n // // }\r\n // }\r\n\r\n //记录关联关系\r\n this._Curve2SplitCurveMap.set(cu, splitCurves);\r\n for (let scu of splitCurves)\r\n this._SplitCurve2OrgCurveMap.set(scu, cu);\r\n }\r\n\r\n //分组(只有相交的部分才会在一个组)\r\n let parsed = new Set<Curve>();\r\n for (let cu of curves)\r\n {\r\n if (parsed.has(cu)) continue;\r\n parsed.add(cu);\r\n\r\n let group: Curve[] = [cu];\r\n\r\n for (let i = 0; i < group.length; i++)\r\n {\r\n let interMap = intersect.intersect.get(group[i]);\r\n if (!interMap) continue;\r\n for (let [ic] of interMap)\r\n {\r\n if (parsed.has(ic)) continue;\r\n parsed.add(ic);\r\n\r\n group.push(ic);\r\n }\r\n }\r\n\r\n if (group.length > 1)\r\n this.OrgCurveMapGroup.push(group);\r\n }\r\n }\r\n}\r\n\r\n//找到最接近某个参数的索引位置\r\nfunction FindMin(params: [number, Vector3][], closeToParam: number)\r\n{\r\n if (params.length < 2) return params.length - 1;\r\n\r\n let minDist = Infinity;\r\n let minIndex = -1;\r\n for (let i = 0; i < params.length; i++)\r\n {\r\n let absDist = Math.abs(params[i][0] - closeToParam);\r\n if (absDist < minDist)\r\n {\r\n minDist = absDist;\r\n minIndex = i;\r\n }\r\n }\r\n return minIndex;\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Box3, Vector3 } from \"three\";\r\nimport { arrayPushArray } from '../../../Common/ArrayExt';\r\nimport { CurveMap, Vertice } from \"../../../Geometry/CurveMap\";\r\nimport { AsVector2, SelectNearP, equalv3, midPoint } from \"../../../Geometry/GeUtils\";\r\nimport { CalcRouteAngle, RegionParse } from \"../../../Geometry/RegionParse\";\r\nimport { IntersectOption } from \"../../../GraphicsSystem/IntersectWith\";\r\nimport { EntityEncode2 } from \"../../../GraphicsSystem/OffsetPolyline\";\r\nimport { Contour } from \"../../Contour\";\r\nimport { Database } from '../../Database';\r\nimport { Arc } from \"../../Entity/Arc\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\nimport { Line } from \"../../Entity/Line\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { RoomWallBase } from \"../Entity/Wall/RoomWallBase\";\r\nimport { CurveTrim, CurveTrimArc, CurveTrimLine } from \"./CurveTrim\";\r\nimport { CreateGetCurveParam, GetCurveParam, GetLineParam } from './GetCurveParam';\r\nimport { RoomRegionParse } from './RoomRegionParse';\r\nimport { RoomWallExtendAndBreak } from \"./RoomWallExtendAndBreak\";\r\n\r\nconst SHOW_PERF = false;\r\nconst ROOM_WALL_INDEX_KEY = \"__ROOM_WALL_INDEX_KEY__\";\r\nconst SAVE_SP_KEY = \"__SAVE_SP__\";\r\nconst SAVE_EP_KEY = \"__SAVE_EP__\";\r\n\r\n/**\r\n * 户型分析服务:\r\n * 1.自动延伸墙\r\n * 2.合理的构建墙\r\n * 3.自动分析地板\r\n *\r\n * 墙体被分裂后合并(join line)\r\n *\r\n * TODO:\r\n * 删除重复的墙(例如 2个rec wall)\r\n * 增量更新 diff walls(始作俑者 1) -> dep walls(需要更新 2) ->dep's dep walls(需要被依赖 3) +[可能被影响到的wall 2(比如被切割的墙) (依赖墙 3)]\r\n * ->1.用盒子搜索范围依赖(盒子1级依赖)\r\n * ->2.用盒子扩大搜索范围依赖(盒子2级依赖)\r\n * ->正确的分析1级依赖 2级依赖 (或者不要分析? 直接用盒子来?)\r\n * ->分析\r\n * ->更新1级 2级 的墙\r\n */\r\nexport class RoomWallParse\r\n{\r\n\r\n static _CacheWallNodePoints: Vector3[] = [];\r\n static _CacheWallMaps: [RoomWallExtendAndBreak, CurveMap][] = [];\r\n static _CacheCurveWallMaps: Map<Curve, RoomWallBase> = new Map();\r\n static _CacheRoofs: Polyline[] = [];\r\n\r\n /**\r\n * @param [_ExtendsWalls=true] 更新墙体,在开图时不更新图纸\r\n * @param [_UpdateDb] 更新的图纸(新绘制Region)\r\n * @param [_IsCacheWallNodePoints] 需要把节点缓存下来?\r\n */\r\n constructor(private _ExtendsWalls: boolean, private _UpdateDb: Database, private _IsCacheWallNodePoints: boolean)\r\n {\r\n\r\n }\r\n\r\n /**\r\n * @param walls 需要解析的墙体列表\r\n * @param changeWalls 更新的墙体列表(如果提供 增量模式)\r\n */\r\n Parse(walls: RoomWallBase[], changeWalls: RoomWallBase[] = undefined)\r\n {\r\n if (this._IsCacheWallNodePoints)\r\n {\r\n RoomWallParse._CacheWallNodePoints = [];\r\n RoomWallParse._CacheWallMaps = [];\r\n RoomWallParse._CacheCurveWallMaps = new Map();\r\n RoomWallParse._CacheRoofs = [];\r\n }\r\n\r\n let regionPrase = new RoomRegionParse(this._UpdateDb);\r\n\r\n const GroupWalls = (walls: RoomWallBase[], fn: (wall: RoomWallBase) => number) =>\r\n {\r\n let map = new Map<number, RoomWallBase[]>();\r\n for (let w of walls)\r\n {\r\n if (w.Length < 1e-6)\r\n {\r\n // w.Erase();//删除空长度的墙\r\n\r\n //避免窗户0长度错误\r\n w.LeftCurves = [];\r\n w.RightCurves = [];\r\n w.LidCurves = [];\r\n continue;\r\n };\r\n\r\n let value = fn(w);\r\n let arr = map.get(value);\r\n if (!arr)\r\n {\r\n arr = [];\r\n map.set(value, arr);\r\n }\r\n arr.push(w);\r\n }\r\n return map;\r\n };\r\n\r\n //按Z轴区分\r\n let zgroupMap = GroupWalls(walls, w => Math.round(w.Z * 100));\r\n\r\n for (let [, walls] of zgroupMap)\r\n {\r\n this.PraseWallsFromSameFloor(walls, changeWalls);\r\n let roofs = regionPrase.Do(walls);\r\n\r\n if (this._IsCacheWallNodePoints)\r\n arrayPushArray(RoomWallParse._CacheRoofs, roofs);\r\n }\r\n\r\n regionPrase.End();\r\n }\r\n\r\n private PraseWallsFromSameFloor(walls: RoomWallBase[], changeWalls: RoomWallBase[] = undefined)\r\n {\r\n SHOW_PERF && console.time(\"尖角化+裁剪面\");\r\n //{墙}->{轴线} {轴线}->{墙}\r\n let wallCurveMap = new Map<RoomWallBase, Curve>();\r\n let curveWallMap = new Map<Curve, RoomWallBase>();\r\n\r\n let axisCurves = walls.map(wall =>\r\n {\r\n //清理\r\n wall.LeftCurves = [];\r\n wall.RightCurves = [];\r\n wall.LidCurves = [];\r\n wall.Region = undefined;\r\n\r\n let cu = wall.CenterAxisCurve;\r\n\r\n wallCurveMap.set(wall, cu);\r\n curveWallMap.set(cu, wall);\r\n\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheCurveWallMaps.set(cu, wall);\r\n return cu;\r\n });\r\n\r\n //打断数据\r\n let breakData = new RoomWallExtendAndBreak(axisCurves);\r\n\r\n if (this._ExtendsWalls)//墙体延伸\r\n for (let cu of breakData.ExtendCurves)\r\n {\r\n let wall = curveWallMap.get(cu);\r\n\r\n wall.StartPoint = cu.StartPoint;\r\n wall.EndPoint = cu.EndPoint;\r\n }\r\n\r\n let orgCurveLeftMap = new Map<Curve, Curve>();\r\n let orgCurveRightMap = new Map<Curve, Curve>();\r\n\r\n //{打断后的曲线}指向{新生成曲线}\r\n let curveLeftCurveMap: Map<Curve, Curve> = new Map;\r\n let curveRightCurveMap: Map<Curve, Curve> = new Map;\r\n //新生成的曲线的补盖子\r\n let curveStartLidCurveMap: Map<Curve, Curve> = new Map;\r\n let curveEndLidCurveMap: Map<Curve, Curve> = new Map;\r\n //半盖\r\n let curveStarLeftHalfLidCurveMap: Map<Curve, Curve> = new Map;\r\n let curveStarRightHalfLidCurveMap: Map<Curve, Curve> = new Map;\r\n let curveEndLeftHalfLidCurveMap: Map<Curve, Curve> = new Map;\r\n let curveEndRightHalfLidCurveMap: Map<Curve, Curve> = new Map;\r\n\r\n //尖角连接\r\n for (let groupCurves of breakData.OrgCurveMapGroup)\r\n {\r\n let curveMap = new CurveMap(4, true);\r\n\r\n for (let orgCurve of groupCurves)\r\n {\r\n let orgWall = curveWallMap.get(orgCurve);\r\n let splitCurves = breakData._Curve2SplitCurveMap.get(orgCurve);\r\n for (let cu of splitCurves)\r\n {\r\n //TODO:墙体重复时, 使用大厚度的墙?\r\n if (curveMap.AddCurveToMap(cu, cu instanceof Arc, true, true) || true)//避免重叠墙体构建错误 我们设置了true 参考用例 `重叠墙分析丢失墙体`\r\n {\r\n //左右线\r\n let leftCurve = cu.GetOffsetCurves(-orgWall.Thickness * 0.5)[0];\r\n let rightCurve = cu.GetOffsetCurves(orgWall.Thickness * 0.5)[0];\r\n\r\n leftCurve.ColorIndex = 2;\r\n rightCurve.ColorIndex = 3;\r\n\r\n curveLeftCurveMap.set(cu, leftCurve);\r\n curveRightCurveMap.set(cu, rightCurve);\r\n }\r\n }\r\n }\r\n\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheWallMaps.push([breakData, curveMap]);\r\n\r\n //逆时针\r\n for (let v of curveMap._Vertices)\r\n {\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheWallNodePoints.push(v.position);\r\n\r\n if (v.routes.length === 0) continue;\r\n if (v.routes.length < 2)\r\n {\r\n let r = v.routes[0];\r\n let preCurve = curveLeftCurveMap.get(r.curve);//左边的\r\n let nowCurve = curveRightCurveMap.get(r.curve);//右边的\r\n\r\n let sp = r.isReverse ? preCurve.EndPoint : preCurve.StartPoint;\r\n let ep = r.isReverse ? nowCurve.EndPoint : nowCurve.StartPoint;\r\n let l = new Line(sp, ep);\r\n l.ColorIndex = 6;\r\n if (r.isReverse)\r\n curveEndLidCurveMap.set(r.curve, new Line(ep, sp));\r\n else\r\n curveStartLidCurveMap.set(r.curve, new Line(sp, ep));\r\n continue;\r\n };\r\n\r\n let minLength = Infinity;\r\n for (let r of v.routes)\r\n if (r.length < minLength) minLength = r.length;\r\n for (let r of v.routes)\r\n CalcRouteAngle(r, minLength * 0.2);\r\n v.routes.sort((r1, r2) => r1.an - r2.an);\r\n\r\n //倒角\r\n let pre = v.routes.length - 1;\r\n for (let i = 0; i < v.routes.length; i++)\r\n {\r\n let preR = v.routes[pre];\r\n let nowR = v.routes[i];\r\n\r\n let preCurve = preR.isReverse ? curveRightCurveMap.get(preR.curve) : curveLeftCurveMap.get(preR.curve);//左边的\r\n let nowCurve = nowR.isReverse ? curveLeftCurveMap.get(nowR.curve) : curveRightCurveMap.get(nowR.curve);//右边的\r\n\r\n let sp = preR.isReverse ? preCurve.EndPoint : preCurve.StartPoint;\r\n let ep = nowR.isReverse ? nowCurve.EndPoint : nowCurve.StartPoint;\r\n if (equalv3(sp, ep))//直连\r\n {\r\n pre = i;\r\n continue;\r\n }\r\n\r\n let iPam = preCurve.IntersectWith2(nowCurve, IntersectOption.ExtendBoth);\r\n let iPts = iPam.map(p => p.pt);\r\n let tPts = iPam.filter(p => preCurve.ParamOnCurve(p.thisParam) && nowCurve.ParamOnCurve(p.argParam)).map(p => p.pt);\r\n\r\n let code = EntityEncode2(preCurve, nowCurve);\r\n let tp: Vector3;\r\n if (code === 1)//都是直线\r\n {\r\n if (tPts.length > 0)\r\n {\r\n tp = iPts[0];\r\n\r\n //奇怪的行为,避免它\r\n if (equalv3(tp, preCurve.StartPoint, 1e-3)\r\n || equalv3(tp, preCurve.EndPoint, 1e-3)\r\n || equalv3(tp, nowCurve.StartPoint, 1e-3)\r\n || equalv3(tp, nowCurve.EndPoint, 1e-3)\r\n )\r\n tp = undefined;\r\n }\r\n else\r\n {\r\n if (iPts.length > 0)\r\n {\r\n //fuck 没有括号导致的错误\r\n //尖角时才延伸,否则补盖 (延伸或者在线上)\r\n let isExtend = (preR.isReverse ? iPam[0].thisParam > 0 : iPam[0].thisParam < 1)\r\n && (nowR.isReverse ? iPam[0].argParam > 0 : iPam[0].argParam < 1);\r\n\r\n let distSq = iPts[0].distanceToSquared(v.position);\r\n if (isExtend && distSq < 500 * 500)//尖角\r\n tp = iPts[0];\r\n else\r\n {\r\n //钝角 直接连接 在下面的代码连接\r\n // console.log();\r\n }\r\n }\r\n }\r\n }\r\n else//直线与圆弧\r\n {\r\n if (tPts.length > 0) //ipts = 1 or ipts = 2\r\n tp = SelectNearP(tPts, v.position);\r\n else\r\n {\r\n if (iPts.length === 0)\r\n {\r\n //直接连接 在下面的代码连接\r\n }\r\n else\r\n {\r\n let p: Vector3;\r\n\r\n if (code === 2 && iPts.length === 2)\r\n {\r\n let preArc = preCurve as Arc;\r\n let minArc = new Arc(preArc.Center, preArc.Radius,\r\n preR.isReverse ? preArc.EndAngle : preArc.StartAngle,\r\n 0,\r\n preR.isReverse ? preArc.IsClockWise : !preArc.IsClockWise\r\n );\r\n\r\n let p1 = iPts[0];\r\n let a1 = minArc.GetAngleAtPoint(p1);\r\n let anAll1 = preArc.ParamOnCurve(preArc.GetParamAtAngle(a1)) ? Infinity : minArc.ComputeAnlge(a1);\r\n\r\n let p2 = iPts[1];\r\n let a2 = minArc.GetAngleAtPoint(p2);\r\n let anAll2 = preArc.ParamOnCurve(preArc.GetParamAtAngle(a2)) ? Infinity : minArc.ComputeAnlge(a2);\r\n\r\n if (anAll2 < anAll1)\r\n {\r\n p = p2;\r\n iPam[0] = iPam[1];\r\n }\r\n else\r\n p = p1;\r\n }\r\n else\r\n {\r\n p = SelectNearP(iPts, v.position);\r\n if (p === iPts[1])\r\n iPam[0] = iPam[1];\r\n }\r\n\r\n let isExtend = (preR.isReverse ? iPam[0].thisParam > 0 : iPam[0].thisParam < 1)\r\n && (nowR.isReverse ? iPam[0].argParam > 0 : iPam[0].argParam < 1);\r\n\r\n //tp 必须不能破坏圆弧,否则造成裁剪错误\r\n if (!isExtend || p.distanceToSquared(v.position) > 500 * 500)\r\n p = undefined;\r\n else//预习 如果破坏的圆弧轮廓,则不允许连接\r\n {\r\n let line: Line;\r\n if (preCurve instanceof Arc)\r\n {\r\n let tempC = preCurve.Clone();\r\n if (preR.isReverse) tempC.EndPoint = p;\r\n else tempC.StartPoint = p;\r\n\r\n line = new Line(v.position.clone(), p);\r\n let ipts = line.IntersectWith(tempC, IntersectOption.ExtendNone);\r\n if (ipts.length === 2)\r\n p = undefined;\r\n }\r\n\r\n if (p && nowCurve instanceof Arc)\r\n {\r\n let tempC = nowCurve.Clone();\r\n if (nowR.isReverse) tempC.EndPoint = p;\r\n else tempC.StartPoint = p;\r\n\r\n if (!line) line = new Line(v.position.clone(), p);\r\n let ipts = line.IntersectWith(tempC, IntersectOption.ExtendNone);\r\n if (ipts.length === 2)\r\n p = undefined;\r\n }\r\n }\r\n\r\n tp = p;\r\n }\r\n }\r\n }\r\n\r\n if (tp)\r\n {\r\n if (preR.isReverse) preCurve[SAVE_EP_KEY] = tp;\r\n else preCurve[SAVE_SP_KEY] = tp;\r\n\r\n if (nowR.isReverse) nowCurve[SAVE_EP_KEY] = tp;\r\n else nowCurve[SAVE_SP_KEY] = tp;\r\n }\r\n else\r\n {\r\n //如果两线(直线)平行 无交点时,应该只补厚墙的盖子\r\n if (code === 1 && iPts.length === 0)//&& false 尽管是false 这里的代码还是成立的 没有禁用这个代码是因为能带来一丢丢性能提升\r\n {\r\n let w1 = curveWallMap.get(breakData._SplitCurve2OrgCurveMap.get(preR.curve));\r\n let w2 = curveWallMap.get(breakData._SplitCurve2OrgCurveMap.get(nowR.curve));\r\n\r\n let sp = preR.isReverse ? preCurve.EndPoint : preCurve.StartPoint;\r\n let ep = nowR.isReverse ? nowCurve.EndPoint : nowCurve.StartPoint;\r\n\r\n if (w1.Thickness > w2.Thickness)\r\n {\r\n if (preR.isReverse)\r\n curveEndLeftHalfLidCurveMap.set(preR.curve, new Line(sp, ep));\r\n else\r\n curveStarLeftHalfLidCurveMap.set(preR.curve, new Line(sp, ep));\r\n }\r\n else\r\n {\r\n if (nowR.isReverse)\r\n curveEndRightHalfLidCurveMap.set(nowR.curve, new Line(sp, ep));\r\n else\r\n curveStarRightHalfLidCurveMap.set(nowR.curve, new Line(sp, ep));\r\n }\r\n }\r\n // else if (equalv3(sp, ep, 10)) //在sp ep接近时,我们直接连接sp ep 会更好? 看起来是没必要的\r\n // {\r\n // if (preR.isReverse)\r\n // curveEndLeftHalfLidCurveMap.set(preR.curve, new Line(ep, sp));\r\n // else\r\n // curveStarLeftHalfLidCurveMap.set(preR.curve, new Line(sp, ep));\r\n // }\r\n else\r\n {\r\n if (preR.isReverse)\r\n curveEndLeftHalfLidCurveMap.set(preR.curve, new Line(sp, v.position.clone()));//yep\r\n else\r\n curveStarLeftHalfLidCurveMap.set(preR.curve, new Line(sp, v.position.clone()));//yep\r\n\r\n if (nowR.isReverse)\r\n curveEndRightHalfLidCurveMap.set(nowR.curve, new Line(v.position.clone(), ep));//yep\r\n else\r\n curveStarRightHalfLidCurveMap.set(nowR.curve, new Line(v.position.clone(), ep));//yep\r\n }\r\n }\r\n\r\n pre = i;\r\n }\r\n }\r\n\r\n //延迟连接\r\n for (let orgCurve of groupCurves)\r\n {\r\n let splitCurves = breakData._Curve2SplitCurveMap.get(orgCurve);\r\n for (let cu of splitCurves)\r\n {\r\n let left = curveLeftCurveMap.get(cu);\r\n let right = curveRightCurveMap.get(cu);\r\n\r\n UpdateStartEndPoint(left);\r\n UpdateStartEndPoint(right);\r\n }\r\n }\r\n\r\n class RegionParse2 extends RegionParse\r\n {\r\n protected override GenerateVerticeMap(curveList: Curve[]): Vertice[]\r\n {\r\n return curveMap.Stands;\r\n }\r\n }\r\n\r\n //现在已经不再需要移除小房间了\r\n // //移除过小房间的内墙(空间过小 或者 没有空间)\r\n // let regionData = new RegionParse2(undefined);\r\n // const RemoveSmallSpaceInteriorWall = (routes: Route[]) =>\r\n // {\r\n // let polyline = Polyline.Combine(routes.map(r => r.curve), 1e-3);\r\n // let space = polyline.GetOffsetCurves(-120)[0];\r\n\r\n // if (!space || space.Area < 1e4)//0.1平米\r\n // {\r\n // for (let r of routes)\r\n // {\r\n // let cu: Curve;\r\n // //因为是逆时针 所以我们删除右边的线\r\n // if (r.isReverse)\r\n // {\r\n // cu = curveLeftCurveMap.get(r.curve);\r\n // curveLeftCurveMap.delete(r.curve);\r\n // }\r\n // else\r\n // {\r\n // cu = curveRightCurveMap.get(r.curve);\r\n // curveRightCurveMap.delete(r.curve);\r\n // }\r\n\r\n // //还要删除补的盖子\r\n // if (cu)\r\n // {\r\n // curveStarLeftHalfLidCurveMap.delete(cu);\r\n // curveEndLeftHalfLidCurveMap.delete(cu);\r\n\r\n // curveStartLidCurveMap.delete(cu);\r\n // curveEndLidCurveMap.delete(cu);\r\n // }\r\n // }\r\n // }\r\n // };\r\n // regionData.RegionsInternal.forEach(RemoveSmallSpaceInteriorWall);\r\n // regionData.RegionsOutline.forEach(RemoveSmallSpaceInteriorWall);\r\n }\r\n\r\n //构建裁剪面\r\n let trimContours: Contour[] = [];\r\n let orgCurveParams: GetCurveParam[] = [];\r\n for (let i = 0; i < axisCurves.length; i++)\r\n {\r\n let orgCurve = axisCurves[i];\r\n orgCurve[ROOM_WALL_INDEX_KEY] = i;\r\n let parse = CreateGetCurveParam(orgCurve);\r\n orgCurveParams.push(parse);\r\n\r\n let splitCurves = breakData._Curve2SplitCurveMap.get(orgCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n\r\n let leftStartParam = 1, leftEndParam = 0,\r\n rightStartParam = 1, rightEndParam = 0;\r\n if (!splitCurves)\r\n {\r\n //左右线\r\n let leftCurve = orgCurve.GetOffsetCurves(-orgWall.Thickness * 0.5)[0];\r\n let rightCurve = orgCurve.GetOffsetCurves(orgWall.Thickness * 0.5)[0];\r\n\r\n leftCurve.ColorIndex = 2;\r\n rightCurve.ColorIndex = 3;\r\n\r\n curveLeftCurveMap.set(orgCurve, leftCurve);\r\n curveRightCurveMap.set(orgCurve, rightCurve);\r\n\r\n curveStartLidCurveMap.set(orgCurve, new Line(leftCurve.StartPoint, rightCurve.StartPoint));\r\n curveEndLidCurveMap.set(orgCurve, new Line(rightCurve.EndPoint, leftCurve.EndPoint));\r\n\r\n breakData._SplitCurve2OrgCurveMap.set(orgCurve, orgCurve);//直接定位到自己\r\n\r\n //更新 孤独的墙也应该被切割,所以移除这个代码\r\n // orgWall.Region = undefined;\r\n // orgWall.LeftCurves = undefined;\r\n // orgWall.RightCurves = undefined;\r\n // orgWall.LidCurves = undefined;\r\n\r\n if (this._IsCacheWallNodePoints)\r\n RoomWallParse._CacheWallNodePoints.push(orgCurve.StartPoint, orgCurve.EndPoint);\r\n\r\n // continue;//孤独的墙(TODO:) //update:孤独的墙也应该裁剪被人\r\n leftStartParam = rightStartParam = 0;\r\n leftEndParam = rightEndParam = 1;\r\n }\r\n else\r\n {\r\n for (let cu of splitCurves)\r\n {\r\n let left = curveLeftCurveMap.get(cu);\r\n let right = curveRightCurveMap.get(cu);\r\n\r\n if (left)\r\n {\r\n leftStartParam = Math.min(leftStartParam, parse.GetParamAtPoint(left.StartPoint));\r\n leftEndParam = Math.max(leftEndParam, parse.GetParamAtPoint(left.EndPoint));\r\n }\r\n\r\n if (right)\r\n {\r\n rightStartParam = Math.min(rightStartParam, parse.GetParamAtPoint(right.StartPoint));\r\n rightEndParam = Math.max(rightEndParam, parse.GetParamAtPoint(right.EndPoint));\r\n }\r\n }\r\n\r\n if (leftStartParam > leftEndParam)\r\n {\r\n leftStartParam = 0;\r\n leftEndParam = 1;\r\n }\r\n if (rightStartParam > rightEndParam)\r\n {\r\n rightStartParam = 0;\r\n rightEndParam = 1;\r\n }\r\n }\r\n\r\n let sp = orgCurve.StartPoint;\r\n let ep = orgCurve.EndPoint;\r\n if (orgCurve instanceof Line)\r\n {\r\n let lparse = parse as GetLineParam;\r\n let p1 = parse.GetPointAtParam(leftStartParam);\r\n let p2 = parse.GetPointAtParam(leftEndParam);\r\n lparse.OffsetPoint(p1, orgWall.Thickness * 0.5);\r\n lparse.OffsetPoint(p2, orgWall.Thickness * 0.5);\r\n\r\n let p3 = lparse.GetPointAtParam(rightStartParam);\r\n let p4 = lparse.GetPointAtParam(rightEndParam);\r\n lparse.OffsetPoint(p3, orgWall.Thickness * -0.5);\r\n lparse.OffsetPoint(p4, orgWall.Thickness * -0.5);\r\n\r\n\r\n let pts: Vector3[] = [];\r\n if (!equalv3(midPoint(p1, p3), sp))\r\n pts.push(sp);\r\n\r\n pts.push(p1, p2);\r\n\r\n if (!equalv3(midPoint(p2, p4), ep))\r\n pts.push(ep);\r\n\r\n pts.push(p4, p3);\r\n\r\n let pl = new Polyline(pts.map(p => { return { pt: AsVector2(p), bul: 0 }; }));\r\n pl.CloseMark = true;\r\n pl.Z = p1.z;\r\n\r\n let contour = Contour.CreateContour(pl, false);\r\n\r\n // let reg = Region.CreateFromCurves([contour.Curve]);\r\n // if (reg)\r\n // TestDraw(reg);\r\n\r\n trimContours.push(contour);\r\n orgWall.Region = pl;\r\n\r\n orgCurveLeftMap.set(orgCurve, new Line(p1, p2));\r\n orgCurveRightMap.set(orgCurve, new Line(p3, p4));\r\n }\r\n else\r\n {\r\n //左右线\r\n let leftCurve = orgCurve.GetOffsetCurves(-orgWall.Thickness * 0.5)[0];\r\n let rightCurve = orgCurve.GetOffsetCurves(orgWall.Thickness * 0.5)[0];\r\n\r\n leftCurve.EndAngle = orgCurve.GetAngleAtParam(leftEndParam);\r\n leftCurve.StartAngle = orgCurve.GetAngleAtParam(leftStartParam);\r\n\r\n rightCurve.EndAngle = orgCurve.GetAngleAtParam(rightEndParam);\r\n rightCurve.StartAngle = orgCurve.GetAngleAtParam(rightStartParam);\r\n\r\n let curves: (Line | Arc)[] = [];\r\n let [p1, p2] = [leftCurve.StartPoint, leftCurve.EndPoint];\r\n let [p3, p4] = [rightCurve.StartPoint, rightCurve.EndPoint];\r\n\r\n if (!equalv3(midPoint(p1, p3), sp))\r\n curves.push(new Line(p3, sp), new Line(sp, p1));\r\n else\r\n curves.push(new Line(p1, p3));\r\n curves.push(leftCurve);\r\n if (!equalv3(midPoint(p2, p4), ep))\r\n curves.push(new Line(p2, ep), new Line(ep, p4));\r\n else\r\n curves.push(new Line(p2, p4));\r\n curves.push(rightCurve);\r\n\r\n let contour = Contour.CreateContour(curves, false);\r\n if (!contour)\r\n {\r\n // for (let i = 0; i < curves.length; i++)\r\n // TestDraw(curves[i], i + 1);\r\n contour = Contour.CreateContour(new Polyline().RectangleFrom2Pt(new Vector3, new Vector3(100, 100)), false);\r\n console.error(\"生成轮廓失败\");\r\n }\r\n else\r\n {\r\n // let reg = Region.CreateFromCurves([contour.Curve]);\r\n // if (reg)\r\n // TestDraw(reg);\r\n }\r\n trimContours.push(contour);\r\n orgWall.Region = contour.Curve as Polyline;\r\n\r\n orgCurveLeftMap.set(orgCurve, leftCurve);\r\n orgCurveRightMap.set(orgCurve, rightCurve);\r\n }\r\n }\r\n\r\n // jig.End();\r\n\r\n SHOW_PERF && console.timeEnd(\"尖角化+裁剪面\");\r\n\r\n SHOW_PERF && console.time(\"墙体裁剪\");\r\n\r\n this.GenFB(trimContours);\r\n\r\n enum CurveType\r\n {\r\n Left = 0,\r\n Right = 1,\r\n StartLid = 2,\r\n EndLid = 3,\r\n }\r\n\r\n const Trim = (splitCurve: Curve, offsetCurve: Curve, index: number, type: CurveType) =>\r\n {\r\n if (offsetCurve.Length < 1e-3) return [];\r\n\r\n let trim: CurveTrim;\r\n if (offsetCurve instanceof Line)\r\n {\r\n let getParam = orgCurveParams[index] as GetLineParam;\r\n let dir: Vector3;\r\n if (type === CurveType.Left) dir = getParam.Direction;\r\n else if (type === CurveType.Right) dir = getParam.NegDirection;\r\n else if (type === CurveType.StartLid) dir = getParam.LeftDir;\r\n else if (type === CurveType.EndLid) dir = getParam.RightDir;\r\n\r\n if (!dir)\r\n {\r\n dir = offsetCurve.GetFirstDeriv(0).normalize().negate();\r\n }\r\n\r\n trim = new CurveTrimLine(offsetCurve, dir);\r\n }\r\n else\r\n trim = new CurveTrimArc(offsetCurve as Arc, type !== CurveType.Left);\r\n\r\n //需要更快的判断直线会不会被轮廓切割?\r\n\r\n this.fb.search(trim._Box.min.x - 1e-2, trim._Box.min.y - 1e-2, trim._Box.max.x + 1e-2, trim._Box.max.y + 1e-2, (id =>\r\n {\r\n // if (id !== index) //裁剪的好处是有些细的盖子将会消失\r\n trim.TrimBy(trimContours[id], this.boxs[id], index > id);\r\n return false;\r\n }));\r\n\r\n let curves = trim.Curves;\r\n return curves as (Arc | Line)[];\r\n };\r\n\r\n for (let [orgCurve, offsetCurve] of orgCurveLeftMap)\r\n {\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LeftCurves, Trim(orgCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.Left));\r\n }\r\n for (let [orgCurve, offsetCurve] of orgCurveRightMap)\r\n {\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.RightCurves, Trim(orgCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.Right));\r\n }\r\n for (let [splitCurve, offsetCurve] of curveStartLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.StartLid));\r\n }\r\n for (let [splitCurve, offsetCurve] of curveEndLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.EndLid));\r\n }\r\n for (let [splitCurve, offsetCurve] of curveStarLeftHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.StartLid));\r\n }\r\n for (let [splitCurve, offsetCurve] of curveStarRightHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.StartLid));\r\n }\r\n for (let [splitCurve, offsetCurve] of curveEndLeftHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.EndLid));\r\n }\r\n for (let [splitCurve, offsetCurve] of curveEndRightHalfLidCurveMap)\r\n {\r\n let orgCurve = breakData._SplitCurve2OrgCurveMap.get(splitCurve);\r\n let orgWall = curveWallMap.get(orgCurve);\r\n arrayPushArray(orgWall.LidCurves, Trim(splitCurve, offsetCurve, orgCurve[ROOM_WALL_INDEX_KEY], CurveType.EndLid));\r\n }\r\n\r\n //Update:2022-04-28 我们不再分裂圆弧,所以也不再需要合并线\r\n //区域分析需要破裂的圆弧,这里暂时不合并墙(在room region parse中合并)\r\n // for (let wall of walls)\r\n // {\r\n // wall.LeftCurves && arrayRemoveDuplicateBySort(wall.LeftCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n // wall.RightCurves && arrayRemoveDuplicateBySort(wall.RightCurves, (cu1: Curve, cu2: Curve) => cu1.Join(cu2) === Status.True);\r\n // }\r\n\r\n SHOW_PERF && console.timeEnd(\"墙体裁剪\");\r\n }\r\n\r\n fb: Flatbush;\r\n boxs: Box3[];\r\n GenFB(trimContours: Contour[])\r\n {\r\n if (trimContours.length === 0) return;\r\n\r\n let fb = new Flatbush(trimContours.length);\r\n this.boxs = [];\r\n\r\n let v = new Vector3(1e-2, 1e-2);\r\n for (let con of trimContours)\r\n {\r\n let box = con.BoundingBox;\r\n box.expandByVector(v);\r\n fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n this.boxs.push(box);\r\n }\r\n fb.finish();\r\n\r\n this.fb = fb;\r\n }\r\n\r\n}\r\n\r\nfunction UpdateStartEndPoint(curve: Curve)\r\n{\r\n let sp = curve[SAVE_SP_KEY];\r\n let ep = curve[SAVE_EP_KEY];\r\n\r\n if (sp && ep)\r\n {\r\n let param1 = curve.GetParamAtPoint(sp);\r\n let param2 = curve.GetParamAtPoint(ep);\r\n\r\n if (curve.ParamOnCurve(param1) && curve.ParamOnCurve(param2) && param1 > param2)\r\n [sp, ep] = [ep, sp];\r\n }\r\n if (sp)\r\n curve.StartPoint = sp;\r\n if (ep)\r\n curve.EndPoint = ep;\r\n}\r\n","import { BufferGeometry, Face3, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, LineSegments, MathUtils, Matrix3, Mesh, Object3D, ShapeUtils, Line as TLine, Vector2, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { HostApplicationServices } from \"../../../../ApplicationServices/HostApplicationServices\";\r\nimport { arrayPushArray } from \"../../../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { ObjectSnapMode } from \"../../../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { SubtractRange, Tape } from \"../../../../Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2\";\r\nimport { SplitArcParams, SplitCurvePoints } from \"../../../../Geometry/ExtrudeMeshGeomBuilder/SplitCurveParams\";\r\nimport { AsVector2, AsVector3, ZeroVec, clampRad, equaln, updateGeometry } from \"../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../CADFactory\";\r\nimport { CADFiler } from \"../../../CADFiler\";\r\nimport { Arc } from \"../../../Entity/Arc\";\r\nimport { Curve } from \"../../../Entity/Curve\";\r\nimport { Line } from \"../../../Entity/Line\";\r\nimport { Polyline } from \"../../../Entity/Polyline\";\r\nimport { ObjectId } from \"../../../ObjectId\";\r\nimport { PhysicalMaterialRecord } from \"../../../PhysicalMaterialRecord\";\r\nimport { GetArcParam, GetLineParam } from \"../../ParseService/GetCurveParam\";\r\nimport { CURVE_FACE_TYPE_KEY, CURVE_MESH_NAMES, RoomWallBase, WallFaceType, applyMixins } from \"./RoomWallBase\";\r\nimport { WallSnapMode } from \"./WallSnapMode\";\r\n\r\n@Factory\r\nexport class RoomWallArc extends RoomWallBase\r\n{\r\n constructor(_Center: Vector3 = new Vector3(),\r\n private _Radius = 0.1,\r\n private _StartAngle = 0.1,\r\n private _EndAngle = 0.1,\r\n /**\r\n * 曲线为顺时针\r\n */\r\n private _Clockwise = true,\r\n _Thickness = 120,\r\n _Height = 2700,\r\n\r\n )\r\n {\r\n super();\r\n this._Matrix.setPosition(_Center);\r\n this._StartAngle = clampRad(_StartAngle);\r\n this._EndAngle = clampRad(_EndAngle);\r\n this.Thickness = _Thickness;\r\n this.Height = _Height;\r\n }\r\n\r\n private _LeftCurveSign: Map<number, number> = new Map();\r\n private _RightCurveSign: Map<number, number> = new Map();\r\n private _LidCurveSign: Map<number, number> = new Map();\r\n\r\n //中心轴线\r\n override get CenterAxisCurve(): Arc | Line\r\n {\r\n if (this._Radius < (this.Thickness * 0.6) || Math.abs(this.Bul) < 0.0015)\r\n return new Line(this.StartPoint, this.EndPoint);\r\n let arc = new Arc(\r\n ZeroVec,\r\n this._Radius,\r\n this._StartAngle,\r\n this._EndAngle,\r\n this._Clockwise\r\n );\r\n arc.OCSNoClone.copy(this.OCSNoClone);\r\n return arc;\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform: Matrix3\r\n ): Vector3[]\r\n {\r\n let pts = [];\r\n pts = pts.concat(Arc.prototype.GetObjectSnapPoints.call(this, snapMode, pickPoint, lastPoint, viewXform));\r\n const CurveSnap = (curve: Curve) =>\r\n {\r\n let bakZ = curve.Z;\r\n //底部线\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n //顶部线\r\n curve.Z += this._Height;\r\n arrayPushArray(pts, curve.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n curve.Z = bakZ;\r\n\r\n let spep = [curve.StartPoint, curve.EndPoint];\r\n for (let p of spep)\r\n {\r\n let l = new Line(p, p.clone().setZ(p.z + this._Height));\r\n arrayPushArray(pts, l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n };\r\n\r\n if (this.LeftCurves && (RoomWallBase.SnapMode & WallSnapMode.Out) > 0)\r\n {\r\n this.LeftCurves.forEach(CurveSnap);\r\n this.RightCurves.forEach(CurveSnap);\r\n this.LidCurves.forEach(CurveSnap);\r\n }\r\n\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Array<Vector3>\r\n {\r\n let pts = [\r\n this.StartPoint,\r\n this.GetPointAtParam(0.5),\r\n this.EndPoint,\r\n this.Center.clone(),\r\n ];\r\n let count = pts.length;\r\n\r\n for (let i = 0; i < count; i++)\r\n pts.push(pts[i].clone().setZ(pts[i].z + this._Height));\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexList: Array<number>, vec: Vector3)\r\n {\r\n if (indexList.length > 0)\r\n {\r\n let index = indexList[0];\r\n if (index >= 4) index -= 4;\r\n Arc.prototype.MoveGripPoints.call(this, [index], vec);\r\n }\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n return Arc.prototype.GetStretchPoints.call(this);\r\n }\r\n MoveStretchPoints(indexList: number[], vec: Vector3): void\r\n {\r\n return Arc.prototype.MoveStretchPoints.call(this, indexList, vec);\r\n }\r\n\r\n //#region //绘制\r\n\r\n\r\n UpdateDrawGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n this._EdgeGeometry.dispose();\r\n this._EdgeGeometry = undefined;\r\n if (this._MeshGeometry)\r\n this._MeshGeometry.dispose();\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n ClearDraw(): this\r\n {\r\n this.UpdateDrawGeometry();\r\n return super.ClearDraw();\r\n }\r\n\r\n private _EdgeGeometry: BufferGeometry;\r\n private _MeshGeometry: Geometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry) return this._EdgeGeometry;\r\n\r\n for (let hole of this.Holes)\r\n if (hole.StartParam > hole.EndParam)\r\n [hole.StartParam, hole.EndParam] = [hole.EndParam, hole.StartParam];\r\n\r\n let pts: Vector3[];\r\n if (!this.LeftCurves)\r\n {\r\n let sign = this._Clockwise ? -1 : 1;\r\n\r\n if (this.Length > 0.1)\r\n {\r\n let left = new Arc(ZeroVec, this._Radius - sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n let right = new Arc(ZeroVec, this._Radius + sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n\r\n let leftPts = left.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let rightPts = right.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n\r\n let leftPts2 = leftPts.map(p => p.clone().setZ(this._Height));\r\n let rightPts2 = rightPts.map(p => p.clone().setZ(this._Height));\r\n\r\n pts = [\r\n leftPts[0], leftPts[0].clone().setZ(this._Height),\r\n leftPts[leftPts.length - 1], leftPts[leftPts.length - 1].clone().setZ(this._Height),\r\n\r\n rightPts[0], rightPts[0].clone().setZ(this._Height),\r\n rightPts[rightPts.length - 1], rightPts[rightPts.length - 1].clone().setZ(this._Height),\r\n\r\n leftPts.shift()];\r\n\r\n for (let p of leftPts) pts.push(p, p);\r\n rightPts.reverse();\r\n for (let p of rightPts) pts.push(p, p);\r\n pts.push(pts[0]);\r\n\r\n //顶部\r\n pts.push(leftPts2.shift());\r\n for (let p of leftPts2) pts.push(p, p);\r\n rightPts2.reverse();\r\n for (let p of rightPts2) pts.push(p, p);\r\n }\r\n else\r\n pts = [];\r\n }\r\n else\r\n {\r\n pts = [];\r\n let inv = this.OCSInv;\r\n const DrawCurve = (curve: Curve, _leftRanges: [number, number][], _rightRanges: [number, number][]) =>\r\n {\r\n if (curve instanceof Line)\r\n {\r\n let p1 = curve.StartPoint.applyMatrix4(inv);\r\n let p2 = curve.EndPoint.applyMatrix4(inv);\r\n pts.push(p1, p2);\r\n\r\n for (let range of _leftRanges)\r\n pts.push(p1.clone().setZ(range[0]), p1.clone().setZ(range[1]));\r\n for (let range of _rightRanges)\r\n pts.push(p2.clone().setZ(range[0]), p2.clone().setZ(range[1]));\r\n\r\n pts.push(p1.clone().setZ(this._Height), p2.clone().setZ(this._Height));\r\n }\r\n else//arc\r\n {\r\n let cpts = curve.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let topPts = cpts.map(p => p.clone().setZ(this._Height));\r\n\r\n //底部\r\n pts.push(cpts[0]);\r\n for (let i = 1; i < cpts.length - 1; i++)\r\n {\r\n let p = cpts[i];\r\n pts.push(p, p);\r\n }\r\n pts.push(cpts[cpts.length - 1]);\r\n\r\n //顶部\r\n pts.push(topPts[0]);\r\n for (let i = 1; i < topPts.length - 1; i++)\r\n {\r\n let p = topPts[i];\r\n pts.push(p, p);\r\n }\r\n pts.push(topPts[topPts.length - 1]);\r\n\r\n //竖线\r\n for (let range of _leftRanges)\r\n pts.push(cpts[0].clone().setZ(range[0]), cpts[0].clone().setZ(range[1]));\r\n for (let range of _rightRanges)\r\n pts.push(cpts[cpts.length - 1].clone().setZ(range[0]), cpts[cpts.length - 1].clone().setZ(range[1]));\r\n }\r\n };\r\n\r\n let lidRanges: [number, number][] = [[0, this._Height]];\r\n let leftRanges = lidRanges;\r\n let rightRanges = lidRanges;\r\n for (let hole of this.Holes)\r\n {\r\n if (equaln(hole.StartParam, 0))\r\n {\r\n let newLeftRanges = [];\r\n for (let range of leftRanges)\r\n arrayPushArray(newLeftRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n leftRanges = newLeftRanges;\r\n }\r\n\r\n if (equaln(hole.EndParam, 1))\r\n {\r\n let newRightRanges = [];\r\n for (let range of rightRanges)\r\n arrayPushArray(newRightRanges, SubtractRange(range[0], range[1], hole.Bottom, hole.Top, 1e5));\r\n rightRanges = newRightRanges;\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.LeftCurves.length; i++)\r\n {\r\n let curve = this.LeftCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.LeftCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.RightCurves.length; i++)\r\n {\r\n let curve = this.RightCurves[i];\r\n DrawCurve(curve, i === 0 ? leftRanges : lidRanges, (i === this.RightCurves.length - 1) ? rightRanges : lidRanges);\r\n }\r\n for (let i = 0; i < this.LidCurves.length; i++)\r\n {\r\n let curve = this.LidCurves[i];\r\n DrawCurve(curve, lidRanges, lidRanges);\r\n }\r\n }\r\n\r\n this._EdgeGeometry = BufferGeometryUtils.CreateFromPts(pts);\r\n return this._EdgeGeometry;\r\n }\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n this._MeshGeometry = new Geometry;\r\n\r\n let geo = this._MeshGeometry;\r\n let normal = this.Normal;\r\n let normaln = normal.clone().negate();\r\n let center = this.Center;\r\n let inv = this.OCSInv;\r\n\r\n let thisParam = new GetArcParam(this as unknown as Arc);\r\n\r\n let materialIndex = 0;\r\n let expMaterialIndex = 0;\r\n this.Thickness === 500;\r\n\r\n let newLeftSign: Map<number, number> = new Map();\r\n let newRightSign: Map<number, number> = new Map();\r\n let newLidSign: Map<number, number> = new Map();\r\n\r\n const BuildLeftFace = (curve: Curve) =>\r\n {\r\n if (curve[CURVE_FACE_TYPE_KEY] === WallFaceType.Outside)\r\n {\r\n \r\n materialIndex = 1;\r\n }\r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 2, startIndex + 1, curveParam.LeftDir, undefined, materialIndex),\r\n new Face3(startIndex + 1, startIndex + 2, startIndex + 3, curveParam.LeftDir, undefined, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n materialIndex++;\r\n }\r\n else\r\n {\r\n let arc = curve as Arc;\r\n\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetArcParam(arc);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam)), 0, 1);\r\n let end = equaln(hole.EndParam, 1) ? 1 : MathUtils.clamp(curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam)), 0, 1);\r\n if (start === end) continue;\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n if (this.Holes.length)\r\n {\r\n let length = arc.Length;\r\n let params: number[] = SplitArcParams(arc);\r\n\r\n //需要合并顶点,所以建立一个map\r\n let cacheIndex: { [key: string]: number; } = {};\r\n const GetIndex = (param: number, z: number) =>\r\n {\r\n let key = `${param}_${z}`;\r\n let index = cacheIndex[key];\r\n if (index === undefined)\r\n {\r\n index = geo.vertices.length;\r\n cacheIndex[key] = index;\r\n geo.vertices.push(curveParam.GetPointAtParam(param).applyMatrix4(inv).setZ(z));\r\n }\r\n return index;\r\n };\r\n\r\n for (let tapeaaaaa of tapes)\r\n {\r\n for (let tape of tapeaaaaa.Split(params))\r\n {\r\n let p1Index = GetIndex(tape.start, tape.bottom);\r\n let p2Index = GetIndex(tape.end, tape.bottom);\r\n let p3Index = GetIndex(tape.start, tape.top);\r\n let p4Index = GetIndex(tape.end, tape.top);\r\n\r\n let startX = length * 1e-3 * tape.start;\r\n let endX = length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n //记录左墙线段面域\r\n let n = newLeftSign.get(materialIndex) ?? 0;\r\n if (n < endX)\r\n newLeftSign.set(materialIndex, endX);\r\n\r\n let dir = arc.GetPointAtParam((tape.start + tape.end) * 0.5).applyMatrix4(inv).divideScalar(arc.Radius);\r\n\r\n geo.faces.push(\r\n new Face3(p1Index, p3Index, p2Index, dir, undefined, materialIndex),\r\n new Face3(p2Index, p3Index, p4Index, dir, undefined, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n }\r\n }\r\n }\r\n else\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let pts = curve.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let pts2 = pts.map(p => p.clone().setZ(this._Height));\r\n arrayPushArray(geo.vertices, pts);\r\n arrayPushArray(geo.vertices, pts2);\r\n\r\n let count = pts.length;\r\n let length = curve.Length * 1e-3;\r\n let divLength = length / pts.length;\r\n\r\n //记录左墙线段面域\r\n let n = newLeftSign.get(materialIndex) ?? 0;\r\n if (n < length)\r\n newLeftSign.set(materialIndex, length);\r\n\r\n for (let i = 1; i < count; i++)\r\n {\r\n let pre = i - 1;\r\n\r\n let preX = pre * divLength;\r\n let nowX = i * divLength;\r\n\r\n let dir = pts[i].clone().add(pts[pre]).multiplyScalar(0.5).divideScalar(arc.Radius);\r\n geo.faces.push(\r\n new Face3(startIndex + i, startIndex + pre, startIndex + pre + count, dir, undefined, materialIndex),\r\n new Face3(startIndex + i + count, startIndex + i, startIndex + pre + count, dir, undefined, materialIndex),\r\n );\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(nowX, 0), new Vector2(preX, 0), new Vector2(preX, this._Height * 1e-3)],\r\n [new Vector2(nowX, this._Height * 1e-3), new Vector2(nowX, 0), new Vector2(preX, this._Height * 1e-3)],\r\n );\r\n }\r\n }\r\n\r\n //如果是1的话 是渲染器走的\r\n if (materialIndex === 1)\r\n {\r\n materialIndex = expMaterialIndex;\r\n }\r\n else\r\n {\r\n materialIndex++;\r\n expMaterialIndex++;\r\n //这里不使用1\r\n if (materialIndex === 1)\r\n {\r\n materialIndex++;\r\n expMaterialIndex++;\r\n }\r\n }\r\n }\r\n };\r\n const BuildRightFace = (curve: Curve, isLid?: boolean) =>\r\n {\r\n if (curve[CURVE_FACE_TYPE_KEY] === WallFaceType.Outside)\r\n {\r\n \r\n materialIndex = 1;\r\n }\r\n\r\n if (curve instanceof Line)\r\n {\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetLineParam(curve);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam));\r\n let end = equaln(hole.EndParam, 1) ? 1 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam));\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n }\r\n\r\n for (let tape of tapes)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n let p1 = curveParam.GetPointAtParam(tape.start).applyMatrix4(inv);\r\n let p2 = curveParam.GetPointAtParam(tape.end).applyMatrix4(inv);\r\n geo.vertices.push(p1.setZ(tape.bottom), p2.setZ(tape.bottom));\r\n geo.vertices.push(p1.clone().setZ(tape.top));\r\n geo.vertices.push(p2.clone().setZ(tape.top));\r\n\r\n let startX = curveParam.Length * 1e-3 * tape.start;\r\n let endX = curveParam.Length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 1, startIndex + 2, curveParam.RightDir, undefined, materialIndex),\r\n new Face3(startIndex + 1, startIndex + 3, startIndex + 2, curveParam.RightDir, undefined, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(endX, startZ), new Vector2(startX, endZ)],\r\n [new Vector2(endX, startZ), new Vector2(endX, endZ), new Vector2(startX, endZ)],\r\n );\r\n }\r\n }\r\n else\r\n {\r\n let arc = curve as Arc;\r\n\r\n let tapes = [new Tape(0, 1, 0, this._Height)];\r\n let curveParam = new GetArcParam(arc);\r\n\r\n let holes = this.RealHoles;\r\n if (holes.length)\r\n {\r\n for (let hole of holes)\r\n {\r\n let start = equaln(hole.StartParam, 0) ? 0 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.StartParam));\r\n let end = equaln(hole.EndParam, 1) ? 1 : curveParam.GetParamAtPoint(thisParam.GetPointAtParam(hole.EndParam));\r\n if (start > end) [start, end] = [end, start];\r\n let holeTape = new Tape(start, end, hole.Bottom, hole.Top);\r\n\r\n let newTapes: Tape[] = [];\r\n for (let tape of tapes)\r\n arrayPushArray(newTapes, tape.Clip(holeTape));\r\n\r\n tapes = newTapes;\r\n }\r\n\r\n let length = arc.Length;\r\n let params: number[] = SplitArcParams(arc);\r\n\r\n //需要合并顶点,所以建立一个map\r\n let cacheIndex: { [key: string]: number; } = {};\r\n const GetIndex = (param: number, z: number) =>\r\n {\r\n let key = `${param}_${z}`;\r\n let index = cacheIndex[key];\r\n if (index === undefined)\r\n {\r\n index = geo.vertices.length;\r\n cacheIndex[key] = index;\r\n geo.vertices.push(curveParam.GetPointAtParam(param).applyMatrix4(inv).setZ(z));\r\n }\r\n return index;\r\n };\r\n\r\n for (let tapeaaaaa of tapes)\r\n {\r\n for (let tape of tapeaaaaa.Split(params))\r\n {\r\n let p1Index = GetIndex(tape.start, tape.bottom);\r\n let p2Index = GetIndex(tape.end, tape.bottom);\r\n let p3Index = GetIndex(tape.start, tape.top);\r\n let p4Index = GetIndex(tape.end, tape.top);\r\n\r\n let startX = length * 1e-3 * tape.start;\r\n let endX = length * 1e-3 * tape.end;\r\n\r\n let startZ = tape.bottom * 1e-3;\r\n let endZ = tape.top * 1e-3;\r\n\r\n //记录右墙线段面域 或墙边面域\r\n if (isLid)\r\n {\r\n let n = newLidSign.get(materialIndex) ?? 0;\r\n if (n < endX)\r\n newLidSign.set(materialIndex, endX);\r\n }\r\n else\r\n {\r\n let n = newRightSign.get(materialIndex) ?? 0;\r\n if (n < endX)\r\n newRightSign.set(materialIndex, endX);\r\n }\r\n\r\n let dir = arc.GetPointAtParam((tape.start + tape.end) * 0.5).applyMatrix4(inv).divideScalar(-arc.Radius);\r\n\r\n geo.faces.push(\r\n new Face3(p1Index, p2Index, p3Index, dir, undefined, materialIndex),\r\n new Face3(p2Index, p4Index, p3Index, dir, undefined, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(endX, startZ), new Vector2(startX, endZ)],\r\n [new Vector2(endX, startZ), new Vector2(endX, endZ), new Vector2(startX, endZ)],\r\n );\r\n }\r\n }\r\n }\r\n else\r\n {\r\n let arc = curve as Arc;\r\n let startIndex = geo.vertices.length;\r\n\r\n let pts = curve.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let pts2 = pts.map(p => p.clone().setZ(this._Height));\r\n arrayPushArray(geo.vertices, pts);\r\n arrayPushArray(geo.vertices, pts2);\r\n\r\n let length = curve.Length * 1e-3;\r\n let divLength = length / pts.length;\r\n\r\n //记录右墙线段面域 或墙边面域\r\n if (isLid)\r\n {\r\n let n = newLidSign.get(materialIndex) ?? 0;\r\n if (n < length)\r\n newLidSign.set(materialIndex, length);\r\n }\r\n else\r\n {\r\n let n = newRightSign.get(materialIndex) ?? 0;\r\n if (n < length)\r\n newRightSign.set(materialIndex, length);\r\n }\r\n\r\n let count = pts.length;\r\n for (let i = 1; i < count; i++)\r\n {\r\n let pre = i - 1;\r\n\r\n let preX = pre * divLength;\r\n let nowX = i * divLength;\r\n\r\n let dir = pts[i].clone().add(pts[pre]).multiplyScalar(0.5).divideScalar(-arc.Radius);\r\n geo.faces.push(\r\n new Face3(startIndex + pre, startIndex + i, startIndex + pre + count, dir, undefined, materialIndex),\r\n new Face3(startIndex + i, startIndex + i + count, startIndex + pre + count, dir, undefined, materialIndex),\r\n );\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(preX, 0), new Vector2(nowX, 0), new Vector2(preX, this._Height * 1e-3)],\r\n [new Vector2(nowX, 0), new Vector2(nowX, this._Height * 1e-3), new Vector2(preX, this._Height * 1e-3)],\r\n );\r\n }\r\n }\r\n }\r\n //如果是1的话 是渲染器走的\r\n if (materialIndex === 1)\r\n {\r\n materialIndex = expMaterialIndex;\r\n }\r\n else\r\n {\r\n materialIndex++;\r\n expMaterialIndex++;\r\n //这里不使用1\r\n if (materialIndex === 1)\r\n {\r\n materialIndex++;\r\n expMaterialIndex++;\r\n }\r\n }\r\n };\r\n const BuildRegionFace = (region: Polyline) =>\r\n {\r\n let ocsInv = this.OCSInv;\r\n let pts = SplitCurvePoints(region).map(p => AsVector2(p.applyMatrix4(ocsInv)));\r\n\r\n let faces = ShapeUtils.triangulateShape(pts, []);\r\n\r\n //top\r\n let startIndex = geo.vertices.length;\r\n for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, this._Height));\r\n if (HostApplicationServices.DrawWallBottomFace) for (let p of pts) geo.vertices.push(new Vector3(p.x, p.y, 0));\r\n\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n geo.faces.push(new Face3(startIndex + a, startIndex + b, startIndex + c, normal, undefined, materialIndex));\r\n let uvs = faces[i].map(index => pts[index].clone());\r\n geo.faceVertexUvs[0].push(uvs);\r\n\r\n if (HostApplicationServices.DrawWallBottomFace)\r\n {\r\n geo.faces.push(new Face3(startIndex + pts.length + c, startIndex + pts.length + b, startIndex + pts.length + a, normaln, undefined, materialIndex + 1));\r\n geo.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n }\r\n materialIndex++;\r\n // //todo:为了优化显示 我们可以把侧面也画出来 (应该使用和酷家乐一样的技术 在视线对准时,隐藏整个墙)\r\n // let d = this._EndPoint.clone().sub(this._StartPoint).normalize();\r\n // let pre = pts[pts.length - 1];\r\n // let tempV = new Vector3;\r\n // for (let i = 0; i < pts.length; i++)\r\n // {\r\n // let p = pts[i];\r\n // tempV.set(p.x - pre.x, p.y - pre.y, 0).normalize();\r\n // //todo:盖子会重复绘制\r\n // if (!isParallelTo(d, tempV, 1e-3) && !isPerpendicularityTo(d, tempV, 1e-3))\r\n // {\r\n // startIndex = geo.vertices.length;\r\n // geo.vertices.push(AsVector3(pre), AsVector3(p));\r\n // geo.vertices.push(AsVector3(pre).setZ(this._Height));\r\n // geo.vertices.push(AsVector3(p).setZ(this._Height));\r\n\r\n // LEFT_ROTATE_MTX2.applyVector(tempV);\r\n // tempV.negate();\r\n\r\n // let n = tempV.clone();\r\n\r\n // geo.faces.push(\r\n // new Face3(startIndex, startIndex + 1, startIndex + 2, n),\r\n // new Face3(startIndex + 1, startIndex + 3, startIndex + 2, n),\r\n // );\r\n\r\n // geo.faceVertexUvs[0].push(\r\n // [new Vector2(), new Vector2(0, 0), new Vector2(0, 0)],\r\n // [new Vector2(0, 0), new Vector2(0, 0), new Vector2(0, 0)],\r\n // );\r\n // }\r\n\r\n // pre = p;\r\n // }\r\n };\r\n\r\n if (!this.LeftCurves)\r\n {\r\n let sign = this._Clockwise ? -1 : 1;\r\n if (this.Length > 0.1)\r\n {\r\n let left = new Arc(ZeroVec, this._Radius - sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n let right = new Arc(ZeroVec, this._Radius + sign * this.Thickness * 0.5, this._StartAngle, this._EndAngle, this._Clockwise);\r\n left.OCS = this.OCSNoClone;\r\n right.OCS = this.OCSNoClone;\r\n\r\n BuildLeftFace(left);\r\n BuildRightFace(right);\r\n let lid1 = new Line(left.StartPoint, right.StartPoint);\r\n let lid2 = new Line(right.EndPoint, left.EndPoint);\r\n BuildRightFace(lid1);\r\n BuildRightFace(lid2);\r\n\r\n let region = Polyline.Combine([left, lid2, right, lid1]);\r\n if (region) BuildRegionFace(region);\r\n }\r\n }\r\n else\r\n {\r\n this.LeftCurves.forEach(BuildLeftFace);\r\n this.RightCurves.forEach((cu) => BuildRightFace(cu));\r\n this.LidCurves.forEach((cu) => BuildRightFace(cu, true));\r\n\r\n if (this.Region) BuildRegionFace(this.Region);\r\n\r\n this.ResetSign(this._LeftCurveSign, newLeftSign);\r\n let allChange = this._LeftCurveSign.size !== newLeftSign.size && this._RightCurveSign.size !== newRightSign.size;\r\n this.ResetSign(this._RightCurveSign, newRightSign, allChange);\r\n this.ResetSign(this._LidCurveSign, newLidSign, false, true);\r\n\r\n this._LeftCurveSign = newLeftSign;\r\n this._RightCurveSign = newRightSign;\r\n this._LidCurveSign = newLidSign;\r\n }\r\n\r\n geo.computeVertexNormals();\r\n geo.verticesNeedUpdate = true;\r\n geo.uvsNeedUpdate = true;\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n OverWriteMaterial = new Map<number, ObjectId<PhysicalMaterialRecord>>();//section index -> materialId\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterials;\r\n }\r\n }\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\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n if (renderType === RenderType.Physical)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterials);\r\n mesh.castShadow = true;\r\n return mesh;\r\n }\r\n\r\n let obj = new Object3D;\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let pts = this.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n let geo = new BufferGeometry().setFromPoints(pts);\r\n let axisLine = new TLine(geo, ColorMaterial.GetWallLineMtl(1));\r\n axisLine.computeLineDistances();\r\n obj.add(axisLine);\r\n\r\n let outline = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(outline);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.ColorIndex));\r\n obj.add(mesh);\r\n\r\n let outline = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.ColorIndex));\r\n obj.add(outline);\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n return new Object3D().add(...this.GetPrintObject3D());\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} renderType\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let [axisLine, outline] = obj.children as [TLine<BufferGeometry>, TLine<BufferGeometry>];\r\n\r\n let pts = this.Shape.getPoints(this.GetDrawCount()).map(AsVector3);\r\n if (!BufferGeometryUtils.UpdatePts(axisLine.geometry, pts))\r\n updateGeometry(axisLine, BufferGeometryUtils.CreateFromPts(pts));\r\n axisLine.computeLineDistances();\r\n\r\n // if (this._Radius <= this.Thickness * 0.5)\r\n // return; //会退化成直线 所以不return了\r\n\r\n if (outline.geometry !== this.EdgeGeometry)\r\n {\r\n outline.geometry.dispose();\r\n outline.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh<Geometry>;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let outline = obj.children[1] as LineSegments<BufferGeometry>;\r\n if (outline.geometry !== this.EdgeGeometry)\r\n {\r\n outline.geometry.dispose();\r\n outline.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh<Geometry>;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n //优化代码 保证在布局是打印模式时,在模型空间删除洞时候 布局空间能正常更新.\r\n let mesh = obj.children[1] as Mesh<Geometry>;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let line = obj.children[0] as LineSegments<BufferGeometry>;\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\r\n line.geometry.dispose();\r\n line.geometry = geometry;\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._Radius = file.Read();\r\n this._StartAngle = file.Read();\r\n this._EndAngle = file.Read();\r\n this._Clockwise = file.Read();\r\n\r\n this.OverWriteMaterial.clear();\r\n this._LeftCurveSign.clear();\r\n this._RightCurveSign.clear();\r\n this._LidCurveSign.clear();\r\n this.LeftCurves = [];\r\n this.RightCurves = [];\r\n this.LidCurves = [];\r\n\r\n if (ver > 2)\r\n {\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let index = file.Read();\r\n let id = file.ReadHardObjectId() as ObjectId<PhysicalMaterialRecord>;\r\n this.OverWriteMaterial.set(index, id);\r\n }\r\n }\r\n }\r\n\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n file.Write(this._Radius);\r\n file.Write(this._StartAngle);\r\n file.Write(this._EndAngle);\r\n file.Write(this._Clockwise);\r\n\r\n file.Write(this.OverWriteMaterial.size);\r\n for (let [index, id] of this.OverWriteMaterial)\r\n {\r\n file.Write(index);\r\n file.WriteHardObjectId(id);\r\n }\r\n }\r\n //#endregion\r\n}\r\n\r\nconst ARC_MEHTON_NAMES = [\r\n \"Center\",\r\n \"Normal\",\r\n \"BoundingBoxPtsInOCS\",\r\n \"Radius\",\r\n \"IsClockWise\",\r\n \"StartAngle\",\r\n \"EndAngle\",\r\n\r\n \"StartPoint\",\r\n \"EndPoint\",\r\n\r\n \"ApplyScaleMatrix\",\r\n \"ApplyMirrorMatrix\",\r\n\r\n \"GetParamAtAngle\",\r\n \"GetParamAtAngle2\",\r\n \"GetAngleAtParam\",\r\n \"GetAngleAtPoint\",\r\n\r\n \"AllAngle\",\r\n \"Bul\",\r\n\r\n \"ComputeAnlge\",\r\n \"ParseFromBul\",\r\n \"FromThreePoint\",\r\n];\r\n\r\n//@ts-ignore\r\nexport interface RoomWallArc extends RoomWallBase, Arc { }\r\napplyMixins(RoomWallArc, Arc, ARC_MEHTON_NAMES.concat(CURVE_MESH_NAMES));\r\n","import { equaln } from \"../../../../../Geometry/GeUtils\";\r\nimport { AutoRecord } from \"../../../../AutoRecord\";\r\nimport { Factory } from \"../../../../CADFactory\";\r\nimport { CADFiler } from \"../../../../CADFiler\";\r\nimport { CADObject } from \"../../../../CADObject\";\r\nimport { ObjectId } from \"../../../../ObjectId\";\r\nimport { RoomBase } from \"../../RoomBase\";\r\nimport { RoomWallBase } from \"../RoomWallBase\";\r\n\r\n\r\n/**\r\n * 墙上的洞\r\n *\r\n * 这个类接管了墙上的洞的绘制,以便可以直接在视图上操作这个洞(选择到洞,并且拖动) 但是同时我们也需要拿到原始墙的信息,保持材质(或者白墙? 独立材质?)\r\n */\r\n@Factory\r\nexport class RoomHoleBase extends RoomBase\r\n{\r\n @AutoRecord RelevancyWalls: ObjectId<RoomWallBase>[] = [];//关联的墙体列表\r\n\r\n protected _Height = 800;\r\n\r\n constructor() { super(); }\r\n\r\n public get Height()\r\n {\r\n return this._Height;\r\n }\r\n public set Height(value)\r\n {\r\n if (equaln(value, this._Height, 1e-4)) return;\r\n this.WriteAllObjectRecord();\r\n this._Height = value;\r\n this.Update();\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n this._Height = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n let count = file.Read();\r\n this.RelevancyWalls.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id)\r\n this.RelevancyWalls.push(id as ObjectId<RoomWallBase>);\r\n }\r\n }\r\n if (ver > 2)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n file.Write(this._Height);\r\n\r\n file.Write(this.RelevancyWalls.length);\r\n for (let id of this.RelevancyWalls)\r\n file.WriteObjectId(id);\r\n\r\n // ver3\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n //局部撤销\r\n override ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n","import { Color, Face3, Geometry, InstancedInterleavedBuffer, InterleavedBufferAttribute, LineSegments, Material, Matrix3, Mesh, MeshPhysicalMaterial, MeshStandardMaterial, Object3D, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { HostApplicationServices } from \"../../../../../ApplicationServices/HostApplicationServices\";\r\nimport { arrayLast, arrayPushArray } from \"../../../../../Common/ArrayExt\";\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 { Box3Ext } from \"../../../../../Geometry/Box\";\r\nimport { CreatePolylinePath } from \"../../../../../Geometry/CreatePolylinePath\";\r\nimport { AsVector3, ZAxis, equalv2 } from \"../../../../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../../../../GraphicsSystem/IntersectWith\";\r\nimport { RenderType } from \"../../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../../CADFactory\";\r\nimport { CADFiler } from \"../../../../CADFiler\";\r\nimport { CADObject } from \"../../../../CADObject\";\r\nimport { Arc } from \"../../../../Entity/Arc\";\r\nimport { Curve } from \"../../../../Entity/Curve\";\r\nimport { Line } from \"../../../../Entity/Line\";\r\nimport { Polyline } from \"../../../../Entity/Polyline\";\r\nimport { ObjectId } from \"../../../../ObjectId\";\r\nimport { PhysicalMaterialRecord } from \"../../../../PhysicalMaterialRecord\";\r\nimport { LEFT_ROTATE_MTX2 } from \"../../../ParseService/GetCurveParam\";\r\nimport { RoomWallArc } from \"../RoomWallArc\";\r\nimport { RoomWallBase } from \"../RoomWallBase\";\r\nimport { RoomWallLine } from \"../RoomWallLine\";\r\nimport { RoomHoleBase } from \"./RoomHoleBase\";\r\n\r\nenum HoleType\r\n{\r\n Door = 1,\r\n Window = 2,\r\n LWindow = 3,\r\n UWindow = 4,\r\n}\r\n\r\n/**\r\n * 折线洞 例如 转角窗 或者U型窗\r\n */\r\n@Factory\r\nexport class RoomHolePolyline extends RoomHoleBase\r\n{\r\n //虽然使用了三维的点,但是我们实际使用的是二维的点 z总是等于0\r\n private _Points: Vector3[] = [];\r\n private _FakerWalls: RoomWallBase[] = [];\r\n private _WpDists: number[];//外飘距离\r\n private _WpLeftWall = false;\r\n private _WpRightWall = false;\r\n\r\n get FakerWalls(): RoomWallBase[] { return this._FakerWalls; }\r\n public set FakerWalls(_FakerWalls: RoomWallBase[])\r\n {\r\n this._FakerWalls = _FakerWalls;\r\n this.LidCurves = [];\r\n this.Regions = [];\r\n for (let w of this._FakerWalls)\r\n {\r\n arrayPushArray(this.LidCurves, w.LidCurves);\r\n if (w.Region)\r\n this.Regions.push(w.Region);\r\n w.Z = this.Z;\r\n w.Height = this.Height;\r\n\r\n if (w instanceof RoomWallLine && w.Length > 1e-6)\r\n w.UpdateOCSToMinBox();\r\n }\r\n\r\n this.UpdateWpDraw();\r\n }\r\n\r\n set WpDist(wpdists: number[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._WpDists = wpdists;\r\n this.FakerWalls = this._FakerWalls;//这样是保险的 为了避免wpdist = undefine\r\n this.Update();\r\n }\r\n\r\n get WpDist() { return this._WpDists; }\r\n get WpLeftWall() { return this._WpLeftWall; }\r\n get WpRightWall() { return this._WpRightWall; }\r\n\r\n set WpLeftWall(v)\r\n {\r\n if (v === this._WpLeftWall) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._WpLeftWall = v;\r\n this.Update();\r\n }\r\n\r\n set WpRightWall(v)\r\n {\r\n if (v === this._WpRightWall) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._WpRightWall = v;\r\n this.Update();\r\n }\r\n\r\n UpdateWpDraw()\r\n {\r\n //外飘\r\n if (this._WpDists?.length === this._FakerWalls.length)\r\n {\r\n this.LidCurves = this.LidCurves.map(c => c.Clone());//拷贝一份 避免修改源数据\r\n if (this._WpLeftWall)\r\n this.LidCurves[0].StartPoint = this.LidCurves[0].GetPointAtDistance(-this._WpDists[0]);\r\n if (this._WpRightWall)\r\n this.LidCurves[1].EndPoint = this.LidCurves[1].GetPointAtDistance(this._WpDists[this._WpDists.length - 1] + this.LidCurves[1].Length);\r\n\r\n this.Regions = [this.GetWpRegion(this._WpDists)];\r\n }\r\n }\r\n\r\n /**\r\n * 根据外飘参数得到区域\r\n *\r\n * @param wpdists 外飘距离\r\n * @cts 窗台石距离\r\n */\r\n GetWpRegion(wpdists: number[], cts: number = 0, ctszytc: number = 0): Polyline\r\n {\r\n let leftCurves: Curve[] = [];\r\n let rightCurves: Curve[] = [];\r\n\r\n let wallCurves = this._FakerWalls.map((w: (RoomWallLine | RoomWallArc)) => w instanceof RoomWallLine ? new Line(w.StartPoint, w.EndPoint) : new Arc(w.Center, w.Radius, w.StartAngle, w.EndAngle, w.IsClockWise));\r\n\r\n if (ctszytc)//窗台石左右延伸\r\n {\r\n wallCurves[0].StartPoint = wallCurves[0].GetPointAtDistance(-ctszytc);\r\n let lastW = arrayLast(this._FakerWalls);\r\n let lastC = arrayLast(wallCurves);\r\n lastC.EndPoint = lastC.GetPointAtDistance(lastW.Length + ctszytc);\r\n }\r\n\r\n for (let i = 0; i < this._FakerWalls.length; i++)\r\n {\r\n let w = this._FakerWalls[i] as (RoomWallLine | RoomWallArc);\r\n let c = wallCurves[i];//曲线\r\n let d = wpdists[i];//外飘距离\r\n\r\n if (w instanceof RoomWallArc && d > 0)\r\n {\r\n //弧形墙凸出的一边为窗外\r\n leftCurves.push(c.GetOffsetCurves((w.Thickness * 0.5 + cts) * (w.IsClockWise ? 1 : -1))[0]);\r\n rightCurves.push(c.GetOffsetCurves((w.Thickness * 0.5 + d) * (w.IsClockWise ? -1 : 1))[0]);\r\n }\r\n else\r\n {\r\n leftCurves.push(c.GetOffsetCurves((w.Thickness * 0.5 + cts))[0]);\r\n rightCurves.push(c.GetOffsetCurves(-(w.Thickness * 0.5 + d))[0]);\r\n }\r\n }\r\n\r\n //获取合适相交点\r\n const getMinDistPoint = (pts: Vector3[], refer: Vector3) =>\r\n {\r\n let pt = pts[0];\r\n let length = refer.distanceTo(pt);\r\n for (let y = 1; y < pts.length; y++)\r\n {\r\n if (refer.distanceTo(pts[y]) < length)\r\n pt = pts[y];\r\n }\r\n return pt;\r\n };\r\n\r\n for (let i = 1; i < leftCurves.length; i++)\r\n {\r\n let pre = leftCurves[i - 1];\r\n let now = leftCurves[i];\r\n\r\n //直线墙分裂后画L型墙导致无交点,这里修复它.\r\n let ipts = pre.IntersectWith(now, IntersectOption.ExtendBoth);\r\n if (ipts.length === 0)\r\n ipts.push(pre.EndPoint);\r\n\r\n let iPt = getMinDistPoint(ipts, now.StartPoint);\r\n pre.EndPoint = iPt;\r\n now.StartPoint = iPt;\r\n }\r\n\r\n for (let i = 1; i < rightCurves.length; i++)\r\n {\r\n let pre = rightCurves[i - 1];\r\n let now = rightCurves[i];\r\n\r\n //直线墙分裂后画L型墙导致无交点,这里修复它.\r\n let ipts = pre.IntersectWith(now, IntersectOption.ExtendBoth);\r\n if (ipts.length === 0)\r\n ipts.push(pre.EndPoint);\r\n\r\n let iPt = getMinDistPoint(ipts, now.StartPoint);\r\n\r\n pre.EndPoint = iPt;\r\n now.StartPoint = iPt;\r\n }\r\n\r\n let curves: Curve[] = [new Line(rightCurves[0].StartPoint, leftCurves[0].StartPoint)];\r\n arrayPushArray(curves, leftCurves);\r\n curves.push(new Line(arrayLast(leftCurves).EndPoint, arrayLast(rightCurves).EndPoint));\r\n arrayPushArray(curves, rightCurves.reverse());\r\n let polyline = Polyline.Combine(curves, 1e-3);\r\n\r\n return polyline;\r\n }\r\n\r\n override get BoundingBoxInOCS(): Box3Ext\r\n {\r\n let box = new Box3Ext;\r\n let inv = this.OCSInv;\r\n for (let w of this._FakerWalls)\r\n box.union(w.GetBoundingBoxInMtx(inv));\r\n return box;\r\n return new Box3Ext().copy(this.BoundingBox).applyMatrix4(this.OCSInv);\r\n }\r\n\r\n get PointsCount() { return this._Points.length; }\r\n\r\n get Points() { return this._Points.map(p => p.clone().applyMatrix4(this.OCSNoClone)); }\r\n set Points(pts: Vector3[])\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n this._Points = pts.map(p => p.clone().applyMatrix4(inv).setZ(0));\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n\r\n if (this.LidCurves)\r\n {\r\n let line = new Line;\r\n let inv = this.OCSInv;\r\n for (let lid of this.LidCurves)\r\n {\r\n let sp = lid.StartPoint.applyMatrix4(inv).setZ(0);\r\n let ep = lid.EndPoint.applyMatrix4(inv).setZ(0);\r\n\r\n line.StartPoint = sp.clone().applyMatrix4(this.OCSNoClone);\r\n line.EndPoint = sp.setZ(this._Height).applyMatrix4(this.OCSNoClone);\r\n\r\n arrayPushArray(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n line.StartPoint = ep.clone().applyMatrix4(this.OCSNoClone);\r\n line.EndPoint = ep.setZ(this._Height).applyMatrix4(this.OCSNoClone);\r\n\r\n arrayPushArray(pts, line.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n }\r\n\r\n if (this.Regions)\r\n {\r\n for (let region of this.Regions)\r\n {\r\n region.Z = this.Z;//我们拥有它\r\n\r\n arrayPushArray(pts, region.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n\r\n region.Z += this._Height;\r\n\r\n arrayPushArray(pts, region.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n }\r\n }\r\n return pts;\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n return this.Points;\r\n }\r\n\r\n MoveGripPoints(ids: number[], vec: Vector3)\r\n {\r\n\r\n }\r\n\r\n GetStretchPoints(): Array<Vector3>\r\n {\r\n return this.Points;\r\n }\r\n\r\n MoveStretchPoints(ids: Array<number>, vec: Vector3)\r\n {\r\n }\r\n\r\n get FakerPoints()\r\n {\r\n let pts: Vector3[] = [];\r\n\r\n for (let w of this._FakerWalls)\r\n pts.push(w.StartPoint);\r\n if (this._FakerWalls.length)\r\n pts.push(this._FakerWalls[this._FakerWalls.length - 1].EndPoint);\r\n\r\n return pts;\r\n }\r\n //使用FakerWalls来更新这个洞的信息\r\n UpdatePoints(checkChange: boolean = false)\r\n {\r\n let pts = this.FakerPoints;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n if (pts.length === 2)\r\n {\r\n let x = pts[1].clone().sub(pts[0]).normalize();\r\n let z = ZAxis;\r\n let y = z.clone().cross(x).normalize();\r\n this._Matrix.makeBasis(x, y, z).setPosition(pts[0]);\r\n }\r\n else\r\n this._Matrix.setPosition(pts[1]);\r\n\r\n let ocsInv = this.OCSInv;\r\n for (let p of pts) p.applyMatrix4(ocsInv);\r\n\r\n this._Points = pts;\r\n this.Update();\r\n }\r\n\r\n //#region Draw\r\n LidCurves: Curve[];//窗户的开始和结束,我们接管了这个的绘制\r\n Regions: Polyline[];//窗户的区域,我们接管了这个的绘制(包括上面)\r\n\r\n override UpdateDrawGeometry()\r\n {\r\n if (this._EdgeGeometry)\r\n this._EdgeGeometry.dispose();\r\n this._EdgeGeometry = undefined;\r\n if (this._MeshGeometry)\r\n this._MeshGeometry.dispose();\r\n this._MeshGeometry = undefined;\r\n }\r\n\r\n ClearDraw(): this\r\n {\r\n this.UpdateDrawGeometry();\r\n return super.ClearDraw();\r\n }\r\n\r\n private _EdgeGeometry: Geometry;\r\n get EdgeGeometry()\r\n {\r\n if (this._EdgeGeometry) return this._EdgeGeometry;\r\n\r\n this._EdgeGeometry = new Geometry();\r\n\r\n let inv = this.OCSInv;\r\n\r\n let pts: Vector3[] = this._EdgeGeometry.vertices;\r\n\r\n if (this.LidCurves)\r\n for (let lid of this.LidCurves)\r\n {\r\n //TODO:是否真的需要切换到本地坐标系 (如果我们使用墙体上的曲线,那么需要 如果我们使用本地坐标系计算曲线 则不需要)\r\n let sp = lid.StartPoint.applyMatrix4(inv).setZ(0);\r\n let ep = lid.EndPoint.applyMatrix4(inv).setZ(0);\r\n\r\n pts.push(sp, sp.clone().setZ(this._Height),\r\n ep, ep.clone().setZ(this._Height),\r\n );\r\n }\r\n\r\n if (this.Regions)\r\n {\r\n for (let region of this.Regions)\r\n {\r\n region.Z = this.Z;//我们拥有它\r\n let lined = region.MatrixAlignTo2(this.OCSNoClone);\r\n\r\n if (region.CloseMark && !equalv2(lined.pts[0], lined.pts[lined.pts.length - 1], 1e-4))\r\n {\r\n lined.pts.push(lined.pts[0]);\r\n lined.buls.push(0);\r\n }\r\n\r\n let path = CreatePolylinePath(lined.pts, lined.buls);\r\n let rpts = path.getPoints(30);\r\n\r\n // let wallTopHeight = 0;\r\n // if (this.FakerHoles[0])\r\n // wallTopHeight = this.FakerHoles[0].Position.z + this.FakerHoles[0].Height - this.Position.z;\r\n\r\n for (let i = 1; i < rpts.length; i++)\r\n {\r\n let pre = AsVector3(rpts[i - 1]);\r\n let p = AsVector3(rpts[i]);\r\n\r\n pts.push(pre.setZ(0), p.setZ(0));\r\n pts.push(pre.clone().setZ(this._Height), p.clone().setZ(this._Height));\r\n\r\n // if (wallTopHeight)\r\n // pts.push(pre.clone().setZ(wallTopHeight), p.clone().setZ(wallTopHeight));\r\n }\r\n }\r\n }\r\n\r\n return this._EdgeGeometry;\r\n }\r\n\r\n private _MeshGeometry: Geometry;\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n this._MeshGeometry = new Geometry();\r\n\r\n let inv = this.OCSInv;\r\n let geo = this._MeshGeometry;\r\n\r\n let materialIndex = 0;//材质槽\r\n\r\n if (this.LidCurves)\r\n for (let lid of this.LidCurves)\r\n {\r\n let startIndex = geo.vertices.length;\r\n\r\n //TODO:是否真的需要切换到本地坐标系 (如果我们使用墙体上的曲线,那么需要 如果我们使用本地坐标系计算曲线 则不需要)\r\n let p1 = lid.StartPoint.applyMatrix4(inv).setZ(0);\r\n let p2 = lid.EndPoint.applyMatrix4(inv).setZ(0);\r\n\r\n geo.vertices.push(p1.setZ(0), p2.setZ(0));\r\n geo.vertices.push(p1.clone().setZ(this._Height));\r\n geo.vertices.push(p2.clone().setZ(this._Height));\r\n\r\n let startX = 0;\r\n let endX = lid.Length * 1e-3;\r\n\r\n let startZ = 0;\r\n let endZ = this._Height * 1e-3;\r\n\r\n let normal = p2.clone().sub(p1).normalize();\r\n LEFT_ROTATE_MTX2.applyVector(normal);\r\n\r\n geo.faces.push(\r\n new Face3(startIndex, startIndex + 2, startIndex + 1, normal, new Color, materialIndex),\r\n new Face3(startIndex + 1, startIndex + 2, startIndex + 3, normal, new Color, materialIndex),\r\n );\r\n\r\n geo.faceVertexUvs[0].push(\r\n [new Vector2(startX, startZ), new Vector2(startX, endZ), new Vector2(endX, startZ)],\r\n [new Vector2(endX, startZ), new Vector2(startX, endZ), new Vector2(endX, endZ)],\r\n );\r\n\r\n materialIndex++;\r\n }\r\n\r\n if (this.Regions)\r\n for (let region of this.Regions)\r\n {\r\n region.OCSNoClone.elements[14] = this._Matrix.elements[14];//我们拥有它\r\n let lined = region.MatrixAlignTo2(this.OCSNoClone);\r\n\r\n if (region.CloseMark && !equalv2(lined.pts[0], lined.pts[lined.pts.length - 1], 1e-4))\r\n {\r\n lined.pts.push(lined.pts[0]);\r\n lined.buls.push(0);\r\n }\r\n\r\n let path = CreatePolylinePath(lined.pts, lined.buls);\r\n let rpts = path.getPoints(30);\r\n\r\n let faces = ShapeUtils.triangulateShape(rpts, []);\r\n let startIndex = geo.vertices.length;\r\n for (let p of rpts) geo.vertices.push(new Vector3(p.x, p.y, 0));\r\n for (let p of rpts) geo.vertices.push(new Vector3(p.x, p.y, this._Height));\r\n\r\n let normal = this.Normal;\r\n let normaln = normal.clone().negate();\r\n for (let i = 0; i < faces.length; i++)\r\n {\r\n let [a, b, c] = faces[i];\r\n geo.faces.push(new Face3(startIndex + a, startIndex + b, startIndex + c, normal, new Color, materialIndex));\r\n let uvs = faces[i].map(index => rpts[index].clone().multiplyScalar(1e-3));\r\n geo.faceVertexUvs[0].push(uvs);\r\n\r\n geo.faces.push(new Face3(startIndex + rpts.length + c, startIndex + rpts.length + b, startIndex + rpts.length + a, normaln, new Color, materialIndex + 1));\r\n geo.faceVertexUvs[0].push(uvs.concat().reverse().map(v => v.clone()));\r\n }\r\n\r\n // materialIndex += 2; //避免L型的洞分开材质\r\n }\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n set Material(materialId: ObjectId<PhysicalMaterialRecord>)\r\n {\r\n //当设置单个材质时,清除其他的材质?(门洞 门槛石怎么办? (不管了))\r\n if (this._OverWriteMaterial.size)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (const [k, v] of this._OverWriteMaterial)\r\n {\r\n if (v?.Object?.IsMaterialLock)\r\n continue;\r\n this._OverWriteMaterial.set(k, materialId);\r\n }\r\n }\r\n if (super.Material?.Object?.IsMaterialLock)\r\n return;\r\n\r\n super.Material = materialId;\r\n }\r\n\r\n get Material()\r\n {\r\n if (this._MaterialId?.IsErase)\r\n return;\r\n return this._MaterialId;\r\n }\r\n\r\n private _OverWriteMaterial = new Map<number, ObjectId<PhysicalMaterialRecord>>();//section index -> materialId\r\n\r\n get OverWriteMaterial()\r\n {\r\n return this._OverWriteMaterial;\r\n }\r\n\r\n IsMtlLockAtSlot(slotIndex: number)\r\n {\r\n if (this.LockMaterial)\r\n return true;\r\n\r\n const curMtl = this._OverWriteMaterial.get(slotIndex);\r\n if (curMtl)\r\n {\r\n if (curMtl?.Object?.IsMaterialLock)\r\n return true;\r\n }\r\n else if (this.Material?.Object?.IsMaterialLock)\r\n return true;\r\n return false;\r\n }\r\n\r\n SetMaterialAtSlot(mtl: ObjectId<PhysicalMaterialRecord>, slotIndex: number)\r\n {\r\n if (this.IsMtlLockAtSlot(slotIndex))\r\n return;\r\n\r\n if (this._OverWriteMaterial.get(slotIndex) !== mtl)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._OverWriteMaterial.set(slotIndex, mtl);\r\n this.Update(UpdateDraw.Material);\r\n }\r\n }\r\n\r\n SetAllMaterialAtSlot(mtl: ObjectId<PhysicalMaterialRecord>)\r\n {\r\n if (this.LockMaterial)\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n this.Material = mtl; // 不需要clear OverWriteMaterialset material 时会自动clear\r\n this.Update(UpdateDraw.Material);\r\n }\r\n\r\n GetMtlLockedStatus()\r\n {\r\n let partMtlLocked = false;\r\n let allMtlLocked = true;\r\n\r\n for (const [, v] of this._OverWriteMaterial)\r\n {\r\n if (v?.Object?.IsMaterialLock)\r\n {\r\n partMtlLocked = true;\r\n continue;\r\n }\r\n allMtlLocked = false;\r\n }\r\n\r\n const meshSize = this.MeshMaterial.length;\r\n if (this._OverWriteMaterial.size !== meshSize)\r\n {\r\n if (super.Material?.Object?.IsMaterialLock)\r\n partMtlLocked = true;\r\n else\r\n allMtlLocked = false;\r\n }\r\n\r\n return {\r\n allMtlLocked,\r\n partMtlLocked,\r\n };\r\n }\r\n\r\n GetPhyMtlRecords()\r\n {\r\n const materials: PhysicalMaterialRecord[] = [];\r\n\r\n for (const [, v] of this._OverWriteMaterial)\r\n {\r\n if (!v?.IsErase && v?.Object)\r\n materials.push(v.Object);\r\n }\r\n\r\n const meshSize = this.MeshMaterial.length;\r\n if (this._OverWriteMaterial.size !== meshSize && super.Material?.Object)\r\n materials.push(super.Material.Object);\r\n\r\n return materials;\r\n }\r\n\r\n private _GetValidOWMtl(index: number): MeshPhysicalMaterial | undefined\r\n {\r\n const obj = this.OverWriteMaterial.get(index)?.Object;\r\n const owMtl = !obj?.IsErase && obj?.Material;\r\n if (!owMtl) return;\r\n return owMtl;\r\n }\r\n\r\n protected get MeshMaterial(): Material[]\r\n {\r\n let defaultMtl: Material;\r\n const mtlId = this._MaterialId;\r\n if (!mtlId?.IsErase && mtlId?.Object)\r\n defaultMtl = mtlId.Object.Material as MeshStandardMaterial;\r\n else\r\n defaultMtl = HostApplicationServices.DefaultWallMaterial ?? HostApplicationServices.DefaultMeshMaterial;\r\n\r\n let materials: Material[] = [];\r\n let materialIndex = 0;\r\n if (this.LidCurves)\r\n for (let c of this.LidCurves)\r\n {\r\n materials.push(this._GetValidOWMtl(materialIndex) ?? defaultMtl);\r\n materialIndex++;\r\n }\r\n\r\n if (this.Regions)\r\n {\r\n for (let r of this.LidCurves)\r\n {\r\n materials.push(this._GetValidOWMtl(materialIndex) ?? defaultMtl);\r\n materials.push(this._GetValidOWMtl(materialIndex + 1) ?? defaultMtl);//地板?\r\n materialIndex += 2;;\r\n }\r\n }\r\n return materials;\r\n }\r\n\r\n get MaterialsIds(): number[]\r\n {\r\n let mtls = this.MeshMaterial;\r\n return mtls.map(mtl =>\r\n {\r\n //@ts-ignore\r\n return mtl.ObjectId ?? 71;\r\n });\r\n }\r\n\r\n GetPrintObject3D()\r\n {\r\n let geometry = new LineGeometry();\r\n let pts: number[] = [];\r\n for (let p of this.EdgeGeometry.vertices)\r\n pts.push(p.x, p.y, p.z);\r\n\r\n let lineSegments = new Float32Array(pts);\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): Object3D\r\n {\r\n if (renderType === RenderType.Physical)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, this.MeshMaterial);\r\n mesh.castShadow = true;\r\n mesh.receiveShadow = true;\r\n return mesh;\r\n }\r\n\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n return new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(4));\r\n }\r\n\r\n let obj = new Object3D;\r\n if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = new Mesh(this.MeshGeometry, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex));\r\n let line = new LineSegments(this.EdgeGeometry, ColorMaterial.GetLineMaterial(this.DrawColorIndex));\r\n obj.add(mesh, line);\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n obj.add(...this.GetPrintObject3D());\r\n }\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} renderType\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n let line = obj as LineSegments;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh<Geometry>;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n\r\n let line = obj.children[1] as LineSegments<Geometry>;\r\n if (line.geometry !== this.EdgeGeometry)\r\n {\r\n line.geometry.dispose();\r\n line.geometry = this.EdgeGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n let mesh = obj as Mesh<Geometry>;\r\n if (mesh.geometry !== this.MeshGeometry)\r\n {\r\n mesh.geometry.dispose();\r\n mesh.geometry = this.MeshGeometry;\r\n }\r\n }\r\n else if (renderType === RenderType.Print)\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n return obj.add(\r\n ...this.GetPrintObject3D()\r\n );\r\n }\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Wireframe)\r\n {\r\n // let l = obj as LineSegments;\r\n // l.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.DrawColorIndex);\r\n }\r\n else if (renderType === RenderType.Physical2)\r\n {\r\n // let mesh = obj.children[0] as Mesh;\r\n // mesh.material = this.MeshMaterial;\r\n }\r\n else\r\n {\r\n let mesh = obj as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n this._Points.length = 0;\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let p = new Vector3(file.Read(), file.Read(), 0);\r\n this._Points.push(p);\r\n }\r\n\r\n if (ver > 1)\r\n {\r\n this._WpDists = [];\r\n count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n this._WpDists.push(file.Read());\r\n }\r\n\r\n if (ver > 2)\r\n {\r\n let wpLeftRightWall = file.Read() as number;\r\n\r\n this._WpLeftWall = (wpLeftRightWall & 1) !== 0;\r\n this._WpRightWall = (wpLeftRightWall & 2) !== 0;\r\n }\r\n\r\n this._OverWriteMaterial.clear();\r\n if (ver > 3)\r\n {\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let index = file.Read();\r\n let id = file.ReadHardObjectId() as ObjectId<PhysicalMaterialRecord>;\r\n this._OverWriteMaterial.set(index, id);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(4);\r\n super.WriteFile(file);\r\n\r\n file.Write(this._Points.length);\r\n for (let p of this._Points)\r\n {\r\n file.Write(p.x);\r\n file.Write(p.y);\r\n }\r\n\r\n file.Write(this._WpDists?.length ?? 0);\r\n if (this._WpDists)\r\n for (let d of this._WpDists)\r\n file.Write(d);\r\n\r\n let wpLeftRightWall = 0;\r\n if (this._WpLeftWall) wpLeftRightWall = 1;\r\n if (this._WpRightWall) wpLeftRightWall += 2;\r\n file.Write(wpLeftRightWall);\r\n\r\n file.Write(this._OverWriteMaterial.size);\r\n for (let [index, id] of this._OverWriteMaterial)\r\n {\r\n file.Write(index);\r\n file.WriteHardObjectId(id);\r\n }\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n","import Flatbush from 'flatbush';\r\nimport { Vector2, Vector3 } from 'three';\r\nimport { CURVE_FACE_TYPE_KEY, RoomWallBase, WallFaceType } from \"../../Entity/Wall/RoomWallBase\";\r\nimport { CreateGetCurveParam, GetCurveParam } from \"../GetCurveParam\";\r\nimport { InsertSortedIndex, Intersection } from '../RangeUtils';\r\n\r\ntype Range = [number, number];\r\n\r\nexport interface WallRange extends Range\r\n{\r\n left: WallFaceType;\r\n right: WallFaceType;\r\n}\r\n\r\nexport class RoomWallPlaceIHoleHelper\r\n{\r\n protected _ParamGets: GetCurveParam[] = [];\r\n protected _ParamRanges: ([number, number][])[] = [];\r\n protected _Fb: Flatbush;\r\n\r\n constructor(public _Walls: RoomWallBase[])\r\n {\r\n this.GenFb();\r\n this.ParseWallCanPlaceHoleRange();\r\n }\r\n\r\n FindBestPlace(p: Vector3)\r\n {\r\n let ids = this._Fb.neighbors(p.x, p.y, 50, 200);//50个 200距离\r\n\r\n let minDist = Infinity;\r\n let minId = -1;\r\n let cpParam: number;\r\n for (let id of ids)\r\n {\r\n if (this._ParamRanges[id].length === 0)\r\n continue; //没有可以放置的区域\r\n\r\n let paramGet = this._ParamGets[id];\r\n let param = paramGet.GetParamAtPoint(p);\r\n if (param < 0 || param > 1) continue;//不在墙上\r\n let cp = paramGet.GetPointAtParam(param);\r\n\r\n if (p.z < cp.z - 1 || p.z > cp.z + 2800) continue;//线在上墙就行\r\n\r\n let dist = Vector2.prototype.distanceToSquared.call(cp, p);\r\n if (dist < minDist)\r\n {\r\n minDist = dist;\r\n minId = id;\r\n cpParam = param;\r\n }\r\n }\r\n if (minId === -1 || minDist > 90000)//300*300=90000\r\n return;\r\n\r\n let range = FindBestRange(cpParam, this._ParamRanges[minId]) as unknown as WallRange;\r\n if (range)\r\n return {\r\n wall: this._Walls[minId],\r\n range,\r\n cpParam,\r\n getParam: this._ParamGets[minId]\r\n };\r\n }\r\n\r\n private GenFb()\r\n {\r\n if (!this._Walls.length) return;\r\n\r\n this._Fb = new Flatbush(this._Walls.length);\r\n for (let wall of this._Walls)\r\n {\r\n let box = wall.BoundingBox;\r\n this._Fb.add(box.min.x, box.min.y, box.max.x, box.max.y);\r\n }\r\n this._Fb.finish();\r\n }\r\n\r\n ParseWallCanPlaceHoleRange()\r\n {\r\n for (let wall of this._Walls)\r\n {\r\n let param = CreateGetCurveParam(wall);\r\n this._ParamGets.push(param);\r\n this._ParamRanges.push(ParseWallRange(wall, param));\r\n }\r\n }\r\n}\r\n\r\n\r\n//找到一个合适的位置放置直线洞\r\nexport function FindBestRange(param: number, ranges: [number, number][], fuzz = 1e-5): [number, number]\r\n{\r\n //二分搜索\r\n let index = InsertSortedIndex(ranges, param, (v, range) => v - range[0] + fuzz);\r\n\r\n let range = ranges[index - 1];\r\n\r\n //参数在范围内\r\n if (range && (range[0] - fuzz) <= param && param <= (range[1] + fuzz))\r\n return range;\r\n\r\n // //参数在范围外\r\n // if (index === 0)\r\n // {\r\n // return ranges[0];\r\n // }\r\n // else if (index === ranges.length)\r\n // {\r\n // return ranges[ranges.length - 1];\r\n // }\r\n // else\r\n // {\r\n // let nextRange = ranges[index + 1];\r\n // if (nextRange[0] - param < param - range[1])\r\n // return nextRange;\r\n // else\r\n // return range;\r\n // }\r\n}\r\n\r\nexport function ParseWallRange(wall: RoomWallBase, getParam = CreateGetCurveParam(wall))\r\n{\r\n let leftParams: [number, number][] = wall.LeftCurves.map(c =>\r\n {\r\n let range = [getParam.GetParamAtPoint(c.StartPoint), getParam.GetParamAtPoint(c.EndPoint)] as [number, number];\r\n range[CURVE_FACE_TYPE_KEY] = c[CURVE_FACE_TYPE_KEY];\r\n return range;\r\n });\r\n let rightParams: [number, number][] = wall.RightCurves.map(c =>\r\n {\r\n let range = [getParam.GetParamAtPoint(c.StartPoint), getParam.GetParamAtPoint(c.EndPoint)] as [number, number];\r\n range[CURVE_FACE_TYPE_KEY] = c[CURVE_FACE_TYPE_KEY];\r\n return range;\r\n });\r\n\r\n leftParams.sort((a, b) => a[0] - b[0]);\r\n rightParams.sort((a, b) => a[0] - b[0]);\r\n\r\n let ranges: [number, number][] = [];\r\n for (let seg1 of rightParams)\r\n {\r\n let [min, max] = seg1;\r\n for (let seg2 of leftParams)\r\n {\r\n let [min2, max2] = seg2;\r\n if (min > max2) continue;\r\n if (max < min2) break;\r\n\r\n let range = Intersection(seg1, seg2);\r\n if (range)\r\n {\r\n ranges.push(range);\r\n range[\"left\"] = seg2[CURVE_FACE_TYPE_KEY];\r\n range[\"right\"] = seg1[CURVE_FACE_TYPE_KEY];\r\n }\r\n }\r\n }\r\n\r\n return ranges as unknown as WallRange[];\r\n}\r\n","import { MathUtils } from \"three\";\r\nimport { arrayLast } from \"../Common/ArrayExt\";\r\nimport { CADObject } from \"../DatabaseServices/CADObject\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { RoomHolePolyline } from \"../DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline\";\r\nimport { RoomWallArc } from \"../DatabaseServices/Room/Entity/Wall/RoomWallArc\";\r\nimport { RoomWallBase } from \"../DatabaseServices/Room/Entity/Wall/RoomWallBase\";\r\nimport { RoomWallLine } from \"../DatabaseServices/Room/Entity/Wall/RoomWallLine\";\r\nimport { CreateGetCurveParam } from \"../DatabaseServices/Room/ParseService/GetCurveParam\";\r\nimport { FindBestRange, ParseWallRange } from \"../DatabaseServices/Room/ParseService/Hole/RoomWallPlaceIHoleHelper\";\r\nimport { RoomWallParse } from \"../DatabaseServices/Room/ParseService/RoomWallParse\";\r\nimport { TemplateRecord } from \"../DatabaseServices/Template/TemplateRecord\";\r\nimport { CurveMap } from \"../Geometry/CurveMap\";\r\nimport { equalv2 } from \"../Geometry/GeUtils\";\r\n\r\n\r\n/**\r\n * 更新墙与洞的关联性\r\n */\r\nexport async function UpdateRelevanceWallHole(ents: CADObject[], isUndoRedo = false)\r\n{\r\n let updated = new Set<RoomWallBase | RoomHolePolyline>();\r\n\r\n //更新墙,顺便更新洞\r\n const UpdateWall = async (wall: RoomWallBase) =>\r\n {\r\n if (updated.has(wall)) return;\r\n updated.add(wall);//避免重入\r\n\r\n //先更新洞,因为洞可能会修复位置\r\n for (let holeId of wall.RelevancyHoles)//更新关联的洞\r\n {\r\n if (holeId.IsErase) continue;\r\n\r\n let hole = holeId.Object;\r\n if (wall.IsErase)\r\n hole.Erase();\r\n\r\n await UpdateHole(hole);//这里如果只更新洞,那么有可能关联的其他的墙会逃逸\r\n }\r\n\r\n UpdateWallHolesDataAndUpdateDraw(wall);\r\n };\r\n\r\n //更新洞,顺便更新关联的墙?\r\n const UpdateHole = async (hole: RoomHolePolyline) =>\r\n {\r\n if (updated.has(hole)) return;\r\n updated.add(hole);//避免重入\r\n\r\n //先更新洞,因为洞可能会修复位置\r\n UpdateHoleFakerWallsAndUpdateDraw(hole);\r\n\r\n for (let wallId of hole.RelevancyWalls)\r\n {\r\n if (wallId.IsErase) continue;\r\n\r\n let wall = wallId.Object as RoomWallBase;\r\n if (updated.has(wall)) continue;\r\n\r\n await UpdateWall(wall);\r\n }\r\n\r\n if (!isUndoRedo && hole.Template?.IsErase === false)\r\n {\r\n let tr = hole.Template.Object as TemplateRecord;\r\n await tr.UpdateTemplateTree();\r\n }\r\n };\r\n\r\n\r\n for (let en of ents)\r\n {\r\n if (en instanceof RoomWallBase)\r\n await UpdateWall(en);\r\n else if (en instanceof RoomHolePolyline)\r\n await UpdateHole(en);\r\n }\r\n}\r\n\r\n\r\n/**\r\n * 更新墙的洞的数据,并且更新绘制\r\n */\r\nexport function UpdateWallHolesDataAndUpdateDraw(wall: RoomWallBase)\r\n{\r\n wall.Holes = [];\r\n\r\n let getParam = CreateGetCurveParam(wall);\r\n\r\n let z = wall.OCSNoClone.elements[14];\r\n for (let hole of wall.RelevancyHoles)\r\n {\r\n if (hole.IsErase)\r\n {\r\n wall.Holes.push({ StartParam: 0, EndParam: 0, Bottom: 0, Top: 0 });\r\n continue;\r\n }\r\n\r\n let holeObj = hole.Object as RoomHolePolyline;\r\n let index = holeObj.RelevancyWalls.indexOf(wall.Id);\r\n if (index < 0) continue;\r\n\r\n let sp = holeObj.Points[index];\r\n let ep = holeObj.Points[index + 1];\r\n\r\n let startParam = getParam.GetParamAtPoint(sp);\r\n let endParam = getParam.GetParamAtPoint(ep);\r\n if (startParam > endParam) [startParam, endParam] = [endParam, startParam];\r\n let bottom = holeObj.Position.z - z;\r\n let top = holeObj.Height + bottom;\r\n\r\n wall.Holes.push({ StartParam: startParam, EndParam: endParam, Bottom: bottom, Top: top });\r\n }\r\n\r\n wall.Update();\r\n return wall;\r\n}\r\n\r\n\r\n/**\r\n * 更新网洞的绘制\r\n * 在墙移动的时候,或者网洞变化的时候 这个网洞的绘制就需要被更新\r\n */\r\nexport function UpdateHoleFakerWallsAndUpdateDraw(hole: RoomHolePolyline)\r\n{\r\n if (hole.IsErase) return;\r\n\r\n let fakerWalls = hole.RelevancyWalls.map(w => w.Object.Clone(false));\r\n\r\n let pts = hole.Points;\r\n if (pts.length < 2 || fakerWalls.length !== pts.length - 1)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n if (pts.length === 2)\r\n {\r\n\r\n let p1 = pts[0];\r\n let p2 = pts[1];\r\n\r\n let wall = fakerWalls[0];\r\n let orgWall = hole.RelevancyWalls[0].Object;\r\n let paramGet = CreateGetCurveParam(orgWall);\r\n\r\n let ranges = ParseWallRange(orgWall, paramGet);\r\n\r\n let [p1Param, p1Closeto] = paramGet.GetParamAtPoint2(p1);\r\n let [p2Param, p2Closeto] = paramGet.GetParamAtPoint2(p2);\r\n\r\n let range1 = FindBestRange(p1Param, ranges);\r\n let range2 = FindBestRange(p2Param, ranges);\r\n\r\n if (p1Closeto && p2Closeto)\r\n {\r\n if (range1 && range1 === range2)\r\n {\r\n wall.StartPoint = p1;\r\n wall.EndPoint = p2;\r\n\r\n if (wall instanceof RoomWallArc && p1Param > p2Param)\r\n (wall as unknown as Arc).IsClockWise = !wall.IsClockWise;\r\n }\r\n else\r\n {\r\n let range = range1 ?? range2 ?? FindBestRange((p1Param + p2Param) * 0.5, ranges);\r\n if (!range)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n p1Param = MathUtils.clamp(p1Param, range[0], range[1]);\r\n p2Param = MathUtils.clamp(p2Param, range[0], range[1]);\r\n\r\n wall.StartPoint = paramGet.GetPointAtParam(p1Param);\r\n wall.EndPoint = paramGet.GetPointAtParam(p2Param);\r\n\r\n if (wall instanceof RoomWallArc && p1Param > p2Param)\r\n (wall as unknown as Arc).IsClockWise = !wall.IsClockWise;\r\n }\r\n }\r\n else\r\n {\r\n let index = orgWall.RelevancyHoles.indexOf(hole.Id);\r\n let holeData = orgWall.Holes[index];\r\n if (!holeData)\r\n {\r\n hole.Erase();\r\n return;\r\n };\r\n\r\n if (p2Param > p1Param)\r\n {\r\n p1Param = holeData.StartParam;\r\n p2Param = holeData.EndParam;\r\n }\r\n else\r\n {\r\n p1Param = holeData.EndParam;\r\n p2Param = holeData.StartParam;\r\n }\r\n\r\n let range = FindBestRange(p1Param, ranges) ?? FindBestRange(p1Param, ranges) ?? FindBestRange((p1Param + p2Param) * 0.5, ranges);\r\n if (!range)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n p1Param = MathUtils.clamp(p1Param, range[0], range[1]);\r\n p2Param = MathUtils.clamp(p2Param, range[0], range[1]);\r\n\r\n wall.StartPoint = paramGet.GetPointAtParam(p1Param);\r\n wall.EndPoint = paramGet.GetPointAtParam(p2Param);\r\n\r\n if (wall instanceof RoomWallArc && p1Param > p2Param)\r\n (wall as unknown as Arc).IsClockWise = !wall.IsClockWise;\r\n }\r\n\r\n new RoomWallParse(false, undefined, false).Parse(fakerWalls);\r\n hole.FakerWalls = fakerWalls;\r\n\r\n let newPts = hole.FakerPoints;\r\n if (pts.some((p, i) => !equalv2(p, newPts[i], 1e-4)))\r\n hole.UpdatePoints();\r\n hole.Update();\r\n return;\r\n }\r\n\r\n //pts.length >2\r\n let curvemap = new CurveMap();\r\n for (let w of fakerWalls)\r\n curvemap.AddCurveToMap(w as unknown as Curve, false, false, false);\r\n\r\n if (curvemap._Vertices.length !== pts.length)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n if (pts.length === 3)\r\n {\r\n let v = curvemap._Vertices.find(v => v.routes.length === 2);\r\n if (!v)//拐角点丢失\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n let r1 = v.routes.find(r => r.curve === fakerWalls[0] as unknown as Curve);\r\n let r2 = v.routes.find(r => r.curve === fakerWalls[1] as unknown as Curve);\r\n if (!r1.isReverse) fakerWalls[0].Reverse();\r\n if (r2.isReverse) fakerWalls[1].Reverse();\r\n\r\n // if (!equalv2(v.position, pts[1], 1e-4))//拐角点不再对齐\r\n // {\r\n // let length1 = GetHoleLengthOfIndex(hole, 0);\r\n // let length2 = GetHoleLengthOfIndex(hole, 1);\r\n\r\n // fakerWalls[0].StartPoint = fakerWalls[0].GetPointAtDistance(fakerWalls[0].Length - length1);\r\n // fakerWalls[1].EndPoint = fakerWalls[1].GetPointAtDistance(length2);\r\n // }\r\n // else//拐角点仍然对齐\r\n {\r\n {\r\n let length1 = GetHoleLengthOfIndex(hole, 0);\r\n let orgWall = hole.RelevancyWalls[0].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (!r1.isReverse)\r\n length1 = Math.min(length1, orgWall.Length * ranges[0][1]);\r\n else\r\n length1 = Math.min(length1, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n\r\n fakerWalls[0].StartPoint = fakerWalls[0].GetPointAtDistance(fakerWalls[0].Length - length1);\r\n }\r\n\r\n {\r\n let length2 = GetHoleLengthOfIndex(hole, 1);\r\n let orgWall = hole.RelevancyWalls[1].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (r2.isReverse)\r\n length2 = Math.min(length2, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n else\r\n length2 = Math.min(length2, orgWall.Length * ranges[0][1]);\r\n\r\n fakerWalls[1].EndPoint = fakerWalls[1].GetPointAtDistance(length2);\r\n }\r\n }\r\n }\r\n else if (pts.length === 4)\r\n {\r\n let v1 = curvemap._Vertices.find(v => v.routes.length === 2 && v.routes.some(r => r.curve === fakerWalls[0] as unknown as Curve));\r\n let v2 = curvemap._Vertices.find(v => v.routes.length === 2 && v.routes.some(r => r.curve === fakerWalls[2] as unknown as Curve));\r\n\r\n if (!v1 || !v2)\r\n {\r\n hole.Erase();\r\n return;\r\n }\r\n\r\n let r1 = v1.routes.find(r => r.curve === fakerWalls[0] as unknown as Curve);\r\n let r2 = v2.routes.find(r => r.curve === fakerWalls[2] as unknown as Curve);\r\n\r\n let r3 = v1.routes.find(r => r.curve === fakerWalls[1] as unknown as Curve);\r\n if (r3.isReverse) fakerWalls[1].Reverse();\r\n\r\n if (!r1.isReverse) fakerWalls[0].Reverse();\r\n if (r2.isReverse) fakerWalls[2].Reverse();\r\n\r\n {\r\n let length1 = GetHoleLengthOfIndex(hole, 0);\r\n let length2 = GetHoleLengthOfIndex(hole, 2);\r\n\r\n {\r\n let orgWall = hole.RelevancyWalls[0].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (!r1.isReverse)\r\n length1 = Math.min(length1, orgWall.Length * ranges[0][1]);\r\n else\r\n length1 = Math.min(length1, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n\r\n fakerWalls[0].StartPoint = fakerWalls[0].GetPointAtDistance(fakerWalls[0].Length - length1);\r\n }\r\n\r\n {\r\n let orgWall = hole.RelevancyWalls[2].Object;\r\n let ranges = ParseWallRange(orgWall);\r\n if (r3.isReverse)\r\n length2 = Math.min(length2, orgWall.Length * (1 - arrayLast(ranges)[0]));\r\n else\r\n length2 = Math.min(length2, orgWall.Length * ranges[0][1]);\r\n\r\n fakerWalls[2].EndPoint = fakerWalls[2].GetPointAtDistance(length2);\r\n }\r\n }\r\n }\r\n\r\n new RoomWallParse(false, undefined, false).Parse(fakerWalls);\r\n hole.FakerWalls = fakerWalls;\r\n\r\n let newPts = hole.FakerPoints;\r\n if (pts.some((p, i) => !equalv2(p, newPts[i], 1e-4)))\r\n hole.UpdatePoints();\r\n hole.Update();\r\n}\r\n\r\n\r\nexport function GetHoleLengthOfIndex(hole: RoomHolePolyline, index: number): number\r\n{\r\n if (hole.RelevancyWalls && hole.RelevancyWalls[index]?.Object)\r\n {\r\n let wall = hole.RelevancyWalls[index].Object;\r\n\r\n if (wall instanceof RoomWallLine)\r\n return hole.Points[index].distanceTo(hole.Points[index + 1]);\r\n else if (wall instanceof RoomWallArc)\r\n {\r\n let p1 = hole.Points[index];\r\n let p2 = hole.Points[index + 1];\r\n\r\n let param1 = wall.GetParamAtPoint(p1.clone().setZ(wall.Z));\r\n let param2 = wall.GetParamAtPoint(p2.clone().setZ(wall.Z));\r\n\r\n if (!isNaN(param1) && !isNaN(param2))\r\n return Math.abs(wall.GetDistAtParam(param1) - wall.GetDistAtParam(param2));\r\n\r\n let b = p1.distanceTo(p2);\r\n if (b < 1e-4) return 0;\r\n let r = wall.Radius;\r\n let l = 2 * Math.asin(b / (2 * r)) * r;//http://zhidao.baidu.com/question/553357442/answer/1393358387\r\n return l;\r\n }\r\n }\r\n return 0;\r\n}\r\n","import { TemplateParam } from \"../DatabaseServices/Template/Param/TemplateParam\";\r\n\r\ntype LoadParamMaterialFunction = (template: TemplateParam) => Promise<void>;\r\n\r\nexport const _LoadParamMaterialInjectFunctions: LoadParamMaterialFunction[] = [];\r\n\r\nexport async function LoadParamMaterial(template: TemplateParam): Promise<void>\r\n{\r\n for (let f of _LoadParamMaterialInjectFunctions)\r\n await f(template);\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { arrayRemoveDuplicateBySort } from \"../../Common/ArrayExt\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { BoardType } from \"../../DatabaseServices/Entity/BoardInterface\";\r\nimport { Box3Ext, SplitType } from \"../Box\";\r\nimport { XAxis, YAxis, ZAxis, equaln, isParallelTo } from \"../GeUtils\";\r\nimport { VisualSpaceBox } from './../../Editor/VisualSpaceBox';\r\n\r\nexport class ISpaceParse\r\n{\r\n /**\r\n * 解析空间成功\r\n */\r\n ParseOK = false;\r\n\r\n /**\r\n * 空间占地盒子\r\n */\r\n SpaceBox: Box3Ext;\r\n\r\n /**\r\n * 空间盒子所在的位置矩阵\r\n */\r\n SpaceOCS: Matrix4;\r\n SpaceOCSInv: Matrix4;\r\n\r\n /**\r\n * 板件映射表\r\n */\r\n BoardMap: Map<BoardType, Board[]> = new Map();\r\n\r\n /**\r\n * 解析空间所用的板件列表\r\n */\r\n Boards: Board[];\r\n\r\n LeftBoard: Board;\r\n RightBoard: Board;\r\n\r\n /**\r\n * 动态中,禁止执行二次操作\r\n */\r\n IsDynamic: Boolean = false;\r\n /**选到的虚拟空间 */\r\n VisualSpaceBox: VisualSpaceBox;\r\n Rotation = { x: 0, y: 0, z: 0 };\r\n\r\n /**\r\n * # 构造后请手动调用Parse()方法.\r\n * @param boards 板件列表\r\n * @param [spaceOCS] 默认空间矩阵,如果不设置将使用第一块板作为空间矩阵\r\n */\r\n constructor(boards?: Board[], spaceOCS?: Matrix4)\r\n {\r\n this.Boards = boards;\r\n if (spaceOCS)\r\n this.SpaceOCS = spaceOCS;\r\n else if (boards && boards.length > 0)\r\n this.SpaceOCS = boards[0].SpaceOCS;\r\n else\r\n this.SpaceOCS = new Matrix4();\r\n\r\n this.SpaceOCSInv = new Matrix4().getInverse(this.SpaceOCS);\r\n\r\n this.GeneralBoardMap();\r\n }\r\n\r\n async Parse() { }\r\n\r\n get Size()\r\n {\r\n if (this.SpaceBox)\r\n return this.SpaceBox.getSize(new Vector3());\r\n return new Vector3();\r\n }\r\n\r\n get DrawCS(): Matrix4\r\n {\r\n if (!this.ParseOK) return new Matrix4();\r\n let scs = this.SpaceOCS.clone();\r\n let p = this.SpaceBox.min.clone().applyMatrix4(scs);\r\n scs.setPosition(p);\r\n return scs;\r\n }\r\n\r\n protected GetBoardInSpaceType(br: Board): BoardType\r\n {\r\n //使用板件向量判断类型,而不是板件类型\r\n let normal = br.Normal.transformDirection(this.SpaceOCSInv);\r\n let type: BoardType;\r\n if (isParallelTo(XAxis, normal, 1e-3))\r\n type = BoardType.Vertical;\r\n else if (isParallelTo(YAxis, normal, 1e-3))\r\n type = BoardType.Behind;\r\n else if (isParallelTo(ZAxis, normal, 1e-3))\r\n type = BoardType.Layer;\r\n\r\n return type;\r\n }\r\n\r\n /**\r\n * 构造板件类型Map\r\n */\r\n protected GeneralBoardMap()\r\n {\r\n if (this.Boards && this.Boards.length > 0)\r\n {\r\n this.BoardMap.clear();\r\n\r\n for (let br of this.Boards)\r\n {\r\n let type = this.GetBoardInSpaceType(br);\r\n if (type === undefined) continue;\r\n\r\n let brs = this.BoardMap.get(type);\r\n if (brs)\r\n brs.push(br);\r\n else\r\n this.BoardMap.set(type, [br]);\r\n }\r\n }\r\n }\r\n /**\r\n * 解析板件的盒子,并且(排序,归并)\r\n * @param boardCol\r\n * @param splitType\r\n */\r\n protected ParseBoardBox(boardCol: Board[], splitType: SplitType): Box3Ext[]\r\n {\r\n let boxCol = boardCol.map(b => b.GetBoundingBoxInMtx(this.SpaceOCSInv));\r\n\r\n //查找最左的板和最右的板\r\n if (splitType === SplitType.X)\r\n {\r\n let minX = Infinity;\r\n let leftIndex = 0;\r\n let maxX = -Infinity;\r\n let rightIndex = 0;\r\n\r\n for (let i = 0; i < boxCol.length; i++)\r\n {\r\n let box = boxCol[i];\r\n if (box.min.x < minX)\r\n {\r\n minX = box.min.x;\r\n leftIndex = i;\r\n }\r\n\r\n if (box.max.x > maxX)\r\n {\r\n maxX = box.max.x;\r\n rightIndex = i;\r\n }\r\n }\r\n\r\n this.LeftBoard = boardCol[leftIndex];\r\n this.RightBoard = boardCol[rightIndex];\r\n }\r\n\r\n //根据分割类型排序\r\n boxCol.sort((b1, b2) =>\r\n {\r\n return b1.min.getComponent(splitType) - b2.min.getComponent(splitType);\r\n });\r\n\r\n //归并盒子\r\n arrayRemoveDuplicateBySort(boxCol,\r\n (b1, b2) =>\r\n {\r\n if (\r\n //对齐\r\n equaln(\r\n b1.min.getComponent(splitType),\r\n b2.min.getComponent(splitType),\r\n 1e-2\r\n )\r\n &&\r\n //厚度相等\r\n equaln(\r\n b1.getSize(new Vector3()).getComponent(splitType),\r\n b2.getSize(new Vector3()).getComponent(splitType),\r\n 1e-2\r\n )\r\n )\r\n {\r\n b1.union(b2);\r\n return true;\r\n }\r\n return false;\r\n }\r\n );\r\n\r\n return boxCol;\r\n }\r\n}\r\n","import { safeEval } from \"../../../Common/eval\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { TemplateParam } from \"../Param/TemplateParam\";\r\n\r\n/**\r\n * 模版动作\r\n */\r\n@Factory\r\nexport class TemplateAction\r\n{\r\n @AutoRecord Name: string = \"动作\";\r\n /** 表达式应该只能依赖自身 */\r\n @AutoRecord Expr: string;\r\n @AutoRecord Description: string;\r\n parent: TemplateParam;\r\n WriteAllObjectRecord()\r\n {\r\n if (this.parent)\r\n this.parent.WriteAllObjectRecord();\r\n }\r\n Update(paramDiff: number | string, newValue: number | string)\r\n {\r\n if (this.Expr)\r\n {\r\n let varDefines = {};\r\n varDefines[this.parent.name] = newValue;\r\n newValue = safeEval(this.Expr, varDefines) || newValue;\r\n\r\n varDefines[this.parent.name] = paramDiff;\r\n paramDiff = safeEval(this.Expr, varDefines) || paramDiff;\r\n }\r\n\r\n this._Update(paramDiff, newValue);\r\n }\r\n\r\n\r\n /**\r\n * @重载\r\n */\r\n protected _Update(paramDiff: number | string, newValue: number | string)\r\n {\r\n\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.Name = file.Read();\r\n if (ver > 2)\r\n {\r\n this.Expr = file.Read();\r\n this.Description = file.Read();\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n file.Write(this.Name);\r\n file.Write(this.Expr);\r\n file.Write(this.Description);\r\n }\r\n}\r\n","import { Intersection, Matrix4, Object3D, Vector3 } from 'three';\r\nimport { Entity } from '../DatabaseServices/Entity/Entity';\r\nimport { ObjectSnapMode } from './ObjectSnapMode';\r\nimport { SelectSet } from './SelectSet';\r\n\r\n//当前仅在GetEntity 和Ssget上严格实现了 None 和 Other的情况\r\n//其他的只有None 没有Other(其他的也不可能出现想选没选到的情况)\r\n\r\nexport enum PromptStatus\r\n{\r\n None = 0, //用户想选,但是没选到(手滑了 没点到)\r\n Cancel = -1,\r\n OK = 1,\r\n Keyword = 2,\r\n Other = 4,//用户不想选了,直接拍桌子要求上菜 GetEntity(右键 右键<确认> 空格)\r\n String = 8,\r\n Error = -2\r\n}\r\n\r\n// export enum Errno 未来某一天我们可能需要这个东西\r\n// {\r\n// Space = 0,\r\n// Enter = 1,\r\n// Esc = 2,\r\n// Left = 3,\r\n// Right = 4,\r\n// }\r\n\r\nexport class PromptResult\r\n{\r\n Status: PromptStatus = PromptStatus.None;\r\n\r\n StringResult?: string;\r\n //是否为子级菜单\r\n isChild?: boolean = false;\r\n Parent?: string;\r\n //当用户选择失败的时候,提供当前选择失败的原因\r\n // Errno?: Errno;\r\n}\r\n\r\nexport class PromptPointResult extends PromptResult\r\n{\r\n SnapMode: ObjectSnapMode;\r\n SnapEntity: Entity;\r\n intersection: Intersection;\r\n private _point: Vector3;\r\n /**\r\n * 返回三维点\r\n *\r\n * @readonly\r\n * @memberof PromptPointResult\r\n */\r\n get Point()\r\n {\r\n return this._point.clone();\r\n }\r\n set Point(pt: Vector3)\r\n {\r\n this._point = pt.clone();\r\n }\r\n constructor()\r\n {\r\n super();\r\n this._point = new Vector3();\r\n }\r\n}\r\n\r\nexport class PromptDistendResult extends PromptResult\r\n{\r\n private _value: number;\r\n get Distance()\r\n {\r\n return this._value;\r\n }\r\n set Distance(v: number)\r\n {\r\n this._value = v;\r\n }\r\n}\r\n\r\nexport class PromptRectResult extends PromptResult\r\n{\r\n UCS: Matrix4;\r\n\r\n Point1UCS: Vector3;\r\n Point2UCS: Vector3;\r\n\r\n Point1WCS: Vector3;\r\n Point2WCS: Vector3;\r\n\r\n get Width()\r\n {\r\n return this.Point1UCS.x - this.Point2UCS.x;\r\n }\r\n\r\n get Height()\r\n {\r\n return this.Point1UCS.y - this.Point2UCS.y;\r\n }\r\n}\r\n\r\nexport class PromptEntityResult extends PromptResult\r\n{\r\n constructor(\r\n //选择到的图形\r\n public Entity?: Entity,\r\n //点取的点\r\n public Point?: Vector3,\r\n public Object?: Object3D,\r\n public IsCircle?: boolean,\r\n )\r\n {\r\n super();\r\n }\r\n}\r\n\r\nexport class PromptSsgetResult extends PromptResult\r\n{\r\n SelectSet?: SelectSet;\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { ComputerCurvesNormalOCS, GetPointAtCurveDir } from \"../Common/CurveUtils\";\r\nimport { Arc } from \"../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../DatabaseServices/Entity/Board\";\r\nimport { Circle } from \"../DatabaseServices/Entity/Circle\";\r\nimport { Curve } from \"../DatabaseServices/Entity/Curve\";\r\nimport { Ellipse } from \"../DatabaseServices/Entity/Ellipse\";\r\nimport { Line } from \"../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../DatabaseServices/Entity/Polyline\";\r\nimport { Spline } from \"../DatabaseServices/Spline\";\r\nimport { PromptEntityResult, PromptPointResult } from \"../Editor/PromptResult\";\r\nimport { AsVector2, angle, equaln, equalv3, isIntersect2, isParallelTo, midPoint } from \"../Geometry/GeUtils\";\r\nimport { Orbit } from \"../Geometry/Orbit\";\r\nimport { IntersectOption } from \"../GraphicsSystem/IntersectWith\";\r\n\r\nfunction Encode(res: PromptEntityResult, enMap: (PromptEntityResult[])[])\r\n{\r\n if (res.Entity instanceof Line || res.Entity.constructor.name === \"RoomWallLine\")\r\n {\r\n enMap[0].push(res);\r\n return 1;\r\n }\r\n else if (res.Entity instanceof Arc || res.constructor.name === \"RoomWallArc\")\r\n {\r\n enMap[1].push(res);\r\n return 2;\r\n }\r\n else if (res.Entity instanceof Polyline)\r\n {\r\n enMap[2].push(res);\r\n return 4;\r\n }\r\n else if (res.Entity instanceof Spline)\r\n {\r\n enMap[3].push(res);\r\n return 8;\r\n }\r\n else if (res.Entity instanceof Ellipse)\r\n {\r\n enMap[4].push(res);\r\n return 16;\r\n }\r\n}\r\n\r\n//把圆转换成圆弧,避免圆参与计算.\r\nfunction CircleEnResToArc(enRes: PromptEntityResult)\r\n{\r\n if (enRes.Entity instanceof Circle)\r\n {\r\n let an = angle(enRes.Point.clone().applyMatrix4(enRes.Entity.OCSInv)) + Math.PI;\r\n let arc = new Arc(new Vector3(), enRes.Entity.Radius, an, an + 0.1);\r\n arc.ApplyMatrix(enRes.Entity.OCS);\r\n arc.Center = enRes.Entity.Center;\r\n enRes.Entity = arc;\r\n enRes.IsCircle = true;\r\n }\r\n}\r\n\r\nfunction GetFilletCurve(enRes: PromptEntityResult): [Curve, number]\r\n{\r\n if (enRes.Entity instanceof Polyline)\r\n {\r\n let pl = enRes.Entity;\r\n let param = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes.Point, false));\r\n let paramF = Math.floor(param);\r\n return [pl.GetCurveAtParam(param), paramF];\r\n }\r\n else\r\n return [enRes.Entity as Curve, NaN];\r\n}\r\n\r\nenum ExtendType\r\n{\r\n Start = 1,\r\n End = 2,\r\n}\r\n\r\nexport interface FilletRes\r\n{\r\n cu1?: Curve;\r\n cu1Extend?: ExtendType;\r\n cu2?: Curve;\r\n cu2Extend?: ExtendType;\r\n arc?: Arc;\r\n}\r\n\r\ntype CurveExtend = { Curve: Curve, ExtType: ExtendType; };\r\n\r\nexport class FilletUtils\r\n{\r\n FilletRadius: number;\r\n Fillet(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n CircleEnResToArc(enRes1);\r\n CircleEnResToArc(enRes2);\r\n\r\n let { enType, enMap } = this.EnCode(enRes1, enRes2);\r\n if (enType === 4 && enRes1.Entity === enRes2.Entity)\r\n return this.FilletPolyLineSelf(enRes1, enRes2);\r\n else if (enType >= 4 && enType < 8)\r\n return this.FilletPolylineAndCurve(enRes1, enRes2);\r\n\r\n let interPts = this.GetIntersectAndSort(enRes1, enRes2, enType, enMap);\r\n if (interPts.length === 0\r\n || (interPts.length === 1 && (enType & 2)))//圆弧相切\r\n {\r\n if (enType === 1)\r\n return this.FilletParallelLine(enRes1, enRes2);\r\n else if (enType === 3)\r\n return this.FilletLineAndArc(enMap, enRes1);\r\n else if (enType === 2)\r\n return this.FilletArcAndArc(enRes1, enRes2);\r\n return;\r\n }\r\n\r\n return this.FilletLineOrArc(enRes1, enRes2, interPts);\r\n }\r\n\r\n private FilletLineOrArc(enRes1: PromptEntityResult, enRes2: PromptEntityResult, interPts: Vector3[]): FilletRes\r\n {\r\n let iPt = interPts[0];\r\n\r\n //裁剪延伸,使两条线组成一个尖角\r\n let splitedCu1 = this.SplitCurve(enRes1, iPt, interPts);\r\n let splitedCu2 = this.SplitCurve(enRes2, iPt, interPts);\r\n\r\n let fRadius = this.FilletRadius;\r\n\r\n\r\n let res: FilletRes = { cu1: splitedCu1.Curve, cu2: splitedCu2.Curve, arc: undefined };\r\n\r\n if (fRadius > 0)\r\n {\r\n //尝试获取曲线所在的统一XY平面矩阵\r\n let cuOCS = ComputerCurvesNormalOCS([splitedCu1.Curve, splitedCu2.Curve]);\r\n\r\n //角平分线向量.\r\n let bisectorVec: Vector3 = new Vector3();\r\n let c1Derv = this.ComputerDerv(splitedCu1, bisectorVec);\r\n let c2Derv = this.ComputerDerv(splitedCu2, bisectorVec);\r\n\r\n //方向相反\r\n if (equalv3(bisectorVec, new Vector3()))\r\n return;\r\n\r\n //相切\r\n if (equalv3(c2Derv, c1Derv))\r\n {\r\n bisectorVec.set(0, 0, 0);\r\n c1Derv = this.ComputerDerv2(splitedCu1, bisectorVec);\r\n c2Derv = this.ComputerDerv2(splitedCu2, bisectorVec);\r\n }\r\n\r\n let ocsInv = new Matrix4().getInverse(cuOCS);\r\n let cu1RoOcsInv = new Matrix4().extractRotation(ocsInv);\r\n\r\n //修改曲线矩阵至同一个平面\r\n this.SetCurveOCS(splitedCu1.Curve, cuOCS);\r\n this.SetCurveOCS(splitedCu2.Curve, cuOCS);\r\n\r\n [c1Derv, c2Derv, bisectorVec].forEach(v => v.applyMatrix4(cu1RoOcsInv));\r\n\r\n let offCu1 = splitedCu1.Curve.GetOffsetCurves(\r\n fRadius * -Math.sign(c1Derv.cross(bisectorVec).z))[0];\r\n let offCu2 = splitedCu2.Curve.GetOffsetCurves(\r\n fRadius * -Math.sign(c2Derv.cross(bisectorVec).z))[0];\r\n\r\n if (!offCu1 || !offCu2)\r\n return;\r\n\r\n // JigUtils.Draw(new Line(iPt, iPt.clone().add(c1Derv.clone().multiplyScalar(10)))).ColorIndex = 1;\r\n // JigUtils.Draw(new Line(iPt, iPt.clone().add(c2Derv.clone().multiplyScalar(10)))).ColorIndex = 2;\r\n // JigUtils.Draw(new Line(iPt, iPt.clone().add(bisectorVec))).ColorIndex = 3;\r\n // offCu1.ColorIndex = 6;\r\n // offCu2.ColorIndex = 6;\r\n // JigUtils.Draw(offCu1.Clone());\r\n // JigUtils.Draw(offCu2.Clone());\r\n\r\n let center = offCu1.IntersectWith(offCu2, IntersectOption.ExtendNone)\r\n .sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(iPt) - p2.distanceToSquared(iPt);\r\n })[0];\r\n\r\n if (!center)\r\n return;\r\n\r\n let arcP1 = splitedCu1.Curve.GetClosestPointTo(center, true);\r\n let arcP2 = splitedCu2.Curve.GetClosestPointTo(center, true);\r\n if (!splitedCu1.Curve.PtOnCurve(arcP1) || !splitedCu2.Curve.PtOnCurve(arcP2))\r\n return;\r\n\r\n //时针校验\r\n let v1 = arcP1.clone().sub(center).applyMatrix4(cu1RoOcsInv);\r\n let v2 = arcP2.clone().sub(center).applyMatrix4(cu1RoOcsInv);\r\n\r\n //绘制圆弧\r\n let arc = new Arc(new Vector3(), this.FilletRadius, angle(v1), angle(v2), v1.cross(v2).z < 0);\r\n arc.ApplyMatrix(cuOCS);\r\n arc.Center = center;\r\n res.arc = arc;\r\n //延伸或者裁剪到圆弧点\r\n this.ExtendPt(splitedCu1, arcP1);\r\n this.ExtendPt(splitedCu2, arcP2);\r\n }\r\n\r\n res.cu1Extend = splitedCu1.ExtType;\r\n res.cu2Extend = splitedCu2.ExtType;\r\n\r\n return res;\r\n }\r\n\r\n /**\r\n * 设置直线的坐标系 以便可以正确的被偏移\r\n * @param {Curve} cu\r\n * @param {Matrix4} newOCS\r\n */\r\n SetCurveOCS(cu: Curve, newOCS: Matrix4)\r\n {\r\n if (cu instanceof Line)\r\n {\r\n let sp = cu.StartPoint;\r\n let ep = cu.EndPoint;\r\n cu.ApplyMatrix(cu.OCSInv).ApplyMatrix(newOCS);\r\n cu.StartPoint = sp;\r\n cu.EndPoint = ep;\r\n }\r\n }\r\n\r\n FilletPolyLineSelf(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let pl = enRes1.Entity as Polyline;\r\n\r\n let param1 = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes1.Point, false));\r\n let param2 = pl.GetParamAtPoint(pl.GetClosestPointTo(enRes2.Point, false));\r\n\r\n if (param1 > param2)\r\n {\r\n [param1, param2] = [param2, param1];\r\n [enRes1, enRes2] = [enRes2, enRes1];\r\n }\r\n\r\n let parF1 = Math.floor(param1);\r\n let parF2 = Math.floor(param2);\r\n\r\n //共线\r\n if (parF1 === parF2)\r\n return;\r\n\r\n let c1 = pl.GetCurveAtParam(param1);\r\n let c2 = pl.GetCurveAtParam(param2);\r\n\r\n if (equalv3(c1.GetFirstDeriv(1).normalize(), c2.GetFirstDeriv(0).normalize()))\r\n return;\r\n\r\n let es1 = new PromptEntityResult();\r\n es1.Entity = c1;\r\n es1.Point = enRes1.Point;\r\n\r\n let es2 = new PromptEntityResult();\r\n es2.Entity = c2;\r\n es2.Point = enRes2.Point;\r\n let fres = this.Fillet(es1, es2);\r\n\r\n if (!fres)\r\n return;\r\n\r\n let pln = pl.Clone();\r\n\r\n if (fres.cu1 instanceof Arc)\r\n pln.SetBulgeAt(parF1, fres.cu1.Bul);\r\n\r\n if (fres.cu2 instanceof Arc)\r\n pln.SetBulgeAt(parF2, fres.cu2.Bul);\r\n\r\n let splitType1 = fres.cu1Extend;\r\n let splitType2 = fres.cu2Extend;\r\n\r\n if (splitType1 === splitType2)\r\n return;\r\n if (!fres.arc)\r\n {\r\n if (splitType1 === ExtendType.End)\r\n {\r\n let ep = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF1 + 1, ep);\r\n\r\n let sp = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF2, sp);\r\n //移除多余的点\r\n pln.LineData.splice(parF1 + 1, parF2 - parF1 - 1);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n else\r\n {\r\n let ep = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF1, ep);\r\n\r\n let sp = AsVector2(fres.cu2.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF2 + 1, sp);\r\n\r\n pln.LineData.splice(parF2 + 2);\r\n pln.LineData.splice(0, parF1);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n }\r\n\r\n if (splitType1 === ExtendType.End)//没有经过起点\r\n {\r\n let sp = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv));\r\n if (parF2 - parF1 === 1)\r\n {\r\n pln.AddVertexAt(parF1 + 1, sp);\r\n parF2++;\r\n }\r\n else\r\n pln.SetPointAt(parF1 + 1, sp);\r\n pln.SetBulgeAt(parF1 + 1, fres.arc.Bul);\r\n\r\n let ep = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF2, ep);\r\n\r\n //移除多余的点\r\n pln.LineData.splice(parF1 + 2, parF2 - parF1 - 2);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n else//经过起点\r\n {\r\n let sp = AsVector2(fres.arc.EndPoint.applyMatrix4(pln.OCSInv));\r\n\r\n let keepF1 = 0;\r\n if (parF2 + 1 <= pln.LineData.length)\r\n {\r\n if (parF1 === 0 || equaln(pln.GetBulgeAt(parF1 - 1), 0))\r\n pln.AddVertexAt(parF2 + 1, sp);\r\n else\r\n {\r\n pln.SetPointAt(parF1 - 1, sp);\r\n keepF1 = -1;//保留圆弧位\r\n }\r\n }\r\n else\r\n pln.SetPointAt(parF2 + 1, sp);\r\n\r\n if (keepF1 === 0)\r\n pln.SetBulgeAt(parF2 + 1, -fres.arc.Bul);\r\n else\r\n pln.SetBulgeAt(parF1 - 1, -fres.arc.Bul);\r\n\r\n let ep = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(parF1, ep);\r\n pln.CloseMark = true;\r\n\r\n pln.LineData.splice(parF2 + 2 + keepF1);\r\n pln.LineData.splice(0, parF1 + keepF1);\r\n pln.Update();\r\n return { cu1: pln };\r\n }\r\n }\r\n\r\n private FilletPolylineAndCurve(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let arr1 = GetFilletCurve(enRes1);\r\n let arr2 = GetFilletCurve(enRes2);\r\n\r\n let [cu1, paramF1] = arr1;\r\n let [cu2, paramF2] = arr2;\r\n\r\n let es1 = new PromptEntityResult();\r\n es1.Entity = cu1;\r\n es1.Point = enRes1.Point;\r\n\r\n let es2 = new PromptEntityResult();\r\n es2.Entity = cu2;\r\n es2.Point = enRes2.Point;\r\n\r\n let fres = this.Fillet(es1, es2);\r\n if (fres)\r\n {\r\n let cus: Curve[] = [];\r\n\r\n let isFirst = false;\r\n\r\n if (fres.cu1)\r\n {\r\n if (enRes1.Entity instanceof Polyline)\r\n {\r\n isFirst = true;\r\n let pln = enRes1.Entity.Clone();\r\n pln.DigestionCloseMark();\r\n\r\n if (fres.cu1 instanceof Arc)\r\n pln.SetBulgeAt(paramF1, fres.cu1.Bul);\r\n\r\n if (fres.cu1Extend === ExtendType.End)\r\n {\r\n pln.LineData.splice(paramF1 + 2);\r\n\r\n let ep = AsVector2(fres.cu1.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(paramF1 + 1, ep);\r\n }\r\n else\r\n {\r\n pln.LineData.splice(0, paramF1);\r\n let sp = AsVector2(fres.cu1.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(0, sp);\r\n }\r\n\r\n cus.push(pln);\r\n }\r\n else if (!enRes1.IsCircle)\r\n cus.push(fres.cu1);\r\n }\r\n\r\n if (fres.arc)\r\n cus.push(fres.arc);\r\n\r\n if (fres.cu2)\r\n {\r\n if (enRes2.Entity instanceof Polyline)\r\n {\r\n let pln = enRes2.Entity.Clone();\r\n pln.DigestionCloseMark();\r\n\r\n if (fres.cu2 instanceof Arc)\r\n pln.SetBulgeAt(paramF2, fres.cu2.Bul);\r\n\r\n if (fres.cu2Extend === ExtendType.End)\r\n {\r\n pln.LineData.splice(paramF2 + 2);\r\n\r\n let ep = AsVector2(fres.cu2.EndPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(paramF2 + 1, ep);\r\n }\r\n else\r\n {\r\n pln.LineData.splice(0, paramF2);\r\n let sp = AsVector2(fres.cu2.StartPoint.applyMatrix4(pln.OCSInv));\r\n pln.SetPointAt(0, sp);\r\n }\r\n\r\n cus.push(pln);\r\n cus.reverse();\r\n }\r\n else if (!enRes2.IsCircle)\r\n cus.push(fres.cu2);\r\n }\r\n\r\n if (cus.length > 0)\r\n {\r\n let pl = cus[0] as Polyline;\r\n if (!(pl instanceof Polyline))\r\n return;\r\n\r\n for (let i = 1; i < cus.length; i++)\r\n pl.Join(cus[i]);\r\n\r\n if (isFirst)\r\n return { cu1: pl };\r\n else\r\n return { cu2: pl };\r\n }\r\n\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n FilletPolyLineAllAngular(enRes1: PromptEntityResult): FilletRes\r\n {\r\n let pl = enRes1.Entity as Polyline;\r\n\r\n let cus = pl.Explode();\r\n let count = cus.length;\r\n if (pl.IsClose)\r\n cus.push(cus[0]);\r\n\r\n let ncus = [];\r\n\r\n for (let i = 0; i < count; i++)\r\n {\r\n let c1 = cus[i];\r\n let c2 = cus[i + 1];\r\n\r\n ncus.push(c1);\r\n\r\n if (!c2)\r\n break;\r\n\r\n if (equalv3(c1.GetFirstDeriv(1).normalize(), c2.GetFirstDeriv(0).normalize()))\r\n continue;\r\n\r\n let es1 = new PromptEntityResult();\r\n es1.Entity = c1;\r\n es1.Point = c1.EndPoint;\r\n\r\n let es2 = new PromptEntityResult();\r\n es2.Entity = c2;\r\n es2.Point = c2.StartPoint;\r\n\r\n let fres = this.Fillet(es1, es2);\r\n if (fres)\r\n {\r\n if (fres.cu1)\r\n c1.CopyFrom(fres.cu1);\r\n if (fres.cu2)\r\n c2.CopyFrom(fres.cu2);\r\n\r\n if (fres.arc)\r\n ncus.push(fres.arc);\r\n }\r\n }\r\n\r\n let pln = pl.Clone();\r\n pln.LineData = [];\r\n pln.ApplyMatrix(pln.OCSInv);\r\n pln.CloseMark = false;\r\n for (let cu of ncus)\r\n pln.Join(cu);\r\n\r\n pln.CloseMark = pl.CloseMark;\r\n\r\n return {\r\n cu1: pln,\r\n cu2: undefined,\r\n arc: undefined\r\n };\r\n }\r\n\r\n FindNearestPt(pts: Vector3[], target: Vector3): Vector3\r\n {\r\n let res = pts[0];\r\n let dis = Infinity;\r\n for (let p of pts)\r\n {\r\n let d = p.distanceTo(target);\r\n if (d < dis)\r\n {\r\n res = p;\r\n dis = d;\r\n }\r\n }\r\n return res;\r\n }\r\n\r\n FilletBoard(brRes: PromptEntityResult, ptRes: PromptPointResult): Polyline | string\r\n {\r\n let br = brRes.Entity as Board;\r\n let brContour = br.ContourCurve.Clone() as Polyline;\r\n\r\n //------1.求交\r\n let brResPt = brRes.Point.clone().applyMatrix4(br.OCSInv).setZ(0);\r\n let ptResPt = ptRes.Point.clone().applyMatrix4(br.OCSInv).setZ(0);\r\n let l = new Line(brResPt, ptResPt);\r\n\r\n let ipts = l.IntersectWith(brContour, IntersectOption.ExtendThis);\r\n\r\n if (ipts.length > 2)//超过2个则有可能有多余交点\r\n //找最近点\r\n ipts = [this.FindNearestPt(ipts, brResPt), this.FindNearestPt(ipts, ptResPt)];\r\n\r\n if (ipts.length !== 2)\r\n return \"倒角失败!交点个数异常.\";\r\n\r\n //------2.倒角\r\n let es1 = new PromptEntityResult(brContour, ipts[0]);\r\n let es2 = new PromptEntityResult(brContour, ipts[1]);\r\n\r\n let res = this.FilletPolyLineSelf(es1, es2);\r\n if (res && res.cu1)\r\n return res.cu1 as Polyline;\r\n else\r\n return \"倒角失败\";\r\n }\r\n\r\n /**\r\n * 平行线倒角\r\n */\r\n private FilletParallelLine(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let l1 = enRes1.Entity as Line;\r\n let l2 = enRes2.Entity as Line;\r\n\r\n let l1Derv = l1.GetFirstDeriv(0);\r\n if (!isParallelTo(l1Derv, l2.GetFirstDeriv(0)))\r\n return;\r\n\r\n let vec = l2.StartPoint.sub(l1.StartPoint);\r\n if (isParallelTo(vec, l1Derv))\r\n return;\r\n\r\n let par1 = l2.GetClosestAtPoint(l1.StartPoint, true).param;\r\n let par2 = l2.GetClosestAtPoint(l1.EndPoint, true).param;\r\n if (!isIntersect2(0, 1, par1, par2))\r\n return;\r\n\r\n let lineClone1 = l1.Clone();\r\n let lineClone2 = l2.Clone();\r\n\r\n let par = l1.GetClosestAtPoint(enRes1.Point, true).param;\r\n\r\n let parFix = Math.round(par);\r\n let ptFix = lineClone1.GetPointAtParam(parFix);\r\n let ptL2Fix = lineClone2.GetClosestAtPoint(ptFix, true).closestPt;\r\n\r\n let cu1Extend = parFix === 0 ? ExtendType.Start : ExtendType.End;\r\n let cu2Extend: ExtendType;\r\n if ((par1 > par2) === (parFix === 1))\r\n {\r\n lineClone2.StartPoint = ptL2Fix;\r\n cu2Extend = ExtendType.Start;\r\n }\r\n else\r\n {\r\n lineClone2.EndPoint = ptL2Fix;\r\n cu2Extend = ExtendType.End;\r\n }\r\n\r\n let radius = ptFix.distanceTo(ptL2Fix) / 2;\r\n if (radius < 1e-3)\r\n return;\r\n\r\n let arcCenter = midPoint(ptFix, ptL2Fix);\r\n\r\n let sv = ptFix.sub(arcCenter);\r\n let ev = ptL2Fix.sub(arcCenter);\r\n\r\n if (parFix === 0)\r\n l1Derv.negate();\r\n\r\n //平面矩阵\r\n let xVec = new Vector3();\r\n let yVec = new Vector3();\r\n let zVec = vec.cross(l1Derv).normalize();\r\n let l1Normal = l1.Normal;\r\n if (isParallelTo(zVec, l1Normal)) zVec = l1Normal;\r\n\r\n Orbit.ComputUpDirection(zVec, yVec, xVec);\r\n let mtx = new Matrix4().makeBasis(xVec, yVec, zVec);\r\n let mtxInv = new Matrix4().getInverse(mtx);\r\n //变换\r\n sv.applyMatrix4(mtxInv);\r\n ev.applyMatrix4(mtxInv);\r\n l1Derv.applyMatrix4(mtxInv);\r\n\r\n let sa = angle(sv);\r\n let ea = angle(ev);\r\n let clockwise = ev.cross(l1Derv).z > 0;\r\n let arc = new Arc(new Vector3(), radius, sa, ea, clockwise);\r\n arc.ApplyMatrix(mtx);\r\n arc.Center = arcCenter;\r\n\r\n return {\r\n cu1: lineClone1,\r\n cu1Extend,\r\n cu2: lineClone2,\r\n cu2Extend,\r\n arc,\r\n };\r\n }\r\n\r\n /**\r\n * 计算圆弧与圆弧没有交点的情况下倒角结果.\r\n * @param enRes1\r\n * @param enRes2\r\n * @returns arc and arc\r\n */\r\n private FilletArcAndArc(enRes1: PromptEntityResult, enRes2: PromptEntityResult): FilletRes\r\n {\r\n let a1 = enRes1.Entity as Arc;\r\n let a2 = enRes2.Entity as Arc;\r\n\r\n let arcO1 = a1.GetOffsetCurves(this.FilletRadius * (a1.IsClockWise ? -1 : 1))[0];\r\n let arcO2 = a2.GetOffsetCurves(this.FilletRadius * (a2.IsClockWise ? -1 : 1))[0];\r\n\r\n // arcO1.ColorIndex = 6;\r\n // arcO2.ColorIndex = 6;\r\n // JigUtils.Draw(arcO1);\r\n // JigUtils.Draw(arcO2);\r\n\r\n //求交\r\n let intPts = arcO1.IntersectWith(arcO2, IntersectOption.ExtendBoth);\r\n if (intPts.length === 0)\r\n return;//无交点无法倒角\r\n\r\n //两选择点的中点\r\n let clickMidp = midPoint(enRes1.Point, enRes2.Point);//用来选择合适的交点\r\n //选择合适的交点\r\n intPts.sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(clickMidp) - p2.distanceToSquared(clickMidp);\r\n });\r\n\r\n //圆弧圆心\r\n let narcCenter = intPts[0];\r\n let narcP1 = a1.GetClosestPointTo(narcCenter, true);//两圆弧和相切弧的交点\r\n let narcP2 = a2.GetClosestPointTo(narcCenter, true);\r\n\r\n let tempCircle = new Circle(narcCenter, this.FilletRadius);\r\n tempCircle.OCSNoClone.copy(a1.OCSNoClone).setPosition(narcCenter);\r\n let closestPt = a1.GetClosestPointTo(a2.Center, true);//两曲线距离对方圆心最近的点\r\n let narcMP = tempCircle.GetClosestPointTo(closestPt, false);//相切圆距离closestPt最近的点\r\n\r\n //构造圆弧\r\n let narc = new Arc().ApplyMatrix(a1.OCS).FromThreePoint(narcP1, narcMP, narcP2);\r\n\r\n let a1Clone = a1.Clone();\r\n let a2Clone = a2.Clone();\r\n\r\n let a1Param = a1.GetParamAtPoint(narcP1);\r\n let a2Param = a2.GetParamAtPoint(narcP2);\r\n\r\n let a1Derv = a1.GetFirstDeriv(a1Param).normalize();\r\n let a2Derv = a2.GetFirstDeriv(a2Param).normalize();\r\n\r\n let narcDerv0 = narc.GetFirstDeriv(0).normalize();\r\n let narcDerv1 = narc.GetFirstDeriv(1).normalize();\r\n\r\n //裁剪圆弧\r\n if (equalv3(a1Derv, narcDerv0))\r\n a1Clone.EndPoint = narcP1;\r\n else\r\n a1Clone.StartPoint = narcP1;\r\n\r\n if (equalv3(a2Derv, narcDerv1))\r\n a2Clone.StartPoint = narcP2;\r\n else\r\n a2Clone.EndPoint = narcP2;\r\n\r\n return {\r\n cu1: a1Clone,\r\n cu2: a2Clone,\r\n arc: narc\r\n };\r\n }\r\n\r\n /**\r\n * 计算直线与圆弧没有交点(或相切)的情况下倒角结果\r\n * @param enRes1\r\n * @param enRes2\r\n * @returns line and cir\r\n */\r\n private FilletLineAndArc(enMap: (PromptEntityResult[])[], enRes1: PromptEntityResult): FilletRes | undefined\r\n {\r\n let lineRes = enMap[0][0];\r\n let arcRes = enMap[1][0];\r\n\r\n let line = lineRes.Entity as Line;\r\n let arc = arcRes.Entity as Arc;\r\n\r\n let dir = GetPointAtCurveDir(line, arc.Center);\r\n\r\n let lineO = line.GetOffsetCurves(this.FilletRadius * dir)[0];\r\n let arcO = arc.GetOffsetCurves(this.FilletRadius * (arc.IsClockWise ? -1 : 1))[0];// tip面积逆时针为正, 顺时针为负.\r\n\r\n // lineO.ColorIndex = 6;\r\n // arcO.ColorIndex = 6;\r\n // JigUtils.Draw(lineO);\r\n // JigUtils.Draw(arcO);\r\n\r\n //求交\r\n let intPts = lineO.IntersectWith(arcO, IntersectOption.ExtendBoth);\r\n if (intPts.length === 0)\r\n return;//无交点无法倒角\r\n\r\n //两选择点的中点\r\n let clickMidp = midPoint(lineRes.Point, arcRes.Point);\r\n //选择适合的交点。\r\n intPts.sort((p1, p2) =>\r\n {\r\n return p1.distanceToSquared(clickMidp) - p2.distanceToSquared(clickMidp);\r\n });\r\n //圆弧圆心\r\n let arcCenter = intPts[0];\r\n\r\n let arcP1 = line.GetClosestPointTo(arcCenter, true);//直线与相切圆的交点\r\n let arcP2 = arc.GetClosestPointTo(arcCenter, true);//圆弧与相切圆的交点\r\n\r\n let tempCircle = new Circle(arcCenter, this.FilletRadius);\r\n tempCircle.OCSNoClone.copy(arc.OCSNoClone).setPosition(arcCenter);\r\n let { closestPt, param } = line.GetClosestAtPoint(arc.Center, true);\r\n let arcMP = tempCircle.GetClosestPointTo(closestPt, false);\r\n\r\n //构造圆弧\r\n let narc = new Arc().ApplyMatrix(arc.OCS).FromThreePoint(arcP1, arcMP, arcP2);\r\n\r\n //裁剪线\r\n let lineClone = line.Clone();\r\n let arcClone = arc.Clone();\r\n\r\n let lineExtend: ExtendType;\r\n let p1Param = line.GetParamAtPoint(arcP1);\r\n if (p1Param > param)\r\n {\r\n lineClone.StartPoint = arcP1;\r\n lineExtend = ExtendType.Start;\r\n }\r\n else\r\n {\r\n lineClone.EndPoint = arcP1;\r\n lineExtend = ExtendType.End;\r\n }\r\n\r\n //裁剪圆弧\r\n let arcParam = arc.GetParamAtPoint(arcP2);\r\n let arcDerv = arc.GetFirstDeriv(arcParam).normalize();\r\n let narcDerv = narc.GetFirstDeriv(1).normalize();\r\n\r\n let arcExtend: ExtendType;\r\n if (equalv3(arcDerv, narcDerv))\r\n {\r\n arcClone.StartPoint = arcP2;\r\n arcExtend = ExtendType.Start;\r\n }\r\n else\r\n {\r\n arcClone.EndPoint = arcP2;\r\n arcExtend = ExtendType.End;\r\n }\r\n\r\n //先选直线为真\r\n if (enRes1.Entity === line)\r\n return {\r\n cu1: lineClone,\r\n cu1Extend: lineExtend,\r\n cu2: arcClone,\r\n cu2Extend: arcExtend,\r\n arc: narc\r\n };\r\n else\r\n return {\r\n cu1: arcClone,\r\n cu1Extend: arcExtend,\r\n cu2: lineClone,\r\n cu2Extend: lineExtend,\r\n arc: narc.Reverse()//#I3BWIA 避免起点和终点方向相反导致的多段线连接错误\r\n };\r\n }\r\n\r\n //获得两曲线的交点,并且排序交点.\r\n private GetIntersectAndSort(enRes: PromptEntityResult, enRes2: PromptEntityResult, enType: number, enMap: PromptEntityResult[][])\r\n {\r\n let interPts = enRes.Entity.IntersectWith(enRes2.Entity, IntersectOption.ExtendBoth);\r\n if (interPts.length > 1)\r\n {\r\n let baseP: Vector3;\r\n if (enType & 1) //如果有直线,那么用直线\r\n baseP = enMap[0][0].Point;\r\n else if (enType === 2) //如果都是圆弧,那么取中点\r\n baseP = midPoint(enMap[1][0].Point, enMap[1][1].Point);\r\n interPts.sort((p1, p2) => p1.distanceToSquared(baseP) - p2.distanceToSquared(baseP));\r\n }\r\n return interPts;\r\n }\r\n\r\n /**\r\n * 对图元列表进行按位编码,类型映射如下:\r\n * # 1:line 2:arc 4:polyline\r\n * @param enRes\r\n * @param enRes2\r\n * @returns\r\n */\r\n private EnCode(enRes: PromptEntityResult, enRes2: PromptEntityResult)\r\n {\r\n let enMap: (PromptEntityResult[])[] = [[], [], [], [], []];\r\n let enType = 0;\r\n enType |= Encode(enRes, enMap);\r\n enType |= Encode(enRes2, enMap);\r\n return { enType, enMap };\r\n }\r\n\r\n //计算曲线在相交处的切线,取真实的切线\r\n private ComputerDerv(cuRes: CurveExtend, dervSum: Vector3)\r\n {\r\n let derv: Vector3;\r\n let cu = cuRes.Curve;\r\n if (cuRes.ExtType === ExtendType.Start)\r\n {\r\n derv = cu.GetFirstDeriv(0).normalize();\r\n dervSum.add(derv);\r\n }\r\n else\r\n {\r\n derv = cu.GetFirstDeriv(cu.EndParam).normalize();\r\n dervSum.add(derv.clone().negate());\r\n }\r\n return derv;\r\n }\r\n\r\n // 计算曲线在相交处的切线,取起点到终点的切线.(当曲线相切时调用此方法.)\r\n private ComputerDerv2(cuRes: CurveExtend, dervSum: Vector3)\r\n {\r\n let cu = cuRes.Curve;\r\n let derv = cu.EndPoint.sub(cu.StartPoint);\r\n if (cuRes.ExtType === ExtendType.Start)\r\n dervSum.add(derv);\r\n else\r\n dervSum.add(derv.clone().negate());\r\n return derv;\r\n }\r\n\r\n // 延伸或者裁剪到指定的圆弧的点.\r\n private ExtendPt(cu: CurveExtend, newP: Vector3)\r\n {\r\n if (cu.ExtType === ExtendType.Start)\r\n cu.Curve.StartPoint = newP;\r\n else\r\n cu.Curve.EndPoint = newP;\r\n }\r\n\r\n /**\r\n * 切割或者延伸曲线,尖角化\r\n *\r\n * @param cu 处理的曲线\r\n * @param interPt 原先的相交点\r\n * @param pickPoint 鼠标点击点\r\n * @returns 返回新的曲线\r\n */\r\n private SplitCurve(enRes: PromptEntityResult, interPt: Vector3, interPts: Vector3[]): CurveExtend\r\n {\r\n let cu = enRes.Entity as Curve;\r\n let pickPoint = enRes.Point;\r\n\r\n let cp = cu.GetClosestPointTo(pickPoint, false);\r\n let cus = cu.GetSplitCurvesByPts([interPt]);\r\n if (cus.length === 0)\r\n cus.push(cu.Clone() as Curve);\r\n else if (cus.length === 2)\r\n cus.sort((c1: Curve, c2: Curve) =>\r\n {\r\n return c1.GetClosestPointTo(cp, false).distanceTo(cp)\r\n < c2.GetClosestPointTo(cp, false).distanceTo(cp) ? -1 : 1;\r\n });\r\n\r\n let exType = undefined;\r\n\r\n let newCu = cus[0];\r\n if (newCu instanceof Line || newCu.constructor.name === \"RoomWallLine\")\r\n newCu.Extend(newCu.GetParamAtPoint(interPt));//延伸到需要的长度\r\n else if (newCu instanceof Arc || newCu.constructor.name === \"RoomWallArc\")\r\n {\r\n let arc = newCu as Arc;\r\n if (cus.length === 1)\r\n if (!cu.PtOnCurve(interPt))\r\n {\r\n if (cu.PtOnCurve(interPts[1]))\r\n {\r\n //交点参数\r\n let iparam = arc.GetParamAtPoint(interPts[1]);\r\n let pickParam = arc.GetParamAtAngle(arc.GetAngleAtPoint(pickPoint));\r\n\r\n if (pickParam > iparam)\r\n {\r\n arc.EndAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.End;\r\n }\r\n else\r\n {\r\n arc.StartAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.Start;\r\n }\r\n }\r\n else\r\n {\r\n //终点,起点\r\n interPts = interPts.sort((p1, p2) =>\r\n {\r\n return arc.ComputeAnlge(arc.GetAngleAtPoint(p1)) - arc.ComputeAnlge(arc.GetAngleAtPoint(p2));\r\n });\r\n if (interPt === interPts[0])\r\n {\r\n arc.EndAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.End;\r\n }\r\n else\r\n {\r\n arc.StartAngle = arc.GetAngleAtPoint(interPt);\r\n exType = ExtendType.Start;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (exType === undefined)\r\n {\r\n //使用equalv3时由于精度误差导致的判断错误\r\n if (interPt.manhattanDistanceTo(newCu.StartPoint) < interPt.manhattanDistanceTo(newCu.EndPoint))\r\n exType = ExtendType.Start;\r\n else\r\n exType = ExtendType.End;\r\n }\r\n return { Curve: newCu, ExtType: exType };\r\n }\r\n}\r\n","import { FilletUtils } from \"../../../Add-on/FilletUtils\";\r\nimport { UpdateDraw } from \"../../../Common/Status\";\r\nimport { FixIndex } from \"../../../Common/Utils\";\r\nimport { PromptEntityResult } from \"../../../Editor/PromptResult\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board, I2DModeling } from \"../../Entity/Board\";\r\nimport { Circle } from \"../../Entity/Circle\";\r\nimport { ExtrudeSolid } from \"../../Entity/Extrude\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\nexport interface IGrooveFillet\r\n{\r\n Index: number;\r\n ArcParams: number[];\r\n Grooves?: IGrooveFillet[];//子槽\r\n}\r\n\r\nexport interface IFilletcActionData\r\n{\r\n Entity: ObjectId;\r\n ArcParams: number[];\r\n Grooves?: IGrooveFillet[];\r\n Path2D?: IGrooveFillet[];\r\n ArcSweepPathParams?: number[];\r\n}\r\n\r\n@Factory\r\nexport class TemplateFilletAction extends TemplateAction\r\n{\r\n\r\n FilletDatas: IFilletcActionData[] = [];\r\n\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n protected _Update(paramDiff: number, newValue: number)\r\n {\r\n for (let filletData of this.FilletDatas)\r\n {\r\n if (filletData.Entity?.IsErase !== false)\r\n continue;\r\n\r\n let br = filletData.Entity.Object as Board;\r\n let update_bak = br.AutoUpdate;\r\n br.AutoUpdate = false;\r\n if (filletData.ArcParams.length > 0)\r\n this.Fillet(br, newValue, filletData);\r\n\r\n //内部造型\r\n if (br.Grooves.length > 0 && filletData.Grooves?.length)\r\n {\r\n for (let data of filletData.Grooves)\r\n {\r\n const groove = br.Grooves[data.Index];\r\n if (groove)\r\n {\r\n this.Fillet(groove, newValue, data);\r\n //槽中槽\r\n if (data.Grooves)\r\n for (let sdata of data.Grooves)\r\n {\r\n let sGroove = groove.Grooves[sdata.Index];\r\n if (sGroove)\r\n this.Fillet(sGroove, newValue, sdata);\r\n }\r\n }\r\n }\r\n }\r\n\r\n const path2d = br.Modeling2D;//二维刀路\r\n if (path2d.length > 0 && filletData.Path2D?.length)\r\n {\r\n for (let data of filletData.Path2D)\r\n {\r\n let vm = path2d[data.Index];\r\n if (vm)\r\n {\r\n this.Fillet(vm, newValue, data);\r\n br.Clear2DPathCache();\r\n }\r\n }\r\n }\r\n\r\n //圆弧板放样路径倒角\r\n if (filletData.ArcSweepPathParams?.length && br.IsArcBoard)\r\n {\r\n let faker = { path: br.GetSweepPath() } as I2DModeling;\r\n if (Math.abs(newValue) < 0.1)\r\n newValue = 0.1;//如果此时我们不修正它,那么如果这个是反面,则会导致正面是18,继而导致正面是0,导致建模失败\r\n\r\n for (let param of filletData.ArcSweepPathParams)\r\n {\r\n let radius = newValue;\r\n if (param < 0)//正面轮廓\r\n {\r\n param = -param;\r\n let bul = faker.path.GetBulgeAt(Math.floor(param));\r\n radius += br.Thickness * Math.sign(bul);\r\n }\r\n this.Fillet(faker, radius, { ArcParams: [param] });\r\n }\r\n if (br.GetSweepPath() !== faker.path)\r\n {\r\n br.SetSweepPath(faker.path, br.SweepAngle);\r\n br.FixContourByArcSweepPath();\r\n br.UpdateArcBoardOptions(false);\r\n }\r\n }\r\n\r\n br.AutoUpdate = update_bak;\r\n br.Update(UpdateDraw.Geometry);\r\n }\r\n }\r\n protected Fillet(br: ExtrudeSolid | I2DModeling, newValue: number, d: { ArcParams: number[]; })\r\n {\r\n let cu = br instanceof ExtrudeSolid ? br.ContourCurve : br.path;\r\n if (cu instanceof Circle)\r\n return;\r\n\r\n let fillet = new FilletUtils();\r\n fillet.FilletRadius = Math.max(Math.abs(newValue), 0.1);\r\n\r\n let cuOld = cu as Polyline;\r\n for (let arcParam of d.ArcParams)\r\n {\r\n let param1 = FixIndex(Math.floor(arcParam) - 0.2, cu.EndParam);\r\n let param2 = FixIndex(Math.floor(arcParam) + 1.2, cu.EndParam);\r\n let p1 = cu.GetPointAtParam(param1);\r\n let p2 = cu.GetPointAtParam(param2);\r\n\r\n let res1 = new PromptEntityResult(cu, p1);\r\n let res2 = new PromptEntityResult(cu, p2);\r\n\r\n let fres = fillet.FilletPolyLineSelf(res1, res2);\r\n if (fres)\r\n {\r\n cu = fres.cu1 as Polyline;\r\n if (newValue < 0)\r\n cu.LineData[Math.floor(arcParam)].bul *= -1;\r\n }\r\n }\r\n\r\n if (br instanceof ExtrudeSolid)\r\n {\r\n if (cu !== cuOld)\r\n br.ContourCurve = cu;\r\n }\r\n else\r\n {\r\n if (cu !== cuOld)\r\n br.path = cu as Polyline;\r\n }\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.FilletDatas.length = 0;\r\n if (ver === 1)\r\n {\r\n let id = file.ReadObjectId();\r\n let param1 = file.Read();\r\n let param2 = file.Read();\r\n let arcParam: number = param2 !== 0 ? param2 - 1 : param1 + 1;\r\n this.FilletDatas.push({ Entity: id, ArcParams: [arcParam] });\r\n }\r\n else\r\n {\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let params: number[] = [];\r\n let parCount = file.Read();\r\n for (let i = 0; i < parCount; i++)\r\n params.push(file.Read());\r\n\r\n const groove: IGrooveFillet[] = [];\r\n const path2d: IGrooveFillet[] = [];\r\n if (ver >= 3)\r\n {\r\n const grooveCount = file.Read();\r\n for (let i = 0; i < grooveCount; i++)\r\n {\r\n let data: IGrooveFillet = {\r\n Index: undefined,\r\n ArcParams: [],\r\n };\r\n data.Index = file.Read();\r\n let parCount = file.Read();\r\n for (let j = 0; j < parCount; j++)\r\n data.ArcParams.push(file.Read());\r\n groove.push(data);\r\n\r\n if (ver > 3)\r\n {\r\n //槽中槽\r\n data.Grooves = [];\r\n let subGrooveCount = file.Read();\r\n for (let i = 0; i < subGrooveCount; i++)\r\n {\r\n let grooveIndex = file.Read() as number;\r\n let arcParamsCount = file.Read();\r\n let arcParams: number[] = [];\r\n for (let j = 0; j < arcParamsCount; j++)\r\n arcParams.push(file.Read());\r\n\r\n let subGrooveFilletData: IGrooveFillet = {\r\n Index: grooveIndex,\r\n ArcParams: arcParams\r\n };\r\n\r\n data.Grooves.push(subGrooveFilletData);\r\n }\r\n }\r\n }\r\n\r\n const path2DCount = file.Read();\r\n for (let i = 0; i < path2DCount; i++)\r\n {\r\n let data: IGrooveFillet = {\r\n Index: undefined,\r\n ArcParams: [],\r\n };\r\n data.Index = file.Read();\r\n let parCount = file.Read();\r\n for (let j = 0; j < parCount; j++)\r\n data.ArcParams.push(file.Read());\r\n path2d.push(data);\r\n }\r\n }\r\n\r\n const arcSweepPathParams = [];\r\n if (ver > 4)//ver 5\r\n {\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n arcSweepPathParams.push(file.Read());\r\n }\r\n if (id)\r\n this.FilletDatas.push({ Entity: id, ArcParams: params, Grooves: groove, Path2D: path2d, ArcSweepPathParams: arcSweepPathParams });\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(5);\r\n super.WriteFile(file);\r\n file.Write(this.FilletDatas.length);\r\n for (let d of this.FilletDatas)\r\n {\r\n file.WriteObjectId(d.Entity);\r\n file.Write(d.ArcParams.length);\r\n for (let param of d.ArcParams)\r\n file.Write(param);\r\n\r\n //槽\r\n file.Write(d.Grooves ? d.Grooves.length : 0);\r\n for (let data of (d.Grooves ?? []))\r\n {\r\n file.Write(data.Index);\r\n file.Write(data.ArcParams.length);\r\n for (let par of data.ArcParams)\r\n file.Write(par);\r\n\r\n //槽中槽\r\n file.Write(data.Grooves ? data.Grooves.length : 0);\r\n for (let sdata of (data.Grooves ?? []))\r\n {\r\n file.Write(sdata.Index);\r\n file.Write(sdata.ArcParams.length);\r\n for (let par of sdata.ArcParams)\r\n file.Write(par);\r\n }\r\n //槽中槽end\r\n }\r\n\r\n //写入二维刀路\r\n file.Write(d.Path2D ? d.Path2D.length : 0);\r\n for (let data of (d.Path2D ?? []))\r\n {\r\n file.Write(data.Index);\r\n file.Write(data.ArcParams.length);\r\n for (let par of data.ArcParams)\r\n file.Write(par);\r\n }\r\n\r\n //写入圆弧板参数\r\n file.Write(d.ArcSweepPathParams?.length ?? 0);\r\n if (d.ArcSweepPathParams)\r\n for (let param of d.ArcSweepPathParams)\r\n file.Write(param);\r\n }\r\n }\r\n}\r\n","import { EBoardKeyList } from '../../Common/BoardKeyList';\r\nimport { Board } from '../../DatabaseServices/Entity/Board';\r\nimport { PhysicalMaterialRecord } from '../../DatabaseServices/PhysicalMaterialRecord';\r\n\r\n\r\nexport function ApplyGoodInfo(en: Board, material: PhysicalMaterialRecord)\r\n{\r\n //切换材质时,材质锁定后,材料信息不跟随修改\r\n if (en.Material != material.Id && (en.Material?.Object as PhysicalMaterialRecord)?.IsMaterialLock)\r\n return;\r\n en.BoardProcessOption[EBoardKeyList.BrMat] = material.GoodsInfo.name;\r\n en.BoardProcessOption[EBoardKeyList.Color] = material.GoodsInfo.color;\r\n en.BoardProcessOption[EBoardKeyList.Mat] = material.GoodsInfo.material;\r\n}\r\n","import { Intent, Toaster } from \"../../../Common/Toaster\";\r\nimport { ApplyGoodInfo } from \"../../../UI/Components/ApplyGoodInfo\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { HardwareCompositeEntity } from \"../../Hardware/HardwareCompositeEntity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\n@Factory\r\nexport class TemplateMaterialAction extends TemplateAction\r\n{\r\n\r\n constructor(\r\n public Entitys: ObjectId<Entity>[] = [],\r\n public CompositeEntitys: [ObjectId<Entity>, number[]][] = [],\r\n public ApplyGoodInfo = true,//应用板材信息\r\n )\r\n {\r\n super();\r\n }\r\n\r\n protected override _Update(paramDiff: number)\r\n {\r\n if (!this.parent.MaterialValue) return;\r\n let hasMaterialLock = false;\r\n for (let id of this.Entitys)\r\n {\r\n if (!(id?.Object) || id.IsErase) continue;\r\n\r\n let en = id.Object;\r\n if (this.ApplyGoodInfo && en instanceof Board)\r\n ApplyGoodInfo(en, this.parent.MaterialValue);\r\n const lockStatus = en.GetMtlLockedStatus();\r\n if (lockStatus.partMtlLocked || lockStatus.allMtlLocked || en.LockMaterial)\r\n hasMaterialLock = true;\r\n if (!(lockStatus.allMtlLocked || en.LockMaterial)) // 如果全部材质被锁定或者有实体材质锁,则不修改\r\n en.SetAllMaterialAtSlot(this.parent.MaterialValue.Id);\r\n }\r\n\r\n for (let [id, indexs] of this.CompositeEntitys)\r\n {\r\n if (!(id?.Object) || id.IsErase) continue;\r\n\r\n let en = id.Object as HardwareCompositeEntity;\r\n if (en.LockMaterial)\r\n {\r\n hasMaterialLock = true;\r\n continue;\r\n }\r\n let allEntitys: Entity[] = [];\r\n const GetAllEntitys = (hard: HardwareCompositeEntity) =>\r\n {\r\n for (let e of hard.Entitys)\r\n {\r\n if (e instanceof HardwareCompositeEntity)\r\n GetAllEntitys(e);\r\n else\r\n allEntitys.push(e);\r\n }\r\n };\r\n\r\n GetAllEntitys(en);\r\n\r\n for (let index of indexs)\r\n {\r\n let subE = allEntitys[index];\r\n if (!subE) continue;\r\n\r\n if (this.ApplyGoodInfo && subE instanceof Board)\r\n ApplyGoodInfo(subE, this.parent.MaterialValue);\r\n const lockStatus = subE.GetMtlLockedStatus();\r\n if (lockStatus.partMtlLocked || lockStatus.allMtlLocked || subE.LockMaterial)\r\n hasMaterialLock = true;\r\n if (!(lockStatus.allMtlLocked || subE.LockMaterial)) // 如果全部材质被锁定或者有实体材质锁,则不修改\r\n subE.SetAllMaterialAtSlot(this.parent.MaterialValue.Id);\r\n }\r\n }\r\n\r\n if (hasMaterialLock)\r\n {\r\n Toaster({\r\n message: \"注意:有被锁定的材质,无法修改\",\r\n intent: Intent.WARNING,\r\n timeout: 3000\r\n });\r\n }\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.ApplyGoodInfo = file.Read() === 1;\r\n this.Entitys.length = 0;\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId() as ObjectId<Entity>;\r\n if (id) this.Entitys.push(id);\r\n }\r\n\r\n if (ver > 1)\r\n {\r\n count = file.Read();\r\n this.CompositeEntitys.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId() as ObjectId<Entity>;\r\n let indexs = file.Read();\r\n this.CompositeEntitys.push([id, indexs]);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this.ApplyGoodInfo ? 1 : 0);\r\n file.Write(this.Entitys.length);\r\n for (let ent of this.Entitys)\r\n file.WriteObjectId(ent);\r\n\r\n file.Write(this.CompositeEntitys.length);\r\n for (let [id, indexs] of this.CompositeEntitys)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(indexs.concat());\r\n }\r\n }\r\n}\r\n","\r\n/**\r\n * 模版参数类型\r\n */\r\nexport enum TemplateParamType\r\n{\r\n String = 0,\r\n Float = 1,\r\n Int = 2,\r\n Enum = 3,\r\n Material = 4,\r\n}\r\n","import { InteractionLog, LogType } from \"../../../Common/Log\";\r\nimport { Intent, Toaster } from \"../../../Common/Toaster\";\r\nimport { eval2 } from \"../../../Common/eval\";\r\nimport { equaln } from \"../../../Geometry/GeUtils\";\r\nimport { AutoRecord, ISPROXYKEY } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { PhysicalMaterialRecord } from \"../../PhysicalMaterialRecord\";\r\nimport { TemplateAction } from \"../Action/TemplateAction\";\r\nimport { TemplateFilletAction } from \"../Action/TemplateFilletAction\";\r\nimport { TemplateMaterialAction } from \"../Action/TemplateMaterialAction\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\nimport { TemplateParamType } from \"./TemplateParamType\";\r\n\r\n/**\r\n * 模版参数\r\n */\r\n@Factory\r\nexport class TemplateParam\r\n{\r\n /**\r\n * 变量名称\r\n * 命名规范(同js) 并且 禁止前缀`_`,`$`.\r\n */\r\n @AutoRecord name: string;\r\n /** 表达式 使用js引起求值(暂时) */\r\n @AutoRecord expr: string | number = \"\";\r\n /**\r\n * 设置参数的值,通常在模版设计中可以这么干\r\n * 如果需要更新参数的动作,那么应该调用 UpdateParam\r\n */\r\n @AutoRecord value: string | number;\r\n @AutoRecord default: string | number;\r\n @AutoRecord description: string;\r\n @AutoRecord type: TemplateParamType = TemplateParamType.Float;\r\n @AutoRecord min: number;\r\n @AutoRecord max: number;\r\n //可选值\r\n @AutoRecord option: any[];\r\n @AutoRecord actions: TemplateAction[];\r\n @AutoRecord parent: TemplateRecord;\r\n @AutoRecord isLock = false;\r\n\r\n //当类型为Material时,从酷家乐导入后,将载入材质赋值在这里\r\n MaterialValue: PhysicalMaterialRecord;\r\n\r\n constructor()\r\n {\r\n //监听\r\n this.actions = new Proxy([], {\r\n set: (target, key, value, receiver) =>\r\n {\r\n if (Reflect.get(target, key, receiver) !== value)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (value instanceof TemplateAction)\r\n value.parent = this;\r\n }\r\n return Reflect.set(target, key, value, receiver);\r\n },\r\n get: (target, key, receiver) =>\r\n {\r\n if (key === ISPROXYKEY)\r\n return true;\r\n else\r\n return Reflect.get(target, key, receiver);\r\n }\r\n });\r\n }\r\n WriteAllObjectRecord()\r\n {\r\n if (this.parent)\r\n this.parent.WriteAllObjectRecord();\r\n }\r\n\r\n /**\r\n * private:仅供内部调用.\r\n * 更新参数值,并且触发动作.\r\n */\r\n UpdateParam(value: string | number)\r\n {\r\n switch (this.type)\r\n {\r\n case TemplateParamType.String:\r\n break;\r\n case TemplateParamType.Float:\r\n let oldV = this.value as number;\r\n let newV = value as number;\r\n if (!equaln(oldV, newV))\r\n {\r\n this.WriteAllObjectRecord();\r\n this.value = newV;\r\n\r\n let diff = newV - oldV;\r\n for (let a of this.actions)\r\n a.Update(diff, newV);\r\n }\r\n else\r\n {\r\n for (let a of this.actions)\r\n {\r\n if (a instanceof TemplateFilletAction)\r\n a.Update(0, newV);\r\n }\r\n }\r\n break;\r\n case TemplateParamType.Int:\r\n break;\r\n case TemplateParamType.Enum:\r\n break;\r\n case TemplateParamType.Material:\r\n {\r\n if (this.MaterialValue)\r\n {\r\n for (let a of this.actions)\r\n a.Update(0, 0);\r\n }\r\n this.MaterialValue = undefined;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 计算表达式的值并更新\r\n * @param vardefines 变量定义列表\r\n * @param paramMap 所有的参数列表.(可能我们需要依赖更新它)\r\n */\r\n EvalUpdate(vardefines: Object, paramMap: Map<string, TemplateParam>, evaled: Set<TemplateParam>, update = true): number\r\n {\r\n if (this.type === TemplateParamType.Material)\r\n {\r\n if (update && this.MaterialValue)\r\n {\r\n for (let a of this.actions)\r\n {\r\n if (a instanceof TemplateMaterialAction)\r\n a.Update(0, this.value);\r\n }\r\n this.MaterialValue = undefined;\r\n }\r\n return 0;\r\n }\r\n\r\n if (this.expr === \"\")\r\n {\r\n if (update)\r\n {\r\n for (let a of this.actions)\r\n {\r\n if (a instanceof TemplateFilletAction)\r\n a.Update(0, this.value);\r\n }\r\n }\r\n return this.value as number;\r\n }\r\n if (evaled.has(this)) return this.value as number;\r\n\r\n if (update)\r\n evaled.add(this);\r\n\r\n let value = parseFloat(this.expr as string);\r\n if (isNaN(this.expr as number))\r\n {\r\n //依赖收集 提前更新\r\n let keywords = new Set((<string>this.expr).split(/[\\s(){}=+-/*/,%;<>&?:]/).filter(s => s.length > 0));\r\n for (let key of keywords)\r\n {\r\n if (key !== this.name && paramMap.has(key))\r\n vardefines[key] = paramMap.get(key).EvalUpdate(vardefines, paramMap, evaled, update);\r\n }\r\n\r\n try\r\n {\r\n value = eval2(this.expr as string, vardefines);\r\n }\r\n catch (error)\r\n {\r\n Toaster({\r\n message: \"有模块的参数表达式求值失败!请查看左下角信息!\",\r\n intent: Intent.DANGER,\r\n timeout: 5000,\r\n key: \"template_expr_error\",\r\n });\r\n InteractionLog([{ msg: `模块变量:${this.name}的表达式:${this.expr},求值失败!` + error }], LogType.Error);\r\n return this.value as number;\r\n }\r\n }\r\n else if (update)\r\n this.expr = \"\";\r\n\r\n vardefines[this.name] = value;\r\n\r\n if (update)\r\n this.UpdateParam(value);\r\n\r\n return value;\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.name = file.Read();\r\n this.expr = file.Read();\r\n this.value = file.Read();\r\n this.default = file.Read();\r\n this.description = file.Read();\r\n this.type = file.Read();\r\n this.min = file.Read();\r\n this.max = file.Read();\r\n this.option = file.Read();\r\n let count = file.Read();\r\n this.actions.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.actions.push(file.ReadObject());\r\n\r\n if (ver > 1)\r\n this.isLock = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n file.Write(this.name);\r\n file.Write(this.expr);\r\n file.Write(this.value);\r\n file.Write(this.default);\r\n file.Write(this.description);\r\n file.Write(this.type);\r\n file.Write(this.min);\r\n file.Write(this.max);\r\n file.Write(this.option);\r\n file.Write(this.actions.length);\r\n for (let action of this.actions)\r\n file.WriteObject(action);\r\n\r\n file.Write(this.isLock);\r\n }\r\n}\r\n","import { Ray, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../../Common/ArrayExt\";\r\nimport { BoardType } from \"../../DatabaseServices/Entity/BoardInterface\";\r\nimport { PromptDistendResult, PromptStatus } from \"../../Editor/PromptResult\";\r\nimport { Box3Ext, SplitType } from \"../Box\";\r\nimport { ISpaceParse } from \"./ISpaceParse\";\r\n\r\nconst BoardType2SplitType = [2, 0, 1];\r\nconst SplitType2BoardType = [1, 2, 0];\r\n//转换板件类型成为空间类型. 0x 1y 2z\r\nfunction ConverBoardTypeToSplitType(type: BoardType): SplitType\r\n{\r\n return BoardType2SplitType[type];\r\n}\r\n\r\nfunction ConverSplitType2BoardType(type: SplitType): BoardType\r\n{\r\n return SplitType2BoardType[type];\r\n}\r\n\r\n/**\r\n * 夹层空间分析\r\n */\r\nexport class ClampSpaceParse extends ISpaceParse\r\n{\r\n async Parse()\r\n {\r\n if (this.Boards.length === 1)\r\n {\r\n await this.ParseSignalBoard();\r\n return;\r\n }\r\n\r\n //夹层空间\r\n let clampBoxs: Box3Ext[] = [];\r\n //单层空间(用于切割)\r\n let spliteBoxs = new Map<SplitType, Box3Ext>();\r\n for (let [boardType, boards] of this.BoardMap)\r\n {\r\n let splitType: SplitType = ConverBoardTypeToSplitType(boardType);\r\n let boardBoxCol = this.ParseBoardBox(boards, splitType);\r\n\r\n //#IWFYY\r\n if (boardType === BoardType.Behind && this.BoardMap.size > 1 && boardBoxCol.length > 1)\r\n {\r\n let clampBox = boardBoxCol[0].clampSpace(boardBoxCol[1], splitType);\r\n let size = clampBox.getSize(new Vector3());\r\n if (size.y > 2440)\r\n boardBoxCol = [arrayLast(boardBoxCol)];\r\n }\r\n\r\n if (boardBoxCol.length > 1)\r\n {\r\n let clampBox = boardBoxCol[0].clampSpace(arrayLast(boardBoxCol), splitType);\r\n if (clampBox.isSolid())\r\n clampBoxs.push(clampBox);\r\n }\r\n else if (boardBoxCol.length === 1)\r\n {\r\n spliteBoxs.set(splitType, boardBoxCol[0]);\r\n }\r\n }\r\n\r\n //归并盒子\r\n let allSpaceBox: Box3Ext;\r\n if (clampBoxs.length === 0)//如果不存在盒子,拿所有的盒子当空间\r\n {\r\n allSpaceBox = new Box3Ext();\r\n spliteBoxs.forEach((box) => { allSpaceBox.union(box); });\r\n }\r\n else//夹层空间合并\r\n {\r\n allSpaceBox = clampBoxs[0];\r\n for (let i = 1, len = clampBoxs.length; i < len; i++)\r\n allSpaceBox.intersect(clampBoxs[i]);\r\n }\r\n\r\n //切割并选择合适的空间\r\n await this.SpliteBoxsAndSelect(allSpaceBox, spliteBoxs);\r\n if (this.SpaceBox && this.SpaceBox.isSolid())\r\n {\r\n //空间延伸到背板\r\n let behindBox = spliteBoxs.get(SplitType.Y);\r\n if (behindBox && behindBox.min.y > this.SpaceBox.min.y)\r\n this.SpaceBox.max.setY(behindBox.min.y);\r\n\r\n this.ParseOK = true;\r\n }\r\n }\r\n\r\n /**\r\n * 单板延伸空间的时候的延伸距离\r\n */\r\n get SignalDist()\r\n {\r\n return this._signalDist;\r\n }\r\n protected _signalDist: number;\r\n\r\n async ParseSignalBoard()\r\n {\r\n let res = await this.GetSignalDist();\r\n if (res.Status === PromptStatus.OK && res.Distance > 0)\r\n {\r\n let dist = res.Distance;\r\n this._signalDist = dist;\r\n\r\n let br = this.Boards[0];\r\n let box = br.GetBoundingBoxInMtx(this.SpaceOCSInv);\r\n\r\n let type = this.GetBoardInSpaceType(br);\r\n if (type === undefined)//暂时不支持斜空间\r\n {\r\n //暂时不支持\r\n this.ParseOK = false;\r\n return;\r\n }\r\n\r\n let splitType: SplitType = ConverBoardTypeToSplitType(type);\r\n\r\n let p1 = box.min.clone().setComponent(splitType, box.min.getComponent(splitType) - dist);\r\n let p2 = box.max.clone().setComponent(splitType, box.min.getComponent(splitType));\r\n\r\n let p3 = box.min.clone().setComponent(splitType, box.max.getComponent(splitType));\r\n let p4 = box.max.clone().setComponent(splitType, box.max.getComponent(splitType) + dist);\r\n\r\n let boxs = [new Box3Ext().setFromPoints([p1, p2]), new Box3Ext().setFromPoints([p3, p4])];\r\n\r\n this.SpaceBox = await this.WrapSelectBox(boxs, splitType);\r\n\r\n if (this.SpaceBox)\r\n this.ParseOK = true;\r\n }\r\n else\r\n this.ParseOK = false;\r\n }\r\n\r\n //virtual (请重载) 指定用户选择单块板的延伸空间\r\n async GetSignalDist(): Promise<PromptDistendResult>\r\n {\r\n let res = new PromptDistendResult();\r\n res.Distance = 300;\r\n res.Status = PromptStatus.OK;\r\n return res;\r\n }\r\n\r\n SetRay(ray: Ray)\r\n {\r\n }\r\n\r\n SelectBoxRecord = new Map<SplitType, number>();\r\n async WrapSelectBox(splitBoxs: Box3Ext[], splitType: SplitType): Promise<Box3Ext>\r\n {\r\n let box = await this.SelectBox(splitBoxs, splitType);\r\n this.SelectBoxRecord.set(splitType, splitBoxs.indexOf(box));\r\n return box;\r\n }\r\n\r\n /**\r\n * virtual (请重载) 当盒子空间被切割时,选择合适的空间\r\n * @param splitBoxs 切割后的盒子(2个)\r\n * @param splitType 切割类型\r\n * @returns box 盒子\r\n */\r\n async SelectBox(splitBoxs: Box3Ext[], splitType: SplitType): Promise<Box3Ext>\r\n {\r\n return splitBoxs[0];\r\n }\r\n\r\n /**\r\n *用单块板包围盒切割空间\r\n */\r\n private async SpliteBoxsAndSelect(orgBox: Box3Ext, spliteBoxes: Map<SplitType, Box3Ext>)\r\n {\r\n this.SpaceBox = undefined;\r\n if (spliteBoxes.size === 0)\r\n {\r\n this.SpaceBox = orgBox;\r\n return;\r\n }\r\n\r\n for (let [splitType, spBox] of spliteBoxes)\r\n {\r\n let remBoxs: Box3Ext[] = orgBox.substract(spBox, splitType);\r\n\r\n if (remBoxs[0] === orgBox)//如果切割失败,证明这个板没办法影响空间分析,所以移除它.\r\n {\r\n //虽然在切割中它没帮上忙,但是如果只有两个板的时候,这个是有作用的,暂时移除这个特性.\r\n // let brs = new Set(this.BoardMap.get(ConverSplitType2BoardType(splitType)));\r\n // arrayRemoveIf(this.Boards, br => brs.has(br));\r\n // continue;\r\n }\r\n\r\n if (remBoxs.length === 0)\r\n return undefined;\r\n else if (remBoxs.length === 1)\r\n {\r\n //#IZE2N\r\n if (splitType === SplitType.Y && remBoxs[0].min.y === orgBox.min.y)\r\n continue;\r\n orgBox = remBoxs[0];\r\n }\r\n else\r\n orgBox = await this.WrapSelectBox(remBoxs, splitType);\r\n\r\n if (!orgBox)\r\n return;\r\n\r\n //Left Or Right Board\r\n if (splitType === SplitType.X)\r\n {\r\n if (spBox.min.x < orgBox.min.x)\r\n this.LeftBoard = this.BoardMap.get(BoardType.Vertical)[0];\r\n else\r\n this.RightBoard = this.BoardMap.get(BoardType.Vertical)[0];\r\n }\r\n }\r\n this.SpaceBox = orgBox;\r\n }\r\n}\r\n","import { ClampSpaceParse } from \"./ClampSpaceParse\";\r\nimport { PromptDistendResult, PromptStatus } from \"../../Editor/PromptResult\";\r\nimport { Box3Ext, SplitType } from \"../Box\";\r\n\r\nexport class ClampSpaceParseFix extends ClampSpaceParse\r\n{\r\n set SignalDist(v: number)\r\n {\r\n this._signalDist = v;\r\n }\r\n get SignalDist()\r\n {\r\n return this._signalDist;\r\n }\r\n\r\n //virtual (请重载) 指定用户选择单块板的延伸空间\r\n async GetSignalDist(): Promise<PromptDistendResult>\r\n {\r\n let res = new PromptDistendResult();\r\n res.Distance = this._signalDist;\r\n res.Status = PromptStatus.OK;\r\n return res;\r\n }\r\n\r\n async SelectBox(splitBoxs: Box3Ext[], splitType: SplitType): Promise<Box3Ext>\r\n {\r\n let index = this.SelectBoxRecord.get(splitType);\r\n return splitBoxs[index];\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { ISerialize } from \"../../ISerialize\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\nexport interface PositioningParam\r\n{\r\n objects?: ObjectId[];\r\n index?: number;\r\n count?: number;\r\n}\r\n\r\n\r\n/**\r\n * 模版定位信息(基类)\r\n */\r\n@Factory\r\nexport abstract class Positioning implements ISerialize\r\n{\r\n SpaceCS: Matrix4;//空间坐标系\r\n SpaceSize: Vector3;//有可能不存在\r\n\r\n /**\r\n * 定位 (更新 SpaceCS SpaceBox SpaceSize)\r\n */\r\n async Positioning(param?: PositioningParam)\r\n {\r\n }\r\n\r\n //#region file\r\n parent: TemplateRecord;\r\n WriteAllObjectRecord()\r\n {\r\n if (this.parent)\r\n this.parent.WriteAllObjectRecord();\r\n }\r\n\r\n ReadFile(file: CADFiler): void\r\n {\r\n\r\n }\r\n\r\n WriteFile(file: CADFiler): void\r\n {\r\n }\r\n //#endregion\r\n}\r\n","import { arrayClone } from \"../../../Common/ArrayExt\";\r\nimport { ClampSpaceParse } from \"../../../Geometry/SpaceParse/ClampSpaceParse\";\r\nimport { ClampSpaceParseFix } from \"../../../Geometry/SpaceParse/ClampSpaceParseFix\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { Positioning, PositioningParam } from \"./Positioning\";\r\n\r\n@Factory\r\nexport class PositioningClampSpace extends Positioning\r\n{\r\n @AutoRecord Objects: ObjectId<Entity>[] = [];\r\n\r\n //按照 SplitType进行排序 0X 1Y 2Z\r\n @AutoRecord SelectBoxIndex: number[] = [0, 0, 0];//左右下\r\n @AutoRecord SignalDist = 100;//默认为100 防止空\r\n\r\n FromSpaceParse(parse: ClampSpaceParse)\r\n {\r\n this.SignalDist = parse.SignalDist || 100;\r\n this.Objects = parse.Boards.map(br => br.Id);\r\n for (let [splitType, index] of parse.SelectBoxRecord)\r\n this.SelectBoxIndex[splitType] = index;\r\n }\r\n\r\n _SpaceParse: ClampSpaceParseFix;\r\n /**\r\n * 定位\r\n */\r\n async Positioning(param?: PositioningParam)\r\n {\r\n let brs = this.Objects.filter(id => !id.IsErase).map(id => id.Object as Board);\r\n this._SpaceParse = new ClampSpaceParseFix(brs);\r\n for (let i = 0; i < 3; i++)\r\n this._SpaceParse.SelectBoxRecord.set(i, this.SelectBoxIndex[i]);\r\n\r\n this._SpaceParse.SignalDist = this.SignalDist;\r\n\r\n await this._SpaceParse.Parse();\r\n if (this._SpaceParse.ParseOK)\r\n {\r\n this.SpaceCS = this._SpaceParse.DrawCS;\r\n this.SpaceSize = this._SpaceParse.Size;\r\n }\r\n else\r\n {\r\n this.SpaceCS = undefined;\r\n this.SpaceSize = undefined;\r\n // Log(\"模块定位错误!\");\r\n }\r\n }\r\n\r\n\r\n //#region File\r\n ReadFile(file: CADFiler): void\r\n {\r\n let ver = file.Read();\r\n let count = file.Read() as number;\r\n this.Objects.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId() as ObjectId<Entity>;\r\n if (id) this.Objects.push(id);\r\n }\r\n\r\n this.SelectBoxIndex = file.Read();\r\n this.SignalDist = file.Read();\r\n }\r\n\r\n WriteFile(file: CADFiler): void\r\n {\r\n file.Write(1);\r\n file.Write(this.Objects.length);\r\n for (let id of this.Objects)\r\n file.WriteObjectId(id);\r\n\r\n file.Write(arrayClone(this.SelectBoxIndex));\r\n file.Write(this.SignalDist);\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { Factory } from \"../../CADFactory\";\r\nimport { Positioning } from \"./Positioning\";\r\n\r\n/**\r\n * 临时定位\r\n * 在首次绘制时使用2点3点空间时通常不能使用定位,使用临时定位设置给模块后,模块在第一次使用后清空定位.\r\n */\r\n@Factory\r\nexport class PositioningTemporary extends Positioning\r\n{\r\n\r\n}\r\n","\r\n/**\r\n * 模版类型\r\n */\r\nexport enum TemplateType\r\n{\r\n //普通模板\r\n Usual = 0,\r\n //酒格 使用程序\r\n Grid = 1,\r\n //阵列模版\r\n Array = 2,\r\n //没有实体的\r\n Clear = 4,\r\n //展开的\r\n Expanded = 8,\r\n //隐藏的\r\n Hidden = 16,\r\n HiddenChildren = 32,\r\n //标记\r\n Sign = 64,\r\n\r\n //以下未启用\r\n Door = 128,//门板\r\n Drawer = 256,//抽屉\r\n Handle = 512,//拉手\r\n Hinge = 1024,//铰链\r\n}\r\n\r\n//以下未启用\r\nenum TemplateType2\r\n{\r\n Usual = 0,\r\n Door = 1,//门板\r\n Drawer = 2,//抽屉\r\n Handle = 3,//拉手\r\n Hinge = 4,//铰链\r\n WineRack = 5,//酒格\r\n Grid = 6,//格子抽?\r\n}\r\n\r\nexport enum TemplateSplitType\r\n{\r\n None = -1,\r\n X = 0,\r\n Y = 1,\r\n Z = 2,\r\n}\r\n","import { Box3, MathUtils, Matrix4, Vector3 } from \"three\";\r\nimport { arrayRemoveOnce } from \"../../Common/ArrayExt\";\r\nimport { LoadParamMaterial } from \"../../Common/LoadParamMaterial\";\r\nimport { Log, LogType } from \"../../Common/Log\";\r\nimport { Intent, Toaster } from \"../../Common/Toaster\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { Max } from \"../../Nest/Common/Util\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Board } from \"../Entity/Board\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { SymbolTableRecord } from \"../SymbolTableRecord\";\r\nimport { TemplateParam } from \"./Param/TemplateParam\";\r\nimport { TemplateParamType } from \"./Param/TemplateParamType\";\r\nimport { Positioning } from \"./Positioning/Positioning\";\r\nimport { PositioningClampSpace } from \"./Positioning/PositioningClampSpace\";\r\nimport { PositioningTemporary } from \"./Positioning/PositioningTemporary\";\r\nimport { TemplateSplitType, TemplateType } from \"./TemplateType\";\r\n\r\nconst TemplateDefaultParams = [\"L\", \"W\", \"H\", \"PX\", \"PY\", \"PZ\", \"RX\", \"RY\", \"RZ\", \"BH\"];\r\nexport const TempateDefaultParamCount = TemplateDefaultParams.length;\r\n\r\n/**\r\n * ### 模板记录\r\n * 模版与实体总是互相关联的,所以添加实体进入模版的时候,应该保证这个记录已经加入到数据库\r\n *\r\n * 保留参数名称列表: L W H RX RY RZ X Y Z\r\n * 保留参数前缀: _ $\r\n *\r\n * #### 批量修改参数值.\r\n * 程序应该只传入expr的值,(禁止直接编辑value).传入后,交由模版进行计算更新.\r\n * 模版内部消化,决定是否保留expr.(当纯数字将被直接计算成value而不保存expr).\r\n *\r\n * 由于`DIV`变量的计算机制,`LWH`变量将不能依赖同层变量,(这可能会导致一些错误)\r\n *\r\n * 当模块节点处于切割空间内时,如果想重新绑定空间,那么空间树的位置将发生变更(实际上不管是不是在切割空间内,空间位置都可能发生变更)\r\n *\r\n */\r\n@Factory\r\nexport class TemplateRecord extends SymbolTableRecord\r\n{\r\n @AutoRecord Type: TemplateType = TemplateType.Usual;\r\n @AutoRecord SplitType = TemplateSplitType.None;\r\n private _Parent: ObjectId;\r\n @AutoRecord Children: ObjectId<TemplateRecord>[];\r\n @AutoRecord EffectTemplates: ObjectId<TemplateRecord>[];//影响模块 当前模块更新会触发影响模块的更新\r\n @AutoRecord Params: TemplateParam[];\r\n @AutoRecord Objects: ObjectId<Entity>[];\r\n private _Positioning: Positioning;\r\n\r\n //展开的 这是UI数据我们暂时不序列化它(默认不展开有比较好的显示效果)\r\n isExpanded = false;\r\n\r\n constructor()\r\n {\r\n super();\r\n //监听\r\n this.Params = this.CreateProxyArray(\r\n value =>\r\n {\r\n if (value instanceof TemplateParam)\r\n value.parent = this;\r\n }\r\n );\r\n\r\n this.Objects = this.CreateProxyArray(\r\n value =>\r\n {\r\n if (value instanceof ObjectId && value.Object instanceof Entity)\r\n {\r\n if (!this.Id)\r\n console.warn(\"请先将模版添加到Database后在进行操作!\");\r\n value.Object.Template = this.Id;\r\n }\r\n }\r\n );\r\n\r\n this.Children = this.CreateProxyArray(\r\n value =>\r\n {\r\n if (value instanceof ObjectId && value.Object instanceof TemplateRecord)\r\n {\r\n if (!this.Id)\r\n console.warn(\"请先将模版添加到Database后在进行操作!\");\r\n value.Object.Parent = this.Id;\r\n }\r\n }\r\n );\r\n\r\n this.EffectTemplates = this.CreateProxyArray((v => { }));\r\n }\r\n\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (name !== this.name)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.name = name;\r\n }\r\n }\r\n\r\n get Parent()\r\n {\r\n return this._Parent;\r\n }\r\n\r\n set Parent(id: ObjectId)\r\n {\r\n if (id !== this._Parent)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (this?._Parent?.Object)\r\n arrayRemoveOnce((<TemplateRecord>(this.Parent.Object)).Children, this.Id);\r\n this._Parent = id;\r\n }\r\n }\r\n\r\n get Root(): TemplateRecord\r\n {\r\n return (<TemplateRecord>this.Parent?.Object)?.Root ?? this;\r\n }\r\n\r\n get IsRoot()\r\n {\r\n return this._Parent === undefined;\r\n }\r\n\r\n get Entitys()\r\n {\r\n return this.Objects.map(o => o.Object as Entity);\r\n }\r\n\r\n get AllEntitys(): Entity[]\r\n {\r\n let entitys: Entity[] = [];\r\n this.Traverse((t) =>\r\n {\r\n for (let o of t.Objects)\r\n {\r\n if (!o.IsErase)\r\n entitys.push(o.Object as Entity);\r\n }\r\n });\r\n return entitys;\r\n }\r\n\r\n GetProperty(p: TemplateType): boolean { return (this.Type & p) !== 0; }\r\n SetProperty(p: TemplateType, v: boolean)\r\n {\r\n if (this.GetProperty(p) === v) return;\r\n if (v)\r\n this.Type |= p;\r\n else\r\n this.Type &= ~p;\r\n }\r\n\r\n get IsClear() { return this.GetProperty(TemplateType.Clear); }\r\n set IsClear(isClear: boolean) { this.SetProperty(TemplateType.Clear, isClear); }\r\n get IsSign() { return this.GetProperty(TemplateType.Sign); }\r\n set IsSign(isSign: boolean) { this.SetProperty(TemplateType.Sign, isSign); }\r\n\r\n get IsHidden() { return this.GetProperty(TemplateType.Hidden); }\r\n set IsHidden(isHidden: boolean) { this.SetProperty(TemplateType.Hidden, isHidden); }\r\n\r\n get IsHiddenChildren() { return this.GetProperty(TemplateType.HiddenChildren); }\r\n set IsHiddenChildren(isHidden: boolean) { this.SetProperty(TemplateType.HiddenChildren, isHidden); }\r\n\r\n Purge()\r\n {\r\n this.Children = this.Children.filter(rc => rc && !rc.IsErase && rc.Object instanceof TemplateRecord);\r\n this.Objects = this.Objects.filter(id => id?.IsErase === false);\r\n }\r\n\r\n Traverse(callback: (arg0: this) => void)\r\n {\r\n callback(this);\r\n for (let c of this.Children)\r\n {\r\n if (c && c.Object)\r\n {\r\n if (c.Object instanceof TemplateRecord)\r\n {\r\n let template = c.Object as TemplateRecord;\r\n template.Traverse(callback);\r\n }\r\n else\r\n {\r\n Toaster({\r\n message: \"模块子实体有个错误,程序已经暂时先忽略了这个错误!\",\r\n timeout: 8000,\r\n intent: Intent.DANGER,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n async TraverseAsync(callback: (arg0: this) => Promise<void>)\r\n {\r\n await callback(this);\r\n for (let c of this.Children)\r\n {\r\n if (c && c.Object)\r\n {\r\n let template = c.Object as TemplateRecord;\r\n await template.TraverseAsync(callback);\r\n }\r\n }\r\n }\r\n\r\n private _NodeDepthCache: number;\r\n /** 节点深度,根节点=0 */\r\n get NodeDepth()\r\n {\r\n if (this._NodeDepthCache !== undefined)\r\n return this._NodeDepthCache;\r\n\r\n if (!this.Parent?.Object) return 0;\r\n\r\n let parentTemplate = this.Parent.Object as TemplateRecord;\r\n this._NodeDepthCache = parentTemplate.NodeDepth + 1;\r\n\r\n return this._NodeDepthCache;\r\n }\r\n get NodeIndex()\r\n {\r\n if (!this.Parent?.Object) return 0;\r\n let parentTemplate = this.Parent.Object as TemplateRecord;\r\n return parentTemplate.Children.indexOf(this.objectId);\r\n }\r\n\r\n /** 模版定位 */\r\n get Positioning(): Positioning\r\n {\r\n if (this._Positioning)\r\n return this._Positioning;\r\n\r\n let spaceCS = this.GetTemplateRealitySpaceCS();\r\n let positioning = new PositioningTemporary();\r\n positioning.SpaceCS = spaceCS;\r\n positioning.SpaceSize = new Vector3(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n return positioning;\r\n }\r\n\r\n /**\r\n * 当存在夹层空间定位时,辅助定位表达式将使用夹层空间作为相对空间.\r\n */\r\n set Positioning(p: Positioning)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (p) p.parent = this;\r\n this._Positioning = p;\r\n }\r\n\r\n //#region param\r\n\r\n /** 初始化基础参数 */\r\n InitBaseParams()\r\n {\r\n for (let paramName of TemplateDefaultParams)\r\n {\r\n let value = 0;\r\n let param = new TemplateParam();\r\n param.name = paramName;\r\n param.type = TemplateParamType.Float;\r\n param.value = value;\r\n this.Params.push(param);\r\n }\r\n this.LParam.description = \"宽\";\r\n this.WParam.description = \"深\";\r\n this.HParam.description = \"高\";\r\n this.Params[9].description = \"板厚\";\r\n this.Params[9].value = 18;\r\n return this;\r\n }\r\n\r\n get LParam() { return this.Params[0]; }\r\n get WParam() { return this.Params[1]; }\r\n get HParam() { return this.Params[2]; }\r\n\r\n get PXParam() { return this.Params[3]; }\r\n get PYParam() { return this.Params[4]; }\r\n get PZParam() { return this.Params[5]; }\r\n\r\n get RXParam() { return this.Params[6]; }\r\n get RYParam() { return this.Params[7]; }\r\n get RZParam() { return this.Params[8]; }\r\n\r\n GetParam(paramName: string): TemplateParam | undefined\r\n {\r\n return this.Params.find(param => param.name === paramName);\r\n }\r\n\r\n SetParamExpr(paramName: string, expr: string | number)\r\n {\r\n let param = this.GetParam(paramName);\r\n if (param)\r\n param.expr = expr;\r\n }\r\n\r\n DeleteParam(paramName: string)\r\n {\r\n let index = this.Params.findIndex(p => p.name === paramName);\r\n if (index !== -1 && index >= TempateDefaultParamCount)//LWH P R 禁止删除\r\n this.Params.splice(index, 1);\r\n\r\n return this;\r\n }\r\n\r\n //#endregion param\r\n\r\n /**\r\n * 通常UI操作的时候,都需要更新整个树,所以隐藏这个API.\r\n * see `UpdateTemplateTree`\r\n *\r\n * 更新当前节点\r\n *\r\n * ### 定位 (大小,方位)\r\n *\r\n * - (放弃)如果当前节点是更新树的最高层(但当前节点不是根节点)\r\n * 那么当存在夹层空间定位的时候,可以不重复进行夹层空间定位,因为此时该空间不会发生变化.\r\n * 补充:如果夹层空间的板件都在上层,那么可以做这个优化,如果定位的板件没在模块中,那么不能进行这个优化.\r\n *\r\n * - [更新优先]在没有实现变量依赖收集(类似mobx)时,我们认为`positioning`的优先级最高.\r\n * 所以`positioning`会被优先更新. `LWH`,`XYZ`.\r\n *\r\n * - 在使用变量定位时,需要传入上层的坐标系,以便进行相对定位.\r\n * 使用空间分析时,已经不需要上层坐标系.\r\n *\r\n * - 辅助定位:帮助空间坐标系进行旋转\r\n * 辅助定位的参数变量将暴露出来.{RX RY RZ}\r\n * 辅助定位作为参数变量时,用户使用值时很难正确的计算值,应~加入交互选择.(辅助计算)\r\n *\r\n * ### 变量表达式计算\r\n *\r\n * - `LWH`将被`positioning`替代,但变量定义仍然正常存在.\r\n *\r\n * - 变量大部分时候都是被批量更新,(同时传入许多参数).\r\n *\r\n */\r\n protected async Update()\r\n {\r\n this._CacheParamVars = this.GetParameterDefinition(false);\r\n let ens = this.Objects.filter(id => !id.IsErase).map(id => id.Object as Entity);\r\n let evaled = new Set<TemplateParam>();\r\n\r\n this._CacheSpaceCS = this.GetTemplateSpaceCS(false);\r\n\r\n let paramMap = new Map<string, TemplateParam>();\r\n for (let param of this.Params)\r\n paramMap.set(param.name, param);\r\n\r\n if (this._Positioning)\r\n {\r\n await this._Positioning.Positioning();\r\n if (!this._Positioning.SpaceCS)\r\n {\r\n //退化成个体坐标系\r\n if (ens.length)\r\n {\r\n this._Positioning.SpaceCS = ens[0].SpaceOCS;\r\n this._Positioning.SpaceSize = new Vector3(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n }\r\n else\r\n {\r\n Log(`模块:(${this.name})定位错误!`, LogType.Error);\r\n return;//出事故\r\n }\r\n }\r\n }\r\n\r\n for (let en of ens)\r\n {\r\n en.ApplyMatrix(en.SpaceOCSInv);\r\n if (en instanceof Board)\r\n en.IsLazyGrooveCheck = true;\r\n }\r\n\r\n //#region 1.定位(坐标系和大小)\r\n /**\r\n * LWH在存在定位空间和继承空间时的表达式行为不一致.\r\n * - 在存在定位空间的时候,LWH是修改定位空间旋转后的值.\r\n * - 不存在定位空间的时候,修改的是空间旋转前的值,因为此时已经没有空间尺寸可供旋转了,\r\n * 只能先提供空间尺寸,然后才进行旋转.\r\n */\r\n\r\n if (this._Positioning)\r\n {\r\n this._CacheSpaceCS = this._Positioning.SpaceCS;\r\n this._CacheSpaceSize = this._Positioning.SpaceSize;\r\n\r\n this.RotateSpaceCS(paramMap, evaled);\r\n\r\n if (this.LParam.expr)\r\n this._CacheSpaceSize.x = this.LParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n if (this.WParam.expr)\r\n this._CacheSpaceSize.y = this.WParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n if (this.HParam.expr)\r\n this._CacheSpaceSize.z = this.HParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n\r\n if (this._Positioning instanceof PositioningTemporary)\r\n this._Positioning = undefined;\r\n }\r\n else\r\n {\r\n let l = this.LParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let w = this.WParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let h = this.HParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n this._CacheSpaceSize = new Vector3(l, w, h);\r\n\r\n this.RotateSpaceCS(paramMap, evaled);\r\n\r\n if (!this.Parent)\r\n {\r\n this.PXParam.value = 0;\r\n this.PYParam.value = 0;\r\n this.PZParam.value = 0;\r\n\r\n this.PXParam.expr = \"\";\r\n this.PYParam.expr = \"\";\r\n this.PZParam.expr = \"\";\r\n\r\n this.RXParam.value = 0;\r\n this.RYParam.value = 0;\r\n this.RZParam.value = 0;\r\n\r\n this.RXParam.expr = \"\";\r\n this.RYParam.expr = \"\";\r\n this.RZParam.expr = \"\";\r\n }\r\n }\r\n\r\n //更新LWH(通过定位空间)\r\n this.LParam.UpdateParam(this._CacheSpaceSize.x);\r\n this.WParam.UpdateParam(this._CacheSpaceSize.y);\r\n this.HParam.UpdateParam(this._CacheSpaceSize.z);\r\n\r\n evaled.add(this.LParam);\r\n evaled.add(this.WParam);\r\n evaled.add(this.HParam);\r\n\r\n //#endregion\r\n\r\n //更新其他参数变量 Eval local params\r\n for (const param of this.Params)\r\n {\r\n if (param.type === TemplateParamType.Material)\r\n await LoadParamMaterial(param);\r\n\r\n param.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n }\r\n\r\n //删除材质变量(材质变量仅在KJL导入中使用,重新出现在右侧列表中是不明智的?) (但是用户可能编辑更新了它?)\r\n // arrayRemoveIf(this.Params, p => p.type === TemplateParamType.Material);\r\n\r\n this.UpdateEntitys();\r\n\r\n //相对定位. use PX PY PZ(这个代码在这里,保证所有的变量都是最新的. 这样我们就可以使用H/2自己定位到自己空间的一半位置)(这个只会修改定位,所以放在这里并不会影响其他的代码)\r\n this.UpdatePosition(paramMap, evaled);\r\n\r\n //变换到新的模版空间\r\n for (let en of ens)\r\n {\r\n en.ApplyMatrix(this._CacheSpaceCS);\r\n if (en instanceof Board)\r\n en.LazyGrooveCheckAll();\r\n }\r\n\r\n //更新顶层变量值\r\n if (!this.Parent)\r\n {\r\n for (const param of this.Params)\r\n this._CacheParamVars[`$${param.name}`] = param.value;\r\n }\r\n else\r\n {\r\n for (let param of this._CatchRootParam)\r\n this._CacheParamVars[`$${param.name}`] = param.value;\r\n }\r\n\r\n //保持SpaceCS\r\n for (let ent of ens)\r\n {\r\n ent.SpaceOCS = this._CacheSpaceCS;\r\n }\r\n }\r\n\r\n //在模块更新回模块空间之前更新实体(请参考左右侧板模块)\r\n protected UpdateEntitys() { }\r\n\r\n /**\r\n * 使用PXPYPZ更新空间位置\r\n */\r\n private UpdatePosition(paramMap: Map<string, TemplateParam>, evaled: Set<TemplateParam>)\r\n {\r\n let x = this.PXParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let y = this.PYParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n let z = this.PZParam.EvalUpdate(this._CacheParamVars, paramMap, evaled, false);\r\n\r\n if (x !== 0 || y !== 0 || z !== 0)\r\n {\r\n this.PXParam.value = x;\r\n this.PYParam.value = y;\r\n this.PZParam.value = z;\r\n let baseP = new Vector3(x, y, z);\r\n baseP.applyMatrix4(this._CacheSpaceCS);\r\n this._CacheSpaceCS.setPosition(baseP);\r\n }\r\n }\r\n\r\n /**\r\n * 旋转空间定位,如果旋转成功,那么SpaceSize和SpaceCS都可能被更新\r\n */\r\n private RotateSpaceCS(paramMap: Map<string, TemplateParam>, evaled: Set<TemplateParam>)\r\n {\r\n this.RXParam.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n this.RYParam.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n this.RZParam.EvalUpdate(this._CacheParamVars, paramMap, evaled);\r\n //use RX RY RZ\r\n let rx = MathUtils.degToRad(this.RXParam.value as number);\r\n let ry = MathUtils.degToRad(this.RYParam.value as number);\r\n let rz = MathUtils.degToRad(this.RZParam.value as number);\r\n if (rx !== 0 || ry !== 0 || rz !== 0)\r\n {\r\n let mrx = new Matrix4().makeRotationX(rx);\r\n let mry = new Matrix4().makeRotationY(ry);\r\n let mrz = new Matrix4().makeRotationZ(rz);\r\n let mro = mrz.multiply(mry.multiply(mrx));\r\n let roSpace = mro.multiplyMatrices(this._CacheSpaceCS, mro);\r\n let roSpaceInv = mrx.getInverse(roSpace); //变量复用\r\n let transfromToRoSpace = roSpaceInv.multiply(this._CacheSpaceCS);\r\n let box = new Box3(new Vector3(), this._CacheSpaceSize.clone());\r\n box.applyMatrix4(transfromToRoSpace);\r\n box.getSize(this._CacheSpaceSize);\r\n let baseP = box.min.clone().applyMatrix4(roSpace);\r\n roSpace.setPosition(baseP);\r\n //更新LWH(通过定位空间)\r\n this.LParam.UpdateParam(this._CacheSpaceSize.x);\r\n this.WParam.UpdateParam(this._CacheSpaceSize.y);\r\n this.HParam.UpdateParam(this._CacheSpaceSize.z);\r\n this._CacheSpaceCS = roSpace;\r\n }\r\n this._CacheParamVars[\"L\"] = this._CacheSpaceSize.x;\r\n this._CacheParamVars[\"W\"] = this._CacheSpaceSize.y;\r\n this._CacheParamVars[\"H\"] = this._CacheSpaceSize.z;\r\n }\r\n\r\n /** 以广度搜索优先更新节点树 */\r\n async UpdateTemplateTree()\r\n {\r\n if (this.Parent && !this.Parent.IsErase)\r\n {\r\n let parent = this.Parent.Object as TemplateRecord;\r\n if (parent.SplitType !== TemplateSplitType.None || this.NeedUpdateParent)\r\n return await parent.UpdateTemplateTree();\r\n }\r\n\r\n let stack: TemplateRecord[] = [this];\r\n let evaledTemplates = new Set(stack);\r\n let effects: TemplateRecord[] = this.EffectTemplates.filter(t => t?.IsErase === false).map(t => t.Object);\r\n await this.Update();\r\n while (stack.length > 0 || effects.length)\r\n {\r\n let template = stack.shift();\r\n\r\n if (!template)//如果堆栈内更新完了,就更新影响的模块\r\n {\r\n //最早画的index\r\n let index = Max(effects, (a, b) => a.Id.Index > b.Id.Index);\r\n template = effects.splice(index, 1)[0];\r\n\r\n if (evaledTemplates.has(template)) continue;\r\n evaledTemplates.add(template);\r\n\r\n await template.Update();\r\n }\r\n\r\n //清理历史记录时,子对象会被清理,为了防止被清理掉,清除不需要的id\r\n template.Children = template.Children.filter(id => id && !id.IsErase);\r\n\r\n //计算DIV(给子空间使用)\r\n if (template.Children.length > 0 && template.SplitType !== TemplateSplitType.None)\r\n {\r\n let sum = 0;//除去div时,总共占用的空间\r\n for (let c of template.Children)\r\n {\r\n let ctemplate = c.Object as TemplateRecord;\r\n let vardefines = ctemplate.GetParameterDefinition(false);\r\n vardefines._DIV = 0;\r\n let param = ctemplate.Params[template.SplitType];\r\n sum += param.EvalUpdate(vardefines, new Map(), new Set(), false);\r\n }\r\n\r\n let sumDiv = 0;//div=1时占用的空间\r\n for (let c of template.Children)\r\n {\r\n let ctemplate = c.Object as TemplateRecord;\r\n let vardefines = ctemplate.GetParameterDefinition(false);\r\n vardefines._DIV = 1;\r\n let param = ctemplate.Params[template.SplitType];\r\n sumDiv += param.EvalUpdate(vardefines, new Map(), new Set(), false);\r\n }\r\n\r\n let divCount = sumDiv - sum;\r\n\r\n if (divCount > 0)\r\n {\r\n //div可用总空间\r\n let divSum = (template.Params[template.SplitType].value as number);\r\n if (template.SplitType === TemplateSplitType.Z)//因为历史原因保留了这个代码 其实这个是不需要的\r\n {\r\n //上下开门高度总DIV用MBG参数\r\n let mbg = template.Params.find(p => p.name === \"MBG\");\r\n if (mbg) divSum = mbg.value as number;\r\n }\r\n divSum -= sum;\r\n\r\n if (divSum > 0)\r\n template._CacheParamVars.DIV = divSum / divCount;\r\n else\r\n template._CacheParamVars.DIV = 0;\r\n }\r\n\r\n template._CacheParamVars.POS = 0;\r\n }\r\n\r\n //更新子层模块\r\n for (let c of template.Children)\r\n {\r\n let ctemplate = c.Object as TemplateRecord;\r\n stack.push(ctemplate);\r\n evaledTemplates.add(ctemplate);\r\n await ctemplate.Update();\r\n\r\n if (template._CacheParamVars.POS !== undefined)//更新POS\r\n {\r\n let paramValue = ctemplate.Params[template.SplitType].value;\r\n if (typeof paramValue === \"number\")\r\n template._CacheParamVars.POS += ctemplate.Params[template.SplitType].value;\r\n else\r\n template._CacheParamVars.POS += parseFloat(ctemplate.Params[template.SplitType].value as string);\r\n }\r\n }\r\n\r\n //收集影响的模块\r\n for (let cId of template.EffectTemplates)\r\n {\r\n if (cId.IsErase !== false) continue;\r\n\r\n if (evaledTemplates.has(cId.Object)) continue;\r\n\r\n effects.push(cId.Object);\r\n }\r\n }\r\n }\r\n\r\n /** 缓存本节点的变量定义值,当子层需要本层的参数时,可以直接获取 */\r\n protected _CacheParamVars: any;\r\n protected _CacheSpaceCS: Matrix4;\r\n protected _CacheSpaceSize: Vector3;\r\n protected _CatchRootParam: Set<TemplateParam>;\r\n /**\r\n * 本节点可用的所有变量定义.(包括变量继承)\r\n * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新)\r\n * @returns\r\n */\r\n GetParameterDefinition(useCache = true): any\r\n {\r\n if (this._CacheParamVars && useCache)\r\n return this._CacheParamVars;\r\n\r\n let vars = this.GetParentParams();\r\n this._CatchRootParam = new Set();\r\n for (const param of this.Params)\r\n {\r\n if (param.type === TemplateParamType.Material) continue;//材质参数暂时不参与计算\r\n\r\n vars[param.name] = param.value;\r\n\r\n let rootParamName = \"$\" + param.name;\r\n\r\n if (!this.Parent)\r\n vars[rootParamName] = param.value;//root\r\n else if (!(rootParamName in vars))\r\n {\r\n this._CatchRootParam.add(param);\r\n vars[rootParamName] = param.value;//顶层变量捕获 root\r\n }\r\n }\r\n\r\n this._CacheParamVars = vars;\r\n return vars;\r\n }\r\n\r\n //清空变量缓存(当增加参数时,如果不清空缓存,下层的变量会无法取得当前层的变量值)\r\n ClearParameterDefinitionCache()\r\n {\r\n this.Traverse(t =>\r\n {\r\n t._CacheParamVars = undefined;\r\n t._CatchRootParam = undefined;\r\n });\r\n }\r\n\r\n /**\r\n * 变量继承\r\n * - 每继承一层,前缀增加一个`_`\r\n * - 顶层前缀`$`\r\n *\r\n * @returns 继承于父空间的变量定义列表\r\n */\r\n private GetParentParams(): any\r\n {\r\n if (!this.Parent?.Object) return {};\r\n\r\n let parent = this.Parent.Object as TemplateRecord;\r\n let params = parent.GetParameterDefinition();\r\n\r\n let newParams: any = {};\r\n for (let key in params)\r\n {\r\n if (key[0] !== \"$\")\r\n newParams[\"_\" + key] = params[key];\r\n else\r\n newParams[key] = params[key];\r\n }\r\n\r\n if (newParams._DIV === undefined && parent.SplitType !== TemplateSplitType.None)\r\n newParams._DIV = 1;\r\n if (newParams._POS === undefined)\r\n newParams._POS = 0;\r\n\r\n return newParams;\r\n }\r\n\r\n get SpaceParse(): ISpaceParse\r\n {\r\n let spaceParse: ISpaceParse;\r\n\r\n if (this._Positioning && this._Positioning instanceof PositioningClampSpace)\r\n spaceParse = this._Positioning._SpaceParse;\r\n else\r\n spaceParse = new ISpaceParse();\r\n\r\n spaceParse.SpaceOCS = this._CacheSpaceCS;\r\n spaceParse.ParseOK = true;\r\n spaceParse.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize);\r\n\r\n return spaceParse;\r\n }\r\n\r\n /**\r\n * 获得当前的模版空间的相对坐标系\r\n * - 存在父节点的时候使用父节点的模版空间坐标系\r\n * - 不存在父节点的时候使用自身的模版空间坐标系\r\n *\r\n * - 空间坐标系将被定位更新\r\n *\r\n * @param [useCache=true] 当更新当前节点的时候,我们不希望使用缓存,(因为父节点的参数可能已经被更新)\r\n */\r\n private GetTemplateSpaceCS(useCache = true): Matrix4\r\n {\r\n if (useCache && this._CacheSpaceCS)\r\n return this._CacheSpaceCS.clone();\r\n\r\n if (this.Parent?.Object)\r\n {\r\n let template = this.Parent.Object as TemplateRecord;\r\n return template.GetTemplateSpaceCS();\r\n }\r\n\r\n for (let brId of this.Objects)\r\n {\r\n if (brId.Object && !brId.IsErase)\r\n {\r\n let br = brId.Object as Entity;\r\n return br.SpaceOCS;\r\n }\r\n }\r\n\r\n return new Matrix4();\r\n }\r\n\r\n /**\r\n * 获得当前模块的实际位置坐标系.\r\n * 使用 GetTemplateSpaceCS 可能会得到不准确的位置.(得到Parent或者已经缓存的位置)\r\n */\r\n GetTemplateRealitySpaceCS()\r\n {\r\n for (let brId of this.Objects)\r\n {\r\n if (brId.Object && !brId.IsErase)\r\n {\r\n let br = brId.Object as Entity;\r\n return br.SpaceOCS;\r\n }\r\n }\r\n return this.GetTemplateSpaceCS(true);//此时已经可能不准确\r\n }\r\n\r\n get NeedUpdateParent(): boolean\r\n {\r\n if (this._Positioning) return false; //存在自我定位时,不需要更新父层\r\n\r\n if (this.Parent)\r\n {\r\n let template = this.Parent.Object as TemplateRecord;\r\n return template._CacheSpaceCS === undefined; //父层已更新时,不需要更新父层\r\n }\r\n\r\n return false; //没有父层时,不需要更新父层\r\n }\r\n\r\n protected get PositioningSupportBoards(): Board[]\r\n {\r\n let brs: Board[] = [];\r\n if (this._Positioning && this._Positioning instanceof PositioningClampSpace)\r\n {\r\n for (let id of this._Positioning.Objects)\r\n if (!id.IsErase && id.Object instanceof Board)\r\n brs.push(id.Object);\r\n }\r\n if (brs.length === 0)\r\n {\r\n //可视化空间使用周围板件数据\r\n let parentTemplate = this.Parent?.Object as TemplateRecord;\r\n\r\n while (parentTemplate)\r\n {\r\n for (let e of parentTemplate.AllEntitys)\r\n if (e instanceof Board)\r\n {\r\n brs.push(e);\r\n break;\r\n }\r\n\r\n if (brs.length) break;\r\n\r\n parentTemplate = parentTemplate.Parent?.Object as TemplateRecord;\r\n }\r\n\r\n if (brs.length === 0)\r\n brs.push(new Board());\r\n }\r\n return brs;\r\n }\r\n\r\n protected _Version: number;\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n this._Version = file.Read();\r\n super.ReadFile(file);\r\n this.Type = file.Read();\r\n this._Parent = file.ReadHardObjectId();\r\n let count = file.Read() as number;\r\n this.Children.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadHardObjectId() as ObjectId<TemplateRecord>;\r\n if (id) this.Children.push(id);\r\n }\r\n count = file.Read();\r\n this.Params.length = 0;\r\n for (let i = 0; i < count; i++)\r\n this.Params.push(file.ReadObject());\r\n count = file.Read();\r\n this.Objects.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId() as ObjectId<Entity>;\r\n if (id) this.Objects.push(id);\r\n }\r\n\r\n this._Positioning = file.ReadObject();\r\n\r\n if (this._Version > 1)\r\n this.SplitType = file.Read() ?? this.SplitType;\r\n\r\n this.EffectTemplates.length = 0;\r\n if (this._Version > 3)\r\n {\r\n count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId() as ObjectId<TemplateRecord>;\r\n if (id) this.EffectTemplates.push(id);\r\n }\r\n }\r\n\r\n //清空缓存,因为我们回滚了模块(BUG:修改参数->撤销->替换模块(此时读取了缓存的数据)\r\n this._CacheParamVars = undefined;\r\n this._CacheSpaceCS = undefined;\r\n this._CacheSpaceSize = undefined;\r\n this._CatchRootParam = undefined;\r\n this._NodeDepthCache = undefined;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(4);\r\n super.WriteFile(file);\r\n\r\n let type = this.Type;\r\n //我们在保存文件的时候,才会去序列化它,否则我们不会自动添加历史记录(被动式)\r\n if (this.isExpanded)\r\n type |= TemplateType.Expanded;\r\n else\r\n type &= ~TemplateType.Expanded;\r\n\r\n file.Write(type);\r\n file.WriteHardObjectId(this._Parent);\r\n file.Write(this.Children.length);\r\n for (let id of this.Children)\r\n file.WriteHardObjectId(id);\r\n file.Write(this.Params.length);\r\n for (let param of this.Params)\r\n file.WriteObject(param);\r\n file.Write(this.Objects.length);\r\n for (let id of this.Objects)\r\n file.WriteHardObjectId(id);\r\n\r\n file.WriteObject(this._Positioning);\r\n\r\n file.Write(this.SplitType);\r\n\r\n file.Write(this.EffectTemplates.length);\r\n for (let id of this.EffectTemplates)\r\n file.WriteObjectId(id);\r\n }\r\n //#endregion\r\n}\r\n","import { arrayRemoveIf } from \"../Common/ArrayExt\";\r\nimport { Database } from \"../DatabaseServices/Database\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { TemplateRecord } from \"../DatabaseServices/Template/TemplateRecord\";\r\n\r\nexport function Purge(db: Database): void\r\n{\r\n db.hm.Clear();\r\n let bakEnable = db.hm.Enable;\r\n db.hm.Enable = false;\r\n\r\n //应该避免占位空间被PU(占位空间内没有实体,也没有子层)\r\n arrayRemoveIf(db.TemplateTable.Objects, t =>\r\n {\r\n if (!t || t.IsErase) return true;\r\n\r\n let allEnts: Entity[] = [];\r\n t.Traverse(ct =>\r\n {\r\n for (let id of ct.Objects)\r\n {\r\n if (id.Object)\r\n allEnts.push(id.Object as Entity);\r\n }\r\n });\r\n\r\n if (allEnts.length && allEnts.every(e => e.IsErase))\r\n {\r\n if (!t.Id || !(t instanceof TemplateRecord))\r\n throw \"PU正在删除无id的实体\";\r\n\r\n t.Erase();\r\n t.Traverse(ct =>\r\n {\r\n if (!ct.Id || !(ct instanceof TemplateRecord))\r\n throw \"PU正在删除无id的实体\";\r\n\r\n ct.Erase();\r\n });//PU所有子层\r\n return true;\r\n }\r\n\r\n //否则PU本层\r\n t.Purge();\r\n });\r\n\r\n //再次清理,避免子模块没了之后,父模块还引用它\r\n for (let t of db.TemplateTable.Objects)\r\n t.Children = t.Children.filter(c => !c.IsErase);\r\n\r\n arrayRemoveIf(db.GroupTable.Objects, g =>\r\n {\r\n if (!g || g.IsErase) return true;\r\n g.Purge();\r\n return g.Entitys.length === 0;\r\n });\r\n\r\n //由于我们现在Goodbye会将Object清空,所以为了模块能正确的pu,我们把这个延后了\r\n arrayRemoveIf(db.ModelSpace.Entitys, e =>\r\n {\r\n let isErase = e.IsErase;\r\n if (isErase) e.GoodBye();\r\n return isErase;\r\n });\r\n\r\n arrayRemoveIf(db.Lights.Entitys, e =>\r\n {\r\n let isErase = e.IsErase;\r\n if (isErase) e.GoodBye();\r\n return isErase;\r\n });\r\n\r\n arrayRemoveIf(db.LayoutSpace.Entitys, e =>\r\n {\r\n let isErase = e.IsErase;\r\n if (isErase) e.GoodBye();\r\n return isErase;\r\n });\r\n\r\n arrayRemoveIf(db.ProcessingGroupTable.Objects, e =>\r\n {\r\n if (!e || e.IsErase) return true;\r\n e.Purge();\r\n return e.Objects.length === 0;\r\n });\r\n\r\n arrayRemoveIf(db.AlignLineGroupTable.Objects, e =>\r\n {\r\n if (!e || e.IsErase) return true;\r\n e.Purge();\r\n return e.Objects.length === 0;\r\n });\r\n\r\n db.hm.Enable = bakEnable;\r\n}\r\n\r\n//裁剪树 有时候会有不好的行为,仅在copy.ts中使用\r\nexport function PurgeTemplateTreeRoot(db: Database)\r\n{\r\n for (let t of db.TemplateTable.Objects)\r\n {\r\n if (t.IsRoot && t.Objects.length === 0)\r\n {\r\n if (!t.Id)\r\n throw \"错误!正在删除无id的实体!\";\r\n t.Erase();\r\n\r\n let children = t.Children.concat();//必须备份,否则子实体设置Parent=undefined时错误\r\n t.Children = [];\r\n for (let ctId of children)\r\n {\r\n let ct = ctId.Object as TemplateRecord;\r\n ct.Parent = undefined;\r\n }\r\n }\r\n }\r\n arrayRemoveIf(db.TemplateTable.Objects, t => t.IsErase);\r\n}\r\n","\r\nexport enum DimStyleKeyCode\r\n{\r\n DIMEXO = 20,\r\n /**如果设置为 1延长线具有固定长度 */\r\n DIMFXL = 49,\r\n /**延长线长度 */\r\n DIMFXLON = 290,\r\n /**控制尺寸中换算单位的显示 */\r\n DIMALT = 170,\r\n /**控制换算单位的小数位数。 */\r\n DIMALTD = 171,\r\n DIMADEC = 179,\r\n /**箭头尺寸 */\r\n DIMASZ = 41,\r\n\r\n DIMEXE = 44,\r\n DIMTAD = 77,\r\n DIMTXT = 140,\r\n /*147 尺寸线距离文字的距离(从尺寸线偏移) */\r\n DIMGAP = 147,\r\n}\r\n\r\n\r\n//enum to string\r\n// let code = DimStyleKeyCode[DimStyleKeyCode.DIMALT];\r\n//enum keys\r\n// type keys = keyof typeof DimStyleKeyCode\r\n","import { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { SymbolTableRecord } from \"../SymbolTableRecord\";\r\n\r\n//ref https://ezdxf.readthedocs.io/en/stable/dxfinternals/tables/dimstyle_table.html\r\n\r\nexport enum DimTextPosDir\r\n{\r\n Top = 1,//上\r\n Out = 2,//外部\r\n}\r\n\r\n/**\r\n * 标注样式\r\n */\r\n@Factory\r\nexport class DimStyleRecord extends SymbolTableRecord\r\n{\r\n /** 如果设置为 1延长线(脚线)具有固定长度 DIMFXLON 290 */\r\n @AutoRecord DIMFXLON: boolean = true;//1\r\n\r\n /** DIMFXL 49 尺寸线下方的延长线长度如果固定DIMFXLON 为 1DIMEXE 定义尺寸线上方的长度 */\r\n @AutoRecord DIMFXL: number = 100;\r\n\r\n /** 控制尺寸中换算单位的显示 DIMALT 170 */\r\n @AutoRecord DIMALT: boolean = true;//2\r\n //\r\n /** 控制换算单位的小数位数。如果打开 DIMALTDIMALTD 会设置交替测量中小数点右侧显示的位数。 DIMALTD 171 */\r\n @AutoRecord DIMALTD: number = 2;//控制对齐标注的小数位精度\r\n\r\n @AutoRecord DIMADEC: number = 2;//控制在角度尺寸中显示的精度位置的数量。\r\n\r\n /** DIMASZ\t41 控制尺寸线和引线箭头的大小。还控制钩线的大小。箭头大小的倍数决定尺寸线和文本是否应适合尺寸界线。如果由 DIMBLK 设置DIMASZ 也用于缩放箭头块。当 DIMTSZ 不为零时DIMASZ 无效。 */\r\n @AutoRecord DIMASZ: number = 10;\r\n\r\n /**147 尺寸线距离文字的距离(从尺寸线偏移) */\r\n @AutoRecord DIMGAP: number = 10;\r\n\r\n /**42 指定尺寸界线与原点的偏移距离。对于固定长度的延长线,此值确定最小偏移量。 */\r\n @AutoRecord DIMEXO: number = 20;\r\n\r\n /**43 */\r\n @AutoRecord DIMDLI: number = 20;\r\n\r\n /**44 肩膀上面的延伸线长度 */\r\n @AutoRecord DIMEXE: number = 20;\r\n\r\n /** 140 文字高度 */\r\n @AutoRecord DIMTXT: number = 60;\r\n /**77 控制文本相对于尺寸线的垂直位置。 */\r\n @AutoRecord DIMTAD: DimTextPosDir = DimTextPosDir.Out;\r\n\r\n\r\n // DIMTMOVE 279 设置标注文字移动规则。0 = 使用尺寸文本移动尺寸线 1 = 在移动尺寸文本时添加引线 2 = 允许文本在没有引线的情况下自由移动\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n override ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n\r\n let bitV = file.Read() as number;\r\n this.DIMFXLON = (bitV & 1) > 0;\r\n this.DIMALT = (bitV & 2) > 0;\r\n\r\n this.DIMFXL = file.Read();\r\n this.DIMALTD = file.Read();\r\n this.DIMASZ = file.Read();\r\n this.DIMGAP = file.Read();\r\n this.DIMEXO = file.Read();\r\n this.DIMDLI = file.Read();\r\n this.DIMEXE = file.Read();\r\n this.DIMTXT = file.Read();\r\n this.DIMTAD = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this.DIMADEC = file.Read();\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n\r\n let bitV = 0;//压缩布尔值到里面\r\n if (this.DIMFXLON) bitV += 1;\r\n if (this.DIMALT) bitV += 2;\r\n\r\n file.Write(bitV);\r\n file.Write(this.DIMFXL);\r\n file.Write(this.DIMALTD);\r\n file.Write(this.DIMASZ);\r\n file.Write(this.DIMGAP);\r\n file.Write(this.DIMEXO);\r\n file.Write(this.DIMDLI);\r\n file.Write(this.DIMEXE);\r\n file.Write(this.DIMTXT);\r\n file.Write(this.DIMTAD);\r\n\r\n file.Write(this.DIMADEC);\r\n }\r\n //#endregion\r\n}\r\n","import { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { DimStyleKeyCode } from \"../DimStyle/DimstyleKeyCodeEnum\";\r\nimport { DimStyleRecord } from \"../DimStyle/DimStyleRecord\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { PhysicalMaterialRecord } from \"../PhysicalMaterialRecord\";\r\nimport { Text } from \"../Text/Text\";\r\n\r\n@Factory\r\nexport abstract class Dimension extends Entity\r\n{\r\n OnlyRenderType = true;\r\n protected _TextString: string;\r\n protected _Text = new Text(undefined, undefined, \"yahei\");\r\n\r\n //避免标注实体使用材质\r\n get Material() { return this._MaterialId; }\r\n set Material(materialId: ObjectId<PhysicalMaterialRecord>) { }\r\n\r\n //#region 标注样式\r\n protected _DimStyle: ObjectId;//标注样式\r\n protected _DimStyleOverride: Map<DimStyleKeyCode, any> = new Map;//标注样式替代\r\n\r\n //获取覆盖的标注样式(来自Key)\r\n GetDimStyleOverrideValue(key: DimStyleKeyCode): any { return this._DimStyleOverride.get(key); }\r\n //设置覆盖的标注样式\r\n SetDimStyleOverrideValue(key: DimStyleKeyCode, value: any)\r\n {\r\n if (this.GetDimStyleOverrideValue(key) === value) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let oldV = this.GetDimStyleValue(key);\r\n this._DimStyleOverride.set(key, value);\r\n\r\n if (oldV !== value)\r\n this.Update();\r\n }\r\n\r\n //设置多个覆盖的标注样式\r\n SetDimStyleOverrideValues(valueMap: Map<DimStyleKeyCode, any>)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n for (let [key, value] of valueMap)\r\n {\r\n this._DimStyleOverride.set(key, value);\r\n }\r\n this.Update();\r\n }\r\n\r\n DeleteDimStyleOverrideValue(key: DimStyleKeyCode)\r\n {\r\n if (!this._DimStyleOverride.has(key)) return;\r\n this.WriteAllObjectRecord();\r\n this._DimStyleOverride.delete(key);\r\n this.Update();\r\n }\r\n\r\n ClearDimStyleOverride()\r\n {\r\n if (this._DimStyleOverride.size === 0) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._DimStyleOverride.clear();\r\n this.Update();\r\n }\r\n\r\n //获取当前的标注样式值\r\n GetDimStyleValue(key: DimStyleKeyCode)\r\n {\r\n let value = this.GetDimStyleOverrideValue(key);\r\n if (value !== undefined) return value;\r\n\r\n if (this._DimStyle?.Object)\r\n return this._DimStyle.Object[DimStyleKeyCode[key]];\r\n\r\n if (HostApplicationServices.CurrentDimStyle && HostApplicationServices.CurrentDimStyle.Object instanceof DimStyleRecord)\r\n return HostApplicationServices.CurrentDimStyle.Object[DimStyleKeyCode[key]];\r\n }\r\n\r\n get DimStyle() { return this._DimStyle; }\r\n /**设置标注样式 */\r\n set DimStyle(styleId: ObjectId)\r\n {\r\n if (styleId === this._DimStyle) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n this._DimStyle = styleId;\r\n\r\n this.Update();\r\n }\r\n\r\n //#endregion\r\n\r\n set TextString(txt: string)\r\n {\r\n let str = this.GetPrimitiveString();\r\n let tstr = this._TextString ? this._TextString.replace(\"<>\", str) : str;\r\n if (txt !== tstr)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (txt.trim() === \"\")\r\n this._TextString = null;\r\n else\r\n this._TextString = txt.replace(str, \"<>\");\r\n this.Update();\r\n }\r\n }\r\n\r\n get TextString()\r\n {\r\n return this._TextString ? this._TextString.replace(\"<>\", this.GetPrimitiveString()) : this.GetPrimitiveString();\r\n }\r\n /**计算文字盒子占用的宽度 */\r\n get TextBoxWidth()\r\n {\r\n return this.TextString.length * Math.abs(this.TextSize / 2) * 1.35;\r\n }\r\n\r\n get TextSize() { return this.GetDimStyleValue(DimStyleKeyCode.DIMTXT); }\r\n set TextSize(size: number)\r\n {\r\n this.SetDimStyleOverrideValue(DimStyleKeyCode.DIMTXT, size);\r\n }\r\n\r\n\r\n get FractionDigits() { return this.GetDimStyleValue(DimStyleKeyCode.DIMALTD); }\r\n set FractionDigits(length: number)\r\n {\r\n this.SetDimStyleOverrideValue(DimStyleKeyCode.DIMALTD, length);\r\n }\r\n\r\n\r\n /**未被修改过的 原始显示字符串,供内部使用 实际文字需要使用.TextString */\r\n protected abstract GetPrimitiveString(): string;\r\n\r\n\r\n protected ReadDimStyle(file: CADFiler)\r\n {\r\n this._DimStyleOverride.clear();\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let k = file.Read();\r\n let v = file.Read();\r\n this._DimStyleOverride.set(k, v);\r\n }\r\n }\r\n protected WriteDimStyle(file: CADFiler)\r\n {\r\n file.Write(this._DimStyleOverride.size);\r\n for (let [k, v] of this._DimStyleOverride)\r\n {\r\n file.Write(k);\r\n file.Write(v);\r\n }\r\n }\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { Database } from './Database';\r\n\r\n@Factory\r\nexport class CreateObjectData extends CADObject\r\n{\r\n private CADFiler: CADFiler = new CADFiler();\r\n\r\n //用于记录创建的对象\r\n CreateObject: CADObject;\r\n\r\n /**\r\n * 如果是实体新建,那么不需要调用`Save`,历史记录会在命令结束的时候调用.\r\n * 如果是实体删除,那么请自行调用`Save`.\r\n */\r\n constructor(public Object?: CADObject)\r\n {\r\n super();\r\n }\r\n\r\n //记录数据,在命令结束的时候记录\r\n Save()\r\n {\r\n if (this.Object && this.CADFiler.Data.length === 0)\r\n {\r\n this.CADFiler.Data.length = 0;\r\n this.CADFiler.WriteObject(this.Object);\r\n }\r\n return this;\r\n }\r\n\r\n GetObject(db: Database): CADObject\r\n {\r\n this.CADFiler.Reset();\r\n this.CADFiler.database = db;\r\n this.Object = this.CADFiler.ReadObject();\r\n this.CADFiler.Reset();\r\n return this.Object;\r\n }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n file.Read();//ver;\r\n let data = file.Read();\r\n this.CADFiler.Data = data;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);//ver\r\n file.Write(this.CADFiler.Data);\r\n }\r\n //#endregion -----------------------------File End-----------------------------\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\n\r\n@Factory\r\nexport class RemoveObjectData<T = number> extends CADObject\r\n{\r\n private index: T;\r\n\r\n RemoveObject: CADObject;//用于记录被删除的对象\r\n constructor(index?: T)\r\n {\r\n super();\r\n this.index = index;\r\n }\r\n get Index()\r\n {\r\n return this.index;\r\n }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n file.Read();//ver\r\n this.index = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.index);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(file: CADObject)\r\n { }\r\n //#endregion -----------------------------File End-----------------------------\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CreateObjectData } from './CreateObjectData';\r\nimport { HistorycRecord } from './HistorycRecord';\r\nimport { ObjectId } from './ObjectId';\r\nimport { RemoveObjectData } from './RemoveObjectData';\r\n\r\n@Factory\r\nexport class ObjectCollection<T extends CADObject> extends CADObject\r\n{\r\n Objects: T[] = [];\r\n\r\n SpecialOwner: ObjectId;//特殊所有者 仅BlockTableRC;\r\n\r\n Destroy()\r\n {\r\n super.Destroy();\r\n this.Objects.length = 0;\r\n }\r\n\r\n /**\r\n * @param object\r\n * @param isCheckObjectCleanly 检查对象是否清白,如果对象不清白,那么将会被拒绝加入到集合.\r\n */\r\n Append(object: T, isCheckObjectCleanly = true)\r\n {\r\n if (isCheckObjectCleanly && object.Id)\r\n {\r\n console.warn(\"尝试加入已经分配id的对象!\");\r\n return;\r\n }\r\n if (this._db && !object.Id)\r\n object.SetOwnerDatabase(this._db);\r\n else\r\n object.SetDatabase(this._db);\r\n\r\n this.Objects.push(object);\r\n this.AppendEvent(object);\r\n\r\n let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.redoData = new CreateObjectData(object);\r\n hisRec.undoData = new RemoveObjectData(this.Objects.length - 1);\r\n\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n\r\n return object.Id;\r\n }\r\n AppendEvent(obj: T)\r\n {\r\n\r\n }\r\n Remove(obj: T)\r\n {\r\n let index = this.Objects.indexOf(obj);\r\n this.RemoveIndex(index);\r\n }\r\n\r\n RemoveIndex(index: number)\r\n {\r\n if (index === -1)\r\n return;\r\n let obj = this.Objects[index];\r\n this.Objects.splice(index, 1);\r\n\r\n let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.undoData = new CreateObjectData(obj).Save();\r\n hisRec.redoData = new RemoveObjectData(index);\r\n\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n if (obj)\r\n obj.GoodBye();\r\n\r\n return obj;\r\n }\r\n\r\n //#region -----------------------------File-----------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n this.Objects.length = 0;\r\n super.ReadFile(file);\r\n let cout = file.Read();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let obj = file.ReadObject() as T;\r\n if (obj)\r\n {\r\n this.Objects.push(obj);\r\n\r\n //由于旧的图纸可能没有这个Owner 可能造成一些错误,这里修复它\r\n // if (!obj.Owner) //因为对纹组导致的 必须修复Id\r\n obj.Owner = this.SpecialOwner ?? this.objectId;\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(this.Objects.length);\r\n for (let obj of this.Objects)\r\n file.WriteObject(obj);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n if (undoData instanceof CreateObjectData)\r\n {\r\n let obj = undoData.GetObject(this._db) as T;\r\n this.Objects.push(obj);\r\n this.AppendEvent(obj);\r\n undoData.CreateObject = obj;\r\n }\r\n else if (undoData instanceof RemoveObjectData)\r\n {\r\n let obj = this.RemoveIndex(undoData.Index);\r\n undoData.RemoveObject = obj;\r\n }\r\n }\r\n //#endregion -----------------------------File End-----------------------------\r\n}\r\n","import { end } from 'xaop';\r\nimport { Status } from '../Common/Status';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { Database } from './Database';\r\nimport { Dimension } from './Dimension/Dimension';\r\nimport { Board } from './Entity/Board';\r\nimport { Entity } from './Entity/Entity';\r\nimport { ObjectCollection } from './ObjectCollection';\r\nimport { RoomFlatFloor } from './Room/Entity/Flat/RoomFlatFloor';\r\nimport { RoomFlatTop } from './Room/Entity/Flat/RoomFlatTop';\r\nimport { RoomHolePolyline } from './Room/Entity/Wall/Hole/RoomHolePolyline';\r\nimport { RoomWallBase } from './Room/Entity/Wall/RoomWallBase';\r\nimport { SymbolTableRecord } from './SymbolTableRecord';\r\n\r\n@Factory\r\nexport class BlockTableRecord extends SymbolTableRecord\r\n{\r\n EntityCol = new ObjectCollection<Entity>();\r\n constructor()\r\n {\r\n super();\r\n end(this.EntityCol, this.EntityCol.AppendEvent, (e: Entity) => { this.AppendEvent(e); });\r\n }\r\n\r\n SetOwnerDatabase(db: Database)\r\n {\r\n super.SetOwnerDatabase(db);\r\n this.EntityCol.SetOwnerDatabase(db);\r\n return this;\r\n }\r\n\r\n get Entitys() { return this.EntityCol.Objects; }\r\n\r\n /** 提供通用的Add方法(以便在WblockClone时能统一调用.Add) */\r\n Add(obj: Entity, isCheckObjectCleanly = true): Status\r\n {\r\n this.Append(obj, isCheckObjectCleanly);\r\n return Status.True;\r\n }\r\n\r\n Append(entity: Entity, isCheckObjectCleanly = true)\r\n {\r\n if (this._db)\r\n {\r\n if (entity instanceof Dimension)\r\n {\r\n if (!entity.DimStyle)\r\n entity.DimStyle = this._db.DimStyleTable.Current;//设置默认的标注样式\r\n }\r\n else if (entity instanceof RoomWallBase || entity instanceof RoomFlatTop || entity instanceof RoomHolePolyline)\r\n {\r\n if (!entity.Material)\r\n entity.Material = this._db.MaterialTable.CurWallMtl;\r\n }\r\n else if (entity instanceof RoomFlatFloor)\r\n {\r\n if (!entity.Material)\r\n entity.Material = this._db.MaterialTable.CurFloorMtl;\r\n }\r\n else if (entity instanceof Board)\r\n {\r\n if (!entity.Material)\r\n entity.Material = this._db.MaterialTable.CurBoardMtl;\r\n }\r\n\r\n if (!entity.HasLayer)\r\n entity.Layer = this._db.LayerTable.Current;\r\n }\r\n\r\n this.EntityCol.Append(entity, isCheckObjectCleanly);\r\n entity.Owner = this.objectId;\r\n }\r\n\r\n /**添加实体实现(通过转发) */\r\n AppendEvent(entity: Entity) { }\r\n\r\n Remove(entity: Entity)\r\n {\r\n this.EntityCol.Remove(entity);\r\n }\r\n\r\n Destroy()\r\n {\r\n super.Destroy();\r\n this.EntityCol.Destroy();\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.EntityCol.SpecialOwner = this.objectId;\r\n this.EntityCol.ReadFile(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n this.EntityCol.WriteFile(file);\r\n }\r\n //#endregion\r\n}\r\n","import { AllObjectData } from \"./AllObjectData\";\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { HistorycRecord } from './HistorycRecord';\r\nimport { ObjectId } from './ObjectId';\r\n\r\n@Factory\r\nexport class ObjectAllDataHistoryRecord extends HistorycRecord\r\n{\r\n constructor(public RecordEntityId?: ObjectId)\r\n {\r\n super();\r\n if (RecordEntityId)\r\n this.undoData = new AllObjectData(this.RecordEntityId.Object);\r\n }\r\n\r\n WriteRedo()\r\n {\r\n this.redoData = new AllObjectData(this.RecordEntityId.Object);\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.RecordEntityId = file.ReadObjectId();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.WriteObjectId(this.RecordEntityId);\r\n }\r\n //#endregion\r\n}\r\n","import { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CreateObjectData } from './CreateObjectData';\r\nimport { EraseEntityData } from \"./EraseEntityData\";\r\nimport { HistorycRecord } from './HistorycRecord';\r\nimport { ObjectAllDataHistoryRecord } from './ObjectAllDataHistoryRecord';\r\nimport { ObjectId } from './ObjectId';\r\n\r\n/**\r\n * 命令的历史记录\r\n */\r\n@Factory\r\nexport class CommandHistoryRecord extends CADObject\r\n{\r\n constructor(public CommandName = \"\")\r\n {\r\n super();\r\n }\r\n //历史记录表\r\n private _HistoryList = new Map<ObjectId, HistorycRecord[]>();\r\n private _CreateObjects = new Map<CADObject, HistorycRecord>();\r\n\r\n get HistoryList(): Map<ObjectId, HistorycRecord[]>\r\n {\r\n return this._HistoryList;\r\n }\r\n\r\n private GetObjectHistoryList(id: ObjectId)\r\n {\r\n if (!this._HistoryList.has(id))\r\n this._HistoryList.set(id, []);\r\n return this._HistoryList.get(id);\r\n }\r\n\r\n EndCommand()\r\n {\r\n for (let [id, hrs] of this._HistoryList)\r\n {\r\n let hr = this.GetObjectAllDataRecord(hrs);\r\n if (hr)\r\n hr.WriteRedo();\r\n }\r\n\r\n for (let [, hr] of this._CreateObjects)\r\n {\r\n let h = hr.redoData as CreateObjectData;\r\n h.Save();\r\n }\r\n }\r\n\r\n //获取对象快照记录(如果有的话)\r\n GetObjectAllDataRecord(historyList: HistorycRecord[]): ObjectAllDataHistoryRecord | undefined\r\n {\r\n if (historyList.length > 0)\r\n {\r\n let hr = historyList[historyList.length - 1];\r\n if (hr instanceof ObjectAllDataHistoryRecord)\r\n return hr;\r\n }\r\n }\r\n\r\n //对象写入历史记录\r\n WriteObjectHistoryPath(obj: CADObject, history: HistorycRecord)\r\n {\r\n if (!obj || this._CreateObjects.has(obj))//某些时候obj可能为空\r\n return;\r\n\r\n let hrs = this.GetObjectHistoryList(obj.Id);\r\n if (this.GetObjectAllDataRecord(hrs))\r\n return;\r\n\r\n if (history.redoData instanceof CreateObjectData)\r\n this._CreateObjects.set(history.redoData.Object, history);\r\n\r\n hrs.push(history);\r\n }\r\n\r\n WriteObjectSnapshoot(obj: CADObject): void\r\n {\r\n if (!obj.Id)\r\n {\r\n console.warn(\"错误!CreateObjectHistory\");\r\n return;\r\n }\r\n\r\n if (this._CreateObjects.has(obj))\r\n return;\r\n\r\n let hrs = this.GetObjectHistoryList(obj.Id);\r\n if (this.GetObjectAllDataRecord(hrs))\r\n return;\r\n\r\n let hr = new ObjectAllDataHistoryRecord(obj.Id);\r\n hrs.push(hr);\r\n }\r\n\r\n CreateEraseHistory(obj: CADObject, isErase: boolean)\r\n {\r\n let hr = new HistorycRecord();\r\n hr.undoData = new EraseEntityData(!isErase);\r\n hr.redoData = new EraseEntityData(isErase);\r\n this.WriteObjectHistoryPath(obj, hr);\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.CommandName = file.Read();\r\n let cout = file.Read();\r\n\r\n this._HistoryList.clear();\r\n for (let i = 0; i < cout; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let length = file.Read();\r\n let hrs: HistorycRecord[] = [];\r\n this._HistoryList.set(id, hrs);\r\n for (let j = 0; j < length; j++)\r\n {\r\n let hr = file.ReadObject() as HistorycRecord;\r\n hrs.push(hr);\r\n }\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.CommandName);\r\n file.Write(this._HistoryList.size);\r\n for (let [id, hrs] of this._HistoryList)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(hrs.length);\r\n for (let hr of hrs)\r\n {\r\n file.WriteObject(hr);\r\n }\r\n }\r\n }\r\n //#endregion\r\n}\r\n","import { Status } from \"../../Common/Status\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { ObjectCollection } from \"../ObjectCollection\";\r\nimport { AlignLineGroupRecord } from \"./AlignLineGroupRecord\";\r\n\r\n@Factory\r\nexport class AlignLineGroupTable extends ObjectCollection<AlignLineGroupRecord>\r\n{\r\n Append(object: AlignLineGroupRecord, isCheckObjectCleanly = true)\r\n {\r\n let id = super.Append(object, isCheckObjectCleanly);\r\n\r\n if (id)\r\n object.Owner = this.Id;\r\n\r\n return id;\r\n }\r\n\r\n Add(record: AlignLineGroupRecord, isCheckObjectCleanly = true): Status\r\n {\r\n let id = this.Append(record, isCheckObjectCleanly);\r\n if (id)\r\n return Status.True;\r\n else\r\n return Status.False;\r\n }\r\n\r\n Remove(record: AlignLineGroupRecord)\r\n {\r\n return super.Remove(record);\r\n }\r\n}\r\n","import { Box3, MathUtils, OrthographicCamera, PerspectiveCamera, Vector3 } from 'three';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { CADFiler } from '../DatabaseServices/CADFiler';\r\nimport { Orbit } from '../Geometry/Orbit';\r\n\r\n//相机近端面最小值\r\nexport const ViewNearMinSize = 1e-2;\r\n\r\nconst ViewScopeSize = 4e6;\r\n//相机活动范围\r\nconst ViewScopeMin = new Vector3(-ViewScopeSize, -ViewScopeSize * 0.7, -ViewScopeSize);\r\nconst ViewScopeMax = ViewScopeMin.clone().negate();\r\n\r\nconst ViewBoxMin = new Vector3(1, 1, 1);\r\nconst viewBoxMax = new Vector3(1e7, 1e7, 1e7);\r\n\r\nexport enum CameraType\r\n{\r\n OrthographicCamera = 1,\r\n PerspectiveCamera = 2,\r\n}\r\n\r\ntype Camera = OrthographicCamera | PerspectiveCamera;\r\n\r\n/**\r\n *\r\n * 相机的控制.\r\n * ->切换相机\r\n * ->设置视口大小\r\n * ->旋转和移动相机.\r\n */\r\nexport class CameraUpdate\r\n{\r\n private _CurCamera: Camera;\r\n private _CameraArray: Map<any, Camera> = new Map<any, Camera>();\r\n\r\n //视口的画布大小\r\n private _Width: number;\r\n private _Height: number;\r\n //视口显示的高度\r\n private _ViewHeight: number = 1000;\r\n\r\n //观察的位置\r\n private _Target: Vector3 = new Vector3();\r\n //观察向量\r\n private _Direction: Vector3 = new Vector3(0, 0, -1);\r\n //观察的轨道.\r\n private _Orbit: Orbit = new Orbit();\r\n\r\n //近端面\r\n private _Near: number = ViewNearMinSize;\r\n\r\n DisableRotate = false;\r\n\r\n constructor()\r\n {\r\n this._CameraArray.set(OrthographicCamera, new OrthographicCamera(-2, 2, 2, -2,\r\n -ViewScopeSize, ViewScopeSize));\r\n\r\n this._CameraArray.set(PerspectiveCamera, new PerspectiveCamera(60, 1, this._Near, ViewScopeSize));\r\n\r\n this._CurCamera = this._CameraArray.get(OrthographicCamera);\r\n\r\n this._Orbit.SetFromDirection(this._Direction);\r\n\r\n this.UpdateUp();\r\n\r\n this.Update();\r\n }\r\n\r\n get Orbit() { return this._Orbit; }\r\n\r\n get Aspect(): number\r\n {\r\n return this._Width / this._Height;\r\n }\r\n\r\n get Target() { return this._Target; }\r\n set Target(value: Vector3)\r\n {\r\n this._Target = value;\r\n }\r\n\r\n get Camera(): Camera\r\n {\r\n return this._CurCamera;\r\n }\r\n get ViewHeight()\r\n {\r\n return this._ViewHeight;\r\n }\r\n set ViewHeight(height)\r\n {\r\n this._ViewHeight = MathUtils.clamp(height, HostApplicationServices.viewSize.minViewHeight, HostApplicationServices.viewSize.maxViewHeight);\r\n this.ZoomEvent();\r\n }\r\n\r\n get Direction()\r\n {\r\n return this._Direction.clone();\r\n }\r\n\r\n SetSize(width: number, height: number)\r\n {\r\n this._Width = width;\r\n this._Height = height;\r\n }\r\n get Width()\r\n {\r\n return this._Width;\r\n }\r\n get Height()\r\n {\r\n return this._Height;\r\n }\r\n\r\n get Fov()\r\n {\r\n return (this._CameraArray.get(PerspectiveCamera) as PerspectiveCamera).fov;\r\n }\r\n\r\n set Fov(fov: number)\r\n {\r\n let camera = this._CameraArray.get(PerspectiveCamera) as PerspectiveCamera;\r\n camera.fov = fov;\r\n this.UpdateCameraMatrix();\r\n }\r\n\r\n public get Near(): number\r\n {\r\n return this._Near;\r\n }\r\n public set Near(value: number)\r\n {\r\n this._Near = value;\r\n let camera = this._CameraArray.get(PerspectiveCamera) as PerspectiveCamera;\r\n camera.near = this._Near;\r\n this.UpdateCameraMatrix();\r\n }\r\n\r\n /**\r\n * 平移相机.\r\n * @param {Vector3} mouseMove\r\n */\r\n Pan(mouseMove: Vector3)\r\n {\r\n mouseMove.y *= -1;\r\n mouseMove.multiplyScalar(-this._ViewHeight / this._Height);\r\n mouseMove.applyQuaternion(this.Camera.quaternion);\r\n this._Target.add(mouseMove);\r\n this._Target.clamp(ViewScopeMin, ViewScopeMax);\r\n this.Update();\r\n }\r\n Rotate(mouseMove: Vector3, target: Vector3)\r\n {\r\n let scale = this.CameraType === CameraType.PerspectiveCamera ? 0.002 : 0.003;\r\n this._Orbit.RoX -= mouseMove.y * scale;\r\n this._Orbit.theta -= mouseMove.x * scale;\r\n if (this.CameraType === CameraType.PerspectiveCamera && !target)//转头\r\n {\r\n if (this.DisableRotate) return;\r\n\r\n this._Orbit.UpdateDirection(this._Direction);\r\n this.UpdateUp();\r\n\r\n let camera = this.Camera as PerspectiveCamera;\r\n camera.aspect = this.Aspect;\r\n let distens = (this._ViewHeight / 2) / (Math.tan(MathUtils.degToRad(camera.fov) / 2));\r\n\r\n this._Target.copy(this._Direction).multiplyScalar(distens).add(this.Camera.position);//重新计算观察点位置\r\n\r\n this.UpdateCameraMatrix();\r\n return;\r\n }\r\n\r\n //缓存观察点\r\n let oldTargetFormCameraSpace = target.clone().applyMatrix4(this.Camera.matrixWorldInverse);\r\n\r\n this._Orbit.UpdateDirection(this._Direction);\r\n this.UpdateUp();\r\n this.Update();\r\n\r\n //-----还原观察点\r\n //得到新的观察点相对于相机的位置\r\n let newTargetFormCameraSpace = target.clone().applyMatrix4(this.Camera.matrixWorldInverse);\r\n //减去原先的位置. 得到观测点在相机内移动的向量\r\n newTargetFormCameraSpace.sub(oldTargetFormCameraSpace);\r\n //乘以相机的矩阵. 得到向量在世界坐标系的位置\r\n newTargetFormCameraSpace.applyMatrix4(this.Camera.matrix);\r\n //因为使用的是点变换,所以减去基点,得到向量\r\n newTargetFormCameraSpace.sub(this.Camera.position);\r\n //加上移动的向量. 使得观察点时钟在相机的某个位置\r\n this._Target.add(newTargetFormCameraSpace);\r\n\r\n this.Update();\r\n }\r\n\r\n UpdateCameraMatrix()\r\n {\r\n this.Camera.matrixAutoUpdate = true;\r\n // this.Camera.updateMatrix(); //如果不使用autoUpdate,那么应该还原这句\r\n this.Camera.lookAt(this._Target);\r\n this.Camera.updateProjectionMatrix();\r\n // this.Camera.updateMatrix(); //如果不使用autoUpdate,那么应该还原这句\r\n this.Camera.updateMatrixWorld(false);\r\n this.Camera.matrixAutoUpdate = false;\r\n }\r\n\r\n Zoom(scale: number, scaleCenter?: Vector3)\r\n {\r\n if (this.Camera instanceof OrthographicCamera)\r\n {\r\n this.ViewHeight *= scale;\r\n if (scaleCenter && this._ViewHeight < HostApplicationServices.viewSize.maxViewHeight)\r\n {\r\n this._Target.sub(scaleCenter);\r\n this._Target.multiplyScalar(scale);\r\n this._Target.add(scaleCenter);\r\n }\r\n }\r\n else if (this.Camera instanceof PerspectiveCamera)\r\n {\r\n let add = scale > 1 ? 1 : -1;\r\n add *= this.Camera.position.distanceTo(this._Target) / 10;\r\n this._Target.add(this._Direction.clone().multiplyScalar(-add));\r\n }\r\n this.Update();\r\n }\r\n ZoomExtentsBox3(box3: Box3)\r\n {\r\n if (!box3 || box3.isEmpty()) return;\r\n this.Camera.updateMatrixWorld(false);\r\n\r\n box3.getCenter(this._Target);\r\n\r\n //变换到相机坐标系\r\n box3.applyMatrix4(this.Camera.matrixWorldInverse);\r\n\r\n let size = box3.getSize(new Vector3());\r\n size.clamp(ViewBoxMin, viewBoxMax);\r\n\r\n // this._Target.z = box3.max.z; //使用这个代码 在变换矩阵可以使得观察点在前面,但是会导致观察距离过长\r\n\r\n //宽高比\r\n let aspectRatio = size.x / size.y;\r\n\r\n let viewAspectRatio = this.Aspect;\r\n if (aspectRatio > viewAspectRatio)\r\n this.ViewHeight = size.x / viewAspectRatio;\r\n else\r\n this.ViewHeight = size.y;\r\n this.Update();\r\n }\r\n\r\n /**\r\n * 设置相机的观察向量.\r\n * @param {Vector3} dir 方向向量,这个向量传入后会被更改为单位向量\r\n */\r\n LookAt(dir: Vector3)\r\n {\r\n this.LookAtEvent(dir);\r\n this._Orbit.SetFromDirection(dir);\r\n this._Direction.copy(dir);\r\n this.UpdateUp();\r\n this.Update();\r\n }\r\n LookAtEvent(dir: Vector3) { }\r\n\r\n UpdateUp()\r\n {\r\n Orbit.ComputUpDirection(this._Direction, this.Camera.up);\r\n }\r\n /**\r\n * 根据视口大小,设置相机视口范围.\r\n */\r\n Update()\r\n {\r\n this.Camera.position.copy(this._Target);\r\n\r\n if (this.Camera instanceof OrthographicCamera)\r\n {\r\n this.Camera.left = this.Aspect * this._ViewHeight / -2;\r\n this.Camera.right = this.Aspect * this._ViewHeight / 2;\r\n this.Camera.bottom = this._ViewHeight / -2;\r\n this.Camera.top = this._ViewHeight / 2;\r\n\r\n this.Camera.position.sub(this._Direction);\r\n }\r\n else if (this.Camera instanceof PerspectiveCamera)\r\n {\r\n this.Camera.aspect = this.Aspect;\r\n let distens = (this._ViewHeight / 2) / (Math.tan(MathUtils.degToRad(this.Camera.fov) / 2));\r\n\r\n this.Camera.position.sub(this._Direction.clone().multiplyScalar(distens));\r\n }\r\n else return;\r\n\r\n this.UpdateCameraMatrix();\r\n }\r\n\r\n ZoomEvent()\r\n {\r\n }\r\n\r\n set CameraType(type: CameraType)\r\n {\r\n if (type !== this.CameraType)\r\n this.SwitchCamera();\r\n }\r\n get CameraType()\r\n {\r\n if (this.Camera instanceof OrthographicCamera)\r\n return CameraType.OrthographicCamera;\r\n else\r\n return CameraType.PerspectiveCamera;\r\n }\r\n\r\n SwitchCamera()\r\n {\r\n if (this.Camera instanceof OrthographicCamera)\r\n this._CurCamera = this._CameraArray.get(PerspectiveCamera);\r\n else\r\n this._CurCamera = this._CameraArray.get(OrthographicCamera);\r\n this.UpdateUp();\r\n this.Update();\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this._ViewHeight = file.Read();\r\n\r\n if (ver < 4)\r\n {\r\n this._Target.fromArray(file.Read());\r\n this._Direction.fromArray(file.Read());\r\n }\r\n else\r\n {\r\n this._Target.set(file.Read(), file.Read(), file.Read());\r\n this._Direction.set(file.Read(), file.Read(), file.Read());\r\n }\r\n\r\n this._Orbit.SetFromDirection(this._Direction);\r\n this.UpdateUp();\r\n this.Update();\r\n\r\n if (ver > 1)\r\n this.CameraType = file.Read();\r\n\r\n if (ver > 2)\r\n this.Fov = file.Read();\r\n\r\n if (ver > 4)\r\n this.Near = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(5);\r\n file.Write(this._ViewHeight);\r\n file.WriteVec3(this._Target);\r\n file.WriteVec3(this._Direction);\r\n file.Write(this.CameraType);\r\n file.Write(this.Fov);\r\n\r\n file.Write(this.Near);\r\n }\r\n\r\n CopyFrom(camer: CameraUpdate)\r\n {\r\n let f = new CADFiler;\r\n camer.WriteFile(f);\r\n\r\n f.Reset();\r\n\r\n this.ReadFile(f);\r\n }\r\n}\r\n","import { Matrix4 } from \"three\";\r\nimport { CameraUpdate } from \"../../GraphicsSystem/CameraUpdate\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { CADObject } from \"../CADObject\";\r\n\r\n@Factory\r\nexport class CameraSnapshootRecord extends CADObject\r\n{\r\n Name: string = \"\";\r\n CameraData = new CameraUpdate;\r\n UCS: Matrix4 = new Matrix4;\r\n RenderType: RenderType = RenderType.Wireframe;\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n if (ver === 1)\r\n {\r\n let datas: any[] = file.Read();\r\n let f = new CADFiler(datas);\r\n f.Read();//old ver\r\n this.CameraData.ReadFile(f);\r\n this.UCS.elements = f.Read();\r\n this.RenderType = f.Read();\r\n }\r\n else\r\n {\r\n this.CameraData.ReadFile(file);\r\n for (let i = 0; i < 16; i++)\r\n this.UCS.elements[i] = file.Read();\r\n this.RenderType = file.Read();\r\n }\r\n this.Name = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n this.CameraData.WriteFile(file);\r\n for (let e of this.UCS.elements)\r\n file.Write(e);\r\n file.Write(this.RenderType);\r\n file.Write(this.Name);\r\n }\r\n //#endregion\r\n}\r\n","import { CADFiler } from \"./CADFiler\";\r\nimport { ObjectId, RelevancyType } from \"./ObjectId\";\r\n\r\nexport class DeepCloneFiler extends CADFiler\r\n{\r\n constructor(public idMaping = new Map<number, ObjectId>())\r\n {\r\n super();\r\n }\r\n\r\n ReadObjectId()\r\n {\r\n let index = this.Read();\r\n if (index <= 0) return;\r\n\r\n let id = this.idMaping.get(index);\r\n if (id) return id;\r\n\r\n id = new ObjectId();\r\n this.idMaping.set(index, id);\r\n\r\n return id;\r\n }\r\n\r\n ReadSoftObjectId()\r\n {\r\n let id = this.ReadObjectId();\r\n if (id)\r\n id._RelevancyType = RelevancyType.Soft;\r\n return id;\r\n }\r\n\r\n ReadHardObjectId()\r\n {\r\n let id = this.ReadObjectId();\r\n if (id)\r\n id._RelevancyType = RelevancyType.Hard;\r\n return id;\r\n }\r\n\r\n hardObjectIds: Set<number> = new Set();\r\n cloned: Set<number> = new Set();\r\n WriteHardObjectId(id: ObjectId)\r\n {\r\n if (id && id.Index >= 100 && !this.cloned.has(id.Index)) //当存在id时,表示对象正在被拷贝,或者已经拷贝完成\r\n this.hardObjectIds.add(id.Index);\r\n\r\n return this.WriteObjectId(id);\r\n }\r\n}\r\n","import { observable } from \"mobx\";\r\nimport { Status } from \"../../Common/Status\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { CADObject } from \"../CADObject\";\r\nimport { CreateObjectData } from \"../CreateObjectData\";\r\nimport { HistorycRecord } from \"../HistorycRecord\";\r\nimport { RemoveObjectData } from \"../RemoveObjectData\";\r\nimport { SymbolTableRecord } from \"../SymbolTableRecord\";\r\n\r\n@Factory\r\nexport class SymbolTable extends CADObject\r\n{\r\n /**\r\n * 符号列表,支持迭代,请勿直接修改数据\r\n */\r\n @observable Symbols = new Map<string, SymbolTableRecord>();\r\n\r\n Add(record: SymbolTableRecord, isCheckObjectCleanly = true): Status\r\n {\r\n if (this.Symbols.has(record.Name))\r\n return Status.DuplicateRecordName;\r\n\r\n if (!isCheckObjectCleanly)\r\n record.SetDefaultDb(this._db);\r\n else if (this._db)\r\n record.SetOwnerDatabase(this._db);\r\n\r\n record.Owner = this.objectId;\r\n\r\n this.Symbols.set(record.Name, record);\r\n return Status.True;\r\n }\r\n\r\n Remove(record: SymbolTableRecord)\r\n {\r\n let selfRecord = this.Symbols.get(record.Name);\r\n if (selfRecord === record)\r\n {\r\n let undoRec = this.UndoRecord();\r\n if (undoRec)\r\n {\r\n let hisRec = new HistorycRecord();\r\n hisRec.undoData = new CreateObjectData(selfRecord).Save();\r\n hisRec.redoData = new RemoveObjectData(selfRecord.Name);\r\n\r\n undoRec.WriteObjectHistoryPath(this, hisRec);\r\n }\r\n\r\n this.Symbols.delete(record.Name);\r\n }\r\n }\r\n\r\n override Destroy(): void\r\n {\r\n super.Destroy();\r\n this.Symbols.clear();\r\n }\r\n\r\n GetAt(name: string): SymbolTableRecord | undefined\r\n {\r\n return this.Symbols.get(name);\r\n }\r\n\r\n Has(name: string)\r\n {\r\n return this.Symbols.has(name);\r\n }\r\n\r\n AllocateName(name: string): string\r\n {\r\n for (let i = 1; i < this.Symbols.size + 2; i++)\r\n {\r\n let newName = `${name}${i}`;\r\n if (!this.Has(newName))\r\n return newName;\r\n }\r\n }\r\n\r\n ChangeRecordName(record: SymbolTableRecord, newName: string): boolean\r\n {\r\n if (this.Has(newName)) return false;\r\n this.Symbols.delete(record.Name);\r\n this.Symbols.set(newName, record);\r\n return true;\r\n }\r\n\r\n protected _FileVer = 0;\r\n //#region -------------------------File-------------------------\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n this._FileVer = ver;\r\n let count = file.Read();\r\n this.Symbols.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n if (ver === 1)\r\n file.Read();\r\n let record = file.ReadObject() as SymbolTableRecord;\r\n if (record)\r\n {\r\n this.Symbols.set(record.Name, record);\r\n // if (!record.Owner)\r\n record.Owner = this.objectId;\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 file.Write(this.Symbols.size);\r\n for (let [key, record] of this.Symbols)\r\n {\r\n file.WriteObject(record);\r\n }\r\n }\r\n\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n if (undoData instanceof CreateObjectData)\r\n {\r\n let record = undoData.GetObject(this._db) as SymbolTableRecord;\r\n this.Symbols.set(record.Name, record);\r\n undoData.CreateObject = record;\r\n }\r\n else if (undoData instanceof RemoveObjectData)\r\n {\r\n let obj = this.Symbols.get(undoData.Index as string);\r\n this.Symbols.delete(undoData.Index as string);\r\n undoData.RemoveObject = obj;\r\n }\r\n else\r\n super.ApplyPartialUndo(undoData);\r\n // else if (undoData instanceof RenameObjectData)\r\n // {\r\n // let record = this.GetAt(undoData._oldName);\r\n // this.Symbols.delete(undoData._oldName);\r\n // this.Symbols.set(undoData._newName, record);\r\n // }\r\n }\r\n}\r\n","import { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { SymbolTable } from \"../Tables/SymbolTable\";\r\nimport { Factory } from \"./../CADFactory\";\r\n\r\n\r\n@Factory\r\nexport class DimStyleTable extends SymbolTable\r\n{\r\n Current: ObjectId;\r\n\r\n get DimStyleNames(): string[]\r\n {\r\n let dimStyleNames = [];\r\n for (let dimStyle of this.Symbols)\r\n dimStyleNames.push(dimStyle[0]);\r\n return dimStyleNames;\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n override ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.Current = file.ReadObjectId();\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.WriteObjectId(this.Current);\r\n }\r\n //#endregion\r\n}\r\n","import { Factory } from \"./CADFactory\";\r\nimport { GroupRecord } from \"./GroupTableRecord\";\r\nimport { ObjectCollection } from \"./ObjectCollection\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Status } from \"../Common/Status\";\r\n\r\n@Factory\r\nexport class GroupTable extends ObjectCollection<GroupRecord>\r\n{\r\n\r\n Append(object: GroupRecord, isCheckObjectCleanly = true)\r\n {\r\n let id = super.Append(object, isCheckObjectCleanly);\r\n\r\n if (id)\r\n object.Owner = this.Id;\r\n\r\n return id;\r\n }\r\n\r\n Add(record: GroupRecord, isCheckObjectCleanly = true): Status\r\n {\r\n let id = this.Append(record, isCheckObjectCleanly);\r\n if (id)\r\n return Status.True;\r\n else\r\n return Status.False;\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n }\r\n //#endregion\r\n\r\n}\r\n","\r\nexport let CommandState = {\r\n CommandIng: false,\r\n};\r\n","import { LogEnable, ReportErrorWrap } from '../Common/Log';\r\nimport { Intent, Toaster } from '../Common/Toaster';\r\nimport { CommandState } from '../Editor/CommandState';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CommandHistoryRecord } from './CommandHistoryRecord';\r\n\r\n/**\r\n * 历史记录管理\r\n *\r\n * 关于子命令标记:\r\n * 当子命令标记出现的时候,才允许出现局部撤销,否则命令执行中不允许撤销,触发命令重写了撤销和重做的事件.\r\n */\r\n@Factory\r\nexport class HistoricManage extends CADObject\r\n{\r\n curIndex: number = -1; //当前执行位置,也就是当前的状态, undo时,撤销当前状态,redo时,应用下一个状态\r\n lockIndex = -1; //锁定极限撤销索引(将无法在往前撤销)\r\n historyRecord: CommandHistoryRecord[] = []; //历史记录\r\n doing: boolean = false;//正在执行工作 例如: 文件读取中 撤销中 重做中\r\n Enable: boolean = true;\r\n\r\n _SignalCommandHistory: HistoricManage; //子命令 命令可能分成多个子命令\r\n\r\n constructor(public useSubCommand = true)\r\n {\r\n super();\r\n }\r\n\r\n\r\n /**\r\n * 清理历史记录\r\n * @param [remCount=0] 剩余的记录记录个数\r\n */\r\n Clear(remCount = 0)\r\n {\r\n let delCount = (this.curIndex + 1) - remCount;\r\n if (delCount <= 0) return;\r\n\r\n this.historyRecord.splice(0, delCount);\r\n this.curIndex -= delCount;\r\n }\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n this.curIndex = file.Read();\r\n let cout = file.Read();\r\n this.historyRecord = [];\r\n for (let i = 0; i < cout; i++)\r\n {\r\n this.historyRecord.push(file.ReadObject() as CommandHistoryRecord);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n file.Write(this.curIndex);\r\n file.Write(this.historyRecord.length);\r\n for (let rec of this.historyRecord)\r\n {\r\n file.WriteObject(rec);\r\n }\r\n }\r\n\r\n //命令正在当前状态\r\n get IsNow(): boolean\r\n {\r\n return this.historyRecord.length !== 0 && this.curIndex === this.historyRecord.length - 1;\r\n }\r\n\r\n get UndoData(): CommandHistoryRecord\r\n {\r\n if (this.doing || this.Enable === false)\r\n return undefined;\r\n if (!this.IsNow)\r\n {\r\n this.StartCmd(\"\");\r\n if (LogEnable.Display)\r\n console.warn(\"未标记命令!\");\r\n }\r\n\r\n if (!CommandState.CommandIng)\r\n {\r\n //避免用户心理负担,暂时关闭这个,使用遥测\r\n if (!ReportErrorWrap.IsProduction && ReportErrorWrap.ReportError)\r\n {\r\n ReportErrorWrap.ReportError(new Error().stack, \"命令未执行中,但是却产生了错误了记录!\");\r\n Toaster({\r\n message: \"警告:命令未执行中,但是却产生了错误了历史记录! (不会造成图纸错误,但是会影响撤销(Ctrl+Z)重做(Ctrl+Y),请与我们联系,将错误报告给我们)\",\r\n timeout: 5000,\r\n intent: Intent.WARNING,\r\n key: \"no_command_his\"\r\n });\r\n }\r\n // else jest会警告这个\r\n // console.error(\"命令未执行中,但是却产生了错误了记录!\");\r\n }\r\n\r\n if (this._SignalCommandHistory && CommandState.CommandIng)\r\n return this._SignalCommandHistory.UndoData;\r\n else\r\n return this.historyRecord[this.historyRecord.length - 1];\r\n }\r\n\r\n //开始子命令标记\r\n StartMark(subCommandName = \"\")\r\n {\r\n if (!this.useSubCommand)\r\n return;\r\n\r\n if (!this._SignalCommandHistory)\r\n this._SignalCommandHistory = new HistoricManage(false);\r\n\r\n this._SignalCommandHistory.EndCmd();\r\n this._SignalCommandHistory.StartCmd(subCommandName);\r\n }\r\n\r\n /**\r\n * 不要在命令中直接调用这个函数!\r\n * 请调用 commandMachine.CommandStart\r\n */\r\n StartCmd(cmdName: string)\r\n {\r\n //删除当前状态以后的所有状态\r\n this.historyRecord.splice(this.curIndex + 1, this.historyRecord.length - (this.curIndex + 1));\r\n this.historyRecord.push(new CommandHistoryRecord(cmdName));\r\n this.curIndex = this.historyRecord.length - 1;\r\n }\r\n\r\n CurrentHasHistory(): boolean\r\n {\r\n let lastRec = this.historyRecord[this.curIndex];\r\n if (!lastRec) return false;\r\n this.MergeSubCommmand(lastRec);\r\n return lastRec.HistoryList.size > 0;\r\n }\r\n\r\n //结束当前的命令,返回是否写入历史记录\r\n EndCmd(): boolean\r\n {\r\n if (!this.IsNow)\r\n return false;\r\n let lastRec = this.historyRecord[this.curIndex];\r\n if (lastRec)\r\n {\r\n this.MergeSubCommmand(lastRec);\r\n lastRec.EndCommand();\r\n if (lastRec.HistoryList.size === 0)\r\n {\r\n this.historyRecord.pop();\r\n this.curIndex--;\r\n return false;\r\n }\r\n // else if (this.historyRecord.length > 20)//最大历史记录个数为20 (如果在这边直接删除记录,会导致临时编辑器错误)\r\n // {\r\n // this.historyRecord.shift();\r\n // this.curIndex--;\r\n // }\r\n else if (this.historyRecord.length !== 0 && this.historyRecord.length % 50 === 0)\r\n Toaster({\r\n message: `警告:已经有${this.historyRecord.length}个命令历史记录了,建议您使用PU命令进行清理,避免图纸卡顿和崩溃!`,\r\n timeout: 15000,\r\n intent: Intent.WARNING,\r\n });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * 获得这个命令修改的对象列表\r\n */\r\n get ChangeObjects(): Set<CADObject>\r\n {\r\n let lastRec = this.historyRecord[this.curIndex];\r\n\r\n let objects = new Set<CADObject>();\r\n if (lastRec)\r\n {\r\n this.MergeSubCommmand(lastRec);\r\n for (let [id] of lastRec.HistoryList)\r\n {\r\n objects.add(id.Object);\r\n }\r\n }\r\n return objects;\r\n }\r\n GetRangeChangeObject(startIndex: number, endIndex: number): Set<CADObject>\r\n {\r\n let objects = new Set<CADObject>();\r\n for (let i = startIndex; i < endIndex; i++)\r\n for (let [id] of this.historyRecord[i].HistoryList)\r\n objects.add(id.Object);\r\n return objects;\r\n }\r\n\r\n /**\r\n * 合并命令历史记录,因为命令记录器允许存在子记录,所以当命令结束时,应该把子记录合并到父记录中,子记录将被摧毁.\r\n */\r\n private MergeSubCommmand(lastRec: CommandHistoryRecord)\r\n {\r\n if (this._SignalCommandHistory)\r\n {\r\n for (let rc of this._SignalCommandHistory.historyRecord)\r\n {\r\n for (let [id, hrs] of rc.HistoryList)\r\n {\r\n if (id?.Object)//某些情况下可能为空\r\n for (let hr of hrs)\r\n lastRec.WriteObjectHistoryPath(id.Object, hr);\r\n }\r\n }\r\n this._SignalCommandHistory = undefined;\r\n }\r\n }\r\n\r\n Undo(): boolean\r\n {\r\n //如果命令执行中,那么进行局部撤销.\r\n if (CommandState.CommandIng && this.useSubCommand)\r\n {\r\n if (this._SignalCommandHistory)\r\n return this._SignalCommandHistory.Undo();\r\n return;\r\n }\r\n\r\n if (this.curIndex === this.lockIndex) return;//被锁定,无法撤销\r\n\r\n this.EndCmd();\r\n let historyRec = this.historyRecord[this.curIndex];\r\n if (!historyRec)\r\n return false;\r\n this.doing = true;\r\n for (let [id, recList] of historyRec.HistoryList)\r\n {\r\n for (let i = recList.length; i--;)\r\n {\r\n id?.Object?.ApplyPartialUndo(recList[i].undoData);\r\n }\r\n }\r\n this.UndoEvent(historyRec.CommandName, historyRec);\r\n this.curIndex--;\r\n this.doing = false;\r\n return true;\r\n }\r\n Redo()\r\n {\r\n //如果命令执行中,那么进行局部重做.\r\n if (CommandState.CommandIng && this.useSubCommand)\r\n {\r\n if (this._SignalCommandHistory)\r\n return this._SignalCommandHistory.Redo();\r\n return;\r\n }\r\n\r\n let historyRec = this.historyRecord[this.curIndex + 1];\r\n if (!historyRec)\r\n return false;\r\n this.doing = true;\r\n for (let [id, recList] of historyRec.HistoryList)\r\n {\r\n for (let rec of recList)\r\n {\r\n id.Object.ApplyPartialUndo(rec.redoData);\r\n }\r\n }\r\n this.RedoEvent(historyRec.CommandName, historyRec);\r\n this.curIndex++;\r\n this.doing = false;\r\n return true;\r\n }\r\n\r\n UndoEvent(cmdName: string, historyRec: CommandHistoryRecord)\r\n {\r\n }\r\n\r\n RedoEvent(cmdName: string, historyRec: CommandHistoryRecord)\r\n {\r\n }\r\n\r\n}\r\n","import { AutoRecord } from \"./AutoRecord\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { CADObject } from \"./CADObject\";\r\nimport { SymbolTableRecord } from \"./SymbolTableRecord\";\r\n\r\n@Factory\r\nexport class LayerTableRecord extends SymbolTableRecord\r\n{\r\n @AutoRecord ColorIndex: number = 7;\r\n\r\n // @AutoRecord LineWeight: number = 0;\r\n\r\n @AutoRecord IsOff = false;//关\r\n\r\n @AutoRecord IsLocked = false;//锁定\r\n\r\n // @AutoRecord IsFrozen = false;//冻结\r\n\r\n // @AutoRecord IsHidden = false;//隐藏\r\n\r\n // @AutoRecord Description = \"\";//描述\r\n\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n override ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n\r\n this.ColorIndex = file.Read();\r\n this.IsOff = file.Read();\r\n this.IsLocked = file.Read();\r\n }\r\n\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.Write(this.ColorIndex);\r\n file.Write(this.IsOff);\r\n file.Write(this.IsLocked);\r\n }\r\n\r\n //局部撤销\r\n override ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n","import { Box3, Color, Light as TLight, Vector3 } from 'three';\r\nimport { UpdateDraw } from '../../Common/Status';\r\nimport { ObjectSnapMode } from '../../Editor/ObjectSnapMode';\r\nimport { Box3Ext } from '../../Geometry/Box';\r\nimport { MoveMatrix } from '../../Geometry/GeUtils';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { equaln } from '../../Nest/Common/Util';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { CADObject } from '../CADObject';\r\nimport { Entity } from '../Entity/Entity';\r\n\r\n/**\r\n * 灯光实体基类\r\n */\r\n@Factory\r\nexport class Light extends Entity\r\n{\r\n static DefaultOpenLight = false;\r\n static DefaultCaseShadow = false;\r\n static DefaultShowHelpr = false;\r\n\r\n OnlyRenderType = true;\r\n protected _Intensity: number = 2; //强度\r\n protected _LightColor: Color = new Color();//光源颜色\r\n @AutoRecord Temperature = 6500;//色温\r\n @AutoRecord IndirectLightingIntensity = 3; //0-200 间接光照强度\r\n //LightComponent extends LightComponentBase\r\n @AutoRecord SpecularScale = 1;//高光度范围 默认1 (物理)\r\n protected _ShowHelper = true;// Light.DefaultShowHelpr; 默认绘制的灯光总是有助手,避免让用户困惑\r\n protected _CaseShadow = true;//投射阴影\r\n protected _OpenLight = Light.DefaultOpenLight;//开灯\r\n Clone()\r\n {\r\n return CADObject.prototype.Clone.call(this);\r\n }\r\n\r\n get CaseShadow() { return this._CaseShadow; }\r\n\r\n set CaseShadow(v: boolean)\r\n {\r\n if (v === this._CaseShadow) return;\r\n this.WriteAllObjectRecord();\r\n this._CaseShadow = v;\r\n this.Update();\r\n }\r\n\r\n get OpenLight() { return this._OpenLight; }\r\n\r\n set OpenLight(v: boolean)\r\n {\r\n if (v === this._OpenLight) return;\r\n this._OpenLight = v;\r\n this.Update();\r\n }\r\n\r\n //因为有set 所以必须11对应\r\n get Position()\r\n {\r\n return super.Position;\r\n }\r\n\r\n set Position(v: Vector3)\r\n {\r\n super.Position = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n get Color()\r\n {\r\n return this._LightColor;\r\n }\r\n set Color(color: Color)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LightColor.set(color);\r\n this.Update();\r\n }\r\n get ShowHelper()\r\n {\r\n return this._ShowHelper;\r\n }\r\n set ShowHelper(v: boolean)\r\n {\r\n if (v === this._ShowHelper) return;\r\n this.WriteAllObjectRecord();\r\n this._ShowHelper = v;\r\n this.Update();\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n return new Box3Ext(new Vector3(-0.05, -0.05, -0.05), new Vector3(0.05, 0.05, 0.05));\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return new Box3().setFromCenterAndSize(this.Position, new Vector3(0.1, 0.1, 0.1));\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n }\r\n return [];\r\n }\r\n GetGripPoints(): Array<Vector3>\r\n {\r\n return [this.Position];\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n this.Update();\r\n }\r\n UpdateDrawObject(type: RenderType, en: TLight)\r\n {\r\n en.intensity = this.WebIntensity;\r\n en.color = this._LightColor;\r\n en.visible = this._OpenLight;\r\n }\r\n get Intensity()\r\n {\r\n return this._Intensity;\r\n }\r\n\r\n set Intensity(v: number)\r\n {\r\n if (equaln(v, this._Intensity, 0.01)) return;\r\n this.WriteAllObjectRecord();\r\n this._Intensity = v;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n return this._Intensity;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._LightColor = new Color(file.Read());\r\n this._Intensity = file.Read();\r\n if (typeof this._Intensity === \"string\")\r\n this._Intensity = parseFloat(this._Intensity);\r\n this._ShowHelper = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this._LightColor.r = file.Read();\r\n this._LightColor.g = file.Read();\r\n this._LightColor.b = file.Read();\r\n\r\n this.Temperature = file.Read();\r\n this.IndirectLightingIntensity = file.Read();\r\n this.SpecularScale = file.Read();\r\n this._CaseShadow = file.Read();\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n file.Write(this._LightColor.getStyle());\r\n file.Write(this._Intensity);\r\n file.Write(this._ShowHelper);\r\n\r\n //ver2\r\n {\r\n file.Write(this._LightColor.r);\r\n file.Write(this._LightColor.g);\r\n file.Write(this._LightColor.b);\r\n\r\n file.Write(this.Temperature);\r\n file.Write(this.IndirectLightingIntensity);\r\n file.Write(this.SpecularScale);\r\n file.Write(this._CaseShadow);\r\n }\r\n }\r\n}\r\n","import { AmbientLight as TAmbientLight, Object3D } from \"three\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Light } from \"./Light\";\r\n\r\n@Factory\r\nexport class AmbientLight extends Light\r\n{\r\n protected _Intensity = 0.9;\r\n protected _OpenLight = true;//开灯\r\n protected _CaseShadow: boolean = false;\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let light = new TAmbientLight(this.Color, this._Intensity);\r\n return light;\r\n }\r\n}\r\n","import { Color, DirectionalLight, DirectionalLightHelper, LineBasicMaterial, Mesh, SphereBufferGeometry } from \"three\";\r\n\r\nexport class SunLightHelper extends DirectionalLightHelper\r\n{\r\n declare children: [Mesh];\r\n declare color: Color | string | number;\r\n\r\n constructor(light: DirectionalLight, size: number, color?: Color)\r\n {\r\n const geometry = new SphereBufferGeometry(1, 16, 16);\r\n const material = new LineBasicMaterial({ fog: false });\r\n material.color = light.color;\r\n super(light, size, color);\r\n\r\n this.children[0].geometry = geometry.scale(400, 400, 400);\r\n this.children[0].material = material;\r\n }\r\n}\r\n","import { Group, MathUtils, Matrix3, Matrix4, Object3D, DirectionalLight as TDirectionalLight, Vector2, Vector3 } from \"three\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { equaln, equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Light } from \"./Light\";\r\nimport { SunLightHelper } from \"./SunLightHelper\";\r\n\r\n/**\r\n * 平行光源\r\n */\r\n@Factory\r\nexport class DirectionalLight extends Light\r\n{\r\n protected _Intensity: number = 50; //强度\r\n //光源源角度 0-50\r\n @AutoRecord LightSourceAngle = 0.5;\r\n //源软角度角度\r\n @AutoRecord LightSourceSoftAngle = 0;\r\n\r\n OnlyRenderType = true;\r\n private _Target = new Vector3();\r\n protected _ShowHelper = false;\r\n protected _OpenLight = true;//开灯\r\n\r\n constructor()\r\n {\r\n super();\r\n this.SpecularScale = 0;//高光度范围 默认0 关闭太阳光反射\r\n }\r\n\r\n //避免被删除\r\n Erase(isErase: boolean = true)\r\n {\r\n this.ShowHelper = !isErase;\r\n }\r\n\r\n /**\r\n * @param theta 身体旋转 角度(deg)\r\n * @param phi 头部旋转 角度(deg)\r\n */\r\n SetRotate(thetaDeg: number, phiDeg: number)\r\n {\r\n let phi = (180 - phiDeg) * MathUtils.DEG2RAD;\r\n\r\n let v = new Vector3(Math.cos(phi), 0, Math.sin(phi));\r\n\r\n let r = new Matrix3().rotate(MathUtils.DEG2RAD * thetaDeg);\r\n\r\n v.applyMatrix3(r);\r\n\r\n this.WriteAllObjectRecord();\r\n this._Target.setFromMatrixPosition(this._Matrix).sub(v);\r\n }\r\n\r\n get Target() { return this._Target.clone(); }\r\n set Target(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!equalv3(p, this.Position))\r\n {\r\n this._Target.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n get SunPosition() { return super.Position; }\r\n set SunPosition(p: Vector3)\r\n {\r\n if (\r\n equaln(p.x, this._Matrix.elements[12])\r\n && equaln(p.y, this._Matrix.elements[13])\r\n && equaln(p.z, this._Matrix.elements[14])\r\n )\r\n return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Matrix.setPosition(p);\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n get Position() { return super.Position; }\r\n set Position(p: Vector3)\r\n {\r\n console.error(\"不支持的用法! 错误的设计\");\r\n let bak = this._Target.toArray();\r\n super.Position = p;\r\n this._Target.fromArray(bak);\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 150;\r\n x = Math.pow(x, 0.4);\r\n return x * 1.4; // 7/5=1.25\r\n }\r\n\r\n ApplyMatrix(m: Matrix4)\r\n {\r\n super.ApplyMatrix(m);\r\n this._Target.applyMatrix4(m);\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\r\n }\r\n GetGripPoints(): Array<Vector3>\r\n {\r\n if (this.ShowHelper)\r\n return [this.Position, this._Target];\r\n else\r\n return [];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (indexList[0] === 0)\r\n this.Position = this.Position.add(vec);\r\n else\r\n this._Target.add((vec));\r\n }\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let lightGroup = new Group();\r\n let light = new TDirectionalLight(this._LightColor, this.WebIntensity);\r\n Object.defineProperty(light, \"castShadow\", {\r\n get: () => this.CaseShadow//HostApplicationServices.isShowLightShadow //太阳光无视这个配置!\r\n });\r\n light.shadow.camera.matrixAutoUpdate = true;\r\n light.shadow.camera.near = 1;\r\n light.shadow.camera.far = 100000;\r\n light.shadow.mapSize = new Vector2(2048, 2048);\r\n let helper = new SunLightHelper(light, 500);\r\n helper.lightPlane.matrixAutoUpdate = true;\r\n lightGroup.add(light, helper);\r\n\r\n lightGroup.matrixAutoUpdate = false;\r\n lightGroup.matrix.copy(this._Matrix);\r\n lightGroup.updateMatrixWorld(true);\r\n this.UpdateDrawObject(renderType, lightGroup);\r\n return lightGroup;\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let light = en.children[0] as TDirectionalLight;\r\n super.UpdateDrawObject(type, light);\r\n light.target.position.copy(this._Target);\r\n light.target.updateMatrix();\r\n light.target.updateMatrixWorld(true);\r\n\r\n en.updateMatrixWorld(true);\r\n\r\n let helper = en.children[1] as SunLightHelper;\r\n helper.visible = this._ShowHelper;\r\n if (this._ShowHelper)\r\n {\r\n helper.update();\r\n helper.matrix = light.matrix;\r\n helper.targetLine.updateMatrix();\r\n }\r\n }\r\n\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._Target.fromArray(file.Read());\r\n\r\n if (ver > 1)\r\n {\r\n this.LightSourceAngle = file.Read();\r\n this.LightSourceSoftAngle = file.Read();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._Target.toArray());\r\n\r\n //ver2\r\n file.Write(this.LightSourceAngle);\r\n file.Write(this.LightSourceSoftAngle);\r\n }\r\n}\r\n","import { Color, HemisphereLight as THemisphereLight, Light as TLight, Object3D } from \"three\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Light } from \"./Light\";\r\n\r\n@Factory\r\nexport class HemisphereLight extends Light\r\n{\r\n private _GroundColor = new Color(); //UE有这个属性 但是默认是黑的\r\n protected _Intensity = 1;\r\n @AutoRecord AutoExposure = false;//自动曝光\r\n @AutoRecord ExposureCompensation = 1;//默认为1\r\n protected _OpenLight = true;//开灯\r\n\r\n get GroundColor() { return this._GroundColor; }\r\n\r\n set GroundColor(color: Color)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._GroundColor = color;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n return Math.min(this._Intensity, 4) / 5;\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let light = new THemisphereLight(this.Color, this._LightColor, this.WebIntensity);\r\n return light;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, en: TLight)\r\n {\r\n super.UpdateDrawObject(type, en);\r\n let lg = en as THemisphereLight;\r\n lg.groundColor = this._GroundColor;\r\n }\r\n\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._GroundColor.fromArray(file.Read());\r\n\r\n if (ver > 1)\r\n {\r\n this.AutoExposure = file.Read();\r\n this.ExposureCompensation = file.Read();\r\n }\r\n\r\n }\r\n\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);//ver\r\n file.Write(this._GroundColor.toArray());\r\n\r\n //ver2\r\n file.Write(this.AutoExposure);\r\n file.Write(this.ExposureCompensation);\r\n }\r\n}\r\n","import { Status } from \"../../Common/Status\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { ObjectCollection } from \"../ObjectCollection\";\r\nimport { ProcessingGroupRecord } from \"./ProcessingGroupRecord\";\r\n\r\n@Factory\r\nexport class ProcessingGroupTable extends ObjectCollection<ProcessingGroupRecord>\r\n{\r\n Append(object: ProcessingGroupRecord, isCheckObjectCleanly = true)\r\n {\r\n let id = super.Append(object, isCheckObjectCleanly);\r\n\r\n if (id)\r\n object.Owner = this.Id;\r\n\r\n return id;\r\n }\r\n\r\n Add(record: ProcessingGroupRecord, isCheckObjectCleanly = true): Status\r\n {\r\n let id = this.Append(record, isCheckObjectCleanly);\r\n if (id)\r\n return Status.True;\r\n else\r\n return Status.False;\r\n }\r\n\r\n Remove(record: ProcessingGroupRecord)\r\n {\r\n return super.Remove(record);\r\n }\r\n}\r\n","import { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { CADObject } from \"../CADObject\";\r\nimport { HistorycRecord } from \"../HistorycRecord\";\r\nimport { ISerialize } from \"../ISerialize\";\r\nimport { LayerTableRecord } from \"../LayerTableRecord\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { SymbolTable } from \"./SymbolTable\";\r\n\r\n@Factory\r\nexport class LayerTable extends SymbolTable\r\n{\r\n protected _Current: ObjectId<LayerTableRecord>;//默认当前图层\r\n\r\n public get Current(): ObjectId<LayerTableRecord>\r\n {\r\n return this._Current;\r\n }\r\n\r\n public set Current(id: ObjectId<LayerTableRecord>)//设置当前层\r\n {\r\n if (this._Current === id) return;\r\n\r\n let undoData = this.UndoRecord();\r\n if (undoData)\r\n {\r\n let hr = new HistorycRecord();\r\n hr.undoData = new ObjectIdData(this._Current);\r\n hr.redoData = new ObjectIdData(id);\r\n undoData.WriteObjectHistoryPath(this, hr);\r\n }\r\n\r\n this._Current = id;\r\n HostApplicationServices.CurrentLayer = id;\r\n }\r\n\r\n /** 用于描述图层结构的根节点 */\r\n private _Root = new LayerNode(\"根节点\", true);\r\n\r\n public get Root(): LayerNode\r\n {\r\n return this._Root;\r\n }\r\n\r\n public set Root(root: LayerNode)\r\n {\r\n if (this._Root === root) return;\r\n\r\n let undoData = this.UndoRecord();\r\n if (undoData)\r\n {\r\n let hr = new HistorycRecord();\r\n hr.undoData = new ObjectTreeData(this._Root);\r\n hr.redoData = new ObjectTreeData(root);\r\n undoData.WriteObjectHistoryPath(this, hr);\r\n }\r\n\r\n this._Root = root;\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n override ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n\r\n this._Current = file.ReadObjectId() as ObjectId<LayerTableRecord>;\r\n this._Root = file.ReadObject();\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.WriteObjectId(this._Current);\r\n file.WriteObject(this._Root);\r\n }\r\n //局部撤销\r\n override ApplyPartialUndo(undoData: CADObject)\r\n {\r\n if (undoData instanceof ObjectIdData)\r\n {\r\n this._Current = undoData.objectId as any;\r\n HostApplicationServices.CurrentLayer = this._Current;\r\n }\r\n else if (undoData instanceof ObjectTreeData)\r\n this._Root = undoData.data;\r\n else\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n\r\n/** 用于描述图层结构的节点 */\r\n@Factory\r\nexport class LayerNode implements ISerialize\r\n{\r\n children: LayerNode[];\r\n\r\n constructor(public name: string, isHasChildren = false)\r\n {\r\n if (isHasChildren)\r\n this.children = [];\r\n }\r\n\r\n ReadFile(f: CADFiler)\r\n {\r\n this.name = f.ReadString();\r\n const count = f.Read();\r\n if (count !== -1)\r\n {\r\n this.children = [];\r\n for (let i = 0; i < count; i++)\r\n {\r\n const child = new LayerNode(\"\");\r\n child.ReadFile(f);\r\n this.children.push(child);\r\n }\r\n }\r\n }\r\n\r\n WriteFile(f: CADFiler)\r\n {\r\n f.WriteString(this.name);\r\n if (!this.children)\r\n f.Write(-1);\r\n else\r\n {\r\n f.Write(this.children.length);\r\n for (const child of this.children)\r\n child.WriteFile(f);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 记录当前id的序列化数据\r\n */\r\n@Factory\r\nexport class ObjectIdData implements ISerialize\r\n{\r\n ReadFile(file: CADFiler): this\r\n {\r\n this.objectId = file.ReadObjectId();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.WriteObjectId(this.objectId);\r\n return this;\r\n }\r\n constructor(public objectId: ObjectId) { }\r\n}\r\n\r\n/** 记录树状结构的序列化数据*/\r\n@Factory\r\nexport class ObjectTreeData implements ISerialize\r\n{\r\n ReadFile(file: CADFiler): this\r\n {\r\n this.data = file.ReadObject();\r\n return this;\r\n }\r\n WriteFile(file: CADFiler): this\r\n {\r\n file.WriteObject(this.data);\r\n return this;\r\n }\r\n constructor(public data: LayerNode) { }\r\n}\r\n","import { observable } from \"mobx\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { PhysicalMaterialRecord } from \"../PhysicalMaterialRecord\";\r\nimport { SymbolTable } from \"./SymbolTable\";\r\n\r\nexport class MaterialTable extends SymbolTable\r\n{\r\n @observable protected _CurFloorMtl: ObjectId<PhysicalMaterialRecord>;//默认地板材质\r\n @observable protected _CurWallMtl: ObjectId<PhysicalMaterialRecord>;//默认墙体材质\r\n @observable protected _CurDrawMtl: ObjectId<PhysicalMaterialRecord>;//默认实体材质\r\n @observable protected _CurBulkCeilingFaceMaterial: ObjectId<PhysicalMaterialRecord>;//吊顶底面默认材质\r\n\r\n get CurFloorMtl() { return this._CurFloorMtl; }\r\n get CurWallMtl() { return this._CurWallMtl; }\r\n get CurBoardMtl() { return this._CurDrawMtl; }\r\n get CurBulkCeilingFaceMaterial() { return this._CurBulkCeilingFaceMaterial; }\r\n\r\n set CurFloorMtl(id)\r\n {\r\n if (id === this._CurFloorMtl) return;\r\n this.WriteAllObjectRecord();\r\n this._CurFloorMtl = id;\r\n\r\n if (this._db && this._db.IsDefaultDatabase)\r\n HostApplicationServices.DefaultFloorMaterial = (id.Object as PhysicalMaterialRecord).Material;\r\n }\r\n\r\n set CurWallMtl(id)\r\n {\r\n if (id === this._CurWallMtl) return;\r\n this.WriteAllObjectRecord();\r\n this._CurWallMtl = id;\r\n\r\n if (this._db && this._db.IsDefaultDatabase)\r\n HostApplicationServices.DefaultWallMaterial = (id.Object as PhysicalMaterialRecord).Material;\r\n }\r\n set CurBoardMtl(id)\r\n {\r\n if (id === this._CurDrawMtl) return;\r\n this.WriteAllObjectRecord();\r\n this._CurDrawMtl = id;\r\n\r\n if (this._db && this._db.IsDefaultDatabase)\r\n HostApplicationServices.DefaultMeshMaterial = (id.Object as PhysicalMaterialRecord).Material;\r\n }\r\n\r\n set CurBulkCeilingFaceMaterial(id: ObjectId<PhysicalMaterialRecord>)\r\n {\r\n if (id === this._CurBulkCeilingFaceMaterial) return;\r\n this.WriteAllObjectRecord();\r\n this._CurBulkCeilingFaceMaterial = id;\r\n\r\n if (this._db && this._db.IsDefaultDatabase)\r\n HostApplicationServices.DefaultBulkheadCeilingMaterial = (id.Object as PhysicalMaterialRecord).Material;\r\n }\r\n\r\n get Materials()\r\n {\r\n return this.Symbols as Map<string, PhysicalMaterialRecord>;\r\n }\r\n\r\n Remove(record: PhysicalMaterialRecord)\r\n {\r\n this.WriteAllObjectRecord();\r\n record.Erase();\r\n return super.Remove(record);\r\n }\r\n\r\n GetAt(name: string): PhysicalMaterialRecord | undefined\r\n {\r\n return super.GetAt(name) as PhysicalMaterialRecord;\r\n }\r\n\r\n Has(name: string)\r\n {\r\n return super.Has(name);\r\n }\r\n\r\n AllocateName(name: string = \"材质\"): string\r\n {\r\n return super.AllocateName(name);\r\n }\r\n\r\n Destroy(): void\r\n {\r\n super.Destroy();\r\n this._CurDrawMtl = undefined;\r\n this._CurFloorMtl = undefined;\r\n this._CurWallMtl = undefined;\r\n }\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n override ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n\r\n if (this._FileVer > 2)\r\n {\r\n this._CurFloorMtl = file.ReadObjectId() as ObjectId<PhysicalMaterialRecord>;\r\n this._CurWallMtl = file.ReadObjectId() as ObjectId<PhysicalMaterialRecord>;\r\n }\r\n\r\n if (this._FileVer > 3)\r\n this._CurDrawMtl = file.ReadObjectId() as ObjectId<PhysicalMaterialRecord>;\r\n\r\n if (this._FileVer > 4)\r\n this._CurBulkCeilingFaceMaterial = file.ReadObjectId() as ObjectId<PhysicalMaterialRecord>;\r\n }\r\n\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n\r\n file.WriteObjectId(this._CurFloorMtl);\r\n file.WriteObjectId(this._CurWallMtl);\r\n file.WriteObjectId(this._CurDrawMtl);\r\n file.WriteObjectId(this._CurBulkCeilingFaceMaterial);\r\n }\r\n //#endregion\r\n}\r\n","import { MathUtils } from \"three\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { TextureTableRecord } from \"../Texture\";\r\nimport { SymbolTable } from \"./SymbolTable\";\r\n\r\n@Factory\r\nexport class TextureTable extends SymbolTable\r\n{\r\n AllocateName()\r\n {\r\n do\r\n {\r\n let name = MathUtils.generateUUID();\r\n if (!this.Has(name))\r\n return name;\r\n } while (true);\r\n }\r\n get Textures(): Map<string, TextureTableRecord>\r\n {\r\n return this.Symbols as Map<string, TextureTableRecord>;\r\n }\r\n}\r\n","import { Factory } from \"../CADFactory\";\r\nimport { ObjectCollection } from \"../ObjectCollection\";\r\nimport { TemplateRecord } from \"./TemplateRecord\";\r\nimport { Status } from \"../../Common/Status\";\r\n\r\n@Factory\r\nexport class TemplateTable extends ObjectCollection<TemplateRecord>\r\n{\r\n Append(object: TemplateRecord, isCheckObjectCleanly = true)\r\n {\r\n let id = super.Append(object, isCheckObjectCleanly);\r\n\r\n if (id)\r\n object.Owner = this.Id;\r\n\r\n return id;\r\n }\r\n\r\n Add(record: TemplateRecord, isCheckObjectCleanly = true): Status\r\n {\r\n let id = this.Append(record, isCheckObjectCleanly);\r\n if (id)\r\n return Status.True;\r\n else\r\n return Status.False;\r\n }\r\n}\r\n","import { MirroredRepeatWrapping, Texture, Wrapping } from 'three';\r\nimport { AutoRecord } from './AutoRecord';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { SymbolTableRecord } from './SymbolTableRecord';\r\n\r\nexport class TextureTableEventBus\r\n{\r\n private static _SingleInstance: TextureTableEventBus;\r\n static GetInstance(): TextureTableEventBus\r\n {\r\n if (this._SingleInstance) return this._SingleInstance;\r\n this._SingleInstance = new TextureTableEventBus;\r\n return this._SingleInstance;\r\n }\r\n\r\n UpdateEvent(texture: TextureTableRecord)\r\n {\r\n }\r\n}\r\n/**\r\n * 数据化的贴图类.实现了序列化.\r\n */\r\n@Factory\r\nexport class TextureTableRecord extends SymbolTableRecord\r\n{\r\n private wrapS: Wrapping = MirroredRepeatWrapping;//横向(水平)平铺\r\n private wrapT: Wrapping = MirroredRepeatWrapping;//竖向(垂直)平铺\r\n @AutoRecord repeatX: number = 1;//这里已经变成了贴图的尺寸了\r\n @AutoRecord repeatY: number = 1;\r\n @AutoRecord rotation: number = 0;//旋转 弧度deg\r\n @AutoRecord imageUrl: string = \"\";\r\n\r\n @AutoRecord moveX = 0;//材质位移\r\n @AutoRecord moveY = 0;\r\n\r\n @AutoRecord imgUrl: string = \"\";\r\n\r\n set WrapS(wrap: Wrapping)\r\n {\r\n if (wrap !== this.wrapS)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.wrapS = wrap;\r\n }\r\n }\r\n get WrapS() { return this.wrapS; };\r\n get WrapT() { return this.wrapT; };\r\n\r\n set WrapT(wrap: Wrapping)\r\n {\r\n if (wrap !== this.wrapT)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.wrapT = wrap;\r\n }\r\n }\r\n\r\n\r\n private texture: Texture = new Texture();\r\n async Update()\r\n {\r\n return \"\";\r\n }\r\n\r\n async TextureUpdate()\r\n {\r\n \r\n }\r\n\r\n private waits: Function[] = [];\r\n async WaitUpdate()\r\n {\r\n if (this.texture.image) return;\r\n let p = new Promise((res, rej) =>\r\n {\r\n this.waits.push(res);\r\n });\r\n return p;\r\n }\r\n GetThreeTexture()\r\n {\r\n return this.texture;\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = file.Read();\r\n this.wrapS = file.Read();\r\n this.wrapT = file.Read();\r\n this.repeatX = file.Read();\r\n this.repeatY = file.Read();\r\n this.rotation = file.Read();\r\n this.imageUrl = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this.moveX = file.Read();\r\n this.moveY = file.Read();\r\n }\r\n\r\n this.Update();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n\r\n file.Write(this.wrapS);\r\n file.Write(this.wrapT);\r\n file.Write(this.repeatX);\r\n file.Write(this.repeatY);\r\n file.Write(this.rotation);\r\n file.Write(this.imageUrl);\r\n\r\n file.Write(this.moveX);\r\n file.Write(this.moveY);\r\n }\r\n //#endregion\r\n}\r\n","import { DeepCloneFiler } from \"./DeepCloneFiler\";\r\nimport { ObjectId } from \"./ObjectId\";\r\n\r\nexport class WblockCloneFiler extends DeepCloneFiler\r\n{\r\n\r\n}\r\n\r\n/**\r\n * 用于插入图纸,对所有的软引用变成硬引用,以保证所有的关联对象都能被插入进来\r\n */\r\nexport class WblockCloneFiler2 extends DeepCloneFiler\r\n{\r\n WriteObjectId(id: ObjectId): this\r\n {\r\n if (id && id.Index >= 100 && !this.cloned.has(id.Index)) //当存在id时,表示对象正在被拷贝,或者已经拷贝完成\r\n this.hardObjectIds.add(id.Index);\r\n return super.WriteObjectId(id);\r\n }\r\n}\r\n","import { MirroredRepeatWrapping, Vector3 } from 'three';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { DuplicateRecordCloning } from '../Common/Status';\r\nimport { AlignLineGroupTable } from './AlignLine/AlignLineGroupTable';\r\nimport { BlockTableRecord } from './BlockTableRecord';\r\nimport { Factory } from './CADFactory';\r\nimport { CADFiler } from './CADFiler';\r\nimport { CADObject } from './CADObject';\r\nimport { CameraSnapshootRecord } from './CameraSnapshoot/CameraSnapshootRecord';\r\nimport { DeepCloneFiler } from './DeepCloneFiler';\r\nimport { DimStyleRecord } from './DimStyle/DimStyleRecord';\r\nimport { DimStyleTable } from './DimStyle/DimStyleTable';\r\nimport { Entity } from './Entity/Entity';\r\nimport { GroupTable } from './GroupTable';\r\nimport { HistoricManage } from './HistoricManage';\r\nimport { IdMaping } from './IdMaping';\r\nimport { LayerTableRecord } from './LayerTableRecord';\r\nimport { AmbientLight } from './Lights/AmbientLight';\r\nimport { DirectionalLight } from './Lights/DirectionalLight';\r\nimport { HemisphereLight } from './Lights/HemisphereLight';\r\nimport { Light } from './Lights/Light';\r\nimport { ObjectId, RelevancyType } from './ObjectId';\r\nimport { OwnerContainer } from './OwnerContainer';\r\nimport { PhysicalMaterialRecord } from './PhysicalMaterialRecord';\r\nimport { ProcessingGroupTable } from './ProcessingGroup/ProcessingGroupTable';\r\nimport { SymbolTableRecord } from './SymbolTableRecord';\r\nimport { BlockTable } from './Tables/BlockTable';\r\nimport { LayerNode, LayerTable } from './Tables/LayerTable';\r\nimport { MaterialTable } from './Tables/MaterialTable';\r\nimport { SymbolTable } from './Tables/SymbolTable';\r\nimport { TextureTable } from './Tables/TextureTable';\r\nimport { TemplateTable } from './Template/TemplateTable';\r\nimport { TextureTableRecord } from './Texture';\r\nimport { WblockCloneFiler } from './WblockCloneFiler';\r\n\r\n@Factory\r\nexport class Database\r\n{\r\n //历史记录(撤销重做)\r\n hm: HistoricManage;\r\n\r\n //各种表(材质 贴图 模块 编组 加工组)\r\n BlockTable: BlockTable;\r\n MaterialTable: MaterialTable;\r\n TextureTable: TextureTable;\r\n TemplateTable: TemplateTable;\r\n GroupTable: GroupTable;\r\n ProcessingGroupTable: ProcessingGroupTable;\r\n AlignLineGroupTable: AlignLineGroupTable;\r\n DimStyleTable: DimStyleTable;\r\n LayerTable: LayerTable;\r\n\r\n //模型空间(里面有模型空间的实体列表)\r\n ModelSpace: BlockTableRecord;\r\n //布局空间\r\n LayoutSpace: BlockTableRecord;\r\n //模型空间的灯光\r\n Lights: BlockTableRecord;\r\n\r\n //相机快照记录\r\n CameraSnapshoots: CameraSnapshootRecord[] = [];\r\n\r\n //固定灯源(天光 太阳光 环境光)\r\n AmbientLight: AmbientLight;\r\n SunLight: DirectionalLight;\r\n HemisphereLight: HemisphereLight;\r\n\r\n //默认图层 id=61\r\n DefaultLayer: LayerTableRecord;\r\n //默认材质 id=71\r\n DefaultMaterial: PhysicalMaterialRecord;\r\n\r\n /** 这是为UE设计器提供的拓展数据,WebCAD只负责保存,不使用它.\r\n * 在存储吊顶模块时,存储了材质槽信息\r\n */\r\n ExtendedData: any = null;\r\n\r\n private idIndex = 1;\r\n private idMap = new Map<number, ObjectId>();\r\n\r\n /**\r\n *\r\n * @param [buildDefaultDrawing=false] 构建默认对象(标注 图层 材质 灯光)\r\n * @param [IsDefaultDatabase=false] app图纸\r\n * @param [disableHistoric=false] 禁止命令记录(撤销重做)\r\n */\r\n constructor(buildDefaultDrawing = false, public IsDefaultDatabase = false, disableHistoric = false)\r\n {\r\n //注意:下面的注释是严格排序的,请不要随意插入某个表\r\n this.ModelSpace = new BlockTableRecord().SetOwnerDatabase(this);\r\n this.MaterialTable = new MaterialTable().SetOwnerDatabase(this);\r\n this.TextureTable = new TextureTable().SetOwnerDatabase(this);\r\n this.TemplateTable = new TemplateTable().SetOwnerDatabase(this);\r\n this.GroupTable = new GroupTable().SetOwnerDatabase(this);\r\n this.Lights = new BlockTableRecord().SetOwnerDatabase(this);\r\n this.ProcessingGroupTable = new ProcessingGroupTable().SetOwnerDatabase(this);\r\n this.hm = new HistoricManage().SetDefaultDb(this);\r\n this.hm.Enable = false;\r\n this.LayoutSpace = new BlockTableRecord().SetOwnerDatabase(this);\r\n this.DimStyleTable = new DimStyleTable().SetOwnerDatabase(this);\r\n this.AlignLineGroupTable = new AlignLineGroupTable().SetOwnerDatabase(this);\r\n //注意:新对象在这里添加\r\n this.LayerTable = new LayerTable().SetOwnerDatabase(this);\r\n\r\n if (IsDefaultDatabase)\r\n {\r\n if (HostApplicationServices.Database) console.error(\"重复初始化默认图纸\");\r\n\r\n HostApplicationServices.Database = this;\r\n }\r\n\r\n if (buildDefaultDrawing)\r\n {\r\n this.InitDimStyle();//60\r\n\r\n this.InitLayer(); //61;\r\n\r\n this.InitMaterial();//70\r\n\r\n this.InitLight();\r\n\r\n this.SettingDefaultStyleAndMaterial();\r\n }\r\n\r\n this.hm.Enable = !disableHistoric;\r\n\r\n //100以内的id是系统保留id,默认初始化内部对象.\r\n this.idIndex = 100;\r\n }\r\n\r\n private InitDimStyle()\r\n {\r\n this.idIndex = 60;\r\n\r\n let styleRd = new DimStyleRecord;\r\n styleRd.Name = \"默认\";\r\n\r\n this.DimStyleTable.Add(styleRd);\r\n\r\n this.DimStyleTable.Current = styleRd.Id;\r\n }\r\n\r\n private InitLayer()\r\n {\r\n this.idIndex = 61;\r\n\r\n let layerRd = new LayerTableRecord;\r\n layerRd.Name = \"默认\";\r\n\r\n this.LayerTable.Add(layerRd);\r\n\r\n this.LayerTable.Current = layerRd.Id;\r\n HostApplicationServices.CurrentLayer = layerRd.Id;\r\n\r\n const root = new LayerNode(\"根节点\");\r\n root.children = [new LayerNode(layerRd.Name)];\r\n this.LayerTable.Root = root;\r\n }\r\n\r\n private InitMaterial()\r\n {\r\n this.idIndex = 70;\r\n this.DefaultMaterial = new PhysicalMaterialRecord();\r\n this.DefaultMaterial.Name = \"默认\";\r\n let texture = new TextureTableRecord();\r\n texture.WrapS = MirroredRepeatWrapping;\r\n texture.WrapT = MirroredRepeatWrapping;\r\n texture.repeatX = 1;\r\n texture.repeatY = 1;\r\n this.TextureTable.Add(texture);\r\n this.DefaultMaterial.map = texture.Id;\r\n this.DefaultMaterial.roughnessMap = texture.Id;\r\n this.DefaultMaterial.bumpMap = texture.Id;\r\n\r\n this.MaterialTable.Add(this.DefaultMaterial);\r\n this.MaterialTable.CurBoardMtl = this.DefaultMaterial.Id;\r\n\r\n texture.Update();\r\n }\r\n\r\n private InitLight()\r\n {\r\n this.idIndex = 80;\r\n this.AmbientLight = new AmbientLight();\r\n this.SunLight = new DirectionalLight();\r\n this.SunLight.OCSNoClone.setPosition(4000, -4000, 4000);\r\n\r\n this.HemisphereLight = new HemisphereLight();\r\n this.SunLight.Visible = true;\r\n this.HemisphereLight.Visible = true;\r\n this.Lights.Add(this.AmbientLight);\r\n this.Lights.Add(this.SunLight);\r\n this.Lights.Add(this.HemisphereLight);\r\n }\r\n\r\n private SettingDefaultStyleAndMaterial()\r\n {\r\n if (!this.IsDefaultDatabase)\r\n return;\r\n\r\n this.DefaultMaterial = this.GetObjectId(71)?.Object as PhysicalMaterialRecord ?? this.DefaultMaterial;\r\n this.DefaultMaterial.Update();\r\n\r\n this.DefaultLayer = this.GetObjectId(61)?.Object as LayerTableRecord ?? this.DefaultLayer;\r\n\r\n HostApplicationServices.DefaultMeshMaterial = (this.MaterialTable.CurBoardMtl?.Object as PhysicalMaterialRecord)?.Material ?? this.DefaultMaterial.Material;\r\n HostApplicationServices.DefaultWallMaterial = (this.MaterialTable.CurWallMtl?.Object as PhysicalMaterialRecord)?.Material ?? this.DefaultMaterial.Material;\r\n HostApplicationServices.DefaultFloorMaterial = (this.MaterialTable.CurFloorMtl?.Object as PhysicalMaterialRecord)?.Material ?? this.DefaultMaterial.Material;\r\n HostApplicationServices.DefaultBulkheadCeilingMaterial = (this.MaterialTable.CurBulkCeilingFaceMaterial?.Object as PhysicalMaterialRecord)?.Material ?? this.DefaultMaterial.Material;\r\n\r\n HostApplicationServices.CurrentDimStyle = this.DimStyleTable.Current;\r\n HostApplicationServices.CurrentLayer = this.LayerTable.Current;\r\n }\r\n\r\n Destroy()\r\n {\r\n this.ExtendedData = null;\r\n\r\n this.idMap.clear();\r\n this.ModelSpace.Destroy();\r\n this.LayoutSpace.Destroy();\r\n this.MaterialTable.Destroy();\r\n this.TextureTable.Destroy();\r\n this.TemplateTable.Destroy();\r\n this.GroupTable.Destroy();\r\n this.Lights.Destroy();\r\n this.ProcessingGroupTable.Destroy();\r\n this.AlignLineGroupTable.Destroy();\r\n this.DimStyleTable.Destroy();\r\n this.LayerTable.Destroy();\r\n this.hm.Destroy();\r\n this.CameraSnapshoots.length = 0;\r\n this.hm.historyRecord.length = 0;\r\n\r\n //注意:下面的注释是严格排序的,请不要随意插入某个表\r\n this.idIndex = 1;\r\n this.ModelSpace.SetOwnerDatabase(this);\r\n this.MaterialTable.SetOwnerDatabase(this);\r\n this.TextureTable.SetOwnerDatabase(this);\r\n this.TemplateTable.SetOwnerDatabase(this);\r\n this.GroupTable.SetOwnerDatabase(this);\r\n this.Lights.SetOwnerDatabase(this);\r\n this.ProcessingGroupTable.SetOwnerDatabase(this);\r\n this.hm.SetDefaultDb(this);\r\n this.LayoutSpace.SetOwnerDatabase(this);\r\n this.DimStyleTable.SetOwnerDatabase(this);\r\n this.AlignLineGroupTable.SetOwnerDatabase(this);\r\n //注意:新对象在这里添加\r\n this.LayerTable.SetOwnerDatabase(this);\r\n this.idIndex = 100;\r\n }\r\n\r\n //#region Serialize\r\n\r\n FileWrite(file = new CADFiler): CADFiler\r\n {\r\n file.Write(13);//ver;\r\n file.Write(this.idIndex);\r\n\r\n this.LayerTable.WriteFile(file);\r\n\r\n this.ModelSpace.WriteFile(file);\r\n this.TextureTable.WriteFile(file);\r\n this.MaterialTable.WriteFile(file);\r\n this.hm.WriteFile(file);\r\n this.TemplateTable.WriteFile(file);\r\n this.GroupTable.WriteFile(file);\r\n this.Lights.WriteFile(file);\r\n this.ProcessingGroupTable.WriteFile(file);\r\n\r\n this.LayoutSpace.WriteFile(file);\r\n\r\n file.Write(this.CameraSnapshoots.length);\r\n for (let r of this.CameraSnapshoots)\r\n r.WriteFile(file);\r\n\r\n this.DimStyleTable.WriteFile(file);\r\n\r\n file.Write(this.ExtendedData);\r\n\r\n this.AlignLineGroupTable.WriteFile(file);\r\n return file;\r\n }\r\n\r\n FileRead(file: CADFiler)\r\n {\r\n Entity.__ReadFileIng__ = true;\r\n this.hm.doing = true;\r\n\r\n this.Destroy();\r\n file.database = this;\r\n let ver = file.Read();\r\n this.idIndex = file.Read();\r\n\r\n //图层\r\n if (ver > 12)\r\n this.LayerTable.ReadFile(file);\r\n else\r\n {\r\n let indexBak = this.idIndex;\r\n this.InitLayer();\r\n this.idIndex = indexBak;\r\n }\r\n\r\n this.ModelSpace.ReadFile(file);\r\n this.TextureTable.ReadFile(file);\r\n this.MaterialTable.ReadFile(file);\r\n this.hm.ReadFile(file);\r\n if (ver > 1)\r\n this.TemplateTable.ReadFile(file);\r\n if (ver > 2)\r\n this.GroupTable.ReadFile(file);\r\n if (ver > 3)\r\n {\r\n this.Lights.ReadFile(file);\r\n this.AmbientLight = this.Lights.Entitys[0] as AmbientLight ?? this.AmbientLight;\r\n this.SunLight = this.Lights.Entitys[1] as DirectionalLight ?? this.SunLight;\r\n this.HemisphereLight = this.Lights.Entitys[2] as HemisphereLight ?? this.HemisphereLight;\r\n }\r\n else\r\n {\r\n let index = this.idIndex;\r\n this.InitLight();\r\n this.idIndex = index;\r\n }\r\n\r\n if (ver > 4)\r\n this.ProcessingGroupTable.ReadFile(file);\r\n\r\n if (ver > 5)\r\n this.LayoutSpace.ReadFile(file);\r\n\r\n if (ver < 8)//旧版本数据错误 修复它\r\n {\r\n for (let e of this.LayoutSpace.Entitys)\r\n e.Owner = this.LayoutSpace.Id;\r\n }\r\n\r\n if (ver > 6)\r\n {\r\n let count = file.Read();\r\n this.CameraSnapshoots.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let r = new CameraSnapshootRecord;\r\n r.ReadFile(file);\r\n this.CameraSnapshoots.push(r);\r\n }\r\n }\r\n\r\n if (ver > 8)\r\n this.DimStyleTable.ReadFile(file);\r\n else\r\n {\r\n let indexBak = this.idIndex;\r\n this.InitDimStyle();\r\n this.idIndex = indexBak;\r\n }\r\n\r\n if (ver === 9)\r\n {\r\n for (let e of this.LayoutSpace.EntityCol.Objects)\r\n e.Owner = this.LayoutSpace.objectId;\r\n }\r\n\r\n if (ver > 10)\r\n this.ExtendedData = file.Read();\r\n\r\n if (ver > 11)\r\n this.AlignLineGroupTable.ReadFile(file);\r\n\r\n this.SettingDefaultStyleAndMaterial();\r\n\r\n this.hm.doing = false;\r\n Entity.__ReadFileIng__ = false;\r\n return this;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Clone\r\n\r\n /**\r\n * 单个数据库内克隆对象(objects),并将他们附加到指定的容器对象(owner).\r\n * @param objects 被克隆的对象\r\n * @param owner 克隆对象的容器\r\n * @param idMap id映射\r\n * @param deferXlation 指示是否应该进行ID转换\r\n * @returns 新克隆的对象列表\r\n */\r\n DeepCloneObjects(\r\n objects: CADObject[],\r\n owner: OwnerContainer,\r\n idMap: IdMaping = new Map(),\r\n deferXlation = false\r\n ): CADObject[]\r\n {\r\n let f = new DeepCloneFiler();\r\n let newObjects: CADObject[] = [];\r\n for (let e of objects)\r\n {\r\n let newE = e instanceof Light ? this.DeepCloneObject(f, e, this.Lights, idMap) : this.DeepCloneObject(f, e, owner, idMap); //灯光拷贝到Lights\r\n if (newE)\r\n newObjects.push(newE);\r\n }\r\n\r\n //对于无法新拷贝的实体,指向原先的对象(需要是软拷贝才行)\r\n for (let [index, objectId] of f.idMaping)\r\n {\r\n if (!objectId.Object && objectId._RelevancyType === RelevancyType.Soft)\r\n {\r\n let oldId = this.GetObjectId(index);\r\n if (oldId)\r\n {\r\n objectId.Index = index;\r\n objectId.Object = oldId.Object;\r\n }\r\n }\r\n }\r\n\r\n this.ClearEmptyAssoc(f);\r\n return newObjects;\r\n }\r\n\r\n /**\r\n * 清理拷贝后的实体空引用\r\n */\r\n private ClearEmptyAssoc(f: DeepCloneFiler)\r\n {\r\n let tempF = new CADFiler();\r\n tempF.database = this;\r\n for (let [index, objectId] of f.idMaping)\r\n {\r\n if (objectId.Object && objectId.Index !== index)\r\n {\r\n tempF.Clear();\r\n objectId.Object.WriteFile(tempF);\r\n tempF.Reset();\r\n if (objectId.Object instanceof Entity)\r\n objectId.Object.AutoUpdate = false;\r\n objectId.Object.ReadFile(tempF);\r\n if (objectId.Object instanceof Entity)\r\n objectId.Object.AutoUpdate = true;\r\n }\r\n }\r\n }\r\n\r\n DeepCloneObject(\r\n filer: DeepCloneFiler,\r\n object: CADObject,\r\n owner: OwnerContainer,\r\n idMap: IdMaping = new Map(),\r\n ): CADObject | undefined\r\n {\r\n if (idMap.has(object.Id))\r\n return idMap.get(object.Id).Object;\r\n\r\n if (owner instanceof SymbolTable)//应该不能直接拷贝这类型的实体,因为会直接名称重复\r\n return;\r\n\r\n filer.Data.length = 0;\r\n filer.Reset();\r\n filer.WriteObject(object);\r\n let newObject = filer.ReadObject();\r\n if (!(newObject instanceof Light) && newObject instanceof Entity)//Light类的对象不能拷贝绘制 否则出错\r\n newObject.CloneDrawObject(object as Entity);\r\n this.AllocationObjectId(newObject);\r\n owner.Add(newObject, false);\r\n idMap.set(object.Id, newObject.Id);\r\n\r\n //拷贝硬绑定对象\r\n while (filer.hardObjectIds.size > 0)\r\n {\r\n let hardObjectIds = filer.hardObjectIds;\r\n filer.hardObjectIds = new Set();\r\n for (let idIndex of hardObjectIds)\r\n {\r\n let objectId = this.GetObjectId(idIndex, false);\r\n let object = objectId?.Object;\r\n if (object === undefined)\r\n continue;//对象已经被删除\r\n if (!object.Owner)\r\n console.error(\"无主?\");\r\n if (object.Owner.Object instanceof SymbolTable)\r\n //当我们拷贝样式(图层,材质,标注样式,文字样式(这种以Name-Value对应的记录)时,由于名称不能重复,所以拷贝会失败,这时我们把它转换为软引用,我们就可以避免拷贝,并且保持引用正常)\r\n filer.idMaping.get(idIndex)._RelevancyType = RelevancyType.Soft;\r\n else\r\n this.DeepCloneObject(filer, object, object.Owner.Object as unknown as OwnerContainer, idMap);//指向新对象\r\n }\r\n }\r\n return newObject;\r\n }\r\n\r\n /**\r\n * 将来自不同数据库的对象列表拷贝到本数据库中.\r\n * 当前支持使用HardId模式来硬关联某个对象,使该对象能够在WblockClone时一起被带过来.\r\n * 当前不支持硬关联对象的Owner不是默认的容器.\r\n * 如果需要这么做,请将该对象的Owner设置为Hard关联\r\n * @param objects 对象不能属于本数据库\r\n * @param owner 克隆对象的新容器\r\n * @param idMap id映射\r\n */\r\n WblockCloneObejcts(\r\n objects: CADObject[],\r\n owner: OwnerContainer,\r\n idMap: IdMaping,\r\n drc: DuplicateRecordCloning,\r\n filer = new WblockCloneFiler\r\n ): CADObject[]\r\n {\r\n Entity.__ReadFileIng__ = true;\r\n\r\n for (let obj of objects)\r\n filer.cloned.add(obj.objectId.Index);\r\n\r\n for (let obj of objects)\r\n if (obj instanceof Light)\r\n this.WblockCloneObject(obj, this.Lights, idMap, drc, filer);\r\n else\r\n this.WblockCloneObject(obj, owner, idMap, drc, filer);\r\n\r\n this.ClearEmptyAssoc(filer);\r\n\r\n Entity.__ReadFileIng__ = false;\r\n return objects.map(o => idMap.get(o.Id).Object);\r\n }\r\n\r\n /**\r\n * 克隆引用对象 WriteHardObjectId\r\n */\r\n private WblockCloneReferenceObject(\r\n object: CADObject,\r\n f: WblockCloneFiler,\r\n idMap: Map<ObjectId, ObjectId>,\r\n drc: DuplicateRecordCloning)\r\n {\r\n let oldData = f.Data;\r\n f.Data = [];\r\n\r\n let oldDb = object.Db;\r\n let hardObjectIds = f.hardObjectIds;\r\n f.hardObjectIds = new Set();\r\n for (let idIndex of hardObjectIds)\r\n {\r\n let oldId = oldDb.GetObjectId(idIndex);\r\n if (!(oldId?.Object) || oldId.IsErase) continue;//对已经被删除的对象不进行拷贝\r\n //使用旧的OwnerId得到新的OwnerId,假设所有者都是数据库默认存在的.\r\n //TODO: 当OwnerId>100时,表示这个所有者不是数据库里面默认存在的,那么应该将Owner拷贝过来.\r\n let newOwnerId = this.GetObjectId(oldId.Object.Owner.Index); //owner.Db === this\r\n let newOwner = newOwnerId.Object as SymbolTable;\r\n this.WblockCloneObject(oldId.Object, newOwner, idMap, drc, f);\r\n }\r\n\r\n f.Data = oldData;\r\n }\r\n\r\n private WblockCloneObject(\r\n object: CADObject,\r\n owner: OwnerContainer,\r\n idMap: IdMaping,\r\n drc: DuplicateRecordCloning,\r\n filer: WblockCloneFiler\r\n )\r\n {\r\n //克隆的对象有可能被其他的对象依赖并且克隆完毕了.\r\n let cloneId = filer.idMaping.get(object.Id.Index);\r\n if (cloneId && cloneId.Object)\r\n return;\r\n\r\n filer.Data.length = 0;\r\n //表示该对象已经被拷贝了\r\n filer.cloned.add(object.Id.Index);\r\n if (owner instanceof SymbolTable)\r\n {\r\n let record = object as SymbolTableRecord;\r\n let name = record.Name;\r\n if (owner.Has(name))//名称重复\r\n {\r\n let status = drc;\r\n if (status === DuplicateRecordCloning.Rename)\r\n {\r\n //new name\r\n for (let i = 1; ; i++)\r\n {\r\n let nname = `${name}(${i})`;\r\n if (!owner.Has(nname))\r\n {\r\n name = nname;\r\n break;\r\n }\r\n }\r\n\r\n filer.WriteObject(record);\r\n this.WblockCloneReferenceObject(record, filer, idMap, drc);\r\n filer.Reset();\r\n let newRecord = filer.ReadObject() as SymbolTableRecord;\r\n newRecord.Owner = undefined;\r\n newRecord.Name = name;\r\n this.AllocationObjectId(newRecord);\r\n owner.Add(newRecord, false);\r\n idMap.set(object.Id, newRecord.Id);\r\n }\r\n else if (status === DuplicateRecordCloning.Replace)\r\n {\r\n let oldRecord = owner.GetAt(name);\r\n //将f的id映射设置为旧的id\r\n filer.idMaping.set(object.Id.Index, oldRecord.Id);\r\n\r\n record.WriteFile(filer);\r\n this.WblockCloneReferenceObject(record, filer, idMap, drc);\r\n filer.Reset();\r\n\r\n //此时重新读取的话,将会得到原先的id,实现id不变\r\n oldRecord.ReadFile(filer);\r\n oldRecord.Owner = owner.Id;\r\n idMap.set(object.Id, oldRecord.Id);\r\n }\r\n else if (status === DuplicateRecordCloning.Ignore)\r\n {\r\n let oldRecord = owner.GetAt(name);\r\n filer.idMaping.set(object.Id.Index, oldRecord.Id);\r\n idMap.set(object.Id, oldRecord.Id);\r\n }\r\n return;\r\n }\r\n }\r\n\r\n filer.WriteObject(object);\r\n this.WblockCloneReferenceObject(object, filer, idMap, drc);\r\n filer.Reset();\r\n let newObject = filer.ReadObject() as SymbolTableRecord;\r\n this.AllocationObjectId(newObject); //先给予Id,避免历史记录里面没有id\r\n if (owner === this.ModelSpace && newObject instanceof Entity)\r\n (<Entity><unknown>newObject).CloneDrawObject(object as Entity);\r\n owner.Add(newObject, false);\r\n idMap.set(object.Id, newObject.Id);\r\n }\r\n\r\n /**\r\n * 为拷贝出来的对象分配id索引,并在数据库中注册\r\n */\r\n private AllocationObjectId(object: CADObject)\r\n {\r\n object.Id.Index = this.idIndex++;\r\n this.idMap.set(object.Id.Index, object.Id);\r\n }\r\n\r\n Insert()\r\n {\r\n\r\n }\r\n\r\n /**\r\n * 写块\r\n * @param outputDatabase 输出到指定的数据库\r\n * @param objects\r\n * @param basePoint\r\n * @param cloning\r\n */\r\n Wblock(\r\n outputDataBase: Database,\r\n objects: CADObject[],\r\n basePoint: Vector3,\r\n cloning: any\r\n )\r\n {\r\n\r\n }\r\n\r\n //#endregion\r\n\r\n //#region IdManager\r\n\r\n //创建一个id,自动递增它的索引号,并且会自动加入到db的id列表中.\r\n AllocateId(): ObjectId\r\n {\r\n return this.GetObjectId(this.idIndex++, true);\r\n }\r\n\r\n GetObjectId(index: number, create = false): ObjectId\r\n {\r\n //id 从1开始,0被保留作为空id\r\n if (index === 0) return undefined;\r\n\r\n let id = this.idMap.get(index);\r\n if (!create || id) return id;\r\n\r\n id = new ObjectId(index);\r\n this.idMap.set(index, id);\r\n\r\n return id;\r\n }\r\n\r\n DeleteId(idIndex: number)\r\n {\r\n this.idMap.delete(idIndex);\r\n }\r\n\r\n //#endregion\r\n}\r\n","import { Face3, Geometry, Object3D, Vector3, Line } from \"three\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Entity } from \"./Entity/Entity\";\r\nimport { Factory } from \"./CADFactory\";\r\n\r\n@Factory\r\nexport class FaceEntity extends Entity\r\n{\r\n constructor(private p1: Vector3 = new Vector3(), private p2: Vector3 = new Vector3(), private p3: Vector3 = new Vector3(), private normal: Vector3 = new Vector3())\r\n {\r\n super();\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let g = new Geometry();\r\n\r\n g.vertices.push(this.p1, this.p2, this.p3);\r\n g.faces.push(new Face3(0, 1, 2));\r\n\r\n return new Line(g);\r\n }\r\n\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n this.p1.fromArray(file.Read());\r\n this.p2.fromArray(file.Read());\r\n this.p3.fromArray(file.Read());\r\n\r\n this.normal.fromArray(file.Read());\r\n\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.Write(this.p1.toArray());\r\n file.Write(this.p2.toArray());\r\n file.Write(this.p3.toArray());\r\n\r\n file.Write(this.normal.toArray());\r\n\r\n }\r\n //#endregion\r\n}\r\n","import { Group, Matrix4, Mesh, MeshPhysicalMaterial, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { PhysicalMaterialRecord } from \"../PhysicalMaterialRecord\";\r\nimport { Entity } from \"./Entity\";\r\n\r\n/**\r\n * 外部引用的实体,比如glTF\r\n */\r\n@Factory\r\nexport class EntityFbx extends Entity\r\n{\r\n OnlyRenderType = true;\r\n\r\n private _Size = new Vector3;//原始尺寸\r\n private _ScaleSize = new Vector3;//缩放后的尺寸\r\n private _Center = new Vector3;//盒子中心\r\n\r\n private _OverWriteMaterial = new Map<number, ObjectId<PhysicalMaterialRecord>>();//section index -> materialId\r\n\r\n constructor(private _url?: string)\r\n {\r\n super();\r\n }\r\n\r\n override get IsVisible()\r\n {\r\n return HostApplicationServices.IsRoomEntityVisible && super.IsVisible;\r\n }\r\n\r\n get Url() { return this._url; }\r\n set Url(url: string)\r\n {\r\n if (this._url !== url)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._url = url;\r\n }\r\n }\r\n\r\n get CurSize() { return this.ScaleSize.x ? this.ScaleSize.clone() : this._Size.clone(); }\r\n\r\n get ScaleSize() { return this._ScaleSize; }\r\n set ScaleSize(size: Vector3)\r\n {\r\n if (!equalv3(size, this.ScaleSize.x ? this.ScaleSize : this._Size))\r\n {\r\n this.WriteAllObjectRecord();\r\n if (this._ScaleSize.x && equalv3(size, this._Size))\r\n this._ScaleSize.set(0, 0, 0);\r\n else\r\n this._ScaleSize.copy(size);\r\n this.Update();\r\n }\r\n }\r\n\r\n get Scale()\r\n {\r\n if (this._ScaleSize.x && this._Size.x)\r\n return this._ScaleSize.clone().divide(this._Size);\r\n return new Vector3(1, 1, 1);\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n let box = new Box3Ext(\r\n this._Size.clone().multiplyScalar(-0.5).add(this._Center),\r\n this._Size.clone().multiplyScalar(0.5).add(this._Center));\r\n\r\n if (this._ScaleSize.x)\r\n {\r\n box.applyMatrix4(new Matrix4().makeScale(\r\n this._ScaleSize.x / this._Size.x,\r\n this._ScaleSize.y / this._Size.y,\r\n this._ScaleSize.z / this._Size.z,\r\n ));\r\n }\r\n return box;\r\n }\r\n get OverWriteMaterial()\r\n {\r\n return this._OverWriteMaterial;\r\n }\r\n\r\n IsMtlLockAtSlot(slotIndex: number)\r\n {\r\n if (this.LockMaterial)\r\n return true;\r\n\r\n const curMtl = this._OverWriteMaterial.get(slotIndex);\r\n if (curMtl?.Object?.IsMaterialLock)\r\n return true;\r\n return false;\r\n }\r\n\r\n SetMaterialAtSlot(mtl: ObjectId<PhysicalMaterialRecord>, slotIndex: number)\r\n {\r\n if (this.IsMtlLockAtSlot(slotIndex))\r\n return;\r\n\r\n if (this._OverWriteMaterial.get(slotIndex) !== mtl)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._OverWriteMaterial.set(slotIndex, mtl);\r\n this.Update(UpdateDraw.Material);\r\n }\r\n }\r\n\r\n SetAllMaterialAtSlot(mtl: ObjectId<PhysicalMaterialRecord>)\r\n {\r\n if (this.LockMaterial)\r\n return;\r\n this.DrawObject.traverse(o =>\r\n {\r\n if (o instanceof Mesh)\r\n {\r\n if (Array.isArray(o.material))\r\n {\r\n for (let i = 0; i < o.material.length; i++)\r\n {\r\n const curMtl = this._OverWriteMaterial.get(i);\r\n if (curMtl?.Object?.IsMaterialLock)\r\n continue;\r\n\r\n this.WriteAllObjectRecord();\r\n this._OverWriteMaterial.set(i, mtl);\r\n }\r\n }\r\n else\r\n {\r\n const curMtl = this._OverWriteMaterial.get(0);\r\n if (!curMtl?.Object?.IsMaterialLock)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._OverWriteMaterial.set(0, mtl);\r\n }\r\n }\r\n }\r\n });\r\n this.Update(UpdateDraw.Material);\r\n }\r\n\r\n GetMtlLockedStatus()\r\n {\r\n let partMtlLocked = false;\r\n let allMtlLocked = true;\r\n this.DrawObject.traverse(o =>\r\n {\r\n if (o instanceof Mesh)\r\n {\r\n if (Array.isArray(o.material))\r\n {\r\n for (let i = 0; i < o.material.length; i++)\r\n {\r\n const curMtl = this._OverWriteMaterial.get(i);\r\n if (curMtl?.Object?.IsMaterialLock)\r\n {\r\n partMtlLocked = true;\r\n continue;\r\n }\r\n allMtlLocked = false;\r\n }\r\n }\r\n else\r\n {\r\n allMtlLocked = false;\r\n const curMtl = this._OverWriteMaterial.get(0);\r\n if (curMtl?.Object?.IsMaterialLock)\r\n partMtlLocked = allMtlLocked = true;\r\n }\r\n }\r\n });\r\n return {\r\n allMtlLocked,\r\n partMtlLocked,\r\n };\r\n }\r\n\r\n private _GetValidOWMtlRecord(index: number): PhysicalMaterialRecord | undefined\r\n {\r\n const obj = this._OverWriteMaterial.get(index)?.Object;\r\n if (obj && !obj.IsErase)\r\n return obj;\r\n return undefined;\r\n }\r\n\r\n // 注意不含默认的fbx材质record\r\n GetPhyMtlRecords()\r\n {\r\n const materials: PhysicalMaterialRecord[] = [];\r\n this.DrawObject.traverse(o =>\r\n {\r\n if (o instanceof Mesh)\r\n {\r\n if (Array.isArray(o.material))\r\n {\r\n let allUseOW = true;\r\n for (let i = 0; i < o.material.length; i++)\r\n {\r\n const curMtl = this._GetValidOWMtlRecord(i);\r\n if (curMtl)\r\n materials.push(curMtl);\r\n else\r\n allUseOW = false;\r\n }\r\n }\r\n else\r\n {\r\n const curMtl = this._GetValidOWMtlRecord(0);\r\n if (curMtl)\r\n materials.push(curMtl);\r\n }\r\n }\r\n });\r\n\r\n return materials;\r\n }\r\n\r\n newObject: Group;\r\n\r\n //通过二进制数组生成fbx模型\r\n LoadFBXModelFromArrayBuffer(fbxArray: ArrayBuffer): string | undefined\r\n {\r\n return;\r\n }\r\n\r\n CloneDrawObject(from: this)\r\n {\r\n \r\n }\r\n ApplyScaleMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p = this.Position;\r\n p.applyMatrix4(m);\r\n\r\n m.extractBasis(Entity._xa, Entity._ya, Entity._za);\r\n\r\n let scaleX = Entity._xa.length();\r\n let scaleY = Entity._ya.length();\r\n let scaleZ = Entity._za.length();\r\n\r\n if (!this._ScaleSize.x) this._ScaleSize.copy(this._Size);\r\n\r\n this._ScaleSize.x *= scaleX;\r\n this._ScaleSize.y *= scaleY;\r\n this._ScaleSize.z *= scaleZ;\r\n\r\n Entity._xa.normalize();\r\n Entity._ya.normalize();\r\n Entity._za.normalize();\r\n m = new Matrix4().makeBasis(Entity._xa, Entity._ya, Entity._za);\r\n this.ApplyMatrix(m);\r\n\r\n this.Position = p;\r\n this.Update();\r\n return this;\r\n }\r\n\r\n private _GetValidOWMtl(index: number): MeshPhysicalMaterial | undefined\r\n {\r\n const obj = this._OverWriteMaterial.get(index)?.Object;\r\n const owMtl = !obj?.IsErase && obj?.Material;\r\n if (!owMtl) return;\r\n return owMtl;\r\n }\r\n\r\n \r\n\r\n MoveGripPoints(indexList: Array<number>, vec: Vector3)\r\n {\r\n if (indexList.length)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Position = this.Position.add(vec);\r\n }\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n this._url = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this._Size.x = file.Read();\r\n this._Size.y = file.Read();\r\n this._Size.z = file.Read();\r\n\r\n this._Center.x = file.Read();\r\n this._Center.y = file.Read();\r\n this._Center.z = file.Read();\r\n\r\n this._ScaleSize.x = file.Read();\r\n this._ScaleSize.y = file.Read();\r\n this._ScaleSize.z = file.Read();\r\n }\r\n\r\n this._OverWriteMaterial.clear();\r\n if (ver > 2)\r\n {\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let index = file.Read();\r\n let id = file.ReadHardObjectId() as ObjectId<PhysicalMaterialRecord>;\r\n if (id)\r\n this._OverWriteMaterial.set(index, id);\r\n }\r\n }\r\n\r\n if (ver > 3)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(4);\r\n super.WriteFile(file);\r\n file.Write(this._url);\r\n\r\n //2\r\n file.Write(this._Size.x);\r\n file.Write(this._Size.y);\r\n file.Write(this._Size.z);\r\n\r\n file.Write(this._Center.x);\r\n file.Write(this._Center.y);\r\n file.Write(this._Center.z);\r\n\r\n file.Write(this._ScaleSize.x);\r\n file.Write(this._ScaleSize.y);\r\n file.Write(this._ScaleSize.z);\r\n\r\n //ver3\r\n file.Write(this._OverWriteMaterial.size);\r\n for (let [index, id] of this._OverWriteMaterial)\r\n {\r\n file.Write(index);\r\n file.WriteHardObjectId(id);\r\n }\r\n\r\n // ver4\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n //#endregion\r\n}\r\n","import { Box3, Matrix3, Matrix4, Mesh, Vector3 } from \"three\";\r\nimport { BoxLine } from \"../../Add-on/testEntity/BoxLine\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { PhysicalMaterialRecord } from \"../PhysicalMaterialRecord\";\r\nimport { Entity } from \"./Entity\";\r\n\r\nconst TempBox = new Box3;\r\n\r\n/**\r\n * 外部引用的实体,比如glTF\r\n */\r\n@Factory\r\nexport class EntityRef extends Entity\r\n{\r\n OnlyRenderType = true;\r\n\r\n protected _Size = new Vector3;//原始尺寸\r\n protected _ScaleSize = new Vector3;//缩放后的尺寸\r\n protected _Center = new Vector3;//盒子中心\r\n\r\n protected _OverWriteMaterial = new Map<number, ObjectId<PhysicalMaterialRecord>>();//section index -> materialId\r\n\r\n // `/Data/ASSETS/DXAA_0001`\r\n constructor(protected _url?: string)\r\n {\r\n super();\r\n }\r\n\r\n override get IsVisible()\r\n {\r\n return HostApplicationServices.IsRoomEntityVisible && super.IsVisible;\r\n }\r\n\r\n get Url() { return this._url; }\r\n set Url(url: string)\r\n {\r\n if (this._url !== url)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._url = url;\r\n }\r\n }\r\n\r\n get CurSize() { return this.ScaleSize.x ? this.ScaleSize.clone() : this._Size.clone(); }\r\n\r\n get ScaleSize() { return this._ScaleSize; }\r\n set ScaleSize(size: Vector3)\r\n {\r\n if (!equalv3(size, this.ScaleSize.x ? this.ScaleSize : this._Size))\r\n {\r\n this.WriteAllObjectRecord();\r\n if (this._ScaleSize.x && equalv3(size, this._Size))\r\n this._ScaleSize.set(0, 0, 0);\r\n else\r\n this._ScaleSize.copy(size);\r\n this.Update();\r\n }\r\n }\r\n\r\n get Scale()\r\n {\r\n if (this._ScaleSize.x && this._Size.x)\r\n return this._ScaleSize.clone().divide(this._Size);\r\n return new Vector3(1, 1, 1);\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n let box = new Box3Ext(\r\n this._Size.clone().multiplyScalar(-0.5).add(this._Center),\r\n this._Size.clone().multiplyScalar(0.5).add(this._Center));\r\n\r\n if (this._ScaleSize.x)\r\n {\r\n box.applyMatrix4(new Matrix4().makeScale(\r\n this._ScaleSize.x / this._Size.x,\r\n this._ScaleSize.y / this._Size.y,\r\n this._ScaleSize.z / this._Size.z,\r\n ));\r\n }\r\n return box;\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\r\n let mesh1 = [];\r\n let mesh2 = [];\r\n obj.traverse(o =>\r\n {\r\n if (o instanceof Mesh)\r\n mesh1.push(o);\r\n });\r\n\r\n newObj.traverse(o =>\r\n {\r\n if (o instanceof Mesh)\r\n {\r\n if (Array.isArray(o.material))\r\n o.material = [...o.material];\r\n\r\n mesh2.push(o);\r\n }\r\n });\r\n\r\n for (let i = 0; i < mesh1.length; i++)\r\n {\r\n mesh2[i]['__old_material__'] = mesh1[i]['__old_material__'];\r\n }\r\n\r\n obj.userData = oldUserDaata;\r\n // obj.userData.IsClone = true;//因为这个实体不需要修改内部的geom 所以我们可以复用她\r\n\r\n newObj.matrix = this._Matrix;\r\n newObj.userData = { Entity: this };\r\n // newObj.userData.IsClone = true; //因为这个实体不需要修改内部的geom 所以我们可以复用她\r\n this._CacheDrawObject.set(type, newObj);\r\n }\r\n this.NeedUpdateFlag = UpdateDraw.None;\r\n }\r\n\r\n ApplyScaleMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p = this.Position;\r\n p.applyMatrix4(m);\r\n\r\n m.extractBasis(Entity._xa, Entity._ya, Entity._za);\r\n\r\n let scaleX = Entity._xa.length();\r\n let scaleY = Entity._ya.length();\r\n let scaleZ = Entity._za.length();\r\n\r\n if (!this._ScaleSize.x) this._ScaleSize.copy(this._Size);\r\n\r\n this._ScaleSize.x *= scaleX;\r\n this._ScaleSize.y *= scaleY;\r\n this._ScaleSize.z *= scaleZ;\r\n\r\n Entity._xa.normalize();\r\n Entity._ya.normalize();\r\n Entity._za.normalize();\r\n m = new Matrix4().makeBasis(Entity._xa, Entity._ya, Entity._za);\r\n this.ApplyMatrix(m);\r\n\r\n this.Position = p;\r\n this.Update();\r\n return this;\r\n }\r\n\r\n get OverWriteMaterial()\r\n {\r\n return this._OverWriteMaterial;\r\n }\r\n\r\n IsMtlLockAtSlot(slotIndex: number)\r\n {\r\n if (this.LockMaterial)\r\n return true;\r\n\r\n const curMtl = this._OverWriteMaterial.get(slotIndex);\r\n if (curMtl?.Object?.IsMaterialLock)\r\n return true;\r\n return false;\r\n }\r\n\r\n SetMaterialAtSlot(mtl: ObjectId<PhysicalMaterialRecord>, slotIndex: number)\r\n {\r\n if (this.IsMtlLockAtSlot(slotIndex))\r\n return;\r\n\r\n if (this._OverWriteMaterial.get(slotIndex) !== mtl)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._OverWriteMaterial.set(slotIndex, mtl);\r\n this.Update(UpdateDraw.Material);\r\n }\r\n }\r\n\r\n SetAllMaterialAtSlot(mtl: ObjectId<PhysicalMaterialRecord>)\r\n {\r\n if (this.LockMaterial)\r\n return;\r\n this.DrawObject.traverse(o =>\r\n {\r\n if (o instanceof Mesh)\r\n {\r\n if (Array.isArray(o.material))\r\n {\r\n for (let i = 0; i < o.material.length; i++)\r\n {\r\n const curMtl = this._OverWriteMaterial.get(i);\r\n if (curMtl?.Object?.IsMaterialLock)\r\n continue;\r\n\r\n this.WriteAllObjectRecord();\r\n this._OverWriteMaterial.set(i, mtl);\r\n }\r\n }\r\n else\r\n {\r\n const curMtl = this._OverWriteMaterial.get(0);\r\n if (!curMtl?.Object?.IsMaterialLock)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._OverWriteMaterial.set(0, mtl);\r\n }\r\n }\r\n }\r\n });\r\n this.Update(UpdateDraw.Material);\r\n }\r\n\r\n GetMtlLockedStatus()\r\n {\r\n let partMtlLocked = false;\r\n let allMtlLocked = true;\r\n this.DrawObject.traverse(o =>\r\n {\r\n if (o instanceof Mesh)\r\n {\r\n if (Array.isArray(o.material))\r\n {\r\n for (let i = 0; i < o.material.length; i++)\r\n {\r\n const curMtl = this._OverWriteMaterial.get(i);\r\n if (curMtl?.Object?.IsMaterialLock)\r\n {\r\n partMtlLocked = true;\r\n continue;\r\n }\r\n allMtlLocked = false;\r\n }\r\n }\r\n else\r\n {\r\n allMtlLocked = false;\r\n const curMtl = this._OverWriteMaterial.get(0);\r\n if (curMtl?.Object?.IsMaterialLock)\r\n partMtlLocked = allMtlLocked = true;\r\n }\r\n }\r\n });\r\n return {\r\n partMtlLocked,\r\n allMtlLocked,\r\n };\r\n }\r\n\r\n private _GetValidOWMtlRecord(index: number): PhysicalMaterialRecord | undefined\r\n {\r\n const obj = this._OverWriteMaterial.get(index)?.Object;\r\n if (obj && !obj.IsErase)\r\n return obj;\r\n return undefined;\r\n }\r\n\r\n GetPhyMtlRecords()\r\n {\r\n const materials: PhysicalMaterialRecord[] = [];\r\n this.DrawObject.traverse(o =>\r\n {\r\n if (o instanceof Mesh)\r\n {\r\n if (Array.isArray(o.material))\r\n {\r\n for (let i = 0; i < o.material.length; i++)\r\n {\r\n const curMtl = this._GetValidOWMtlRecord(i);\r\n if (curMtl)\r\n materials.push(curMtl);\r\n }\r\n }\r\n else\r\n {\r\n const curMtl = this._GetValidOWMtlRecord(0);\r\n if (curMtl)\r\n materials.push(curMtl);\r\n }\r\n }\r\n });\r\n return materials;\r\n }\r\n\r\n \r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform: Matrix3\r\n ): Vector3[]\r\n {\r\n let box = this.BoundingBox;\r\n let [x1, y1, z1] = [box.min.x, box.min.y, box.min.z];\r\n let [x2, y2, z2] = [box.max.x, box.max.y, box.max.z];\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n case ObjectSnapMode.Mid:\r\n let mid = [\r\n new Vector3(x1, y1, (z1 + z2) / 2),\r\n new Vector3(x1, y2, (z1 + z2) / 2),\r\n new Vector3(x2, y2, (z1 + z2) / 2),\r\n new Vector3(x2, y1, (z1 + z2) / 2),\r\n ];\r\n let midline = [\r\n new Vector3(x1, (y1 + y2) / 2, z1),\r\n new Vector3(x2, (y1 + y2) / 2, z1),\r\n new Vector3((x1 + x2) / 2, y2, z1),\r\n new Vector3((x1 + x2) / 2, y1, z1),\r\n ];\r\n let v = new Vector3(0, 0, z2);\r\n let mids: Vector3[] = [];\r\n mids.push(...mid, ...midline, ...midline.map(p => p.clone().add(v)));\r\n return mids;\r\n case ObjectSnapMode.Nea:\r\n let lines = BoxLine(this.BoundingBox);\r\n let neas: Vector3[] = [];\r\n for (let l of lines)\r\n neas.push(...l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform));\r\n return neas;\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array<Vector3>\r\n {\r\n return [];//这些点必须按照boxInOcs矩阵显示 并且这个点太多了 太烦了 暂时关闭\r\n let box = this.BoundingBox;\r\n let [x1, y1, z1] = [box.min.x, box.min.y, box.min.z];\r\n let [x2, y2, z2] = [box.max.x, box.max.y, box.max.z];\r\n let ends = [\r\n new Vector3(x1, y1, z1),\r\n new Vector3(x1, y1, z2),\r\n new Vector3(x1, y2, z1),\r\n new Vector3(x1, y2, z2),\r\n\r\n new Vector3(x2, y1, z1),\r\n new Vector3(x2, y1, z2),\r\n new Vector3(x2, y2, z1),\r\n new Vector3(x2, y2, z2),\r\n\r\n new Vector3((x1 + x2) / 2, (y1 + y2) / 2, z1),\r\n new Vector3((x1 + x2) / 2, (y1 + y2) / 2, z2),\r\n new Vector3((x1 + x2) / 2, y1, (z1 + z2) / 2),\r\n new Vector3((x1 + x2) / 2, y2, (z1 + z2) / 2),\r\n new Vector3(x1, (y1 + y2) / 2, (z1 + z2) / 2),\r\n new Vector3(x2, (y1 + y2) / 2, (z1 + z2) / 2),\r\n ];\r\n return ends;\r\n }\r\n MoveGripPoints(indexList: Array<number>, vec: Vector3)\r\n {\r\n if (indexList.length)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Position = this.Position.add(vec);\r\n }\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n this._url = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this._Size.x = file.Read();\r\n this._Size.y = file.Read();\r\n this._Size.z = file.Read();\r\n\r\n this._Center.x = file.Read();\r\n this._Center.y = file.Read();\r\n this._Center.z = file.Read();\r\n\r\n this._ScaleSize.x = file.Read();\r\n this._ScaleSize.y = file.Read();\r\n this._ScaleSize.z = file.Read();\r\n }\r\n\r\n this._OverWriteMaterial.clear();\r\n if (ver > 2)\r\n {\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let index = file.Read();\r\n let id = file.ReadHardObjectId() as ObjectId<PhysicalMaterialRecord>;\r\n if (id)\r\n this._OverWriteMaterial.set(index, id);\r\n }\r\n }\r\n\r\n if (ver > 3)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(4);\r\n super.WriteFile(file);\r\n file.Write(this._url);\r\n\r\n //2\r\n file.Write(this._Size.x);\r\n file.Write(this._Size.y);\r\n file.Write(this._Size.z);\r\n\r\n file.Write(this._Center.x);\r\n file.Write(this._Center.y);\r\n file.Write(this._Center.z);\r\n\r\n file.Write(this._ScaleSize.x);\r\n file.Write(this._ScaleSize.y);\r\n file.Write(this._ScaleSize.z);\r\n\r\n //ver3\r\n file.Write(this._OverWriteMaterial.size);\r\n for (let [index, id] of this._OverWriteMaterial)\r\n {\r\n file.Write(index);\r\n file.WriteHardObjectId(id);\r\n }\r\n\r\n // ver4\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n //#endregion\r\n}\r\n","import { Color } from \"three\";\r\nimport { PhysicalMaterialRecord } from \"./PhysicalMaterialRecord\";\r\n\r\n// export enum MaterialType\r\n// {\r\n// 木纹 = \"木纹\",\r\n\r\n// 乳胶漆 = \"乳胶漆\",\r\n// 烤漆 = \"烤漆\",\r\n\r\n// 金属 = \"金属\",\r\n// 亚光金属 = \"亚光金属\",\r\n\r\n// 自发光 = \"自发光\",\r\n\r\n// 大理石 = \"大理石\",\r\n// 混凝土 = \"混凝土\",\r\n// 粗糙石材 = \"粗糙石材\",\r\n\r\n// 玻璃 = \"玻璃\",\r\n// 皮革 = \"皮革\",\r\n// 布料 = \"布料\",\r\n// 竹藤编织 = \"竹藤编织\",\r\n// }\r\n\r\n//默认参数\r\nconst DefaultParam = Object.freeze({\r\n //基础色\r\n color: \"#ffffff\",\r\n //#region 基础色附加\r\n baseColorluminance: 0,//基础色亮度 默认0 范围±1\r\n baseColorLightColor: new Color(0.5, 0.5, 0.5),//基础色_亮部颜色 默认0.5灰色 范围RGB颜色\r\n baseColorDarkColor: new Color(0, 0, 0),//基础色_暗部颜色 默认 0黑色 范围RGB颜色\r\n baseColorSaturability: 1,//基础色饱和度 默认1 范围0-10;\r\n //#endregion\r\n\r\n //透明\r\n transparent: false, //透明度 0-,\r\n opacity: 1,//不透明度,\r\n //#region 透明度附加 默认折叠\r\n opacityContrast: 1, //不透明度对比 默认1\r\n opacityBorder: 1, //不透明度边界 默认1\r\n opacityMaximum: 1, //不透明度最大值 默认1\r\n opacityMinimum: 0.3, // 不透明度最小值 默认0.3\r\n //#endregion\r\n\r\n matalness: 0,//金属性 0-,\r\n bumpScale: 0.1,//凹凸比(法线强度)\r\n roughness: 0.2, //粗糙,\r\n specular: 1, //高,\r\n\r\n selfLuminous: 0,//自发光强度\r\n\r\n //#region 菲涅尔\r\n fresnelPO: 1,//菲涅尔对比度 默认1 范围-1至10\r\n fresnelST: 1,//菲涅尔强度 默认1 范围0至20\r\n fresnelLuminance: 1,//菲涅尔亮度 默认1 范围0至20\r\n fresnelLightColor: new Color(1, 1, 1),//菲涅尔亮部颜色 默认白色 范围RGB\r\n fresnelDarkColor: new Color(1, 1, 1),//菲涅尔暗部颜色 默认白色 范围RGB\r\n //#endregion\r\n\r\n UVType: 0,//坐标 世界坐标或UV坐标\r\n\r\n sharpen: 1,//锐化 默认1 范围0-20 默认折叠\r\n});\r\n\r\ntype MaterialParam = typeof DefaultParam;\r\n\r\n//默认材质参数映射\r\nexport const DefaultParamMap = Object.freeze({\r\n 木纹: Object.freeze(Object.assign({ ...DefaultParam }, {\r\n //基础色\r\n color: \"#ffffff\",\r\n //#region 基础色附加\r\n baseColorluminance: 0,//基础色亮度 默认0 范围±1\r\n baseColorLightColor: new Color(1, 1, 1),//基础色_亮部颜色 默认1白色 范围RGB颜色\r\n baseColorDarkColor: new Color(0, 0, 0),//基础色_暗部颜色 默认 0黑色 范围RGB颜色\r\n baseColorSaturability: 1,//基础色饱和度 默认1 范围0-10;\r\n //#endregion\r\n\r\n specular: 1, //高光,\r\n matalness: 0,//金属性 0-,\r\n roughness: 0.5, //粗糙,\r\n bumpScale: 0.5,//凹凸比(法线强度)\r\n sharpen: 1,//锐化 默认1 范围0-20 默认折叠\r\n selfLuminous: 0,//自发光强度\r\n\r\n UVType: 0,//默认UV坐标\r\n })) as MaterialParam,\r\n\r\n 乳胶漆: Object.freeze(Object.assign({ ...DefaultParam }, {\r\n //基础色\r\n color: \"#ffffff\",\r\n //#region 基础色附加\r\n baseColorluminance: 0,//基础色亮度 默认0 范围±1\r\n baseColorLightColor: new Color(0.5, 0.5, 0.5),//基础色_亮部颜色 默认0.5灰色 范围RGB颜色\r\n baseColorDarkColor: new Color(0, 0, 0),//基础色_暗部颜色 默认 0黑色 范围RGB颜色\r\n baseColorSaturability: 1,//基础色饱和度 默认1 范围0-10;\r\n //#endregion\r\n\r\n specular: 1, //高光,\r\n matalness: 0,//金属性 0-,\r\n roughness: 0.5, //粗糙,\r\n bumpScale: 0,//凹凸比(法线强度)\r\n sharpen: 1,//锐化 默认1 范围0-20 默认折叠\r\n selfLuminous: 0,//自发光强度\r\n\r\n UVType: 1,//默认世界坐标\r\n })) as MaterialParam,\r\n\r\n 烤漆: Object.freeze(Object.assign({ ...DefaultParam }, {\r\n //基础色\r\n color: \"#ffffff\",\r\n //#region 基础色附加\r\n baseColorluminance: 0,//基础色亮度 默认0 范围±1\r\n baseColorLightColor: new Color(0.04, 0.04, 0.04),//基础色_亮部颜色 默认0.5灰色 范围RGB颜色\r\n baseColorDarkColor: new Color(0, 0, 0),//基础色_暗部颜色 默认 0黑色 范围RGB颜色\r\n baseColorSaturability: 1,//基础色饱和度 默认1 范围0-10;\r\n //#endregion\r\n\r\n specular: 1, //高光,\r\n matalness: 0,//金属性 0-,\r\n roughness: 0.1, //粗糙,\r\n bumpScale: 0,//凹凸比(法线强度)\r\n sharpen: 1,//锐化 默认1 范围0-20 默认折叠\r\n selfLuminous: 0,//自发光强度\r\n\r\n UVType: 1,//默认世界坐标\r\n })) as MaterialParam,\r\n\r\n 金属: Object.freeze(Object.assign({ ...DefaultParam }, {\r\n //基础色\r\n color: \"#ffffff\",\r\n //#region 基础色附加\r\n baseColorluminance: 0,//基础色亮度 默认0 范围±1\r\n baseColorLightColor: new Color(1, 1, 1),//基础色_亮部颜色 默认0.5灰色 范围RGB颜色\r\n baseColorDarkColor: new Color(0, 0, 0),//基础色_暗部颜色 默认 0黑色 范围RGB颜色\r\n baseColorSaturability: 1,//基础色饱和度 默认1 范围0-10;\r\n //#endregion\r\n\r\n specular: 1, //高光,\r\n matalness: 1,//金属性 0-,\r\n roughness: 0, //粗糙,\r\n bumpScale: 0,//凹凸比(法线强度)\r\n sharpen: 1,//锐化 默认1 范围0-20 默认折叠\r\n selfLuminous: 0,//自发光强度\r\n\r\n UVType: 1,//默认世界坐标\r\n })) as MaterialParam,\r\n\r\n 亚光金属: Object.freeze(Object.assign({ ...DefaultParam }, {\r\n //基础色\r\n color: \"#ffffff\",\r\n //#region 基础色附加\r\n baseColorluminance: 0,//基础色亮度 默认0 范围±1\r\n baseColorLightColor: new Color(1, 1, 1),//基础色_亮部颜色 默认0.5灰色 范围RGB颜色\r\n baseColorDarkColor: new Color(0, 0, 0),//基础色_暗部颜色 默认 0黑色 范围RGB颜色\r\n baseColorSaturability: 1,//基础色饱和度 默认1 范围0-10;\r\n //#endregion\r\n\r\n specular: 1, //高光,\r\n matalness: 1,//金属性 0-,\r\n roughness: 0.2, //粗糙,\r\n bumpScale: 0,//凹凸比(法线强度)\r\n sharpen: 1,//锐化 默认1 范围0-20 默认折叠\r\n selfLuminous: 0,//自发光强度\r\n\r\n UVType: 1,//默认世界坐标\r\n })) as MaterialParam,\r\n\r\n 自发光: Object.freeze(Object.assign({ ...DefaultParam }, {\r\n //#region 基础色附加\r\n baseColorluminance: 0,//基础色亮度 默认0 范围±1\r\n baseColorLightColor: new Color(1, 1, 1),//基础色_亮部颜色 默认1白色 范围RGB颜色\r\n baseColorDarkColor: new Color(0, 0, 0),//基础色_暗部颜色 默认 0黑色 范围RGB颜色\r\n baseColorSaturability: 1,//基础色饱和度 默认1 范围0-10;\r\n //#endregion\r\n\r\n specular: 1, //高光 默认1 范围0-1\r\n matalness: 0,//金属性 默认0 范围0-1\r\n roughness: 0, //粗糙度 默认0 范围0-1\r\n bumpScale: 0,//法线强度 默认0 范围0-20\r\n sharpen: 1,//锐化强度 默认1 范围0-20\r\n selfLuminous: 10,//自发光亮度 默认10 范围0-200\r\n\r\n UVType: 1,//默认世界坐标\r\n })) as MaterialParam,\r\n\r\n 大理石: Object.freeze(Object.assign({ ...DefaultParam }, {\r\n //#region 基础色附加\r\n baseColorluminance: 0,//基础色亮度 默认0 范围±1\r\n baseColorLightColor: new Color(1, 1, 1),//基础色_亮部颜色 默认1白色 范围RGB颜色\r\n baseColorDarkColor: new Color(0, 0, 0),//基础色_暗部颜色 默认 0黑色 范围RGB颜色\r\n baseColorSaturability: 1,//基础色饱和度 默认1 范围0-10;\r\n //#endregion\r\n\r\n specular: 1, //高光 默认1 范围0-1\r\n matalness: 0,//金属性 默认0 范围0-1\r\n roughness: 0, //粗糙度 默认0 范围0-1\r\n bumpScale: 0,//法线强度 默认0 范围0-20\r\n sharpen: 1,//锐化强度 默认1 范围0-20\r\n selfLuminous: 0,//自发光亮度 默认0 范围0-200\r\n\r\n UVType: 1,//默认世界坐标\r\n })) as MaterialParam,\r\n\r\n 混凝土: Object.freeze(Object.assign({ ...DefaultParam }, {\r\n //#region 基础色附加\r\n baseColorluminance: 0,//基础色亮度 默认0 范围±1\r\n baseColorLightColor: new Color(1, 1, 1),//基础色_亮部颜色 默认1白色 范围RGB颜色\r\n baseColorDarkColor: new Color(0, 0, 0),//基础色_暗部颜色 默认 0黑色 范围RGB颜色\r\n baseColorSaturability: 1,//基础色饱和度 默认1 范围0-10;\r\n //#endregion\r\n\r\n specular: 0.5, //高光 默认0.5 范围0-1\r\n matalness: 0,//金属性 默认0 范围0-1\r\n roughness: 1, //粗糙度 默认1 范围0-1\r\n bumpScale: 10,//法线强度 默认10 范围0-20\r\n sharpen: 1,//锐化强度 默认1 范围0-20\r\n selfLuminous: 0,//自发光亮度 默认0 范围0-200\r\n\r\n UVType: 1,//默认世界坐标\r\n })) as MaterialParam,\r\n\r\n 粗糙石材: Object.freeze(Object.assign({ ...DefaultParam }, {\r\n //#region 基础色附加\r\n baseColorluminance: 0,//基础色亮度 默认0 范围±1\r\n baseColorLightColor: new Color(1, 1, 1),//基础色_亮部颜色 默认1白色 范围RGB颜色\r\n baseColorDarkColor: new Color(0, 0, 0),//基础色_暗部颜色 默认 0黑色 范围RGB颜色\r\n baseColorSaturability: 1,//基础色饱和度 默认1 范围0-10;\r\n //#endregion\r\n\r\n specular: 0.5, //高光 默认0.5 范围0-1\r\n matalness: 0,//金属性 默认0 范围0-1\r\n roughness: 1, //粗糙度 默认1 范围0-1\r\n bumpScale: 5,//法线强度 默认5 范围0-20\r\n sharpen: 1,//锐化强度 默认1 范围0-20\r\n selfLuminous: 0,//自发光亮度 默认0 范围0-200\r\n\r\n UVType: 1,//默认世界坐标\r\n })) as MaterialParam,\r\n\r\n 玻璃: Object.freeze(Object.assign({ ...DefaultParam }, {\r\n //#region 基础色附加\r\n baseColorluminance: 0,//基础色亮度 默认0 范围±1\r\n baseColorLightColor: new Color(1, 1, 1),//基础色_亮部颜色 默认 1白色 范围RGB颜色\r\n baseColorDarkColor: new Color(0, 0, 0),//基础色_暗部颜色 默认 0黑色 范围RGB颜色\r\n baseColorSaturability: 1,//基础色饱和度 默认1 范围0-10;\r\n //#endregion\r\n\r\n specular: 1, //高光 范围0-1\r\n matalness: 1,//金属性 范围0-1\r\n roughness: 0, //粗糙 范围0-1\r\n bumpScale: 0,//凹凸比(法线强度) 范围0-20\r\n sharpen: 1,//锐化 默认1 范围0-20\r\n selfLuminous: 0,//自发光强度 范围0-200\r\n\r\n //#region 透明度附加 默认折叠\r\n opacity: 0.6,\r\n opacityContrast: 1, //不透明度对比 默认1\r\n opacityBorder: 1, //不透明度边界 默认1\r\n opacityMaximum: 1, //不透明度最大值 默认1\r\n opacityMinimum: 0.3, // 不透明度最小值 默认0.3\r\n //#endregion\r\n\r\n UVType: 1,//默认世界坐标\r\n })) as MaterialParam,\r\n\r\n 皮革: Object.freeze(Object.assign({ ...DefaultParam }, {\r\n //#region 基础色附加\r\n baseColorluminance: 0,//基础色亮度 默认0 范围±1\r\n baseColorLightColor: new Color(1, 1, 1),//基础色_亮部颜色 默认 1白色 范围RGB颜色\r\n baseColorDarkColor: new Color(0, 0, 0),//基础色_暗部颜色 默认 0黑色 范围RGB颜色\r\n baseColorSaturability: 1,//基础色饱和度 默认1 范围0-10;\r\n //#endregion\r\n\r\n specular: 1, //高光 范围0-1\r\n matalness: 0.1,//金属性 范围0-1\r\n roughness: 0.5, //粗糙 范围0-1\r\n bumpScale: 1,//凹凸比(法线强度) 范围0-20\r\n sharpen: 1,//锐化 默认1 范围0-20\r\n selfLuminous: 0,//自发光强度 范围0-200\r\n\r\n //#region 菲涅尔\r\n fresnelPO: 1,//菲涅尔对比度 默认1 范围-1至10\r\n fresnelST: 1,//菲涅尔强度 默认1 范围0至20\r\n fresnelLuminance: 1,//菲涅尔亮度 默认1 范围0至20\r\n fresnelLightColor: new Color(1, 1, 1),//菲涅尔亮部颜色 默认白色 范围RGB\r\n fresnelDarkColor: new Color(1, 1, 1),//菲涅尔暗部颜色 默认白色 范围RGB\r\n //#endregion\r\n\r\n UVType: 1,//默认世界坐标\r\n })) as MaterialParam,\r\n\r\n 布料: Object.freeze(Object.assign({ ...DefaultParam }, {\r\n //#region 基础色附加\r\n baseColorluminance: 0,//基础色亮度 默认0 范围±1\r\n baseColorLightColor: new Color(1, 1, 1),//基础色_亮部颜色 默认 1白色 范围RGB颜色\r\n baseColorDarkColor: new Color(0, 0, 0),//基础色_暗部颜色 默认 0黑色 范围RGB颜色\r\n baseColorSaturability: 1,//基础色饱和度 默认1 范围0-10;\r\n //#endregion\r\n\r\n specular: 1, //高光 范围0-1\r\n matalness: 0,//金属性 范围0-1\r\n roughness: 0.5, //粗糙 范围0-1\r\n bumpScale: 1,//凹凸比(法线强度) 范围0-20\r\n sharpen: 1,//锐化 默认1 范围0-20\r\n selfLuminous: 0,//自发光强度 范围0-200\r\n\r\n //#region 菲涅尔\r\n fresnelPO: 1,//菲涅尔对比度 默认1 范围-1至10\r\n fresnelST: 1,//菲涅尔强度 默认1 范围0至20\r\n fresnelLuminance: 1,//菲涅尔亮度 默认1 范围0至20\r\n fresnelLightColor: new Color(1, 1, 1),//菲涅尔亮部颜色 默认白色 范围RGB\r\n fresnelDarkColor: new Color(0.5, 0.5, 0.5),//菲涅尔暗部颜色 默认灰色 范围RGB\r\n //#endregion\r\n\r\n UVType: 1,//默认世界坐标\r\n })) as MaterialParam,\r\n\r\n 竹藤编织: Object.freeze(Object.assign({ ...DefaultParam }, {\r\n //#region 基础色附加\r\n baseColorluminance: 0,//基础色亮度 默认0 范围±1\r\n baseColorLightColor: new Color(1, 1, 1),//基础色_亮部颜色 默认 1白色 范围RGB颜色\r\n baseColorDarkColor: new Color(0, 0, 0),//基础色_暗部颜色 默认 0黑色 范围RGB颜色\r\n baseColorSaturability: 1,//基础色饱和度 默认1 范围0-10;\r\n //#endregion\r\n\r\n specular: 1, //高光 范围0-1\r\n matalness: 0,//金属性 范围0-1\r\n roughness: 0.2, //粗糙 范围0-1\r\n bumpScale: 2,//凹凸比(法线强度) 范围0-20\r\n sharpen: 1,//锐化 默认1 范围0-20\r\n selfLuminous: 0,//自发光强度 范围0-200\r\n\r\n UVType: 1,//默认世界坐标\r\n })) as MaterialParam,\r\n\r\n // 自定义: Object.freeze(Object.assign({ ...DefaultParam }, {\r\n // })) as MaterialParam,\r\n});\r\n\r\nexport type MaterialType = keyof (typeof DefaultParamMap);\r\n\r\nexport function SetMaterialParams(mtl: PhysicalMaterialRecord, param: MaterialParam): void\r\n{\r\n for (let key in param)\r\n {\r\n let v = param[key];\r\n if (v instanceof Color)\r\n {\r\n let c = mtl[key] as Color;\r\n c.copy(v);\r\n }\r\n else\r\n mtl[key] = param[key];\r\n }\r\n}\r\n","import { MathUtils, Matrix4, Vector3 } from \"three\";\r\nimport { ZAxis, equaln } from \"../../../Geometry/GeUtils\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { CADObject } from \"../../CADObject\";\r\nimport { Arc } from \"../../Entity/Arc\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { BoardType } from \"../../Entity/BoardInterface\";\r\nimport { Line } from \"../../Entity/Line\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { HardwareCompositeEntity } from \"../../Hardware/HardwareCompositeEntity\";\r\nimport { DefaultParamMap, SetMaterialParams } from \"../../IMaterialDefaultParam\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { PhysicalMaterialRecord } from \"../../PhysicalMaterialRecord\";\r\nimport { RoomHolePolyline } from \"../../Room/Entity/Wall/Hole/RoomHolePolyline\";\r\nimport { RoomWallArc } from \"../../Room/Entity/Wall/RoomWallArc\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n/**\r\n * 弧形窗\r\n */\r\n@Factory\r\nexport class TemplateArcWindowRecord extends TemplateRecord\r\n{\r\n constructor()\r\n {\r\n super();\r\n this.name = \"弧形窗(自动)\";\r\n }\r\n\r\n @AutoRecord HoleObjectId: ObjectId<RoomHolePolyline>;\r\n @AutoRecord ArcWallIndex: number;\r\n\r\n InitWindowFrame(hole: RoomHolePolyline, arcWallIndex: number)\r\n {\r\n if (!hole.objectId) return;\r\n this.HoleObjectId = hole.objectId;\r\n this.ArcWallIndex = arcWallIndex;\r\n\r\n //下边框\r\n let bottomFrame = Board.CreateBoard(50, 50, 50, BoardType.Layer);\r\n bottomFrame.ApplyMatrix(bottomFrame.OCSInv);\r\n bottomFrame.ColorIndex = 8;\r\n\r\n //玻璃\r\n let glass = bottomFrame.Clone();\r\n glass.ColorIndex = 7;\r\n\r\n //其余边框\r\n let leftFrame = bottomFrame.Clone();\r\n\r\n let rightFrame = bottomFrame.Clone();\r\n\r\n let topFrame = bottomFrame.Clone();\r\n\r\n let windowModel = new HardwareCompositeEntity();\r\n windowModel.Entitys.push(leftFrame, rightFrame, topFrame, bottomFrame, glass);\r\n this._db.ModelSpace.Append(windowModel);\r\n this.Objects.push(windowModel.Id);\r\n\r\n //边框材质\r\n let frameMaterial = this._db.MaterialTable.GetAt(\"弧形窗边框\");\r\n if (!frameMaterial)\r\n {\r\n frameMaterial = new PhysicalMaterialRecord();\r\n SetMaterialParams(frameMaterial, DefaultParamMap.金属);\r\n frameMaterial.Name = \"弧形窗边框\";\r\n frameMaterial.type = \"金属\";\r\n frameMaterial.color = \"#333333\";\r\n frameMaterial.roughness = 0.4;//粗糙度\r\n frameMaterial.specular = 0.5;//高光\r\n frameMaterial.Update();\r\n this._db.MaterialTable.Add(frameMaterial);\r\n }\r\n windowModel.Material = frameMaterial.Id;\r\n\r\n //玻璃材质\r\n let glassMaterial = this._db.MaterialTable.GetAt(\"弧形窗玻璃\");\r\n if (!glassMaterial)\r\n {\r\n glassMaterial = new PhysicalMaterialRecord();\r\n SetMaterialParams(glassMaterial, DefaultParamMap.玻璃);\r\n glassMaterial.Name = \"弧形窗玻璃\";\r\n glassMaterial.type = \"玻璃\";\r\n glassMaterial.transparent = true;\r\n glassMaterial.opacity = 0.4;\r\n glassMaterial.Update();\r\n this._db.MaterialTable.Add(glassMaterial);\r\n }\r\n glass.Material = glassMaterial.Id;\r\n }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n let [windowModelId] = this.Objects;\r\n if (!windowModelId || windowModelId.IsErase) return;\r\n\r\n let hole = this.HoleObjectId?.Object;\r\n let arcWall = hole?.FakerWalls[this.ArcWallIndex] as RoomWallArc;\r\n\r\n if (!hole || !arcWall) return;\r\n\r\n let windowModel = windowModelId.Object as HardwareCompositeEntity;\r\n\r\n let leftFrame = windowModel.Entitys[0] as Board;\r\n let rightFrame = windowModel.Entitys[1] as Board;\r\n let topFrame = windowModel.Entitys[2] as Board;\r\n let bottomFrame = windowModel.Entitys[3] as Board;\r\n let glass = windowModel.Entitys[4] as Board;\r\n\r\n bottomFrame.ApplyMatrix(bottomFrame.OCSInv);\r\n\r\n let wpdist = hole.WpDist[0] !== 0 ? hole.WpDist[0] + arcWall.Thickness / 2 + 25 : 0;//外飘时考虑 墙厚 + 边框厚 + 外飘距离\r\n\r\n const radius = arcWall.Radius;\r\n let leftArc = arcWall.LeftCurves[0] as Arc;\r\n let rightArc = arcWall.RightCurves[0] as Arc;\r\n\r\n //弧形窗角度\r\n let allAngle = arcWall.AllAngle;\r\n let midAngle = allAngle / 2;\r\n let midDistance = (leftArc.EndPoint.distanceTo(leftArc.StartPoint) + rightArc.EndPoint.distanceTo(rightArc.StartPoint)) / 4;\r\n\r\n let maxThanPI = allAngle > Math.PI;\r\n\r\n //弧形圆点\r\n let center: Vector3;\r\n if (equaln(allAngle, Math.PI, 1e-7))\r\n center = new Vector3(radius);\r\n else if (allAngle < Math.PI)\r\n center = new Vector3(midDistance, - Math.sqrt(radius * radius - midDistance * midDistance));\r\n else if (maxThanPI) //弧形大于Π时,会翻转\r\n {\r\n let radian = 2 * Math.PI / 360 * MathUtils.radToDeg(Math.PI - midAngle);\r\n center = new Vector3(radius + wpdist, Math.cos(radian) * (radius + wpdist));\r\n }\r\n\r\n // let reduceAngle = MathUtils.degToRad(25 * 180 / (Math.PI * radius));\r\n\r\n let startAngle = Math.PI / 2 + midAngle;\r\n let endAngle = Math.PI / 2 - midAngle;\r\n\r\n //内缩\r\n // if (hole.FakerWalls.length === 2)\r\n // {\r\n // if (equalv3(arcWall.StartPoint.clone().applyMatrix4(hole.OCSInv), new Vector3(0)))\r\n // startAngle = startAngle + reduceAngle * (maxThanPI ? 1 : -1);\r\n // else\r\n // endAngle = endAngle + reduceAngle * (maxThanPI ? -1 : 1);;\r\n // }\r\n\r\n //下边框弧形轮廓\r\n let bottomArc1 = new Arc(center, radius - 25 + wpdist, startAngle, endAngle);\r\n let bottomArc2 = new Arc(center, radius + 25 + wpdist, startAngle, endAngle);\r\n let bottomCloseLine1 = new Line(bottomArc1.StartPoint, bottomArc2.StartPoint);\r\n let bottomCloseLine2 = new Line(bottomArc1.EndPoint, bottomArc2.EndPoint);\r\n let bottomContourCurve = Polyline.Combine([bottomArc1, bottomCloseLine1, bottomArc2, bottomCloseLine2]);\r\n bottomFrame.ContourCurve = bottomContourCurve;\r\n\r\n //玻璃弧长50 的角度\r\n let glassAngle1 = MathUtils.degToRad(50 * 180 / (Math.PI * (radius - 2)));\r\n let glassAngle2 = MathUtils.degToRad(50 * 180 / (Math.PI * (radius + 2)));\r\n\r\n //玻璃\r\n let glassArc1 = new Arc(center, radius - 2 + wpdist, startAngle - glassAngle1, endAngle + glassAngle1);\r\n let glassArc2 = new Arc(center, radius + 2 + wpdist, startAngle - glassAngle2, endAngle + glassAngle2);\r\n let glassCloseLine1 = new Line(glassArc1.StartPoint, glassArc2.StartPoint);\r\n let glassCloseLine2 = new Line(glassArc1.EndPoint, glassArc2.EndPoint);\r\n let glassContourCurve = Polyline.Combine([glassArc1, glassCloseLine1, glassArc2, glassCloseLine2]);\r\n\r\n glass.Thickness = hole.Height - 100;\r\n glass.ApplyMatrix(glass.OCSInv);\r\n\r\n glass.ContourCurve = glassContourCurve;\r\n glass.Position = glass.Position.add(new Vector3(0, 0, 50));\r\n\r\n //上边框\r\n topFrame.CopyFrom(bottomFrame);\r\n topFrame.Position = bottomFrame.Position.add(new Vector3(0, 0, hole.Height - 50));\r\n\r\n //边框弧长50 的角度\r\n let angle1 = MathUtils.degToRad(50 * 180 / (Math.PI * (radius - 25)));\r\n let angle2 = MathUtils.degToRad(50 * 180 / (Math.PI * (radius + 25)));\r\n\r\n //左边框弧形轮廓\r\n let leftArc1 = bottomArc1.Clone();\r\n let leftArc2 = bottomArc2.Clone();\r\n if (maxThanPI)\r\n {\r\n leftArc1.StartAngle = leftArc1.EndAngle + angle1;\r\n leftArc2.StartAngle = leftArc2.EndAngle + angle2;\r\n }\r\n else\r\n {\r\n leftArc1.EndAngle = leftArc1.StartAngle - angle1;\r\n leftArc2.EndAngle = leftArc2.StartAngle - angle2;\r\n }\r\n\r\n let leftCloseLine1 = new Line(leftArc1.StartPoint, leftArc2.StartPoint);\r\n let leftCloseLine2 = new Line(leftArc1.EndPoint, leftArc2.EndPoint);\r\n let leftFrameContourCurve = Polyline.Combine([leftArc1, leftCloseLine1, leftArc2, leftCloseLine2]);\r\n\r\n leftFrame.Thickness = hole.Height - 100;\r\n leftFrame.ApplyMatrix(leftFrame.OCSInv);\r\n\r\n leftFrame.ContourCurve = leftFrameContourCurve;\r\n leftFrame.Position = leftFrame.Position.add(new Vector3(0, 0, 50));\r\n\r\n //右边框弧形轮廓\r\n let rightArc1 = bottomArc1.Clone();\r\n let rightArc2 = bottomArc2.Clone();\r\n if (maxThanPI)\r\n {\r\n rightArc1.EndAngle = rightArc1.StartAngle - angle1;\r\n rightArc2.EndAngle = rightArc2.StartAngle - angle2;\r\n }\r\n else\r\n {\r\n rightArc1.StartAngle = rightArc1.EndAngle + angle1;\r\n rightArc2.StartAngle = rightArc2.EndAngle + angle2;\r\n }\r\n let rightCloseLine1 = new Line(rightArc1.StartPoint, rightArc2.StartPoint);\r\n let rightCloseLine2 = new Line(rightArc1.EndPoint, rightArc2.EndPoint);\r\n let rightFrameContourCurve = Polyline.Combine([rightArc1, rightCloseLine1, rightArc2, rightCloseLine2]);\r\n\r\n rightFrame.Thickness = hole.Height - 100;\r\n rightFrame.ApplyMatrix(rightFrame.OCSInv);\r\n\r\n rightFrame.ContourCurve = rightFrameContourCurve;\r\n rightFrame.Position = rightFrame.Position.add(new Vector3(0, 0, 50));\r\n\r\n //定位\r\n let pos = arcWall.IsClockWise ? arcWall.StartPoint.clone() : arcWall.EndPoint.clone();\r\n let x = arcWall.EndPoint.sub(arcWall.StartPoint).normalize().multiplyScalar(arcWall.IsClockWise ? 1 : -1);\r\n let z = ZAxis;\r\n let y = new Vector3().crossVectors(ZAxis, x);\r\n\r\n if (maxThanPI)\r\n {\r\n //外飘时基点外移\r\n let v = arcWall.Center.clone().sub(pos).normalize();\r\n pos.subVectors(pos, v.multiplyScalar(wpdist));\r\n\r\n //边框处在第一象限\r\n let scalar = (rightArc1.StartPoint.x + rightArc2.StartPoint.x) / 2;\r\n pos.subVectors(pos, x.clone().multiplyScalar(scalar));\r\n }\r\n\r\n windowModel.OCS = new Matrix4().makeBasis(x, y, z).setPosition(pos);\r\n windowModel.Update();\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n override ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.HoleObjectId = file.ReadObjectId() as any;\r\n this.ArcWallIndex = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.WriteObjectId(this.HoleObjectId);\r\n file.Write(this.ArcWallIndex);\r\n }\r\n\r\n //局部撤销\r\n override ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Log, LogType } from \"../../Common/Log\";\r\nimport { safeEval } from \"../../Common/eval\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { BoardType, BrRelativePos } from \"../../DatabaseServices/Entity/BoardInterface\";\r\nimport { TemplateParam } from \"../../DatabaseServices/Template/Param/TemplateParam\";\r\nimport { TemplateWineRackRecord } from \"../../DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord\";\r\nimport { TemplateRecord } from \"../../DatabaseServices/Template/TemplateRecord\";\r\nimport { MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BehindBoardOption, IGrooveOption, LayerBoardOption, VerticalBoardOption } from \"../../UI/Store/OptionInterface/IOptionInterface\";\r\nimport { BehindHeightPositon } from \"../../UI/Store/OptionInterface/OptionEnum\";\r\n\r\nexport async function BuildLayerBoards(opt: LayerBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Promise<Board[]>\r\n{\r\n let spaceBox = space.SpaceBox;\r\n let spaceOCS = space.SpaceOCS;\r\n let size = spaceBox.getSize(new Vector3());\r\n\r\n //使用模块 添加参数表达式 计算值\r\n let template = new TemplateRecord().InitBaseParams();\r\n CreateTemplateParam(template, size, opt, grooveOption);\r\n\r\n //独立参数\r\n {\r\n AppendTemplateParam(template, \"QS\", 0, opt.calcFrontShrink, \"前缩\"); //前缩\r\n AppendTemplateParam(template, \"ZS\", 0, opt.calcLeftShrink, \"左缩\"); //左缩\r\n AppendTemplateParam(template, \"YS\", 0, opt.calcRightShrink, \"右缩\"); //右缩\r\n AppendTemplateParam(template, \"BS\", 0, opt.calcHeight, \"板深\"); //板宽\r\n }\r\n\r\n await template.UpdateTemplateTree();\r\n\r\n let width: number;\r\n if (opt.isTotalLength)\r\n width = size.y;\r\n else\r\n width = template.GetParam(\"BS\").value as number;\r\n\r\n let count = template.GetParam(\"C\").value as number;\r\n count = count < 1 ? 1 : count;\r\n\r\n opt.count = count;\r\n\r\n let type = opt.boardRelative;\r\n let spaceSize = template.GetParam(\"S\").value as number;\r\n let frontShrink = template.GetParam(\"QS\").value as number;\r\n width -= frontShrink;\r\n\r\n if (width <= 0)\r\n {\r\n Log(\"宽度无效,可能前缩过大,请修正\", LogType.Error);\r\n return [];\r\n }\r\n\r\n let leftShrink = template.GetParam(\"ZS\").value as number;\r\n let rightShrink = template.GetParam(\"YS\").value as number;\r\n let thickness = template.GetParam(\"BH\").value as number;\r\n\r\n let len = size.x - leftShrink - rightShrink;\r\n if (len <= 0)\r\n {\r\n Log(\"长度无效,可能左缩右缩过大,请修正\", LogType.Error);\r\n return [];\r\n }\r\n let board = Board.CreateBoard(len, width, thickness, BoardType.Layer);\r\n if (grooveOption)\r\n {\r\n board.KnifeRadius = template.GetParam(\"R\").value as number;\r\n board.GroovesAddDepth = template.GetParam(\"AD\").value as number;\r\n board.GroovesAddWidth = template.GetParam(\"AW\").value as number;\r\n board.GroovesAddLength = template.GetParam(\"AL\").value as number;\r\n }\r\n opt.height = len;\r\n opt.width = width;\r\n\r\n //等分单层空间大小\r\n let singleSize = (size.z - (thickness * count)) / (count + 1);\r\n\r\n\r\n let brs: Board[] = [];\r\n\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = board.Clone() as Board;\r\n b.Name = opt.name;\r\n\r\n if (type === BrRelativePos.Top)\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - rightShrink, frontShrink, size.z - (spaceSize + thickness) * i)\r\n )));\r\n else if (type === BrRelativePos.Bottom)\r\n b.ApplyMatrix(\r\n MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - rightShrink, frontShrink, spaceSize * i + (i - 1) * thickness)\r\n )));\r\n else\r\n {\r\n b.ApplyMatrix(\r\n MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - rightShrink, frontShrink, singleSize * i + (i - 1) * thickness))\r\n ));\r\n }\r\n b.ApplyMatrix(spaceOCS);\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n\r\nexport async function BuildVerticalBoards(opt: VerticalBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Promise<Board[]>\r\n{\r\n const spaceBox = space.SpaceBox;\r\n const spaceOCS = space.SpaceOCS;\r\n let size = spaceBox.getSize(new Vector3());\r\n\r\n //使用模块 添加参数表达式 计算值\r\n let template = new TemplateRecord().InitBaseParams();\r\n CreateTemplateParam(template, size, opt, grooveOption);\r\n\r\n //独立参数\r\n {\r\n AppendTemplateParam(template, \"QS\", 0, opt.calcFrontShrink, \"前缩\"); //前缩\r\n AppendTemplateParam(template, \"HS\", 0, opt.calcBottomShrink, \"后缩\");//后缩\r\n AppendTemplateParam(template, \"BS\", 0, opt.calcWidth, \"板深\"); //板深\r\n AppendTemplateParam(template, \"BG\", 0, opt.calcHeight, \"板高\"); //板高\r\n }\r\n\r\n await template.UpdateTemplateTree();\r\n\r\n let frontShrink = template.GetParam(\"QS\").value as number;\r\n let bottomShink = template.GetParam(\"HS\").value as number;\r\n let width: number;\r\n if (opt.isTotalWidth)\r\n width = size.y - frontShrink;\r\n else\r\n {\r\n width = template.GetParam(\"BS\").value as number;\r\n }\r\n\r\n if (width <= 0)\r\n {\r\n Log(\"宽度无效,可能前缩过大,请修正\", LogType.Error);\r\n return [];\r\n }\r\n\r\n let length: number;\r\n if (opt.isTotalLength)\r\n length = size.z - bottomShink;\r\n else\r\n length = template.GetParam(\"BG\").value as number;\r\n\r\n let count = template.GetParam(\"C\").value as number;\r\n\r\n count = count < 1 ? 1 : count;\r\n opt.count = count;\r\n\r\n let type = opt.boardRelative;\r\n let spaceSize = template.GetParam(\"S\").value as number;\r\n let thickness = template.GetParam(\"BH\").value as number;\r\n thickness = thickness < 1 ? 1 : thickness;\r\n\r\n let board = Board.CreateBoard(length, width, thickness, BoardType.Vertical);\r\n if (grooveOption)\r\n {\r\n board.KnifeRadius = template.GetParam(\"R\").value as number;\r\n board.GroovesAddDepth = template.GetParam(\"AD\").value as number;\r\n board.GroovesAddWidth = template.GetParam(\"AW\").value as number;\r\n board.GroovesAddLength = template.GetParam(\"AL\").value as number;\r\n }\r\n opt.height = length;\r\n opt.width = width;\r\n\r\n //等分单层空间大小\r\n let singleSize = (size.x - (thickness * count)) / (count + 1);\r\n\r\n let brs: Board[] = [];\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = board.Clone() as Board;\r\n b.Name = opt.name;\r\n\r\n if (type === BrRelativePos.Left)\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(spaceSize * i + (i - 1) * thickness, frontShrink, bottomShink)\r\n )));\r\n else if (type === BrRelativePos.Right)\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(size.x - (spaceSize + thickness) * i, frontShrink, bottomShink)\r\n )));\r\n else\r\n b.ApplyMatrix(MoveMatrix(spaceBox.min.clone().add(\r\n new Vector3(singleSize * i + (i - 1) * thickness, frontShrink, bottomShink)\r\n )));\r\n\r\n b.ApplyMatrix(spaceOCS);\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n\r\nexport async function BuildBehindBoards(opt: BehindBoardOption, space: ISpaceParse, grooveOption?: IGrooveOption): Promise<Board[]>\r\n{\r\n let newBox = space.SpaceBox.clone();\r\n let spaceOcs = space.SpaceOCS;\r\n //判断延伸\r\n let leftExt = opt.leftExt;\r\n let rightExt = opt.rightExt;\r\n let topExt = opt.topExt;\r\n let bottomExt = opt.bottomExt;\r\n newBox.max.add(new Vector3(leftExt + rightExt, 0, topExt + bottomExt));\r\n newBox.translate(new Vector3(-leftExt, 0, -bottomExt));\r\n\r\n //获取背板高度\r\n let size = newBox.getSize(new Vector3());\r\n\r\n //使用模块 添加参数表达式 计算值\r\n let template = new TemplateRecord().InitBaseParams();\r\n CreateTemplateParam(template, size, opt, grooveOption);\r\n\r\n //独立参数\r\n {\r\n AppendTemplateParam(template, \"BG\", 0, opt.calcHeight, \"板高\"); //板高\r\n AppendTemplateParam(template, \"MD\", 0, opt.calcMoveDist, \"移动距离\"); //移动距离\r\n }\r\n\r\n await template.UpdateTemplateTree();\r\n\r\n let height: number;\r\n if (opt.boardPosition === BehindHeightPositon.AllHeight)\r\n height = size.z;\r\n else\r\n height = template.GetParam(\"BG\").value as number;\r\n\r\n let moveDist = template.GetParam(\"MD\").value as number;\r\n\r\n //判断背板位置,更新背板高度\r\n switch (opt.boardPosition)\r\n {\r\n case BehindHeightPositon.ForTop:\r\n newBox.min.add(new Vector3(0, 0, size.z - height));\r\n newBox.translate(new Vector3(0, 0, moveDist));\r\n break;\r\n case BehindHeightPositon.ForBottom:\r\n newBox.max.add(new Vector3(0, 0, height));\r\n newBox.translate(new Vector3(0, 0, -moveDist));\r\n break;\r\n }\r\n\r\n let count = template.GetParam(\"C\").value as number;\r\n count = count < 1 ? 1 : count;\r\n opt.count = count;\r\n\r\n //相对位置\r\n let relPos = opt.boardRelative;\r\n //单层空间宽度\r\n let spaceSize = template.GetParam(\"S\").value as number;\r\n let thickness = template.GetParam(\"BH\").value as number;\r\n thickness = thickness < 1 ? 1 : thickness;\r\n\r\n let board = Board.CreateBoard(height, size.x, thickness, BoardType.Behind);\r\n if (grooveOption)\r\n {\r\n board.KnifeRadius = template.GetParam(\"R\").value as number;\r\n board.GroovesAddDepth = template.GetParam(\"AD\").value as number;\r\n board.GroovesAddWidth = template.GetParam(\"AW\").value as number;\r\n board.GroovesAddLength = template.GetParam(\"AL\").value as number;\r\n }\r\n\r\n opt.height = height;\r\n opt.width = size.x;\r\n\r\n //等分单层空间大小\r\n let singleSize = (size.y - (thickness * count)) / (count + 1);\r\n\r\n let brs: Board[] = [];\r\n //构建板件\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = board.Clone();\r\n b.Name = opt.name;\r\n\r\n if (relPos === BrRelativePos.Front)\r\n b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(new Vector3(0, spaceSize * i + thickness * i, 0))));\r\n else if (relPos === BrRelativePos.Back)\r\n b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(\r\n new Vector3(0, size.y - spaceSize * i - (i - 1) * thickness, 0)\r\n )));\r\n else\r\n b.ApplyMatrix(MoveMatrix(newBox.min.clone().add(\r\n new Vector3(0, (singleSize + thickness) * i, 0)\r\n )));\r\n\r\n b.ApplyMatrix(spaceOcs);\r\n\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n\r\nexport function ExtendsBoardThickness(temp: TemplateRecord, thickness: number)\r\n{\r\n let bhPar = temp.GetParam(\"BH\");\r\n if (bhPar)\r\n {\r\n bhPar.expr = thickness;\r\n if (temp.Parent)\r\n {\r\n let rootBh = safeEval(temp.Root.GetParam(\"BH\")?.value as string);\r\n bhPar.expr = rootBh === thickness ? \"$BH\" : thickness;\r\n }\r\n }\r\n}\r\nexport function ExtendsbrThick2(temp: TemplateWineRackRecord)\r\n{\r\n let bh2Par = temp.GetParam(\"BH2\");\r\n if (bh2Par)\r\n {\r\n let bh2 = temp.Option.brThick2;\r\n bh2Par.value = bh2;\r\n if (temp.Option.isExtendsBH2)\r\n {\r\n if (temp.Parent)\r\n {\r\n let rootBh = safeEval(temp.Root.GetParam(\"BH\")?.value as string);\r\n bh2Par.expr = rootBh === bh2 ? \"$BH\" : bh2;\r\n }\r\n }\r\n else\r\n {\r\n bh2Par.expr = \"\";\r\n }\r\n }\r\n}\r\n\r\nexport function AppendTemplateParam(template: TemplateRecord, name: string, value: number, expr: string, description: string): void\r\n{\r\n let param = new TemplateParam();\r\n param.name = name;\r\n param.value = value;\r\n param.expr = expr;\r\n param.description = description;\r\n template.Params.push(param);\r\n};\r\n\r\nexport function CreateTemplateParam(template: TemplateRecord, size: Vector3, opt: LayerBoardOption | BehindBoardOption | VerticalBoardOption, grooveOption?: IGrooveOption): void\r\n{\r\n template.GetParam(\"L\").value = size.x; //空间长\r\n template.GetParam(\"W\").value = size.y; //空间深\r\n template.GetParam(\"H\").value = size.z; //空间高\r\n\r\n let BHParam = template.GetParam(\"BH\"); //板厚\r\n BHParam.expr = opt.exprThickness ?? 18;\r\n\r\n AppendTemplateParam(template, \"C\", 1, opt.exprCount, \"板件数量\"); //板件数量\r\n AppendTemplateParam(template, \"S\", 0, opt.calcSpaceSize, \"空间距离\"); //板件空间距离\r\n\r\n AppendTemplateParam(template, \"R\", 3, grooveOption?.exprKnifeRadius ?? \"3\", \"刀半径\"); //刀半径\r\n AppendTemplateParam(template, \"AL\", 0, grooveOption?.exprGrooveAddLength ?? \"0\", \"槽加长\"); //槽加长\r\n AppendTemplateParam(template, \"AD\", 0, grooveOption?.exprGrooveAddDepth ?? \"0\", \"槽加深\"); //槽加深\r\n AppendTemplateParam(template, \"AW\", 0, grooveOption?.exprGrooveAddWidth ?? \"0\", \"槽加宽\"); //槽加宽\r\n}\r\n","import { Vector2, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../../Common/ArrayExt\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { Log, LogType } from \"../../Common/Log\";\r\nimport { Singleton } from \"../../Common/Singleton\";\r\nimport { Arc } from \"../../DatabaseServices/Entity/Arc\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { BoardType } from \"../../DatabaseServices/Entity/BoardInterface\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2, XAxis, YAxis, equalv3, isParallelTo } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { ELatticeArrayType, ILatticeOption } from \"../../UI/Store/LatticeInterface\";\r\nimport { IHighSealedItem } from \"../../UI/Store/OptionInterface/IHighSealedItem\";\r\nimport { DrillType } from \"../DrawDrilling/DrillType\";\r\n\r\nexport class DrawLatticeDrawerTool extends Singleton\r\n{\r\n private _config: ILatticeOption;\r\n private space: ISpaceParse;\r\n private leftBr: Board;\r\n private rightBr: Board;\r\n private frontBr: Board;\r\n private backBr: Board;\r\n private haveTopBr: boolean = false;\r\n get Config()\r\n {\r\n return this._config;\r\n }\r\n Draw(space: ISpaceParse, config: ILatticeOption): Board[]\r\n {\r\n this._config = config;\r\n this.space = space;\r\n\r\n this.ParseSpaceBrs();\r\n\r\n this.HandleSpace();\r\n\r\n let size = space.Size;\r\n\r\n if (config.arrayType === ELatticeArrayType.ByWidth)\r\n {\r\n config.widthCount = Math.floor((size.x + config.thickness) / (config.gripWidth + config.thickness));\r\n config.depthCount = Math.floor((size.y + config.thickness) / (config.gripDepth + config.thickness));\r\n }\r\n\r\n if (config.widthCount <= 0 || config.depthCount <= 0)\r\n {\r\n this.End();\r\n return [];\r\n }\r\n\r\n let gripWidth = (size.x - ((config.widthCount - 1) * config.thickness)) / config.widthCount;\r\n let gripDepth = (size.y - (config.depthCount - 1) * config.thickness) / config.depthCount;\r\n config.gripWidth = gripWidth;\r\n config.gripDepth = gripDepth;\r\n\r\n let position = space.SpaceBox.min.clone();\r\n\r\n let verBr = Board.CreateBoard(size.z, size.y, config.thickness, BoardType.Vertical);\r\n //分析切角圆弧的结果\r\n let res = this.ParseArcLenOrObliuqeAng(verBr);\r\n if (!res)\r\n {\r\n this.End();\r\n return [];\r\n };\r\n //左右侧板跟随\r\n this.ChangeLeftRightBr(verBr);\r\n\r\n this.ParseBrTooth(verBr);\r\n this.ParseHighSealing(verBr, config.leftSealed, config.rightSealed, config.upSealed, config.downSealed, false);\r\n this.WriteBoardProcessOption(verBr);\r\n let lattices: Board[] = [];\r\n for (let i = 1; i < config.widthCount; i++)\r\n {\r\n let br = verBr.Clone();\r\n br.Name = \"竖板\" + i;\r\n let pos = position.clone();\r\n pos.add(new Vector3(gripWidth * i + (i - 1) * config.thickness));\r\n br.Position = pos;\r\n br.ApplyMatrix(space.SpaceOCS);\r\n lattices.push(br);\r\n }\r\n\r\n let beBr = Board.CreateBoard(size.z, size.x, config.thickness, BoardType.Behind);\r\n this.ParseBrTooth(beBr);\r\n this.ParseHighSealing(beBr, config.leftSealed, config.rightSealed, config.upSealed, config.downSealed, true);\r\n this.WriteBoardProcessOption(beBr);\r\n for (let i = 1; i < config.depthCount; i++)\r\n {\r\n let br = beBr.Clone();\r\n br.Name = \"横板\" + i;\r\n let pos = position.clone();\r\n pos.add(new Vector3(0, (gripDepth + config.thickness) * i));\r\n br.Position = pos;\r\n br.ApplyMatrix(space.SpaceOCS);\r\n lattices.push(br);\r\n }\r\n\r\n this.End();\r\n return lattices;\r\n }\r\n private HandleSpace()\r\n {\r\n const config = this.Config;\r\n let box = this.space.SpaceBox;\r\n box.max.add(new Vector3(0, 0, -this.Config.downDist));\r\n //处理间隙\r\n box.min.add(new Vector3(config.space, config.space));\r\n box.max.add(new Vector3(-config.space, -config.space));\r\n\r\n if (this.frontBr && this.backBr)\r\n {\r\n let backPos = this.backBr.Position.applyMatrix4(this.frontBr.OCSInv);\r\n\r\n let addH = backPos.y + this.backBr.Height - this.frontBr.Height;\r\n if (addH > 0)\r\n {\r\n this.space.SpaceBox.max.add(new Vector3(0, 0, addH));\r\n if (config.isAuto)\r\n config.arcLen = addH;\r\n }\r\n else\r\n Log(\"挡板高度大于等于格子抽板高度,无法自动识别弧度!\", LogType.Error);\r\n }\r\n\r\n if (this.haveTopBr)\r\n {\r\n Log(\"顶板不为空,绘制格子抽可能错误!\", LogType.Error);\r\n }\r\n }\r\n private ChangeLeftRightBr(refBr: Board)\r\n {\r\n const config = this.Config;\r\n if (this.leftBr && this.rightBr)\r\n {\r\n if (config.isChange)\r\n {\r\n let lWidth = this.leftBr.Width;\r\n let lHeight = this.leftBr.Height;\r\n let lgrooves = this.leftBr.Grooves.slice();\r\n let rgrooves = this.rightBr.Grooves.slice();\r\n\r\n let rWidth = this.rightBr.Width;\r\n let rHeight = this.rightBr.Height;\r\n\r\n this.leftBr.ContourCurve = refBr.ContourCurve.Clone();\r\n this.rightBr.ContourCurve = refBr.ContourCurve.Clone();\r\n\r\n this.leftBr.Width = lWidth;\r\n this.leftBr.Height = lHeight;\r\n this.rightBr.Width = rWidth;\r\n this.rightBr.Height = rHeight;\r\n\r\n if (this.leftBr.Grooves.length !== lgrooves.length)\r\n this.leftBr.AppendGrooves(lgrooves);\r\n if (this.rightBr.Grooves.length !== rgrooves.length)\r\n this.rightBr.AppendGrooves(rgrooves);\r\n\r\n }\r\n else\r\n {\r\n // 左右侧板不跟随更改的时候,不要把它变成矩形\r\n // this.leftBr.InitBoard(this.leftBr.Height, this.leftBr.Width, this.leftBr.Thickness, this.leftBr.BoardType);\r\n // this.rightBr.InitBoard(this.rightBr.Height, this.rightBr.Width, this.rightBr.Thickness, this.rightBr.BoardType);\r\n }\r\n }\r\n }\r\n private ParseBrTooth(br: Board)\r\n {\r\n const config = this.Config;\r\n\r\n let grooveLenAdd = config.knifeRad;\r\n\r\n let initPts: Vector3[] = [];\r\n let addWidth = config.grooveAddWidth / 2;//槽加长\r\n if (br.BoardType === BoardType.Behind)\r\n {\r\n let p1 = new Vector3(br.Width - config.gripWidth + addWidth, br.Height);\r\n let p2 = new Vector3(br.Width - config.gripWidth + addWidth, br.Height / 2 - grooveLenAdd);\r\n let p3 = new Vector3(br.Width - config.gripWidth - br.Thickness - addWidth, br.Height / 2 - grooveLenAdd);\r\n let p4 = new Vector3(br.Width - config.gripWidth - br.Thickness - addWidth, br.Height);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i < config.widthCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(-(config.gripWidth + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(cu.EndParam - 1, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n else\r\n {\r\n let p1 = new Vector3(config.gripDepth - addWidth, 0);\r\n let p2 = new Vector3(config.gripDepth - addWidth, br.Height / 2 + grooveLenAdd);\r\n let p3 = new Vector3(config.gripDepth + br.Thickness + addWidth, br.Height / 2 + grooveLenAdd);\r\n let p4 = new Vector3(config.gripDepth + br.Thickness + addWidth, 0);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i < config.depthCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3((config.gripDepth + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(1, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n }\r\n private ParseSpaceBrs()\r\n {\r\n let vertBrs: Board[] = this.space.BoardMap.get(BoardType.Vertical);\r\n if (vertBrs && vertBrs.length > 1)\r\n {\r\n vertBrs.sort((br1, br2) =>\r\n {\r\n return br1.Position.applyMatrix4(this.space.SpaceOCSInv).x - br2.Position.applyMatrix4(this.space.SpaceOCSInv).x;\r\n });\r\n this.leftBr = vertBrs[0];\r\n this.rightBr = arrayLast(vertBrs);\r\n }\r\n\r\n let behindBrs = this.space.BoardMap.get(BoardType.Behind);\r\n\r\n if (behindBrs && behindBrs.length > 1)\r\n {\r\n behindBrs.sort((br1, br2) =>\r\n {\r\n return br1.Position.applyMatrix4(this.space.SpaceOCSInv).y - br2.Position.applyMatrix4(this.space.SpaceOCSInv).y;\r\n });\r\n\r\n this.backBr = arrayLast(behindBrs);\r\n this.frontBr = behindBrs[0];\r\n }\r\n\r\n let lyBrs = this.space.BoardMap.get(BoardType.Layer);\r\n this.haveTopBr = lyBrs && lyBrs.length > 1;\r\n }\r\n private ParseArcLenOrObliuqeAng(br: Board)\r\n {\r\n const config = this.Config;\r\n const size = this.space.Size;\r\n\r\n if (config.isOpenCut)\r\n {\r\n if (config.upCut > size.z || config.downCut > size.z)\r\n return true;\r\n if (config.upCut < 1 || config.downCut < 1)\r\n return true;\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(3, new Vector2(config.upCut, br.Height));\r\n cu.SetPointAt(4, new Vector2(0, br.Height - config.downCut));\r\n }\r\n else\r\n {\r\n if (config.arcLen > size.z || config.arcLen > size.y)\r\n {\r\n Log(\"圆弧角过大\", LogType.Error);\r\n return false;\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n if (config.arcLen === 0)\r\n {\r\n Log(\"圆弧角为0\");\r\n return true;\r\n }\r\n cu.AddVertexAt(3, new Vector2(config.arcLen, br.Height));\r\n cu.SetBulgeAt(3, Math.tan(Math.PI / 8));\r\n cu.SetPointAt(4, new Vector2(0, br.Height - config.arcLen));\r\n }\r\n\r\n return true;\r\n }\r\n private WriteBoardProcessOption(br: Board)\r\n {\r\n const config = this.Config;\r\n br.KnifeRadius = config.knifeRad;\r\n br.BoardProcessOption.sealedUp = config.upSealed.toString();\r\n br.BoardProcessOption.sealedDown = config.downSealed.toString();\r\n br.BoardProcessOption.sealedLeft = config.leftSealed.toString();\r\n br.BoardProcessOption.sealedRight = config.rightSealed.toString();\r\n br.BoardProcessOption.drillType = DrillType.None;\r\n br.BoardProcessOption.highDrill.fill(DrillType.None);\r\n br.BoardProcessOption[EBoardKeyList.Lines] = config.linesType; //纹路\r\n }\r\n protected ParseHighSealing(br: Board, leftSealed: number, rightSealed: number, topSealed: number, downSealed: number, isHor: boolean)\r\n {\r\n let cu = br.ContourCurve as Polyline;\r\n br.BoardProcessOption.sealedLeft = leftSealed.toString();\r\n br.BoardProcessOption.sealedRight = rightSealed.toString();\r\n br.BoardProcessOption.sealedUp = topSealed.toString();\r\n br.BoardProcessOption.sealedDown = downSealed.toString();\r\n\r\n let highSeals: IHighSealedItem[] = [];\r\n\r\n let sizes = [...new Set([downSealed, rightSealed, topSealed, leftSealed])];\r\n let downSeal = {\r\n size: downSealed, color: sizes.indexOf(downSealed) + 1\r\n };\r\n let rigthSeal = {\r\n size: rightSealed, color: sizes.indexOf(rightSealed) + 1\r\n };\r\n let topSeal = { size: topSealed, color: sizes.indexOf(topSealed) + 1 };\r\n let leftSeal = { size: leftSealed, color: sizes.indexOf(leftSealed) + 1 };\r\n\r\n if (isHor)\r\n {\r\n let topSealNoSize = { size: 0, color: sizes.indexOf(topSealed) + 1 };\r\n highSeals.push(downSeal, rigthSeal);\r\n\r\n for (let i = 1; i <= cu.EndParam - 3; i++)\r\n {\r\n if ((i - 1) % 4 === 0)\r\n highSeals.push(topSeal);\r\n else\r\n highSeals.push(topSealNoSize);\r\n }\r\n highSeals.push(leftSeal);\r\n }\r\n else\r\n {\r\n let count = (this._config.depthCount - 1) * 3 + this._config.depthCount;\r\n\r\n let downSealNoSize = { size: 0, color: sizes.indexOf(downSealed) + 1 };\r\n for (let i = 0; i < count; i++)\r\n {\r\n if (i % 4 === 0)\r\n highSeals.push(downSeal);\r\n else\r\n highSeals.push(downSealNoSize);\r\n }\r\n for (let i = count; i < cu.EndParam; i++)\r\n {\r\n let c = cu.GetCurveAtIndex(i);\r\n if (c instanceof Arc)\r\n break;\r\n let derv = c.GetFirstDeriv(0).normalize();\r\n if (equalv3(derv, YAxis))\r\n highSeals.push(rigthSeal);\r\n else if (isParallelTo(derv, XAxis))\r\n highSeals.push(topSeal);\r\n else if (equalv3(derv, YAxis.clone().negate()))\r\n highSeals.push(leftSeal);\r\n else\r\n highSeals.push(topSeal);\r\n }\r\n }\r\n br.BoardProcessOption.highSealed = highSeals;\r\n }\r\n private End()\r\n {\r\n this._config = null;\r\n this.leftBr = null;\r\n this.rightBr = null;\r\n this.backBr = null;\r\n this.frontBr = null;\r\n this.haveTopBr = false;\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DrawLatticeDrawerTool } from \"../../../Add-on/LatticeDrawer/LatticeDrawerTool\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { DefaultLatticeConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { Box3Ext } from \"../../../Geometry/Box\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { ILatticeOption } from \"../../../UI/Store/LatticeInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n@Factory\r\nexport class TemplateLatticeRecord extends TemplateRecord\r\n{\r\n private option: ILatticeOption = { ...DefaultLatticeConfig };\r\n constructor()\r\n {\r\n super();\r\n this.name = \"格子抽(自动)\";\r\n }\r\n get Option()\r\n {\r\n return Object.assign({}, this.option);\r\n }\r\n set Option(option: ILatticeOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.option, option);\r\n ExtendsBoardThickness(this, option.thickness);\r\n }\r\n\r\n // InitBaseParams()\r\n // {\r\n // super.InitBaseParams();\r\n // return this;\r\n // }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number;\r\n if (thickness)\r\n this.option.thickness = thickness;\r\n\r\n let tool = DrawLatticeDrawerTool.GetInstance();\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n let space = new ISpaceParse(sbrs, this._CacheSpaceCS);\r\n space.ParseOK = true;\r\n space.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize);\r\n\r\n let nbrs = tool.Draw(space, this.Option);\r\n\r\n for (let br of nbrs)\r\n {\r\n if (this.option.useBoardProcessOption)\r\n {\r\n if (sbrs.length)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName];\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName];\r\n br.BoardProcessOption[EBoardKeyList.Mat] = sbrs[0].BoardProcessOption[EBoardKeyList.Mat];\r\n br.BoardProcessOption[EBoardKeyList.BrMat] = sbrs[0].BoardProcessOption[EBoardKeyList.BrMat];\r\n br.BoardProcessOption[EBoardKeyList.Color] = sbrs[0].BoardProcessOption[EBoardKeyList.Color];\r\n }\r\n }\r\n else\r\n {\r\n const { roomName, cabinetName, boardMatName, material, color } = this.option;\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = roomName;\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = cabinetName;\r\n br.BoardProcessOption[EBoardKeyList.Mat] = material;\r\n br.BoardProcessOption[EBoardKeyList.BrMat] = boardMatName;\r\n br.BoardProcessOption[EBoardKeyList.Color] = color;\r\n }\r\n }\r\n\r\n\r\n for (let i = nbrs.length; i < this.Objects.length; i++)\r\n this.Objects[i].Object.Erase();\r\n\r\n for (let i = 0; i < nbrs.length; i++)\r\n {\r\n if (i < this.Objects.length)\r\n {\r\n let br = this.Objects[i].Object as Board;\r\n br.Erase(false);\r\n br.CopyFrom(nbrs[i]);\r\n br.SpaceOCS = this._CacheSpaceCS;\r\n }\r\n else\r\n {\r\n nbrs[i].SpaceOCS = this._CacheSpaceCS;\r\n this._db.ModelSpace.Append(nbrs[i]);\r\n this.Objects.push(nbrs[i].Id);\r\n }\r\n }\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n\r\n this.option.arrayType = file.Read();\r\n this.option.gripWidth = file.Read();\r\n this.option.gripDepth = file.Read();\r\n this.option.widthCount = file.Read();\r\n this.option.depthCount = file.Read();\r\n this.option.knifeRad = file.Read();\r\n this.option.thickness = file.Read();\r\n this.option.arcLen = file.Read();\r\n this.option.downDist = file.Read();\r\n this.option.space = file.Read();\r\n this.option.grooveAddWidth = file.Read();\r\n this.option.upSealed = file.Read();\r\n this.option.downSealed = file.Read();\r\n this.option.leftSealed = file.Read();\r\n this.option.rightSealed = file.Read();\r\n this.option.isAuto = file.Read();\r\n this.option.isChange = file.Read();\r\n this.option.isOpenCut = file.Read();\r\n this.option.upCut = file.Read();\r\n this.option.downCut = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this.option.linesType = file.Read();\r\n }\r\n if (ver > 2)\r\n {\r\n this.option.useBoardProcessOption = file.Read();\r\n }\r\n if (ver > 3)\r\n {\r\n this.option.boardMatName = file.Read();\r\n this.option.material = file.Read();\r\n this.option.color = file.Read();\r\n this.option.roomName = file.Read();\r\n this.option.cabinetName = file.Read();\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(4);\r\n super.WriteFile(file);\r\n file.Write(this.option.arrayType);\r\n file.Write(this.option.gripWidth);\r\n file.Write(this.option.gripDepth);\r\n file.Write(this.option.widthCount);\r\n file.Write(this.option.depthCount);\r\n file.Write(this.option.knifeRad);\r\n file.Write(this.option.thickness);\r\n\r\n file.Write(this.option.arcLen);\r\n file.Write(this.option.downDist);\r\n file.Write(this.option.space);\r\n file.Write(this.option.grooveAddWidth);\r\n file.Write(this.option.upSealed);\r\n file.Write(this.option.downSealed);\r\n file.Write(this.option.leftSealed);\r\n file.Write(this.option.rightSealed);\r\n file.Write(this.option.isAuto);\r\n file.Write(this.option.isChange);\r\n\r\n file.Write(this.option.isOpenCut);\r\n file.Write(this.option.upCut);\r\n file.Write(this.option.downCut);\r\n\r\n file.Write(this.option.linesType);\r\n\r\n file.Write(this.option.useBoardProcessOption);\r\n\r\n file.Write(this.option.boardMatName);\r\n file.Write(this.option.material);\r\n file.Write(this.option.color);\r\n file.Write(this.option.roomName);\r\n file.Write(this.option.cabinetName);\r\n }\r\n //#endregion\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Positioning } from \"./Positioning\";\r\n\r\n@Factory\r\nexport class PositioningFixed extends Positioning\r\n{\r\n override async Positioning()\r\n {\r\n }\r\n\r\n //#region File\r\n ReadFile(file: CADFiler): void\r\n {\r\n let ver = file.Read();\r\n\r\n if (!this.SpaceCS) this.SpaceCS = new Matrix4;\r\n if (!this.SpaceSize) this.SpaceSize = new Vector3;\r\n\r\n for (let i = 0; i < 16; i++)\r\n this.SpaceCS.elements[i] = file.Read();\r\n\r\n this.SpaceSize.set(file.Read(), file.Read(), file.Read());\r\n }\r\n\r\n WriteFile(file: CADFiler): void\r\n {\r\n file.Write(1);\r\n\r\n for (let e of this.SpaceCS.elements)\r\n file.Write(e);\r\n file.Write(this.SpaceSize.x);\r\n file.Write(this.SpaceSize.y);\r\n file.Write(this.SpaceSize.z);\r\n }\r\n //#endregion\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { CADObject } from \"../../CADObject\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { RoomHolePolyline } from \"../../Room/Entity/Wall/Hole/RoomHolePolyline\";\r\nimport { PositioningFixed } from \"../Positioning/PositioningFixed\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\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@Factory\r\nexport class TemplateRoomDoorRecord extends TemplateRecord\r\n{\r\n @AutoRecord HoleObjectId: ObjectId<RoomHolePolyline>;\r\n @AutoRecord DoorLogo: string;\r\n\r\n @AutoRecord IsMirror = false;\r\n\r\n @AutoRecord IsReverse = false;\r\n\r\n constructor()\r\n {\r\n super();\r\n this.name = \"户型门根节点\";\r\n }\r\n\r\n InitHoleParams()\r\n {\r\n let hole = this.HoleObjectId?.Object;\r\n if (!hole) return;\r\n return this;\r\n }\r\n\r\n protected override async Update()\r\n {\r\n super.Update();\r\n\r\n let hole = this.HoleObjectId?.Object;\r\n\r\n if (!hole) return;\r\n\r\n if (!this.Children[0]?.Object) return;\r\n\r\n let tr = this.Children[0].Object as TemplateRecord;\r\n\r\n let pos = new PositioningFixed;\r\n pos.SpaceCS = hole.FakerWalls[0].OCS;\r\n\r\n let wall = hole.FakerWalls[0];\r\n let length = wall.Length;\r\n if (this.IsMirror)\r\n {\r\n pos.SpaceCS.elements[0] *= -1;\r\n pos.SpaceCS.elements[1] *= -1;\r\n pos.SpaceCS.elements[2] *= -1;\r\n\r\n pos.SpaceCS.elements[12] -= pos.SpaceCS.elements[0] * length;\r\n pos.SpaceCS.elements[13] -= pos.SpaceCS.elements[1] * length;\r\n pos.SpaceCS.elements[14] -= pos.SpaceCS.elements[2] * length;\r\n }\r\n\r\n if (this.IsReverse)\r\n {\r\n pos.SpaceCS.elements[4] *= -1;\r\n pos.SpaceCS.elements[5] *= -1;\r\n pos.SpaceCS.elements[6] *= -1;\r\n }\r\n\r\n let yDir = new Vector3().setFromMatrixColumn(pos.SpaceCS, 1);\r\n pos.SpaceCS.elements[12] -= yDir.x * hole.FakerWalls[0].Thickness * 0.5;\r\n pos.SpaceCS.elements[13] -= yDir.y * hole.FakerWalls[0].Thickness * 0.5;\r\n pos.SpaceCS.elements[14] -= yDir.z * hole.FakerWalls[0].Thickness * 0.5;\r\n\r\n pos.SpaceSize = new Vector3(length, wall.Thickness, wall.Height);\r\n tr.Positioning = pos;\r\n }\r\n\r\n Reverse()\r\n {\r\n let hole = this.HoleObjectId?.Object;\r\n if (!hole) return;\r\n\r\n if (!this.Children[0]?.Object) return;\r\n let tr = this.Children[0].Object as TemplateRecord;\r\n\r\n let pos = new PositioningFixed;\r\n pos.SpaceCS = hole.FakerWalls[0].OCS;\r\n\r\n let xAxis = new Vector3();\r\n let yAxis = new Vector3();\r\n let zAxis = new Vector3();\r\n pos.SpaceCS.extractBasis(xAxis, yAxis, zAxis);\r\n yAxis.multiplyScalar(-1);\r\n\r\n pos.SpaceCS = new Matrix4().makeBasis(xAxis, yAxis, zAxis);\r\n\r\n this.Update();\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n override ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.HoleObjectId = file.ReadObjectId() as any;\r\n\r\n if (ver > 1)\r\n this.DoorLogo = file.Read();\r\n\r\n if (ver > 2)\r\n this.IsMirror = file.Read();\r\n else\r\n this.IsMirror = false;\r\n\r\n if (ver > 3)\r\n this.IsReverse = file.Read();\r\n else\r\n this.IsReverse = false;\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(4);\r\n super.WriteFile(file);\r\n file.WriteObjectId(this.HoleObjectId);\r\n\r\n file.Write(this.DoorLogo);\r\n\r\n file.Write(this.IsMirror);\r\n\r\n file.Write(this.IsReverse);\r\n }\r\n\r\n //局部撤销\r\n override ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { BoardType } from \"../../DatabaseServices/Entity/BoardInterface\";\r\nimport { MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { TBBoardOption } from \"../../UI/Store/OptionInterface/IOptionInterface\";\r\n\r\nexport function BuildTopBottomBoards(topOpt: TBBoardOption, bottomOpt: TBBoardOption, space: ISpaceParse): Board[]\r\n{\r\n let brs: Board[] = [];\r\n if (topOpt.isDraw)\r\n {\r\n let basePt = GetTopBoardBasePt(topOpt, space);\r\n brs.push(GetTopOrDownBoard(space, topOpt, basePt, true));\r\n }\r\n if (bottomOpt.isDraw)\r\n {\r\n let basePt = GetBottomBoardBasePt(bottomOpt, space);\r\n brs.push(GetTopOrDownBoard(space, bottomOpt, basePt, false));\r\n\r\n let size = space.Size;\r\n let refSize = size.y;\r\n const thickness = bottomOpt.footThickness;\r\n\r\n if (bottomOpt.offset > 0 && !bottomOpt.isWrapSide)\r\n {\r\n //绘制前地脚\r\n if (bottomOpt.isDrawFooter)\r\n {\r\n brs.push(GetFootBoard(bottomOpt, space, false));\r\n refSize -= thickness + bottomOpt.footBehindShrink;\r\n }\r\n\r\n //绘制后地脚\r\n if (bottomOpt.isDrawBackFooter)\r\n {\r\n brs.push(GetFootBoard(bottomOpt, space, true));\r\n refSize -= thickness + bottomOpt.footerOffset;\r\n }\r\n //绘制加强条\r\n if (bottomOpt.isDrawStrengthenStrip)\r\n brs.push(...GetStrengthenStrips(bottomOpt, space, refSize - bottomOpt.frontDist - bottomOpt.behindDistance));\r\n }\r\n }\r\n return brs;\r\n}\r\nfunction GetTopOrDownBoard(spaceParse: ISpaceParse, opt: TBBoardOption, basePt: Vector3, isTop = true)\r\n{\r\n //前后距\r\n let frontDist = -opt.frontDist;\r\n let backDist = -opt.behindDistance;\r\n //左右延伸\r\n let leftExt = opt.leftExt;\r\n let rightExt = opt.rightExt;\r\n\r\n //大小\r\n let size = spaceParse.Size;\r\n let length = size.x;\r\n let width = size.y + frontDist + backDist;\r\n let thickness = opt.thickness;\r\n if (opt.isWrapSide)\r\n {\r\n let leftBoardThickness = spaceParse.LeftBoard ? spaceParse.LeftBoard.Thickness : opt.thickness;\r\n let rightBoardThickness = spaceParse.RightBoard ? spaceParse.RightBoard.Thickness : opt.thickness;\r\n length += leftBoardThickness + rightBoardThickness + leftExt + rightExt;\r\n }\r\n else\r\n {\r\n leftExt = 0;\r\n rightExt = 0;\r\n }\r\n\r\n let board = Board.CreateBoard(length, width, thickness, BoardType.Layer);\r\n board.Name = \"顶板\";\r\n\r\n if (!isTop)\r\n {\r\n board.Name = \"底板\";\r\n }\r\n //移动右缩和前距的距离\r\n basePt.add(new Vector3(rightExt, -frontDist));\r\n board.ApplyMatrix(MoveMatrix(basePt));\r\n board.ApplyMatrix(spaceParse.SpaceOCS);\r\n\r\n return board;\r\n}\r\nfunction GetTopBoardBasePt(opt: TBBoardOption, spc: ISpaceParse)\r\n{\r\n let box = spc.SpaceBox;\r\n let min = box.min;\r\n let max = box.max;\r\n let basePoint = new Vector3();\r\n if (opt.isWrapSide)\r\n {\r\n let rightBoardThickness = spc.RightBoard ? spc.RightBoard.Thickness : opt.thickness;\r\n basePoint.set(max.x + rightBoardThickness, min.y, max.z);\r\n }\r\n else\r\n {\r\n basePoint.set(max.x, min.y, max.z - (opt.thickness + parseFloat(opt.offset as unknown as string)));\r\n }\r\n return basePoint;\r\n}\r\nfunction GetBottomBoardBasePt(opt: TBBoardOption, spc: ISpaceParse)\r\n{\r\n let box = spc.SpaceBox;\r\n let min = box.min;\r\n let max = box.max;\r\n let basePoint = new Vector3();\r\n if (opt.isWrapSide)\r\n {\r\n let rightBoardThickness = spc.RightBoard ? spc.RightBoard.Thickness : opt.thickness;\r\n basePoint.set(max.x + rightBoardThickness, min.y, min.z - opt.thickness);\r\n }\r\n else\r\n {\r\n basePoint.set(max.x, min.y, min.z + opt.offset);\r\n }\r\n return basePoint;\r\n}\r\nfunction GetFootBoard(opt: TBBoardOption, spaceParse: ISpaceParse, isBack: boolean)\r\n{\r\n let offset = opt.offset;\r\n let thickness = opt.footThickness;\r\n let footBoard = Board.CreateBoard(offset, spaceParse.Size.x, opt.footThickness, BoardType.Behind);\r\n footBoard.Name = isBack ? \"后地脚\" : \"地脚线\";\r\n let moveDist = isBack ? spaceParse.Size.y - opt.footerOffset - opt.behindDistance : thickness + opt.footBehindShrink + opt.frontDist;\r\n footBoard.ApplyMatrix(MoveMatrix(spaceParse.SpaceBox.min.clone().add(new Vector3(0, moveDist))))\r\n .ApplyMatrix(spaceParse.SpaceOCS);\r\n\r\n return footBoard;\r\n}\r\n\r\nfunction GetStrengthenStrips(opt: TBBoardOption, spaceParse: ISpaceParse, width: number)\r\n{\r\n let brs: Board[] = [];\r\n const thickness = opt.footThickness;\r\n let count = opt.divCount;\r\n if (count === 0) return brs;\r\n let spaceSize = (spaceParse.Size.x - count * thickness) / (count + 1);\r\n let br = Board.CreateBoard(opt.offset, width, thickness, BoardType.Vertical);\r\n\r\n let yDist = opt.frontDist;\r\n if (opt.isDrawFooter)\r\n yDist += (opt.footBehindShrink + thickness);\r\n\r\n for (let i = 1; i <= count; i++)\r\n {\r\n let b = br.Clone();\r\n b.Name = \"加强条\" + i;\r\n b.ApplyMatrix(MoveMatrix(spaceParse.SpaceBox.min.clone().add(new Vector3(spaceSize * i + (i - 1) * thickness, yDist))))\r\n .ApplyMatrix(spaceParse.SpaceOCS);\r\n brs.push(b);\r\n }\r\n return brs;\r\n}\r\n","import { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { BuildTopBottomBoards } from \"../../../Add-on/DrawBoard/BuildTopBottomBoardTool\";\r\nimport { FaceDirection } from \"../../../Add-on/DrawDrilling/DrillType\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { DefaultBottomBoardOption, DefaultTopBoardOption } from \"../../../Editor/DefaultConfig\";\r\nimport { BoardProcessOption } from \"../../../UI/Store/OptionInterface/BoardProcessOption\";\r\nimport { TBBoardOption } from \"../../../UI/Store/OptionInterface/IOptionInterface\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { LinesType } from \"../../Entity/BoardInterface\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n/**顶底板模板 */\r\n@Factory\r\nexport class TemplateTopBottomBoard extends TemplateRecord\r\n{\r\n private _topOption: TBBoardOption = { ...DefaultTopBoardOption };\r\n private _bottomOption: TBBoardOption = { ...DefaultBottomBoardOption };\r\n UseBoardProcessOption = false;\r\n BoardProcessOption: BoardProcessOption;\r\n isChangeBigHole = false;\r\n @AutoRecord DrawCounts: [number, number, number] = [1, 1, 1];\r\n constructor()\r\n {\r\n super();\r\n this.name = \"顶底板\";\r\n }\r\n get TopOption()\r\n {\r\n return Object.assign({}, this._topOption);\r\n }\r\n set TopOption(option: TBBoardOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._topOption, option);\r\n ExtendsBoardThickness(this, option.thickness);\r\n }\r\n get BottomOption()\r\n {\r\n return Object.assign({}, this._bottomOption);\r\n }\r\n set BottomOption(option: TBBoardOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._bottomOption, option);\r\n }\r\n\r\n // InitBaseParams()\r\n // {\r\n // super.InitBaseParams();\r\n // return this;\r\n // }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number;\r\n if (thickness)\r\n {\r\n this._topOption.thickness = thickness;\r\n this._bottomOption.thickness = thickness;\r\n this._bottomOption.footThickness = thickness;\r\n }\r\n\r\n let spaceParse = this.SpaceParse;\r\n let nbrs = BuildTopBottomBoards(this._topOption, this._bottomOption, spaceParse);\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n\r\n if (this.BoardProcessOption)\r\n {\r\n let minSealed = GetMinSealed(this.BoardProcessOption);\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption = this.BoardProcessOption;\r\n this.SetBoardProcess(br, minSealed);\r\n }\r\n this.BoardProcessOption = undefined;\r\n }\r\n if (this.UseBoardProcessOption && sbrs.length > 0)\r\n {\r\n let cname = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName];\r\n let rname = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName];\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = cname;\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = rname;\r\n br.BoardProcessOption[EBoardKeyList.Mat] = sbrs[0].BoardProcessOption[EBoardKeyList.Mat];\r\n br.BoardProcessOption[EBoardKeyList.BrMat] = sbrs[0].BoardProcessOption[EBoardKeyList.BrMat];\r\n br.BoardProcessOption[EBoardKeyList.Color] = sbrs[0].BoardProcessOption[EBoardKeyList.Color];\r\n }\r\n\r\n this.UseBoardProcessOption = false;\r\n }\r\n\r\n let oldBrss: [Board[], Board[], Board[]] = [[], [], []];\r\n let refBr: Board;\r\n let minSealed: string;\r\n\r\n for (let id of this.Objects)\r\n {\r\n let b = id.Object as Board;\r\n if (!refBr)\r\n refBr = b;\r\n oldBrss[b.BoardType].push(b);\r\n }\r\n\r\n if (refBr) minSealed = GetMinSealed(refBr.BoardProcessOption);\r\n\r\n let newBrss: [Board[], Board[], Board[]] = [[], [], []];\r\n\r\n for (let b of nbrs)\r\n {\r\n newBrss[b.BoardType].push(b);\r\n }\r\n for (let i = 0; i < oldBrss.length; i++)\r\n {\r\n let oldBrs = oldBrss[i];\r\n let newBrs = newBrss[i];\r\n\r\n let oldLen = oldBrs.length;\r\n for (let j = newBrs.length; j < oldLen; j++)\r\n oldBrs[j].Erase();\r\n\r\n for (let j = 0; j < newBrs.length; j++)\r\n {\r\n if (j < oldLen)\r\n {\r\n if (j >= this.DrawCounts[i])\r\n {\r\n oldBrs[j].Erase(false);\r\n }\r\n oldBrs[j].Name = newBrs[j].Name;\r\n oldBrs[j].Position = newBrs[j].Position;\r\n oldBrs[j].Width = newBrs[j].Width;\r\n oldBrs[j].Height = newBrs[j].Height;\r\n oldBrs[j].Thickness = newBrs[j].Thickness;\r\n if (this.isChangeBigHole)\r\n {\r\n if (oldBrs[j].Name === \"底板\")\r\n {\r\n if (this._bottomOption.bigHoleDir === FaceDirection.Inside)\r\n oldBrs[j].BoardProcessOption[EBoardKeyList.BigHole] = FaceDirection.Front;\r\n else\r\n oldBrs[j].BoardProcessOption[EBoardKeyList.BigHole] = FaceDirection.Back;\r\n }\r\n else if (oldBrs[j].Name === \"顶板\")\r\n {\r\n if (this._bottomOption.bigHoleDir === FaceDirection.Front)\r\n oldBrs[j].BoardProcessOption[EBoardKeyList.BigHole] = FaceDirection.Front;\r\n else\r\n oldBrs[j].BoardProcessOption[EBoardKeyList.BigHole] = FaceDirection.Back;\r\n }\r\n }\r\n }\r\n else\r\n {\r\n if (refBr)\r\n {\r\n newBrs[j].BoardProcessOption = refBr.BoardProcessOption;\r\n this.SetBoardProcess(newBrs[j], minSealed);\r\n }\r\n this._db.ModelSpace.Append(newBrs[j]);\r\n this.Objects.push(newBrs[j].Id);\r\n }\r\n }\r\n this.DrawCounts[i] = newBrs.length;\r\n }\r\n\r\n //保持SpaceCS\r\n for (let id of this.Objects)\r\n {\r\n if (id && !id.IsErase)\r\n (id.Object as Entity).SpaceOCS = this._CacheSpaceCS;\r\n }\r\n }\r\n private SetBoardProcess(br: Board, minSealed: string)\r\n {\r\n if (br.Name === \"底板\")\r\n {\r\n if (this._bottomOption.bigHoleDir === FaceDirection.Inside)\r\n br.BoardProcessOption[EBoardKeyList.BigHole] = FaceDirection.Front;\r\n else\r\n br.BoardProcessOption[EBoardKeyList.BigHole] = FaceDirection.Back;\r\n }\r\n else if (br.Name === \"顶板\")\r\n {\r\n if (this._bottomOption.bigHoleDir === FaceDirection.Front)\r\n br.BoardProcessOption[EBoardKeyList.BigHole] = FaceDirection.Front;\r\n else\r\n br.BoardProcessOption[EBoardKeyList.BigHole] = FaceDirection.Back;\r\n }\r\n else if (br.Name.includes(\"地脚\") || br.Name.includes(\"加强条\"))\r\n {\r\n // br.BoardProcessOption.composingFace = ComposingType.Reverse;\r\n br.BoardProcessOption.bigHoleDir = FaceDirection.Back;\r\n br.BoardProcessOption.lines = LinesType.Reverse;\r\n //用薄封边\r\n br.BoardProcessOption.sealedUp = minSealed;\r\n br.BoardProcessOption.sealedDown = minSealed;\r\n br.BoardProcessOption.sealedLeft = minSealed;\r\n br.BoardProcessOption.sealedRight = minSealed;\r\n }\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.DrawCounts[0] = file.Read();\r\n this.DrawCounts[1] = file.Read();\r\n this.DrawCounts[2] = file.Read();\r\n\r\n this._topOption.type = file.Read();\r\n this._topOption.name = file.Read();\r\n this._topOption.isDraw = file.Read();\r\n this._topOption.thickness = file.Read();\r\n this._topOption.frontDist = file.Read();\r\n this._topOption.behindDistance = file.Read();\r\n this._topOption.isWrapSide = file.Read();\r\n this._topOption.useLFData = file.Read();\r\n this._topOption.leftExt = file.Read();\r\n this._topOption.rightExt = file.Read();\r\n this._topOption.offset = file.Read();\r\n if (ver === 1 && typeof this._topOption.offset === \"string\")\r\n this._topOption.offset = parseFloat(this._topOption.offset) ?? 0;\r\n\r\n this._bottomOption.type = file.Read();\r\n this._bottomOption.name = file.Read();\r\n this._bottomOption.isDraw = file.Read();\r\n this._bottomOption.thickness = file.Read();\r\n this._bottomOption.frontDist = file.Read();\r\n this._bottomOption.behindDistance = file.Read();\r\n this._bottomOption.isWrapSide = file.Read();\r\n this._bottomOption.useLFData = file.Read();\r\n this._bottomOption.leftExt = file.Read();\r\n this._bottomOption.rightExt = file.Read();\r\n this._bottomOption.offset = file.Read();\r\n this._bottomOption.footThickness = file.Read();\r\n this._bottomOption.isDrawFooter = file.Read();\r\n this._bottomOption.footBehindShrink = file.Read();\r\n this._bottomOption.isDrawBackFooter = file.Read();\r\n this._bottomOption.isDrawStrengthenStrip = file.Read();\r\n this._bottomOption.footerOffset = file.Read();\r\n this._bottomOption.divCount = file.Read();\r\n if (ver > 2)\r\n this._bottomOption.bigHoleDir = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n file.Write(this.DrawCounts[0]);\r\n file.Write(this.DrawCounts[1]);\r\n file.Write(this.DrawCounts[2]);\r\n\r\n file.Write(this._topOption.type);\r\n file.Write(this._topOption.name);\r\n file.Write(this._topOption.isDraw);\r\n file.Write(this._topOption.thickness);\r\n file.Write(this._topOption.frontDist);\r\n file.Write(this._topOption.behindDistance);\r\n file.Write(this._topOption.isWrapSide);\r\n file.Write(this._topOption.useLFData);\r\n file.Write(this._topOption.leftExt);\r\n file.Write(this._topOption.rightExt);\r\n file.Write(this._topOption.offset);\r\n\r\n file.Write(this._bottomOption.type);\r\n file.Write(this._bottomOption.name);\r\n file.Write(this._bottomOption.isDraw);\r\n file.Write(this._bottomOption.thickness);\r\n file.Write(this._bottomOption.frontDist);\r\n file.Write(this._bottomOption.behindDistance);\r\n file.Write(this._bottomOption.isWrapSide);\r\n file.Write(this._bottomOption.useLFData);\r\n file.Write(this._bottomOption.leftExt);\r\n file.Write(this._bottomOption.rightExt);\r\n file.Write(this._bottomOption.offset);\r\n file.Write(this._bottomOption.footThickness);\r\n file.Write(this._bottomOption.isDrawFooter);\r\n file.Write(this._bottomOption.footBehindShrink);\r\n file.Write(this._bottomOption.isDrawBackFooter);\r\n file.Write(this._bottomOption.isDrawStrengthenStrip);\r\n file.Write(this._bottomOption.footerOffset);\r\n file.Write(this._bottomOption.divCount);\r\n file.Write(this._bottomOption.bigHoleDir);\r\n }\r\n}\r\n\r\n//获得最薄的封边\r\nfunction GetMinSealed(opt: BoardProcessOption): string\r\n{\r\n return Math.max(0, Math.min(\r\n parseFloat(opt.sealedDown) || 0,\r\n parseFloat(opt.sealedLeft) || 0,\r\n parseFloat(opt.sealedRight) || 0,\r\n parseFloat(opt.sealedUp) || 0,\r\n )).toString();\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { arrayLast } from \"../../../Common/ArrayExt\";\r\nimport { EntityUpdateWrap } from \"../../../Common/EntityUpdateWrap\";\r\nimport { ZAxis } from \"../../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../../GraphicsSystem/IntersectWith\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { CADObject } from \"../../CADObject\";\r\nimport { Curve } from \"../../Entity/Curve\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { RoomHolePolyline } from \"../../Room/Entity/Wall/Hole/RoomHolePolyline\";\r\nimport { RoomWallArc } from \"../../Room/Entity/Wall/RoomWallArc\";\r\nimport { RoomWallLine } from \"../../Room/Entity/Wall/RoomWallLine\";\r\nimport { TemplateParam } from \"../Param/TemplateParam\";\r\nimport { PositioningFixed } from \"../Positioning/PositioningFixed\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n\r\n/**\r\n * 窗:\r\n * I(窗)\r\n * L(转角窗,2面墙,4面飘窗) (左边墙?) (右边墙?) (左边窗?)\r\n * U(转角窗,2面墙,6面飘窗) (左边墙?) (右边墙?)\r\n *\r\n * 对于这种转角窗 需要生成一个V型的实体来补一下\r\n *\r\n * 圆弧窗?\r\n *\r\n * 参数:\r\n *\r\n * 窗框材质\r\n *\r\n * 窗台石? 台面厚度? 台面凸出? 台面左右凸出\r\n *\r\n * I 外飘 = W/2 居中\r\n * L 左外飘 右外飘\r\n * U 左外飘 中外飘 右外飘?\r\n */\r\n\r\n//窗台石默认参数\r\nconst DefaultCTSarams: [string, string, string][] = [\r\n [\"CTS\", \"窗台石?\", \"1\"],\r\n [\"CTSH\", \"窗石厚\", \"30\"],\r\n [\"CTSTC\", \"窗石凸\", \"30\"],\r\n [\"CTSZYTC\", \"左右凸出\", \"30\"],\r\n [\"WZ\", \"窗位置\", \"25\"],//在外飘未启用之前\r\n [\"HD\", \"窗厚度\", \"50\"],//在外飘未启用之前\r\n];\r\n\r\nconst DefaultIWindowParams: [string, string, string][] = [\r\n [\"WP\", \"外飘\", \"500\"],\r\n];\r\n\r\nconst DefaultLWindowParams: [string, string, string][] = [\r\n [\"ZWP\", \"左外飘\", \"500\"],\r\n [\"YWP\", \"右外飘\", \"500\"],\r\n];\r\n\r\nconst DefaultUWindowParams: [string, string, string][] = [\r\n [\"ZWP\", \"左外飘\", \"500\"],\r\n [\"MWP\", \"中外飘\", \"500\"],\r\n [\"YWP\", \"右外飘\", \"500\"],\r\n];\r\n\r\nfunction InitParam(tr: TemplateRecord, paramD: [string, string, string])\r\n{\r\n let [name, description, expr] = paramD;\r\n let param = tr.GetParam(name);\r\n if (param) return;\r\n\r\n param = new TemplateParam();\r\n param.name = name;\r\n param.expr = expr;\r\n param.value = 0;\r\n param.description = description;\r\n tr.Params.push(param);\r\n}\r\n\r\n\r\n@Factory\r\nexport class TemplateWindowRecord extends TemplateRecord\r\n{\r\n @AutoRecord HoleObjectId: ObjectId<RoomHolePolyline>;\r\n\r\n @AutoRecord CTSId: ObjectId;//窗台石id\r\n @AutoRecord LeftIsWall = false;\r\n @AutoRecord RightIsWall = false;\r\n\r\n @AutoRecord WindowLogo: string;\r\n @AutoRecord LeftWindowLogo: string;\r\n @AutoRecord RightWindowLogo: string;\r\n\r\n @AutoRecord LeftWindowTemplateId: string;//飘窗左侧窗\r\n @AutoRecord RightWindowTemplateId: string;//飘窗右侧窗\r\n\r\n constructor()\r\n {\r\n super();\r\n this.name = \"户型窗根节点\";\r\n }\r\n\r\n InitHoleParams()\r\n {\r\n let hole = this.HoleObjectId?.Object;\r\n if (!hole) return;\r\n\r\n //初始化窗台石参数\r\n for (let p of DefaultCTSarams) InitParam(this, p);\r\n\r\n let holePtsCount = hole.PointsCount;\r\n if (holePtsCount === 2)\r\n {\r\n for (let p of DefaultIWindowParams) InitParam(this, p);\r\n }\r\n else if (holePtsCount === 3)\r\n {\r\n for (let p of DefaultLWindowParams) InitParam(this, p);\r\n }\r\n else if (holePtsCount === 4)\r\n {\r\n for (let p of DefaultUWindowParams) InitParam(this, p);\r\n }\r\n return this;\r\n }\r\n\r\n set WpDist(v: number[])\r\n {\r\n let count = this.HoleObjectId?.Object?.PointsCount;\r\n if (!count) return;\r\n\r\n if (count === 2)\r\n this.GetParam(\"WP\").expr = v[0];\r\n else if (count === 3)\r\n {\r\n this.GetParam(\"ZWP\").expr = v[0];\r\n this.GetParam(\"YWP\").expr = v[1];\r\n }\r\n else\r\n {\r\n this.GetParam(\"ZWP\").expr = v[0];\r\n this.GetParam(\"MWP\").expr = v[1];\r\n this.GetParam(\"YWP\").expr = v[2];\r\n }\r\n }\r\n\r\n get WpDists(): number[]\r\n {\r\n let hole = this.HoleObjectId?.Object;\r\n if (!hole) return;\r\n\r\n let wpdists: number[] = [];\r\n\r\n let walls = hole.FakerWalls;\r\n if (walls.length === 1)\r\n {\r\n let wp = this.GetParam(\"WP\").value as number;\r\n wpdists.push(wp);\r\n }\r\n else if (walls.length === 2)\r\n {\r\n let zwp = this.GetParam(\"ZWP\").value as number;\r\n let ywp = this.GetParam(\"YWP\").value as number;\r\n\r\n wpdists.push(zwp, ywp);\r\n }\r\n else if (walls.length === 3)\r\n {\r\n let zwp = this.GetParam(\"ZWP\").value as number;\r\n let mwp = this.GetParam(\"MWP\").value as number;\r\n let ywp = this.GetParam(\"YWP\").value as number;\r\n\r\n wpdists.push(zwp, mwp, ywp);\r\n }\r\n return wpdists;\r\n }\r\n\r\n protected override async Update()\r\n {\r\n super.Update();\r\n\r\n let hole = this.HoleObjectId?.Object;\r\n if (!hole) return;\r\n\r\n let ctsParam = this.GetParam(\"CTS\");\r\n\r\n //#region 计算窗台石轮廓\r\n let ctstc = this.GetParam(\"CTSTC\").value as number;//窗台石凸出\r\n let ctszytc = this.GetParam(\"CTSZYTC\").value as number;//窗台石左右凸出\r\n\r\n let wpdists = this.WpDists;\r\n\r\n let polyline = hole.GetWpRegion(wpdists, ctstc, ctszytc);\r\n if (ctsParam.value)//1 使用窗台石?\r\n {\r\n // Draw(polyline);\r\n }\r\n\r\n EntityUpdateWrap(hole, () =>\r\n {\r\n hole.WpDist = wpdists;\r\n hole.WpLeftWall = this.LeftIsWall;\r\n hole.WpRightWall = this.RightIsWall;\r\n });\r\n\r\n let windowWidth = this.GetParam(\"HD\").value as number ?? 50;\r\n\r\n if (wpdists.every(d => d === 0))//没有外飘\r\n {\r\n let wzParam = this.GetParam(\"WZ\");\r\n\r\n let fakerWalls = hole.FakerWalls;\r\n if (wzParam.value !== 0)\r\n {\r\n fakerWalls = fakerWalls.map(w => w.GetOffsetCurves(wzParam.value as number)[0] as any);\r\n\r\n //窗户相交最近点\r\n const getMinDistPoint = (pts: Vector3[], curve: Vector3) =>\r\n {\r\n let pt: Vector3 = pts[0];\r\n let length = curve.distanceTo(pt);\r\n for (let y = 1; y < pts.length; y++)\r\n {\r\n if (curve.distanceTo(pts[y]) < length)\r\n pt = pts[y];\r\n }\r\n return pt;\r\n };\r\n\r\n for (let i = 0; i < fakerWalls.length - 1; i++)\r\n {\r\n let pre = fakerWalls[i];\r\n let next = fakerWalls[i + 1];\r\n\r\n //直线墙分裂后画L型墙导致无交点,这里修复它.\r\n let ipts = pre.IntersectWith(next, IntersectOption.ExtendBoth);\r\n if (ipts.length === 0)\r\n ipts.push(pre.EndPoint);\r\n\r\n let pt = getMinDistPoint(ipts, pre.EndPoint);\r\n\r\n pre.EndPoint = pt;\r\n next.StartPoint = pt;\r\n }\r\n\r\n for (let w of fakerWalls)\r\n {\r\n if (w instanceof RoomWallLine)\r\n w.UpdateOCSToMinBox();\r\n }\r\n }\r\n\r\n for (let i = 0; i < this.Children.length; i++)\r\n {\r\n if (i > hole.PointsCount) break;\r\n\r\n let wall = fakerWalls[i];\r\n\r\n let ctemplate = this.Children[i].Object as TemplateRecord;\r\n\r\n if (!ctemplate) continue;\r\n\r\n let pos = new PositioningFixed;\r\n pos.SpaceCS = wall.OCS;\r\n pos.SpaceSize = new Vector3(wall.Length, windowWidth, wall.Height);\r\n ctemplate.Positioning = pos;\r\n }\r\n }\r\n else\r\n {\r\n //根据外飘偏移\r\n let wpCurves: Curve[] = [];\r\n for (let i = 0; i < hole.FakerWalls.length; i++)\r\n {\r\n let w = hole.FakerWalls[i] as (RoomWallLine | RoomWallArc);\r\n let d = wpdists[i];//外飘距离\r\n if (w instanceof RoomWallArc)\r\n wpCurves.push(w.GetOffsetCurves((w.Thickness * 0.5 + d) * (w.IsClockWise ? -1 : 1))[0]);\r\n else\r\n wpCurves.push(w.GetOffsetCurves(-(w.Thickness * 0.5 + d))[0]);\r\n }\r\n //求交连接\r\n for (let i = 1; i < wpCurves.length; i++)\r\n {\r\n let pre = wpCurves[i - 1];\r\n let now = wpCurves[i];\r\n let iPt = pre.IntersectWith(now, IntersectOption.ExtendBoth)[0];\r\n if (!iPt) continue;//直线墙打断后支持L飘窗绘制\r\n pre.EndPoint = iPt;\r\n now.StartPoint = iPt;\r\n }\r\n\r\n //左侧非墙\r\n let templateIndex = 0;\r\n if (!this.LeftIsWall)\r\n {\r\n templateIndex++;\r\n\r\n let sp = hole.LidCurves[0].StartPoint.setZ(hole.Z);\r\n let x = hole.LidCurves[0].GetFirstDeriv(0).normalize().negate();\r\n let z = ZAxis;\r\n let y = new Vector3().crossVectors(ZAxis, x);\r\n\r\n let tr = this.Children[0].Object as TemplateRecord;\r\n if (!tr) return;\r\n\r\n let pos = new PositioningFixed;\r\n pos.SpaceCS = new Matrix4().makeBasis(x, y, z).setPosition(sp);\r\n pos.SpaceSize = new Vector3(wpdists[0], windowWidth, hole.Height);\r\n tr.Positioning = pos;\r\n }\r\n\r\n for (let i = 0; i < wpCurves.length; i++)\r\n {\r\n let c = wpCurves[i];\r\n let tr = this.Children[templateIndex]?.Object as TemplateRecord;\r\n if (!tr) return;\r\n\r\n let sp = c.StartPoint;\r\n let x = c.GetFirstDeriv(0).normalize();\r\n let z = ZAxis;\r\n let y = new Vector3().crossVectors(ZAxis, x);\r\n\r\n let pos = new PositioningFixed;\r\n pos.SpaceCS = new Matrix4().makeBasis(x, y, z).setPosition(sp);\r\n pos.SpaceSize = new Vector3(c.Length, windowWidth, hole.Height);\r\n tr.Positioning = pos;\r\n\r\n templateIndex++;\r\n }\r\n\r\n if (!this.RightIsWall && arrayLast(wpdists) > 0)\r\n {\r\n let tr = this.Children[templateIndex]?.Object as TemplateRecord;\r\n if (!tr) return;\r\n\r\n let sp = arrayLast(wpCurves).EndPoint;\r\n let w = arrayLast(hole.FakerWalls);\r\n let x = w.EndPoint.sub(sp).normalize();\r\n let z = ZAxis;\r\n let y = new Vector3().crossVectors(ZAxis, x);\r\n\r\n let pos = new PositioningFixed;\r\n pos.SpaceCS = new Matrix4().makeBasis(x, y, z).setPosition(sp);\r\n pos.SpaceSize = new Vector3(arrayLast(wpdists), windowWidth, hole.Height);\r\n tr.Positioning = pos;\r\n }\r\n }\r\n }\r\n\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n override ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n\r\n if (ver > 1)\r\n {\r\n let wallFlag = file.Read() as number;\r\n this.LeftIsWall = (wallFlag & 1) === 1;\r\n this.RightIsWall = (wallFlag & 2) === 2;\r\n }\r\n if (ver > 2)\r\n this.HoleObjectId = file.ReadObjectId() as any;\r\n\r\n if (ver > 3)\r\n {\r\n this.WindowLogo = file.Read();\r\n this.LeftWindowLogo = file.Read();\r\n this.RightWindowLogo = file.Read();\r\n this.LeftWindowTemplateId = file.Read();\r\n this.RightWindowTemplateId = file.Read();\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(4);\r\n super.WriteFile(file);\r\n\r\n let wallFlag = 0;\r\n if (this.LeftIsWall) wallFlag = 1;\r\n if (this.RightIsWall) wallFlag += 2;\r\n\r\n file.Write(wallFlag);\r\n\r\n file.WriteObjectId(this.HoleObjectId);\r\n\r\n file.Write(this.WindowLogo);\r\n file.Write(this.LeftWindowLogo);\r\n file.Write(this.RightWindowLogo);\r\n file.Write(this.LeftWindowTemplateId);\r\n file.Write(this.RightWindowTemplateId);\r\n }\r\n\r\n //局部撤销\r\n override ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { EBoardKeyList } from \"../../Common/BoardKeyList\";\r\nimport { Singleton } from \"../../Common/Singleton\";\r\nimport { safeEval } from \"../../Common/eval\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { BoardType } from \"../../DatabaseServices/Entity/BoardInterface\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { IHighSealedItem } from \"../../UI/Store/OptionInterface/IHighSealedItem\";\r\nimport { EFullDir, EFullType, EWRackArrayType, IWineRackOption } from \"../../UI/Store/WineRackInterface\";\r\nimport { DrillType, FaceDirection } from \"../DrawDrilling/DrillType\";\r\n\r\nexport const SIN45 = Math.sin(Math.PI / 4);\r\n\r\nexport class DrawWineRackTool extends Singleton\r\n{\r\n private _config: IWineRackOption;\r\n protected space: ISpaceParse;\r\n public boardlist: Board[] = [];\r\n get Config()\r\n {\r\n return this._config;\r\n }\r\n Parse(space: ISpaceParse, config: IWineRackOption)\r\n {\r\n this._config = config;\r\n this.boardlist.length = 0;\r\n this.space = space;\r\n //处理格子深\r\n if (!config.isTotalDepth)\r\n {\r\n let depth = safeEval(config.calcDepth, { L: space.Size.x, W: space.Size.y, H: space.Size.z });;\r\n if (!isNaN(depth))\r\n {\r\n space.SpaceBox.max.setY(space.SpaceBox.min.y + depth);\r\n }\r\n }\r\n //处理前缩\r\n space.SpaceBox.min.add(new Vector3(0, config.frontCut));\r\n //左右缩\r\n space.SpaceBox.min.add(new Vector3(config.leftCut));\r\n space.SpaceBox.max.add(new Vector3(-config.rightCut));\r\n //上缩\r\n space.SpaceBox.max.add(new Vector3(0, 0, -config.topCut));\r\n }\r\n /** 拾取空间周围的板件柜名房名等信息*/\r\n protected GetBoardProcessOption(br: Board)\r\n {\r\n if (!this._config) return;//在矩形变酒格时,因为没有配置 所以导致错误\r\n //获取空间周围的板件数据\r\n if (this.space.Boards.length > 0 && this._config.useBoardProcessOption)\r\n {\r\n let refProcessData = this.space.Boards[0].BoardProcessOption;\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = refProcessData[EBoardKeyList.RoomName];\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = refProcessData[EBoardKeyList.CabinetName];\r\n br.BoardProcessOption[EBoardKeyList.Mat] = refProcessData[EBoardKeyList.Mat];\r\n br.BoardProcessOption[EBoardKeyList.BrMat] = refProcessData[EBoardKeyList.BrMat];\r\n br.BoardProcessOption[EBoardKeyList.Color] = refProcessData[EBoardKeyList.Color];\r\n }\r\n else\r\n {\r\n const { roomName, cabinetName, boardMatName, material, color } = this._config;\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = roomName;\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = cabinetName;\r\n br.BoardProcessOption[EBoardKeyList.Mat] = material;\r\n br.BoardProcessOption[EBoardKeyList.BrMat] = boardMatName;\r\n br.BoardProcessOption[EBoardKeyList.Color] = color;\r\n }\r\n }\r\n /**分析高级封边数据 */\r\n protected ParseHighSealing(br: Board, leftSealed: number, rightSealed: number, topSealed: number, downSealed: number, isLeft: boolean)\r\n {\r\n this.GetBoardProcessOption(br);\r\n let cu = br.ContourCurve;\r\n br.BoardProcessOption.sealedLeft = leftSealed.toString();\r\n br.BoardProcessOption.sealedRight = rightSealed.toString();\r\n br.BoardProcessOption.sealedUp = topSealed.toString();\r\n br.BoardProcessOption.sealedDown = downSealed.toString();\r\n\r\n let sizes = [...new Set([downSealed, rightSealed, topSealed, leftSealed])];\r\n let downSeal = {\r\n size: downSealed, color: sizes.indexOf(downSealed) + 1\r\n };\r\n let rigthSeal = {\r\n size: rightSealed, color: sizes.indexOf(rightSealed) + 1\r\n };\r\n let topSeal = { size: topSealed, color: sizes.indexOf(topSealed) + 1 };\r\n let leftSeal = { size: leftSealed, color: sizes.indexOf(leftSealed) + 1 };\r\n\r\n let highSeals: IHighSealedItem[] = [downSeal];\r\n if (isLeft)\r\n {\r\n let leftSealNoSize = { size: 0, color: sizes.indexOf(leftSealed) + 1 };\r\n highSeals.push(rigthSeal, topSeal);\r\n for (let i = 3; i <= cu.EndParam - 1; i++)\r\n {\r\n if ((i - 3) % 4 === 0)\r\n highSeals.push(leftSeal);\r\n else\r\n highSeals.push(leftSealNoSize);\r\n }\r\n }\r\n else\r\n {\r\n let rightSealNoSize = { size: 0, color: sizes.indexOf(rightSealed) + 1 };\r\n for (let i = 1; i <= cu.EndParam - 3; i++)\r\n {\r\n if ((i - 1) % 4 === 0)\r\n highSeals.push(rigthSeal);\r\n else\r\n highSeals.push(rightSealNoSize);\r\n }\r\n highSeals.push(topSeal, leftSeal);\r\n }\r\n br.BoardProcessOption.highSealed = highSeals;\r\n br.BoardProcessOption.drillType = DrillType.None;\r\n br.BoardProcessOption.highDrill.fill(DrillType.None);\r\n\r\n }\r\n /**补板 */\r\n protected AddLayerOrVerticalBoard(actWidth: number, actHeight: number)\r\n {\r\n const config = this.Config;\r\n const size = this.space.Size;\r\n let isDrawLy = false;\r\n //是否补层板\r\n if (config.isDrawLy && (config.arrayType === EWRackArrayType.Fixed || config.fullType === EFullType.ByWidth))\r\n {\r\n isDrawLy = true;\r\n\r\n let length = actWidth;\r\n let width = size.y + config.frontCut;\r\n let position = this.space.SpaceBox.min.clone();\r\n\r\n if (config.arrayType === EWRackArrayType.Fixed)\r\n {\r\n if (config.fullDir === EFullDir.Right)\r\n {\r\n length += config.rightCut;\r\n position.add(new Vector3(size.x + config.rightCut, -config.frontCut, actHeight + config.topCut));\r\n }\r\n else\r\n {\r\n length += config.leftCut;\r\n position.add(new Vector3(actWidth, -config.frontCut, actHeight + config.topCut));\r\n }\r\n }\r\n else\r\n {\r\n length += (config.leftCut + config.rightCut);\r\n position.add(new Vector3(actWidth + config.rightCut, -config.frontCut, actHeight + config.topCut));\r\n }\r\n //补板跟随\r\n if (config.followNarrow)\r\n {\r\n //处理前缩\r\n position.add(new Vector3(0, config.frontCut));\r\n width -= config.frontCut;\r\n }\r\n let br = Board.CreateBoard(length, width, config.brThick2);\r\n this.GetBoardProcessOption(br);\r\n br.BoardProcessOption.bigHoleDir = FaceDirection.Back;\r\n br.Position = position;\r\n br.ApplyMatrix(this.space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n if (config.isDrawVer && (config.arrayType === EWRackArrayType.Fixed || config.fullType === EFullType.ByHeight))\r\n {\r\n let len = actHeight + config.topCut;\r\n if (isDrawLy)\r\n len += config.brThick2;\r\n\r\n let br = Board.CreateBoard(len, size.y + config.frontCut, config.brThick2, BoardType.Vertical);\r\n\r\n let position = this.space.SpaceBox.min.clone();\r\n\r\n if (config.fullDir === EFullDir.Right)\r\n position.x += size.x - actWidth - config.brThick2;\r\n else\r\n {\r\n br.BoardProcessOption.bigHoleDir = FaceDirection.Back;\r\n position.x += actWidth;\r\n }\r\n //补板跟随\r\n if (config.followNarrow)\r\n {\r\n br.WriteAllObjectRecord();\r\n position.y += config.frontCut;\r\n br.Width -= config.frontCut;\r\n }\r\n\r\n //这里要跟外面平\r\n position.y -= config.frontCut;\r\n\r\n this.GetBoardProcessOption(br);\r\n br.Position = position;\r\n br.ApplyMatrix(this.space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n }\r\n}\r\n","import { Matrix4, Vector2, Vector3 } from \"three\";\r\nimport { arrayLast, arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { MakeMirrorMtx } from \"../../Common/Matrix4Utils\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { BoardType } from \"../../DatabaseServices/Entity/BoardInterface\";\r\nimport { Line } from \"../../DatabaseServices/Entity/Line\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2, MoveMatrix, XAxis, YAxis, ZAxis, equaln, equalv3, isParallelTo, polar } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { EFullDir, EFullType, EWRackArrayType, EWineRackStyle, IR2WROption, IWineRackOption } from \"../../UI/Store/WineRackInterface\";\r\nimport { DrawWineRackTool, SIN45 } from \"./DrawWinRackTool\";\r\n\r\nexport interface IWineRackData\r\n{\r\n basePt: Vector3;\r\n brLength: number;\r\n\r\n}\r\nexport interface IParsePlRes\r\n{\r\n isOk: boolean;\r\n isLeft?: boolean;\r\n pl?: Polyline;\r\n length?: number;\r\n matInv?: Matrix4;\r\n basePt?: Vector3;\r\n thickness?: number;\r\n isVer?: boolean;\r\n isRo?: boolean;\r\n}\r\n\r\ninterface GetWineRackDataOption\r\n{\r\n width: number,\r\n height: number,\r\n gripWidth: number,\r\n brThick: number,\r\n widthCount: number,\r\n heightCount: number,\r\n lWRDataList: IWineRackData[],\r\n rWRDataList: IWineRackData[],\r\n}\r\nexport const R2WRTolerance = 1e-3;\r\n\r\n/**\r\n * 斜酒格\r\n */\r\nexport class DrawObliqueWineRackTool extends DrawWineRackTool\r\n{\r\n Parse(space: ISpaceParse, config: IWineRackOption)\r\n {\r\n super.Parse(space, config);\r\n const size = space.Size;\r\n const spaceHeight = size.z;\r\n const spaceWidth = size.x;\r\n const ptMid = new Vector3(0.5 * size.x, size.z / 2, 0);\r\n let mirrorMtx: Matrix4;\r\n if (config.fullType === EFullType.ByWidth)\r\n mirrorMtx = MakeMirrorMtx(YAxis, ptMid);\r\n else\r\n mirrorMtx = MakeMirrorMtx(XAxis, ptMid);\r\n\r\n ptMid.set(0.5 * size.x, size.z / 2, 0);\r\n polar(ptMid, Math.PI * 0.75, -config.boardThick);\r\n\r\n if (config.isFull && config.arrayType !== EWRackArrayType.Fixed)\r\n {\r\n switch (config.fullType)\r\n {\r\n case EFullType.ByHeight:\r\n this.CalGridWidth(spaceHeight);\r\n break;\r\n case EFullType.ByWidth:\r\n this.CalGridWidth(spaceWidth);\r\n break;\r\n case EFullType.Symmetry:\r\n this.CalGridWidth(spaceHeight);\r\n this.CalGridWidth(spaceWidth);\r\n default:\r\n break;\r\n }\r\n\r\n let rectPl = new Polyline().Rectangle(spaceWidth, spaceHeight);\r\n let gripWidth = config.boardThick + config.gripWidth;\r\n\r\n let retPls: Polyline[] = [];\r\n let pls1 = this.CalculationRectPolylineArr(ptMid, rectPl, gripWidth);\r\n polar(ptMid, Math.PI * 0.75, -gripWidth);\r\n let pls2 = this.CalculationRectPolylineArr(ptMid, rectPl, -gripWidth);\r\n retPls.push(...pls1, ...pls2);\r\n\r\n for (let pl of [...pls1, ...pls2])\r\n {\r\n let plClone = pl.Clone();\r\n plClone.ApplyMatrix(mirrorMtx);\r\n retPls.push(plClone);\r\n }\r\n this.DrawBoardFormPolyLine(retPls);\r\n }\r\n else\r\n {\r\n let lWRData: IWineRackData[] = [];\r\n let rWRData: IWineRackData[] = [];\r\n let res: { width: number, height: number; };\r\n let wineRackStyle = config.wineRackStyle;\r\n switch (config.arrayType)\r\n {\r\n case EWRackArrayType.ByWidth:\r\n res = this.CalcWineRackDataByWidth(lWRData, rWRData, wineRackStyle);\r\n break;\r\n case EWRackArrayType.ByCount:\r\n res = this.CalcWineRackDataByCount(lWRData, rWRData, wineRackStyle);\r\n break;\r\n case EWRackArrayType.Fixed:\r\n res = this.CalcWineRackDataByFixed(lWRData, rWRData, wineRackStyle);\r\n }\r\n let pls: Polyline[] = [];\r\n for (let data of lWRData)\r\n {\r\n pls.push(this.CreatePolylineByWineData(data));\r\n }\r\n\r\n rWRData.sort((d1, d2) =>\r\n {\r\n if (equaln(d1.basePt.x, d2.basePt.x))\r\n {\r\n return d1.basePt.y - d2.basePt.y;\r\n }\r\n else\r\n return d2.basePt.x - d1.basePt.x;\r\n });\r\n\r\n for (let data of rWRData)\r\n {\r\n pls.push(this.CreatePolylineByWineData(data, false));\r\n }\r\n\r\n //补板\r\n this.AddLayerOrVerticalBoard(res.width, res.height);\r\n\r\n this.DrawBoardFormPolyLine(pls, res.width);\r\n }\r\n }\r\n\r\n private CalGridWidth(length: number)\r\n {\r\n const count = (length - this.Config.boardThick * 2 / SIN45) / ((this.Config.boardThick + this.Config.gripWidth) * Math.sqrt(2));\r\n this.Config.gripWidth = ((length - this.Config.boardThick / SIN45) / Math.floor(count)) / Math.sqrt(2) - this.Config.boardThick;\r\n }\r\n /**获取矩形多段线的4个对角点并判断是否有效 */\r\n private GetRect4Pts(xline: Line, rectPl: Polyline, p1: Vector3, p2: Vector3, p3: Vector3, p4: Vector3)\r\n {\r\n let res1 = this.GetRect2Pts(xline, rectPl, p1, p2);\r\n let vec = polar(new Vector3(), Math.PI * 0.75, this.Config.boardThick);\r\n xline.ApplyMatrix(MoveMatrix(vec));\r\n let res2 = this.GetRect2Pts(xline, rectPl, p3, p4);\r\n return res1 && res2 && p1.distanceTo(p2) > this.Config.gripWidth;\r\n }\r\n /**获取矩形一边的点 */\r\n private GetRect2Pts(xline: Line, rectPl: Polyline, p1: Vector3, p2: Vector3)\r\n {\r\n let intPts = xline.IntersectWith(rectPl, IntersectOption.ExtendBoth);\r\n if (intPts.length === 2)\r\n {\r\n p1.copy(intPts[0]);\r\n p2.copy(intPts[1]);\r\n if (p1.x > p2.x)\r\n {\r\n let tmpPt = p2.clone();\r\n p2.copy(p1);\r\n p1.copy(tmpPt);\r\n }\r\n return true;\r\n }\r\n return false;\r\n }\r\n /**按格子宽获取酒格数据 */\r\n private CalcWineRackDataByWidth(lWRDataList: IWineRackData[], rWRDataList: IWineRackData[], wineRackStyle: EWineRackStyle)\r\n {\r\n let size = this.space.Size;\r\n let Config = this.Config;\r\n\r\n let widthCount = 0, heightCount = 0, gripWidth = 0;\r\n let width = size.x - 2 * Config.boardThick * SIN45;\r\n let height = size.z - 2 * Config.boardThick * SIN45;\r\n if (Config.fullType === EFullType.ByWidth)\r\n {\r\n widthCount = Math.floor(width / ((Config.gripWidth + Config.boardThick) * SIN45));\r\n gripWidth = width / widthCount;\r\n\r\n //处理锁定个数\r\n if (!Config.isLock)\r\n {\r\n heightCount = Math.floor(height / gripWidth);\r\n }\r\n else\r\n {\r\n heightCount = Math.floor(Config.heightCount * 2);\r\n }\r\n height = heightCount * gripWidth + 2 * Config.boardThick * SIN45;\r\n width = size.x;\r\n }\r\n else\r\n {\r\n heightCount = Math.floor(height / ((Config.gripWidth + Config.boardThick) * SIN45));\r\n gripWidth = height / heightCount;\r\n\r\n //处理锁定个数\r\n\r\n if (!Config.isLock)\r\n {\r\n widthCount = Math.floor(width / gripWidth);\r\n }\r\n else\r\n {\r\n widthCount = Math.floor(Config.widthCount * 2);\r\n }\r\n\r\n width = widthCount * gripWidth + 2 * Config.boardThick * SIN45;\r\n height = size.z;\r\n }\r\n this.GetWineRackData({ width, height, gripWidth, brThick: Config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList }, wineRackStyle);\r\n return {\r\n width: width, height: height\r\n };\r\n }\r\n private CalcWineRackDataByCount(lWRDataList: IWineRackData[], rWRDataList: IWineRackData[], wineRackStyle: EWineRackStyle)\r\n {\r\n const config = this.Config;\r\n const size = this.space.Size;\r\n let widthCount = Math.floor(config.widthCount * 2);\r\n let heightCount = Math.floor(config.heightCount * 2);\r\n let gripWidth = (size.x - 2 * config.boardThick * SIN45) / widthCount;\r\n let width = 0;\r\n let height = 0;\r\n\r\n if (config.fullType === EFullType.ByWidth)\r\n {\r\n gripWidth = (size.x - 2 * config.boardThick * SIN45) / widthCount;\r\n width = size.x;\r\n if (!config.isLock) //如果没锁定个数\r\n {\r\n heightCount = Math.floor((size.z - 2 * config.boardThick * SIN45) / gripWidth + 1e-3);\r\n }\r\n height = heightCount * gripWidth + 2 * config.boardThick * SIN45;\r\n }\r\n else\r\n {\r\n gripWidth = (size.z - 2 * config.boardThick * SIN45) / heightCount;\r\n if (!config.isLock)//如果没有锁定个数\r\n {\r\n widthCount = Math.floor((size.x - 2 * config.boardThick * SIN45) / gripWidth);\r\n }\r\n width = widthCount * gripWidth + 2 * config.boardThick * SIN45;\r\n height = size.z;\r\n }\r\n\r\n this.GetWineRackData({ width, height, gripWidth, brThick: config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList }, wineRackStyle);\r\n return {\r\n width: width, height: height\r\n };\r\n }\r\n CalcWineRackDataByFixed(lWRDataList: IWineRackData[], rWRDataList: IWineRackData[], wineRackStyle: EWineRackStyle)\r\n {\r\n const config = this.Config;\r\n let widthCount = Math.floor(config.widthCount * 2);\r\n let heightCount = Math.floor(config.heightCount * 2);\r\n let gripWidth = config.gripWidth * SIN45;\r\n let width = widthCount * gripWidth + 2 * config.boardThick * SIN45;\r\n let height = heightCount * gripWidth + 2 * config.boardThick * SIN45;\r\n\r\n this.GetWineRackData({ width, height, gripWidth, brThick: config.boardThick, widthCount, heightCount, lWRDataList, rWRDataList }, wineRackStyle);\r\n return {\r\n width: width, height: height\r\n };\r\n }\r\n /**构建酒格正面多段线组*/\r\n CalculationRectPolylineArr(ptMid: Vector3, rectPl: Polyline, gripWidth: number)\r\n {\r\n let pls: Polyline[] = [];\r\n let pt = ptMid.clone();\r\n while (true)\r\n {\r\n let pl = this.CalculationRectPolyline(pt, rectPl);\r\n if (!pl) break;\r\n\r\n polar(pt, Math.PI * 0.75, gripWidth);\r\n pls.push(pl);\r\n }\r\n return pls;\r\n }\r\n /**构建酒格正面多段线*/\r\n CalculationRectPolyline(pt: Vector3, rectPl: Polyline)\r\n {\r\n const xline = new Line(pt, pt.clone().add(new Vector3(1, 1)));\r\n const p1 = new Vector3();\r\n const p2 = new Vector3();\r\n const p3 = new Vector3();\r\n const p4 = new Vector3();\r\n if (!this.GetRect4Pts(xline, rectPl, p1, p2, p3, p4))\r\n {\r\n return null;\r\n }\r\n\r\n let minDis = this.Config.boardThick / Math.sqrt(2);\r\n //如果左边停靠\r\n if (p1.x < minDis)\r\n {\r\n p1.copy(polar(p3.clone(), Math.PI * -0.25, this.Config.boardThick));\r\n }\r\n else\r\n {\r\n p3.copy(polar(p1.clone(), Math.PI * 0.75, this.Config.boardThick));\r\n }\r\n //右边点 上面停靠\r\n let size = this.space.Size;\r\n if (p2.y > size.z - minDis)\r\n {\r\n p2.copy(polar(p4.clone(), -Math.PI * 0.25, this.Config.boardThick));\r\n }\r\n else\r\n {\r\n p4.copy(polar(p2.clone(), Math.PI * 0.75, this.Config.boardThick));\r\n }\r\n\r\n if (p1.distanceTo(p2) < (this.Config.gripWidth + this.Config.boardThick * 1.8) && p1.y > this.Config.boardThick * 2)\r\n return null;\r\n\r\n let lineData = [p1, p2, p4, p3].map(p =>\r\n {\r\n return {\r\n pt: AsVector2(p),\r\n bul: 0\r\n };\r\n });\r\n let pl = new Polyline(lineData);\r\n pl.CloseMark = true;\r\n return pl;\r\n }\r\n\r\n GetWineRackData(option: GetWineRackDataOption, wineRackStyle: EWineRackStyle)\r\n {\r\n switch (wineRackStyle)\r\n {\r\n case EWineRackStyle.Semilattice:\r\n this.GetWineRackDataPreferentialSemilattice(option);\r\n break;\r\n case EWineRackStyle.WholeLattice:\r\n this.GetWineRackDataPreferentialWholeLattice(option);\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * 获取酒格数据半格优先\r\n * @param {{width: number 总宽\r\n * height: number 总高\r\n * gripWidth: number 半格宽\r\n * brThick: number 板厚\r\n * widthCount: number 半格宽数量\r\n * heightCount: number 半格高数量\r\n * lWRDataList: IWineRackData[], 往左倒\r\n * rWRDataList: IWineRackData[], 往右倒\r\n * }} option\r\n * @memberof DrawObliqueWineRackTool\r\n */\r\n GetWineRackDataPreferentialSemilattice(option: {\r\n width: number,\r\n height: number,\r\n gripWidth: number,\r\n brThick: number,\r\n widthCount: number,\r\n heightCount: number,\r\n lWRDataList: IWineRackData[], //往左倒\r\n rWRDataList: IWineRackData[], //往右倒\r\n })\r\n {\r\n const { width, height, gripWidth, brThick, widthCount, heightCount, lWRDataList, rWRDataList } = option;\r\n /** 板厚对角的一半 */\r\n const brThickDiagonal = brThick * SIN45;\r\n\r\n for (let i = 0, Lenght = Math.floor((widthCount + 1) / 2); i < Lenght; i++)\r\n {\r\n let p1 = brThickDiagonal + gripWidth * i * 2;\r\n let data = {\r\n basePt: new Vector3(p1, 0, 0),\r\n brLength: 0\r\n };\r\n if (width - p1 >= height - brThickDiagonal)\r\n {\r\n data.brLength = (height - brThickDiagonal) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (width - p1) / SIN45;\r\n }\r\n rWRDataList.push(data);\r\n }\r\n\r\n for (let i = 0, Lenght = Math.floor((heightCount - 1) / 2); i < Lenght; i++)\r\n {\r\n let p1 = (i + 1) * gripWidth * 2;\r\n let data = {\r\n basePt: new Vector3(brThickDiagonal, p1, 0),\r\n brLength: 0\r\n };\r\n if (height - p1 > width - brThickDiagonal)\r\n {\r\n data.brLength = (width - brThickDiagonal) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1 - brThickDiagonal) / SIN45;\r\n }\r\n rWRDataList.push(data);\r\n }\r\n\r\n for (let i = 0, flag = true, Lenght = Math.floor((widthCount - 1) / 2); i < Lenght; i++)\r\n {\r\n let p1 = brThickDiagonal + gripWidth * (i + 1) * 2;\r\n let data = {\r\n basePt: new Vector3(p1, brThickDiagonal * 2, 0),\r\n brLength: 0\r\n };\r\n if (p1 >= height - brThickDiagonal)\r\n {\r\n if (flag && heightCount % 2 === 0)\r\n data.brLength = (height - brThickDiagonal * 2) / SIN45;\r\n else\r\n data.brLength = (height - brThickDiagonal * 3) / SIN45;\r\n flag = false;\r\n }\r\n else\r\n {\r\n data.brLength = (p1 - brThickDiagonal * 2) / SIN45;\r\n }\r\n lWRDataList.push(data);\r\n }\r\n\r\n if (widthCount % 2 === 0)\r\n {\r\n for (let i = 0, flag = true, Lenght = Math.ceil(heightCount / 2); i < Lenght; i++)\r\n {\r\n let p1 = height - gripWidth * 2 * (i - 1) - gripWidth * (heightCount % 2 === 0 ? 2 : 1);\r\n let data = {\r\n basePt: new Vector3(width - brThickDiagonal, p1, 0),\r\n brLength: 0\r\n };\r\n if (i === 0)\r\n {\r\n data.basePt = new Vector3(width, brThickDiagonal, 0);\r\n if (height === width)\r\n {\r\n data.brLength = (width - brThickDiagonal) / SIN45;\r\n flag = false;\r\n }\r\n else\r\n {\r\n data.brLength = (Math.min(width, height) - brThickDiagonal * 2) / SIN45;\r\n }\r\n }\r\n else\r\n {\r\n if (height - p1 + brThickDiagonal * 2 >= width)\r\n {\r\n if (flag)\r\n data.brLength = (width - brThickDiagonal * 2) / SIN45;\r\n else\r\n data.brLength = (width - brThickDiagonal * 3) / SIN45;\r\n flag = false;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1 - brThickDiagonal) / SIN45;\r\n }\r\n }\r\n lWRDataList.push(data);\r\n }\r\n }\r\n else\r\n {\r\n for (let i = 0, flag = true, Lenght = Math.floor(heightCount / 2); i < Lenght; i++)\r\n {\r\n let p1 = height - gripWidth * 2 * i - gripWidth * (heightCount % 2 === 0 ? 1 : 2);\r\n let data = {\r\n basePt: new Vector3(width - brThickDiagonal, p1, 0),\r\n brLength: 0\r\n };\r\n if (height - p1 + brThickDiagonal * 2 >= width)\r\n {\r\n if (flag)\r\n data.brLength = (width - brThickDiagonal * 2) / SIN45;\r\n else\r\n data.brLength = (width - brThickDiagonal * 3) / SIN45;\r\n flag = false;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1 - brThickDiagonal) / SIN45;\r\n }\r\n lWRDataList.push(data);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 获取酒格数据整格优先\r\n * @param {{width: number 总宽\r\n * height: number 总高\r\n * gripWidth: number 半格宽\r\n * brThick: number 板厚\r\n * widthCount: number 半格宽数量\r\n * heightCount: number 半格高数量\r\n * lWRDataList: IWineRackData[], //往左倒\r\n * rWRDataList: IWineRackData[], //往右倒\r\n * }} option\r\n * @memberof DrawObliqueWineRackTool\r\n */\r\n GetWineRackDataPreferentialWholeLattice(option: {\r\n width: number,\r\n height: number,\r\n gripWidth: number,\r\n brThick: number,\r\n widthCount: number,\r\n heightCount: number,\r\n lWRDataList: IWineRackData[], //往左倒\r\n rWRDataList: IWineRackData[], //往右倒\r\n })\r\n {\r\n const { width, height, gripWidth, brThick, widthCount, heightCount, lWRDataList, rWRDataList } = option;\r\n let data: IWineRackData;\r\n for (let i = 0; i < Math.floor(widthCount / 2); i++)\r\n {\r\n let p1 = gripWidth + brThick * SIN45 + gripWidth * i * 2;\r\n data = {\r\n basePt: new Vector3(p1, 0, 0),\r\n brLength: 0\r\n };\r\n if (width - p1 > height - brThick * SIN45)\r\n {\r\n data.brLength = (height - brThick * SIN45) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (width - p1) / SIN45;\r\n }\r\n rWRDataList.push(data);\r\n }\r\n for (let i = 0; i < Math.floor(heightCount / 2); i++)\r\n {\r\n let p1 = gripWidth + brThick * SIN45 + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(brThick * SIN45, p1 - brThick * SIN45, 0),\r\n brLength: 0\r\n };\r\n if (height - p1 > width - brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1) / SIN45;\r\n }\r\n rWRDataList.push(data);\r\n }\r\n for (let i = 0; i < Math.floor(widthCount / 2); i++)\r\n {\r\n let p1 = gripWidth + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(p1 + brThick * SIN45, 2 * brThick * SIN45, 0),\r\n brLength: 0\r\n };\r\n if (equaln(p1, height - brThick * SIN45 * 2))\r\n {\r\n data.brLength = (height - brThick * SIN45 * 2) / SIN45;\r\n }\r\n else if (p1 > height - brThick * SIN45 * 3)\r\n {\r\n data.brLength = (height - brThick * SIN45 * 3) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (p1 - brThick * SIN45) / SIN45;\r\n }\r\n lWRDataList.push(data);\r\n }\r\n\r\n if (widthCount % 2 === 0)\r\n {\r\n for (let i = 0; i < Math.floor(heightCount / 2); i++)\r\n {\r\n let p1 = gripWidth + 2 * brThick * SIN45 + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(width - brThick * SIN45, p1, 0),\r\n brLength: 0\r\n };\r\n if (equaln(height - p1, width - 2 * brThick * SIN45))\r\n {\r\n data.brLength = (height - p1) / SIN45;\r\n }\r\n else if (height - p1 - brThick * SIN45 > width - 2 * brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45 * 3) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1 - brThick * SIN45) / SIN45;\r\n }\r\n lWRDataList.push(data);\r\n }\r\n }\r\n else\r\n {\r\n for (let i = 0; i < Math.floor(heightCount / 2) + 1; i++)\r\n {\r\n let p1 = 0;\r\n if (i == 0)\r\n {\r\n p1 = brThick * SIN45;\r\n data = {\r\n basePt: new Vector3(width, p1, 0),\r\n brLength: 0\r\n };\r\n if (equaln(height, width, 1e-3))\r\n {\r\n data.brLength = (width - brThick * SIN45) / SIN45;\r\n }\r\n else if (height - p1 > width - 2 * brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45 * 2) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1 - brThick * SIN45) / SIN45;\r\n }\r\n }\r\n else\r\n {\r\n p1 = 2 * brThick * SIN45 + i * gripWidth * 2;\r\n data = {\r\n basePt: new Vector3(width - brThick * SIN45, p1, 0),\r\n brLength: 0\r\n };\r\n if (height - p1 > brThick)\r\n {\r\n if (equaln(height - p1, width - 2 * brThick * SIN45, 1e-3))\r\n {\r\n data.brLength = (height - p1) / SIN45;\r\n }\r\n else if (height - p1 > width - brThick * SIN45)\r\n {\r\n data.brLength = (width - brThick * SIN45 * 3) / SIN45;\r\n }\r\n else\r\n {\r\n data.brLength = (height - p1 - brThick * SIN45) / SIN45;\r\n }\r\n }\r\n else\r\n {\r\n continue;//这里需要跳出.\r\n }\r\n }\r\n lWRDataList.push(data);\r\n }\r\n }\r\n }\r\n /**根据酒格数据获取多段线 */\r\n private CreatePolylineByWineData(data: IWineRackData, isLeft = true)\r\n {\r\n let thick = this.Config.boardThick;\r\n let lineData = [\r\n {\r\n pt: new Vector2(),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(thick, 0),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(thick, data.brLength),\r\n bul: 0\r\n },\r\n {\r\n pt: new Vector2(0, data.brLength),\r\n bul: 0\r\n },\r\n ];\r\n let pl = new Polyline(lineData);\r\n pl.CloseMark = true;\r\n let mat = MoveMatrix(new Vector3(thick))\r\n .multiply(new Matrix4().makeRotationZ(0.25 * Math.PI * (isLeft ? 1 : -1)))\r\n .multiply(MoveMatrix(new Vector3(-thick)));\r\n pl.ApplyMatrix(mat)\r\n .ApplyMatrix(MoveMatrix(data.basePt.add(new Vector3(-thick))));\r\n return pl;\r\n }\r\n /**根据多段线组构建酒格 */\r\n protected DrawBoardFormPolyLine(pls: Polyline[], actualWidth?: number, config?: IR2WROption)\r\n {\r\n const leftData: IParsePlRes[] = [];\r\n const rightData: IParsePlRes[] = [];\r\n for (let pl of pls)\r\n {\r\n let data = this.ParsePolyLine(pl);\r\n if (!data.isOk)\r\n continue;\r\n if (data.isLeft)\r\n leftData.push(data);\r\n else\r\n rightData.push(data);\r\n }\r\n\r\n this.CreateBoard(leftData, rightData, actualWidth, config);\r\n this.CreateBoard(rightData, leftData, actualWidth, config);\r\n }\r\n private ParsePolyLine(pl: Polyline): IParsePlRes\r\n {\r\n if (pl.IsClose)\r\n {\r\n if (pl.EndParam !== 4)\r\n {\r\n return {\r\n isOk: false\r\n };\r\n }\r\n\r\n let pts = pl.GetStretchPoints();\r\n\r\n if (equalv3(pts[0], arrayLast(pts)))\r\n pts.pop();\r\n\r\n /*****统一初始形状\r\n * **** h\r\n * * *\r\n * 0 **** t\r\n */\r\n pts.sort((a, b) =>\r\n {\r\n if (equaln(a.y, b.y))\r\n return a.x - b.x;\r\n else\r\n return a.y - b.y;\r\n });\r\n let pts1 = pts.splice(0, 2);\r\n pts1.sort((a, b) => a.x - b.x);\r\n pts.sort((a, b) => a.distanceTo(pts1[1]) - b.distanceTo(pts1[1]));\r\n pts.unshift(...pts1);\r\n const area = pl.Area;\r\n\r\n let v1 = pts[1].clone().clone().sub(pts[0]);\r\n let v2 = arrayLast(pts).clone().sub(pts[0]);\r\n\r\n let [vecY, vecX] = v1.length() > v2.length() ? [v1, v2] : [v2, v1];\r\n\r\n let length = vecY.length();\r\n let thick = vecX.length();\r\n let mat = new Matrix4().makeBasis(vecX.normalize(), vecY.normalize(), ZAxis).setPosition(pts[0]);\r\n let matInv = new Matrix4().getInverse(mat);\r\n\r\n let bp = pts[0].clone().negate();\r\n\r\n if (equaln(length * thick, area, 5))\r\n {\r\n let an = vecY.angleTo(XAxis);\r\n\r\n if (equaln(an, Math.PI / 4, R2WRTolerance))\r\n {\r\n pts.sort((p1, p2) => p2.x - p1.x);\r\n return {\r\n isOk: true,\r\n isLeft: true,\r\n pl,\r\n length,\r\n matInv,\r\n basePt: new Vector3(pts[0].x, 0, pts[0].y),\r\n thickness: thick,\r\n isRo: true,\r\n };\r\n }\r\n else if (equaln(an, 3 * Math.PI / 4, R2WRTolerance))\r\n {\r\n pts.sort((p1, p2) => p1.y - p2.y);\r\n return {\r\n isOk: true,\r\n isLeft: false,\r\n pl,\r\n length,\r\n matInv,\r\n basePt: new Vector3(pts[0].x, 0, pts[0].y),\r\n thickness: thick,\r\n isRo: true,\r\n };\r\n }\r\n else if (isParallelTo(vecX, XAxis, R2WRTolerance))\r\n {\r\n return {\r\n isOk: true,\r\n isLeft: false,\r\n pl,\r\n length,\r\n matInv: new Matrix4().setPosition(bp),\r\n basePt: new Vector3(pts[0].x, 0, pts[0].y),\r\n thickness: thick,\r\n isVer: true,\r\n isRo: false,\r\n };\r\n }\r\n else if (isParallelTo(vecX, YAxis, R2WRTolerance))\r\n {\r\n return {\r\n isOk: true,\r\n isLeft: true,\r\n pl,\r\n length,\r\n matInv: new Matrix4().setPosition(bp),\r\n basePt: new Vector3(pts[1].x, 0, pts[1].y),\r\n thickness: thick,\r\n isRo: false,\r\n };\r\n }\r\n else\r\n {\r\n return {\r\n isOk: false\r\n };\r\n }\r\n }\r\n\r\n }\r\n return {\r\n isOk: false\r\n };\r\n }\r\n /**绘制酒格 */\r\n private CreateBoard(lData: IParsePlRes[], rData: IParsePlRes[], actualWidth?: number, cof?: IR2WROption)\r\n {\r\n if (!lData.length)\r\n return;\r\n\r\n let leftSeal: number, rightSeal: number, upSeal: number, downSeal: number, knifeRad: number;\r\n let config: IWineRackOption;\r\n if (cof)\r\n {\r\n leftSeal = cof.sealedLeft;\r\n rightSeal = cof.sealedRight;\r\n upSeal = cof.sealedUp;\r\n downSeal = cof.sealedDown;\r\n knifeRad = cof.knifeRadius;\r\n }\r\n else\r\n {\r\n config = this.Config;\r\n leftSeal = config.leftEdge;\r\n rightSeal = config.rightEdge;\r\n upSeal = config.topEdge;\r\n downSeal = config.bottomEdge;\r\n knifeRad = config.grooveLengthAdd;\r\n }\r\n\r\n for (let i = 0; i < lData.length; i++)\r\n {\r\n let d = lData[i];\r\n let dists: number[] = [];\r\n for (let d2 of rData)\r\n {\r\n let intPts = d.pl.IntersectWith(d2.pl, IntersectOption.ExtendNone);\r\n if (intPts.length === 4)\r\n {\r\n dists.push(...intPts.map(p =>\r\n {\r\n let p1 = p.applyMatrix4(d.matInv);\r\n\r\n if (!d.isRo && !d.isVer)\r\n return Math.abs(p1.x);\r\n return Math.abs(p1.y);\r\n }));\r\n }\r\n }\r\n arraySortByNumber(dists);\r\n arrayRemoveDuplicateBySort(dists, (n1, n2) => equaln(n1, n2, R2WRTolerance));\r\n\r\n let pl = this.GetPolyline(d, dists, cof);\r\n if (pl)\r\n {\r\n let br = Board.CreateBoard(1, 1, d.thickness ?? config.boardThick, d.isVer ? BoardType.Vertical : BoardType.Layer);\r\n if (d.isLeft)\r\n br.Name = \"右板\" + (lData.length - i);\r\n else\r\n br.Name = \"左板\" + (i + 1);\r\n br.ContourCurve = pl;\r\n this.ParseHighSealing(br, leftSeal, rightSeal, upSeal, downSeal, d.isLeft);\r\n br.KnifeRadius = knifeRad;\r\n if (d.isRo)\r\n br.RotateBoard(0, Math.PI / 4 * (d.isLeft ? -1 : 1), 0);\r\n br.ApplyMatrix(MoveMatrix(this.space.SpaceBox.min));\r\n br.ApplyMatrix(MoveMatrix(d.basePt));\r\n\r\n if (config && (config.fullType === EFullType.ByHeight || config.arrayType === EWRackArrayType.Fixed)\r\n && config.fullDir === EFullDir.Right)\r\n {\r\n br.ApplyMatrix(MoveMatrix(new Vector3(this.space.Size.x - (actualWidth ?? 0))));\r\n }\r\n br.ApplyMatrix(this.space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n }\r\n }\r\n /**构建酒格形状,加入齿 */\r\n private GetPolyline(data: IParsePlRes, dists: number[], cof?: IR2WROption)\r\n {\r\n let len = data.length;\r\n let isLeft = data.isLeft;\r\n\r\n const size = this.space.Size;\r\n let pl = new Polyline();\r\n pl.Rectangle(size.y, len);\r\n\r\n let addWidth: number;//槽加宽\r\n let knifeRad: number;\r\n if (cof)\r\n {\r\n addWidth = cof.addLen;\r\n knifeRad = cof.knifeRadius;\r\n }\r\n else\r\n {\r\n const config = this.Config;\r\n addWidth = config.grooveWidthAdd;\r\n knifeRad = config.grooveLengthAdd;\r\n }\r\n\r\n if (isLeft)\r\n {\r\n if (!data.isVer)\r\n {\r\n let newDist = dists.map(d => len - d);\r\n dists.length = 0;\r\n dists.push(...newDist);\r\n }\r\n }\r\n addWidth = addWidth / 2;\r\n\r\n if (dists.length % 2 === 0 && dists.length > 1)\r\n {\r\n let pts: Vector2[] = [];\r\n for (let i = 0; i < dists.length; i++)\r\n {\r\n if (i % 2 === 0)\r\n {\r\n if (isLeft)\r\n {\r\n pts.push(new Vector2(0, dists[i] + addWidth));\r\n pts.push(new Vector2(size.y / 2 + knifeRad, dists[i] + addWidth));//因为圆形刀的限制,必须加大一个刀,保证生产出来的板能够正确的卡进去\r\n }\r\n else\r\n {\r\n pts.push(new Vector2(size.y, dists[i] - addWidth));\r\n pts.push(new Vector2(size.y / 2 - knifeRad, dists[i] - addWidth));\r\n }\r\n }\r\n else\r\n {\r\n if (isLeft)\r\n {\r\n pts.push(new Vector2(size.y / 2 + knifeRad, dists[i] - addWidth));\r\n pts.push(new Vector2(0, dists[i] - addWidth));\r\n }\r\n else\r\n {\r\n pts.push(new Vector2(size.y / 2 - knifeRad, dists[i] + addWidth));\r\n pts.push(new Vector2(size.y, dists[i] + addWidth));\r\n }\r\n }\r\n }\r\n pl.AddVertexAt(isLeft ? pl.NumberOfVertices : 2, pts);\r\n }\r\n return pl;\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { BoardType } from \"../../DatabaseServices/Entity/BoardInterface\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { AsVector2, MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { ISpaceParse } from \"../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { EWRackArrayType, IWineRackOption } from \"../../UI/Store/WineRackInterface\";\r\nimport { DrawWineRackTool } from \"./DrawWinRackTool\";\r\n\r\n/**\r\n * 正酒格\r\n */\r\nexport class DrawUprightWineRackTool extends DrawWineRackTool\r\n{\r\n Parse(space: ISpaceParse, config: IWineRackOption)\r\n {\r\n super.Parse(space, config);\r\n let size = space.Size;\r\n let gripWidth = config.gripWidth;\r\n let brThick = config.boardThick;\r\n let spaceHeight = size.z;\r\n let spaceWidth = size.x;\r\n let gripHeight = gripWidth;\r\n let actualHeight = spaceHeight;\r\n let actualWidth = spaceWidth;\r\n\r\n switch (config.arrayType)\r\n {\r\n case EWRackArrayType.ByWidth:\r\n // let tempWidthCount = 0;\r\n // let tempHeightCount = 0;\r\n // if (widCount > 0 || heightCount > 0)\r\n // {\r\n // tempWidthCount = Math.floor(spaceWidth / (gripWidth + brThick));\r\n // tempHeightCount = Math.floor(spaceHeight / (gripWidth + brThick));\r\n // gripWidth = (spaceWidth - (tempWidthCount - 1) * brThick) / tempWidthCount;\r\n // gripHeight = (spaceHeight - (tempHeightCount - 1) * brThick) / tempHeightCount;\r\n // if (widCount > 0)\r\n // {\r\n // heightCount = tempHeightCount;\r\n // actualWidth = gripWidth * widCount + brThick * (widCount - 1);\r\n // }\r\n // else if (heightCount > 0)\r\n // {\r\n // widCount = tempWidthCount;\r\n // actualWidth = gripWidth * widCount + brThick * (widCount - 1);\r\n // }\r\n // }\r\n config.widthCount = Math.floor(spaceWidth / (gripWidth + brThick));\r\n config.heightCount = Math.floor(spaceHeight / (gripWidth + brThick));\r\n config.gripWidth = (spaceWidth - (config.widthCount - 1) * brThick) / config.widthCount;\r\n gripHeight = (spaceHeight - (config.heightCount - 1) * brThick) / config.heightCount;\r\n break;\r\n case EWRackArrayType.ByCount:\r\n if (config.widthCount > 0)\r\n {\r\n config.widthCount = Math.floor(config.widthCount);\r\n }\r\n else\r\n {\r\n let gk = (spaceHeight - 2 * brThick) / config.heightCount;\r\n config.widthCount = Math.floor((spaceWidth - 2 * brThick) / gk + 1e-6);\r\n }\r\n if (config.heightCount > 0)\r\n {\r\n config.heightCount = Math.floor(config.heightCount);\r\n }\r\n else\r\n {\r\n let gk = (spaceWidth - 2 * config.heightCount) / config.heightCount;\r\n config.heightCount = Math.floor((spaceHeight - 2 * brThick) / gk + 1e-6);\r\n }\r\n config.gripWidth = (spaceWidth - (config.widthCount - 1) * brThick) / config.widthCount;\r\n gripHeight = (spaceHeight - (config.heightCount - 1) * brThick) / config.heightCount;\r\n break;\r\n case EWRackArrayType.Fixed:\r\n config.widthCount = Math.floor(config.widthCount);\r\n config.heightCount = Math.floor(config.heightCount);\r\n actualWidth = gripWidth * config.widthCount + brThick * (config.widthCount - 1);\r\n actualHeight = gripWidth * config.heightCount + brThick * (config.heightCount - 1);\r\n default:\r\n break;\r\n }\r\n\r\n if (config.widthCount <= 0 || config.heightCount <= 0)\r\n throw `绘制酒格失败,酒格个数异常! 宽个数:${config.widthCount} 高个数:${config.heightCount}`;\r\n\r\n config.widthCount--;\r\n config.heightCount--;\r\n this.BuildBoard(gripHeight, actualWidth, actualHeight, space);\r\n // this.AddLayerOrVerticalBoard(actualWidth, actualHeight);\r\n }\r\n BuildBoard(gripHeight: number, spaceWidth: number, spaceHeight: number, space: ISpaceParse)\r\n {\r\n const config = this.Config;\r\n let min = space.SpaceBox.min;\r\n let size = space.Size;\r\n let brThick = config.boardThick;\r\n\r\n let verBr = Board.CreateBoard(spaceHeight, size.y, brThick, BoardType.Vertical);\r\n this.ParseBrTooth(verBr, gripHeight);\r\n for (let i = 1; i <= config.widthCount; i++)\r\n {\r\n let br = verBr.Clone();\r\n br.Name = \"右板\" + i;\r\n br.ApplyMatrix(MoveMatrix(min.clone().add(new Vector3(config.gripWidth * i + (i - 1) * brThick)))).ApplyMatrix(space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n\r\n let lyBr = Board.CreateBoard(spaceWidth, size.y, brThick);\r\n this.ParseBrTooth(lyBr);\r\n for (let i = 1; i <= config.heightCount; i++)\r\n {\r\n let br = lyBr.Clone();\r\n br.Name = \"左板\" + i;\r\n br.ApplyMatrix(MoveMatrix(\r\n min.clone().add(new Vector3(spaceWidth, 0, gripHeight * i + (i - 1) * brThick))))\r\n .ApplyMatrix(space.SpaceOCS);\r\n this.boardlist.push(br);\r\n }\r\n }\r\n ParseBrTooth(br: Board, gripHeight?: number)\r\n {\r\n const config = this.Config;\r\n let initPts: Vector3[] = [];\r\n\r\n let addWidth = config.grooveWidthAdd / 2;//槽加长\r\n let topEdge = config.topEdge;\r\n let bottomEdge = config.bottomEdge;\r\n let leftEdge = config.leftEdge;\r\n let rightEdge = config.rightEdge;\r\n let grooveLenAdd = config.grooveLengthAdd;\r\n\r\n br.BoardProcessOption.sealedUp = topEdge.toString();\r\n br.BoardProcessOption.sealedDown = bottomEdge.toString();\r\n br.BoardProcessOption.sealedLeft = leftEdge.toString();\r\n br.BoardProcessOption.sealedRight = rightEdge.toString();\r\n\r\n if (br.BoardType === BoardType.Layer)\r\n {\r\n let p1 = new Vector3(0, config.gripWidth - addWidth);\r\n let p2 = new Vector3(br.Width / 2 + grooveLenAdd, config.gripWidth - addWidth);\r\n let p3 = new Vector3(br.Width / 2 + grooveLenAdd, config.gripWidth + br.Thickness + addWidth);\r\n let p4 = new Vector3(0, config.gripWidth + br.Thickness + addWidth);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i <= config.widthCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(0, (config.gripWidth + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n initPts.reverse();\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(cu.EndParam, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n else\r\n {\r\n let p1 = new Vector3(br.Width, gripHeight - addWidth);\r\n let p2 = new Vector3(br.Width / 2 - grooveLenAdd, gripHeight - addWidth);\r\n let p3 = new Vector3(br.Width / 2 - grooveLenAdd, gripHeight + br.Thickness + addWidth);\r\n let p4 = new Vector3(br.Width, gripHeight + br.Thickness + addWidth);\r\n initPts.push(p1, p2, p3, p4);\r\n for (let i = 2; i <= config.heightCount; i++)\r\n {\r\n initPts.push(\r\n ...[p1, p2, p3, p4].map(p => p.clone().add(new Vector3(0, (gripHeight + br.Thickness) * (i - 1))))\r\n );\r\n }\r\n let cu = br.ContourCurve as Polyline;\r\n cu.AddVertexAt(2, initPts.map(p => AsVector2(p)));\r\n br.ContourCurve = cu;\r\n }\r\n this.ParseHighSealing(br, config.leftEdge, config.rightEdge, config.topEdge, config.bottomEdge, br.BoardType === BoardType.Layer);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DrawObliqueWineRackTool } from \"../../../Add-on/DrawWineRack/DrawObliqueWineRackTool\";\r\nimport { DrawUprightWineRackTool } from \"../../../Add-on/DrawWineRack/DrawUprightWineRackTool\";\r\nimport { DrawWineRackTool } from \"../../../Add-on/DrawWineRack/DrawWinRackTool\";\r\nimport { DefaultWineRackConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { Box3Ext } from \"../../../Geometry/Box\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { EWineRackType, IWineRackOption } from \"../../../UI/Store/WineRackInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n@Factory\r\nexport class TemplateWineRackRecord extends TemplateRecord\r\n{\r\n private option: IWineRackOption = { ...DefaultWineRackConfig };\r\n constructor()\r\n {\r\n super();\r\n this.name = \"酒格(自动)\";\r\n }\r\n get Option()\r\n {\r\n return Object.assign({}, this.option);\r\n }\r\n set Option(option: IWineRackOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.option, option);\r\n ExtendsBoardThickness(this, option.boardThick);\r\n }\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let bh = this.GetParam(\"BH\")?.value as number;\r\n if (bh)\r\n this.option.boardThick = bh;\r\n\r\n let bh2 = this.GetParam(\"BH2\")?.value as number;\r\n if (bh2)\r\n this.option.brThick2 = bh2;\r\n\r\n let wineRack: DrawWineRackTool;\r\n if (this.option.type === EWineRackType.Oblique)\r\n wineRack = DrawObliqueWineRackTool.GetInstance();\r\n else\r\n wineRack = DrawUprightWineRackTool.GetInstance();\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n let space = new ISpaceParse(sbrs, this._CacheSpaceCS);\r\n space.ParseOK = true;\r\n space.SpaceBox = new Box3Ext(new Vector3(), this._CacheSpaceSize);\r\n\r\n wineRack.Parse(space, this.Option);\r\n\r\n let nbrs = wineRack.boardlist;\r\n\r\n for (let i = nbrs.length; i < this.Objects.length; i++)\r\n this.Objects[i].Object.Erase();\r\n\r\n for (let i = 0; i < nbrs.length; i++)\r\n {\r\n if (i < this.Objects.length)\r\n {\r\n let br = this.Objects[i].Object as Board;\r\n br.Erase(false);\r\n br.CopyFrom(nbrs[i]);\r\n br.SpaceOCS = this._CacheSpaceCS;\r\n }\r\n else\r\n {\r\n this._db.ModelSpace.Append(nbrs[i]);\r\n this.Objects.push(nbrs[i].Id);\r\n nbrs[i].SpaceOCS = this._CacheSpaceCS;\r\n }\r\n }\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n\r\n this.option.type = file.Read();\r\n this.option.arrayType = file.Read();\r\n this.option.fullType = file.Read();\r\n this.option.isFull = file.Read();\r\n this.option.fullDir = file.Read();\r\n this.option.isLock = file.Read();\r\n this.option.heightCount = file.Read();\r\n this.option.widthCount = file.Read();\r\n\r\n this.option.isTotalDepth = file.Read();\r\n this.option.depth = file.Read();\r\n this.option.calcDepth = file.Read();\r\n this.option.gripWidth = file.Read();\r\n this.option.boardThick = file.Read();\r\n this.option.grooveWidthAdd = file.Read();\r\n\r\n this.option.leftEdge = file.Read();\r\n this.option.rightEdge = file.Read();\r\n this.option.topEdge = file.Read();\r\n this.option.bottomEdge = file.Read();\r\n\r\n this.option.frontCut = file.Read();\r\n this.option.leftCut = file.Read();\r\n this.option.rightCut = file.Read();\r\n this.option.topCut = file.Read();\r\n\r\n this.option.grooveLengthAdd = file.Read();\r\n this.option.isDrawLy = file.Read();\r\n this.option.isDrawVer = file.Read();\r\n this.option.brThick2 = file.Read();\r\n\r\n if (ver > 1)\r\n this.option.followNarrow = file.Read();\r\n\r\n if (ver > 2)\r\n this.option.wineRackStyle = file.Read();\r\n if (ver > 3)\r\n {\r\n this.option.boardMatName = file.Read();\r\n this.option.material = file.Read();\r\n this.option.color = file.Read();\r\n this.option.roomName = file.Read();\r\n this.option.cabinetName = file.Read();\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(4);\r\n super.WriteFile(file);\r\n file.Write(this.option.type);\r\n file.Write(this.option.arrayType);\r\n file.Write(this.option.fullType);\r\n file.Write(this.option.isFull);\r\n file.Write(this.option.fullDir);\r\n file.Write(this.option.isLock);\r\n file.Write(this.option.heightCount);\r\n file.Write(this.option.widthCount);\r\n\r\n file.Write(this.option.isTotalDepth);\r\n file.Write(this.option.depth);\r\n file.Write(this.option.calcDepth);\r\n file.Write(this.option.gripWidth);\r\n file.Write(this.option.boardThick);\r\n file.Write(this.option.grooveWidthAdd);\r\n file.Write(this.option.leftEdge);\r\n file.Write(this.option.rightEdge);\r\n file.Write(this.option.topEdge);\r\n file.Write(this.option.bottomEdge);\r\n\r\n file.Write(this.option.frontCut);\r\n file.Write(this.option.leftCut);\r\n file.Write(this.option.rightCut);\r\n file.Write(this.option.topCut);\r\n\r\n file.Write(this.option.grooveLengthAdd);\r\n file.Write(this.option.isDrawLy);\r\n file.Write(this.option.isDrawVer);\r\n file.Write(this.option.brThick2);\r\n file.Write(this.option.followNarrow);\r\n\r\n file.Write(this.option.wineRackStyle);\r\n\r\n file.Write(this.option.boardMatName);\r\n file.Write(this.option.material);\r\n file.Write(this.option.color);\r\n file.Write(this.option.roomName);\r\n file.Write(this.option.cabinetName);\r\n }\r\n //#endregion\r\n}\r\n","import { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { BoardOpenDir, BoardType } from \"../../DatabaseServices/Entity/BoardInterface\";\r\nimport { Entity } from \"../../DatabaseServices/Entity/Entity\";\r\nimport { EntityFbx } from \"../../DatabaseServices/Entity/EntityFbx\";\r\nimport { EntityRef } from \"../../DatabaseServices/Entity/EntityRef\";\r\nimport { HardwareCompositeEntity } from \"../../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { HardwareTopline } from \"../../DatabaseServices/Hardware/HardwareTopline\";\r\nimport { ProcessingGroupRecord } from \"../../DatabaseServices/ProcessingGroup/ProcessingGroupRecord\";\r\nimport { RoomBase } from \"../../DatabaseServices/Room/Entity/RoomBase\";\r\nimport { TemplateArcWindowRecord } from \"../../DatabaseServices/Template/ProgramTempate/TemplateArcWindowRecord\";\r\nimport { TemplateLatticeRecord } from \"../../DatabaseServices/Template/ProgramTempate/TemplateLatticeRecord\";\r\nimport { TemplateRoomDoorRecord } from \"../../DatabaseServices/Template/ProgramTempate/TemplateRoomDoorRecord\";\r\nimport { TemplateTopBottomBoard } from \"../../DatabaseServices/Template/ProgramTempate/TemplateTopBottomBoard\";\r\nimport { TemplateWindowRecord } from \"../../DatabaseServices/Template/ProgramTempate/TemplateWindowRecord\";\r\nimport { TemplateWineRackRecord } from \"../../DatabaseServices/Template/ProgramTempate/TemplateWineRackRecord\";\r\nimport { TemplateRecord } from \"../../DatabaseServices/Template/TemplateRecord\";\r\n\r\nexport function IsDoor(en: Entity)\r\n{\r\n if (en.Template)\r\n {\r\n let temp = en.Template.Object as TemplateRecord;\r\n if (((temp?.Parent?.Object as TemplateRecord)?.Name === \"门板空间\"))\r\n return true;\r\n }\r\n // else //有时候 模块会被破坏,所以模块检测不是唯一标准\r\n if (en instanceof Board)\r\n {\r\n return en.OpenDir !== BoardOpenDir.None;\r\n }\r\n else if (en instanceof HardwareCompositeEntity)\r\n {\r\n return en.HardwareOption.model.includes(\"开门\");\r\n }\r\n return false;\r\n}\r\n\r\n//抽屉空间\r\nexport function IsDrawer(en: Entity)\r\n{\r\n if (en.Template)\r\n {\r\n let temp = en.Template.Object as TemplateRecord;\r\n if (((temp?.Parent?.Object as TemplateRecord)?.Name === \"抽屉空间\"))\r\n return true;\r\n }\r\n\r\n return en.ProcessingGroupList.some(id => id && ((id.Object as ProcessingGroupRecord)?.Name === \"抽屉\"));;\r\n}\r\n\r\n//酒格\r\nexport function IsWinerack(en: Entity)\r\n{\r\n if (en.Template && en.Template.Object instanceof TemplateWineRackRecord)\r\n return true;\r\n\r\n return en.ProcessingGroupList.some(id => id && ((id.Object as ProcessingGroupRecord)?.Name === \"酒格\"));\r\n}\r\n\r\n//格子抽\r\nexport function IsLattice(en: Entity)\r\n{\r\n if (en.Template && en.Template.Object instanceof TemplateLatticeRecord)\r\n return true;\r\n\r\n return en.ProcessingGroupList.some(id => id && ((id.Object as ProcessingGroupRecord)?.Name === \"格子抽\"));\r\n}\r\n\r\n//拉手\r\nexport function IsHandle(en: Entity)\r\n{\r\n if (en instanceof HardwareCompositeEntity)\r\n {\r\n if (en.Template)\r\n {\r\n let temp = en.Template.Object as TemplateRecord;\r\n if ((temp?.Parent?.Object as TemplateRecord)?.Name === \"拉手空间\")\r\n return true;\r\n }\r\n // else //有时候 模块会被破坏,所以模块检测不是唯一标准\r\n {\r\n return en.HardwareOption.name.includes(\"拉手\");\r\n }\r\n }\r\n}\r\n\r\n//铰链\r\nexport function IsHinge(en: Entity)\r\n{\r\n if (en instanceof HardwareCompositeEntity)\r\n {\r\n if (en.Template)\r\n {\r\n let temp = en.Template.Object as TemplateRecord;\r\n if ((temp?.Parent?.Object as TemplateRecord)?.Name === \"铰链空间\")\r\n return true;\r\n }\r\n // else //有时候 模块会被破坏,所以模块检测不是唯一标准\r\n {\r\n return en.HardwareOption.name.includes(\"铰链\");\r\n }\r\n }\r\n}\r\n\r\n//顶底板\r\nexport function isDingDiBan(b: Board)\r\n{\r\n if (b.BoardType === BoardType.Layer)\r\n {\r\n if (b.Template && b.Template.Object instanceof TemplateTopBottomBoard)\r\n return true;\r\n return b.Name.includes(\"顶板\") || b.Name.includes(\"底板\");\r\n }\r\n return false;\r\n}\r\n\r\n// 户型 和 模型\r\nexport function IsHouse(en: Entity): boolean\r\n{\r\n return IsRoomBase(en) || IsModel(en);\r\n}\r\n\r\n//模型\r\nexport function IsModel(en: Entity): boolean\r\n{\r\n return en instanceof EntityRef || en instanceof EntityFbx;\r\n}\r\n\r\n// 户型\r\nexport function IsRoomBase(en: Entity): boolean\r\n{\r\n if (en instanceof RoomBase ||\r\n (en instanceof HardwareTopline && (en.HardwareOption.name === \"地脚线\" || en.HardwareOption.name === \"吊顶\")) ||\r\n en.Template?.Object instanceof TemplateArcWindowRecord ||\r\n (en.Template?.Object as TemplateRecord)?.Parent?.Object instanceof TemplateWindowRecord ||\r\n (en.Template?.Object as TemplateRecord)?.Parent?.Object instanceof TemplateRoomDoorRecord)\r\n return true;\r\n else\r\n return false;\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, LineSegments, Material, Matrix3, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../Common/ColorPalette\";\r\nimport { FixedNotZero } from \"../Common/Utils\";\r\nimport { AutoRecord } from \"../DatabaseServices/AutoRecord\";\r\nimport { Factory } from \"../DatabaseServices/CADFactory\";\r\nimport { CADFiler } from \"../DatabaseServices/CADFiler\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { TemplateRecord } from \"../DatabaseServices/Template/TemplateRecord\";\r\nimport { Text, TextAligen } from \"../DatabaseServices/Text/Text\";\r\nimport { Box3Ext } from \"../Geometry/Box\";\r\nimport { XAxis, XAxisN, YAxis, YAxisN, ZAxis, ZeroVec } from \"../Geometry/GeUtils\";\r\nimport { GenerateBoxEdgeGeometry } from \"../Geometry/SimpleExtrudeEdgeGeometry\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { ObjectSnapMode } from \"./ObjectSnapMode\";\r\n\r\nconst EmptyArray = [];\r\n\r\n@Factory\r\nexport class VisualSpaceBox extends Entity\r\n{\r\n OnlyRenderType = true;\r\n\r\n private _LText = new Text;\r\n private _WText = new Text;\r\n private _HText = new Text;\r\n\r\n @AutoRecord private _IsRoot = false;\r\n\r\n @AutoRecord private _DisplayLength = true;\r\n @AutoRecord private _DisplayWidth = true;\r\n @AutoRecord private _DisplayHeight = true;\r\n\r\n\r\n constructor(\r\n protected _Length: number = 1,\r\n protected _Width: number = 1,\r\n protected _Height: number = 1,\r\n )\r\n {\r\n super();\r\n this._LText.IsEmbedEntity = true;\r\n this._WText.IsEmbedEntity = true;\r\n this._HText.IsEmbedEntity = true;\r\n\r\n this._LText.TextAligen = TextAligen.Down;\r\n this._WText.TextAligen = TextAligen.Top;\r\n this._HText.TextAligen = TextAligen.Top;\r\n (<VisualSpaceBox><unknown>this._LText)._Matrix.makeBasis(XAxis, ZAxis, YAxis);\r\n (<VisualSpaceBox><unknown>this._WText)._Matrix.makeBasis(YAxis, XAxisN, ZAxis);\r\n (<VisualSpaceBox><unknown>this._HText)._Matrix.makeBasis(ZAxis, XAxisN, YAxisN);\r\n }\r\n\r\n get Length() { return this._Length; }\r\n get Width() { return this._Width; }\r\n get Height() { return this._Height; }\r\n\r\n\r\n set IsRoot(b: boolean)\r\n {\r\n if (this._IsRoot !== b)\r\n {\r\n this._IsRoot = b;\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n if (this._IsRoot)\r\n box.visible = false;\r\n else\r\n box.visible = true;\r\n\r\n if (this._IsRoot)\r\n {\r\n this._LText.TextAligen = TextAligen.Top;\r\n this._WText.TextAligen = TextAligen.Down;\r\n this._HText.TextAligen = TextAligen.Down;\r\n }\r\n else\r\n {\r\n this._LText.TextAligen = TextAligen.Down;\r\n this._WText.TextAligen = TextAligen.Top;\r\n this._HText.TextAligen = TextAligen.Top;\r\n }\r\n }\r\n }\r\n }\r\n\r\n set DisplayWidth(b: boolean)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n wobj.visible = b;\r\n }\r\n this._DisplayWidth = b;\r\n }\r\n set DisplayLength(b: boolean)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n lobj.visible = b;\r\n }\r\n this._DisplayLength = b;\r\n }\r\n set DisplayHeight(b: boolean)\r\n {\r\n for (let [, obj] of this._CacheDrawObject)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n hobj.visible = b;\r\n }\r\n this._DisplayHeight = b;\r\n }\r\n\r\n SetSize(l: number, w: number, h: number)\r\n {\r\n if (l !== this._Length || w !== this._Width || h !== this._Height)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Length = l;\r\n this._Width = w;\r\n this._Height = h;\r\n this.Update();\r\n }\r\n }\r\n get BoundingBoxInOCS()\r\n {\r\n return new Box3Ext(new Vector3, new Vector3(this._Length, this._Width, this._Height));\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n //#region 捕捉\r\n /**\r\n *\r\n * @param snapMode 捕捉模式(单一)\r\n * @param pickPoint const\r\n * @param lastPoint const\r\n * @param viewXform const 最近点捕捉需要这个变量\r\n * @returns object snap points\r\n */\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n {\r\n let pts: Vector3[] = [\r\n new Vector3(),\r\n new Vector3(this._Length),\r\n new Vector3(this._Length, this._Width),\r\n new Vector3(0, this._Width),\r\n\r\n new Vector3(0, 0, this._Height),\r\n new Vector3(this._Length, 0, this._Height),\r\n new Vector3(this._Length, this._Width, this._Height),\r\n new Vector3(0, this._Width, this._Height),\r\n ];\r\n\r\n for (let p of pts)\r\n p.applyMatrix4(this._Matrix);\r\n return pts;\r\n }\r\n }\r\n return EmptyArray;\r\n }\r\n //#endregion\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n\r\n //box\r\n obj.add(new Mesh(backGeo, ColorMaterial.GetBasicMaterialTransparent2(this.DrawColorIndex, 0.5)));\r\n //edge\r\n obj.add(new LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(this.DrawColorIndex)));\r\n\r\n obj.add(this._LText.DrawObject);\r\n obj.add(this._WText.DrawObject);\r\n obj.add(this._HText.DrawObject);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let [box, edge, lobj, wobj, hobj] = obj.children;\r\n box.scale.set(this._Length, this._Width, this._Height);\r\n box.updateMatrix();\r\n\r\n edge.scale.set(this._Length, this._Width, this._Height);\r\n edge.updateMatrix();\r\n\r\n box.visible = !this._IsRoot;\r\n\r\n if (this._IsRoot)\r\n {\r\n this._LText.TextAligen = TextAligen.Top;\r\n this._WText.TextAligen = TextAligen.Down;\r\n this._HText.TextAligen = TextAligen.Down;\r\n }\r\n else\r\n {\r\n this._LText.TextAligen = TextAligen.Down;\r\n this._WText.TextAligen = TextAligen.Top;\r\n this._HText.TextAligen = TextAligen.Top;\r\n }\r\n\r\n this._LText.TextString = FixedNotZero(this._Length, 2);\r\n this._WText.TextString = FixedNotZero(this._Width, 2);\r\n this._HText.TextString = FixedNotZero(this._Height, 2);\r\n\r\n //实体被错误的Dispose,导致需要这样的更新\r\n this._LText.Update();\r\n this._WText.Update();\r\n this._HText.Update();\r\n\r\n lobj.visible = this._DisplayLength;\r\n wobj.visible = this._DisplayWidth;\r\n hobj.visible = this._DisplayHeight;\r\n\r\n lobj.position.set(this._Length / 2, 0, 0);\r\n lobj.updateMatrix();\r\n\r\n wobj.position.set(0, this._Width / 2, 0);\r\n wobj.updateMatrix();\r\n\r\n hobj.position.set(0, 0, this._Height / 2);\r\n hobj.updateMatrix();\r\n }\r\n\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n let [mesh, line] = obj.children as [Mesh, LineSegments];\r\n\r\n mesh.material = ColorMaterial.GetBasicMaterialTransparent2(this.DrawColorIndex, 0.2);\r\n line.material = ColorMaterial.GetLineMaterial(this.DrawColorIndex);\r\n }\r\n\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n this._Length = file.Read();\r\n this._Width = file.Read();\r\n this._Height = file.Read();\r\n\r\n this._IsRoot = file.Read();\r\n this._DisplayLength = file.Read();\r\n this._DisplayWidth = file.Read();\r\n this._DisplayHeight = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.Write(this._Length);\r\n file.Write(this._Width);\r\n file.Write(this._Height);\r\n\r\n file.Write(this._IsRoot);\r\n file.Write(this._DisplayLength);\r\n file.Write(this._DisplayWidth);\r\n file.Write(this._DisplayHeight);\r\n }\r\n\r\n // //局部撤销\r\n // ApplyPartialUndo(undoData: CADObject)\r\n // {\r\n // super.ApplyPartialUndo(undoData);\r\n // }\r\n //#endregion\r\n\r\n\r\n //#region\r\n GetGripPoints(): Array<Vector3>\r\n {\r\n // return EmptyArray;//因为更新模块树是异步的,没办法在拽拖夹点时顺带更新,所以移除这个特性.\r\n let x = new Vector3;\r\n let y = new Vector3;\r\n let z = new Vector3;\r\n this._Matrix.extractBasis(x, y, z);\r\n x.multiplyScalar(this._Length);\r\n y.multiplyScalar(this._Width);\r\n z.multiplyScalar(this._Height);\r\n\r\n let p = this.Position;\r\n return [p, x.add(p), y.add(p), z.add(p)];\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n let template = this.Template?.Object as TemplateRecord;\r\n if (template && template !== template.Root)\r\n return;\r\n\r\n for (let i of indexList)\r\n {\r\n if (i === 0)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.Position = this.Position.add(vec);\r\n return;\r\n }\r\n else\r\n {\r\n continue;\r\n let ocs = this._Matrix.clone().setPosition(ZeroVec);\r\n let ocsinv = new Matrix4().getInverse(ocs);\r\n vec.applyMatrix4(ocsinv);\r\n if (i === 1)\r\n {\r\n this._Length += vec.x;\r\n template.LParam.expr = this._Length;\r\n }\r\n else if (i === 2)\r\n {\r\n this._Width += vec.y;\r\n template.WParam.expr = this._Width;\r\n }\r\n else\r\n {\r\n this._Height += vec.z;\r\n template.HParam.expr = this._Height;\r\n }\r\n\r\n template.UpdateTemplateTree(); //TODO:可以弹出个对话框让用户更新. 或者使用反应器?\r\n\r\n this.Update();\r\n }\r\n return;\r\n }\r\n }\r\n\r\n GetStretchPoints(): Array<Vector3>\r\n {\r\n return [];\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\r\n }\r\n //#endregion\r\n\r\n}\r\n\r\nclass BackFaceBoxBufferGeometry extends BufferGeometry\r\n{\r\n constructor(length: number = 1, width: number = 1, height: number = 1)\r\n {\r\n super();\r\n\r\n let pts: number[] = [\r\n 0, width, 0,\r\n length, width, 0,\r\n length, width, height,\r\n 0, width, height,\r\n ];\r\n let uvs: number[] = [\r\n 0, 0,\r\n 1, 0,\r\n 1, 1,\r\n\r\n 0, 0,\r\n 1, 1,\r\n 0, 1,\r\n ];\r\n\r\n let indices: number[] = [0, 1, 2, 0, 2, 3];\r\n\r\n this.setIndex(indices);\r\n this.setAttribute('position', new Float32BufferAttribute(pts, 3));\r\n // this.setAttribute('normal', new Float32BufferAttribute(normals, 3));\r\n this.setAttribute('uv', new Float32BufferAttribute(uvs, 2));\r\n\r\n }\r\n}\r\n\r\nconst backGeo = new BackFaceBoxBufferGeometry();\r\nconst edgeGeo = GenerateBoxEdgeGeometry(1, 1, 1);\r\n","import { Box3, BufferGeometry, Float32BufferAttribute, Frustum, Group, Line, Matrix3, Matrix4, Mesh, MeshBasicMaterial, Object3D, Scene, Vector3, WebGLRenderTarget } from \"three\";\r\nimport { IsHinge, IsHouse } from \"../Add-on/HideSelect/HideSelectUtils\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../Common/Dispose\";\r\nimport { UpdateDraw } from \"../Common/Status\";\r\nimport { GetEntity } from \"../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../Editor/ObjectSnapMode\";\r\nimport { VisualSpaceBox } from \"../Editor/VisualSpaceBox\";\r\nimport { GetBox } from \"../Geometry/GeUtils\";\r\nimport { CameraUpdate } from \"../GraphicsSystem/CameraUpdate\";\r\nimport { RenderType } from \"../GraphicsSystem/RenderType\";\r\nimport { FixIndex } from \"../Nest/Common/Util\";\r\nimport { Hole } from \"./3DSolid/Hole\";\r\nimport { Factory } from \"./CADFactory\";\r\nimport { CADFiler } from \"./CADFiler\";\r\nimport { Board } from \"./Entity/Board\";\r\nimport { Entity } from \"./Entity/Entity\";\r\nimport { LayerTableRecord } from \"./LayerTableRecord\";\r\nimport { ObjectId } from \"./ObjectId\";\r\nimport { Text } from \"./Text/Text\";\r\n\r\nconst MaxSize = 2048;\r\nconst MIN_UPDATE_SIZE = 50;\r\nconst ProjScreenMatrix = new Matrix4();\r\n\r\n@Factory\r\nexport class ViewportEntity extends Entity\r\n{\r\n scene: Scene = new Scene();\r\n readonly camera: CameraUpdate = new CameraUpdate();\r\n private _renderType: RenderType = RenderType.Print;\r\n private _HideObjectIds = new Set<ObjectId>();\r\n private _ShowObjectIds = new Set<ObjectId>();\r\n private _FreezeLayers = new Set<ObjectId<LayerTableRecord>>();\r\n private _RenderTarget: WebGLRenderTarget = new WebGLRenderTarget(0, 0);\r\n private _EntitysBoundingBox: Box3;\r\n ViewData = {\r\n left: 0,\r\n bottom: 0,\r\n };\r\n _Color = 0;\r\n ViewportMaterial: MeshBasicMaterial;\r\n private _Frustum: Frustum = new Frustum();\r\n constructor(\r\n private _width: number = 1,\r\n private _height: number = 1,\r\n )\r\n {\r\n super();\r\n \r\n }\r\n get Left()\r\n {\r\n return this.Position.x;\r\n }\r\n get Bottom()\r\n {\r\n return this.Position.y;\r\n }\r\n get Width()\r\n {\r\n return this._width;\r\n }\r\n set Width(v: number)\r\n {\r\n if (v === this._height || v < 0)\r\n return;\r\n this.WriteAllObjectRecord();\r\n this._width = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n get ViewWidth()\r\n {\r\n return this.camera.Width ?? 1;\r\n }\r\n get ViewHeight()\r\n {\r\n return this.camera.Height ?? 1;\r\n }\r\n get Height()\r\n {\r\n return this._height;\r\n }\r\n set Height(v: number)\r\n {\r\n if (v === this._height || v < 0)\r\n return;\r\n this.WriteAllObjectRecord();\r\n this._height = v;\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n IsHide(id: ObjectId)\r\n {\r\n return this._HideObjectIds.has(id);\r\n }\r\n IsShow(id: ObjectId)\r\n {\r\n return this._ShowObjectIds.has(id);\r\n }\r\n get HideObjects()\r\n {\r\n return [...this._HideObjectIds];\r\n }\r\n get ShowObjects()\r\n {\r\n return [...this._ShowObjectIds];\r\n }\r\n\r\n HasFreezeLayer(id: ObjectId<LayerTableRecord>)\r\n {\r\n return this._FreezeLayers.has(id);\r\n }\r\n\r\n DeleteFreezeLayer(id: ObjectId<LayerTableRecord>)\r\n {\r\n if (!this._FreezeLayers.has(id)) return;\r\n this.WriteAllObjectRecord();\r\n this._FreezeLayers.delete(id);\r\n }\r\n\r\n AddFreezeLayer(id: ObjectId<LayerTableRecord>)\r\n {\r\n if (this._FreezeLayers.has(id)) return;\r\n this.WriteAllObjectRecord();\r\n this._FreezeLayers.add(id);\r\n }\r\n\r\n\r\n //#region 显示隐藏实体控制\r\n\r\n //应显尽显\r\n ShowAll()\r\n {\r\n if (this._HideObjectIds.size === 0) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n //这个实现建立在一切数据都是准确的情况下\r\n\r\n for (let id of this._HideObjectIds)\r\n this._ShowObjectIds.add(id);//这里应该直接绘制的\r\n\r\n this._HideObjectIds.clear();\r\n\r\n this.UpdateScene();//优化 应该在上面直接绘制的\r\n }\r\n\r\n //添加显示实体\r\n AppendShowObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n for (let id of ids)\r\n {\r\n if (id?.Object)\r\n this._ShowObjectIds.add(id);\r\n\r\n this._HideObjectIds.delete(id);\r\n }\r\n }\r\n\r\n //(未被使用)移除显示实体\r\n RemoveShowObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n\r\n ids.forEach(id => this._ShowObjectIds.delete(id));\r\n }\r\n\r\n //添加隐藏实体\r\n AppendHideObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n\r\n for (let id of ids)\r\n {\r\n this._HideObjectIds.add(id);\r\n this._ShowObjectIds.delete(id);\r\n }\r\n }\r\n\r\n //(未被使用)移除隐藏实体\r\n RemoveHideObjects(ids: ObjectId[] | ObjectId)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!Array.isArray(ids))\r\n ids = [ids];\r\n\r\n for (let id of ids)\r\n {\r\n this._HideObjectIds.delete(id);\r\n this._ShowObjectIds.add(id);\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform: Matrix3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n case ObjectSnapMode.Mid:\r\n case ObjectSnapMode.Nea:\r\n case ObjectSnapMode.Ext:\r\n case ObjectSnapMode.Per:\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n SetUVs(geo: BufferGeometry)\r\n {\r\n let uvArray: number[] = [\r\n 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0\r\n ];\r\n geo.setAttribute(\"uv\", new Float32BufferAttribute(uvArray, 2));\r\n }\r\n protected OnlyRenderType = true;\r\n get Entitys()\r\n {\r\n let ens: Entity[] = [];\r\n for (let id of this._ShowObjectIds)\r\n if (id?.Object) ens.push(id.Object as Entity);\r\n\r\n for (let id of this._HideObjectIds)\r\n if (id?.Object) ens.push(id.Object as Entity);\r\n\r\n return ens;\r\n }\r\n get Points()\r\n {\r\n let z = -1;\r\n return [\r\n new Vector3(0, 0, z),\r\n new Vector3(this._width, 0, z),\r\n new Vector3(this._width, this._height, z),\r\n new Vector3(0, this._height, z),\r\n ];\r\n }\r\n\r\n NeedUpdateTexture = true;\r\n \r\n\r\n UpdateByPts(p1: Vector3, p2: Vector3)\r\n {\r\n let left = Math.min(p1.x, p2.x);\r\n let bottom = Math.min(p1.y, p2.y);\r\n this._width = Math.abs(p1.x - p2.x);\r\n this._height = Math.abs(p1.y - p2.y);\r\n this.Position = new Vector3(left, bottom);\r\n }\r\n GetGripPoints()\r\n {\r\n return this.Points.map(p => p.applyMatrix4(this.OCS).setZ(0));\r\n }\r\n MoveGripPoints(indexList: number[], moveVec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n let pts = this.GetGripPoints();\r\n\r\n for (let index of indexList)\r\n {\r\n pts[index].add(moveVec);\r\n this.UpdateByPts(pts[index], pts[FixIndex(index + 2, 4)]);\r\n }\r\n this.Update();\r\n }\r\n ZoomAll()\r\n {\r\n let box = new Box3;\r\n for (let obj of this.scene.children)\r\n {\r\n let ent = GetEntity(obj);\r\n if (ent) box.union(ent.BoundingBox);\r\n else box.union(GetBox(obj));\r\n }\r\n\r\n if (box.isEmpty())\r\n box.set(new Vector3(), new Vector3(1000 * (this.Width / this.Height), 1000, 1000));\r\n this.camera.ZoomExtentsBox3(box);\r\n this.camera.Zoom(1.2);\r\n }\r\n\r\n ZoomtoEntitys(ens: Entity[])\r\n {\r\n let box = new Box3();\r\n ens.reduce((b, e) => b.union(e.BoundingBox), box);\r\n if (box.isEmpty())\r\n return;\r\n this.camera.ZoomExtentsBox3(box);\r\n this.camera.Zoom(1.2);\r\n }\r\n\r\n get RenderType()\r\n {\r\n return this._renderType;\r\n }\r\n set RenderType(v: RenderType)\r\n {\r\n if (v === this._renderType) return;\r\n this.WriteAllObjectRecord();\r\n this._renderType = v;\r\n\r\n let currentRenderType = this._renderType;\r\n\r\n for (let o of this.scene.children)\r\n {\r\n if (o instanceof Group)\r\n {\r\n if (false)\r\n {\r\n DisposeThreeObj(o);\r\n Object3DRemoveAll(o);\r\n }\r\n else\r\n o.children.length = 0;\r\n\r\n let e = o.userData.Entity as Entity;\r\n if (this._renderType === RenderType.Physical2 && IsHouse(e)) //真实带线框视口 显示户型(使用真实类型)\r\n currentRenderType = RenderType.Physical;\r\n else\r\n currentRenderType = this._renderType;\r\n\r\n let obj = e.GetDrawObjectFromRenderType(e.IsOnlyRender ? currentRenderType + 100 : currentRenderType);\r\n if (obj)\r\n o.children.push(obj);\r\n else\r\n console.warn(e, `视口:该实体渲染类型${this._renderType}类型不存在`);\r\n }\r\n }\r\n }\r\n get BoundingBox()\r\n {\r\n return new Box3().setFromPoints(this.GetGripPoints());\r\n }\r\n CanRennder(en: Entity)\r\n {\r\n if (en?.Id\r\n && !en.IsErase && (en instanceof Entity) && !(en instanceof Hole)\r\n && !(en instanceof ViewportEntity)\r\n && !(en instanceof VisualSpaceBox))\r\n {\r\n //首个版本布局由隐藏列表控制\r\n if (this.IsFirstVersion)\r\n {\r\n if (this._HideObjectIds.has(en.Id))\r\n return false;\r\n }\r\n else\r\n {\r\n if (!this._ShowObjectIds.has(en.Id) || this._HideObjectIds.has(en.Id))\r\n return false;\r\n }\r\n // if (en instanceof HardwareCompositeEntity && en.HardwareOption.name.includes(\"铰链\"))\r\n if (IsHinge(en))\r\n return false;\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n DrawEntityToScene(en: Entity): void\r\n {\r\n if (!this.CanRennder(en)) return;\r\n\r\n //在真实线框视图 添加户型失败问题 显示户型(使用真实视图类型))\r\n let currentRenderType = this._renderType;\r\n if (currentRenderType === RenderType.Physical2 && IsHouse(en))\r\n currentRenderType = RenderType.Physical;\r\n else\r\n currentRenderType = this._renderType;\r\n\r\n let cloneObject = new Group();\r\n let renderType = en.IsOnlyRender ? currentRenderType + 100 : currentRenderType;\r\n let o = en.GetDrawObjectFromRenderType(renderType);\r\n if (!o)\r\n {\r\n console.warn(en, `视口:该实体渲染类型${renderType}类型不存在`);\r\n return;\r\n }\r\n cloneObject.children.push(o);\r\n cloneObject.name = en.Id.Index.toString();\r\n cloneObject.userData = { Entity: en };\r\n cloneObject.updateMatrixWorld();\r\n\r\n //因为LayoutTool里面有更新实体的操作 所以这个代码暂时是多余的\r\n // //实体被删除的时候 这里自然的隐藏\r\n // Object.defineProperty(cloneObject, \"visible\", {\r\n // get: () => !en.IsErase\r\n // });\r\n\r\n this.scene.add(cloneObject);\r\n this.NeedUpdateTexture = true;\r\n }\r\n\r\n GoodBye()\r\n {\r\n super.GoodBye();\r\n DisposeThreeObj(this.scene);\r\n Object3DRemoveAll(this.scene);\r\n this.ViewportMaterial?.dispose();\r\n this.ViewportMaterial = undefined;\r\n this._RenderTarget.dispose();\r\n }\r\n\r\n UpdateScene()\r\n {\r\n \r\n }\r\n\r\n CloneDrawObject(from: this)\r\n {\r\n super.CloneDrawObject(from);\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n (obj.children[1] as Mesh).material = this.ViewportMaterial;\r\n }\r\n }\r\n\r\n IsInFrustum(obj: Object3D)\r\n {\r\n let camera = this.camera.Camera;\r\n ProjScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);\r\n this._Frustum.setFromProjectionMatrix(ProjScreenMatrix);\r\n let isInt = false;\r\n obj.traverse((o: Mesh | Line) =>\r\n {\r\n if (!isInt && o.geometry)\r\n isInt = this._Frustum.intersectsObject(o);\r\n });\r\n return isInt;\r\n }\r\n\r\n //TODO:有个bug,在实体列表更新的时候 这个box没有更新,会导致一些错误.\r\n IsContainText(text: Entity)\r\n {\r\n if (!(text instanceof Text)) return false;\r\n if (!this._EntitysBoundingBox)\r\n {\r\n this._EntitysBoundingBox = new Box3();\r\n for (let en of this.Entitys)\r\n {\r\n if (!en.IsErase && en instanceof Board)\r\n this._EntitysBoundingBox.union(en.BoundingBox);\r\n }\r\n }\r\n\r\n return this._EntitysBoundingBox.containsBox(text.BoundingBox);\r\n }\r\n\r\n IsFirstVersion = false;\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n\r\n this.IsFirstVersion = ver === 1;\r\n\r\n this.camera.ReadFile(file);\r\n this._width = file.Read();\r\n this._height = file.Read();\r\n this._renderType = file.Read();\r\n if (ver === 2 && this._renderType === RenderType.Jig)\r\n this._renderType = RenderType.Wireframe;\r\n\r\n let count = file.Read();\r\n this._HideObjectIds.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this._HideObjectIds.add(id);\r\n }\r\n\r\n if (ver > 1)\r\n {\r\n let count = file.Read();\r\n this._ShowObjectIds.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this._ShowObjectIds.add(id);\r\n }\r\n }\r\n\r\n if (ver > 3)\r\n {\r\n this.camera.LookAt(new Vector3(file.Read(), file.Read(), file.Read()));\r\n this.camera.Camera.up = new Vector3(file.Read(), file.Read(), file.Read());\r\n }\r\n\r\n this._FreezeLayers.clear();\r\n if (ver > 4)\r\n {\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadSoftObjectId() as ObjectId<LayerTableRecord>;\r\n if (id)\r\n this._FreezeLayers.add(id);\r\n }\r\n }\r\n\r\n if (!this._isErase)\r\n this.UpdateScene();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(5);\r\n this.camera.WriteFile(file);\r\n file.Write(this._width);\r\n file.Write(this._height);\r\n file.Write(this._renderType);\r\n file.Write(this._HideObjectIds.size);\r\n this._HideObjectIds.forEach(id => file.WriteSoftObjectId(id));\r\n\r\n file.Write(this._ShowObjectIds.size);\r\n this._ShowObjectIds.forEach(id => file.WriteSoftObjectId(id));\r\n\r\n file.WriteVec3(this.camera.Direction);\r\n file.WriteVec3(this.camera.Camera.up);\r\n\r\n // 图层的视口冻结\r\n file.Write(this._FreezeLayers.size);\r\n this._FreezeLayers.forEach(id => file.WriteSoftObjectId(id));\r\n }\r\n}\r\n","import { ExtrudeGeometry, Geometry, Mesh, MeshNormalMaterial, Object3D, Vector3 } from \"three\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Contour } from '../Contour';\r\nimport { Circle } from '../Entity/Circle';\r\nimport { Entity } from '../Entity/Entity';\r\n\r\n@Factory\r\nexport class Cylineder extends Entity\r\n{\r\n private m_Radius: number;\r\n private m_Height: number;\r\n private m_Center: Vector3 = new Vector3();\r\n constructor(rad?: number, height?: number)\r\n {\r\n super();\r\n this.m_Radius = rad || 1;\r\n this.m_Height = height || 1;\r\n }\r\n get Radius()\r\n {\r\n return this.m_Radius;\r\n }\r\n set Radius(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.m_Radius = v;\r\n this.Update();\r\n }\r\n get Height()\r\n {\r\n return this.m_Height;\r\n }\r\n set Height(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.m_Height = v;\r\n this.Update();\r\n }\r\n get Center()\r\n {\r\n return new Vector3().setFromMatrixPosition(this.OCS);\r\n }\r\n set Center(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.setPosition(v);\r\n this.Update();\r\n }\r\n CreateGeometry()\r\n {\r\n let cir = Contour.CreateContour([new Circle(this.m_Center, this.m_Radius)]).Shape;\r\n let extrudeSettings = {\r\n bevelEnabled: false,\r\n depth: this.m_Height\r\n };\r\n return new ExtrudeGeometry(cir, extrudeSettings);\r\n }\r\n InitDrawObject(renderType: RenderType): Object3D\r\n {\r\n return new Mesh(this.CreateGeometry(), new MeshNormalMaterial());\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let obj = en as Mesh;\r\n obj.geometry = this.CreateGeometry();\r\n (obj.geometry as Geometry).verticesNeedUpdate = true;\r\n }\r\n\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();//1\r\n this.m_Radius = file.Read();\r\n this.m_Height = file.Read();\r\n this.m_Center.fromArray(file.Read());\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(1);//ver\r\n file.Write(this.m_Radius);\r\n file.Write(this.m_Height);\r\n file.Write(this.m_Center.toArray());\r\n }\r\n}\r\n","import { Box3, Face3, Geometry, Matrix4, Mesh, MeshNormalMaterial, Object3D, ShapeUtils, Vector2, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { Object3DRemoveAll } from \"../../Common/Dispose\";\r\nimport { FixIndex, clamp } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { AsVector3, YAxis, ZeroVec, angle, equaln, equalv3, isParallelTo } from \"../../Geometry/GeUtils\";\r\nimport { Matrix2 } from \"../../Geometry/Matrix2\";\r\nimport { Orbit } from \"../../Geometry/Orbit\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { CADObject } from \"../CADObject\";\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\n\r\nlet r = new Matrix2;\r\nlet v = new Vector3;\r\n\r\nexport function AxisCS(n: Vector3): Matrix4\r\n{\r\n let x = new Vector3;\r\n let y = new Vector3;\r\n Orbit.ComputUpDirection(n, y, x);\r\n return new Matrix4().makeBasis(x.normalize(), y.normalize(), n);\r\n}\r\n\r\nlet _Arc = new Arc(new Vector3, 1, 0, Math.PI / 2, false);\r\n@Factory\r\nexport class RevolveSolid extends Entity\r\n{\r\n private _DisplayAccuracy = 0;\r\n private _Contour: Polyline;\r\n constructor(\r\n axisDirection?: Vector3,\r\n axisPos?: Vector3,\r\n contour?: Polyline,\r\n private _StartAngle = 0,\r\n private _EndAngle = Math.PI / 2,\r\n )\r\n {\r\n super();\r\n if (axisDirection)\r\n {\r\n axisDirection.normalize();\r\n let x = new Vector3;\r\n let y = new Vector3;\r\n Orbit.ComputUpDirection(axisDirection, y, x);\r\n this._Matrix.makeBasis(x.normalize(), y.normalize(), axisDirection);\r\n }\r\n else\r\n axisDirection = new Vector3(0, 0, 1);\r\n\r\n if (axisPos)\r\n this._Matrix.setPosition(axisPos);\r\n else\r\n axisPos = new Vector3;\r\n\r\n if (contour)\r\n {\r\n if (contour.Id) this._Contour = contour.Clone();\r\n else this._Contour = contour;\r\n\r\n this._Contour.IsEmbedEntity = true;\r\n\r\n if (this._Contour.IsClockWise) this._Contour.Reverse();\r\n\r\n let ocs = this.OCS.setPosition(0, 0, 0);\r\n let ocsInv = this.OCSInv;\r\n let endParam = this._Contour.EndParam;\r\n\r\n let p = this._Contour.StartPoint.applyMatrix4(ocsInv);\r\n axisPos.add(axisDirection.clone().multiplyScalar(p.z));\r\n\r\n //对齐X轴\r\n for (let i = 0; i < endParam; i += 0.5)\r\n {\r\n let p = this._Contour.GetPointAtParam(i);\r\n p.applyMatrix4(ocsInv).setZ(0);\r\n\r\n if (!equalv3(p, ZeroVec))\r\n {\r\n p.applyMatrix4(ocs);\r\n p.normalize();//X轴\r\n let y = axisDirection.clone().cross(p).normalize();\r\n this._Matrix.makeBasis(p, y, axisDirection).setPosition(axisPos);\r\n break;\r\n }\r\n }\r\n this._Contour.ApplyMatrix(this.OCSInv);\r\n }\r\n }\r\n\r\n get DisplayAccuracy()\r\n {\r\n return this._DisplayAccuracy;\r\n }\r\n\r\n set DisplayAccuracy(v: number)\r\n {\r\n if (!equaln(v, this._DisplayAccuracy))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DisplayAccuracy = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n get Contour() { return this._Contour; }\r\n\r\n GetGripPoints()\r\n {\r\n let box = this._Contour.BoundingBox;\r\n let size = box.getSize(new Vector3);\r\n let p1 = new Vector3(size.x);\r\n let p2 = p1.clone();\r\n r.setRotate(this._StartAngle);\r\n r.applyVector(p1);\r\n r.setRotate(this._EndAngle);\r\n r.applyVector(p2);\r\n p1.applyMatrix4(this._Matrix);\r\n p2.applyMatrix4(this._Matrix);\r\n return [p1, p2];\r\n }\r\n\r\n GetObjectSnapPoints(snapMode: ObjectSnapMode, pickPoint: Vector3, lastPoint: Vector3)\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.Nea:\r\n break;\r\n case ObjectSnapMode.Cen:\r\n break;\r\n case ObjectSnapMode.Per:\r\n break;\r\n case ObjectSnapMode.Tan:\r\n break;\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n MoveGripPoints(indexs: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let i of indexs)\r\n {\r\n let p = this.GetGripPoints()[i];\r\n let np = p.add(vec).applyMatrix4(this.OCSInv);\r\n let a = angle(np);\r\n if (i === 0)\r\n this._StartAngle = a;\r\n else\r\n this._EndAngle = a;\r\n\r\n this.Update();\r\n return;\r\n }\r\n }\r\n\r\n \r\n private _MeshGeometry: Geometry;\r\n\r\n get BoundingBox()\r\n {\r\n let geom = this.MeshGeometry;\r\n\r\n if (!geom)\r\n {\r\n console.error(\"RevolveSolid无法建模\");\r\n return new Box3;\r\n }\r\n\r\n if (!geom.boundingBox)\r\n geom.computeBoundingBox();\r\n\r\n return geom.boundingBox.clone().applyMatrix4(this._Matrix);\r\n }\r\n\r\n private _CacheContourPoints: Vector2[];//轮廓2D点\r\n private _CacheContourPoints3D: Vector3[];//轮廓3D点\r\n\r\n private _CacheContourPoints3DQ: Vector3[];//放样点(展开)\r\n private _CacheContourPoints3DQ2: Vector3[][] = [];//放样点集合缓存(只是避免了重复构造)\r\n\r\n private _CacheContourFaces: [number, number, number][];//Face缓存\r\n private _CacheIsRev: boolean;//方向缓存\r\n\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry) return this._MeshGeometry;\r\n\r\n _Arc.StartAngle = this._StartAngle;\r\n _Arc.EndAngle = this._EndAngle;\r\n\r\n if (this._CacheIsRev === undefined)\r\n {\r\n let n = this._Contour.Normal;\r\n this._CacheIsRev = n.y > 0;\r\n }\r\n\r\n if (this._Contour.DisplayAccuracy !== this._DisplayAccuracy)\r\n {\r\n this._CacheContourPoints = undefined;\r\n this._CacheContourPoints3DQ2 = [];\r\n }\r\n if (this._CacheContourPoints === undefined)\r\n {\r\n this._CacheContourPoints = [];\r\n this._Contour.DisplayAccuracy = this._DisplayAccuracy;\r\n for (let p of this._Contour.Shape.getPoints(6))\r\n {\r\n this._CacheContourPoints.push(p);\r\n if (p[\"_mask_\"])\r\n this._CacheContourPoints.push(p);\r\n }\r\n\r\n this._CacheContourPoints3D = this._CacheContourPoints.map(p => AsVector3(p).applyMatrix4(this._Contour.OCSNoClone));\r\n\r\n this._CacheContourFaces = ShapeUtils.triangulateShape(this._CacheContourPoints, []) as [number, number, number][];\r\n\r\n this._CacheContourPoints3DQ = [];\r\n if (isParallelTo(this._Contour.Normal, YAxis))\r\n this._CacheContourPoints3DQ.push(...this._CacheContourPoints3D);\r\n else\r\n for (let i = 0; i < this._CacheContourPoints3D.length; i++)\r\n {\r\n let p1 = this._CacheContourPoints3D[i];\r\n let p2 = this._CacheContourPoints3D[FixIndex(i + 1, this._CacheContourPoints3D)];\r\n let length = p1.distanceTo(p2);\r\n v.subVectors(p2, p1);\r\n let count = clamp(Math.floor(length / 50), 2, 16);//合理的控制采样精度是性能的关键\r\n v.divideScalar(count);\r\n\r\n this._CacheContourPoints3DQ.push(p1);\r\n if (equaln(p1.x, 0) && equaln(p1.y, 0)\r\n && equaln(p2.x, 0) && equaln(p2.y, 0))\r\n continue;\r\n for (let j = 1; j < count; j++)\r\n {\r\n this._CacheContourPoints3DQ.push(v.clone().multiplyScalar(j).add(p1));\r\n }\r\n }\r\n\r\n if (!this._CacheIsRev)\r\n this._CacheContourPoints3DQ.reverse();\r\n }\r\n\r\n let us: number[] = [0];\r\n for (let i = 1; i < this._CacheContourPoints.length; i++)\r\n us.push(us[i - 1] + this._CacheContourPoints[i].distanceTo(this._CacheContourPoints[i - 1]) * 0.001);\r\n\r\n //性能:此处用BufferGeometry可以提高性能\r\n let geo = new Geometry;\r\n\r\n\r\n if (this._StartAngle !== this._EndAngle)\r\n {\r\n //起点盖子\r\n r.setRotate(this._StartAngle);\r\n let contoursStart = this._CacheContourPoints3D.map(p =>\r\n {\r\n p = p.clone();\r\n r.applyVector(p);\r\n return p;\r\n });\r\n geo.vertices.push(...contoursStart);\r\n for (let face of this._CacheContourFaces)\r\n {\r\n if (this._CacheIsRev)\r\n geo.faces.push(new Face3(face[2], face[1], face[0]));\r\n else\r\n geo.faces.push(new Face3(face[0], face[1], face[2]));\r\n }\r\n\r\n //终点盖子\r\n r.setRotate(this._EndAngle);\r\n let contoursEnd = this._CacheContourPoints3D.map(p =>\r\n {\r\n p = p.clone();\r\n r.applyVector(p);\r\n return p;\r\n });\r\n let count = geo.vertices.length;\r\n geo.vertices.push(...contoursEnd);\r\n for (let face of this._CacheContourFaces)\r\n {\r\n if (!this._CacheIsRev)\r\n geo.faces.push(new Face3(count + face[2], count + face[1], count + face[0]));\r\n else\r\n geo.faces.push(new Face3(count + face[0], count + face[1], count + face[2]));\r\n }\r\n }\r\n\r\n let allAngle = this._StartAngle === this._EndAngle ? Math.PI * 2 : _Arc.AllAngle;\r\n\r\n RevolveLine(geo, this._CacheContourPoints3DQ, this._CacheContourPoints3DQ2, this._StartAngle, allAngle, us);\r\n geo.computeFaceNormals();\r\n geo.computeVertexNormals();\r\n\r\n \r\n return this._MeshGeometry;\r\n }\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n UpdateDrawGeometry()\r\n {\r\n 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 private static MeshNromal = new MeshNormalMaterial({ wireframe: true });\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n Object3DRemoveAll(obj);\r\n\r\n if (type === RenderType.Wireframe)\r\n {\r\n let g = this.MeshGeometry;\r\n obj.add(new Mesh(g, RevolveSolid.MeshNromal));\r\n }\r\n else if (type === RenderType.Physical || type === RenderType.Physical2)\r\n {\r\n let g = this.MeshGeometry;\r\n obj.add(new Mesh(g, this.MeshMaterial));\r\n }\r\n else// if (type === RenderType.Conceptual || type===RenderType.Physical || type === RenderType.Jig)\r\n {\r\n let g = this.MeshGeometry;\r\n obj.add(new Mesh(g, ColorMaterial.GetConceptualMaterial(this.DrawColorIndex)));\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n /**\r\n * 更新实体Jig状态时的材质\r\n */\r\n UpdateJigMaterial(color = 8)\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n if (obj.children.length)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetBasicMaterialTransparent(8, 0.1);\r\n }\r\n }\r\n }\r\n RestoreJigMaterial()\r\n {\r\n for (let [type, obj] of this._CacheDrawObject)\r\n {\r\n if (obj.children.length)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n if (type === RenderType.Wireframe)\r\n mesh.material = RevolveSolid.MeshNromal;\r\n else if (type === RenderType.Physical2 || type === RenderType.Physical)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n else\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.DrawColorIndex);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * 当实体需要被更新时,更新实体材质\r\n */\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D)\r\n {\r\n if (renderType === RenderType.Conceptual)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetConceptualMaterial(this.DrawColorIndex);\r\n }\r\n else if (renderType === RenderType.Physical2 || renderType === RenderType.Physical)\r\n {\r\n let mesh = obj.children[0] as Mesh;\r\n mesh.material = this.MeshMaterial;\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n this._Contour = file.ReadObject();\r\n if (ver > 1)\r\n {\r\n this._StartAngle = file.Read();\r\n this._EndAngle = file.Read();\r\n }\r\n\r\n if (ver > 2)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n\r\n if (ver > 3)\r\n this._DisplayAccuracy = file.Read();\r\n return this;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(4);\r\n super.WriteFile(file);\r\n file.WriteObject(this._Contour);\r\n file.Write(this._StartAngle);\r\n file.Write(this._EndAngle);\r\n\r\n // ver3\r\n file.WriteBool(this._LockMaterial);\r\n // ver4\r\n file.Write(this._DisplayAccuracy);\r\n return this;\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n}\r\n\r\nfunction RevolveLine(geo: Geometry, contourPoints: Vector3[], cachePoints: Vector3[][], startAngle: number, allAngle: number, us: number[])\r\n{\r\n //计算圆的半径\r\n let rotateCircleRadius = 0;\r\n for (let p of contourPoints)\r\n {\r\n let r = p.x * p.x + p.y * p.y;\r\n if (r > rotateCircleRadius)\r\n rotateCircleRadius = r;\r\n }\r\n rotateCircleRadius = Math.sqrt(rotateCircleRadius);\r\n\r\n let minCount = Math.max(2, Math.ceil((allAngle) / Math.PI) * 4);\r\n let angleCount = clamp(Math.floor(rotateCircleRadius / 3.2), minCount, 30);\r\n\r\n // let angleCount = Math.max(Math.floor(allAngle / 0.2), 3);//合理的控制采样精度是性能的关键\r\n let anDiv = allAngle / angleCount;\r\n\r\n let startVerticesCount = geo.vertices.length;\r\n let contourVerticesCount = contourPoints.length;\r\n\r\n let count2 = (equaln(allAngle, Math.PI * 2) ? angleCount : angleCount + 1);\r\n //TODO:如果有必要的话此处可以缓存0-360度的轮廓点用空间换时间\r\n for (let i = 0; i < count2; i++)\r\n {\r\n r.setRotate(startAngle + anDiv * i);\r\n let curPoints: Vector3[];\r\n if (i < cachePoints.length)//使用已经生成的点,避免重复的生成新的Vector3造成的过多GC\r\n {\r\n curPoints = cachePoints[i];\r\n for (let j = 0; j < curPoints.length; j++)\r\n {\r\n let p = curPoints[j];\r\n p.copy(contourPoints[j]);\r\n r.applyVector(p);\r\n }\r\n }\r\n else\r\n {\r\n curPoints = contourPoints.map(p =>\r\n {\r\n p = p.clone();\r\n r.applyVector(p);\r\n return p;\r\n });\r\n cachePoints.push(curPoints);\r\n }\r\n geo.vertices.push(...curPoints);\r\n }\r\n\r\n for (let i = 0; i < angleCount; i++)\r\n {\r\n let nextI = FixIndex(i + 1, count2);\r\n\r\n let s1 = startVerticesCount + i * contourVerticesCount;\r\n let s2 = startVerticesCount + nextI * contourVerticesCount;\r\n\r\n for (let j = 0; j < contourVerticesCount; j++)\r\n {\r\n let jn = FixIndex(j + 1, contourVerticesCount);\r\n if (!IsAxis(contourPoints[j], contourPoints[jn]))\r\n {\r\n geo.faces.push(new Face3(j + s1, jn + s1, s2 + j));\r\n geo.faces.push(new Face3(j + s2, jn + s1, s2 + jn));\r\n\r\n geo.faceVertexUvs[0].push(\r\n [\r\n new Vector2(i / (angleCount / 2), us[j]),\r\n new Vector2(i / (angleCount / 2), us[jn]),\r\n new Vector2(nextI / (angleCount / 2) || 2, us[j]),\r\n ],\r\n [\r\n new Vector2(nextI / (angleCount / 2) || 2, us[j]),\r\n new Vector2(i / (angleCount / 2), us[jn]),\r\n new Vector2(nextI / (angleCount / 2) || 2, us[jn]),\r\n ]\r\n );\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction IsAxis(p1: Vector3, p2: Vector3)\r\n{\r\n return equaln(p1.x, 0) && equaln(p1.y, 0) && equaln(p2.x, 0) && equaln(p2.y, 0);\r\n}\r\n","import { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { SymbolTableRecord } from \"../SymbolTableRecord\";\r\n\r\n/**\r\n * 对纹组信息设置.\r\n */\r\n@Factory\r\nexport class AlignLineGroupRecord extends SymbolTableRecord\r\n{\r\n @AutoRecord Objects: ObjectId[] = [];\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (name !== this.name)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.name = name;\r\n }\r\n }\r\n\r\n Purge()\r\n {\r\n arrayRemoveIf(this.Objects, id => !id || id.IsErase);\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n let count = file.Read();\r\n this.Objects.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Objects.push(id);\r\n }\r\n }\r\n //对象将自身数据写入到文件\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.Write(this.Objects.length);\r\n for (let id of this.Objects)\r\n file.WriteObjectId(id);\r\n }\r\n //#endregion\r\n}\r\n","import { LineBasicMaterial } from \"three\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Entity } from \"../Entity/Entity\";\r\n\r\nexport function GetDimLineMaterial(dim: Entity, renderType: RenderType): LineBasicMaterial\r\n{\r\n if (renderType === RenderType.Wireframe)\r\n return ColorMaterial.GetLineMaterial(dim.DrawColorIndex);\r\n else if (renderType > 100)\r\n return ColorMaterial.GetLineMaterial(0);\r\n else\r\n return ColorMaterial.GetLineMaterial(6);\r\n}\r\n","import { BufferGeometry, Material, MathUtils, Matrix3, Matrix4, Mesh, Object3D, Line as TLine, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { arrayRemoveDuplicateBySort, arraySortByNumber } from \"../../Common/ArrayExt\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { reviseMirrorMatrix } from \"../../Common/Matrix4Utils\";\r\nimport { FixIndex, FixedNotZero } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { angle, equaln, equalv3, polar } from \"../../Geometry/GeUtils\";\r\nimport { IntersectOption } from \"../../GraphicsSystem/IntersectWith\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { DimStyleKeyCode } from \"../DimStyle/DimstyleKeyCodeEnum\";\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { TextAligen } from \"../Text/Text\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\n/**\r\n * 两条直线的角度标注\r\n */\r\n@Factory\r\nexport class LineAngularDimension extends Dimension\r\n{\r\n private _Arc = new Arc();\r\n constructor(\r\n protected _L1StartPoint = new Vector3(), //第一条直线的起点\r\n protected _L1EndPoint = new Vector3(), //第一条直线的终点\r\n protected _L2StartPoint = new Vector3(), //第二条直线的起点\r\n protected _L2EndPoint = new Vector3(),\r\n protected _DimPoint = new Vector3(), //标注位置\r\n )\r\n {\r\n super();\r\n // this._Arc.ColorIndex = 3;\r\n this._Text.TextAligen = TextAligen.Down;\r\n this._Text.Height = HostApplicationServices.dimTextHeight;\r\n }\r\n\r\n\r\n override get FractionDigits() { return this.GetDimStyleValue(DimStyleKeyCode.DIMADEC); }\r\n override set FractionDigits(length: number)\r\n {\r\n this.SetDimStyleOverrideValue(DimStyleKeyCode.DIMADEC, length);\r\n }\r\n\r\n protected GetPrimitiveString()\r\n {\r\n return FixedNotZero(MathUtils.radToDeg(this._Arc.AllAngle), this.FractionDigits) + \"°\";\r\n }\r\n\r\n UpdateDimData(l1sp: Vector3, l1ep: Vector3, l2sp: Vector3, l2ep: Vector3, dimp: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n for (let [p, pn] of [\r\n [this._L1StartPoint, l1sp],\r\n [this._L1EndPoint, l1ep],\r\n [this._L2StartPoint, l2sp],\r\n [this._L2EndPoint, l2ep],\r\n [this._DimPoint, dimp],\r\n ])\r\n {\r\n if (pn)\r\n p.copy(pn).applyMatrix4(inv);\r\n }\r\n this.Update();\r\n }\r\n\r\n get Text()\r\n {\r\n return this._Text;\r\n }\r\n get L1StartPoint()\r\n {\r\n return this._L1StartPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get L2StartPoint()\r\n {\r\n return this._L2StartPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get L1EndPoint()\r\n {\r\n return this._L1EndPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get L2EndPoint()\r\n {\r\n return this._L2EndPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get DimPoint()\r\n {\r\n return this._DimPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n get Arc()\r\n {\r\n return this._Arc.Clone().ApplyMatrix(this._Matrix);\r\n }\r\n //#region 动态拽拖\r\n GetGripPoints(): Array<Vector3>\r\n {\r\n return [\r\n this._L1StartPoint,\r\n this._L1EndPoint,\r\n this._L2StartPoint,\r\n this._L2EndPoint,\r\n this._DimPoint,\r\n ].map(p =>\r\n {\r\n return p.clone().applyMatrix4(this._Matrix);\r\n });\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let arr = [\r\n this._L1StartPoint,\r\n this._L1EndPoint,\r\n this._L2StartPoint,\r\n this._L2EndPoint,\r\n this._DimPoint,\r\n ];\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n for (let i of indexList)\r\n arr[i].add(vec);\r\n this.Update();\r\n }\r\n GetStretchPoints(): Array<Vector3>\r\n {\r\n return this.GetGripPoints();\r\n }\r\n MoveStretchPoints(indexList: Array<number>, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.MoveGripPoints(indexList, vec);\r\n }\r\n //#endregion\r\n\r\n //#region 绘制\r\n\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._Text.CopyFrom(this._Text);\r\n ent._Arc.CopyFrom(this._Arc);\r\n for (let [type, obj] of ent._CacheDrawObject)\r\n {\r\n for (let o of obj.children)\r\n if (o instanceof TLine)\r\n o.geometry = o.geometry.clone();\r\n }\r\n return ent;\r\n }\r\n\r\n Explode()\r\n {\r\n //为了避免Text对象没有被更新.\r\n this.GetDrawObjectFromRenderType();\r\n return [\r\n this._Arc.Clone().ApplyMatrix(this._Matrix),\r\n this._Text.Clone().ApplyMatrix(this._Matrix)\r\n ];\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n let arc = this._Arc.Clone().ApplyMatrix(this._Matrix);\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints().concat([arc.StartPoint, arc.EndPoint]);\r\n default:\r\n return arc.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n }\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n this._Text.ColorIndex = this.ColorIndex;\r\n\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let arrow1 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrowSize = 10;\r\n\r\n let l: TLine | Line2, l2: TLine | Line2;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n l = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n l2 = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n }\r\n else\r\n {\r\n l = new TLine(BufferGeometryUtils.CreateFromPts([new Vector3(), new Vector3()]), colorMaterial);\r\n l2 = new TLine(BufferGeometryUtils.CreateFromPts([new Vector3(), new Vector3()]), colorMaterial);\r\n }\r\n\r\n arrow1.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let obj = new Object3D();\r\n obj.add(arrow1, arrow2, l, l2);\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n Update2Line(l1: Line, l2: Line, intPt: Vector3, li1: TLine, li2: TLine)\r\n {\r\n let intPar1 = l1.GetParamAtPoint(intPt);\r\n if (intPar1 >= 1)\r\n l1.Reverse();\r\n\r\n let intPar2 = l2.GetParamAtPoint(intPt);\r\n if (intPar2 >= 1)\r\n l2.Reverse();\r\n\r\n const updateLine = (l: Line, li: TLine | Line2, refPt: Vector3, refPt2?: Vector3) =>\r\n {\r\n let par = l.GetParamAtPoint(refPt);\r\n let refPar = l.GetParamAtPoint(intPt);\r\n if (par > 1)\r\n {\r\n li.visible = true;\r\n if (li instanceof TLine)\r\n {\r\n let geo = li.geometry as BufferGeometry;\r\n geo.copy(BufferGeometryUtils.CreateFromPts([l.EndPoint, refPt]));\r\n }\r\n else\r\n {\r\n let geo = li.geometry;\r\n geo.setPositions([...l.EndPoint.toArray(), ...refPt.toArray()]);\r\n }\r\n }\r\n else if (par < 0)\r\n {\r\n li.visible = true;\r\n if (li instanceof TLine)\r\n {\r\n let geo = li.geometry as BufferGeometry;\r\n\r\n geo.copy(\r\n BufferGeometryUtils.CreateFromPts([par < refPar ? intPt : l.StartPoint, refPt])\r\n );\r\n }\r\n else\r\n {\r\n let geo = li.geometry;\r\n let p = par < refPar ? intPt : l.StartPoint;\r\n geo.setPositions([...p.toArray(), ...refPt.toArray()]);\r\n }\r\n\r\n }\r\n else if (isNaN(par) && refPt2)\r\n {\r\n updateLine(l, li, refPt2);\r\n }\r\n else\r\n {\r\n li.visible = false;\r\n }\r\n };\r\n\r\n updateLine(l1, li1, this._Arc.StartPoint, this._Arc.EndPoint);\r\n updateLine(l2, li2, this._Arc.EndPoint, this._Arc.StartPoint);\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let [arrow1, arrow2, li1, li2] = obj.children;\r\n obj.remove(...obj.children.slice(4));\r\n\r\n let l1 = new Line(this._L1StartPoint, this._L1EndPoint);\r\n let l2 = new Line(this._L2StartPoint, this._L2EndPoint);\r\n\r\n let insP = l1.IntersectWith(l2, IntersectOption.ExtendBoth)[0];\r\n if (insP)\r\n {\r\n this._Arc.AutoUpdate = false;//如果没有在这边关闭这个,那么Arc的盒子将错误\r\n this._Arc.Center = insP;\r\n this._Arc.Radius = insP.distanceTo(this._DimPoint);\r\n\r\n let ans = [this._L1StartPoint, this._L1EndPoint, this._L2StartPoint, this._L2EndPoint]\r\n .map(p =>\r\n {\r\n if (equalv3(p, insP))\r\n return NaN;\r\n return angle(p.clone().sub(insP));\r\n }).filter(a => !isNaN(a));\r\n ans = ans.concat(ans.map(a => (a + Math.PI) % (Math.PI * 2)));\r\n arraySortByNumber(ans);\r\n arrayRemoveDuplicateBySort(ans, (a1, a2) => equaln(a1, a2));\r\n\r\n let dimAn = angle(this._DimPoint.clone().sub(insP));\r\n\r\n for (let i = 0; i < ans.length; i++)\r\n {\r\n let ni = FixIndex(i + 1, ans.length);\r\n\r\n this._Arc.StartAngle = ans[ni];\r\n this._Arc.EndAngle = ans[i];\r\n this._Arc.ColorIndex = this._Color;\r\n\r\n if (this._Arc.ParamOnCurve(this._Arc.GetParamAtAngle(dimAn)))\r\n {\r\n this._Arc.AutoUpdate = true;\r\n this._Arc.DeferUpdate();\r\n\r\n AddEntityDrawObject(obj, this._Arc, renderType);\r\n arrow1.position.copy(this._Arc.StartPoint);\r\n arrow1.rotation.z = this._Arc.GetFirstDerivAngle(0) + Math.PI / 2;\r\n arrow1.updateMatrix();\r\n\r\n arrow2.position.copy(this._Arc.EndPoint);\r\n arrow2.rotation.z = this._Arc.GetFirstDerivAngle(1) - Math.PI / 2;\r\n arrow2.updateMatrix();\r\n\r\n this._Text.AutoUpdate = false;//更新标记\r\n\r\n this._Text.Height = this.TextSize;\r\n this._Text.TextString = this.TextString;\r\n let midAngle = this._Arc.GetAngleAtParam(0.5);\r\n this._Text.Position = polar(this._Arc.GetPointAtParam(0.5), midAngle, 10);\r\n this._Text.TextRotation = midAngle % (Math.PI) - Math.PI / 2;\r\n\r\n this._Text.TextAligen = midAngle > Math.PI ? TextAligen.Top : TextAligen.Down;\r\n\r\n this._Text.AutoUpdate = true;//更新标记\r\n this._Text.DeferUpdate();\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n break;\r\n }\r\n }\r\n\r\n this.Update2Line(l1, l2, insP, li1 as TLine, li2 as TLine);\r\n }\r\n }\r\n\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n let colorMaterial = GetDimLineMaterial(this, type);\r\n let count = Math.min(4, obj.children.length);\r\n for (let i = 0; i < count; i++)\r\n {\r\n let l = obj.children[i] as TLine;\r\n l.material = colorMaterial;\r\n }\r\n this._Arc.ColorIndex = this._Color;\r\n this._Text.ColorIndex = this._Color;\r\n }\r\n\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p1 = this.L1StartPoint;\r\n let p2 = this.L1EndPoint;\r\n let p3 = this.L2StartPoint;\r\n let p4 = this.L2EndPoint;\r\n let p5 = this.DimPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix, 1);\r\n\r\n this.UpdateDimData(p2, p1, p4, p3, p5);\r\n\r\n return this;\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._L1StartPoint.fromArray(file.Read());\r\n this._L1EndPoint.fromArray(file.Read());\r\n this._L2StartPoint.fromArray(file.Read());\r\n this._L2EndPoint.fromArray(file.Read());\r\n this._DimPoint.fromArray(file.Read());\r\n if (ver > 1) this._TextString = file.Read();\r\n if (ver > 2 && ver < 4) this.TextSize = file.Read();\r\n\r\n if (ver > 3) this.ReadDimStyle(file);\r\n if (ver > 4)\r\n this._DimStyle = file.ReadHardObjectId() ?? HostApplicationServices.CurrentDimStyle;\r\n else\r\n this._DimStyle = HostApplicationServices.CurrentDimStyle;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(5);\r\n file.Write(this._L1StartPoint.toArray());\r\n file.Write(this._L1EndPoint.toArray());\r\n file.Write(this._L2StartPoint.toArray());\r\n file.Write(this._L2EndPoint.toArray());\r\n file.Write(this._DimPoint.toArray());\r\n file.Write(this._TextString);\r\n\r\n this.WriteDimStyle(file);\r\n file.WriteHardObjectId(this._DimStyle);\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { BufferGeometry, Material, Matrix3, Matrix4, Mesh, Object3D, Line as TLine, Vector2, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { reviseMirrorMatrix } from \"../../Common/Matrix4Utils\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { AsVector2, AsVector3, ZAxis, angle, angleAndX, equaln, equalv3, isParallelTo, midPoint } from \"../../Geometry/GeUtils\";\r\nimport { ROTATE_MTX2 } from \"../../Geometry/RotateUV\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { DimTextPosDir } from \"../DimStyle/DimStyleRecord\";\r\nimport { DimStyleKeyCode } from \"../DimStyle/DimstyleKeyCodeEnum\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { Polyline } from \"../Entity/Polyline\";\r\nimport { TextAligen } from \"../Text/Text\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\n/**用于提供捕捉的多段线 */\r\nlet snapPolyline = new Polyline([{ pt: new Vector2, bul: 0 }, { pt: new Vector2, bul: 0 }, { pt: new Vector2, bul: 0 }, { pt: new Vector2, bul: 0 }]);\r\n\r\n\r\n/**\r\n * 对齐标注\r\n * 存在子类重载(线性标注 LinearDimension)\r\n */\r\n@Factory\r\nexport class AlignedDimension extends Dimension\r\n{\r\n //引线(用于绘制)\r\n private _LeadLine = new Polyline();\r\n /**引线的起始位置,在引线坐标系+使用中点 */\r\n private _LeadPos: Vector2 = new Vector2(30, this.TextSize * 1.2);\r\n\r\n /**构造函数提供的点在对象坐标系内部 */\r\n constructor(\r\n //针脚\r\n protected _FootP1: Vector3 = new Vector3(),\r\n protected _FootP2: Vector3 = new Vector3(),\r\n //肩膀\r\n protected _ArmP1: Vector3 = new Vector3(),\r\n protected _ArmP2: Vector3 = new Vector3(),\r\n protected _TextRotation: number = null,\r\n //当尺寸线放不下文字时,使用引线\r\n protected _UseLead: boolean = true,\r\n )\r\n {\r\n super();\r\n\r\n this._ArmP1.setZ(0);\r\n this._ArmP2.setZ(0);\r\n }\r\n\r\n get Distance() { return this._ArmP1.distanceTo(this._ArmP2); }\r\n\r\n get FootP1() { return this._FootP1.clone().applyMatrix4(this._Matrix); }\r\n set FootP1(v: Vector3)\r\n {\r\n this._FootP1.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n\r\n get FootP2() { return this._FootP2.clone().applyMatrix4(this._Matrix); }\r\n set FootP2(v: Vector3)\r\n {\r\n this._FootP2.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n\r\n get ArmP1() { return this._ArmP1.clone().applyMatrix4(this._Matrix); }\r\n set ArmP1(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ArmP1.copy(v).applyMatrix4(this.OCSInv);\r\n this._ArmP1.setZ(0);\r\n this.Update();\r\n }\r\n\r\n get ArmP2() { return this._ArmP2.clone().applyMatrix4(this._Matrix); }\r\n set ArmP2(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ArmP2.copy(v).applyMatrix4(this.OCSInv);\r\n this._ArmP2.setZ(0);\r\n this.Update();\r\n }\r\n\r\n get TextPosition() { return midPoint(this._ArmP1, this._ArmP2).applyMatrix4(this._Matrix); }\r\n /**实际上这个是BasePoint 用来定位尺寸线的位置 */\r\n set TextPosition(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n p = p.clone().applyMatrix4(this.OCSInv).setZ(0);\r\n let l = new Line(this._ArmP1, this._ArmP2);\r\n let cp = l.GetClosestPointTo(p, true);\r\n let v = p.clone().sub(cp);\r\n\r\n this._ArmP1.add(v);\r\n this._ArmP2.add(v);\r\n\r\n this.Update();\r\n }\r\n\r\n //创建以arm1,arm2为x轴 position在foot1的坐标系 用于定位引线\r\n get DalUcs()\r\n {\r\n let dalUcs = new Matrix4();\r\n if (!equalv3(this._ArmP1, this._ArmP2))\r\n {\r\n let vy = this.ParseTopDir()[0];\r\n let vx = new Vector3().crossVectors(vy, ZAxis);\r\n dalUcs = new Matrix4().makeBasis(vx, vy, ZAxis);\r\n }\r\n dalUcs.setPosition(midPoint(this._ArmP1, this._ArmP2));\r\n return dalUcs;\r\n }\r\n\r\n set TextRotation(angle: number)\r\n {\r\n this._TextRotation = angle;\r\n this.Update();\r\n }\r\n\r\n get Text()\r\n {\r\n if (!this._Text.TextString)\r\n this.UpdateText();\r\n\r\n return this._Text;\r\n }\r\n\r\n protected GetPrimitiveString(): string\r\n {\r\n return FixedNotZero(this._ArmP1.distanceTo(this._ArmP2), this.FractionDigits);\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n this.SetDataToTempPolyline();\r\n if (this._Text.HasBoundingBox)\r\n return snapPolyline.BoundingBox.union(this.Text.BoundingBox);\r\n else\r\n return snapPolyline.BoundingBox;\r\n }\r\n\r\n get LeadVisible() { return this._UseLead; }\r\n /**设置引线可见 */\r\n set LeadVisible(visible: boolean)\r\n {\r\n if (this._UseLead === visible) return;\r\n this.WriteAllObjectRecord();\r\n this._UseLead = visible;\r\n this.Update();\r\n }\r\n\r\n set LeadInLeft(isLeft: boolean)\r\n {\r\n if (this._LeadPos.x < 0 === isLeft)\r\n return;\r\n\r\n this.FlippeLead();\r\n }\r\n\r\n /**切换引线可见性 */\r\n ToggleLeadVisible()\r\n {\r\n this.WriteAllObjectRecord();\r\n this.LeadVisible = !this._UseLead;\r\n }\r\n\r\n /**切换引线翻转 */\r\n FlippeLead()\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LeadPos.x = -this._LeadPos.x;\r\n this.Update();\r\n }\r\n\r\n get LeadY() { return this._LeadPos.y; }\r\n /**引线偏移 */\r\n set LeadY(y: number)\r\n {\r\n if (this.LeadY === y) return;\r\n this.WriteAllObjectRecord();\r\n this._LeadPos.y = y;\r\n this.Update();\r\n }\r\n\r\n get LeadX() { return this._LeadPos.x; }\r\n set LeadX(x: number)\r\n {\r\n if (this.LeadX === x) return;\r\n this.WriteAllObjectRecord();\r\n this._LeadPos.x = x;\r\n this.Update();\r\n }\r\n\r\n /**设置引线数据 */\r\n SetLeadData(offset: Vector2, isFlipped = false)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._LeadPos.copy(offset);\r\n if (isFlipped) this._LeadPos.x *= -1;\r\n this.Update();\r\n }\r\n\r\n Explode()\r\n {\r\n this.UpdateText(this._Text.Position);\r\n let res =\r\n [\r\n new Line(this._FootP1.clone(), this._ArmP1.clone()),\r\n new Line(this._ArmP2.clone(), this._ArmP1.clone()),\r\n new Line(this._ArmP2.clone(), this._FootP2.clone()),\r\n this._Text.Clone()\r\n ];\r\n if (this._UseLead && this.NeedLead)\r\n {\r\n let mp = midPoint(this._ArmP1, this._ArmP2);\r\n res.push(\r\n new Line(mp.clone(), AsVector3(this._LeadPos).add(mp)),\r\n new Line(AsVector3(this._LeadPos).add(mp), AsVector3(this._LeadPos).add(mp).add(new Vector3(this.TextBoxWidth, 0, 0)))\r\n );\r\n }\r\n return res.map(en => en.ApplyMatrix(this._Matrix));\r\n }\r\n\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let footP1 = this.FootP1;\r\n let footP2 = this.FootP2;\r\n let armP1 = this.ArmP1;\r\n let armP2 = this.ArmP2;\r\n\r\n reviseMirrorMatrix(this._Matrix, 0);\r\n\r\n this.FootP1 = footP1;\r\n this.FootP2 = footP2;\r\n this.ArmP1 = armP1;\r\n this.ArmP2 = armP2;\r\n\r\n this.Update(UpdateDraw.Geometry);\r\n return this;\r\n }\r\n\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._Text.CopyFrom(this._Text);\r\n for (let [type, obj] of ent._CacheDrawObject)\r\n {\r\n for (let o of obj.children)\r\n if (o instanceof TLine)\r\n o.geometry = o.geometry.clone();\r\n }\r\n return ent;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let obj = new Object3D();\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n let line: TLine | Line2;\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n const geo = new LineGeometry();\r\n line = new Line2(geo, ColorMaterial.PrintLineMatrial);\r\n }\r\n else\r\n line = new TLine(\r\n BufferGeometryUtils.CreateFromPts([this._FootP1, this._FootP2, this._ArmP1, this._ArmP2, this._ArmP2, this._ArmP2]),\r\n colorMaterial\r\n );\r\n\r\n let arrow1 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n\r\n obj.add(line, arrow1, arrow2);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n\r\n return obj;\r\n }\r\n\r\n ParseTopDir(): [Vector3, Vector3, Vector3]\r\n {\r\n let [f1, f2, a1, a2] = [this._FootP1, this._FootP2, this._ArmP1, this._ArmP2].map(p => p.clone().setZ(0));\r\n\r\n let armV = a1.clone().sub(a2);\r\n\r\n //#region 头部延伸线\r\n let topDir1: Vector3, topDir2: Vector3;//↑头顶部的向量 用来突出肩膀(文字或者肩膀的线)\r\n if (!equalv3(f1, a1))\r\n topDir1 = a1.clone().sub(f1).normalize();\r\n if (!equalv3(f2, a2))\r\n topDir2 = a2.clone().sub(f2).normalize();\r\n\r\n let topDir = topDir1 ?? topDir2;\r\n if (!topDir)\r\n {\r\n topDir = armV.clone().normalize();\r\n ROTATE_MTX2.applyVector(topDir);\r\n }\r\n\r\n if (!topDir1) topDir1 = topDir;\r\n if (!topDir2) topDir2 = topDir;\r\n\r\n return [topDir, topDir1, topDir2];\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n obj.remove(...obj.children.slice(3));\r\n let [line, arrow1, arrow2] = obj.children;\r\n\r\n let [f1, f2, a1, a2] = [this._FootP1, this._FootP2, this._ArmP1, this._ArmP2].map(p => p.clone().setZ(0));\r\n\r\n let armV = a1.clone().sub(a2);\r\n\r\n //#region 头部延伸线\r\n let [topDir, topDir1, topDir2] = this.ParseTopDir();\r\n\r\n let topExt = this.GetDimStyleValue(DimStyleKeyCode.DIMEXE) ?? 10;\r\n let a11 = topDir1.clone().multiplyScalar(topExt).add(a1);\r\n let a21 = topDir2.clone().multiplyScalar(topExt).add(a2);\r\n //#endregion\r\n\r\n //#region 固定延伸线的尺寸\r\n let length1 = f1.distanceTo(a1);\r\n let length2 = f2.distanceTo(a2);\r\n let newLength1 = length1;\r\n let newLength2 = length2;\r\n\r\n let dimexo = this.GetDimStyleValue(DimStyleKeyCode.DIMEXO) ?? 20;//脚线的偏移距离\r\n newLength1 = Math.max(0, newLength1 - dimexo);\r\n newLength2 = Math.max(0, newLength2 - dimexo);\r\n\r\n if (this.GetDimStyleValue(DimStyleKeyCode.DIMFXLON))//固定脚线长度\r\n {\r\n let fixLength = this.GetDimStyleValue(DimStyleKeyCode.DIMFXL) ?? 100;//固定脚线长度\r\n if (newLength1 > fixLength)\r\n newLength1 = fixLength;\r\n\r\n if (newLength2 > fixLength)\r\n newLength2 = fixLength;\r\n }\r\n\r\n if (newLength1 !== length1)\r\n f1.sub(a1).normalize().multiplyScalar(newLength1).add(a1);\r\n\r\n if (newLength2 !== length2)\r\n f2.sub(a2).normalize().multiplyScalar(newLength2).add(a2);\r\n //#endregion\r\n\r\n //#region 更新线部分\r\n let linePts = [f1, a11, a1, a2, a21, f2];\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n const geometry = (<Line2>line).geometry;\r\n let nums: number[] = [];\r\n for (let p of linePts)\r\n nums.push(p.x, p.y, p.z);\r\n geometry.setPositions(nums);\r\n }\r\n else\r\n BufferGeometryUtils.UpdatePts((<TLine>line).geometry as BufferGeometry, linePts, true);\r\n //#endregion\r\n\r\n //#region 箭头部分\r\n let arrowSize = this.GetDimStyleValue(DimStyleKeyCode.DIMASZ) ?? 10;\r\n if (renderType === RenderType.WireframePrint)//在打印模式下,改变箭头的大小?\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n arrow1.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n arrow1.position.copy(this._ArmP1);\r\n arrow2.position.copy(this._ArmP2);\r\n\r\n let armAn = angle(armV);\r\n if (this._ArmP1.distanceTo(this._ArmP2) < 36)\r\n {\r\n arrow1.rotation.z = armAn + Math.PI / 2;\r\n arrow2.rotation.z = armAn - Math.PI / 2;\r\n }\r\n else\r\n {\r\n arrow1.rotation.z = armAn - Math.PI / 2;\r\n arrow2.rotation.z = armAn + Math.PI / 2;\r\n }\r\n arrow1.updateMatrix();\r\n arrow2.updateMatrix();\r\n //#endregion\r\n\r\n //#region 文字和引线\r\n //更新引线this._LeadOutLine 并返回新的字体位置\r\n let textPos = this.UpdateLeadLine();\r\n let hasLead = this._UseLead && this.NeedLead;\r\n\r\n let textPosDir = this.GetDimStyleValue(DimStyleKeyCode.DIMTAD) as DimTextPosDir ?? DimTextPosDir.Out;\r\n\r\n //文字在尺寸线上距离\r\n let dimGAP = this.GetDimStyleValue(DimStyleKeyCode.DIMGAP) ?? 10;\r\n\r\n if (textPosDir === DimTextPosDir.Out)//文字在尺寸线(或引线)外部\r\n {\r\n let textDir = topDir;//文字相对于基准线(引线) 的位置方向向量\r\n if (hasLead && this._LeadPos.y < 0)//引线方向和头部方向相反 则逆转方向(dir = 引线的朝向)\r\n textDir = textDir.clone().negate();\r\n\r\n if (equaln(textDir.y, 0))//水平标注\r\n this.Text.TextAligen = textDir.x > 0 ? TextAligen.Top : TextAligen.Down;\r\n else\r\n this._Text.TextAligen = textDir.y < 0 ? TextAligen.Top : TextAligen.Down;\r\n\r\n textPos.add(textDir.multiplyScalar(dimGAP));\r\n }\r\n else//文字在尺寸线(或引线)上方\r\n {\r\n let v = 1;\r\n let textDir = topDir;//文字相对于基准线(引线) 的位置方向向量\r\n\r\n if (equaln(textDir.y, 0))//水平标注\r\n v = textDir.x > 0 ? -1 : 1;\r\n else\r\n v = textDir.y < 0 ? -1 : 1;\r\n\r\n this._Text.TextAligen = TextAligen.Down;\r\n textPos.add(topDir.multiplyScalar(dimGAP * v));\r\n }\r\n\r\n if (hasLead)\r\n AddEntityDrawObject(obj, this._LeadLine, renderType);\r\n\r\n this.UpdateText(textPos);\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n //#endregion\r\n }\r\n\r\n get NeedLead(): boolean\r\n {\r\n let distance = this._ArmP1.distanceTo(this._ArmP2);\r\n let textBoxWidth = this.TextBoxWidth;\r\n let needLead = (distance < textBoxWidth - 2) && !(equaln(distance, 0));//文字宽度是否比托盘更宽 是 则需要引线\r\n return needLead;\r\n }\r\n\r\n /**\r\n * 更新引线并返回textPosition\r\n */\r\n UpdateLeadLine(): Vector3\r\n {\r\n let armMidP: Vector3 = midPoint(this._ArmP1, this._ArmP2);\r\n let textPosition = armMidP;\r\n\r\n if (this._UseLead && this.NeedLead) //引线可见且需要引线\r\n {\r\n let dalUcs = this.DalUcs;\r\n\r\n let leadP1 = AsVector3(this._LeadPos).applyMatrix4(dalUcs);\r\n let leadP2 = AsVector3(this._LeadPos).add(new Vector3(this.TextBoxWidth * Math.sign(this._LeadPos.x))).applyMatrix4(dalUcs);\r\n textPosition.setFromMatrixColumn(dalUcs, 3);\r\n\r\n this._LeadLine.AutoUpdate = false;\r\n this._LeadLine.IsEmbedEntity = true;//使它可以捕捉\r\n this._LeadLine.LineData = [textPosition, leadP1, leadP2].map(p => { return { pt: AsVector2(p), bul: 0 }; });\r\n this._LeadLine.ColorIndex = this.DrawColorIndex;\r\n this._LeadLine.Visible = true;//可见性设置\r\n this._LeadLine.AutoUpdate = true;\r\n this._LeadLine.DeferUpdate();\r\n\r\n textPosition.copy(leadP1).add(leadP2).divideScalar(2);//引线中点\r\n }\r\n else //引线不可见或不需要引线\r\n {\r\n this._LeadLine.Visible = false;//可见性设置\r\n }\r\n return textPosition;\r\n }\r\n\r\n UpdateText(textPos?: Vector3)\r\n {\r\n this._Text.AutoUpdate = false;\r\n\r\n let textRo = this._TextRotation ?? angleAndX(this._ArmP1.clone().sub(this._ArmP2));\r\n this._Text.TextString = this.TextString;\r\n this._Text.Position = textPos ?? midPoint(this._ArmP1, this._ArmP2);\r\n this._Text.TextRotation = textRo;\r\n this._Text.ColorIndex = this.DrawColorIndex;\r\n this._Text.Height = this.TextSize * 0.923;//雅黑数字*0.923\r\n\r\n this._Text.DeferUpdate();\r\n this._Text.AutoUpdate = true;\r\n }\r\n\r\n protected OnChangeFootPt()\r\n {\r\n let l = new Line(this._FootP1.clone().setZ(0), this._FootP2.clone().setZ(0));\r\n\r\n let cp = l.GetClosestPointTo(this._ArmP1, true);\r\n\r\n let v = cp.subVectors(this._ArmP1, cp);\r\n\r\n this._ArmP1.copy(this._FootP1.clone().add(v));\r\n this._ArmP2.copy(this._FootP2.clone().add(v));\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n this.SetDataToTempPolyline();\r\n let pts = snapPolyline.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n\r\n if (this._UseLead && this.NeedLead)\r\n {\r\n let dalUcs = this.DalUcs;\r\n let armMidP: Vector3 = midPoint(this._ArmP1, this._ArmP2);\r\n let leadP1 = AsVector3(this._LeadPos).applyMatrix4(dalUcs);\r\n let leadP2 = AsVector3(this._LeadPos).add(new Vector3(this.TextBoxWidth * Math.sign(this._LeadPos.x))).applyMatrix4(dalUcs);\r\n\r\n snapPolyline.LineData[0].pt.set(armMidP.x, armMidP.y);\r\n snapPolyline.LineData[1].pt.set(leadP1.x, leadP1.y);\r\n snapPolyline.LineData[2].pt.set(leadP2.x, leadP2.y);\r\n snapPolyline.LineData[3].pt.set(leadP2.x, leadP2.y);\r\n\r\n for (let p of snapPolyline.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform))\r\n pts.push(p);\r\n }\r\n return pts;\r\n }\r\n\r\n private SetDataToTempPolyline()\r\n {\r\n snapPolyline.OCS = this._Matrix;\r\n snapPolyline.LineData[0].pt.set(this._FootP1.x, this._FootP1.y);\r\n snapPolyline.LineData[1].pt.set(this._ArmP1.x, this._ArmP1.y);\r\n snapPolyline.LineData[2].pt.set(this._ArmP2.x, this._ArmP2.y);\r\n snapPolyline.LineData[3].pt.set(this._FootP2.x, this._FootP2.y);\r\n\r\n if (!equaln(this._FootP1.z, 0))\r\n snapPolyline.OCSNoClone.setPosition(snapPolyline.Position.add(snapPolyline.Normal.multiplyScalar(this._FootP1.z)));\r\n // snapPolyline.LineData[4].pt.set(this._LeadOutPts.dragPt.x, this._LeadOutPts.dragPt.y); //引线拖拽点\r\n // snapPolyline.LineData[5].pt.set(this._LeadOutPts.endPt.x, this._LeadOutPts.endPt.y);\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (renderType === RenderType.WireframePrint)\r\n return;\r\n let mtl = GetDimLineMaterial(this, renderType);\r\n this._LeadLine.ColorIndex = this.DrawColorIndex;\r\n let [line, arrow1, arrow2] = obj.children;\r\n (<Mesh>line).material = mtl;\r\n (<Mesh>arrow1).material = mtl;\r\n (<Mesh>arrow2).material = mtl;\r\n this._Text.ColorIndex = this.DrawColorIndex;\r\n }\r\n\r\n GetGripPoints(): Array<Vector3>\r\n {\r\n let pts = [this._FootP1, this._FootP2, this._ArmP1, this._ArmP2, midPoint(this._ArmP1, this._ArmP2)].map(p => p.clone().applyMatrix4(this._Matrix));\r\n if (this._UseLead && this.NeedLead)\r\n pts.push(AsVector3(this._LeadPos).applyMatrix4(this.DalUcs).applyMatrix4(this._Matrix));\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n let inv0 = inv.clone().setPosition(0, 0, 0);\r\n let vec0 = vec.clone().applyMatrix4(inv0);\r\n for (let i of indexList)\r\n {\r\n if (i === 5)//引线\r\n {\r\n let dalUCS = this.DalUcs.setPosition(0, 0, 0);\r\n dalUCS.getInverse(dalUCS);\r\n vec0.applyMatrix4(dalUCS);\r\n\r\n this._LeadPos.x += vec0.x;\r\n this._LeadPos.y += vec0.y;\r\n }\r\n else if (i >= 2)//肩膀点 文字点(拽拖这个点不会把标注变大)\r\n {\r\n let p = this.TextPosition.add(vec).applyMatrix4(inv);\r\n let l = new Line(this._ArmP1, this._ArmP2);\r\n let cp = l.GetClosestPointTo(p, true);\r\n let v = p.clone().sub(cp);\r\n\r\n this._ArmP1.add(v);\r\n this._ArmP2.add(v);\r\n }\r\n else//脚线\r\n {\r\n if (i === 0)\r\n this._FootP1.add(vec0);\r\n else\r\n this._FootP2.add(vec0);\r\n\r\n this.OnChangeFootPt();\r\n }\r\n }\r\n this.Update();\r\n }\r\n\r\n GetStretchPoints(): Array<Vector3>\r\n {\r\n return this.GetGripPoints();\r\n }\r\n\r\n MoveStretchPoints(indexList: Array<number>, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let lst: number[] = [];\r\n let bChangeText = false;\r\n for (let i of indexList)\r\n {\r\n if (i <= 1)\r\n lst.push(i);\r\n else\r\n bChangeText = true;\r\n }\r\n if (lst.length > 0)\r\n this.MoveGripPoints(lst, vec);\r\n if (bChangeText)\r\n this.MoveGripPoints([2], vec);\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._ArmP1.fromArray(file.Read());\r\n this._ArmP2.fromArray(file.Read());\r\n this._FootP1.fromArray(file.Read());\r\n this._FootP2.fromArray(file.Read());\r\n this._TextRotation = file.Read();\r\n if (ver > 2) this._TextString = file.Read();\r\n\r\n if (ver < 7)//升级到版本7之后 标注统一在OCS平面绘制 (脚线允许在不同的平面)\r\n {\r\n //升级文件版本,将z轴移除\r\n let z = this._ArmP1.z;\r\n if (!equaln(z, 0))\r\n {\r\n this._Matrix.elements[12] += this._Matrix.elements[8] * z;\r\n this._Matrix.elements[13] += this._Matrix.elements[9] * z;\r\n this._Matrix.elements[14] += this._Matrix.elements[10] * z;\r\n\r\n this._ArmP1.z = 0;\r\n this._ArmP2.z = 0;\r\n this._FootP1.z -= z;\r\n this._FootP2.z -= z;\r\n }\r\n\r\n this.SetDimStyleOverrideValue(DimStyleKeyCode.DIMEXO, 0);//原始图纸脚线偏移为9\r\n this.SetDimStyleOverrideValue(DimStyleKeyCode.DIMTAD, DimTextPosDir.Top);//原始图纸的文字位置为上\r\n //虽然原始的标注也没有文字偏移,但是太丑了,所以不还原这个设置\r\n }\r\n\r\n if (ver > 3 && ver < 7)\r\n {\r\n this._UseLead = file.Read();\r\n let leadFlipped = file.Read();\r\n let leadStartP = new Vector3().fromArray(file.Read());\r\n let y = file.Read();\r\n let x = file.Read();\r\n\r\n if (!leadFlipped) x = -x;\r\n\r\n /**旧的引线坐标系 在OCS内部 */\r\n const GetOldDalUcs = () =>\r\n {\r\n let dalUcs = new Matrix4();\r\n if (!equalv3(this._ArmP1, this._ArmP2))\r\n {\r\n let vx = this._ArmP2.clone().sub(this._ArmP1).normalize();\r\n if (equaln(this._ArmP1.x, this._ArmP2.x))\r\n {\r\n if (this._ArmP1.y < this._ArmP2.y)\r\n vx.negate();\r\n }\r\n else if (this._ArmP1.x < this._ArmP2.x)\r\n vx.negate();\r\n\r\n if (isParallelTo(vx, ZAxis))\r\n return dalUcs.setPosition(midPoint(this._ArmP1, this._ArmP2));\r\n\r\n let vy = vx.clone().cross(ZAxis);\r\n dalUcs = new Matrix4().makeBasis(vx, vy, ZAxis);\r\n dalUcs.setPosition(midPoint(this._ArmP1, this._ArmP2));\r\n }\r\n return dalUcs;\r\n };\r\n\r\n let p = new Vector3(x, y);\r\n p.applyMatrix4(GetOldDalUcs());\r\n let cs = this.DalUcs;\r\n p.applyMatrix4(cs.getInverse(cs));\r\n\r\n this._LeadPos.copy(p as any as Vector2);\r\n }\r\n if (ver > 4 && ver < 7) this.TextSize = file.Read();\r\n if (ver > 5 && ver < 7) this.FractionDigits = file.Read() ?? 2;\r\n\r\n if (ver >= 7)\r\n {\r\n this._UseLead = file.Read();\r\n this._LeadPos.set(file.Read(), file.Read());\r\n\r\n this.ReadDimStyle(file);\r\n }\r\n\r\n if (ver > 7)\r\n this._DimStyle = file.ReadHardObjectId() ?? HostApplicationServices.CurrentDimStyle;\r\n else\r\n this._DimStyle = HostApplicationServices.CurrentDimStyle;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(8);\r\n file.Write(this._ArmP1.toArray());\r\n file.Write(this._ArmP2.toArray());\r\n file.Write(this._FootP1.toArray());\r\n file.Write(this._FootP2.toArray());\r\n file.Write(this._TextRotation);\r\n file.Write(this._TextString);\r\n\r\n file.Write(this._UseLead);\r\n file.Write(this._LeadPos.x);\r\n file.Write(this._LeadPos.y);\r\n this.WriteDimStyle(file);\r\n file.WriteHardObjectId(this._DimStyle);\r\n }\r\n //#endregion\r\n}\r\n","import { BufferGeometry, Line, Material, Matrix4, Mesh, Object3D, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { AsVector3 } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { equaln } from \"../../Nest/Common/Util\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Arc } from \"../Entity/Arc\";\r\nimport { Text, TextAligen } from \"../Text/Text\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\n@Factory\r\nexport class ArcDimension extends Dimension\r\n{\r\n private _Arc = new Arc;\r\n protected _Text = new Text();\r\n\r\n constructor(\r\n private _Center: Vector3 = new Vector3,\r\n private _StartAngle: number = 0,\r\n private _EndAngle: number = 1,\r\n private _Clockwise = false,\r\n private _Radius: number = 1,\r\n private _TextRadiusAdd: number = 1,\r\n protected _TextString: string = \"⌒<>\",\r\n )\r\n {\r\n super();\r\n }\r\n\r\n get Text()\r\n {\r\n if (!this._Text.TextString)\r\n {\r\n this.PraseArc();\r\n this.ParseText();\r\n }\r\n return this._Text;\r\n }\r\n\r\n get Arc()\r\n {\r\n if (!this._Arc)\r\n this.PraseArc();\r\n return this._Arc;\r\n }\r\n\r\n set TextRadiusAdd(ra: number)\r\n {\r\n if (equaln(ra, this._TextRadiusAdd)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._TextRadiusAdd = ra;\r\n this.Update();\r\n }\r\n\r\n get TextRadiusAdd() { return this._TextRadiusAdd; }\r\n\r\n protected GetPrimitiveString(): string\r\n {\r\n return FixedNotZero(this._Arc.Length, this.FractionDigits);\r\n }\r\n\r\n //#region 拉伸相关\r\n GetGripPoints(): Vector3[]\r\n {\r\n this.PraseArc();\r\n let pts = this._Arc.GetGripPoints();\r\n for (let p of pts)\r\n p.applyMatrix4(this.OCSNoClone);\r\n return pts;\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n this.PraseArc();\r\n this._Arc.MoveGripPoints(indexList, vec);\r\n\r\n this.UpdateArcFromThisArc();\r\n this.Update();\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n this.PraseArc();\r\n let pts = this._Arc.GetStretchPoints();\r\n for (let p of pts)\r\n p.applyMatrix4(this.OCSNoClone);\r\n return pts;\r\n }\r\n\r\n MoveStretchPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n vec = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n\r\n this.PraseArc();\r\n this._Arc.MoveStretchPoints(indexList, vec);\r\n\r\n this.UpdateArcFromThisArc();\r\n this.Update();\r\n }\r\n\r\n private UpdateArcFromThisArc()\r\n {\r\n this._Center.copy(this._Arc.Center);\r\n this._StartAngle = this._Arc.StartAngle;\r\n this._EndAngle = this._Arc.EndAngle;\r\n this._Radius = this._Arc.Radius;\r\n this._Clockwise = this._Arc.IsClockWise;\r\n }\r\n //#endregion\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let obj = new Object3D();\r\n let line = new Line(new BufferGeometry, colorMaterial);\r\n obj.add(line);\r\n\r\n let arrow1 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrowSize = 10;\r\n arrow1.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n obj.add(arrow1, arrow2);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n obj.remove(...obj.children.slice(3));\r\n\r\n let [line, arrow1, arrow2] = obj.children as [Line, Mesh, Mesh];\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n line.material = colorMaterial;\r\n arrow1.material = colorMaterial;\r\n arrow2.material = colorMaterial;\r\n\r\n this.PraseArc();//半径设置到实际尺寸的位置,获得正确的标注尺寸\r\n let startFootPoint = this._Arc.StartPoint;//一定要在这个位置求脚点\r\n let endFootPoint = this._Arc.EndPoint;\r\n\r\n this._Text.AutoUpdate = false;\r\n\r\n this._Text.ColorIndex = this.ColorIndex;\r\n this.ParseText();\r\n\r\n this._Arc.DeferUpdate();\r\n this._Text.DeferUpdate();\r\n\r\n let linePoints: Vector3[] = [startFootPoint];\r\n for (let p of this._Arc.Shape.getPoints(8))\r\n linePoints.push(AsVector3(p).add(this._Center));\r\n linePoints.push(endFootPoint);\r\n\r\n let geo = line.geometry as BufferGeometry;\r\n if (!BufferGeometryUtils.UpdatePts(geo, linePoints))\r\n {\r\n line.geometry.dispose();\r\n line.geometry = BufferGeometryUtils.CreateFromPts(linePoints);\r\n }\r\n\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n\r\n //更新箭头的位置和旋转角度\r\n arrow1.position.copy(this._Arc.StartPoint);\r\n arrow1.rotation.z = this._Arc.GetFirstDerivAngle(0) + Math.PI / 2;\r\n arrow1.updateMatrix();\r\n\r\n arrow2.position.copy(this._Arc.EndPoint);\r\n arrow2.rotation.z = this._Arc.GetFirstDerivAngle(1) - Math.PI / 2;\r\n arrow2.updateMatrix();\r\n }\r\n\r\n ParseText()\r\n {\r\n this._Text.TextString = this.TextString;\r\n\r\n this._Arc.Radius = this._Radius + this._TextRadiusAdd; //半径设置到文字的位置,获得文字的位置\r\n let textP = this._Arc.GetPointAtParam(0.5);\r\n let ang = this._Arc.GetAngleAtParam(0.5);\r\n let textOCS = new Matrix4().makeRotationZ(ang + Math.PI * 3 / 2).setPosition(textP);\r\n this._Text.TextAligen = TextAligen.Down;\r\n this._Text.OCS = textOCS;\r\n this._Text.Height = this.TextSize;\r\n }\r\n\r\n UpdateDrawObjectMaterial(type: RenderType, obj: Object3D, material?: Material)\r\n {\r\n let colorMaterial = GetDimLineMaterial(this, type);\r\n let count = Math.min(3, obj.children.length);\r\n for (let i = 0; i < count; i++)\r\n {\r\n let l = obj.children[i] as Line;\r\n l.material = colorMaterial;\r\n }\r\n\r\n this._Text.ColorIndex = this.ColorIndex;\r\n this.Text.DeferUpdate();\r\n }\r\n\r\n PraseArc()\r\n {\r\n this._Arc.AutoUpdate = false;\r\n\r\n this._Arc.Center = this._Center;\r\n this._Arc.StartAngle = this._StartAngle;\r\n this._Arc.EndAngle = this._EndAngle;\r\n this._Arc.IsClockWise = this._Clockwise;\r\n this._Arc.Radius = this._Radius;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n this._Center.fromArray(file.Read());\r\n this._Radius = file.Read();\r\n this._TextRadiusAdd = file.Read();\r\n this._Clockwise = file.Read();\r\n this._StartAngle = file.Read();\r\n this._EndAngle = file.Read();\r\n this._TextString = file.Read();\r\n if (ver < 3) this.TextSize = file.Read();\r\n if (ver > 1 && ver < 3) this.FractionDigits = file.Read();\r\n\r\n if (ver > 2) this.ReadDimStyle(file);\r\n if (ver > 3)\r\n this._DimStyle = file.ReadHardObjectId() ?? HostApplicationServices.CurrentDimStyle;\r\n else\r\n this._DimStyle = HostApplicationServices.CurrentDimStyle;\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(4);\r\n super.WriteFile(file);\r\n file.Write(this._Center.toArray());\r\n file.Write(this._Radius);\r\n file.Write(this._TextRadiusAdd);\r\n file.Write(this._Clockwise);\r\n file.Write(this._StartAngle);\r\n file.Write(this._EndAngle);\r\n file.Write(this._TextString);\r\n\r\n this.WriteDimStyle(file);\r\n file.WriteHardObjectId(this._DimStyle);\r\n }\r\n //#endregion\r\n}\r\n","import { BufferGeometry, Material, Matrix3, Matrix4, Mesh, Object3D, Line as TLine, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { DisposeThreeObj } from \"../../Common/Dispose\";\r\nimport { reviseMirrorMatrix } from \"../../Common/Matrix4Utils\";\r\nimport { FixedNotZero } from \"../../Common/Utils\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { MoveMatrix, angle, angleAndX } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { DimStyleKeyCode } from \"../DimStyle/DimstyleKeyCodeEnum\";\r\nimport { Circle } from \"../Entity/Circle\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\n@Factory\r\nexport class RadiusDimension extends Dimension\r\n{\r\n\r\n OnlyRenderType = true;\r\n protected _TextString: string = \"R<>\";\r\n\r\n constructor(\r\n protected _Center = new Vector3(),\r\n protected _DiameterOrRadiusPoint = new Vector3(),\r\n protected _TextPoint = new Vector3(),\r\n )\r\n {\r\n super();\r\n this._Text.Height = HostApplicationServices.dimTextHeight;\r\n }\r\n\r\n get Text()\r\n {\r\n if (!this._Text.TextString)\r\n this.UpdateText();\r\n\r\n return this._Text;\r\n }\r\n\r\n protected GetPrimitiveString(): string\r\n {\r\n return FixedNotZero(this._Center.distanceTo(this._DiameterOrRadiusPoint), this.FractionDigits);\r\n }\r\n\r\n get Center()\r\n {\r\n return this._Center.clone().applyMatrix4(this._Matrix);\r\n }\r\n\r\n set Center(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Center.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n\r\n get DiameterOrRadiusPoint()\r\n {\r\n return this._DiameterOrRadiusPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n set DiameterOrRadiusPoint(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._DiameterOrRadiusPoint.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n get TextPoint()\r\n {\r\n return this._TextPoint.clone().applyMatrix4(this._Matrix);\r\n }\r\n set TextPoint(v: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._TextPoint.copy(v).applyMatrix4(this.OCSInv);\r\n this.Update();\r\n }\r\n Explode()\r\n {\r\n this.UpdateText();\r\n return [\r\n new Line(this._Center, this._DiameterOrRadiusPoint),\r\n new Line(this._DiameterOrRadiusPoint, this._TextPoint),\r\n this._Text.Clone()\r\n ].map(en => en.ApplyMatrix(this._Matrix));\r\n }\r\n\r\n Clone(): this\r\n {\r\n let ent = super.Clone();\r\n ent._Text.CopyFrom(this._Text);\r\n for (let [type, obj] of ent._CacheDrawObject)\r\n {\r\n for (let o of obj.children)\r\n if (o instanceof TLine)\r\n o.geometry = o.geometry.clone();\r\n }\r\n return ent;\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n this._Text.ColorIndex = this.ColorIndex;\r\n let obj = new Object3D();\r\n\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let line: TLine | Line2;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n line = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n else\r\n line = new TLine(\r\n BufferGeometryUtils.CreateFromPts([this._Center, this._DiameterOrRadiusPoint, this._TextPoint]),\r\n colorMaterial\r\n );\r\n\r\n let arrow = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n\r\n obj.add(line, arrow);\r\n\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n this.UpdateDrawObject(renderType, obj);\r\n\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let [line, arrow, textObj] = obj.children;\r\n\r\n let arrowSize = this.GetDimStyleValue(DimStyleKeyCode.DIMASZ) ?? 10;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n let geo = (line as Line2).geometry;\r\n geo.setPositions([...this._Center.toArray(), ...this._DiameterOrRadiusPoint.toArray(), ...this._TextPoint.toArray()]);\r\n }\r\n else\r\n BufferGeometryUtils.UpdatePts((<THREE.Line>line).geometry as BufferGeometry, [this._Center, this._DiameterOrRadiusPoint, this._TextPoint], true);\r\n\r\n arrow.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let armV = this._TextPoint.clone().sub(this._DiameterOrRadiusPoint);\r\n let armAn = angle(armV);\r\n\r\n arrow.position.copy(this._DiameterOrRadiusPoint);\r\n arrow.rotation.z = armAn + Math.PI / 2;\r\n arrow.updateMatrix();\r\n\r\n obj.remove(textObj);\r\n DisposeThreeObj(textObj);\r\n\r\n this.UpdateText();\r\n\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (renderType === RenderType.WireframePrint)\r\n return;\r\n let [line, arrow, textObj] = obj.children as [TLine, Mesh, Object3D];\r\n let lineMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n line.material = lineMaterial;\r\n arrow.material = line.material;\r\n this._Text.ColorIndex = this.ColorIndex;\r\n\r\n //如果实体是拷贝的,那么可能修改材质失败\r\n if (textObj.children[0])\r\n {\r\n let mesh = textObj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetBasicMaterialDoubleSide(this.ColorIndex);//TODO:在布局时应该如何渲染?\r\n }\r\n }\r\n\r\n UpdateText()\r\n {\r\n this._Text.AutoUpdate = false;\r\n\r\n let armV = this._TextPoint.clone().sub(this._DiameterOrRadiusPoint);\r\n this._Text.TextString = this.TextString;\r\n this._Text.Position = this._TextPoint;\r\n this._Text.TextRotation = angleAndX(armV);\r\n this._Text.Height = this.TextSize;\r\n\r\n this._Text.DeferUpdate();\r\n this._Text.AutoUpdate = true;\r\n }\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3,\r\n viewXform?: Matrix3\r\n ): Vector3[]\r\n {\r\n let l = new Line(this.Center, this.TextPoint);\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetStretchPoints();\r\n default:\r\n return l.GetObjectSnapPoints(snapMode, pickPoint, lastPoint, viewXform);\r\n }\r\n }\r\n GetGripPoints(): Array<Vector3>\r\n {\r\n return [this.Center, this.DiameterOrRadiusPoint, this.TextPoint];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let inv = this.OCSInv;\r\n let vec0 = vec.clone().applyMatrix4(inv.clone().setPosition(0, 0, 0));\r\n let rad = this._Center.distanceTo(this._DiameterOrRadiusPoint);\r\n\r\n for (let i of indexList)\r\n {\r\n if (i === 1)\r\n {\r\n let center = this.DiameterOrRadiusPoint.add(vec).applyMatrix4(inv);\r\n let cir = new Circle(this._Center, rad);\r\n let cp = cir.GetClosestPointTo(center, true);\r\n this._DiameterOrRadiusPoint.copy(cp);\r\n let dist = this._Center.distanceTo(this._TextPoint);\r\n let dir = this._DiameterOrRadiusPoint.clone().sub(this._Center).normalize().multiplyScalar(dist);\r\n this._TextPoint.copy(this._Center.clone().add(dir));\r\n }\r\n else\r\n {\r\n if (i === 0)\r\n this._Center.add(vec0);\r\n else\r\n this._TextPoint.add(vec0);\r\n let dir = this._TextPoint.clone().sub(this._Center).normalize().multiplyScalar(rad);\r\n this._DiameterOrRadiusPoint.copy(this._Center.clone().add(dir));\r\n }\r\n }\r\n this.Update();\r\n }\r\n GetStretchPoints(): Array<Vector3>\r\n {\r\n return this.GetGripPoints();\r\n }\r\n MoveStretchPoints(indexList: Array<number>, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (indexList.length >= 2)\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n else\r\n this.MoveGripPoints(indexList, vec);\r\n }\r\n protected ApplyMirrorMatrix(m: Matrix4)\r\n {\r\n this.WriteAllObjectRecord();\r\n let p1 = this.Center;\r\n let p2 = this.DiameterOrRadiusPoint;\r\n let p3 = this.TextPoint;\r\n\r\n reviseMirrorMatrix(this._Matrix);\r\n\r\n this.Center = p1;\r\n this.DiameterOrRadiusPoint = p2;\r\n this.TextPoint = p3;\r\n\r\n return this;\r\n }\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._Center.fromArray(file.Read());\r\n this._DiameterOrRadiusPoint.fromArray(file.Read());\r\n this._TextPoint.fromArray(file.Read());\r\n if (ver > 1) this._TextString = file.Read();\r\n if (ver > 2 && ver < 5) this.TextSize = file.Read();\r\n if (ver > 3 && ver < 5) this.FractionDigits = file.Read();\r\n\r\n if (ver > 4) this.ReadDimStyle(file);\r\n if (ver > 5)\r\n this._DimStyle = file.ReadHardObjectId() ?? HostApplicationServices.CurrentDimStyle;\r\n else\r\n this._DimStyle = HostApplicationServices.CurrentDimStyle;\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(6);\r\n file.Write(this._Center.toArray());\r\n file.Write(this._DiameterOrRadiusPoint.toArray());\r\n file.Write(this._TextPoint.toArray());\r\n file.Write(this._TextString);\r\n\r\n this.WriteDimStyle(file);\r\n file.WriteHardObjectId(this._DimStyle);\r\n }\r\n}\r\n","import { BufferGeometry, Material, Mesh, Object3D, Line as TLine, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { DisposeThreeObj } from \"../../Common/Dispose\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { angle, midPoint } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Circle } from \"../Entity/Circle\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\nimport { RadiusDimension } from \"./RadiusDimension\";\r\n\r\n\r\nconst LINE_EXTEND_VAL = 40; //尺寸线延长值\r\n\r\n@Factory\r\nexport class DiameterDimension extends RadiusDimension\r\n{\r\n protected _TextString: string = \"D<>\";\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n this._Text.ColorIndex = this.DrawColorIndex;\r\n let obj = new Object3D();\r\n\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let vec = this._DiameterOrRadiusPoint.clone().sub(this._Center).normalize().multiplyScalar(-LINE_EXTEND_VAL);\r\n\r\n let line: TLine | Line2;\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n line = new Line2(undefined, ColorMaterial.PrintLineMatrial);\r\n else\r\n line = new TLine(\r\n BufferGeometryUtils.CreateFromPts([this._Center.clone().add(vec), this._DiameterOrRadiusPoint, this._TextPoint]),\r\n colorMaterial\r\n );\r\n\r\n let arrow = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n let arrow2 = new Mesh(BufferGeometryUtils.ArrowGeometry(), colorMaterial);\r\n\r\n obj.add(line, arrow, arrow2);\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n\r\n return obj;\r\n }\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n let [line, arrow, arrow2, textObj] = obj.children;\r\n\r\n let vec = this._DiameterOrRadiusPoint.clone().sub(this._Center).normalize().multiplyScalar(-LINE_EXTEND_VAL);\r\n\r\n let arrowSize = 10;\r\n\r\n let sp = this._Center.clone().add(vec);\r\n\r\n if (renderType === RenderType.WireframePrint)\r\n {\r\n arrowSize *= HostApplicationServices.lineWidth * 0.5;\r\n let geo = (line as Line2).geometry;\r\n geo.setPositions([...sp.toArray(), ...this._DiameterOrRadiusPoint.toArray(), ...this._TextPoint.toArray()]);\r\n }\r\n else\r\n BufferGeometryUtils.UpdatePts((<THREE.Line>line).geometry as BufferGeometry, [sp, this._DiameterOrRadiusPoint, this._TextPoint], true);\r\n\r\n arrow.scale.set(arrowSize, arrowSize, arrowSize);\r\n arrow2.scale.set(arrowSize, arrowSize, arrowSize);\r\n\r\n let armV = this._TextPoint.clone().sub(this._DiameterOrRadiusPoint);\r\n let armAn = angle(armV);\r\n\r\n arrow.position.copy(this._DiameterOrRadiusPoint);\r\n arrow.rotation.z = armAn + Math.PI / 2;\r\n arrow.updateMatrix();\r\n\r\n arrow2.position.copy(this._Center);\r\n arrow2.rotation.z = armAn - Math.PI / 2;\r\n arrow2.updateMatrix();\r\n\r\n this.UpdateText();\r\n\r\n obj.remove(textObj);\r\n DisposeThreeObj(textObj);\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (renderType === RenderType.WireframePrint)\r\n return;\r\n\r\n let [line, arrow, arrow2, textObj] = obj.children as [TLine, Mesh, Mesh, Object3D];\r\n let lineMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n line.material = lineMaterial;\r\n arrow.material = line.material;\r\n arrow2.material = lineMaterial;\r\n\r\n this._Text.ColorIndex = this.DrawColorIndex;\r\n\r\n //如果实体是拷贝的,那么可能修改材质失败\r\n if (textObj.children[0])\r\n {\r\n let mesh = textObj.children[0] as Mesh;\r\n mesh.material = ColorMaterial.GetBasicMaterialDoubleSide(this.DrawColorIndex);//TODO:在布局时应该如何渲染?\r\n }\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let v = vec.clone().applyMatrix4(this.OCSInv.setPosition(new Vector3()));\r\n let dia = this._Center.distanceTo(this._DiameterOrRadiusPoint);\r\n let cirCenter = midPoint(this._Center, this._DiameterOrRadiusPoint);\r\n for (let i of indexList)\r\n {\r\n if (i === 0)\r\n {\r\n this._Center.add(v);\r\n let dist = this._TextPoint.distanceTo(this._DiameterOrRadiusPoint);\r\n let v1 = cirCenter.clone().sub(this._Center);\r\n this._DiameterOrRadiusPoint.copy(cirCenter.clone().add(v1));\r\n this._TextPoint.copy(this._DiameterOrRadiusPoint.clone().add(v1.normalize().multiplyScalar(dist)));\r\n }\r\n else if (i === 1)\r\n {\r\n let dist = this._TextPoint.distanceTo(this._DiameterOrRadiusPoint);\r\n let center = this.DiameterOrRadiusPoint.add(vec).applyMatrix4(this.OCSInv);\r\n let cir = new Circle(cirCenter, dia / 2);\r\n this._DiameterOrRadiusPoint.copy(cir.GetClosestPointTo(center, true));\r\n let v1 = this._DiameterOrRadiusPoint.clone().sub(cirCenter).normalize().multiplyScalar(-dia);\r\n this._Center.copy(this._DiameterOrRadiusPoint.clone().add(v1));\r\n this._TextPoint.copy(this._DiameterOrRadiusPoint.clone().add(v1.normalize().multiplyScalar(-dist)));\r\n }\r\n else\r\n {\r\n this._TextPoint.add(v);\r\n let v1 = this._TextPoint.clone().sub(cirCenter).normalize().multiplyScalar(dia / 2);\r\n this._DiameterOrRadiusPoint.copy(cirCenter.clone().add(v1));\r\n this._Center.copy(cirCenter.add(v1.negate()));\r\n }\r\n }\r\n this.Update();\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { isBetweenNums } from \"../../Common/Utils\";\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Line } from \"../Entity/Line\";\r\nimport { AlignedDimension } from \"./AlignedDimension\";\r\n\r\nenum DimDir\r\n{\r\n /**水平 */\r\n H = 0,\r\n /**垂直 */\r\n V = 1\r\n}\r\n\r\n/**\r\n * 线性标注 http://docs.autodesk.com/ACD/2011/ENU/filesDXF/WS1a9193826455f5ff18cb41610ec0a2e719-7a23.htm\r\n * 如果按照Autodesk实现的线性标注,这个其实应该叫做AcDbRotatedDimension,而且提供50祖玛(旋转角度) 52(暂时不知道有啥用)\r\n * 现在的实现是根据ArmPt来实现固定的垂直标注或者水平标注\r\n */\r\n@Factory\r\nexport class LinearDimension extends AlignedDimension\r\n{\r\n private _DimDir = DimDir.H;\r\n\r\n get TextPosition()\r\n {\r\n return super.TextPosition;\r\n }\r\n\r\n //在设置TextPos时,同时会影响标注的方向(H水平 V竖直) (严格来说,这个点应该是标注线的位置,因为文字位置总是总中心.)\r\n set TextPosition(p: Vector3)\r\n {\r\n p = p.clone().applyMatrix4(this.OCSInv).setZ(0);\r\n let bit = 0;//x 1 y 2\r\n if (isBetweenNums(this._FootP1.x, this._FootP2.x, p.x))\r\n bit |= 1;\r\n if (isBetweenNums(this._FootP1.y, this._FootP2.y, p.y))\r\n bit |= 2;\r\n\r\n if (bit === 1)\r\n this._DimDir = DimDir.H;\r\n else if (bit === 2)\r\n this._DimDir = DimDir.V;\r\n //else 叠加态(在中间时,不做变更)\r\n\r\n if (this._DimDir === DimDir.H)\r\n {\r\n this._ArmP1.copy(this._FootP1).setY(p.y).setZ(0);\r\n this._ArmP2.copy(this._FootP2).setY(p.y).setZ(0);\r\n }\r\n else\r\n {\r\n this._ArmP1.copy(this._FootP1).setX(p.x).setZ(0);\r\n this._ArmP2.copy(this._FootP2).setX(p.x).setZ(0);\r\n }\r\n this.Update();\r\n }\r\n\r\n override OnChangeFootPt()\r\n {\r\n let l = new Line(this._ArmP1, this._ArmP2);\r\n\r\n //这个代码有个bug,当footPt在肩线(标注线)上时,这个无法更新,更稳妥似乎应该用 if(!equalv2())???\r\n if (!equaln(this._FootP1.x, this._ArmP1.x) && !equaln(this._FootP1.y, this._ArmP1.y))\r\n {\r\n let cp1 = l.GetClosestPointTo(this._FootP1, true);\r\n this._ArmP1.copy(cp1).setZ(0);\r\n }\r\n if (!equaln(this._FootP2.x, this._ArmP2.x) && !equaln(this._FootP2.y, this._ArmP2.y))\r\n {\r\n let cp2 = l.GetClosestPointTo(this._FootP2, true);\r\n this._ArmP2.copy(cp2).setZ(0);\r\n }\r\n }\r\n}\r\n","import { BufferGeometry, Line, Object3D, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { AddEntityDrawObject } from \"../../Common/AddEntityDrawObject\";\r\nimport { BufferGeometryUtils } from \"../../Geometry/BufferGeometryUtils\";\r\nimport { MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Text, TextAligen } from \"../Text/Text\";\r\nimport { Dimension } from \"./Dimension\";\r\nimport { GetDimLineMaterial } from \"./GetDimLineMaterial\";\r\n\r\n//箭头引线标签标注 (箭头暂未实现)\r\n@Factory\r\nexport class MLeaderDimension extends Dimension\r\n{\r\n protected _Text = new Text();\r\n\r\n constructor(\r\n protected _TextString: string = \"\", // 文本\r\n protected _StartPoint: Vector3 = new Vector3(), // 引线起点\r\n protected _EndPoint: Vector3 = new Vector3(100), // 引线终点\r\n )\r\n {\r\n super();\r\n }\r\n\r\n get Text()\r\n {\r\n if (!this._Text.TextString)\r\n this.ParseText();\r\n\r\n return this._Text;\r\n }\r\n\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 protected GetPrimitiveString(): string\r\n {\r\n return this._TextString;\r\n }\r\n\r\n //#region 拉伸相关\r\n GetGripPoints(): Vector3[]\r\n {\r\n return [this.StartPoint, new Vector3().addVectors(this.EndPoint, this.StartPoint).multiplyScalar(0.5), this.EndPoint];\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n for (let index of indexList)\r\n {\r\n if (index === 0)\r\n this.StartPoint = this.StartPoint.add(vec);\r\n else 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 //#endregion\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n\r\n let obj = new Object3D();\r\n let line = new Line(new BufferGeometry, colorMaterial);\r\n obj.add(line);\r\n\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n obj.remove(...obj.children.slice(1));\r\n\r\n let line = obj.children[0] as Line;\r\n let colorMaterial = GetDimLineMaterial(this, renderType);\r\n line.material = colorMaterial;\r\n\r\n this.ParseText();\r\n this._Text.DeferUpdate();\r\n\r\n let geo = line.geometry as BufferGeometry;\r\n if (!BufferGeometryUtils.UpdatePts(geo, [this._StartPoint, this._EndPoint]))\r\n {\r\n line.geometry.dispose();\r\n line.geometry = BufferGeometryUtils.CreateFromPts([this._StartPoint, this._EndPoint]);\r\n }\r\n AddEntityDrawObject(obj, this._Text, renderType);\r\n }\r\n\r\n ParseText()\r\n {\r\n this._Text.AutoUpdate = false;\r\n this._Text.ColorIndex = this.ColorIndex;\r\n this._Text.TextString = this.TextString;\r\n this._Text.Height = this.TextSize;\r\n this._Text.TextAligen = TextAligen.LeftMid;\r\n this._Text.OCS = this.OCS.setPosition(this._EndPoint);\r\n this._Text.AutoUpdate = true;\r\n }\r\n\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n this._TextString = file.Read();\r\n this._StartPoint = new Vector3(file.Read(), file.Read(), file.Read());\r\n this._EndPoint = new Vector3(file.Read(), file.Read(), file.Read());\r\n\r\n this.ReadDimStyle(file);\r\n this._DimStyle = file.ReadHardObjectId() ?? HostApplicationServices.CurrentDimStyle;\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._TextString);\r\n file.WriteVec3(this._StartPoint);\r\n file.WriteVec3(this._EndPoint);\r\n\r\n this.WriteDimStyle(file);\r\n file.WriteHardObjectId(this._DimStyle);\r\n }\r\n //#endregion\r\n}\r\n","import { BoxBufferGeometry, Mesh, MeshBasicMaterial, Object3D, Vector3 } from \"three\";\r\nimport { ColorMaterial } from \"../../Common/ColorPalette\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { equaln } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Entity } from \"./Entity\";\r\n\r\n\r\nlet boxGeo: BoxBufferGeometry;\r\nexport function GetBoxGeoBufferGeometry()\r\n{\r\n if (!boxGeo)\r\n boxGeo = new BoxBufferGeometry(1, 1, 1);\r\n return boxGeo;\r\n}\r\n\r\n@Factory\r\nexport class BoxSolid extends Entity\r\n{\r\n OnlyRenderType = true;\r\n private _opacity = 0.5;\r\n constructor(private _length = 1, private _width = 1, private _height = 1)\r\n {\r\n super();\r\n }\r\n\r\n get Length() { return this._length; }\r\n get Width() { return this._width; }\r\n get Height() { return this._height; }\r\n\r\n set Length(v: number)\r\n {\r\n if (!equaln(v, this._length, 1e-5))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._length = v;\r\n this.Update();\r\n }\r\n }\r\n set Width(v: number)\r\n {\r\n if (!equaln(v, this._width, 1e-5))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._width = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n set Height(v: number)\r\n {\r\n if (!equaln(v, this._height, 1e-5))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._height = v;\r\n this.Update();\r\n }\r\n }\r\n\r\n set Opacity(o: number)\r\n {\r\n if (o !== this._opacity)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._opacity = o;\r\n this.Update();\r\n }\r\n }\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let box = new Object3D();\r\n let geo = GetBoxGeoBufferGeometry();\r\n let mat = ColorMaterial.GetBasicMaterialTransparent(7, this._opacity);\r\n box.add(new Mesh(geo, mat));\r\n this.UpdateDrawObject(renderType, box);\r\n return box;\r\n }\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n obj.children[0].scale.set(this._length, this._width, this._height);\r\n ((obj.children[0] as Mesh).material as MeshBasicMaterial).opacity = this._opacity;\r\n obj.children[0].position.copy(new Vector3(this._length / 2, this._width / 2, this._height / 2));\r\n obj.children[0].updateMatrix();\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n return new Box3Ext(new Vector3, new Vector3(this._length, this._width, this._height));\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return this.BoundingBoxInOCS.applyMatrix4(this.OCSNoClone);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { MoveMatrix } from \"../../Geometry/GeUtils\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { Entity } from \"./Entity\";\r\n\r\n\r\n\r\n@Factory\r\nexport class Point extends Entity\r\n{\r\n constructor(position: Vector3 = new Vector3())\r\n {\r\n super();\r\n this._Matrix.setPosition(position);\r\n }\r\n\r\n \r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3\r\n ): Vector3[]\r\n {\r\n if (snapMode === ObjectSnapMode.End)\r\n return [this.Position];\r\n return [];\r\n }\r\n\r\n GetGripPoints(): Array<Vector3>\r\n {\r\n return [this.Position];\r\n }\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n if (indexList.length === 1)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.ApplyMatrix(MoveMatrix(vec));\r\n }\r\n }\r\n\r\n GetStretchPoints(): Array<Vector3>\r\n {\r\n return this.GetGripPoints();\r\n }\r\n\r\n /**\r\n * 拉伸夹点,用于Stretch命令\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.MoveGripPoints(indexList, vec);\r\n }\r\n}\r\n","\r\nimport { BufferGeometry, Color, CylinderBufferGeometry, Float32BufferAttribute, LineBasicMaterial, LineSegments, MathUtils, Matrix4, Mesh, MeshBasicMaterial, Object3D, PointLight, SphereBufferGeometry, Vector3 } from 'three';\r\n\r\nexport class PointLightHelper extends Object3D\r\n{\r\n light: PointLight;\r\n color: Color | string | number;\r\n material: LineBasicMaterial;\r\n cone: LineSegments[];\r\n mesh: Mesh[];\r\n constructor(distance: number, color?: Color | string | number)\r\n {\r\n\r\n const geometry = new BufferGeometry();\r\n const positions = [];\r\n for (let i = 0, j = 1, l = 32; i < l; i++, j++)\r\n {\r\n\r\n const p1 = (i / l) * Math.PI * 2;\r\n const p2 = (j / l) * Math.PI * 2;\r\n\r\n positions.push(\r\n Math.cos(p1) * distance, Math.sin(p1) * distance, 0,\r\n Math.cos(p2) * distance, Math.sin(p2) * distance, 0\r\n );\r\n\r\n }\r\n geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));\r\n\r\n super();\r\n this.color = color;\r\n this.matrixAutoUpdate = false;\r\n this.material = new LineBasicMaterial({ fog: false });;\r\n\r\n this.cone = [];\r\n this.mesh = [];\r\n\r\n this.cone[0] = new LineSegments(geometry, this.material[0]);\r\n this.cone[1] = this.cone[0].clone();\r\n\r\n let moveMatInv = new Matrix4().getInverse(this.matrix);\r\n let roMat = new Matrix4().makeRotationAxis(new Vector3(0, 1, 0), MathUtils.degToRad(60));\r\n let mtx = this.matrix.clone().multiply(roMat).multiply(moveMatInv);\r\n\r\n this.cone[1].applyMatrix4(mtx);\r\n this.cone[2] = this.cone[1].clone();\r\n this.cone[2].applyMatrix4(mtx);\r\n\r\n let cylinderRoMat = new Matrix4().makeRotationAxis(new Vector3(1, 0, 0), MathUtils.degToRad(90));\r\n let cylinderMtx = this.matrix.clone().multiply(cylinderRoMat).multiply(moveMatInv);\r\n\r\n let cylinderGeometry = new CylinderBufferGeometry(40, 40, 80, 32); //灯泡圆柱\r\n this.mesh[0] = new Mesh(cylinderGeometry, new MeshBasicMaterial({ color: 0xFFEAAD }));\r\n this.mesh[0].applyMatrix4(cylinderMtx);\r\n this.mesh[0].position.add(new Vector3(0, 0, 50));\r\n this.mesh[0].updateMatrix();\r\n\r\n let sphereBufferGeometry = new SphereBufferGeometry(75, 32, 32); //灯泡球体\r\n this.mesh[1] = new Mesh(sphereBufferGeometry, this.material);\r\n this.mesh[1].position.sub(new Vector3(0, 0, 30));\r\n this.mesh[1].updateMatrix();\r\n\r\n this.add(this.cone[0], this.cone[1], this.cone[2], this.mesh[0], this.mesh[1]);\r\n }\r\n\r\n dispose()\r\n {\r\n this.material.dispose();\r\n\r\n this.cone[0].geometry.dispose();\r\n //@ts-ignore\r\n this.cone[0].material.dispose();\r\n\r\n this.cone[1].geometry.dispose();\r\n //@ts-ignore\r\n this.cone[1].material.dispose();\r\n\r\n this.cone[2].geometry.dispose();\r\n //@ts-ignore\r\n this.cone[2].material.dispose();\r\n\r\n this.mesh[0].geometry.dispose();\r\n //@ts-ignore\r\n this.mesh[0].material.dispose();\r\n\r\n this.mesh[1].geometry.dispose();\r\n //@ts-ignore\r\n this.mesh[1].material.dispose();\r\n }\r\n\r\n update()\r\n {\r\n //@ts-ignore\r\n this.mesh[1].material.color.set(this.color).multiplyScalar(0.9);\r\n }\r\n}\r\n","import { Group, LineBasicMaterial, Mesh, MeshBasicMaterial, Object3D, PointLight as TPointLight, SphereGeometry } from 'three';\r\nimport { HostApplicationServices } from '../../ApplicationServices/HostApplicationServices';\r\nimport { RenderType } from '../../GraphicsSystem/RenderType';\r\nimport { AutoRecord } from '../AutoRecord';\r\nimport { Factory } from '../CADFactory';\r\nimport { CADFiler } from '../CADFiler';\r\nimport { Light } from './Light';\r\nimport { PointLightHelper } from './PointLightHelper';\r\n\r\n/**\r\n * 点光源\r\n */\r\n@Factory\r\nexport class PointLight extends Light\r\n{\r\n /**\r\n * 光照长度,如果为0那么为无穷大\r\n */\r\n private _Distance: number = 20000;//20米\r\n protected _Intensity: number = 100; //强度\r\n\r\n // 光线沿着光线的距离变暗的量\r\n // 在物理上正确的模式下,衰减 = 2会导致物理上真实的光线衰减。\r\n // 缺省值是1。\r\n private _Decay: number = 0.45;\r\n\r\n //PointLightComponent\r\n @AutoRecord SourceRadius = 10;//源半径 范围0-300\r\n @AutoRecord SoftSourceRadius = 0;//软源半径 范围0-300\r\n @AutoRecord SourceLength = 0;//源长度 默认0 范围0-1000\r\n\r\n //LocalLightComponent\r\n //Radius:number 没设置这个\r\n @AutoRecord AttenuationRadius = 300; //衰减半径 10-1000\r\n\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n get Decay(): number\r\n {\r\n return this._Decay;\r\n }\r\n set Decay(decay: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Decay = decay;\r\n this.Update();\r\n }\r\n\r\n get Distance()\r\n {\r\n return this._Distance;\r\n }\r\n set Distance(dist: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Distance = dist;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 2000;\r\n x = Math.pow(x, 0.7);\r\n return (x * 2000) / (4 * Math.PI);//流明转cd 文档是4pi\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let lightGroup = new Group();\r\n let ptLight = new TPointLight(this._LightColor, this.WebIntensity, this._Distance, this._Decay);\r\n\r\n Object.defineProperty(ptLight, \"castShadow\", { get: () => HostApplicationServices.isShowLightShadow && this.CaseShadow });\r\n\r\n ptLight.shadow.camera.matrixAutoUpdate = true;\r\n ptLight.shadow.camera.far = 10000;\r\n //绘制灯光助手\r\n let lightGeo = new SphereGeometry(50);\r\n let geoMat = new MeshBasicMaterial({ color: this._LightColor });\r\n ptLight.add(new Mesh(lightGeo, geoMat));\r\n\r\n let helper = new PointLightHelper(ptLight.distance / 4, this.Color);\r\n\r\n lightGroup.add(ptLight, helper);\r\n lightGroup.matrixAutoUpdate = false;\r\n lightGroup.matrix.copy(this._Matrix);\r\n lightGroup.updateMatrixWorld(true);\r\n this.UpdateDrawObject(renderType, lightGroup);\r\n return lightGroup;\r\n }\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n let ptLight = en.children[0] as TPointLight;\r\n super.UpdateDrawObject(type, ptLight);\r\n\r\n ptLight.distance = this._Distance;\r\n ptLight.decay = this._Decay;\r\n\r\n let con = ptLight.children[0] as Mesh;\r\n con.material = new LineBasicMaterial({ color: this.Color });\r\n\r\n let helper = en.children[1] as PointLightHelper;\r\n helper.visible = this._ShowHelper;\r\n if (this._ShowHelper)\r\n helper.color = this.Color;\r\n helper.update();\r\n }\r\n\r\n\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n // this._Distance = file.Read();\r\n // this._Decay = file.Read();\r\n //屏蔽原先的2个属性\r\n file.Read();\r\n file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this.SourceRadius = file.Read();\r\n this.SoftSourceRadius = file.Read();\r\n this.SourceLength = file.Read();\r\n this.AttenuationRadius = file.Read();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n file.Write(this._Distance);\r\n file.Write(this._Decay);\r\n\r\n //ver 2\r\n file.Write(this.SourceRadius);\r\n file.Write(this.SoftSourceRadius);\r\n file.Write(this.SourceLength);\r\n file.Write(this.AttenuationRadius);\r\n }\r\n}\r\n","import { BackSide, BufferGeometry, Color, Float32BufferAttribute, Line, LineBasicMaterial, Mesh, MeshBasicMaterial, RectAreaLight as TRectAreaLight } from \"three\";\r\n\r\n/**\r\n * This helper must be added as a child of the light (移植threejs最新的版本)\r\n */\r\nexport class RectAreaLightHelper extends Line\r\n{\r\n light: TRectAreaLight;\r\n color: Color;\r\n declare material: LineBasicMaterial;\r\n declare children: [Mesh];\r\n BarnDoorLength: number;\r\n BarnDoorAngle: number;\r\n\r\n private _posAtt: Float32BufferAttribute;\r\n private _indexAtt: Float32BufferAttribute;\r\n\r\n constructor(light: TRectAreaLight, color: Color)\r\n {\r\n const positions = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0, 1, 1, 0,\r\n 0.618, 0.618, 0,\r\n // 0.618, 0.618, -100,\r\n // 0.618, 0.618, 0,\r\n\r\n -0.618, 0.618, 0,\r\n -1, 1, 0,\r\n -0.618, 0.618, 0,\r\n // -0.618, 0.618, -100,\r\n // -0.618, 0.618, 0,\r\n\r\n -0.618, -0.618, 0,\r\n -1, -1, 0,\r\n -0.618, -0.618, 0,\r\n // -0.618, -0.618, -100,\r\n // -0.618, -0.618, 0,\r\n\r\n 0.618, -0.618, 0,\r\n 1, -1, 0,\r\n 0.618, -0.618, 0,\r\n // 0.618, -0.618, -100,\r\n // 0.618, -0.618, 0,\r\n\r\n 0.618, 0.618, 0\r\n ];\r\n\r\n const geometry = new BufferGeometry();\r\n let posatt = new Float32BufferAttribute(positions, 3);\r\n geometry.setAttribute('position', posatt);\r\n geometry.computeBoundingSphere();\r\n\r\n const material = new LineBasicMaterial({ fog: false });\r\n\r\n super(geometry, material);\r\n\r\n this._posAtt = posatt;\r\n\r\n this.light = light;\r\n this.color = color; // optional hardwired color for the helper\r\n this.type = 'RectAreaLightHelper';\r\n\r\n //\r\n const positions2 = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0];\r\n\r\n const geometry2 = new BufferGeometry();\r\n this._indexAtt = new Float32BufferAttribute(positions2, 3);\r\n geometry2.setAttribute('position', this._indexAtt);\r\n geometry2.computeBoundingSphere();\r\n\r\n this.add(new Mesh(geometry2, new MeshBasicMaterial({ side: BackSide, fog: false, transparent: true, opacity: 0.8 })));\r\n }\r\n\r\n copy(source: this, recursive?: boolean): this\r\n {\r\n this.light = source.light.clone();\r\n this.color = source.color.clone();\r\n return super.copy(source, recursive);\r\n }\r\n\r\n updateMatrixWorld()\r\n {\r\n this.scale.set(0.5 * this.light.width, 0.5 * this.light.height, 1);\r\n\r\n if (this.color !== undefined)\r\n {\r\n this.material.color.set(this.color);\r\n //@ts-ignore\r\n this.children[0].material.color.set(this.color);\r\n }\r\n else\r\n {\r\n this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);\r\n\r\n // prevent hue shift\r\n const c = this.material.color;\r\n const max = Math.max(c.r, c.g, c.b);\r\n if (max > 1)\r\n c.multiplyScalar(1 / max);\r\n //@ts-ignore\r\n this.children[0].material.color.copy(this.material.color);\r\n }\r\n\r\n // ignore world scale on light\r\n this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld);\r\n\r\n this.children[0].matrixWorld.copy(this.matrixWorld);\r\n }\r\n\r\n updataRange()\r\n {\r\n let [n, w, h] = [1, 1, 1];\r\n let t = Math.sin(this.BarnDoorAngle * Math.PI / 180) * this.BarnDoorLength;\r\n let cosAngle = Math.cos(this.BarnDoorAngle * Math.PI / 180);\r\n if (Math.floor(cosAngle * 1e5))\r\n {\r\n w = ((this.light.width + this.BarnDoorLength * 2) / this.light.width - 1) * cosAngle + 1;\r\n h = ((this.light.height + this.BarnDoorLength * 2) / this.light.height - 1) * cosAngle + 1;\r\n }\r\n\r\n let positions = [w, h, -t, -w, h, -t, -w, -h, -t, w, -h, -t, w, h, -t,\r\n n, n, 0,\r\n\r\n -n, n, 0,\r\n -w, h, -t,\r\n -n, n, 0,\r\n\r\n -n, -n, 0,\r\n -w, -h, -t,\r\n -n, -n, 0,\r\n\r\n n, -n, 0,\r\n w, -h, -t,\r\n n, -n, 0,\r\n\r\n n, n, 0\r\n ];\r\n\r\n let positions2 = [w, h, -t, -w, h, -t, -w, -h, -t, w, h, -t, -w, -h, -t, w, -h, -t];\r\n\r\n this._posAtt.copyArray(positions);\r\n this._posAtt.needsUpdate = true;\r\n\r\n this._indexAtt.copyArray(positions2);\r\n this._indexAtt.needsUpdate = true;\r\n }\r\n\r\n dispose()\r\n {\r\n this.geometry.dispose();\r\n this.material.dispose();\r\n this.children[0].geometry.dispose();\r\n //@ts-ignore\r\n this.children[0].material.dispose();\r\n }\r\n}\r\n","import { Box3, Group, Object3D, RectAreaLight as TRectAreaLight, Vector3 } from \"three\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { Box3Ext } from \"../../Geometry/Box\";\r\nimport { equalv3, YAxis, ZeroVec } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { equaln } from \"../../Nest/Common/Util\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { Light } from \"./Light\";\r\nimport { RectAreaLightHelper } from \"./RectAreaLightHelper\";\r\n\r\nconst TARGET_DISTANCE = -100;\r\n\r\n@Factory\r\nexport class RectAreaLight extends Light\r\n{\r\n protected _Intensity = 100;\r\n\r\n private _Width: number = 1;//UE SourceWidth\r\n private _Height: number = 1;//UE SourceHeight\r\n\r\n //LocalLightComponent\r\n //Radius:number 没设置这个\r\n @AutoRecord AttenuationRadius = 300; //衰减半径 10-1000\r\n\r\n //RectLightComponent extends LocalLightComponent\r\n private _BarnDoorAngle: number = 0; //0-90 挡光板角度\r\n private _BarnDoorLength: number = 0; //0-100 挡光板长度\r\n @AutoRecord SourceTexture: ObjectId;//Texture 源纹理 默认无 可以追加一张贴图\r\n\r\n get Target()\r\n {\r\n return this.Position.add(this.Normal.multiplyScalar(TARGET_DISTANCE));\r\n }\r\n\r\n set Target(p: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.lookAt(this.Position, p, YAxis);\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n get Height() { return this._Height; }\r\n\r\n set Height(v: number)\r\n {\r\n if (equaln(v, this._Height, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._Height = v;\r\n this.Update();\r\n }\r\n\r\n get Width() { return this._Width; }\r\n\r\n set Width(v: number)\r\n {\r\n if (equaln(v, this._Width, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._Width = v;\r\n this.Update();\r\n }\r\n\r\n get BarnDoorAngle() { return this._BarnDoorAngle; }\r\n\r\n set BarnDoorAngle(v: number)\r\n {\r\n if (equaln(this._BarnDoorAngle, v, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._BarnDoorAngle = v;\r\n this.Update();\r\n }\r\n\r\n get BarnDoorLength() { return this._BarnDoorLength; }\r\n\r\n set BarnDoorLength(v: number)\r\n {\r\n if (equaln(this._BarnDoorLength, v, 1e-2)) return;\r\n this.WriteAllObjectRecord();\r\n this._BarnDoorLength = v;\r\n this.Update();\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 2000;\r\n x = Math.pow(x, 0.5);\r\n return (x * 50) / (Math.PI);//流明转cd 文档是4pi\r\n }\r\n\r\n get BoundingBoxInOCS()\r\n {\r\n return new Box3Ext(new Vector3(-this._Width * 0.5, -this._Height * 0.5, 0), new Vector3(this._Width * 0.5, this._Height * 0.5, 0.01));\r\n }\r\n\r\n get BoundingBox()\r\n {\r\n return new Box3().setFromCenterAndSize(new Vector3(), new Vector3(this._Width, this._Height)).applyMatrix4(this._Matrix);\r\n }\r\n\r\n GetGripPoints(): Array<Vector3>\r\n {\r\n let heightHalf = this._Height * 0.5;\r\n let widthHalf = this.Width * 0.5;\r\n let pos = this.Position;\r\n\r\n let pts: Vector3[] = [\r\n new Vector3(-widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//左下\r\n new Vector3(widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//右下\r\n new Vector3(widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//右上\r\n new Vector3(-widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//左上\r\n pos,\r\n pos.clone().add(this.Normal.multiplyScalar(TARGET_DISTANCE))\r\n ];\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n let vecInv = vec.clone().applyMatrix4(this.OCSInv.setPosition(0, 0, 0));\r\n if (equalv3(vecInv, ZeroVec, 1e-4)) return;\r\n\r\n this.WriteAllObjectRecord();\r\n\r\n let heightHalf = this._Height * 0.5;\r\n let widthHalf = this.Width * 0.5;\r\n let pts: Vector3[] = [\r\n new Vector3(-widthHalf, -heightHalf, 0),\r\n new Vector3(widthHalf, -heightHalf, 0),\r\n new Vector3(widthHalf, heightHalf, 0),\r\n new Vector3(-widthHalf, heightHalf, 0),\r\n ];\r\n\r\n let i = indexList[0];\r\n if (i < 4)\r\n {\r\n pts[i].add(vecInv);\r\n\r\n let newBox = new Box3;\r\n if (i === 0 || i === 2)\r\n newBox.setFromPoints([pts[0], pts[2]]);\r\n else\r\n newBox.setFromPoints([pts[1], pts[3]]);\r\n\r\n //变量复用\r\n let size = newBox.getSize(new Vector3);\r\n this._Width = size.x;\r\n this._Height = size.y;\r\n\r\n //新的中心\r\n let center = newBox.getCenter(size);\r\n center.setZ(0);\r\n\r\n center.applyMatrix4(this.OCSNoClone);\r\n\r\n this._Matrix.setPosition(center);\r\n this.Update();\r\n }\r\n else if (i === 4)\r\n {\r\n this.Position = this.Position.add(vec);\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n else if (i === 5)\r\n {\r\n let target = this.Position.add(this.Normal.multiplyScalar(TARGET_DISTANCE)).add(vec);\r\n this.Target = target;\r\n }\r\n }\r\n\r\n GetStretchPoints()\r\n {\r\n let heightHalf = this._Height * 0.5;\r\n let widthHalf = this.Width * 0.5;\r\n let pos = this.Position;\r\n\r\n let pts: Vector3[] = [\r\n new Vector3(-widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//左下\r\n new Vector3(widthHalf, -heightHalf, 0).applyMatrix4(this.OCSNoClone),//右下\r\n new Vector3(widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//右上\r\n new Vector3(-widthHalf, heightHalf, 0).applyMatrix4(this.OCSNoClone),//左上\r\n pos.clone().add(this.Normal.multiplyScalar(TARGET_DISTANCE))\r\n ];\r\n return pts;\r\n }\r\n\r\n MoveStretchPoints(ids: number[], vec: Vector3)\r\n {\r\n if (ids.length === 4)\r\n {\r\n this.Move(vec);\r\n return;\r\n }\r\n\r\n const MoveOneGrip = () =>\r\n {\r\n let i = ids[0];\r\n if (i < 4)\r\n this.MoveGripPoints(ids, vec);\r\n else\r\n this.MoveGripPoints([5], vec);\r\n };\r\n\r\n if (ids.length === 1)\r\n {\r\n MoveOneGrip();\r\n return;\r\n }\r\n\r\n //ids.length === 2,3\r\n ids = ids.filter(i => i !== 4);//移除中心\r\n if (ids.length === 1)\r\n {\r\n MoveOneGrip();\r\n return;\r\n }\r\n\r\n //ids.length === 2\r\n ids.sort((a1, a2) => a1 - a2);\r\n let inv = this.OCSInv.setPosition(0, 0, 0);\r\n vec = vec.clone().applyMatrix4(inv);\r\n let ocs = inv.copy(this._Matrix).setPosition(0, 0, 0);\r\n\r\n if (ids[0] === 0)\r\n {\r\n if (ids[1] === 1)//下\r\n {\r\n vec.x = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n\r\n this.MoveGripPoints([0], vec);\r\n }\r\n else if (ids[1] === 3)//左\r\n {\r\n vec.y = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n this.MoveGripPoints([0], vec);\r\n }\r\n }\r\n else if (ids[0] === 1)\r\n {\r\n if (ids[1] === 2)//右\r\n {\r\n vec.y = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n this.MoveGripPoints([1], vec);\r\n }\r\n }\r\n else if (ids[0] === 2)\r\n {\r\n if (ids[1] === 3)//上\r\n {\r\n vec.x = 0;\r\n vec.z = 0;\r\n vec.applyMatrix4(ocs);\r\n\r\n this.MoveGripPoints([2], vec);\r\n }\r\n }\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let lightGroup = new Group();\r\n let light = new TRectAreaLight(this.Color, this.WebIntensity, this._Width, this._Height);\r\n lightGroup.add(light);\r\n this.UpdateDrawObject(renderType, lightGroup);\r\n return lightGroup;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n let light = obj.children[0] as TRectAreaLight;\r\n super.UpdateDrawObject(type, light);\r\n light.width = this._Width;\r\n light.height = this._Height;\r\n light.color.copy(this.Color);\r\n // light.castShadow = true;//threejs没有支持这个影子\r\n\r\n let help: RectAreaLightHelper;\r\n if (obj.children.length === 1)\r\n {\r\n help = new RectAreaLightHelper(light, light.color);\r\n obj.add(help);\r\n }\r\n else\r\n help = obj.children[1] as RectAreaLightHelper;\r\n\r\n help.BarnDoorAngle = 90 - this.BarnDoorAngle;\r\n help.BarnDoorLength = this.BarnDoorLength;\r\n help.color = this.Color;\r\n help.updataRange();\r\n\r\n help.updateMatrixWorld();\r\n\r\n help = obj.children[1] as RectAreaLightHelper;\r\n help.visible = this._ShowHelper;\r\n }\r\n\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._Height = file.Read();\r\n this._Width = file.Read();\r\n new Vector3().fromArray(file.Read());\r\n\r\n //ver2\r\n if (ver > 1)\r\n {\r\n this.AttenuationRadius = file.Read();\r\n this._BarnDoorAngle = file.Read();\r\n this._BarnDoorLength = file.Read();\r\n this.SourceTexture = file.Read();\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(2);\r\n file.Write(this._Height);\r\n file.Write(this._Width);\r\n file.Write([0, 0, 0]);\r\n\r\n //ver2\r\n file.Write(this.AttenuationRadius);\r\n file.Write(this._BarnDoorAngle);\r\n file.Write(this._BarnDoorLength);\r\n file.Write(this.SourceTexture);\r\n }\r\n}\r\n","import { BufferGeometry, Float32BufferAttribute, LineBasicMaterial, LineSegments, MathUtils, Object3D } from 'three';\r\nimport { SpotLight } from './SpotLight';\r\n\r\nexport class SpotLightHelper extends Object3D\r\n{\r\n cone: LineSegments<BufferGeometry, LineBasicMaterial>[] = [];\r\n constructor(private light: SpotLight)\r\n {\r\n super();\r\n\r\n const geometry = new BufferGeometry();\r\n const positions = [\r\n 0, 0, 0, 0, 0, 1,\r\n 0, 0, 0, 1, 0, 1,\r\n 0, 0, 0, - 1, 0, 1,\r\n 0, 0, 0, 0, 1, 1,\r\n 0, 0, 0, 0, - 1, 1\r\n ];\r\n for (let i = 0, j = 1, l = 32; i < l; i++, j++)\r\n {\r\n const p1 = (i / l) * Math.PI * 2;\r\n const p2 = (j / l) * Math.PI * 2;\r\n\r\n positions.push(\r\n Math.cos(p1), Math.sin(p1), 1,\r\n Math.cos(p2), Math.sin(p2), 1\r\n );\r\n\r\n }\r\n geometry.setAttribute('position', new Float32BufferAttribute(positions, 3));\r\n\r\n this.cone[0] = new LineSegments(geometry, new LineBasicMaterial({ fog: false }));\r\n this.cone[1] = new LineSegments(geometry, new LineBasicMaterial({ fog: false }));\r\n\r\n this.cone[0].rotation.x = Math.PI;\r\n this.cone[1].rotation.x = Math.PI;\r\n\r\n this.add(this.cone[0], this.cone[1]);\r\n }\r\n\r\n dispose()\r\n {\r\n this.cone[0].geometry.dispose();\r\n this.cone[1].geometry.dispose();\r\n this.cone[0].material.dispose();\r\n this.cone[1].material.dispose();\r\n }\r\n\r\n update()\r\n {\r\n const coneLength = this.light.Distance ? this.light.Distance : 1000;\r\n const coneWidth1 = coneLength * Math.tan(this.light.Angle);\r\n const coneWidth2 = coneLength * Math.tan(MathUtils.degToRad(this.light.InnerConeAngle));\r\n\r\n this.cone[0].scale.set(coneWidth1, coneWidth1, coneLength);\r\n this.cone[1].scale.set(coneWidth2, coneWidth2, coneLength);\r\n this.cone[0].updateMatrix();\r\n this.cone[1].updateMatrix();\r\n\r\n this.cone[0].material.color.set(this.light.Color).multiplyScalar(0.3);\r\n this.cone[1].material.color.set(this.light.Color);\r\n }\r\n}\r\n","import { ConeGeometry, Group, MathUtils, Mesh, MeshBasicMaterial, Object3D, SpotLight as TSpotLight, Vector3 } from \"three\";\r\nimport { HostApplicationServices } from \"../../ApplicationServices/HostApplicationServices\";\r\nimport { UpdateDraw } from \"../../Common/Status\";\r\nimport { ObjectSnapMode } from \"../../Editor/ObjectSnapMode\";\r\nimport { YAxis, equalv3 } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { equaln } from \"../../Nest/Common/Util\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Light } from \"./Light\";\r\nimport { SpotLightHelper } from \"./SpotLightHelper\";\r\n\r\n@Factory\r\nexport class SpotLight extends Light\r\n{\r\n /**\r\n * If non-zero, light will attenuate linearly from maximum intensity at light position down to zero at distance.\r\n * Default — 0.0.\r\n */\r\n private _Distance: number = 5000;\r\n protected _Intensity: number = 100; //强度\r\n\r\n // 光线沿着光线的距离变暗的量\r\n // 在物理上正确的模式下,衰减 = 2会导致物理上真实的光线衰减。\r\n // 缺省值是1。\r\n private _Decay: number = 0.2;\r\n // 光线散射角度最大为Math.PI/2\r\n private _Angle: number = Math.PI / 4;//默认\r\n\r\n // 聚光锥的半影衰减百分比。在0和1之间的值。 默认值 — 0.0。\r\n private _Penumbra: number = 0;\r\n\r\n //SpotLightComponent extends PointLightComponent\r\n @AutoRecord InnerConeAngle: number = 30;//椎体内部角度 默认0 范围0-90\r\n @AutoRecord OuterConeAngle: number = 40;//椎体外部角度 默认40 范围0-90 (弃用,使用Angle)\r\n\r\n //PointLightComponent\r\n @AutoRecord SourceRadius = 10;//源半径 范围0-300\r\n @AutoRecord SoftSourceRadius = 0;//软源半径 范围0-300\r\n @AutoRecord SourceLength = 0;//源长度 默认0 范围0-1000\r\n\r\n //LocalLightComponent\r\n //Radius:number 没设置这个\r\n @AutoRecord AttenuationRadius = 300; //衰减半径 10-1000\r\n\r\n get Target()\r\n {\r\n return this.Position.add(this.Normal.multiplyScalar(-this._Distance * 0.5));\r\n }\r\n set Target(p: Vector3)\r\n {\r\n if (!equalv3(p, this.Position))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Matrix.lookAt(this.Position, p, YAxis);\r\n this.Update(UpdateDraw.Matrix);\r\n }\r\n }\r\n\r\n get Angle()\r\n {\r\n return this._Angle;\r\n }\r\n set Angle(rad: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Angle = rad;\r\n this.Update();\r\n }\r\n get Decay(): number\r\n {\r\n return this._Decay;\r\n }\r\n set Decay(decay: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Decay = decay;\r\n this.Update();\r\n }\r\n get Distance()\r\n {\r\n return this._Distance;\r\n }\r\n set Distance(dist: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Distance = dist;\r\n this.Update();\r\n }\r\n get Penumbra()\r\n {\r\n return this._Penumbra;\r\n }\r\n set Penumbra(v: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._Penumbra = v;\r\n this.Update();\r\n }\r\n\r\n get EndPoint()\r\n {\r\n return this.Position.add(this.Target.sub(this.Position).normalize().multiplyScalar(this._Distance));\r\n }\r\n\r\n get WebIntensity()\r\n {\r\n let x = this._Intensity / 2000;\r\n x = Math.pow(x, 0.45);\r\n return (x * 125) / Math.PI;//流明转cd 文档是4pi\r\n }\r\n\r\n GetGripPoints(): Vector3[]\r\n {\r\n let radius = this.Distance * Math.tan(this._Angle);\r\n let pts: Vector3[] = [\r\n this.Position, this.Target,\r\n new Vector3(radius, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(-radius, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, radius, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, -radius, -this._Distance).applyMatrix4(this._Matrix),\r\n ];\r\n\r\n let a2 = MathUtils.degToRad(this.InnerConeAngle);\r\n if (this.InnerConeAngle >= 1 && !equaln(this._Angle, a2))\r\n {\r\n let radius2 = this.Distance * Math.tan(a2);\r\n pts.push(\r\n new Vector3(radius2, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(-radius2, 0, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, radius2, -this._Distance).applyMatrix4(this._Matrix),\r\n new Vector3(0, -radius2, -this._Distance).applyMatrix4(this._Matrix),\r\n );\r\n }\r\n\r\n return pts;\r\n }\r\n\r\n MoveGripPoints(indexList: number[], vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (indexList[0] === 0)\r\n {\r\n this.Move(vec);\r\n }\r\n else if (indexList[0] === 1)\r\n this.Target = this.Target.add(vec);\r\n else\r\n {\r\n let pts = this.GetGripPoints();\r\n let p = pts[indexList[0]].add(vec);\r\n let pos = this.Position;\r\n\r\n let dir = this.EndPoint.sub(pos).normalize();\r\n let dir2 = p.sub(pos).normalize();\r\n\r\n let angle = dir.angleTo(dir2);\r\n if (indexList[0] < 6)\r\n {\r\n this.Angle = angle;\r\n this.InnerConeAngle = Math.min(this.InnerConeAngle, MathUtils.radToDeg(angle));\r\n }\r\n else\r\n {\r\n this.InnerConeAngle = MathUtils.radToDeg(angle);\r\n this.Angle = Math.max(angle, this.Angle);\r\n }\r\n\r\n this.Update();\r\n }\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n return this.GetGripPoints();\r\n }\r\n\r\n MoveStretchPoints(indexList: Array<number>, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (indexList.length === 1)\r\n return this.MoveGripPoints(indexList, vec);\r\n else if (indexList.length === 7)\r\n this.Move(vec);\r\n else if (indexList.length > 1)\r\n {\r\n if (indexList.indexOf(0) === -1)\r\n this.MoveGripPoints([1], vec);\r\n else\r\n this.Move(vec);\r\n }\r\n }\r\n\r\n GetObjectSnapPoints(\r\n snapMode: ObjectSnapMode,\r\n pickPoint: Vector3,\r\n lastPoint: Vector3\r\n ): Vector3[]\r\n {\r\n switch (snapMode)\r\n {\r\n case ObjectSnapMode.End:\r\n return this.GetGripPoints();\r\n default:\r\n break;\r\n }\r\n return [];\r\n }\r\n\r\n protected InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n // if (renderType !== RenderType.Physical) return;\r\n\r\n let group = new Group();\r\n\r\n let light = new TSpotLight(this._LightColor, this.WebIntensity, this._Distance, this._Angle, this._Penumbra, this._Decay);\r\n light.position.set(0, 0, 0);\r\n light.updateMatrix();\r\n\r\n light.target.position.set(0, 0, -1);\r\n light.target.updateMatrix();\r\n light.add(light.target);\r\n\r\n Object.defineProperty(light, \"castShadow\", { get: () => HostApplicationServices.isShowLightShadow && this.CaseShadow });\r\n light.shadow.camera.matrixAutoUpdate = true;\r\n light.shadow.camera.far = this._Distance;\r\n\r\n group.add(light);//灯光\r\n\r\n //灯光圆锥\r\n let con = new Mesh(new ConeGeometry(50, 80, 30, 1), new MeshBasicMaterial({ color: this._LightColor }));\r\n con.rotation.x = Math.PI * 0.5;\r\n con.position.z = -40;\r\n con.castShadow = false;\r\n con.updateMatrix();\r\n\r\n group.add(con);//椎体\r\n\r\n this.UpdateDrawObject(renderType, group);\r\n return group;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, en: Object3D)\r\n {\r\n // if (type !== RenderType.Physical) return;\r\n\r\n let [light, con, helper] = en.children as [TSpotLight, Mesh<ConeGeometry, MeshBasicMaterial>, SpotLightHelper];\r\n\r\n super.UpdateDrawObject(type, light);\r\n light.distance = this._Distance;\r\n light.decay = this._Decay;\r\n light.angle = this._Angle;\r\n light.penumbra = this._Penumbra;\r\n\r\n con.material.color.copy(this.Color);\r\n\r\n if (this._ShowHelper)\r\n {\r\n if (!helper)\r\n {\r\n helper = new SpotLightHelper(this);\r\n en.add(helper);\r\n }\r\n else\r\n helper.visible = true;\r\n\r\n helper.update();\r\n }\r\n else\r\n if (helper) helper.visible = this._ShowHelper;\r\n }\r\n\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n super._ReadFile(file);\r\n let ver = file.Read();\r\n this._Distance = file.Read();\r\n this._Decay = file.Read();\r\n this._Angle = file.Read();\r\n this._Penumbra = file.Read();\r\n\r\n let target = new Vector3();\r\n target.fromArray(file.Read());\r\n if (ver < 3)\r\n this.Target = target;\r\n\r\n if (ver > 1)\r\n {\r\n this.InnerConeAngle = file.Read();\r\n this.OuterConeAngle = file.Read();\r\n this.SourceRadius = file.Read();\r\n this.SoftSourceRadius = file.Read();\r\n this.SourceLength = file.Read();\r\n this.AttenuationRadius = file.Read();\r\n }\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n super.WriteFile(file);\r\n file.Write(3);\r\n file.Write(this._Distance);\r\n file.Write(this._Decay);\r\n file.Write(this._Angle);\r\n file.Write(this._Penumbra);\r\n file.Write([0, 0, 0]);\r\n\r\n //ver2\r\n file.Write(this.InnerConeAngle);\r\n file.Write(this.OuterConeAngle);\r\n file.Write(this.SourceRadius);\r\n file.Write(this.SoftSourceRadius);\r\n file.Write(this.SourceLength);\r\n file.Write(this.AttenuationRadius);\r\n }\r\n}\r\n","import { arrayRemoveIf } from \"../../Common/ArrayExt\";\r\nimport { AutoRecord } from \"../AutoRecord\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { ObjectId } from \"../ObjectId\";\r\nimport { SymbolTableRecord } from \"../SymbolTableRecord\";\r\n\r\n/**\r\n * 加工组信息设置.\r\n * 为了保证加工组的信息得到正确的添加和删除.\r\n * 请保证更新Entity的加工组数据,并更新ProcessingGroup的数据.\r\n */\r\n@Factory\r\nexport class ProcessingGroupRecord extends SymbolTableRecord\r\n{\r\n @AutoRecord Objects: ObjectId[] = [];\r\n constructor()\r\n {\r\n super();\r\n }\r\n\r\n get Name()\r\n {\r\n return this.name;\r\n }\r\n set Name(name: string)\r\n {\r\n if (name !== this.name)\r\n {\r\n this.WriteAllObjectRecord();\r\n this.name = name;\r\n }\r\n }\r\n\r\n Purge()\r\n {\r\n arrayRemoveIf(this.Objects, id => !id || id.IsErase);\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n let count = file.Read();\r\n this.Objects.length = 0;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.Objects.push(id);\r\n }\r\n }\r\n //对象将自身数据写入到文件\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.Write(this.Objects.length);\r\n for (let id of this.Objects)\r\n file.WriteObjectId(id);\r\n }\r\n //#endregion\r\n}\r\n","import { BufferAttribute, BufferGeometry, Float32BufferAttribute, InstancedInterleavedBuffer, InterleavedBufferAttribute, Intersection, LineSegments, Material, Mesh, Object3D, ShapeBufferGeometry, Vector2, Vector3 } from \"three\";\r\nimport { Line2 } from \"three/examples/jsm/lines/Line2\";\r\nimport { LineGeometry } from \"three/examples/jsm/lines/LineGeometry\";\r\nimport { HostApplicationServices } from \"../../../../ApplicationServices/HostApplicationServices\";\r\nimport { ColorMaterial } from \"../../../../Common/ColorPalette\";\r\nimport { DisposeThreeObj, Object3DRemoveAll } from \"../../../../Common/Dispose\";\r\nimport { UpdateDraw } from \"../../../../Common/Status\";\r\nimport { BufferGeometryUtils } from \"../../../../Geometry/BufferGeometryUtils\";\r\nimport { ContourTreeNode } from \"../../../../Geometry/ExtrudeMeshGeomBuilder/ExtrudeEdgeGeometry2\";\r\nimport { AsVector3, equaln } from \"../../../../Geometry/GeUtils\";\r\nimport { SweepGeometry } from \"../../../../Geometry/SweepGeometry\";\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 { Curve } from \"../../../Entity/Curve\";\r\nimport { Polyline, PolylineProps } from \"../../../Entity/Polyline\";\r\nimport { ObjectId } from \"../../../ObjectId\";\r\nimport { PhysicalMaterialRecord } from \"../../../PhysicalMaterialRecord\";\r\nimport { Shape } from \"../../../Shape\";\r\nimport { TemplateRecord } from \"../../../Template/TemplateRecord\";\r\nimport { RoomFlatBase } from \"../Flat/RoomFlatBase\";\r\nimport { RoomBase } from \"../RoomBase\";\r\n\r\nexport enum BulkheadCeiling_ContourType\r\n{\r\n Hole = 0,\r\n Land = 1,\r\n Sweep = 2,//放样线条(不影响岛的建模)\r\n}\r\n\r\nexport interface BulkheadCeiling_ContourData\r\n{\r\n ContourType: BulkheadCeiling_ContourType;//洞 还是岛\r\n Path: Curve;//轮廓(可能闭合 可能是一条直线)\r\n SweepShapeTempalteId: ObjectId<TemplateRecord>;//放样形状的模块id\r\n Materials: ObjectId<PhysicalMaterialRecord>[];\r\n Contour: Polyline; //截面轮廓\r\n ContourId: number; //截面轮廓ID\r\n ShapeMaterialSlotData: number[];\r\n OverWriteMaterial?: Map<number, ObjectId<PhysicalMaterialRecord>>;//替代材质\r\n Deviation: number; //线条上下偏移量\r\n Height: number; //吊顶高度\r\n}\r\n\r\n/**\r\n * 吊顶(灯带)\r\n */\r\n@Factory\r\nexport class BulkheadCeiling extends RoomBase\r\n{\r\n constructor() { super(); }\r\n private _ContourData: BulkheadCeiling_ContourData[] = [];\r\n _GemoIdMap = new Map<number, number>();\r\n\r\n get ContourData(): BulkheadCeiling_ContourData[]\r\n {\r\n return this._ContourData;\r\n }\r\n set ContourData(value: BulkheadCeiling_ContourData[])\r\n {\r\n this.WriteAllObjectRecord();\r\n this._ContourData = value;\r\n this.Update();\r\n }\r\n\r\n private _Height = 0;//吊顶高度\r\n\r\n get Height()\r\n {\r\n return this._Height;\r\n }\r\n set Height(value: number)\r\n {\r\n this.WriteAllObjectRecord();\r\n if (!equaln(value, this._Height))\r\n {\r\n this._Height = value;\r\n this.Update();\r\n }\r\n }\r\n\r\n @AutoRecord RelativeRoomFlatTop: ObjectId<RoomFlatBase>;\r\n\r\n get MeshMaterial(): Material\r\n {\r\n const mtl = this._MaterialId;\r\n if (!mtl?.IsErase && mtl?.Object)\r\n return mtl.Object.Material;\r\n return HostApplicationServices.DefaultBulkheadCeilingMaterial;\r\n }\r\n\r\n private _EdgeGeometrys: BufferGeometry[];\r\n get EdgeGeometrys(): BufferGeometry[]\r\n {\r\n if (!this._EdgeGeometrys)\r\n this.MeshGeometry;\r\n\r\n return this._EdgeGeometrys;\r\n }\r\n\r\n\r\n private _LineGeometry: LineGeometry[] = [];\r\n get LineGeometry()\r\n {\r\n if (this._LineGeometry.length !== 0)\r\n return this._LineGeometry;\r\n\r\n this.MeshGeometry;\r\n return this._LineGeometry;\r\n }\r\n\r\n private _FaceGeometry: BufferGeometry; //底面\r\n get FaceGeometry()\r\n {\r\n if (this._FaceGeometry)\r\n return this._FaceGeometry;\r\n\r\n this.MeshGeometry;\r\n return this._FaceGeometry;\r\n }\r\n\r\n private _MeshGeometry: SweepGeometry[] = [];\r\n get MeshGeometry()\r\n {\r\n if (this._MeshGeometry.length !== 0) return this._MeshGeometry;\r\n\r\n //绘制底面start\r\n\r\n //#region //分析包含关系\r\n let contours: ContourTreeNode[] = [];\r\n let contour_data_Map = new Map<ContourTreeNode, BulkheadCeiling_ContourData>();\r\n for (let con_data of this._ContourData)\r\n {\r\n if (!con_data.Path?.IsClose || con_data.ContourType === BulkheadCeiling_ContourType.Sweep) continue;\r\n let contour = Contour.CreateContour(con_data.Path as Polyline);\r\n if (!contour) continue;\r\n\r\n let contourNode = new ContourTreeNode(contour);\r\n contours.push(contourNode);\r\n contour_data_Map.set(contourNode, con_data);\r\n }\r\n ContourTreeNode.ParseContourTree(contours, true);\r\n //#endregion\r\n\r\n let faceGeoms: BufferGeometry[] = [];\r\n this._EdgeGeometrys = [];\r\n this._GemoIdMap.clear();\r\n\r\n for (let contourNode of contours)\r\n {\r\n let con_data = contour_data_Map.get(contourNode);\r\n\r\n if (con_data.ContourType === BulkheadCeiling_ContourType.Land)//Land 岛\r\n {\r\n //#region 绘制平面\r\n if (contourNode.parent && contour_data_Map.get(contourNode.parent).ContourType === BulkheadCeiling_ContourType.Land)//上级也是岛 不需要在绘制平面了\r\n continue;\r\n\r\n if (contourNode.children.length)\r\n con_data.Height = 0;\r\n\r\n let holes: Contour[] = [];\r\n\r\n for (let chiNode of contourNode.children)\r\n {\r\n let chi_con_data = contour_data_Map.get(chiNode);\r\n if (chi_con_data.ContourType === BulkheadCeiling_ContourType.Hole)\r\n {\r\n holes.push(chiNode.contour.Clone());\r\n let height = chi_con_data.Height;\r\n if (height > con_data.Height)\r\n con_data.Height = height;\r\n }\r\n }\r\n\r\n let shape = new Shape(contourNode.contour, holes);\r\n let geom = new ShapeBufferGeometry(shape.Shape, 30);\r\n\r\n //应用高度\r\n let mat = shape.Outline.Curve.OCS.multiply(shape.Outline.Curve.OCS.setPosition(new Vector3(0, 0, - con_data.Height)));\r\n geom.applyMatrix4(mat);\r\n\r\n {\r\n const indices = Array.from(geom.getIndex().array);\r\n\r\n // 翻转面片索引的顺序\r\n const flippedIndices: number[] = [];\r\n for (let i = 0; i < indices.length; i += 3)\r\n flippedIndices.push(indices[i], indices[i + 2], indices[i + 1]);\r\n\r\n // 创建新的面片索引属性\r\n const newIndices = new BufferAttribute(new Uint16Array(flippedIndices), 1);\r\n\r\n // 更新面片索引属性\r\n geom.setIndex(newIndices);\r\n\r\n //翻转法线\r\n for (let i = 0; i < geom.attributes.normal.array.length; i++)\r\n //@ts-ignore\r\n geom.attributes.normal.array[i] = -geom.attributes.normal.array[i];\r\n }\r\n\r\n faceGeoms.push(geom);\r\n //#endregion\r\n }\r\n }\r\n //绘制底面end\r\n\r\n //Sweep\r\n let i = 0;\r\n for (; i < this._ContourData.length; i++)\r\n {\r\n let contour = this._ContourData[i].Contour;\r\n let path = this._ContourData[i].Path.Clone();\r\n\r\n if (contour)\r\n {\r\n //范样上下偏移\r\n let mat = this.OCS.clone().setPosition(0, 0, this._ContourData[i].Deviation - this._ContourData[i].Height);\r\n path.ApplyMatrix(mat);\r\n\r\n if (this._ContourData[i].ContourType === BulkheadCeiling_ContourType.Hole)\r\n path = path.Reverse();\r\n\r\n let sweepGeo = new SweepGeometry(contour, path, this._ContourData[i].ShapeMaterialSlotData);\r\n\r\n this._GemoIdMap.set(sweepGeo.id, i);\r\n\r\n this._MeshGeometry.push(sweepGeo);\r\n\r\n //line geo\r\n this.GetLineGeometry(sweepGeo.edgePts);\r\n //edge geo\r\n let edgeGeom = new BufferGeometry().setAttribute('position', new Float32BufferAttribute(sweepGeo.edgePts, 3));\r\n this._EdgeGeometrys.push(edgeGeom);\r\n\r\n sweepGeo.edgePts = undefined;\r\n }\r\n else\r\n {\r\n //给岛增加围栏 20 * height\r\n if (this._ContourData[i].ContourType === BulkheadCeiling_ContourType.Land && i !== 0)\r\n {\r\n let height = this._ContourData[i].Height;\r\n if (equaln(height, 0)) continue;\r\n\r\n let mat = this.OCS.clone().setPosition(0, 0, -height);\r\n path.ApplyMatrix(mat);\r\n\r\n const lineData: PolylineProps[] = [\r\n { bul: 0, pt: new Vector2(0, 0) },\r\n { bul: 0, pt: new Vector2(-20, 0) },\r\n { bul: 0, pt: new Vector2(-20, height) },\r\n { bul: 0, pt: new Vector2(0, height) },\r\n { bul: 0, pt: new Vector2(0, 0) }\r\n ];\r\n let contour = new Polyline(lineData);\r\n\r\n let sweepGeo = new SweepGeometry(contour, path, [undefined]);\r\n this._GemoIdMap.set(sweepGeo.id, i);\r\n this._MeshGeometry.push(sweepGeo);\r\n }\r\n }\r\n }\r\n\r\n this._FaceGeometry = BufferGeometryUtils.MergeBufferGeometries(faceGeoms);\r\n this._GemoIdMap.set(this._FaceGeometry.id, i);\r\n\r\n return this._MeshGeometry;\r\n }\r\n\r\n get MeshGeometry2()\r\n {\r\n this.MeshGeometry;//TODO: 避免重复构造\r\n let geos = [this._FaceGeometry];\r\n if (!this._FaceGeometry.index) geos = [];\r\n\r\n for (let geo of this._MeshGeometry)\r\n {\r\n let buff = new BufferGeometry().fromGeometry(geo);\r\n const indexs: number[] = [];\r\n for (let i = 0; i < buff.attributes.position.count; i += 3)\r\n indexs.push(i, i + 1, i + 2);\r\n\r\n buff.setIndex(indexs);\r\n\r\n geos.push(buff);\r\n }\r\n let geo = BufferGeometryUtils.MergeBufferGeometries(geos, true);\r\n return geo;\r\n }\r\n\r\n get Materials2()\r\n {\r\n let materials: Material[] = [this.MeshMaterial as Material];//所有的材质\r\n for (let cd of this.ContourData)\r\n {\r\n for (let i = 0; i < cd.Materials.length; i++)\r\n {\r\n let mtl = cd.OverWriteMaterial?.get(i) ?? cd.Materials[i];\r\n materials.push(mtl?.Object?.Material ?? this.MeshMaterial as Material);\r\n }\r\n }\r\n return materials;\r\n }\r\n\r\n GetLineGeometry(pts: number[])\r\n {\r\n let lineGeo = new LineGeometry();\r\n let lineSegments = new Float32Array(pts);\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 this._LineGeometry.push(lineGeo);\r\n }\r\n\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe): Object3D\r\n {\r\n let obj = new Object3D();\r\n this.UpdateDrawObject(renderType, obj);\r\n return obj;\r\n }\r\n\r\n /**\r\n * 重载:更新绘制的实体\r\n * @param {RenderType} renderType\r\n * @param {Object3D} obj\r\n */\r\n UpdateDrawObject(renderType: RenderType, obj: Object3D)\r\n {\r\n DisposeThreeObj(obj);\r\n Object3DRemoveAll(obj);\r\n\r\n if (renderType === RenderType.Wireframe || renderType === RenderType.Jig)\r\n {\r\n for (let edgeGeo of this.EdgeGeometrys)\r\n obj.add(new LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(this.ColorIndex)));\r\n }\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n\r\n obj.add(new Mesh(this.FaceGeometry, material));\r\n\r\n for (let meshGeo of this.MeshGeometry)\r\n {\r\n obj.add(new Mesh(meshGeo, material));\r\n }\r\n\r\n for (let edgeGeo of this.EdgeGeometrys)\r\n obj.add(new LineSegments(edgeGeo, ColorMaterial.GetLineMaterial(this.ColorIndex)));\r\n }\r\n else if (renderType === RenderType.Physical)\r\n {\r\n // 单一绘制对象 TODO:因为没有实现材质槽 所以暂时不用这个\r\n // obj.add(new Mesh(this.MeshGeomtry2, this.Materials2));\r\n\r\n obj.add(new Mesh(this.FaceGeometry, this.MeshMaterial));\r\n\r\n for (let meshGeo of this.MeshGeometry)\r\n obj.add(new Mesh(meshGeo, this.GetMaterials(this._GemoIdMap.get(meshGeo.id))));\r\n }\r\n // else if (renderType === RenderType.Physical2)\r\n // {\r\n // obj.add(new Mesh(this.FaceGeometry, (this.Material?.Object as PhysicalMaterialRecord)?.Material ?? this.MeshMaterial));\r\n\r\n // for (let meshGeo of this.MeshGeometry)\r\n // obj.add(new Mesh(meshGeo, this.GetMaterials(this._GemoIdMap.get(meshGeo.id))));\r\n\r\n // for (let edgeGeo of this.EdgeGeometrys)\r\n // obj.add(new LineSegments(edgeGeo, ColorMaterial.GetPhysical2EdgeMaterial()));\r\n // }\r\n else if (renderType === RenderType.Print)\r\n {\r\n for (let lineGeo of this.LineGeometry)\r\n obj.add(new Line2(lineGeo, ColorMaterial.PrintLineMatrial));\r\n }\r\n return obj;\r\n }\r\n\r\n SetMaterial(mtl: ObjectId<PhysicalMaterialRecord>, intersection: Intersection)\r\n {\r\n let id = intersection.object[\"geometry\"]?.id;\r\n if (id)\r\n {\r\n this.WriteAllObjectRecord();\r\n let contourIndex = this._GemoIdMap.get(id);\r\n if (contourIndex === undefined)\r\n this.Material = mtl;\r\n else\r\n {\r\n //因为这个索引是底部面的索引\r\n if (contourIndex === this._ContourData.length)\r\n {\r\n this.Material = mtl;\r\n }\r\n else\r\n {\r\n let contourData = this._ContourData[contourIndex];\r\n if (!contourData.OverWriteMaterial)\r\n contourData.OverWriteMaterial = new Map;\r\n\r\n contourData.OverWriteMaterial.set(intersection.face.materialIndex, mtl);\r\n }\r\n }\r\n this.Update();\r\n }\r\n }\r\n\r\n //获取Sweep实体的材质列表\r\n GetMaterials(index: number): Material[]\r\n {\r\n let contourData = this._ContourData[index];\r\n return contourData.Materials.map((mtl, index) =>\r\n {\r\n return contourData.OverWriteMaterial?.get(index)?.Object?.Material ?? mtl?.Object?.Material ?? this.MeshMaterial as Material;\r\n });\r\n }\r\n\r\n SetDefaultMaterialAtAllSlot(): void\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let data of this.ContourData)\r\n {\r\n //材质槽要默认添加 undefined\r\n data.Materials = [undefined];\r\n data.ShapeMaterialSlotData = [];\r\n if (data.OverWriteMaterial)\r\n data.OverWriteMaterial = undefined;\r\n }\r\n this.Update(UpdateDraw.Geometry);\r\n }\r\n\r\n UpdateDrawObjectMaterial(renderType: RenderType, obj: Object3D, material?: Material)\r\n {\r\n if (renderType === RenderType.Physical)\r\n obj.traverse(o =>\r\n {\r\n if (o instanceof Mesh)\r\n {\r\n let index = this._GemoIdMap.get(o.geometry.id);\r\n if (index !== undefined)\r\n {\r\n if (Array.isArray(o.material))\r\n {\r\n let materials = this.GetMaterials(index);\r\n o.material = materials;\r\n }\r\n }\r\n else\r\n o.material = this.MeshMaterial;\r\n }\r\n });\r\n else if (renderType === RenderType.Conceptual)\r\n {\r\n let material = ColorMaterial.GetConceptualMaterial(this.ColorIndex);\r\n let face = obj.children[0] as Mesh;//\r\n face.material = material;\r\n for (let i = 1; i < obj.children.length; i++)\r\n {\r\n let chiObj = obj.children[i];\r\n if (chiObj instanceof Mesh)\r\n chiObj.material = material;\r\n else if (chiObj instanceof LineSegments)\r\n chiObj.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n }\r\n else if (renderType === RenderType.Wireframe)\r\n {\r\n for (let lineSeg of obj.children as LineSegments[])\r\n lineSeg.material = ColorMaterial.GetLineMaterial(this.ColorIndex);\r\n }\r\n }\r\n\r\n override UpdateDrawGeometry()\r\n {\r\n for (let gemo of this._MeshGeometry)\r\n gemo.dispose();\r\n this._MeshGeometry = [];\r\n\r\n for (let gemo of this._LineGeometry)\r\n gemo.dispose();\r\n this._LineGeometry = [];\r\n\r\n if (this._FaceGeometry)\r\n this._FaceGeometry.dispose();\r\n this._FaceGeometry = 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 GetGripPoints(): Array<Vector3>\r\n {\r\n let pts = [];\r\n let mat = this.OCS.multiply(this.OCS.setPosition(new Vector3(0, 0, -this._Height)));\r\n for (let data of this._ContourData)\r\n pts.push(...data.Path.Clone().ApplyMatrix(mat).GetGripPoints());\r\n return pts;\r\n }\r\n\r\n GetStretchPoints(): Vector3[]\r\n {\r\n let pts: Vector3[] = [];\r\n let lineData = (this.ContourData[0].Path as Polyline).LineData;\r\n for (let data of lineData)\r\n {\r\n let p = AsVector3(data.pt).applyMatrix4(this.ContourData[0].Path.OCS).applyMatrix4(this.OCSNoClone);\r\n pts.push(p);\r\n }\r\n return pts;\r\n }\r\n\r\n MoveStretchPoints(indexList: Array<number>, vec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n let path = this.ContourData[0].Path;\r\n path.ApplyMatrix(this.OCS);\r\n path.MoveStretchPoints(indexList, vec);\r\n path.ApplyMatrix(this.OCSInv);\r\n this.Update();\r\n }\r\n\r\n MoveGripPoints(indexList: number[], moveVec: Vector3)\r\n {\r\n this.WriteAllObjectRecord();\r\n\r\n for (let i = 0; i < this._ContourData.length; i++)\r\n {\r\n let path = this._ContourData[i].Path.Clone();\r\n let newIndexlist = [];\r\n let dataIndexList = [];\r\n let ptLength = path.GetGripPoints().length;\r\n for (let index of indexList)\r\n {\r\n if (ptLength < (index + 1))\r\n newIndexlist.push(index - ptLength);\r\n else\r\n dataIndexList.push(index);\r\n }\r\n if (dataIndexList.length !== 0)\r\n {\r\n path.ApplyMatrix(this.OCS);\r\n path.MoveGripPoints(dataIndexList, moveVec);\r\n path.ApplyMatrix(this.OCSInv);\r\n this.ContourData[i].Path = path;\r\n }\r\n\r\n indexList = newIndexlist;\r\n }\r\n this.Update();\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected override _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n this.ContourData = [];\r\n let contourDataCount = file.Read();\r\n for (let i = 0; i < contourDataCount; i++)\r\n {\r\n let data: BulkheadCeiling_ContourData = {\r\n ContourType: null,\r\n Path: null,\r\n SweepShapeTempalteId: null,\r\n Materials: [],\r\n Contour: null,\r\n ContourId: null,\r\n ShapeMaterialSlotData: [],\r\n OverWriteMaterial: null,\r\n Deviation: null,\r\n Height: null\r\n };\r\n\r\n data.ContourType = file.Read();\r\n data.Contour = file.ReadObject();\r\n data.ContourId = file.Read();\r\n data.Path = file.ReadObject();\r\n data.SweepShapeTempalteId = file.ReadObjectId() as ObjectId<TemplateRecord>;\r\n data.Deviation = ver > 1 ? file.Read() : 0;\r\n data.Height = ver > 1 ? file.Read() : 0;\r\n\r\n //覆盖材质\r\n let overwriteMtlSize = file.Read() as number;\r\n if (overwriteMtlSize) data.OverWriteMaterial = new Map;\r\n else data.OverWriteMaterial = undefined;\r\n for (let i = 0; i < overwriteMtlSize; i++)\r\n {\r\n let index = file.Read();\r\n let mtlId = file.ReadObjectId() as ObjectId<PhysicalMaterialRecord>;\r\n data.OverWriteMaterial.set(index, mtlId);\r\n }\r\n\r\n //原始材质\r\n let mtlCount = file.Read();\r\n for (let i = 0; i < mtlCount; i++)\r\n data.Materials.push(file.ReadObjectId() as ObjectId<PhysicalMaterialRecord>);\r\n\r\n //材质槽\r\n let materialCount = file.Read();\r\n data.ShapeMaterialSlotData = file.ReadArray(materialCount);\r\n\r\n this.ContourData.push(data);\r\n }\r\n\r\n this.RelativeRoomFlatTop = file.ReadObjectId() as ObjectId<RoomFlatBase>;\r\n\r\n if (ver > 2)\r\n this._LockMaterial = file.ReadBool();\r\n else\r\n this._LockMaterial = false;\r\n }\r\n\r\n\r\n //对象将自身数据写入到文件.\r\n override WriteFile(file: CADFiler)\r\n {\r\n file.Write(3);\r\n super.WriteFile(file);\r\n\r\n file.Write(this.ContourData.length);\r\n\r\n for (let data of this.ContourData)\r\n {\r\n file.Write(data.ContourType);\r\n file.WriteObject(data.Contour);\r\n file.Write(data.ContourId);\r\n file.WriteObject(data.Path);\r\n file.WriteObjectId(data.SweepShapeTempalteId);\r\n file.Write(data.Deviation);\r\n file.Write(data.Height);\r\n\r\n //覆盖材质\r\n if (data.OverWriteMaterial)\r\n {\r\n file.Write(data.OverWriteMaterial.size);\r\n for (let [index, mtlId] of data.OverWriteMaterial)\r\n {\r\n file.Write(index);\r\n file.WriteObjectId(mtlId);\r\n }\r\n }\r\n else\r\n file.Write(0);\r\n\r\n //原始材质\r\n file.Write(data.Materials.length);\r\n for (let material of data.Materials)\r\n file.WriteObjectId(material);\r\n\r\n //材质槽\r\n file.Write(data.ShapeMaterialSlotData.length);\r\n for (let matData of data.ShapeMaterialSlotData)\r\n file.Write(matData);\r\n }\r\n\r\n file.WriteObjectId(this.RelativeRoomFlatTop);\r\n\r\n // ver3\r\n file.WriteBool(this._LockMaterial);\r\n }\r\n //#endregion\r\n}\r\n","import { Object3D, Vector3 } from \"three\";\r\nimport { equalv3 } from \"../../../../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../../../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../../../../CADFactory\";\r\nimport { CADFiler } from \"../../../../CADFiler\";\r\nimport { CADObject } from \"../../../../CADObject\";\r\nimport { Line } from \"../../../../Entity/Line\";\r\nimport { RoomBase } from \"../../RoomBase\";\r\nimport { applyMixins } from \"../RoomWallBase\";\r\nimport { RoomHoleBase } from \"./RoomHoleBase\";\r\n\r\nconst TempP = new Vector3;\r\n\r\n\r\n/**\r\n * 直线洞 2点(暂时不要用这个 全部使用RoomHolePolyline)\r\n */\r\n@Factory\r\nexport class RoomHoleLine extends RoomHoleBase\r\n{\r\n //虽然使用了三维的点,但是我们实际使用的是二维的点 z总是等于0\r\n constructor(private _StartPoint = new Vector3,\r\n private _EndPoint = new Vector3,\r\n )\r\n {\r\n super();\r\n }\r\n\r\n get StartPoint(): Vector3\r\n {\r\n return this._StartPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n get EndPoint(): Vector3\r\n {\r\n return this._EndPoint.clone().applyMatrix4(this.OCSNoClone);\r\n }\r\n\r\n set StartPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._StartPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._StartPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n set EndPoint(p: Vector3)\r\n {\r\n p = TempP.copy(p).applyMatrix4(this.OCSInv).setZ(0);\r\n if (!equalv3(p, this._EndPoint, 1e-4))\r\n {\r\n this.WriteAllObjectRecord();\r\n this._EndPoint.copy(p);\r\n this.Update();\r\n }\r\n }\r\n\r\n //#region Draw\r\n InitDrawObject(renderType: RenderType = RenderType.Wireframe)\r\n {\r\n let obj = new Object3D();\r\n return obj;\r\n }\r\n\r\n UpdateDrawObject(type: RenderType, obj: Object3D)\r\n {\r\n }\r\n //#endregion\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n this._StartPoint.set(file.Read(), file.Read(), 0);\r\n this._EndPoint.set(file.Read(), file.Read(), 0);\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.Write(this._StartPoint.x);\r\n file.Write(this._StartPoint.y);\r\n\r\n file.Write(this._EndPoint.x);\r\n file.Write(this._EndPoint.y);\r\n }\r\n //局部撤销\r\n ApplyPartialUndo(undoData: CADObject)\r\n {\r\n super.ApplyPartialUndo(undoData);\r\n }\r\n //#endregion\r\n\r\n}\r\n\r\n//@ts-ignore\r\nexport interface RoomHoleLine extends RoomBase, Line { }\r\n\r\napplyMixins(RoomHoleLine, Line);\r\n","import { Factory } from \"../CADFactory\";\r\nimport { SymbolTable } from \"./SymbolTable\";\r\n\r\n@Factory\r\nexport class BlockTable extends SymbolTable\r\n{\r\n\r\n}\r\n","import { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\nexport enum ThicknessDirection\r\n{\r\n Center = 0,\r\n Back = 1,\r\n Front = 2,\r\n}\r\n\r\nexport interface ThicknessActionData\r\n{\r\n //方向\r\n Direction: ThicknessDirection;\r\n /**\r\n * 附加的动作\r\n */\r\n Actions: TemplateAction[];\r\n}\r\n\r\n/**\r\n * 模版动作\r\n */\r\n@Factory\r\nexport class TempateThicknessAction extends TemplateAction\r\n{\r\n EntityDirectionMap: Map<ObjectId, ThicknessActionData> = new Map();\r\n protected _Update(paramDiff: number, newValue: number)\r\n {\r\n for (let [id, d] of this.EntityDirectionMap)\r\n {\r\n if (!id || id.IsErase) continue;\r\n\r\n let br = id.Object as Board;\r\n\r\n br.Clear2DPathCache();\r\n br.Thickness += paramDiff;\r\n if (d.Direction === ThicknessDirection.Back)\r\n br.Position = br.Position.sub(br.Normal.multiplyScalar(paramDiff));\r\n else if (d.Direction === ThicknessDirection.Center)\r\n br.Position = br.Position.sub(br.Normal.multiplyScalar(paramDiff * 0.5));\r\n\r\n for (let a of d.Actions)\r\n {\r\n a.parent = this.parent;\r\n a.Update(paramDiff, newValue);\r\n }\r\n }\r\n }\r\n\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n\r\n let count = file.Read() as number;\r\n this.EntityDirectionMap.clear();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n let direction = file.Read() as ThicknessDirection;\r\n let actionsCount = file.Read() as number;\r\n let actions: TemplateAction[] = [];\r\n for (let j = 0; j < actionsCount; j++)\r\n {\r\n actions.push(file.ReadObject() as TemplateAction);\r\n }\r\n this.EntityDirectionMap.set(id, { Direction: direction, Actions: actions });\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.Write(this.EntityDirectionMap.size);\r\n for (let [id, d] of this.EntityDirectionMap)\r\n {\r\n file.WriteObjectId(id);\r\n file.Write(d.Direction);\r\n file.Write(d.Actions.length);\r\n for (let a of d.Actions)\r\n file.WriteObject(a);\r\n }\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { MoveMatrix } from \"../../../Geometry/GeUtils\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\n@Factory\r\nexport class TemplateMoveAction extends TemplateAction\r\n{\r\n\r\n constructor(public StretchDirection = new Vector3,\r\n public MoveEntitys: ObjectId[] = []\r\n )\r\n {\r\n super();\r\n }\r\n\r\n protected _CacheMoveVector: Vector3;\r\n protected _Update(paramDiff: number)\r\n {\r\n if (!this._CacheMoveVector) this._CacheMoveVector = new Vector3();\r\n\r\n this._CacheMoveVector.copy(this.StretchDirection).multiplyScalar(paramDiff);\r\n\r\n let moveMatrix = MoveMatrix(this._CacheMoveVector);\r\n for (let id of this.MoveEntitys)\r\n {\r\n if (id?.Object)\r\n {\r\n let ent = id.Object as Entity;\r\n ent.ApplyMatrix(moveMatrix);\r\n }\r\n }\r\n }\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.StretchDirection.fromArray(file.Read());\r\n this.MoveEntitys.length = 0;\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadObjectId();\r\n if (id) this.MoveEntitys.push(id);\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.Write(this.StretchDirection.toArray());\r\n file.Write(this.MoveEntitys.length);\r\n for (let ent of this.MoveEntitys)\r\n file.WriteObjectId(ent);\r\n }\r\n}\r\n","import { arrayClone } from \"../../../Common/ArrayExt\";\r\nimport { GetBoardHighSeal, GetBoardSealingCurves, SetBoardTopDownLeftRightSealData } from \"../../../GraphicsSystem/CalcEdgeSealing\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateAction } from \"./TemplateAction\";\r\n\r\n/**\r\n * 设置封边动作\r\n */\r\n@Factory\r\nexport class TemplateSetSealAction extends TemplateAction\r\n{\r\n EntitySealIndexsMap: {\r\n entity: ObjectId<Board>;\r\n indexs: number[];\r\n }[] = [];\r\n\r\n protected override _Update(diff: number, newV: number)\r\n {\r\n for (let { entity, indexs } of this.EntitySealIndexsMap)\r\n {\r\n if (entity?.Object && !entity.IsErase)\r\n {\r\n let br = entity.Object;\r\n let highSealCurves = GetBoardSealingCurves(br, true);\r\n let highseals = GetBoardHighSeal(br, highSealCurves);\r\n\r\n for (let i of indexs)\r\n {\r\n if (highseals[i])\r\n highseals[i].size = newV;\r\n }\r\n\r\n SetBoardTopDownLeftRightSealData(br, highseals, highSealCurves);\r\n br.BoardProcessOption.highSealed = highseals;\r\n }\r\n }\r\n }\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.EntitySealIndexsMap.length = 0;\r\n let count = file.Read() as number;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let entity = file.ReadObjectId() as ObjectId<Board>;\r\n let indexs = file.Read();\r\n if (entity) this.EntitySealIndexsMap.push({ entity, indexs });\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.Write(this.EntitySealIndexsMap.length);\r\n for (let d of this.EntitySealIndexsMap)\r\n {\r\n file.WriteObjectId(d.entity);\r\n file.Write(arrayClone(d.indexs));\r\n }\r\n }\r\n}\r\n","import { arrayClone } from \"../../../Common/ArrayExt\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateMoveAction } from \"./TemplateMoveAction\";\r\n\r\n/**\r\n * Stretch夹点动作\r\n */\r\n@Factory\r\nexport class TemplateStretchGripAction extends TemplateMoveAction\r\n{\r\n EntityStretchPointMap: {\r\n entity: ObjectId;\r\n indexs: number[];\r\n }[] = [];\r\n\r\n protected _Update(dist: number)\r\n {\r\n super._Update(dist);\r\n for (let { entity, indexs } of this.EntityStretchPointMap)\r\n {\r\n if (entity?.Object)\r\n {\r\n let ent = entity.Object as Entity;\r\n ent.MoveStretchPoints(indexs, this._CacheMoveVector);\r\n }\r\n }\r\n }\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.EntityStretchPointMap.length = 0;\r\n let count = file.Read() as number;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let entity = file.ReadObjectId();\r\n let indexs = file.Read();\r\n if (entity) this.EntityStretchPointMap.push({ entity, indexs });\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.Write(this.EntityStretchPointMap.length);\r\n for (let d of this.EntityStretchPointMap)\r\n {\r\n file.WriteObjectId(d.entity);\r\n file.Write(arrayClone(d.indexs));\r\n }\r\n }\r\n}\r\n","import { Box3, Vector3 } from \"three\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateMoveAction } from \"./TemplateMoveAction\";\r\n\r\n/**\r\n * 拽拖比例盒子动作\r\n */\r\n@Factory\r\nexport class TemplateStretchScaleBoxAction extends TemplateMoveAction\r\n{\r\n /**\r\n * 正常不会直接修改下面的2个属性,如果真的需要修改,请调用 `this.WriteAllObjectRecord`;\r\n * 避免历史记录没有记录更新.\r\n */\r\n constructor(\r\n public StretchDirection: Vector3 = new Vector3(),\r\n public EntityStretchData: { entity: ObjectId; scaleBox: Box3; }[] = []\r\n )\r\n {\r\n super();\r\n }\r\n\r\n protected _Update(dist: number)\r\n {\r\n super._Update(dist);\r\n\r\n for (let { entity, scaleBox } of this.EntityStretchData)\r\n {\r\n if (!entity || entity.IsErase) continue;\r\n\r\n let ent = entity.Object as Entity;\r\n let pts = ent.GetStretchPoints();\r\n let ocsInv = ent.OCSInv;\r\n let entityBox = ent.BoundingBoxInOCS;\r\n let size = entityBox.getSize(new Vector3());\r\n scaleBox = scaleBox.clone();\r\n scaleBox.min.multiply(size).sub(new Vector3(1, 1, 1));\r\n scaleBox.max.multiply(size).add(new Vector3(1, 1, 1));\r\n let stretchIndexs: number[] = [];\r\n for (let i = 0, length = pts.length; i < length; i++)\r\n {\r\n let p = pts[i];\r\n p.applyMatrix4(ocsInv);\r\n if (scaleBox.containsPoint(p))\r\n stretchIndexs.push(i);\r\n }\r\n ent.MoveStretchPoints(stretchIndexs, this._CacheMoveVector);\r\n }\r\n }\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.EntityStretchData.length = 0;\r\n let count = file.Read() as number;\r\n for (let i = 0; i < count; i++)\r\n {\r\n let entity = file.ReadObjectId();\r\n let min = new Vector3().fromArray(file.Read());\r\n let max = new Vector3().fromArray(file.Read());\r\n this.EntityStretchData.push({ entity, scaleBox: new Box3(min, max) });\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.Write(this.EntityStretchData.length);\r\n for (let d of this.EntityStretchData)\r\n {\r\n file.WriteObjectId(d.entity);\r\n file.Write(d.scaleBox.min.toArray());\r\n file.Write(d.scaleBox.max.toArray());\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * 拽拖固定大小盒子动作(弃用)\r\n */\r\n/*\r\nclass TemplateStretchSizeBoxAction extends TemplateAction\r\n{\r\n StretchDirection: Vector3;\r\n\r\n EntityStretchPointMap: { entity: Entity, sizeBox: Box3 }[];\r\n}\r\n*/\r\n","import { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { I2DModeling } from \"../../Entity/Board\";\r\nimport { Circle } from \"../../Entity/Circle\";\r\nimport { ExtrudeSolid } from \"../../Entity/Extrude\";\r\nimport { Polyline } from \"../../Entity/Polyline\";\r\nimport { TemplateFilletAction } from \"./TemplateFilletAction\";\r\n\r\nfunction r2b(radius: number, dist: number, isBigArc = false)\r\n{\r\n let r = Math.abs(radius);\r\n let hlafDist = dist * 0.5;\r\n let bul = Math.tan(0.5 * Math.asin(hlafDist / r));\r\n if (isBigArc)\r\n {\r\n let a = bul * hlafDist;\r\n bul = (r * 2 - a) / hlafDist;\r\n }\r\n\r\n bul *= Math.sign(radius);\r\n return bul;\r\n}\r\n\r\nexport enum TempalteActionRadiusType\r\n{\r\n Radius = 0,\r\n Bulge = 1,//凸度模式\r\n Height = 2,//高度模式\r\n}\r\n\r\n\r\n@Factory\r\nexport class TemplateaRadiusAction extends TemplateFilletAction\r\n{\r\n @AutoRecord IsBigArc = false;//是大圆弧(仅在半径模式下生效)\r\n @AutoRecord RadiusType = TempalteActionRadiusType.Radius;//半径类型\r\n\r\n constructor(radiusType: TempalteActionRadiusType)\r\n {\r\n super();\r\n this.RadiusType = radiusType;\r\n }\r\n\r\n //修改半径(这里不是倒角了)\r\n protected override Fillet(br: ExtrudeSolid | I2DModeling, newValue: number, d: { ArcParams: number[]; })\r\n {\r\n let cu = br instanceof ExtrudeSolid ? br.ContourCurve : br.path;\r\n if (cu instanceof Circle)\r\n return;\r\n\r\n let radius = Math.sign(newValue) * Math.max(Math.abs(newValue), 0.1);\r\n\r\n let cuOld = cu as Polyline;\r\n for (let arcParam of d.ArcParams)\r\n {\r\n if (this.RadiusType === TempalteActionRadiusType.Bulge)\r\n {\r\n cu = cu.Clone();\r\n cu.LineData[Math.floor(arcParam)].bul = radius;\r\n }\r\n else\r\n {\r\n let p1 = cu.GetPointAtParam(Math.floor(arcParam));\r\n const FixIndex = (index: number, count: number, isClose = true) =>\r\n {\r\n if (index < 0)\r\n return count + index;\r\n //没有闭合的曲线最后一个索引不变回原点\r\n else if (isClose && index >= count || !isClose && index > count)\r\n return index - count;\r\n else\r\n return index;\r\n };\r\n let p2 = cu.GetPointAtParam(FixIndex(Math.floor(arcParam) + 1, cu.EndParam, cu.IsClose));\r\n\r\n let dist = p1.distanceTo(p2);\r\n let bul: number;\r\n if (this.RadiusType === TempalteActionRadiusType.Radius)\r\n bul = r2b(radius, dist, this.IsBigArc);\r\n else//高度模式\r\n bul = radius * 2 / dist;\r\n\r\n if (!isNaN(bul))\r\n {\r\n cu = cu.Clone();\r\n cu.LineData[Math.floor(arcParam)].bul = bul;\r\n }\r\n }\r\n }\r\n\r\n if (br instanceof ExtrudeSolid)\r\n {\r\n if (cu !== cuOld)\r\n br.ContourCurve = cu;\r\n }\r\n else\r\n {\r\n if (cu !== cuOld)\r\n br.path = cu as Polyline;\r\n }\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n //对象应该实现dataIn和DataOut的方法,为了对象的序列化和反序列化\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n\r\n this.IsBigArc = file.Read();\r\n if (ver < 4)\r\n {\r\n this.RadiusType = TempalteActionRadiusType.Radius;\r\n file.Read();\r\n }\r\n else\r\n {\r\n this.RadiusType = file.Read();\r\n }\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(4);\r\n super.WriteFile(file);\r\n\r\n file.Write(this.IsBigArc);\r\n file.Write(this.RadiusType);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { Positioning } from \"./Positioning\";\r\n\r\n@Factory\r\nexport class PositioningBoardSpace extends Positioning\r\n{\r\n @AutoRecord ObjectId: ObjectId<Board>;\r\n /**\r\n * 定位\r\n */\r\n async Positioning()\r\n {\r\n this.SpaceCS = undefined;\r\n this.SpaceSize = undefined;\r\n\r\n if (this.ObjectId && !this.ObjectId.IsErase)\r\n {\r\n let ent = this.ObjectId.Object as Board;\r\n this.SpaceCS = ent.OCS;\r\n this.SpaceSize = new Vector3(ent.Width, ent.Height, ent.Thickness);\r\n }\r\n }\r\n\r\n //#region File\r\n ReadFile(file: CADFiler): void\r\n {\r\n let ver = file.Read();\r\n this.ObjectId = file.ReadObjectId() as ObjectId<Board>;\r\n }\r\n\r\n WriteFile(file: CADFiler): void\r\n {\r\n file.Write(1);\r\n file.WriteObjectId(this.ObjectId);\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { HardwareCompositeEntity } from \"../../Hardware/HardwareCompositeEntity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { Positioning } from \"./Positioning\";\r\n\r\n\r\n/**\r\n * 拉手的定位空间\r\n */\r\n@Factory\r\nexport class PositioningHandleSpace extends Positioning\r\n{\r\n constructor(_ObjectId?: ObjectId<Board | HardwareCompositeEntity>)\r\n {\r\n super();\r\n this.ObjectId = _ObjectId;\r\n }\r\n\r\n @AutoRecord ObjectId: ObjectId<Board | HardwareCompositeEntity>;\r\n /**\r\n * 定位\r\n */\r\n async Positioning()\r\n {\r\n this.SpaceCS = undefined;\r\n this.SpaceSize = undefined;\r\n\r\n if (this.ObjectId && !this.ObjectId.IsErase)\r\n {\r\n let ent = this.ObjectId.Object;\r\n\r\n this.SpaceCS = ent.SpaceOCS;\r\n let box = ent.GetBoundingBoxInMtx(ent.SpaceOCSInv);\r\n this.SpaceSize = box.getSize(new Vector3);\r\n\r\n let baseP = box.min.applyMatrix4(this.SpaceCS);\r\n this.SpaceCS.setPosition(baseP);\r\n }\r\n }\r\n\r\n //#region File\r\n ReadFile(file: CADFiler): void\r\n {\r\n let ver = file.Read();\r\n this.ObjectId = file.ReadObjectId() as any;\r\n }\r\n\r\n WriteFile(file: CADFiler): void\r\n {\r\n file.Write(1);\r\n file.WriteObjectId(this.ObjectId);\r\n }\r\n //#endregion\r\n\r\n}\r\n","import { ExtrudeHole } from \"../../DatabaseServices/3DSolid/ExtrudeHole\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Entity } from \"../../DatabaseServices/Entity/Entity\";\r\nimport { ExtrudeSolid } from \"../../DatabaseServices/Entity/Extrude\";\r\nimport { HardwareCompositeEntity } from \"../../DatabaseServices/Hardware/HardwareCompositeEntity\";\r\nimport { ObjectId } from \"../../DatabaseServices/ObjectId\";\r\n\r\n/**\r\n * 缺口(柱子、梁)柜内空间绘制层立板自动按缺口尺寸绘制出异形板件0\r\n * 切割凸出部分\r\n *\r\n * @param {Entity} knifeBrs 切割的刀\r\n * @param {Board[]} brs\r\n */\r\nexport function CuttingProtrudingPart(knifeBrs: Set<ObjectId>, brs: Board[]): Board[]\r\n{\r\n // 获取包围框里的实体\r\n let intersectsEnt: Entity[] = [];\r\n for (let entId of knifeBrs)\r\n {\r\n let ent = entId?.Object as Entity;\r\n if (ent && !ent.IsErase)\r\n intersectsEnt.push(ent);\r\n }\r\n\r\n // 获取包围框里的实体与需要绘制实体碰撞的实体\r\n let brKfs = intersectsEnt.filter((ent) => ent instanceof Board) as Board[];\r\n // 处理碰撞的复合实体\r\n let hardwareEnt = intersectsEnt.filter((ent) => ent instanceof HardwareCompositeEntity) as HardwareCompositeEntity[];\r\n let hardwareKfs: ExtrudeSolid[] = [];\r\n for (let h of hardwareEnt)\r\n {\r\n let ens = h.GetAllEntity(true, e => e instanceof ExtrudeSolid || e instanceof ExtrudeHole) as (ExtrudeSolid | ExtrudeHole)[];\r\n for (let e of ens)\r\n {\r\n if (e instanceof ExtrudeHole)\r\n hardwareKfs.push(e.Convert2ExtrudeSolid());\r\n\r\n else\r\n hardwareKfs.push(e);\r\n }\r\n }\r\n\r\n let newBrs: Board[] = [];\r\n //直接切掉\r\n for (let br of brs)\r\n {\r\n let splitBrs: Board[] = [];\r\n br.Subtract([...hardwareKfs, ...brKfs], splitBrs);\r\n splitBrs.push(br);\r\n splitBrs.sort((b1, b2) => b2.Volume - b1.Volume);\r\n //切割后留下大块的\r\n newBrs.push(splitBrs[0]);\r\n }\r\n\r\n return newBrs;\r\n}\r\n","import { ExtendsBoardThickness } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { CuttingProtrudingPart } from \"../../../Add-on/DrawBoard/CuttingProtrudingPart\";\r\nimport { EBoardKeyList } from \"../../../Common/BoardKeyList\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BoardProcessOption } from \"../../../UI/Store/OptionInterface/BoardProcessOption\";\r\nimport { BoardConfigOption, IGrooveOption } from \"../../../UI/Store/OptionInterface/IOptionInterface\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n/**\r\n * 板件模板的基类.(层板,立板,背板)\r\n */\r\n@Factory\r\nexport class TemplateBoardRecord extends TemplateRecord\r\n{\r\n //板件初始化的时候需要设置周围板件的数据,通常只有一次\r\n UseBoardProcessOption = false;\r\n BoardProcessOption: BoardProcessOption;\r\n\r\n @AutoRecord DrawBoardCount = 1;\r\n\r\n //空间分析缺口切割需要的板件\r\n protected IntersectSpaceEntitys: Set<ObjectId>;\r\n //空间分析缺口切割需要原板件排钻信息\r\n protected IntersectHighDrill: string[];\r\n\r\n protected _option: BoardConfigOption;\r\n // InitBaseParams()\r\n // {\r\n // super.InitBaseParams();\r\n // return this;\r\n // }\r\n get Option()\r\n {\r\n return Object.assign({}, this._option);\r\n }\r\n set Option(option: BoardConfigOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this._option, option);\r\n ExtendsBoardThickness(this, option.thickness);\r\n }\r\n\r\n set GrooveOption(option: IGrooveOption) { }\r\n\r\n protected async GeneralBoardList(space: ISpaceParse): Promise<Board[]>\r\n {\r\n return [];\r\n }\r\n\r\n Purge()\r\n {\r\n super.Purge();\r\n if (this.Objects.length === 0)\r\n this.IsClear = true;\r\n }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n if (this.IsClear) return;\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number;\r\n if (thickness)\r\n {\r\n this._option.thickness = thickness;\r\n }\r\n let nbrs = await this.GeneralBoardList(this.SpaceParse);\r\n\r\n let sbrs = this.PositioningSupportBoards;\r\n\r\n if (this.BoardProcessOption)\r\n {\r\n for (let br of nbrs)\r\n br.BoardProcessOption = this.BoardProcessOption;\r\n this.BoardProcessOption = undefined;\r\n }\r\n if (this.UseBoardProcessOption && sbrs.length > 0)\r\n {\r\n let cname = sbrs[0].BoardProcessOption[EBoardKeyList.CabinetName];\r\n let rname = sbrs[0].BoardProcessOption[EBoardKeyList.RoomName];\r\n for (let br of nbrs)\r\n {\r\n br.BoardProcessOption[EBoardKeyList.CabinetName] = cname;\r\n br.BoardProcessOption[EBoardKeyList.RoomName] = rname;\r\n br.BoardProcessOption[EBoardKeyList.Mat] = sbrs[0].BoardProcessOption[EBoardKeyList.Mat];\r\n br.BoardProcessOption[EBoardKeyList.BrMat] = sbrs[0].BoardProcessOption[EBoardKeyList.BrMat];\r\n br.BoardProcessOption[EBoardKeyList.Color] = sbrs[0].BoardProcessOption[EBoardKeyList.Color];\r\n }\r\n\r\n this.UseBoardProcessOption = false;\r\n }\r\n\r\n //记录按缺口切割前的板轮廓\r\n const OldContour = nbrs[0]?.ContourCurve?.Clone();\r\n //是否是被缺口切割\r\n const IsIntersectSpaceEntitys = !!this.IntersectSpaceEntitys?.size;\r\n\r\n if (IsIntersectSpaceEntitys && nbrs?.length)\r\n {\r\n if (!this.IntersectHighDrill?.length)\r\n this.IntersectHighDrill = nbrs[0].BoardProcessOption.highDrill;\r\n nbrs = CuttingProtrudingPart(this.IntersectSpaceEntitys, nbrs);\r\n }\r\n\r\n //继承refBr的BoardProcessOption/IsChaiDan/RelevanceMeats属性\r\n let refBr: Board;\r\n //记录生成的异型缺口板高级排钻列表\r\n const HighDrill: string[] = [];\r\n\r\n if (this.Objects.length > 0)\r\n refBr = this.Objects[0].Object as Board;\r\n\r\n for (let i = nbrs.length; i < this.Objects.length; i++)\r\n this.Objects[i].Object.Erase();\r\n\r\n for (let i = 0; i < nbrs.length; i++)\r\n {\r\n let br: Board;\r\n\r\n if (i < this.Objects.length)\r\n {\r\n br = this.Objects[i].Object as Board;\r\n if (i >= this.DrawBoardCount)\r\n br.Erase(false);\r\n\r\n //缺口切割旧板 使用切割后的的轮廓信息\r\n if (IsIntersectSpaceEntitys)\r\n br.ContourCurve = nbrs[i].ContourCurve.Clone();\r\n\r\n br.Position = nbrs[i].Position;\r\n br.Width = nbrs[i].Width;\r\n br.Height = nbrs[i].Height;\r\n br.Thickness = nbrs[i].Thickness;\r\n\r\n // br.KnifeRadius = nbrs[i].KnifeRadius;\r\n // br.GroovesAddDepth = nbrs[i].GroovesAddDepth;\r\n // br.GroovesAddLength = nbrs[i].GroovesAddLength;\r\n // br.GroovesAddWidth = nbrs[i].GroovesAddWidth;\r\n }\r\n else\r\n {\r\n br = nbrs[i];\r\n\r\n if (refBr)\r\n {\r\n //新生成的缺口切割板 不使用原有的轮廓信息\r\n if (!IsIntersectSpaceEntitys)\r\n br.ContourCurve = refBr.ContourCurve.Clone();\r\n\r\n br.BoardProcessOption = refBr.BoardProcessOption;\r\n br.IsChaiDan = refBr.IsChaiDan;\r\n br.RelevanceMeats = refBr.RelevanceMeats;\r\n }\r\n\r\n this._db.ModelSpace.Append(br);\r\n this.Objects.push(br.Id);\r\n\r\n //新创建的板 关联切割\r\n for (let meat of br.RelevanceMeats)\r\n {\r\n let meatBr = meat.Object as Board;\r\n if (!meatBr.RelevanceKnifs.includes(br.objectId))\r\n meatBr.RelevanceKnifs.push(br.objectId);\r\n }\r\n }\r\n\r\n //缺口生成的异型板 分析排钻\r\n if (IsIntersectSpaceEntitys && !br.IsRect)\r\n {\r\n if (!HighDrill.length)\r\n {\r\n let indexMap: number[] = [];\r\n let newContour = br.ContourCurve;\r\n for (let i = 0; i < newContour.EndParam; i++)\r\n {\r\n let p = newContour.GetPointAtParam(i + 0.5);\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 for (let index of indexMap)\r\n HighDrill.push(this.IntersectHighDrill[index]);\r\n }\r\n\r\n br.BoardProcessOption.highDrill = HighDrill;\r\n }\r\n }\r\n\r\n this.DrawBoardCount = nbrs.length;\r\n\r\n //保持SpaceCS\r\n for (let id of this.Objects)\r\n {\r\n if (id && !id.IsErase)\r\n (id.Object as Entity).SpaceOCS = this._CacheSpaceCS;\r\n }\r\n }\r\n\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.DrawBoardCount = file.Read();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.Write(this.DrawBoardCount);\r\n }\r\n}\r\n","import { BuildBehindBoards } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DefaultBehindBoardConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { BehindBoardOption, IGrooveOption } from \"../../../UI/Store/OptionInterface/IOptionInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { TemplateBoardRecord } from \"./TemplateBoard\";\r\n\r\n/**\r\n * 背板模板\r\n */\r\n@Factory\r\nexport class TemplateBehindBoard extends TemplateBoardRecord\r\n{\r\n protected _option: BehindBoardOption = { ...DefaultBehindBoardConfig };\r\n private grooveoption: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n };\r\n constructor()\r\n {\r\n super();\r\n this.name = \"背板(自动)\";\r\n }\r\n set Grooveoption(option: IGrooveOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.grooveoption, option);\r\n }\r\n get Option()\r\n {\r\n const thickness = this.GetParam(\"BH\")?.value as number;\r\n if (thickness)\r\n this._option.exprThickness = thickness.toString();\r\n\r\n this._option.exprCount = this._option.count.toString();\r\n\r\n return Object.assign({}, this._option);\r\n }\r\n set Option(option: BehindBoardOption)\r\n {\r\n super.Option = option;\r\n\r\n const exprThickness = option.exprThickness;\r\n if (exprThickness)\r\n {\r\n const BHParam = this.GetParam(\"BH\");\r\n if (BHParam)\r\n BHParam.expr = exprThickness;\r\n }\r\n }\r\n\r\n async GeneralBoardList(space: ISpaceParse)\r\n {\r\n const BHParam = this.GetParam(\"BH\");\r\n let expr = BHParam?.expr;\r\n\r\n if (expr)\r\n {\r\n if (typeof expr === \"string\")\r\n {\r\n if (expr.startsWith(\"_\") || expr.startsWith(\"$\"))\r\n this._option.exprThickness = this._option.thickness.toString();\r\n else\r\n this._option.exprThickness = expr;\r\n }\r\n else\r\n this._option.exprThickness = expr.toString();\r\n }\r\n else\r\n this._option.exprThickness = this._option.thickness.toString();\r\n\r\n return await BuildBehindBoards(this._option, space, this.grooveoption);\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._option.type = file.Read();\r\n this._option.name = file.Read();\r\n this._option.leftExt = file.Read();\r\n this._option.rightExt = file.Read();\r\n this._option.topExt = file.Read();\r\n this._option.bottomExt = file.Read();\r\n this._option.thickness = file.Read();\r\n this._option.boardPosition = file.Read();\r\n this._option.calcHeight = file.Read();\r\n this._option.moveDist = file.Read();\r\n this._option.boardRelative = file.Read();\r\n this._option.spaceSize = file.Read();\r\n this._option.count = file.Read();\r\n\r\n this.grooveoption.grooveAddLength = file.Read();\r\n this.grooveoption.grooveAddWidth = file.Read();\r\n this.grooveoption.grooveAddDepth = file.Read();\r\n this.grooveoption.knifeRadius = file.Read();\r\n\r\n if (ver === 1)\r\n {\r\n this._option.calcSpaceSize = this._option.spaceSize.toString();\r\n this._option.calcMoveDist = this._option.moveDist.toString();\r\n }\r\n\r\n if (ver >= 2)\r\n {\r\n this._option.calcSpaceSize = file.Read();\r\n this._option.calcMoveDist = file.Read();\r\n }\r\n\r\n this._option.exprCount = this._option.count.toString();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(2);\r\n super.WriteFile(file);\r\n file.Write(this._option.type);\r\n file.Write(this._option.name);\r\n file.Write(this._option.leftExt);\r\n file.Write(this._option.rightExt);\r\n file.Write(this._option.topExt);\r\n file.Write(this._option.bottomExt);\r\n file.Write(this._option.thickness);\r\n file.Write(this._option.boardPosition);\r\n file.Write(this._option.calcHeight);\r\n file.Write(this._option.moveDist);\r\n file.Write(this._option.boardRelative);\r\n file.Write(this._option.spaceSize);\r\n file.Write(this._option.count);\r\n\r\n file.Write(this.grooveoption.grooveAddLength);\r\n file.Write(this.grooveoption.grooveAddWidth);\r\n file.Write(this.grooveoption.grooveAddDepth);\r\n file.Write(this.grooveoption.knifeRadius);\r\n\r\n file.Write(this._option.calcSpaceSize);\r\n file.Write(this._option.calcMoveDist);\r\n\r\n }\r\n}\r\n","import { Matrix4, Vector3 } from \"three\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { EntityRef } from \"../../Entity/EntityRef\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n/**\r\n * 来用包裹EntityRef 使他们自动成为一个模块\r\n */\r\n@Factory\r\nexport class TemplateEntityRef extends TemplateRecord\r\n{\r\n\r\n InitBaseParams(): this\r\n {\r\n super.InitBaseParams();\r\n\r\n if (this.Objects[0]?.Object)\r\n {\r\n let ent = this.Objects[0]?.Object as EntityRef;\r\n let size = ent.CurSize;\r\n this.LParam.value = size.x;\r\n this.WParam.value = size.y;\r\n this.HParam.value = size.z;\r\n\r\n let scs = ent.OCS;\r\n let p = ent.BoundingBoxInOCS.min.applyMatrix4(scs);\r\n scs.setPosition(p);\r\n\r\n ent.SpaceOCS = scs;\r\n }\r\n return this;\r\n }\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n if (this.Objects[0]?.Object)\r\n {\r\n let ent = this.Objects[0]?.Object as EntityRef;\r\n\r\n let scs = ent.SpaceOCS;\r\n\r\n let scaleSize = new Vector3(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n ent.ScaleSize = scaleSize;\r\n\r\n //变换到实际的位置\r\n let box = ent.BoundingBoxInOCS;\r\n let mtx1 = ent.OCSInv;\r\n let mtx2 = new Matrix4().setPosition(box.min.negate());\r\n let mtx3 = this._CacheSpaceCS;\r\n\r\n mtx1.premultiply(mtx2).premultiply(mtx3);\r\n\r\n ent.ApplyMatrix(mtx1);\r\n\r\n ent.SpaceOCS = scs;\r\n }\r\n }\r\n\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n let ver = 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 }\r\n\r\n}\r\n","import { BufferGeometry, Object3D, Points, PointsMaterial } from 'three';\r\nimport { DisposeThreeObj } from '../Common/Dispose';\r\nimport { GetEntity, IsEntity } from '../Common/Utils';\r\nimport { BufferGeometryUtils } from '../Geometry/BufferGeometryUtils';\r\n\r\nexport class GripScene extends Object3D\r\n{\r\n\r\n _GripMaterial: PointsMaterial;\r\n\r\n _GripMap = new Map<Object3D, Points>();\r\n constructor()\r\n {\r\n super();\r\n this._GripMaterial = new PointsMaterial({\r\n size: 15,\r\n color: 0x001dfa,\r\n sizeAttenuation: false\r\n });\r\n }\r\n //增加\r\n Append(obj: Object3D)\r\n {\r\n if (this._GripMap.has(obj))\r\n return;\r\n\r\n if (IsEntity(obj))\r\n {\r\n let en = GetEntity(obj);\r\n let pts = en.GetGripPoints();\r\n if (pts.length > 1000) return;//显示太多的夹点会导致性能过低\r\n let geo = BufferGeometryUtils.CreateFromPts(pts);\r\n let ptsObj = new Points(geo, this._GripMaterial);\r\n ptsObj.userData.Entity = en;\r\n this.add(ptsObj);\r\n this._GripMap.set(obj, ptsObj);\r\n }\r\n }\r\n Remove(obj: Object3D)\r\n {\r\n let pts = this._GripMap.get(obj);\r\n if (pts)\r\n {\r\n DisposeThreeObj(pts);\r\n this.remove(pts);\r\n this._GripMap.delete(obj);\r\n }\r\n }\r\n\r\n //删除所有.\r\n Clear()\r\n {\r\n for (let [, pts] of this._GripMap)\r\n {\r\n this.remove(pts);\r\n pts.geometry.dispose();\r\n }\r\n this._GripMap.clear();\r\n }\r\n Update(entity: Object3D)\r\n {\r\n this.Remove(entity);\r\n this.Append(entity);\r\n }\r\n UpdateAll()\r\n {\r\n for (let [obj, ptsObj] of this._GripMap)\r\n {\r\n if (obj.parent && obj.visible)\r\n {\r\n let en = GetEntity(obj);\r\n let geo = ptsObj.geometry as BufferGeometry;\r\n let pts = en.GetGripPoints();\r\n if (!BufferGeometryUtils.UpdatePts(geo, pts))\r\n {\r\n geo.dispose();\r\n ptsObj.geometry = BufferGeometryUtils.CreateFromPts(pts);\r\n }\r\n }\r\n else\r\n {\r\n this.Remove(obj);\r\n }\r\n }\r\n }\r\n}\r\n","import { Object3D } from \"three\";\r\nimport { GetEntity, IsFreeze } from \"../Common/Utils\";\r\nimport { Entity } from \"../DatabaseServices/Entity/Entity\";\r\nimport { GripScene } from \"../GraphicsSystem/GripScene\";\r\n\r\nexport interface Filter\r\n{\r\n //需要过滤的图元类型,如[Line,Arc]].\r\n filterTypes?: any[];\r\n filterFunction?: (obj: Object3D, ent?: Entity) => boolean;\r\n /**\r\n * 过滤掉已经被删除的图元或者未加入到数据库的图元\r\n */\r\n filterErase?: boolean;\r\n selectFreeze?: boolean;//选择被冻结的图元\r\n}\r\n\r\nexport function CheckFilter(obj: Object3D, filter?: Filter)\r\n{\r\n if (!obj.visible || obj instanceof GripScene || IsFreeze(obj))\r\n return false;\r\n\r\n let ent = GetEntity(obj);\r\n // if (!ent) return false; (禁止这个代码(gizmo依赖这个)\r\n\r\n if (ent?.Freeze && !filter?.selectFreeze)\r\n return false;\r\n\r\n if (!filter)\r\n return true;\r\n\r\n if (filter.filterErase && (!ent || ent.Id === undefined || ent.IsErase))\r\n return false;\r\n\r\n if (filter.filterFunction && !filter.filterFunction(obj, ent))\r\n return false;\r\n if (filter.filterTypes && filter.filterTypes.some(T => ent instanceof T) !== true)\r\n return false;\r\n return true;\r\n}\r\n","import { Box2, Matrix4, Object3D, OrthographicCamera, PerspectiveCamera, Vector2, Vector3 } from 'three';\r\nimport { BoxCheckIntersect } from '../Geometry/CheckIntersect';\r\nimport { IViewer } from '../GraphicsSystem/IView';\r\nimport { SelectSetBase } from './SelectBase';\r\n\r\n//https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2015/ENU/AutoCAD-AutoLISP/files/GUID-0F37CC5E-1559-4011-B8CF-A3BA0973B2C3-htm.html\r\nexport enum SelectType\r\n{\r\n None = 0,\r\n C = 1,//Crossing selection.\r\n W = 2 //Window selection.\r\n}\r\n\r\n/**\r\n * 矩形选区\r\n * 如果图形无法选择,那么注意该图形是否调用计算图形的包围球.\r\n */\r\nexport class SelectBox extends SelectSetBase\r\n{\r\n\r\n private _SelectBox: Box2 = new Box2();\r\n private _BoxCheck: BoxCheckIntersect;\r\n _SelectType: SelectType;\r\n\r\n constructor(view: IViewer, p1: Vector2, p2: Vector2, selectType?: SelectType)\r\n {\r\n super(view);\r\n this._SelectBox.setFromPoints([p1, p2]);\r\n // this._SelectBox.max.add(new Vector2(1, 1)); //避免盒子为空 (这个代码导致了框选不精确)\r\n this._BoxCheck = new BoxCheckIntersect(this._SelectBox);\r\n this._SelectType = selectType;\r\n\r\n let camera = this._Viewer.Camera;\r\n if (camera instanceof OrthographicCamera || camera instanceof PerspectiveCamera)\r\n {\r\n let size = this._SelectBox.getSize(new Vector2());\r\n\r\n camera.setViewOffset(view.Width, view.Height, this._SelectBox.min.x, this._SelectBox.min.y, size.x, size.y);\r\n camera.updateProjectionMatrix();\r\n\r\n let _projScreenMatrix = new Matrix4();\r\n _projScreenMatrix.multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse);\r\n\r\n this._Frustum.setFromProjectionMatrix(_projScreenMatrix);\r\n\r\n camera.clearViewOffset();\r\n }\r\n }\r\n\r\n get SelectBox()\r\n {\r\n return this._SelectBox;\r\n }\r\n\r\n //重载\r\n CheckSelectTraverse(obj: Object3D): boolean\r\n {\r\n if (!obj.visible) return false;\r\n\r\n if (this._SelectType === SelectType.C)\r\n {\r\n let isSelect = false;\r\n const traverse = (o: Object3D) =>\r\n {\r\n if (!o.visible) return;\r\n\r\n isSelect = this.CheckSelectC(o);\r\n if (isSelect) return;\r\n for (let c of o.children)\r\n {\r\n traverse(c);\r\n if (isSelect) return;\r\n }\r\n };\r\n\r\n traverse(obj);\r\n\r\n return isSelect;\r\n }\r\n else\r\n {\r\n //对于窗选,需要所有的实体都被包含才能被选中,所以这里区分了三个状态,0,-1,1,必须要有1,并且没有-1才行\r\n let isSelect = 0;//0表示没有被选中 1表示有被选中 -1表示选不重 某些东西没有几何体,返回0\r\n const traverse = (o: Object3D) =>\r\n {\r\n if (!o.visible) return;\r\n\r\n let isSelectObject = this.CheckSelectW(o);\r\n if (isSelectObject === 1)\r\n isSelect = isSelectObject;\r\n else if (isSelectObject === -1)\r\n {\r\n isSelect = isSelectObject;\r\n return;\r\n }\r\n\r\n for (let c of o.children)\r\n {\r\n traverse(c);\r\n if (isSelect === -1) return;\r\n }\r\n };\r\n\r\n traverse(obj);\r\n\r\n return isSelect === 1;\r\n }\r\n }\r\n\r\n private CheckSelectC(obj: Object3D): boolean\r\n {\r\n //@ts-ignore\r\n if (!obj.geometry || !this.FrustomIntersectObject(obj))\r\n return false;\r\n\r\n return this.IntersectObject(obj);\r\n }\r\n\r\n private CheckSelectW(obj: Object3D): 0 | -1 | 1\r\n {\r\n //@ts-ignore\r\n if (!obj.geometry || !this.FrustomIntersectObject(obj))\r\n return 0;\r\n\r\n return this.ContainerObject(obj);\r\n }\r\n\r\n //重载\r\n IntersectLine(p1Screen: Vector3, p2Screen: Vector3): boolean\r\n {\r\n return this._BoxCheck.IsIntersectLine(p1Screen, p2Screen);\r\n }\r\n /**\r\n * 包含该对象. 采用所有点都在选区内的做法\r\n */\r\n ContainerObject(obj: Object3D): 1 | -1\r\n {\r\n let { pts, } = this.GetObjectVertices(obj);\r\n if (pts.length === 0)\r\n return -1;\r\n for (let p of pts)\r\n {\r\n if (!this.ContainsPoint(p))\r\n return -1;\r\n }\r\n return 1;\r\n }\r\n //选择框包含该顶点\r\n ContainsPoint(ptWcs: Vector3): boolean\r\n {\r\n return this._Frustum.containsPoint(ptWcs);\r\n }\r\n}\r\n","import { Intersection, Object3D, OrthographicCamera, Raycaster, Vector2, Vector3 } from 'three';\r\nimport { HostApplicationServices } from '../ApplicationServices/HostApplicationServices';\r\nimport { equaln } from '../Geometry/GeUtils';\r\nimport { IViewer } from '../GraphicsSystem/IView';\r\nimport { SelectBox, SelectType } from './SelectBox';\r\nimport { CheckFilter, Filter } from './SelectFilter';\r\n\r\n/**\r\n * 构造射线投射器.\r\n * @param {Vector3} ptVcs 屏幕坐标系的点\r\n */\r\nexport function GenerateRaycaster(ptVcs: Vector3, view: IViewer): Raycaster\r\n{\r\n let raycaster = new Raycaster();\r\n raycaster.setFromCamera({\r\n x: (ptVcs.x / view.Width) * 2 - 1, //-1 到 1 所以 (x-(w/2))/(w/2) =>\r\n y: - (ptVcs.y / view.Height) * 2 + 1 //y轴相反\r\n }, view.Camera);\r\n if (view.Camera instanceof OrthographicCamera)\r\n raycaster.ray.origin.sub(raycaster.ray.direction.clone().multiplyScalar(1e6));\r\n return raycaster;\r\n}\r\n\r\nlet boxSize = new Vector2;\r\nlet pCenter = new Vector2;\r\n\r\n/**\r\n * 根据鼠标位置确定鼠标范围内选中的实体.\r\n * @param {Vector3} ptVcs 鼠标的屏幕点\r\n * @param {IViewer} view 指定视图\r\n * @param {Object3D} [selectObject] 选择的对象. 如果为空则为app.view.scene\r\n * @param {Boolean} selectBoxGetLastestEn 点选曲线和点时是否选取最后创建的 默认true\r\n * @returns {Object3D[]} 返回选择到的对象,注意该返回的对象并不会得到它的子对象.\r\n */\r\nexport function PointPick(ptVcs: Vector3,\r\n view: IViewer,\r\n filter?: Filter,\r\n selectObjects: Object3D[] = view.Scene.children,\r\n selectSize = 10\r\n): Object3D[]\r\n{\r\n let raycaster = GenerateRaycaster(ptVcs, view);\r\n\r\n let intersection = Raycast(raycaster, selectObjects, filter);\r\n if (intersection && intersection.object)\r\n return [intersection.object];\r\n\r\n pCenter.set(ptVcs.x, ptVcs.y);\r\n boxSize.set(selectSize, selectSize);\r\n let minPt = pCenter.clone().sub(boxSize);\r\n let maxPt = pCenter.clone().add(boxSize);\r\n\r\n let selectBox = new SelectBox(view, minPt, maxPt, SelectType.C);\r\n selectBox.Select(selectObjects, filter);\r\n\r\n return [...selectBox._SelectList];\r\n}\r\n\r\nexport function PointPickOneObject(\r\n ptVcs: Vector3,\r\n view: IViewer,\r\n filter?: Filter,\r\n selectObjects: Object3D[] = view.Scene.children,\r\n useSelectBox = true\r\n): Object3D | undefined\r\n{\r\n let raycaster = GenerateRaycaster(ptVcs, view);\r\n\r\n let intersection = Raycast(raycaster, selectObjects, filter);\r\n if (intersection && intersection.object)\r\n return intersection.object;\r\n\r\n if (!useSelectBox) return;\r\n\r\n let pCenter = new Vector2(ptVcs.x, ptVcs.y);\r\n let selectSize = new Vector2(HostApplicationServices.cursorSize.SquareSize, HostApplicationServices.cursorSize.SquareSize);\r\n let minPt = pCenter.clone().sub(selectSize);\r\n let maxPt = pCenter.clone().add(selectSize);\r\n\r\n let selectBox = new SelectBox(view, minPt, maxPt, SelectType.C);\r\n selectBox.Select(selectObjects, filter);\r\n\r\n if (selectBox.SelectEntityList.length > 0)\r\n {\r\n let maxId = -Infinity;\r\n let object: Object3D;\r\n for (let o of selectBox._SelectList)\r\n {\r\n if (o.id > maxId)\r\n {\r\n maxId = o.id;\r\n object = o;\r\n }\r\n }\r\n return object;\r\n }\r\n}\r\n\r\nexport function Raycast(ray: Raycaster, objectCol: Object3D[], filter?: Filter): Intersection | undefined\r\n{\r\n let pick: Intersection;\r\n\r\n for (let obj of objectCol)\r\n {\r\n if (!CheckFilter(obj, filter))\r\n continue;\r\n\r\n let intersects: Intersection[] = [];\r\n obj.traverse(o =>\r\n {\r\n //@ts-ignore\r\n if (intersects.length === 0 && o.visible && !o.isLine && !o.isPoints)\r\n o.raycast(ray, intersects);\r\n });\r\n if (intersects.length > 0)\r\n {\r\n for (let i of intersects)\r\n {\r\n if (!pick\r\n || pick.distance > i.distance\r\n || (equaln(pick.distance, i.distance) && pick.object.id < i.object.id))\r\n {\r\n pick = i;\r\n pick.object = obj;\r\n }\r\n }\r\n }\r\n }\r\n return pick;\r\n}\r\n","import { Box2, Box3, Intersection, Matrix4, Object3D, Raycaster, Vector2, Vector3 } from \"three\";\r\nimport { GetEntity } from \"../../Common/Utils\";\r\nimport { CylinderHole, GangDrillType } from \"../../DatabaseServices/3DSolid/CylinderHole\";\r\nimport { Contour } from \"../../DatabaseServices/Contour\";\r\nimport { Board } from \"../../DatabaseServices/Entity/Board\";\r\nimport { Polyline } from \"../../DatabaseServices/Entity/Polyline\";\r\nimport { ObjectId } from \"../../DatabaseServices/ObjectId\";\r\nimport { Shape } from \"../../DatabaseServices/Shape\";\r\nimport { Raycast } from \"../../Editor/PointPick\";\r\nimport { BoardFaceType, BoardGetFace } from \"../../Geometry/DrillParse/BoardGetFace\";\r\nimport { Face } from \"../../Geometry/DrillParse/Face\";\r\nimport { AsVector2, MoveMatrix, angleTo, equaln, equalv3, isParallelTo } from \"../../Geometry/GeUtils\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { INailRule, IShinkOption, LayerNailOption } from \"../../UI/Store/OptionInterface/IOptionInterface\";\r\n\r\nclass ActivityLayerBoardTool\r\n{\r\n NailRules: INailRule[];\r\n\r\n /**\r\n * 求面与板的交点 得到板和交点\r\n * @param face 层板的侧面\r\n * @param objects 其他板\r\n * @param br 层板\r\n * @returns 交点信息(点 实体)\r\n */\r\n private GetBoardIntersection(face: Face, objects: Object3D[], br: Board)\r\n {\r\n for (let s of [0.5, 0.1, 0.9])\r\n {\r\n let center = new Vector3(face.Length * s, face.Width * s).applyMatrix4(face.OCS).add(face.Normal.negate());\r\n\r\n let intersection = this.RayPoint(center, face.Normal, objects);\r\n if (intersection && intersection.object)\r\n {\r\n let en = GetEntity(intersection.object) as Board;\r\n if (en.BoardProcessOption.roomName === br.BoardProcessOption.roomName && en.BoardProcessOption.cabinetName === br.BoardProcessOption.cabinetName)\r\n return intersection;\r\n }\r\n }\r\n }\r\n private IntersectFace(otherBoard: Board, face: Face)\r\n {\r\n let size: Vector3 | Vector2 = new Vector3();\r\n let min = new Vector3();\r\n let diffMat = face.OCSInv.multiply(otherBoard.OCS);\r\n\r\n if (otherBoard.IsSpecialShape)\r\n {\r\n let rect = new Polyline().RectangleFrom2Pt(new Vector3(), new Vector3(face.Length, face.Width));\r\n let con = otherBoard.ContourCurve.Clone().ApplyMatrix(diffMat);\r\n con.Z0();\r\n let shape1 = new Shape(Contour.CreateContour([rect]));\r\n let shape2 = new Shape(Contour.CreateContour([con]));\r\n\r\n let shapes = shape1.IntersectionBoolOperation(shape2);\r\n if (shapes.length > 0)\r\n {\r\n let box = shapes[0].BoundingBox;\r\n min.copy(box.min);\r\n size = box.getSize(new Vector3);\r\n }\r\n }\r\n else\r\n {\r\n let b1 = new Box3(new Vector3(), new Vector3(otherBoard.Width, otherBoard.Height));\r\n b1.applyMatrix4(diffMat);\r\n\r\n let box = new Box2().setFromPoints([AsVector2(b1.min), AsVector2(b1.max)]);\r\n let box2 = new Box2(new Vector2(), new Vector2(face.Length, face.Width));\r\n\r\n box2.intersect(box);\r\n\r\n size = box2.getSize(new Vector2);\r\n min.set(box2.min.x, box2.min.y, 0);\r\n }\r\n\r\n face.Length = size.x;\r\n face.Width = size.y;\r\n face.OCS.multiply(MoveMatrix(min));\r\n }\r\n private GetShrinkDist(face: Face, br: Board, option: IShinkOption)\r\n {\r\n let fNoarmal = face.Normal;\r\n let xVec = new Vector3().setFromMatrixColumn(br.OCS, 0);\r\n let yVec = new Vector3().setFromMatrixColumn(br.OCS, 1);\r\n\r\n let shrink = 0;\r\n if (isParallelTo(fNoarmal, xVec))\r\n {\r\n if (equalv3(fNoarmal, xVec, 1e-5))\r\n shrink = option.back;\r\n else\r\n shrink = option.front;\r\n }\r\n else if (isParallelTo(fNoarmal, yVec))\r\n {\r\n if (equalv3(fNoarmal, yVec, 1e-5))\r\n shrink = option.left;\r\n else\r\n shrink = option.right;\r\n }\r\n return shrink;\r\n }\r\n private GetShrinkBoardIndexesMap(face: Face, br: Board, shrink: number, indexMap: Map<Vector3, number[]>)\r\n {\r\n if (shrink)\r\n {\r\n const FUZZ = 0.1;\r\n let scaleBox = new Box3().setFromPoints([new Vector3(-FUZZ, -FUZZ, -FUZZ), new Vector3(face.Length + FUZZ, face.Width + FUZZ, FUZZ)]).applyMatrix4(face.OCS);\r\n let pts = br.GetStretchPoints();\r\n let stretchIndexs: number[] = [];\r\n for (let i = 0, length = pts.length; i < length; i++)\r\n {\r\n let p = pts[i];\r\n if (scaleBox.containsPoint(p))\r\n stretchIndexs.push(i);\r\n }\r\n indexMap.set(face.Normal.negate().multiplyScalar(shrink), stretchIndexs);\r\n }\r\n }\r\n private GetRuleCount(width: number, rules: INailRule[])\r\n {\r\n if (this.NailRules)\r\n rules = this.NailRules;\r\n for (let rule of rules)\r\n {\r\n if (width > rule.startDist && width <= rule.endDist + 1e-6)\r\n {\r\n return rule.count;\r\n }\r\n }\r\n return 0;\r\n }\r\n private BuildNails(initNail: CylinderHole, nailOpt: LayerNailOption, face: Face, fYVec: Vector3, nailCount: number)\r\n {\r\n let fXVec = new Vector3().setFromMatrixColumn(face.OCS, 0);\r\n let addCount = nailOpt.addCount;\r\n let dist = nailOpt.dist;\r\n let frontDist = nailOpt.front;\r\n let backDist = nailOpt.behind;\r\n let singleDist: number;\r\n //绘制数量为1时,层板钉在中间位置\r\n if (nailCount === 1)\r\n singleDist = face.Length / 2 - frontDist;\r\n else\r\n singleDist = (face.Length - frontDist - backDist) / (nailCount - 1);\r\n\r\n let buildNails: CylinderHole[] = [];\r\n\r\n //构建层板钉\r\n for (let i = 0; i < nailCount; i++)\r\n {\r\n if (nailCount === 1)\r\n {\r\n initNail.ApplyMatrix(MoveMatrix(fXVec.multiplyScalar(singleDist)));\r\n buildNails.push(initNail);\r\n }\r\n else\r\n {\r\n let nail = initNail.Clone();\r\n nail.ApplyMatrix(MoveMatrix(fXVec.clone().multiplyScalar(i * singleDist)));\r\n buildNails.push(nail);\r\n }\r\n }\r\n\r\n //增加的层板钉\r\n let addNails: CylinderHole[] = [];\r\n for (let i = 1; i <= addCount; i++)\r\n {\r\n for (let nail of buildNails)\r\n {\r\n addNails.push(nail.Clone().ApplyMatrix(MoveMatrix(fYVec.clone().multiplyScalar(dist * i))));\r\n addNails.push(nail.Clone().ApplyMatrix(MoveMatrix(fYVec.clone().negate().multiplyScalar(dist * i))));\r\n }\r\n }\r\n buildNails.push(...addNails);\r\n return buildNails;\r\n }\r\n private RayPoint(p: Vector3, n: Vector3, brs: Object3D[]): Intersection\r\n {\r\n let ray = new Raycaster(p, n);\r\n let intersection = Raycast(ray, brs);\r\n return intersection;\r\n }\r\n Start(brs: Board[], nailOption: LayerNailOption, rules: INailRule[] = [], option?: IShinkOption)\r\n {\r\n if (brs.length === 0) return;\r\n\r\n let objects: Object3D[] = [];\r\n //如果层板和左右板得距离大于这个值,则这边不绘制层板钉\r\n let refDist = nailOption.length - nailOption.depth;\r\n\r\n for (let br of brs[0].Db.ModelSpace.Entitys)\r\n {\r\n if (!br.IsErase && br.Visible && br instanceof Board)\r\n {\r\n objects.push(br.GetDrawObjectFromRenderType(RenderType.Physical));\r\n }\r\n }\r\n for (let br of brs)\r\n {\r\n let faces = BoardGetFace.GetAllSidesFaces(br, true);\r\n let vecIndexMap: Map<Vector3, number[]> = new Map();\r\n let xVec = new Vector3().setFromMatrixColumn(br.OCSNoClone, 0);\r\n if (option?.name)\r\n br.Name = option.name;\r\n\r\n let nailBoardMap = new WeakMap();\r\n let allNails: CylinderHole[] = [];\r\n for (let face of faces)\r\n {\r\n if (face.type === BoardFaceType.Side)\r\n {\r\n let shrink = 0;\r\n if (option)//求内缩值\r\n {\r\n shrink = this.GetShrinkDist(face, br, option);\r\n this.GetShrinkBoardIndexesMap(face, br, shrink, vecIndexMap);\r\n }\r\n\r\n //#region 画层板钉\r\n if (!nailOption.isDraw) continue;\r\n if (!nailOption.isInBack && isParallelTo(face.Normal, xVec)) continue;\r\n\r\n let intersection = this.GetBoardIntersection(face, objects, br);//射线求交 得到板和交点\r\n if (!intersection || (intersection.distance - 1 + shrink >= refDist)) //防止板件悬空 #I1DPHR\r\n continue;\r\n\r\n let otherBoard = GetEntity(intersection.object) as Board;\r\n\r\n if (isParallelTo(otherBoard.Normal, br.Normal))//层板和层板组成层板钉没有意义 #I7CB67\r\n continue;\r\n\r\n this.IntersectFace(otherBoard, face);\r\n\r\n let nail = CylinderHole.CreateCylHole(nailOption.rad, nailOption.length, GangDrillType.Nail);\r\n nail.ColorIndex = 4;\r\n let fNor = face.Normal;\r\n let ang = -angleTo(fNor, otherBoard.Normal.negate());\r\n if (equaln(Math.abs(ang), Math.PI, 1e-3))\r\n ang = 0;\r\n\r\n let xDist = nailOption.front;\r\n let yDist = - nailOption.rad - shrink * Math.sin(ang);\r\n let zDist = 0;\r\n let zRoMat = new Matrix4().makeRotationX(ang);\r\n\r\n let p = new Vector3().setFromMatrixPosition(face.OCS.clone().multiply(zRoMat)).applyMatrix4(otherBoard.OCSInv);\r\n if (p.z < 1e-6)\r\n {\r\n zDist = -p.z;\r\n }\r\n else if (p.z > otherBoard.Thickness - 1e-6)\r\n {\r\n zDist = p.z - otherBoard.Thickness;\r\n }\r\n else\r\n {\r\n console.error(\"不该存在的情况\");\r\n }\r\n\r\n zDist += (- nail.Height + nailOption.depth);\r\n\r\n nail.Position = nail.Position.add(new Vector3(xDist, yDist, zDist));\r\n nail.ApplyMatrix(zRoMat).ApplyMatrix(face.OCS);\r\n\r\n //层板钉数\r\n let nailCount = nailOption.count;\r\n if (option || this.NailRules)\r\n nailCount = this.GetRuleCount(face.Length, rules);\r\n\r\n let yVec = new Vector3().setFromMatrixColumn(otherBoard.OCS, 1);\r\n\r\n let nails = this.BuildNails(nail, nailOption, face, yVec, nailCount);\r\n for (let nail of nails)\r\n nailBoardMap.set(nail, otherBoard);\r\n allNails.push(...nails);\r\n\r\n //#endregion\r\n }\r\n }\r\n this.AppendBoard(br, nailBoardMap, allNails);\r\n for (let [vec, indexes] of vecIndexMap)\r\n {\r\n br.MoveStretchPoints(indexes, vec);\r\n vec = null;\r\n }\r\n }\r\n this.NailRules = null;\r\n }\r\n private AppendBoard(br: Board, brNailMap: WeakMap<CylinderHole, Board>, nails: CylinderHole[])\r\n {\r\n let oldNailIds = br.LayerNails.filter(n => n?.Object);\r\n this.HandleNailList(nails, oldNailIds, brNailMap);\r\n for (let i = nails.length; i < oldNailIds.length; i++)\r\n oldNailIds[i]?.Object?.Erase();\r\n for (let i = 0; i < nails.length; i++)\r\n {\r\n let nId: ObjectId;\r\n let otherBoard = brNailMap.get(nails[i]);\r\n if (i < oldNailIds.length && oldNailIds[i])\r\n {\r\n let nail = oldNailIds[i].Object as CylinderHole;\r\n if (nail.IsErase)\r\n nail.Erase(false);\r\n if (!equalv3(nail.Normal, nails[i].Normal))\r\n nail.OCS = nails[i].OCS;\r\n nail.Radius = nails[i].Radius;\r\n nail.Height = nails[i].Height;\r\n nail.Position = nails[i].Position;\r\n nId = nail.Id;\r\n\r\n if (nail.FId !== otherBoard.Id)\r\n {\r\n nail.FId = otherBoard.Id;\r\n otherBoard.AppendNails([nId]);\r\n }\r\n }\r\n else\r\n {\r\n br.Db.ModelSpace.Append(nails[i]);\r\n nId = nails[i].Id;\r\n br.AppendNails([nId]);\r\n nails[i].MId = br.Id;\r\n nails[i].FId = otherBoard.Id;\r\n otherBoard.AppendNails([nId]);\r\n }\r\n }\r\n }\r\n private HandleNailList(newNails: CylinderHole[], oldNails: ObjectId[], naiMap: WeakMap<CylinderHole, Board>)\r\n {\r\n if (oldNails.length < newNails.length)\r\n {\r\n let temp: CylinderHole[] = [];\r\n for (let i = 0; i < oldNails.length; i++)\r\n {\r\n let nail = oldNails[i].Object as CylinderHole;\r\n if (newNails.length === 0) break;\r\n let j = 0;\r\n for (; j < newNails.length; j++)\r\n {\r\n let newNail = newNails[j] as CylinderHole;\r\n let otherBoard = naiMap.get(newNail);\r\n if (otherBoard.Id === nail.FId)\r\n break;\r\n }\r\n if (j < newNails.length)\r\n temp.push(...newNails.splice(j, 1));\r\n }\r\n newNails.unshift(...temp);\r\n }\r\n else\r\n {\r\n let temp: ObjectId[] = [];\r\n\r\n for (let i = 0; i < newNails.length; i++)\r\n {\r\n let nail = newNails[i];\r\n let otherBoard = naiMap.get(nail);\r\n let j = 0;\r\n for (; j < oldNails.length; j++)\r\n {\r\n let oldNail = oldNails[j].Object as CylinderHole;\r\n if (oldNail.FId === otherBoard.Id)\r\n break;\r\n }\r\n if (j < oldNails.length)\r\n temp.push(...oldNails.splice(j, 1));\r\n else\r\n temp.push(undefined); //不存在可以复用的层板钉,占个位 重新添加\r\n }\r\n oldNails.unshift(...temp);\r\n }\r\n }\r\n}\r\n\r\nexport const activityLayerBoardTool = new ActivityLayerBoardTool();\r\n","import { activityLayerBoardTool } from \"../../../Add-on/DrawBoard/ActivityLayerBoardTool\";\r\nimport { BuildLayerBoards } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DefaultLayerBoardConfig, DefaultNailOption } from \"../../../Editor/DefaultConfig\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { IGrooveOption, LayerBoardOption, LayerNailOption } from \"../../../UI/Store/OptionInterface/IOptionInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateBoardRecord } from \"./TemplateBoard\";\r\n\r\n/**\r\n * 层板模板\r\n */\r\n@Factory\r\nexport class TemplateLayerBoard extends TemplateBoardRecord\r\n{\r\n constructor()\r\n {\r\n super();\r\n this.name = \"层板(自动)\";\r\n }\r\n protected _option: LayerBoardOption = { ...DefaultLayerBoardConfig };\r\n private _nailOption: LayerNailOption = { ...DefaultNailOption };\r\n private grooveOption: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n };\r\n get Option()\r\n {\r\n const thickness = this.GetParam(\"BH\")?.value as number;\r\n if (thickness)\r\n this._option.exprThickness = thickness.toString();\r\n\r\n this._option.exprCount = this._option.count.toString();\r\n\r\n return Object.assign({}, this._option);\r\n }\r\n\r\n set Option(option: LayerBoardOption)\r\n {\r\n super.Option = option;\r\n\r\n const exprThickness = option.exprThickness;\r\n if (exprThickness)\r\n {\r\n const BHParam = this.GetParam(\"BH\");\r\n if (BHParam)\r\n BHParam.expr = exprThickness;\r\n }\r\n }\r\n\r\n //空间分析缺口切割需要的板件\r\n IntersectSpaceEntitys: Set<ObjectId> = new Set();\r\n IntersectHighDrill: string[] = [];\r\n set GrooveOption(option: IGrooveOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.grooveOption, option);\r\n }\r\n get NailOption()\r\n {\r\n return { ...this._nailOption };\r\n }\r\n set NailOption(nailOpt: LayerNailOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n this._nailOption = { ...nailOpt };\r\n }\r\n\r\n async GeneralBoardList(space: ISpaceParse)\r\n {\r\n const BHParam = this.GetParam(\"BH\");\r\n let expr = BHParam?.expr;\r\n\r\n if (expr)\r\n {\r\n if (typeof expr === \"string\")\r\n {\r\n if (expr.startsWith(\"_\") || expr.startsWith(\"$\"))\r\n this._option.exprThickness = this._option.thickness.toString();\r\n else\r\n this._option.exprThickness = expr;\r\n }\r\n else\r\n this._option.exprThickness = expr.toString();\r\n }\r\n else\r\n this._option.exprThickness = this._option.thickness.toString();\r\n\r\n return await BuildLayerBoards(this._option, space, this.grooveOption);\r\n }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n\r\n let brs: Board[] = [];\r\n\r\n for (let id of this.Objects)\r\n {\r\n if (!id.IsErase)\r\n {\r\n let b = id.Object as Board;\r\n brs.push(b);\r\n }\r\n }\r\n if (this._option.isActive)\r\n activityLayerBoardTool.Start(brs, this._nailOption);\r\n else\r\n {\r\n brs.forEach(br =>\r\n {\r\n if (br.LayerNails.length)\r\n br.ClearLayerNails();\r\n });\r\n }\r\n }\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._option.type = file.Read();\r\n this._option.name = file.Read();\r\n this._option.frontShrink = file.Read();\r\n this._option.leftShrink = file.Read();\r\n this._option.rightShrink = file.Read();\r\n this._option.calcHeight = file.Read();\r\n this._option.isTotalLength = file.Read();\r\n this._option.boardRelative = file.Read();\r\n this._option.thickness = file.Read();\r\n this._option.count = file.Read();\r\n this._option.spaceSize = file.Read();\r\n this._option.isActive = file.Read();\r\n\r\n if (ver > 1)\r\n {\r\n this._nailOption.isDraw = file.Read();\r\n this._nailOption.addCount = file.Read();\r\n this._nailOption.dist = file.Read();\r\n this._nailOption.isGroup = file.Read();\r\n this._nailOption.isInBack = file.Read();\r\n this._nailOption.front = file.Read();\r\n this._nailOption.behind = file.Read();\r\n this._nailOption.count = file.Read();\r\n this._nailOption.rad = file.Read();\r\n this._nailOption.length = file.Read();\r\n this._nailOption.depth = file.Read();\r\n }\r\n\r\n if (ver >= 3)\r\n {\r\n this._option.calcSpaceSize = file.Read();\r\n this._option.calcFrontShrink = file.Read();\r\n this._option.calcLeftShrink = file.Read();\r\n this._option.calcRightShrink = file.Read();\r\n }\r\n else\r\n {\r\n this._option.calcSpaceSize = this._option.spaceSize.toString();\r\n this._option.calcFrontShrink = this._option.frontShrink.toString();\r\n this._option.calcLeftShrink = this._option.leftShrink.toString();\r\n this._option.calcRightShrink = this._option.rightShrink.toString();\r\n }\r\n if (ver > 3)\r\n {\r\n this.grooveOption.grooveAddLength = file.Read();\r\n this.grooveOption.grooveAddWidth = file.Read();\r\n this.grooveOption.grooveAddDepth = file.Read();\r\n this.grooveOption.knifeRadius = file.Read();\r\n }\r\n else\r\n {\r\n this.grooveOption.grooveAddLength = this.grooveOption.grooveAddLength.toString();\r\n this.grooveOption.grooveAddWidth = this.grooveOption.grooveAddWidth.toString();\r\n this.grooveOption.grooveAddDepth = this.grooveOption.grooveAddDepth.toString();\r\n this.grooveOption.knifeRadius = this.grooveOption.knifeRadius.toString();\r\n }\r\n\r\n this.IntersectSpaceEntitys.clear();\r\n if (ver > 4)\r\n {\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let entId = file.ReadObjectId();\r\n if (entId)\r\n this.IntersectSpaceEntitys.add(entId);\r\n }\r\n\r\n size = file.Read();\r\n this.IntersectHighDrill = file.ReadArray(size);\r\n }\r\n\r\n this._option.exprCount = this._option.count.toString();\r\n }\r\n\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(5);\r\n super.WriteFile(file);\r\n file.Write(this._option.type);\r\n file.Write(this._option.name);\r\n file.Write(this._option.frontShrink);\r\n file.Write(this._option.leftShrink);\r\n file.Write(this._option.rightShrink);\r\n file.Write(this._option.calcHeight);\r\n file.Write(this._option.isTotalLength);\r\n file.Write(this._option.boardRelative);\r\n file.Write(this._option.thickness);\r\n file.Write(this._option.count);\r\n file.Write(this._option.spaceSize);\r\n file.Write(this._option.isActive);\r\n\r\n //ver2\r\n file.Write(this._nailOption.isDraw);\r\n file.Write(this._nailOption.addCount);\r\n file.Write(this._nailOption.dist);\r\n file.Write(this._nailOption.isGroup);\r\n file.Write(this._nailOption.isInBack);\r\n file.Write(this._nailOption.front);\r\n file.Write(this._nailOption.behind);\r\n file.Write(this._nailOption.count);\r\n file.Write(this._nailOption.rad);\r\n file.Write(this._nailOption.length);\r\n file.Write(this._nailOption.depth);\r\n\r\n file.Write(this._option.calcSpaceSize);\r\n file.Write(this._option.calcFrontShrink);\r\n file.Write(this._option.calcLeftShrink);\r\n file.Write(this._option.calcRightShrink);\r\n\r\n //ver4\r\n file.Write(this.grooveOption.grooveAddLength);\r\n file.Write(this.grooveOption.grooveAddWidth);\r\n file.Write(this.grooveOption.grooveAddDepth);\r\n file.Write(this.grooveOption.knifeRadius);\r\n\r\n //ver5\r\n file.Write(this.IntersectSpaceEntitys.size);\r\n for (let ent of this.IntersectSpaceEntitys)\r\n file.WriteObjectId(ent);\r\n\r\n file.Write(this.IntersectHighDrill.length);\r\n for (let type of this.IntersectHighDrill)\r\n file.Write(type);\r\n }\r\n}\r\n","import { Vector3 } from \"three\";\r\nimport { EntitysUpdateWrap } from \"../../../Common/EntityUpdateWrap\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { TemplateParam } from \"../Param/TemplateParam\";\r\nimport { TemplateParamType } from \"../Param/TemplateParamType\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n/**\r\n * 左右侧板模板\r\n */\r\n@Factory\r\nexport class TemplateLeftRightBoardRecord extends TemplateRecord\r\n{\r\n constructor()\r\n {\r\n super();\r\n this.name = \"左右侧板(自动)\";\r\n }\r\n InitBaseParams()\r\n {\r\n super.InitBaseParams();\r\n let lparam = new TemplateParam();\r\n lparam.name = \"ZS\";\r\n lparam.description = \"左缩\";\r\n lparam.type = TemplateParamType.Float;\r\n lparam.value = 0;\r\n this.Params.push(lparam);\r\n\r\n let rparam = new TemplateParam();\r\n rparam.name = \"YS\";\r\n rparam.description = \"右缩\";\r\n rparam.type = TemplateParamType.Float;\r\n rparam.value = 0;\r\n this.Params.push(rparam);\r\n return this;\r\n }\r\n\r\n protected override UpdateEntitys()\r\n {\r\n let [lId, rId] = this.Objects;\r\n\r\n if (!lId || lId.IsErase || !rId || rId.IsErase) return;\r\n\r\n let lBr = lId.Object as Board;\r\n let rBr = rId.Object as Board;\r\n\r\n let thickness = this.GetParam(\"BH\")?.value as number ?? 18;\r\n let zs = this.GetParam(\"ZS\")?.value as number ?? 0;//左缩\r\n let ys = this.GetParam(\"YS\")?.value as number ?? 0;//右缩\r\n\r\n EntitysUpdateWrap([lBr, rBr], () =>\r\n {\r\n lBr.Thickness = thickness;\r\n rBr.Thickness = thickness;\r\n\r\n if (!this._CacheSpaceSize)\r\n {\r\n console.warn(\"左右侧板模板数据错误无法更新\");\r\n return;\r\n }\r\n\r\n lBr.Height = this._CacheSpaceSize.z;\r\n rBr.Height = this._CacheSpaceSize.z;\r\n\r\n lBr.Width = this._CacheSpaceSize.y - zs;//似乎用拉伸来做比较好,这样能保持住背板对他的拉槽.\r\n rBr.Width = this._CacheSpaceSize.y - ys;\r\n\r\n lBr.Position = new Vector3(0, zs, 0);\r\n rBr.Position = new Vector3(this._CacheSpaceSize.x - rBr.Thickness, ys, 0);\r\n });\r\n }\r\n\r\n ReadFile(file: CADFiler)\r\n {\r\n super.ReadFile(file);\r\n if (this._Version < 3)\r\n {\r\n if (!this.GetParam((\"ZS\")))\r\n {\r\n let lparam = new TemplateParam();\r\n lparam.name = \"ZS\";\r\n lparam.description = \"左缩\";\r\n lparam.type = TemplateParamType.Float;\r\n lparam.value = 0;\r\n this.Params.push(lparam);\r\n\r\n let rparam = new TemplateParam();\r\n rparam.name = \"YS\";\r\n rparam.description = \"右缩\";\r\n rparam.type = TemplateParamType.Float;\r\n rparam.value = 0;\r\n this.Params.push(rparam);\r\n }\r\n }\r\n\r\n }\r\n}\r\n","import { Factory } from \"../../CADFactory\";\r\nimport { Board } from \"../../Entity/Board\";\r\nimport { BoardType } from \"../../Entity/BoardInterface\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n@Factory\r\nexport class TemplateSizeBoard extends TemplateRecord\r\n{\r\n protected async Update()\r\n {\r\n await super.Update();\r\n if (this.Objects.length === 0) return;\r\n\r\n let originBr = this.Objects[0].Object as Board;\r\n\r\n if (!originBr.IsErase)\r\n {\r\n if (originBr.BoardType === BoardType.Layer)\r\n {\r\n originBr.Height = this._CacheSpaceSize.x;\r\n originBr.Width = this._CacheSpaceSize.y;\r\n originBr.Thickness = this._CacheSpaceSize.z;\r\n }\r\n else if (originBr.BoardType === BoardType.Vertical)\r\n {\r\n originBr.Height = this._CacheSpaceSize.z;\r\n originBr.Width = this._CacheSpaceSize.y;\r\n originBr.Thickness = this._CacheSpaceSize.x;\r\n }\r\n else\r\n {\r\n originBr.Height = this._CacheSpaceSize.z;\r\n originBr.Width = this._CacheSpaceSize.x;\r\n originBr.Thickness = this._CacheSpaceSize.y;\r\n }\r\n }\r\n }\r\n}\r\n","import { BuildVerticalBoards } from \"../../../Add-on/DrawBoard/BuildBoardTool\";\r\nimport { DefaultVerticalBoardConfig } from \"../../../Editor/DefaultConfig\";\r\nimport { ISpaceParse } from \"../../../Geometry/SpaceParse/ISpaceParse\";\r\nimport { IGrooveOption, VerticalBoardOption } from \"../../../UI/Store/OptionInterface/IOptionInterface\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { Database } from \"../../Database\";\r\nimport { Entity } from \"../../Entity/Entity\";\r\nimport { ObjectId } from \"../../ObjectId\";\r\nimport { TemplateBoardRecord } from \"./TemplateBoard\";\r\n\r\n/**\r\n * 立板模板\r\n */\r\n@Factory\r\nexport class TemplateVerticalBoard extends TemplateBoardRecord\r\n{\r\n constructor()\r\n {\r\n super();\r\n this.name = \"立板(自动)\";\r\n }\r\n protected _option: VerticalBoardOption = { ...DefaultVerticalBoardConfig };\r\n private grooveOption: IGrooveOption = {\r\n grooveAddLength: \"0\",\r\n grooveAddWidth: \"0\",\r\n grooveAddDepth: \"0\",\r\n knifeRadius: \"3\",\r\n };\r\n set GrooveOption(option: IGrooveOption)\r\n {\r\n this.WriteAllObjectRecord();\r\n Object.assign(this.grooveOption, option);\r\n }\r\n\r\n get Option()\r\n {\r\n const thickness = this.GetParam(\"BH\")?.value as number;\r\n if (thickness)\r\n this._option.exprThickness = thickness.toString();\r\n\r\n this._option.exprCount = this._option.count.toString();\r\n\r\n return Object.assign({}, this._option);\r\n }\r\n set Option(option: VerticalBoardOption)\r\n {\r\n super.Option = option;\r\n\r\n const exprThickness = option.exprThickness;\r\n if (exprThickness)\r\n {\r\n const BHParam = this.GetParam(\"BH\");\r\n if (BHParam)\r\n BHParam.expr = exprThickness;\r\n }\r\n }\r\n\r\n //空间分析缺口切割需要的板件\r\n IntersectSpaceEntitys: Set<ObjectId> = new Set();\r\n IntersectHighDrill: string[] = [];\r\n\r\n async GeneralBoardList(space: ISpaceParse)\r\n {\r\n const BHParam = this.GetParam(\"BH\");\r\n let expr = BHParam?.expr;\r\n\r\n if (expr)\r\n {\r\n if (typeof expr === \"string\")\r\n {\r\n if (expr.startsWith(\"_\") || expr.startsWith(\"$\"))\r\n this._option.exprThickness = this._option.thickness.toString();\r\n else\r\n this._option.exprThickness = expr;\r\n }\r\n else\r\n this._option.exprThickness = expr.toString();\r\n }\r\n else\r\n this._option.exprThickness = this._option.thickness.toString();\r\n\r\n return await BuildVerticalBoards(this._option, space, this.grooveOption);\r\n }\r\n\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this._option.type = file.Read();\r\n this._option.name = file.Read();\r\n this._option.frontShrink = file.Read();\r\n this._option.bottomShrink = file.Read();\r\n this._option.calcWidth = file.Read();\r\n this._option.calcHeight = file.Read();\r\n this._option.isTotalLength = file.Read();\r\n this._option.isTotalWidth = file.Read();\r\n this._option.boardRelative = file.Read();\r\n this._option.thickness = file.Read();\r\n this._option.count = file.Read();\r\n this._option.spaceSize = file.Read();\r\n\r\n if (ver >= 2)\r\n {\r\n this._option.calcSpaceSize = file.Read();\r\n this._option.calcFrontShrink = file.Read();\r\n this._option.calcBottomShrink = file.Read();\r\n }\r\n else\r\n {\r\n this._option.calcSpaceSize = this._option.spaceSize.toString();\r\n this._option.calcFrontShrink = this._option.frontShrink.toString();\r\n this._option.calcBottomShrink = this._option.bottomShrink.toString();\r\n }\r\n if (ver > 2)\r\n {\r\n this.grooveOption.grooveAddLength = file.Read();\r\n this.grooveOption.grooveAddWidth = file.Read();\r\n this.grooveOption.grooveAddDepth = file.Read();\r\n this.grooveOption.knifeRadius = file.Read();\r\n }\r\n else\r\n {\r\n this.grooveOption.grooveAddLength = this.grooveOption.grooveAddLength.toString();\r\n this.grooveOption.grooveAddWidth = this.grooveOption.grooveAddWidth.toString();\r\n this.grooveOption.grooveAddDepth = this.grooveOption.grooveAddDepth.toString();\r\n this.grooveOption.knifeRadius = this.grooveOption.knifeRadius.toString();\r\n }\r\n\r\n this.IntersectSpaceEntitys.clear();\r\n\r\n //版本4弃用ReadObject\r\n if (ver === 4)\r\n {\r\n let size = file.Read();\r\n let bakDb = file.database;\r\n file.database = new Database(false, false, true);\r\n for (let i = 0; i < size; i++)\r\n {\r\n let ent = file.ReadObject() as Entity;\r\n if (ent.objectId)\r\n {\r\n let id = bakDb.GetObjectId(ent.Id.Index, true);\r\n if (id)\r\n this.IntersectSpaceEntitys.add(id);\r\n }\r\n }\r\n file.database = bakDb;\r\n }\r\n\r\n if (ver > 3)\r\n {\r\n let size = file.Read();\r\n this.IntersectHighDrill = file.ReadArray(size);\r\n }\r\n\r\n if (ver > 4)\r\n {\r\n //版本5 采用读取ID\r\n let size = file.Read();\r\n for (let i = 0; i < size; i++)\r\n {\r\n let entId = file.ReadObjectId();\r\n if (entId)\r\n this.IntersectSpaceEntitys.add(entId);\r\n }\r\n }\r\n\r\n this._option.exprCount = this._option.count.toString();\r\n }\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(5);\r\n super.WriteFile(file);\r\n file.Write(this._option.type);\r\n file.Write(this._option.name);\r\n file.Write(this._option.frontShrink);\r\n file.Write(this._option.bottomShrink);\r\n file.Write(this._option.calcWidth);\r\n file.Write(this._option.calcHeight);\r\n file.Write(this._option.isTotalLength);\r\n file.Write(this._option.isTotalWidth);\r\n file.Write(this._option.boardRelative);\r\n file.Write(this._option.thickness);\r\n file.Write(this._option.count);\r\n file.Write(this._option.spaceSize);\r\n\r\n file.Write(this._option.calcSpaceSize);\r\n file.Write(this._option.calcFrontShrink);\r\n file.Write(this._option.calcBottomShrink);\r\n\r\n file.Write(this.grooveOption.grooveAddLength);\r\n file.Write(this.grooveOption.grooveAddWidth);\r\n file.Write(this.grooveOption.grooveAddDepth);\r\n file.Write(this.grooveOption.knifeRadius);\r\n\r\n //ver4\r\n file.Write(this.IntersectHighDrill.length);\r\n for (let type of this.IntersectHighDrill)\r\n file.Write(type);\r\n\r\n //ver5\r\n file.Write(this.IntersectSpaceEntitys.size);\r\n for (let ent of this.IntersectSpaceEntitys)\r\n file.WriteObjectId(ent);\r\n }\r\n}\r\n","import { VisualSpaceBox } from \"../../../Editor/VisualSpaceBox\";\r\nimport { AutoRecord } from \"../../AutoRecord\";\r\nimport { Factory } from \"../../CADFactory\";\r\nimport { CADFiler } from \"../../CADFiler\";\r\nimport { TemplateRecord } from \"../TemplateRecord\";\r\n\r\n@Factory\r\nexport class TemplateVisualSpace extends TemplateRecord\r\n{\r\n @AutoRecord IsVisible = true;\r\n constructor()\r\n {\r\n super();\r\n this.Name = \"可视化模块空间\";\r\n }\r\n\r\n protected async Update()\r\n {\r\n await super.Update();\r\n if (!this.Db) return;//如果没有绘制到DB空间,那么将不会进行更新(否则绘制失败)\r\n //在这里重建虚拟空间,(未来我们可能会避免自动重建)\r\n if (this.Objects.length === 0 || this.Objects[0].Object === undefined)\r\n {\r\n this.Objects.length = 0;\r\n let visualEntity = new VisualSpaceBox(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n visualEntity.ApplyMatrix(this._CacheSpaceCS);\r\n visualEntity.SpaceOCS = this._CacheSpaceCS;\r\n //这里避免使用app.Database,否则插入图纸后,会错误的在app的图纸里面绘制一个空间,导致程序错误.\r\n this.Db.ModelSpace.Append(visualEntity);\r\n this.Objects.push(visualEntity.Id);\r\n }\r\n let visualEntity = this.Objects[0].Object as VisualSpaceBox;\r\n\r\n let depth = this.NodeDepth;\r\n visualEntity.ColorIndex = depth === 0 ? 7 : depth + 1;\r\n\r\n let IsRoot = this.Parent === undefined;\r\n let isVisual = IsRoot || this.Children.length === 0;\r\n\r\n visualEntity.Visible = this.IsVisible && isVisual;\r\n visualEntity.SetSize(this.LParam.value as number, this.WParam.value as number, this.HParam.value as number);\r\n visualEntity.IsRoot = this.Children.length !== 0;\r\n\r\n if (!IsRoot)\r\n {\r\n let root = this.Root;\r\n visualEntity.DisplayLength = this.LParam.value !== root.LParam.value;\r\n visualEntity.DisplayWidth = this.WParam.value !== root.WParam.value;\r\n visualEntity.DisplayHeight = this.HParam.value !== root.HParam.value;\r\n }\r\n }\r\n\r\n //#region -------------------------File-------------------------\r\n\r\n //对象从文件中读取数据,初始化自身\r\n ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super.ReadFile(file);\r\n this.IsVisible = file.Read();\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n file.Write(this.IsVisible);\r\n }\r\n // //局部撤销\r\n // ApplyPartialUndo(undoData: CADObject)\r\n // {\r\n // super.ApplyPartialUndo(undoData);\r\n // }\r\n //#endregion\r\n}\r\n","import { Geometry, Vector3, WebGLRenderer } from \"three\";\r\nimport { CameraUpdate } from \"../../GraphicsSystem/CameraUpdate\";\r\nimport { RenderType } from \"../../GraphicsSystem/RenderType\";\r\nimport { Factory } from \"../CADFactory\";\r\nimport { CADFiler } from \"../CADFiler\";\r\nimport { Entity } from \"../Entity/Entity\";\r\nimport { ObjectId } from \"../ObjectId\";\r\n\r\nconst MaxSize = 2048 * 2;\r\n\r\n/**\r\n * 更新视口实体的时机:\r\n * ->在布局状态下才应该更新,否则则标记为需要更新(或者不需要标记)\r\n * ->在缩放相机时,标记所有的需要更新(异步更新任务)(优先更新可见视口)\r\n * ->切换到布局时,更新全部视口(使用更新任务)\r\n */\r\n\r\n@Factory\r\nexport class ViewportEntity2 extends Entity\r\n{\r\n static Renderer: WebGLRenderer;\r\n OnlyRenderType = true;\r\n\r\n //当前视口的渲染类型\r\n private _RenderType: RenderType = RenderType.Conceptual;\r\n //当前视口绘制的图形列表\r\n private _DisplayEntitys: Set<ObjectId> = new Set();\r\n\r\n private _CameraData = new CameraUpdate;\r\n constructor(\r\n private _Width: number = 1,\r\n private _Height: number = 1,\r\n )\r\n {\r\n super();\r\n }\r\n\r\n SetSize(width: number, height: number)\r\n {\r\n if (this._Width === width && this._Height === height) return;\r\n\r\n this.WriteAllObjectRecord();\r\n this._Width = width;\r\n this._Height = height;\r\n this.Update();\r\n }\r\n\r\n AppendEntity(ens: Iterable<Entity>)\r\n {\r\n this.WriteAllObjectRecord();\r\n for (let e of ens)\r\n this._DisplayEntitys.add(e.Id);\r\n\r\n this.Update();\r\n }\r\n\r\n _Target = new Vector3(0, 0, -1);\r\n\r\n \r\n\r\n Destroy()\r\n {\r\n super.Destroy();\r\n }\r\n\r\n\r\n //#region -------------------------File-------------------------\r\n //对象从文件中读取数据,初始化自身\r\n protected _ReadFile(file: CADFiler)\r\n {\r\n let ver = file.Read();\r\n super._ReadFile(file);\r\n\r\n\r\n this._Width = file.Read();\r\n this._Height = file.Read();\r\n\r\n this._DisplayEntitys.clear();\r\n let count = file.Read();\r\n for (let i = 0; i < count; i++)\r\n {\r\n let id = file.ReadSoftObjectId();\r\n if (id)\r\n this._DisplayEntitys.add(id);\r\n }\r\n\r\n this._RenderType = file.Read();\r\n this._Target.fromArray(file.Read());\r\n }\r\n //对象将自身数据写入到文件.\r\n WriteFile(file: CADFiler)\r\n {\r\n file.Write(1);\r\n super.WriteFile(file);\r\n\r\n file.Write(this._Width);\r\n file.Write(this._Height);\r\n\r\n file.Write(this._DisplayEntitys.size);\r\n for (let id of this._DisplayEntitys)\r\n file.WriteSoftObjectId(id);\r\n\r\n file.Write(this._RenderType);\r\n file.Write(this._Target.toArray());\r\n }\r\n //#endregion\r\n}\r\n\r\n//\r\nfunction ScaleUV2(geo: Geometry, xScale = 1e-3, yScale = 1e-3)\r\n{\r\n for (let uvsg of geo.faceVertexUvs)\r\n {\r\n for (let uvs of uvsg)\r\n {\r\n for (let uv of uvs)\r\n {\r\n uv.x /= xScale;\r\n uv.y /= yScale;\r\n }\r\n }\r\n }\r\n}\r\n"],"names":["equaln","FixIndex","Vector2","Shape","ExtendType","TLine","TempPolyline","Box2","cache","Path","TShape","transform","Line","BufferGeometryUtils2","retessellate","DbText","TempP","TAmbientLight","TDirectionalLight","THemisphereLight","TPointLight","TRectAreaLight","TSpotLight"],"mappings":"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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;IAC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AAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;gBAEzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;gBAEzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;gBAEzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;;gBAEzD,CAAC,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAIA,SAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACzD,CAAC,IAAIA,SA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"}