public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { UIApplication uiapp = commandData.Application; Document doc = uiapp.ActiveUIDocument.Document; try { Reference pickedref = null; Selection sel = uiapp.ActiveUIDocument.Selection; GroupPickFilter selFilter = new GroupPickFilter(); pickedref = sel.PickObject(ObjectType.Element, selFilter, "Please select a group"); Element elem = doc.GetElement(pickedref); Group group = elem as Group; // Get the group's center point XYZ origin = GetElementCenter(group); // Get the room that the picked group is located in Room room = GetRoomOfGroup(doc, origin); // Get the room's center point XYZ sourceCenter = GetRoomCenter(room); string coords = $"X = {sourceCenter.X}\nY = {sourceCenter.Y}\nZ = {sourceCenter.Z}"; TaskDialog.Show("Source Room Center", coords); //XYZ point = sel.PickPoint("Please pick a point to place group"); Transaction trans = new Transaction(doc); trans.Start("ConsiderablyEnhancedPlaceGroupCommand"); XYZ groupLocation = sourceCenter + new XYZ(20, 0, 0); doc.Create.PlaceGroup(groupLocation, group.GroupType); trans.Commit(); return(Result.Succeeded); } catch (Autodesk.Revit.Exceptions.OperationCanceledException) { return(Result.Cancelled); } catch (Exception ex) { message = ex.Message; return(Result.Failed); } }
// Main method for executing the command // ===================================== public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { // setup the main handles for the application and the active document UIApplication uiapp = commandData.Application; Document doc = uiapp.ActiveUIDocument.Document; try // business logic { // Ask the user to select a group Selection sel = uiapp.ActiveUIDocument.Selection; GroupPickFilter selFilter = new GroupPickFilter(); Reference pickedref = sel.PickObject(ObjectType.Element, selFilter, "Please select a group"); Element elem = doc.GetElement(pickedref); Group group = elem as Group; // should be safe after using the GroupPickFilter on the Selection // Calculate the center location of the room the group is located in XYZ origin = GetElementCenter(group); Room room = GetRoomOfGroup(doc, origin); XYZ sourceCenter = GetRoomCenter(room); // Ask the user to pick target rooms RoomPickFilter roomPickFilter = new RoomPickFilter(); IList <Reference> rooms = sel.PickObjects(ObjectType.Element, roomPickFilter, "Select target rooms for duplicating the group"); // Place groups of the previously selected types in the selected target rooms Transaction trans = new Transaction(doc); trans.Start("MostEnhancedPlaceGroupCommand"); PlaceFurnitureInRooms(doc, rooms, sourceCenter, group.GroupType, origin); trans.Commit(); return(Result.Succeeded); } catch (Autodesk.Revit.Exceptions.OperationCanceledException) { return(Result.Cancelled); } catch (Exception ex) { message = ex.Message; return(Result.Failed); } }
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { // Get application and documnet objects UIApplication uiapp = commandData.Application; Document doc = uiapp.ActiveUIDocument.Document; // could be null if no project is open! try { // Define a reference Object to accept the pick result Reference pickedref = null; // Pick a group Selection sel = uiapp.ActiveUIDocument.Selection; GroupPickFilter selFilter = new GroupPickFilter(); pickedref = sel.PickObject(ObjectType.Element, selFilter, "Please select a group"); // could be terminated by the user!, user could select non group objects Element elem = doc.GetElement(pickedref); Group group = elem as Group; // could be null if type cast fails (elem is not a group)! // Pick point XYZ point = sel.PickPoint("Please pick a point to place group"); // could be terminated by the user! // Place the group Transaction trans = new Transaction(doc); trans.Start("EnhancedPlaceGroupCommand"); doc.Create.PlaceGroup(point, group.GroupType); trans.Commit(); // Return the result return(Result.Succeeded); } catch (Autodesk.Revit.Exceptions.OperationCanceledException) // if the user right clicks or presses ESC button { return(Result.Cancelled); } catch (Exception ex) { message = ex.Message; return(Result.Failed); } }