モデル内の”接続要素”を削除する方法

未分類

例題説明

読み込んだモデル内すべての”接続要素”情報を取得し、作成したListを用いてすべての”接続要素”を削除します。
本例で使用するモデルは、例題3つのキューブパートと、複数の”接続要素”を作成するで作成・保存したモデルです。未実施の場合は先に実施してください。
(ここでの”接続要素”とはMPCやRBE2などを指します)

サンプルコード

サンプルコード1 – すべて削除する方法


# 新規ドキュメントにモデルを読み込みます。
JPT.Exec('New Document()')
path = JPT.GetAppPathInfo(JPT.PathType.APPDATA_PATH)
FileMenu.LoadJTH5(path+"cube_connections.jth5")

# 作成したパートに合わせて、メインウィンドウの拡大サイズを調整します。
JPT.ViewFitToModel()
# モデル内のすべての"接続要素"の情報を取得します。
dconns = JPT.GetAllConnections()

# 取得した"接続要素"の情報を、PSJコマンドで使用できる形式のリストに変換します
ditem_connections = []
for conn in dconns:
    ditem_connections.append(JPT.CastToDItem(conn))

list_connections = JPT.DItemListToMacroListTCursor(ditem_connections)

# 作成したリストを使用して、モデル内すべての"接続要素"を削除します。
JPT.Exec('DeleteItem(0, {}, [], [], 1)'.format(list_connections))

サンプルコード1の説明

モデル読込

本例題で使用するモデルを読み込みます。
まず、ファイルの読込のために新しいJupiterドキュメントを作成します。
新しいJupiterドキュメントを作成するために、マクロNew Document()を使用します。マクロをPSJとして使用するために、JPT.Exec()をあわせて使用します。


JPT.Exec('New Document()')

次に、モデルの読込を行います。
モデルの保存先であるJupiterのApp Dataフォルダのパスを取得し、変数pathに代入します。


path = JPT.GetAppPathInfo(JPT.PathType.APPDATA_PATH)

JPT.GetAppPathInfo()は、PathTypeを指定することで、使用中のJupiterの作業フォルダのパスを取得するPSJ Utilityです。

Path Typeと、取得可能なフォルダパスについての詳細はリンク先をご参考ください。
 ・Path Type

FileMenu.LoadJTH5()はモデルをjth5ファイル形式で保存するPSJ Utilityです。読み込むファイルの存在するフォルダパスと、読み込むファイル名の指定が必須になります。
先ほど取得したpathを使用して、Cube_Connections.jth5というファイル名でApp Dataフォルダに保存されているファイルをJupiterに読み込みます。
読み込んだモデルを、表示画面サイズに合わせて、表示中のモデルの拡大表示率を、JPT.ViewFitToModel()によって調整します。


FileMenu.LoadJTH5(path+"cube_connections.jth5")
JPT.ViewFitToModel()
すべての”接続要素”情報をDConnect形式で取得

モデル内のすべての”接続要素”情報を取得し、その情報を変数dconnsに代入します。


dconns = JPT.GetAllConnections()

JPT.GetAllConnections()は、モデル内すべての”接続要素”を取得するPSJ Utilityです。
取得した情報は、Jupiter内で使用されるConnectVectorというリスト型のクラスオブジェクトで、この中にはDConnectというクラスオブジェクトが入っています。

ConnectVector、DConnectオブジェクトについての詳細はそれぞれリンク先をご参考ください。
 ・ConnectVector
 ・DConnect

dconnsの内容については、次のコードを用いることで、Jupiter上のPython APIウィンドウに出力して確認することが出来ます。


# dconnsの内容を確認します。
print("dfconnsの内容 :" + str(dconns))
print("dconnsのオブジェクトタイプ :" + str(type(dconns)))
print("dconnsの持つオブジェクトの形式 :" + str(dconns[0]))
print("dconnsの持つオブジェクトのタイプ :" + str(type(dconns[0])))

ConnectVectorDConnectもJupiter上でのアドレスであり、この形式のままではPSJコマンドで使用することができません。そこで、dconnsの持つデータの形式をPSJコマンドで使用するための形式に変換する必要があります。

取得した”接続要素”情報を、マクロ用のリストに変換する

dconns内の”接続要素”情報を、マクロ用のリスト形式に変換していきます。


ditem_connections = []
for conn in dconns:
    ditem_connections.append(JPT.CastToDItem(conn))

このコードでは、まずditem_connectionsという空のリストを作成します。
次に、for文を用いてdconnsの持つDConnectオブジェクトをすべてDItemオブジェクトの形式へ変換し、先に作成したリストditem_connectionsへとDItemを追加していきます。
このコードで使用しているJPT.CastToDItem()は、DConnectなどのオブジェクトクラスを、DItemオブジェクト形式に変換するPSJ Utilityです。

DItemオブジェクトについての詳細はリンク先をご参考ください。
 ・DItem

ditem_connectionsの内容については、次のコードを用いることで、Jupiter上のPython APIウィンドウに出力して確認することが出来ます。


# ditem_connectionsの内容を確認します。
print("本モデルに設定された"接続要素"の数 = [" + str(len(ditem_connections)) + "]")
print("ditem_connectionsの内容 :" + str(ditem_connections))
print("ditem_connectionsの持つオブジェクトタイプ :" + str(type(ditem_connections[0])))

len(ditem_connections)は、ditem_connectionsの長さ、つまり格納されている”DItemオブジェクトの総数=モデル内のすべてのFace数”を取得しています。
また、ditem_connectionsの持つDItemは、DConnectと同様にJupiter上のアドレスであり、まだPSJコマンドで使用できる形式ではありません。ここでもう一度、形式を変換する必要があります。


list_connections = JPT.DItemListToMacroListTCursor(ditem_connections)

JPT.DItemListToMacroListTCursor()は、DItemVectorオブジェクトまたは DItemオブジェクトのリストをカーソルのリスト (マクロ文字列型) に変換するPSJ Utilityです。これにより、ditem_connectionsの持つDItemはPSJコマンドで使用できる形式であるマクロ文字列型のリストへと変換されます。変換後のリストは、変数list_facesに代入されます。
lise_connectionsの内容については、次のコードを用いることで、Jupiter上のPython APIウィンドウに出力して確認することが出来ます。


# list_connectionsの内容を確認します。
print("list_connectionsの内容 :" + str(list_connections))
print("list_connectionssの持つオブジェクトタイプ :" + str(type(list_connections)))

マクロ文字列型は、エンティティの種類を指すID:エンティティのモデル上で割り当てられているIDの形をとっている文字列型です。この文字列型はマクロでも利用されます。

作成したリストから、モデル内すべての”接続要素”を削除

最後に、作成したリストlist_connecitonsを使用して、モデル内すべての”接続要素”を削除します。
削除にあたり、Jupiterで、境界条件や”接続要素”などのアイテムを削除した際に出力されるマクロDeleteItem(0, [], [], [], 1)を、マクロをPSJコマンドとして使用する関数JPT.Exec()をと組み合わせて使用します。
JPT.Exec()を使用すると、マクロは使えるようになりますが、マクロは文字列として扱われる為、このままでは変数を使用することはできません。
そこで、Pythonメソッド.format()を用います。これにより、変数list_connectionsをマクロで使用することが可能となります。


JPT.Exec('DeleteItem(0, {}, [], [], 1)'.format(list_connections))

サンプルコード2 – 特定の”接続要素”のみ削除する方法


# 新規ドキュメントにモデルを読み込みます。
JPT.Exec('New Document()')
path = JPT.GetAppPathInfo(JPT.PathType.APPDATA_PATH)
FileMenu.LoadJTH5(path+"cube_connections.jth5")

# 作成したパートに合わせて、メインウィンドウの拡大サイズを調整します。
JPT.ViewFitToModel()

# モデル内のすべての"接続要素"の情報を取得します。
dconns = JPT.GetAllConnections()

# 取得した"接続要素"の情報をのうち、MPCのみをPSJコマンドで使用できる形式のリストに変換します。
ditem_mpcs = []
for conn in dconns:
    if conn.type == JPT.DItemType.CONNECT_MPC:
        ditem_mpcs.append(JPT.CastToDItem(conn))

list_mpcs = JPT.DItemListToMacroListTCursor(ditem_mpcs)

# 作成したリストを使用して、モデル内のすべてのMPCを削除します。
JPT.Exec('DeleteItem(0, {}, [], [], 1)'.format(list_mpcs))

サンプルコード2の説明

モデル読込

本例題で使用するモデルを読み込みます。
まず、ファイルの読込のために新しいJupiterドキュメントを作成します。
新しいJupiterドキュメントを作成するために、マクロNew Document()を使用します。マクロをPSJとして使用するために、JPT.Exec()をあわせて使用します。


JPT.Exec('New Document()')

次に、モデルの読込を行います。
モデルの保存先であるJupiterのApp Dataフォルダのパスを取得し、変数pathに代入します。


path = JPT.GetAppPathInfo(JPT.PathType.APPDATA_PATH)

JPT.GetAppPathInfo()は、PathTypeを指定することで、使用中のJupiterの作業フォルダのパスを取得するPSJ Utilityです。

Path Typeと、取得可能なフォルダパスについての詳細はリンク先をご参考ください。
 ・Path Type

FileMenu.LoadJTH5()はモデルをjth5ファイル形式で保存するPSJ Utilityです。読み込むファイルの存在するフォルダパスと、読み込むファイル名の指定が必須になります。
先ほど取得したpathを使用して、Cube_Connections.jth5というファイル名でApp Dataフォルダに保存されているファイルをJupiterに読み込みます。
読み込んだモデルを、表示画面サイズに合わせて、表示中のモデルの拡大表示率を、JPT.ViewFitToModel()によって調整します。


FileMenu.LoadJTH5(path+"cube_connections.jth5")
JPT.ViewFitToModel()
すべての”接続要素”情報をDConnect形式で取得

モデル内のすべての”接続要素”情報を取得し、その情報を変数dconnsに代入します。


dconns = JPT.GetAllConnections()

JPT.GetAllConnections()は、モデル内すべての”接続要素”を取得するPSJ Utilityです。
取得した情報は、Jupiter内で使用されるConnectVectorというリスト型のクラスオブジェクトで、この中にはDConnectというクラスオブジェクトが入っています。

ConnectVector、DConnectオブジェクトについての詳細はそれぞれリンク先をご参考ください。
 ・ConnectVector
 ・DConnect

dconnsの内容については、次のコードを用いることで、Jupiter上のPython APIウィンドウに出力して確認することが出来ます。


# dconnsの内容を確認します。
print("dfconnsの内容 :" + str(dconns))
print("dconnsのオブジェクトタイプ :" + str(type(dconns)))
print("dconnsの持つオブジェクトの形式 :" + str(dconns[0]))
print("dconnsの持つオブジェクトのタイプ :" + str(type(dconns[0])))

ConnectVectorDConnectもJupiter上でのアドレスであり、この形式のままではPSJコマンドで使用することができません。そこで、dconnsの持つデータの形式をPSJコマンドで使用するための形式に変換する必要があります。

取得した接続要素情報からMPCだけを抽出し、マクロ用のリストに変換する

dconns内の接続要素情報から、MPCのみを抽出しマクロ用のリスト形式に変換していきます。


ditem_mpcs = []
for conn in dconns:
    if conn.type == JPT.DItemType.CONNECT_MPC:
        ditem_mpcs.append(JPT.CastToDItem(conn))

このコードでは、まずditem_mpcsという空のリストを作成します。
次に、for文とif文を組み合わせてdconnsの持つDConnectオブジェクトから、MPCのみを対象としてDItemオブジェクトの形式へと変換します。その後、作成していたリストditem_mpcsへ変換したMPCのDItemを追加していきます。

このコードで使用しているJPT.CastToDItem()は、DConnectなどのオブジェクトクラスを、DItemオブジェクト形式に変換するPSJ Utilityです。
また、本例のように、if文でDItem Typeを指定することにより、特定の種類のみの接続要素や境界条件を対象にとることが可能になります。

DItemオブジェクト、DItem Typeについての詳細はリンク先をご参考ください。
 ・DItem
 ・DItem Type

ditem_connectionsの内容については、次のコードを用いることで、Jupiter上のPython APIウィンドウに出力して確認することが出来ます。


# ditem_mpcsの内容を確認します。
print("本モデルに設定された接続要素数 = [" + str(len(ditem_mpcs)) + "]")
print("ditem_mpcsの内容 :" + str(ditem_mpcs))
print("ditem_mpcsの持つオブジェクトタイプ :" + str(type(ditem_mpcs[0])))

len(ditem_mpcs)は、ditem_mpcsの長さ、つまり格納されている”DItemオブジェクトの総数=モデル内のすべてのFace数”を取得しています。
また、ditem_mpcの持つDItemは、DConnectと同様にJupiter上のアドレスであり、まだPSJコマンドで使用できる形式ではありません。ここでもう一度、形式を変換する必要があります。


list_mpcs = JPT.DItemListToMacroListTCursor(ditem_mpcs)

JPT.DItemListToMacroListTCursor()は、DItemVectorオブジェクトまたは DItemオブジェクトのリストをカーソルのリスト (マクロ文字列型) に変換するPSJ Utilityです。これにより、ditem_mpcsの持つDItemはPSJコマンドで使用できる形式であるマクロ文字列型のリストへと変換されます。変換後のリストは、変数list_mpcsに代入されます。
lise_mpcsの内容については、次のコードを用いることで、Jupiter上のPython APIウィンドウに出力して確認することが出来ます。


# list_mpcsの内容を確認します。
print("list_mpcsの内容 :" + str(list_mpcs))
print("list_mpcsの持つオブジェクトタイプ :" + str(type(list_mpcs)))

マクロ文字列型は、エンティティの種類を指すID:エンティティのモデル上で割り当てられているIDの形をとっている文字列型です。この文字列型はマクロでも利用されます。

作成したリストから、モデル内のMPCのみをすべて削除

最後に、作成したリストlist_mpcsを使用して、モデル内のMPCのみをすべて削除します。
削除にあたり、Jupiterで、境界条件や接続要素などのアイテムを削除した際に出力されるマクロDeleteItem(0, [], [], [], 1)を、マクロをPSJコマンドとして使用する関数JPT.Exec()をと組み合わせて使用します。
JPT.Exec()を使用すると、マクロは使えるようになりますが、マクロは文字列として扱われる為、このままでは変数を使用することはできません。
そこで、Pythonメソッド.format()を用います。これにより、変数list_mpcsをマクロで使用することが可能となります。


JPT.Exec('DeleteItem(0, {}, [], [], 1)'.format(list_connections))

利用しているAPI

FileMenu.LoadJTH5() # 記事なし

JPT.ViewFitToModel()

JPT.GetAllConnections()

JPT.CastToDItem()

JPT.DItemListToMacroListTCursor()

JPT.Exec()

関連記事

本例題で使用するモデルを作成する例題です。
すべてのFace情報を取得し、利用する例題です。