Example #1
0
        public CameraModel3D()
        {
            var b1 = new MeshBuilder();

            b1.AddBox(new Vector3(), 1f, 1f, 1.2f, BoxFaces.All);
            var body = new MeshGeometryModel3D()
            {
                CullMode = CullMode.Back
            };

            body.Geometry = b1.ToMeshGeometry3D();
            body.Material = PhongMaterials.Gray;
            body.SceneNode.OnSetRenderTechnique = (h) => { return(h.EffectsManager[DefaultRenderTechniqueNames.Diffuse]); };
            this.Children.Add(body);
            b1 = new MeshBuilder();
            b1.AddCone(new Vector3(0, 0, -1.2f), new Vector3(0, 0f, 0), 0.4f, true, 12);
            var lens = new MeshGeometryModel3D()
            {
                CullMode = CullMode.Back
            };

            lens.Geometry = b1.ToMeshGeometry3D();
            lens.Material = PhongMaterials.Yellow;
            lens.SceneNode.OnSetRenderTechnique = (h) => { return(h.EffectsManager[DefaultRenderTechniqueNames.Diffuse]); };
            this.Children.Add(lens);

            var builder = new LineBuilder();

            builder.AddLine(Vector3.Zero, new Vector3(2, 0, 0));
            builder.AddLine(Vector3.Zero, new Vector3(0, 2, 0));
            builder.AddLine(Vector3.Zero, new Vector3(0, 0, -2));

            var mesh           = builder.ToLineGeometry3D();
            var arrowMeshModel = new LineGeometryModel3D();

            arrowMeshModel.Geometry         = mesh;
            arrowMeshModel.Color            = System.Windows.Media.Colors.White;
            arrowMeshModel.IsHitTestVisible = false;
            int segment = mesh.Positions.Count / 3;
            var colors  = new Core.Color4Collection(Enumerable.Repeat <Color4>(Color.Black, mesh.Positions.Count));
            int i       = 0;

            for (; i < segment; ++i)
            {
                colors[i] = Color.Red;
            }
            for (; i < segment * 2; ++i)
            {
                colors[i] = Color.Green;
            }
            for (; i < segment * 3; ++i)
            {
                colors[i] = Color.Blue;
            }
            mesh.Colors = colors;
            this.Children.Add(arrowMeshModel);
            SceneNode.OnTransformChanged += SceneNode_OnTransformChanged;
        }
 public void Setup()
 {
     closePoint = InitializePointWithId("closePoint");
     farPoint = InitializePointWithId("farPoint", new Vector3(10000, 10000, 10000));
     var builder = new MeshBuilder();
     builder.AddBox(new Vector3(-10000, -10000, -5000), 5, 5, 5, BoxFaces.All);
     var boxGeom = builder.ToMeshGeometry3D();
     cube = new MeshGeometryModel3D()
     {
         Geometry = boxGeom,
         Name = "cube"
     };
 }
        public Watch3DxControl()
        {
            InitializeComponent();
            // DataContext = this;

            // titles
            view1.Title = "Watch3DxNode";
            view1.SubTitle = "SharpDX";

            // camera setup
            view1.Camera = new PerspectiveCamera
            {
                Position = new Point3D(3, 3, 5),
                LookDirection = new Vector3D(-3, -3, -5),
                UpDirection = new Vector3D(0, 1, 0),
                FarPlaneDistance = 5000000
            };

            // default render technique
            view1.RenderTechniquesManager = new DefaultRenderTechniquesManager();
            view1.RenderTechnique = view1.RenderTechniquesManager.RenderTechniques[DefaultRenderTechniqueNames.Phong];
            view1.EffectsManager = new DefaultEffectsManager(view1.RenderTechniquesManager);

            // Setup lights
            var directionalLight3D = new DirectionalLight3D
            {
                Color = Color.White,
                Direction = new Vector3(-2, -5, -2)
            };

            var ambientLight3D = new AmbientLight3D {Color = Color.White};

            view1.Items.Add(ambientLight3D);
            view1.Items.Add(directionalLight3D);

            // Geometry
            var mb = new MeshBuilder();
            mb.AddSphere(new Vector3(0, 0, 0), 0.5);
            mb.AddBox(new Vector3(0, 0, 0), 1, 0.5, 2, BoxFaces.All);
            var meshGeometry = mb.ToMeshGeometry3D();

            var meshGeomModel = new MeshGeometryModel3D
            {
                Geometry = meshGeometry,
                Material = PhongMaterials.Red
            };
            // Add the Model to the viewport
            view1.Items.Add(meshGeomModel);
        }
Example #4
0
        public Helix.GroupModel3D GenerateModelNoInstance(Action <Helix.MeshGeometryModel3D, int> applyMaterial)
        {
            var group = new Helix.GroupModel3D();

            for (int i = 0; i < submeshCount; i++)
            {
                var mesh = new Helix.MeshGeometryModel3D
                {
                    Geometry = submeshes[i],
                };

                applyMaterial(mesh, matIndex[i]);
                group.Children.Add(mesh);
            }

            return(group);
        }
        public Watch3DNodeDx(Core.VplControl hostCanvas) : base(hostCanvas)
        {
            // Add Control s
            _control = new Watch3DxControl();
            AddControlToNode(_control);

            // Set Node resizable ...
            IsResizeable = true;

            // Add Control s
            _control = new Watch3DxControl();
            /*
            {
                ViewPort3D =
                {
                    
                    Background = new SolidColorBrush(Colors.White),
                    Camera =
                        new PerspectiveCamera
                        {
                            Position = new Point3D(0, 0, 0),
                            NearPlaneDistance = 0.1,
                            FarPlaneDistance = double.PositiveInfinity,
                            LookDirection = new Vector3D(-3, -3, -5),
                            UpDirection = new Vector3D(0, 1, 0)
                        },
                    RenderTechnique = Techniques.RenderBlinn,
                    MaximumFieldOfView = 45,
                    MinimumFieldOfView = 20
                    
                }
            };
            */

            // ViewPort3D = _control.ViewPort3D;

            var mb = new MeshBuilder();
            for (var i = 0; i < 1000; i++)
            {
                mb.AddBox(new Vector3(i + 15, i + 15, i + 15), 100, 100, 100, BoxFaces.All);
            }

            // _control.meshModel.Material = PhongMaterials.Orange;
            // _control.meshModel.Geometry = mb.ToMeshGeometry3D();
            //_control.meshModel.Visibility = Visibility.Visible;

            var model = new MeshGeometryModel3D();
            model.Geometry = mb.ToMeshGeometry3D();
            model.Material = PhongMaterials.Orange;

            // {Geometry = mb.ToMeshGeometry3D(), Material = PhongMaterials.Orange, Visibility = Visibility.Visible};
            _control.ViewPort3D.Items.Add(model);

            _control.ViewPort3D.Items.Add(new AmbientLight3D {Color = Color4.White});
            // control.ViewPort3D.Items.Add(new DirectionalLight3D() { Color = Color4.White , Direction = new Vector3(0,0,1)});

            // _control.ViewPort3D.ShowTriangleCountInfo = true;
            // _control.ViewPort3D.ShowFieldOfView = true;

            AddControlToNode(_control);

            AddInputPortToNode("Elements", typeof (object));
        }
Example #6
0
        public CameraModel3D()
        {
            var b1 = new MeshBuilder();

            b1.AddBox(new Vector3(), 1f, 1f, 1.2f, BoxFaces.All);
            var body = new MeshGeometryModel3D()
            {
                CullMode = CullMode.Back
            };

            body.Geometry = b1.ToMeshGeometry3D();
            body.Material = new DiffuseMaterial()
            {
                DiffuseColor = Color.Gray
            };
            this.Children.Add(body);
            b1 = new MeshBuilder();
            b1.AddCone(new Vector3(0, 0, -1.2f), new Vector3(0, 0f, 0), 0.4f, true, 12);
            var lens = new MeshGeometryModel3D()
            {
                CullMode = CullMode.Back
            };

            lens.Geometry = b1.ToMeshGeometry3D();
            lens.Material = new DiffuseMaterial()
            {
                DiffuseColor = Color.Yellow
            };
            this.Children.Add(lens);

            var builder = new LineBuilder();

            builder.AddLine(Vector3.Zero, new Vector3(2, 0, 0));
            builder.AddLine(Vector3.Zero, new Vector3(0, 2, 0));
            builder.AddLine(Vector3.Zero, new Vector3(0, 0, -2));

            var mesh           = builder.ToLineGeometry3D();
            var arrowMeshModel = new LineGeometryModel3D
            {
                Geometry         = mesh,
                Color            = System.Windows.Media.Colors.White,
                IsHitTestVisible = false
            };
            int segment = mesh.Positions.Count / 3;
            var colors  = new Color4Collection(Enumerable.Repeat <Color4>(Color.Black, mesh.Positions.Count));
            int i       = 0;

            for (; i < segment; ++i)
            {
                colors[i] = Color.Red;
            }
            for (; i < segment * 2; ++i)
            {
                colors[i] = Color.Green;
            }
            for (; i < segment * 3; ++i)
            {
                colors[i] = Color.Blue;
            }
            mesh.Colors = colors;
            this.Children.Add(arrowMeshModel);
            SceneNode.TransformChanged += SceneNode_OnTransformChanged;
        }
 public void AddMeshGeometry(MeshGeometryModel3D meshGeometry)
 {
     view1.Items.Add(meshGeometry);
 }
Example #8
0
        private void OnModelSelected(MeshGeometryModel3D model)
        {
            if (_selectedIfcItem != null)
            {
                FillMeshByIfcColor(_selectedIfcItem);
                _selectedIfcItem = null;
            }

            Redraw();
        }
Example #9
0
        private void OnModelHovered(MeshGeometryModel3D model)
        {
            if (_hoverIfcItem != null)
            {
                FillMeshByIfcColor(_hoverIfcItem);
                _hoverIfcItem = null;
            }
            if (model != null)
            {
                var mesh = (model as MeshGeometryModel3D);
                if (mesh != null && _meshToIfcItems.ContainsKey(mesh))
                {
                    mesh.Material = PhongMaterials.Chrome;
                    _hoverIfcItem = _meshToIfcItems[mesh];
                }
            }

            Redraw();
        }
Example #10
0
        private void CreateFaceModels(IFCItem item, Vector3D center)
        {
            while (item != null)
            {
                if (item.ifcID != IntPtr.Zero && item.noVerticesForFaces != 0 && item.noPrimitivesForFaces != 0)
                {
                    var positions = new List<Vector3>();
                    var normals = new List<Vector3>();
                    if (item.verticesForFaces != null)
                    {
                        for (int i = 0; i < item.noVerticesForFaces; i++)
                        {
                            var point = new Point3D(item.verticesForFaces[6 * i + 0] - center.X, item.verticesForFaces[6 * i + 1] - center.Y, item.verticesForFaces[6 * i + 2] - center.Z);
                            var normal = new Vector3D(item.verticesForFaces[6 * i + 3], item.verticesForFaces[6 * i + 4], item.verticesForFaces[6 * i + 5]);
                            positions.Add(new Vector3((float)point.X, (float)point.Y, (float)point.Z));
                            normals.Add(new Vector3((float)normal.X, (float)normal.Y, (float)normal.Z));
                        }

                        Debug.Assert(item.verticesForFaces.Length == item.noVerticesForFaces * 6);
                    }

                    var indices = new Int32Collection();
                    if (item.indicesForFaces != null)
                    {
                        for (int i = 0; i < 3 * item.noPrimitivesForFaces; i++)
                        {
                            indices.Add(item.indicesForFaces[i]);
                        }
                    }

                    List<Vector2> textureCoords = positions.Select(o => new Vector2(o.X, o.Y)).ToList();

                    var meshBuilder = new MeshBuilder();
                    meshBuilder.Append(positions, indices,normals,textureCoords);
                    MeshGeometryModel3D mesh = new MeshGeometryModel3D() { Geometry = meshBuilder.ToMeshGeometry3D() };
                    item.Mesh3d = mesh;
                    _meshToIfcItems[mesh] = item;
            #if DEBUG
                    //OutputObj(item.ifcID.ToString(), mesh);
            #endif
                    FillMeshByIfcColor(item);

                    model.Add(mesh);
                }

                CreateFaceModels(item.child, center);
                item = item.next;
            }
        }
Example #11
0
 public static void OutputObj(string ifcId, MeshGeometryModel3D rep)
 {
     using (var writer = new StreamWriter("./" + ifcId + ".obj"))
     {
         for (int i = 0, count = rep.Geometry.Positions.Count; i < count; i++)
         {
             writer.WriteLine("v {0} {1} {2}", rep.Geometry.Positions[i].X, rep.Geometry.Positions[i].Y, rep.Geometry.Positions[i].Z);
         }
         List<int> dummyList = rep.Geometry.Indices;
         dummyList.Reverse();
         var indices = dummyList;//HACK winding
         for (int i = 0, count = indices.Count / 3; i < count; i++)
         {
             writer.WriteLine("f {0}//{0} {1}//{1} {2}//{2}", indices[i * 3] + 1, indices[i * 3 + 1] + 1, indices[i * 3 + 2] + 1);
         }
     }
 }
        public override void Calculate()
        {
            if (InputPorts[0].Data == null)
                return;

            // Use Tesselation Render Technique
            _control.view1.RenderTechniquesManager = new TessellationTechniquesManager();
            _control.view1.RenderTechnique = _control.view1.RenderTechniquesManager.RenderTechniques[TessellationRenderTechniqueNames.PNTriangles];
            _control.view1.EffectsManager = new TessellationEffectsManager(_control.view1.RenderTechniquesManager);

            // _control.view1.RenderTechniquesManager = new DefaultRenderTechniquesManager();
            // _control.view1.RenderTechnique = _control.view1.RenderTechniquesManager.RenderTechniques[DefaultRenderTechniqueNames.Blinn];
            // _control.view1.EffectsManager = new DefaultEffectsManager(_control.view1.RenderTechniquesManager);

            _control.RemoveGeometryModels();

            // Input is of Type GenericElement
            if (InputPorts[0].Data != null && InputPorts[0].Data.GetType() == typeof(List<DtObject>))
            {
                var elements = InputPorts[0].Data as List<DtObject>;

                // Loop the items of each list
                foreach (var item in elements)
                {
                    // Init the MeshBuilde
                    var mb = new MeshBuilder();

                    var points = item.AttributeGroups["geometry"].GetProperty("threejspoints") as List<Point3D>;
                    var indices = item.AttributeGroups["geometry"].GetProperty("geometryindices") as List<uint>;
                    var color = item.AttributeGroups["geometry"].GetProperty("color") is System.Drawing.Color
                        ? (System.Drawing.Color) item.AttributeGroups["geometry"].GetProperty("color")
                        : new System.Drawing.Color();

                    var listIndices = indices.Select(value => (int) value).ToList();

                    for (var i = 0; i < indices.Count; i++)
                    {
                        switch (indices[i])
                        {
                            case 0:
                                mb.AddPolygon(new List<Vector3> {
                                    new Vector3((float)points[listIndices[i]].X, (float)points[listIndices[i]].Y, (float)points[listIndices[i]].Z),
                                    new Vector3((float)points[listIndices[i + 1]].X, (float)points[listIndices[i + 1]].Y, (float)points[listIndices[i + 1]].Z),
                                    new Vector3((float)points[listIndices[i + 2]].X, (float)points[listIndices[i + 2]].Y, (float)points[listIndices[i + 2]].Z)
                                });
                                i = i + 3;
                                break;
                            case 1:
                                mb.AddPolygon(new List<Vector3> {
                                    new Vector3((float)points[listIndices[i]].X, (float)points[listIndices[i]].Y, (float)points[listIndices[i]].Z),
                                    new Vector3((float)points[listIndices[i + 1]].X, (float)points[listIndices[i + 1]].Y, (float)points[listIndices[i + 1]].Z),
                                    new Vector3((float)points[listIndices[i + 2]].X, (float)points[listIndices[i + 2]].Y, (float)points[listIndices[i + 2]].Z),
                                    new Vector3((float)points[listIndices[i + 3]].X, (float)points[listIndices[i + 3]].Y, (float)points[listIndices[i + 3]].Z)
                                });
                                i = i + 4;
                                break;
                        }
                    }


                    // for (var i = 0; i < indices.Count; i++)
                    // {
                    //     switch (indices[i])
                    //     {
                    //         case 0:
                    //             mb.AddTriangle(
                    //                 new Vector3((float)points[(int)indices[i]].X, (float)points[(int)indices[i]].Y, (float)points[(int)indices[i]].Z),
                    //                 new Vector3((float)points[(int)indices[i + 1]].X, (float)points[(int)indices[i + 1]].Y, (float)points[(int)indices[i + 1]].Z),
                    //                 new Vector3((float)points[(int)indices[i + 2]].X, (float)points[(int)indices[i + 2]].Y, (float)points[(int)indices[i + 2]].Z));
                    //             i = i + 3;
                    //             break;
                    //         case 1:
                    //             mb.AddQuad(
                    //                 new Vector3((float)points[(int)indices[i]].X, (float)points[(int)indices[i]].Y, (float)points[(int)indices[i]].Z),
                    //                 new Vector3((float)points[(int)indices[i + 1]].X, (float)points[(int)indices[i + 1]].Y, (float)points[(int)indices[i + 1]].Z),
                    //                 new Vector3((float)points[(int)indices[i + 2]].X, (float)points[(int)indices[i + 2]].Y, (float)points[(int)indices[i + 2]].Z),
                    //                 new Vector3((float)points[(int)indices[i + 3]].X, (float)points[(int)indices[i + 3]].Y, (float)points[(int)indices[i + 3]].Z));
                    //             i = i + 4;
                    //             break;
                    //     }
                    // }

                    mb.ComputeNormalsAndTangents(MeshFaces.QuadPatches, true);
                    var meshGeometry = mb.ToMeshGeometry3D();
                    var meshGeomModel = new MeshGeometryModel3D
                    {
                        Geometry = meshGeometry,
                        Material = PhongMaterials.Red,
                        // Material = new PhongMaterial
                        // {
                        //     AmbientColor = new Color4 { Alpha = color.A, Red = color.R, Blue = color.B, Green = color.G },
                        //     // DiffuseColor = new Color4 { Alpha = color.A, Red = color.R, Blue = color.B, Green = color.G },
                        //     // SpecularColor = new Color4 { Alpha = color.A, Red = color.R, Blue = color.B, Green = color.G },
                        //     // EmissiveColor = new Color4 { Alpha = color.A, Red = color.R, Blue = color.B, Green = color.G },
                        //     // SpecularShininess = 89.6f,
                        // },
                        Transform = new TranslateTransform3D()
                    };

                    // Add the Model to the viewport
                    base.VisualizeMesh(meshGeomModel);
                }
            }
            else
            {
                base.Calculate();
            }

        }
Example #13
0
        private void CreateFaceModels(IFCItem item, Vector3 center)
        {
            while (item != null) {
                if (item.ifcID != IntPtr.Zero && item.noVerticesForFaces != 0 && item.noPrimitivesForFaces != 0) {
                    var positions = new Vector3Collection();
                    var normals = new Vector3Collection();
                    if (item.verticesForFaces != null) {
                        for (int i = 0; i < item.noVerticesForFaces; i++) {
                            var point = new Vector3(item.verticesForFaces[6 * i + 0] - center.X, item.verticesForFaces[6 * i + 1] - center.Y, item.verticesForFaces[6 * i + 2] - center.Z);
                            var normal = new Vector3(item.verticesForFaces[6 * i + 3], item.verticesForFaces[6 * i + 4], item.verticesForFaces[6 * i + 5]);
                            positions.Add(point);
                            normals.Add(normal);
                        }

                        Debug.Assert(item.verticesForFaces.Length == item.noVerticesForFaces * 6);
                    }

                    var indices = new IntCollection();
                    if (item.indicesForFaces != null) {
                        for (int i = 0; i < 3 * item.noPrimitivesForFaces; i++) {
                            indices.Add(item.indicesForFaces[i]);
                        }
                    }

                    var meshGeometry = new MeshGeometry3D();
                    meshGeometry.Positions = positions;
                    meshGeometry.Normals = normals;
                    meshGeometry.Indices = indices;
                    meshGeometry.TextureCoordinates = null;
                    meshGeometry.Colors = null;
                    meshGeometry.Tangents = null;
                    meshGeometry.BiTangents = null;

                    MeshGeometryModel3D mesh = new MeshGeometryModel3D() { Geometry = meshGeometry };
                    //                    var builder = new MeshBuilder(true, false);
                    //                    builder.Positions.AddRange(positions);
                    //                    builder.Normals.AddRange(normals);
                    //                    builder.TriangleIndices.AddRange(indices);
                    //                    MeshGeometryModel3D mesh = new MeshGeometryModel3D() { Geometry = builder.ToMeshGeometry3D() };
                    item.Mesh3d = mesh;
                    _meshToIfcItems[mesh] = item;
                    //#if DEBUG
                    //                    OutputObj(item.ifcID.ToString(), meshGeometry);
                    //#endif
                    FillMeshByIfcColor(item);

                    mesh.Tag = item.ifcType + ":" + item.ifcID;
                    model.Add(mesh);
                }

                CreateFaceModels(item.child, center);
                item = item.next;
            }
        }
 public void VisualizeMesh(MeshGeometryModel3D model)
 {
     _control.AddMeshGeometry(model);
 }
        public void ComputeBoundsForSelectedNodeGeometry_OnePointOneCubeSelected_BoundingBoxIsCorrect()
        {
            var pointA = InitializePointWithId("A");

            var builder = new MeshBuilder();
            builder.AddBox(new Vector3(1000000, 1000000, 1000000), 5, 5, 5, BoxFaces.All);
            var boxGeom = builder.ToMeshGeometry3D();
            var boxB = new MeshGeometryModel3D()
            {
                Geometry = boxGeom,
                Name = "B"
            };

            var bounds = HelixWatch3DViewModel.ComputeBoundsForGeometry(new GeometryModel3D[] { pointA, boxB });
            Assert.AreEqual(bounds.Minimum, pointA.Bounds().Minimum);
            Assert.AreEqual(bounds.Maximum, boxB.Bounds().Maximum);
        }