private void LoadMaterials(XElement xmlScene) { if (xmlScene != null && xmlScene.Elements("material_list").Any()) { XElement xmlMaterials = xmlScene.Elements("material_list").First(); foreach (XElement materialNode in xmlMaterials.Elements("material")) { string name = materialNode.Attribute("name").Value; Material material = new Material(name); if (materialNode.Elements("texture").Any()) { material.FileName = materialNode.Elements("texture").First().Attribute("filename").Value; } if (material.FileName != null && material.FileName != String.Empty && File.Exists(material.FileName)) { material.TextureImage = (Bitmap)Bitmap.FromFile(material.FileName); } if (materialNode.Elements("specular").Any()) { material.Specular = LoadSpecular(materialNode.Elements("specular").First()); } if (materialNode.Elements("diffuse").Any()) { material.Diffuse = LoadColor(materialNode.Elements("diffuse").First()); } if (materialNode.Elements("transparent").Any()) { material.Transparent = LoadColor(materialNode.Elements("transparent").First()); } if (materialNode.Elements("reflective").Any()) { material.Reflective = LoadColor(materialNode.Elements("reflective").First()); } if (materialNode.Elements("refraction_index").Any()) { material.RefractionIndex = LoadColor(materialNode.Elements("refraction_index").First()); } MaterialDictionary.Add(name, material); } } else { Material materialDefault = new Material("Yellow"); materialDefault.FileName = ""; materialDefault.Diffuse = new Vector(1, 1, 0); materialDefault.Specular = new Vector(0, 0, 0, 5); if (!MaterialDictionary.ContainsKey("Yellow")) { MaterialDictionary.Add("Yellow", materialDefault); } } }
static ModelDataProvider() { SolidColorBrush transparentBrush = new SolidColorBrush(Colors.LightBlue); transparentBrush.Opacity = 0.5; MaterialGroup windowMaterial = new MaterialGroup(); windowMaterial.Children.Add(new DiffuseMaterial(transparentBrush)); windowMaterial.Children.Add(new SpecularMaterial(transparentBrush, 40)); _defaultMaterials = new MaterialDictionary(); _defaultMaterials.Add("IfcProduct", new DiffuseMaterial(new SolidColorBrush(Colors.Wheat))); _defaultMaterials.Add("IfcBuildingElementProxy", new DiffuseMaterial(new SolidColorBrush(Colors.Snow))); _defaultMaterials.Add("IfcWall", new DiffuseMaterial(new SolidColorBrush(Colors.White))); _defaultMaterials.Add("IfcRoof", new DiffuseMaterial(new SolidColorBrush(Colors.LightSteelBlue))); _defaultMaterials.Add("IfcSlab", new DiffuseMaterial(new SolidColorBrush(Colors.LightSteelBlue) { })); _defaultMaterials.Add("IfcWindow", windowMaterial); _defaultMaterials.Add("IfcPlate", windowMaterial); _defaultMaterials.Add("IfcDoor", new DiffuseMaterial(new SolidColorBrush(Colors.CadetBlue) { })); _defaultMaterials.Add("IfcStair", new DiffuseMaterial(new SolidColorBrush(Colors.Wheat))); _defaultMaterials.Add("IfcBeam", new DiffuseMaterial(new SolidColorBrush(Colors.LightSlateGray) { })); _defaultMaterials.Add("IfcColumn", new DiffuseMaterial(new SolidColorBrush(Colors.LightSlateGray) { })); _defaultMaterials.Add("IfcFurnishingElement", new DiffuseMaterial(new SolidColorBrush(Colors.WhiteSmoke) { Opacity = 0.7 })); _defaultMaterials.Add("IfcDistributionFlowElement", new DiffuseMaterial(new SolidColorBrush(Colors.AntiqueWhite) { Opacity = 1.0 })); _defaultMaterials.Add("IfcFlowFitting", new DiffuseMaterial(new SolidColorBrush(Colors.PaleGoldenrod) { Opacity = 1.0 })); _defaultMaterials.Add("IfcFlowSegment", new DiffuseMaterial(new SolidColorBrush(Colors.PaleVioletRed) { Opacity = 1.0 })); _defaultMaterials.Add("IfcFlowTerminal", new DiffuseMaterial(new SolidColorBrush(Colors.IndianRed) { Opacity = 1.0 })); _defaultMaterials.Add("IfcSpace", new DiffuseMaterial(new SolidColorBrush(Colors.Red) { Opacity = 0.4 })); _defaultMaterials.Add("IfcRailing", new DiffuseMaterial(new SolidColorBrush(Colors.Goldenrod) { })); _defaultMaterials.Add("IfcOpeningElement", new DiffuseMaterial(new SolidColorBrush(Colors.Red) { Opacity = 0.4 })); }