Обработка содержимого Текстовых примечаний
- В этой теме 23 ответа, 7 участников, последнее обновление 5 лет, 11 месяцев назад сделано Veronica.
-
АвторСообщения
-
Хочу обработать содержимое “Текстовых примечаний” в проекте (что-то типа Заменить, но в составе скрипта), но эти семейства системные и у них нет параметра, который можно было бы применить в нодах Element.GetParameterValueByName и Element.SetParameterByName. Также пробовал ModelText.Text, но похоже он для других целей (к тому же внесение изменений в Тексты остается не решенным).
Есть подозрение, что это можно сделать только с Design Script или Python. Просьба поделиться командами для извлечения содержимого из Текстовых примечаний и внесения нового содержимого в имеющиеся в проекте.
К примеру ниже: в код блоке a.Text – получаем текст, a.SetText(“Новый текст”) – задаем текст (тоже самое пишем в питоне, при необходимости)
Пример работы с параметром текстовых примечаний:
OUT =UnwrapElement(IN[0]).LookupParameter("Family").AsValueString()
Примечание:не знаю, может это только у меня такой глюк (наблюдал кстати давно, но не было необходимости работать с текстовыми примечаниями, поэтому забил), но когда пытаюсь выбрать текстовый элемент из модели Ревит – (через Select Model Element, либо способами питона) в языковой версии Ревита RUS – возникает ошибка .
Но в версии Ревита ENG все работает корректно.
Прошу написать отзывы у кого как обстоят дела в этом плане
Спасибо,
значит все-таки глюк, у которого , кроме смены языков, нет пока решенияПросьба поделиться командами для извлечения содержимого из Текстовых примечаний и внесения нового содержимого в имеющиеся в проекте.
Несмотря на язык приложения, получить текст можно через python таким образом (в этом примере я получил текст, который выделил):
А изменить выделенный текст на новый получилось таким способом:
Олег, а для выделенных элементов как нужно изменить ваш код, чтобы получить из них текстовое содержимое?
Если на вход подавать список элементов (Select Model Elements).
Спасибо и за этот код, но я интересовался про обработку текста из элементов, полученных нодом Select Model Elements.
В русской версии Revit не получится обработать текстовые элементы нодой Select Model Elements, причины читайте в начале топика, поэтому и был предложен такой костыль в виде пайтоновской ноды. В англоязычной версии Select Model Elements работает в штатном режиме. В макросах на C# тоже все работает
Да, читал. Но не воспринял ваш вариант как замену варианта с нодом.
Последний вопрос. Ваш вариант с заменой выделенного текста на новый у меня не работает. Полный код прилагаю. В чем я мог накосячить? (Не нашел как на этом форуме выделять код)
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
Не хватает ссылки на язык запросов 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
Напомню, что этот скрипт для единичного выделенного текстового элемента.
Я вам очень благодарен. Всё заработало.
Вновь вернулся к старому вопросу, но уже с положительной динамикой. Вместо проблемного Select Model Elements теперь получаю элементы иным способом. Поэтому вновь прошу помощи как изменить скрипт Oleg-а, чтобы он принимал элементы извне?
Насколько я понял, надо изменить строку
elId = uidoc.Selection.GetElementIds()
на что-то… типа…
elId = uidoc.GetElementIds(IN[1])
(тут не знаю как прописать) -
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.