[发明专利]一种基于Revit智能创建楼梯的方法有效
申请号: | 202011237209.1 | 申请日: | 2020-11-09 |
公开(公告)号: | CN112329109B | 公开(公告)日: | 2022-05-27 |
发明(设计)人: | 巩文学;于海涛 | 申请(专利权)人: | 建图智能科技有限公司 |
主分类号: | G06F30/13 | 分类号: | G06F30/13;G06F30/20 |
代理公司: | 济南泉城专利商标事务所 37218 | 代理人: | 李桂存 |
地址: | 250001 山东省济南*** | 国省代码: | 山东;37 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 revit 智能 创建 楼梯 方法 | ||
1.一种基于Revit智能创建楼梯的方法,其特征在于,包括步骤:
1) 调用Autodesk.Revit.UI.IexternalEventHandler接口,对外部事件调用进行注册,使用委托进行调用执行;
2) 创建绘制楼梯间边界WPF窗体,传参,提供revit文档、委托;
3) 给步骤2)中窗体添加 Button 控件,至少包括“绘制”、“完成”控件,并分别添加鼠标点击事件;
其中,“绘制”点击事件包括步骤:
调用Autodesk.Revit.UI.Application中的PostCommand方法,设置revit内部创建命令,使用RevitCommandId.LookupPostableCommandId设置类型为DetailLine详图线类别;
“完成”点击事件包括步骤:
a. 获取用户绘制的楼梯间边界线组;
b. 使用Doc.ActiveView.GenLevel获取当前用户程序运行平面标高,使用GetTopLevel获取当前标高的上一标高,通过Elevation计算出两标高之间的净高值;
c. 根据步骤a中获取的楼梯间边界线组,判断楼梯类型:
c-1.使用OrderBy将线组按照长度按照升序进行排序,获取到排序集合后的First元素和Last元素;
c-2. 获取步骤c-1中获取到的长度最小的线和最大的线,按照长度最大值以及长度最小值,分为两组;
c-3. 使用线的Direction属性获取步骤c-2中最长线组的线的向量,判断线向量是否为竖向方向;
c-4. 根据步骤c-3中判断结果,使用OrderBy对最大线组每个线的中点按照Y值升序排序,使用OrderBy对最小线组每个线的中点按照X值升序排序;
c-5. 根据步骤c-4中重新排序好的线组,定义长度最大线组中最后一个线为顶部线,长度最大线组中第一个线为底部线,长度最小线组中最后一个线为右侧线,长度最小线组中第一个线为左侧线,设定左侧线为平台线;
c-6. 调用TaskDialog添加AddCommandLink属性,设置用户选择休息平台位置按钮左或右,判断用户点击是左或右:
c-7. 如果选择是左,获取步骤c-5中的左侧线,根据GetEndPoint获取线的起点和终点集合,并使用OrderBy对端点坐标的Y值进行排序;调用TaskDialog添加AddCommandLink属性,设置用户选择踏步开始位置按钮;使用Evaluate方法获取步骤c-5中左侧线的中点,以及右侧线的中点,根据两中点使用Line.CreateBound方法创建线并使用Direction属性,获取左边线的向量;设置步骤c-5中的右侧线为平行于平台的线;
选择是右同理;
d. 设置标准梯面高度值为H,设置踏步数为S,通过净高/S得到踢面高度值,设置标准踏步深度为D,设置楼梯间梯井宽度为W,根据步骤c-5中获取的平台线长度L,(L-W)/2得到梯段宽度;
e. 根据步骤d中获取的梯段宽度、标准踏步深度、踢面高度值创建楼梯类型,具体如下:
e-1. 使用FilteredElementCollector过滤器添加BuiltInCategory.OST_Stairs以及typeof(StairsType)获取得到当前项目中的所有已有楼梯类型,并使用Where条件根据特定名称“现场浇注楼梯”,获取到“现场浇注楼梯”楼梯类型;
e-2. 使用FilteredElementCollector过滤器添加BuiltInCategory. OST_StairsRuns以及typeof(StairsRunType)获取得到当前项目中的所有已有梯段类型,并使用Where条件根据名称“整体梯段”,获取到“整体梯段”梯段类型;
e-3. 使用FilteredElementCollector过滤器添加BuiltInCategory. OST_StairsLandings以及typeof(StairsLandingType)获取得到当前项目中的所有已有休息平台类型,并使用Where条件根据“300 mm 厚度”,获取到“300 mm 厚度”休息平台类型;
e-4. 为楼梯类型设置属性参数:使用MaxRiserHeight属性设置最大踢面高度,使用MinRunWidth属性设置最小踏板深度,使用MinTreadDepth属性设置最小梯段宽度,使用RunType属性设置为步骤e-2中的梯段类型,使用LandingType属性设置为步骤e-3中的休息平台类型;
f. 根据步骤c-5中获取的平台线使用GetEndPoint方法获取线段的起终点,并使用步骤c-7中获取的与平台线平行的线根据Direction属性获取到向量,将起终点按照向量分别移动半个梯段宽度,得到两个基准点;
g. 计算由平台线到层间平台的距离:平台线长度+(踏步数S-1)*踏步深度D
h. 计算路径线:由步骤f中获取的两个基准点,再根据步骤c-7中获取的平行于平台的线的垂直向量,两基准点分别移动平台线到层间平台的距离,得到路径1的起点和终点,调用Line.CreateBound方法创建路径线1,路径线2的创建同路径线1计算方式;
i. 计算休息平台轮廓线:使用GetEndPoint获取步骤c-5中的平台线的起终点,并根据Direction属性获取到c-6中平行于平台的线的向量,将起终点按照向量分别移动一个梯段的宽度,得到另外两个基准点P、Q;
根据四个点:平台线起点、终点、基准点P、Q,将四个参照点使用Append属性收集进CurveLoop集合;
j. 计算层间平台轮廓线,计算方法与步骤i相同;
k. 创建楼梯:
k-1. 调用StairsEditScope开始创建楼梯事务,并根据当前标高和顶部标高调用Start方法创建楼梯;
k-2. 调用BuiltInParameter.ELEM_FAMILY_PARAM设置楼梯类型;
k-3. 调用BuiltInParameter.STAIRS_DESIRED_NUMBER_OF_RISERS设置楼梯踏步数S;
k-4. 调用StairsRun.CreateStraightRun方法,根据步骤h中获取的路径线,设置StairsRunJustification参数,创建出两个楼梯梯段;
k-5. 调用 StairsLanding.CreateSketchedLanding方法,根据步骤i和步骤j中获取的轮廓线,以及使用Elevation属性获取到当前层高值以及半层高值;
k-6. 最终使用Commit完成提交楼梯样式修改创建。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于建图智能科技有限公司,未经建图智能科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011237209.1/1.html,转载请声明来源钻瓜专利网。