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码,不能重复的使用。这次小知识就分享到这里,谢谢。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

baobao熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值