/// <summary> /// Update generic structural connection. /// </summary> /// <param name="activeDoc">The active document.</param> /// <param name="message">Set message on failure.</param> /// <returns>Returns the status of the operation.</returns> public static Result UpdateGenericStructuralConnection(UIDocument activeDoc, ref string message) { Result ret = Result.Succeeded; // Prompt to select a structural connection. StructuralConnectionHandler conn = StructuralConnectionSelectionUtils.SelectConnection(activeDoc); if (conn != null) { // Select elements to add to connection. List <ElementId> ids = StructuralConnectionSelectionUtils.SelectConnectionElements(activeDoc); if (ids.Count() > 0) { // Start a new transaction. using (Transaction transaction = new Transaction(activeDoc.Document, "Update generic structural connection")) { transaction.Start(); conn.AddElementIds(ids); TransactionStatus ts = transaction.Commit(); if (ts != TransactionStatus.Committed) { message = "Failed to commit the current transaction !"; ret = Result.Failed; } } } else { message = "There are no connection input elements selected !"; } } return(ret); }
/// <summary> /// Implement this method as an external command for Revit. /// </summary> /// <param name="commandData">An object that is passed to the external application /// which contains data related to the command, /// such as the application object and active view.</param> /// <param name="message">A message that can be set by the external application /// which will be displayed if a failure or cancellation is returned by /// the external command.</param> /// <param name="elements">A set of elements to which the external application /// can add elements that are to be highlighted in case of failure or cancellation.</param> /// <returns>Return the status of the external command. /// A result of Succeeded means that the API external method functioned as expected. /// Cancelled can be used to signify that the user cancelled the external operation /// at some point. Failure should be returned if the application is unable to proceed with /// the operation.</returns> public virtual Result Execute(ExternalCommandData commandData , ref string message, ElementSet elements) { // Get the document from external command data. UIDocument activeDoc = commandData.Application.ActiveUIDocument; Autodesk.Revit.DB.Document doc = activeDoc.Document; if (null == doc) { return(Result.Failed); } // The transaction and its status. We use Revit's Transaction class for this purpose Autodesk.Revit.DB.Transaction trans = new Autodesk.Revit.DB.Transaction(doc, "Update structural connection"); TransactionStatus ts = TransactionStatus.Uninitialized; try { // Select the connection to add input elements to, using Revit's StructuralConnectionHandler class // for more details, please consult http://www.autodesk.com/adv-steel-api-walkthroughs-2019-enu StructuralConnectionHandler conn = Utilities.Functions.SelectConnection(activeDoc); if (null == conn) { return(Result.Failed); } // Select elements to add to connection IList <ElementId> ids = Utilities.Functions.SelectConnectionElements(activeDoc, "Select elements to add to connection :"); if (ids.Count() <= 0) { return(Result.Failed); } // Start the transaction trans.Start(); // Add the elements to the connection conn.AddElementIds(ids); // Commit the transaction ts = trans.Commit(); if (ts != TransactionStatus.Committed) { message = "Failed to commit the current transaction !"; trans.RollBack(); return(Result.Failed); } } catch (Autodesk.Revit.Exceptions.OperationCanceledException) { if (ts != TransactionStatus.Uninitialized) { trans.RollBack(); } trans.Dispose(); return(Result.Cancelled); } catch (Autodesk.Revit.Exceptions.ArgumentException) { if (ts != TransactionStatus.Uninitialized) { trans.RollBack(); } trans.Dispose(); message = "No or already existing input elements selected!"; return(Result.Failed); } return(Result.Succeeded); }