Marker

Model ElementMarkerは、MotionSolve内の直交右手座標系と参照フレームを定義します。Markerはパートに属している必要があります。ボディは、任意のタイプ(剛体、弾性体、またはポイント)にできます。

クラス名

Marker

説明

ニュートン参照フレーム(地面)は、剛体PARTの特殊なケースと見なされます。

属性の概要

名前 プロパティ コマンドで変更可能か 設計可能か
id Int ()    
label Str ()    
part Reference (Part)  
point_mass Reference (PointMass)  
flex_body Reference (FlexBody)  
body Reference (Body) # Alias
qp Location (Point(), required=True)
zp Location ()
xp Location ()
xv Location()  
zv Location()  
reuler Angles ()
floating Bool ()    
rm Reference ("Marker")    
node Int ()    
usexp Bool ()    
usexv Bool ()    
function Function ("MARKER_READ()")    
routine Routine ()    

使用法

#1: Defined completely in the input file 
Marker (body=objBody, optional_attributes)

#2: Defined in a compiled user-written subroutine
Marker (body=objBody, function=userString, routine=string, optional_attributes)

#3: Defined in a Python script
Marker (body=objBody, function=userString, routine=functionPointer, optional_attributes)

属性

入力ファイル内で完全に定義された属性
body
既存のPart、PointMass、またはFlexBodyオブジェクトへの参照
Markerが属している既存のPARTPOINT_MASS、またはFLEX_BODYオブジェクトを指定します。
body属性は必須です。
qp
Locationオブジェクトまたは3つの倍精度値のリスト
RM Marker座標系のMarkerの原点の座標を指定します。
qp属性は省略可能です。指定しない場合、全体座標系の原点(0, 0, 0)と一致すると見なされます。
zp
Locationオブジェクトまたは3つの倍精度値のリスト
RM Marker座標系のMarkerのz軸上のポイントの座標を指定します。
zp属性は省略可能です。指定しない場合、ポイントはRM Markerのz軸上にあると見なされます。
zp/xp属性は、zvxvreuler、およびfunctionと相互に排他的です。指定できるのはその中の1つだけです。
xp
Locationオブジェクトまたは3つの倍精度値のリスト。
RM Marker座標系のMarkerのx軸上のポイントの座標を指定します。
xp属性は省略可能です。指定しない場合、ポイントはRM Markerのx軸上にあると見なされます。
zp/xp属性は、zvxvreuler、およびfunctionと相互に排他的です。指定できるのはその中の1つだけです。
usexp
ブール
usexp属性は省略可能です。
  • usexp"TRUE"に設定した場合は、まず、Markerのx軸がQPXPの値を使用して計算されます。次に、z軸が、x軸と正規直交するように、QPZPを使用して計算されます。最後に、y軸が右手の法則を使用して計算されます。
  • usexp"FALSE"に設定したか、定義しなかった場合は、まず、Markerのz軸がQPZPの値を使用して計算されます。次に、x軸が、z軸と正規直交するように、QPXPを使用して計算されます。最後に、y軸が右手の法則を使用して計算されます。
zv
Locationオブジェクトまたは3つの倍精度値のリスト。
RM Marker座標系のMarkerのz軸の方向を指定します。
zv属性は省略可能です。指定しない場合は、RM Markerのz軸が使用されます。
zv/xv属性は、zpxpreuler、およびfunctionと相互に排他的です。指定できるのはその中の1つだけです。
xv
Locationオブジェクトまたは3つの倍精度値のリスト。
RM Marker座標系のMarkerのx軸の方向を指定します。
xv属性は省略可能です。指定しない場合は、RM Markerのx軸が使用されます。
zv/xv属性は、zpxpreuler、およびfunctionと相互に排他的です。指定できるのはその中の1つだけです。
usexv
ブール
usexv属性は省略可能です。
  • usexvを"TRUE"に設定した場合は、まず、Markerのx軸がxvを使用して計算されます。次に、z軸が、x軸と正規直交するように、zvを使用して計算されます。最後に、y軸が右手の法則を使用して計算されます。
  • usexvを"FALSE"に設定または定義しなかった場合は、まず、Markerのz軸がzvを使用して計算されます。次に、x軸が、z軸と正規直交するように、xvを使用して計算されます。最後に、y軸が右手の法則を使用して計算されます。
reuler
3つの倍精度値のリスト
RM Markerに対するMarkerのボディ固定3-1-3オイラー角をラジアンで指定します。
reuler属性は省略可能です。指定しない場合は、(0,0,0)と見なされます。つまり、MarkerはRM Markerと同じ向きになります。
reuler属性は、zv/xvzp/xp、およびfunctionと相互に排他的です。指定できるのはその中の1つだけです。
コンパイルされたユーザー作成サブルーチンで定義された属性
body
既存のPart、PointMass、またはFlexBodyオブジェクトへの参照
Markerが属している既存のPART、POINT_MASS、またはFLEX_BODYオブジェクトを指定します。
body属性は必須です。
function
文字列
データファイルからユーザー定義のサブルーチンに渡されるパラメータのリスト。
function属性は必須です。
routine
文字列
ユーザーサブルーチンの代替名を指定します。この名前は、“∷”で区切られた情報の2つの部分で構成されます。1つ目は、ユーザー定義のSurfaceの応答を計算する関数を含む共有ライブラリへのパス名です。2つ目は、計算を実行する共有ライブラリ内の関数の名前です。
例: routine="/staff/Altair/engine.dll::myMarker"
  • "/staff/Altair/ engine.dllはDLLです。
  • "myMarker"は、計算を実行するこのDLL内の関数です。
属性routineは省略可能です。
指定しない場合、routineはデフォルトでMARKER_READになります。
functionは指定し、routineは指定しない場合、routineはデフォルトでMARKER_READになります。
Pythonスクリプトで定義された属性
body
既存のPart、PointMass、またはFlexBodyオブジェクトへの参照
Markerが属している既存のPARTPOINT_MASS、またはFLEX_BODYオブジェクトを指定します。
body属性は必須です。
function
文字列
データファイルからユーザー定義のサブルーチンに渡されるパラメータのリスト。
function属性は必須です。
routine
Python内の呼び出し可能な関数へのポインタ
例:routine=myMarker
  • myMarkerは、モデルが存在する場所ならどこからでも呼び出すことが可能なPython関数またはメソッドです。
属性routineは省略可能です。
指定しない場合、routineはデフォルトでMARKER_READになります。
すべての方法に使用可能なオプション属性
id
整数
要素識別番号を指定します。この番号は、モデル内のすべてのMarkerオブジェクトの中で一意にする必要があります。
この属性は省略可能です。MotionSolveは、IDが指定されていない場合、自動的にこれを作成します。
値の範囲:id > 0
label
文字列
Markerオブジェクトの名前を指定します。
この属性は省略可能です。指定しない場合は、MotionSolveが代わりにラベルを作成します。
rm
既存のマーカーへの参照
MARKERの位置と方向が記述される参照座標系を定義します。
全体参照フレームでMARKERの位置と方向を指定する場合は、RM=0を使用します。
rm属性は省略可能です。指定しない場合、MARKERの位置と方向は、ホストしているボディのLPRFを基準にしていると見なされます。
floating
ブール
MARKERがフローティングマーカーかどうかを指定します。
属性floatingは省略可能です。指定しない場合は、"FALSE"になります。
node
整数
MARKERが付加される弾性体上の節点を指定します。
node属性は、マーカーを弾性体上の節点に配置する場合にのみ必要です。剛体または質点体には使用されません。

剛体パートp1000でマーカーを定義します。
m1012 = Marker (id=1012, label="marker 1012", body=p1000, qp=[1.414,3.142,1.618], 
zp=[101.327,3.142,-2.545], xp=[1.414, 3.142, 101.618])
LPRFと同じ方向のパートp30303のLPRFでマーカーを定義します。
m30303 = Marker (label="joint 3-marker-i", body=p30303)
Pythonで作成されたユーザー作成関数MARKER_READで、パートp30102上のマーカーを定義します。
m30102040 = Marker (id=30102040, label="Marker 2", body=p30102, function="user(1, -0.5, 0.3, 0., 1.57079633, 1.57079633, -1.57079633)", 
routine=marker_read)
スクリプトmarker_read.pyは次のように定義されます:
def marker_read (id, par, npar):
    eflg = 0
    errflg = 0
    r = 3*[0.0]
    angle = 6*[0.0]
    angle_type = int(par[0])
    r[0] = par[1]
    r[1] = par[2]
    r[2] = par[3]
    if angle_type==0: # DCMTX
        angle[0] = par[4]
        angle[1] = par[5]
        angle[2] = par[6]
        angle[3] = par[7]
        angle[4] = par[8]
        angle[5] = par[9]
    elif (angle_type == 1) | (angle_type == 2): # Euler angles (313 or YPR)
        angle[0] = par[4]
        angle[1] = par[5]
        angle[2] = par[6]
    elif angle_type == 3: # Euler parameters
        angle[0] = par[4]
        angle[1] = par[5]
        angle[2] = par[6]
        angle[3] = par[7]
    else:
        errflg = 1;
        return errflg
    eflg = py_put_marker(id, r, angle_type, angle)
    return errflg
位置が設計変数に依存するマーカーを定義します。
# DVs_
qpx = Dv (label="X coordinate of Point B", b=40)
qpy = Dv (label="Y coordinate of Point B", b=200)
qpz = Dv (label="Z coordinate of Point B", b=350)

# QP
qp = [qpx, qpy, qpz]

# ZP is along x-axis
zp = [qpx+10, qpy, qpz]

# XP is along z-axis
xp = [qpx, qpy, qpz+10]

# Now define the Marker and hold it in the Python variable markerB
markerB = Marker (body=p1, qp=qp, zp=zp, xp=xp, label="markerB")
位置と方向が別のマーカーm1と同じであるマーカーm2を定義します。
m2 = Marker (body=p2, qp=m1.qp, zp=m1.zp, xp=m1.xp, label="m2")


図 1.

コメント

  1. プロパティの概要、使用理由、および拡張方法については、プロパティをご参照ください。
  2. Markerの詳細については、Reference: Markerをご参照ください。