示例#1
0
文件: View.xaml.cs 项目: Halamch/FPGA
        public static void drawTriangle(Point3D p0, Point3D p1, Point3D p2, Color color, Viewport3D viewport, bool firstpiece)
        {
            MeshGeometry3D mesh = new MeshGeometry3D();

            mesh.Positions.Add(p0);
            mesh.Positions.Add(p1);
            mesh.Positions.Add(p2);
            mesh.TriangleIndices.Add(0);
            if (firstpiece)
            {
                mesh.TriangleIndices.Add(2);
                mesh.TriangleIndices.Add(1);
            }
            else
            {
                mesh.TriangleIndices.Add(1);
                mesh.TriangleIndices.Add(2);
            }


            SolidColorBrush brush = new SolidColorBrush();

            brush.Color = color;
            Material material = new DiffuseMaterial(brush);

            GeometryModel3D  geometry = new GeometryModel3D(mesh, material);
            ModelUIElement3D model    = new ModelUIElement3D();

            model.Model = geometry;

            viewport.Children.Add(model);
            // MessageBox.Show(viewport.Children[viewport.Children.Count - 1].ToString());
        }
示例#2
0
        public static void CreateTriangleFace(Point3D p0, Point3D p1, Point3D p2,
                                              Color color, bool isWireframe, Viewport3D viewport)
        {
            MeshGeometry3D mesh = new MeshGeometry3D();

            mesh.Positions.Add(p0);
            mesh.Positions.Add(p1);
            mesh.Positions.Add(p2);
            mesh.TriangleIndices.Add(0);
            mesh.TriangleIndices.Add(1);
            mesh.TriangleIndices.Add(2);
            SolidColorBrush brush = new SolidColorBrush();

            brush.Color = color;
            Material         material = new DiffuseMaterial(brush);
            GeometryModel3D  geometry = new GeometryModel3D(mesh, material);
            ModelUIElement3D model    = new ModelUIElement3D();

            model.Model = geometry;
            viewport.Children.Add(model);

            if (isWireframe == true)
            {
                ScreenSpaceLines3D ssl = new ScreenSpaceLines3D();
                ssl.Points.Add(p0);
                ssl.Points.Add(p1);
                ssl.Points.Add(p1);
                ssl.Points.Add(p2);
                ssl.Points.Add(p2);
                ssl.Points.Add(p0);
                ssl.Color     = Colors.Black;
                ssl.Thickness = 2;
                viewport.Children.Add(ssl);
            }
        }
示例#3
0
        //创建pcb板
        private void CreatePcbBoard()
        {
            GeometryModel3D geoModel3d = new GeometryModel3D();

            //创建pcb板子几何形状
            MeshGeometry3D mesh3d = new MeshGeometry3D();

            mesh3d.Positions       = CreatePcbBoardPoints3D(30, 20, 1);
            mesh3d.TriangleIndices = CreatePcbBoardPointsIndices();
            geoModel3d.Geometry    = mesh3d;

            //PCB表面材质
            MaterialGroup    frontMaterialGroup = new MaterialGroup();
            DiffuseMaterial  material1          = new DiffuseMaterial(Brushes.DarkGreen);
            SpecularMaterial material2          = new SpecularMaterial(Brushes.Green, 100);

            frontMaterialGroup.Children.Add(material1);
            frontMaterialGroup.Children.Add(material2);
            geoModel3d.Material = frontMaterialGroup;

            // //PCB背面材质
            DiffuseMaterial backMaterial = new DiffuseMaterial(Brushes.Gray);

            geoModel3d.BackMaterial = backMaterial;

            ModelUIElement3D pcbUIEle3d = new ModelUIElement3D();

            pcbUIEle3d.Model = geoModel3d;

            PCBContainer.Children.Add(pcbUIEle3d);
        }
示例#4
0
        private void InitialModels()
        {
            for (int i = 0; i < 6; ++i)
            {
                var element = new ModelUIElement3D();
                CubeFaceModels.Add(element);
                Children.Add(CubeFaceModels[i]);
                element.MouseLeftButtonDown += this.FaceMouseLeftButtonDown;
            }
            this.Children.Add(circle);

            for (int i = 0; i < xAligned.Length + yAligned.Length + zAligned.Length; ++i)
            {
                var element = new ModelUIElement3D();
                EdgeModels.Add(element);
                element.MouseLeftButtonDown += FaceMouseLeftButtonDown;
                element.MouseEnter          += EdggesMouseEnters;
                element.MouseLeave          += EdgesMouseLeaves;
            }

            for (int i = 0; i < cornerPoints.Length; ++i)
            {
                var element = new ModelUIElement3D();
                CornerModels.Add(element);
                element.MouseLeftButtonDown += FaceMouseLeftButtonDown;
                element.MouseEnter          += EdggesMouseEnters;
                element.MouseLeave          += EdgesMouseLeaves;
            }

            UpdateVisuals();
        }
示例#5
0
        private Visual BuildSphere(SkyDrawingObject[] objects)
        {
            if (Projection == null)
            {
                return(null);
            }

            rebuild();

            SphereMesh mesh = new SphereMesh(Radius, Meridians, Parallels);

            mesh.FromSphereToPlace += (Projection as SphereProjection).FromSphereToPlace;
            mesh.Reverse            = Reverse;

            DrawingBrush brush = new DrawingBrush(DrawField(objects));

            RenderOptions.SetCachingHint(brush, CachingHint.Cache);
            DiffuseMaterial material = new DiffuseMaterial(brush);

            GeometryModel3D  model   = new GeometryModel3D(mesh.Mesh, material);
            ModelUIElement3D element = new ModelUIElement3D();

            element.Model = model;

            CreateLight();

            view3d.Children.Add(element);

            return(view3d);
        }
示例#6
0
        private void ClearModel(FrameworkElement elt, object item)
        {
            ModelUIElement3D model = elt.GetValue(LinkedModelProperty) as ModelUIElement3D;

            _modelContainer.Children.Remove(model);

            // Update the positions of all model items
            int removed = (int)model.GetValue(LinkedElementPositionProperty);

            foreach (Visual3D m in _modelContainer.Children)
            {
                int val = (int)m.GetValue(LinkedElementPositionProperty);
                if (val > removed)
                {
                    m.SetValue(LinkedElementPositionProperty, val - 1);
                }
            }

            model.ClearValue(LinkedElementProperty);
            elt.ClearValue(LinkedModelProperty);

            // Update SelectedIndex if needed
            if (SelectedIndex >= 0 && SelectedIndex < Items.Count)
            {
                ReflowItems();
            }
            else
            {
                SelectedIndex = Math.Max(0, Math.Min(SelectedIndex, Items.Count - 1));
            }
        }
示例#7
0
        /// <summary>
        /// Constructor.
        /// </summary>
        public CompositeBar3D()
            : base()
        {
            SolidColorBrush polygonBrush = new SolidColorBrush();

            polygonBrush.Color   = Color.FromArgb(0xFF, 0xFF, 0xDE, 0x46);
            polygonBrush.Opacity = 1.0;
            _defaultMaterial     = new DiffuseMaterial(polygonBrush);


            GeometryModel3D model0 = new GeometryModel3D();

            model0.Material = _defaultMaterial;
            _element0       = new ModelUIElement3D();
            _element0.Model = model0;
            this.AddVisual3DChild(_element0);

            GeometryModel3D model1 = new GeometryModel3D();

            model1.Material = _defaultMaterial;
            _element1       = new ModelUIElement3D();
            _element1.Model = model1;
            this.AddVisual3DChild(_element1);

            GeometryModel3D model2 = new GeometryModel3D();

            model2.Material = _defaultMaterial;
            _element2       = new ModelUIElement3D();
            _element2.Model = model2;
            this.AddVisual3DChild(_element2);
        }
示例#8
0
        public HitTestFilterBehavior MyHitTestFilter(DependencyObject o)
        {
            if (o.GetType() == typeof(Viewport3DVisual))
            {
                return(HitTestFilterBehavior.Continue);
            }
            else if (o.GetType() == typeof(ModelUIElement3D))
            {
                ModelUIElement3D j = (ModelUIElement3D)o;
                bool             d = (bool)j.GetValue(UIElement3D.IsHitTestVisibleProperty);

                if (d == false)
                {
                    return(HitTestFilterBehavior.ContinueSkipSelfAndChildren);
                }
                else
                {
                    return(HitTestFilterBehavior.Continue);
                }
            }
            else
            {
                return(HitTestFilterBehavior.ContinueSkipSelf);
            }
        }
示例#9
0
        public static void drawTriangle(
            Point3D p0, Point3D p1, Point3D p2, Color color, Viewport3D viewport)
        {
            MeshGeometry3D mesh = new MeshGeometry3D();

            mesh.Positions.Add(p0);
            mesh.Positions.Add(p1);
            mesh.Positions.Add(p2);

            mesh.TriangleIndices.Add(0);
            mesh.TriangleIndices.Add(1);
            mesh.TriangleIndices.Add(2);

            SolidColorBrush brush = new SolidColorBrush();

            brush.Color = color;
            Material material = new DiffuseMaterial(brush);

            GeometryModel3D  geometry = new GeometryModel3D(mesh, material);
            ModelUIElement3D model    = new ModelUIElement3D();

            model.Model = geometry;

            viewport.Children.Add(model);
        }
示例#10
0
        private void PrepareModel(FrameworkElement elt, object item)
        {
            int index = Items.IndexOf(item);

            // Update the positions of all model items
            foreach (Visual3D m in _modelContainer.Children)
            {
                int val = (int)m.GetValue(LinkedElementPositionProperty);
                if (val >= index)
                {
                    m.SetValue(LinkedElementPositionProperty, val + 1);
                }
            }

            ModelUIElement3D model = CreateMeshModel(elt);

            model.SetValue(LinkedElementPositionProperty, index);
            _modelContainer.Children.Insert(index, model);

            model.SetValue(LinkedElementProperty, elt);
            elt.SetValue(LinkedModelProperty, model);

            if (IsLoaded)
            {
                ReflowItems();
            }
        }
示例#11
0
        public _3DObject(ModelUIElement3D temp, double lx, double ly, double lz, double ax, double ay, double az)
        {
            thisobject = temp;
            thismodel  = (GeometryModel3D)thisobject.Model;
            thismesh   = (MeshGeometry3D)thismodel.Geometry;
            Transform3DGroup     group = new Transform3DGroup();
            ScaleTransform3D     tr1   = new ScaleTransform3D(lx, ly, lz, ax, ay, az);
            TranslateTransform3D tr2   = new TranslateTransform3D(ax, ay, az);
            RotateTransform3D    tr3   = new RotateTransform3D();
            RotateTransform3D    tr4   = new RotateTransform3D();
            RotateTransform3D    tr5   = new RotateTransform3D();

            tr3.Rotation = new AxisAngleRotation3D();
            tr4.Rotation = new AxisAngleRotation3D();
            tr5.Rotation = new AxisAngleRotation3D();
            group.Children.Add(tr1);
            group.Children.Add(tr2);
            group.Children.Add(tr3);
            group.Children.Add(tr4);
            group.Children.Add(tr5);
            thismodel.Transform = group;
            axisX = tr2.OffsetX;
            axisY = tr2.OffsetY;
            axisZ = tr2.OffsetZ;
            lenX  = tr1.ScaleX;
            lenY  = tr1.ScaleY;
            lenZ  = tr1.ScaleZ;
        }
示例#12
0
        public _3DObject(ModelUIElement3D temp)
        {
            thisobject = temp;
            thismodel  = (GeometryModel3D)thisobject.Model;
            thismesh   = (MeshGeometry3D)thismodel.Geometry;
            Transform3DGroup     group = new Transform3DGroup();
            ScaleTransform3D     tr1   = new ScaleTransform3D(1, 1, 1, 0, 0, 0);
            TranslateTransform3D tr2   = new TranslateTransform3D(0, 0, 0);
            RotateTransform3D    tr3   = new RotateTransform3D();
            RotateTransform3D    tr4   = new RotateTransform3D();
            RotateTransform3D    tr5   = new RotateTransform3D();

            group.Children.Add(tr1);
            group.Children.Add(tr2);
            group.Children.Add(tr3);
            group.Children.Add(tr4);
            group.Children.Add(tr5);
            thismodel.Transform = group;
            axisX = tr2.OffsetX;
            axisY = tr2.OffsetY;
            axisZ = tr2.OffsetZ;
            lenX  = tr1.ScaleX;
            lenY  = tr1.ScaleY;
            lenZ  = tr1.ScaleZ;
        }
示例#13
0
        private void Create3DItems()
        {
            container.Children.Clear();

            var i = 0;

            foreach (var game in _games)
            {
                var bmp = new BitmapImage();
                bmp.BeginInit();
                bmp.CacheOption = BitmapCacheOption.OnLoad;

                var cardSize = game.DefaultSize();

                bmp.UriSource = new Uri(cardSize.Back);
                bmp.EndInit();

                var halfWidth = (cardSize.BackWidth * 1.5 / cardSize.BackHeight) * 2;
                var item      = new ModelUIElement3D()
                {
                    Model = new GeometryModel3D()
                    {
                        Geometry = new MeshGeometry3D()
                        {
                            Positions = new Point3DCollection()
                            {
                                new Point3D(-halfWidth, 0, -1),
                                new Point3D(-halfWidth, 6, -1),
                                new Point3D(halfWidth, 6, -1),
                                new Point3D(halfWidth, 0, -1)
                            },
                            TriangleIndices = new Int32Collection()
                            {
                                0, 2, 1, 3, 2, 0
                            },
                            TextureCoordinates = new PointCollection()
                            {
                                new Point(0, 1), new Point(0, 0), new Point(1, 0), new Point(1, 1)
                            }
                        },
                        Material  = new DiffuseMaterial(new ImageBrush(bmp)),
                        Transform = new Transform3DGroup()
                        {
                            Children = new Transform3DCollection()
                            {
                                new RotateTransform3D()
                                {
                                    Rotation = new AxisAngleRotation3D(new Vector3D(0, 1, 0), i == 0 ? 0 : -40)
                                },
                                new TranslateTransform3D(i == 0 ? 0 : 1 + i, i == 0 ? 1.5 : 0, i != 0 ? -1 : 0)
                            }
                        }
                    }
                };
                item.MouseDown += Select;
                container.Children.Add(item);
                ++i;
            }
        }
示例#14
0
 /// <summary>
 /// The add.
 /// </summary>
 /// <param name="element">
 /// The element.
 /// </param>
 private void Add(ModelUIElement3D element)
 {
     // http://social.msdn.microsoft.com/Forums/en/wpf/thread/7ac92a5a-001f-443a-a549-60cd5bb13083
     this.Children.Add(element);
     element.Visibility = Visibility.Hidden;
     this.Dispatcher.BeginInvoke(
         DispatcherPriority.Send, new ThreadStart(delegate { element.Visibility = Visibility.Visible; }));
 }
示例#15
0
        private static Visual3D MakeModelUIElement3D(Variation v, string visualName)
        {
            Model3D          model  = MakeCustomModel3D(v, visualName);
            ModelUIElement3D visual = new ModelUIElement3D();

            visual.Model = model;

            return(visual);
        }
示例#16
0
 private void model_MouseEnter(object sender, MouseEventArgs e)
 {
     if (SelectedIndex == _modelContainer.Children.IndexOf((Visual3D)sender))
     {
         ModelUIElement3D newSelectedModel = (ModelUIElement3D)_modelContainer.Children[SelectedIndex];
         ListBoxItem      item             = (ListBoxItem)newSelectedModel.GetValue(LinkedElementProperty);
         RaiseCurrentElementMouseEnterEvent((Tab)item.Content);
     }
 }
        //protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
        //{
        //    VisualTreeHelper.HitTest(_viewport, null, Viewport_HitTestResult, new PointHitTestParameters(e.GetPosition(this)));
        //    if (_hitModel != null)
        //    {
        //        // Same as previous
        //        if (_hitModel == _prevHitModel)
        //        {
        //            (_hitModel.Transform as TranslateTransform3D).OffsetY = 0;
        //        }
        //        else
        //        {
        //            if (_prevHitModel != null)
        //                (_prevHitModel.Transform as TranslateTransform3D).OffsetY = 0;
        //            (_hitModel.Transform as TranslateTransform3D).OffsetY = 0.5;
        //        }

        //        _prevHitModel = _hitModel;
        //        _hitModel = null;
        //        InvalidateVisual();
        //    }
        //}

        private HitTestResultBehavior Viewport_HitTestResult(HitTestResult result)
        {
            if (result.VisualHit is ModelUIElement3D)
            {
                _hitModel = result.VisualHit as ModelUIElement3D;
                return(HitTestResultBehavior.Stop);
            }
            return(HitTestResultBehavior.Continue);
        }
        private void OnContainerLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            Focus();

            ModelUIElement3D model = e.Source as ModelUIElement3D;

            if (model != null)
            {
                SelectedIndex = _modelContainer.Children.IndexOf(model);
            }
        }
        private void ViewPort3DOnMouseDown(object sender, MouseButtonEventArgs e)
        {
            Point            location = e.GetPosition(pedSimNodeControl.viewer.ViewPort3D);
            ModelUIElement3D result   = GetHitResult(location);

            if (result == null)
            {
                return;
            }
            //Do Stuff Here
        }
示例#20
0
        private void OnContainerLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            Focus();

            ModelUIElement3D model = e.Source as ModelUIElement3D;

            if (model != null)
            {
                //SelectedIndex = _modelContainer.Children.IndexOf(model);
                SelectedIndex = (int)model.GetValue(LinkedElementPositionProperty);
            }
        }
 public ElementWIN(MainWindow win, ModelUIElement3D tmpmod, string sc)
 {
     InitializeComponent();
     connectionString = "Server=127.0.0.1;Port=5432;User Id=postgres;Password=12345;Database=cupboardBase;";
     this.win         = win;
     model            = tmpmod;
     if (model == null)
     {
         SelEl.IsEnabled = false;
     }
     connectionString = sc;
 }
示例#22
0
        public void CreateShaft(string gr, string type, MouseButtonEventArgs e, double centerz)
        {
            MeshGeometry3D meshgeometry = new MeshGeometry3D();

            meshgeometry.TriangleIndices = win.trianglerectangleobject;
            meshgeometry.Positions       = win.rectangleobject;
            GeometryModel3D modelgeometry = new GeometryModel3D();

            modelgeometry.Geometry = meshgeometry;
            modelgeometry.Material = new DiffuseMaterial(
                new SolidColorBrush(Colors.Green));
            meshgeometry.TextureCoordinates = new PointCollection(win.textures);
            ImageBrush texture = new ImageBrush(new BitmapImage(new Uri(@"Images//Венге.jpg", UriKind.Relative)));

            modelgeometry.Material = new DiffuseMaterial(texture);
            ModelUIElement3D modelUI = new ModelUIElement3D();

            modelUI.MouseUp += win.ClickOnModel;
            modelUI.Model    = modelgeometry;
            ElementCabinet tempmodel = new ElementCabinet(modelUI, 0, 0, 0, 0, 0, 0);

            tempmodel.groupel   = gr;
            tempmodel.ingroupel = "ShelfC";
            tempmodel.objgr     = "S";
            tempmodel.thickness = 0.015;
            tempmodel.select    = win.CreatedElements[win.selectedobject.GetHashCode()] as ElementCabinet;
            if (win.twoselectedobject != null)
            {
                tempmodel.twoselect = win.CreatedElements[win.twoselectedobject.GetHashCode()] as ElementCabinet;
            }
            if (type == "L")
            {
                tempmodel.napr = 1;
            }
            if (type == "R")
            {
                tempmodel.napr = -1;
            }
            tempmodel.hashtable = win.CreatedElements;
            tempmodel.center    = centerz - tempmodel.select.AxisZ;
            tempmodel.changeTexture(win.soureseDefault, win.iddefault);
            _3DObject        tempmodel1 = win.CreatedElements[win.selectedobject.GetHashCode()] as _3DObject;
            Transform3DGroup group3d    = tempmodel1.thismodel.Transform as Transform3DGroup;
            ScaleTransform3D tln        = group3d.Children.OfType <ScaleTransform3D>().FirstOrDefault();

            tempmodel.changeObject(0, tln.ScaleY, 0, 0, 0, 0);
            win.CreatedElements.Add(modelUI.GetHashCode(), tempmodel);
            win.container.Children.Add(modelUI);
            win.ClickOnCamera(modelUI, e as MouseButtonEventArgs);
            win.ClickOnModel(modelUI, e);
        }
示例#23
0
        private void addFace(Vector3D normal, Vector3D up, Brush b, string text)
        {
            var grid = new Grid {
                Width = 20, Height = 20
            };

            grid.Background = b;
            grid.Children.Add(new TextBlock
            {
                Text = text,
                VerticalAlignment   = VerticalAlignment.Center,
                HorizontalAlignment = HorizontalAlignment.Center,
                FontSize            = 15,
                Foreground          = Brushes.White
            });
            grid.Arrange(new Rect(new Point(0, 0), new Size(20, 20)));

            var bmp = new RenderTargetBitmap((int)grid.Width, (int)grid.Height, 96, 96, PixelFormats.Default);

            bmp.Render(grid);

            Material material = MaterialHelper.CreateMaterial(new ImageBrush(bmp));

            double a = Size;

            var builder = new MeshBuilder();

            builder.AddCubeFace(Center, normal, up, a, a, a);
            var geometry = builder.ToMesh();

            geometry.Freeze();

            var model = new GeometryModel3D()
            {
                Geometry = geometry, Material = material
            };
            var element = new ModelUIElement3D()
            {
                Model = model
            };

            element.MouseLeftButtonDown += face_MouseLeftButtonDown;
            //element.MouseEnter += face_MouseEnter;
            //element.MouseLeave += face_MouseLeave;

            _normal.Add(element, normal);
            _up.Add(element, up);

            Children.Add(element);
        }