我正在尝试利用Revit API中的ExtensibleStorage。我正在尝试在ArrayField中存储数组。我认为我的错误可能是由于IronPython接口造成的,但也许有人成功地做到了这一点?我知道要设置的对象应该是一个IList,但我似乎做不出来。在IronPython文档中,数组对象用作示例。如果我尝试这样做:vl = IList[ElementId]([v.ViewId for v in views]),我得到一个Systemerror:
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')
发布于 2020-09-13 09:06:45
我想我在c#中的AddArrayField遇到了同样的问题,可能做错了什么,但我的快速解决方案是简单地使用AddMapField。
FieldBuilder mapField_Child_Angle = mySchemaBuilder.AddMapField("FurnLocations_Angle", typeof(ElementId), typeof(double));
mapField_Child_Angle.SetUnitType(UnitType.UT_Length);发布于 2020-09-18 00:27:38
这对我很有效:
from System import Guid
from System.Collections.Generic import IDictionary, Dictionary
from Autodesk.Revit.DB.ExtensibleStorage import *
keyType = str
valueType = str
name = 'UserViews'
schemaBuilder = SchemaBuilder(Guid.NewGuid())
schemaBuilder.SetReadAccessLevel(AccessLevel.Public)
schemaBuilder.SetWriteAccessLevel(AccessLevel.Public)
schemaBuilder.SetSchemaName('Test')
schemaBuilder.AddMapField(name, keyType, valueType)
schema = schemaBuilder.Finish()
ent = Entity(schema)
dic = Dictionary[str, str]()
dic.Add('kyrreViews', '234234,121345,123113')
ent.Set[IDictionary[str, str]](name, dic)
val = ent.Get[IDictionary[str, str]](name)
>>> val
Dictionary[str, str]({'kyrreViews' : '234234,121345,123113'})https://stackoverflow.com/questions/63861112
复制相似问题