我們現在既已能變更每個孔的大小,還必須確定具有最大孔的面,以便擋塊可以適當變更大小。這需要另外的規則。
我們檢查三個孔大小參數的值,然後保留最大值,以確定最大孔。如 block_shape_rule 一樣,T 形擋塊的行為必須與彎頭型式擋塊不同。
T 形擋塊會使用所有三個孔,因此我們必須檢查所有孔的大小。對於彎頭型式擋塊,我們不檢查受抑制的孔 B。我們使用 MaxOfMany 函數從一組輸入值中取得最大值。
If block = "tee" Then port = MaxOfMany(port_a_size,port_b_size,port_c_size) ElseIf block = "elbow" Then port = MaxOfMany(port_a_size,port_c_size) End If
名為 port 的新本端變數會儲存最大可用孔的大小。現在,我們需要告訴模型使用此資訊執行什麼作業。模型從嵌入的 Excel 工作表中取得資訊,所以我們查看工作表,以更新模型的整體大小。
i = GoExcel.FindRow("3rd Party:Embedding 1", "Sheet1", "port_size", "=", port)
我們要使用 port_size 欄進行查找,並將指定變數的值做為要尋找的值。
block_depth = GoExcel.CurrentRowValue("block_depth") port_c_depth_from_front = GoExcel.CurrentRowValue("port_c_depth_from_front") block_width = GoExcel.CurrentRowValue("block_width") port_a_hor_offset = GoExcel.CurrentRowValue("hor_offset") port_b_hor_offset = GoExcel.CurrentRowValue("hor_offset") port_c_hor_offset = GoExcel.CurrentRowValue ("hor_offset")
我們現在已確定最大的孔,將要相應調整擋塊頂部的大小。現在,我們檢查 T 形和彎頭以確定孔 A/孔 B 面上較大的孔大小,來確定擋塊的高度。
If block = "tee" Then porta = MaxOfMany(port_a_size, port_b_size) ElseIf block = "elbow" porta = port_a_size End If
MaxOfMany 函數不適用於彎頭型式擋塊,因為彎頭型式擋塊中僅需考慮一個值。我們可以使用該值來設定變數。
i = GoExcel.FindRow("3rd Party:Embedding 1", "Sheet1", "port_size", "=", porta)
port_a_vert_offset = GoExcel.CurrentRowValue("vert_offset") port_b_vert_offset = GoExcel.CurrentRowValue("vert_offset")
對於此值,我們加入了特殊的邏輯,以在其他孔所用偏移之外再加入額外的空間。此資訊取自另一個工作表儲存格。我們僅對彎頭型式擋塊執行此作業。
If block = "elbow" Then port_c_vert_offset = GoExcel.CurrentRowValue("vert_offset") + (GoExcel.CurrentRowValue("port_dia")/4) Else port_c_vert_offset = GoExcel.CurrentRowValue("vert_offset") End If block_height = GoExcel.CurrentRowValue("block_height")
block_size 規則已完成。