Обработка содержимого Текстовых примечаний

Главная Форумы Dynamo Ноды Обработка содержимого Текстовых примечаний

В этой теме 20 ответов, 6 участников, последнее обновление  Denver-22 2 мес., 2 нед. назад.

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

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

    Хочу обработать содержимое “Текстовых примечаний” в проекте (что-то типа Заменить, но в составе скрипта), но эти семейства системные и у них нет параметра, который можно было бы применить в нодах Element.GetParameterValueByName и Element.SetParameterByName. Также пробовал ModelText.Text, но похоже он для других целей (к тому же внесение изменений в Тексты остается не решенным).

    Есть подозрение, что это можно сделать только с Design Script или Python. Просьба поделиться командами для извлечения содержимого из Текстовых примечаний и внесения нового содержимого в имеющиеся в проекте.

    #7241 Score: 0

    txt
    Модератор
    90 pts

    К примеру ниже: в код блоке a.Text – получаем текст, a.SetText(“Новый текст”) – задаем текст (тоже самое пишем в питоне, при необходимости)


    Пример работы с параметром текстовых примечаний:
    OUT =UnwrapElement(IN[0]).LookupParameter("Family").AsValueString()
    Примечание:  

    не знаю, может это только у меня такой глюк (наблюдал кстати давно, но не было необходимости работать с текстовыми примечаниями, поэтому забил), но когда пытаюсь выбрать текстовый элемент из модели Ревит – (через Select Model Element, либо способами питона) в языковой версии Ревита RUS – возникает ошибка .

    Но в версии Ревита ENG все работает корректно.

    Прошу написать отзывы у кого как обстоят дела в этом плане

    #7242 Score: 0

    Ренат Я.
    Модератор
    53 pts

    по поводу выбора текстовых элементов, ответ дан в теме

    #7243 Score: 0

    txt
    Модератор
    90 pts

    Спасибо,
    значит все-таки глюк, у которого , кроме смены языков, нет пока решения

    #7244 Score: 3

    Oleg
    Участник
    30 pts

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

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

    А изменить выделенный текст на новый получилось таким способом:

    #7261 Score: 0

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

    Олег, а для выделенных элементов как нужно изменить ваш код, чтобы получить из них текстовое содержимое?

    Если на вход подавать список элементов (Select Model Elements).

    #7266 Score: 1

    Oleg
    Участник
    30 pts

    Ну если нужно получить текст из нескольких элементов, то можно вот так:

     

    #7267 Score: 0

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

    Спасибо и за этот код, но я интересовался про обработку текста из элементов, полученных нодом Select Model Elements.

    #7268 Score: 0

    Oleg
    Участник
    30 pts

    В русской версии Revit не получится обработать текстовые элементы нодой Select Model Elements, причины читайте в начале топика, поэтому и был предложен такой костыль в виде пайтоновской ноды. В англоязычной версии Select Model Elements работает в штатном режиме. В макросах на C# тоже все работает

    #7269 Score: 0

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

    Да, читал. Но не воспринял ваш вариант как замену варианта с нодом.

    Последний вопрос. Ваш вариант с заменой выделенного текста на новый у меня не работает. Полный код прилагаю. В чем я мог накосячить? (Не нашел как на этом форуме выделять код)

    import clr
     
    clr.AddReference(“RevitAPI”)
    import Autodesk
    from Autodesk.Revit.DB import *
     
    clr.AddReference(“RevitServices”)
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager
     
    doc = DocumentManager.Instance.CurrentDBDocument
    uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument

    # Start Transaction
    TransactionManager.Instance.EnsureInTransaction(doc)
    elId = uidoc.Selection.GetElementIds();
    el = (doc.GetElement(elId.FirstOrDefault()))
    newText = “Примечание”
    el.Text = newText
    # End Transaction
    TransactionManager.Instance.TransactionTaskDone()

    OUT = el.Text

    #7270 Score: 1

    Oleg
    Участник
    30 pts

    Не хватает ссылки на язык запросов LINQ. Попробуйте так:


    import clr
    clr.AddReference("RevitAPI")
    import Autodesk
    from Autodesk.Revit.DB import *
    clr.AddReference("RevitServices")
    import RevitServices
    from RevitServices.Persistence import DocumentManager
    from RevitServices.Transactions import TransactionManager
    import System
    clr.AddReference("System.Core")
    clr.ImportExtensions(System.Linq)
    doc = DocumentManager.Instance.CurrentDBDocument
    uidoc = DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
    # Start Transaction
    TransactionManager.Instance.EnsureInTransaction(doc)
    elId = uidoc.Selection.GetElementIds();
    el = (doc.GetElement(elId.FirstOrDefault()))
    newText = "Примечание"
    el.Text = newText
    # End Transaction
    TransactionManager.Instance.TransactionTaskDone()
    OUT = el.Text

    Напомню, что этот скрипт для единичного выделенного текстового элемента.

    #7271 Score: 0

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

    Я вам очень благодарен. Всё заработало.

    #7809 Score: 0

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

    Вновь вернулся к старому вопросу, но уже с положительной динамикой. Вместо проблемного Select Model Elements теперь получаю элементы иным способом. Поэтому вновь прошу помощи как изменить скрипт Oleg-а, чтобы он принимал элементы извне?
    Насколько я понял, надо изменить строку
    elId = uidoc.Selection.GetElementIds()
    на что-то… типа…
    elId = uidoc.GetElementIds(IN[1]) (тут не знаю как прописать)

    #7810 Score: 1

    ИваСерж
    Модератор
    86 pts

    получаем элементы из Динамо? Тогда можно их Анврапнуть и считать Проперти – ИД. Например для “плоского” списка, можно получить через цикл

    elId = list()
    for elem in IN[1]:
    elId.append(UnwrapElement(elem.ID))

    #7811 Score: 0

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

    Да, элементы TextNote получаю в Динамо.
    Получился такой код

    Ругается на строку elId.append(UnwrapElement(elem.ID)):
    Traceback (most recent call last):
    File “”, line 17, in
    AttributeError: ‘UnknownElement’ object has no attribute ‘ID’

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

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