文為科技有限公司 Win Way Technology CO., LTD.

【文為科技】技術資料-柱鋼筋計算

一、計算流程圖





二、針對各流程圖細項說明

1. 計算各柱的座標點及012


1-1. 找出此柱的參考柱List  --- setlPillarRef()

(1) 從此柱的最底層開始往上找參考柱。

(2) 先將最底層的柱寫入lPillarRef[0],而後開始往上找。

(3) 上層的柱拿來與剛寫入lPillarRef的柱子做比較。

      如果長寬相同 且 組合點相同 且 柱主筋外層支數相同 且 柱主筋內層支數相同 => 跳過

      如果長寬不同 或 組合點不同 或 柱主筋外層支數不同 或 柱主筋內層支數不同

       => 寫入lPillarRef,成為下一個參考柱

(4) 此柱從最底層開始,至此柱最頂層結束,迴圈第(3)步驟,得到此柱的lPillarRef。

(5) 每寫入一支參考柱,馬上計算參考柱的座標點。

       --- getOutInXy012ForPillarRef()

     

      (5-1) 得到此柱psd對應的 X側間隔數量 及 Y側間隔數量  --- getlOutSpaceNum()

      => 如果得出X側只有一個間隔,若符合條件,要修正為兩個;Y側減少一個。

      => 如果得出Y側只有一個間隔,若符合條件,要修正為兩個;X側減少一個。

      註: 條件是該側大於30cm

      => 至少要勾一支繫筋,所以間隔要兩個,才能擺放一支主筋。

      (5-2) 不計角落四支主筋

      => X側可擺放的鋼筋數量 = X側間隔數量 - 1

      => Y側可擺放的鋼筋數量 = Y側間隔數量 - 1

      (5-3) 可得X側及Y側的鋼筋中心距

      => X側鋼筋中心距 = modX / X側間隔數量

      => Y側鋼筋中心距 = modY / Y側間隔數量

      重要: 此處計算的是外層主筋的X側間隔數量及Y側間隔數量

            => 因為要以外層的位置來擺放外層主筋及內層主筋。


      (5-4) 先擺放外層上側外層左側座標點,座標點位的順序如下左圖。

      (5-5) 複製外層上側座標點給外層下側;複製外層左側座標點給外層右側

                座標點位的順序如下左圖。

      (5-6) 外層座標點偏移產生內層座標點,如下右圖。

      註: 偏移量為 = 鋼筋直徑 + 3.2cm

 


     (5-7) 外層鋼筋從右上角開始212121....逆時針給定奇偶值,以下圖為例。

                外層上側[2, 1, 2, 1, 2, 1];外層左側[2, 1, 2, 1, 2];

                外層下側[1, 2, 1, 2, 1, 2];外層右側[1, 2, 1, 2, 1]

      => 奇偶值要按照座標點位的順序排列後,才存入奇偶值的List裡面。以下圖為例。

                外層上側[2, 1, 2, 1, 2, 1];外層左側[2, 1, 2, 1, 2];

                外層下側[1, 2, 1, 2, 1, 2];外層右側[1, 1, 2, 1, 2]

 


     (5-8) 內層鋼筋從右上角開始121212....逆時針給定奇偶值,以下圖為例。

                內層上側[1, 2, 1, 2, 1, 2];內層左側[1, 2, 1, 2, 1];

                內層下側[2, 1, 2, 1, 2, 1];內層右側[2, 1, 2, 1, 2]

      =>  奇偶值要按照座標點位的順序排列後,才存入奇偶值的List裡面。以下圖為例。

                內層上側[2, 1, 2, 1, 2, 1];內層左側[1, 2, 1, 2, 1];

                內層下側[2, 1, 2, 1, 2, 1];內層右側[2, 2, 1, 2, 1]

      (5-9) 依照內層的鋼筋支數來刪減座標點及012。

      =>  如果內層鋼筋沒有資料,內層的座標點及012全部清空。

      =>  如果內層鋼筋有值,計算出內層X側主筋數量內層Y側主筋數量。  

              --- getlInSpaceNum()

      註: 得到內層兩側主筋數量,再用sublist刪減座標點及012。

如左圖例: 內層鋼筋有10-#8

(1) 先扣除角落4支 (10 - 4 = 6)

(2) 剩六支平均擺放4側(6 / 4 = 1 ... 2)

(3) 每側各擺一支

(餘數只可能是0或2,因為主筋數目皆為偶數)

      若餘數為0 => 平均擺放4側

      若餘數為2 => 多出來的2支放在短邊側。


1-2. 每個參考柱的座標點與上一個參考柱的座標點相比

(1) 全部的lPillarRef迴圈,每個參考柱(pRef2)都跟前一個參考柱(pRef1)比較。

(2) 把pRef2的每一個座標點拿出來迴圈,跟pRef1的座標點list比較。

(3) 將pRef2的座標點傳入getlIndexInTolRange()

      (3-1) 如pRef1中有座標點與傳入點 的距離小於容許值,回傳pRef1的座標點index。

      => 座標點(pRef1中)已經取代過pRef2的某一點,要寫成null

      => 防止其他pRef2的座標點找到他。

      (3-2) 如沒有,回傳[-1, -1]。

      => 此pRef2的座標點對應的012值與pRef2內前一個座標點的012值比較

      => 若相同,要改成不同,奇偶值才能交錯排列。

註: 容許值 = min (X側鋼筋中心距, Y側鋼筋中心距, 7.5cm) ,因為在算pRef,所以以pRef2為準。

如下圖例:

前一個參考柱(pRef1)

外層主筋: 28-#8                內層主筋: 12-#8

目前參考柱(pRef2)

外層主筋: 22-#8                內層主筋: 10-#8

(1) 若此座標點(綠色底)能在前一個參考柱pRef1的座標點中找到與之相距容許值內的座標點;則將紫色的座標點位及012複製給綠色座標。

(2) 沒有規定紫色下側座標點只能取代綠色下側座標點;紫色下側座標點也能取代綠色右側座標點。紫色內層座標點也能取代綠色外層座標點。只要相距容許值內都可以取代

1-3. 計算每層的鋼筋座標點

(1) 此柱的各樓層柱迴圈,從此柱的最底層開始,至此柱的最頂層結束。

(2) 將迴圈中的p柱傳入getOutInXy012ForEach()

(3) 判斷傳入柱p是否為參考柱。

      (3-1) 若為參考柱,其座標點及012已算過,直接return。

      (3-2) 若不是參考柱,找尋傳入柱p在哪兩個參考柱之間。

      => 代表此柱的參考柱為下面那個參考柱,將參考柱的座標點及012複製給傳入柱p。

註: 目前是考慮外層主筋及內層主筋的數量都要相同,才不會成為參考柱。所以可以不用sublist座標點及012(getOutInXy012ForEach()程式碼中的1-4-3、1-4-4可不用,之後可刪除)。

重要: 步驟1-3只是把參考柱的座標點及012複製給主筋支數相同、組合點相同、長寬相同的柱! (只剩下這些柱還沒有座標點及012)

2. 產生VB及柱鋼筋


2-1. 得到此柱的llBarHeight  --- getPillarBarHeightList()


(1) 定義此柱各樓層的奇偶筋有沒有續接(llcoupler)  --- Pillar.getllcoupler()。

      (1-1) 給定各樓層的預設值。

      => 地下層全部預設 [True, True]   ( 以下敘述簡稱 [T, T] )

      => 地上層預設 [True, False]  或 [False, True]   ( 以下敘述簡稱 [T, F] 或 [F, T] )

             從1F的上一層開始[T, F],再上一層 [F, T],再上一層[T, F],到總樓層的最頂。

             [T, F] 及 [F, T] 交互排列。

      => 一樓預設 [T, T]

      => 此柱的最底層預設 [False, False]   ( 以下敘述簡稱 [F, F] )

      => 此柱的最頂層預設 [Null, Null]   ( 以下敘述簡稱 [N, N] )

      => 將最底層以下的樓層預設 [N, N]

      => 將最頂層以上的樓層預設 [N, N]

      (1-2) 判斷 (i樓層柱高 + i+1樓柱高) 是否超過使用者限定的鋼筋長度(ex.預設值9m)

      => 超過9米,要加續接器,將 i+1樓改成[T, T]。

註: 此llcoupler的長度是固定的,總樓層數有幾樓就幾個,不會因為柱延伸的樓層比較少而變少。以商旅案為例,總樓層數為8層樓(iFloor=0~8),不管計算哪一個柱,該柱的llcoupler.length = 8。

(2) 計算llBarHeight (不含此柱的最頂層) 如流程圖所示

(3) 計算llBarHeight (此柱的最頂層) 如流程圖所示

2-2. 產生VB  --- Pillar.createVirtualBox()

(1) 先得到可以使用的ordinal元件序號

(2) 在虛擬面之下創造子物件VB

(3) 用pillar的組合點作為VB的組合點,並產生VB的oloc

(4) 產生虛擬空間VB (VB的shape可使用BlockWire或ExtrudedWire --- getVBShape() )

2-3. 畫出鋼筋  --- drawPillarBar()

(1) 得到樓上柱、樓樓上柱、樓下柱、當前柱的鋼筋座標點鋼筋描述

      (1-1) 樓上柱鋼筋座標點lllXyPosUp及鋼筋描述psdUp

      (1-2) 樓樓上柱鋼筋座標點lllXyPosUp2及鋼筋描述psdUp2

      (1-3) 樓下柱鋼筋座標點lllXyPosDown及鋼筋描述psdDown

      (1-4) 當前柱鋼筋座標點lllXyPos、鋼筋奇偶值ll012及鋼筋描述psd

(2) 畫出主筋

      (2-1) 當前柱的每一個鋼筋座標點迴圈,得到這支鋼筋的

      => bDownLd(是否往下Ld)

      => bThead(樓上是否T頭)

      => bThead2(樓樓上是否T頭)

      => lBarSize(用來判斷續接器上下端的號數)

註: lBarSize=[樓下號數, 當前號數, 樓上號數, 樓樓上號數],此時要判斷這支鋼筋是外層主筋還是內層主筋。

      (2-2) 用(2-1)得到的參數,產生鋼筋形狀(4個Method)  --- createPillarBarAndShape()

                (A) 如果此樓層的奇數筋或偶數筋沒有長度 且 不用往下Ld => 不用畫鋼筋

                註: 但如果要畫Ld,代表樓下沒有此座標點 = 原先樓下應該畫的鋼筋沒有畫上來

                解決: 在 getTopLBarShape() 及 getIBarShape() 中,多加判斷式

                 => 如果鋼筋長度為0,要幫樓下把鋼筋畫在此樓層的vBox。

                (B) 如果 (傳入的樓層數 = 當前柱底端的iFloor) 且

                               (只有一層柱 或 上一層的長度為0)  => 代表此樓層為柱筋唯一一樓 

                 => 主筋起點終點皆彎鉤(Z型鋼筋)  --- getOneZBarShape()

                (C) 如果 (傳入的樓層數 = 當前柱底端的iFloor)  => 代表此樓層為柱筋第一樓 

                 => 主筋起點(底端)彎鉤 --- getBaseLBarShape()

                 => 得到母續接器的名字  --- getCouplerFemaleName()

                (D) 如果 (傳入的樓層數 = 柱子最高樓層數-1)  => 代表此樓層為柱筋最後一樓

                       如果 (傳入的樓層數 = 柱子最高樓層數-2) 且 (上層的長度為0)

                       => 代表此樓層為柱筋倒數第二樓,此柱筋會延伸至柱筋最頂,要畫彎鉤

                 => 主筋終點(頂端)彎鉤 --- getTopLBarShape()

                (E) 其他 => 代表中間樓層的柱筋 

                 => 主筋起點終點皆不彎鉤 --- getIBarShape()

                 => 得到母續接器的名字  --- getCouplerFemaleName()

註: 只有(C)跟(E)需要紀錄母續接器的名字,只有這兩個Method會畫出母續接器。

註: 續接器的數量計算與號數紀錄,目前都以母續接器為主,比較好算且正確。

(3) 畫出箍筋與繫筋

/