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(); }
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(); }
/// <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; }
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; } }
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(); }
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); }
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); }
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); }
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); }
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); }
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; //})); }
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; }; } }
/// <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()); } }
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++; }; }
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); }
private ContainerUIElement3D LocateModelContainer() { ContainerUIElement3D container = _viewport.Children[0] as ContainerUIElement3D; return(container); }
private void CreateViewport() { _viewport = ResourceManager.Get <Viewport3D>("3DViewport_Interactive"); _modelContainer = LocateModelContainer(); _modelContainer.MouseLeftButtonDown += ModelContainer_MouseLeftButtonDown; }
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; }
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; }; } }
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); }
private void CreateViewport() { _viewport = ResourceManager.Get <Viewport3D>("3DViewport_Interactive"); _modelContainer = LocateModelContainer(); }