BuildingCoder.CmdRectDuctCorners.Execute C# (CSharp) Method

Execute() public method

public Execute ( ExternalCommandData commandData, string &message, ElementSet elements ) : System.Result
commandData ExternalCommandData
message string
elements ElementSet
return System.Result
        public Result Execute(
            ExternalCommandData commandData,
            ref string message,
            ElementSet elements)
        {
            UIApplication app = commandData.Application;
              UIDocument uidoc = app.ActiveUIDocument;
              Document doc = uidoc.Document;

              if( ProductType.MEP != app.Application.Product )
              {
            message = "Please run this command in Revit MEP.";
            return Result.Failed;
              }

              //SelElementSet sel = uidoc.Selection.Elements; // 2014

              ICollection<ElementId> ids = uidoc.Selection.GetElementIds(); // 2015

              //if( 0 == sel.Size ) // 2014

              if( 0 == ids.Count ) // 2015
              {
            message = "Please select some rectangular ducts.";
            return Result.Failed;
              }

              // set up log file:

              string log = Assembly.GetExecutingAssembly().Location
            + "." + DateTime.Now.ToString( "yyyyMMdd" )
            + ".log";

              if( File.Exists( log ) )
              {
            File.Delete( log );
              }

              TraceListener listener
            = new TextWriterTraceListener( log );

              Trace.Listeners.Add( listener );

              try
              {
            Trace.WriteLine( "Begin" );

            // loop over all selected ducts:

            //foreach( Duct duct in sel ) // 2014

            foreach( ElementId id in ids ) // 2015
            {
              Duct duct = doc.GetElement( id ) as Duct;

              if( null == duct )
              {
            Trace.TraceError( "The selection is not a duct!" );
              }
              else
              {
            // process each duct:

            Trace.WriteLine( "========================" );
            Trace.WriteLine( "Duct: Id = " + duct.Id.IntegerValue );

            AnalyseDuct( duct );
              }
            }
              }
              catch( Exception ex )
              {
            Trace.WriteLine( ex.ToString() );
              }
              finally
              {
            Trace.Flush();
            listener.Close();
            Trace.Close();
            Trace.Listeners.Remove( listener );
              }
              return Result.Failed;
        }