Revit二次开发小技巧(三),程序人员的属性之扩展存储

在项目中,我们想把一些不相关的数据记录在构件中,但是,如果全部展示出来,会让设计人员觉得构件很杂很乱。这样子我们需要一些功能去把我们自己想存的数据给存在构件中,而且可以不让设计人员看到。
在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码,不能重复的使用。这次小知识就分享到这里,谢谢。

猜你喜欢

转载自blog.csdn.net/Oneal5354/article/details/107871660
今日推荐