Exemplo n.º 1
0
        private void InitMap3DComponents(List <Map3DModel> map3DModelList)
        {
            Dispatcher.Invoke(() =>
            {
                for (int i = viewport3D.Children.Count - 1; i >= 0; i--)
                {
                    if (viewport3D.Children[i] is ContainerUIElement3D)
                    {
                        viewport3D.Children.Remove(viewport3D.Children[i]);
                    }
                }

                List <ContainerUIElement3D> uIElement3Ds = new List <ContainerUIElement3D>();
                foreach (Map3DModel map3D in map3DModelList)
                {
                    ContainerUIElement3D uiElement = Map2DTo3DHelper.Map3DModelToUIElement3D(map3D);
                    uIElement3Ds.Add(uiElement);
                }

                foreach (ContainerUIElement3D uiElement in uIElement3Ds)
                {
                    uiElement.MouseLeftButtonDown += Container_MouseLeftButtonDown;
                    viewport3D.Children.Add(uiElement);
                }
            });
        }
        public override void OnApplyTemplate()
        {
            base.OnApplyTemplate();
            Viewport        = GetTemplateChild("PART_Viewport") as Viewport3D;
            _modelContainer = GetTemplateChild("PART_ModelContainer") as ContainerUIElement3D;

            SetupEventHandlers();
        }
 public Maze(int cells, ContainerUIElement3D container)
 {
     this.CELLS         = cells;
     this.wallContainer = container;
     this.wallContainer.Children.Clear();
     CreateWalls();
     CreateCells();
 }
Exemplo n.º 4
0
        protected void LoadViewport()
        {
            Uri uri = new Uri("/RoDuino.SMS;component/Components/RoApplicationMenu/Viewport3D.xaml", UriKind.Relative);

            _viewport         = Application.LoadComponent(uri) as Viewport3D;
            InternalResources = _viewport.Resources;

            // Container for containing the mesh models of elements
            _modelContainer = _viewport.FindName("ModelContainer") as ContainerUIElement3D;
        }
        private void ShowGeometry(MeshGeometry3D geometry)
        {
            var container = new ContainerUIElement3D();

            var viewport = new ModelVisual3D();

            ViewPort3D.Children.Add(viewport);
            ViewPort3D.Children.Add(container);
            ViewPort3D.ShowFrameRate = true;
            ViewPort3D.ZoomExtents();
        }
Exemplo n.º 6
0
        /// <summary>
        ///     OnElementMouseDown: Click Event for each geometric element
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <param name="watch3DNode"></param>
        protected void OnElementMouseDown(object sender, MouseButtonEventArgs e, Watch3DNode watch3DNode)
        {
            // Check null expression
            // if (e == null) throw new ArgumentNullException(nameof(e));

            // 1-CLick event
            if (e.LeftButton != MouseButtonState.Pressed)
            {
                return;
            }

            // Get sender
            var element = sender as ModelUIElement3D;

            // Check Type
            if (element != null)
            {
                var geometryModel3D = element.Model as GeometryModel3D;
                if (geometryModel3D == null)
                {
                    return;
                }

                // If it is already selected ... Deselect
                if (SelectedModels.Contains(geometryModel3D))
                {
                    geometryModel3D.Material = geometryModel3D.BackMaterial;
                    SelectedModels.Remove(geometryModel3D);
                }
                // If not ... Select!
                else
                {
                    SelectedModels.Add(geometryModel3D);
                    geometryModel3D.Material = _selectionMaterial;
                }
            }

            // Set selected models to Output ...
            if (SelectedModels != null && SelectedModels.Count != 0)
            {
                var container = new ContainerUIElement3D();
                foreach (var geom in SelectedModels)
                {
                    container.Children.Add(new ModelUIElement3D {
                        Model = geom
                    });
                }

                OutputPorts[0].Data = container;
            }

            e.Handled = true;
        }
Exemplo n.º 7
0
 private void LoadViewport()
 {
     _viewport = Application.LoadComponent(new Uri("/FluidKit;component/Controls/VirtFlow/Viewport.xaml", UriKind.Relative)) as Viewport3D;
     if (_viewport != null)
     {
         InternalResources = _viewport.Resources;
         RenderOptions.SetEdgeMode(_viewport, EdgeMode.Aliased);
         RenderOptions.SetCachingHint(_viewport, CachingHint.Cache);
         RenderOptions.SetBitmapScalingMode(_viewport, BitmapScalingMode.LowQuality);
         // Container for containing the mesh models of elements
         _modelContainer = _viewport.FindName("ModelContainer") as ContainerUIElement3D;
     }
 }
Exemplo n.º 8
0
        private void ShowGeometry(MeshGeometry3D geometry)
        {
            var container = new ContainerUIElement3D();

            // var geometry = e.Result as List<Geometryhandler.MeshIdandGeometry>;

            var viewport = new ModelVisual3D();

            ViewPort3D.Children.Add(viewport);
            ViewPort3D.Children.Add(container);
            ViewPort3D.ShowFrameRate = true;
            ViewPort3D.ZoomExtents();
        }
Exemplo n.º 9
0
        public static ContainerUIElement3D CreateUIElement3D(List <Viewport2DVisual3D> visual3DList)
        {
            ContainerUIElement3D element3D = new ContainerUIElement3D();

            element3D.Transform = CreateTransform3DGroup();

            foreach (Viewport2DVisual3D visual3D in visual3DList)
            {
                element3D.Children.Add(visual3D);
            }

            return(element3D);
        }
Exemplo n.º 10
0
        public MainWindow()
        {
            InitializeComponent();

            var container   = new ContainerUIElement3D();
            var element     = new ModelUIElement3D();
            var geometry    = new GeometryModel3D();
            var meshBuilder = new MeshBuilder();

            meshBuilder.AddSphere(new Point3D(0, 0, 0), 2, 100, 50);
            geometry.Geometry  = meshBuilder.ToMesh();
            geometry.Material  = Materials.Green;
            element.Model      = geometry;
            element.Transform  = new TranslateTransform3D(5, 0, 0);
            element.MouseDown += this.ContainerElementMouseDown;
            container.Children.Add(element);
            view1.Children.Add(container);
        }
Exemplo n.º 11
0
        private void SetupTheSceneWithSpotLight()
        {
            SceneMainControl = new Grid();
            SceneMainControl.Children.Add(new Rectangle()
            {
                Stroke = Brushes.Black, StrokeThickness = 1
            });


            SceneViewport = new Viewport3D();
            SceneViewport.ClipToBounds = true;

            SceneCamera = new OrthographicCamera(new Point3D(0, 20, 10000), new Vector3D(0, 0, -1), new Vector3D(0, 1, 0), 3)
            {
                FarPlaneDistance = 1000000, Width = 150
            };
            SceneViewport.Camera = SceneCamera;
            ContainerUIElement3D initialisingContainer = new ContainerUIElement3D()
            {
                IsHitTestVisible = false
            };
            ModelUIElement3D initialisingLightModel = new ModelUIElement3D();

            SceneLights = new Model3DGroup();

            SceneLights.Children.Add(new AmbientLight(Colors.DarkGray));
            SceneLights.Children.Add(new DirectionalLight(Colors.Gray, new Vector3D(0.234, -0.114, -0.965)));

            initialisingLightModel.Model = SceneLights;
            initialisingContainer.Children.Add(initialisingLightModel);
            SceneElements = new ContainerUIElement3D();
            initialisingContainer.Children.Add(SceneElements);
            SceneTrackball = new ViewPortTools.TrackballDecorator();
            SceneViewport.Children.Add(initialisingContainer);
            SceneTrackball.Content = SceneViewport;
            SceneLights.Transform  = SceneTrackball.Transform;
            SceneMainControl.Children.Add(SceneTrackball);

            SceneMainControl.IsManipulationEnabled = true;
            SceneMainControl.ManipulationDelta    += SceneMainControl_ManipulationDelta;

            Touch.FrameReported += new TouchFrameEventHandler(Touch_FrameReported);
        }
Exemplo n.º 12
0
        private Visual3D CreateMarkerTree(CompositeElement joint)
        {
            ContainerUIElement3D marker = CreateMarker(1, 0.05);

            joint.Visual = marker;

            Transform3DGroup transforms = new Transform3DGroup();

            marker.Transform = transforms;

            transforms.Children.Add(new MatrixTransform3D());

            Vector3D offset = joint.Offset.Value;

            transforms.Children.Add(new TranslateTransform3D(offset));

            foreach (CompositeElement child in joint.JointList)
            {
                marker.Children.Add(CreateMarkerTree(child));
            }

            return(marker);
        }
Exemplo n.º 13
0
        public static ContainerUIElement3D Map3DModelToUIElement3D(Map3DModel map3D)
        {
            List <Viewport2DVisual3D> visual3DList = new List <Viewport2DVisual3D>();

            for (int i = 0; i < map3D.Geometries.Count; i++)
            {
                CylinderVisual3DModel cylinderVisual3DModel = map3D.Geometries[i];

                DiffuseMaterial imageMaterial = new DiffuseMaterial(new ImageBrush(new BitmapImage(new Uri(string.Format(@"Images\MapTextures\{0}.png", "1"), UriKind.Relative))));
                //MeshGeometry3D upperGeometry3D = Visual3DCreateHelper.CreateGeometry3D(cylinderVisual3DModel.UpperUndersurface);
                //Material upperMaterial = Visual3DCreateHelper.CreateMaterial3D(map3D.Materials[i][0]);

                //MaterialGroup mg = new MaterialGroup();
                //mg.Children.Add(upperMaterial);
                ////mg.Children.Add(imageMaterial);

                //Viewport2DVisual3D upperVisual3D = Visual3DCreateHelper.CreateVisual3D(upperGeometry3D, mg);
                //visual3DList.Add(upperVisual3D);

                MeshGeometry3D lowerGeometry3D = Visual3DCreateHelper.CreateGeometry3D(cylinderVisual3DModel.LowerUndersurface);
                Material       lowerMaterial   = Visual3DCreateHelper.CreateMaterial3D(map3D.Materials[i][1]);
                MaterialGroup  mg1             = new MaterialGroup();
                mg1.Children.Add(lowerMaterial);
                //mg1.Children.Add(imageMaterial);
                Viewport2DVisual3D lowerVisual3D = Visual3DCreateHelper.CreateVisual3D(lowerGeometry3D, mg1);
                visual3DList.Add(lowerVisual3D);


                MeshGeometry3D     sideGeometry3D = Visual3DCreateHelper.CreateGeometry3D(cylinderVisual3DModel.SideSurface);
                Material           sideMaterial   = Visual3DCreateHelper.CreateMaterial3D(map3D.Materials[i][2]);
                Viewport2DVisual3D sideVisual3D   = Visual3DCreateHelper.CreateVisual3D(sideGeometry3D, sideMaterial);
                visual3DList.Add(sideVisual3D);
            }
            ContainerUIElement3D uIElement3D = Visual3DCreateHelper.CreateUIElement3D(visual3DList);

            return(uIElement3D);
        }
Exemplo n.º 14
0
        public MainWindow()
        {
            InitializeComponent();

            var c  = new ContainerUIElement3D();
            var e  = new ModelUIElement3D();
            var gm = new GeometryModel3D();
            var mb = new MeshBuilder();

            mb.AddSphere(new Point3D(0, 0, 0), 2, 100, 50);
            gm.Geometry  = mb.ToMesh();
            gm.Material  = Materials.Red;
            e.Model      = gm;
            e.Transform  = new TranslateTransform3D(5, 0, 0);
            e.MouseDown += (sender, args) => gm.Material = Materials.Yellow;
            c.Children.Add(e);
            view1.Children.Add(c);

            //e.Visibility = Visibility.Hidden;
            //this.Dispatcher.BeginInvoke(DispatcherPriority.Send, new ThreadStart(delegate
            //{
            //    e.Visibility = Visibility.Visible;
            //}));
        }
Exemplo n.º 15
0
        public TranslatePartGizmo(Viewport3D viewport)
        {
            this.viewport = viewport;
            x             = new TranslatePartVisual3D();
            y             = new TranslatePartVisual3D();
            x1            = new TranslationVisual3D(new Point3D(0, 0, 0), new Vector3D(1, 0, 0));
            y1            = new TranslationVisual3D(new Point3D(0, 0, 0), new Vector3D(1, 0, 0));
            x2            = new TranslationVisual3D(new Point3D(0, 0, 0), new Vector3D(-1, 0, 0));
            y2            = new TranslationVisual3D(new Point3D(0, 0, 0), new Vector3D(-1, 0, 0));

            containerX = new ContainerUIElement3D();
            containerX.Children.Add(x);
            containerY = new ContainerUIElement3D();
            containerY.Children.Add(y);

            containerX1 = new ContainerUIElement3D();
            containerY1 = new ContainerUIElement3D();
            containerX1.Children.Add(x1);
            containerY1.Children.Add(y1);

            containerX2 = new ContainerUIElement3D();
            containerY2 = new ContainerUIElement3D();
            containerX2.Children.Add(x2);
            containerY2.Children.Add(y2);



            x.Material  = new DiffuseMaterial(Brushes.LightCoral.MakeTransparent(0.6));
            y.Material  = new DiffuseMaterial(Brushes.LightSkyBlue.MakeTransparent(0.6));
            x1.Material = new DiffuseMaterial(Brushes.Red);
            y1.Material = new DiffuseMaterial(Brushes.Blue);
            x2.Material = new DiffuseMaterial(Brushes.Red);
            y2.Material = new DiffuseMaterial(Brushes.Blue);

            var scales     = new[] { x, y };
            var containers = new[] { containerX, containerY };

            for (int i = 0; i < 2; i++)
            {
                int iCopy     = i;
                var scale     = scales[i];
                var container = containers[i];
                var curMat    = scale.Material;
                container.MouseEnter += (sender, args) =>
                {
                    scale.Material = new DiffuseMaterial(Brushes.Yellow);
                };
                container.MouseLeave += (sender, args) =>
                {
                    scale.Material = curMat;
                };
                container.MouseDown += (sender, args) =>
                {
                    Mouse.Capture(container);
                    whichAxis    = iCopy + 1;
                    lastPosition = args.GetPosition(container);
                };
                container.MouseMove += (sender, args) =>
                {
                    if (whichAxis != 0)
                    {
                        Point curPosition = args.GetPosition(container);
                        //  double dy = Math.Pow(2,(curPosition.Y - lastPosition.Y)/200);
                        //  double dx = Math.Pow(2, (curPosition.X - lastPosition.X)/200);

                        Point screenCenter = viewport.Point3DtoPoint2D(center);
                        Viewport3DHelper.Point3DtoPoint2D(viewport, center);
                        Vector sX = viewport.Point3DtoPoint2D(center + xAxis) - screenCenter;
                        Vector sY = viewport.Point3DtoPoint2D(center + yAxis) - screenCenter;

                        ScaleTransform scaling = null;
                        if (whichAxis == 1)
                        {
                            //scale along x
                            Vector offset = curPosition - lastPosition;
                            double proj   = sX * offset / sX.Length;
                            scaling = new ScaleTransform(0.4 * proj, 0);
                        }
                        else if (whichAxis == 2)
                        {
                            //scale along y
                            Vector offset = curPosition - lastPosition;
                            double proj   = sY * offset / sY.Length;
                            scaling = new ScaleTransform(0, 0.4 * proj);
                        }


                        if (Scaled != null)
                        {
                            Scaled(scaling);
                        }

                        lastPosition = curPosition;
                    }
                };
                container.MouseUp += (sender, args) =>
                {
                    Mouse.Capture(null);
                    whichAxis = 0;
                };
            }
        }
Exemplo n.º 16
0
        /// <summary>
        ///     Read FileData
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public ContainerUIElement3D ReadFileData(string path)
        {
            var extension = Path.GetExtension(path);
            // var visModel = new ModelVisual3D();
            var container = new ContainerUIElement3D();

            switch (extension)
            {
            case ".obj":
                var currentHelixObjReader = new ObjReader();
                try
                {
                    var myModel = currentHelixObjReader.Read(path);

                    foreach (var model in myModel.Children)
                    {
                        if (model is GeometryModel3D)
                        {
                            var geom = model as GeometryModel3D;

                            var element = new ModelUIElement3D {
                                Model = geom
                            };
                            element.MouseDown += (sender1, e1) => OnElementMouseDown(sender1, e1, this);
                            container.Children.Add(element);
                        }
                    }
                }
                catch (Exception)
                {
                    // ignore
                }
                break;

            case ".stl":
                var currentHelixStlReader = new StLReader();
                try
                {
                    var myModel = currentHelixStlReader.Read(path);

                    foreach (var model in myModel.Children)
                    {
                        if (model is GeometryModel3D)
                        {
                            var geom = model as GeometryModel3D;

                            var element = new ModelUIElement3D {
                                Model = geom
                            };
                            element.MouseDown += (sender1, e1) => OnElementMouseDown(sender1, e1, this);
                            container.Children.Add(element);
                        }
                    }
                }
                catch (Exception)
                {
                    // ignore
                }
                break;
            }

            return(container);
        }
        public List <MeshIdandGeometry> VisualizeBimPlusDataAsGenericElements(List <DtObject> baseElements, object sender, Color Color = default(Color), double transparency = 0)
        {
            if (InputPorts[0].Data == null)
            {
                return(null);
            }

            var max = baseElements.Count;
            var m_i = 1;

            // Init some lists and containers
            var container = new ContainerUIElement3D();
            var geometry  = new List <MeshIdandGeometry>();

            // Init the MeshBuilde
            var meshBuilder = new MeshBuilder(false, false);

            // Loop the items of each list
            foreach (var item in baseElements)
            {
                var color = item.AttributeGroups["geometry"].GetProperty("color") is System.Drawing.Color ? (System.Drawing.Color)item.AttributeGroups["geometry"].GetProperty("color") : new System.Drawing.Color();

                Color col;
                if (Color != default(Color))
                {
                    col = Color;
                }
                else
                {
                    // Check Color
                    col = new Color {
                        A = color.A, G = color.G, R = color.R, B = color.B
                    };
                }

                var brush = new SolidColorBrush {
                    Color = col, Opacity = 1 - transparency
                };

                var myGeometryModel = new GeometryModel3D
                {
                    Material     = new DiffuseMaterial(brush),
                    BackMaterial = new DiffuseMaterial(brush),
                    Geometry     = MeshObject(item, meshBuilder),
                    Transform    = new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(1, 0, 0), 90))
                };

                myGeometryModel.Freeze();

                // Save the parsed data in the objects
                var meshAndId = new MeshIdandGeometry
                {
                    Id       = item.Id,
                    Model3D  = myGeometryModel,
                    Material = myGeometryModel.Material
                };

                geometry.Add(meshAndId);
                // Save the parsed information in the elements attribute group
                item.AttributeGroups["geometry"]["parsedGeometry"] = meshAndId;

                // Refresh the builder so that we do not duplicate the meshes
                meshBuilder = new MeshBuilder(false, false);

                m_i++;
                var progressPercentage = Convert.ToInt32(((double)m_i / max) * 100);
                var backgroundWorker   = sender as BackgroundWorker;
                backgroundWorker?.ReportProgress(progressPercentage, item.Id);
            }

            container.Children.Clear();
            return(geometry);
        }
        private void WorkerOnRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs runWorkerCompletedEventArgs)
        {
            if (runWorkerCompletedEventArgs.Result == null)
            {
                Dispatcher.BeginInvoke((Action) delegate()
                {
                    ProgressBar.Visibility   = Visibility.Collapsed;
                    ProgressLabel.Visibility = Visibility.Collapsed;
                });
                return;
            }

            Dispatcher.BeginInvoke((Action) delegate()
            {
                ProgressBar.Visibility   = Visibility.Collapsed;
                ProgressLabel.Visibility = Visibility.Collapsed;
            });

            _container = new ContainerUIElement3D();

            // BimPlusData
            if (runWorkerCompletedEventArgs.Result.GetType() == typeof(List <MeshIdandGeometry>))
            {
                var geometry = runWorkerCompletedEventArgs.Result as List <MeshIdandGeometry>;

                // Set it global
                MyGeometry        = geometry;
                _fallBackGeometry = new List <MeshIdandGeometry>();

                if (MyGeometry != null)
                {
                    foreach (var mygeometry in MyGeometry)
                    {
                        // var newgeometry = mygeometry.Model3D;
                        var newgeometry = mygeometry.Model3D.Clone();
                        _fallBackGeometry.Add(new MeshIdandGeometry {
                            Id = mygeometry.Id, Material = mygeometry.Material, Model3D = newgeometry
                        });
                        var element = new ModelUIElement3D {
                            Model = newgeometry
                        };
                        element.MouseDown += (sender1, e1) => OnElementMouseDown(sender1, e1, this);
                        _container.Children.Add(element);
                    }
                }

                // First of all clear the view
                HelixViewport3D.Children.Clear();
                HelixViewport3D.Children.Add(_container);
                HelixViewport3D.CameraController.ZoomExtents();
                HelixViewport3D.Children.Add(new SunLight());
                HelixViewport3D.Children.Add(new DefaultLights());
            }
            // Other File Data
            else if (runWorkerCompletedEventArgs.Result is ModelVisual3D)
            {
                var model = runWorkerCompletedEventArgs.Result as ModelVisual3D;

                HelixViewport3D.Children.Clear();
                HelixViewport3D.Children.Add(model);
                HelixViewport3D.CameraController.ZoomExtents();
                HelixViewport3D.Children.Add(new DefaultLights());
            }
        }
Exemplo n.º 19
0
        public _3DRotate()
        {
            InitializeComponent();
            this.Content = grid;
            var        brush      = (Path)FindResource("WE");
            var        brush2     = (Path)FindResource("ER");
            Viewport3D viewport3D = new Viewport3D();

            viewport3D.Camera = new PerspectiveCamera()
            {
                Position = new Point3D(0, 0, 72), LookDirection = new Vector3D(0, 0, -1)
            };
            var material = new DiffuseMaterial()
            {
            };
            var v1 = new Viewport2DVisual3D()
            {
                Visual = brush, Material = material,
            };

            Viewport2DVisual3D.SetIsVisualHostMaterial(material, true);
            v1.Geometry = new MeshGeometry3D()
            {
                Positions = new Point3DCollection(
                    new List <Point3D>()
                {
                    new Point3D(-30, 30, 0), new Point3D(-30, -30, 0), new Point3D(30, -30, 0), new Point3D(30, 30, 0)
                }),
                TriangleIndices = new Int32Collection(new List <int>()
                {
                    0, 1, 2, 0, 2, 3
                }),
                TextureCoordinates = new PointCollection(new List <Point>()
                {
                    new Point(0, 0), new Point(0, 1), new Point(1, 1), new Point(1, 0)
                })
            };
            var material2 = new DiffuseMaterial()
            {
            };
            var v2 = new Viewport2DVisual3D()
            {
                Visual = brush2, Material = material2
            };

            Viewport2DVisual3D.SetIsVisualHostMaterial(material2, true);
            v2.Geometry = new MeshGeometry3D()
            {
                Positions = new Point3DCollection(
                    new List <Point3D>()
                {
                    new Point3D(30, 30, 0), new Point3D(30, -30, 0), new Point3D(-30, -30, 0), new Point3D(-30, 30, 0)
                }),
                TriangleIndices = new Int32Collection(new List <int>()
                {
                    0, 1, 2, 0, 2, 3
                }),
                TextureCoordinates = new PointCollection(new List <Point>()
                {
                    new Point(0, 0), new Point(0, 1), new Point(1, 1), new Point(1, 0)
                })
            };
            ContainerUIElement3D containerUIElement3D = new ContainerUIElement3D();

            viewport3D.Children.Add(containerUIElement3D);
            containerUIElement3D.Children.Add(v1);
            containerUIElement3D.Children.Add(v2);

            AxisAngleRotation3D aaa = new AxisAngleRotation3D()
            {
                Angle = 0, Axis = new Vector3D(0, 1, 0)
            };

            RegisterName("aar", aaa);

            RotateTransform3D rotate = new RotateTransform3D();

            rotate.Rotation = aaa;
            containerUIElement3D.Transform = rotate;

            ModelVisual3D modelVisual3D = new ModelVisual3D();
            var           light         = new AmbientLight()
            {
                Color = Color.FromArgb(255, 255, 255, 255),
            };

            modelVisual3D.Content = light;
            viewport3D.Children.Add(modelVisual3D);

            grid.Children.Add(viewport3D);
            grid.Background = Brushes.Yellow;
            var    i        = 0;
            Button btn_test = new Button()
            {
                Content = "test"
            };

            //grid.Children.Add(btn_test);

            grid.MouseLeftButtonDown += (sender, e) =>
            {
                DoubleAnimation da = new DoubleAnimation();
                da.Duration = new Duration(TimeSpan.FromSeconds(1));
                if (i % 2 == 1)
                {
                    da.To = 0d;
                }
                else
                {
                    da.To = 180d;
                }
                AxisAngleRotation3D aar = Application.Current.MainWindow.FindName("aar") as AxisAngleRotation3D;
                aar.BeginAnimation(AxisAngleRotation3D.AngleProperty, da);

                i++;
            };
        }
Exemplo n.º 20
0
        private ContainerUIElement3D CreateMarker(double length, double width)
        {
            length /= m_scale;
            width  /= m_scale;

            ContainerUIElement3D visual = new ContainerUIElement3D();

            visual.Children.Add(new ModelUIElement3D()
            {
                Model = new GeometryModel3D()
                {
                    Geometry = new MeshGeometry3D()
                    {
                        Positions = new Point3DCollection()
                        {
                            new Point3D(length, 0, 0),
                            new Point3D(0, width, 0),
                            new Point3D(0, -width, 0),
                            new Point3D(length, 0, 0),
                            new Point3D(0, 0, width),
                            new Point3D(0, 0, -width),
                        },
                    },
                    Material = new DiffuseMaterial()
                    {
                        Brush = new SolidColorBrush(Colors.Red),
                    },
                    BackMaterial = new DiffuseMaterial()
                    {
                        Brush = new SolidColorBrush(Colors.Red),
                    },
                },
            });
            visual.Children.Add(new ModelUIElement3D()
            {
                Model = new GeometryModel3D()
                {
                    Geometry = new MeshGeometry3D()
                    {
                        Positions = new Point3DCollection()
                        {
                            new Point3D(0, length, 0),
                            new Point3D(width, 0, 0),
                            new Point3D(-width, 0, 0),
                            new Point3D(0, length, 0),
                            new Point3D(0, 0, width),
                            new Point3D(0, 0, -width),
                        },
                    },
                    Material = new DiffuseMaterial()
                    {
                        Brush = new SolidColorBrush(Colors.Lime),
                    },
                    BackMaterial = new DiffuseMaterial()
                    {
                        Brush = new SolidColorBrush(Colors.Lime),
                    },
                },
            });
            visual.Children.Add(new ModelUIElement3D()
            {
                Model = new GeometryModel3D()
                {
                    Geometry = new MeshGeometry3D()
                    {
                        Positions = new Point3DCollection()
                        {
                            new Point3D(0, 0, length),
                            new Point3D(width, 0, 0),
                            new Point3D(-width, 0, 0),
                            new Point3D(0, 0, length),
                            new Point3D(0, width, 0),
                            new Point3D(0, -width, 0),
                        },
                    },
                    Material = new DiffuseMaterial()
                    {
                        Brush = new SolidColorBrush(Colors.Blue),
                    },
                    BackMaterial = new DiffuseMaterial()
                    {
                        Brush = new SolidColorBrush(Colors.Blue),
                    },
                },
            });

            return(visual);
        }
Exemplo n.º 21
0
        private ContainerUIElement3D LocateModelContainer()
        {
            ContainerUIElement3D container = _viewport.Children[0] as ContainerUIElement3D;

            return(container);
        }
Exemplo n.º 22
0
 private void CreateViewport()
 {
     _viewport       = ResourceManager.Get <Viewport3D>("3DViewport_Interactive");
     _modelContainer = LocateModelContainer();
     _modelContainer.MouseLeftButtonDown += ModelContainer_MouseLeftButtonDown;
 }
Exemplo n.º 23
0
        private void Container_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            ContainerUIElement3D container = sender as ContainerUIElement3D;

            Transform3DGroup     transform3DGroup     = container.Transform as Transform3DGroup;
            TranslateTransform3D translateTransform3D = transform3DGroup.Children[0] as TranslateTransform3D;
            ScaleTransform3D     scaleTransform3D     = transform3DGroup.Children[1] as ScaleTransform3D;
            RotateTransform3D    rotateTransform3D    = transform3DGroup.Children[2] as RotateTransform3D;

            bool isClicked = false;

            if (translateTransform3D.OffsetZ == 0)
            {
                isClicked = false;
            }
            else
            {
                isClicked = true;
            }

            //位置变换
            DoubleAnimation doubleAnimationZ = new DoubleAnimation();

            doubleAnimationZ.BeginTime      = new TimeSpan(0, 0, 0);
            doubleAnimationZ.Duration       = TimeSpan.FromMilliseconds(500);
            doubleAnimationZ.From           = translateTransform3D.OffsetZ;
            doubleAnimationZ.EasingFunction = new ExponentialEase()
            {
                EasingMode = EasingMode.EaseInOut
            };
            if (isClicked)
            {
                doubleAnimationZ.To = 0;
            }
            else
            {
                doubleAnimationZ.To = -95;
            }
            translateTransform3D.BeginAnimation(TranslateTransform3D.OffsetZProperty, doubleAnimationZ);

            //缩放
            DoubleAnimation scaleTransformAnimation = new DoubleAnimation();

            scaleTransformAnimation.BeginTime = new TimeSpan(0, 0, 0);
            scaleTransformAnimation.Duration  = TimeSpan.FromMilliseconds(500);
            scaleTransformAnimation.From      = scaleTransform3D.ScaleX;
            if (isClicked)
            {
                scaleTransformAnimation.To = 1;
            }
            else
            {
                scaleTransformAnimation.To = 1.5;
            }
            scaleTransform3D.BeginAnimation(ScaleTransform3D.ScaleXProperty, scaleTransformAnimation);
            scaleTransform3D.BeginAnimation(ScaleTransform3D.ScaleYProperty, scaleTransformAnimation);
            scaleTransform3D.BeginAnimation(ScaleTransform3D.ScaleZProperty, scaleTransformAnimation);

            ////点击变色
            //Color newsurfaceColor;
            //if (isClicked)
            //{
            //    newsurfaceColor = Color.FromArgb(0x99, 0x00, 0xff, 0xff);
            //}
            //else
            //{
            //    newsurfaceColor = Color.FromArgb(0xff, 0xff, 0x00, 0x00);
            //}

            //for (int i = 1; i < container.Children.Count; i = i + 3)
            //{
            //    var visualElement = container.Children[i] as Viewport2DVisual3D;
            //    if (visualElement != null)
            //    {
            //        visualElement.Material = new DiffuseMaterial(new SolidColorBrush(newsurfaceColor));
            //    }
            //}

            isClicked = !isClicked;
        }
Exemplo n.º 24
0
        public RotationGizmo()
        {
            x    = new TorusVisual3D(innderRadius, outerRadius);
            y    = new TorusVisual3D(innderRadius, outerRadius);
            z    = new TorusVisual3D(innderRadius, outerRadius);
            xHit = new TorusVisual3D(innderRadius - selectionMargin, outerRadius + selectionMargin);
            yHit = new TorusVisual3D(innderRadius - selectionMargin, outerRadius + selectionMargin);
            zHit = new TorusVisual3D(innderRadius - selectionMargin, outerRadius + selectionMargin);

            containerX = new ContainerUIElement3D();
            containerX.Children.Add(x);
            containerX.Children.Add(xHit);
            containerY = new ContainerUIElement3D();
            containerY.Children.Add(y);
            containerY.Children.Add(yHit);
            containerZ = new ContainerUIElement3D();
            containerZ.Children.Add(z);
            containerZ.Children.Add(zHit);

            x.Material        = xMaterial;
            y.Material        = yMaterial;
            z.Material        = zMaterial;
            x.BackMaterial    = y.BackMaterial = z.BackMaterial = null;
            xHit.Material     = yHit.Material = zHit.Material = new EmissiveMaterial(Brushes.Transparent);
            xHit.BackMaterial = yHit.BackMaterial = zHit.BackMaterial = null;

            var torii      = new[] { x, y, z };
            var hits       = new[] { xHit, yHit, zHit };
            var containers = new[] { containerX, containerY, containerZ };

            for (int i = 0; i < 3; i++)
            {
                int iCopy     = i;
                var torus     = torii[i];
                var hit       = hits[i];
                var container = containers[i];
                var curMat    = torus.Material;
                container.MouseEnter += (sender, args) =>
                {
                    torus.Material = new DiffuseMaterial(Brushes.Yellow);
                };
                container.MouseLeave += (sender, args) =>
                {
                    torus.Material = curMat;
                };
                container.MouseDown += (sender, args) =>
                {
                    Mouse.Capture(container);
                    whichAxis    = iCopy + 1;
                    lastPosition = args.GetPosition(container);
                };
                container.MouseMove += (sender, args) =>
                {
                    if (whichAxis != 0)
                    {
                        Point  curPosition = args.GetPosition(container);
                        double offset      = curPosition.Y - lastPosition.Y;
                        double angle       = offset / 300 * 180;

                        Rotation3D rotation = new AxisAngleRotation3D(Transform.Transform(AXES[whichAxis - 1]), angle);
                        if (Rotated != null)
                        {
                            Rotated(rotation);
                        }

                        lastPosition = curPosition;
                    }
                };
                container.MouseUp += (sender, args) =>
                {
                    Mouse.Capture(null);
                    whichAxis = 0;
                };
            }
        }
Exemplo n.º 25
0
        private bool WalkVisual3DChildren(Visual3DCollection visual3DCollection, Matrix3D currentTransform, RectangleHitTestResultTreeNode node)
        {
            bool flag1 = false;

            if (visual3DCollection == null)
            {
                return(false);
            }
            foreach (Visual3D reference in visual3DCollection)
            {
                Matrix3D currentTransform1 = currentTransform;
                if (reference.Transform != null)
                {
                    currentTransform1.Prepend(reference.Transform.Value);
                }
                if (this.TestSphereEnclosingBoundingBoxAgainstFrustum(VisualTreeHelper.GetContentBounds(reference), currentTransform1))
                {
                    RectangleHitTestResultTreeNode testResultTreeNode = new RectangleHitTestResultTreeNode(node, (DependencyObject)reference);
                    bool                 flag2                = false;
                    ModelVisual3D        modelVisual3D        = reference as ModelVisual3D;
                    ModelUIElement3D     modelUiElement3D     = reference as ModelUIElement3D;
                    ContainerUIElement3D containerUiElement3D = reference as ContainerUIElement3D;
                    Viewport2DVisual3D   viewport2Dvisual3D   = reference as Viewport2DVisual3D;
                    if (modelVisual3D != null)
                    {
                        if (this.WalkModelTree(modelVisual3D.Content, currentTransform1, testResultTreeNode))
                        {
                            flag1 = true;
                        }
                        if (this.WalkVisual3DChildren(modelVisual3D.Children, currentTransform1, testResultTreeNode))
                        {
                            flag1 = true;
                        }
                    }
                    else if (modelUiElement3D != null)
                    {
                        if (this.WalkModelTree(modelUiElement3D.Model, currentTransform1, testResultTreeNode))
                        {
                            flag1 = true;
                        }
                    }
                    else if (containerUiElement3D != null)
                    {
                        if (this.WalkVisual3DChildren(containerUiElement3D.Children, currentTransform1, testResultTreeNode))
                        {
                            flag1 = true;
                        }
                    }
                    else if (viewport2Dvisual3D != null && viewport2Dvisual3D.Geometry != null)
                    {
                        flag2 = this.HitTestAgainstGeometry((DependencyObject)viewport2Dvisual3D, viewport2Dvisual3D.Geometry.Bounds, viewport2Dvisual3D.Transform, viewport2Dvisual3D.Geometry as MeshGeometry3D, currentTransform, viewport2Dvisual3D.Material, (Material)null, node);
                    }
                    if (flag1)
                    {
                        node.AddChild(testResultTreeNode);
                    }
                    if (flag2)
                    {
                        flag1 = true;
                    }
                }
            }
            return(flag1);
        }
Exemplo n.º 26
0
 private void CreateViewport()
 {
     _viewport       = ResourceManager.Get <Viewport3D>("3DViewport_Interactive");
     _modelContainer = LocateModelContainer();
 }