diff --git a/src/Add-on/DrawBoard/DrawBoardTool.ts b/src/Add-on/DrawBoard/DrawBoardTool.ts index b95436d87..a643307de 100644 --- a/src/Add-on/DrawBoard/DrawBoardTool.ts +++ b/src/Add-on/DrawBoard/DrawBoardTool.ts @@ -93,13 +93,18 @@ export abstract class DrawBoardTool implements Command let ray: Ray; //构造射线,取和射线相交的空间 if (spaceData.Intersection.object) - ray = new Ray(spaceData.Intersection.point, spaceData.Intersection.face.normal); + { + let pick = spaceData.Intersection; + let normal = pick.face.normal.clone().transformDirection(pick.object.matrix); + ray = new Ray(spaceData.Intersection.point, normal); + } else ray = app.m_Viewer.GenerateRaycaster(vcs).ray; + + ray.applyMatrix4(new Matrix4().getInverse(mat)); arrayRemoveIf(spaces, box => { - let b = box.clone().applyMatrix4(mat); - return ray.intersectBox(b, new Vector3()) === null; + return ray.intersectBox(box, new Vector3()) === null; }); } if (spaces.length > 0) diff --git a/src/Geometry/SpaceParse/PointPickSpaceParse.ts b/src/Geometry/SpaceParse/PointPickSpaceParse.ts index 2264d3662..4ea2ff5af 100644 --- a/src/Geometry/SpaceParse/PointPickSpaceParse.ts +++ b/src/Geometry/SpaceParse/PointPickSpaceParse.ts @@ -23,7 +23,7 @@ export function PointPickSpaceParse(ptVcs: Vector3, view: Viewer, objectCol: Obj let br = pick.object.userData as Board; //如果pick的面不是板件的正面或者反面,那么放弃操作. - let pickNormal = pick.face.normal.clone().applyMatrix4(new Matrix4().extractRotation(pick.object.matrix)); + let pickNormal = pick.face.normal.clone().transformDirection(pick.object.matrix); if (!isParallelTo(pickNormal, br.Normal)) return { BoardCol: selectBoardCol, Intersection: pick };