Столкнулась с проблемой при работе скрипта. Пытаюсь расставить элементы (осветительные приборы) с размещением на грани в центре какого-либо помещения на потолке (в моем случае на перекрытие). Я определяю необходимую мне surfase из всего списка поверхностей перекрытия. Точку размещения определяю как центр помещения (пока рассматриваю помещения прямоугольной формы).
import clr
clr.AddReference(‘ProtoGeometry’)
from Autodesk.DesignScript.Geometry import *
clr.AddReference(‘RevitServices’)
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
clr.AddReference(‘RevitNodes’)
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)
host = IN[0]
ftype = UnwrapElement(IN[1])
pts =IN[2]
ref1=[]
tt = []
TransactionManager.Instance.EnsureInTransaction(doc)
for i in xrange(len(pts) ):
ref1 = host[i].Tags.LookupTag(“RevitFaceReference”)
uv1 = host[i].UVParameterAtPoint(pts[i])
dir1 = host[i].TangentAtUParameter(uv1.U,uv1.V).ToXyz()
try:
inst1 = doc.Create.NewFamilyInstance(ref1,pts[i].ToXyz(),dir1,ftype)
tt.append(inst1.ToDSType(False) )
except: tt.append(None)
TransactionManager.Instance.TransactionTaskDone()
OUT=tt
При работе в обычном файле без связанных файлов все работает отлично, а как только перехожу в большой проект со связанными файлами, где перекрытия лежат в связи, ревит выдает ошибку и закрывается:
Элементы я получаю из линкового файла через Element.GetFromLinkedFile. Возникает вопрос возможно ли в принципе подобное действие?
Или же все действия по выбору и определению поверхности перекрытия нужно делать внутри этого же питон скрипта в котором осуществляется размещение элементов. Чтобы ревит понимал, что поверхность берется из линкового файла. Если так то тогда как можно определить внутри питона surfase перекрытия? face.append(i.Faces) не работает. AttributeError: ‘Floor’ object has no attribute ‘Faces’