using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Autodesk.Revit; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Autodesk.Revit.DB.Structure; using Autodesk.Revit.UI.Selection; namespace ContextualAnalyticalModel { /// /// Implements the Revit add-in interface IExternalCommand /// Break existing relation between physical and analytical elements using AnalyticalToPhysicalAssociationManager /// [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)] [Autodesk.Revit.Attributes.Regeneration(Autodesk.Revit.Attributes.RegenerationOption.Manual)] class RemoveAssociation : IExternalCommand { /// /// Implement this method as an external command for Revit. /// /// An object that is passed to the external application /// which contains data related to the command, /// such as the application object and active view. /// 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. /// A set of elements to which the external application /// can add elements that are to be highlighted in case of failure or cancellation. /// 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. public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { UIDocument activeDoc = commandData.Application.ActiveUIDocument; Autodesk.Revit.DB.Document doc = activeDoc.Document; using (Transaction trans = new Transaction(doc, "ContextualAnalyticalModel.UpdateRelation")) { trans.Start(); //select object for which we want to break the relation Reference eRef = activeDoc.Selection.PickObject(ObjectType.Element, "Please select the element for which you want to break relation"); ElementId selectedElementId = null; if (eRef != null && eRef.ElementId != ElementId.InvalidElementId) selectedElementId = eRef.ElementId; // Gets the AnalyticalToPhysicalAssociationManager for this Revit document AnalyticalToPhysicalAssociationManager analyticalToPhysicalmanager = AnalyticalToPhysicalAssociationManager.GetAnalyticalToPhysicalAssociationManager(doc); if (analyticalToPhysicalmanager == null) return Result.Failed; //break relation analyticalToPhysicalmanager.RemoveAssociation(selectedElementId); trans.Commit(); } return Result.Succeeded; } } }