public MyCoordinateSystem()
 {
     Static = this;
     if (Sync.IsServer)
     {
         MyEntities.OnEntityAdd += MyEntities_OnEntityCreate;
     }
 }
Пример #2
0
        public MyCoordinateSystem()
        {
            Static = this;
            if(Sync.IsServer)
                MyEntities.OnEntityAdd += MyEntities_OnEntityCreate;

        }
        /// <summary>
        /// Converts world position to be snapped to closest grid.
        /// </summary>
        /// <param name="worldPos">World position.</param>
        /// <param name="gridSize">Grid size.</param>
        /// <param name="staticGridAlignToCenter">Is grid align to static.</param>
        /// <returns></returns>
        public MyTransformD SnapWorldPosToClosestGrid(ref Vector3D worldPos, double gridSize, bool staticGridAlignToCenter)
        {
            m_lastSelectedCoordSys = m_selectedCoordSys;

            MyLocalCoordSys localCoordSys = null;

            localCoordSys = this.GetClosestCoordSys(ref worldPos);

            // If no coord sys found, return origin(0,0,0) with no transformation!
            if (localCoordSys == null)
            {
                localCoordSys      = new MyLocalCoordSys();
                m_selectedCoordSys = 0;
            }
            else
            {
                m_selectedCoordSys = localCoordSys.Id;
            }

            if (m_selectedCoordSys == 0)
            {
                m_isSelection = false;
            }
            else
            {
                m_isSelection = true;
            }

            if (m_selectedCoordSys != m_lastSelectedCoordSys)
            {
                m_selectionChanged = true;
            }
            else
            {
                m_selectionChanged = false;
            }

            //if (!m_isSelection && m_selectionChanged)
            //{
            //    this.Disable();
            //}
            //else if (m_selectionChanged && m_lastSelectedCoordSys == 0)
            //{
            //    this.Enable();
            //}

            Quaternion rotation    = localCoordSys.Origin.Rotation;
            Quaternion invRotation = Quaternion.Inverse(rotation);
            Vector3D   position    = localCoordSys.Origin.Position;

            Vector3D vec = worldPos - position;

            vec = Vector3D.Transform(vec, invRotation);

            MyCoordinateSystem.GetPosRoundedToGrid(ref vec, gridSize, staticGridAlignToCenter);

            vec = Vector3D.Transform(vec, rotation);

            MyTransformD localCoordsTransform = new MyTransformD();

            localCoordsTransform.Position = position + vec;
            localCoordsTransform.Rotation = rotation;

            return(localCoordsTransform);
        }
Пример #4
0
        /// <summary>
        /// Converts world position to be snapped to closest grid.
        /// </summary>
        /// <param name="worldPos">World position.</param>
        /// <param name="gridSize">Grid size.</param>
        /// <param name="staticGridAlignToCenter">Is grid align to static.</param>
        /// <returns></returns>
        public CoordSystemData SnapWorldPosToClosestGrid(ref Vector3D worldPos, double gridSize, bool staticGridAlignToCenter)
        {
            m_lastSelectedCoordSys = m_selectedCoordSys;

            MyLocalCoordSys localCoordSys = null;

            localCoordSys = this.GetClosestCoordSys(ref worldPos);

            // If no coord sys found, return origin(0,0,0) with no rotation!
            if (localCoordSys == null)
            {
                localCoordSys      = new MyLocalCoordSys(m_coorsSystemSize);
                m_selectedCoordSys = 0;
            }
            else
            {
                m_selectedCoordSys = localCoordSys.Id;
            }

            if (m_selectedCoordSys == 0)
            {
                m_localCoordExist = false;
            }
            else
            {
                m_localCoordExist = true;
            }

            if (m_selectedCoordSys != m_lastSelectedCoordSys)
            {
                m_selectionChanged = true;
                if (OnCoordinateChange != null)
                {
                    OnCoordinateChange();
                }
            }
            else
            {
                m_selectionChanged = false;
            }

            //if (!m_localCoordExist && m_selectionChanged)
            //{
            //    this.Disable();
            //}
            //else if (m_selectionChanged && m_lastSelectedCoordSys == 0)
            //{
            //    this.Enable();
            //}

            CoordSystemData coordData = new CoordSystemData();

            Quaternion rotation    = localCoordSys.Origin.Rotation;
            Quaternion invRotation = Quaternion.Inverse(rotation);
            Vector3D   position    = localCoordSys.Origin.Position;

            Vector3D vec = worldPos - position;

            vec = Vector3D.Transform(vec, invRotation);

            MyCoordinateSystem.GetPosRoundedToGrid(ref vec, gridSize, staticGridAlignToCenter);

            coordData.LocalSnappedPos = vec;

            vec = Vector3D.Transform(vec, rotation);

            MyTransformD localCoordsTransform = new MyTransformD();

            localCoordsTransform.Position = position + vec;
            localCoordsTransform.Rotation = rotation;

            coordData.SnappedTransform = localCoordsTransform;
            coordData.Origin           = localCoordSys.Origin;

            return(coordData);
        }