Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }