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;
}