All NewFamilyInstance() overloads on Autodesk.Revit.Creation.Document and Autodesk.Revit.Creation.ItemFactoryBase now check to ensure that the input FamilySymbol is active (FamilySymbol.IsActive). Symbols that are not used in the document may be deactivated to conserve memory and regeneration time. When the symbol is inactive, its geometry is empty and cannot be accessed. In order to access the geometry of a symbol that is not active in the document, the symbol should first be activated by calling FamilySymbol.Activate().
If the symbol is not active the method will now throw. This prevents the situation where the new FamilyInstance created will not generate proper geometry or intersections with related elements.
Решение: создавать элементы не средствами Динамо, с через питон.
Я использовал команду doc.Create.NewFamilyinstance. Тогда семейства создаются без привязки к Динамо. Если нужно, могу подсказать как работать с NewFamilyinstance.
p.s.
import Revit
clr.ImportExtensions(Revit.Elements)
Element.ToDSType(False) – если мы создали элемент в Dynamo (и его не было в Revit) – Dynamo будет отслеживать. Т.е. при очередном запуске старый элемент будет удаляться и создаваться новый!
Element.ToDSType(True) – Dynamo не будет отслеживать и при каждом запуске будут создаваться новые элементы, старые удаляться не будут.
Идея не опробована предлагаю как вариант.
Вступление.
Штампы по сути это FamilyInstance.
Они находятся в системной категории OST_TitleBlocks
Реализация:
1. Выбрать все Штампы в проекте. У штампов есть параметр SHEET_NAME.
Фильтрануть Штампы SHEET_NAME.
2. Параллельно выбрать те же Штампы, но уже выбрать необходимый FamilyType штампа.
3. Нодом из пакета Clockwork FamilyInstance.SetType поменять отфильтрованным штампам нужный тип, выбранный в п.2
У меня есть глубокие сомнения, что назначение каких либо параметров изоляции необходимо. Что дальше будете с этим параметром делать? У вас получится считать его для спецификации? Вы попробовали реализовать ваши задачи вручную?
Теперь по скрипту:
1. Изоляция не экземпляр семейства. Очевидно, FamilyInstance.Type выдает ошибку.
Этим нодом по экземпляру семейства определяют к какому типоразмеру он относится. Для изоляции этот метод не применим.
2. Спасибо за скрин параметров изоляции. Очевидно, в именах параметров изоляции трубы нет параметра с названием “Рулон1” . Скорее всего, вам нужен параметр “Толщина изоляции”.
П.С. Можно экспортировать весь скрипт нажав Файл-Экспорт рабочего пространства как изображение. Или можно просто на фотик кликнуть под крестиком закрытия Динамо. Пожалуйста, экспортируйте скрипт полностью, так его проще анализировать.
Молодец!
Если работаешь с балочной системой, то видимо нужно ставить нод FamilyInstanse.Type, чтобы добраться до каждого элемента.
Ты же так и делал, получая параметры “b” и “h”.
Если ты задачу выполнил, то при чем тут я и тем более наброска на питоне )))
Код на питоне подкорректировал. при выборе стены все работает. При выборе семейства панели (категория Каркас несущий, семейство создано на основе типовой модели) ругается TypeError: expected HostObject, got FamilyInstance. Подскажите чего не хватает
TransactionManager.Instance.EnsureInTransaction(doc)
d1=doc.Create.NewFamilyInstance(location,symbol,referenceDirection,host)#,StructuralType.NoneStructural)-StructuralType не определен
TransactionManager.Instance.TransactionTaskDone()
OUT= d1
#The inputs to this node will be stored as a list in the IN variable.
dataEnteringNode = IN
point = IN[0]
view = UnwrapElement(IN[1])
fam = UnwrapElement(IN[2])
name = IN[3]
num = IN[4]
TransactionManager.Instance.EnsureInTransaction(doc)
a = FilteredElementCollector(doc,UnwrapElement(view).Id).OfCategory(BuiltInCategory.OST_GenericAnnotation)
for k in a:
b=UnwrapElement(k).Id
doc.Delete(b)
i=0
while i<point.Count:
dl = doc.Create.NewFamilyInstance(point[i],fam,view)
n = dl.LookupParameter(“Имя”).Set(name[i])
n1 = dl.LookupParameter(“Номер”).Set(num[i])
i=i+1
TransactionManager.Instance.TransactionTaskDone()
OUT = dl
Alexandr Popov, буду искать в этом направлении.
Насколько я понимаю, посредсвом “чистого” Динамо вставить что-либо в легенду не получиться.
На международном форуме у человека не получилось, а ответ он так и не получил… -detail-conponent-types-in-a-legend
Сейчас попробую разобраться в ноде FamilyInstanseByView. У меня есть подозрение, что для вставки семейства в легенду нужно использовать
другой метод, чем для вставки семейства в 3Д пространство.
Может, у кого-то уже есть решение какой коммандой вставлять?
Воспользовался нодом из пакета ClockWork FamilyType.СompoundStructureLayers(немного доработанный-добавлена Density) но вот что заметил, в стене 9 слоёв( 2 из которых граница сердцевины) и того получаем 7 с материалами, но почему-то он вытаскивает только 3 слоя и параметры для них. Получается в строчка ” Count<num” где count-счётчик, а num кол-во слоёв, не работает что ли? в чём подвох? он останавливается на слое “сердцевина”?
среди которых нашелся и адаптированный к Revit 2015 CmdDimensionWallsFindRefs.cs – create dimensioning elements between opposing walls using FindReferencesByDirection
все это на C# и встречаются новые для меня команды. в общем пока пытаюсь разобраться во всем этом хаусе Джереми ))
p.s. никогда бы не подумал, что поставить размер между внешними гранями стен так сложно…
Нашёл то что искал, нод от clockwork – FamilyInstance.SubComponents. Вот заглядывает только в первый уровень вложенности. Может есть мысли как цикл переделать, чтобы развёртывал каждое семейство, что он нашёл? Ссылка на проект и скрипт – https://drive.google.com/folderview?id=0BwmNjVD4W1-BX25YRUk5SXBla28&usp=sharing (RVT2016) Работает на вот таком пайтон коде:
import clr
clr.AddReference(‘RevitAPI’)
from Autodesk.Revit.DB import *
for item in items:
itemlist = list()
try:
for subcomp in item.GetSubComponentIds():
itemlist.append(doc.GetElement(subcomp).ToDSType(True))
except:
donothing = 1
elementlist.append(itemlist)
OUT = elementlist
Для Александра Попова и тех, кто интересовался
Помимо нода Parameters, который показывает все параметры, и нода getParameterValueByName, который вызывает нужный параметр по его имени,
есть еще нод из пакета Clockwork с именем FamilyType.CompoundStructureLayers, который показывает структуру стены (стен), например, материалы слоев и их толщину.
если нужен питон код, то достаточно заглянуть в этот custom нод