private void Finish(object o) { SystemData.IsFinished = true; foreach (BoneModel targetModel in MainViewModel.ProjData.TargetCollection) { if (targetModel != null && (targetModel.ModelType.Equals(ModelType.TargetMandible) || targetModel.ModelType.Equals(ModelType.TargetMaxilla))) { targetModel.IsRendering = false; } } foreach (Element3D dragModel in MultiAngleViewModel.TriangleModelCollection) { DraggableTriangle model = dragModel as DraggableTriangle; if (model != null) { model.IsRendering = false; } } foreach (BallModel ballModel in MainViewModel.ProjData.BallCollection) { ballModel.IsRendering = true; } //如果已在導航結束的階段則直接顯示所有球資訊 if (SystemData.IsFinished) { ShowFinalInfo(); } SystemData.RegToggle = false; SystemData.TrackToggle = false; SystemData.IsFirstStage = false; SystemData.IsSecondStage = false; ProjData.IsNavDone = true; _mainWindow.TrackBtn.IsEnabled = false; _mainWindow.FinishBtn.Visibility = Visibility.Hidden; ResetLayout(); }
private void Stage2(object o) { //確定已經註冊的情況 if (!MainViewModel.ProjData.IsNavSet || !SystemData.IsFirstStage || !SystemData.TrackToggle) { return; } string firstNavigation = MainViewModel.ProjData.FirstNavigation; //因為是第二階段,所以三角導引物是否顯示相反就好 foreach (Element3D dragModel in MultiAngleViewModel.TriangleModelCollection) { DraggableTriangle model = dragModel as DraggableTriangle; if (model != null) { model.IsRendering = !model.IsRendering; } } var boneCollection = MainViewModel.ProjData.BoneCollection; //因為是第二階段,所以模型是否可以更新位置相反就好 foreach (BoneModel model in boneCollection) { model.IsTransformApplied = !model.IsTransformApplied; } foreach (BoneModel targetModel in MainViewModel.ProjData.TargetCollection) { if (targetModel != null && (targetModel.ModelType.Equals(ModelType.TargetMandible) || targetModel.ModelType.Equals(ModelType.TargetMaxilla))) { targetModel.IsRendering = !targetModel.IsRendering; } } SystemData.IsFirstStage = false; SystemData.IsSecondStage = true; _mainWindow.Stage2Btn.Visibility = Visibility.Hidden; _mainWindow.FinishBtn.Visibility = Visibility.Visible; }
private void Stage1(object o) { //確定已經設定導航資訊,且已經有按Tracking的情形 if (!MainViewModel.ProjData.IsNavSet || !SystemData.TrackToggle) { return; } string firstNavigation = MainViewModel.ProjData.FirstNavigation; foreach (Element3D model in MultiAngleViewModel.TriangleModelCollection) { DraggableTriangle dragModel = model as DraggableTriangle; if (dragModel == null) { return; } switch (firstNavigation) { case "Maxilla": if (dragModel.ModelType == ModelType.TargetMaxillaTriangle || dragModel.ModelType == ModelType.MovedMaxillaTriangle) { dragModel.IsRendering = true; } else { dragModel.IsRendering = false; } break; case "Mandible": if (dragModel.ModelType == ModelType.TargetMandibleTriangle || dragModel.ModelType == ModelType.MovedMandibleTriangle) { dragModel.IsRendering = true; } else { dragModel.IsRendering = false; } break; } } var boneCollection = MainViewModel.ProjData.BoneCollection; foreach (BoneModel model in boneCollection) { switch (firstNavigation) { //骨骼名稱是不是所選的第一導引骨頭(上、下顎),不是的話不讓他改變位置 case "Maxilla": if (model.ModelType == ModelType.MovedMandible) { model.Transform = Transform3D.Identity; model.IsTransformApplied = false; } break; case "Mandible": if (model.ModelType == ModelType.MovedMaxilla) { model.Transform = Transform3D.Identity; model.IsTransformApplied = false; } break; } } var targetCollection = MainViewModel.ProjData.TargetCollection; //顯示出所選擇的目標模型 foreach (BoneModel targetModel in targetCollection) { if (targetModel == null) { return; } //骨骼名稱是不是所選的第一導引骨頭(上、下顎),不是的話則不顯示 switch (firstNavigation) { case "Maxilla": if (targetModel.ModelType == ModelType.TargetMaxilla) { targetModel.IsRendering = true; } break; case "Mandible": if (targetModel.ModelType == ModelType.TargetMandible) { targetModel.IsRendering = true; } break; } } //第一階段按下 SystemData.IsFirstStage = true; _mainWindow.Stage1Btn.Visibility = Visibility.Hidden; _mainWindow.Stage2Btn.Visibility = Visibility.Visible; }
public void LoadSettingModel(object o) { MainViewModel.ProjData.TargetCollection.Clear(); MainViewModel.ProjData.BoneCollection.Clear(); MultiAngleViewModel.OspModelCollection.Clear(); MultiAngleViewModel.TriangleModelCollection.Clear(); //讀取原始上下顎 加上 規劃後的轉移矩陣 Matrix plannedMatrix = ReadMatrixFile(_plannedMaxillaMatrix); BoneModel targetMaxilla = new BoneModel { FilePath = MaxillaModel, IsRendering = false, MarkerId = "", ModelType = ModelType.TargetMaxilla, BoneDiffuseColor = Color.FromArgb(255, 100, 100, 100), Transform = new MatrixTransform3D(plannedMatrix.ToMatrix3D()) }; targetMaxilla.LoadModel(); Matrix plannedMandible = ReadMatrixFile(_plannedMandibleMatrix); BoneModel targetMandible = new BoneModel { FilePath = MandibleModel, IsRendering = false, MarkerId = "", ModelType = ModelType.TargetMandible, BoneDiffuseColor = Color.FromArgb(255, 100, 100, 100), Transform = new MatrixTransform3D(plannedMandible.ToMatrix3D()) }; targetMandible.LoadModel(); //MainViewModel.Data.TargetCollection.Add(head); MainViewModel.ProjData.TargetCollection.Add(targetMaxilla); MainViewModel.ProjData.TargetCollection.Add(targetMandible); BoneModel head = new BoneModel { FilePath = HeadModel, MarkerId = "Head", ModelType = ModelType.Head, BoneDiffuseColor = HeadDiffuseColor }; head.LoadModel(); BoneModel oriMaxilla = new BoneModel { FilePath = MaxillaModel, ModelType = ModelType.MovedMaxilla, MarkerId = "Splint", BoneDiffuseColor = MaxillaDiffuseColor }; oriMaxilla.LoadModel(); BoneModel oriMandible = new BoneModel { FilePath = MandibleModel, ModelType = ModelType.MovedMandible, MarkerId = "Splint", BoneDiffuseColor = MandibleDiffuseColor }; oriMandible.LoadModel(); MainViewModel.ProjData.BoneCollection.Add(head); MainViewModel.ProjData.BoneCollection.Add(oriMaxilla); MainViewModel.ProjData.BoneCollection.Add(oriMandible); //載入OSP模型 OspModel headOsp = new OspModel { MarkerId = "Head", FilePath = HeadOsp, DiffuseColor = Color.FromArgb(50, 11, 243, 243) }; headOsp.LoadOsp(); OspModel mandibleOsp = new OspModel { MarkerId = "C", FilePath = MandibleOsp, DiffuseColor = Color.FromArgb(50, 2, 231, 2) }; mandibleOsp.LoadOsp(); //綁定下顎對稱面到下顎模型 SetBinding(oriMandible, mandibleOsp, "Transform", HelixToolkit.Wpf.SharpDX.Model3D.TransformProperty, BindingMode.OneWay); MultiAngleViewModel.OspModelCollection.Add(headOsp); MultiAngleViewModel.OspModelCollection.Add(mandibleOsp); //標記屬於上顎的ID,綁定到目標上顎 DraggableTriangle maxillaTargetTriangle = new DraggableTriangle(targetMaxilla.ModelCenter) { MarkerId = "Maxilla", IsRendering = false, Transform = targetMaxilla.Transform, ModelType = ModelType.TargetMaxillaTriangle, }; //標記屬於下顎的ID,綁定到目標下顎 DraggableTriangle mandibleTargetTriangle = new DraggableTriangle(targetMandible.ModelCenter) { MarkerId = "Mandible", IsRendering = false, Transform = targetMandible.Transform, ModelType = ModelType.TargetMandibleTriangle, }; //將導航三角形綁定到導航的上顎 DraggableTriangle maxillaTriangle = new DraggableTriangle(oriMaxilla.ModelCenter) { MarkerId = "Maxilla", Transparency = 0.5f, IsRendering = false, ModelType = ModelType.MovedMaxillaTriangle, }; SetBinding(oriMaxilla, maxillaTriangle, "Transform", HelixToolkit.Wpf.SharpDX.GroupModel3D.TransformProperty, BindingMode.OneWay); //將導航三角形綁定到導航的下顎 DraggableTriangle mandibleTriangle = new DraggableTriangle(oriMandible.ModelCenter) { MarkerId = "Mandible", Transparency = 0.5f, IsRendering = false, ModelType = ModelType.MovedMandibleTriangle, }; SetBinding(oriMandible, mandibleTriangle, "Transform", HelixToolkit.Wpf.SharpDX.GroupModel3D.TransformProperty, BindingMode.OneWay); MultiAngleViewModel.TriangleModelCollection.Add(maxillaTargetTriangle); MultiAngleViewModel.TriangleModelCollection.Add(mandibleTargetTriangle); MultiAngleViewModel.TriangleModelCollection.Add(maxillaTriangle); MultiAngleViewModel.TriangleModelCollection.Add(mandibleTriangle); MultiAngleViewModel.ResetCameraPosition(); MainViewModel.ProjData.IsNavSet = true; _navigateView.Hide(); }