From 2f19e9d3e6e52c05b5a3fb63b7568031e01447f3 Mon Sep 17 00:00:00 2001 From: ChenX Date: Tue, 31 Jul 2018 10:05:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=B0=84=E7=BA=BF=E8=BF=87?= =?UTF-8?q?=E6=BB=A4=E9=80=89=E6=8B=A9=E9=94=99=E8=AF=AF=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Add-on/DrawBoard/DrawBoardTool.ts | 11 ++++++++--- src/Geometry/SpaceParse/PointPickSpaceParse.ts | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) 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 };