private void ChangeStateForElement(int index, Visibility visibility) { Storyboard sbOpacity = null; Storyboard sbGrayScale = null; Storyboard sbBlur = null; Viewport2DVisual3D model = (Viewport2DVisual3D)Owner._modelContainer.Children[index]; LoginGrid loginGrid = (LoginGrid)model.Visual; loginGrid.imgMoveToRight.Visibility = Visibility.Collapsed; loginGrid.imgMoveToLeft.Visibility = Visibility.Collapsed; if (visibility == Visibility.Visible) { sbOpacity = (Storyboard)(loginGrid).FindResource("sbFadein"); sbGrayScale = (Storyboard)(loginGrid).FindResource("sbGrayEffectOut"); // sbBlur = (Storyboard)((LoginGrid)model.Visual).FindResource("sbBlurEffectIn"); ((BlurEffect)(loginGrid).Effect).Radius = 0; } else { sbOpacity = (Storyboard)(loginGrid).FindResource("sbFadeout"); sbGrayScale = (Storyboard)(loginGrid).FindResource("sbGrayEffectIn"); // sbBlur = (Storyboard)((LoginGrid)model.Visual).FindResource("sbBlurEffectOut"); ((BlurEffect)(loginGrid).Effect).Radius = 7; } sbOpacity.Begin((loginGrid)); sbGrayScale.Begin((loginGrid)); // sbBlur.Begin(((LoginGrid)model.Visual)); }
private Viewport2DVisual3D CreateMeshModel(Visual visualElement) { var model = new Viewport2DVisual3D { Geometry = new MeshGeometry3D { TriangleIndices = new Int32Collection( new int[] { 0, 1, 2, 2, 3, 0 }), TextureCoordinates = new PointCollection( new Point[] { new Point(0, 1), new Point(1, 1), new Point(1, 0), new Point(0, 0) }), Positions = CreateMeshPositions(visualElement as FrameworkElement) }, Material = new DiffuseMaterial(), // Host the 2D element in the 3D model. Visual = visualElement }; model.Transform = (InternalResources["Transfrom3DGroup"] as Transform3DGroup).Clone(); Viewport2DVisual3D.SetIsVisualHostMaterial(model.Material, true); return(model); }
protected override void OnVisualAdded(UIElement elt) { if (elt is Viewport3D) { return; } int index = Children.IndexOf(elt); Viewport2DVisual3D model = CreateLoginViewPort(elt); //set binding LoginGrid loginGrid = (LoginGrid)model.Visual; loginGrid.DataContext = elt; // loginGrid.txtConnectionName.Text = ((ListBoxItem)loginGrid.DataContext).Content.ToString(); loginGrid.imgMoveToLeft.MouseDown += MoveToLeft; loginGrid.imgMoveToRight.MouseDown += MoveToRight; _modelContainer.Children.Insert(index, model); model.SetValue(LinkedElementProperty, elt); elt.SetValue(LinkedModelProperty, model); if (IsLoaded) { ReflowItems(); } SelectedIndex = Children.Count - 1; }
public Tab(FrameworkElement element, Color color, double depth) { this.element = element; this.depth = depth; visualHostMaterial = new DiffuseMaterial(Brushes.White); visualHostMaterial.SetValue(Viewport2DVisual3D.IsVisualHostMaterialProperty, true); boxMesh = Box.CreateBoxMesh(1.1, 2.04, depth, Box.Side.Right | Box.Side.Left | Box.Side.Top | Box.Side.Bottom | Box.Side.Back); visualMesh = Box.CreateBoxMesh(1.1, 2.04, depth, Box.Side.Front); front = new Viewport2DVisual3D { Geometry = visualMesh, Visual = element, Material = visualHostMaterial }; back = new ModelVisual3D { Content = new GeometryModel3D { Geometry = boxMesh, Material = new DiffuseMaterial(Brushes.DarkGray), } }; Model = new ModelVisual3D(); Model.Children.Add(back); Model.Children.Add(front); }
/** * This updates the target-names used for animations and also updates the * ItemIndex dependency property */ private void UpdateElementIndexes(UIElement affectedElement, bool attach) { NameScope scope = (NameScope)NameScope.GetNameScope(_viewport); if (attach) { // Register name int childIndex = VisibleChildrenCount - 1; Viewport2DVisual3D model = _modelGroup[childIndex]; scope.RegisterName(ElementIdentifier + childIndex, model); affectedElement.SetValue(ItemIndexProperty, childIndex); } else // Element was detached { int index = (int)affectedElement.GetValue(ItemIndexProperty); // Unregister the previous set of names for (int i = index; i < VisibleChildrenCount; i++) { scope.UnregisterName(ElementIdentifier + i); } // Re-register names and indexes int newIndex = index; for (int i = index + 1; i < VisibleChildrenCount; i++, newIndex++) { UIElement elt = _modelGroup[i].Visual as UIElement; elt.SetValue(ItemIndexProperty, newIndex); scope.RegisterName(ElementIdentifier + newIndex, _modelGroup[i]); } } }
public void RotateLeft(bool animated) { // If there's only 1 item here, there's nothing to rotate. if (base.Children.Count < 2) { return; } Viewport2DVisual3D frontMostItem = null; if (!this.TransparencySupportRequired) { // The children are not sorted by anything. frontMostItem = this.viewport3D.Children.OfType <Viewport2DVisual3D>() .OrderByDescending(c => c.GetTransform3D <TranslateTransform3D>().OffsetZ) .First(); } else { // We know the viewport children are sorted by depth, so the last item is // the front most item. frontMostItem = this.viewport3D.Children.Last() as Viewport2DVisual3D; } var frontIndex = this.Children.IndexOf(frontMostItem.Visual as UIElement); var nextIndex = frontIndex - 1 < 0 ? this.Children.Count - 1 : frontIndex - 1; this.AnimateIntoView(base.Children[nextIndex], animated); }
/// <summary> /// Instantiates a new instance of the <see cref="Carousel3DPanel"/> class. /// </summary> public Carousel3DPanel() { this.elementModelMap = new Dictionary <UIElement, Viewport2DVisual3D>(); this.geometry = new MeshGeometry3D() { Positions = new Point3DCollection(new[] { new Point3D(-1, -1, 0), new Point3D(1, -1, 0), new Point3D(1, 1, 0), new Point3D(-1, 1, 0) }), TextureCoordinates = new PointCollection(new[] { new Point(0, 1), new Point(1, 1), new Point(1, 0), new Point(0, 0) }), TriangleIndices = new Int32Collection(new[] { 0, 1, 2, 0, 2, 3 }) }; this.geometry.Freeze(); this.material = new DiffuseMaterial(); Viewport2DVisual3D.SetIsVisualHostMaterial(this.material, true); this.material.Freeze(); this.viewport3D = new Viewport3D(); this.viewport3D.Camera = this.Camera; this.viewport3D.Children.Add(new ModelVisual3D() { Content = this.Light }); //base.AddVisualChild(this.viewport3D); EllipseSizeChanged(this, new DependencyPropertyChangedEventArgs()); }
protected override void OnVisualAdded(UIElement elt) { if (elt is Viewport3D) { return; } int index = Children.IndexOf(elt); Viewport2DVisual3D model = CreateApplicationViewPort(elt); //set binding ApplicationGrid visual = (ApplicationGrid)model.Visual; visual.AllowDrop = true; visual.DataContext = elt; visual.DragEnter += TabsElementFlow_DragEnter; visual.MouseEnter += TabsElementFlow_MouseEnter; visual.MouseDown += TabsElementFlow_MouseDown; visual.CloseButton.Click += CloseButtonClicked; _modelContainer.Children.Insert(index, model); model.SetValue(LinkedElementProperty, elt); elt.SetValue(LinkedModelProperty, model); if (IsLoaded) { ReflowItems(); } SelectedIndex = Children.Count - 1; }
protected Viewport2DBillboardBase() { Material material = new DiffuseMaterial(Brushes.White); Viewport2DVisual3D.SetIsVisualHostMaterial(material, true); material.Freeze(); viewport2DVisual.Material = material; Children.Add(viewport2DVisual); meshGeometry.TextureCoordinates.Add(new Point(0, 1)); meshGeometry.TextureCoordinates.Add(new Point(1, 1)); meshGeometry.TextureCoordinates.Add(new Point(0, 0)); meshGeometry.TextureCoordinates.Add(new Point(1, 0)); meshGeometry.TriangleIndices.Add(0); meshGeometry.TriangleIndices.Add(1); meshGeometry.TriangleIndices.Add(3); meshGeometry.TriangleIndices.Add(0); meshGeometry.TriangleIndices.Add(3); meshGeometry.TriangleIndices.Add(2); viewport2DVisual.Geometry = meshGeometry; }
protected void initializeVisualChildren() { if (visualList == null || visualList.Count == 0) { throw new Exception("Visual list must has visual for rendering"); } camera = new PerspectiveCamera(); camera.FieldOfView = 120; modelVisual3D = new ModelVisual3D(); modelVisual3D.Content = new DirectionalLight(System.Windows.Media.Colors.White, new Vector3D(0, 0, -1)); viewportList = new List <Viewport2DVisual3D>(); meshList = new List <MeshGeometry3D>(); foreach (var visual in visualList) { var viewport = new Viewport2DVisual3D(); viewport.Material = new DiffuseMaterial(); viewport.Material.SetValue(Viewport2DVisual3D.IsVisualHostMaterialProperty, true); var meshGeometry = new MeshGeometry3D(); viewport.Geometry = meshGeometry; viewport.Visual = visual; viewportList.Add(viewport); meshList.Add(meshGeometry); } this.Camera = camera; this.Children.Add(modelVisual3D); foreach (var viewport in viewportList) { this.Children.Add(viewport); } }
/// <summary> /// Returns an interactive 3D model that hosts /// the specified UIElement. /// </summary> Viewport2DVisual3D BuildModel(UIElement element) { var model = new Viewport2DVisual3D { Geometry = new MeshGeometry3D { TriangleIndices = new Int32Collection( new int[] { 0, 1, 2, 2, 3, 0 }), TextureCoordinates = new PointCollection( new Point[] { new Point(0, 1), new Point(1, 1), new Point(1, 0), new Point(0, 0) }), Positions = new Point3DCollection( new Point3D[] { new Point3D(-1, -1, 0), new Point3D(+1, -1, 0), new Point3D(+1, +1, 0), new Point3D(-1, +1, 0) }) }, Material = new DiffuseMaterial(), Transform = new TranslateTransform3D(), // Host the 2D element in the 3D model. Visual = element }; Viewport2DVisual3D.SetIsVisualHostMaterial(model.Material, true); return(model); }
protected override Motion GetSelectionMotion(int index) { Motion m = new Motion(); m.Axis = new Vector3D(0, 1, 0); m.Z = Owner.PopoutDistance + Owner.ZOffset; m.Y = Owner.YOffset; m.X = Owner.XOffset; ChangeStateForElement(index, Visibility.Visible); Viewport2DVisual3D model = (Viewport2DVisual3D)Owner._modelContainer.Children[index]; LoginGrid loginGrid = (LoginGrid)model.Visual; if (Owner._modelContainer.Children.Count <= 1) { loginGrid.imgMoveToRight.Visibility = Visibility.Collapsed; loginGrid.imgMoveToLeft.Visibility = Visibility.Collapsed; } else { loginGrid.imgMoveToLeft.Visibility = Owner.SelectedIndex < Owner._modelContainer.Children.Count - 1 ? Visibility.Visible : Visibility.Collapsed; loginGrid.imgMoveToRight.Visibility = Owner.SelectedIndex > 0 ? Visibility.Visible : Visibility.Collapsed; } return(m); }
AxisAngleRotation3D FindAxisAngleRotation3D(int index) { Viewport2DVisual3D contentSurface = _viewport.Children[index] as Viewport2DVisual3D; RotateTransform3D transform = contentSurface.Transform as RotateTransform3D; return(transform.Rotation as AxisAngleRotation3D); }
protected override void OnContainerLeftButtonDown(object sender, MouseButtonEventArgs e) { Viewport2DVisual3D model = e.Source as Viewport2DVisual3D; if (model != null) { SelectedIndex = _modelContainer.Children.IndexOf(model); } }
Viewport2DVisual3D BuildVisualHost() { Viewport2DVisual3D vis = new Viewport2DVisual3D(); vis.Material = GetMaterial(); vis.Geometry = GetGeomatryMesh(); return(vis); }
public static Material CreateMaterial() { DiffuseMaterial material = new DiffuseMaterial { Brush = Brushes.White }; Viewport2DVisual3D.SetIsVisualHostMaterial(material, true); return(material); }
private FrameworkElement CreateVisualChild() { var simpleQuad = new MeshGeometry3D { Positions = new Point3DCollection(Mesh), TextureCoordinates = new PointCollection(TexCoords), TriangleIndices = new Int32Collection(Indices) }; // Front material is interactive, back material is not. Material frontMaterial = new DiffuseMaterial(Brushes.White); frontMaterial.SetValue(Viewport2DVisual3D.IsVisualHostMaterialProperty, true); var vb = new VisualBrush(_logicalChild); SetCachingForObject(vb); // big perf wins by caching!! Material backMaterial = new DiffuseMaterial(vb); _rotationTransform.Rotation = _quaternionRotation; var xfGroup = new Transform3DGroup { Children = { _scaleTransform, _rotationTransform } }; var backModel = new GeometryModel3D { Geometry = simpleQuad, Transform = xfGroup, BackMaterial = backMaterial }; var m3DGroup = new Model3DGroup { Children = { new DirectionalLight(Colors.White, new Vector3D(0, 0, -1)), new DirectionalLight(Colors.White, new Vector3D(0.1, -0.1, 1)), backModel } }; // Non-interactive Visual3D consisting of the backside, and two lights. var mv3D = new ModelVisual3D { Content = m3DGroup }; // Interactive frontside Visual3D var frontModel = new Viewport2DVisual3D { Geometry = simpleQuad, Visual = _logicalChild, Material = frontMaterial, Transform = xfGroup }; // Cache the brush in the VP2V3 by setting caching on it. Big perf wins. SetCachingForObject(frontModel); // Scene consists of both the above Visual3D's. _viewport3D = new Viewport3D { ClipToBounds = false, Children = { mv3D, frontModel } }; UpdateRotation(); return(_viewport3D); }
/// <summary> /// Small helper method to wrap a Visual in a Viewport2DVisual3D. /// </summary> /// <param name="wrapMe"></param> /// <returns></returns> private Viewport2DVisual3D WrapUIElement(Visual wrapMe) { Viewport2DVisual3D result = new Viewport2DVisual3D(); result.Geometry = this.geometry; result.Material = this.material; result.Visual = wrapMe; return(result); }
/// <summary> /// Adds the specified model to the front of the 3D scene. /// </summary> /// <param name="model">The front item in the scene.</param> internal void AddToFront(Viewport2DVisual3D model) { if (this.AllowTransparency) { base.Children.Add(model); } else { base.Children.Insert(1, model); } }
protected virtual void OnContainerLeftButtonDown(object sender, MouseButtonEventArgs e) { //should be implemented in inherited object Focus(); Viewport2DVisual3D model = e.Source as Viewport2DVisual3D; if (model != null) { SelectedIndex = _modelContainer.Children.IndexOf(model); } }
/// <summary> /// Adds the specified model to the rear of the 3D scene. /// </summary> /// <param name="model">The rear item in the scene.</param> internal void AddToBack(Viewport2DVisual3D model) { if (AllowTransparency) { Children.Insert(1, model); } else { Children.Add(model); } }
/// <summary> /// Removes and returns the front model in the scene. /// </summary> internal Viewport2DVisual3D RemoveFrontModel() { Viewport2DVisual3D frontModel = FrontModel; if (frontModel == null) { return(null); } Children.Remove(frontModel); return(frontModel); }
/// <summary> /// Removes and returns the back model in the scene. /// </summary> internal Viewport2DVisual3D RemoveBackModel() { Viewport2DVisual3D backModel = BackModel; if (backModel == null) { return(null); } Children.Remove(backModel); return(backModel); }
/// <summary> /// Get a display by looking up it's visual 3d model. This is useful for handling hit test results. /// </summary> /// <param name="pVisual3D">The 3D model.</param> /// <returns>Null if not found or the display reference if found.</returns> public Display GetDisplayByViewport(Viewport2DVisual3D pVisual3D) { // For each display, find a matching visual. foreach (var d in dDisplays.Values) { if (d.Viewport2DVisual3D == pVisual3D) { return(d); } } return(null); }
/// <summary> /// Construct a new display object. /// </summary> /// <param name="Key">The key it is stored at.</param> /// <param name="pRenderer">The renderer which created it.</param> internal Display(object Key, Renderer pRenderer) { // Store the renderer. this.Renderer = pRenderer; this.Key = Key; // Identities. HomographyTransform = new MatrixTransform3D(); // Create the model visual. Viewport2DVisual3D = new Viewport2DVisual3D(); // Geom (create a texturemapped rectangle). var pMeshGeometry3D = new MeshGeometry3D(); pMeshGeometry3D.Positions.Add(new Point3D(0, 0, 0)); pMeshGeometry3D.Positions.Add(new Point3D(0, 1, 0)); pMeshGeometry3D.Positions.Add(new Point3D(1, 0, 0)); pMeshGeometry3D.Positions.Add(new Point3D(1, 1, 0)); pMeshGeometry3D.TextureCoordinates.Add(new Point(0, 0)); pMeshGeometry3D.TextureCoordinates.Add(new Point(1, 0)); pMeshGeometry3D.TextureCoordinates.Add(new Point(0, 1)); pMeshGeometry3D.TextureCoordinates.Add(new Point(1, 1)); //pMeshGeometry3D.TextureCoordinates.Add(new Point(0, 1)); //pMeshGeometry3D.TextureCoordinates.Add(new Point(0, 0)); //pMeshGeometry3D.TextureCoordinates.Add(new Point(1, 1)); //pMeshGeometry3D.TextureCoordinates.Add(new Point(1, 0)); pMeshGeometry3D.TriangleIndices.Add(0); pMeshGeometry3D.TriangleIndices.Add(2); pMeshGeometry3D.TriangleIndices.Add(1); pMeshGeometry3D.TriangleIndices.Add(2); pMeshGeometry3D.TriangleIndices.Add(3); pMeshGeometry3D.TriangleIndices.Add(1); Viewport2DVisual3D.Geometry = pMeshGeometry3D; // Create a visual brush which we apply to our material. VisualBrush = new VisualBrush(); VisualBrush.Visual = Content; // Create a material which wraps this brush. var pDiffuse = new DiffuseMaterial(); pDiffuse.Brush = Brushes.White; Viewport2DVisual3D.SetIsVisualHostMaterial(pDiffuse, true); Viewport2DVisual3D.Material = new DiffuseMaterial(VisualBrush); Viewport2DVisual3D.Visual = Content; // Transform. Viewport2DVisual3D.Transform = HomographyTransform; }
protected override void OnContainerLeftButtonDown(object sender, MouseButtonEventArgs e) { Viewport2DVisual3D model = e.Source as Viewport2DVisual3D; if (model != null) { SelectedIndex = _modelContainer.Children.IndexOf(model); //raise event to load ListBoxItem item = (ListBoxItem)model.GetValue(LinkedElementProperty); RaiseTabLoadedEvent((Tab)item.Content); } }
/// <summary> /// select UIElement by current tab /// </summary> /// <param name="current"></param> public void SelectIndexByTab(Tab current) { for (int i = 0; i < _modelContainer.Children.Count; i++) { Viewport2DVisual3D newSelectedModel = (Viewport2DVisual3D)_modelContainer.Children[i]; ListBoxItem item = (ListBoxItem)newSelectedModel.GetValue(LinkedElementProperty); if (current.Id == ((Tab)item.Content).Id) { SelectedIndex = i; return; } } }
/// <summary> /// create login element /// </summary> /// <param name="visualBrush"></param> /// <returns></returns> protected Viewport2DVisual3D CreateLoginViewPort(UIElement visualBrush) { VisualBrush brush = new VisualBrush(visualBrush); Viewport2DVisual3D view = Application.LoadComponent( new Uri("/RoDuino.SMS;component/Components/RoApplicationMenu/Viewport2DVisual3D.xaml", UriKind.Relative)) as Viewport2DVisual3D; view.Visual = new LoginGrid(); ((MeshGeometry3D)view.Geometry).Positions = CreateMeshPositionsForLogin(); return(view); }
public static Viewport2DVisual3D CreateVisual3D(MeshGeometry3D geometry3D, Material material) { Viewport2DVisual3D visual3DModel = new Viewport2DVisual3D(); visual3DModel.Geometry = geometry3D; if (material != null) { visual3DModel.Material = material; } visual3DModel.Transform = CreateTransform3DGroup(); return(visual3DModel); }
public void Rotate() { if (_isRotating) { ++_rotationRequests; return; } else { _isRotating = true; } if (_viewport != null) { // Find front rotation Viewport2DVisual3D backContentSurface = _viewport.Children[1] as Viewport2DVisual3D; RotateTransform3D backTransform = backContentSurface.Transform as RotateTransform3D; AxisAngleRotation3D backRotation = backTransform.Rotation as AxisAngleRotation3D; // Find back rotation Viewport2DVisual3D frontContentSurface = _viewport.Children[2] as Viewport2DVisual3D; RotateTransform3D frontTransform = frontContentSurface.Transform as RotateTransform3D; AxisAngleRotation3D frontRotation = frontTransform.Rotation as AxisAngleRotation3D; // Create a new camera each time, to avoid trying to animate a frozen instance. PerspectiveCamera camera = this.CreateCamera(); _viewport.Camera = camera; // Create animations. DoubleAnimation rotationAnim = new DoubleAnimation { Duration = new Duration(TimeSpan.FromMilliseconds(this.AnimationLength)), By = 180 }; Point3DAnimation cameraZoomAnim = new Point3DAnimation { To = new Point3D(0, 0, 2.5), Duration = new Duration(TimeSpan.FromMilliseconds(this.AnimationLength / 2)), AutoReverse = true }; cameraZoomAnim.Completed += this.OnRotationCompleted; // Start the animations. frontRotation.BeginAnimation(AxisAngleRotation3D.AngleProperty, rotationAnim); backRotation.BeginAnimation(AxisAngleRotation3D.AngleProperty, rotationAnim); camera.BeginAnimation(PerspectiveCamera.PositionProperty, cameraZoomAnim); } }