各位先進在實務上應該常遇到需要剖面車道的情形,而在台灣由於土地大小、形狀限制及車位數量要求,常見車道設計會有圓弧形出現,而 Revit 內建的剖面功能並沒有辦法繪製弧形剖面,因此許多人不知道該如何產出車道剖面圖,一般容易想到的方法就是使用多段直線剖面來進行拼接,以積分概念來說,只要你的線段足夠多,就會趨近於弧形剖面,但是在繪製直線剖面時,起始點及結束點位置卻又沒有鎖點功能,導致要非常正確的拼接出車道剖面有些困難,在兩個直線段剖面接合邊緣常出現車道線條銜接不上的問題,那麼該如何解決這個問題呢?
其實使用 Dynamo 以參數化方式自動產生多個線段剖面,就能確保前段剖面之結束點及後段剖面之起始點位置相同,使各線段剖面能夠順利拼接,解決前述問題,接下來就讓小編來分享一下 Dynamo 車道剖面程式的設計概念、邏輯及方法吧。
一、學習的事前準備
- Revit
這個是必備的吧,版本只要能夠執行Dynamo即可,文內使用的模型檔為2021版的。 - Dynamo
這個也是必備的吧,由於基本上使用原生節點,因此版本影響應該較小,不過舊版的仍有可能缺少部分原生節點,因此仍可確認一下版本,文內介紹所使用的版本為2.5.0,算是2代內較為舊版的。 - 學習的心
這個其實也不一定是必備的啦,跟著內文步驟做也可以做出堪用的程式,但是如果不是學習並了解其概念、邏輯與方法,當Revit或Dynamo版本變更而導致無法使用時,您也不知道該如何修改不是嘛,當然也是可以直接將專案委託給我們,或是委託我們協助開發程式,都歡迎與我們聯繫喔!
二、Dynamo 實作
設計概念
本設計主要概念是依據弧線長度進行平均分割,並計算各分割點位置,將分割點做為各線段剖面之起始點與結束點位置,由於使用系統計算之數值進行設定,因此剖面頭尾位置銜接必為同一點,前後剖面銜接就不會有問題。
Dynamo 實作
接下來我們就馬上開始 Dynamo 實作,各節點名稱可以直接參考圖片內的節點上方名稱,為了方便各位學習與搜尋,皆使用原始名稱,無做任何修改,直接於左側節點瀏覽器的搜尋欄輸入相同名稱即可找到該節點。

- 繪製弧線
首先需要於模型中繪製一條弧線來讓程式知道弧形車道的起始點與結束點,程式執行完之後就可以刪掉了,使用模型線或細部線都可以。 - 取得弧線資訊並進行分割長度計算
接下來進入 Dynamo 建立第一部分區域節點,上圖從左開始第一個節點 Select Model Element 功能為選擇元素,點選節點內的變更按鈕即可選擇元素(也就是我們前面繪製的弧線),第二個節點為 CurveElement.Curve,其作用為取得這個元素的曲線,第三個節點為 Curve.Length,功能為取得曲線長度,下方 Number 節點為一個可輸入的值,用以告訴程式曲線要分割的剖面數量,這邊我們範例值輸入 10,在圖的最右側為一個運算用節點,功能就是將輸入的 X 值除以 Y 值。
3. 利用分段長度計算剖面起始點及結束點位置

第二部分區域節點,起始點與結束點的建立方式相同,各由兩個節點組成,一個是 Code Block ,這也是這個程式唯一使用到的自行編寫程式碼節點,不過也不難而且非常短,須注意在程式邏輯內,所有的編號數字都是由0開始,程式碼與各點編號示意圖如下。
結束點的程式碼:1..X( 從第1點到第X點,X值由前方分割數量輸入 )
第一個剖面就會是從第 0 點到第 1 點,第二個剖面就是從第 1 點到第 2 點,以此類推。

第二個節點則是簡單的運算節點,功能就是將輸入的 X 值乘以 Y 值,X 值使用前面計算的分割長度,Y 值則使用第幾點,相乘即可得到該點從起始點計算之長度,其計算結果如下圖。

4. 依據計算結果取得各點座標

這個區域只有一個重要的節點 Curve.PointAtSegmentLength,其功能為沿著曲線取得特定弧長度中的點資訊,在這裡我們需要的是點座標,輸入值的 Curve 由第一區域的 CurveElement.Curve 節點提供,SegmentLength 由第二區域的計算結果提供,一樣分為起始點與結束點。
5. 專案座標系統與剖面座標系統差異
在專案座標系統內,以平面視圖之東西向為其 X 軸,以平面視圖之南北向為其 Y 軸,以高程為其 Z 軸,但是在剖面的座標系統則是以其剖面視圖之左右方向為 X 軸,以剖面視圖之上下方向為 Y 軸,以其視圖深度為 Z 軸,因此我們必須透過下一個區域進行座標系統的轉換,將前面取得的點座標轉換為剖面座標系統,其座標系統之間差異可參考下圖。

6. 建立剖面座標系統

在了解剖面座標系統與專案座標系統的差別之後,我們接下來學習一下如何建立剖面座標系統,首先剖面座標系統X軸為起始點往結束點方向,因此使用 Vector.ByTwoPoints 這個節點,以兩點座標產生之向量做為剖面座標系統 X 軸,剖面座標系統 Y 軸與專案座標系統 Z 軸剛好是一樣的方向,因此直接使用 Vector.ZAxis 這個節點,使用專案座標系統Z軸向量,做為剖面座標系統 Y 軸,而最後的剖面座標系統 Z 軸則沒有參照物或點座標可以使用,因此這邊需要一個簡單的數學概念,X 軸與 Y 軸的乘積即為 Z 軸方向向量,我們已知剖面座標系統之 X 軸及 Y 軸,就可以使用Vector.Cross 這個節點來取得 Z 軸向量。
有了剖面座標系統 3 軸向量後,就可以使用 CoordinateSystem.ByOriginVectors 這個節點來建立剖面座標系統,Origin 輸入第三個功能區域的起始點 Curve.PointAtSegmentLength的節點座標值,X 軸、Y 軸及 Z 軸分別使用前面建立的剖面座標系統 3 軸向量。
7. 建立剖面

建立剖面我們使用 SectionView.ByCoordinateSystemMinPointMaxPoint 這個節點,這個節點功能為依據剖面的 BoundingBox 的最小值與最大值的點建立剖面,這個功能需要輸入三個參數,第一個參數叫做 cs,cs 就是 CoordinateSystem 的縮寫,也就是輸入前面第四個區域建立的剖面座標系統,另外兩個參數分別為 minPoint 及 maxPoint,此節點建立剖面之概念可參考下圖。

而 minPoint 及 maxPoint 參數,則使用 Point.ByCoordinate 節點,依據使用者輸入之 X、Y、Z 值,建立點座標,根據前面的 BoundingBox 示意圖可知,由於使用起始點做為剖面座標系統原點,因此在 minPoint 之 X 值及 Z 值皆為 0,Y 值輸入剖面想看到的最低點高程,maxPoint 之 X 值則使用 Vector.Length 這個節點取得前面的剖面座標系統 X 軸向量的長度,Y 值輸入剖面想看到的最高點高程,Z 值輸入視景深度。
三、實務使用
完成整個 Dynamo 的建立之後,只要執行 Dynamo 即會產出設定好的分段剖面,接著只要將這些剖面放進圖紙裡面拼起來就可以了,由於剖面框高度都由輸入之參數決定,所以剖面高度都相同,很容易對齊,還能進入剖面標註尺寸、淨高以及斜度。


以上就是本次分享的所有內容啦,本文採用 Dynamo 原生節點,並以最簡單的實作方式分享給大家,希望各位都能學會並且順利實作出來,不過程式有趣的地方在於同樣的需求可以有許多不同的做法,本文只是介紹其中一種,我也看過許多不同做法的弧形剖面,有些做法可以設定的參數非常多,包括視圖比例、視圖方向等,Dynamo 也有許多人發布節點擴充套件,讓你使用更方便的節點來編輯你的程式,各位透過這篇文章學會了基本的做法之後,也可以試著使用自己的做法來做出屬於自己的弧形剖面 Dynamo。
本公司實際使用的弧形車道剖面 Dynamo 也對於 UI 及 UX 有進行大幅度的優化,輸入各項參數值較為直覺及人性化,部分參數可由程式自動抓取,可以將分段剖面於圖紙內自動拼接完成,不過由於篇幅關係無法詳述,這個系列如果還有續集,或許會再分享給大家,至於會不會有續集,就靠各位先進多多支持了,幫我們按讚以及分享一下,老闆覺得迴響不錯,就比較有可能會有續集啦,或是各位如果有其他想要了解的內容,希望我們介紹的,也可以私訊本公司各社交平台帳號,或在貼文下方留言,最後再次感謝各位的閱讀,如果有需要任何服務歡迎與我們聯繫。
本圖文內容受中華民國著作權法保護。未經本公司及著作人之同意或授權,任何人不得逕自使用、修改、重製、公開口述、公開播送、公開上映、公開演出、公開傳輸、改作、散布、公開展示、發行、公開發表、進行還原工程、解編或反向編譯。
為推進學術研究發展,同意個人學術研究與教學之用途,引用時請加註「資料來源:萊茲特資訊科技股份有限公司」,並以超連結或QRcode方式連結本文網址。
版權所有 © 2023 萊茲特資訊科技股份有限公司
Copyright © 2023 Lyztw Inc. All rights reserved.