BuildingCoder.CmdImportsInFamilies.ExecuteWithoutRecursion C# (CSharp) 메소드

ExecuteWithoutRecursion() 공개 메소드

Non-recursively list all import instances in all families used in the current project document.
public ExecuteWithoutRecursion ( ExternalCommandData commandData, string &message, ElementSet elements ) : System.Result
commandData ExternalCommandData
message string
elements ElementSet
리턴 System.Result
        public Result ExecuteWithoutRecursion(
            ExternalCommandData commandData,
            ref string message,
            ElementSet elements)
        {
            UIApplication app = commandData.Application;
              Document doc = app.ActiveUIDocument.Document;

              FilteredElementCollector instances
            = new FilteredElementCollector( doc );

              instances.OfClass( typeof( FamilyInstance ) );

              Dictionary<string, Family> families
            = new Dictionary<string, Family>();

              foreach ( FamilyInstance i in instances )
              {
            Family family = i.Symbol.Family;
            if ( !families.ContainsKey( family.Name ) )
            {
              families[family.Name] = family;
            }
              }

              List<string> keys = new List<string>(
            families.Keys );

              keys.Sort();

              foreach ( string key in keys )
              {
            Family family = families[key];
            if ( family.IsInPlace )
            {
              Debug.Print( "Family '{0}' is in-place.", key );
            }
            else
            {
              Document fdoc = doc.EditFamily( family );

              FilteredElementCollector c
            = new FilteredElementCollector( doc );

              c.OfClass( typeof( ImportInstance ) );

              IList<Element> imports = c.ToElements();

              int n = imports.Count;

              Debug.Print(
            "Family '{0}' contains {1} import instance{2}{3}",
            key, n, Util.PluralSuffix( n ),
            Util.DotOrColon( n ) );

              if ( 0 < n )
              {
            foreach ( ImportInstance i in imports )
            {
              //string name = i.ObjectType.Name; // 2011
              string name = doc.GetElement( i.GetTypeId() ).Name; // 2012

              Debug.Print( "  '{0}'", name );
            }
              }
            }
              }
              return Result.Failed;
        }