例題説明
モデル内のすべての要素情報を取得し、削除対象とする接続要素のタイプを指定してListを作成し、その接続要素を削除します。
今回の例題では、MPCを削除対象としています。

サンプルコード
# 3つのキューブパートを作成します。
Geometry.Part.Cube()
Geometry.Part.Cube(dlOrigin=[0.015, 0.0, 0.0], strName="Cube_2", iPartColor=6409934)
Geometry.Part.Cube(dlOrigin=[0.03, 0.0, 0.0], strName="Cube_3", iPartColor=13259210)
# 作成したパートに合わせて、メインウィンドウの拡大サイズを調整します。
JPT.ViewFitToModel()
# Edge間に2つのMPC接続要素を作成します。
Connections.MPC.General.TwoEdges(crMasterEdge=Edge(72), crSlaveEdge=Edge(44), listMpcConnection=[MPC_CONNECTION(iDof=1), MPC_CONNECTION(iDof=2), MPC_CONNECTION(iDof=4), MPC_CONNECTION(), MPC_CONNECTION(), MPC_CONNECTION()], bUpdateDispCS=1)
Connections.MPC.General.TwoEdges(strName="MPC_2", crMasterEdge=Edge(46), crSlaveEdge=Edge(18), listMpcConnection=[MPC_CONNECTION(iDof=1), MPC_CONNECTION(iDof=2), MPC_CONNECTION(iDof=4), MPC_CONNECTION(), MPC_CONNECTION(), MPC_CONNECTION()], bUpdateDispCS=1)
# Edge間に2つのRBE2接続要素を作成します。
Connections.RigidElements.RBE2.OneToOne(crlMasterTargets=[Edge(64)], crlSlaveTargets=[Edge(36)])
Connections.RigidElements.RBE2.OneToOne(crlMasterTargets=[Edge(38)], crlSlaveTargets=[Edge(10)], strName="RBE2_2")
# 節点とFace間にRBE3接続要素を作成します。
Connections.RigidElements.RBE3.OneToMany(crlMasterTargets=[Face(78)], crlSlaveTargets=[Node(1429)], listRbe3TermConnection=[(0, 63, 1), (1, 7, 1)], strName="RBE3_1", dTolerance=0.003)
Connections.RigidElements.RBE3.OneToMany(crlMasterTargets=[Node(949)], crlSlaveTargets=[Face(52)], listRbe3TermConnection=[(0, 63, 1), (1, 7, 1)], strName="RBE3_2", dTolerance=0.003)
# モデル内のすべての接続要素の情報を取得します。
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)
# 作成したリストを使用して、モデル内すべての接続要素を削除します。
JPT.Exec('DeleteItem(0, {}, [], [], 1)'.format(list_mpcs))
サンプルコードの説明
キューブパート作成
まず、3つのキューブパートを作成します。
1つ目のキューブパートは、設定値をすべてデフォルトで作成します。
Geometry.Part.Cube()

2つ目のキューブパートは、座標値にdlOrigin=[0.015, 0.0, 0.0]
、パート名にstrName="Cube_2"
、パートの色としてiPartColor=640993
を指定して作成します。
Geometry.Part.Cube(dlOrigin=[0.015, 0.0, 0.0], strName="Cube_2", iPartColor=6409934)

3つ目のキューブパートは、座標値にdlOrigin=[0.03, 0.0, 0.0]
、パート名にstrName="Cube_3"
、パートの色としてiPartColor=13259210
を指定して作成します。
Geometry.Part.Cube(dlOrigin=[0.03, 0.0, 0.0], strName="Cube_3", iPartColor=13259210)

作成後、表示画面サイズに合わせて、表示中のモデルの拡大表示率を、JPT.ViewFitToModel()
によって調整します。
JPT.ViewFitToModel()
接続要素作成
モデル内にMPC、RBE2、RBE3接続要素をそれぞれ2つずつ作成します。
MPCはCube_1とCube_2のEdge(ID:18, 46)間、Cube_2とCube_3のEdge(ID:36,64)間を指定して作成します。設定値はデフォルト値です。
Connections.MPC.General.TwoEdges(crMasterEdge=Edge(72), crSlaveEdge=Edge(44), listMpcConnection=[MPC_CONNECTION(iDof=1), MPC_CONNECTION(iDof=2), MPC_CONNECTION(iDof=4), MPC_CONNECTION(), MPC_CONNECTION(), MPC_CONNECTION()], bUpdateDispCS=1)
Connections.MPC.General.TwoEdges(strName="MPC_2", crMasterEdge=Edge(46), crSlaveEdge=Edge(18), listMpcConnection=[MPC_CONNECTION(iDof=1), MPC_CONNECTION(iDof=2), MPC_CONNECTION(iDof=4), MPC_CONNECTION(), MPC_CONNECTION(), MPC_CONNECTION()], bUpdateDispCS=1)

次に、RBE2をモデルに作成します。
MPCと同様に、Cube_1とCube_2のEdge(ID:10, 38)間、Cube_2とCube_3のEdge(ID:44,72)間を指定して作成します。設定値はデフォルト値です。
Connections.RigidElements.RBE2.OneToOne(crlMasterTargets=[Edge(64)], crlSlaveTargets=[Edge(36)])
Connections.RigidElements.RBE2.OneToOne(crlMasterTargets=[Edge(38)], crlSlaveTargets=[Edge(10)], strName="RBE2_2")

最後に、RBE3をモデルに作成します。
RBE3は、Cube_2の節点とFace間(節点ID:949, Face ID:52)間、Cube_3の節点とFace間(節点ID:949, Face ID:78)間を指定して作成します。設定値はデフォルト値です。
Connections.RigidElements.RBE3.OneToMany(crlMasterTargets=[Face(78)], crlSlaveTargets=[Node(1429)], listRbe3TermConnection=[(0, 63, 1), (1, 7, 1)], strName="RBE3_1", dTolerance=0.003)
Connections.RigidElements.RBE3.OneToMany(crlMasterTargets=[Node(949)], crlSlaveTargets=[Face(52)], listRbe3TermConnection=[(0, 63, 1), (1, 7, 1)], strName="RBE3_2", dTolerance=0.003)

すべての接続要素情報を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])))

ConnectVector
もDConnect
も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
Connections.RigidElements.RBE2.OneToOne() # 記事なし
Connections.RigidElements.RBE3.OneToOne() # 記事なし
Connections.MPC.General.TwoEdges()
JPT.DItemListToMacroListTCursor()