public ISingleFrameResult GetData() { ISingleFrameResult result = ModelResolver.Resolve <ISingleFrameResult>(); if (HeadPoints != null) { result.HeadPoints = HeadPoints.Select(x => x.GetPoint()).ToArray(); } else { result.HeadPoints = null; } if (HeadPoint != null) { result.HeadPoint = HeadPoint.GetPoint(); } if (SmoothedHeadPoint != null) { result.SmoothedHeadPoint = SmoothedHeadPoint.GetPoint(); } if (Orientation != null) { result.Orientation = Orientation.GetVector(); } result.CentroidSize = CentroidSize; result.PelvicArea = PelvicArea; result.Velocity = Velocity; result.AngularVelocity = AngularVelocity; result.Distance = Distance; result.PelvicArea2 = PelvicArea2; result.PelvicArea3 = PelvicArea3; result.PelvicArea4 = PelvicArea4; if (Centroid != null) { result.Centroid = Centroid.GetPoint(); } result.DataLoadComplete(); return(result); }
// end of GetCamera point private void VolumeControl(RightHandPoint newRightHandPoint, HeadPoint newHeadPoint) { switch (VolumeState) { case 0: if (newRightHandPoint.Y == newHeadPoint.Y) { // volumeLabel.Content = "Volume:" + VolumeSlider.Value; //VolumeSlider.Visibility = System.Windows.Visibility.Visible; VolumeState = 1; //volumeLabel.Content = "Volume:" + VolumeSlider.Value; } break; case 1: VolumeSlider.Value = PreviousVolumeValue + (newHeadPoint.Y - newRightHandPoint.Y); VolumeSlider.Visibility = System.Windows.Visibility.Visible; volumeLabel.Content = "Volume:" + VolumeSlider.Value;// ( newHeadPoint.Y - newRightHandPoint.Y ) if (newRightHandPoint.X - newHeadPoint.X < 50) { VolumeState = 2; IsVolumeStart = true; //MessageBox.Show("Value Changed1 "); } break; default: break; } if (!VolumeStart && IsVolumeStart == true) { //if (!VolumeStart) // MessageBox.Show("Value Changed2 " + (newHeadPoint.Y - newRightHandPoint.Y)); IsVolumeStart = false; PreviousVolumeValue = VolumeSlider.Value; volumeLabel.Content = ""; VolumeSlider.Visibility = System.Windows.Visibility.Hidden; VolumeStart = true; VolumeState = 0; //VolumeSlider.Value += newHeadPoint.Y - RightHandPointsList.Last().Y; //return; } else { VolumeStart = false; } }
private void GetCameraPoint(Skeleton first, AllFramesReadyEventArgs e) { using (DepthImageFrame depthFrame = e.OpenDepthImageFrame()) { if (depthFrame == null || _sensor == null) return; // DepthImagePoint headDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.Head].Position); // right hand point information DepthImagePoint RightHandDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.HandRight].Position); RightHandPoint newRightHandPoint = new RightHandPoint() { X = RightHandDepthPoint.X, Y = RightHandDepthPoint.Y, Z = RightHandDepthPoint.Depth, T = DateTime.Now }; //left hand point information DepthImagePoint LeftHandDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.HandLeft].Position); LeftHandPoint newLeftHandPoint = new LeftHandPoint() { X = LeftHandDepthPoint.X, Y = LeftHandDepthPoint.Y, Z = LeftHandDepthPoint.Depth, T = DateTime.Now }; // right shoulder point information DepthImagePoint RightShoulderDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.ShoulderRight].Position); RightShoulderPoint newRightShoulderPoint = new RightShoulderPoint() { X = RightShoulderDepthPoint.X, Y = RightShoulderDepthPoint.Y, Z = RightShoulderDepthPoint.Depth, T = DateTime.Now }; // left shoulder point information DepthImagePoint LeftShoulderDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.ShoulderLeft].Position); LeftShoulderPoint newLeftShoulderPoint = new LeftShoulderPoint() { X = LeftShoulderDepthPoint.X, Y = LeftShoulderDepthPoint.Y, Z = LeftShoulderDepthPoint.Depth, T = DateTime.Now }; // right elbow point DepthImagePoint RightElbowDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.ElbowRight].Position); RightElbowPoint newRightElbowPoint = new RightElbowPoint() { X = RightElbowDepthPoint.X, Y = RightElbowDepthPoint.Y, Z = RightElbowDepthPoint.Depth, T = DateTime.Now }; // left elbow point DepthImagePoint LeftElbowDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.ElbowLeft].Position); LeftElbowPoint newLeftElbowPoint = new LeftElbowPoint() { X = LeftElbowDepthPoint.X, Y = LeftElbowDepthPoint.Y, Z = LeftElbowDepthPoint.Depth, T = DateTime.Now }; DepthImagePoint RightWristDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.WristRight].Position); RightWristPoint newRightWristPoint = new RightWristPoint() { X = RightWristDepthPoint.X, Y = RightWristDepthPoint.Y, Z = RightWristDepthPoint.Depth, T = DateTime.Now }; DepthImagePoint HeadDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.Head].Position); HeadPoint newHeadPoint = new HeadPoint() { X = HeadDepthPoint.X, Y = HeadDepthPoint.Y, Z = HeadDepthPoint.Depth, T = DateTime.Now }; //user should stand in the right place before eveything start // the two if condition requires the user to stand in front of Kinect in a box area if (newHeadPoint.Z < 1700 || newHeadPoint.Z > 2000) { StatusLabel.Content = ""; ProgressBar.Visibility = System.Windows.Visibility.Hidden; label1.Visibility = System.Windows.Visibility.Hidden; label2.Visibility = System.Windows.Visibility.Hidden; LeftHandPointsList.Clear(); return; } // user should stand right in front of Kinect //if (newHeadPoint.X > 320 || newHeadPoint.X < 280) //{ // StatusLabel.Content = ""; // return; //} StatusLabel.Content = "Control Mode(1.7m~2m): "+ newHeadPoint.Z/1000+ "m"; ProgressBar.Visibility = System.Windows.Visibility.Visible; label1.Visibility = System.Windows.Visibility.Visible; label2.Visibility = System.Windows.Visibility.Visible; // the left hand push event; if (newLeftHandPoint.X > newLeftElbowPoint.X) { Push(newLeftHandPoint, newLeftElbowPoint); } if (newLeftHandPoint.Y < newHeadPoint.Y)// left hand wave to quit { // MessageBox.Show("Left wave"); LeftHandWave(newLeftHandPoint, newHeadPoint, newLeftElbowPoint); } else { IsLeftHandWave = false; } //Volume control if (Math.Abs(newRightHandPoint.Y - newHeadPoint.Y) < newRightShoulderPoint.Y - newHeadPoint.Y && Math.Abs(newRightHandPoint.X - newRightShoulderPoint.X) < newRightShoulderPoint.X - newHeadPoint.X) { VolumeControl(newRightHandPoint, newHeadPoint); } else { IsVolumeStart = false; } if (newRightHandPoint.Y > newRightShoulderPoint.Y && newRightHandPoint.X > newHeadPoint.X + 200)//right swipe { //trigger the right swipe gesture rightSwipeGesture(); } else { IsRightSwipeStart = false; } //left swipe if ( newLeftHandPoint.Y > newLeftShoulderPoint.Y && newLeftHandPoint.X < newHeadPoint.X - 200) { leftSwipeGesture(); } else { IsLeftSwipeStart = false; } }// end of using statement }
private void GetCameraPoint(Skeleton first, AllFramesReadyEventArgs e) { using (DepthImageFrame depthFrame = e.OpenDepthImageFrame()) { if (depthFrame == null || _sensor == null) return; // DepthImagePoint headDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.Head].Position); //left hand point information DepthImagePoint LeftHandDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.HandLeft].Position); LeftHandPoint newLeftHandPoint = new LeftHandPoint() { X = LeftHandDepthPoint.X, Y = LeftHandDepthPoint.Y, Z = LeftHandDepthPoint.Depth, T = DateTime.Now }; DepthImagePoint HeadDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.Head].Position); HeadPoint newHeadPoint = new HeadPoint() { X = HeadDepthPoint.X, Y = HeadDepthPoint.Y, Z = HeadDepthPoint.Depth, T = DateTime.Now }; //user should stand in the right place before eveything start // the two if condition requires the user to stand in front of Kinect in a box area if (newHeadPoint.Z < 1700 || newHeadPoint.Z > 2000) { StatusLabel.Visibility = System.Windows.Visibility.Hidden; StatusLabel.Content = ""; return; } StatusLabel.Visibility = System.Windows.Visibility.Visible; StatusLabel.Content = "Control Mode(1.7m~2m): " + newHeadPoint.Z / 1000 + "m"; // left hand wave to quit system if (newLeftHandPoint.Y < newHeadPoint.Y) { // MessageBox.Show("Left wave"); LeftHandWave(newLeftHandPoint, newHeadPoint); } else { IsLeftHandWave = false; } }// end of using statement }
//a very simple version of left hand wave private void LeftHandWave(LeftHandPoint newLeftHandPoint, HeadPoint newHeadPoint, LeftElbowPoint newLeftElbowPoint) { //left hand wave gesture(start = 0, raisehand = 1, rightside = 2, leftside = 3, putdown = 4) if (!IsLeftHandWave && newHeadPoint.X - newLeftHandPoint.X > 200) //left hand wave gesture(start = 0, raisehand = 1, rightside = 2, leftside = 3, putdown = 4) { IsLeftHandWave = true; _sensor.AllFramesReady -= _sensor_AllFramesReady; (Application.Current.MainWindow.FindName("mainFrame") as Frame).Source = new Uri("Movie.xaml", UriKind.RelativeOrAbsolute); } // closing the event handler }
public List<HeadPoint> GetBaseDots() { var pointsDict = new Dictionary<int, HeadPoint>(); foreach (var rect in Rects) { if (!pointsDict.ContainsKey(rect.A)) pointsDict.Add(rect.A, new HeadPoint(rect.Points[0]) { Visible = rect.Type != MeshPartType.REar && rect.Type != MeshPartType.LEar }); if (!pointsDict.ContainsKey(rect.B)) pointsDict.Add(rect.B, new HeadPoint(rect.Points.Last()) { Visible = rect.Type != MeshPartType.REar && rect.Type != MeshPartType.LEar }); } var result = new HeadPoint[defaultDots.Count]; foreach (var p in pointsDict) result[p.Key] = p.Value; for (var i = 0; i < result.Length; i++) { if (result[i] == null) result[i] = defaultDots[i]; result[i].OriginalValue = defaultDots[i].OriginalValue; } result[20].Visible = false; result[42].Visible = false; result[12].Visible = false; result[13].Visible = false; result[14].Visible = false; result[34].Visible = false; result[35].Visible = false; result[36].Visible = false; result[10].LinkedPoints.Add(12); result[33].LinkedPoints.Add(35); result[33].LinkedPoints.Add(36); result[11].LinkedPoints.Add(13); result[11].LinkedPoints.Add(14); result[32].LinkedPoints.Add(34); result[41].LinkedPoints.Add(42); result[19].LinkedPoints.Add(20); result[7].LinkedPoints.Add(47); // уши result[8].LinkedPoints.Add(48); result[29].LinkedPoints.Add(49); result[30].LinkedPoints.Add(50); return result.ToList(); }
//a very simple version of left hand wave private void LeftHandWave(LeftHandPoint newLeftHandPoint, HeadPoint newHeadPoint) { if ( !IsLeftHandWave &&newHeadPoint.X - newLeftHandPoint.X > 200) //left hand wave gesture(start = 0, raisehand = 1, rightside = 2, leftside = 3, putdown = 4) { IsLeftHandWave = true; // System.Threading.Thread.Sleep(1000); // MessageBox.Show("MainMenu"); Application.Current.Shutdown(); } }
public ISingleFrameExtendedResults GetData() { ISingleFrameExtendedResults result = ModelResolver.Resolve <ISingleFrameExtendedResults>(); if (HeadPoints != null) { result.HeadPoints = HeadPoints.Select(x => x.GetPoint()).ToArray(); } else { result.HeadPoints = null; } if (BodyContour != null) { result.BodyContour = BodyContour.Select(x => x.GetPoint()).ToArray(); } else { result.BodyContour = null; } if (HeadPoint != null) { result.HeadPoint = HeadPoint.GetPoint(); result.MidPoint = MidPoint.GetPoint(); } if (SmoothedHeadPoint != null) { result.SmoothedHeadPoint = SmoothedHeadPoint.GetPoint(); } if (Orientation != null) { result.Orientation = Orientation.GetVector(); } result.CentroidSize = CentroidSize; result.PelvicArea = PelvicArea; result.Velocity = Velocity; result.AngularVelocity = AngularVelocity; result.Distance = Distance; result.PelvicArea2 = PelvicArea2; result.PelvicArea3 = PelvicArea3; result.PelvicArea4 = PelvicArea4; if (Centroid != null) { result.Centroid = Centroid.GetPoint(); } if (Whiskers != null) { result.Whiskers = Whiskers.GetWhiskerCollection(); } if (AllWhiskers != null) { result.AllWhiskers = AllWhiskers.GetWhiskerCollection(); } if (BestTrackedWhisker != null) { result.BestTrackedWhisker = BestTrackedWhisker.GetWhiskerCollection(); } result.DataLoadComplete(); return(result); }
public void Transform(HeadPoint[] dots, bool needShape = false) { if (!needShape) { foreach (var r in Rects) { r.Transform(ref dots[r.A].Value, ref dots[r.B].Value); for (var i = 0; i < r.Points.Length; i++) ShapeInfo.Points[r.ShapeIndices[i]].Value = r.Points[i]; } return; } for (var i = 0; i < dots.Length; i++) Transform(dots[i].Value, i, false); headMeshesController.UpdateShape(ref ShapeInfo); }
private void VolumeControl(RightHandPoint newRightHandPoint, HeadPoint newHeadPoint) { if(!IsVolumeStart) { IsVolumeStart = true; StopKinect(_sensor); statusLabel.Content = "Loading..."; _sensor.AllFramesReady -= _sensor_AllFramesReady; PhotoVoiceControl newVoice = new PhotoVoiceControl("1",_sensor); this.NavigationService.Navigate(newVoice); return; } }
private void GetCameraPoint(Skeleton first, AllFramesReadyEventArgs e) { using (DepthImageFrame depthFrame = e.OpenDepthImageFrame()) { if (depthFrame == null || _sensor == null) return; // DepthImagePoint headDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.Head].Position); // right hand point information DepthImagePoint RightHandDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.HandRight].Position); RightHandPoint newRightHandPoint = new RightHandPoint() { X = RightHandDepthPoint.X, Y = RightHandDepthPoint.Y, Z = RightHandDepthPoint.Depth, T = DateTime.Now }; RightHandPoint startRightHandPoint; //left hand point information DepthImagePoint LeftHandDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.HandLeft].Position); LeftHandPoint newLeftHandPoint = new LeftHandPoint() { X = LeftHandDepthPoint.X, Y = LeftHandDepthPoint.Y, Z = LeftHandDepthPoint.Depth, T = DateTime.Now }; LeftHandPoint startLeftHandPoint; // right shoulder point information DepthImagePoint RightShoulderDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.ShoulderRight].Position); RightShoulderPoint newRightShoulderPoint = new RightShoulderPoint() { X = RightShoulderDepthPoint.X, Y = RightShoulderDepthPoint.Y, Z = RightShoulderDepthPoint.Depth, T = DateTime.Now }; // left shoulder point information DepthImagePoint LeftShoulderDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.ShoulderLeft].Position); LeftShoulderPoint newLeftShoulderPoint = new LeftShoulderPoint() { X = LeftShoulderDepthPoint.X, Y = LeftShoulderDepthPoint.Y, Z = LeftShoulderDepthPoint.Depth, T = DateTime.Now }; // right elbow point DepthImagePoint RightElbowDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.ElbowRight].Position); RightElbowPoint newRightElbowPoint = new RightElbowPoint() { X = RightElbowDepthPoint.X, Y = RightElbowDepthPoint.Y, Z = RightElbowDepthPoint.Depth, T = DateTime.Now }; // left elbow point DepthImagePoint LeftElbowDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.ElbowLeft].Position); LeftElbowPoint newLeftElbowPoint = new LeftElbowPoint() { X = LeftElbowDepthPoint.X, Y = LeftElbowDepthPoint.Y, Z = LeftElbowDepthPoint.Depth, T = DateTime.Now }; DepthImagePoint RightWristDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.WristRight].Position); RightWristPoint newRightWristPoint = new RightWristPoint() { X = RightWristDepthPoint.X, Y = RightWristDepthPoint.Y, Z = RightWristDepthPoint.Depth, T = DateTime.Now }; DepthImagePoint HeadDepthPoint = depthFrame.MapFromSkeletonPoint(first.Joints[JointType.Head].Position); HeadPoint newHeadPoint = new HeadPoint() { X = HeadDepthPoint.X, Y = HeadDepthPoint.Y, Z = HeadDepthPoint.Depth, T = DateTime.Now }; if (newHeadPoint.Z < 1700 || newHeadPoint.Z > 2000) { StatusLabel.Content = ""; return; } StatusLabel.Content = "Control Mode(1.7m~2m): "+ newHeadPoint.Z/1000+ "m"; if (newRightHandPoint.Y - newHeadPoint.Y < 0 && newRightHandPoint.X - newRightShoulderPoint.X > -30) { VolumeControl(newRightHandPoint, newHeadPoint); } else { IsVolumeStart = false; } // left hand wave to quit if (newLeftHandPoint.Y < newHeadPoint.Y) { // MessageBox.Show("Left wave"); LeftHandWave(newLeftHandPoint, newHeadPoint); } else { IsLeftHandWave = false; } if (newRightHandPoint.Y > newRightShoulderPoint.Y && newRightHandPoint.X > newHeadPoint.X + 200)//right swipe { //trigger the right swipe gesture rightSwipeGesture(); } else { IsRightSwipeStart = false; } //left swipe if (newLeftHandPoint.Y > newLeftShoulderPoint.Y && newLeftHandPoint.X < newHeadPoint.X - 200) { //MessageBox.Show("Swipe left"); leftSwipeGesture(); } else { IsLeftSwipeStart = false; } } }
private void VolumeControl(RightHandPoint newRightHandPoint, HeadPoint newHeadPoint) { //volumeLabel.Content = "Volume:" + VolumeSlider.Value; // VolumeSlider.Visibility = System.Windows.Visibility.Visible; switch (VolumeState) { case 0: if (newRightHandPoint.Y == newHeadPoint.Y) { VolumeState = 1; GestureLabel.UpdateLayout(); if (GestureLabel.Visibility == Visibility.Hidden) { GestureLabel.Content = "Volume Control Stage 1"; GestureLabel.Visibility = Visibility.Visible; timer = new System.Threading.Timer( (state) => { GestureLabel.Dispatcher.BeginInvoke((Action)(() => { GestureLabel.Visibility = Visibility.Hidden; })); }, null, 1000, Int32.MaxValue); } else { GestureLabel.Content = "Volume Control Stage 1"; } //volumeLabel.Content = "Volume:" + VolumeSlider.Value; } break; case 1: if (newRightHandPoint.X - newHeadPoint.X < 50) { VolumeState = 2; IsVolumeStart = true; GestureLabel.UpdateLayout(); if (GestureLabel.Visibility == Visibility.Hidden) { GestureLabel.Content = "Volume Control Stage 2"; GestureLabel.Visibility = Visibility.Visible; timer = new System.Threading.Timer( (state) => { GestureLabel.Dispatcher.BeginInvoke((Action)(() => { GestureLabel.Visibility = Visibility.Hidden; })); }, null, 1000, Int32.MaxValue); } else { GestureLabel.Content = "Volume Control Stage 2"; } //MessageBox.Show("Value Changed1 "); } break; default: break; } if (!VolumeStart && IsVolumeStart == true) { IsVolumeStart = false; VolumeStart = true; VolumeState = 0; GestureLabel.UpdateLayout(); if (GestureLabel.Visibility == Visibility.Hidden) { GestureLabel.Content = "Volume Control Succeed!"; GestureLabel.Visibility = Visibility.Visible; timer = new System.Threading.Timer( (state) => { GestureLabel.Dispatcher.BeginInvoke((Action)(() => { GestureLabel.Visibility = Visibility.Hidden; })); }, null, 1000, Int32.MaxValue); } else { GestureLabel.Content = "Volume Control Succeed!"; } } else { VolumeStart = false; } }
//a very simple version of left hand wave private void LeftHandWave(LeftHandPoint newLeftHandPoint, HeadPoint newHeadPoint) { //left hand wave gesture(start = 0, raisehand = 1, rightside = 2, leftside = 3, putdown = 4) if (!IsLeftHandWave && newHeadPoint.X - newLeftHandPoint.X > 200) //left hand wave gesture(start = 0, raisehand = 1, rightside = 2, leftside = 3, putdown = 4) { IsLeftHandWave = true; GestureLabel.UpdateLayout(); if (GestureLabel.Visibility == Visibility.Hidden) { GestureLabel.Content = "Quit"; GestureLabel.Visibility = Visibility.Visible; timer = new System.Threading.Timer( (state) => { GestureLabel.Dispatcher.BeginInvoke((Action)(() => { GestureLabel.Visibility = Visibility.Hidden; })); }, null, 1000, Int32.MaxValue); } else { GestureLabel.Content = "Quit"; } _sensor.AllFramesReady -= _sensor_AllFramesReady; (Application.Current.MainWindow.FindName("mainFrame") as Frame).Source = new Uri("MainMenu.xaml", UriKind.RelativeOrAbsolute); } }
//a very simple version of left hand wave private void LeftHandWave(LeftHandPoint newLeftHandPoint, HeadPoint newHeadPoint) { //left hand wave gesture(start = 0, raisehand = 1, rightside = 2, leftside = 3, putdown = 4) if (!IsLeftHandWave && newHeadPoint.X - newLeftHandPoint.X > 200) //left hand wave gesture(start = 0, raisehand = 1, rightside = 2, leftside = 3, putdown = 4) { IsLeftHandWave = true; (Application.Current.MainWindow.FindName("mainFrame") as Frame).Source = new Uri("MainMenu.xaml", UriKind.RelativeOrAbsolute); } }
/// <summary> Load project from path </summary> public static Project FromStream(string path) { Project result; using (var br = new BinaryReader(File.Open(path, FileMode.Open))) { var projectFi = new FileInfo(path); var projectName = br.ReadString(); #region template image var templateImagePath = br.ReadString(); if (!string.IsNullOrEmpty(templateImagePath)) { var fiName = Path.Combine(projectFi.DirectoryName, templateImagePath); var fi = new FileInfo(fiName); if (!fi.Exists) { ProgramCore.EchoToLog("Can't find template image in project.", EchoMessageType.Warning); templateImagePath = string.Empty; } } #endregion var headModelPath = br.ReadString(); var genesisType = (GenesisType)br.ReadInt32(); var manType = (ManType)br.ReadInt32(); var textureFlip = (FlipType)br.ReadInt32(); var shapeFlip = (FlipType)br.ReadInt32(); var isOpenSmile = br.ReadBoolean(); var textureSize = 1024; switch (ProgramCore.CurrentProgram) { case ProgramCore.ProgramMode.HeadShop_OneClick: case ProgramCore.ProgramMode.HeadShop_v11: case ProgramCore.ProgramMode.FaceAge2_Partial: case ProgramCore.ProgramMode.HeadShop_OneClick_v2: case ProgramCore.ProgramMode.HeadShop_Rotator: textureSize = 2048; // если поставит ьу нас в проге 4096 - то все крашится к хуям. Пусть уж только на экспорте будет. break; /* textureSize = 4096; * break;*/ } result = new Project(projectName, projectFi.DirectoryName, templateImagePath, genesisType, manType, headModelPath, false, textureSize, isOpenSmile); result.LoadMeshes(); result.TextureFlip = textureFlip; result.ShapeFlip = shapeFlip; var partsCount = br.ReadInt32(); //part's library for (var i = 0; i < partsCount; i++) { var title = br.ReadString(); var meshType = br.ReadBoolean() ? MeshType.Accessory : MeshType.Hair; var meshVisible = br.ReadBoolean(); var meshPath = br.ReadString(); var meshCounts = br.ReadInt32(); for (var j = 0; j < meshCounts; j++) { var meshTitle = br.ReadString(); DynamicRenderMesh mesh; if (meshType == MeshType.Accessory) { mesh = ProgramCore.MainForm.ctrlRenderControl.pickingController.AccesoryMeshes[meshTitle]; } else { mesh = ProgramCore.MainForm.ctrlRenderControl.pickingController.HairMeshes[meshTitle]; } if (mesh == null) { continue; } mesh.Title = title + "_" + j; mesh.IsVisible = meshVisible; mesh.Path = meshPath; if (!ProgramCore.MainForm.ctrlRenderControl.PartsLibraryMeshes.ContainsKey(title)) { ProgramCore.MainForm.ctrlRenderControl.PartsLibraryMeshes.Add(title, new DynamicRenderMeshes()); } ProgramCore.MainForm.ctrlRenderControl.PartsLibraryMeshes[title].Add(mesh); } } result.AutodotsUsed = br.ReadBoolean(); result.RotatedAngle = br.ReadDouble(); // загружаем прямоугольник лица (фронт) result.FaceRectRelative = new RectangleF(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); result.MouthCenter = new Vector2(br.ReadSingle(), br.ReadSingle()); result.LeftEyeCenter = new Vector2(br.ReadSingle(), br.ReadSingle()); result.RightEyeCenter = new Vector2(br.ReadSingle(), br.ReadSingle()); result.NoseUserCenter = new Vector2(br.ReadSingle(), br.ReadSingle()); result.MouthUserCenter = new Vector2(br.ReadSingle(), br.ReadSingle()); result.LeftEyeUserCenter = new Vector2(br.ReadSingle(), br.ReadSingle()); result.RightEyeUserCenter = new Vector2(br.ReadSingle(), br.ReadSingle()); result.AgeCoefficient = br.ReadSingle(); result.FatCoefficient = br.ReadSingle(); //Сохраняем цвет головы result.FaceColor = new Vector4(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), 1.0f); #region Информация о модели головы var rmPath = Path.Combine(projectFi.DirectoryName, "Model", "MeshParts.rm"); result.RenderMainHelper.headMeshesController.RenderMesh.Load(rmPath); foreach (var part in result.RenderMainHelper.headMeshesController.RenderMesh.Parts) { if (!string.IsNullOrEmpty(part.TextureName)) { part.Texture = ProgramCore.MainForm.ctrlRenderControl.GetTexture(part.TextureName); } if (!string.IsNullOrEmpty(part.TransparentTextureName)) { part.TransparentTexture = ProgramCore.MainForm.ctrlRenderControl.GetTexture(part.TransparentTextureName); } } var baseDotsCount = br.ReadInt32(); for (var i = 0; i < baseDotsCount; i++) { result.BaseDots.Add(HeadPoint.FromStream(br)); } var profileBaseDotsCount = br.ReadInt32(); for (var i = 0; i < profileBaseDotsCount; i++) { result.ProfileBaseDots.Add(HeadPoint.FromStream(br)); } result.RenderMainHelper.autodotsShapeHelper.ShapeInfo = TexturingInfo.FromStream(br); result.RenderMainHelper.autodotsShapeHelper.ShapeProfileInfo = TexturingInfo.FromStream(br); result.RenderMainHelper.headMeshesController.TexturingInfo = TexturingInfo.FromStream(br); result.RenderMainHelper.headController.AutoDotsv2.Clear(); result.RenderMainHelper.headController.ShapeDots.Clear(); var cnt = br.ReadInt32(); for (var i = 0; i < cnt; i++) { result.RenderMainHelper.headController.ShapeDots.Add(MirroredHeadPoint.FromStreamW(br)); } cnt = br.ReadInt32(); for (var i = 0; i < cnt; i++) { result.RenderMainHelper.headController.AutoDotsv2.Add(HeadPoint.FromStream(br)); } result.CustomHeadNeedProfileSetup = br.ReadBoolean(); #endregion result.ProfileEyeLocation = new Vector2(br.ReadSingle(), br.ReadSingle()); result.ProfileMouthLocation = new Vector2(br.ReadSingle(), br.ReadSingle()); var fi1 = new FileInfo(Path.Combine(projectFi.DirectoryName, "ProfileImage.jpg")); if (fi1.Exists) { using (var fs = new FileStream(fi1.FullName, FileMode.Open)) { using (var bmp = new Bitmap(fs)) result.ProfileImage = (Bitmap)bmp.Clone(); } } try { var hasStage = br.ReadBoolean(); if (hasStage) { ProgramCore.MainForm.ctrlRenderControl.BackgroundTexture = br.ReadString(); } ProgramCore.MainForm.activePanel = br.ReadInt32(); result.projectCamera = new Camera(); result.projectCamera.Scale = br.ReadSingle(); result.projectCamera.beta = br.ReadDouble(); result.projectCamera._dy = br.ReadSingle(); } catch { } try { result.MorphingScale = br.ReadSingle(); } catch { } try { result.TextureSize = br.ReadInt32(); } catch { } } return(result); }
/// <summary> Load project from path </summary> public static Project FromStream(string path) { Project result; using (var br = new BinaryReader(File.Open(path, FileMode.Open))) { var projectFi = new FileInfo(path); var projectName = br.ReadString(); #region template image var templateImagePath = br.ReadString(); if (!string.IsNullOrEmpty(templateImagePath)) { var fiName = Path.Combine(projectFi.DirectoryName, templateImagePath); var fi = new FileInfo(fiName); if (!fi.Exists) { ProgramCore.EchoToLog("Can't find template image in project.", EchoMessageType.Warning); templateImagePath = string.Empty; } } #endregion var headModelPath = br.ReadString(); var manType = (ManType)br.ReadInt32(); var textureFlip = (FlipType)br.ReadInt32(); var shapeFlip = (FlipType)br.ReadInt32(); result = new Project(projectName, projectFi.DirectoryName, templateImagePath, manType, headModelPath, false); result.TextureFlip = textureFlip; result.ShapeFlip = shapeFlip; var partsCount = br.ReadInt32(); //part's library for (var i = 0; i < partsCount; i++) { var title = br.ReadString(); var meshType = br.ReadBoolean() ? MeshType.Accessory : MeshType.Hair; var meshVisible = br.ReadBoolean(); var meshCounts = br.ReadInt32(); for (var j = 0; j < meshCounts; j++) { var meshTitle = br.ReadString(); DynamicRenderMesh mesh; if (meshType == MeshType.Accessory) { mesh = ProgramCore.MainForm.ctrlRenderControl.pickingController.AccesoryMeshes[meshTitle]; } else { mesh = ProgramCore.MainForm.ctrlRenderControl.pickingController.HairMeshes[meshTitle]; } if (mesh == null) { continue; } mesh.Title = title + "_" + j; mesh.IsVisible = meshVisible; if (!ProgramCore.MainForm.ctrlRenderControl.PartsLibraryMeshes.ContainsKey(title)) { ProgramCore.MainForm.ctrlRenderControl.PartsLibraryMeshes.Add(title, new DynamicRenderMeshes()); } ProgramCore.MainForm.ctrlRenderControl.PartsLibraryMeshes[title].Add(mesh); } } result.AutodotsUsed = br.ReadBoolean(); // загружаем прямоугольник лица (фронт) result.FaceRectRelative = new RectangleF(br.ReadSingle(), br.ReadSingle(), br.ReadSingle(), br.ReadSingle()); result.MouthCenter = new Vector2(br.ReadSingle(), br.ReadSingle()); result.LeftEyeCenter = new Vector2(br.ReadSingle(), br.ReadSingle()); result.RightEyeCenter = new Vector2(br.ReadSingle(), br.ReadSingle()); result.NoseUserCenter = new Vector2(br.ReadSingle(), br.ReadSingle()); result.MouthUserCenter = new Vector2(br.ReadSingle(), br.ReadSingle()); result.LeftEyeUserCenter = new Vector2(br.ReadSingle(), br.ReadSingle()); result.RightEyeUserCenter = new Vector2(br.ReadSingle(), br.ReadSingle()); result.AgeCoefficient = br.ReadSingle(); result.FatCoefficient = br.ReadSingle(); #region Информация о модели головы var rmPath = Path.Combine(projectFi.DirectoryName, "Model", "MeshParts.rm"); ProgramCore.MainForm.ctrlRenderControl.headMeshesController.RenderMesh.Load(rmPath); foreach (var part in ProgramCore.MainForm.ctrlRenderControl.headMeshesController.RenderMesh.Parts) { if (!string.IsNullOrEmpty(part.TextureName)) { part.Texture = ProgramCore.MainForm.ctrlRenderControl.GetTexture(part.TextureName); } if (!string.IsNullOrEmpty(part.TransparentTextureName)) { part.TransparentTexture = ProgramCore.MainForm.ctrlRenderControl.GetTexture(part.TransparentTextureName); } } var baseDotsCount = br.ReadInt32(); for (var i = 0; i < baseDotsCount; i++) { result.BaseDots.Add(HeadPoint.FromStream(br)); } var profileBaseDotsCount = br.ReadInt32(); for (var i = 0; i < profileBaseDotsCount; i++) { result.ProfileBaseDots.Add(HeadPoint.FromStream(br)); } ProgramCore.MainForm.ctrlRenderControl.autodotsShapeHelper.ShapeInfo = TexturingInfo.FromStream(br); ProgramCore.MainForm.ctrlRenderControl.autodotsShapeHelper.ShapeProfileInfo = TexturingInfo.FromStream(br); ProgramCore.MainForm.ctrlRenderControl.headMeshesController.TexturingInfo = TexturingInfo.FromStream(br); ProgramCore.MainForm.ctrlRenderControl.headController.AutoDots.Clear(); ProgramCore.MainForm.ctrlRenderControl.headController.ShapeDots.Clear(); var cnt = br.ReadInt32(); for (var i = 0; i < cnt; i++) { ProgramCore.MainForm.ctrlRenderControl.headController.ShapeDots.Add(MirroredHeadPoint.FromStreamW(br)); } cnt = br.ReadInt32(); for (var i = 0; i < cnt; i++) { ProgramCore.MainForm.ctrlRenderControl.headController.AutoDots.Add(MirroredHeadPoint.FromStreamW(br)); } result.CustomHeadNeedProfileSetup = br.ReadBoolean(); #endregion var fi1 = new FileInfo(Path.Combine(projectFi.DirectoryName, "ProfileImage.jpg")); if (fi1.Exists) { using (var fs = new FileStream(fi1.FullName, FileMode.Open)) { var bmp = new Bitmap(fs); result.ProfileImage = (Bitmap)bmp.Clone(); } } } return(result); }