导图社区 一种楼层框架梁端支座钢筋的智能化快速施工方法(说明书、权利要求书)第二版
描述了再Revit环境下,如何利用dynamo实现一键创建实体钢筋,并详细描述了实现的软件过程,以及计算原理,将代码和数学原理,进行了描述。
编辑于2023-03-14 17:41:19 江西一种楼层框架梁端支座钢筋的智能化快速施工方法
说明书摘要
一种楼层框架梁端支座钢筋的智能化快速施工方法,主要包括求得梁端支座钢筋定位线,求出梁端支座钢筋的延伸长度,梁端支座钢筋的弯钩判断等多个步骤。利用计算机编程语句实现了梁端支座钢筋的准确定位、端支座筋在不同支座情况的准确延伸和锚固、端支座钢筋在不同支座情况的弯钩形式以及批量快速的生成。本发明主要是使用目前主流的BIM软件平台Revit软件的应用程序编程接口中的相关函数实现的,具体例子为在Dynamo环境下使用DesignScript语言进行实例展示,形成正确的模型结果。然后将最终成果的模型进行拆分和编号,提取工程量,生成相应的钢筋下料图纸,和施工工序,根据下料图纸加工或准备构件,然后在现场进行施工安装,最终组成目标实体。可广泛用于各类建模工作,也可以利用本发明进行编写各类语言的BIM插件,进而有效提高建模速度和施工速度。
说明书
技术领域
[0001]本发明涉及一种建筑施工技术领域,特别是一种基于BIM技术对国家建筑标准设计图集16G101-1混凝土结构施工图平面整体表示方法制图规则和构造详图中楼层框架梁的端支座筋进行快速建模施工的方法。
背景技术
[0002]建筑信息模型(Building Information Modeling)是以建筑工程项目的各项相关信息数据作为模型的基础,进行建筑模型的建立,通过数字信息仿真模拟建筑物所具有的真是信息。它具有可视化,协调性,模拟性,优化性和可出图性五大特点。
[0003]
BIM的建模技术是BIM技术应用的基础,正是因为有建模过程才能完成后面的一系列BIM功能。因此BIM建模的效率以及精度一直是现场施工中对应用BIM技术的一个主要要求。例如Autodesk公司的Revit系列软件,虽然软件本身有强大的建模能力,但是就和施工现场结合的效率而言还需要改进,特别是钢筋建模,水平矩形楼层框架梁是一种最常见的建筑梁构件,水平矩形楼层框架梁端支座钢筋的设计及施工规则要求多且复杂,目前还没有能够进行水平矩形楼层框架梁端支座钢筋智能自动建立模型的软件,人工建立端支座钢筋模型需要独立操作和布置,耗费大量的人力物力和时间,且错误率高。
发明内容
[0004]
本发明的目的是提供一种楼层框架梁的端支座钢筋的智能化快速施工方法,要解决现有BIM技术和施工结合中,效率低下费时费工的技术问题。
[0005]
为实现上述目的,本发明采用如下技术方案:一种楼层框架梁端支座钢筋的智能化快速施工方法,施工步骤如下:
步骤一:在已经建立好的结构BIM模型中选中要进行钢筋建模的水平直线矩形的楼层框架梁。
步骤二:找到一根梁所有的横截面并且是有序的
1. 求得梁所有的表面
2. 求得表面所在的平面
3. 求得平面的法向量
4. 求得梁所在的直线
5. 利用直线的起点和终点求得直线的方向向量
6. 求得法向量和方向向量是否平行的bool值
7. 筛选出bool值为true的梁的表面
8. 求得筛序出来的面和梁所在直线起点的距离
9. 将这些距离按照从小到大将索引排序
10. 按照排序好的索引将筛选出来的梁截面排序
步骤三:将求得有序的梁横截面转换为梁的定位点
1. 为保证一定能相交将步骤一中梁所在的直线进行延长1000mm
2. 求得筛选出来的梁横截面与梁中心线的交点
步骤四:求得梁跨的定位线
1. 将步骤三中已经排序好的梁的定位点的第一个点和第二个点连接,第三个点和第四个连接,以此类推所得到的线就是梁跨的定位线。
2. 将多维点列表转为一维点列表
3. 将点的一维列表转换为二维列表,子列表长度都是为2
4. 将二维列表转置
5. 提取二维列表的第一列为梁跨定位线的起点
6. 提取二位列表的第二列为梁跨定位线的终点
7. 将起点终点连城线为梁跨的定位线
步骤五:在所有柱子中筛选出所有梁跨起点的柱子
1. 筛选出文档中所有的柱子
2. 求得所有柱子的碰撞框
3. 将步骤四种求得梁跨的定位线的起点
4. 将柱子的碰撞框和梁跨终点进行碰撞的bool运算
5. 筛选出柱子构件中bool值为true的项
步骤六:筛选出步骤五中柱子表面中与梁方向向量垂直的表面
1. 1、求得步骤五中柱子所有的表面
2. 2、求得表面所在平面
3. 3、求得平面的法向量
4. 4、将法向量与上述求得的梁的方向向量进行是否平行的bool运算
5. 5、筛选出表面中bool值为true的表面
步骤七:在所有柱子中筛选出所有梁跨终点的柱子
1. 筛选出文档中所有的柱子
2. 求得所有柱子的碰撞框
3. 将步骤四种求得梁跨的定位线的终点
4. 将柱子的碰撞框和梁跨终点进行碰撞的bool运算
5. 筛选出柱子构件中bool值为true的项
步骤八:筛选出步骤七中柱子表面中与梁方向向量垂直的表面
1. 求得步骤七中柱子所有的表面
2. 求得表面所在平面
3. 求得平面的法向量
4. 将法向量与上述求得的梁的方向向量进行是否平行的bool运算
5. 筛选出表面中bool值为true的表面
步骤九:求出端支座筋的定位线
1. 提取步骤八表面的最后一项加到步骤六表面的最后一项。(或者提取步骤六表面第一项加到步骤八表面的第一项)。
2. 将步骤二中求得梁所在的直线首尾各延长1000mm和步骤九中第一步的表面相交得出定位点,因为步骤九中第一步的表面数据结构就是按照支座来分的,我们得到的点也是一个支座一组,支座为空的,点也是空。
3. 将每组里面的两个点连成支座钢筋定位线
步骤十:求出端支座的最大净跨长
1. 求得步骤四中梁跨定位线的长度
2. 将数据按照梁跨数(步骤一中子列表的数据个数)进行分组变成二位列表
3. 在这组数据的首项加一个0变成列表A
4. 在这组数据的尾项加一个0变成列表B
5. 将列表A和列表B进行比较,如果列表A的元素等于0说明是端支座它在起始端的延伸的最大净长还是为0,如果列表A的元素不为0,取其与列表B比较的较大值,组成新的列表A1,为端支座的钢筋的起点延伸净长。
6. 将列表B和列表A进行比较,如果列表B的元素等于0说明是端支座它在起始端的延伸的最大净长还是为0,如果列表B的元素不为0,取其与列表A比较的较大值,组成新的列表B1,为端支座的钢筋的起点延伸净长。
步骤十一:将最大净跨转换为延伸长度
1. 步骤十中的数据为0时说明时位端支座,应当缩进保护层厚度,并留下保护层厚度的数据接口。
2. 其余的应除以4
步骤十二:将端支座筋线条,进行首尾延伸
1. 将步骤九中的端支座定位线的起点按照步骤十一中求出的步骤八中A1的对应数据进行延伸
2. 将步骤九中的端支座定位线的终点按照步骤十一中求出的步骤八中A1的对应数据进行延伸
步骤十三:将一个线条根据用户输入的根数进行等分,形成多根线条
1. 将步骤十二中的端支座筋线条的数据里面的空值清除
2. 求出这些线条的方向向量
3. 求出与这些向量垂直的水平向量V1
4. 将线条分沿着V1方向偏移梁宽的一半减去保护层厚度,将线条沿着V1的反方向偏移梁宽减去两倍的保护层厚度。
5. 然后根据用户输入的根数进行等分
步骤十四:端支座的起点终点弯钩处理
1. 起点端支座弯钩
2. 根据步骤十一中端支座钢筋线条,如果数据的索引为0则输出“标准-90 度”字符串,否则则输出“标准-0 度”字符串。形成列表A
3. 根据步骤十一中端支座钢筋线条,在钢筋线条列表为空的索引相对应的列表A中也替换为空。形成列表B
4. 将列表B中的空值清除
5. 根据列表B中的字符串形成对应的钢筋弯钩的型号,当然这需要在Revit中设定好。
6. 将钢筋弯钩型号的数据格式排列成钢筋曲线的数据结构
7. 端支座的终点弯钩处理同起点只需将索引为0改为索引为最后
步骤十五:形成钢筋模型
1. 求出所选梁构件的ElementID
2. 求出步骤十三中钢筋曲线所在水平面的法向量
3. 根据步骤十四中得到的弯钩型号,步骤十三中得到的钢筋曲线以及用户输入的端支座钢筋根数和直径利用Rebar.ByCurve节点形成钢筋
步骤十六:对步骤十五中的最终成果的模型进行拆分和编号,提取工程量,生成相应的钢筋下料图纸,和施工工序,根据下料图纸加工或准备构件,然后在现场进行施工安装,最终组成目标实体。
[0006]
所述步骤二中的梁是楼层框架梁且是水平直线矩形梁。
[0007]
所述步骤十五中的钢筋模型是利用Autodesk公司发布的BIM建模平台Revit软件进行建造的模型。
[0008]
所述步骤中的计算依据是依据国家建筑标准设计图集16G101-1混凝土结构施工图平面整体表示方法制图规则和构造详图中第84页楼层框架梁KL纵向钢筋构造中的端支座钢筋。
[0009]
所述步骤二中直线的延伸长度1000mm对于一般工程已经够用,如果不够,可适当延长,或者根据工程实际情况求出最大柱子的宽度。
[0010]
上述的方法可以通过计算机编程语言实现,下面通过Dynamo的环境下使用DesignScript语言进行实例说明。
[0011]
步骤一:在已经建立好的结构BIM模型中选中要进行钢筋建模的水平直线矩形的楼层框架梁。
[0012]
步骤二:找到一根梁所有的横截面并且是有序的
1. 求得梁所有的表面
2. 求得表面所在的平面
3. 求得平面的法向量
4. 求得梁所在的直线
5. 利用直线的起点和终点求得直线的方向向量
6. 求得法向量和方向向量是否平行的bool值
7. 筛选出bool值为true的梁的表面
8. 求得筛序出来的面和梁所在直线起点的距离
9. 将这些距离按照从小到大将索引排序
10. 按照排序好的索引将筛选出来的梁截面排序
步骤二的DesignScript语言的实现方法
t1; lista=t1.Faces; listb=Plane.ByBestFitThroughPoints(lista.Vertices.PointGeometry); vector1=listb.Normal; line1= t1.GetLocation(); point2 = line1.EndPoint; point1 = line1.StartPoint; vector2 = Vector.ByTwoPoints(point1, point2); listc = vector1<1L>.IsParallel(vector2<1L>); listd = List.FilterByBoolMask(lista, listc); liste = __TryGetValueFromNestedDictionaries(listd, "in"); listf = point1.DistanceTo(liste); listg = SortIndexByValue(listf); surfaces = Reorder(liste, listg);
说明
1. 其中t1是选中的一根或多跟梁
2. 其中surfaces是步骤二所求出的横截面
[0014]
步骤三:将求得有序的梁横截面转换为梁的定位点
1. 为保证一定能相交将步骤一中梁所在的直线进行延长1000mm
2. 求得筛选出来的梁横截面与梁中心线的交点
步骤三的DesignScript语言的实现方法
elements; line1 = elements.GetLocation(); curve1 = line1.ExtendEnd(500); curve2 = curve1.ExtendEnd(500); points = surfaces.Intersect(curve2);
说明
1. 其中elements是选中的一根或多跟梁
2. 其中surfaces是步骤二所述的横截面
3. 其中points是步骤三所述的定位点
[0015]
步骤四:求得梁跨的定位线
1. 将步骤三中已经排序好的梁的定位点的第一个点和第二个点连接,第三个点和第四个连接,以此类推所得到的线就是梁跨的定位线。
2. 将多维点列表转为一维点列表
3. 将点的一维列表转换为二维列表,子列表长度都是为2
4. 将二维列表转置
5. 提取二维列表的第一列为梁跨定位线的起点
6. 提取二位列表的第二列为梁跨定位线的终点
7. 将起点终点连城线为梁跨的定位线
步骤四的DesignScript语言的实现方法
t4 = Flatten(t5@-3<1>); t6 = List.Chop(t4@-2<1>, 2); t7 = Flatten(t6@-2<1>); t8 = List.Transpose(t7); x = t8; line1 = Line.ByStartPointEndPoint(x[0], x[1]);
说明
1. 其中t5是步骤三所述的定位点
2. 其中line1是步骤四所述的定位线
[0016]
步骤五:在所有柱子中筛选出所有梁跨起点的柱子
1. 筛选出文档中所有的柱子
2. 求得所有柱子的碰撞框
3. 将步骤四种求得梁跨的定位线的起点
4. 将柱子的碰撞框和梁跨终点进行碰撞的bool运算
5. 筛选出柱子构件中bool值为true的项
步骤五的DesignScript语言的实现方法
BBox1 = t.BoundingBox; t1 = BBox1<1>.Contains(x[0]<2>); t4 = List.Chop(List.Transpose(t1),t2); t5 = List.Transpose(t4@-3<1>); vector = Vector.ByTwoPoints(x[0], x[1]); lista=[Imperative] { t6={}; for (i in 0..List.Count(t4)-1) { for (j in 0..List.Count(t4[i])-1) { for(k in 0..List.Count(t4[i][j])-1) { t6[i][j][k]=ToString(t4[i][j][k]); } } } return=t6; }; t7 = List.AllIndicesOf(lista@@-2<1>, "true"); t8 = List.GetItemAtIndex(t, t7);
说明
1. 其中t模型中所有的柱子
2. 其中x是步骤四所述的x
3. 其中t8是步骤五所筛选出的柱子
[0017]
步骤六:筛选出步骤五中柱子表面中与梁方向向量垂直的表面
求得步骤五中柱子所有的表面
求得表面所在平面
求得平面的法向量
将法向量与上述求得的梁的方向向量进行是否平行的bool运算
筛选出表面中bool值为true的表面
步骤六的DesignScript语言的实现方法
a=List.Count(ele)-1; vector; geometry=[Imperative] { x=0..a; bool1={}; for (i in x) { b=List.Count(ele[i])-1; y=0..b; for (j in y) { bool1[i][j]=ele[i][j][0].Faces; } } return=bool1; }; plane=Plane.ByBestFitThroughPoints(geometry.Vertices.PointGeometry); normal=plane.Normal; bool1=Vector.IsParallel(vector,normal); bools=Manage.ReplaceNulls(bool1@@-2<1>, true); t3 = List.FilterByBoolMask(geometry, bools); t4 = __TryGetValueFromNestedDictionaries(t3, "in");
说明
1. 其中ele是步骤五所筛选出的柱子
2. 其中vector是步骤二中的vector2
3. 其中t4是步骤六所述的与梁方向向量垂直的柱子的表面
[0018]
步骤七:在所有柱子中筛选出所有梁跨终点的柱子
1. 筛选出文档中所有的柱子
2. 求得所有柱子的碰撞框
3. 将步骤四种求得梁跨的定位线的终点
4. 将柱子的碰撞框和梁跨终点进行碰撞的bool运算
5. 筛选出柱子构件中bool值为true的项
步骤七的DesignScript语言的实现方法
BBox1 = t.BoundingBox; t1 = BBox1<1>.Contains(x[1]<2>); t4 = List.Chop(List.Transpose(t1),t2); t5 = List.Transpose(t4@-3<1>); vector = Vector.ByTwoPoints(x[0], x[1]); lista=[Imperative] { t6={}; for (i in 0..List.Count(t4)-1) { for (j in 0..List.Count(t4[i])-1) { for(k in 0..List.Count(t4[i][j])-1) { t6[i][j][k]=ToString(t4[i][j][k]); } } } return=t6; }; t7 = List.AllIndicesOf(lista@@-2<1>, "true"); t8 = List.GetItemAtIndex(t, t7);
说明
1. 其中t模型中所有的柱子
2. 其中x是步骤四所述的x
3. 其中t8是步骤五所筛选出的柱子
[0019]
步骤八:筛选出步骤七中柱子表面中与梁方向向量垂直的表面
1. 求得步骤七中柱子所有的表面
2. 求得表面所在平面
3. 求得平面的法向量
4. 将法向量与上述求得的梁的方向向量进行是否平行的bool运算
5. 筛选出表面中bool值为true的表面
步骤八的DesignScript语言的实现方法
a=List.Count(ele)-1; vector; geometry=[Imperative] { x=0..a; bool1={}; for (i in x) { b=List.Count(ele[i])-1; y=0..b; for (j in y) { bool1[i][j]=ele[i][j][0].Faces; } } return=bool1; }; plane=Plane.ByBestFitThroughPoints(geometry.Vertices.PointGeometry); normal=plane.Normal; bool1=Vector.IsParallel(vector,normal); bools=Manage.ReplaceNulls(bool1@@-2<1>, true); t3 = List.FilterByBoolMask(geometry, bools); t4 = __TryGetValueFromNestedDictionaries(t3, "in");
说明
1. 其中ele是步骤五所筛选出的柱子
2. 其中vector是步骤二中的vector2
3. 其中t4是步骤八所述的与梁方向向量垂直的柱子的表面
[0020]
步骤九:求出端支座筋的定位线
1. 提取步骤八表面的最后一项加到步骤六表面的最后一项。(或者提取步骤六表面第一项加到步骤八表面的第一项)。
2. 将步骤二中求得梁所在的直线首尾各延长1000mm和步骤九中第一步的表面相交得出定位点,因为步骤九中第一步的表面数据结构就是按照支座来分的,我们得到的点也是一个支座一组,支座为空的,点也是空。
3. 将每组里面的两个点连成支座钢筋定位线
步骤九的DesignScript语言的实现方法
t1 = List.LastItem(t2@@-3<1>); surfs = List.AddItemToEnd(t1@-1<1>, t3@@-3<1>); a=List.Count(surfs)-1; loca; def inter(geo1,geo2) { return=Autodesk.Geometry.Intersect(geo1,geo2); }; geometry=[Imperative] { x=0..a; points={}; for (i in x) { points[i]=inter(surfs[i],loca[i]); } return=points; }; b=List.Count(geometry)-1; def line(geo1,geo2) { return=Line.ByStartPointEndPoint(geo1,geo2); }; geometry1=[Imperative] { x1=0..b; lines={}; for (i in x1) { c=List.Count(geometry[i])-1; y=0..c; for (j in y) { lines[i][j]=line(geometry[i][j][0],geometry[i][j][1]); } } return=lines; };
说明
1. 其中t2是步骤八所述的表面
2. 其中t3是步骤六所述的表面
3. 其中loca是步骤三所述的line1
[0021]
步骤十:求出端支座的最大净跨长
1. 求得步骤四中梁跨定位线的长度
2. 将数据按照梁跨数(步骤一中子列表的数据个数)进行分组变成二位列表
3. 在这组数据的首项加一个0变成列表A
4. 在这组数据的尾项加一个0变成列表B
5. 将列表A和列表B进行比较,如果列表A的元素等于0说明是端支座它在起始端的延伸的最大净长还是为0,如果列表A的元素不为0,取其与列表B比较的较大值,组成新的列表A1,为端支座的钢筋的起点延伸净长。
6. 将列表B和列表A进行比较,如果列表B的元素等于0说明是端支座它在起始端的延伸的最大净长还是为0,如果列表B的元素不为0,取其与列表A比较的较大值,组成新的列表B1,为端支座的钢筋的起点延伸净长。
步骤十的DesignScript语言的实现方法
t2 = t3.Length; t4 = List.Chop(t2, t5); lista = List.AddItemToEnd(0, t4@-2<1>); listb = List.AddItemToFront(0, t4@-2<1>); a=List.Count(lista)-1; list1=[Imperative] { x=0..a; lista1={}; listb1={}; for (i in x) { b=List.Count(lista[i])-1; y=0..b; for (j in y) { if (lista[i][j]==0) { lista1[i][j]=0; } elseif (lista[i][j]<=listb[i][j]) { lista1[i][j]=listb[i][j]; } else { lista1[i][j]=lista[i][j]; } } } return=lista1; }; list2=[Imperative] { x=0..a; lista1={}; listb1={}; for (i in x) { b=List.Count(lista[i])-1; y=0..b; for (j in y) { if (listb[i][j]==0) { listb1[i][j]=0; } elseif (listb[i][j]<=lista[i][j]) { listb1[i][j]=lista[i][j]; } else { listb1[i][j]=listb[i][j]; } } } return=listb1; };
说明
1. 其中t3是步骤四所述的梁跨的定位线
2. 其中t2是梁的跨数
3. 其中list1是步骤十所述的起始端最大净跨长
4. 其中list2是步骤十所述的终点端最大净跨长
[0022]
步骤十一:将最大净跨转换为延伸长度
1. 步骤十中的数据为0时说明时位端支座,应当缩进保护层厚度,并留下保护层厚度的数据接口。
2. 其余的应除以4
步骤十一的DesignScript语言的实现方法
a=List.Count(lista)-1; c; list1=[Imperative] { x=0..a; lista1={}; for (i in x) { b=List.Count(lista[i])-1; y=0..b; for (j in y) { if (lista[i][j]==0) { lista1[i][j]=0-c; } else { lista1[i][j]=lista[i][j]/4; } } } return=lista1; };
说明
1. 其中lista是步骤十所述的端支座的最大净跨长
2. 其中list1是步骤十一所述的延伸长度
[0023]
步骤十二:将端支座筋线条,进行首尾延伸
1. 将步骤九中的端支座定位线的起点按照步骤十一中求出的步骤八中A1的对应数据进行延伸
2. 将步骤九中的端支座定位线的终点按照步骤十一中求出的步骤八中A1的对应数据进行延伸
步骤十二的DesignScript语言的实现方法
curves; lista; listb; a=List.Count(lista)-1; list1=[Imperative] { x=0..a; curves1={}; for (i in x) { b=List.Count(lista[i])-1; y=0..b; for (j in y) { curves1[i][j]=(curves[i][j][0].ExtendStart(lista[i][j])).ExtendEnd(listb[i][j]); } } return=curves1; };
说明
1. 其中curves是步骤九所述的端支座钢筋的定位线
2. 其中lista和listb是步骤十一所述的延伸长度
[0024]
步骤十三:将一个线条根据用户输入的根数进行等分,形成多根线条
1. 将步骤十二中的端支座筋线条的数据里面的空值清除
2. 求出这些线条的方向向量
3. 求出与这些向量垂直的水平向量V1
4. 将线条分沿着V1方向偏移梁宽的一半减去保护层厚度,将线条沿着V1的反方向偏移梁宽减去两倍的保护层厚度。
5. 然后根据用户输入的根数进行等分
6. 子主题
步骤十三的DesignScript语言的实现方法
t1 = List.Clean(t2, false); point1 = t1.StartPoint; point2 = t1.EndPoint; vector1 = Vector.ByCoordinates(0, 0, 100); point3 = point1.Add(vector1); plane1 = Plane.ByThreePoints(point1, point2, point3); vector2 = plane1.Normal; c; V1=vector2; l1=Autodesk.Geometry.Translate(t1,V1,b/2-c); V2=Vector.Reverse(V1); V3=Vector.ZAxis(); V4=V3.Reverse(); l2=Autodesk.Geometry.Translate(l1,V2,b-2*c); l3=Autodesk.Geometry.Translate(l1,V4,c); l4=Autodesk.Geometry.Translate(l2,V4,c); t11 = Flatten(l3); t12 = Flatten(l4); curve1 = List.Transpose({t11,DynamoRebar.Rebar.Morphed(t11, t12, t3, 0),t12}); t4 = Flatten(curve1@-3<1>);
说明
1. 其中t2是步骤十一中的钢筋线条
2. 其中c是梁的混凝土保护层厚度
3. 其中t3是用户输入的根数
[0025]
步骤十四:端支座的起点终点弯钩处理
1. 起点端支座弯钩
2. 根据步骤十一中端支座钢筋线条,如果数据的索引为0则输出“标准-90 度”字符串,否则则输出“标准-0 度”字符串。形成列表A
3. 根据步骤十一中端支座钢筋线条,在钢筋线条列表为空的索引相对应的列表A中也替换为空。形成列表B
4. 将列表B中的空值清除
5. 根据列表B中的字符串形成对应的钢筋弯钩的型号,当然这需要在Revit中设定好。
6. 将钢筋弯钩型号的数据格式排列成钢筋曲线的数据结构
7. 端支座的终点弯钩处理同起点只需将索引为0改为索引为最后
步骤十四的DesignScript语言的实现方法
lista; a=List.Count(lista)-1; list1=[Imperative] { x=0..a; curves1={}; for (i in x) { b=List.Count(lista[i])-1; y=0..b; for (j in y) { if (j==0) { curves1[i][j]="标准 - 90 度"; } else { curves1[i][j]="标准 - 0 度"; } } } return=curves1; }; t2 = DSCore.Object.IsNull(lista); t3=RebarHookType.ByName(list1); list2=[Imperative] { x=0..a; curves2={}; for (i in x) { b=List.Count(lista[i])-1; y=0..b; for (j in y) { if (t2[i][j]) { curves2[i][j]=null; } else { curves2[i][j]=t3[i][j]; } } } return=curves2; }; list3 = List.Clean(list2, true); list4 = Flatten(list3);
说明
1. 其中lista步骤九中端支座钢筋定位线
2. 其中list4是弯钩型号
[0026]
步骤十五:形成钢筋模型
1. 求出所选梁构件的ElementID
2. 求出步骤十三中钢筋曲线所在水平面的法向量
3. 根据步骤十四中得到的弯钩型号,步骤十三中得到的钢筋曲线以及用户输入的端支座钢筋根数和直径利用Rebar.ByCurve节点形成钢筋
步骤十五的DesignScript语言的实现方法
使用Rebar.ByCurve函数就好了
[0027]
步骤十六:对步骤十五中的最终成果的模型进行拆分和编号,提取工程量,生成相应的钢筋下料图纸,和施工工序,根据下料图纸加工或准备构件,然后在现场进行施工安装,最终组成目标实体。
[0028]
所述所有步骤中的计算和判定是通过是使用DesignScript语言并调用Autodesk公司发布的BIM建模平台Revit软件的应用程序编程接口中的相关函数来实现的
[0029]
本发明可试用于所有情况的楼层框架梁中水平直线矩形梁的端支座钢筋建模过程,例如左端悬挑、右端悬挑、两端悬挑、无悬挑等多种情况都可以使用本发明快速建模,并根据模型施工。并且可以根据本发明中的方法使用各种语言编写BIM的端支座钢筋建模插件,进而快速建模,并根据模型施工。
权利要求书
1、一种楼层框架梁端支座钢筋的智能化快速施工方法,其特征在于,施工步骤如下:
为实现上述目的,本发明采用如下技术方案:一种楼层框架梁端支座钢筋的智能化快速施工方法,施工步骤如下:
步骤一:在已经建立好的结构BIM模型中选中要进行钢筋建模的水平直线矩形的楼层框架梁。
步骤二:找到一根梁所有的横截面并且是有序的
求得梁所有的表面
求得表面所在的平面
求得平面的法向量
求得梁所在的直线
利用直线的起点和终点求得直线的方向向量
求得法向量和方向向量是否平行的bool值
筛选出bool值为true的梁的表面
求得筛序出来的面和梁所在直线起点的距离
将这些距离按照从小到大将索引排序
按照排序好的索引将筛选出来的梁截面排序
步骤三:将求得有序的梁横截面转换为梁的定位点
为保证一定能相交将步骤一中梁所在的直线进行延长1000mm
求得筛选出来的梁横截面与梁中心线的交点
步骤四:求得梁跨的定位线
将步骤三中已经排序好的梁的定位点的第一个点和第二个点连接,第三个点和第四个连接,以此类推所得到的线就是梁跨的定位线。
将多维点列表转为一维点列表
将点的一维列表转换为二维列表,子列表长度都是为2
将二维列表转置
提取二维列表的第一列为梁跨定位线的起点
提取二位列表的第二列为梁跨定位线的终点
将起点终点连城线为梁跨的定位线
步骤五:在所有柱子中筛选出所有梁跨起点的柱子
筛选出文档中所有的柱子
求得所有柱子的碰撞框
将步骤四种求得梁跨的定位线的起点
将柱子的碰撞框和梁跨终点进行碰撞的bool运算
筛选出柱子构件中bool值为true的项
步骤六:筛选出步骤五中柱子表面中与梁方向向量垂直的表面
1、求得步骤五中柱子所有的表面
2、求得表面所在平面
3、求得平面的法向量
4、将法向量与上述求得的梁的方向向量进行是否平行的bool运算
5、筛选出表面中bool值为true的表面
步骤七:在所有柱子中筛选出所有梁跨终点的柱子
筛选出文档中所有的柱子
求得所有柱子的碰撞框
将步骤四种求得梁跨的定位线的终点
将柱子的碰撞框和梁跨终点进行碰撞的bool运算
筛选出柱子构件中bool值为true的项
步骤八:筛选出步骤七中柱子表面中与梁方向向量垂直的表面
1、求得步骤七中柱子所有的表面
2、求得表面所在平面
3、求得平面的法向量
4、将法向量与上述求得的梁的方向向量进行是否平行的bool运算
5、筛选出表面中bool值为true的表面
步骤九:求出端支座筋的定位线
提取步骤八表面的最后一项加到步骤六表面的最后一项。(或者提取步骤六表面第一项加到步骤八表面的第一项)。
将步骤二中求得梁所在的直线首尾各延长1000mm和步骤九中第一步的表面相交得出定位点,因为步骤九中第一步的表面数据结构就是按照支座来分的,我们得到的点也是一个支座一组,支座为空的,点也是空。
将每组里面的两个点连成支座钢筋定位线
步骤十:求出端支座的最大净跨长
求得步骤四中梁跨定位线的长度
将数据按照梁跨数(步骤一中子列表的数据个数)进行分组变成二位列表
在这组数据的首项加一个0变成列表A
在这组数据的尾项加一个0变成列表B
将列表A和列表B进行比较,如果列表A的元素等于0说明是端支座它在起始端的延伸的最大净长还是为0,如果列表A的元素不为0,取其与列表B比较的较大值,组成新的列表A1,为端支座的钢筋的起点延伸净长。
将列表B和列表A进行比较,如果列表B的元素等于0说明是端支座它在起始端的延伸的最大净长还是为0,如果列表B的元素不为0,取其与列表A比较的较大值,组成新的列表B1,为端支座的钢筋的起点延伸净长。
步骤十一:将最大净跨转换为延伸长度
步骤十中的数据为0时说明时位端支座,应当缩进保护层厚度,并留下保护层厚度的数据接口。
其余的应除以4
步骤十二:将端支座筋线条,进行首尾延伸
将步骤九中的端支座定位线的起点按照步骤十一中求出的步骤八中A1的对应数据进行延伸
将步骤九中的端支座定位线的终点按照步骤十一中求出的步骤八中A1的对应数据进行延伸
步骤十三:将一个线条根据用户输入的根数进行等分,形成多根线条
将步骤十二中的端支座筋线条的数据里面的空值清除
求出这些线条的方向向量
求出与这些向量垂直的水平向量V1
将线条分沿着V1方向偏移梁宽的一半减去保护层厚度,将线条沿着V1的反方向偏移梁宽减去两倍的保护层厚度。
然后根据用户输入的根数进行等分
步骤十四:端支座的起点终点弯钩处理
起点端支座弯钩
根据步骤十一中端支座钢筋线条,如果数据的索引为0则输出“标准-90 度”字符串,否则则输出“标准-0 度”字符串。形成列表A
根据步骤十一中端支座钢筋线条,在钢筋线条列表为空的索引相对应的列表A中也替换为空。形成列表B
将列表B中的空值清除
根据列表B中的字符串形成对应的钢筋弯钩的型号,当然这需要在Revit中设定好。
将钢筋弯钩型号的数据格式排列成钢筋曲线的数据结构
端支座的终点弯钩处理同起点只需将索引为0改为索引为最后
步骤十五:形成钢筋模型
求出所选梁构件的ElementID
求出步骤十三中钢筋曲线所在水平面的法向量
根据步骤十四中得到的弯钩型号,步骤十三中得到的钢筋曲线以及用户输入的端支座钢筋根数和直径利用Rebar.ByCurve节点形成钢筋
步骤十六:对步骤十五中的最终成果的模型进行拆分和编号,提取工程量,生成相应的钢筋下料图纸,和施工工序,根据下料图纸加工或准备构件,然后在现场进行施工安装,最终组成目标实体。
2、根据权利要求1所述的楼层框架梁端支座钢筋的智能化快速施工方法,其特征在于:步骤十五中的钢筋模型是利用Autodesk公司发布的BIM建模平台Revit软件进行建造的模型
3、根据权利要求1所述的楼层框架梁端支座钢筋的智能化快速施工方法,其特征在于:步骤二中的梁是楼层框架梁且是水平直线矩形梁
4、根据权利要求1所述的楼层框架梁端支座钢筋的智能化快速施工方法,其特征在于:步骤中的计算依据是国家建筑标准设计图集16G101-1混凝土结构施工图平面整体表示方法制图规则和构造详图中第84页楼层框架梁KL纵向钢筋构造中的端支座钢筋
5、根据权利要求1所述的楼层框架梁端支座钢筋的智能化快速施工方法,其特征在于:步骤一中的梁是楼层框架梁且是水平直线矩形梁
6、根据权利要求1所述的楼层框架梁端支座钢筋的智能化快速施工方法,其特征在于:步骤十中所述的延伸长度能够处理左悬挑,右悬挑,两端悬挑,无悬挑等多种情况
7、根据权利要求1所述的楼层框架梁端支座钢筋的智能化快速施工方法,其特征在于:步骤十四中所述的弯钩处理能够处理左悬挑,右悬挑,两端悬挑,无悬挑等多种情况
8、根据权利要求1所述的楼层框架梁端支座钢筋的智能化快速施工方法,其特征在于:步骤三中所述的梁跨定位线能够处理梁与柱的建模过程不规范造成的部分相交,没有中心相交,不相交等多种情况
9、根据权利要求1-8所述的楼层框架梁端支座钢筋的智能化快速施工方法在Dynamo环境下使用DesignScript语言,其特征在于,施工步骤如下:
步骤一
步骤一:在已经建立好的结构BIM模型中选中要进行钢筋建模的水平直线矩形的楼层框架梁。
步骤二
步骤二:找到一根梁所有的横截面并且是有序的
求得梁所有的表面
求得表面所在的平面
求得平面的法向量
求得梁所在的直线
利用直线的起点和终点求得直线的方向向量
求得法向量和方向向量是否平行的bool值
筛选出bool值为true的梁的表面
求得筛序出来的面和梁所在直线起点的距离
将这些距离按照从小到大将索引排序
按照排序好的索引将筛选出来的梁截面排序
步骤二的DesignScript语言的实现方法
t1; lista=t1.Faces; listb=Plane.ByBestFitThroughPoints(lista.Vertices.PointGeometry); vector1=listb.Normal; line1= t1.GetLocation(); point2 = line1.EndPoint; point1 = line1.StartPoint; vector2 = Vector.ByTwoPoints(point1, point2); listc = vector1<1L>.IsParallel(vector2<1L>); listd = List.FilterByBoolMask(lista, listc); liste = __TryGetValueFromNestedDictionaries(listd, "in"); listf = point1.DistanceTo(liste); listg = SortIndexByValue(listf); surfaces = Reorder(liste, listg);
说明
其中t1是选中的一根或多跟梁
其中surfaces是步骤二所求出的横截面
步骤三
步骤三:将求得有序的梁横截面转换为梁的定位点
为保证一定能相交将步骤一中梁所在的直线进行延长1000mm
求得筛选出来的梁横截面与梁中心线的交点
步骤三的DesignScript语言的实现方法
elements; line1 = elements.GetLocation(); curve1 = line1.ExtendEnd(500); curve2 = curve1.ExtendEnd(500); points = surfaces.Intersect(curve2);
说明
其中elements是选中的一根或多跟梁
其中surfaces是步骤二所述的横截面
其中points是步骤三所述的定位点
步骤四
步骤四:求得梁跨的定位线
将步骤三中已经排序好的梁的定位点的第一个点和第二个点连接,第三个点和第四个连接,以此类推所得到的线就是梁跨的定位线。
将多维点列表转为一维点列表
将点的一维列表转换为二维列表,子列表长度都是为2
将二维列表转置
提取二维列表的第一列为梁跨定位线的起点
提取二位列表的第二列为梁跨定位线的终点
将起点终点连城线为梁跨的定位线
步骤四的DesignScript语言的实现方法
t4 = Flatten(t5@-3<1>); t6 = List.Chop(t4@-2<1>, 2); t7 = Flatten(t6@-2<1>); t8 = List.Transpose(t7); x = t8; line1 = Line.ByStartPointEndPoint(x[0], x[1]);
说明
其中t5是步骤三所述的定位点
其中line1是步骤四所述的定位线
步骤五
步骤五:在所有柱子中筛选出所有梁跨起点的柱子
筛选出文档中所有的柱子
求得所有柱子的碰撞框
将步骤四种求得梁跨的定位线的起点
将柱子的碰撞框和梁跨终点进行碰撞的bool运算
筛选出柱子构件中bool值为true的项
步骤五的DesignScript语言的实现方法
BBox1 = t.BoundingBox; t1 = BBox1<1>.Contains(x[0]<2>); t4 = List.Chop(List.Transpose(t1),t2); t5 = List.Transpose(t4@-3<1>); vector = Vector.ByTwoPoints(x[0], x[1]); lista=[Imperative] { t6={}; for (i in 0..List.Count(t4)-1) { for (j in 0..List.Count(t4[i])-1) { for(k in 0..List.Count(t4[i][j])-1) { t6[i][j][k]=ToString(t4[i][j][k]); } } } return=t6; }; t7 = List.AllIndicesOf(lista@@-2<1>, "true"); t8 = List.GetItemAtIndex(t, t7);
说明
其中t模型中所有的柱子
其中x是步骤四所述的x
其中t8是步骤五所筛选出的柱子
步骤六
步骤六:筛选出步骤五中柱子表面中与梁方向向量垂直的表面
1、求得步骤五中柱子所有的表面
2、求得表面所在平面
3、求得平面的法向量
4、将法向量与上述求得的梁的方向向量进行是否平行的bool运算
5、筛选出表面中bool值为true的表面
步骤六的DesignScript语言的实现方法
a=List.Count(ele)-1; vector; geometry=[Imperative] { x=0..a; bool1={}; for (i in x) { b=List.Count(ele[i])-1; y=0..b; for (j in y) { bool1[i][j]=ele[i][j][0].Faces; } } return=bool1; }; plane=Plane.ByBestFitThroughPoints(geometry.Vertices.PointGeometry); normal=plane.Normal; bool1=Vector.IsParallel(vector,normal); bools=Manage.ReplaceNulls(bool1@@-2<1>, true); t3 = List.FilterByBoolMask(geometry, bools); t4 = __TryGetValueFromNestedDictionaries(t3, "in");
说明
其中ele是步骤五所筛选出的柱子
其中vector是步骤二中的vector2
其中t4是步骤六所述的与梁方向向量垂直的柱子的表面
步骤七
步骤七:在所有柱子中筛选出所有梁跨终点的柱子
筛选出文档中所有的柱子
求得所有柱子的碰撞框
将步骤四种求得梁跨的定位线的终点
将柱子的碰撞框和梁跨终点进行碰撞的bool运算
筛选出柱子构件中bool值为true的项
步骤七的DesignScript语言的实现方法
BBox1 = t.BoundingBox; t1 = BBox1<1>.Contains(x[1]<2>); t4 = List.Chop(List.Transpose(t1),t2); t5 = List.Transpose(t4@-3<1>); vector = Vector.ByTwoPoints(x[0], x[1]); lista=[Imperative] { t6={}; for (i in 0..List.Count(t4)-1) { for (j in 0..List.Count(t4[i])-1) { for(k in 0..List.Count(t4[i][j])-1) { t6[i][j][k]=ToString(t4[i][j][k]); } } } return=t6; }; t7 = List.AllIndicesOf(lista@@-2<1>, "true"); t8 = List.GetItemAtIndex(t, t7);
说明
其中t模型中所有的柱子
其中x是步骤四所述的x
其中t8是步骤五所筛选出的柱子
步骤八
步骤八:筛选出步骤七中柱子表面中与梁方向向量垂直的表面
1、求得步骤七中柱子所有的表面
2、求得表面所在平面
3、求得平面的法向量
4、将法向量与上述求得的梁的方向向量进行是否平行的bool运算
5、筛选出表面中bool值为true的表面
步骤八的DesignScript语言的实现方法
a=List.Count(ele)-1; vector; geometry=[Imperative] { x=0..a; bool1={}; for (i in x) { b=List.Count(ele[i])-1; y=0..b; for (j in y) { bool1[i][j]=ele[i][j][0].Faces; } } return=bool1; }; plane=Plane.ByBestFitThroughPoints(geometry.Vertices.PointGeometry); normal=plane.Normal; bool1=Vector.IsParallel(vector,normal); bools=Manage.ReplaceNulls(bool1@@-2<1>, true); t3 = List.FilterByBoolMask(geometry, bools); t4 = __TryGetValueFromNestedDictionaries(t3, "in");
说明
其中ele是步骤五所筛选出的柱子
其中vector是步骤二中的vector2
其中t4是步骤八所述的与梁方向向量垂直的柱子的表面
步骤九
步骤九:求出端支座筋的定位线
提取步骤八表面的最后一项加到步骤六表面的最后一项。(或者提取步骤六表面第一项加到步骤八表面的第一项)。
将步骤二中求得梁所在的直线首尾各延长1000mm和步骤九中第一步的表面相交得出定位点,因为步骤九中第一步的表面数据结构就是按照支座来分的,我们得到的点也是一个支座一组,支座为空的,点也是空。
将每组里面的两个点连成支座钢筋定位线
步骤九的DesignScript语言的实现方法
t1 = List.LastItem(t2@@-3<1>); surfs = List.AddItemToEnd(t1@-1<1>, t3@@-3<1>); a=List.Count(surfs)-1; loca; def inter(geo1,geo2) { return=Autodesk.Geometry.Intersect(geo1,geo2); }; geometry=[Imperative] { x=0..a; points={}; for (i in x) { points[i]=inter(surfs[i],loca[i]); } return=points; }; b=List.Count(geometry)-1; def line(geo1,geo2) { return=Line.ByStartPointEndPoint(geo1,geo2); }; geometry1=[Imperative] { x1=0..b; lines={}; for (i in x1) { c=List.Count(geometry[i])-1; y=0..c; for (j in y) { lines[i][j]=line(geometry[i][j][0],geometry[i][j][1]); } } return=lines; };
说明
其中t2是步骤八所述的表面
其中t3是步骤六所述的表面
其中loca是步骤三所述的line1
步骤十
步骤十:求出端支座的最大净跨长
求得步骤四中梁跨定位线的长度
将数据按照梁跨数(步骤一中子列表的数据个数)进行分组变成二位列表
在这组数据的首项加一个0变成列表A
在这组数据的尾项加一个0变成列表B
将列表A和列表B进行比较,如果列表A的元素等于0说明是端支座它在起始端的延伸的最大净长还是为0,如果列表A的元素不为0,取其与列表B比较的较大值,组成新的列表A1,为端支座的钢筋的起点延伸净长。
将列表B和列表A进行比较,如果列表B的元素等于0说明是端支座它在起始端的延伸的最大净长还是为0,如果列表B的元素不为0,取其与列表A比较的较大值,组成新的列表B1,为端支座的钢筋的起点延伸净长。
步骤十的DesignScript语言的实现方法
t2 = t3.Length; t4 = List.Chop(t2, t5); lista = List.AddItemToEnd(0, t4@-2<1>); listb = List.AddItemToFront(0, t4@-2<1>); a=List.Count(lista)-1; list1=[Imperative] { x=0..a; lista1={}; listb1={}; for (i in x) { b=List.Count(lista[i])-1; y=0..b; for (j in y) { if (lista[i][j]==0) { lista1[i][j]=0; } elseif (lista[i][j]<=listb[i][j]) { lista1[i][j]=listb[i][j]; } else { lista1[i][j]=lista[i][j]; } } } return=lista1; }; list2=[Imperative] { x=0..a; lista1={}; listb1={}; for (i in x) { b=List.Count(lista[i])-1; y=0..b; for (j in y) { if (listb[i][j]==0) { listb1[i][j]=0; } elseif (listb[i][j]<=lista[i][j]) { listb1[i][j]=lista[i][j]; } else { listb1[i][j]=listb[i][j]; } } } return=listb1; };
说明
其中t3是步骤四所述的梁跨的定位线
其中t2是梁的跨数
其中list1是步骤十所述的起始端最大净跨长
其中list2是步骤十所述的终点端最大净跨长
步骤十一
步骤十一:将最大净跨转换为延伸长度
步骤十中的数据为0时说明时位端支座,应当缩进保护层厚度,并留下保护层厚度的数据接口。
其余的应除以4
步骤十一的DesignScript语言的实现方法
a=List.Count(lista)-1; c; list1=[Imperative] { x=0..a; lista1={}; for (i in x) { b=List.Count(lista[i])-1; y=0..b; for (j in y) { if (lista[i][j]==0) { lista1[i][j]=0-c; } else { lista1[i][j]=lista[i][j]/4; } } } return=lista1; };
说明
其中lista是步骤十所述的端支座的最大净跨长
其中list1是步骤十一所述的延伸长度
步骤十二
步骤十二:将端支座筋线条,进行首尾延伸
将步骤九中的端支座定位线的起点按照步骤十一中求出的步骤八中A1的对应数据进行延伸
将步骤九中的端支座定位线的终点按照步骤十一中求出的步骤八中A1的对应数据进行延伸
步骤十二的DesignScript语言的实现方法
curves; lista; listb; a=List.Count(lista)-1; list1=[Imperative] { x=0..a; curves1={}; for (i in x) { b=List.Count(lista[i])-1; y=0..b; for (j in y) { curves1[i][j]=(curves[i][j][0].ExtendStart(lista[i][j])).ExtendEnd(listb[i][j]); } } return=curves1; };
说明
其中curves是步骤九所述的端支座钢筋的定位线
其中lista和listb是步骤十一所述的延伸长度
步骤十三
步骤十三:将一个线条根据用户输入的根数进行等分,形成多根线条
将步骤十二中的端支座筋线条的数据里面的空值清除
求出这些线条的方向向量
求出与这些向量垂直的水平向量V1
将线条分沿着V1方向偏移梁宽的一半减去保护层厚度,将线条沿着V1的反方向偏移梁宽减去两倍的保护层厚度。
然后根据用户输入的根数进行等分
子主题
步骤十三的DesignScript语言的实现方法
t1 = List.Clean(t2, false); point1 = t1.StartPoint; point2 = t1.EndPoint; vector1 = Vector.ByCoordinates(0, 0, 100); point3 = point1.Add(vector1); plane1 = Plane.ByThreePoints(point1, point2, point3); vector2 = plane1.Normal; c; V1=vector2; l1=Autodesk.Geometry.Translate(t1,V1,b/2-c); V2=Vector.Reverse(V1); V3=Vector.ZAxis(); V4=V3.Reverse(); l2=Autodesk.Geometry.Translate(l1,V2,b-2*c); l3=Autodesk.Geometry.Translate(l1,V4,c); l4=Autodesk.Geometry.Translate(l2,V4,c); t11 = Flatten(l3); t12 = Flatten(l4); curve1 = List.Transpose({t11,DynamoRebar.Rebar.Morphed(t11, t12, t3, 0),t12}); t4 = Flatten(curve1@-3<1>);
说明
其中t2是步骤十一中的钢筋线条
其中c是梁的混凝土保护层厚度
其中t3是用户输入的根数
步骤十四
步骤十四:端支座的起点终点弯钩处理
起点端支座弯钩
根据步骤十一中端支座钢筋线条,如果数据的索引为0则输出“标准-90 度”字符串,否则则输出“标准-0 度”字符串。形成列表A
根据步骤十一中端支座钢筋线条,在钢筋线条列表为空的索引相对应的列表A中也替换为空。形成列表B
将列表B中的空值清除
根据列表B中的字符串形成对应的钢筋弯钩的型号,当然这需要在Revit中设定好。
将钢筋弯钩型号的数据格式排列成钢筋曲线的数据结构
端支座的终点弯钩处理同起点只需将索引为0改为索引为最后
步骤十四的DesignScript语言的实现方法
lista; a=List.Count(lista)-1; list1=[Imperative] { x=0..a; curves1={}; for (i in x) { b=List.Count(lista[i])-1; y=0..b; for (j in y) { if (j==0) { curves1[i][j]="标准 - 90 度"; } else { curves1[i][j]="标准 - 0 度"; } } } return=curves1; }; t2 = DSCore.Object.IsNull(lista); t3=RebarHookType.ByName(list1); list2=[Imperative] { x=0..a; curves2={}; for (i in x) { b=List.Count(lista[i])-1; y=0..b; for (j in y) { if (t2[i][j]) { curves2[i][j]=null; } else { curves2[i][j]=t3[i][j]; } } } return=curves2; }; list3 = List.Clean(list2, true); list4 = Flatten(list3);
说明
其中lista步骤九中端支座钢筋定位线
其中list4是弯钩型号
步骤十五
步骤十五:形成钢筋模型
求出所选梁构件的ElementID
求出步骤十三中钢筋曲线所在水平面的法向量
根据步骤十四中得到的弯钩型号,步骤十三中得到的钢筋曲线以及用户输入的端支座钢筋根数和直径利用Rebar.ByCurve节点形成钢筋
步骤十五的DesignScript语言的实现方法
使用Rebar.ByCurve函数就好了
步骤十六
步骤十六:对步骤十五中的最终成果的模型进行拆分和编号,提取工程量,生成相应的钢筋下料图纸,和施工工序,根据下料图纸加工或准备构件,然后在现场进行施工安装,最终组成目标实体。
10、本发明可试用于所有情况的楼层框架梁中水平直线矩形梁的端支座钢筋建模过程,例如左端悬挑、右端悬挑、两端悬挑、无悬挑等多种情况都可以使用本发明快速建模,并根据模型施工。并且可以根据本发明中的方法使用各种语言编写BIM的端支座钢筋建模插件,进而快速建模,并根据模型施工。