Exemplo n.º 1
0
        public ElementHighlighter3D()
        {
            meshGroup = new GroupModel3D();
            material  = new DiffuseMaterial {
                DiffuseColor = HighlightColor
            };
            xrayEffect = new PostEffectMeshXRayGrid()
            {
                EffectName     = "HighlighterXRayGrid",
                DimmingFactor  = 0.5,
                BlendingFactor = 0.8,
                GridDensity    = 4,
                GridColor      = System.Windows.Media.Colors.Gray
            };
            (xrayEffect.SceneNode as NodePostEffectXRayGrid).XRayDrawingPassName = DefaultPassNames.EffectMeshDiffuseXRayGridP3;

            Children.Add(meshGroup);
            Children.Add(xrayEffect);

            var binding = new Binding("Target.Transform")
            {
                RelativeSource = RelativeSource.Self
            };

            BindingOperations.SetBinding(this, TransformProperty, binding);
        }
        private void AddElement3D(MeshBuilder bldr, Element3D elm)
        {
            if (elm.Nodes.Length == 8)
            {
                //brick

                var p = new Func <Node, Point>(i => i.Location);

                var sides = new int[][]
                {
                    new int[] { 1, 2, 6 }, new int[] { 1, 5, 6 },
                    new int[] { 2, 6, 3 }, new int[] { 7, 6, 3 },
                    new int[] { 4, 3, 7 }, new int[] { 4, 8, 7 },

                    new int[] { 1, 4, 8 }, new int[] { 1, 5, 8 },
                    new int[] { 5, 6, 7 }, new int[] { 5, 8, 7 },
                    new int[] { 1, 2, 3 }, new int[] { 1, 4, 3 },
                };



                foreach (var side in sides)
                {
                    bldr.AddTriangle(p(elm.Nodes[side[0] - 1]), p(elm.Nodes[side[1] - 1]), p(elm.Nodes[side[2] - 1]));
                }
            }
        }
        private void AddElementToModel3D(Element3D element, ref MeshGeometry3D myMeshGeometry3D, ref Int32Collection myTriangleIndicesCollection)
        {
            var items = CubeToPoint3DCollection(element.EHeight, element.EWidth, element.EDepth, element.Ex, element.Ey, element.Ez, element.Horizontal);

            foreach (Point3D point3D in items)
            {
                myMeshGeometry3D.Positions.Add(point3D);
            }

            var y = myMeshGeometry3D.Positions.Count - 8;

            myTriangleIndicesCollection.Add(y);
            myTriangleIndicesCollection.Add(y + 2);
            myTriangleIndicesCollection.Add(y + 1);

            myTriangleIndicesCollection.Add(y + 1);
            myTriangleIndicesCollection.Add(y + 2);
            myTriangleIndicesCollection.Add(y + 3);

            myTriangleIndicesCollection.Add(y);
            myTriangleIndicesCollection.Add(y + 4);
            myTriangleIndicesCollection.Add(y + 6);

            myTriangleIndicesCollection.Add(y);
            myTriangleIndicesCollection.Add(y + 6);
            myTriangleIndicesCollection.Add(y + 2);

            myTriangleIndicesCollection.Add(y + 1);
            myTriangleIndicesCollection.Add(y + 3);
            myTriangleIndicesCollection.Add(y + 7);

            myTriangleIndicesCollection.Add(y + 1);
            myTriangleIndicesCollection.Add(y + 7);
            myTriangleIndicesCollection.Add(y + 5);

            myTriangleIndicesCollection.Add(y + 4);
            myTriangleIndicesCollection.Add(y + 5);
            myTriangleIndicesCollection.Add(y + 6);

            myTriangleIndicesCollection.Add(y + 5);
            myTriangleIndicesCollection.Add(y + 7);
            myTriangleIndicesCollection.Add(y + 6);

            myTriangleIndicesCollection.Add(y + 7);
            myTriangleIndicesCollection.Add(y + 3);
            myTriangleIndicesCollection.Add(y + 2);

            myTriangleIndicesCollection.Add(y + 6);
            myTriangleIndicesCollection.Add(y + 7);
            myTriangleIndicesCollection.Add(y + 2);

            myTriangleIndicesCollection.Add(y);
            myTriangleIndicesCollection.Add(y + 1);
            myTriangleIndicesCollection.Add(y + 5);

            myTriangleIndicesCollection.Add(y);
            myTriangleIndicesCollection.Add(y + 5);
            myTriangleIndicesCollection.Add(y + 4);
        }
Exemplo n.º 4
0
 private void AddToViewport(Viewport3DX viewport, Element3D element)
 {
     //Dispatcher.BeginInvoke(new Func<Viewport3DX>(() =>
     //{
     viewport.Items.Add(element);
     //return viewport;
     //}), DispatcherPriority.Normal);
 }
Exemplo n.º 5
0
        private int CreateTexture(Bitmap bitmap)
        {
            var texture = 0;

            Element3D.CreateTexture(ref texture, bitmap);
            bitmap.Dispose();
            return(texture);
        }
Exemplo n.º 6
0
        private void OnTargetChanged(Element3D target)
        {
            foreach (var element in meshGroup.Children)
            {
                element.Dispose();
            }

            meshGroup.Children.Clear();
            //(Parent as GroupElement3D)?.Children.Remove(this);

            if (target == null)
            {
                return;
            }

            var allMeshes = ((target as GroupElement3D)?.EnumerateDescendents() ?? Enumerable.Repeat(target, 1)).OfType <MeshGeometryModel3D>().ToList();

            if (!allMeshes.Any())
            {
                return;
            }

            foreach (var m in allMeshes)
            {
                var transform = m.Transform.Value;
                var ancestors = m.EnumerateAncestors()
                                .TakeWhile(e => e != target)
                                .ToList();

                if (ancestors.Count > 0)
                {
                    transform *= ancestors
                                 .Select(e => e.Transform.Value)
                                 .Aggregate((a, b) => a * b);
                }

                if (HighlightColor.A == byte.MinValue)
                {
                    return;
                }

                meshGroup.Children.Add(new MeshGeometryModel3D
                {
                    CullMode         = SharpDX.Direct3D11.CullMode.Back,
                    DepthBias        = -100,
                    Geometry         = m.Geometry,
                    Material         = material,
                    IsHitTestVisible = false,
                    Transform        = new Media3D.MatrixTransform3D(transform),
                    PostEffects      = "HighlighterXRayGrid"
                });
            }

            //(target as GroupElement3D)?.Children.Add(this);
        }
        public static RenderModel3D FromElement(Element3D element)
        {
            var permutations = new List <Permutation>();

            permutations.Add(new Permutation(element, 0, nameof(Permutation)));

            var regions = new List <Region>();

            regions.Add(new Region(0, nameof(Region), permutations));

            return(new RenderModel3D(nameof(RenderModel3D), regions, Enumerable.Empty <InstanceGroup>(), true));
        }
        private Model3D CreateCabinet()
        {
            Logger.Info("Create Model3D Cabinet in MainViewModel");
            GeometryModel3D myGeometryModel = new GeometryModel3D();

            MeshGeometry3D myMeshGeometry3D = new MeshGeometry3D();

            Int32Collection myTriangleIndicesCollection = new Int32Collection();

            foreach (var element in _cabinet.CabinetElements)
            {
                Element3D element1 = GetElement3DFromElementModel(element);
                AddElementToModel3D(element1, ref myMeshGeometry3D, ref myTriangleIndicesCollection);
            }

            foreach (var element in _cabinet.HorizontalBarrier)
            {
                Element3D element1 = GetElement3DFromElementModel(element);
                AddElementToModel3D(element1, ref myMeshGeometry3D, ref myTriangleIndicesCollection);
            }

            foreach (var element in _cabinet.VerticalBarrier)
            {
                Element3D element1 = GetElement3DFromElementModel(element);
                AddElementToModel3D(element1, ref myMeshGeometry3D, ref myTriangleIndicesCollection);
            }

            foreach (var element in _cabinet.FrontList)
            {
                Element3D element1 = GetElement3DFromElementModel(element);
                AddElementToModel3D(element1, ref myMeshGeometry3D, ref myTriangleIndicesCollection);
            }

            //TODO add dodatkowe eleemnty

            myMeshGeometry3D.TriangleIndices = myTriangleIndicesCollection;

            myGeometryModel.Geometry = myMeshGeometry3D;

            SolidColorBrush solidColorBrush = new SolidColorBrush(Colors.Green);

            // Define material that will use the gradient.
            DiffuseMaterial myMaterial = new DiffuseMaterial(solidColorBrush);

            myGeometryModel.Material = myMaterial;

            Logger.Info("Create CabinetView in Model3DCabinet/MainViewModel");
            GenerateCabinetView();

            return(myGeometryModel);
        }
Exemplo n.º 9
0
 private void Element3DPresenter_ContentChanged(object sender, Element3D content)
 {
     if (currentContent != null)
     {
         (SceneNode as GroupNode).RemoveChildNode(currentContent.SceneNode);
         AttachChild(null);
     }
     if (Content is Element3D elem)
     {
         currentContent = elem;
         (SceneNode as GroupNode).AddChildNode(elem.SceneNode);
         AttachChild(elem);
     }
 }
Exemplo n.º 10
0
        public PrinterViewSceneGraph(GUIHost host, SettingsManager.GridUnit initialGridUnits, PrinterSizeProfile.CaseType initialCaseType)
            : base(123456)
        {
            RelativeX       = 0.0f;
            RelativeY       = 0.0f;
            RelativeWidth   = 1f;
            RelativeHeight  = 1f;
            ViewPointPos    = new M3D.Model.Utils.Vector3(0.0f, 0.0f, 10f);
            ModelList       = new List <ModelTransformPair>();
            CameraLookAtPos = new M3D.Model.Utils.Vector3(0.0f, -10f, 0.0f);
            AddChildElement3D(new LightNode(0, 0, new Vector4(0.0f, 400f, 1000f, 1f), new Color4(0.2f, 0.2f, 0.2f, 1f), new Color4(1f, 1f, 1f, 1f), new Color4(1f, 1f, 1f, 1f)));
            AddChildElement3D(new LightNode(1, 1, new Vector4(0.0f, 20f, -400f, 1f), new Color4(0.0f, 0.0f, 0.0f, 1f), new Color4(1f, 1f, 1f, 1f), new Color4(0.3f, 0.3f, 0.3f, 1f)));
            OpenGLCoordinateSystem = new TransformationNode(0, origin)
            {
                Rotation = new M3D.Model.Utils.Vector3(-90f, 0.0f, 0.0f)
            };
            AddChildElement3D(OpenGLCoordinateSystem);
            PrinterTiltTransform = new TransformationNode(0, OpenGLCoordinateSystem);
            OpenGLCoordinateSystem.AddChildElement(PrinterTiltTransform);
            PrinterTransformation  = new TransformationNode(0, PrinterTiltTransform);
            PrinterTypeAdjustments = new TransformationNode(3011, PrinterTransformation);
            var num = 1.1f;

            PrinterTypeAdjustments.Scale = new M3D.Model.Utils.Vector3(num, num, 1f);
            PrinterTransformation.AddChildElement(PrinterTypeAdjustments);
            PrinterModel = new PrinterModelNode(initialCaseType);
            PrinterTypeAdjustments.AddChildElement(PrinterModel);
            ObjectToPrinterSpace = new TransformationNode(3005, PrinterTransformation)
            {
                Translation = new M3D.Model.Utils.Vector3(0.0f, 0.0f, 0.0f)
            };
            PrinterTransformation.AddChildElement(ObjectToPrinterSpace);
            GridSizeAdjustments = new TransformationNode(3012, ObjectToPrinterSpace);
            ObjectToPrinterSpace.AddChildElement(GridSizeAdjustments);
            Grid = new GridObjectNode(3003, 100f, 100f);
            Grid.SetUnits(initialGridUnits);
            Grid.Visible  = false;
            Grid.Emission = new Color4(1f, 1f, 1f, 1f);
            GridSizeAdjustments.AddChildElement(Grid);
            var texturedFloorNode = new TexturedFloorNode(3004);
            var bitmap            = new Bitmap(Resources.shadowtexture);
            var texture           = 0;

            Element3D.CreateTexture(ref texture, bitmap);
            bitmap.Dispose();
            texturedFloorNode.Create(new M3D.Model.Utils.Vector3(0.0f, 0.0f, -76f), 450f, 240f, texture);
            OpenGLCoordinateSystem.AddChildElement(texturedFloorNode);
            PrinterTiltTransform.AddChildElement(PrinterTransformation);
        }
Exemplo n.º 11
0
        public PrinterLogoObjectNode(string texture_name, int ID, Element3D parent, Vector3 position, Vector3 size)
            : base(ID, parent)
        {
            var texture = 0;
            var bitmap  = new Bitmap(texture_name);

            Element3D.CreateTexture(ref texture, bitmap);
            bitmap.Dispose();
            plate = new FrontFacingPlaneNode(ID, this);
            logo  = new FrontFacingPlaneNode(ID, this);
            plate.Create(position, size.X, size.Z, 0);
            plate.Emission = new Color4(0.0f, 0.0f, 0.0f, 0.0f);
            logo.Create(position, size.X - 1f, size.Z - 1f, texture);
            logo.Emission = new Color4(1f, 1f, 1f, 1f);
        }
 /// <summary>
 /// Called when [target changed]. Use target boundingbox center as Manipulator center
 /// </summary>
 /// <param name="target">The target.</param>
 private void OnTargetChanged(Element3D target)
 {
     Debug.WriteLine("OnTargetChanged");
     //if(target != null)
     //{
     //    target.SceneNode.OnTransformChanged -= SceneNode_OnTransformChanged;
     //}
     this.target = target;
     if (target == null)
     {
         ResetTransforms();
     }
     else
     {
         //target.SceneNode.OnTransformChanged += SceneNode_OnTransformChanged;
         SceneNode_OnTransformChanged(target.SceneNode, new TransformArgs(target.SceneNode.ModelMatrix));
     }
 }
        /// <summary>
        /// Called when [target changed]. Use target boundingbox center as Manipulator center
        /// </summary>
        /// <param name="newTarget">The target.</param>
        private void OnTargetChanged(Element3D newTarget)
        {
            Debug.WriteLine("OnTargetChanged");
            if (target != null)
            {
                target.SceneNode.TransformChanged -= SceneNode_TransformChanged;
            }
            target = newTarget;
            if (newTarget == null)
            {
                ResetTransforms();
            }
            else
            {
                target.SceneNode.TransformChanged += SceneNode_TransformChanged;
                UpdateMatrixFromTarget();
            }

            UpdateVisibleGeometry();
        }
Exemplo n.º 14
0
 /// <summary>
 /// Finds the nearest point and its normal.
 /// </summary>
 /// <param name="viewport">
 /// The viewport.
 /// </param>
 /// <param name="position">
 /// The position.
 /// </param>
 /// <param name="point">
 /// The point.
 /// </param>
 /// <param name="normal">
 /// The normal.
 /// </param>
 /// <param name="model">
 /// The model.
 /// </param>
 /// <param name="node"></param>
 /// <returns>
 /// The find nearest.
 /// </returns>
 public static bool FindNearest(this Viewport3DX viewport, Point position,
                                out Vector3 point, out Vector3 normal, out Element3D model, out SceneNode node)
 {
     model = null;
     node  = null;
     if (viewport.FindNearest(position.ToVector2(), out point, out normal, out var m))
     {
         if (m is Element3D ele)
         {
             model = ele;
             node  = ele.SceneNode;
         }
         else if (m is SceneNode nd)
         {
             node  = nd;
             model = null;
         }
         return(true);
     }
     return(false);
 }
 public ErrorCode ExportToFile(string filePath, Element3D root, string formatId)
 {
     SyncNamesWithElement3DAndSceneNode(root.SceneNode);
     return(ExportToFile(filePath, root.SceneNode, formatId));
 }
        public TransformManipulator3D()
        {
            var rotationYMatrix = Matrix.RotationZ((float)Math.PI / 2);
            var rotationZMatrix = Matrix.RotationY(-(float)Math.PI / 2);

            ctrlGroup = new GroupModel3D();
            #region Translation Models
            translationX = new MeshGeometryModel3D()
            {
                Geometry = TranslationXGeometry, Material = DiffuseMaterials.Red, CullMode = CullMode.Back, PostEffects = "ManipulatorXRayGrid"
            };
            translationY = new MeshGeometryModel3D()
            {
                Geometry = TranslationXGeometry, Material = DiffuseMaterials.Green, CullMode = CullMode.Back, PostEffects = "ManipulatorXRayGrid"
            };
            translationZ = new MeshGeometryModel3D()
            {
                Geometry = TranslationXGeometry, Material = DiffuseMaterials.Blue, CullMode = CullMode.Back, PostEffects = "ManipulatorXRayGrid"
            };
#if !NETFX_CORE
            translationY.Transform    = new Media3D.MatrixTransform3D(rotationYMatrix.ToMatrix3D());
            translationZ.Transform    = new Media3D.MatrixTransform3D(rotationZMatrix.ToMatrix3D());
            translationX.Mouse3DDown += Translation_Mouse3DDown;
            translationY.Mouse3DDown += Translation_Mouse3DDown;
            translationZ.Mouse3DDown += Translation_Mouse3DDown;
            translationX.Mouse3DMove += Translation_Mouse3DMove;
            translationY.Mouse3DMove += Translation_Mouse3DMove;
            translationZ.Mouse3DMove += Translation_Mouse3DMove;
            translationX.Mouse3DUp   += Manipulation_Mouse3DUp;
            translationY.Mouse3DUp   += Manipulation_Mouse3DUp;
            translationZ.Mouse3DUp   += Manipulation_Mouse3DUp;
#else
            translationY.Transform3D    = rotationYMatrix;
            translationZ.Transform3D    = rotationZMatrix;
            translationX.OnMouse3DDown += Translation_Mouse3DDown;
            translationY.OnMouse3DDown += Translation_Mouse3DDown;
            translationZ.OnMouse3DDown += Translation_Mouse3DDown;
            translationX.OnMouse3DMove += Translation_Mouse3DMove;
            translationY.OnMouse3DMove += Translation_Mouse3DMove;
            translationZ.OnMouse3DMove += Translation_Mouse3DMove;
            translationX.OnMouse3DUp   += Manipulation_Mouse3DUp;
            translationY.OnMouse3DUp   += Manipulation_Mouse3DUp;
            translationZ.OnMouse3DUp   += Manipulation_Mouse3DUp;
#endif

            translationGroup = new GroupModel3D();
            translationGroup.Children.Add(translationX);
            translationGroup.Children.Add(translationY);
            translationGroup.Children.Add(translationZ);
            ctrlGroup.Children.Add(translationGroup);
            #endregion
            #region Rotation Models
            rotationX = new MeshGeometryModel3D()
            {
                Geometry = RotationXGeometry, Material = DiffuseMaterials.Red, CullMode = CullMode.Back, PostEffects = "ManipulatorXRayGrid"
            };
            rotationY = new MeshGeometryModel3D()
            {
                Geometry = RotationXGeometry, Material = DiffuseMaterials.Green, CullMode = CullMode.Back, PostEffects = "ManipulatorXRayGrid"
            };
            rotationZ = new MeshGeometryModel3D()
            {
                Geometry = RotationXGeometry, Material = DiffuseMaterials.Blue, CullMode = CullMode.Back, PostEffects = "ManipulatorXRayGrid"
            };
#if !NETFX_CORE
            rotationY.Transform    = new Media3D.MatrixTransform3D(rotationYMatrix.ToMatrix3D());
            rotationZ.Transform    = new Media3D.MatrixTransform3D(rotationZMatrix.ToMatrix3D());
            rotationX.Mouse3DDown += Rotation_Mouse3DDown;
            rotationY.Mouse3DDown += Rotation_Mouse3DDown;
            rotationZ.Mouse3DDown += Rotation_Mouse3DDown;
            rotationX.Mouse3DMove += Rotation_Mouse3DMove;
            rotationY.Mouse3DMove += Rotation_Mouse3DMove;
            rotationZ.Mouse3DMove += Rotation_Mouse3DMove;
            rotationX.Mouse3DUp   += Manipulation_Mouse3DUp;
            rotationY.Mouse3DUp   += Manipulation_Mouse3DUp;
            rotationZ.Mouse3DUp   += Manipulation_Mouse3DUp;
#else
            rotationY.Transform3D    = rotationYMatrix;
            rotationZ.Transform3D    = rotationZMatrix;
            rotationX.OnMouse3DDown += Rotation_Mouse3DDown;
            rotationY.OnMouse3DDown += Rotation_Mouse3DDown;
            rotationZ.OnMouse3DDown += Rotation_Mouse3DDown;
            rotationX.OnMouse3DMove += Rotation_Mouse3DMove;
            rotationY.OnMouse3DMove += Rotation_Mouse3DMove;
            rotationZ.OnMouse3DMove += Rotation_Mouse3DMove;
            rotationX.OnMouse3DUp   += Manipulation_Mouse3DUp;
            rotationY.OnMouse3DUp   += Manipulation_Mouse3DUp;
            rotationZ.OnMouse3DUp   += Manipulation_Mouse3DUp;
#endif

            rotationGroup = new GroupModel3D();
            rotationGroup.Children.Add(rotationX);
            rotationGroup.Children.Add(rotationY);
            rotationGroup.Children.Add(rotationZ);
            ctrlGroup.Children.Add(rotationGroup);
            #endregion
            #region Scaling Models
            scaleX = new MeshGeometryModel3D()
            {
                Geometry = ScalingGeometry, Material = DiffuseMaterials.Red, CullMode = CullMode.Back, PostEffects = "ManipulatorXRayGrid"
            };
            scaleY = new MeshGeometryModel3D()
            {
                Geometry = ScalingGeometry, Material = DiffuseMaterials.Green, CullMode = CullMode.Back, PostEffects = "ManipulatorXRayGrid"
            };
            scaleZ = new MeshGeometryModel3D()
            {
                Geometry = ScalingGeometry, Material = DiffuseMaterials.Blue, CullMode = CullMode.Back, PostEffects = "ManipulatorXRayGrid"
            };
#if !NETFX_CORE
            scaleY.Transform    = new Media3D.MatrixTransform3D(rotationYMatrix.ToMatrix3D());
            scaleZ.Transform    = new Media3D.MatrixTransform3D(rotationZMatrix.ToMatrix3D());
            scaleX.Mouse3DDown += Scaling_Mouse3DDown;
            scaleY.Mouse3DDown += Scaling_Mouse3DDown;
            scaleZ.Mouse3DDown += Scaling_Mouse3DDown;
            scaleX.Mouse3DMove += Scaling_Mouse3DMove;
            scaleY.Mouse3DMove += Scaling_Mouse3DMove;
            scaleZ.Mouse3DMove += Scaling_Mouse3DMove;
            scaleX.Mouse3DUp   += Manipulation_Mouse3DUp;
            scaleY.Mouse3DUp   += Manipulation_Mouse3DUp;
            scaleZ.Mouse3DUp   += Manipulation_Mouse3DUp;
#else
            scaleY.Transform3D    = rotationYMatrix;
            scaleZ.Transform3D    = rotationZMatrix;
            scaleX.OnMouse3DDown += Scaling_Mouse3DDown;
            scaleY.OnMouse3DDown += Scaling_Mouse3DDown;
            scaleZ.OnMouse3DDown += Scaling_Mouse3DDown;
            scaleX.OnMouse3DMove += Scaling_Mouse3DMove;
            scaleY.OnMouse3DMove += Scaling_Mouse3DMove;
            scaleZ.OnMouse3DMove += Scaling_Mouse3DMove;
            scaleX.OnMouse3DUp   += Manipulation_Mouse3DUp;
            scaleY.OnMouse3DUp   += Manipulation_Mouse3DUp;
            scaleZ.OnMouse3DUp   += Manipulation_Mouse3DUp;
#endif

            scaleGroup = new GroupModel3D();
            scaleGroup.Children.Add(scaleX);
            scaleGroup.Children.Add(scaleY);
            scaleGroup.Children.Add(scaleZ);
            ctrlGroup.Children.Add(scaleGroup);
            #endregion
            Children.Add(ctrlGroup);
            xrayEffect = new PostEffectMeshXRayGrid()
            {
                EffectName    = "ManipulatorXRayGrid",
                DimmingFactor = 0.5, BlendingFactor = 0.8,
                GridDensity   = 4, GridColor = Media.Colors.Gray
            };
            (xrayEffect.SceneNode as NodePostEffectXRayGrid).XRayDrawingPassName = DefaultPassNames.EffectMeshDiffuseXRayGridP3;
            Children.Add(xrayEffect);
            SceneNode.OnAttached += SceneNode_OnAttached;
            SceneNode.OnDetached += SceneNode_OnDetached;
        }
Exemplo n.º 17
0
        /// <summary>
        /// Traverses the Visual3D/Element3D tree and invokes the specified action on each Element3D of the specified type.
        /// </summary>
        /// <typeparam name="T">
        /// The type filter.
        /// </typeparam>
        /// <param name="element">
        /// The element.
        /// </param>
        /// <param name="function">
        /// The action.
        /// </param>
        public static void Traverse <T>(this Element3D element, Func <T, bool> function) where T : Element3D
        {
            var sceneNode = new SceneNode[] { element.SceneNode };

            Traverse(element, function);
        }
Exemplo n.º 18
0
        /// <summary>
        /// Traverses the Visual3D/Element3D tree and invokes the specified action on each Element3D of the specified type.
        /// </summary>
        /// <typeparam name="T">
        /// The type filter.
        /// </typeparam>
        /// <param name="element">
        /// The element.
        /// </param>
        /// <param name="action">
        /// The action.
        /// </param>
        public static void Traverse <T>(this Element3D element, Action <T> action) where T : Element3D
        {
            var sceneNode = new SceneNode[] { element.SceneNode };

            Traverse(element, action);
        }
        public TransformManipulatorEx3D()
        {
            var rotationYMatrix  = Matrix.RotationZ((float)Math.PI / 2);
            var rotationZMatrix  = Matrix.RotationY(-(float)Math.PI / 2);
            var rotationYZMatrix = Matrix.RotationY(-(float)Math.PI / 2);
            var rotationXZMatrix = Matrix.RotationX((float)Math.PI / 2);

            ctrlGroup = new GroupModel3D();

            #region Translation Models
            translationX              = GetGeometryModel(TranslationXGeometry, DiffuseMaterials.Red);
            translationY              = GetGeometryModel(TranslationXGeometry, DiffuseMaterials.Green);
            translationZ              = GetGeometryModel(TranslationXGeometry, DiffuseMaterials.Blue);
            translationY.Transform    = new Media3D.MatrixTransform3D(rotationYMatrix.ToMatrix3D());
            translationZ.Transform    = new Media3D.MatrixTransform3D(rotationZMatrix.ToMatrix3D());
            translationX.Mouse3DDown += Translation_Mouse3DDown;
            translationY.Mouse3DDown += Translation_Mouse3DDown;
            translationZ.Mouse3DDown += Translation_Mouse3DDown;
            translationX.Mouse3DMove += Translation_Mouse3DMove;
            translationY.Mouse3DMove += Translation_Mouse3DMove;
            translationZ.Mouse3DMove += Translation_Mouse3DMove;
            translationX.Mouse3DUp   += Manipulation_Mouse3DUp;
            translationY.Mouse3DUp   += Manipulation_Mouse3DUp;
            translationZ.Mouse3DUp   += Manipulation_Mouse3DUp;

            translationGroup = new GroupModel3D();
            translationGroup.Children.Add(translationX);
            translationGroup.Children.Add(translationY);
            translationGroup.Children.Add(translationZ);

            ctrlGroup.Children.Add(translationGroup);
            #endregion

            #region Translation2D Models
            translationXY              = GetGeometryModel(TranslationXYGeometry, DiffuseMaterials.Blue);
            translationYZ              = GetGeometryModel(TranslationXYGeometry, DiffuseMaterials.Red);
            translationXZ              = GetGeometryModel(TranslationXYGeometry, DiffuseMaterials.Green);
            translationYZ.Transform    = new Media3D.MatrixTransform3D(rotationZMatrix.ToMatrix3D());
            translationXZ.Transform    = new Media3D.MatrixTransform3D(rotationXZMatrix.ToMatrix3D());
            translationXY.Mouse3DDown += Translation_Mouse3DDown;
            translationYZ.Mouse3DDown += Translation_Mouse3DDown;
            translationXZ.Mouse3DDown += Translation_Mouse3DDown;
            translationXY.Mouse3DMove += Translation_Mouse3DMove;
            translationYZ.Mouse3DMove += Translation_Mouse3DMove;
            translationXZ.Mouse3DMove += Translation_Mouse3DMove;
            translationXY.Mouse3DUp   += Manipulation_Mouse3DUp;
            translationYZ.Mouse3DUp   += Manipulation_Mouse3DUp;
            translationXZ.Mouse3DUp   += Manipulation_Mouse3DUp;

            translation2DGroup = new GroupModel3D();
            translation2DGroup.Children.Add(translationXY);
            translation2DGroup.Children.Add(translationYZ);
            translation2DGroup.Children.Add(translationXZ);

            ctrlGroup.Children.Add(translation2DGroup);
            #endregion

            #region Rotation Models
            rotationX              = GetGeometryModel(RotationXGeometry, DiffuseMaterials.Red);
            rotationY              = GetGeometryModel(RotationXGeometry, DiffuseMaterials.Green);
            rotationZ              = GetGeometryModel(RotationXGeometry, DiffuseMaterials.Blue);
            rotationY.Transform    = new Media3D.MatrixTransform3D(rotationYMatrix.ToMatrix3D());
            rotationZ.Transform    = new Media3D.MatrixTransform3D(rotationZMatrix.ToMatrix3D());
            rotationX.Mouse3DDown += Rotation_Mouse3DDown;
            rotationY.Mouse3DDown += Rotation_Mouse3DDown;
            rotationZ.Mouse3DDown += Rotation_Mouse3DDown;
            rotationX.Mouse3DMove += Rotation_Mouse3DMove;
            rotationY.Mouse3DMove += Rotation_Mouse3DMove;
            rotationZ.Mouse3DMove += Rotation_Mouse3DMove;
            rotationX.Mouse3DUp   += Manipulation_Mouse3DUp;
            rotationY.Mouse3DUp   += Manipulation_Mouse3DUp;
            rotationZ.Mouse3DUp   += Manipulation_Mouse3DUp;

            rotationGroup = new GroupModel3D();
            rotationGroup.Children.Add(rotationX);
            rotationGroup.Children.Add(rotationY);
            rotationGroup.Children.Add(rotationZ);
            ctrlGroup.Children.Add(rotationGroup);
            #endregion

            #region Scaling Models
            scaleX              = GetGeometryModel(ScalingGeometry, DiffuseMaterials.Red);
            scaleY              = GetGeometryModel(ScalingGeometry, DiffuseMaterials.Green);
            scaleZ              = GetGeometryModel(ScalingGeometry, DiffuseMaterials.Blue);
            scaleY.Transform    = new Media3D.MatrixTransform3D(rotationYMatrix.ToMatrix3D());
            scaleZ.Transform    = new Media3D.MatrixTransform3D(rotationZMatrix.ToMatrix3D());
            scaleX.Mouse3DDown += Scaling_Mouse3DDown;
            scaleY.Mouse3DDown += Scaling_Mouse3DDown;
            scaleZ.Mouse3DDown += Scaling_Mouse3DDown;
            scaleX.Mouse3DMove += Scaling_Mouse3DMove;
            scaleY.Mouse3DMove += Scaling_Mouse3DMove;
            scaleZ.Mouse3DMove += Scaling_Mouse3DMove;
            scaleX.Mouse3DUp   += Manipulation_Mouse3DUp;
            scaleY.Mouse3DUp   += Manipulation_Mouse3DUp;
            scaleZ.Mouse3DUp   += Manipulation_Mouse3DUp;

            scaleGroup = new GroupModel3D();
            scaleGroup.Children.Add(scaleX);
            scaleGroup.Children.Add(scaleY);
            scaleGroup.Children.Add(scaleZ);
            ctrlGroup.Children.Add(scaleGroup);
            #endregion

            Children.Add(ctrlGroup);
            xrayEffect = new PostEffectMeshXRayGrid()
            {
                EffectName     = xrayEffectName,
                DimmingFactor  = 0.5,
                BlendingFactor = 0.8,
                GridDensity    = 4,
                GridColor      = Media.Colors.Gray
            };
            (xrayEffect.SceneNode as NodePostEffectXRayGrid).XRayDrawingPassName = DefaultPassNames.EffectMeshDiffuseXRayGridP3;
            Children.Add(xrayEffect);
            SceneNode.Attached += SceneNode_OnAttached;
            SceneNode.Detached += SceneNode_OnDetached;
        }
Exemplo n.º 20
0
    public void DrawLine()
    {
        if (Input.GetMouseButtonDown(0))
        {
            RaycastHit hit;
            Ray        ray = camera.ScreenPointToRay(Input.mousePosition);

            if (Physics.Raycast(ray, out hit))
            {
                Transform objectHit = hit.transform;
                if (objectHit.GetComponent <Element3D>())
                {
                    print(objectHit.name + " ( " + hit.point.x + " | " + hit.point.z + ")");
                    if (firstPoint == null && secondPoint == null)
                    {
                        print("1");
                        firstPoint = objectHit.GetComponent <Element3D>();
                        firstPoint.Select();
                        //line.SetPosition(0, firstPoint.transform.position);
                        //line.SetPosition(1, firstPoint.transform.position);
                    }
                    else if (firstPoint != null && secondPoint == null)
                    {
                        print("2");

                        if (objectHit == firstPoint.transform)
                        {
                            firstPoint.Disselect();
                            firstPoint = null;
                        }
                        else
                        {
                            secondPoint = objectHit.GetComponent <Element3D>();
                            secondPoint.Select();
                        }
                    }
                    else if (firstPoint == null && secondPoint != null)
                    {
                        print("3");

                        if (objectHit == secondPoint.transform)
                        {
                            secondPoint.Disselect();
                            secondPoint = null;
                        }
                        else
                        {
                            firstPoint = objectHit.GetComponent <Element3D>();
                            firstPoint.Select();
                        }
                    }
                    else if (firstPoint != null && secondPoint != null)
                    {
                        print("4");

                        if (objectHit == secondPoint.transform)
                        {
                            secondPoint.Disselect();
                            secondPoint = null;
                        }
                        else if (objectHit == firstPoint.transform)
                        {
                            firstPoint.Disselect();
                            firstPoint = null;
                        }
                    }
                    else
                    {
                        print("5");

                        if (firstPoint != null)
                        {
                            firstPoint.Disselect();
                            firstPoint = null;
                        }
                        if (secondPoint != null)
                        {
                            secondPoint.Disselect();
                            secondPoint = null;
                        }
                        firstPoint = objectHit.GetComponent <Element3D>();
                    }
                }
            }

            if (firstPoint != null && secondPoint != null)
            {
                line.SetPosition(0, firstPoint.transform.position);
                line.SetPosition(1, secondPoint.transform.position);
            }
            else
            {
                line.SetPosition(0, Vector3.zero);
                line.SetPosition(1, Vector3.zero);
            }
        }

        if (Input.GetMouseButtonDown(1))
        {
            if (firstPoint != null)
            {
                firstPoint.Disselect();
                firstPoint = null;
            }
            if (secondPoint != null)
            {
                secondPoint.Disselect();
                secondPoint = null;
            }


            line.SetPosition(0, Vector3.zero);
            line.SetPosition(1, Vector3.zero);
        }
    }
 internal Permutation(Element3D element, int sourceIndex, string name)
 {
     SourceIndex = sourceIndex;
     Element     = element;
     Name        = name;
 }
Exemplo n.º 22
0
        private void CreateBoundsGeometry(Element3D parent)
        {
            lock (exceedsBoundsSync)
            {
                if (PrinterBoundsConst.PrintableRegion == null || PrinterBoundsConst.PrintableRegion.bounds_list.Count < 1)
                {
                    return;
                }

                StackedBoundingBox printableRegion = PrinterBoundsConst.PrintableRegion;
                if (ExceedsBoundsGeometry != null)
                {
                    for (var index1 = 0; index1 < ExceedsBoundsGeometry.GetLength(0); ++index1)
                    {
                        for (var index2 = 0; index2 < ExceedsBoundsGeometry.GetLength(1); ++index2)
                        {
                            parent.RemoveChildElement(ExceedsBoundsGeometry[index1, index2]);
                        }
                    }
                }
                List <BoundingBox> boundsList = printableRegion.bounds_list;
                ExceedsBoundsGeometry = new CustomShape[boundsList.Count, 6];
                var vertex_list = new List <VertexTNV>();
                for (var index = 0; index < boundsList.Count; ++index)
                {
                    var vector3_1 = new Model.Utils.Vector3(boundsList[index].min.x, boundsList[index].min.y, boundsList[index].min.z);
                    var vector3_2 = new M3D.Model.Utils.Vector3(boundsList[index].max.x, boundsList[index].max.y, boundsList[index].max.z);
                    ExceedsBoundsGeometry[index, 0] = new CustomShape(3006);
                    vertex_list.Clear();
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_2.Y, vector3_2.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_2.Y, vector3_2.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_2.Y, vector3_1.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_2.Y, vector3_2.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_2.Y, vector3_1.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_2.Y, vector3_1.Z)));
                    ExceedsBoundsGeometry[index, 0].Create(vertex_list, 0);
                    BoundingBoxColoringHelper(ref ExceedsBoundsGeometry[index, 0]);
                    parent.AddChildElement(ExceedsBoundsGeometry[index, 0]);
                    ExceedsBoundsGeometry[index, 1] = new CustomShape(3007);
                    vertex_list.Clear();
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, -1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_1.Y, vector3_2.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, -1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_1.Y, vector3_2.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, -1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_1.Y, vector3_1.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, -1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_1.Y, vector3_2.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, -1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_1.Y, vector3_1.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, -1f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_1.Y, vector3_1.Z)));
                    ExceedsBoundsGeometry[index, 1].Create(vertex_list, 0);
                    BoundingBoxColoringHelper(ref ExceedsBoundsGeometry[index, 1]);
                    parent.AddChildElement(ExceedsBoundsGeometry[index, 1]);
                    ExceedsBoundsGeometry[index, 2] = new CustomShape(3008);
                    vertex_list.Clear();
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_2.Y, vector3_2.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_1.Y, vector3_2.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_1.Y, vector3_1.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_2.Y, vector3_2.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_1.Y, vector3_1.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_2.Y, vector3_1.Z)));
                    ExceedsBoundsGeometry[index, 2].Create(vertex_list, 0);
                    BoundingBoxColoringHelper(ref ExceedsBoundsGeometry[index, 2]);
                    parent.AddChildElement(ExceedsBoundsGeometry[index, 2]);
                    ExceedsBoundsGeometry[index, 3] = new CustomShape(3009);
                    vertex_list.Clear();
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(-1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_1.Y, vector3_2.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(-1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_2.Y, vector3_2.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(-1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_2.Y, vector3_1.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(-1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_1.Y, vector3_2.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(-1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_2.Y, vector3_1.Z)));
                    vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(-1f, 0.0f, 0.0f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_1.Y, vector3_1.Z)));
                    ExceedsBoundsGeometry[index, 3].Create(vertex_list, 0);
                    BoundingBoxColoringHelper(ref ExceedsBoundsGeometry[index, 3]);
                    parent.AddChildElement(ExceedsBoundsGeometry[index, 3]);
                    if (index + 1 == boundsList.Count)
                    {
                        ExceedsBoundsGeometry[index, 4] = new CustomShape(3010);
                        vertex_list.Clear();
                        vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 0.0f, 1f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_1.Y, vector3_2.Z)));
                        vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 0.0f, 1f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_1.Y, vector3_2.Z)));
                        vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 0.0f, 1f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_2.Y, vector3_2.Z)));
                        vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 0.0f, 1f), new M3D.Model.Utils.Vector3(vector3_2.X, vector3_2.Y, vector3_2.Z)));
                        vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 0.0f, 1f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_2.Y, vector3_2.Z)));
                        vertex_list.Add(new VertexTNV(new M3D.Model.Utils.Vector3(0.0f, 0.0f, 1f), new M3D.Model.Utils.Vector3(vector3_1.X, vector3_1.Y, vector3_2.Z)));
                        ExceedsBoundsGeometry[index, 4].Create(vertex_list, 0);
                        BoundingBoxColoringHelper(ref ExceedsBoundsGeometry[index, 4]);
                        parent.AddChildElement(ExceedsBoundsGeometry[index, 4]);
                    }
                }
            }
        }
 public ViewDistanceGroupNode(Element3D element)
 {
     this.element = element;
 }