PMX features not shared by PM
(New features not covered in the standard PM documentation)
PMX is an "experimental" extended version of Part Maker which includes some
features that are not currently available in the standard Part Maker program.
It is being supplied to GHS users who are interested in using these "Part Maker
eXtensions." These features are described below.
The syntax rules in PMX are more stringent than in PM:
-Parameters must be separated by commas (extra spaces permitted).
-Defining commands must use the "=" between the command name and its parameters.
-A back slash ("\") must be the separator between part and component names.
-Only one command per line.
Unlike GHS, PMX conditionals are in block form:
IF boolean expression THEN
block of command lines
Optionally ELSIF and ELSE parts can be included in the block.
Conditional blocks can be nested.
REAL and STR variables may be defined as in PM. Additionally the CARD
variable is for positive integers or "cardinal" numbers, and the BOOL
variable holds TRUE/FALSE "boolean" values.
Variable names are case sensitive: X and x are two variables.
Variable arrays can be defined using the  postfix. For example,
In this example, the 20 is the highest value that the array index can take.
All arrays are zero based. So X is the first element of the X array
and X is the last.
Variable arithmetic is available in PMX. The usual programming-language
operators are employed, and groupings by parentheses are allowed.
SET can be omitted when assigning a value to a variable if the equal sign
is prefixed with a colon. For example,
is equivalent to
In variable definitions this syntax allows assigning a value (which may be
an expression) in the same command where the variable is defined. For example,
When a variable is defined in this manner no error results if it has been
Function names, like variable names, are case sensitive.
n:=CHARS(s) returns the number of characters in string s. For example,
s:="a string value"
s:=CHAR(n,t) returns the nth character in the string t.
s:=CHR(n) returns the character represented by the ASCII number in n.
n:=ASC(s) returns the ASCII value of the first character in s.
s:=LEFT(n,t) returns the first n characters in the string t.
s:=RIGHT(n,t) returns the last n characters in the string t.
s:=SLICE(n,t) returns the slice of the string in t from the nth character to the end.
s:=STRIPBL(t) returns the string in t stripped of leading and trailing blanks.
b:=HASQUOTE(s) returns whether the string in s begins with a double quotation mark, ignoring initial blanks.
s:=UNQUOTE(t) returns the contents string t without its enclosing quotation marks, if any.
s:=CAP1(t) returns contents of t with its first character capitalized.
s:=CAP(t) returns contents of string t capitalized.
s:=STR(x) returns the string representation of the contents of x, which may be of any type.
s:=ITEM(n,t) returns the nth item from the string t. Item separators include blanks, commas, semicolons, colons, equal signs.
s:=REPLACE(t,u,v) returns t with all occurrences of u replaced by v.
n:=POS(s,t) returns first position of first character in t found in s, or 0 if not found.
n:=NEXTPOS(s,t[,i]) returns next position of t in s starting at i (if present), or 0 if not found .
x:=SIN(a), x:=COS(a), x:=TAN(a) return sine, cosine, tangent of radian angle a.
a:=ASIN(x), a:=ACOS(x), a:=ATAN(x) return arcsine, arccosine, arctangent in radians.
a:=ATAN2(y,x) returns arctangent of y/x in radians.
a:=RAD(d) returns the radian angle equivalent of an angle in degrees.
d:=DEG(a) returns the degree angle equivalent of an angle in radians.
z:=POW(x,y) returns x to the y power.
x:=SQRT(y) returns the square root.
x:=ABS(y) returns the absolute value.
x:=TRUNC(y) returns the largest integer not greater than y.
n:=HIGH(X) returns the maximum index of array X.
a:=INTEGRAL(i,x,y) returns the accumulated area to the ith point under the curve represented by the x,y points beginning with i=0. The integration is 2nd order, not linear. For example,
a:=INTEGRAL(0, 0.0, 0.0) ` a is zero
a:=INTEGRAL(1, 1.0, 1.0) ` a is 0.5
a:=INTEGRAL(2, 2.0, 1.0) ` a is 1.58333
b:=COPY(fn1,fn2) copies file named in fn1 to name in fn2 and returns whether successful.
b:=ERASE(fn) erases the file named in fn and returns whether successful.
b:=FEXIST(fn) returns whether the named file exists.
s:=PROGFILE(fn) returns the given string prepended with the path to the program folder. Does not check to see whether such a file exists.
s:=SHORTPATH(fn) returns the short version of the file name with no spaces.
Predefined (System) Variables
Caution: it is possible to cover a system variable by defining your own
variable by the same name, in which case the system variable will not
DATE current date in YYYY-MM-DD format
ERROR latest error string
HEREDIR path to the current working folder
INSTANCE program instance as a string
PAGE page number of the report
PRINTING whether a report is being generated
PROGDIR path to the program folder
SCREENROWS size of screen in terms of text rows, including header
SECONDS number of seconds since the session began
TEMPLOK template return number
TIME current time in HH:MM:SS format
VERSION program version number
WINDOWS whether running under the Windows operating system
LUNIT length unit
WUNIT weight unit
COMPONENT array of component names for current part
CONTAINER array of container (tank) names
DESCRIPTION of current part
DISPLACER array of displacer part names
NCOMPONENTS number of components in current part
NCONTAINERS number of containers
NDISPLACERS number of displacers
NPOINTS number of points on current station
NSAILS number of sail parts
NSTATIONS number of stations in current component
COMPSIDE side ("C", "S", or "P") of current component
COMPPERM permeability (negative for deductions) of current component
COMPVECT[i] vector (i=1 for L, 2 for T, 3 for V) of current component
PARTS current part list
POINTC point code array
POINTX point transverse coordinate array
POINTY point vertical coordinate array
SAIL array of sail names
STATION current station location
ANGLES[i] angle i+1 in the angles list given by the ANGles command.
DEPTH origin depth
DISPLWT displacement weight
GFREAD path and filename of last geometry file read
HEEL heel angle in degrees
HMMT heeling moment
LCB longitudinal center of buoyancy
RAHABS absolute righting arm in heel (ignoring heeling moment)
TCB transverse center of buoyancy
TRIM trim angle in degrees
UNEMBED name of file in which file embedded in GF has been written
VCB vertical center of buoyancy
RAH absolute righting arm in heel
MAXRRAH maximum residual righting arm from present heel to RAH=0 or flooding
ROSTABH range of residual stability from present heel to RAH=0 or flooding
File Handling Commands
Creates a new text file having the given name (path may be included).
Opens an existing file, positioned such that new output goes at the end.
FOUTput() literal text
Writes one line of text (omitting leading blanks).
Writes the n lines of text after the command or until reaching the 5-character line %EOF%.
Writes the evaluation of the given expression.
Writes the text with a comment character ` (grave accent) at the beginning of the line.
Writes the contents of the listed variables converted to text with no separating characters.
Closes the output file.
Opens a text file for input.
Reads one line into the given string variable.
Closes the input file.
IF %EOF% THEN
block of command lines
Executes commands within the IF...END block only if the input file is positioned at its end.
Shapes can be defined by Edges, which are longitudinal line segments
represented by their end points:
EDGE l1,t1,v1, l2,t2,v2
The EDGE statements should occur in order such that a section cutting
across the lines would have the intersection points occurring in a
counter clockwise sequence. Up to 30 edge statements can be used in
one shape creation.
edge -35, 7, 0, -53, 3, 5
edge -35, 7, 8, -53, 3, 8
DISPLAY PRINT options
Several parameters affect the generation and presentation of the offsets
DISPLAY [(part\component)] PRINT [/FILE:name] [/MARK[:SAVE][:NEW]] [/UNITS:code]
/FILE allows for writing the offsets table as a text file.
/MARK causes line markings (deck edge, chines, etc.) to be automatically added
to the geometry. If the SAVE subparameter is present, the geometry file is
updated. If the NEW subparameter is present, any existing line markings are
removed before the automatic marking is done.
/UNITS sets the units in which the offsets are to appear. This may
M - meters
CM - centimeters
MM - millimeters
FT - decimal feet
IN - decimal inches
FI - feet and decimal inches
FIE - feet inches and eighths
FIS - feet inches and sixteenths
/FORMAT specifies whether the offsets are to be organized as longitudinal
lines or as sections.
CHOP FWD|AFT, location
Removes all geometry in the model forward or aft of the given location.
RADIUS [(n)] r
Used with rectangular-section shape definitions to radius a corner. For
ends 0, 100
The optional n indicates to which corner the radius is to be applied,
going in the counter clockwise direction starting with the bottom right corner.
ROTATE t, h, a [,p] [,NODOUBLE]
A shape definition made of Edges (either explicit or implicitly derived from Top, Bottom, etc.
boxes) as well as general shapes can be rotated about the trim axis, the heel axis, and the
azimuth axis. The rotation turns around the origin unless a part Reference point has been
assigned, allowing optional pivot point height at centerline. When referencing a shape from
another component, the original shape is unaffected (and not made to cover both sides when
copied from a centerline component if NODOUBLE is present). For example,
rotate 0,0,45 `rotates 45 degrees in plan view
ICE side, top
Converts the component to a layer on its surface with the given thicknesses.
ICE 0.1, 0.2
This creates a tank which would be loaded at 100% to represent the
weight of the ice on the focsle.
$DISPLACERS and $SAILS keywords for PARTS list
The keywords $DISPLACERS (meaning all displacers) and $SAILS (meaning all
sails) may be used when specifying the default PARTS list and in commands
having part (list) parameter.
If you would like to see another bulletin created regarding a specific topic,
please email Creative Systems, Inc. at firstname.lastname@example.org.
Copyright (C) 2020
Creative Systems, Inc.