//private DrawingTest dt; public MainWindow() { DataContext = this; InitializeComponent(); this.Show(); this.Topmost = true; drawingController = new DrawingController(); drawingStatus = new DrawingStatus(); drawingStatus.eye.x = 0.0f; drawingStatus.eye.y = 5.0f; drawingStatus.eye.z = 25.0f; drawingStatus.kinect.x = 0.0f; drawingStatus.kinect.y = 0.34f; drawingStatus.kinect.z = 0.0f; drawingController.ChangeStatus(drawingStatus); // initialize kinect InitKinect(); }
partial void OnStatusChanging(DrawingStatus value);
/// <summary> /// Move focused (this object) to others. /// </summary> /// <param name="move">Which direction</param> /// <param name="status">Status of eye or kinect..etc..</param> /// <returns>New focused object</returns> public BuildingObjectLib3DS Move(DrawingEnumTypes.Movement move, DrawingStatus status) { switch (move) { case DrawingEnumTypes.Movement.MenuIn: if (this.Type == BuildingObjectType.Outside) { if (Father.Childs == null || Father.Childs.Count == 0) { return(this); } foreach (BuildingObjectLib3DS value in Father.Childs.Values) { if (value.GetBuildingType() == BuildingObjectType.Outside) { continue; } return(value); } } else if (this.Type == BuildingObjectType.Building) { if (this.Childs.Contains("0")) { return(this.Childs["0"] as BuildingObjectLib3DS); } return(this); } else if (this.Type == BuildingObjectType.Object) { return(this); } else { foreach (BuildingObjectLib3DS value in this.Childs.Values) { if (value != null) { return(value); } } return(this); } break; case DrawingEnumTypes.Movement.MenuOut: if (this.Type == BuildingObjectType.Floor) { return(Father.Childs["0"] as BuildingObjectLib3DS); } else if (this.Type == BuildingObjectType.Building) { return(this); } else { return(this.Father); } case DrawingEnumTypes.Movement.MoveDown: if (this.Type == BuildingObjectType.Floor) { if (Father.Childs.Contains((Id - 1).ToString())) { return(Father.Childs[(Id - 1).ToString()] as BuildingObjectLib3DS); } } return(this); case DrawingEnumTypes.Movement.MoveUp: if (this.Type == BuildingObjectType.Floor) { if (Father.Childs.Contains((Id + 1).ToString())) { return(Father.Childs[(Id + 1).ToString()] as BuildingObjectLib3DS); } } return(this); case DrawingEnumTypes.Movement.MoveIn: case DrawingEnumTypes.Movement.MoveOut: case DrawingEnumTypes.Movement.MoveRight: case DrawingEnumTypes.Movement.MoveLeft: if (this.Type == BuildingObjectType.Room || this.Type == BuildingObjectType.Object) { return(GetObjectByParallelMovement(move, status)); } return(this); default: break; } return(this); }
/// <summary> /// Parallel move from focused object to others. /// </summary> /// <param name="move">Which direction</param> /// <param name="status">Status of eye or kinect..etc..</param> /// <returns>New focused object</returns> private BuildingObjectLib3DS GetObjectByParallelMovement(DrawingEnumTypes.Movement move, DrawingStatus status) { XmlTextWriter writer = null; writer = new XmlTextWriter(Console.Out); if (this.Father.Childs.Count <= 1) { return(this); } int count = Father.Childs.Count - 1; BuildingObjectLib3DS rnt = null; double shita = Math.Atan((status.eye.x - this.Coordinate.x) / (status.eye.z + this.Coordinate.y)); Matrix <double> matrix = new Matrix <double>(1, 2); matrix.SetValue(0); matrix.Data[0, 0] = this.Coordinate.x; matrix.Data[0, 1] = -this.Coordinate.y; Matrix <double> _matrix = new Matrix <double>(2, 2); _matrix.SetValue(0); _matrix.Data[0, 0] = Math.Cos(shita); _matrix.Data[0, 1] = -Math.Sin(shita); _matrix.Data[1, 0] = Math.Sin(shita); _matrix.Data[1, 1] = Math.Cos(shita); Matrix <double> otherChilds = new Matrix <double>(1, 2); otherChilds.SetValue(0); double MinIn = 99999.0f; double MinOut = 99999.0f; double MinLeft = 99999.0f; double MinRight = 99999.0f; foreach (BuildingObjectLib3DS ThisObj in Father.Childs.Values) { if (ThisObj.Equals(this)) { continue; } otherChilds.Data[0, 0] = ThisObj.Coordinate.x; otherChilds.Data[0, 1] = -ThisObj.Coordinate.y; otherChilds = (otherChilds - matrix) * _matrix; switch (move) { case DrawingEnumTypes.Movement.MoveIn: if (otherChilds.Data[0, 1] < 0 && Math.Abs(otherChilds.Data[0, 1]) < MinIn) { rnt = ThisObj; MinIn = Math.Abs(otherChilds.Data[0, 1]); } break; case DrawingEnumTypes.Movement.MoveOut: if (otherChilds.Data[0, 1] > 0 && Math.Abs(otherChilds.Data[0, 1]) < MinOut) { rnt = ThisObj; MinOut = Math.Abs(otherChilds.Data[0, 1]); } break; case DrawingEnumTypes.Movement.MoveLeft: if (otherChilds.Data[0, 0] < 0 && Math.Abs(otherChilds.Data[0, 0]) < MinLeft) { rnt = ThisObj; MinLeft = Math.Abs(otherChilds.Data[0, 0]); } break; case DrawingEnumTypes.Movement.MoveRight: if (otherChilds.Data[0, 0] > 0 && Math.Abs(otherChilds.Data[0, 0]) < MinRight) { rnt = ThisObj; MinRight = Math.Abs(otherChilds.Data[0, 0]); } break; default: return(this); } } // If we find the object if (rnt != null) { return(rnt); } // Do not find.... return(this); }