HyperWorks Solvers

Marker

Marker

Previous topic Next topic No expanding text in this topic  

Marker

Previous topic Next topic JavaScript is required for expanding text JavaScript is required for the print function  

Model Element

Class Name

Marker

Description

Marker defines an orthonormal, right-handed coordinate system and reference frame in MotionSolve.  A Marker must belong to a part.  The body can be any type: rigid, flexible, or point.  The Newtonian reference frame (Ground) is considered to be a special case of a rigid PART.

Attribute Summary

Name

Property

Modifiable by command?

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 ()

reuler  

Angles ()

floating

Bool ()

 

rm      

Reference ("Marker")

 

node    

Int ()

 

usexp    

Bool ()

 

function

Function ("MARKER_READ()")

 

routine

Routine ()

 

Usage

#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)

Attributes

Description

Defined completely in the input file

body

Reference to an existing Part, PointMass or FlexBody object

Specifies an already existing PART, POINT_MASS or FLEX_BODY object to which the Marker belongs.

The body attribute is mandatory

qp

A Location object or a list of 3 doubles

Specifies the coordinates of the origin of the Marker in the RM Marker coordinate system.

The qp attribute is optional. When not specified, it is assumed to be coincident with the global origin, i.e. (0, 0, 0).

zp

A Location object or a list of 3 doubles

Specifies the coordinates of a point on the z-axis of the Marker in the RM Marker coordinate system.

The zp attribute is optional. When not specified, the point is assumed to be on the z-axis of the RM Marker.

The zp/xp attribute is exclusive to reuler and function. Only one of them may be specified.

xp

A Location object or a list of 3 doubles

Specifies the coordinates of a point on the x-axis of the Marker in the RM Marker coordinate system.

The xp attribute is optional. When not specified, the point is assumed to be on the x-axis of the RM Marker.

The zp/xp attribute is exclusive to reuler and function. Only one of them may be specified.

usexp

 

Boolean

The usexp attribute is optional.

When usexp is set to True, the x-axis of the Marker is calculated first using the QP and XP values. Then the z-axis is computed using QP and ZP such that it is orthonormal to the x-axis. Lastly, the y-axis is computed using the right-hand rule.
When usexp is set to False or it is not defined, the z-axis of the Marker is calculated first using the QP and ZP values. Then the x-axis is computed using QP and XP such that it is orthonormal to the z-axis. Lastly, the y-axis is computed using the right-hand rule.

reuler

A list of 3 doubles

Specifies the body-fixed 3-1-3 Euler angles, in radians, of the Marker with respect to the RM Marker.

The reuler attribute is optional. When not specified, it is assumed to be (0,0,0), i.e. the Marker has the same orientation as the RM Marker.

The reuler attribute is exclusive to zp/xp and function. Only one of them may be specified.

Defined in a compiled user-written subroutine

body

Reference to an existing Part, PointMass or FlexBody object

Specifies an already existing PART, POINT_MASS or FLEX_BODY object to which the Marker belongs.

The body attribute is mandatory

function

String

The list of parameters that are passed from the data file to the user-defined subroutine.

The function attribute is mandatory

routine

String

Specifies an alternative name for the user subroutine. The name consists of two pieces of information, separated by “”. The first is the pathname to the shared library containing the function that computes the response of the user-defined Surface. The second is the name of the function in the shared library that does the computation.

An example is: routine=”/staff/Altair/engine.dllmyMarker

”/staff/Altair/ engine.dll is the dll
“myMarker” is the function within this DLL that performs the calculations

The attribute routine is optional.

When not specified, routine defaults to MARKER_READ.

The attribute routine is optional.

When function is specified, but routine is not, routine defaults to MARKER_READ.

Defined in a Python script

body

Reference to an existing Part, PointMass or FlexBody object

Specifies an already existing PART, POINT_MASS or FLEX_BODY object to which the Marker belongs.

The body attribute is mandatory

function

String

The list of parameters that are passed from the data file to the user-defined subroutine.

The function attribute is mandatory

routine

Pointer to a callable function in Python

An example is: routine= myMarker

myMarker is a Python function or method that can be called from wherever the model resides.

The attribute routine is optional.

When not specified, routine defaults to MARKER_READ.

Optional Attributes – Available to all description methods

id

Integer

Specifies the element identification number.  This number must be unique among all the Marker objects in the model.

This attribute is optional. MotionSolve will automatically create an ID when one is not specified.

Range of values: id > 0

label

String

Specifies the name of the Marker object.

This attribute is optional. When not specified, MotionSolve will create a label for you.

rm

Reference to an existing Marker

Defines the reference coordinate system in which the MARKER location and orientation are described.

If you want to specify the position and orientation of the MARKER in the global reference frame, use RM=0.

The rm attribute is optional. When not specified, the position and orientation of the MARKER is assumed to be with respect to the LPRF of the hosting body.

floating

 

Boolean

Specifies whether the MARKER is a floating marker or not.

The attribute, floating, is optional. When not specified it is set to "FALSE".

node

Integer

Specifies the node on the flexible body to which the MARKER is attached.

The node attribute is required only when a Marker is to be placed oat a node on a flexible body. It is not to be used for rigid bodies or point mass bodies.

Comments

1.See Properties, for an explanation about what properties are, why they are used and how you can extend these.
2.For a more detailed explanation about Marker, see the Comments in the XML syntax section.

Examples

1.Define a marker on a rigid part 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])

2.Define a Marker at the LPRF of part p30303 with the same orientation as the LPRF.

m30303 = Marker (label="joint 3-marker-i", body=p30303)

3.Define a Marker on Part p30102 in a user written function, MARKER_READ, written in Python.

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)

The script marker_read.py is defined below:

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

4.Define a Marker whose location is dependent on design variables.

# 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")

5.Define a Marker, m2, whose location and orientation is the same as another, m1.

m2 = Marker (body=p2, qp=m1.qp, zp=m1.zp, xp=m1.xp, label="m2")

marker_api_img1