python 建筑计算_制图小技巧:巧用Python和ELK瞬间完成总图建筑名称标注

哎呦,又到了每周一次的制图教室啦。经过前面两次制图教程的分享,相信大家对于白模填色和写实渲染这两种表达方式肯定有了较好的掌握。

那么今天我们就转战制图技巧篇,和童鞋们聊一下总平面图中的建筑名称标注问题。

对于总平面图,各位应该都知道,我们除了对于建筑,场地,道路等等图面元素的绘制之外,另外一个必不可少的过程就是对于周边已有建筑(场地)名称的标注(比如上图中黑色文字)。特别是对于城市中的设计,比如一些老旧城区的改造项目,因为周边已有的著名建筑较多,往往我们在总平面中需要进行很多名称标注。

而大部分童鞋对于名称标注的方法,应该都是图纸绘制好了之后,在PS或者AI这样的一些平面软件中进行逐一的绘制,这种方法本身没有什么问题,但是如果需要标注的建筑名称很多的话,这样无疑是一种比较低效的方法。

而目前在建筑行业,大家都在强调智能化和批量化,那么对于建筑名称标注这样一个简单的需求,我们能不能同样的通过一些手段实现智能化的高效操作了?这个就是我们今天制图技巧讲解的重点。

STEP 1

场地绘制

当然在进行标注之前我们首先要绘制场地,对于高效绘制场地的方法,相信各位制图教室的读者应该都非常清楚了,就是使用ELK这样一款GH插件,可以通过导入的OSM数据直接在Rhino中生成场地。

具体操作大家可以参考LAC往期的文章SITE ANALYSIS:从ELK到AI的工作流.

这里就不再赘述了。因为这次我们主要说的是后续的智能标注,所以我们就选择一个已有著名建筑最多的地方——帝都的故宫,在openstreetmap上选择北京,找到故宫,导出OSM数据。

在grasshopper中,使用file path 打开OSM文件,结合ELk的location和OSMData运算器,通过右键点击OSMData运算器选择不同的类型我们可以非常快的获取所需类型的位置点,使用polyline链接成线。

对于故宫这样一个场地的总平面,我们一般需要绘制的类型有building,highway和waterway。复制两份,设置不同的Feature Type就可以了。

到此为止,我们就完成了大家都非常熟悉的场地绘制了,下面我们就要进入第二环节,智能标注。

STEP 2

智能标注

对于标注,首先还是需要求助于我们的ELK运算器。因为这里面主要是建筑名称的标注,所以我们把道路和水系放在上面,重点关注我们的建筑。

那么这个时候大家需要仔细看下我们的OSMData运算器,除了用于生成点阵的W端,我们还有一个一直被忽略的K端,那么它是干什么的了?

通过链接Panel,我们可以发现K端包含的是每个建筑的建筑信息,并且在每个树状数据的第二项(Index为1),就是我们需要的建筑名称。

那么我们直接使用List Item,提取每组数据中的第二项(Index为1),就获得了如下图中的所有建筑的名称。

之后,按照大家的想法,我们只需要把建筑的名称在图纸上标注起来就可以了。使用Text Tag 3D运算器将文字标注在每个建筑中心处,通过S端我们可以改变文字的大小。

当然大家如果想对于文字位置进行调整的话,我们可以对中心坐标进行修正(比如减少X值使其居中)。

那么这样我们就智能的批量完成了文字的标注,但是我们的任务真的圆满完成了吗?答案是远远没有。

对于目前的文字标注,主要有三个问题:

1:重要建筑的确是成功的将名称标注上去了,但是对于附属建筑,标注的结果却非常奇怪,出现了类似于building yes之类的东西。并且大家绘制过总图应该知道,我们真正需要标注的是重要的已有建筑,对于一些无关紧要的建筑我们是不需要标注的,而目前模型中所有的建筑无论是否重要,都有相应的标注。

2:即使对于正确出现名字的重要建筑,显示上是name:名称这样的一种形式。相信大家在绘制总平面的时候应该没有人会在标注前面加一个‘’name:‘’吧。所以这里同样需要修正。

3:对于建筑图纸,我们是十分重视最终的图面效果的,文字标注同样如此,而目前我们的标注只能使用系统默认的字体,这与我们对于图纸外观的需求是不符合的,最好我们可以在Rhino中直接自定义标注字体。

所以对于目前的标注系统,我们还是需要进行后续的修正。

STEP 3

标注修正

针对上面提出的三个问题,我们一个个来看。首先第一个问题,附属建筑的标注问题。

首先我们需要明白为什么会有这种标注的问题,通过仔细观察链接的panel,我们发现原来是因为有些建筑并没有name信息,而在index为1的位置出现了其他的一些信息。这导致了如果我们直接使用list item提取第二项的话,会提取出来很多错误的信息。

那么知道原因之后,我们就要想办法对它进行修正了。最直观的处理方法应该是是如果第二项(Index为1)位置上不是name信息的话,我们就把他清除掉。那么如何进行这样一个判断和清除的操作了?

像这种对于数据直接的处理,虽然使用GH同样可以完成,但效率和便捷程度是远远弱于代码的,所以我们在这使用Python语言来完成这个操作。

打开GH Python,把输入的index=1的数据拍平。GH Python运算器的输入端设为list access.

之后双击GH Python,进入编码区域,我们先假设我们处理好的数据为a。将a设为一个空的列表[]。

之后我们先考虑一下如何判断。通过之前的观察我们知道正确名称的格式是“name:名称”,那么在这我们可以使用一个非常讨巧的方法,我们通过判断第一个字母是否为n进行筛选,是n的话保留,不是n的话删除(把一个空值赋予它)。

首先通过一个循环遍历所有元素。

如果每一项的第一个字母不是n的话,把这一项设为空值(等于删除)

把i值追加到a列表中(使用append方法)。

点击Test,使用panel链接输出的a端,我们可以看到所有不符合要求的数据都被清除了,通过短短几行的代码我们就实现了一个数据判断和修改的操作。

那下面我们来解决第二个问题,把那个烦人的'name:'的前缀删掉。这个操作通过Python同样非常简单。

我们再使用一个GH Python运算器,还是先用循环来遍历元素

转化为字符串后我们只保留从第六个开始的元素。把修改后的元素同样通过append方法加到a列表里面去。

当然对于这一步如果大家对于Python字符串没有任何了解的话可能会有一点的困惑,所以我们在这简单说一下Python字符串的事情。

比如我们在Python里面以我的名字洪宸创建一个字符串a,字符串里面每一个字母都对应着一个元素。(大家可以把这个字符串看做一个GH中的列表,里面每个字母是一个对应的物体,H是0项,o是1项,n是二项等等)

知道这个之后,对于name:名称这样一个字符串,我们只要从第6项开始截取就可以只获得后面的名称啦,所以在这里i=i[5:].

我们看一下修改后的结果。

链接到Text tag端。我们可以发现附属建筑不再具有标注,并且重要建筑的标注只有其名称。

最后我们解决最后一个问题,字体的问题。对于字体的自定义控制我们需要借助一个非常著名的GH插件叫做Human。在这里我们只需要使用到Human的两个运算器:Fonts和Text3d.

Fonts实际上是把电脑中所有的字体调入到GH中,我们可以通过list item运算器来选择自己的喜好的字体。

之后我们需要连接Text3d运算器,Human的Text3d实际上相当于一个GH原有的Text3d的加强版,多了很多可以自定义的输入端,比如字体的F端。所以连接方式也与原来的tag基本一致,我们只需要多连接一下控制字体的F端。

最后大家只要把这些生成的名称和其他Elk生成的建筑,道路,水网一起bake到Rhino相应的图层中,再倒入到AI中修改线宽就可以啦。不过倒入的时候小伙伴们需要注意下,直接使用AI格式导入的话,AI对于文字的识别会出现乱码,我们需要将Rhino物体导出为CAD文件,再导入进AI。

最后总结一下本次教程的重点:

1:Elk OSM Data运算器的 K端为建筑信息,包含主要建筑物的名称。

2:使用GH Python对于建筑名称信息进行筛选和修正

3:使用Human插件,自定义字体,生成标注

3:将bake好的Rhino物体以CAD格式导入AI进行后续的调整。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461316.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在MacOSX上重新安装Python (10.8) python 自然语言处理的前戏

因为想学python自然语言处理就想在mac上重新配置一下python。 在网上找了很久才找到两篇有用的教程http://765i.cn/%E5%9C%A8macosx%E4%B8%8A%E9%87%8D%E6%96%B0%E5%AE%89%E8%A3%85python-10-8/ http://woodpecker.org.cn/diveintopython3/installing-python.html 第一篇文章基…

获取系统信息3——proc文件系统介绍和使用

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、proc文件系统介绍 1、操作系统级别的调试一般很困难 简单的程序可以单步调试;复杂一点的程序可以printf、cout等打印信息调试(即输出信息到控制台)&#xff0…

阻止函数源码在控制台输出

这是一个很贱的技能,我在谷歌控制台源码里看到的。相信大家都知道,在控制台里只输入函数名,不输入 () 然后按回车,就可以输出源码。 都不会陌生吧,这也有助于我们调试,是个很棒的技巧。不过系统内置的就会输…

值不值得入手_iPhone11现在还值不值得入手?真实用户说出心里话

iPhone11作为苹果走量的一款机型,自发布以来就备受争议,有的朋友说真香,A13iOS只卖4000多,还有的朋友吐槽大黑边、828P的屏幕、信号不好还有充电太慢,特别是现在同价位能买到的安卓旗舰,要5G有5G、要高刷新…

设备驱动,字符设备驱动、(总线)设备驱动模型、sysfs文件系统、平台设备驱动

以下内容转载于微信公众号:嵌入式企鹅圈。如有侵权,请告知删除。 学习Linux设备驱动开发的过程中自然会遇到字符设备驱动、平台设备驱动、设备驱动模型和sysfs等相关概念和技术。 对于初学者来说会非常困惑,甚至对Linux有一定基础的工程师而言…

写文章最难写的是标题

最近做事情有点沉不下心来,不知道是不是在家一个月养成的坏毛病还没改过来还是怎么回事。但仔细想了想,其实这只是个借口。自从高中以来,我这个毛病好像就有了,大概是高二的时候一直到现在,老是不能全心全意的静下心来…

对于局部变量_对于SQL常用查询优化方法的整理

查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引:尝试下面的技巧以避免优化器错选了表扫描:使用ANALYZE TABLE tbl_name为扫描的表更新关键字分布。对扫描的表使用FORCE INDEX告知MySQL,相对于…

wampServer2.1错误(Could not execute menu item (internal error)

安装wampServer2.1后提示以下错误Could not execute menu item (internal error) [Exception] Could not perform service action 服务尚未启动错误原因:08端口被占用(因为安装好wampServer后,默认的端口为80)解决方法&#xff1a…

黄聪:如何使用CodeSmith批量生成代码(原创系列教程)

在上一篇我们已经用PowerDesigner创建好了需要的测试数据库,下面就可以开始用它完成批量代码生成的工作啦. 下面我会一步步的解释如何用CodeSmith实现预期的结果的,事先声明一下,在此只做一个简单的Demo,并不详细的讲解CodeSmith各个强大的功能,有兴趣的朋友可以打开CodeSmith的…

字符设备驱动基础2——用开发板来调试驱动的步骤

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 步骤1:获取编译后的内核源码与镜像 描述 该内核源码主要用来编译驱动源码。该内核源码必须与开发板运行的内核源码的版本一致,否则编译后的驱动程序在开发版上运行时&#xf…

c语音异或运算符_C语言中的按位异或运算符有什么用处?

原标题:C语言中的按位异或运算符有什么用处?想知道C语言中的按位异、运算符有什么用处,首先C语言中^为按位异或运算符,若两个二进制位相同,则结果为0,不同为1例:#include "stdio.h"ma…

Android 开发笔记 一

参考 : http://www.cnblogs.com/nightkidzxc/archive/2011/12/14/2379010.html 1.得到 SD 卡的目录 : String SDPATH Environment.getExternalStorageDriectory() "/"; 2.Activity 相当于 From Activity 以 Dialog形式显示在 Manifest中设置 : android:theme&qu…

超短的判断IE javascript代码

首先说明该代码只能在IE 6~8中有效&#xff0c;再高级的IE已经修复这个BUG <script type’text/javascript’> var ie !-[1,]; alert(ie); //如果是ie&#xff0c;弹出true </script> 原因&#xff1a; 首先[1,]是个数组&#xff0c;由于有个逗号&#xff…

mysql命令导出数据库_MYSQL 数据库导入导出命令

在不同操作系统或MySQL版本情况下&#xff0c;直接拷贝文件的方法可能会有不兼容的情况发生。所以一般推荐用SQL脚本形式导入。下面分别介绍两种方法。MySQL命令行导出数据库1&#xff0c;进入MySQL目录下的bin文件夹&#xff1a;cd MySQL中到bin文件夹的目录如我输入的命令行&…

linux vmware 安装后无法桥接到物理网卡的解决办法

在linux下安装完vmware后&#xff0c;因为需要必须使用桥接网络&#xff0c;交接物理网卡总是显示could not connect /dev/vmnet0, 网上搜索了很多办法都无法解决&#xff0c;下面这个据说能解决&#xff0c;但还是不行&#xff0c;贴下来供大家参考&#xff1a;我安装了一下&a…

HDU2201

水&#xff5e; 分析&#xff1a;n&#xff0c;m。对于第一个人不抽到m号座位概率为&#xff08;n-1&#xff09;/n&#xff0c;第二个人为&#xff08;n-2&#xff09;/&#xff08;n-1&#xff09;.。。。第m个人为1/&#xff08;n-m1&#xff09;.。。。 相乘之后则为 1/n V…

字符设备驱动基础1——简单的驱动源代码分析

以下内容源于朱有鹏嵌入式课程的学习&#xff0c;如有侵权请告知删除。 参考博客&#xff1a;linux驱动开发&#xff08;一&#xff09; - biaohc - 博客园 一、驱动源代码示例 /********module_test.c代码*********/#include <linux/module.h> // module_init module…

mysql 数据检查_mysql数据一致性检查及修复

percona-toolkit-2.2.20-1.noarchmysql 5.6.29-logmaster:192.168.166.129slave:192.168.166.131一、创建数据库校验存放库CREATE DATABASE IF NOT EXISTS percona CHARACTER SET utf8;二、建立数据校验用户GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE ON *.* TO checksu…

字符设备驱动基础3——使用register_chrdev()函数注册字符设备

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、系统工作原理 1、工作流程 系统的整体工作流程是&#xff1a;应用层—>API—>设备驱动—>硬件。 操作系统提供的API包括open、read、write、close等函数&#xff0c;它们只是一种操作逻…

win7在未关闭vmware情况下直接关机,导致虚拟机无法克隆

今天有点小激动啊&#xff0c;着急关机&#xff0c;结果发现重启之后的虚拟机不能进行克隆操作。系统提示如下&#xff1a;the Specific Virtual Disk Needs Repair .查询“度娘”&#xff0c;突然看到一篇文章说&#xff0c;删除这啊&#xff0c;修改那的....特别复杂&#xf…