Example #1
0
        public bool RandomizeObjectRotation(bool bRandomRoll, bool bRandomPitch, bool bRandomYaw)
        {
            //generate random values
            bool   bStatus  = false;
            Random autoRand = new Random();
            float  roll     = (float)(autoRand.NextDouble() * 360.0);
            float  pitch    = (float)(autoRand.NextDouble() * 360.0);
            float  yaw      = (float)(autoRand.NextDouble() * 360.0);

            //access selected object
            if (scenes.Count > 0)
            {
                if (scenes[RenderCore.ActiveSceneName] is ScenarioBase)
                {
                    bStatus = true;
                    ScenarioBase  sb    = (ScenarioBase)scenes[RenderCore.ActiveSceneName];
                    BindingAngle3 angle = sb.SelectionRotation;

                    if (bRandomPitch)
                    {
                        angle.Pitch = pitch;
                    }
                    if (bRandomRoll)
                    {
                        angle.Roll = roll;
                    }
                    if (bRandomYaw)
                    {
                        angle.Yaw = yaw;
                    }

                    sb.SelectionRotation = angle;
                }
            }

            return(bStatus);
        }
Example #2
0
        public void HoverEdit(Vector3 origin, Vector3 direction, out Vector3 trans_delta, out BindingAngle3 rot_delta)
        {
            Vector3 t_org = new Vector3();
            Vector3 t_dir = new Vector3();

            //transform pick ray into model space (only for rotation)
            if (ModeIsRotation() == true)
            {
                Matrix inv = new Matrix();
                inv = m_WorldSpaceTransform;
                inv.Invert();

                t_org = origin;
                t_dir = direction;
                t_org.TransformCoordinate(inv);
                t_dir.TransformNormal(inv);
            }

            Vector3       intersect_point = new Vector3();
            BindingAngle3 rotation_edit   = new BindingAngle3();
            BindingAngle3 temp            = new BindingAngle3();

            rot_delta = temp;

            trans_delta.X   = 0;
            trans_delta.Y   = 0;
            trans_delta.Z   = 0;
            rot_delta.Pitch = 0;
            rot_delta.Roll  = 0;
            rot_delta.Yaw   = 0;

            switch (m_Mode)
            {
            case EditMode.Pitch:
                rotation_edit.Pitch       = m_PitchHandle.HoverEdit(t_org, t_dir);
                rot_delta.Pitch           = rotation_edit.Pitch - m_EditRotationStart.Pitch;
                m_EditRotationStart.Pitch = rotation_edit.Pitch;
                //rotation_edit.Roll =  m_PitchHandle.HoverEdit(t_org, t_dir);
                //rot_delta.Roll = rotation_edit.Roll - m_EditRotationStart.Roll;
                //m_EditRotationStart.Roll = rotation_edit.Roll;
                break;

            case EditMode.Roll:
                rotation_edit.Roll       = m_RollHandle.HoverEdit(t_org, t_dir);
                rot_delta.Roll           = rotation_edit.Roll - m_EditRotationStart.Roll;
                m_EditRotationStart.Roll = rotation_edit.Roll;
                //rotation_edit.Pitch =  m_RollHandle.HoverEdit(t_org, t_dir);
                //rot_delta.Pitch = rotation_edit.Pitch - m_EditRotationStart.Pitch;
                //m_EditRotationStart.Pitch = rotation_edit.Pitch;
                break;

            case EditMode.Yaw:
                rotation_edit.Yaw = m_YawHandle.HoverEdit(t_org, t_dir);
                rot_delta.Yaw     = rotation_edit.Yaw - m_EditRotationStart.Yaw;

                //          if(Math.Abs(rot_delta.Yaw) > 0.5)
                //          {
                //            int j=0;
                //          }
                m_EditRotationStart.Yaw = rotation_edit.Yaw;
                break;

            case EditMode.MoveDX:
                PMath.RayIntersectPlane(origin, direction, m_EditAxisTestPlane, out intersect_point);
                intersect_point.Y      = m_EditTranslationStart.Y;
                intersect_point.Z      = m_EditTranslationStart.Z;
                trans_delta            = intersect_point - m_EditTranslationStart;
                m_EditTranslationStart = intersect_point;
                break;

            case EditMode.MoveDY:
                PMath.RayIntersectPlane(origin, direction, m_EditAxisTestPlane, out intersect_point);
                intersect_point.X      = m_EditTranslationStart.X;
                intersect_point.Z      = m_EditTranslationStart.Z;
                trans_delta            = intersect_point - m_EditTranslationStart;
                m_EditTranslationStart = intersect_point;
                break;

            case EditMode.MoveDZ:
                PMath.RayIntersectPlane(origin, direction, m_EditAxisTestPlane, out intersect_point);
                intersect_point.X      = m_EditTranslationStart.X;
                intersect_point.Y      = m_EditTranslationStart.Y;
                trans_delta            = intersect_point - m_EditTranslationStart;
                m_EditTranslationStart = intersect_point;
                break;

            case EditMode.MoveXY:
                PMath.RayIntersectPlane(origin, direction, m_EditAxisTestPlane, out intersect_point);
                intersect_point.Z      = m_EditTranslationStart.Z;
                trans_delta            = intersect_point - m_EditTranslationStart;
                m_EditTranslationStart = intersect_point;
                break;

            case EditMode.MoveXZ:
                PMath.RayIntersectPlane(origin, direction, m_EditAxisTestPlane, out intersect_point);
                intersect_point.Y      = m_EditTranslationStart.Y;
                trans_delta            = intersect_point - m_EditTranslationStart;
                m_EditTranslationStart = intersect_point;
                break;

            case EditMode.MoveYZ:
                PMath.RayIntersectPlane(origin, direction, m_EditAxisTestPlane, out intersect_point);
                intersect_point.X      = m_EditTranslationStart.X;
                trans_delta            = intersect_point - m_EditTranslationStart;
                m_EditTranslationStart = intersect_point;
                break;
            }

            //if((Math.Abs(rot_delta.Pitch) > 0.001)||(Math.Abs(rot_delta.Roll) > 0.001)||(Math.Abs(rot_delta.Yaw) > 0.5))
            //  Trace.WriteLine(string.Format("droll={0}  dpitch={1}  dyaw={2}",
            //    rot_delta.Pitch,
            //    rot_delta.Roll,
            //    rot_delta.Yaw));
        }