Копирование листа
Главная › Форумы › Задать вопрос › Копирование листа
- В этой теме 20 ответов, 5 участников, последнее обновление 1 год, 11 месяцев назад сделано
Hydrobizon.
-
АвторСообщения
-
Здравствуйте коллеги. Возникла идея написать скрипт по копированию листов.
Смысл следующий, забираем с листа все элементы, забираем координаты вставки, копируем виды(так как их нельзя разместить на несколько листов), создаем новый лист, и вставляем все элементы по заданным координатам.
В теории все просто, на практике сразу столкнулся с проблемой…Как получить элементы спецификаций и групп размещенных на листе? Пока нашел только команды получения размещенных видов и вьюпортов.
Может кто уже делал подобный скрипт, подскажите пожалуйста.
Тебе нужно через Filter* найти все спецификации в проекте.
У каждой спецификации посмотреть лист на котором она размещена doc.GetElement(UnwrapElement(elem).OwnerViewId)
Отобрать только те которые тебе нужны.p.s. * – FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_ScheduleGraphics).WhereElementIsNotElementType().ToElements()
Спасибо огромное…не думал что спецификации в спецификациях и спецификации на листах в принципе разные элементы, хотя теперь это кажется логичным.
В итоге получил виды на листе, группы и спецификации, осталось забрать семейство штампа, так называемый OST_TitleBlock.
Через коллектор могу их все получить, но проверить на каком листе он расположен почему то не выходит. У него нет OwnerViewId. У меня в принципе не получилось найти свойства TitleBlock. Наверняка он просто как то иначе называется. Пробовал через Title ViewSheet получить это семейство, но тоже пока нет результата.
Может кто подсказать в каком направлении копать?
Да, идея штатная все к ней приходят.
В итоге получил виды на листе, группы и спецификации
Не забудь про легенды, легенды то можно копировать между листами (хотя религия ревита и не позволяет это делать на прямую), но их надо отделить от видов, чтобы не создавать копии легенд, или как вариант сделать это опцией, можно создать, а можно скопировать.
И итоговым скриптом поделился бы для общественности ;)
Легенды забираются автоматически, когда забираешь размещенные виды. Просто их нужно распознать, что бы не копировать как другие виды, так как легенду можно разместить на несколько листов.
Остался один нерешеный вопрос.
Как разместить существующую группу, на лист?
Довольно долго искал решение, но никак. Не могу найти метод размещения группы. Подскажите пожалуйста, кто знает.
Как разместить существующую группу, на лист?
А вот это интересно, в моём случае не решал такую задачу, не было групп на листах. Что через копию элемента (ElementTransformUtils CopyElement Method) не получается? Вроде бы группа по иерархии тот же элемент и можно получить у неё локэйшен и вставить по нему на новый лист.
Из всех методов что я находил самым подходящим казался placeGroup. Ваш метод попробовал только что и я не могу понять как задать группе или элементу расположение именно на нужном мне листе.
На вход все эти методы просят документ, элементы и координаты. Все это я легко получаю, а вот метод где я могу задать вид на котором требуется разместить элемент никак не найду.
Обыискался во всем Рунете. Глухо. Есть варианты? Может я что то не так делаю?
а это не оно?
http://www.revitapidocs.com/2018.1/0f951f28-eb6b-2a37-668a-b248bfb7de97.htmгде
viewSheetId = sheet.Id – лист на котором размещается вид
viewId = view.Id – вид для размещения на листеЭтот метод подходит для видов и легенд….ну и в общем для элементов которые располагаются в вьюпортах, а группа располагается как то сама по себе, без вьюпорта. По типу ведомости. Но только ведомость делится на элемент ведомости и элемент расположенный на листе, а у группы нет такого. Id группы в диспетчере проектов и id элемента на листе одинаковые.
Сейчас еще раз поверил на всякий случай. Да… предложенный метод работает только с элементами у которых есть свой собственный вид.
Может есть еще предложения?
что такое группа?
как ты их располагаешь на листе руками? покажи скриншотзаранее извиняюсь. Интернет только с планшета. И почему то криво вставляются изображения. Группы на листе в ревит изначально располагают путем копирования.
Группа это тип Group в API. На второй картинке, если ее перевернуть можно увидеть.
Скрипт не получилось выложить.
Пикчи огонь.
http://www.revitapidocs.com/2018.1/0f6a7a2e-13b9-008a-4c41-951a0702d16b.htm
Вот в этом методе есть вроде все что нужно для счастья:
View sourceView,
ICollection<ElementId> elementsToCopy,
View destinationView,
Transform additionalTransform,
CopyPasteOptions optionsLegantmar
Он просто про любые сгруппированные элементы.
Голова идет кругом. Очень сложный метод. Пока так и не получилось его использовать.
На вход в основной нод с группами поступают Лист который копируется и уже скопированный лист, далее в ноде я выбираю все группы которые расположены на копируемом листе, а вот дальше идет полнейшая неразбериха. Мой начальный уровень не позволяет мне пока решить эту проблему.
Питон постоянно выдает ошибки доходя максимум до первого аргумента.
И он почему то ожидает на вход документ, а не вид.
Как мне указать что я хочу копировать элементы именно по методу как указали в предыдущем посте?
Правильно ли я получаю ICol?
Предупреждение:IronPythonEvaluator.EvaluateIronPythonScript операция не выполнена.
Traceback (most recent call last):
File “<string>”, line 63 in <module>
TypeError: expected Document, got ViewSheetВ общем я пока запутался еще больше. Если есть идеи, напишите пожалуйста.
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.