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()); }
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); } }
//创建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); }
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(); }
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); }
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)); } }
/// <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); }
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); } }
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); }
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(); } }
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; }
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; }
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; } }
/// <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; })); }
private static Visual3D MakeModelUIElement3D(Variation v, string visualName) { Model3D model = MakeCustomModel3D(v, visualName); ModelUIElement3D visual = new ModelUIElement3D(); visual.Model = model; return(visual); }
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 }
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; }
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); }
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); }