Ejemplo n.º 1
0
        public static void PaintByMaterial(UIDocument uidoc, Param par)
        {
            Document doc = uidoc.Document;

            if (doc.IsFamilyDocument)
            {
                Selection        sel             = uidoc.Selection;
                ISelectionFilter selectionFilter = new GFSelectionFilter();

                Reference   ChangedObject = sel.PickObject(ObjectType.Element, selectionFilter);
                GenericForm gf            = doc.GetElement(ChangedObject.ElementId) as GenericForm;

                using (Transaction t = new Transaction(doc, "Paint Faces"))
                {
                    t.Start();
                    FamilyManager fmgr = doc.FamilyManager;

                    FamilyParameter p;
                    if (doc.FamilyManager.get_Parameter(par.Guid) == null)
                    {
                        ExternalDefinition def = par.CreateDefinition(doc) as ExternalDefinition;
                        p = doc.FamilyManager.AddParameter(def, BuiltInParameterGroup.PG_IFC, par.Instance);
                    }
                    else
                    {
                        p = doc.FamilyManager.get_Parameter(par.Guid);
                    }

                    Options geoOptions = new Options();
                    geoOptions.DetailLevel = ViewDetailLevel.Fine;
                    GeometryElement geoEle = gf.get_Geometry(geoOptions);

                    IEnumerator <GeometryObject> geoObjIt = geoEle.GetEnumerator();
                    while (geoObjIt.MoveNext())
                    {
                        Solid solid = geoObjIt.Current as Solid;
                        if (solid != null)
                        {
                            foreach (Face f in solid.Faces)
                            {
                                doc.Paint(gf.Id, f, p);
                            }
                        }
                    }
                    t.Commit();
                }
            }
        }