Beispiel #1
0
        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();
        }
Beispiel #2
0
        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;
        }
Beispiel #3
0
        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;
        }
Beispiel #4
0
        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();
        }