protected override void TrySolveInstance(IGH_DataAccess DA) { var doc = Revit.ActiveDBDocument; var color = default(System.Drawing.Color); if (!DA.GetData("Color", ref color)) { return; } string name = color.A == 255 ? $"RGB {color.R} {color.G} {color.B}" : $"RGB {color.R} {color.G} {color.B} {color.A}"; var material = default(DB.Material); using (var collector = new DB.FilteredElementCollector(doc).OfClass(typeof(DB.Material))) material = collector.Where(x => x.Name == name).Cast <DB.Material>().FirstOrDefault(); bool materialIsNew = material is null; if (materialIsNew) { material = doc.GetElement(DB.Material.Create(doc, name)) as DB.Material; } if (material.MaterialClass != "RGB") { material.MaterialClass = "RGB"; } if (material.MaterialCategory != "RGB") { material.MaterialCategory = "RGB"; } var newColor = color.ToHost(); if (newColor.Red != material.Color.Red || newColor.Green != material.Color.Green || newColor.Blue != material.Color.Blue) { material.Color = newColor; } var newTransparency = (int)Math.Round((255 - color.A) * 100.0 / 255.0); if (material.Transparency != newTransparency) { material.Transparency = newTransparency; } var newShininess = (int)Math.Round(0.5 * 128.0); if (newShininess != material.Shininess) { material.Shininess = newShininess; } DA.SetData("Material", material); }
protected override void TrySolveInstance(IGH_DataAccess DA) { var doc = Revit.ActiveDBDocument; var overrideMaterial = false; if (!DA.GetData("Override", ref overrideMaterial)) { return; } var name = string.Empty; if (!DA.GetData("Name", ref name)) { return; } var color = System.Drawing.Color.Empty; DA.GetData("Color", ref color); //var shader = default(GH_Material); //if (!DA.GetData("Shader", ref shader)) // return; var material = default(DB.Material); using (var collector = new DB.FilteredElementCollector(doc).OfClass(typeof(DB.Material))) material = collector.Where(x => x.Name == name).Cast <DB.Material>().FirstOrDefault(); bool materialIsNew = material is null; if (materialIsNew) { material = doc.GetElement(DB.Material.Create(doc, name)) as DB.Material; } if (materialIsNew || overrideMaterial) { material.UseRenderAppearanceForShading = color.IsEmpty; if (!color.IsEmpty) { var newColor = color.ToHost(); if (newColor.Red != material.Color.Red || newColor.Green != material.Color.Green || newColor.Blue != material.Color.Blue) { material.Color = newColor; } var newTransparency = (int)Math.Round((255 - color.A) * 100.0 / 255.0); if (material.Transparency != newTransparency) { material.Transparency = newTransparency; } var newShininess = (int)Math.Round(0.5 * 128.0); if (newShininess != material.Shininess) { material.Shininess = newShininess; } } } else { AddRuntimeMessage(GH_RuntimeMessageLevel.Remark, $"Material '{name}' already exist!"); } DA.SetData("Material", material); }