我正在尝试利用 Revit API 中的 ExtensibleStorage。我正在尝试将数组存储在 ArrayField 中。我想也许我的错误是由于 IronPython 接口,但也许有人成功地做到了这一点?我知道要设置的对象应该是一个 IList,但我似乎无法制作一个。在 IronPython 文档中,Array-object 被用作示例。如果我尝试这个:vl = IList[ElementId]([v.ViewId for v in views])
我得到一个系统错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
SystemError: MakeGenericType on non-generic type
这是我的代码:
from System import Guid, Array
from Autodesk.Revit.DB.ExtensibleStorage import *
guid = Guid.NewGuid()
views = revit.uidoc.GetOpenUIViews()
vl = Array[ElementId]([v.ViewId for v in views])
schemaBuilder = SchemaBuilder(guid)
schemaBuilder.SetReadAccessLevel(AccessLevel.Public)
schemaBuilder.SetWriteAccessLevel(AccessLevel.Public)
schemaBuilder.SetSchemaName('Testing')
schemaBuilder.AddArrayField('Views', ElementId)
schema = schemaBuilder.Finish()
entity = Entity(schema)
entity.Set('Views', vl)
这是我的错误信息:
Exception : Autodesk.Revit.Exceptions.InvalidOperationException: Unsupported type: Autodesk.Revit.DB.ElementId[]
at Autodesk.Revit.DB.ExtensibleStorage.Entity.Set[FieldType](String fieldName, FieldType value, ForgeTypeId unitTypeId)
at Autodesk.Revit.DB.ExtensibleStorage.Entity.Set[FieldType](String fieldName, FieldType value)
顺便说一句:这工作正常:
from System import Guid, Array
from Autodesk.Revit.DB.ExtensibleStorage import *
guid = Guid.NewGuid()
views = revit.uidoc.GetOpenUIViews()
v = views[0].ViewId
schemaBuilder = SchemaBuilder(guid)
schemaBuilder.SetReadAccessLevel(AccessLevel.Public)
schemaBuilder.SetWriteAccessLevel(AccessLevel.Public)
schemaBuilder.SetSchemaName('Testing')
schemaBuilder.AddSimpleField('Views', ElementId)
schema = schemaBuilder.Finish()
entity = Entity(schema)
entity.Set('Views', v)
要获取值:entity.Get[ElementId]('Views')