• 1.55 MB
  • 2022-05-11 18:37:34 发布

基于BIM的无砟轨道施工图出图与工程量统计研究

  • 93页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
密级:公开论文类型:应用研究工程硕士学位论文基于BIM的无砟轨道施工图出图与工程量统计研究StudyontheDrawingDiagramandEngineeringQuantityofBallastlessTrackBasedonBIM培养单位:交通运输学院专业领域:交通运输工程学生姓名:刘子朋校内导师:张晓东副教授校外导师:郑贺民高工二○一八年六月 独创性声明本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果,也不包含为获得石家庄铁道大学或其它教育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明并表示了谢意。签名:日期:关于论文使用授权的说明本人完全了解石家庄铁道大学有关保留、使用学位论文的规定,同意学校保留并向有关部门送交论文的复印件和电子版本,允许论文被查阅和借阅,同意学校将论文加入《中国优秀博硕士学位论文全文数据库》和编入《中国学位论文全文数据库》。本人授权石家庄铁道大学,可以采用影印、缩印或其他复制手段保存论文,可以公布论文的全部或部分内容。(保密的论文在解密后应遵守此规定)作者签名:日期:导师签名:日期: 摘要随着计算机科学与信息技术的快速发展,BIM(建筑信息模型)技术在房屋建筑行业得到了广泛的应用,并带来了巨大的社会和经济效益,显示了其在商业应用中的巨大价值。基于BIM模型的施工图出图与工程量统计,能够对模型中的修改实时动态更新,避免不同行业之间的信息沟通不及时、不流畅,节约大量的时间,提高了工作效率。Revit软件本身能够对建立的模型导出施工图和工程量,但是效率不高且比较繁琐。本文在前人建立的弹性支承块式无砟轨道BIM模型基础上,研究无砟轨道模型的施工图出图与工程量统计的二次开发问题,尝试能够高效、准确的对模型导出施工图和工程量,并开展了以下几个方面的研究工作:(1)分析研究了BIM技术在国内外的研究发展现状,并总结将BIM技术应用到铁路轨道工程设计中的意义。对Revit二次开发进行研究,总结出RevitAPI函数二次开发技巧和常用方法。以Revit软件作为无砟轨道BIM模型的核心建模软件,总结出二次开发的基本流程。(2)创建适合铁路行业的铁路工程制图标准幅面图纸族,研究将其与弹性支承块式无砟轨道模型的施工图进行关联。通过对RevitAPI的外部应用开发方式进行用户界面开发编程研究,实现了对铁路工程制图标准图框族中的参数设置和修改。(3)研究了无砟轨道BIM模型在施工图中尺寸自动标注的方法。通过开发的尺寸自动标注功能和铁路工程制图标准图框族相结合,实现了对无砟轨道BIM模型的施工图出图,节省了人工标注的时间,大大提高了工作效率。(4)研究了无砟轨道BIM模型快速导出明细表的方法。基于Revit软件开发一键出明细表插件,通过定制明细表,实现了从无砟轨道BIM模型中获取项目中所需要的各类信息,极大的提高工作效率。关键词:BIM;弹性支承块式无砟轨道;施工图出图;二次开发;工程量统计 AbstractWiththerapiddevelopmentofcomputerscienceandinformationtechnology,BIM(architecturalinformationmodel)technologyhasbeenwidelyusedinthehousingconstructionindustry,andhasbroughtgreatsocialandeconomicbenefits,showingitsgreatvalueincommercialapplications.BasedontheBIMmodel,theconstructiondiagramandtheengineeringquantitystatisticscanupdatethereal-timeanddynamicchangesinthemodel,avoidtheinformationcommunicationbetweendifferentindustriesintimeandnotsmooth,savealotoftimeandimprovetheworkefficiency.TheRevitsoftwareitselfcandeducetheconstructiondrawingsandquantitiesofthemodels,buttheefficiencyisnothighandcumbersome.OnthebasisoftheelasticsupportedballastlesstrackBIMmodelestablishedbythepredecessors,thispaperstudiesthetwodevelopmentproblemsoftheconstructiondrawingdrawingandthestatisticsoftheengineeringquantityoftheballastlesstrackmodel,tryingtoderivetheconstructionmapandthequantityoftheprojectefficientlyandaccurately,andcarryouttheresearchworkofthefollowingseveralaspects.:(1)TheresearchstatusofthedevelopmentofBIMtechnologyathomeandabroadisanalyzedandstudied,andthesignificanceofapplyingBIMtechnologytothedesignoftrackengineeringissummarized.ThetwodevelopmentofRevitisstudied,andthetwodevelopmentmethodsandcommonskillsoftheRevitAPIfunctionaresummarized.RevitsoftwareisusedasthecoremodelingsoftwarefortheBIMmodelofballastlesstrack,andthebasicprocessoftwodevelopmentissummarized.(2)Agroupofstandardformatdrawingsforrailwayengineeringdrawingstandardsuitableforrailwayindustryiscreated,anditisrelatedtotheconstructiondrawingoftheballastlesstrackmodelofelasticsupportblock.ResearchonuserinterfacedevelopmentbasedonprogrammingRevitAPIexternalapplicationdevelopmentmethod,theparametersofframedrawingstandardinRailway EngineeringGroupsetupandmodify.(3)TheautomaticdimensioningmethodoftheballastlesstrackBIMmodelintheconstructiondrawingisstudied.Throughthedevelopmentoftheautomaticsizefunctionandrailwayengineeringdrawingstandardframegroupcombinationofannotation,realizestheconstructiondrawingsofballastlesstrackBIMmodel,savemanualannotationtime,greatlyimprovingtheworkefficiency.(4)ThisThemethodofrapidderivationofthethinmeterisstudiedbytheBIMmodelofballastlesstrack.BasedontheRevitsoftware,wedeveloponekeyanddetailedlistplug-in,andachieveallkindsofinformationneededintheprojectfromtheballastlesstrackBIMmodelthroughthecustomizedlist,whichgreatlyimprovestheworkefficiency.Keywords:BIM,lowvibrationtrack,Constructiondrawingdrawing,secondarydevelopment,Engineeringquantitystatistics 目录第一章绪论...........................................................................................................11.1研究背景及意义..............................................................................................11.2国内外研究现状..............................................................................................31.3研究目的..........................................................................................................61.4主要研究内容..................................................................................................7第二章REVIT二次开发技术.................................................................................92.1AUTODESKREVIT软件基本介绍...............................................................92.1.1族文件.....................................................................................................102.1.2元素的分类.............................................................................................102.1.3项目.........................................................................................................112.2REVITAPI的发展现状................................................................................122.3REVIT二次开发技术...................................................................................122.3.1API功能介绍..........................................................................................122.3.2API接口..................................................................................................132.3.3主要类库.................................................................................................152.3.4开发工具.................................................................................................162.4REVIT二次开发流程...................................................................................172.5软件可扩展性................................................................................................182.6本章小结........................................................................................................19第三章无砟轨道施工图出图与工程量统计需求分析.........................................203.1弹性支承块式无砟轨道结构分析................................................................203.2弹性支承块式无砟轨道模型........................................................................223.2.1弹性支承块式无砟轨道族库.................................................................223.2.2弹性支承块式无砟轨道族库的组装.....................................................233.3施工图出图的意义及需求............................................................................243.3.1施工图出图的意义.................................................................................243.3.2施工图出图需达到的要求.....................................................................253.4工程量统计的意义及需求............................................................................263.4.1工程量统计的意义.................................................................................26-I- 3.4.2工程量统计需达到的要求.....................................................................273.5本章小结........................................................................................................28第四章施工图出图研究.........................................................................................294.1模型族构件的使用方法................................................................................294.1.1族构件的获取方法.................................................................................294.1.2族构件的过滤方法.................................................................................304.1.3族构件的重要属性和方法.....................................................................324.2尺寸标注自动布局的算法............................................................................334.2.1标注的原则.............................................................................................334.2.2标注的形式.............................................................................................344.2.3尺寸标注子集划分.................................................................................354.3施工图尺寸自动标注的实现........................................................................364.3.1尺寸自动标注的基本流程.....................................................................364.3.2获取文档选择要标注族的方法.............................................................374.3.3在俯视图中尺寸线的创建方法.............................................................394.3.4在立面图中尺寸线的创建方法.............................................................404.3.5用户界面编程.........................................................................................414.4铁路工程制图标准图纸的设置....................................................................434.4.1铁路工程制图标准图纸.........................................................................434.4.2过滤族实例设置参数的方法.................................................................454.4.3获取预定义设置的方法.........................................................................474.4.4用户界面编程.........................................................................................484.5插件跟踪调试................................................................................................504.6施工图导出....................................................................................................524.7本章小结........................................................................................................59第五章工程量统计研究.........................................................................................605.1工程量统计的方法........................................................................................605.1.1手工算量.................................................................................................605.1.2软件表格法算量.....................................................................................615.1.3软件自动算量.........................................................................................615.2REVIT软件手动出明细表...........................................................................625.3二次开发一键出明细表研究........................................................................625.3.1明细表插件程序流程图.........................................................................625.3.2获取视图中元素的方法.........................................................................63-II- 5.3.3创建明细表类型的方法.........................................................................655.3.4获取分类中字段信息的方法.................................................................655.3.5添加分组字段的方法.............................................................................665.4明细表导出为EXCEL文档.........................................................................685.5本章小结........................................................................................................70第六章结论与展望.................................................................................................716.1结论................................................................................................................716.2展望................................................................................................................72参考文献.....................................................................................................................73致谢.............................................................................................................................76附录.............................................................................................................................76个人简历、在学期间的研究成果及发表的学术论文.............................................85-III- 第一章绪论1.1研究背景及意义近些年来我国铁路高速发展,大量的铁路项目投入建设,对铁路工程的工期、质量和技术等各方面存在的要求也更为苛刻[1]。现阶段来说,铁路建设绝大部分选择二维平面设计的方式,然后以邮件、会议等形式来传递图纸和指标等形式协作。不同行业之间的信息沟通不及时、不流畅,设计意图在设计和理解方面较为混淆,缺乏完整性,设计成果对铁路日常管理所发挥的作用不明显。当代铁路工程的技术难度更高,并且周期相对较短,诸多设计人员必须对信息进行频繁的交换。建筑信息模型(BIM)以多层信息的三维模型为基础,通过模型与工作人员的信息交流完成合作设计,如此就可以很好的符合铁路发展的客观需求。中国铁路总公司前副总经理卢春房曾旗帜鲜明的提出[2]:“BIM技术能够实现工程项目设计、施工和运营全生命周期的信息化管理,因此必须在各大企业广泛推广和应用。”在2013年,中国铁路BIM联盟顺利成立,它把业界精英进行联合,对会员单位所具有的珍贵资源进行合理的调配,从而提升联合实力,并实现合作共赢,从而加快铁路BIM标准体系的构建,促进BIM在铁路工程建设中的应用[3]。因此,在较长的时间内铁路建设必然处于高速发展时期[4-5]。建筑信息模型(BIM)这个术语有两层含义:首先是建设工程和设施各类功能作用的数字化表达,在全生命周期中实现资源共享,同时为各类决策提供良好的依据,一般将其命名为模型;其次在对模型进行利用的过程中,可将其称为模型应用。BIM技术的诞生,很大程度上消除了常规CAD技术所存在的各类问题,为建筑业带来了全新的契机,并引发了巨大的技术革命,见图1-1。三维信息模型可以覆盖建设项目全生命周期的各个阶段,为交流信息和信息共享平台所涉及的不同阶段和不同阶段提供及时准确的信息,不但表现了全生命周期的核心概念,并且又包含了以共享化、协同化等作为基础的新技术。-1- 图1-1建筑工程行业两次技术革命BIM由建筑行业提出,之后不断发展至所有工程建设领域。BIM以三维数字技术为核心,能够和工程项目存在关联的各类信息实现整合,从而构成标准化的工程数据模型,并实现各项功能的信息化表达[7]。BIM在项目创建,管理和信息共享的全生命周期中都有动态的支持项目建设;并将新的数字化方法应用于项目管理的设计、施工和管理,优化整体的项目效率,并在一定程度上减少项目风险[6]。对于常规的二维设计而言,平、立、剖面图通常情况下是分开画的。在绘制剖面的过程中,应该将平面图进行合理的调整,在其对位之后才可以将图像绘制成功。如果建筑空间非常繁杂,并且层数相对较高,则容易出现混淆。最为关键是当全部图纸绘制结束之后,如果平面发生了变化,则必须投入较多的时间对其进行对位,并对剖面按照标准进行修正,除此之外,标注、节点详图等都已经出现一定的变化,必须对其进行调整。针对Revit而言,全部的平面、详图等都和模型具有密不可分的联系,模型的所有位置假如出现了一定改变,则图纸能够实现高效的更新,如此不但减少了绘制的时间,并且显著增加了整体效率,无需考虑遗漏修改等方面的问题。针对工程量清单的统计模式,在二十世纪七十年代的时候,英国的相关研究人员提出管理者可结合实际情况,通过该模式对施工流程展开标准化的管理,同时归纳了此类模式在应用过程中所具有的各项优势。在这之后,国外诸多研究人员对应用工程量清单展开了深入的分析,并探讨了工程量清单在实际应用时所产生的各类问题,并提出合理的方法对其进行良好的处理,如此就能够让工程量清单发挥理想的效果;在2004年的时候,澳大利亚的相关研究人员认为-2- 可以将其充当一种模式而进行实践应用,如此就能够在常规施工现场和费用管理等层面应用该方法。现阶段来说,美国、新加坡等发达国家在该行业已经提出了应用BIM的相关计划,并构建了一系列的应用标准。BIM在我国多个行业的应用已经取得比较显著的成效,可在更广阔的领域应用此类技术。和传统行业进行对比,铁路行业BIM技术的发展存在一定滞后性[5],然而中国铁路企业已对这种技术给予了高度的重视,从2013年开始就投入大量资金研究实现铁路信息化的核心技术,从而使各大工程局、铁路设计院等能够一起进行BIM技术的相关研究,并制定相关的标准,因此从这个层面而言,该技术应用于铁路行业是未来发展的必然趋势。1.2国内外研究现状在美国,BIM技术在工程承包商中的应用非常广泛,在挪威、德国、芬兰等北欧发达国家也非常流行;国外BIM技术在实际建筑项目中的应用已达到60~70%,位居世界的前列。2009年,美国威斯康辛州要求该州的大型公共建筑项目使用BIM技术,德克萨斯州设施委员会还宣布将BIM技术应用于多个工程项目[8]。在2010年的时候,俄亥俄州行政部门对外公布了BIM协议,日本国土交通部宣布实施BIM技术。目前,BIM在日本的应用已经延伸到全国,并已上升到政府推广的水平。欧洲和韩国也有许多政府机构致力于制定BIM应用标准[8]。在2011年的时候,新加坡BCA与行政单位合作,并设立了专门的示范项目。BCA可以提交建筑BIM模型,在四年的时间内把全部BIM项目提交给建筑面积超过5000平方米的项目[9]。在2010年的时候,BCA设立了6亿新的BIM基金项目,从而对该地区教学机构的BIM课程提供良好的支持,为即将毕业的学子安排专门的课程,并构建了标准化的专业学位制度[9]。ThorstenKoop等[10]在《BIM模型在科隆尼佩斯动车段项目中的运用》中提出在科隆尼佩斯动车段项目中应用BIM技术并且德铁国际企业不断扩展BIM工具的功能,从项目建议书到项目实施都能够通过此类工具完成各项任务。刘杰等[11]在《BIM技术在摩洛哥布里格里格河谷斜拉桥中的应用》一文中指出在设计过程中,采用BIM技术建立了全桥的三维数字模型,解决了复杂造-3- 型结构设计、钢筋图设计和钢结构设计过程中遇到的难题,满足了摩洛哥业主的精细化施工的要求。为BIM技术在桥梁工程中的应用进行了有益的探索。亚历克·贝林格等[12]在《施工安全中的BIM应用:奥本大学项目案例分析》中通过美国阿拉巴马州奥本大学一个在建项目的施工安全规划的案例分析,展示和验证了4DBIM技术在施工安全管理和规划方面的潜力。为实时管理施工现场信息和施工安全规划提供了可行的方法。侯兆新等[14]在《BIM在新加坡环球影城主题公园项目中的应用》中认为项目部应通过建筑信息模型技术完成结构专业、机电专业建模、各专业碰撞检查及处理[13],并对施工进度进行模拟和更新,以及施工设计和辅助施工管理的工程量统计,取得了良好的效果,大大缩短了施工工期,节约了成本。西方发达国家城市地铁轻轨建设已逐步进入沉寂期,比如,伦敦地铁投资7亿英镑支持维多利亚站的相关工程,通过BIM技术设计和建造协同管理,给业主,供应商能够良好的各方进行协调,预计项目在2018年的时候完成交付[15],这些BIM的应用主要体现在改造、运营、维护上[15]。国内BIM应用研究起步比较晚,但在一些重大的项目上建筑的应用发展迅速。南水北调工程、世博文化中心、国家电力馆、上海环球金融中心、德国馆、水立方等均采用BIM技术辅助设计和建造;哈尔滨西站东广场以及济南西站站前广场等项目在建造过程中均应用了BIM技术[8]。在行政单位和工程建设行业的帮扶下,国内诸多知名院校都在BIM技术研究和和推广方面进行了大量研究,并获得了丰富的学术成果,为该技术的应用提供了必不可少的理论基础[6]。台湾大学在2007年与Autodesk公司共同制定了合作战略协议,进而对BIM模型的开发和应用进行深入的研究,此外,台大土木工程系经过长期的研究,构建了“工程信息仿真与管理研究中心”,并推出了规范化的模板,高雄应用科技大学土木系也在2011年的时候建立了专门的BIM研究中心[16]。在我国,清华大学,同济大学等知名院校都成立了BIM实验室,并且当前国内在这方面取得成功的案例不在少数[17],现阶段来说,进行应用的工程中比较典型的是北京奥运村空间规划。此外,针对铁路和轨道交通行业而言,应用此类技术的项目包括香港地铁、哈尔滨西站项目等。刘延宏[18]在其撰写的相关论述中探讨了BIM技术在钢梁制造、建设管理等方面的应用,其设计模式能够达成“面向对象”的要求,建立组件库协同设计-4- 的模式与效果。赵晓娜[19]在《BIM技术在某地铁工程的拓展应用》中通过项目物资管理信息与BIM模型的整合,导出提料单,将物资管理信息通过Excel或Access媒介转换至模型中,通过手持终端可以实现现场设备的定位和查找,并能快速完成设备的调拨及大量信息的记录,大大提高了物资管理的水平。石耀勇[20]在《浅析BIM技术在铁路建设中的应用》中简述BIM技术发展现状的基础上,针对该技术在铁路项目实施、运营阶段的应用进行分析与论述。苏斌[21]在《BIM在地铁站点工程中的应用探索》中探讨了BIM技术在地铁站工程各个时期的应用,从而把该技术有效的融入地铁项目,构建标准化的地铁站模型,让平立剖图纸信息能够实现良好的关联。虚拟仿真、专业间碰撞检查以及4D虚拟施工技术提高了工作效率,节省了工程费用。艾山丁[24]在《BIM技术在轨道工程设计中的应用探讨》中分析轨道工程BIM设计成果特点,结合京沈客专BIM试点轨道工程中的应用,研究轨道工程BIM设计方法;对基于BIM模型的工程数量计算方法、有限元分析方法、二维图纸生成方法进行初步研究;结合轨道工程设计特点,得出BIM设计技术在轨道工程中的适应性分析结论。裴作君[25]在《铁路隧道工程中BIM技术的应用》中提出BIM在铁路建设工程中的定义,研究分析铁路行业BIM技术应用的现状与特点,并以某高风险隧道为工程依托,就BIM技术在铁路建设行业中的应用技术进行研究与探索。吴明辉[26]在《基于BIM的弹性支承块式无砟轨道三维数字化设计研究》一文对轨道工程BIM模型的建模方法进行了细致的研究,并深入研究了曲线地段模型的设计方法,并实现了族模型沿曲线的高效加载。以BIM模型为基础的数字3D技术为核心理念,针对工程建设和管理效率的新动力,先进的信息管理技术和项目全生命周期的三维设计,能够促使企业对项目实施过程进行更精准的调控,并显著改良设计流程,对运营管理进行良好的精简,以此优化工程质量,并最大化的减少施工成本,是铁路行业在将来主要的发展方向[4]。现阶段来说,国内铁路行业已进行了大量关于3DBIM的研究,同时取得了丰富的学术和实践成果,然而其应用范围存在一定限制,其核心在于三维建模和具体的展示效果,并没有让设计施工和实际运营进行良好的关联,在政策、管理等多个方面都尚待完善[4]。-5- 现阶段对BIM模型导出施工图和对模型进行工程量统计这两个方面的研究工作虽取得了一定的进展,但仍然存在着一定的局限性和不足:对于施工图出图来讲,三维模型能够关联所有的平、立、剖面图,可以规避传统设计中可能出现的修改不完全的现象,提高施工图出图效率,这是Revit软件的优势。当三维模型转化为二维图时,存在一个比较基本的问题,即针对中国市场施工图出图的本土化问题,应当满足各个专业的相关国家标准(计算和制图标准),与当前工程师的制图习惯相结合。传统的制图标准已经在工程师、施工单位间使用多年,作为国外版本的Revit软件,有不少地方需要依据中国的情况进行改进及研发。BIM模型在工程算量方面存在的问题主要是:需求问题、构建方法、算量规则不一。由于BIM软件面向的对象是大量有着不同需求的使用者,若要满足所有使用者需求,则会导致软件异常的庞大、运行困难。BIM软件商提供的通常是通用的基础平台软件,使用者可根据自身的需求通过自定义编程插件解决特定的需求问题。构建模型方法问题则比较复杂,不能通过技术解决。这类问题是因建模者和模型使用者目标不同所致,可以通过项目管理制度安排解决。1.3研究目的BIM模型数据包括了全部的信息和要素,它们所存在的关联主要通过BIM软件进行标准化的管理。其基础是模型元素所涵盖的主体,其核心对象不再是复杂性较低的几何对象,而是一些规范化的结构部件。BIM软件可以根据轨道设计要求组成一些基本的轨道结构组件,以形成与BIM模型相关的完整的,系统的和内部的逻辑。实现在设计阶段从无砟轨道BIM模型中提取结构任意部位的平、立、剖面图及钢筋图等,对施工图能够进行尺寸自动标注,以此来节省人工标注的时间,提高工作效率。建立铁路工程制图标准幅面图纸族(图框),在Revit中对无砟轨道模型的位置进行合理调整,再创建图纸视图,利用Revit软件的导出功能,生成成套CAD平面图纸用作施工,在模型中调整变更内容并生成二维图纸。工程量统计是项目成本核算的主要部分,使用BIM软件(API)的应用程序接口,实现两者之间的信息传递数量[27],开发一键出明细表插件,通过定制明细表,可以从无砟轨道BIM模型中获取项目中所需要的各类信息,极大的提高工作效率,减少人工操-6- 作的错误率等。BIM技术应用于铁路设计,在调查设计与外部行业调查数据库相结合的基础上,建立了涵盖铁路多层次信息三维模型的专业设计平台。BIM平台可以提供多种专业必不可少的设计数据,其包含了多元化的设计软件,并能够对数据格式进行良好的统一,对设计结果进行高效的保存[1]。此外,可以利用这个平台对专业设计操作流程进行良好的调控,并依托于设计人员和模型所存在的电子沟通界面,进行科学的协同设计。并且,利用此类模型不但能够获取常规的图表,又能够支持三维模型视图[1]。Revit中的项目明细表提供了统计项目中与模型相关的模型数量的功能。该功能对建筑系统族有很好的支持,可以根据建筑习惯输出明细表。对于利用公制常规族类型创建的构件,可以使用共享参数的方法进行量化统计。但是,工程数量表的格式不能完全符合铁路工程的习惯,需要作相应的调整。构建以BIM技术为核心的工程设计模型,未关联BIM模型的设计创新一般通过电脑完成,并对铁路工程技术进行创新,增加整体设计的效率,进而让轨道系统技术在更广阔的领域进行应用,并可取代现有的设计软件,更新技术和管理模式[28];轨道工程BIM模型也可以根据嵌入到BIM模型全过程的铁路项目规划,勘察设计,施工和运营管理中的一定标准作为子模型,与另外的专业子模型实现有效的协调。这是进行市场拓展的必要前提[28],必然会对铁路工程行业形成十分突出的影响。1.4主要研究内容本文以重载铁路隧道内弹性支承块式无砟轨道模型为背景,课题组吴明辉在其硕士论文中建立了弹性支承块式无砟轨道的模型族库,并运用二次开发的技巧将族库进行了组装,形成了弹性支承块式无砟轨道BIM模型。本文的主要研究工作是在无砟轨道BIM模型的基础上,对导出施工图中的自动标注问题进行研究,对施工图的会签栏和图标栏均与模型进行关联设置。研究弹性支承块式无砟轨道模型工程量统计问题,工程量以明细表的方式导出为表格文件的方法。主要的研究内容如下:(1)总结RevitAPI函数二次开发方法和常用技巧。以Revit软件作为无砟轨道BIM模型的核心建模软件,总结出二次开发的基本流程。-7- (2)创建适合铁路行业的铁路工程制图标准幅面图纸族,将其与弹性支承块式无砟轨道模型的施工图进行关联研究。通过对RevitAPI的外部应用开发方式进行用户界面开发编程研究,实现对铁路工程制图标准图框族中的参数设置和修改。(3)重点研究无砟轨道BIM模型在施工图中尺寸自动标注的方法。通过开发的尺寸自动标注功能和铁路工程制图标准图框族相结合,实现对无砟轨道BIM模型的施工图出图,节省了人工标注的时间,大大提高了工作效率。(4)重点研究无砟轨道BIM模型快速导出明细表的方法。基于Revit软件开发一键出明细表插件,通过定制明细表,实现从无砟轨道BIM模型中获取项目中所需要的大量信息,极大的提高工作效率。-8- 第二章Revit二次开发技术作为BIM技术的应用软件,Revit软件为工程设计领域的建模打下了坚实的基础,此外,构建关系数据库能够加速三维模型的设计速率,并智能化的形成二维图纸,对各方面的参数信息进行完整的保存。除此之外,工作人员也为该软件封装了专门的API接口,进而使其不再局限于技术团队为其增添的操作功能,设计师能够结合自身的需求进行个性化、多元化的操作[29]。本部分将深入分析该工具的使用方法,为其实践应用奠定良好的基础。2.1AutodeskRevit软件基本介绍Revit是一类专门为建筑信息模型提供服务的软件,它的作用是协助用户进行设计,并构建高质量的建筑物。这个工具涵盖了三个主要功能,具体而言分别是RevitArchitecture、RevitMEP和RevitStructure,Revit系列软件如图2-1所示。现阶段来说,Revit已被广泛应用于中国建筑领域的BIM系统[36]。图2-1Revit系列软件虽然Revit主要用于建筑领域,但依然是BIM环境内应用非常频繁的一类软件,并且由于他涵盖RevitStructure的功能,因此在结构建模上体现出非常理想的适应性,此外,Autodesk在BIM技术领域具有非常显著的优势,并且其配套BIM工具非常完善,如Inventor、Civil3D、Navisworks、InfraWorks360、BIM360等[36]。Revit软件中有许多概念,下面简要介绍其中几个重要的概念。-9- 2.1.1族文件族是Revit中十分关键的概念,族简单而言是涵盖通用属性集和有关图形表示的图元组[37],属于某个族的多种图元的绝大部分参数其数值存在差异,然而参数的集合是完全一致的。比如对于“搭积木”来说,各类“积木”就等同于族,而直径和高度存在差异的“长方体积木”则是某个族的不同类型[36]。族是实现BIM参数化表达最重要的信息载体,其对应的扩展名为rfa。族参数主要包括两类,分别是类型参数和实例参数,下面对其进行详细探讨:(1)类型参数:它是控制系列内同类型的控制参数,在类型参数出现一定改变的时候,则该类型的全部个体都会出现一定变化。(2)实例参数:它是对族个体的控制参数进行调控,在实例参数出现改变的时候,唯有此时的族个体出现变化。假如对该实例参数完成了创建,那么会在创建参数名称之后增加“默认”[29]。一般而言,有两种添加族参数的方法可供选择:首先是在绘制元素的过程中,通过“标签”按钮进行具体设置。其次是在图元文件对话框中进行调节,选择属性框右侧完成添加操作。族的概念是由Revit提出的,这是目前BIM软件中实现快速参数化建模可行和有效的解决方案。在目前BIM软件环境中,铁路工程的利益相关者都渴望将BIM应用到实际项目中,所以结合标准图构建铁路轨道核心结构是一类有效的方法。Revit族库是Revit族根据属性进行分类,进而建立相应的数据库。伴随项目的不断推广,相关行业,企业将构建一套专门的族库。在未来的工作中,可对其涵盖的数据进行快速的调用,并结合具体情况的各类参数进行调整[29],以此优化实际的工作效率。2.1.2元素的分类元素在Revit2016内非常关键,用户能够发现的绝大部分对象为元素,其中比较具有代表性的包括族、族类型、族实例、视图等。Revit2016内绝大部分类都是通过继承的方式获得的[6]。元素是可序列化的即可被保存到RVT项目文件里。族、族实例类图见图2-2。它列出了族、族类型和族实例的继承关系。族基-10- 本可以对应Family,族类型对应FamilySymbol,族实例是FamilyInstance。它们都是继承自Element。ElementFamilyBaseElementTypeInstanceFamilyFamilySymbolWallTypeFamilyInstance图2-2族、族实例类图族(Family)、族类型(FamilySymbol)、族实例(FamilyInstance)都是元素(Element)的子类。族包括若干种族类型,而族类型能够对多种族实例进行构建[6]。如果用面向对象语言中的概念来讲,族相当于类模板(ClassTemplate),族类型相当于类(Class),族实例相当于对象(Object)。虽然它们在API中是使用聚合而不是继承的方式组织的,表2-1表示元素与API中的类的对应关系。表2-1元素与API中的类的对应关系元素API中对应的类族Family族类型ElementType(FamilySymbol,WallType,etc)族实例Instance(FamilyInstance,ImportInstance,etc)2.1.3项目Revit中的项目是指单一构件所对应的信息数据库。CAD技术一般通过三维视图来进行项目描述,而Revit项目文件包含了所有的设计信息构件,具体而言,它包含了三维模型、全部的设计视图、工程图纸等[36]。除此之外,Revit项目内的全部设计信息都存在一定关联。当设计师修改视图中的设计信息时,修改将传播到包含信息的节点并能够相应地自动修改[36]。Revit中的项目符合BIM模型应具有的完整性、相关性和一致性,实现了“一处修改,处处更新”。-11- 2.2RevitAPI的发展现状Autodesk企业在软件开发方面取得了大量成果,尤其是API接口的设计。在购买Revit工具以后,Revit8.0版API接口的第一个版本于2005年推出。现在已经有10多年了,RevitAPI也在不断更新[23]。刚开始,它只可以对文档对象进行访问,同时扩展了多元化的功能,其中比较具有代表性的包括族创建API,用户选择的交互API等。伴随API总量的扩增,拓展Revit功能的性能更加优秀[29]。而对于为BIM技术提供服务的建模工具,Revit能够利用API接口达成工程实施的各类需求。RevitAPI具有十分理想的稳定性,而且利用RevitAPI研制的产品的可靠性也非常出众。Revit具有很高的自动化测试能力。自动化测试可以防止软件操作问题的发生。此外,API接口能够体现优良的稳定性。当前的API已完成优化,进而使其规格具有标准化的特点。比如,对于各类传输渠道而言,可对常规的Element参数进行替换。为了让工作人员能够对其进行良好的掌握,软件会调整归因于不同类别的不同方式,因此以前的一些代码将会改变以适应新的API。编译器会在更改时向开发人员提示。伴随科技的发展,API得到进一步优化,最终目标非常明晰,即尽可能的提升其便捷性和实用性。2.3Revit二次开发技术二次开发简单来说就是在现有软件的基础上进行功能修改和扩展,从而对软件的性能特点进行优化,满足用户的客观需求。这种通过软件API来丰富软件功能,增加其工作成效,并且通常不会对系统内核产生任何负面影响[30]。Revit二次开发就是应用Revit所涵盖的API接口,结合相关标准和需求对软件功能进行针对性的调整,使其可以体现更为优良的功能价值[30]。2.3.1API功能介绍一般而言,建模操作通常是利用菜单栏所包含的按钮功能执行,Revit还包含可以对外部命令进行调用的接口API,让工作人员可利用外部程序对Revit进行操作和访问[29]。RevitAPI从某个角度而言是开发者对Revit功能进行调用的媒介,可进行多种可视化操作,并能够对参数展开高效的分析。工程师可结合自-12- 身的需求对软件功能进行拓展,软件被调整为开发人员也能够对组件信息模型进行多元化的操作[29]。二次开发技术可以实现下述功能[29]:(1)利用编程对信息模型所包括的参数信息进行高效的访问;(2)利用编程对各项编辑功能进行调控,如楼板的迁移、墙体的减少;(3)在建模过程中,应该由多个步骤完成的操作由一个关键操作完成;(4)模型的操作是通过参考界面的外部应用来实现;(5)利用编程对各项操作功能进行设置,并把它在模型分析中进行应用。现阶段来说,API的全新版本扩增了功能数量,其主要涵盖切换链接序列,建模和替换部件的领域;项目文件,非矩形裁剪区域所对应的视图、细节索引等,对感知空间家族进行良好的调整;扩增了点云的导出功能。2.3.2API接口RevitAPI只可以对单线程进行调用,因此在应用程序调用其函数的时候,其必然在主线程内完成调用,而对于另外的线程来说,该函数也能够高效的反馈至Revit。通过RevitAPI能够构建两个DLL格式文件,这些文件能够对Revit所涵盖的多个接口进行调用[31],分别是:(1)ExternalCommand外部命令插件开发者可利用该命令增加应用,Revit利用.addin文件对外部插件进行识别。除此之外,RevitAPI界面能够将命令加入到对应的用户界面,一般情况下出现在ExternalTools的菜单内[33]。程序命令能够利用RevitAPI对Revit数据库进行访问。在Revit启动的过程中尝试搜寻Execute()方法,当用户选择ExternalTools下拉菜单,然后发现Add-Ins标签,Execute()所涵盖的方法进行执行[33]。外部命令重载ExternalCommand中的Execute()方法,将返回一个枚举类型,简称Result,它可以用于分析这个结果是否成功,如果不成功则操作回滚,其主要包含Succeeded,Failed,Cancelled。外部命令的时效性很短。当Revit没有将命令激活的时候,注册的外部命令无法进行使用;目前的活动存在时,命令组件有效激活,并将其转移至执行方法[33]。当此方法成功返回的时候,命令组件就进行销毁。因为此类特殊的功能,命令执行不存在通信。在命令结束的时候,假如数据依然存在,则必须应用外-13- 部文件。假如要将其储存到Revit,则必须通过共享参数系统对各类数据进行保存。其中参数见表2-2,返回值Result见表2-3。表2-2Execute方法参数表参数名称参数描述类型为ExternalCommandData,参数包含Revit执行命令传入的commandData信息。该应用对象返回用户当前活动文档以及其对应数据库的接口,Revit中所有数据都通过该参数访问。类型为String,并具有修饰符ref,通过引用传递的参数,而不是值。命令终止、取消时提供给用户的信息字符。Execute()方法将message返回一个失败或者取消的结果,包含对话框并独立展示失败或者失效的对象。该参数在方法内部可被设置,并成为错误说明文档。类型为ElementSet,起初为空值,用于存储AutodeskRevit元素。elements当命令终止、结束后,根据失效返回的数据库信息,高亮显示选择对象进行提取。表2-3Result枚举值参数名称参数描述备注如果命令没有不可控错误情况Succeeded—发生,预期完成。该值特指用户要求终止命令。外当外部命令被取消时,Revit返回执行,Cancelled部命令运行期间对Revit构件的设置信息参数后,该信息将能显示出操作将被回滚,并出现提示框。来,否则命令保持沉寂。当外部命令以某些不可恢复的当外部命令失败时,设置信息参数后,方式运行时,出现提示框,外部该信息将能显示出来,选择集合中的Failed命令对Revit构件的操作将不被Revit元素会高亮显示出来,提供开发执行。者给用于展示问题元素的功能。(2)ExternalApplication外部应用外部应用也是一类非常关键的接口,它能够在Revit启动和关闭的时候进行加载,并且可以在加载项选项卡上创建新面板,有时能够在Revit界面上对用户的各项操作进行详细的记录。用户界面接口文件是UI.IExternalApplication,它为涵盖一个能够对外部应用进行描述的接口。Autodesk.Revit.UI.IExternalApplication.ResultOnStartup(Autodesk.Revit.ControlledApplicationapplication)Autodesk.Revit.UI.IExternalApplication.Result-14- OnShutdown(Autodesk.Revit.ControlledApplicationapplication)外部应用程序对Revit循环能够进行限制,在Revit启动的时候,外部应用程序元素可进行创建,并通过OnStartup()方法运行。当方法顺利返回的时候,此时的Revit可以对应用程序进行加载,一直持续到Revit关闭的时候对OnShutdown()方法进行调用。其中OnStartup()与OnShutdown()方法都能够返回一个枚举类型,简称Result,其主要包含Failed,Succeeded,Cancelled,参数见表2-4,返回值result见表2-5。表2-4OnStartup()&OnShutdown()方法参数参数名称参数描述类型为ControlledApplication。该参数的信息包含命令调用或关闭时输入的信息,该参数元素可以提供限制Revit应用接入的方法,application例如VersionName、VersionNumber,并代表一些事件,例如有OnDocumentOpened、OnDocumentSaved。表2-5Result枚举值参数名称参数描述Succeeded如果应用没有不可控错误情况发生,如预期完成。Cancelled仅用于应用被用户取消时。Failed当外部命令以某些不可恢复的方式运行时,应用运行失败。2.3.3主要类库Revit二次开发用到的所有命令和函数都是基于RevitAPI类库编写的,所以一定要对RevitAPI类库的整体架构和内容进行掌握。RevitAPI一般涵盖7个类库:(1)ApplicationService:这种类库能够提供Revit对活动文件应用程序的操作;(2)Attributes:这种类库能够提供Revit的多种属性设置[34];(3)Creation:这种类库能够构建实例、参数以及文档;(4)Exception:Revit产生差错的时候采取的处理办法;(5)DB:涵盖绝大部分操作,其中比较具有代表性的包括创建、平移等多种操作[34];(6)UI:这种类库能够支持面向对象的多元化操作,从而让用户与电脑之间能够进行高效的交互;-15- (7)Utility:这种类库主要在属性集合上,其中主要的包括材质、属性集合等。2.3.4开发工具针对各版本的Revit,应选择合理的RevitSDK开发包和VisualStudio完成编译,本文研究的二次开发主要将Revit2016版软件充当核心的开发平台。(1)VisualStudio2015由于该软件以.NET4.5为核心的运行环境,选择VisualStudio2015版本,通过.NET4.5环境完成标准化的编译[34]。(2).NETFramework它主要是为Windows、WindowsServer等提供所需功能的开发平台。其涵盖公共语言运行时和.NETFramework类库。.NETFramework能够支持多种托管执行环境,其开发操作较为精简,并且支持绝大部分主流的编程语言。(3)RevitSDK通过Autodesk涵盖的RevitSDK2016开发包完成开发,其重点涵盖RevitAPI帮助文档、案例,利用SDK所包含的RevitAPI.chm文档能够对API内全部的类、属性等进行查询,另外,可通过VisualStudio2015读取RevitSDK所涵盖的Samples子目录,进而获取所需的实例。(4)RevitLookup它是Autodesk研发的插件,无需写代码就能够发现API的对象。它通常情况下涵盖于RevitSDK.zip压缩包内,可获得源代码之后展开编译。(5)Addin-Manager开发包中主要涵盖Addin-Manager插件,从而对Revit插化界面进行标准化的加载,利用此类方式不用重启Revit就能够对插件代码进行修改,之后可再次对其加载[34]。本文将Revit2016作为开发平台,并选择RevitSDK2016和编程工具VisualStudio2015,将C#语言充当配置环境,并对Revit展开二次开发,以此分析、研究施工图出图和工程量统计问题。-16- 2.4Revit二次开发流程本节主要将BIM理念作为核心,在VisualStudio2015平台上通过C#语言完成编程,并利用API对Revit工具进行功能拓展。对Revit工具实现功能拓展的步骤如下:①启动ViuslStudio2015,并构建全新的类库工程。②引用接口装配库文件:RevitAPI.dll、RevitAPIUI.dll,之后将其CopyLocal所对应的属性调节为False,其表明无需对装配文件进行拷贝。如此能够省去大量的硬盘空间,并防止VisualStudio调试器找不到所需的DLL副本[26]。③Revit二次开发时,可选择使用Revit的应用服务、选择功能等,并能够实现系统标准化输入。④添加命令类属性,在Revit2016版本中,控制命令所对应的事务模式包括三类,分别是Automatic、Manual、Readonly,它们指代的是自动模式、手工模式以及只读模式[35]。⑤选取合理的方式对Revit功能进行拓展,第一类是外部命令,即只增加某个Revit命令,由用户对按钮进行操作让命令顺利启动;第二类为外部应用,其主要是从Revit软件内部进行启动,伴随该软件的启动而调用,在其关闭之后也正式停止。⑥重载Execute()方法,在Execute内加入一定的代码,从而完成相关的命令功能,到这里为止就完成了其编程部分。之后可对该类库文件进行标准化的编译,编译顺利之后会形成一个特定格式的文件,并可以利用RevitAdd-InManager进行载入,之前编程的内容可形成Add-in文件。⑦启动Revit,选择附加模块包含的外部工具,加载的外部命令即可对程序运行,为了提升操作的便利性,也可在附加模块内自定义相应的按钮,进而对程序进行高效的运行。至此,程序开发工作已全部结束,Revit软件进行功能扩展开发流程如图2-3所示。在开发的过程中,经常用AddinManager来运行开发的外部命令,这样的好处是程序的修改、运行,调试速度可以很快。当开发结束后,用户可以直接在Revit启动后就可以点击工具栏中的命令按钮,直观地使用开发的命令。外部命令方案的复杂性较低,对文件配置完成即可。缺点是假如功能丰富多样,用户使用较为复杂。外部命令是基础,外部应用属于高级方案,在命令-17- 栏上构建专门的按钮,它能够对名字、图片进行清晰的显示,可按照预期的方式明确按钮位置和分组关系。开发实现设置命令属性中控制命令的事务模式和更新模式为Manual,当对象或命令结束之后需用户手动提交Transaction(TransactionMode.Manual)外部Regeneration(RegenerationOption.Manual)外部命令应用新建类,从IExternalApplication新建类,从IExternalCommand接口接口派生,重载OnStartup()和派生,然后重载Execute()方法,添OnShutdown()方法,添加用户程加用户程序,编译代码序,编译代码是否编译成功是否编译成功编译通过后会生成DLL文编译通过后会生成DLL文件,再通过Add-InManager件,再通过Add-InManager加载该装配文件到Revit中加载该装配文件到Revit中直接运行程序查看结果直接运行程序查看结果满足要求满足要求程序开发结束图2-3Revit软件进行功能扩展开发的流程2.5软件可扩展性Revit界面设计十分友好,用户只需要有一定的编程基础就能够根据需要来对Revit进行二次开发,以拓展出用户所需要的功能。在学习使用API之前,应该先熟悉Revit的特性,这有助于在二次开发期间与Revit控件和界面保持一致。它使用户能够设计与Revit更协调的插件,并更有效地管理API插件。CAD操作平台也可以执行3D建模操作,然而其功能十分繁杂,Revit工具在操作功能上更为完善。Revit的界面非常人性化,能够对AutoCAD轻松操作-18- 的工作人员对其具有良好的适应性。另外,如果要完成对Revit的二次开发,一些编程语言基础也不可或缺,在掌握应用API的方式以后,我们能够对Revit的多种功能进行拓展。当前来说,开发工作者必须进行大量的编程,从而完成一部分原始按钮功能,或者对其对应的编码进行优化。这些尝试为Revit工具的开发提供了不可缺少的依据。RevitAPI能够为多种程序提供标准化的功能接口,能够加快Revit可视化。Revit用户可结合操作的客观需求对功能进行拓展[29]。在Autodesk官网上,开发工作者选用RevitSDK,开发参考文档等对说明性文档进行应用。另外,开发工作者可结合这部分说明对模型信息进行高效的访问,之后对其展开查询和调整。以这种方式,它可以促进建模的操作并更高效地工作。2.6本章小结本章首先对Revit软件的绘图环境及RevitAPI的发展现状进行了阐述,介绍了软件可扩展性对软件使用的巨大价值。根据Revit二次开发所必不可少的工具,对其使用外部命令和外部应用两种开发方法,构成Revit插件的方法展开具体说明,对外部命令必须对Execute()函数进行执行才能够创建特定的对象。以BIM理念为核心的三维设计平台,它有效的完成了三维立体模型的信息化集成,借助于二次开发拓展模型,开发所需的应用功能。-19- 第三章无砟轨道施工图出图与工程量统计需求分析3.1弹性支承块式无砟轨道结构分析无砟轨道是一类高可靠性、高平顺性的轨道结构,它主要用钢筋混凝土道床对有砟轨道的碎石道床进行取代。通过长期的发展,无砟轨道已构成多元化的结构型式。其中,弹性支承块式无砟轨道是非常具有代表性的一类,其应用范围较广,在高速铁路、客货共线铁路和城市轨道交通领域都有所应用[38]。此外,该轨道由扣件、道床板、支承块对、钢轨、混凝土底板板等组成。下面对弹性支承块式无砟轨道的结构作简要分析。某隧道内DK27+080-DK37+146地段,弹性支承块式无砟轨道结构如图3-1所示。钢轨和扣件支承块垫板弹性套靴2%2%道床板底座板图3-1隧道内弹性支承块式无砟轨道结构断面图(1)钢轨钢轨是轨道结构非常关键的部件,它通常与铁路线路中心线采取平行布置的方式,所以在对钢轨族模型进行设计的过程中一定要分析随线型发生的改变[26]。几何尺寸参照标准的60kg/m钢轨的参数,U71Mn无螺栓孔热轧新轨,钢轨底面距支承块表面40mm。(2)扣件系统根据目前国内应用的扣件结构,比较完善的扣件形式主要包括三类,其中的弹条VII型扣件系统,一般情况下在60kg/m无砟轨道中进行应用;对于其中的WJ-12型扣件系统来说,其一般在60kg/m或75kg/m钢轨双块式轨道中进行-20- 应用;而对于弹条VI型扣件系统而言,它对75kg/m钢轨有砟轨道具有良好的适用性[26]。本论文选取弹条VII型扣件系统,弹条VII型扣件系统由T型螺栓、弹条、预埋铁座等部分组成。(3)弹性支承块弹性支承块主要涵盖三部分,分别是混凝土支承块、橡胶套靴以及块下橡胶垫板。对于其中的混凝土支承块来说,其上部一般设置了帽状结构,它能够避免水和尘土转移至缝隙中,从而提升弹性支承块的可使用年限。此外,给混凝土支承块所对应的短侧面设定合理的坡度,如此就能够避免支承块出现横向位移的情况[26]。加设橡胶套靴是为了规避列车进行横向冲击,所以其四个面应设定专门的沟槽,而其底部重点发挥隔离的作用,因此无需设置特定的沟槽。为符合刚度的客观要求,在支承块下还需设置特定规格的微孔橡胶垫板[26]。(4)混凝土道床板弹性支承块式无砟轨道的道床为现浇混凝土板,道床板采用C40混凝土,板宽2.8m,顶面设2.0%的人字形排水坡,道床两侧边角设20mm×20mm倒角,无砟轨道道床板设计厚度390mm。因为在进行浇筑之前预埋了弹性支承块,进而产生与支承块尺寸相匹配的孔槽。道床板钢筋一般选择HRB335钢筋,其技术条件应满足《钢筋混凝土用钢第二部分:热轧带肋钢筋》的相关规定。(5)混凝土底座板隧道底座板从客观而言为轨道结构的核心,它能够为上部轨道结构提供一定的支承力,并将其和隧道基础进行衔接,支承面刚度大概等于1200MPa/m。结合轨道结构所具有的各项特点,将钢轨、扣件等进行抽象化处理,从而得到相应的三维对象,构建轨道结构的构件库,从而便于在建模的过程中对其调用,详情见图3-2。这些对象不但涵盖了部件所具有的特性,同时也囊括了一些非结构特性[26]。将道床板作为探讨的实例,利用BIM软件不但可以得到材质、名称等诸多信息,此外,假如让轨道板类型发生了一定变化,软件的内部处理器能够对模型展开调节,并且与模型存在一定联系的设计图纸也应进行调整[26]。-21- 钢轨扣件标准构件库支承块道床板图3-2标准件库组成示意图3.2弹性支承块式无砟轨道模型3.2.1弹性支承块式无砟轨道族库弹性支承块式无砟轨道的族库包括底座板、道床板、支承块对、弹条Ⅶ型扣件系统和钢轨。前人针对该轨道完成了建模,弹性支承块式无砟轨道模型族库如图3-3所示。(a)底座板三维模型(b)道床板三维模型(c)支承块对三维模型(d)钢轨自适应族模型-22- (e)弹条Ⅶ型扣件系统模型图3-3弹性支承块式无砟轨道模型族库3.2.2弹性支承块式无砟轨道族库的组装前人针对该轨道完成了建模,并把族模型根据相对位置关系进行标准化的组装,此时应借助API对其完成二次开发。其通过外部命令创建的自定义命令按钮如图3-4所示,其后我将他创建的自定义按钮进行了改进,结果如图3-5所示。在项目中创建模型线,对模型线选中,选择改进后创建,之后就能够对命令进行具体执行,如选择放置支承块命令之后,那么这个指令就能够在较短的时间内执行,在录入加载里程、间距等相关变量以后就能够完成加载。通过执行外部应用实现该轨道模型的整个加载过程[26],加载完成之后的最终三维图模型如图3-6所示。弹性支承块式无砟轨道模型局部放大图如图3-7所示。图3-4创建自定义命令按钮图3-5改进后的自定义命令按钮-23- 图3-6弹性支承块式无砟轨道三维模型图3-7弹性支承块式无砟轨道模型局部图3.3施工图出图的意义及需求通过BIM模型构成的图纸表现方式具有多元化的特点,三维布置图可以准确地表示所有结构的具体空间位置,二维剖面图及大样图一般情况下是通过程序投影和剖切之后获得,它比传统的方法获得的图纸具有更高的可信度,并且花费的时间更少,相关工作人员对其复核时的操作也非常简单[39]。所以,不但在空间构造表现方面它能够体现显著的优势,同时在大样展示方面,其绘制的二维图纸可以体现良好的可信度。这种方式不但有效提升了出图效能,并且也让工程师将更多的精力投入到设计工作中[39]。针对施工图设计而言,三维模型能够和全部的图纸进行关联,可以防止常规设计中由于人为因素而出现纰漏的现象,如此就显著优化了出图效率,这是Revit最为明显的优势[40]。Revit具备非常出色的曲线建模能力,借助方法的探索可以得到相对繁杂的形体,然而曲面建模依然需要进行一定优化。针对参数化设计的使用水平来说,Revit可以非常简便地对建筑构件规格展开调整,也能够利用族文件对局部构件实现标准化的驱动控制。3.3.1施工图出图的意义在Revit内,全部的平面、立面、剖面、尺寸标注都和三维模型存在密不可分的联系,模型的任何位置出现了调整,则全部图纸都能够完成更新,如此不但避免了时间的浪费,并且显著优化了整体效率,无需对遗漏修改等情况进行-24- 考虑[41]。所以此类功能非常具有实用性。工作人员仅仅需要完成关联的设置,此后就能够对模型进行调整。通过开发的尺寸自动标注功能和铁路工程制图标准图框族相结合,实现对无砟轨道BIM模型的施工图出图,节省了人工标注的时间,大大提高了工作效率。虽然三维BIM模型能够对工程各个方面进行良好的展示,然而对其尺寸表达二维图纸却具有诸多优势。因此,在三维模型基础上高效的绘制二维图形依然是现阶段研究的重点。在Revit内可对BIM模型完成多种剖切,进而得到剖面图,并提供多元化的管理功能。利用剖切得到的图纸可以与三维BIM模型维持在线联动。如此就可以降低图纸修改的工作负担,并且也避免了因为有关图纸修改存在纰漏而产生相关的质量问题[42]。3.3.2施工图出图需达到的要求施工图能够体现多种优点,比如图纸齐全、表达准确等,它是工程施工、施工组织设计的基础,也是展开技术管理不可或缺的文件[43]。基本图纸包括首页、总平面图、平面图、立面图、剖面图、剖面图等。在进行施工的过程中,工人结合图样进行操作,这往往比设计图样更为具体,其涵盖了图表和详细说明。对弹性支承块式无砟轨道BIM模型导出的施工图主要是建筑施工图,具体包括组装图、平纵断面图、横断面图、道床板上下层钢筋平面图、道床板钢筋的不同断面图及部分详图等,对不同的视图可以自动进行尺寸标注,提高工作效率,实时联动修改。在弹性支承块式无砟轨道BIM模型的基础上,研究施工图出图的二次开发问题,尝试能够高效率、快速的对模型导出施工图,对于施工图出图需要达到的要求如下:(1)组装图中能清楚的显示弹性支承块式无砟轨道的各个零部件,图纸比例适合。(2)平纵断面图放在一张图纸中上下、左右对齐,尺寸标注合理,图纸比例适当,能清楚的显示弹性支承块式无砟轨道的平纵断面。(3)横断面图单独显示在一张图纸中,要求尺寸标注合理,图纸比例适当,能清楚的显示弹性支承块式无砟轨道的横断面。(4)道床板上下层钢筋平面图显示钢筋在道床板中的位置,钢筋在平面图中以线表示,标注钢筋的距离及间隔,要求尺寸标注合理,图纸比例适当。-25- (5)道床板钢筋的不同断面图要求显示钢筋在道床板中的位置,钢筋在断面图中以点表示,标注钢筋的距离及间隔,要求尺寸标注合理,图纸比例适当。(6)部分详图可根据需求对不同的模型构件出三视图,要求尺寸标注合理,图纸比例适当。3.4工程量统计的意义及需求工程量统计从客观而言是在设计进行正式提交以前的工作过程,其一般由专门的管理人员负责,其涉及到多个方面的内容,其中比较具有代表性的包括整理、核实等,进而让组织内部、相关设计单位能够进行良好的关联[50]。工程量统计是工程成本运算非常关键的部分,而工程量提取通常选择两类方法:第一类是通过API接口和成本预算工具进行衔接,从而让工程量信息能够进行高效的传递[21];第二类是通过BIM的明细表功能对工程量导出,并将其传输至Excel表格,如此就可以展开高效的成本核算[21]。明细表功能让工作人员减少了许多工作负担,且不会出现材料漏项的情况,数量也具有更高的可信度,这对将来工程量概算资料和成本调控都能够发挥非常理想的作用[48]。Revit模型内涵盖的项目内容可利用ODBC数据库进行标准化的导出,而这部分信息可涵盖若干个图元类型的项目参数。此外,Revit通常情况下会导出规范化的模型类型数据库表格,同时产生相应的模型实例数据库表格。3.4.1工程量统计的意义工程计价一般将工程量作为核心依据,所以,工程量运算结果的可靠性很大程度上决定了工程造价的可信度,并且对项目实施的投资控制也具有一定影响;工程量是施工单位调节施工进度,组织材料、机械所必不可少的依据[50];工程量是施工单位编制项目进度表、结算工程价款的基础。利用Revit的明细表功能实现导出,尽管此类方式复杂性较低,然而大量的试验表明通过明细表材质提取功能只可以获取构件属性当中包含的资料,然而材质所具有的各项物理参数都难以提取[51]。即便利用添加共享参数的方法顺利添加至指定的构件属性内,然而针对一些构成非常繁杂的构件,该构件就难以对所有材质的参数完成提取,所以该方法只能够对构成复杂性较低的构件完成提取,体现出比较明显的局限性[51]。-26- 对于大型的BIM模型项目,模型中有成百上千个族或构件,如果想要对某个族导出它的明细表,需要经过创建明细表、过滤器过滤、明细表属性设置等多个步骤来设置才能实现。一个或多个族的明细表可以通过设置来实现,如果族的数量很多对每一个族都生成明细表,用手动设置显然很费时、费力。因此,开发一个能一次生成所有族的明细表的插件,如此可以大大提高导出明细表的效率、节省大量时间。3.4.2工程量统计需达到的要求应用BIM技术,在对模型进行构建的同时,对材料型号和数量信息等进行界定,在具体使用的时候就可以将其快速的导出,并得到所需的工程数量表[20]。此外,利用Revit软件能够对工程量展开精确的统计,可以将其在异形构件的工程量分析中进行应用,如此就为成本核算提供了极大的便利[52]。明细表主要是对各类组成部分进行具体表明,装配图内通常情况下涵盖明细表。其大部分情况下调配在标题栏上方,按照一定的秩序进行填写。其格数应符合相关需求。如果延伸位置存在一定空缺,可紧靠标题栏按照一定秩序实现延续。如果装配图内无法对明细栏进行具体配置,可根据A4幅面进行提供,同时在下面设置专门的标题栏[59]。在弹性支承块式无砟轨道BIM模型的基础上,研究工程量统计问题,尝试能够高效、快捷的对模型一键出明细表,对于工程量统计需要达到的要求如下:(1)对于一些大型的BIM模型项目,比如模型中有上千个族或者构件,需要每个族或构件的明细表,一键出明细表插件可以一次生成所有族或构件的明细表。(2)开发的明细表插件可以对BIM模型中的族或构件自动进行分类,相同类别的族或构件会显示在一张明细表当中。(3)在建族的过程中,将所有钢筋的型号进行明确的界定,模型构建结束之后,就可以利用软件导出可信度较高的钢筋用量,以及弹性支承块式无砟轨道模型中材料的用量,一键出明细表。(4)一键出明细表命令不仅对弹性支承块式无砟轨道模型适用,对任何Revit模型都适用,实现插件的通用性。-27- 3.5本章小结本章对弹性支承块式无砟轨道BIM模型的组成结构进行分析,并对施工图出图及工程量统计的意义和需求进行了论述。通过外部应用开发方法对弹性支承块式无砟轨道模型的族库进行组装,为以后基于弹性支承块式无砟轨道模型的Revit二次开发奠定基础。基于无砟轨道BIM模型的平、立、剖面图自动标注出施工图与快速导出明细表的二次开发研究是后面两章研究的重点。-28- 第四章施工图出图研究4.1模型族构件的使用方法在铁路轨道工程中的族构件构建完毕之后,需要对Revit完成二次开发,实现对族进行放置、参数调整等操作,本节主要分析无砟轨道族构件的基本操作方法[6]。4.1.1族构件的获取方法(1)通过过滤器获取族构件过滤器方式应用效果良好,因此获得广泛的应用,也是本节研究所选用的方法。过滤族构件的流程如图4-1所示。图4-1过滤族构件流程(2)通过选择获取族构件使用UIDocument的Selection属性,能够得到所需的族构件集合,代码如下://获取文档-29- UIDocumentuidco=revit.Application.ActiveUIDocument;Documentdoc=uidco.Document;//框选指定类型的元素IListeles=uidco.Selection.PickElementsByRectangle("选择要标注的族");4.1.2族构件的过滤方法RevitAPI提供了多元化的元素过滤器,从而遍历元素和相应的ID。此类过滤器为多种应用程序得到所需的元素提供了非常理想的接口。收集器是用来迭代以及过滤元素的主要类,它有三种构造方法[44],见下表4-1,可根据具体情况使用任意一种。表4-1收集器的三种构造函数构造函数说明FilteredElementCollector(Document从一个文档构造,迭代会从文档所有的元document)素进行。FilteredElementCollector(Document从一个文档和ElementID集合构造,迭代document,ICollectionelementIds)会从这传进来的集合中进行。FilteredElementCollector(Document从一个文档和一个视图构造,迭代会从所document,ElementIdviewId)有在传进来的视图中所见的元素中进行。初次创建该对象的时候,是没有应用任何的过滤器的,如果这时试图从该对象中迭代或者获取元素列表,会出现异常。FilteredElementCollector提供了多种多样的方法,用户可根据自身需求对查询的元素集进行具体设置:通用方法WherePasses()在收集器内使用ElementFilter[44]。此类方法能够在结果内多次应用,从而扩增过滤器(filter);快捷方法,无需对过滤器对象进行初始化处理,其很大程度上等同于过滤器filter的快捷键;一些典型的运算方法[44],它们能够返回收集器,允许多种过滤器实现链式调用。收集器设置过滤器结束以后,就能够得到满足条件的构件,其存在下述获取方式:(1)得到构件ID或其对应的迭代器。(2)得到满足过滤器要求的构件ID或构件的集合。(3)得到满足过滤器要求的首个构件ID,在只需满足某个条件的构件时,该-30- 方式无需遍历全部满足要求的构件,如此就显著优化了过滤效率。FilteredElementCollector类能够对foreach语法提供良好的支持,必能够通过LINQ语句完成多种操作。(1)foreach语法利用该语法构件在收集器的遍历,本文研究主要应用该语法,其对应的代码为:UIDocumentuidco=revit.Application.ActiveUIDocument;Documentdoc=uidco.Document;FilteredElementCollectorbartypes=newFilteredElementCollector(doc).OfClass(typeof(FamilyInstance));FamilyInstancefs=null;foreach(FamilyInstanceeleinbartypes)(2)LINQ语句FilteredElementCollector类对构件实现了IEnumerable接口,实现代码如下:varFamilyInstanceElements=fromelementincollector;whereelement.Name=="铁路工程制图标准A0公制";selectelement;下面将详细探讨本研究所选择的ElementClassFilter过滤方法://创建收集器FilteredElementCollectorcollector=newFilteredElementCollector(document);//创建过滤器ElementClassFilterfilter=newElementClassFilter(typeof(FamilySymbol));//过滤构件ICollectioncollection=collector.WherePasses(filter).ToElements();foreach(Elementelemincollection){//过滤后找到需要的族实例if(ele.Name=="铁路工程制图标准A0公制"||ele.Name=="铁路工程制图标准A1公制"||ele.Name=="铁路工程制图标准A2公制"||ele.Name=="铁路工程制图标准A3公制"||ele.Name=="铁路工程制图标准A4公制"){if(ele.OwnerViewId.IntegerValue.ToString()==doc.ActiveView.Id.ToString()){fs=ele;}}}-31- 4.1.3族构件的重要属性和方法本文研究中主要构件的核心属性包括:XYZ类、Curve类、Location类等。(1)XYZ(坐标)类坐标不管在工程中或是在三维模型内都具有非常关键的地位,在RevitAPI内可通过XYZ类对空间坐标点进行界定,函数使用方法:XYZabc=newXYZ(1,1,1)。(2)Curve(线)类在轨道模型内的族很大程度上以线加载为核心,线的核心参数涵盖某点和线两端点所对应的坐标。CreateBound(XYZendpoint1,XYZendpoint2)方法可以创建限定的线性曲线的新实例。第一个参数表示这条线的第一个端点,第二个参数表示这条线的第二个端点。使用方法:lineyou=Line.CreateBound(newXYZ(pxmax.X,pxmax.Y,0),newXYZ(pxmax.X,pxmax.Y-1,0))。通过此方法可以设置标注尺寸线的起点和终点,可用于对弹性支承块式无砟轨道模型三视图中的族进行标注尺寸线[47]。在平面图中创建尺寸线的方法如下:if(doc.ActiveView.ViewDirection.Z==1||doc.ActiveView.ViewDirection.Z==-1){if(kaiGuan)//如果kaiGuan==true,则创建横标注,否则创建竖标注{//横标注右侧尺寸截止线lineyou=Line.CreateBound(newXYZ(pxmax.X,pxmax.Y,0),newXYZ(pxmax.X,pxmax.Y-1,0));//横标注左侧尺寸截止线linezuo=Line.CreateBound(newXYZ(pxmin.X,pxmax.Y,0),newXYZ(pxmin.X,pxmax.Y-1,0));//横标注横尺寸线linebiaoheng=Line.CreateBound(newXYZ(pxmin.X,pxmax.Y+1,0),newXYZ(pxmax.X,pxmax.Y+1,0));}}-32- (3)Location(位置)类本文中全部的构件都应用了自建族,并且所有族类型都和某个对象位置信息相对应,其主要涵盖LocationPiont和LocationCurve,模型内的底座板族都存在LocationPiont信息,而道床板族主要包含LocationCurve信息,在得到该位置信息之后,就能够对族构件完成多种操作,其中比较重要的包括移动、旋转等,同时能够实现族构件的加载、替换等多元化的功能,寻求位置信息的具体步骤为:①获取底座板或支承块对的位置点,在这之后对其赋予全新的值LocationPiontlocation=dizuoban.LocationasLocationPiont;XYZnewLocation=newXYZ(1,0,0);location.Point=newLocation。此类方法的主要作用是寻求构件的位置点,并进行相关联的操作。②获取道床板的位置线,在这之后对其赋予全新的值LocationCurvelocation=daochuangban.LocationasLocationCurve;//将位置线转换为直线Lineline=location.CurveasLine;//获取直线端点坐标XYZptStart=line.get_EndPoint(0);XYZptEnd=line.get_EndPoint(1)。4.2尺寸标注自动布局的算法标注不但要让构件的各类信息能够很好的展示,并且也要让工作人员能够轻易的将其识别。针对该标注来说,在其加工制造,测量等层面一定要进行严格的要求。所以,在进行该操作以前必须对形状特性进行探究,结构特性等是十分重要的,唯有对模型构件的所有基准进行明确,并选取最为有效的标注方式,如此才可以实现模型构件的标注[45]。结合上述要求,对标注的原则和形式及尺寸标注子集划分展开论述:4.2.1标注的原则模型构件的标注原则是必须对其设计、结构等方面进行全面分析。模型构-33- 件的标注主要包括两个部分,分别是尺寸标注和文字注释,通常而言,尺寸标注相对较多,尺寸标注一般涵盖两类,分别是功能尺寸标注和联系尺寸标注[45]。从设计的层面而言,该尺寸标注的要求是功能尺寸标注必须要实现直观标注,这是由于功能尺寸会在一定程度上影响构件性能的标注,另外,应联系尺寸,详细而言就是将存在关系的模型构件进行关联[45],例如一个弹性支承块式无砟轨道模型是由多构件组成的,所有模型构件之前存在一定的关联,而联系尺寸就能够将此类关系进行准确的标注,该标注是专门为模型构件而设计的[45]。尺寸一般情况下标注在比较显眼的位置,在计量的过程中应将标注的内容作为基准。图样上的尺寸标注应涵盖尺寸线、尺寸数字等内容。尺寸界限与尺寸线一般情况下选择细实线。尺寸起止一般选择单箭头进行具体表示。尺寸数字宜标注在尺寸线上方中部。尺寸线宜与被标注的图线相平行,其长度不能逾越尺寸界限,对于彼此平行的尺寸线,应按照图样轮廓线进行标准化的排列,尺寸应该标注在轮廓线之外,不能够和图线和符号等出现相交的情况。必要时,图样的垂直或水平轮廓线可作尺寸界限;中心线也可作尺寸界限。图样上的尺寸单位可按需要选用毫米、厘米或米。4.2.2标注的形式各位置的排布对标注也存在一定影响,通常而言,标注可划分为下述几类形式:首先是链状法,详情见图4-2(a),这种方法是把模型构件按照秩序标注为链状,其经常使用与结构存在较高一致性的模型构件。第二类为坐标法,详情见图4-2(b),坐标法通常是从某个点开始进行标注。第三类为综合法,这种方法将上述两类方法进行衔接,详情见图4-2(c),这种方法因为综合了两类方法的优点,因此应用较多[49]。整体而言,这些方法各具特点,在操作中结合模型构件的实际情况进行选择,从而对问题进行良好的处理。尺寸标注能够展示距离和尺寸所对应的视图专有元素。其涵盖多种类型,针对其中的永久尺寸标注来说,它是专门放置的尺寸标注。对于永久尺寸标注是特意放置的尺寸标注。在AutodeskRevit中永久尺寸标注可以分为对齐尺寸标注、线性尺寸标注、角度标注、径向尺寸标注、直径尺寸标注和弧长度尺寸标注这六种[45]。-34- 图4-2尺寸标注形式标注的核心理念是先寻求所有构件族应标注的族的拓扑信息和几何信息,此处的族信息是指必须进行标注的对象。在这之后研究所有模型构件所具有的特性,最后再对其完成标注。本文在Revit二次开发方面的标注采用的是综合法标注形式,主要原因在于其灵活多变,能适应各种情况。4.2.3尺寸标注子集划分针对工程图内的某个视图而言,可借助遍历的方法获取所有的尺寸标注,记D={d1,d2,…di,…dn}为这个视图上全部尺寸标注的集合,而di指代的是某个尺寸标注。因为本文研究仅对两类标注情况进行分析,因此该集合也可标记为D={Dh,Dv},其中Dh指代的是水平尺寸标注集,而在此时Dv具体指代的是竖直尺寸标注集。针对Dhi与Dvi可对其进行查询,进而明确两个引出点详细的坐标值,除此之外,也可明确视图中心点的实际坐标值,并将其设定为(Vx,Vy)。假如Dhi两个引出点所对应的坐标Y值的平均值超过Vy,则Dhi(y)>Vx,那么它标注在视图上方更具有合理性,反之则必须将其标注在下方,假如其完全相同,那么两种情况都可以;此外,假如Dvi的两个引出点所对应的坐标X值的平均值超过Vx,即Dvi(x)>Vx,则Dvi标注在右侧更为准确,反之则应标注在左侧,假如其完全一致,那么两侧都可以[57]。利用该方式,就能够将两类标注划分为四个子集,并通过Dt、Db、Dl、Dr对其进行具体表示,详情见图4-3所示。-35- 图4-3尺寸标注子集划分尺寸标注子集划分结束以后,尺寸标注的自动布局问题就发生了转变,进而得到尺寸标注子集所对应的自动布局问题。4.3施工图尺寸自动标注的实现4.3.1尺寸自动标注的基本流程因为BIM技术在现阶段快速发展,在各个方面的理论基础缺乏完善性,并且在自动标注方面缺乏标准化的理论论述。在2015年的时候,欧克特公司推出了《AutodeskRevit二次开发基础教程》,该论著中分析了Revit标注的相关知识。由于标注主要是对模型构件进行尺寸标注,因此本章的自动标注主要对尺寸标注进行研究,对Revit软件基于弹性支承块式无砟轨道模型进行标注的二次开发,其自动标注插件流程图如图4-4所示,通过Revit二次开发的施工图尺寸自动标注插件的核心代码见附录A。-36- 图4-4自动标注插件流程图4.3.2获取文档选择要标注族的方法在建筑立面和楼层平面的视图下获取文档和选择要标注的族。自动标注的对象是族,因此自动标注是以单个的族为对象创建尺寸标注。Revit将全部的交互选择的操作进行封装处理,而Selection类能够支持多元化的操作,其中比较重要的包括选择线,选择面,选择对象,窗口选择,多重选择等等操作。Selection类有一些允许用户选择新对象,甚至屏幕上一个点的方法,Selection类函数如表4-2所示。这让用户可以使用光标选择一个或多个图元(或其他对象,如边或面),然后将控制返回给应用程序。这些功能并不自动向活动选择集添加新的选择。-37- 表4-2Selection类函数函数描述PickObject()提示用户选择一个Revit模型中的对象。PickObjects()提示用户选择多个Revit模型中的对象。PickPoint()提示用户在活动草图平面内拾取一个点。调用一个通用的双击编辑器,让用户在屏幕上指PickBox()定一个矩形区域。PickElementsByRectangle()提示用户用矩形选择多个Revit模型中的对象。每个Pick函数都可以被重载,重载时可以带一个字符串参数,该参数用于定制状态栏消息,当开发人员的应用程序提示用户拾取对象或图元时,该消息会在状态栏上显示。为了解决快速标注的需要,需要快速选择元素的方法,对Selection类的几种方法进行比较之后,选择第五种框选的方法,它可以快速的对模型中的对象进行选择。PickElementsByRectangle()方法如图4-5所示。GetElement(ElementIdid)函数表示获取输入字符串名称引用的元素(从文档继承),核心代码如下:图4-5PickElementsByRectangle()函数//获取文档UIDocumentuidco=revit.Application.ActiveUIDocument;Documentdoc=uidco.Document;//框选指定类型的元素IListeles=uidco.Selection.PickElementsByRectangle("请选择要标注的族");//通过引用选取到选择元素//创建事务using(Transactiontran2=newTransaction(doc,"创建尺寸标注")){tran2.Start();foreach(Elementelemineles){BoundingBoxXYZbox=elem.get_BoundingBox(doc.ActiveView);XYZpxmax=box.Max;-38- XYZpxmin=box.Min;}tran2.Commit();}4.3.3在俯视图中尺寸线的创建方法在Revit软件中楼层平面就相当于三视图中的俯视图,无砟轨道模型在楼层平面的状态下创建尺寸线,在RevitAPI内应用XYZ类对三维空间的各项坐标进行表示,可通过newXYZ(X,Y,Z)函数对空间坐标进行界定,如图4-6所示。CreateBound(XYZendpoint1,XYZendpoint2)函数表示创建限定的线性曲线的新实例。第一个参数表示这条线的第一个端点,第二个参数表示这条线的第二个端点,其函数语法如图4-7所示。如果kaiGuan==true,则创建横标注,否则创建竖标注,横标注右侧尺寸截止线,横标注左侧尺寸截止线;竖标注上侧尺寸截止线,竖标注下侧尺寸截止线。核心代码如下:Revit使用以下两个坐标系:模型所在的全局或模型空间坐标系;视图坐标系。视图坐标系表示模型在观察者视野里如何显示。其原点是观察者的眼睛位置,在模型空间中的坐标可通过View.Origin属性来检索。模型空间中的坐标函数如表4-3所示。表4-3模型空间中的坐标函数轴向函数描述X轴View.RightDirection朝向屏幕右方。Y轴View.UpDirection朝向屏幕上方。Z轴View.ViewDirection从屏幕指向观察者。图4-6XYZ函数图4-7CreateBound函数-39- //创建尺寸标注CreatDenmention(doc,pxmax,pxmin,true);//横向尺寸CreatDenmention(doc,pxmax,pxmin,false);//竖向尺寸CreatDenmention(Documentdoc,XYZpoint1,XYZpoint2,boolkaiGuan)//初始化赋值XYZpxmax=point1;XYZpxmin=point2;Linelineyou=null;Linelinezuo=null;Linelinebiaoheng=null;//则在平面图中创建尺寸线if(doc.ActiveView.ViewDirection.Z==1||doc.ActiveView.ViewDirection.Z==-1){if(kaiGuan)//如果kaiGuan==true,则创建横标注,否则创建竖标注{//横标注右侧尺寸截止线lineyou=Line.CreateBound(newXYZ(pxmax.X,pxmax.Y,0),newXYZ(pxmax.X,pxmax.Y-1,0));//横标注左侧尺寸截止线linezuo=Line.CreateBound(newXYZ(pxmin.X,pxmax.Y,0),newXYZ(pxmin.X,pxmax.Y-1,0));//横标注横尺寸线linebiaoheng=Line.CreateBound(newXYZ(pxmin.X,pxmax.Y+1,0),newXYZ(pxmax.X,pxmax.Y+1,0));}4.3.4在立面图中尺寸线的创建方法在Revit2016软件中,建筑立面图包括东、西、南、北四个方位,由于在南、北立面图中创建尺寸线的方法和在东、西立面图中创建尺寸线的方法相同,为了节省篇幅以在南、北立面图中创建尺寸线为例,研究尺寸线的创建方法。如果kaiGuan==true,则创建横标注,否则创建竖标注,横标注右侧尺寸截止线,横标注左侧尺寸截止线;竖标注上侧尺寸截止线,竖标注下侧尺寸截止线。核心代码如下:-40- //在南、北平面图中创建尺寸线if(doc.ActiveView.ViewDirection.Y==1||doc.ActiveView.ViewDirection.Y==-1){if(kaiGuan)//如果kaiGuan==true,则创建横标注,否则创建竖标注{//横标注右侧尺寸截止线lineyou=Line.CreateBound(newXYZ(pxmax.X,0,pxmax.Z),newXYZ(pxmax.X,0,pxmax.Z-1));//横标注左侧尺寸截止线linezuo=Line.CreateBound(newXYZ(pxmin.X,0,pxmax.Z),newXYZ(pxmin.X,0,pxmax.Z-1));//横标注横尺寸线linebiaoheng=Line.CreateBound(newXYZ(pxmin.X,0,pxmax.Z+1),newXYZ(pxmax.X,0,pxmax.Z+1));}}4.3.5用户界面编程界面编程是外部应用的一个重要方面,通过界面编程开发的命令能够简化操作步骤,大大提高工作效率,因此有必要对界面编程开发做一个较为详尽的研究。在任何得到UIApplication或者UIControlApplication的地方调用这些函数来创建Tab和Panel。Tab、Panel和PushButton三者之间的关系如图4-8所示。图4-8Tab、Panel和PushButton三者之间的关系创建一个新的RibbonTab,调用CreateRibbonTab函数,传入一个tab的名称即可。但是名称有限制,不能和现有的tab重名,如果发现重名,Revit会抛出异常。还有一个数量上的限制,所有插件添加的tab总数不能超过23个,如果超过会抛出异常,希望把panel放到“附加模块”的tab下面去。所有创建出来-41- 的tab都会放在“修改”tab的前面。panel也有名称和数量的限制,如果一个tab里有重名的panel,Revit会抛出异常,一个tab里的panel数量最多为100个。RibbonPanel函数一共有三个如表4-4所示,本文所用的是参数相对较少的第一个RibbonPanel函数。表4-4三类RibbonPanel函数函数描述只有一个参数,指定panel的名字,表明这里创建CreateRibbonPanel(stringpanelName)出来的panel都是放到“附加模块”的tab下的。第一个参数指定tab的名称,第二个参数指定panel的名称。这里tab的名称只能是通过API创建出来CreateRibbonPanel(stringtabName,的tab的名称,不能把自己的panel加到Revit内建stringpanelName)的tab里去,如“建筑”。如果找不到对应名字的tab,Revit会抛出异常。CreateRibbonPanel(Tabtab,string第一个参数是枚举类型,有两个选择AddIns和panelName)Analyse,即可以将panel加到“附加模块”或者“分析”tab里去。Button的创建都有固定的模式。先创建相应的buttondata,然后添加到Panel里去,返回一个button的对象。PushButtonData构造函数如表4-5所示。表4-5PushButtonData构造函数参数描述namebutton的名字,必须保证唯一。text显示在button上的文字,若名字过长可以中间用“b”换行。assemblyName指定这个类型所在的dll的路径。className指定这个类型的名称,全名称,包括命名空间的名称。然后将创建好的buttondata作为参数传到RibbonPanel.AddItem函数中,得到一个PushButton的对象。通过这个PushButton的对象,可以进一步更详细的装饰这个button,例如图标、提示条,复杂一点的提示条里面还会有一个图片,目前还不支持插入视频,但是有的Revit内建的提示条有内嵌视频。自定义创建的按钮的部分核心代码如下。//启动Revit程序时执行publicResultOnStartup(UIControlledApplicationapp)//创建按钮-42- RibbonPanelribbonPanel0=application.CreateRibbonPanel("施工图标注");//设置点击这个按钮所调用程序的路径PushButtonpushButton0=ribbonPanel0.AddItem(newPushButtonData("施工图标注","自动标注",@"D:LearningThesisAndBIMData程序插件图纸和尺寸标注插件图纸和尺寸标注尺寸标注运行中选择2binDebug运行中选择2.dll","尺寸标注.Class1"))asPushButton;//给按钮添加一个图片UriuriImage0=newUri(@"D:LearningThesisAndBIMDatatupianBiaoZhu32×32.png");BitmapImagelargeImage0=newBitmapImage(uriImage0);pushButton0.LargeImage=largeImage0;//关闭Revit程序时执行publicResultOnShutdown(UIControlledApplicationapplication){returnResult.Succeeded;}编写结束之后,在VisualStudio内生成相应的解决方案,启动Revit程序,在这之后运行外部工具菜单,通过Add-InManager插件手工加载VisualStudio2015构成的.dll文件,在加载完毕以后,退出Revit程序然后再一次将其启动,在Ribbon(工具栏)上会构成自定义的按钮。4.4铁路工程制图标准图纸的设置4.4.1铁路工程制图标准图纸Revit2016软件自带的公制图纸族不能满足铁路工程对图纸的要求,因此需要对Revit2016软件自带的公制图纸族进行适当的改造,以达到铁路工程制图标准的要求。图框是工程图中不可或缺的图样要素,表示了图纸的大小、设计单位、比例等大量工程信息。而图框对于企业或单位又是统一的,所有设计人员使用统一格式的图框[58]。参考《铁路工程制图标准》(TB/T10058-1998),工程图纸的幅面、图框及尺寸应符合图4-9及表4-6的规定。单张图、成册图宜采用横式图纸幅面;成卷图宜采用立式图纸幅面。-43- 图4-9横式和立式图纸幅面格式表4-6工程图纸幅面、图框尺寸表mm尺寸代号图纸类型bLac幅面代号A084111892510A15948412510单张、成册图纸A24205942510A3297420255A4297210255A5420按需要1510成卷图纸A6297按需要155需要会签时,会签栏应按铁路工程制图标准布置。采用横式图幅时,会签栏应与图标等高。栏内应填写会签人员的专业、姓名及签署日期。一个会签栏不够时,可以在左侧并列增加一个。复核栏下的空白签署栏可根据需要选用。把Revit软件自带的图纸改造成适用于铁路工程制图标准的图纸如图4-10,图纸中会签栏和图标栏如图4-11所示。-44- 图4-10改造后的铁路工程制图标准图纸图4-11铁路工程制图标准会签栏和图标栏以创建的铁路工程制图标准A4公制图纸为例,在会签栏内添加文字注释如设计者、绘图员等。新建公制常规注释族在其中添加标签,设置标签文字的参数类型为实例参数,设置标签文字的字体、大小、颜色等等。然后将新建公制常规注释族载入到铁路工程制图标准A4公制图纸中,放置到会签栏内文字注释后面的空格内。对新载入的常规注释族添加参数设计者,将此新载入的族复制到其余的会签栏文字注释后面的空格内,以此添加相对于的参数、关联族参数。图标栏内的标签添加方法和会签栏内的常规注释族的标签添加方法类似不再赘述。4.4.2过滤族实例设置参数的方法Revit提供了一个通用机制,给每个图元一组可编辑的参数。在Revit用户界面中图元属性对话框中的参数是可见的。存储类型StorageType描述了内部存储参数值的类型。基于属性值,使用相应的Get()和Set()方法来检索和设置参数-45- 数据值。StorageType是个枚举类型,表4-7列出了Revit支持的所有内部参数数据存储类型。LookupParameter(stringname)函数表示要检索的参数的名称。表4-7存储类型成员名称说明String内部数据存储为字符串。ElementId数据类型表示一个图元并存储为一个图元ID。Double数据在内部存储为8字节浮点数。Integer内部数据存储为有符号32位整数。None代表无效的存储类型,仅内部使用。铁路工程制图标准公制图纸会签栏中插入公制常规注释族,在会签栏文字注释的后面及图标栏中插入两类不同的标签,设置两类不同标签文字的字体、大小、颜色等等。二次开发时收集会签栏和图标栏中的标签,在控制面板中设置相对应的标签,把图纸中的标签文字注释和控制面板中的设置相关联。//收集名称Liststs=newList();stringsJst=fs.LookupParameter("设计者").AsString();sts.Add(sJst);ParametersJ=fs.LookupParameter("设计者");…………stringgJst=fs.LookupParameter("共几张").AsString();sts.Add(gJst);ParametergJ=fs.LookupParameter("共几张");Form3f3=newForm3(sts);f3.ShowDialog();FilteredElementCollectorOfClass()函数表示将元素类过滤器应用于收集器,如图4-12所示。这是刚才修改过的同一个收集器,返回时可以将多个调用合并在一行中。核心代码如下:图4-12FilteredElementCollector函数-46- //过滤族实例应用于收集器FilteredElementCollectorbartypes=newFilteredElementCollector(doc).OfClass(typeof(FamilyInstance));FamilyInstancefs=null;//遍历名称为铁路工程制图标准的族实例foreach(FamilyInstanceeleinbartypes){if(ele.Name=="铁路工程制图标准A0公制"||ele.Name=="铁路工程制图标准A1公制"||ele.Name=="铁路工程制图标准A2公制"||ele.Name=="铁路工程制图标准A3公制"||ele.Name=="铁路工程制图标准A4公制"){if(ele.OwnerViewId.IntegerValue.ToString()==doc.ActiveView.Id.ToString()){fs=ele;}}}4.4.3获取预定义设置的方法设置好的铁路工程制图标准公制图纸需要载入到弹性支承块式无砟轨道模型项目中才能使用,图纸载入到项目中之后,在图纸视图状态下才能对图纸中设置的标签进行关联操作。GetPredefinedOptions(Documentdocument,stringsetup)函数如图4-13所示,第一个参数表示Revit项目文档检索装置,第二个参数指定文档中预定义导出设置的名称。图4-13GetPredefinedOptions函数RevitAPI允许对Revit文件或其一部分,导出到其他软件使用的各种格式。Dcoument类有一个可重载的Export()方法,可使用Revit内置导出程序启动文件导出。对于更进一步的需求,某些类型的导出,可用Revit插件定制。Export(stringfolder,stringname,Icollectionviews,DWGExportOptionsoptions)函数中的各个参数以及各参数的描述如表4-8所示。-47- 表4-8Export()函数的参数参数描述folder表示输出文件夹,其中文件将被导出。文件夹必须存在。表示一个文件的名称或一组文件的前缀。如果空,则使用自动name命名。如果空引用,将引发参数异常。views表示要导出的视图的选择。该集合必须至少包含一个有效视图。表示各种选项适用于DWG格式。如果空引用,所有的选项将设options置为各自的默认值。核心代码如下:publicboolExportDWG(Documentdocument,Viewview,stringsetupName){boolexported=false;//获取预定义的设置并使用给定名称的设置.IListsetupNames=BaseExportOptions.GetPredefinedSetupNames(document);foreach(stringnameinsetupNames){if(name.CompareTo(setupName)==0){//使用预定义选项导出DWGExportOptionsdwgOptions=DWGExportOptions.GetPredefinedOptions(document,name);//导出活动视图ICollectionviews=newList();views.Add(view.Id);//该文件已被保存了,因此有一个有效的路径名.exported=document.Export(Path.GetDirectoryName(document.PathName),Path.GetFileNameWithoutExtension(document.PathName),views,dwgOptions);break;}}returnexported;}4.4.4用户界面编程为了方便对铁路工程制图标准公制图纸中会签栏和图标栏中内容的修改,二次开发了图框插件。在施工图尺寸自动标注中已经对界面开发编程做了详细-48- 的说明,因此在本节中不再赘述,通过二次开发的外部命令按钮如图4-15所示,铁路工程制图标准图框插件的界面编程核心代码见附录B。在Revit软件的图纸视图下,运行施工图图框命令即弹出施工图图框交互界面,如图4-14所示。需要注意的是如果在“说明”文本框中输入的字符数太多,在图纸中显示的字符可能会溢出图纸,解决方法是使用空格键来进行换行显示。在弹性支承块式无砟轨道模型项目中插入铁路工程制图标准图纸,应用开发的施工图图框命令其结果如图4-16所示。图4-14施工图图框交互界面图4-15施工图图框设置的外部命令按钮图4-16无砟轨道模型组装图的会签栏和标题栏-49- 4.5插件跟踪调试开发的插件能不能满足要求,需要对插件进行跟踪调试。对编写的程序进行跟踪调试是二次开发过程中至关重要的一个环节。跟踪调试程序的方法包括两类,第一类是在VisualStudio内打开Revit,之后对其展开调试[46],VisualStudio中选择ProjectProperties>Debug>Startexternalprogram,如下图4-17所示,在调试完毕以后,Revit软件就能够顺利退出了。图4-17VisualStudio中启动外部程序Revit第二类方法是在Revit启动之后对其展开标准化的调试,在这个时候Revit无需退出,因此使用非常简便,但是需要将程序Attach到Revit上,在对代码进行修改的时候Detach中断调试[46],可在Revit不停止的条件下对若干个程序进行调试,具体见下图4-18。图4-18VisualStudio中Attach到Revit-50- VisualStudio2015能够暂时中断调试,之后对代码进行调整,最后对其更新就能够继续调试运行。然而该功能在64位操作系统中难以实现。该问题造成64位上对Revit的代码调整变得比较复杂,尤其是在程序设计中。此外,还有一种能大幅提高工作效率的调试方法。AddinManager可以加载后立即运行插件中的命令(无需重启动Revit),非常高效方便。更高效的是,当你对用AddinManager已经加载的插件的代码修改并编译后,无需再次加载该dll,直接在AddinManager里面运行你的命令,此时运行的已经是修改代码后的命令了。操作者无须做任何工作,AddinManager代劳了。AddinManager自动探测是否有更新的dll产生,如果有,AddinManager会把你的插件dll拷贝一份到一个临时目录,并且加载它。这就是为什么再次编译,虽然生成的dll处于同一个位置,系统没有报告文件正在使用,无法覆盖。-51- 4.6施工图导出对弹性支承块式无砟轨道BIM模型导出的施工图主要是建筑施工图,应用开发的尺寸标注命令对无砟轨道BIM模型导出施工图并使用相对应的铁路工程制图标准图纸进行输出。具体包括图4-19弹性支承块式无砟轨道设计组装图、图4-20弹性支承块式无砟轨道平纵断面图、图4-21弹性支承块式无砟轨道设计横断面图、图4-22道床板上层钢筋平面图、图4-23道床板下层钢筋平面图、图4-24道床板配筋的不同断面图及部分详图等,对不同的视图可以自动进行尺寸标注,提高工作效率,实时联动修改。-52- 图4-19弹性支承块式无砟轨道设计组装图-53- 图4-20弹性支承块式无砟轨道平纵断面图-54- 图4-21弹性支承块式无砟轨道设计横断面图-55- 图4-22道床板上层配筋平面图-56- 图4-23道床板下层配筋平面图-57- 图4-24道床板A-A与B-B配筋断面图-58- 4.7本章小结本章对Revit二次开发的工具、功能和方式进行了研究,并对模型族构件的获取、过滤、编辑等基本操作方法和使用技巧进行了深入地分析总结,通过RevitAPI获取文档选择要标注族、在俯视图中创建尺寸线、过滤族实例设置参数、获取预定义设置以及外部应用界面编程的程序实现方法;创建了弹性支承块式无砟轨道BIM模型的外部应用,通过开发的尺寸标注功能和铁路工程制图标准图纸相结合,可以实现对无砟轨道BIM模型的施工图出图,具体包括组装图、平纵断面图、横断面图、道床板上下层钢筋平面图、道床板钢筋的不同断面图及部分详图等,对不同的视图可以自动进行尺寸标注,对模型实时联动修改,大大提高了工作效率。-59- 第五章工程量统计研究5.1工程量统计的方法工程预算从客观而言是工程造价控制的核心任务,该任务的主要工作是尽快的完成工程量运算,其具有多种特点,比如消耗的时间较长、严谨性较强等,其运算的速率和精准度会很大程度上影响预算结果的可靠性[50]。所以,对工程量统计方法进行改进,从而加大预算速度,提升审核工作的透明度,均具有十分重要的实际意义。下文将具体探讨工程量计算的发展历程,并在弹性支承块式无砟轨道BIM模型中,对工程量统计进行二次开发研究[50]。5.1.1手工算量在工程量计算方法得到推广以后,手工算量的方法非常常见,当前来说,我国工程量计算的核心方法仍然为手工算量,它是基础建设工作中具有非常高的价值意义。伴随手工计算方法的不断改进,很多使用者在进行计算的过程中积累了丰富的算量经验,并总结了多种快速算量方法,为后者的运算减少了许多工作量,并很大程度上优化了实际计算效率。除此之外,手工算量本质而言是人为自主活动,计算过程中会伴随使用者的行为而发生一定的变化,所以计算者能够对计算过程进行很好的掌控[50],假如其产生了一定差错,则只能够对较小的范围产生影响,对于错误的修正非常方便。另外,手工算量计算书的格式符合人们的观念,因此审核工作的难度不大,并且易于发现错误,且相关的计算者可对计算数据产生信赖[50]。另外,人工计算法可以应对各种各样的结构型式,也能够对一些特殊结构展开处理。该方法的缺点为:过程步骤较为复杂,产生差错的可能性较高。因手工计算的全部计算都是通过工作人员计算的,因此往往会产生一些主观错误或低级错误,然而计算结果会伴随分部计算的改变而产生一定的变动,如此就会导致计算表发生变更,对之后的工程造价工作也会产生影响[50],造成这种计算法产生一定误差,从而形成比较巨大的修复代价。-60- 5.1.2软件表格法算量随着科学技术的不断发展,在建筑施工方面同样形成了系统的软件技术,建筑业施工人员可依托于电脑的计算能力,通过软件对各类问题进行处理,软件表格法在这个时段快速发展。该方法的计算过程:先把目标的计算表达式录入至指定的软件中,在这之后通过程序完成计算,打印等操作,如此就可以减轻计算者的工作负担[50]。显而易见,这种方法是手工计算法的改良版,它并未对传统的手工计算理念进行革新,所以此算法能够高效的打印报表,即便产生了一定差错,修改的难度也较低。除此之外,计算者能够对计算条目进行调整,之后软件对工程量的累加完成报表生成,修改错误的过程中付出的代价相对较低[50]。与此同时,更为关键的是此类方法的理念和计算者相契合,操作软件的难度不高,因此它能够有效的代替手工计算法。结合上述分析我们可以发现,该方法能够提升计算者的计算速率,然而无法有效解决计算者劳动量较大的问题,相关学者对该问题进行了分析并提出了多种解决方案,进而促使计算软件进一步发展。5.1.3软件自动算量当前的计算方法中最具有潜力的是软件自动算量法。其核心为计算规范,零部件实体的具体位置通常情况下是借助画图进行明确的,最后输入同计算存在一定关系的属性。软件借助于既定的计算标准,可得到零部件的实际工程量,在这之后对其进行汇总,从而明确相应的工程量清单。此类方法很大程度上精简了计算输入,计算效率也大幅度优化,因此引起了相关学者的广泛关注[50]。根据支持图形维数的不同,工程量计算软件又分为两种,即二维和三维计算软件。这两种软件在计算方法上的最大不同,表现在可检查性和计算精度等方面。Revit软件属于三维计算软件,能够支持多种工程数量明细功能,软件能够结合族样式对工程数量进行运算。在目标视图内完成修改都会导致Revit参数化,并让相关联的工程数量明细表进行一定调整。假如必须和当前的工程计价软件完成对接,还能够借助于二次开发来完成[53]。-61- 5.2Revit软件手动出明细表对于弹性支承块式无砟轨道模型而言,想要从模型中获得某一个类型的明细表,需要通过新建明细表、过滤器过滤、明细表属性设置等几个方面来导出明细表。在视图选项卡下的创建面板中选择明细表下拉按钮,在弹出的新建明细表对话框中选择要统计的创建明细表。新建的图纸可在明细表中提取编号、名称等信息,汇总成表,修改样式后可作为文本图纸中的目录使用。选中想要导出的明细对象,如结构基础,在过滤器列表中找到明细对象所在的类别,添加需要的字段信息,还可以设置明细表的排序/分组、格式、外观。如不满足要求可根据明细表属性,继续设置直到满足要求为止。明细表可以有效处理项目内产生的多种经济技术指标,将智能化统计作为核心,可以伴随模型进行高效的更新。明细表是把文本生成的任务转交至Revit平台的核心原因,以Revit平台为核心构成多元化的项目文本,它可以很大程度上脱离于比较复杂的指标更新和文本的重复导出[54]。从而达到信息可持续性和文本自动化的真正目标,除此之外,文本中指标的构成很大程度上取决于组件的定义和相关注释。然而Revit明细表无法实现关联,一些指标运算无法实现自动化[54]。5.3二次开发一键出明细表研究5.3.1明细表插件程序流程图Revit软件有明细表统计工具,这些表格能够详细的展示各类信息,而这部分信息主要源于图元属性。明细表能够列出图元类型所对应的全部实例[55],或结合成组标准将若干个实例进行压缩。另外,在进行设计的时候对明细表进行创建,从而把明细表导入到另外的程序。可信度较高的工程量统计功能为各项施工流程提供可靠的依据,不但能够提升施工的整体效率,同时很大程度上优化了工程的整体效率[55]。为此,基于Revit软件开发了一键出明细表插件,通过定制明细表,可以从所创建的Revit模型内得到一些必不可少的项目信息,并通过表格对其进行详尽地表达[56]。明细表插件程序流程图如图5-1所示,通过Revit二次开发的一键出明细表插件的核心代码见附录C。-62- 图5-1明细表插件程序流程图5.3.2获取视图中元素的方法获取当前视图中全部的元素,包括系统族实例与外部导入族实例。视图是从Revit模型产生的图像,其对文件中存储的数据有特许访问权。每个项目文件都有一个或多个不同视图。过滤器是显示在明细表中的图元所必需满足的条件。ScheduleFilter可用于过滤将显示在明细表中的图元。显示在明细表中的图元必需满足所有过滤器。在当前活动视图中,用ElementClassFilter()函数过滤外部导入族的实例,用FilteredElementCollector()函数过滤系统族实例,这两个过滤函数如图5-2所示。-63- 通过内置逻辑过滤器LogicalOrFilter()将外部导入族实例与系统族实例进行组合,来获取当前视图中的全部元素。图5-2ElementClassFilter和FilteredElementCollector过滤函数逻辑过滤器逻辑组合两个或更多过滤器,下表5-1概括了内置的逻辑过滤器。想要获取当前视图中的全部元素需要用到LogicalOrFilter()过滤器函数。表5-1内置逻辑过滤器内置过滤器过滤结果快捷方法WherePasses():添加一个附加过滤器LogicalAndFilter通过多组过滤器的图元IntersectWith():连接两组独立过滤器多组过滤器中,至少通LogicalOrFilterUnionWith():连接两组独立过滤器过一组过滤器的图元//构造过滤器收集视图中的全部元素//过滤外部导入族的实例ElementClassFilterinstanceFitler=newElementClassFilter(typeof(FamilyInstance));//过滤系统族实例ElementClassFilterhostFilter=newElementClassFilter(typeof(HostObject));//过滤外部导入族实例或者系统族实例LogicalOrFilterandFilter=newLogicalOrFilter(instanceFitler,hostFilter);//在当前活动视图中创建收集器FilteredElementCollectorcollector=newFilteredElementCollector(doc,doc.ActiveView.Id);collector.WherePasses(andFilter);IListelems=collector.ToElements();ListcurrentBuiltInCategorys=newList();ObservableCollectioncategoryModels=newObservableCollection();-64- 5.3.3创建明细表类型的方法获取全部元素的可用于创建明细表的类型Category并去掉重复的类型。获取收集的元素包含的分类并获取分类中的所有字段信息。使用明细表视图,ScheduleDefinition类包含各种设置,定义明细表视图中的内容,包括:明细表类别和确定其类型的其他基本属性;将成为明细表各列的一组字段;分类和分组条件;限制明细表中图元集是否可见的过滤器。大多数明细表包含通过ViewSchedule.Definition属性检索到的单个ScheduleDefiniyion。在RevitMEP中,某些类别的明细表可以包含一个“嵌入式明细表”,含有与主明细表图元关联的图元,嵌入式明细表有其自己的类别、字段、过滤器、排序、外观等。这些设置存储在第二个ScheduleDefinition对象中,需要时可从ScheduleDefinition.EmbeddedDefinition属性获取嵌入式ScheduleDefinition。//获取收集的元素包含的分类并获取分类中的所有字段信息BuiltInCategorybuiltInCategory=(BuiltInCategory)item.Category.Id.IntegerValue;//新建明细表的类型模型CategoryModelcategoryModel=newCategoryModel();//明细表的类型模型内置元素categoryModel.BuiltInCategoryElem=builtInCategory;//明细表的类型模型的名字categoryModel.Name=item.Category.Name;//对当前明细表的类型模型添加内置参数currentBuiltInCategorys.Add(builtInCategory);5.3.4获取分类中字段信息的方法ViewSchedule类有几个根据明细表类型创建新明细表的方法。所有方法都有个Document参数,它是将要添加明细表或类似明细表视图的目标文件。新创建的明细表视图会显示在项目浏览器的Schedules/Quantities节点下。静态方法ViewSchedule.CreateSchedule()可以创建标准的单一类别或多类别明细表,代码如下:ViewSchedule.CreateSchedule(Documentdocument,ElementIdcategoryId)ElementId参数是类别ID,其图元将被列入明细表,而对于多类别明细表,它是非法图元ID,CreateSchedule函数如图5-3所示。-65- 图5-3CreateSchedule函数//获取全部需要在明细表中列出的字段AvailableFieldName.Add(field.Name);//创建明细表ViewScheduleschedule=ViewSchedule.CreateSchedule(doc,newElementId(item.BuiltInCategoryElem),ElementId.InvalidElementId);ViewScheduleschedule=ViewSchedule.CreateSchedule(doc,newElementId(builtInCategory),ElementId.InvalidElementId);ListFieldNames=newList();//获取分类中所有的字段信息foreach(SchedulableFieldschedulableFieldinschedule.Definition.GetSchedulableFields()){SchedulableFieldModelschedulableFieldModel=newSchedulableFieldModel();schedulableFieldModel.Name=schedulableField.GetName(doc);if(!FieldNames.Contains(schedulableFieldModel.Name)){FieldNames.Add(schedulableFieldModel.Name);categoryModel.SchedulableFieldModels.Add(schedulableFieldModel);}}categoryModels.Add(categoryModel);5.3.5添加分组字段的方法创建视图明细表后即可添加字段。Definition.GetSchedulableFields()方法将返回一个SchedulableField对象列表,表示明细表中可包含的非计算字段。从SchedulableField对象或使用ScheduleFieldType枚举均可添加新字段。ScheduleSortGroupField类在明细表可以以某个字段进行分组、排序,如图-66- 5-4所示。排序和分组是关联的操作。在任何情况下,显示在明细表中的图元都是根据它们的字段值进行排序的,明细表据此进行排序、分组,自动将具有相同值的图元分在一组。通过启动附加的表头、表尾或空白行,可以实现可视化的组间分隔。ScheduleField类是字段ScheduleDefinition列表中的单个字段。每个(非隐藏)字段将成为明细表的一列。最常见地,字段是表示出现在明细表中的图元的某个实例或类型参数。某些字段代表其他相关的参数,如某个明细表图元属于哪个房间。字段还可以表示来自表中其他字段的计算数据、具体公式和百分比字段。图5-4ScheduleSortGroupField函数//创建明细表ViewScheduleschedule=ViewSchedule.CreateSchedule(doc,newElementId(item.BuiltInCategoryElem),ElementId.InvalidElementId);foreach(SchedulableFieldschedulableFieldinschedule.Definition.GetSchedulableFields()){if(AvailableFieldName.Contains(schedulableField.GetName(doc))){ScheduleFieldfield=schedule.Definition.AddField(schedulableField);//对明细表按照选择的字段进行分组if(schedulableField.GetName(doc)==item.SelectedFieldName&&item.SelectedFieldName!="无"){//添加分组字段,用于将明细表中进行分组//创建分组字段ScheduleSortGroupFieldsortGroupField=newScheduleSortGroupField(field.FieldId);sortGroupField.ShowHeader=true;schedule.Definition.AddSortGroupField(sortGroupField);}}}-67- 5.4明细表导出为Excel文档对弹性支承块式无砟轨道模型项目,在当前视图下运行开发的一键出明细表命令按钮如图5-5所示,会弹出明细表交互界面对话框如图5-6所示,默认状态下对字段全选,分组字段为空。一键出明细表命令自动对所创建的模型进行分类,对于弹性支承块式无砟轨道模型来说,开发的明细表插件按照类别自动分为结构基础、体量和常规模型三类明细表。为了检验一键出明细表的适用性,对构建的小别墅项目在当前视图下出明细表,每类明细表可按照自己的需求来显示字段。因此,一键出明细表命令不仅对弹性支承块式无砟轨道模型适用,对任何Revit模型都适用,实现了插件的通用性。图5-5一键出明细表插件图5-6弹性支承块式无砟轨道模型的明细表交互界面(1)先导出为TXT格式,再用EXCEL软件另存为XLS格式-68- Revit软件不会直接将明细表导出到Excel电子表格,而Revit只能将明细表导出为TXT格式,但是这种TXT文件用EXCEL处理软件打开然后另存为XLS格式即可。在Revit内生成体量明细表,并将其按照标准切换至明细表视图。之后对保存位置进行设置,此时会显示专门的设置对话框,对导出页眉进行调节。另外,在输出选项内不能够出现改动,但是可对字段分隔符和文字限定符进行设置,假如这两项调整为另外的样式,会造成EXCEL处理文件无法进行有效的识别。例如把字段分隔符调整为空格,WPS软件就无法把该TXT明细表识别为XLS电子表格文档。(2)通过插件直接导出Excel格式文档明细表导出为Excel文档,还可以通过外部插件把生成的明细表导出为Excel文档。用插件把明细表生成Excel文档格式的优点是可以一次生成多个明细表,既它可以按照类别生成Excel文档格式的明细表,也可以把所有的明细表形成在一个Excel文档中。使用这种插件能大大简化了工作量,提高了工作效率。在某隧道内DK27+080-DK37+146地段,对弹性支承块式无砟轨道模型使用插件进行工程量统计:多类别工程数量明细表如表5-2所示,钢筋明细表如表5-3所示。表5-2多类别工程数量明细表DK27+080至DK37+146地段多类别工程量类型类型注释数量制造商体积(m3)总体积(m3)成本总成本底座板C30现浇20中铁*局*公司11.502301232460道床板C50现浇20中铁*局*公司6.401281312620支承块对套靴式240中铁*局*公司9021600钢轨60轨20中铁*局*公司2344680扣件弹条VII型240中铁*局*公司5012000表5-3钢筋明细表7200mm道床板钢筋明细表类型数量(根)钢筋直径(mm)单根长度(m)总长度(m)钢筋体积(cm3)总体积(cm3)上层横筋32202.9494.08923.1629541.12上层纵筋10207.1571.502246.2422462.40下层横筋33203.27107.911026.7833883.74下层纵筋16207.15114.402246.2435939.84架立筋120120.4250.4047.475697.21-69- 如果想要从无砟轨道BIM模型中获得某个构件的明细表,需要通过创建明细表、过滤器过滤、明细表属性设置等多个步骤来导出明细表。在视图选项卡下的创建面板中选择明细表下拉按钮,在弹出的新建明细表对话框中选择要创建的明细表。基于Revit软件二次开发的一键出明细表插件,可以通过表格的形式对所有构件进行详细表达。此外,利用Revit软件能够对工程量展开精确的统计,为成本核算提供了极大的便利。5.5本章小结RevitAPI可以拓展Revit的功能,本章探究了通过RevitAPI获取视图中的元素、创建明细表类型、获取分类中字段信息、添加分组字段的程序实现方法;针对弹性支承块式无砟轨道模型,创建了一键出明细表插件,在无砟轨道BIM模型的各种视图下,运行程序即可实现快速导出模型中所有构件的明细表,极大提高了工作效率。利用BIM技术,建立模型,准确定义材料模型和数量信息,就可以导出更精确的工程量。通过定制明细表,可以从所创建的Revit模型,获取项目中所需的信息,并以表格的形式表示。-70- 第六章结论与展望6.1结论现代铁路工程的技术更加复杂、周期短、许多设计人员需要频繁交换信息。建筑信息模型基于多层信息的三维模型,通过模型与设计人员之间的信息交流实现协同设计,能够有效地满足铁路发展的要求,然而,现在比较流行的BIM核心建模软件几乎没有直接针对铁路各个构件的模块,因此,铁路工程的BIM应用存在一定的困难。本文选用Autodesk公司的Revit软件,结合Revit二次开发,针对弹性支承块式无砟轨道,对施工图导出过程中的自动标注问题和工程量统计问题进行研究。主要研究成果如下:(1)对Revit二次开发进行研究,总结出RevitAPI函数二次开发方法和常用技巧。分析了BIM技术在铁路工程中的应用优势,并以Revit作为无砟轨道BIM模型的核心建模软件,总结出二次开发的基本流程。(2)创建适合铁路轨道工程的铁路工程制图标准幅面图纸族,将其与导出的弹性支承块式无砟轨道模型的三视图进行关联研究。通过RevitAPI的外部应用开发方式进行用户界面开发编程研究。(3)研究了弹性支承块式无砟轨道BIM模型在三视图中自动标注的方法。基于Revit软件开发的尺寸标注功能和铁路工程制图标准图纸相结合,可以实现对弹性支承块式无砟轨道BIM模型的施工图出图。具体包括组装图、无砟轨道平纵断面图、无砟轨道横断面图、道床板上层钢筋平面图、道床板下层钢筋平面图、道床板钢筋的不同断面图及部分详图等。(4)研究了弹性支承块式无砟轨道模型快速导出明细表的方法。基于Revit软件开发出了一键出明细表插件,通过定制明细表,可以从所创建的BIM模型中获取项目中所需要的各类信息,极大的提高工作效率。一键出明细表插件不仅对弹性支承块式无砟轨道模型适用,对任何Revit模型都适用,实现了插件的通用性。-71- 6.2展望BIM技术在铁路项目的应用时间较短,对于Revit二次开发的相关资源不多,另外由于笔者水平有限,时间又过于紧促,考虑的内容可能存在一定欠缺,所以,本文的内容尚待更深入的探究,并对其进行完善:(1)应用BIM理念根据相关流程展开设计工作,其关键点是让各专业和软件发挥理想的协同作用,因为笔者知识水平有限,本文仅对弹性支承块式无砟轨道BIM模型展开了分析,而针对怎样实现不同专业设计者在各类软件上设计成果的整合尚待更全面的分析,由于本研究的开发复杂性较低,假如要进行实际应用还有多方面的工作要完成。(2)由于Revit软件中没有适合铁路构件的族样板,笔者只能根据铁路构件的特性,选择适当的族样板创建铁路构件,在一定程度上能够满足功能上的需求,弹性支承块式无砟轨道BIM模型相对比较简单,模型的精细程度还不能满足实际的需求,若要应用到实际的项目中还有待进一步深入研究。(3)BIM软件在当前缺乏完善性,其功能还存在一定的不足。本文研究对弹性支承块式无砟轨道BIM模型实现了施工图出图和工程量统计的二次开发研究,而在其他方面的研究相对较少,因此尚待完善之处。整体而言,BIM如果要应用和大量推广,依然存在明显的距离。在铁路工程实施过程中,BIM技术的应用还存在许多问题,如相关人员概念的转变和相关建模工具的支持。随着科学技术的飞速发展,上述问题一定会得到很好的解决。-72- 参考文献[1]卢祝清.BIM在铁路建设项目中的应用分析[J].铁道标准设计,2011(10):4-7.[2]卢春房.统一思想加强组织扎实推进BIM技术在铁路工程建设中的应用——在BIM技术专题讲座电视电话会议上的讲话(摘要)[J].铁路技术创新,2014(5):6-8.[3]王同军.BIM技术——中国铁路工程建设信息化事业的新篇章[J].铁路技术创新,2014(2):2-3.[4]徐骏,李安洪,刘厚强,叶明珠,张洁茹.BIM在铁路行业的应用及其风险分析[J].铁道工程学报,2014(3):129-133.[5]叶明珠,张洁茹,张毅.BIM在铁路建设行业的应用探讨[J].铁路技术创新,2014(2):46-49.[6]彭兴东.基于BIM技术的桥梁工程建模方法研究[D].石家庄:石家庄铁道大学,2016.[7]PostNM.MarketStudyFindsEngineersGetLowestReturnFromBIM[J].ENR:EngineeringNews-Record,2009:4-11.[8]杜欣.BIM在地铁车站中的应用[J].四川建筑,2015,35(1):241-242.[9]张江波.BIM的应用现状与发展趋势[J].创新科技,2016(1):83-86.[10]ThorstenKoop,ErikEifler,ThomasRath.BIM模型在科隆尼佩斯动车段项目中的运用[J].铁路技术创新,2015(6):96-100.[11]刘杰,马润平,胥润东.BIM技术在摩洛哥布里格里格河谷斜拉桥中的应用[J].铁路技术创新,2014(2):88-92.[12]LiuF.TheApplicationofCATIAAdvancedKnowledgeEngineeringintheBridgeReinforcementModelingbasedonBIM[J].JournalofInformationTechnologyinCivilEngineering&Architecture,2015.[13]ChuangTH,LeeBC,WuIC.ApplyingcloudcomputingtechnologytoBIMvisualizationandmanipulation[C].Proceedingsof28thInternationalSymposiumonAutomationandRoboticsinConstruction.Seoul,2011.144-149.[14]徐峥.KT集团BIM技术应用可行性研究[D].北京:北京建筑大学,2015.[15]李多贵.BIM在地铁工程的应用初探[J].工程质量,2013,31(10):52-54.[16]张江波.BIM的应用现状与发展趋势[J].创新科技,2016(1):83-86.[17]王珺.BIM理念及BIM软件在建设项目中的应用研究[D].成都:西南交通大学,2011.[18]刘延宏.BIM技术在铁路桥梁建设中的应用[J].铁路技术创新,2015(3):47-50.[19]赵晓娜,严心军.BIM技术在某地铁工程的拓展应用[J].建筑技术开发,2015,42(4):20-22.-73- [20]石耀勇,兰婷.浅析BIM技术在铁路建设中的应用[J].铁路工程造价管理,2014,29(3):65-67.[21]苏斌,苏艺,赵雪锋,王磊.BIM在地铁站点工程中的应用探索[J].土木建筑工程信息技术,2013,5(6):95-100.[22]于金勇,林敏.BIM技术在地铁安装工程中的应用[J].土木建筑工程信息技术,2013,5(2):86-91.[23]刘子朋,张晓东,丁义南,武思思,王洋.基于Revit开发创建自定义插件[J].智能建筑与智慧城市,2017(12):73-77+96.[24]艾山丁.BIM技术在轨道工程设计中的应用探讨[J].铁路技术创新,2016(3):62-64+79.[25]BrydeD,BroquetasM,VolmJM.TheprojectbenefitsofBuildingInformationModeling(BIM)[J].InternationalJournalofProjectManagement,2013,31(7):971-980.[26]吴明辉.基于BIM的弹性支承块式无砟轨道三维数字化设计研究[D].石家庄:石家庄铁道大学,2016.[27]苏艺,汪国锋,赵雪锋.BIM技术在某地铁站点建设中的应用研究[J].中国科技信息,2014(10):68-70.[28]刘大园,姚力,庞玲.基于BIM的铁路轨道工程三维数字化设计构想[J].高速铁路技术,2013,4(6):9-13.[29]张艺晶.Revit软件基于项目的二次开发应用研究[D].石家庄:河北科技大学,2015.[30]李妍君.基于Revit的建筑信息模型功能拓展包的设计与实现[D].武汉:华中科技大学,2014.[31]杨新聪.建筑信息模型(BIM)在配筋砌块砌体建筑结构中的应用[D].哈尔滨:哈尔滨工业大学,2014.[32]柳娟花.基于BIM的虚拟施工技术应用研究[D].西安:西安建筑科技大学,2012.[33]O"KeeffeA.TheStateoftheArtofBridgeInformationModellingfromDesignthroughtoOperation[J].InternationalJournalof3-DInformationModeling,2014,3(1):29-39.[34]马弯.基于BIM的铁路中间站设计系统研究[D].成都:西南交通大学,2017.[35]张颉.基于BIM的建筑空间拓扑关系提取及检索方法研究[D].西安:西安建筑科技大学,2015.[36]陈秋竹.桥梁设计阶段的BIM模型建立研究[D].重庆:重庆交通大学,2016.[37]李农,刘玄烨.BIM技术在建筑照明设计中的应用展望[J].照明工程学报,2013,24(5):12-15+63.[38]赵东.重载铁路隧道内弹性支承块式无砟轨道结构参数研究[D].石家庄:石家庄铁道大学,2016.[39]傅萌萌,曾敏,黄卫,刘振标.深茂铁路潭江特大桥BIM设计研究[J].铁路技术创-74- 新,2016(3):58-61.[40]VineetR,JulioC.Martinez.Researchinvisualizationtechniquesforfieldconstruction[J].JournalofConstructionEngineeringandManagement,2011,10:853-862.[41]季景远.利用Revit进行港口工程施工图设计初探[J].科技创新与应用,2014(34):1-3.[42]ChangyoonKim,HyoungkwanKim,etal.Applicabilityof4DCADinCivilEngineeringConstruction:CaseStudyofaCable-StayedBridgeProject[J].JournalofComputinginCivilEngineering,2011,12:98-107.[43]陈厚桥.网络综合布线系统设计流程的分析和探讨[J].计算机时代,2010(11):22-23+29.[44]方超.基于Revit的钢筋混凝土结构信息提取研究[D].西安:西安建筑科技大学,2017.[45]李桐.RevitMEP管道自动标注及优化布置算法的研究[D].西安:西安建筑科技大学,2016.[46]董宇佳.基于BIM建筑模型的元胞自动机疏散仿真的实现[D].沈阳:沈阳航空航天大学,2017.[47]李静,方后春,罗春贺.基于BIM的全过程造价管理研究[J].建筑经济,2012(9):96-100.[48]陆璐,李益惠.浅析BIM技术在现阶段电气设计中的应用[J].智能建筑电气技术,2015,9(1):27-30.[49]王润生,王文略.浅析BIM在建筑设计中的应用[J].青岛理工大学学报,2014,35(1):43-48.[50]王心宇.施工进度仿真及工程量统计分析与实施[D].济南:山东大学,2014.[51]吴东东.基于BIM的绿色建筑分析及碳排放计算的应用研究[D].哈尔滨:哈尔滨工业大学,2015.[52]黄宗贵,张明亮,周瑾,李赛,李鹏慧,阳超.BIM技术在双曲薄壳混凝土屋面施工中的应用[J].土木建筑工程信息技术,2016,8(1):15-21.[53]惠娟利.BIM在地铁建设中的应用分析[J].山西建筑,2014,40(33):287-288.[54]CheungFrancoKT,RihanJonathan,TahJoseph.Earlystagemulti-levelcostestima-tionforschematicBIMmodels[J].AutomationinConstruction,2012(5):67-77.[55]卢恒,王艺博,付鑫,高磊.施工企业BIM技术应用实践[J].施工技术,2014,43(S1):532-534.[56]张丹,陶忠,万夫雄,张磊,吴克川.铝合金模板支撑体系中BIM技术的应用价值[J].四川建筑科学研究,2015,41(4):146-149.[57]韩宇.基于BIM技术的建设项目施工阶段动态资源管理研究[D].兰州:兰州交通大学,2015.[58]佘晶.工程图纸智能化生成技术的研究与实现[D].南京:南京航空航天大学,2005.[59]聂旭涛.基于尺寸对象的智能尺寸标注和明细表处理[D].长沙:中国人民解放军国防科学技术大学,2002.-75- 致谢提笔之间,我在石家庄铁道大学的三年研究生学习和生活即将结束。在此,首先向三年来予以我耐心指导和无私帮助的张晓东老师表示深深的感谢和由衷的敬意!每当我遇到学术上的问题时,张老师都能及时的给我解答和指导,论文的选题、研究、撰写、审阅和修改都倾注了王老师大量的心血,因时间的仓促和作者的水平有限,论文不能令老师十分满意,在此表示歉意。正是张老师循循善诱的指导和孜孜的教诲才使我能够顺利完成论文。张老师渊博的学识、谦和的为人、严谨的学风、务实的作风都令我受益终生。生活上,张老师更是我的人生导师,潜移默化之中教会了我们许多做人做事的道理。再次向敬爱的张老师表示感谢!在论文完成过程中,马超老师给予了诸多指导意见和帮助,在此表示感谢!校外导师郑贺民高级工程师同样给予我非常多的帮助,再此一并表示感谢!感谢我的家人,多年来正是他们给予我关心、鼓励与无私的支持,才使我的学业得以顺利完成。感谢和我一起学习和生活的同门以及我可爱的学弟学妹,很高兴能够在铁大与你们相遇,你们的友谊是我研究生期间的一大收获。感谢你们曾经提供的帮助,以及和我分享一切的忧伤和快乐,你们的友谊让我终生难忘。本论文的写作参考、引用了很多书籍及文献,在此向这些文章的作者表示由衷的谢意。谨以此文献给所有帮助、关心和支持我的人。谨愿师长安康,同窗如意。最后,谨向论文评阅人和各位评委专家表示最衷心的感谢!-76- 附录附录A施工图尺寸自动标注核心代码publicResultExecute(ExternalCommandDatarevit,refstringmessage,ElementSetelements){//获取文档UIDocumentuidco=revit.Application.ActiveUIDocument;Documentdoc=uidco.Document;//点选指定类型的元素//ReferencepickedEleRef=uidco.Selection.PickObject(ObjectType.Element);IListeles=uidco.Selection.PickElementsByRectangle("请选择要标注的族");//通过引用选取到选择元素//Elementelem=doc.GetElement(pickedEleRef.ElementId);//创建事务using(Transactiontran2=newTransaction(doc,"创建尺寸标注")){tran2.Start();foreach(Elementelemineles){BoundingBoxXYZbox=elem.get_BoundingBox(doc.ActiveView);XYZpxmax=box.Max;XYZpxmin=box.Min;//创建尺寸标注CreatDenmention(doc,pxmax,pxmin,true);//横向尺寸CreatDenmention(doc,pxmax,pxmin,false);//竖向尺寸}tran2.Commit();}returnResult.Succeeded;}//////平面-方法创建尺寸线(横标注和竖标注)///////////////控制是横标注还是竖标注publicvoidCreatDenmention(Documentdoc,XYZpoint1,XYZpoint2,boolkaiGuan){XYZpxmax=point1;XYZpxmin=point2;-77- Linelineyou=null;Linelinezuo=null;Linelinebiaoheng=null;//则在平面图中创建尺寸线if(doc.ActiveView.ViewDirection.Z==1||doc.ActiveView.ViewDirection.Z==-1){if(kaiGuan)//如果kaiGuan==true,则创建横标注,否则创建竖标注{//横标注右侧尺寸截止线lineyou=Line.CreateBound(newXYZ(pxmax.X,pxmax.Y,0),newXYZ(pxmax.X,pxmax.Y-1,0));//横标注左侧尺寸截止线linezuo=Line.CreateBound(newXYZ(pxmin.X,pxmax.Y,0),newXYZ(pxmin.X,pxmax.Y-1,0));//横标注横尺寸线linebiaoheng=Line.CreateBound(newXYZ(pxmin.X,pxmax.Y+1,0),newXYZ(pxmax.X,pxmax.Y+1,0));}else{//竖标注上侧尺寸截止线lineyou=Line.CreateBound(newXYZ(pxmax.X,pxmax.Y,0),newXYZ(pxmax.X+1,pxmax.Y,0));//上标线//竖标注下侧尺寸截止线linezuo=Line.CreateBound(newXYZ(pxmin.X,pxmin.Y,0),newXYZ(pxmin.X+1,pxmin.Y,0));//下标线//竖标注尺寸线linebiaoheng=Line.CreateBound(newXYZ(pxmax.X+1,pxmin.Y,0),newXYZ(pxmax.X+1,pxmax.Y,0));//尺寸线}}//在南、北平面图中创建尺寸线if(doc.ActiveView.ViewDirection.Y==1||doc.ActiveView.ViewDirection.Y==-1){if(kaiGuan)//如果kaiGuan==true,则创建横标注,否则创建竖标注{//横标注右侧尺寸截止线lineyou=Line.CreateBound(newXYZ(pxmax.X,0,pxmax.Z),newXYZ(pxmax.X,0,pxmax.Z-1));//横标注左侧尺寸截止线linezuo=Line.CreateBound(newXYZ(pxmin.X,0,pxmax.Z),newXYZ(pxmin.X,0,pxmax.Z-1));//横标注横尺寸线linebiaoheng=Line.CreateBound(newXYZ(pxmin.X,0,pxmax.Z+1),newXYZ(pxmax.X,0,pxmax.Z+1));}else{//竖标注上侧尺寸截止线lineyou=Line.CreateBound(newXYZ(pxmax.X,0,pxmax.Z),newXYZ(pxmax.X+1,0,pxmax.Z));//上标线//竖标注下侧尺寸截止线-78- linezuo=Line.CreateBound(newXYZ(pxmin.X,0,pxmin.Z),newXYZ(pxmin.X+1,0,pxmin.Z));//下标线//竖标注尺寸线linebiaoheng=Line.CreateBound(newXYZ(pxmax.X+1,0,pxmin.Z),newXYZ(pxmax.X+1,0,pxmax.Z));//尺寸线}}//在东、西平面图中创建尺寸线if(doc.ActiveView.ViewDirection.X==1||doc.ActiveView.ViewDirection.X==-1){if(kaiGuan)//如果kaiGuan==true,则创建横标注,否则创建竖标注{//横标注右侧尺寸截止线lineyou=Line.CreateBound(newXYZ(0,pxmax.Y,pxmax.Z),newXYZ(0,pxmax.Y-1,pxmax.Z));//横标注左侧尺寸截止线linezuo=Line.CreateBound(newXYZ(0,pxmax.Y,pxmin.Z),newXYZ(0,pxmax.Y-1,pxmin.Z));//横标注横尺寸线linebiaoheng=Line.CreateBound(newXYZ(0,pxmax.Y+1,pxmin.Z),newXYZ(0,pxmax.Y+1,pxmax.Z));}else{//竖标注上侧尺寸截止线lineyou=Line.CreateBound(newXYZ(0,pxmax.Y,pxmax.Z),newXYZ(0,pxmax.Y,pxmax.Z+1));//上标线//竖标注下侧尺寸截止线linezuo=Line.CreateBound(newXYZ(0,pxmin.Y,pxmin.Z),newXYZ(0,pxmin.Y,pxmin.Z+1));//下标线//竖标注尺寸线linebiaoheng=Line.CreateBound(newXYZ(0,pxmin.Y,pxmax.Z+1),newXYZ(0,pxmax.Y,pxmax.Z+1));//尺寸线}}DetailCurvedCurve1=null;DetailCurvedCurve2=null;ReferenceArrayrarr=newReferenceArray();if(!doc.IsFamilyDocument){//把线转换成细节线dCurve1=doc.Create.NewDetailCurve(doc.ActiveView,lineyou);dCurve2=doc.Create.NewDetailCurve(doc.ActiveView,linezuo);rarr.Append(dCurve1.GeometryCurve.Reference);rarr.Append(dCurve2.GeometryCurve.Reference);//创建标注doc.Create.NewDimension(doc.ActiveView,linebiaoheng,rarr);}}-79- 附录B铁路工程制图标准图纸界面设置核心代码publicResultExecute(ExternalCommandDatarevit,refstringmessage,ElementSetelements){UIDocumentuidco=revit.Application.ActiveUIDocument;Documentdoc=uidco.Document;FilteredElementCollectorbartypes=newFilteredElementCollector(doc).OfClass(typeof(FamilyInstance));FamilyInstancefs=null;foreach(FamilyInstanceeleinbartypes){if(ele.Name=="铁路工程制图标准A0公制"||ele.Name=="铁路工程制图标准A1公制"||ele.Name=="铁路工程制图标准A2公制"||ele.Name=="铁路工程制图标准A3公制"||ele.Name=="铁路工程制图标准A4公制"){//TaskDialog.Show("nihao",ele.OwnerViewId.IntegerValue.ToString());//TaskDialog.Show("nihao",doc.ActiveView.Id.ToString());if(ele.OwnerViewId.IntegerValue.ToString()==doc.ActiveView.Id.ToString()){fs=ele;}}}//收集名称Liststs=newList();stringsJst=fs.LookupParameter("设计者").AsString();sts.Add(sJst);ParametersJ=fs.LookupParameter("设计者");stringhTst=fs.LookupParameter("绘图员").AsString();sts.Add(hTst);ParameterhT=fs.LookupParameter("绘图员");stringyZst=fs.LookupParameter("院总工程师").AsString();sts.Add(yZst);ParameteryZ=fs.LookupParameter("院总工程师");stringsTst=fs.LookupParameter("审核者").AsString();sts.Add(sTst);ParametersT=fs.LookupParameter("审核者");stringtHst=fs.LookupParameter("图号").AsString();sts.Add(tHst);ParametertH=fs.LookupParameter("图号");stringbLst=fs.LookupParameter("比例").AsString();sts.Add(bLst);ParameterbL=fs.LookupParameter("比例");stringrQst=fs.LookupParameter("日期").AsString();-80- sts.Add(rQst);ParameterrQ=fs.LookupParameter("日期");stringdWst=fs.LookupParameter("设计单位名称").AsString();sts.Add(dWst);ParameterdW=fs.LookupParameter("设计单位名称");stringgCst=fs.LookupParameter("工程名称").AsString();sts.Add(gCst);ParametergC=fs.LookupParameter("工程名称");stringtMst=fs.LookupParameter("图名").AsString();sts.Add(tMst);ParametertM=fs.LookupParameter("图名");stringjZst=fs.LookupParameter("第几张").AsString();sts.Add(jZst);ParameterjZ=fs.LookupParameter("第几张");stringgJst=fs.LookupParameter("共几张").AsString();sts.Add(gJst);ParametergJ=fs.LookupParameter("共几张");stringsMst=fs.LookupParameter("说明").AsString();sts.Add(sMst);ParametersM=fs.LookupParameter("说明");Form3f3=newForm3(sts);f3.ShowDialog();using(Transactiontran=newTransaction(doc,"设置参数")){tran.Start();sJ.Set(f3.textBox4.Text);hT.Set(f3.textBox5.Text);yZ.Set(f3.textBox7.Text);sT.Set(f3.textBox6.Text);tH.Set(f3.textBox8.Text);bL.Set(f3.textBox10.Text);rQ.Set(f3.textBox11.Text);dW.Set(f3.textBox2.Text);gC.Set(f3.textBox1.Text);tM.Set(f3.textBox3.Text);jZ.Set(f3.textBox12.Text);gJ.Set(f3.textBox9.Text);sM.Set(f3.textBox13.Text);tran.Commit();}-81- //ExportDWG(doc,doc.ActiveView,"J0-11");returnResult.Succeeded;}publicboolExportDWG(Documentdocument,Viewview,stringsetupName){boolexported=false;//获取预定义的设置并使用给定名称的设置.IListsetupNames=BaseExportOptions.GetPredefinedSetupNames(document);foreach(stringnameinsetupNames){if(name.CompareTo(setupName)==0){//使用预定义选项导出DWGExportOptionsdwgOptions=DWGExportOptions.GetPredefinedOptions(document,name);//导出活动视图ICollectionviews=newList();views.Add(view.Id);//该文件已被保存了,因此有一个有效的路径名.exported=document.Export(Path.GetDirectoryName(document.PathName),Path.GetFileNameWithoutExtension(document.PathName),views,dwgOptions);TaskDialog.Show("nn",document.PathName);break;}}returnexported;}}附录C一键出明细表核心代码Documentdoc=null;publicResultExecute(ExternalCommandDatacommandData,refstringmessage,ElementSetelements){doc=commandData.Application.ActiveUIDocument.Document;//创建事务用于创建明细表Transactiontran=newTransaction(doc,"CreateViewSchedule");tran.Start();try{/**第一条:如何才能获取当前视图中全部的元素包含系统族实例与外部导入族实例*///构造过滤器收集视图中的全部元素//过滤外部导入族的实例ElementClassFilterinstanceFitler=newElementClassFilter(typeof(FamilyInstance));//过滤系统族实例ElementClassFilterhostFilter=newElementClassFilter(typeof(HostObject));LogicalOrFilterandFilter=newLogicalOrFilter(instanceFitler,hostFilter);-82- FilteredElementCollectorcollector=newFilteredElementCollector(doc,doc.ActiveView.Id);collector.WherePasses(andFilter);IListelems=collector.ToElements();ListcurrentBuiltInCategorys=newList();ObservableCollectioncategoryModels=newObservableCollection();foreach(variteminelems){if(item.Category!=null){/**第二条:获取全部元素的可用于创建明细表的类型Category并去掉重复的类型*///获取收集的元素包含的分类并获取分类中的所有字段信息BuiltInCategorybuiltInCategory=(BuiltInCategory)item.Category.Id.IntegerValue;if(!currentBuiltInCategorys.Contains(builtInCategory)&&ViewSchedule.IsValidCategoryForSchedule(item.Category.Id)){CategoryModelcategoryModel=newCategoryModel();categoryModel.BuiltInCategoryElem=builtInCategory;categoryModel.Name=item.Category.Name;currentBuiltInCategorys.Add(builtInCategory);/**第三条:如何获取分类在创建明细表中可以使用的字段*/ViewScheduleschedule=ViewSchedule.CreateSchedule(doc,newElementId(builtInCategory),ElementId.InvalidElementId);ListFieldNames=newList();//获取分类中所有的字段信息foreach(SchedulableFieldschedulableFieldinschedule.Definition.GetSchedulableFields()){SchedulableFieldModelschedulableFieldModel=newSchedulableFieldModel();schedulableFieldModel.Name=schedulableField.GetName(doc);if(!FieldNames.Contains(schedulableFieldModel.Name)){FieldNames.Add(schedulableFieldModel.Name);categoryModel.SchedulableFieldModels.Add(schedulableFieldModel);}}categoryModels.Add(categoryModel);}}}/**第四条:此处需要特别注意:需要将事物撤销,否则将生成多余的明细表(因为上面为了获取字段进行了明细表创建api的调用)*///撤销事物取消明细表的创建tran.RollBack();tran.Start();frmViewScheduleManagerviewScheduleManager=newfrmViewScheduleManager();frmViewScheduleManagerViewModelfrmViewScheduleManagerVM=newfrmViewScheduleManagerViewModel(viewScheduleManager);-83- frmViewScheduleManagerVM.CategoryModels=categoryModels;if(categoryModels.Count>0){frmViewScheduleManagerVM.SelectedCategoryModel=categoryModels[0];}viewScheduleManager.DataContext=frmViewScheduleManagerVM;if(viewScheduleManager.ShowDialog()==true){//intindex=1;foreach(variteminfrmViewScheduleManagerVM.CategoryModels){/**第五条:获取界面中勾选的字段用于下面的创建明细表时字段的过滤*/ListAvailableFieldName=newList();foreach(varfieldinitem.SchedulableFieldModels){if(field.IsAvailable){//获取全部需要在明细表中列出的字段AvailableFieldName.Add(field.Name);}}//创建明细表ViewScheduleschedule=ViewSchedule.CreateSchedule(doc,newElementId(item.BuiltInCategoryElem),ElementId.InvalidElementId);//index++;foreach(SchedulableFieldschedulableFieldinschedule.Definition.GetSchedulableFields()){if(AvailableFieldName.Contains(schedulableField.GetName(doc))){ScheduleFieldfield=schedule.Definition.AddField(schedulableField);//对明细表按照选择的字段进行分组if(schedulableField.GetName(doc)==item.SelectedFieldName&&item.SelectedFieldName!="无"){/**第六条:添加分组字段,用于将明细表中进行分组*///创建分组字段ScheduleSortGroupFieldsortGroupField=newScheduleSortGroupField(field.FieldId);sortGroupField.ShowHeader=true;schedule.Definition.AddSortGroupField(sortGroupField);}}}}}}catch(Exceptionex){MessageBox.Show(ex.Message,"提示");if(tran.GetStatus()==TransactionStatus.Started){tran.RollBack();}}finally{if(tran.GetStatus()==TransactionStatus.Started){//提交事务完成明细表的创建tran.Commit();}}returnResult.Succeeded;}-84- 个人简历、在学期间的研究成果及发表的学术论文个人简历刘子朋,男,1990年11月生,2015年6月毕业于河海大学文天学院交通工程专业,获工学学士学位;2015年9月考入石家庄铁道大学交通运输学院攻读交通运输工程专业硕士学位,2016年获得三等学业奖学金。已发表的学术论文[1]刘子朋,张晓东,丁义南,武思思,王洋.基于Revit开发创建自定义插件[J].智能建筑与智慧城市,2017(12):73-77+96.-85-