public TransformGizmo() { MetaOperator sceneTransformGizmoDefinition = MetaManager.Instance.GetMetaOperator(Guid.Parse("2e56b389-a983-42fe-a015-61d9f9532af4")); _sceneTransformGizmoOperator = sceneTransformGizmoDefinition.CreateOperator(Guid.Empty); GizmoParts = new GizmoPart[] { new AxisGizmoPart(0, Vector3.Zero, Vector3.UnitX, new[] { _translateXParam, _translateYParam, _translateZParam }), new AxisGizmoPart(1, Vector3.Zero, Vector3.UnitY, new[] { _translateXParam, _translateYParam, _translateZParam }), new AxisGizmoPart(2, Vector3.Zero, Vector3.UnitZ, new[] { _translateXParam, _translateYParam, _translateZParam }), new PlaneGizmoPart(3, Vector3.Zero, new Vector3(1, 1, 0), new[] { _translateXParam, _translateYParam, _translateZParam }), new PlaneGizmoPart(4, Vector3.Zero, new Vector3(1, 0, 1), new[] { _translateXParam, _translateYParam, _translateZParam }), new PlaneGizmoPart(5, Vector3.Zero, new Vector3(0, 1, 1), new[] { _translateXParam, _translateYParam, _translateZParam }), }; }
private GizmoPart FindGizmoPartHitByRay(Ray rayInWorld) { if (_transformGizmoTargetOp == null) { return(null); } _rayInObject = ComputeRayInObject(rayInWorld, GizmoToWorld); var minDistance = (float)Double.PositiveInfinity; GizmoPart nearestPartHitByRay = null; foreach (GizmoPart gizmoPart in GizmoParts) { float hitDistance; bool wasHit = gizmoPart.HitTestWithRayInObject(_rayInObject, out hitDistance); if (wasHit && hitDistance < minDistance) { nearestPartHitByRay = gizmoPart; minDistance = hitDistance; } } return(nearestPartHitByRay); }