IExternalCommand Interface

An interface that should be implemented to provide the implementation for a Revit add-in External Command.

Namespace: Autodesk.Revit.UI
Assembly: RevitAPIUI (in RevitAPIUI.dll) Version: 2015.0.0.0 (2015.0.0.0)


public interface IExternalCommand
Visual Basic
Public Interface IExternalCommand
Visual C++
public interface class IExternalCommand


To add an external command to Autodesk Revit the developer should implement an object that supports the IExternalCommand interface.


Copy C#
public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData,
    ref string message, ElementSet elements)
        Document doc = commandData.Application.ActiveUIDocument.Document;
        UIDocument uidoc = commandData.Application.ActiveUIDocument;
        // Delete selected elements

        ICollection<Autodesk.Revit.DB.ElementId> ids =

        TaskDialog taskDialog = new TaskDialog("Revit"); 
        taskDialog.MainContent = 
           ("Click Yes to return Succeeded. Selected members will be deleted.\n" +
           "Click No to return Failed.  Selected members will not be deleted.\n" +
           "Click Cancel to return Cancelled.  Selected members will not be deleted.");
        TaskDialogCommonButtons buttons = TaskDialogCommonButtons.Yes | 
            TaskDialogCommonButtons.No | TaskDialogCommonButtons.Cancel;
        taskDialog.CommonButtons = buttons;
        TaskDialogResult taskDialogResult = taskDialog.Show();

        if (taskDialogResult == TaskDialogResult.Yes)
            return Autodesk.Revit.UI.Result.Succeeded;
        else if (taskDialogResult == TaskDialogResult.No)
            ICollection<ElementId> selectedElementIds = uidoc.Selection.GetElementIds();
            foreach (ElementId id in selectedElementIds)
                elements.Insert( doc.GetElement(id) );
            message = "Failed to delete selection.";
            return Autodesk.Revit.UI.Result.Failed;
            return Autodesk.Revit.UI.Result.Cancelled;
        message = "Unexpected Exception thrown.";
        return Autodesk.Revit.UI.Result.Failed;

Public Function Execute(commandData As ExternalCommandData, ByRef message As String, elements As ElementSet) As Autodesk.Revit.UI.Result Implements IExternalCommand.Execute
        Dim doc As Document = commandData.Application.ActiveUIDocument.Document
        Dim uidoc As UIDocument = commandData.Application.ActiveUIDocument
        ' Delete selected elements

        Dim ids As ICollection(Of Autodesk.Revit.DB.ElementId) = doc.Delete(uidoc.Selection.GetElementIds())

        Dim taskDialog As New TaskDialog("Revit")
        taskDialog.MainContent = ("Click Yes to return Succeeded. Selected members will be deleted." & vbLf & "Click No to return Failed.  Selected members will not be deleted." & vbLf & "Click Cancel to return Cancelled.  Selected members will not be deleted.")
        Dim buttons As TaskDialogCommonButtons = TaskDialogCommonButtons.Yes Or TaskDialogCommonButtons.No Or TaskDialogCommonButtons.Cancel
        taskDialog.CommonButtons = buttons
        Dim taskDialogResult__1 As TaskDialogResult = taskDialog.Show()

        If taskDialogResult__1 = TaskDialogResult.Yes Then
            Return Autodesk.Revit.UI.Result.Succeeded
        ElseIf taskDialogResult__1 = TaskDialogResult.No Then
            Dim selectedElementIds As ICollection(Of ElementId) = uidoc.Selection.GetElementIds()
            For Each id As ElementId In selectedElementIds
            message = "Failed to delete selection."
            Return Autodesk.Revit.UI.Result.Failed
            Return Autodesk.Revit.UI.Result.Cancelled
        End If
        message = "Unexpected Exception thrown."
        Return Autodesk.Revit.UI.Result.Failed
    End Try

End Function

See Also