close

前陣子在Dynamo Design FB社團裡面大家有討論到關於Revit房間標籤的問題,後來Orval Tien大哥也提供了很棒的解法!有興趣的朋友可以到社團裡面尋找!
而我這篇筆記則是想起從前瀏覽過一個Revit +Dynamo部落客的房間標籤操作,於是決定把他的操作方式整理記錄起來!
這位高手的名字是HyunWoo Kim,他的Blog相信很多人都知道,也就是Enjoy Revit!

以下內容的原始說明文章: Room Size Indicator

那麼就來看我的整理記錄吧:

  • 當然我們需要有Revit專案,並且放置好房間。

  • 接著當然是打開Dynamo,把房間弄進去拉!複習一下,Categories選擇Rooms之後,連接All Elements of Category就會把所有類型==Rooms的元素給找出來了! 以Element.Geometry的方式將房間轉換成Dynamo內的幾何量體。

  • 接下來這邊用了一個有趣的方法!BoundingBox,以房間的幾何量體轉換成BoundingBox再來搜尋最小點,先看一下結果圖片。

  • 似乎還是不太明白!!(自己承認…XD),來各個擊破! 先挑出其中一個房間量體來看,Element.Geometry–>BoundingBox.ByGeometry –>BoundingBox.MinPoint and BoundingBox.MaxPoint ,最後找到兩個點,如下圖內標籤[0][1]。

  • 原來是為了找到這些房間量體"某種形式的點",那麼我們回到剛剛前面做的兩件事情,1.把Room拉進Dynamo 2.把這些房間量體的BoundingBox.MinPoint找出來,到這個步驟的結果應該像這樣↓。

  • 接下來的步驟很有趣,重點還是用Geometry.Intersect,將房間元素(Rooms Elements)與BoundingBox.MinPoint的Z方向參考平面交集,於是就能產出各個房間的平面元素了!然後用Surface.PerimeterCurves將每個平面元素的Curve找出來,準備下一步使用。

  • 每個平面元素的Curve會有四條,以List.Map的方式可以分別取出兩條,再Curve.Length抓出長度,並且四捨五入。

  • 長度物件以String from Object轉換成字串(String),用String.Remove刪除多餘的字符,並且加入"x",整合成"___x___"的成果。
  • 上述的方式是將房間的兩個邊取出來,算得長度之後轉換成文字的型態表現,而先前Orval Tien大哥則是透過數學的方式找出長方形的長X寬,也就是L1長=(周長+Math.Sqrt(周長*周長-16*面積))/4;L2寬=(周長-Math.Sqrt(周長*周長-16*面積))/4。

  • 判斷是否為矩形的方法,這個方法很不錯,首先我們找到每個房間的Curve.StartPoint(也就是房間幾何形狀的端點),再用Rectangle.ByCornerPoints的方式建立矩形,但是無法正確形成矩形的房間就會變成null,最後Object.IsNull將非矩形的單元顯示成TRUE,再用==將這個單元變成FALSE,結論就是成功找出"非矩形房間=FALSE"。

  • 使用Python將 1.是否為矩形的布林結果(boollist) 2.每個房間的長寬值字串 3.字串:房間非幾何矩形。while inx<cnt成立的意思就是1.boolist IN[0]不等於0,再回推到前面的矩形判斷法,非矩形的房間就會加上IN[1]的輸入內容,而矩形的房間則加上IN[2]的內容。

  • 最後就是將參數結果設定到Revit 的房間標籤上,Element.SetParameterByName,而其中的ParameterName需要來自於專案的專案參數,而標籤設定需要來自共用參數,如此就能正確設定了!

  • 共用參數的部分就是設定一個"文字"類別的參數,並且在房間標籤的標註內加入共用參數"RoomSize",完成之後再回到專案內設定專案參數,將RoomSize帶入房間類別。

  • 最終結果就如下圖顯示, 1.房間名稱 2.房間面積 3.房間編號 4."長度x寬度"或是"房間非幾何矩形"。
  • 番外篇,除了長度x寬度與"房間非幾何矩形"之外,我們也可以加入常用的"坪數"標註,只要將面積*0.303帶入新的房間標籤參數即可。
arrow
arrow
    全站熱搜

    ChiMing 發表在 痞客邦 留言(0) 人氣()