public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { //Get application and documnet objects UIApplication uiapp = commandData.Application; Document doc = uiapp.ActiveUIDocument.Document; 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"); 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.ToString() + "\r\n" + "Y = " + sourceCenter.Y.ToString() + "\r\n" + "Z = " + sourceCenter.Z.ToString(); TaskDialog.Show("Source room Center", coords); //Pick point // XYZ point = sel.PickPoint("Please pick a point to place group"); //Place the group Transaction trans = new Transaction(doc); trans.Start("Lab"); // doc.Create.PlaceGroup(point, group.GroupType); // Calculate the new group's position XYZ groupLocation = sourceCenter + new XYZ(20, 0, 0); doc.Create.PlaceGroup(groupLocation, group.GroupType); trans.Commit(); } catch (Exception ex) { message = ex.Message; } return(Result.Succeeded); }
public Result Execute( ExternalCommandData commandData, ref string message, ElementSet elements) { //Get application and document objects UIApplication uiApp = commandData.Application; Document doc = uiApp.ActiveUIDocument.Document; 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."); Element elem = doc.GetElement(pickedRef); Group group = elem as Group; //Get the groups 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); //Ask the user to pick target rooms RoomPickFilter roomPickFilter = new RoomPickFilter(); IList <Reference> rooms = sel.PickObjects(ObjectType.Element, roomPickFilter, "Select target rooms for duplicate furniture group"); //Pick a point //XYZ point = sel.PickPoint("PLease pick a point to place group"); //Place the group Transaction trans = new Transaction(doc); trans.Start("CopyGroupToRoom"); //doc.Create.PlaceGroup(point, group.GroupType); //Calculate the new group's position PlaceFunitureInRooms(doc, rooms, sourceCenter, group.GroupType, origin); trans.Commit(); } catch (Autodesk.Revit.Exceptions.OperationCanceledException) { return(Result.Cancelled); } //Catch other errors catch (Exception ex) { message = ex.Message; return(Result.Failed); } return(Result.Succeeded); }
public Result Execute( ExternalCommandData commandData, ref string message, ElementSet elements) { //Получение объектов приложения и документа UIApplication uiApp = commandData.Application; Document doc = uiApp.ActiveUIDocument.Document; try { //…Сюда переносится большая часть кода метода Execute //Определение объекта-ссылки для занесения результата указания Reference pickedRef = null; //Указание группы с помощью фильтра //Может быть выбрана только группа Selection sel = uiApp.ActiveUIDocument.Selection; GroupPickFilter selFilter = new GroupPickFilter(); pickedRef = sel.PickObject(ObjectType.Element, selFilter, "Выберите группу"); Element elem = doc.GetElement(pickedRef); Group group = elem as Group; // Получение центра группы XYZ origin = GetElementCenter(group); // Получение комнаты, в которой находится указанная группа Room room = GetRoomOfGroup(doc, origin); // Получение центра комнаты XYZ sourceCenter = GetRoomCenter(room); /* * string coords = * "X = " + sourceCenter.X.ToString() + "\r\n" + * "Y = " + sourceCenter.Y.ToString() + "\r\n" + * "Z = " + sourceCenter.Z.ToString(); * TaskDialog.Show("Центр исходной комнаты", coords); */ // Предложение выбрать комнаты для копирования группы RoomPickFilter roomPickFilter = new RoomPickFilter(); IList <Reference> rooms = sel.PickObjects(ObjectType.Element, roomPickFilter, "Выберите комнаты, в которые требуется скопировать группу мебели"); //Указание точки //XYZ point = sel.PickPoint("Укажите точку для размещения группы"); //Размещение группы Transaction trans = new Transaction(doc); trans.Start("Lab"); // Расчет положения новой группы PlaceFurnitureInRooms(doc, rooms, sourceCenter, group.GroupType, origin); trans.Commit(); } //Обработка исключения при щелчке правой кнопкой или нажатии ESC catch (Autodesk.Revit.Exceptions.OperationCanceledException) { return(Result.Cancelled); } //Обработка других ошибок catch (Exception ex) { message = ex.Message; return(Result.Failed); } return(Result.Succeeded); }