在项目中,我们想把一些不相关的数据记录在构件中,但是,如果全部展示出来,会让设计人员觉得构件很杂很乱。这样子我们需要一些功能去把我们自己想存的数据给存在构件中,而且可以不让设计人员看到。
在2012年的是RevitAPI提供了扩展存储的功能。(Schema)
下面我们来讲解一下怎样子来操作:
public void SetSchema( Wall wall, string guid, string name,string data )
{
//设置Schema的数据结构框架
SchemaBuilder schemaBuilder = new SchemaBuilder(new Guid(guid));
//设置这个结构框架的可读性和可写性
schemaBuilder.SetReadAccessLevel(AccessLevel.Public);
schemaBuilder.SetWriteAccessLevel(AccessLevel.Public);
//设置这个框架的总名称
schemaBuilder.SetSchemaName("我是总测试名称");
//设置这个框架的类型和数据的名字
schemaBuilder.AddSimpleField(name, typeof(string));
//把数据结构框架添加到Schema中
Schema schema = schemaBuilder.Finish();
//创建一个新的数据对象
Entity entity = new Entity(schema);
//得到Revit中对应名字的数据对象
Field field = schema.GetField(name);
//然后给数据对象entity赋值
entity.Set(field, data);
//最后给墙添加数据
wall.SetEntity(entity);
}
在项目中只能用Revit Lookup去查看我们插入的数据,如下图:
Guid参数
是全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符。我们在使用的时候怎样子去生成GUID参数呢?
生成GUID参数有6种方法。我们可以在VS中直接生成,点击工具选项卡–>点击创建GUID
弹出下面界面中,随便点击一个就是生成一个新的GUID码了。我一般选择第5个,因为不会生成太多多余的东西。
全部代码如下:
[Transaction(TransactionMode.Manual)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIDocument uidoc = commandData.Application.ActiveUIDocument;
Document doc = uidoc.Document;
var temp = uidoc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element);
Wall el = doc.GetElement(temp) as Wall;
Transaction trans = new Transaction(doc, "生成外部存储");
trans.Start();
SetSchema(el, "40A901FC-A0F4-4653-ABC3-CC1140391ADB", "我是测试名称", "我是测试内容");
trans.Commit();
return Result.Succeeded;
}
public void SetSchema( Wall wall, string guid, string name,string data )
{
//设置Schema的数据结构框架
SchemaBuilder schemaBuilder = new SchemaBuilder(new Guid(guid));
//设置这个结构框架的可读性和可写性
schemaBuilder.SetReadAccessLevel(AccessLevel.Public);
schemaBuilder.SetWriteAccessLevel(AccessLevel.Public);
//设置这个框架的总名称
schemaBuilder.SetSchemaName("我是总测试名称");
//设置这个框架的类型和数据的名字
schemaBuilder.AddSimpleField(name, typeof(string));
//把数据结构框架添加到Schema中
Schema schema = schemaBuilder.Finish();
//创建一个新的数据对象
Entity entity = new Entity(schema);
//得到Revit中对应名字的数据对象
Field field = schema.GetField(name);
//然后给数据对象entity赋值
entity.Set(field, data);
//最后给墙添加数据
wall.SetEntity(entity);
}
}
注:GUID码具有唯一性,如果使用我这里代码的时候,GUID需要自己去生成。而且每生成一个数据都需要用到新的GUID码,不能重复的使用。这次小知识就分享到这里,谢谢。