Beispiel #1
0
        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);
        }
Beispiel #2
0
    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);
    }
Beispiel #3
0
    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);
    }