close

這是之前在wechat上朋友提出的一個問題,不過他畫的是單線的系統,

如果是單線的系統應可用軟體內的pipe line之類的串接起來排序,

跟之前用model line排序的原理相當,

但是機電系統不可能是單一線路一筆到底的,所以我們模擬一下可能的狀況,接近下圖。

m1.jpg

 

所以目前需要把這個空調系統連接上的管、設備、茷件等等都排序給予編號。

通常這類要從RV中依據特定物件給予資訊的,開始打開DY後要去找可以抓RV物件的結點,

常使用的不外乎是All Elements of Family Type或者All Elements of CATEGORY之類的。

如果要抓房間、門窗等單一品類的可以這樣作,但一個機電系統是複合品類,

所以這樣作要用好幾個結點來撈(管、彎頭、筏件,設備..)

 

1.所以我們這邊改用另一個結點"All Elements In Active View",抓取目前視窗中的物件。

來獲得要匯入DY的物件清單,

另外用SELECT MODEL ELEMENT的方式來抓取起點。

m2.jpg

2.因為在畫面上的物件很多,所以我們用GROUP BY KEY的方式來分組,

分組的方法是依據系統名稱的值,所以機電的系統會一個一個分開,

建築的物件因為沒這個欄位,所以也就不需要去篩選建築品類了。

 

.m3.jpg

3.用系統名稱來分離的問題是會有一筆MECHANCALSYSTEM的資料在內

(就是系統的資訊),這筆因非實體資訊,所以要用LIST.FILTER的結點篩選,

另外這個值在CATEGORY裡面找不到,所以這是用一個A[X][Y]的方式把這筆資料提出來,

這個作法有其問題,就是每次都要先看這筆的排序,說不上是好方式,只是能解決目前需求。

 

m4.jpg

4.起點物件的部分就簡單多了,SELECT MODEL之後,

用FamilyInstance.Location的結點求取座標。

因為這邊是要用物件與起始點的距離作為排序的準則,

所以兩邊要分別取出放置點或者形心的POINT(XYZ)值。

m5.jpg

5.系統內要排序的物件不能使用FamilyInstance.Location的方式(黃的),

因為風管等品類並沒有放至點的概念,所以我們這邊用另用一個作法,

先用Element.Geometry將物件的圖形取出,因為這邊都是3D實體物件,

所以取出實必然是SOLID,接著再來求形心。

因為某些設備包含複數的SOLID,所以使用一個LISTMAP配合LIST FIRST ITEM

的結點來取出各清單中的第一個物件,

這邊也有其他的方式好處理,這個作法的好處是同時把原本巢狀LIST作一次展開。

接著接上solid centroid,就把原先所有的物件全轉換成point(xyz)座標值了。

 

m6.jpg

6.接著分別把起點座標與各物件座標分離出xyz值並相減,

這樣就得到所有物件與起始物件的各軸向距離,

這邊用codeblock point.x.....等可以寫得比較簡潔。

 

m7.jpg

7.這邊先用一個math.abs就是│x│的作法來使所有值皆為正(距離),

然後把xyz值相加,利用list.sort來作由小到大的排序,

接著使用List.AllIndicesOf這個節點,

這個結點是匯入某個item,會回報這個item在list的位置,

所以我們以第一筆的22054來說,他在大小排序上就排到[16],

也就是距離起點第17個物件。

m8.jpg

8.接著這邊就很簡單了,因為是巢狀清單,所以先作一維展開,

然後要將值填回到物件的註解中必須是文字,

所以用string from object來作轉換,

最後一顆set parameter的電池常用就不說了。

 

m9.jpg

10.成果就如下圖示意,當然可以用把系統的前綴詞加入,

或者是依據設備類型給與代碼。不過這邊只是作簡單的操作流程說明,

就不搞得那樣複雜了。

所以在系統中很多要求物件距離某個點作排序編號的,

如車位等也都可以用類似的概念來操作,

當然系統中也有Geometry.DistanceTo可求出物件間距離的結點,

但是結果會跟形心有差異,留在下篇來討論。

m10.jpg

 

 

 

 

arrow
arrow
    文章標籤
    DYNAMO 建築資訊模型 revit
    全站熱搜

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