Example #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;

                //pickedref = sel.PickObject(ObjectType.Element, "Please select a group");
                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);

                // 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 point
                //XYZ point = sel.PickPoint("Please pick a point to place group");

                //Place the group
                Transaction trans = new Transaction(doc);

                trans.Start("Lab");

                PlaceFurnitureInRooms(doc, rooms, sourceCenter, group.GroupType, origin);

                trans.Commit();

                return(Result.Succeeded);
            }
            //If the user right-clicks or presses Esc, handle the exception
            catch (Autodesk.Revit.Exceptions.OperationCanceledException)
            {
                return(Result.Cancelled);
            }
            //Catch other errors
            catch (Exception ex)
            {
                message = ex.Message;
                return(Result.Failed);
            }
        }
Example #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);
    }
Example #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);
    }