public static GeometryModel3D[] GetModels(IfcViewerWrapper ifcModel) { var ifc = (IfcViewerWrapper)ifcModel.Data; var modelList = GetItems(ifc); return(modelList.Cast <GeometryModel3D>().ToArray()); }
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); }
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()); }
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(); } }
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(); }
public static GeometryModel3D[] GetModels(IfcViewerWrapper ifcModel) { var ifc = (IfcViewerWrapper)ifcModel.Data; var modelList = GetItems(ifc); return modelList.Cast<GeometryModel3D>().ToArray(); }