Geometry String Functions - Ultramarine.com Geometry String Functions

The string function for points is one of the most useful, and its form is:


     &POINT(ACTION, DATA,  -OPTION)

Here, ACTION must be either COORDINATES, D_NODE, PART, EULER_ANGLES, N_2NODES, N_BOX, RATIO, DEFLECTION, HOOK_LOC, OFFSET, CLOSE, NEAREST, or REL_MOTION. The details of DATA vary with ACTION, but normally DATA will be one or more point names. If ACTION is COORDINATES, this function returns the location of the point specified with DATA. Here, the location returned will be in the part system, unless one of the options -BODY or -GLOBAL has been specified. If the point has not been defined, a null string will be returned. One can use this function during an INMODEL, to define locations which may be required, provided that the point referenced has been previously defined. If ACTION is D_NODE, the function will return the distance between the two points specified via DATA. If ACTION is PART, the part name of the point specified with DATA is returned.

When changing frames of reference, the ACTION EULER_ANGLES may be useful. This action returns a set of Euler angles from three points specified via DATA. These angles will establish the new x axis along the line from first point to second, a new Z axis perpendicular to the plane formed by the three points, and a new Y axis given by the right-hand rule. The Z axis is defined by the cross product of the X axis and the vector from the first to the third point.

The ACTION N_2NODES returns all points along the line segment between the first point specified via DATA and the second one. These points will be in order with the first point specified being the first point returned and the second one specified as the last one returned.

The remaining values ACTION are different than those above in that the DATA are not strictly point names. The ACTION N_BOX is different from the others in that the data here is a set of global coordinates: X1, X2, Y1, Y2, Z1, and Z2. The function will return all points which are in the "box" defined by the six planes defined by these coordinates. The ACTION RATIO will return the last value of joint unity ratio computed for the specified point, and an ACTION of DEFLECTION will return the three components of the last computed deflection of the point.

The ACTION HOOK_LOC has a form for DATA of: *NN1, LEN1, *NN2, LEN2, ....., *NN4, LEN4, and is used to find the global position of a hook which is connected to points *NN1, *NN2, etc. It assumes that the harness lengths are LEN1, LEN2, ... respectively. This function is useful primarily in setting up a lifting problem when one models the sling as a collection of flexible connectors.

The values of ACTION OFFSET and CLOSE are used to find offsets. Normally, they are used in the definition of connectors. The form of DATA for OFFSET is: *POINT, :SEL, X, Y, Z and for CLOSE PART_NAME, :SEL, X, Y, Z. Here, X, Y, and Z are locations (feet or meters). For both values of ACTION, MOSES finds the point closest to a specified location but they differ in detail. For an ACTION of OFFSET, the specified point is the location of *POINT plus the X, Y, and Z specified, and any point which matches :SEL in a part different than that of *POINT is a candidate. The string returned is -GO1, the x, y and z values of the offset from specified point to the "close" point, and the string *POINT itself. For CLOSE, the specified point is simply the location in the part PART_NAME defined by X, Y, and Z, and all points which match :SEL are considered for being "close". In either case, the vector returned is represented in the part system of the "close" point. As an example, consider:

     CONNECTOR ~CC &POINT(OFFSET *1 @ 0 0 10)

This will define a connector of class ~CC. End 1 of the connector is at a physical location of *1 plus 0 0 10 in the part system of *1 and end two is at *1. This connection is actually defined via the closest point and an offset and the command set to MOSES will look like

     CONNECTOR ~CC -GO1  XX YY ZZ *B22 *1

where XX, YY, ZZ, and *B22 will be values computed so that the end of the connector is at the correct location.

The ACTION of NEAREST takes a point name and a selector and returns the point which matches the selector closest to the given point. In particular:

     &POINT(NEAREST *R *R@)

will return the name of the point which begins with *R (and which is not *R itself) that is closest the point *R.

Another useful ACTION is REL_MOTION. Here, data is two point names *P1, *P2, and six numbers: X-, X+, Y-, Y+, Z-, and Z+. What the function returns is the minimum and maxima of the relative location between the two points and the values input, i.e. the output is part of the input which has been modified. This is best seen by example. Suppose that one issues:

     &SET ENVEL =
     &SET ENVEL = &POINT(REL_MOT *1 *2 %ENVEL )

You will find that at this point X- = X+, Y- = Y+, and Z- = Z+, and X-, Y-, Z- is the vector from *1 to *2 in the *1 body system. If you issue the second of these commands several times, the result will be that ENVEL will contain the extremes of the relative position between the two points. From the above example, if this ACTION is used with null data, the accumulation is initialized. Also, the values returned are in feet or meters.

Often, one wants to transform vectors from body to global coordinates and conversely. This is easily accomplished with the string function:


     &V_TRANSF(ACTION, BODY_NAME, DATA)

Here, ACTION must be either V_B2G, V_G2B, V_P2B, V_B2P, L_B2G, L_G2B, L_P2B, L_B2P, F_B2G, F_G2B, F_P2B, or F_B2P and DATA is either three or six coordinates (feet or meters) or six force components (bforce, bforce-feet or meters). The function takes the input and transforms it, returning the same number of components as DATA input. If ACTION begins with: a V then a simple vector rotation will be performed, with an L a rotation and a translation will be performed, and with an F a force transformation will be performed. The remainder of ACTION defines the direction of the transformation. The action B2G transforms a body representation into a global one, and G2B the inverse. The action P2B transforms a part representation into a body one, and B2P the inverse.