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

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

В этой теме 11 ответов, 4 участника, последнее обновление  Denver-22 1 месяц назад.

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

    Denver-22
    Участник

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

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

    #7241 Score: 0

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

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


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

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

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

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

    #7242 Score: 0

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

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

    #7243 Score: 0

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

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

    #7244 Score: 3

    Oleg
    Участник
    29 pts

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

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

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

    #7261 Score: 0

    Denver-22
    Участник

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

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

    #7266 Score: 1

    Oleg
    Участник
    29 pts

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

     

    #7267 Score: 0

    Denver-22
    Участник

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

    #7268 Score: 0

    Oleg
    Участник
    29 pts

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

    #7269 Score: 0

    Denver-22
    Участник

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

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

    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
    Участник
    29 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
    Участник

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

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

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