Ejemplo n.º 1
0
        public static GeometryModel3D[] GetModels(IfcViewerWrapper ifcModel)
        {
            var ifc       = (IfcViewerWrapper)ifcModel.Data;
            var modelList = GetItems(ifc);

            return(modelList.Cast <GeometryModel3D>().ToArray());
        }
Ejemplo n.º 2
0
        public static TreeViewItem GetTreeItems(IfcViewerWrapper ifcModel, GeometryModel3D[] models)
        {
            var treeItem = new TreeViewItem()
            {
                Header      = ifcModel.Name,
                DataContext = ifcModel
            };

            if (models == null)
            {
                return(null);
            }

            foreach (var model in models)
            {
                var subItem = new TreeViewItem()
                {
                    Header      = model.Name,
                    DataContext = model
                };

                var ifcTree = ((IfcMeshGeometryModel3D)model).IfcTreeNode;
                addSubtree(ref subItem, ifcTree);

                var hideItem = new TreeViewItem()
                {
                    Header = "hide",
                };

                hideItem.MouseUp += delegate(object sender, MouseButtonEventArgs args)
                {
                    if (model.Visibility == Visibility.Visible)
                    {
                        model.Visibility = Visibility.Hidden;
                        hideItem.Header  = "show";
                    }
                    else
                    {
                        model.Visibility = Visibility.Visible;
                        hideItem.Header  = "hide";
                    }
                };

                subItem.Items.Add(hideItem);

                treeItem.Items.Add(subItem);
            }

            return(treeItem);
        }
Ejemplo n.º 3
0
        public static IfcMeshGeometryModel3D[] GetItems(IfcViewerWrapper model, bool loadTexture = true, string[] filter = null)
        {
            var element   = model.RootIfcItem;
            var modelList = new List <IfcMeshGeometryModel3D>();

            Draw(element, ref modelList, null);

            AssignIfcProperties(model.Tree, ref modelList);

            foreach (var model3D in modelList)
            {
                try
                {
                    model3D.Name = new string(model3D.IfcName.ToCharArray().Where(c => Char.IsLetter(c) || Char.IsNumber(c)).ToArray());
                }
                catch (Exception)
                {
                    LogManager.GetCurrentClassLogger().Info("Can not assign name " + model3D.IfcName + "to IFC element");
                }

                if (true)
                {
                    var returnColor = new SharpDX.Color3(.8f, .8f, .8f);

                    if (model3D.IfcName.Contains("pierCap"))
                    {
                        returnColor = new SharpDX.Color3(0, 0.8f, 0);
                    }
                    else if (model3D.IfcName.Contains("deck"))
                    {
                        returnColor = new SharpDX.Color3(0.8f, 0, 0);
                    }
                    else if (model3D.IfcName.Contains("Concrete-Round-Column"))
                    {
                        returnColor = new SharpDX.Color3(0.8f, 0.8f, 0);
                    }
                    else if (model3D.IfcName.Contains("Surface"))
                    {
                        returnColor = new SharpDX.Color3(0.87f, 0.72f, .53f);
                    }
                    else if (model3D.IfcName.Contains("Foundation"))
                    {
                        returnColor = new SharpDX.Color3(0.12f, 0.56f, 0.8f);
                    }
                    else if (model3D.IfcName.Contains("Floor"))
                    {
                        returnColor = new SharpDX.Color3(0.12f, 0.56f, 0.8f);
                    }
                    else if (model3D.IfcName.Contains("Basic Wall"))
                    {
                        returnColor = new SharpDX.Color3(0.64f, 0.11f, 1f);
                    }
                    else
                    {
                        returnColor = new SharpDX.Color3(0.8f, 0, 0);
                    }

                    model3D.Material = new PhongMaterial()
                    {
                        AmbientColor = new SharpDX.Color4(returnColor.Red * .3f, returnColor.Green * .3f, returnColor.Blue * .3f, 1f),
                        DiffuseColor = new SharpDX.Color4(returnColor, 1f)
                    };
                }
                else
                {
                    model3D.Material = new PhongMaterial()
                    {
                        DiffuseColor      = new Color4(0.1f, 0.1f, 0.15f, 1.0f),
                        AmbientColor      = new Color4(0.1f, 0.1f, 0.15f, 1.0f),
                        SpecularColor     = new Color4(0.1f, 0.1f, 0.15f, 1.0f),
                        EmissiveColor     = new Color4(0.1f, 0.1f, 0.02f, 0.5f),
                        SpecularShininess = 0.5f
                    };
                }
            }

            return(modelList.ToArray());
        }
Ejemplo n.º 4
0
        public void Export(MeshGeometryModel3D[] modelList, string filename, string texturePath = "", bool exportTexture = false)
        {
            var path = Path.GetDirectoryName(filename);

            var objFile = filename;

            var mtlFile = path + @"\" + Path.GetFileNameWithoutExtension(filename) + ".mtl";

            int offset = 0;

            var objWriter = new StreamWriter(objFile);

            StreamWriter mtlWriter = null;

            if (exportTexture)
            {
                mtlWriter = new StreamWriter(mtlFile);
            }

            if (exportTexture)
            {
                objWriter.WriteLine("mtllib " + Path.GetFileName(mtlFile));
                objWriter.WriteLine();
            }

            objWriter.WriteLine("o " + Path.GetFileNameWithoutExtension(filename));

            var translate = -findPointOfGravity(modelList);

            foreach (var element in modelList)
            {
                var modelName = IfcViewerWrapper.GetValidPathName(element.Name);

                var tmpFile = path + @"\" + modelName + ".obj";

                List <string> vList  = new List <string>();
                List <string> vtList = new List <string>();
                List <string> vnList = new List <string>();

                List <string> fList = new List <string>();

                var exp = new ObjExporter(tmpFile);
                exp.ExportNormals = true;

                exp.ExportMesh((MeshGeometry3D)element.Geometry, Transform3D.Identity);
                exp.Close();

                using (StreamReader sr = File.OpenText(tmpFile))
                {
                    string s = "";
                    while ((s = sr.ReadLine()) != null)
                    {
                        switch (s.Split(' ')[0])
                        {
                        case "v":
                            var e  = s.Split(' ');
                            var sl = "v " + (Convert.ToDouble(e[1]) + translate.X) + " " + (-Convert.ToDouble(e[3]) + translate.Y) + " " + (Convert.ToDouble(e[2]) + translate.Z);
                            vList.Add(sl);
                            break;

                        case "vt":
                            vtList.Add(s);
                            break;

                        case "vn":
                            vnList.Add(s);
                            break;

                        case "f":
                            var split = s.Split(' ');
                            var st    = "f ";
                            for (int i = 3; i > 0; i--)
                            {
                                var ad = split[i].Split('/');
                                st += (Convert.ToInt32(ad[0]) + offset) + "/" +
                                      (Convert.ToInt32(ad[2]) + offset) +
                                      "/" + (Convert.ToInt32(ad[1]) + offset) + " ";
                            }
                            fList.Add(st);
                            break;
                        }
                    }
                }

                File.Delete(tmpFile);

                var tmpMtlFile = Path.GetFileName(tmpFile).Split('.');
                tmpMtlFile[tmpMtlFile.Length - 1] = "mtl";
                File.Delete(Path.GetDirectoryName(tmpFile) + @"\" + String.Join(".", tmpMtlFile));

                offset += vList.Count;

                objWriter.WriteLine();
                objWriter.WriteLine("g " + modelName);

                foreach (var line in vList)
                {
                    objWriter.WriteLine(line);
                }

                foreach (var line in vtList)
                {
                    objWriter.WriteLine(line);
                }

                foreach (var line in vnList)
                {
                    objWriter.WriteLine(line);
                }

                if (exportTexture)
                {
                    objWriter.WriteLine();
                    objWriter.WriteLine("usemtl material_" + modelName);
                }

                foreach (var f in fList)
                {
                    objWriter.WriteLine(f);
                }

                if (exportTexture)
                {
                    mtlWriter.WriteLine("newmtl material_" + modelName + "\n" +
                                        "Ks 0.000 0.000 0.000     # black (off)" + "\n" +
                                        "map_Kd " + modelName + ".jpg" + "\n");
                }

                var textureFile = texturePath + @"\" + modelName + ".jpg";

                if (!texturePath.Equals("") && File.Exists(textureFile))
                {
                    File.Copy(textureFile, path + @"\" + Path.GetFileName(textureFile));
                }
            }

            objWriter.Close();

            if (exportTexture)
            {
                mtlWriter.Close();
            }
        }
Ejemplo n.º 5
0
        public static IfcMeshGeometryModel3D[] GetItems(IfcViewerWrapper model)
        {
            var element = model.RootIfcItem;
            var modelList = new List<IfcMeshGeometryModel3D>();

            Draw(element, ref modelList);

            foreach (var model3D in modelList)
            {
                model3D.Material = new PhongMaterial()
                {
                    DiffuseColor = new Color4(0.1f, 0.1f, 0.15f, 1.0f),
                    AmbientColor = new Color4(0.1f, 0.1f, 0.15f, 1.0f),
                    SpecularColor = new Color4(0.1f, 0.1f, 0.15f, 1.0f),
                    EmissiveColor = new Color4(0.1f, 0.1f, 0.02f, 0.5f),
                    SpecularShininess = 0.5f
                };
            }

            return modelList.ToArray();
        }
Ejemplo n.º 6
0
        public static GeometryModel3D[] GetModels(IfcViewerWrapper ifcModel)
        {
            var ifc = (IfcViewerWrapper)ifcModel.Data;
            var modelList = GetItems(ifc);

            return modelList.Cast<GeometryModel3D>().ToArray();
        }