修正射线过滤选择错误的问题

pull/93/head
ChenX 6 years ago
parent 97e5520b74
commit 2f19e9d3e6

@ -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)

@ -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 };

Loading…
Cancel
Save