中铁七局集团有限公司勘测设计研究院郑州450048
摘要:电气照明设计是电气设计的核心部分,其设计的合理性与人们生活品质息息相关。随着社会进步及生活水平提高,照明设计的规范标准和要求也越来越严格。与其相对应的是,照明设计软件目前仍然停留在二维CAD软件,其设计效率较低。
与此同时,BIM的发展给电气照明设计带来了新模式。本文通过Revit软件的二次开发,制作了电气照明设计插件,增加了点照度计算、平均照度计算及功率密度计算方法,弥补软件相关的不足,方便照明设计,推动BIM技术发展。
关键词:照明;Revit;API;
0前言
《建筑节能与可再生能源利用通用规范》GB55015-2021自2022年4月1日起开始实施,其中3.3.7条列举了关于照明功率密度和照度标准值要求,相比较《建筑照明设计标准》GB50034-2013,此新规范将后者的普通条文升级到了强制性条文,说明国家对节约能源和合理照明设计的要求越来越高。
在目前的电气照明设计中,CAD仍然是广大设计人员首选的设计软件,然而受限于其二维设计的局限性,三维空间元件信息无法充分表达,因此实际设计中,无法直接通过软件自动计算照度和功率密度,仍然需要设计人员根据在确定灯具数量、功率、排布方式后,后通过计算器进行计算,得到需要的数据。此种方法效率较低,过程繁琐,信息化程度不高。
由于Revit在建筑设计中仍然没有像CAD一样广泛使用,二维平面设计仍然是制图的主流,同时电气设计在建筑设计中没有建筑、结构的比重大,因此Revit软件中电气插件开发在整个行业中有关二次开发内容的比重较小,与建筑、结构有较大差距,从Revit的面板栏即可看出,“建筑”、“结构”分别为一栏,电气与其他专业集成在了“系统”栏,打开电气的工具栏内容也不多,需要优化的空间很大。
Revit软件属于专业为BIM设计的一款属于平台级别的建模软件,其中配备了十分强大的三维建模功能而建筑信息模型,具备的特点即是可视化、参数化,通过Revit软件,可以充分发挥其三维空间信息的优势,自动识别灯具的安装高度、灯具参数等内容,进而可以实现自动计算照度和功率密度,方便检查是否满足规范要求。通过Revit自带的API(Application Programming Interface),将编写的程序加载到软件当中,Revit API是建立在Revit产品基础至上的。它是一个类库,需要在Revit运行时才能够工作。通过强大的API,可以添加用户基于API开发的插件来扩展和增强Revit的功能和应用。同时,使用SDK(software development kit)中RevitLookup和AddinManager等软件访问模型中的图形数据、参数数据,进而对元素进行各种操作。
1 开发工具及开发流程
1.1 Revit软件属于一款非常出色的平台级别的建模软件,功能强大,但是很难满足具体某个专业的设计人员需求,因此它提供了开源的API接口,通过其接口,可以使技术应用范围相对较大并且应用价值也更加理想。
其开发工具主要通过以下几个软件实现:
(1)Microsoft Visual Studio:此平台是微软公司开发的用于开发者编写程序的软件,可通过多种语言进行编写,如Python、C#、Linux等语言。本文通过C#语言进行编程,完成软件的二次开发。值得注意的是,本文使用的是Revit2019是基于.NET4.7运行环境的,因此也需要Visual Studio的版本为至少2017版以上。
(2)Revit SDK:即Revit的工具和使用程序,包含RevitAPI.chm、RevitLookup和AddinManager等软件。RevitAPI.chm是Revit开发中最常使用的一款文件,类似于开发的工具书,里面包含了所有RevitAPI的方法、相关类以及类的成员。编程中使用的调用属性均可以通过RevitAPI.chm进行查找,类的功能、属性在文件中均有解释。RevitLookup是欧特克公司自研的插件,不用通过代码即可在Revit中直观看到API对象,在日常使用中可以查询元件的详细参数,也可以看到参数在软件中的命名,编程时直接调用。AddinManager可以在Visual Studio编程结束后,在Revit中调用Visual Studio的dll文件,查看具体功能是否实现,方便编程过程中的调试。也可以在编程结束后,在程序封装到addin文件后,AddinManager直接调用addin文件,方便后期的使用。
1.2 通过外部应用(IExternalApplication)和外部命令(IExternalCommand)结合的方式开发点照度、平均照度、功率密度计算工具,通过外部应用的方式添加菜单和工具条,通过外部命令的方式实现点照度、平均照度、功率密度计算。工作流程图如图2-1所示
图2-1 Revit二次开发流程图
2数据的抓取与处理
2.1使用到的命令
(1)外部命令IExternalCommand。IexternalCommand是API用户通过外部命令来扩展Revit时必须在外部命令中实现的接口。包含如下内容:
UIApplication:创建菜单;
UIDocument:用户和文档的交互;
Application:处理文档;
Document:处理元素。
前两类分别访问UI交互级别的应用和文档类,后两者则分别访问其他内容的用户和文档类。本文在VisualStudio中使用到了UIDocument、Document。通过外部命令功能,调取Revit API中关于房间面积、灯具高度等参数,实现的Revit和Visual Studio的交互,即用户界面和编程软件、前端和后端的信息传递。
(2)外部引用IexternalApplication。Revit插件开发者可以通过此功能实现来添加应用。每次Revit启动时,会自动加载指定目录下的addin文件。因此编程结束后,将程序封装到addin文件,并放入指定文件夹。Revit即可以通过addin文件来识别和加载实现IexternalApplication的外部插件。本文在编程完成初步的功能,已经实现点照度、平均照度、功率密度计算等目标时,把功能封装到插件中,方便今后调取使用。
2.2提取面积数据。
获取元素的方式主要有三种:
(1)通过ID获取元素,由于Revit中的元素都有一个ID,可以通过ID来直接从文档中获取元素,命令为Document.GetElement(new ElementID(30));
(2).通过过滤器获取元素,过滤器方式是API里使用最广的方式,也是Revit推荐使用的方式。需要创建收集器与过滤器来获取用户想要的元素,命令为FilteredElementCollector=newFilteredElementCollector(doc);
(3)通过选择,使UIDocument的Selection属性,用户可以获得被选中元素的集合。命令为Uidocument.Selection.GetElementIDs()
本文在操作中,并不是大面积的选择房间进行照度计算和功率密度计算,仅仅为选定的某一个房间。因此本文选择了最后一种获取元素的方式,即调用了Uidocument的Selection属性。
在Revit中,有许多功能已经在软件中实现,如墙面积、地面面积等,这些数据可以通过LookUp软件进行查看。同时,通过Visual Studio软件的编程,提取LookUp的中面积数据,方便进行后续操作。面积数据在LookUp中存储于ParameterSet,日常操作中可以在Snoop Parameters界面中看到。面积数据如下图所示
图2-2 LookUp中面积属性
在二次开发里,需要将其中的房间面积数据提取出来。值得注意的是,在照度及功率密度计算公式中,常规要求选取的是地面面积,而在Revit的操作中,设计师通常是由上向下俯视,这种视角不利于地面的选取,需要选定指定剖面才能看到地面面积。而房间的地面面积是和屋面面积相等的,这时可以通过抓取房屋屋面面积的方式,得到地面面积。
Visio Studio软件中,通过命令
Selection sel = uidoc.Selection;
Reference r = sel.PickObject(ObjectType.PointOnElement);
Element element = doc.GetElement(r);
Ceiling ceiling = element as Ceiling;
首先令用户选择一个屋面,此时,如果用户不小心没有选择到屋面,则需要做出设定,让用户重新选择。通过命令
Ceiling ceiling = element as Ceiling;
if (ceiling == null)
return Result.Failed;
直到用户选择一个面以后,通过命令
Parameter parameter =ceiling.get_Parameter(BuiltInParameter.HOST_AREA_COMPUTED);
double area = parameter.AsDouble()
取得所选屋面的面积。抓取的数据即是LookUp中可以看到的AsDouble中的数据,由于Revit是国外软件,所有数据的单位都是英制单位,因此其中的数据是单位是平方英尺,需要乘0.092903转化为平方米数据,这样才能在后续的计算中得到正确的结果。此模型所得面积为14.4平方米。
2.3 识别灯具,获得光通量和功率。
在Revit中,每个构件都有自己的命名。在软件自带的灯具族中,灯具是以灯具“形式-安装方式-数量-功率”来命名的,如下图
图2-3 灯具族的命名
识别灯具中命名,就可以获得灯具的功率,获得功率后,根据《室内照明用LED产品能效限定值及能效等级》GB 30255-2019 和《普通照明用LED平板灯能效限定值及能效等级》GB 38450-2019相关规定,室内能效至少为三级,即60lm/W(色温<3500)和70lm/W(色温≥3500),依据《建筑照明设计标准》GB50034-2013规定,常见的如办公室、商场、控制室等场所的色温为3300~5300。因此选择灯具能效为70lm/W。以50W灯具为例,其光通量为3500lm。通过抓取灯具功率,同时获得了功率和光通量,一举两得。
2.4 抓取灯具安装高度。
Revit中灯具通常是族,以族实例(FamilyInstance)形式存在。而族在三维中有多个标高,不方便准确抓取和计算。在数学计算中,通常将物体定义为一个点,因此可以选择灯具安装的顶面作为所需要抓取的高度。本设计中灯具采用吸顶安装,灯具的安装高度和屋面的高度是一致的,即选择了屋顶高度作为灯具高度。在前文中已经将屋顶的面积成功抓取,同抓取面积的方法一样,但是修改了抓取的参数。在日常操作的属性界面中,同面积一样,LookUp中也有屋面的高度,方便日常查看。如下图所示
图2-3 LookUp中高度属性
通过程序处理,获得了屋面的高度。同样的,AsDouble数据中存储的是英尺数据,需要乘0.3048转化为米。此模型灯具高度为3.5m。
3 数据计算
3.1 点照度计算。根据《照明设计手册》(第三版)第五章:照度计算公式(5-1),点光源照度为,R为点光源到计算点距离,为光强,单位cd。由公式可以看出,照度与光源到地面距离的平方成反比。本文中设定光强为3500cd,R即是灯具安装高度,为上文提取的自标高的偏移量,为3.5m。
计算结果如下
图2-4 点照度计算结果
3.2 平均照度计算。根据《建筑照明设计》(第三版)第五章:平均照度计算公式(5-39),平均照度计算公式为,其中n为光源数量,为光源光通量,U为利用系数,K为维护系数。利用系数设定为0.8,维护系数设定为0.8.
计算结果如下
图2-5 平均照度计算结果
3.3 功率密度计算。根据《建筑照明设计规范》GB50034-2011条文说明,功率密度(LPD)单位是W/m2,为灯具功率/房间面积。值得一提的是,条文特意强调,不应使用照明功率密度限值作为设计计算照度的依据。LPD值近作为校验和评价的指标。
计算结果如下
图2-6 功率密度计算结果
4 插件封装
制作UITab,在Revit的面板上,添加照明计算的插件,在照明计算插件的内部包含有三个内容,分别为点照度计算、平均照度计算、功率密度计算。
(1)第一步,创建一个RibbonTab;
application.CreateRibbonTab(“照明计算”);
(2)第二步,在刚才的RibbonTab中创建UIPanel;
RibbonPanel rp=application.CreateRibbonPanel(“照明计算”,“点照度计算”);
RibbonPanel rp=application.CreateRibbonPanel(“照明计算”,“平均照度计算”);
RibbonPanel rp=application.CreateRibbonPanel(“照明计算”,“功率密度计算”)
创建三个按钮实现照明计算的三个功能。
(3)第三步,指定程序集的名称以及所使用的类名;目的是将上述三个按钮和程序中的功能链接起来,保证程序的成功调用。以功率密度计算为例,需要将程序集的路径(string assemblyPath)、命名空间及类名(照度计算.LDP)输入进去。
(4)第四步,创建PushButton,程序为PushButtonData,以功率密度计算为例,需要输入4个参数。参数1:在程序内部的名称(InnerNameRevit),程序内部的名称必须唯一,不能重复;参数2:按钮上显示的名称(功率密度),按钮上的名称是可以重复的,不会报错,例如“功率密度”;参数3:程序集路径(assemblyPath);参数四:程序使用到的命名空间及类名(照度计算.LDP)
(5)第五步,将PushButton添加到面板中。添加的面板内容可以是文字,也可以是图标,大图标限定32px,小图标限定16px,输入图标路径(string imgPath)和将路径下的图标赋值进去(pushButton.LargeImage=new BitmapImage(new Uri(imgPath));)
(6)第六步,Revit加载应用插件。通过输入Loaded Applications功能,加载生成的插件,同时由于是已经不需要在进行调试,因此加载的时候可以把Loaded Commands内的dll文件点掉。加载成功后,会再Revit面板上生成新功能。需要注意的是,通常加载程序是Revit2014,因此生成的addin文件会存放在2014文件夹内,本文使用的Revit是2019版本,需要将2014文件夹的addin文件复制到2019文件夹,这样Revit打开时就会有新的面板出现。如下图所示。
图2-7 插件封装后面板新增功能
5结论及展望
5.1 总结
现在电气照明设计领域的自动化程度不高,而规范对于照明设计的要求越来越高,此两者存在发展不平衡的矛盾。二维平台由于软件自身特性限制,已经很难满足设计功能的要求。
本文完成的工作:
(1)本文基于Revit软件和Visual Studio软件,通过抓取Revit中的Uidocument中灯具功率数据、房间面积数据、屋面高度数据,进而对数据进行处理,根据现行规范,套入照度计算、功率密度计算公式,实现了三维软件中某个房间的点照度计算、平均照度计算、功率密度计算。
(2)在功能完善后制作了插件,可以在软件打开后自动存在于面板栏,方便后期使用时调用功能,在实际使用中解决了二维软件无法自动计算三维参数的难题。本文通过插件的实现,丰富了电气三维软件设计的插件,方便了照明设计,提高了建筑电气设计效率。
5.2 展望
虽然已经完成了照明设计插件的功能,初步实现了电气设计的自动计算,但是目前仍然有几方面需要继续加深研究。(1)目前Revit自带的有关灯具的族数量不够多,灯具类型不够完善,因此在后期设计中需要补充灯具的种类,可以通过制定几种标准的灯具,将功率、安装方式、光源数量确定下来。(2)一个建筑有多个房间,不能依靠人力一个房间一个房间的标记,需要程序自动将所有房间的平均照度,功率密度计算出来,列一个表格。这时编程中就不用能Pick命令,而需要要Filter过滤器功能,把平面中所有的房间面积和所有灯具属性分别提取出来,进行每个房间的计算,再将计算结果以表格的形式罗列出来。
随着三维设计市场的逐渐扩大,软件功能的逐渐丰富,二次开发人员增多,插件也越来越完善,设计的便利性会增强,进而推动三维软件的推广,整个循环会形成正反馈,推动软件不断发展。目前已经有公司专门进行三维软件的开发,做了国产三维软件,结合国内BIM技术的发展,凭借三维软件自带强大的建模能力和信息化模式,必将在国内建筑电气化占有一席之地。直到三维软件设计便利性和二维软件一样时,二维软件就会面临淘汰,建筑电气设计智能化、自动化在未来也有望实现。
参考文献
[1]卢世碧,李健梅,李雪松等.AUTODESK REVIT二次开发基础教程[M].上海,同济大学出版社,2015:5-13.
[2]王鑫.基于Revit软件的建筑电气设计分析[J].现代建筑电气,2016(10):7-9.
[3]杨娜.基于建筑信息模型的电气照明自动设计研究[D].上海:华东交通大学,2021.
[4]王晅.BIM技术下照明设计方法研究[D].天津:天津大学,2017.
[5]王韶霞,崔玉礼.AutoCAD二次开发技术在煤矿的应用[J].煤炭技术,2013,32(6):165-166.
[6]谢伟双,陈利强,周云凯等.BIM技术在变电站工业化项目中的应用研究-以110kV龙华中心变电站为例[J].山东建筑大学学报,2018,33(4):84-89.
[7]李咏红.CAD二次开发方法研究与实现[D].成都:电子科技大学,2004
[8]邓波,李云,程广仁.BIM技术在施工企业中应用方式的探究[J].山东建筑大学学报,2014,29(2):182-186.