Autodesk.Revit.DB.ExtensibleStorage.Schema是控制Revit文档中扩展存储数据的API。Revit文档中的扩展存储数据可以是任何可以序列化的.NET数据类型,包括结构体、类和枚举等。
要在Revit文档中存储扩展数据,首先需要创建存储数据的模式。使用Schema类可以创建这个扩展存储模式。以下是创建扩展存储模式的代码:
SchemaBuilder schemaBuilder = new SchemaBuilder(guid);
schemaBuilder.SetReadAccessLevel(AccessLevel.Public);
schemaBuilder.SetWriteAccessLevel(AccessLevel.Public);
schemaBuilder.SetSchemaName("MySchema");
// 添加字段
FieldBuilder fieldBuilder = schemaBuilder.AddSimpleField("MyField", typeof(string));
fieldBuilder.SetDocumentation("This field stores a string.");
Schema schema = schemaBuilder.Finish();
在上述代码中,SchemaBuilder类用于创建一个新的扩展存储模式。然后我们定义读取和写入这个模式的权限。接下来设置模式的名称,并添加一个字符串类型的字段。最后使用SchemaBuilder的Finish方法来结束模式的创建。
要将数据存储到Revit文档中,我们需要使用Document类的Settings属性。以下是将数据存储到Revit文档中的代码:
Document document = commandData.Application.ActiveUIDocument.Document;
using (Transaction transaction = new Transaction(document))
{
transaction.Start("MyTransaction");
// 创建实例并存储数据
Entity entity = new Entity(schema);
entity.Set("MyField", "This is my data.");
document.Settings.SaveAsEntity(transaction, entity);
transaction.Commit();
}
在上述代码中,我们创建了一个新的实例并将数据存储到其中。然后使用Document类的Settings属性的SaveAsEntity方法,将实例及数据保存到Revit文档中。
要从Revit文档中检索扩展数据,我们需要使用Document类的Settings属性。以下是从Revit文档中检索扩展数据的代码:
Document document = commandData.Application.ActiveUIDocument.Document;
using (Transaction transaction = new Transaction(document))
{
transaction.Start("MyTransaction");
// 从文档中检索实例并读取数据
Entity entity = document.Settings.GetEntity(schema);
string myData = entity.Get<string>("MyField");
transaction.Commit();
}
在上述代码中,我们从Revit文档中获取了存在的实例,并读取了保存在其中的数据。使用Schema类的Get方法,我们可以指定我们要获取的实例的类型。
Autodesk.Revit.DB.ExtensibleStorage.Schema使我们能够扩展Revit文档中的数据存储。我们可以创建自己的数据存储模式,并将数据存储到其中。此外,我们还可以检索存储的数据。这使我们能够在自己的插件中以更加灵活的方式操作Revit文档中的数据。