Копирование листа

Главная Форумы Задать вопрос Копирование листа

В этой теме 14 ответов, 4 участника, последнее обновление  Евгений 2 нед., 4 дн. назад.

Просмотр 15 сообщений - с 1 по 15 (из 15 всего)
  • Автор
    Сообщения
  • #8105 Score: 0

    Евгений
    Участник
    1 pt

    Здравствуйте коллеги. Возникла идея написать скрипт по копированию листов.

    Смысл следующий,  забираем с листа все элементы,   забираем координаты вставки, копируем виды(так как их нельзя разместить на несколько листов), создаем новый лист,  и вставляем все элементы по заданным координатам.

    В теории все просто,  на практике сразу столкнулся с проблемой…Как получить элементы спецификаций и групп размещенных на листе?  Пока нашел только команды получения размещенных видов и вьюпортов.

    Может кто уже делал подобный скрипт,  подскажите пожалуйста.

    #8106 Score: 1

    Legantmar
    Хранитель
    423 pts

    Тебе нужно через Filter* найти все спецификации в проекте.
    У каждой спецификации посмотреть лист на котором она размещена  doc.GetElement(UnwrapElement(elem).OwnerViewId)
    Отобрать только те которые тебе нужны.

    p.s. * – FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_ScheduleGraphics).WhereElementIsNotElementType().ToElements()

    #8108 Score: 0

    Евгений
    Участник
    1 pt

    Спасибо огромное…не думал что спецификации  в спецификациях и спецификации  на листах в принципе  разные элементы, хотя теперь это кажется логичным.

    В итоге получил виды на листе, группы и спецификации, осталось  забрать семейство штампа, так называемый OST_TitleBlock.

    Через коллектор  могу их все получить, но проверить на каком листе он расположен почему то не выходит. У него нет OwnerViewId.  У меня  в принципе не получилось найти  свойства TitleBlock. Наверняка он просто как то иначе называется. Пробовал через Title ViewSheet получить  это семейство, но тоже пока нет результата.

    Может кто подсказать в каком направлении копать?

    #8110 Score: 1

    Legantmar
    Хранитель
    423 pts

    обычно штампы уже располагаются на листах при их создании.
    //У него нет OwnerViewId.  // проверь еще раз.

    p.s. * – FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_TitleBlocks).WhereElementIsNotElementType().ToElements()

    #8114 Score: 0

    Alex Babinoff
    Модератор
    13 pts

    Да, идея штатная все к ней приходят.

    В итоге получил виды на листе, группы и спецификации

    Не забудь про легенды, легенды то можно копировать между листами (хотя религия ревита и не позволяет это делать на прямую), но их надо отделить от видов, чтобы не создавать копии легенд, или как вариант сделать это опцией, можно создать, а можно скопировать.

    #8115 Score: 0

    Denver-22
    Участник
    4 pts

    И итоговым скриптом поделился бы для общественности ;)

    #8117 Score: 0

    Евгений
    Участник
    1 pt

    Легенды забираются автоматически, когда забираешь размещенные виды. Просто их нужно распознать, что бы не копировать как другие виды, так как легенду можно разместить на несколько листов.

    Остался один нерешеный вопрос.

    Как разместить существующую группу, на лист?

    Довольно долго искал решение,  но никак. Не могу найти метод размещения группы.  Подскажите пожалуйста, кто знает.

    #8121 Score: 0

    Alex Babinoff
    Модератор
    13 pts

    Как разместить существующую группу, на лист?

    А вот это интересно, в моём случае не решал такую задачу, не было групп на листах. Что через копию элемента (ElementTransformUtils  CopyElement Method) не получается? Вроде бы группа по иерархии тот же элемент и можно получить у неё локэйшен и вставить по нему на новый лист.

     

    #8123 Score: 0

    Евгений
    Участник
    1 pt

    Из всех методов что я находил самым подходящим казался placeGroup. Ваш метод попробовал только что и я не могу понять как задать группе или элементу расположение именно на нужном мне листе.

    На вход все эти методы просят  документ, элементы и координаты. Все это я легко получаю, а вот метод где я могу задать вид на котором требуется разместить элемент никак не найду.

    Обыискался во всем Рунете.  Глухо.  Есть варианты? Может я что то не так делаю?

    #8124 Score: 0

    Legantmar
    Хранитель
    423 pts

    а это не оно?
    http://www.revitapidocs.com/2018.1/0f951f28-eb6b-2a37-668a-b248bfb7de97.htm

    где
    viewSheetId = sheet.Id – лист на котором размещается вид
    viewId = view.Id – вид для размещения на листе

    #8125 Score: 0

    Евгений
    Участник
    1 pt

    Этот метод подходит для видов и легенд….ну и в общем для элементов которые располагаются в  вьюпортах, а группа располагается как то сама по себе, без вьюпорта. По типу ведомости. Но только ведомость делится на элемент ведомости и элемент расположенный на листе,   а у группы нет такого.  Id группы в диспетчере проектов  и id элемента на листе одинаковые.

    Сейчас еще раз поверил на всякий случай.  Да… предложенный метод работает только с элементами у которых есть свой  собственный вид.

    Может есть еще предложения?

    #8126 Score: 0

    Legantmar
    Хранитель
    423 pts

    что такое группа?
    как ты их располагаешь на листе руками? покажи скриншот

    #8127 Score: 0

    Евгений
    Участник
    1 pt

    заранее извиняюсь. Интернет только с планшета. И почему то криво вставляются изображения. Группы на листе в ревит изначально располагают путем копирования.

     

    Группа  это тип Group в API. На второй картинке,  если ее перевернуть можно увидеть.

    Скрипт не получилось выложить.

     

    #8128 Score: 1

    Alex Babinoff
    Модератор
    13 pts

    Пикчи огонь.

    http://www.revitapidocs.com/2018.1/0f6a7a2e-13b9-008a-4c41-951a0702d16b.htm

    Вот в этом методе есть вроде все что нужно для счастья:

    View sourceView,
    ICollection<ElementId> elementsToCopy,
    View destinationView,
    Transform additionalTransform,
    CopyPasteOptions options

    Legantmar

    Он просто про любые сгруппированные элементы.

    #8129 Score: 0

    Евгений
    Участник
    1 pt

    Голова идет кругом. Очень сложный метод. Пока так и не получилось его использовать.

    На вход в основной нод с группами поступают  Лист который копируется и  уже скопированный лист, далее в ноде я выбираю все группы которые  расположены на  копируемом листе, а вот дальше идет полнейшая неразбериха. Мой начальный уровень не позволяет мне пока решить  эту проблему.

     

    Питон постоянно выдает ошибки доходя максимум до первого аргумента.

    И он почему то ожидает на вход документ, а не вид.

    Как мне указать что я хочу копировать элементы именно по  методу как указали в предыдущем посте?

    Правильно ли я получаю ICol?

    Предупреждение:IronPythonEvaluator.EvaluateIronPythonScript операция не выполнена.
    Traceback (most recent call last):
    File “<string>”, line 63 in <module>
    TypeError: expected Document, got ViewSheet

    В общем я пока запутался еще больше. Если есть идеи, напишите пожалуйста.

     

Просмотр 15 сообщений - с 1 по 15 (из 15 всего)

Для ответа в этой теме необходимо авторизоваться.