Exemplo n.º 1
0
        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 }),
            };
        }
Exemplo n.º 2
0
        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);
        }