public override bool Pick(ViewControl vc, Point scrPt) { m_hitRegion = HitRegion.None; if (base.Pick(vc, scrPt) == false) return false; Camera camera = vc.Camera; Matrix4F view = camera.ViewMatrix; Matrix4F vp = view * camera.ProjectionMatrix; Matrix4F wvp = HitMatrix * vp; Ray3F rayL = vc.GetRay(scrPt,wvp); float s = Util.CalcAxisScale(vc.Camera, HitMatrix.Translation, AxisLength, vc.Height); // There's only one hot-spot for this manipulator: // a square at the manipulator origin. Vec3F min = new Vec3F(-0.5f, -0.5f, -0.5f); Vec3F max = new Vec3F(0.5f, 0.5f, 0.5f); AABB box = new AABB(min, max); float centerCubeScale = s * CenterCubeSize; Matrix4F centerCubeXform = new Matrix4F(); centerCubeXform.Scale(centerCubeScale); centerCubeXform.Invert(centerCubeXform); Ray3F ray = rayL; ray.Transform(centerCubeXform); if (box.Intersect(ray)) { m_hitRegion = HitRegion.XYSquare; return true; } m_hitRegion = HitRegion.None; return false; }
public override bool Pick(ViewControl vc, Point scrPt) { m_hitRegion = HitRegion.None; if (base.Pick(vc, scrPt) == false) return false; Camera camera = vc.Camera; Matrix4F view = camera.ViewMatrix; Matrix4F vp = view * camera.ProjectionMatrix; Matrix4F wvp = HitMatrix * vp; Ray3F rayL = vc.GetRay(scrPt,wvp); m_hitRegion = m_translatorControl.Pick(vc, HitMatrix, view, rayL, HitRayV); bool picked = m_hitRegion != HitRegion.None; return picked; }
public override void OnEndDrag(ViewControl vc, Point scrPt) { if (m_activeOp != null) { m_activeOp.FinishTransaction(); } m_hitRegion = HitRegion.None; Clear(); }
public override void OnEndDrag(ViewControl vc, Point scrPt) { if (CanManipulate(m_node)) { var transactionContext = DesignView.Context.As<ITransactionContext>(); try { if (transactionContext.InTransaction) transactionContext.End(); } catch (InvalidTransactionException ex) { if (transactionContext.InTransaction) transactionContext.Cancel(); if (ex.ReportError) Outputs.WriteLine(OutputMessageType.Error, ex.Message); } } m_hitRegion = HitRegion.None; m_node = null; }