一、痛苦的來源
車道大魔王
我們公司作為專業的BIM團隊,做過的建築案幾乎都有地下停車場,需要建置車道模型。
如果你有在Revit建置過停車場的車道,一定知道這是十分麻煩的事情。因為在Revit裡面,只能使用樓板類型來塑型,然而有的車道不能說很難建,而是十分難建。車道需要考慮超高漸變,並且透過樓板子元素調整高程,除此之外,還有主車道邊邊與梁柱牆相接的介面,這些「畸零地」的高程點也需要計算出來,這樣整體的外觀才不會有破損。總之呢,車道建置可以說是建築建模(不包含機電)中,最煩人最耗精神的一件事。

零零散散的畸零地,每個點都要一個一個計算高程

然而事情迎來轉機,前陣子在我們的努力下,我們順利用Revit API開發出了自動建置車道神器,只要輸入一些參數在按個按鈕,Do Re Mi So-車道直 接 出 現,從此我們過上幸福快樂的日子…
:這甚麼魔法?
:想學啊你,我教你啊
二、怎麼實現
首先了解一下手動建置的步驟:
- 依照2D圖的車道中心線,把樓板的邊界畫出來
- 修改子元素,把分段的線畫出來
- 直線用複製的
- 曲線部分用弧線確認中心線位置,在與曲線中心點連線和延伸
- 依照車道輪廓建出樓板,再修改子元素,把分割線和點加上去
- 算出每個分割段的高度和超高
- 把超高輸入到點上
- 如果有畸零地的話,雙手合十,祈求上天要依照每個分段的超高斜率推出每個畸零地的點的高程
幾何原理
接下來讓我們了解一下這個3D空間的幾何,因為以上需要計算的地方會用到大量的三角函數、插值公式還有向量🫠

請各位欣賞我精心繪製的解說圖
基本上所有計算都離不開這張圖的概念,主要目標就是要算出每個分段的x1、x2的xyz座標,x0是已知的。只要知道你的分段的超高以及車道寬,你就能得到x1和x2的高程(z座標),而xy座標的話則是由圓弧中心點和x0為向量,計算出x1和x2的xy位置。如果很不幸地有畸零地,恭喜你要加碼算出x的座標,計算的方法八九不離十。而且畸零地的點很大機率不會剛好跟分段線有相交,這時候x0是未知,只能先從圓弧中心點和圓弧的交點得到x0,再依照上面的邏輯去算。
這邊是十分精簡的解說,各位手邊如果有筆可以自己算算看喔 誰會啊…
程式實作
知道了建置步驟以及幾何原理後,就是快樂的coding時間了呢~ 把這些步驟還有概念用Revit提供的API實作出來😊
礙於時間的關係,我來不及寫得更詳細,但是大概是這幾個步驟:
- 取得車道中心線,將分段的線組合起來,並且標示頭尾
- 依照中心線,複製出左右兩條車道線
- Curve.CreateOffset(W/2, 法線座標) 得到沒接在一起的線
- 線跟線之間要連在一起(trim)
- Curve.Intersect 取得相接點
- 取得Curve
- 取得接在一起的左右兩條線
- Curve.SetGeometryCurve 繪製每個虛擬線
- 線跟線之間要連在一起(trim)
- 切割出分段,算出每個分段點的中心、左、右點的高程 (最麻煩的部分)
- 對線段Curve.Evaluate()得到分段的中心點
- 算出每個點的xyz座標
- 用這些座標去建立車道輪廓和子元素
- 組出CurveLoop,Floor.Create依照輪廓建立
- SlabShapeEditor.DrawPoint 輸入每個座標,取得SlabShapeVertex子元素
- SlabShapeEditor.DrawSplitLine畫線
- 有畸零地的話,建立車道分段延伸點
- 建立畸零地邊角的點
三、主委加碼 – 自動車道剖面建置
後來我們又開發出了自動車道剖面建置,不過這又是另外一個故事了…我只是想給你看一下…









