2017-11-14 34 views
1

私はAbaqusでスクリプトを書いています。ここでは円と四角形の切れたサークル(チーズのようなもの)を押しつぶしています。私は部品間の接触を置く必要があるので、Surfaceが必要です。AbaqusサーフェスgetSequenceFromMask

マクロマネージャーが発生:

s1 = a.instances['kolo-1'].edges 
side1Edges1 = s1.getSequenceFromMask(mask=('[#1 ]',),) 
a.Surface(side1Edges=side1Edges1 , name='kolkoSurf') 

問題がある:getSequenceFromMask(マスク=( '[#1]'、)、) この#1を取得する方法は?私はそれを交換することはできますか?私は少しだけ検索し、使用するアイデアがいくつかありました。 'find'、 'face'、 'C​​OORDS'ですが、私はそれを管理できません。 私を助けてください。私はX、Y、とにかくこのSurfaceをどのように抽出するのかという簡単な例を得ることを夢見ています。

BR、 Wonman

答えて

2

デフォルトのジャーナルオプションとマクロマネージャーを使用して上記のジャーナルを記録しました。したがって、変数side1Edges1は、getSequenceFromMask()の方法を使用してあなたのジャーナルに定義されています。このメソッドは、記録中にGUIをクリックして実行した選択の記録です。つまり、GUIをクリックしてエッジを選択すると、s1に作用するgetSequenceFromMask()メソッドがインスタンス'kolo-1'のすべてのエッジのセットになります。 Abaqus Scripting Reference Guide 6.14 - 7.2.2によれば、メソッドgetSequenceFromMask()は、多数のオブジェクトが関与する場合に非常に効率的です。しかし、ジャーナル・ファイルをカスタマイズして別のジオメトリ・エレメントを選択しようとすると、これはあまり役に立ちません。

  1. 策:解決策は2つあり、あなたのJournalOptionsのメンバーreplayGeometryrecoverGeometryを設定するためにAbaqusのCAEの下部にAbaqusのコマンドラインにコマンドを

    session.journalOptions.setValues(replayGeometry=COORDINATE, recoverGeometry=COORDINATE) 
    

    を貼り付けCOORDINATE繰り返しに反対あなたのジャーナルの記録。新しいジャーナル・ファイルを記録するには、GUIをクリックするプロセスを繰り返す必要があります。新しいジャーナルでは、コマンドgetSequenceFromMask(mask=('[#1 ]',),)は、記録されたGUIクリックを表す座標に基づく選択に置き換えられます。その後、ジャーナルファイルをカスタマイズし、以降のモデリングステップで使用するエッジを選択するために、座標を変更することができます。

  2. 解決策:Pythonスクリプトの上記の行でScratchから定義した変数を使用してside1Edges1を定義します。ジャーナルファイルを青写真として使用することをお勧めします。青写真では、すべてのクリックイベントを、自分で定義したよく知られた変数を使用して置き換える必要があります。たとえば、独自のロジックを使用してポイントmyPoints = [(0,0), (0,1) ]のリストを定義し、これらのポイントをメソッドの引数として使用します。 myLine = mySketch.Line(point1=myPoints[0], point2=myPoints[1])を作成し、後のモデリングステップで使用するためにmyLineのような新しい変数を作成します。

AbaqusのPythonのAPIを使用してモデリングワークフローの基本的な理解を得るために、私は、 プリ、GMをお勧めすることができますAbaqusのための2011年Pythonスクリプト:例で学ぶ、第1版、また、それはではほとんど提供されていますほとんどの大学。

+0

Abaqus 6.14には、このような定数「コーディネート」はありません。しかし、「コーディネート」は正常に機能します。 – JKepler

+1

@JKeplerありがとう、私は 'COORDINATES'を 'COORDINATE'に変更して答えを修正しました。 – JulianBauer

1

エッジベースのサーフェスを作成するとします。多くの方法がありますが、最も簡単です。

サーフェスを作成するエッジのアセンブリベースのセット( "setName")を作成します。

instance=mdb.rootAssembly.instances["InstanceName"] 
set_for_surface=instance.sets["setName"].edges 
assembly.Surface(side1Edges=set_for_surface, name="surf_name") 

はバウンディングボックス "getBoundingBox()" によるfindAtを見て()、または選択領域を有します。これはやや似ているSO answerを参照してください。

編集:セットがアセンブリベースのセットである場合、アセンブリではなくインスタンスから直接アクセスします。次に、同じ手順を使用します。

mdb.rootAssembly.sets['Set_name'].edges 
関連する問題