Реализация Key-value хранилища внутри Revit файла.
Если не хочется вникать просто скопируйте код и не забудьте поправить импорты если нужно:
Ограничения: ключ и значение могут быть только строками.
storage = Storage(doc, Guid("f06287CD-BB06-47AC-88E0-705D5411F962"))
storage.set("key1", "value")
print storage.get("key1")
storage.remove("key1")
print storage.has("key1")
Подробное описание работы с ExtensibleStorage см. по ссылкам ниже.
Основные этапы будут следующие:
Schema
c одним единственным полем-словарем**DataStorage
** c нужной Schema
**DataStorage
** Entity
объектEntity
словарь (Dictionary<string, string>
)Entity
Entity
обратно в **DataStorage**
Весь этот ужас возьмет на себя класс Storage.
Взять существующую схему по Guid
schema = Schema.Lookup(self._schema_guid)
Либо создать новую с помощью SchemaBuilder
:
Методом AddMapField()
мы создаём новое поле, в которое будем сохранять словарь, указав что ключ и значение у нас будут типа str.
К сожалению поддержки объектов любого типа для значений нет, только Entity
Cхему возвращает метод .Finish()
schema_builder = DB.ExtensibleStorage.SchemaBuilder(self._schema_guid)
schema_builder.SetSchemaName("Storage")
schema_builder.AddMapField("MapField", str, str)
schema = schema_builder.Finish()