Quantcast
Channel: All Revit API Forum posts
Viewing all articles
Browse latest Browse all 66666

Re: Edit Type of isolated slab with reference to Structural Column Type

$
0
0

Here is the code after some modification

        public Result Execute(ExternalCommandData cmdData, ref string msg, ElementSet elemSet)
        {
            _cachedCmdData = cmdData;

            try
            {
                FilteredElementCollector column = new FilteredElementCollector(CachedDoc, CachedDoc.ActiveView.Id);
                column.OfClass(typeof(FamilyInstance));
                column.OfCategory(BuiltInCategory.OST_StructuralColumns);

                foreach (FamilyInstance col in column)
                {

                    FilteredElementCollector slab = new FilteredElementCollector(CachedDoc, CachedDoc.ActiveView.Id);
                    slab.OfClass(typeof(FamilyInstance));
                    slab.OfCategory(BuiltInCategory.OST_StructuralFoundation);


                    BoundingBoxXYZ bb = col.get_BoundingBox(CachedDoc.ActiveView);
                    Outline outline = new Outline(bb.Min, bb.Max);
                    BoundingBoxIntersectsFilter bbfilter = new BoundingBoxIntersectsFilter(outline);
                    slab.WherePasses(bbfilter);


                    foreach (FamilyInstance sal in slab)
                    {
                        using (Transaction t = new Transaction(CachedDoc, "EditType"))
                        {
                            t.Start();
                            string abc = col.Symbol.Name;
                            string a = abc.Remove(0, 1);
                            string familySymbolName = "F" + a;

                            // Find all family symbols whose name is "F(x)"
                            FilteredElementCollector collector = new FilteredElementCollector(CachedDoc);
                            collector.OfCategory(BuiltInCategory.OST_StructuralFoundation);
                            collector.OfClass(typeof(FamilySymbol));

                            // Get Element Id for family symbol which will be used to find family instances
                            var query = from element in collector
                                        where (element.Name == familySymbolName)
                                        select element;
                            
                            // where element.Name == xyz;

                            List<FamilySymbol> famSyms = query.Cast<FamilySymbol>().ToList<FamilySymbol>();
                            Element el = CachedDoc.GetElement(famSyms[0].Id);

                            FamilySymbol symbol = famSyms[0] as FamilySymbol;
                            symbol.Activate();
                            sal.Symbol = symbol as FamilySymbol;
                            t.Commit();
                        }

                    }
                }
                return Result.Succeeded;
            }
            catch (Exception ex)
            {
                msg = ex.ToString();
                return Result.Failed;
            }
        }

Note: this code works only for Loadable Foundation Families. You will also will need to supress the following warning:

"An attached Structural Foundation will be moved to the bottom of the Column."

 

Then every thing will work as a charm.


Viewing all articles
Browse latest Browse all 66666

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>