python 建筑计算_制图小技巧:巧用Python和ELK瞬间完成总图建筑名称标注
哎呦,又到了每周一次的制圖教室啦。經(jīng)過前面兩次制圖教程的分享,相信大家對于白模填色和寫實渲染這兩種表達方式肯定有了較好的掌握。
那么今天我們就轉(zhuǎn)戰(zhàn)制圖技巧篇,和童鞋們聊一下總平面圖中的建筑名稱標注問題。
對于總平面圖,各位應(yīng)該都知道,我們除了對于建筑,場地,道路等等圖面元素的繪制之外,另外一個必不可少的過程就是對于周邊已有建筑(場地)名稱的標注(比如上圖中黑色文字)。特別是對于城市中的設(shè)計,比如一些老舊城區(qū)的改造項目,因為周邊已有的著名建筑較多,往往我們在總平面中需要進行很多名稱標注。
而大部分童鞋對于名稱標注的方法,應(yīng)該都是圖紙繪制好了之后,在PS或者AI這樣的一些平面軟件中進行逐一的繪制,這種方法本身沒有什么問題,但是如果需要標注的建筑名稱很多的話,這樣無疑是一種比較低效的方法。
而目前在建筑行業(yè),大家都在強調(diào)智能化和批量化,那么對于建筑名稱標注這樣一個簡單的需求,我們能不能同樣的通過一些手段實現(xiàn)智能化的高效操作了?這個就是我們今天制圖技巧講解的重點。
STEP 1
場地繪制
當然在進行標注之前我們首先要繪制場地,對于高效繪制場地的方法,相信各位制圖教室的讀者應(yīng)該都非常清楚了,就是使用ELK這樣一款GH插件,可以通過導(dǎo)入的OSM數(shù)據(jù)直接在Rhino中生成場地。
具體操作大家可以參考LAC往期的文章SITE ANALYSIS:從ELK到AI的工作流.
這里就不再贅述了。因為這次我們主要說的是后續(xù)的智能標注,所以我們就選擇一個已有著名建筑最多的地方——帝都的故宮,在openstreetmap上選擇北京,找到故宮,導(dǎo)出OSM數(shù)據(jù)。
在grasshopper中,使用file path 打開OSM文件,結(jié)合ELk的location和OSMData運算器,通過右鍵點擊OSMData運算器選擇不同的類型我們可以非常快的獲取所需類型的位置點,使用polyline鏈接成線。
對于故宮這樣一個場地的總平面,我們一般需要繪制的類型有building,highway和waterway。復(fù)制兩份,設(shè)置不同的Feature Type就可以了。
到此為止,我們就完成了大家都非常熟悉的場地繪制了,下面我們就要進入第二環(huán)節(jié),智能標注。
STEP 2
智能標注
對于標注,首先還是需要求助于我們的ELK運算器。因為這里面主要是建筑名稱的標注,所以我們把道路和水系放在上面,重點關(guān)注我們的建筑。
那么這個時候大家需要仔細看下我們的OSMData運算器,除了用于生成點陣的W端,我們還有一個一直被忽略的K端,那么它是干什么的了?
通過鏈接Panel,我們可以發(fā)現(xiàn)K端包含的是每個建筑的建筑信息,并且在每個樹狀數(shù)據(jù)的第二項(Index為1),就是我們需要的建筑名稱。
那么我們直接使用List Item,提取每組數(shù)據(jù)中的第二項(Index為1),就獲得了如下圖中的所有建筑的名稱。
之后,按照大家的想法,我們只需要把建筑的名稱在圖紙上標注起來就可以了。使用Text Tag 3D運算器將文字標注在每個建筑中心處,通過S端我們可以改變文字的大小。
當然大家如果想對于文字位置進行調(diào)整的話,我們可以對中心坐標進行修正(比如減少X值使其居中)。
那么這樣我們就智能的批量完成了文字的標注,但是我們的任務(wù)真的圓滿完成了嗎?答案是遠遠沒有。
對于目前的文字標注,主要有三個問題:
1:重要建筑的確是成功的將名稱標注上去了,但是對于附屬建筑,標注的結(jié)果卻非常奇怪,出現(xiàn)了類似于building yes之類的東西。并且大家繪制過總圖應(yīng)該知道,我們真正需要標注的是重要的已有建筑,對于一些無關(guān)緊要的建筑我們是不需要標注的,而目前模型中所有的建筑無論是否重要,都有相應(yīng)的標注。
2:即使對于正確出現(xiàn)名字的重要建筑,顯示上是name:名稱這樣的一種形式。相信大家在繪制總平面的時候應(yīng)該沒有人會在標注前面加一個‘’name:‘’吧。所以這里同樣需要修正。
3:對于建筑圖紙,我們是十分重視最終的圖面效果的,文字標注同樣如此,而目前我們的標注只能使用系統(tǒng)默認的字體,這與我們對于圖紙外觀的需求是不符合的,最好我們可以在Rhino中直接自定義標注字體。
所以對于目前的標注系統(tǒng),我們還是需要進行后續(xù)的修正。
STEP 3
標注修正
針對上面提出的三個問題,我們一個個來看。首先第一個問題,附屬建筑的標注問題。
首先我們需要明白為什么會有這種標注的問題,通過仔細觀察鏈接的panel,我們發(fā)現(xiàn)原來是因為有些建筑并沒有name信息,而在index為1的位置出現(xiàn)了其他的一些信息。這導(dǎo)致了如果我們直接使用list item提取第二項的話,會提取出來很多錯誤的信息。
那么知道原因之后,我們就要想辦法對它進行修正了。最直觀的處理方法應(yīng)該是是如果第二項(Index為1)位置上不是name信息的話,我們就把他清除掉。那么如何進行這樣一個判斷和清除的操作了?
像這種對于數(shù)據(jù)直接的處理,雖然使用GH同樣可以完成,但效率和便捷程度是遠遠弱于代碼的,所以我們在這使用Python語言來完成這個操作。
打開GH Python,把輸入的index=1的數(shù)據(jù)拍平。GH Python運算器的輸入端設(shè)為list access.
之后雙擊GH Python,進入編碼區(qū)域,我們先假設(shè)我們處理好的數(shù)據(jù)為a。將a設(shè)為一個空的列表[]。
之后我們先考慮一下如何判斷。通過之前的觀察我們知道正確名稱的格式是“name:名稱”,那么在這我們可以使用一個非常討巧的方法,我們通過判斷第一個字母是否為n進行篩選,是n的話保留,不是n的話刪除(把一個空值賦予它)。
首先通過一個循環(huán)遍歷所有元素。
如果每一項的第一個字母不是n的話,把這一項設(shè)為空值(等于刪除)
把i值追加到a列表中(使用append方法)。
點擊Test,使用panel鏈接輸出的a端,我們可以看到所有不符合要求的數(shù)據(jù)都被清除了,通過短短幾行的代碼我們就實現(xiàn)了一個數(shù)據(jù)判斷和修改的操作。
那下面我們來解決第二個問題,把那個煩人的'name:'的前綴刪掉。這個操作通過Python同樣非常簡單。
我們再使用一個GH Python運算器,還是先用循環(huán)來遍歷元素
轉(zhuǎn)化為字符串后我們只保留從第六個開始的元素。把修改后的元素同樣通過append方法加到a列表里面去。
當然對于這一步如果大家對于Python字符串沒有任何了解的話可能會有一點的困惑,所以我們在這簡單說一下Python字符串的事情。
比如我們在Python里面以我的名字洪宸創(chuàng)建一個字符串a(chǎn),字符串里面每一個字母都對應(yīng)著一個元素。(大家可以把這個字符串看做一個GH中的列表,里面每個字母是一個對應(yīng)的物體,H是0項,o是1項,n是二項等等)
知道這個之后,對于name:名稱這樣一個字符串,我們只要從第6項開始截取就可以只獲得后面的名稱啦,所以在這里i=i[5:].
我們看一下修改后的結(jié)果。
鏈接到Text tag端。我們可以發(fā)現(xiàn)附屬建筑不再具有標注,并且重要建筑的標注只有其名稱。
最后我們解決最后一個問題,字體的問題。對于字體的自定義控制我們需要借助一個非常著名的GH插件叫做Human。在這里我們只需要使用到Human的兩個運算器:Fonts和Text3d.
Fonts實際上是把電腦中所有的字體調(diào)入到GH中,我們可以通過list item運算器來選擇自己的喜好的字體。
之后我們需要連接Text3d運算器,Human的Text3d實際上相當于一個GH原有的Text3d的加強版,多了很多可以自定義的輸入端,比如字體的F端。所以連接方式也與原來的tag基本一致,我們只需要多連接一下控制字體的F端。
最后大家只要把這些生成的名稱和其他Elk生成的建筑,道路,水網(wǎng)一起bake到Rhino相應(yīng)的圖層中,再倒入到AI中修改線寬就可以啦。不過倒入的時候小伙伴們需要注意下,直接使用AI格式導(dǎo)入的話,AI對于文字的識別會出現(xiàn)亂碼,我們需要將Rhino物體導(dǎo)出為CAD文件,再導(dǎo)入進AI。
最后總結(jié)一下本次教程的重點:
1:Elk OSM Data運算器的 K端為建筑信息,包含主要建筑物的名稱。
2:使用GH Python對于建筑名稱信息進行篩選和修正
3:使用Human插件,自定義字體,生成標注
3:將bake好的Rhino物體以CAD格式導(dǎo)入AI進行后續(xù)的調(diào)整。
總結(jié)
以上是生活随笔為你收集整理的python 建筑计算_制图小技巧:巧用Python和ELK瞬间完成总图建筑名称标注的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 民企信息化建设个人经历(一)
- 下一篇: 2 分钟玩转 Apizza,轻量级 AP