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); }
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)); }