diff --git a/src/Add-on/SetSmoothEdge/SetSmoothEdgeFace.ts b/src/Add-on/SetSmoothEdge/SetSmoothEdgeFace.ts index db8ede264..a192c1b99 100644 --- a/src/Add-on/SetSmoothEdge/SetSmoothEdgeFace.ts +++ b/src/Add-on/SetSmoothEdge/SetSmoothEdgeFace.ts @@ -1,10 +1,10 @@ import { BoardGetFace, GetSideFaceMtx, BoardFaceType, MatrixIsCoplane2 } from "../../Geometry/DrillParse/BoardGetFace"; import { Curve } from "../../DatabaseServices/Entity/Curve"; -import { equaln } from "../../Geometry/GeUtils"; +import { equaln, equalv3 } from "../../Geometry/GeUtils"; import { Arc } from "../../DatabaseServices/Entity/Arc"; import { GetBoardSealingCurves, GetBoardHighSeal, HandleRectBoardSealingData } from "../../GraphicsSystem/CalcEdgeSealing"; import { Face } from "../../Geometry/DrillParse/Face"; -import { Matrix4 } from "three"; +import { Matrix4, Vector3 } from "three"; import { Polyline } from "../../DatabaseServices/Entity/Polyline"; import { Board } from "../../DatabaseServices/Entity/Board"; import { Box3Ext } from "../../Geometry/Box"; @@ -13,6 +13,7 @@ import { ISmoothEdgeOption, IHighSealedItem } from "../../UI/Store/BoardInterfac class SetSmoothEdgeFaces extends BoardGetFace { FaceSealingDataMap: Map; + /**非见光面 */ SmoothFace = new Set(); highSealingData: IHighSealedItem[]; private sealCus: Curve[]; @@ -75,9 +76,29 @@ class SetSmoothEdgeFaces extends BoardGetFace && (f1.type === BoardFaceType.NoSide || bg.Board.BoardType !== this.Board.BoardType) ) continue; - //不共面 - if (!MatrixIsCoplane2(f1.OCS, f2.OCS, 1e-2)) + + let [mtx, mtx2] = (f1.type !== f2.type && f1.type === BoardFaceType.NoSide) ? [f1.OCS, f2.OCS] : [f2.OCS, f1.OCS]; + + let localBoard = (f1.type !== f2.type && f1.type === BoardFaceType.NoSide) ? f1.LocalBoard : f2.LocalBoard; + + let nor1 = new Vector3().setFromMatrixColumn(mtx, 2); + let nor2 = new Vector3().setFromMatrixColumn(mtx2, 2); + + if (!equalv3(nor1, nor2.negate(), 1e-2)) continue; + + let pt = new Vector3().setFromMatrixPosition(mtx2); + pt.applyMatrix4(new Matrix4().getInverse(mtx)); + + + if (!equaln(pt.z, 0, 1e-2)) + { + if (f1.type !== f2.type && pt.z < -1e-2 && pt.z > -localBoard.Thickness + 1e-2) + { } + else + continue; + } + if (f1.IsIntersect(f2, scale)) { if (f1.type === BoardFaceType.Side) diff --git a/src/Geometry/DrillParse/Face.ts b/src/Geometry/DrillParse/Face.ts index 4f72f3219..e0a88976f 100644 --- a/src/Geometry/DrillParse/Face.ts +++ b/src/Geometry/DrillParse/Face.ts @@ -187,7 +187,7 @@ export class Face { retBox.intersect(box3); let size = retBox.getSize(new Vector3()); - return !equaln(size.x * size.y, 0) && size.x / sideFace.Length > fuzz; + return !equaln(size.x * size.y, 0) && size.x / sideFace.Length > fuzz && size.y / sideFace.Width > fuzz; } }