Revit二次开发——扩展存储
在revitAPI中,提供了Extensible Storage framework,可以使开发者将需要存储的数据存到Revit的rvt文件中, 扩展的数据始终跟着这个Rvt文件走,不会丢失。而且存储的数据可以设置访问权限。对于保密数据可以只能是你自己的程序读取,或只有具有特殊的开发者代号的程序才能访问。对于数据的保密性非常有帮助。
一、相关类
1、SchemaBuilder
Autodesk.Revit.DB.ExtensibleStorage下
此类用来创建Schema,相当于一个工厂,可以在此类中进行一些设置,生产出来的Schema遵循这些设置。
public class SchemaBuilder : IDisposable
{
//使用guid构造一个SchemaBuilder,生产出来的Schema使用此guid
public SchemaBuilder(Guid guid);
~SchemaBuilder();
public bool IsValidObject { get; }
//guid是否有效
public static bool GUIDIsValid(Guid guid);
//生产者id是否有效
public static bool VendorIdIsValid(string vendorId);
//判断一个字符串是否可以作为SchemaBuilder实例的名字
public bool AcceptableName(string name);
//添加一个数组属性
public FieldBuilder AddArrayField(string fieldName, Type fieldType);
//添加一个映射属性
public FieldBuilder AddMapField(string fieldName, Type keyType, Type valueType);
//添加一个简单属性
public FieldBuilder AddSimpleField(string fieldName, Type fieldType);
public sealed override void Dispose();
//关闭当前工厂并生产一个Schema
public Schema Finish();
//当前工厂是否可用
public bool Ready();
//设置ApplicationGUID,当AccessLevel为Application时必须要设置
public SchemaBuilder SetApplicationGUID(Guid applicationGUID);
//设置文档注解
public SchemaBuilder SetDocumentation(string documentation);
//设置读权限
public SchemaBuilder SetReadAccessLevel(AccessLevel readAccessLevel);
//设置生产的Schema名字,可用于唯一识别Schema
public SchemaBuilder SetSchemaName(string schemaName);
//设置生产者id。当AccessLevel为Application或者Vender时必须要设置
public SchemaBuilder SetVendorId(string vendorId);
//设置写权限
public SchemaBuilder SetWriteAccessLevel(AccessLevel writeAccessLevel);
[HandleProcessCorruptedStateExceptions]
protected virtual void Dispose(bool A_0);
protected virtual void ReleaseUnmanagedResources(bool disposing);
}
2、AccessLevel
Autodesk.Revit.DB.ExtensibleStorage下
这是一个枚举,表示SchemaBuilder/Schema的访问权限,一共有三个值:
public enum AccessLevel
{
//所有人都可以访问
Public = 1,
//只有对象的生产者才可以访问
Vendor = 2,
//只有创建此对象的应用可以访问
Application = 3
}
注:对于不需要加密的数据,读写操作均使用Public即可。对于需要加密的数据,需要使用Vendor或者Application,但是对于Vendor和Application的理解还不清晰,所以没有测试过,网上也没有找到相关实例,有待后续实践。
3、Schema
Autodesk.Revit.DB.ExtensibleStorage下,是一个中间产物,可以用它构造Entity,也可以调用静态方法在内存中查找Schema实例。
public class Schema : IDisposable
{
//没有构造方法,只能通过工厂类SchemaBuilder创建
~Schema();
//获取ApplicationGUID
public Guid ApplicationGUID { get; }
//获取注解
public string Documentation { get; }
//获取GUID
public Guid GUID { get; }
public bool IsValidObject { get; }
public AccessLevel ReadAccessLevel { get; }
public string SchemaName { get; }
public string VendorId { get; }
public AccessLevel WriteAccessLevel { get; }
//从所有打开的文档中删除与此架构对应的所有实体,并从内存中删除此架构。
public static void EraseSchemaAndAllEntities(Schema schema, bool overrideWriteAccessWithUserPermission);
//列出内存中所有的Schema
public static IList<Schema> ListSchemas();
//根据guid在内存中获取Schema
public static Schema Lookup(Guid guid);
public sealed override void Dispose();
//根据属性名获取属性
public Field GetField(string name);
//列出所有属性
public IList<Field> ListFields();
//是否有读权限
public bool ReadAccessGranted();
//是否有写权限
public bool WriteAccessGranted();
[HandleProcessCorruptedStateExceptions