一种基于标签族的引线标注二次开发方法
2019-08-08杨杰仁
范 宇 力 辉 杨杰仁 杨 睿
(1.北京城建设计发展集团股份有限公司成都分院,四川 成都 610031; 2.晨越建设项目管理集团股份有限公司,四川 成都 610031)
1 概述
建筑行业的变革离不开数字信息化技术,从最原始的手工绘图到CAD的应用[1],建筑行业完成了一次质的飞越。随着行业的发展,工程多样化和复杂化的特点日渐明显[2],传统的二维设计中经常出现信息错误和相互矛盾[3],影响工程施工。在此背景下,BIM技术应运而生,建筑行业领域正迎来第二次技术革新,由传统的二维设计转向三维空间立体设计[4]。基于此,Autodesk公司的Revit软件产品以其智能化和便捷化特点在建筑领域得到广泛应用[5]。但由于国内外行业习惯的不同,Revit中某些功能具有局限性,影响工作效率,而其中标注功能尤为突出。
2 Revit标注二次开发的必要性
标注可以把图纸模型中的各个构件的尺寸、材质等信息直观有效的表现出来。由于Revit为国外软件,Revit自带的引线标注方式和国内行业的标注习惯有所差异,使用Revit自带的注释功能对梁、柱进行标注的效果如图1所示。
Revit系统自带的注释功能有两个显而易见的缺点:
1)文字下方无下划线,不符合国内标注规范。
2)标注引线起点位置固定(默认为构件中心),挪动标注位置时该点不会移动,造成诸多不便。
因此为了使Revit更好地适应国内行业设计和工作流程,使其操作和标准效果符合行业绘图习惯及规范,需对Revit进行二次开发。
3 Revit二次开发介绍
3.1 API简介
Revit API,指的是Revit Application Programming Interface,常称为Revit应用程序开发[6]。Revit系列的建筑、结构、设备三个产品都有对应的API,这些API被整合成一个总的API包,称为Revit API[7]。
Revit API包括一些基本主题:插件集成(Add-in Integration),在Revit中必须对插件进行注册后才能进行调用[8]。Revit应用类和文档类(Application and Document),主要包括Application,UIApplication,Document和UIDocument这几类,一个Revit应用对象对应一个独立的Revit会话,用户可以通过这个对象访问Revit文档、选项以及其他应用范围的数据和设置。元素集(Elements-Essentials),主要包括各类元素的类别、机制和特征等;过滤器(Filtering),就是从文件中过滤出所需要的元素;选择集(Selection),就是使用文档中选中的元素的集合;参数(Parameters),大多数的元素信息都是被当做参数进行存储的;使用Revit API可以对Revit族进行创建和修改,以及对一些族实例进行应用载入。
3.2 开发工具
Revit2014是基于.NET 4.0的运行环境,所以需要使用Visual Studio 2010或者更高的版本,用.NET 4.0环境来编译。
Revit开发工具还有很多,例如RevitSDK,这是一个Revit API的帮助文档,里面包含了许多带源代码的例子,可供用户学习使用。RevitLookup是Autodesk开发的插件,不用写代码就可以直观的看到API的对象,它包含在SDK的压缩包中,可以拿到源代码之后自己进行编译;AddinManager也是Autodesk的官方插件,也包含在SDK文件中,它可以在不重启Revit的情况下修改插件代码并再次加载运行[9]。
4 引线标注的二次开发
一个完整的标注可拆分为标注引线、标注文字、文字下划线三部分组成,因此需要解决引线和文字的创建、读取标注构件信息、信息赋值等问题。
4.1 引线、文字创建
引线、文字创建有多种方法,常用三种方法如表1所示。
以上三种方法都存在部分缺点,借鉴上述方法中的核心思想,本文提出了一种新的标注创建方法:通过Revit UI新建标签族,为文字下方添加横线后再次通过Revit API载入进行编辑。该方法的优点为:
1)与行业标注习惯相符,下划线长度可根据标注文字字符串长度自动调节;
2)下划线与标注文字为同一组,移动方便。
4.2 读取族名称
通用标注习惯中标注文字内容为当前族类型名称,如底纵梁-1 500×2 600。则思路转变为读取当前选中族类型的名称。
表1 常用引线、文字创建方法
具体过程为先从FamilyInstance获取FamilySymbol,然后从FamilySymbol.Family拿到对应的族,最后调用Name属性。但是对于系统族是获取不到Family的,可根据CeilingType.FamilyName获得其名称。
4.3 修改新建标签族文字内容
为将获取的族类型名称赋予到标签族文字中,需找到标签族中标注文字的ParameterName。RevitLookup是Autodesk平台开发的一款不用写代码就可以直观地看到API对象的插件。使用RevitLookup可很轻松的查找到标注文字的ParameterName,将读取到的族类型名称赋到标签族文字中便实现了标注功能。代码如下:
string parameterName = "注释上标";
Parameter topdimname = fi.LookupParameter(parameterName);
string text = symbolname;
topdimname.Set(text)。
4.4 调整下划线长度
使用RevitLookup读取标签族中下划线名称,根据标注文字字符串长度对下划线长度重新赋值。
4.5 标注效果
采用对标签族二次开发后的插件标注效果如图2所示。
标注效果符合国内行业习惯,且引线长度根据文字长度自动调节,文字内容也可再次进行修改。
5 结语
本文通过对比分析几种常用创建引线及文字的方法优缺点,借鉴其思想,提出采用Revit UI新建标签族,再通过Revit API载入进行编辑的新思路,以UI与API相结合的方式创建引线标注插件。该标注插件能够满足设计工作中对于标注的需要,大大提高工作效率。开发过程及思路可为行业其他领域的二次开发提供借鉴。