1
前期概括
在实际项目中甲方爸爸提供给我们的前期CAD测绘图中往往都是以下这样的

这样的

或者这样的

并且刚好他们都有着相同点
第一:图层混乱(小编已经无力吐槽)
第二:信息混乱(有些有层数,有些没有,有些多个层数值)
第三:干扰的无效信息过多
总之,能有多乱有多乱
如果基地范围较小,建筑数量不多,地块又都是平地,那基地建模基本没难度了
但是一旦范围过大,比如规划的上万平,建筑数量极其庞大,地形又都是山地,那.....保重

思路简介
建模的方法有很多种,本文只简单介绍运用grasshopper如何处理此类问题,望轻喷
一、基地模型的建立:通过CAD标高文字生成地形
1.rhino中识别并筛选出标高文字(通过grasshopper相关插件horster、human、seg、或者自带的编程语言C#、python等都可识别)
2.将识别后的标高文字转换为空间中三维的点
3.通过三维的点生成三维地形
二、建筑体量模型的生成
1.识别并筛选出为建筑轮廓的曲线
2.判断建筑轮廓线与内部层数文字的包含与被包含的逻辑关系
3.将建筑轮廓推拉出内部选定的相符合的层数高度
三、将建筑体量放置于三维地形表面
1.判断建筑体量的底平面与三维地形的距离
2.将建筑体量移动相应的距离至地形表面
一、基地模型的建立:通过CAD标高文字生成地形
读取报告文字(用的为horster中的read text objects)

输出端一个为所在文字的空间坐标(XYZ,所有Z均为0,可以也可以知道为二维的CAD,没有高度),一个为显示的值(即点的Z值)
因为汉字(砼等)、层数(3等)信息也被读取,所以我们需要进行简单的筛选

然后将信息转换为空间的三维的点

最后通过delaunay mesh将三维的点生成三维地形

最后将其bake至rhino中即可
二、建筑体量模型的生成
先SelClosedCrv识别出封闭的建筑轮廓曲线(有些为道路,或标志等)
如果建筑轮廓也未闭合则需选出开放曲线,判断起点终点再进行连接join即可

再筛选掉面积较小的封闭曲线(明显不是建筑体量的)

然后简单筛选出层数信息便于后面匹配建筑轮廓

判断文字与曲线(建筑轮廓)的包含关系(重点)

point in curves 一个输出为包含关系(0表示没有曲线包含该文字,1表示在线上,2表示包含),一个为表示第几根曲线包含,例如:第一个表示被第92根曲线包含
找出每一根建筑轮廓线所对应的包含文字(及建筑层数)关系

最后输出表示前面四根曲线没有包含任何文字,第五根曲线内部包含层数为3和4,以此类推(注在rhino6.0后的版本,其中set中的电池在输入端需要连接panel才有用,算是个bug吧)
我们将没有内部层数的建筑轮廓赋予一个层数,比如1层(我们要保证每个建筑轮廓最后推拉的高度有且只有一个)

对于包含多个层数的建筑轮廓我们选择取第二大的数值(最大的数值多为屋顶楼梯间的高度)

在grasshopper中0为第一个,-1为最后一个,-2为倒数第二个
最后只需要将对应的建筑轮廓推拉出相应的高度即可(层数*层高)在此单位为米,设层高为3米

到此建筑体量就批量生成了,不论是100个体量还是10000个都是一起生成的
三、将建筑体量放置于三维地形表面

由于原CAD曲线(建筑轮廓线)方向存在差异,无法直接通过listitem找出体量的底平面,对于此类情况我们可以通过判断体量每个面的中心点的Z轴坐标从而找出底平面

计算出底平面中心点到三维地形的正投影距离长度

最后向下移动相对应的长度即可
若有道路曲线,最后亦可把道路曲线在rhino中投影至三维地形


源文件及grasshopper脚本课程文件下载:
链接:https://pan.baidu.com/s/1wfbj2Ur9DhMlIPsSWVrcsA
提取码:jtxh
工具使我快乐~
学习了
学习了