各ポートのサイズを変更できるようになりましたが、ブロックのサイズを適切に設定できるように、最大ポートのある面を特定する必要があります。これには別の規則が必要です。
最大ポートを特定するには、3 つのポート サイズ パラメータの値を調べ、最大値を保持します。block_shape_rule と同様に、T 形ブロックの動作はエルボ スタイル ブロックの動作とは異なる必要があります。
T 形ブロックでは、3 つのポートすべてが使用されるため、すべてのポートのサイズを確認します。エルボスタイル ブロックでは、Port 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 形かエルボかを調べて Port A 面と Port B 面のどちらのポート サイズが大きいかを特定することによって、ブロックの高さを特定します。
If block = "tee" Then porta = MaxOfMany(port_a_size, port_b_size) ElseIf block = "elbow" porta = port_a_size End If
エルボ スタイル ブロックの場合は、考慮する値が 1 つしかないため、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 ルールが完成しました。