You are on page 1of 109

Appendix A: Error Codes • Overview

Appendix A
Error Codes

Overview
MultiSurf handles two principal classes of errors during its operation:
(1) Model File Errors: while reading a MultiSurf model file from disk.
(2) Geometry Errors: while evaluating the model geometry.
These kinds of errors do not threaten the functioning of the program — you fix the
error(s), then continue right on with your work. MultiSurf lets you know what is
wrong by opening the View/ Errors window and displaying a diagnostic error code
(number) and a brief notation of what the code means. In this appendix, we:
• explain how MultiSurf handles the two classes of errors
• list the error codes, in numerical order, along with some explanatory notes

Model File Errors 100 - 199


Model file errors are errors in the format of the disk file in which the model is saved.
Many of these are trapped while the model file is being read in and transformed line-
by-line to its internal representation. For example, the program knows when a line
starts with an unrecognizable entity keyword or when an object name used in an
entity definition has not been assigned to an object. In these cases, the program
displays, in the wireframe window, the objects in the file that were successfully read.
In the errors window, it lists one or more numerically-coded diagnostic error
messages. The best fix is to select Edit/ Model File, and try to correct the error in text
editing mode. Refer to Appendix F: “Entity Specification Syntax for Model File Text”
on page 77, and to the Reference section “Entity Descriptions”, to see that you are
conforming to the entity specification.
MultiSurf should not find model file errors in a file that was created and edited
interactively within the program; it is designed to be smart enough to prevent that.
We would consider such an error evidence of a program bug, and request that you
send us the problem file and a description of the steps taken to create it. However,
model file errors can easily occur following Edit/ Model File, if you do something
wrong in the text editing. Also they can occur in model files you have created

MultiSurf 4.0 Error Codes • 5-1


Appendix A: Error Codes • Model File Errors 100 - 199

outside the program, for example in a word processor. In these cases, they are very
likely caused by your failure to adhere to the correct format for a model file.
102. The entity is not recognized by this program version
A line begins with a word (an entity keyword) which is not the name of a valid
MultiSurf entity. Check the spelling of the entity keyword in the reference card
“MultiSurf Entity Specifications Summary”. Entity keywords are not case sensitive.
A given version of MultiSurf may not support all the entities listed on the reference
card, in Appendix F, or in the “Entity Descriptions”.
103. The object name is already in use
The second item in an object description is its name. Object names have to be unique.
Apparently you are trying to assign to a second object a name you already used.
104. Unexpected semicolon encountered; object data was
incomplete
The semicolon ; is used to end each object in a model file. Apparently a semicolon
was encountered before all the data for an object was read in. Most likely you have
left out one or more data items. This error will also occur if you omit the closing
brace } in an entity which uses braces { }.
105. Expected semicolon not found; object has excess data
The semicolon ; is used to end each object in a model file. Apparently all the data
for an object was complete, but the next thing in the file was not a semicolon. Check
the entity description. Most likely, you are supplying too much information or you
have omitted the ; needed to terminate an object.
106. At least one entry is required in these braces {...}
Braces { } are used in the model file to surround lists of variable length, e.g., the list
of control points for a BCurve. There is no situation where the list can be empty.
107. An expected open brace { was not found
Braces { } are used in the model file to surround lists of variable length, e.g., the list
of control points for a BCurve. At the point where the program expects such a list to
occur, something other than the opening brace was found. Check for extra numbers
in the series (typically color, visibility, divisions, type, etc.) that precedes the {.
108. Invalid use of the default name ‘*’
‘*’ can serve in place of an object name for reference to some entity classes, such as
point, curve, knotlist, or relabel. Defaults do not exist for all entity classes, however;
for example, ‘*’ is an invalid reference for a bead, a line, or a surface.
109. One or more of this object's supports were left undefined
(or misspelled)
Every object used as support for another object must be defined somewhere in the
model file. Check the spelling (including capitalization) of the support names; object
names are case sensitive.
110. An object is the wrong class of entity to serve as a
support
There are specific rules about which MultiSurf entities can serve in various roles in
creating an object (check the entity description). For example, a line can serve as a
curve, but a curve can’t serve as a line, for very logical reasons.
111. The specified type index is invalid for this entity
Many entities have a type as part of their makeup — an index selecting spline order,
a foil section, etc. Each entity has its own range of valid types, which are checked
during read-in. Check the entity description for valid type numbers.

5-2 • Error Codes December 1998


Appendix A: Error Codes • Model File Errors 100 - 199

114. Unexpected end of file


Apparently the file ended in the middle of a line. Examine the file in Windows
Notepad (or other text editor) to see if it’s complete.
115. The visibility index is invalid for this entity
Valid ranges for visibility indices depend on the entity class: points, curves, surfaces,
etc. See Reference chapter “The MultiSurf Model File - Contents of a Model File: (5)
List of objects - Visibility.”
116. Invalid statement in header portion of file
A file line occurring before the BeginModel statement could not be understood.
Check the format of this portion of the file. See Reference chapter “The MultiSurf
Model File - Contents of a Model File” sections (1), (2), and (3).
117. File line length exceeded a program limit
See “Appendix D: Program Limits” for limits on line lengths in files.
118. Value out of range (0-255)
Some integer values in the model file are limited to this range (one byte).
119. This object was named as a support, but was never defined
or created
Create the object so named, or specify a different support.
120. File has later language version than supported
The first line of a model file specifies the language version number. The file being
read in has a later number than your program version, and may be incompatible.
Consider upgrade to current version.
121. Slash character (/) is missing in this line
The slash is essential punctuation in the file line for every object type. Check
“Appendix F: Entity Specification Syntax for Model File Text” for its correct position.
122. Object name has one or more invalid characters
A limited number of characters are valid for use in object names: letters, digits, some
punctuation marks. See Reference chapter “Defining Objects - Entity Attributes:
General - Object name.”
123. Line ends before object name
A file line ended unexpectedly, apparently with only one token, an entity name.
124. Unexpected open brace ({); probable missing data
Braces are used in the model file to surround lists of variable length. A { character
was found in an invalid position. Most likely, you have omitted one or more
required data items before the list.
125. Unexpected close brace (})
Braces are used in the model file to surround lists of variable length. A } character
was found in an invalid position.
126. Unexpected semicolon (;); probable missing data
The semicolon ; is used to end each object in a model file. Apparently a semicolon
was encountered before all the data for an object was read in. This will also occur if
you omit the closing brace } in an entity which uses braces { }.
127. Unexpected slash (/); probable missing data
The slash is essential punctuation in the file line for every object type. Check
“Appendix F: Entity Specification Syntax for Model File Text” for its correct position.

MultiSurf 4.0 Error Codes • 5-3


Appendix A: Error Codes • Model File Errors 100 - 199

128. Unexpected open parenthesis (; probable missing data


There is no valid usage of parentheses in the model file except within model-level
and geometry-level comments and object user data.
129. Line ends before color
For most objects, a color index is the third data item. Apparently the file line is
incomplete.
130. Line ends before visibility
For most objects, a visibility index is the fourth data item. Apparently the file line is
incomplete.
131. Required divisions x subdivisions are missing
Curve objects require one divisions x subdivisions specifier (e.g. 16x2), surface
objects require two (e.g. 8x4 10x2).
132. Required orientation index is missing
Surface objects require an orientation value (0 or 1) before the /.
133. Unexpected end of line; probable missing data
The semicolon ; is used to end each object in a model file. Apparently a semicolon
was encountered before all the data for an object was read in. This will also occur if
you omit the closing brace } in an entity which uses braces { }.
134. A tagged data value uses an undefined tag
Tagged data items are in the form tag:value. Only a limited number of tags are
defined (see Reference chapter “The Model File - (5) List of objects - Optional tagged
data.”) This error can be caused by object user data without quotes.
135. The specified model has one or more cyclic dependencies
According to the logical relationships specified in the file, some object depends
indirectly on itself (and that is not allowed).
136. Divisions error: 0 is invalid for divisions or
subdivisions
Division and subdivision values must both be positive integers (1 to 255).
137. The number of characters in the object name exceeds a
program limit
Object names are limited to 16 characters.
138. Color index out of range (0 to 255)
See Reference chapter “Defining Objects - Entity Attributes: General - Color.”
139. Orientation different from 0 or 1
Surface objects require an orientation value before the /. 0 and 1 are the only valid
values. See Reference chapter “Defining Objects - Additional Surface Attributes -
orientation.”
140. Divisions error: (divisions x subdivisions) could not be
read
A divisions specifier is two integers (1 to 255) with the letter x between; no spaces
(e.g. 8x4).
141. Divisions error: divisions out of range (1 to 255)
A divisions specifier is two integers (1 to 255) with the letter x between; no spaces
(e.g. 8x4).
142. Divisions error: subdivisions out of range (1 to 255)
A divisions specifier is two integers (1 to 255) with the letter x between; no spaces
(e.g. 8x4).

5-4 • Error Codes December 1998


Appendix A: Error Codes • Model File Errors 100 - 199

143. A supposed tagged item token lacks a colon (:)


Tagged data items are in the form tag:value. The colon is required. This error can
be caused by object user data without quotes. See Reference chapter “The Model File -
(5) List of objects - Optional tagged data.”
144. Object user data lacks a closing quote
Object user data must be enclosed in double quote marks ( “ ” ). If the closing quote
is missing, the program tries to read the rest of the line as part of the user data. See
Reference chapter “The Model File - (5) List of objects - Optional user data.” This error
will also occur if you try to embed double quotes within a user data comment or if
there is a stray double quote after the slash in the object definition.
145. Length of object user data exceeds limit
The limit is 40 characters. See also Appendix D: “Program Limits” and Reference
chapter “The Model File - (5) List of objects - Optional user data.”
146 *0 or *1 used for support other than bead or ring
Specify a real, user-named object for the support.
147. u-divs x u-subd x v-divs x v-subd exceeds limit
The program limit is 160,000 for this product (an example: 20x20 x 20x20). See also
Appendix D: “Program Limits.”
148. Divisions multiplier out of range
Use Settings/ Model to set a valid Divs. multiplier; range is 1 - 10.
149. Predefined plane is not permitted in this position
Use a plane entity (Plane2, Plane3, XPlane, YPlane, ZPlane) instead.
150. Unsupported or unreadable model units
Use Settings/ Model to choose units, then save your model again.
151. Unsupported or unreadable model symmetry specification
Use Settings/ Model to make your symmetry specification, then save your model
again.
152. Model home view latitude out of range (-90 to 90)
Use Settings/ Model and specify home view with Lat between -90 and 90.
153. Model home view longitude out of range (-360 to 360)
Use Settings/ Model and specify home view with Lon between -90 and 90.
154. Model decimal places specification less than 0; taking
default (3)
If you want to change from the default 3 places, use Settings/ Model/ Decimal
places; range is 1 - 6.
155. Model decimal places specification above limit (6); taking
default (3)
If you want to change from the default 3 places, use Settings/ Model/ Decimal
places; range is 1 - 6.
156. Model file layers on / off specification unreadable
Use Settings/ Layers to reset layers on/off, then save your model again.
157. Model divisions multiplier less than 1; taking default (1)
If you want to change from the default 1, use Settings/ Model/ Divs. multiplier;
range is 1 - 10.

MultiSurf 4.0 Error Codes • 5-5


Appendix A: Error Codes • Model File Errors 100 - 199

158. Model divisions multiplier over limit (10); taking default


(1)
If you want to change from the default 1, use Settings/ Model/ Divs. multiplier;
range is 1 - 10.
159. Fewer than 6 values specified for model extents
Use Settings/ Model and click <Update Extents>, then save your model again. Or if
you are editing via text, be sure you specify 6 values (X-low, Y-low, Z-low, X-high,
Y-high, and Z-high).
160. The specified model extents are impossible; (high<low)
Use Settings/ Model and click <Update Extents>, then save your model again. Or if
you are editing via text, be sure you list X-low, Y-low, Z-low followed by X-high, Y-
high, and Z-high and that the low values are lower than the high values.
161: Expected a file name
This error happens when a file name is expected (such as a .3DA file for a TabCurve),
but none is found where expected.
163: Expected one data type and got another
This happens when, say, a character string between double-quotes is expected and
an integer is found instead or a decimal number is expected and a character string is
found. Check the object to be sure that all its data is specified, and in the correct
order. See “Appendix F: Entity Specification Syntax for Model File Text” and “The
MultiSurf Model File”.
164: Unknown application name in file header
All MultiSurf model files must begin with the word MultiSurf. You’ll need to use a
text editor (such as Notepad or WordPad) to fix this problem.
166: An integer is expected but not found
This error would occur, for instance, if you had entered 12a or 12.4 when the
program was expecting an integer (e.g. 12).
167: A real number (decimal or integer) is expected but not
found
This error would occur, for instance, if you had entered 12.1.0 or 12a when the
program was expecting a real number (e.g. 12.1 or 12).
168: Double quotes surrounding a character string expected but
not found
The program is looking for (and has not found) a pair of double quotes surrounding
a character string. This error would occur, for instance, if you had entered abc
instead of “abc”, or “123 instead of “123”, or ‘point 19’ instead of “point 19”.
170: The sequence of characters forming a hexadecimal string
has odd length
Hexadecimal strings must have an even number of hexadecimal digits. This error
might happen in layer on/off specification when creating or editing a model file as
text (e.g. in Edit/ Model File or in a text editor).
171: The sequence of characters forming a hexadecimal sequence
is too long to be read in one run.
Break the hexadecimal sequence into two or more shorter even-length sequences of
hexadecimal digits.
172: There is a character other than ‘0’ through ‘9’, ‘a’
through ‘f’, or ‘A’ through ‘F’ in a hexadecimal sequence
Be sure your hexadecimal sequences (e.g. for layer on/off settings) include only the
legal characters: 0 through 9, a through f, and A through F.

5-6 • Error Codes December 1998


Appendix A: Error Codes • Geometry Errors 200 - 399

173: The sequence of characters forming a hexadecimal sequence


is longer or shorter than expected
This error would occur, for instance, if an integer were specified in hexadecimal
format and it had more or less than the required 8 hexadecimal digits.
177: Cannot save file to disk; possibly ran out of disk space
MultiSurf was unable to save the file to the disk (drive or floppy) specified. Make
more disk space available, then try to save the file again.
178. The entity is not supported by this program version
Different versions of MultiSurf support different sets of entities. The entity in
question is not supported by the program version you are running. This error is most
likely to happen if you have received a model from another user who has a more
recent or more capable version of the program.

Geometry Errors 200 - 399


Geometry errors are errors which occur during the evaluation of model geometry.
Geometry errors come in several flavors. Some are places where a division by zero
would occur — the program checks before dividing, and graciously issues an error
message instead of hurling you back to Windows. Some result from logical defects in
the model — for example, a snake using control points that are on different surfaces.
Some come about when iterative calculations reach their limits without finding a
solution — for example, a complex surface-to-surface intersection that fails to
converge.
When a geometry error is encountered, MultiSurf displays a wireframe of the part of
the model that evaluated correctly, and lists one or more numerically-coded
diagnostic error messages in the errors text window. Generally, the best fix is to use
View/ Selection Set to select the object in error, then Edit/ Attributes to correct the
geometry. You may need to select and correct a support object that is causing the
error. Refer to the Reference section “Entity Descriptions”, or to Appendix F: “Entity
Specification Syntax for Model File Text” on page 77, to see what is needed for your
object to conform to its entity specification.
Note that many of the errors may be number 284 “Object is in error because one or
more of its supports is in error”. Don’t fret! — fixing the object(s) listed above, that
have other errors, will get rid of these dependent-object errors.
201. Program math error; should not occur. Please report to
AeroHydro
This catchall error should occur only as the result of incorrect program logic. It is not
your fault. Please report such an error to us in detail for program correction (see
“Getting Started - Technical Support”).
202. Arc type 1,2,3: coincident points; arc is indeterminate
If any pair of supporting points is identical (and the other is different), MultiSurf
cannot determine what plane the arc is supposed to lie in.
203. Type-1 Arc: points lie on a line, not in 1-2-3 sequence
The arc specified extends to infinity. Be sure the points are selected in the proper
sequence.
204. Arc type 2,3,6: points lie on a line; arc is indeterminate
The type-2 and type-3 arcs use point3 to establish the plane the arc (circle) should lie
in. If the three points all lie on a line, MultiSurf cannot determine a plane.

MultiSurf 4.0 Error Codes • 5-7


Appendix A: Error Codes • Geometry Errors 200 - 399

206. Zero divisions for a curve or snake


Any curve or snake requires at least one division for tabulation and display.
Both values must be at least 1.
207. Zero divisions x subdivisions in u-direction of surface
Both values must be at least 1.
208. Zero divisions x subdivisions in v-direction of surface
Both values must be at least 1.
209. Improper sequence of control points for an X-spline
Two or more consecutive control points had out-of-sequence values of the coordinate
specified by type (this is the spline’s “direction of orientation” coordinate). These
coordinate values must be strictly increasing or decreasing; e.g. identical Z-
coordinates for a type-3 XCurve are not allowed.
210. C-spline: Coincident control points
A C-spline passes through its data points. If two successive points are identical, the
calculation fails. This can happen on a CCurve when the same point is named twice
or when two successive points happen to come out with identical coordinates. It can
happen on a CSnake when two successive magnets have identical u,v positions. It is
also possible on a CLoftSurf, if master curves cross.
211. C-spline: Singular matrix in solution
This error should never occur; it is not your fault if it does. Please report the
occurrence to us (see “Getting Started - Technical Support”).
212. A foil must have 3, 4, or 5 control points
Foils can be constructed with 3, 4, or 5 control points — 3 for a half section, 4 for a
symmetric full section, or 5 for an asymmetrical or symmetrical full section.
MultiSurf does not accept any other number of control points for an FCurve. This is
true for a Foil Snake or FLoftSurf as well.
213. CLoftSurf: Crossed master curves, between u=0 and u=1
For at least one u-value being evaluated on the real portion of the surface, the lofting
C-spline has coincident control points. Revise the master curves so they don’t cross.
214. CLoftSurf: Crossed master curves, for u<0 or u>1
For at least one u-value being evaluated beyond the real portion of the surface, the
lofting C-spline has coincident control points. Revise the master curves so they don’t
cross.
216. RadiusArc: Coincident control points
If the 3 supporting points are not distinct, they don’t determine a plane for the arc to
lie in. Try separating the points.
215. PolyCurve: labeling error; transition t values must be
strictly increasing
The t parameter values t1, t2 ... tN at the ends of the component curves must be a
strictly increasing sequence with values between 0 and 1.
217. Plane2: Coincident points; plane is indeterminate
A Plane2 requires two points. The line from point1 to point2 defines the normal
direction to the plane. If point1 and point2 are identical, MultiSurf cannot determine a
plane.
218. Plane3: 3 points are on a line; plane is indeterminate
A Plane3 requires three points. If the three points lie on a line, MultiSurf cannot
determine a plane. One way this can happen is for any two of the points to be
identical.

5-8 • Error Codes December 1998


Appendix A: Error Codes • Geometry Errors 200 - 399

219. RadiusArc, type 3: Zero angle at point 2


If points 1 and 3 have the same direction from point2, and radius is nonzero, make
the radius zero or open the angle at point2 by moving one of the points.
220. Projection axis line has zero length; direction is
indeterminate
For projection or mirroring with respect to a line, the line has to have nonzero length;
otherwise, it does not define a direction. See Entities reference topics “Collective
Entity Information - Projected Entities or Mirror Entities.”
221. Rotation axis line has zero length; direction is
indeterminate
For rotation about a line, the line has to have nonzero length; otherwise, it does not
define a direction.
222. NURBCurve, NURBSnake: Too few knots in specified knotlist
When you supply a knotlist for a NURBCurve or NURBSnake (instead of taking the
default ‘∗’ for uniform knots), the knotlist has to contain the correct number of knots.
The correct number of knots is: number of knots = number of control points - type + 1
(note the minus sign before type).
223. NURBSurf: Wrong number of knots in knotlist
When you supply a knotlist for a NURBSurf (instead of taking the default ‘∗’ for
uniform knots), the knotlist has to contain the correct number of knots. The correct
number of knots is
for a KnotList: number of knots = number of control points - type + 1 (note the
minus sign before type)
for a KnotList2: number of knots = number of control points + type + 1 (note the
plus sign before type)
224. NURBSurf: Too many zero weights; zero divisor
Depending on its type, a NURBSurf may tolerate one or more zero weights, but too
many in the same area can cause a divide by zero. Zero weights are not
recommended in any case.
225. NURBSurf, BSurf: Invalid ncu (number of control points in
u-direction)
ncu (number of control points in the u-direction) tells a NURBSurf or a BSurf how
many rows there are in its rectangular mesh of control points. This can never be less
than 1, or more than nc (number of control points).
226. NURBSurf, BSurf: nc not evenly divisible by ncu
nc (number of control points) for a NURBSurf or a BSurf is found by counting the
points in braces. ncu (number of control points in the u-direction) is read from the
data before the braces. To make a rectangular mesh, nc must be evenly divisible by
ncu.
227. Conic: Primary axis has zero length; curve is
indeterminate
The line from point1 to point2 forms the primary axis of the conic, needed for both
orientation and directions. The line must have nonzero length (i.e. its endpoints
cannot be identical), otherwise it does not define a direction.
230. Fillet: Supporting snakes 1 and 2 are on different
surfaces
Fillet uses four snakes. Snakes 1 and 2 have to be on one surface, and snakes 3 and 4
on the other.

MultiSurf 4.0 Error Codes • 5-9


Appendix A: Error Codes • Geometry Errors 200 - 399

231. Fillet: Supporting snakes 3 and 4 are on different


surfaces
Fillet uses four snakes. Snakes 1 and 2 have to be on one surface, and snakes 3 and 4
on the other.
233. Helix: axis line has zero length; direction is
indeterminate
The line specified for axis has an essential role in orienting and sizing the Helix. The
line must have nonzero length (i.e. its endpoints cannot be identical), otherwise it
does not define a direction. See Entities reference topic “Collective Entity Information
- NURBS Curves.”
234. NURB curve, snake, or surface: Too many identical knots
At most type + 1 sequential knots can have identical values. See Entities reference
topic “Collective Entity Information - NURBS Curves.”
235. NURBCurve, NURBSnake: too many zero weights; zero divisor
Depending on its type, a NURBCurve or NURBSnake may tolerate one or more zero
weights, but too many in the same area can cause a divide by zero. The error occurs
when the number of sequential zero weights is greater than or equal to type. Zero
weights are not recommended in any case. See Entities reference topic “Collective
Entity Information - NURBS Curves.”
236. KnotList: knot sequence must be non-decreasing
The knot values in a KnotList must be in a non-decreasing sequence each value must
be greater than or equal to the one before it — i.e. { 0. .25 .5 .5 1. }. See “Entity
Descriptions - KnotList.”
237. NURBCurve or NURBSnake: wrong number of knots in knotlist
When you supply a knotlist for a NURBCurve or NURBSnake (instead of taking the
default ‘∗’ for uniform knots), the KnotList has to contain the correct number of
knots. The correct number of knots is
for a KnotList: number of knots = number of control points - type + 1 (note the
minus sign before type)
for a KnotList2: number of knots = number of control points + type + 1 (note the
plus sign before type)
238. RelSurf: Wrong number of offsets (1 or 4 required)
The valid number of corner offsets for an RelSurf is either one or four. If the number
of points is 1, the resulting RelSurf is a pure translation of the basis surface, with its
u=0, v=0 corner located at point1.
239. OffsetSurf: Wrong number of offsets (1 or 4 required)
The valid number of corner offsets for an OffsetSurf is either one or four. If only one
offset is given, the offset is constant.
240. SubCurve: Specified beads are on different curves
The two beads delineating a SubCurve must be on the same curve.
241. SubSnake: Specified rings are on different snakes
The two rings delineating a SubSnake must be on the same snake.
242. SubSurf: Specified snakes are on different surfaces
The snakes which outline a SubSurf must all be on the same surface.
244. SubSurf: Wrong number of snakes (2 or 4 required)
The valid number of snakes outlining a SubSurf is either two or four. If the number
of bounding snakes is 2, the resulting SubSurf is the portion of the basis surface
between the two snakes (effectively a “RuledSubSurf”). If the number of bounding

5-10 • Error Codes December 1998


Appendix A: Error Codes • Geometry Errors 200 - 399

snakes is 4, the resulting SubSurf is the region bounded by the four snakes
(effectively a “BlendSubSurf”).
245. BlendSurf, BlendCtr: Wrong number of boundary curves (4
required)
The only valid number of boundary curves for a blended surface is four. To make a
BlendSurf with 3 sides, use a point for one boundary curve.
246. DevSurf: Minimum of 16 for u-divisions x u-subdivisions
For a DevSurf, the product of u-divisions x u-subdivisions must be at least 16.
247. XLoftSurf: Crossed master curves, between u=0 and u=1
For at least one u-value being evaluated on the real portion of the surface, the lofting
X-spline has improper sequence of control points. Revise the master curves so they
don’t cross. (See also Error 209.)
248. XLoftSurf: Crossed master curves, for u<0 or u>1
For at least one u-value being evaluated beyond the real portion of the surface, the
lofting X-spline has improper sequence of control points. Revise the master curves so
they don’t cross. (See also Error 209.)
249. Blister: Snakes on different surfaces
The snakes delineating a Blister must be on the same surface.
250. Control magnets for snake are on different surfaces
All the magnets defining a snake must be on the same surface.
251. RelSnake: magnet1 on different surface from basis snake
Both magnets must be on the same surface as the basis snake.
252. RelSnake: magnet2 on different surface from basis snake
Both magnets must be on the same surface as the basis snake.
253. PolySnake: component snakes are on different surfaces
All of the snakes composing a polysnake must be on the same surface. (You can
make a PolyCurve from snakes on different surfaces.)
254. PolySnake labeling error; transition t values must be
strictly increasing
The t parameter values t1, t2 ... tN at the ends of the component curves must be a
strictly increasing sequence with values between 0 and 1.
256. SweepSurf: SweepSurf using default guide: path is too
highly curved
Try making the path less highly curved, or create a guide curve and use it rather
than the default guide.
257. SweepSurf: bead is at a zero-velocity point on path
A SweepSurf is being evaluated at a zero-velocity point on “path” (the curve
designated by bead). This will occur, for example, if “path” is a point object.
Relabeling of “path” can also produce a zero-velocity point: a zero-velocity point is a
place where the relabel graph has zero slope.
258. SweepSurf: guide point lies on tangent to path
A SweepSurf is being evaluated at a u parameter value where the point taken from
“guide” (curve2) lies on the tangent to “path” (the curve designated by bead), or
possibly it coincides with the point taken from “path”. In this situation, MultiSurf
does not have enough information to orient a copy of “shape” (curve1).
259. SweepSurf: Frame is indeterminate
This error should not occur; it should be trapped as error 257 or 258.

MultiSurf 4.0 Error Codes • 5-11


Appendix A: Error Codes • Geometry Errors 200 - 399

260. IntSnake: No intersection found


MultiSurf failed to find any intersection between the cutting object and the object
being cut. Check your selection of supporting objects, and try to visualize the cutting
surface for this case. See Entities reference topic “Collective Entity Information -
Intersection Entities.”
261. IntBead, IntRing, IntRing2: Singular equations
The search for an intersection point failed. This can happen when the intersection
does not exist (e.g., intersection of a line with a parallel plane); or when the search
starts at a zero-velocity point on the curve, or at a point where the curve is parallel to
the cutting surface. Try creating/moving the seed bead or ring. See Entities reference
topic “Collective Entity Information - Intersection Entities.”
262. IntBead, IntRing, IntRing2: Failed to converge
The search for an intersection point failed to reach a firm solution in 10 steps. This
can happen when the intersection does not exist (e.g., a bend in a curve which
approaches the cutting surface but does not actually intersect it); when the
intersection is at a very low or grazing angle; or when the starting point for the
search (the seed bead or ring) is too far from the true intersection point. Try
creating/moving the seed bead or ring. See Entities reference topic “Collective Entity
Information - Intersection Entities.”
263. ProjSnake or ProjMagnet: Projection failure
For at least one point, the projection line has zero length or indeterminate direction.
This can happen, for example, when the mirror is a line, and the curve being
projected intersects the line at some point.
264. ProjSnake or ProjMagnet: Coordinate singularity on surface
The search for a point of intersection started out, or ended up, at a place on the
surface where a normal could not be calculated. This is usually at a degenerate edge
or corner of the surface, e.g. a three-cornered surface.
265. ProjSnake or ProjMagnet: Singular equations
The search for an intersection point failed. This can happen when the intersection
does not exist (e.g., intersection of a line with a parallel plane); or when the search
starts at a coordinate singularity on the surface, or a point where the surface is
parallel to the line of projection or intersection. Try moving the seed magnet.
266. IntSnake, ProjSnake or ProjMagnet: Failed to converge
The search for an intersection point failed to reach a firm solution in 10 steps. This
can happen when the intersection does not exist (e.g., a projection line which
approaches the cutting surface but does not actually intersect it); when the projection
line intersects the surface at a very low angle; or when the starting point for the
search (the seed magnet) is too far from the true intersection point. Review the
objects used to specify the intersection and try to visualize the projection lines. Try
creating/moving the seed magnet.
267. ProjSnake or ProjMagnet: mirror surface different from
basis surface
When mirror/surface is a surface, it has to be the same surface that the projected snake
or magnet lies on.
268. PolySurf: u values must be strictly increasing
The u parameter sequence u1, u2, ... uN at the ends of the component surfaces must
be a strictly increasing sequence with values between 0 and 1.
270. Relabel: too few entries (minimum of 2 required)
A Relabel object requires at least two entries, 0. and 1.

5-12 • Error Codes December 1998


Appendix A: Error Codes • Geometry Errors 200 - 399

272. Arc types 4,5: Coincident points


The type-4 and type-5 arcs are specified by three points. If the first two of these
points are identical, there is insufficient information to orient the arc in space.
273. Type 4 or 5 arc: Points lie on a line, in 3-1-2 sequence
The type-4 and type-5 arcs are specified by three points. If point2 and point3 lie on a
line through point1, but in opposite directions, the construction implies a circle of
infinite radius and indefinite orientation.
274. TabPoint: Too few points in specified 3DA file; unexpected
EOF
The point no. specified is larger than the number of points (records) in the specified
.3DA file. Review the contents of the .3DA file. This error also occurs if point no. is
negative.
275. TabCurve: Too few polylines in specified 3DA file;
unexpected EOF
The polyline no. specified is larger than the number of polylines (zero-pen records) in
the specified .3DA file. Review the contents of the .3DA file. This error also occurs if
polyline no. is negative.
276. TabCurve: Too many divisions
t-divisions × t-subdivisions for the TabCurve must agree with the number of line
segments in the .3DA polyline: (t-divisions × t-subdivisions) = (number of polyline
points - 1). Review the contents of the .3DA file; change the TabCurve divisions x
subdivisions to match.
277. TabSurf: Insufficient patches in file
The patch no. specified is larger than the number of patches in the specified .PAT file.
Review the contents of the .PAT file. This error also occurs if patch no. is negative.
278. TabSurf: Wrong number of divisions
Divisions for the TabSurf and the number of mesh points nu, nv in the u and v
directions in the .PAT file must agree: (u-divisions × u-subdivisions) = (nc - 1), and (v-
divisions × v-subdivisions) = (nv - 1). Review the contents of the .PAT file; change the
TabSurf divisions x subdivisions to match.
279. OffsetPt: Located at coordinate singularity; indeterminate
normal
The magnet used in specifying this Offset Point was located at a place where
MultiSurf could not determine a unique normal direction to the surface. Usually this
occurs on degenerate edges or corners. It can also result from zero-velocity points on
edge curves or master curves used to build the surface.
280. TanPoint: Located at zero-velocity point on curve;
indeterminate direction
The bead locating this TanPoint was at a place where MultiSurf could not determine
the tangent direction. This can occur when a curve degenerates to a point, e.g. a line
whose two endpoints are identical. It can also result from relabeling: a zero-velocity
point is a place where the relabel graph has zero slope.
281. Frame3: Points 1 and 2 coincide; direction is
indeterminate
The three points specifying a Frame3 object must all be distinct.
282. Frame3: Points 1 and 3 coincide; direction is
indeterminate
The three points specifying a Frame3 object must all be distinct.

MultiSurf 4.0 Error Codes • 5-13


Appendix A: Error Codes • Geometry Errors 200 - 399

283. Frame3: Points 1, 2 and 3 lie on a line; indeterminate


normal direction
The third point specifying a frame must lie off the line from point1 to point2, or there
is insufficient information to fix the rotation of the frame.
284. Object is in error because one of its supports is in error
An object cannot be correctly evaluated if a supporting object is in error. This is true
even if the support just has invalid color or visibility. This error will disappear when
the support object is corrected.
285. TabPoint, TabCurve, TabSurf, WireFrame: Specified file
could not be opened - wrong filename, directory, or file does
not exist
MultiSurf was unable to locate and open the specified file. Check the filename (and
optional extension) given in the object data. Be sure the file is in the correct directory.
286. TabPoint, TabCurve, TabSurf, WireFrame: Error reading data
from file
The file specified to contain the data for this object does not conform to the .3DA or
.PAT format. You can use Windows Notepad or another text editor to examine the
file contents. For information about file formats, see Appendix C: Output File
Specifications.
287. Foil: Could not open file TYPExxx.FOI - it may be in the
wrong directory, or it may not exist
User-defined foils require a correctly named .FOI file. See Entities reference topic
“Collective Entity Information - Foil Curves.”
288. Foil: Error reading file TYPExxx.FOI - File does not
follow expected format
User-defined foils require a correctly formatted .FOI file. See documentation for
FOILFIT, in Appendix B.
289. One or more supports are the *EMPTY* placeholder object
*EMPTY* is used to initialize a list of supports during object creation, but it does not
represent a valid object. Select a valid object as the support.
290. PolySurf: First patch orientation couldn’t be classified
The component surfaces must connect together end-to-end. The program could not
determine the correct orientation of the first component surface to make this
connection.
291. PolySurf: Second or later patch orientation couldn’t be
classified
The component surfaces must connect together end-to-end. The program could not
determine the correct orientation of one or more component surfaces to make this
connection.
292. IntRing2: snake1 and snake2 are on different surfaces
The two intersecting snakes must belong to the same surface. (It may be that what
you really need is a different kind of object such as an IntRing, IntBead, or
IntMagnet.)
294. GeoSnake: Singular equations; no solution
The search for a geodesic path failed to find a solution for the specified curvature
distribution. The most likely cause is that there are multiple geodesic paths that
satisfy the conditions; for example, between the north and south poles of a sphere,
any meridian is a geodesic (great-circle path).

5-14 • Error Codes December 1998


Appendix A: Error Codes • Geometry Errors 200 - 399

295. GeoSnake: Failed to converge


The search for a geodesic path failed to find a solution for the specified curvature
distribution. Some likely causes are: (1) the specified curvature is too high, so no
solution exists; (2) multiple geodesic paths that satisfy the conditions; (3) poor
starting path; (4) coarse subdivisions on the host surface; (5) lack of smoothness of
the host surface; (6) tolerance too tight. Try adding more intermediate magnets,
increasing subdivisions of the host surface, or loosening the tolerance if possible.
296. BSubCurve, SubCurve: At least one bead must identify an
actual curve
When the system beads *0 and *1 are used as supporting objects, they must be
accompanied by at least one real bead that identifies the supporting curve; otherwise
the supporting curve is undetermined.
297. SubSnake: At least one ring must identify an actual snake
When the system beads *0 and *1 are used as supporting objects, they must be
accompanied by at least one real ring that identifies the supporting snake; otherwise
the supporting snake is undetermined.
298. BSubCurve: A minimum of two beads is required
You must use at least 2 beads to define a BSubCurve. (A one-bead BSubCurve would
be the same as the bead.)
299. ProcCurve/ProcSnake/ProcCvSurf: Control beads/rings must
be AbsBead or AbsRing
Other types of beads such as RelBeads or IntBeads are not allowed as they do not
have the proper freedom to traverse their supporting curve.
300. BFitSurf: Too few u-control points for the specified B-
spline type
ncu must be greater than utype + 1.
301. BFitSurf: Too few v-control points for the specified B-
spline type
ncv must be greater than vtype + 1.
302. BFitSurf: Fitting failed to meet specified tolerance
Try one of the following: lowering the tolerance, increasing the number of control
points or changing the divisions of the basis surface.
303. ProcCurve, ProcCvSurf: Construction failed for at least
one bead position
Given the generality of the ProcCurve/ProcCvSurf, there are many reasons why this
may occur. The best thing to do is to try locating the beads in various positions to
find where the construction is failing; extreme positions are a good first try.
304. BFitSurf: Insufficient data in surface table for u
direction
Try making more subdivisions on the basis surface; ncu must be greater than basis
surface u-divisions x u-subdivisions + 3.
305. BFitSurf: Insufficient data in surface table for v
direction
Try making more subdivisions on the basis surface; ncv must be greater than basis
surface v-divisions x v-subdivisions + 3.
306. BFitCurve: Too few control points for the specified B-
spline type
nc must be greater than type + 1.

MultiSurf 4.0 Error Codes • 5-15


Appendix A: Error Codes • Geometry Errors 200 - 399

307. BFitCurve: Insufficient data in curve table


Try making more subdivisions on the basis curve; nc must be greater than basis
curve divisions x subdivisions + 3
308. BFitCurve: Fitting failed to meet specified tolerance
Try one of the following: lowering the tolerance, increasing the number of control
points or changing the divisions of the basis curve.
309. CvContours: The curve has a zero tangent; plane is
indeterminate
The plane used to cut each contour is determined by a vector which is tangent to
curve. If this vector has zero length, the plane cannot be determined. The primary
causes of zero length tangents are: (1) strong relabeling, usually at one end of curve;
(2) coincident control points on a BCurve curve.
310. TabPoint, TabCurve, TabSurf, WireFrame: Specified file is
empty (zero length)
The .3DA or .PAT file that has been named contains no data, therefore nothing can
be displayed. Make a new file!
313. IntRing2: Did not find a crossing
If you have not used rings in the specification, try using one or more. If you already
use ring(s), try putting them closer to the desired intersection.
314. BlendPoint, type-2: The weights sum to zero; would cause
division by zero
Each weight for the type-2 BlendPoint is divided by the sum of all the weights. Don’t
choose weights that sum to zero for the type-2 BlendPoint; if you really need to do
this sort of thing, use the type-1 BlendPoint.
315. ProcPtSurf: All magnet supports must be AbsMagnets
Other types of magnets such as RelMagnets or IntMagnets are not allowed as they
do not have the proper freedom to traverse their supporting surface.
318. NURBSurf: The knotlist specified for the u-direction has
too few knots
When you supply a knotlist for a NURBSurf (instead of taking the default ‘∗’ for
uniform knots), the knotlist has to contain the correct number of knots. The correct
number of knots is: number of knots = number of control points - type + 1 (note the
minus sign before type).
319. NURBSurf: The knotlist specified for the u-direction has
too many knots
When you supply a knotlist for a NURBSurf (instead of taking the default ‘∗’ for
uniform knots), the knotlist has to contain the correct number of knots. The correct
number of knots is: number of knots = number of control points - type + 1 (note the
minus sign before type).
320. NURBSurf: The knotlist specified for the v-direction has
too few knots
When you supply a knotlist for a NURBSurf (instead of taking the default ‘∗’ for
uniform knots), the knotlist has to contain the correct number of knots. The correct
number of knots is: number of knots = number of control points - type + 1 (note the
minus sign before type).
321. NURBSurf: The knotlist specified for the v-direction has
too many knots
When you supply a knotlist for a NURBSurf (instead of taking the default ‘∗’ for
uniform knots), the knotlist has to contain the correct number of knots. The correct

5-16 • Error Codes December 1998


Appendix A: Error Codes • Geometry Errors 200 - 399

number of knots is: number of knots = number of control points - type + 1 (note the
minus sign before type).
323. ArcLenBead, Ring: Attempt to differentiate arc length at a
zero-velocity point
The search for arc-length position failed trying to cross a zero-velocity locations on
the host curve. A zero-velocity point is a place on the host curve where a small
change in the t parameter does not cause any movement along the curve. This can be
the result of a strong relabel; for example, {0, 0, 1} causes a zero velocity at t = 0.
Similarly, duplicated control points on a BCurve will cause zero velocity.
324. ArcLenBead, Ring: Search for arc length failed to converge
The search for an arc-length position satisfying the specifications failed to converge.
This might result from (1) A zero-velocity location on the curve; (2) Host curve too
coarsely subdivided; (3) Discontinuity in the host curve.
327. TrimSurf: A boundary loop is oriented backwards
(This error should not occur)
328. TrimSurf: A boundary loop crosses itself
No TrimSurf boundary loop is allowed to intersect itself, e.g a figure-8. Revise the
configuration of the boundary snakes.
329. TrimSurf: Two or more boundary loops cross each other
TrimSurf boundary loops are not permitted to cross. Revise the configuration of the
boundary snakes.
330. TrimSurf: None of the boundary loops has CCW orientation
in u,v-plane
The outer boundary of a TrimSurf must be a counter-clockwise loop. Reorient the
snakes that mark the outer boundary.
331. TrimSurf: More than one boundary loop has CCW orientation
in u,v-plane
The outer boundary of a TrimSurf must be a counter-clockwise loop. Only one
boundary loop can be the outer boundary. Reorient the snakes of inner boundaries
so they are clockwise in the u,v-plane.
332. TrimSurf: One trimming loop is an exact duplicate of
another
Either the outer or an inner boundary loop is duplicated. Remove the duplicate loop
from the list of trimming snakes.
333. TrimSurf: One CW trimming loop is inside another CW
trimming loop
Clockwise trimming loops represent inner boundaries. Extra boundaries not in
contact with the keeper region are not permitted. Remove the extra loops from the
list of boundary snakes.
334. TrimSurf: A CW trimming loop is outside the CCW trimming
loop
All inner trimming boundaries, signified by clockwise orientation in the u,v-plane,
must be enclosed within the outer trimming loop. Revise the configuration of the
boundary snakes.
335. TrimSurf: The CCW trimming loop is inside a CW trimming
loop
The outermost trimming boundary must be the outer boundary, a counterclockwise
loop in the u,v-plane. Revise the configuration of the boundary snakes.

MultiSurf 4.0 Error Codes • 5-17


Appendix A: Error Codes • Geometry Errors 200 - 399

342. BlendSurf2: A supporting object does not qualify to


establish a specified tangency
This occurs when a boundary curve is a straight line or a twisted curve AND you
have specified tangency along this edge.

5-18 • Error Codes December 1998


Appendix A: Error Codes • Geometry Errors 200 - 399

343. BlendSurf2: Normal direction could not be evaluated from a


supporting object
With type (1) tangency, could not evaluate the surface normal at some point along
the snake.
With type (2) tangency, the curve probably has a zero-velocity point.
With type (3) tangency, one of the adjacent boundary curves had zero velocity at the
end.
344. BSubSnake: A minimum of 2 bead or ring supports is
required
You must use at least 2 beads/rings to define a BSubSnake. (A one-ring BSubSnake
would be the same as the ring.)
346. PolyCurve2: Unable to assign transition t values to
balance velocities at knots
The only known cause of this is zero velocity at an end of a component curve.
349. RadiusArc, type 1 or 2: 3 points are on a line; plane is
indeterminate
The type-1 and type-2 RadiusArcs use point2 to establish the plane the arc should lie
in. If the three points all lie on a line, MultiSurf cannot determine a plane.
350. RadiusArc, type 1 or 2: Points 1 and 3 are more than (2 x
radius) apart
Specify a larger radius or move points 1 and 3 closer together.

MultiSurf 4.0 Error Codes • 5-19


Appendix B: Utility Programs • Overview

Appendix B
Utility Programs

Overview
This appendix contains the documentation for a number of utilities that can make
your life a little easier. Most of them are file conversion programs that allow you to
import files from various other hull design programs and to export files to CAD
programs. There are also a few miscellaneous utilities specific to MultiSurf. Here’s
the line-up:
File import utilities
FL2MSF — converts FAIRLINE/2 and AutoYACHT .REP files to MultiSurf .MSF
files
FY2MSF — converts FastYacht .NRB files to MultiSurf .MSF files
MAC2MSF — converts MacSurf .CTR files to MultiSurf .MSF files
DXF2MSF — converts AutoCAD DXF files to MultiSurf .MSF files
IGES2MSF (IGES2NBS + NBS2MSF) — converts IGES geometry to MultiSurf objects
File export utilities
2DD2DXF — converts AeroHydro .2DD files to .DXF files
3DA2DXF — converts AeroHydro .3DA files to .DXF files
PAT2DXF — converts AeroHydro .PAT files to .DXF files
NBS2IGES — converts AeroHydro .NBS (NURBS) files to IGES .IGS files
Miscellaneous MultiSurf utilities
FOILFIT — fits B-spline curves to arbitrary airfoil and hydrofoil sections
ENTSERCH — searches files for specific strings of text
OFTBL — generates conventional offset tables from .3DA files
2DDLINK — plots AeroHydro .2DD files to selected plotters (documentation
available on request)
To run a utility program, copy its .EXE file from the \MSURFWIN\UTILITY
directory into the directory where your data files (the files you want to convert,
etc.) are located. Note: for 2DDLINK and IGES2MSF, you must copy additional
files (see the documentation instructions).

Note: The MultiSurf DOS utilities do NOT work with long filenames (that is, filename
character limit is 8; .ext character limit is 3), so name your files accordingly.

MultiSurf 4.0 Utility Programs • 5-21


Appendix B: Utility Programs • FL2MSF

FL2MSF
Utility for Converting FAIRLINE/2 Reps to MultiSurf Model Files

Overview
FL2MS2 is a stand-alone utility for converting FAIRLINE/2 Reps to MultiSurf model
files. The utility reads in a FAIRLINE/2 .REP file and outputs an .MSF file. It is also
intended to convert AutoYACHT and AutoSHIP .REP files (and to that end, FL2MSF
will accept up to 20 master curves), but since we do not have control over the
contents and format of Coastdesign files, we are less sure that all the bases are
covered.

Note: The MultiSurf DOS utilities do NOT work with long filenames (that is, filename
character limit is 8; .ext character limit is 3), so name your files accordingly.

To use FL2MSF, copy the FL2MSF.EXE from the \MSURFWIN\UTILITY directory


into the directory where the files you want to convert are located.
You run FL2MSF from the DOS prompt by going to the directory where FL2MSF and
your data files are located and typing:
fl2msf <Enter>

Loading a file
To load a .REP file for conversion, use the Rep Entry Menu option “2. Read Rep from
Disk”. You will be prompted for a filename. If your .REP file is not in your MultiSurf
directory (or whatever directory you are storing FL2MSF.EXE in), be sure to include
the path. For instance, if your file FL2000.REP is in the subdirectory \ahi\fl2 rather
than your MultiSurf directory, you would respond
\ahi\fl2\fl2000
There is also a menu option to load the FL/2B “default hull”. This is just a
convenience for exercising FL2MSF without having to dig up a .REP file for an
example.

File conversion options


Depending on the composition of your FAIRLINE Rep, five .MSF options are
currently available:
1. XLoftSurf with B-spline master curves
This option creates an exact reproduction of the FAIRLINE surface, between the first
and last Master Curves, and for any value of t. The XLoftSurf is lofted through

5-22 • FL2MSF December 1998


Appendix B: Utility Programs • FL2MSF

master curves with explicit splines or X-splines, identical to the longitudinal splines of
the FAIRLINE surface. The number and location of master curves will be identical to
those in FAIRLINE.
If the input Rep is from AutoYACHT and uses one or more type-2 vertices, then two
or more separate XLoftSurfs are created, representing the two or more longitudinal
“strips” between type-2 vertices.
If the Rep qualifies for vertex lines, an option will be given to include them in the
output file. Vertex lines are often useful fairing tools.
Note: Outside the range from first to last Master Curve, FL/2B and AutoYACHT
longitudinal splines become straight lines — the so-called “straight line runout”. X-
splines do not follow this rule; instead they extend the same cubic spline as in the
last interval between master curves. If your FAIRLINE/2 Rep actually uses the
straight line runout and you want to reproduce that extension of the surface, you can
attach another XLoftSurf with just two Master Curves, one identical to the end
master curve. If, as is most common, your hull does not use any portion of the
FAIRLINE/2 surface beyond the end master curves, you can ignore the runout.
2. CLoftSurf with B-spline master curves
This is a close approximation to the original FAIRLINE surface, and the one we
prefer for most round-bottom hulls. To compensate for loss of the FAIRLINE end
conditions, the MultiSurf model will have two additional master curves: one halfway
from MC1 to MC2, and one halfway between the last two master curves. The shape
control exerted by these next-to-end master curves is very similar to direct control of
end moment or slope.
3. Vertex Lines as XCurves
4. Vertex Lines as CCurves
5. Vertex Lines as BCurves
These alternatives are offered only when you have the same number of vertices on
each FAIRLINE master curve. The MultiSurf model doesn’t include any surfaces, just
the vertex lines. This is our preferred conversion for chine hulls; the vertex lines are
the chines. In MultiSurf, you can make ruled or developable surfaces between the
chines, or a single type-1 BLoftSurf for the whole boat, using the chines as master
curves. For round-bottom hulls, a type-2 or type-3 BLoftSurf using the vertex lines as
master curves will be a close approximation to your original FAIRLINE hull (exact in
some cases).
XCurves (explicit splines) are identical to the FAIRLINE longitudinal splines, so the
XCurve conversion is exact. The number of data points on each XCurve will be the
same as the number of master curves.
CCurves (type-3) are also cubic splines through the data points, but use somewhat
different mathematics and so do not exactly duplicate the FAIRLINE longitudinal
splines. To compensate for the lack of slope or moment end conditions, each CCurve
will have two added data points near the ends.
BCurves (type-3) are also cubic splines. The control points which are output to the
file are calculated to make the B-splines pass through the FAIRLINE vertices. If you
are going to reshape the chines in MultiSurf, you may prefer to work with BCurves
rather than CCurves.

MultiSurf 4.0 FL2MSF • 5-23


Appendix B: Utility Programs • FL2MSF

Additional inputs
(1) You are prompted for an output filename. The .MSF extension will be supplied
automatically.
(2) You are prompted for an optional prefix. This will be added to the beginning of
every object name created. By using different prefixes, you can convert separate
Reps for multiple surfaces — bottom, topside, and deck, perhaps — and have
distinct object names in the various resulting .MSF files, so they can be merged
without any object name conflicts.
(3) You are prompted for “first station on the second side”. FL2MSF outputs two
XContour objects making stations for the bow and stern separately. This prompt
specifies where the division will take place. The default is based on position of
the widest point on the sheerline (t = 0).

The converted file


Unless you choose the XLoftSurf option, in most cases the conversion result will not
be an exact replica of your FAIRLINE hull. This is because the C-splines that
MultiSurf uses are not mathematically identical to FAIRLINE’s (non-parametric)
longitudinal splines. The differences usually are not large enough to be visible, but
don’t expect to get 100% identical offsets. One situation in which you will be able to
notice a difference is where you have carefully adjusted vertices to make a straight
portion of a chine or keel. In MultiSurf, curves with straight portions are much more
easily made with PolyCurve, BCurve, or BLoftSurf entities.

Object name conventions


FL2MSF names its output master curves with sequential capital letters: MCA, MCB,
MCC, etc. The vertices or control points for each master curve take the letter of the
master curve name plus a vertex number: B1, B2, B3 ... for the vertices of master
curve B, for example. Vertex lines are named V1, V2, V3, etc. The output surface is
named surf. If there are multiple strips (caused by type-2 vertices in the Rep), a strip
number is appended to each master curve and surface name. If you supply a prefix,
it is prepended to each object name.

5-24 • FL2MSF December 1998


Appendix B: Utility Programs • FY2MSF

FY2MSF
Utility for Converting FastYacht .NRB Files to MultiSurf .MSF Files

Overview
FY2MSF is a utility for converting a FastYacht USNA NURBS file (.NRB) to an
AeroHydro MultiSurf model file (.MSF). You run FY2MSF from the DOS prompt.

Note: The MultiSurf DOS utilities do NOT work with long filenames (that is, filename
character limit is 8; .ext character limit is 3), so name your files accordingly.

To use FY2MSF, copy the FY2MSF.EXE from the \MSURFWIN\UTILITY directory


into the directory where the files you want to convert are located.
Before running the utility, all FastYacht USNA NURBS files you wish to convert must
have an .NRB extension on their filenames.

Creating an .NRB file in FastYacht


To get a NURBS file from FastYacht v3x:
(1) Go to Surface lines and offsets.
(2) Load your surface.
(3) Choose 3DXfer, then NURBS, then the USNA format. Enter a filename and hit
NURBS again to execute the instruction.

File conversion notes


• FastYacht uses ghost points in its internal surface net to control the boundary
conditions. When a NURBS file is made, some extra rows and columns are
added to make an identical B-spline surface.
• FastYacht assumes the first parameter, u, to run longitudinally and thus the v
parameter to run transversely.
• FY2MSF changes the u, v directions so that u runs transversely.
• FY2MSF converts all the net vertices to AbsPoints.
• FY2MSF swaps the FastYacht X and Z orientations, making positive X aft and
positive Z upwards.
• When converting a file, FY2MSF must provide names for each point and curve in
the MultiSurf .MSF file that it creates. For naming points, it employs a systematic
and orderly convention. Each point is given by default a three character name.
The first character is a letter from A to Z, denoting the row number of the point.
The last two characters form a number from 00 to 99, indicating the column
number of the point. For example, the point from column 4, row 9 of a FastYacht
file would be given the name ‘D09’ in the MultiSurf .MSF file.

MultiSurf 4.0 FY2MSF • 5-25


Appendix B: Utility Programs • FY2MSF

• When providing names for B-spline (BCurve) master curves, FY2MSF gives each
curve a four character name. The first two characters are the letters MC (for
master curve). The other two characters make a number from 00 to 99 which
indicates the index of the curve.
• In order to allow some customization of point and curve names and to prevent
the possibility of conflicts in these names, FY2MSF allows you to enter a prefix
which is added to the beginning of each name. Without prefixes, name conflicts
would occur if you converted two separate FastYacht files and then merged the
two resulting MultiSurf .MSF files into a single MultiSurf model.

Program Operation
To start FY2MSF, go to the directory where FY2MSF.EXE and your data files are
located; at the DOS prompt type:
fy2msf <Enter>
The program will start and present a menu of all the .NRB files in the current
directory. To select the file you want to convert, first highlight it by pressing the
arrow keys or clicking on it with the mouse, then press <Enter> or click on the
filename again.
FY2MSF will prompt you for:
• The type of MultiSurf surface to convert to — If the control points of a FastYacht
surface all have a uniform weight, you can choose to convert to either a
MultiSurf B-spline Surface (BSurf), a B-Lofted Surface (BLoftSurf), or a NURB
Surface (NURBSurf). If the weights are not all equal, then FY2MSF automatically
converts the surface to a MultiSurf NURB Surface (NURBSurf).
• The name for the surface
• A prefix for control point names (optional)
If you elected a MultiSurf B-Lofted Surface (BLoftSurf) as the type of surface to
convert to, FY2MSF will also prompt you for:
• Whether to have longitudinal or transverse B-spline (BCurve) master curves
• A prefix for the BCurve master curves (optional)
When finished, FY2MSF will prompt you for a filename for the MultiSurf .MSF file.
The name of the .NRB file will be given as a default. Accept it by pressing <Enter> or
type in a new filename and then press <Enter>. FY2MSF will append (and enforce)
the .MSF extension, and it will also give you the option to overwrite or not if the
filename you specify already exists in the current directory.
When the conversion is completed, FY2MSF reports the total number of objects
contained in the .MSF file.

5-26 • FY2MSF December 1998


Appendix B: Utility Programs • MAC2MSF

MAC2MSF
Utility for Converting MacSurf Control Point Files to MultiSurf .MSF Files

Overview
MAC2MSF is a utility for converting a MaxSurf control point file to an AeroHydro
MultiSurf model file (.MSF). You run MAC2MSF from the DOS prompt.

Note: The MultiSurf DOS utilities do NOT work with long filenames (that is, filename
character limit is 8; .ext character limit is 3), so name your files accordingly.

To use MAC2MSF, copy the MAC2MSF.EXE from the \MSURFWIN\UTILITY


directory into the directory where the files you want to convert are located.
Before running this utility, all MacSurf control point files you wish to convert must
have a .CTR extension on their filenames.

File conversion notes


• When converting a file, MAC2MSF must provide names for each point, curve,
and surface in the MultiSurf .MSF file that it creates. For naming points, it
employs a systematic and orderly convention. Each point is given by default a
four character name. The first character is a letter from A to Z, denoting which
surface the point belongs to. The second character is also a letter from A to Z, this
one denoting the row number of the point. The last two characters form a
number from 00 to 99, indicating the column number of the point. For example,
the point from column 4, row 9 of the second surface of a MacSurf file would be
given the name ‘BD09’ in the MultiSurf .MSF file.
• When providing names for B-spline (BCurve) master curves, MAC2MSF gives
each curve a three character name. The first character is a letter from A to Z; it
denotes to which surface the curve belongs. The other two characters make a
number from 00 to 99 which indicates the index of the curve.
• In order to allow some customization of point and curve names and to prevent
the possibility of conflicts in these names, MAC2MSF allows you to enter a prefix
which is added to the beginning of each name. Without prefixes, name conflicts
would occur if you converted two separate MacSurf files and then merged the
two resulting MultiSurf .MSF files into a single MultiSurf model.
• By default, MAC2MSF uses the surface names given in the MacSurf control point
file for naming surfaces in the MultiSurf .MSF file. However, MAC2MSF does
give you the opportunity to change these names.

Program Operation
To start MAC2MSF, go to the directory where MAC2MSF and your data files are
stored; then at the DOS prompt type:

MultiSurf 4.0 MAC2MSF • 5-27


Appendix B: Utility Programs • MAC2MSF

mac2msf <Enter>
The program will start and present a menu of all the .CTR files in the current
directory. To select the file you want to convert, first highlight it by pressing the
arrow keys or clicking on it with the mouse, then press <Enter> or click on the
filename again.
For each surface in the file, MAC2MSF will prompt you for:
• The type of MultiSurf surface to convert to — If the control points of a MacSurf
surface all have a uniform weight, you can choose to convert to either a
MultiSurf B-spline Surface (BSurf), a B-Lofted Surface (BLoftSurf), or a NURB
Surface (NURBSurf). If the weights are not all equal, then MAC2MSF
automatically converts the surface to a MultiSurf NURB (NURBSurf) surface.
• The name for the surface
• A prefix for control point names (optional)
• The longitudinal flexibility (order) as it was specified in MacSurf
• The transverse flexibility (order) as it was specified in MacSurf
Note that MultiSurf’s spline type is one less than the MacSurf flexibility (or order).
If you elected a MultiSurf B-Lofted Surface (BLoftSurf) as the type of surface to
convert to, MAC2MSF will also prompt you for:
• Whether to have longitudinal or transverse B-spline (BCurve) master curves
• A prefix for the BCurve master curves (optional)
After finishing with all the surfaces in the file, MAC2MSF will prompt you for a
filename for the MultiSurf .MSF file. The name of the .CTR file will be given as a
default. Accept it by pressing <Enter> or type in a new filename and then press
<Enter>. MAC2MSF will append (and enforce) the .MSF extension, and it will also
give you the option to overwrite or not if the filename you specify already exists in
the current directory.
When the conversion is completed, MAC2MSF reports the total number of objects
contained in the .MSF file.

5-28 • MAC2MSF December 1998


Appendix B: Utility Programs • DXF2MSF

DXF2MSF
Utility for Converting AutoCAD DXF Files to MultiSurf .MSF Files

Overview
DXF2MSF is a utility for converting AutoCAD DXF files to AeroHydro MultiSurf
model (.MSF) files. DXF2MSF converts the following DXF entities: POINT, LINE,
CIRCLE, ARC, and some types of POLYLINE. This is a subset of DXF entities.
DXF2MSF does not convert 3DFACE, ATTDEF, ATTRIB, DIMENSION, INSERT,
SHAPE, SOLID, TEXT, TRACE, or VIEWPORT entities. Also, DXF2MSF does not
“extrude” any DXF objects when it converts them.
MultiSurf files use CGA/EGA color numbers for objects. DXF files use AutoCAD
color numbers for objects. DXF2MSF converts from AutoCAD color numbers to
CGA/EGA color numbers according to the table at the end of the “2DD2DXF,
3DA2DXF, PAT2DXF” section of this appendix.
DXF2MSF provides two alternatives for converting simple 3D meshes (“Desmooth”
as opposed to “Smooth” or splined in the terminology of the PEDIT command). In
the default alternative, DXF2MSF creates a TabSurf supported by a patch in a .PAT
file. With the other alternative, invoked with the ‘-s’ (s for surface) option, DXF2MSF
translates a simple 3D mesh to a type-1 BLoftSurf supported by type-1 BCurves.
Likewise, DXF2MSF provides two alternatives for converting simple 3D polylines
(“Decurve” as opposed to “Spline” in the terminology of the PEDIT command). In
the default alternative, DXF2MSF creates a TabCurve supported by a polyline in a
.3DA file. With the other alternative, invoked with the ‘-c’ (c for curve) option,
DXF2MSF translates a simple 3D polyline to a type-1 BCurve.
If your DXF file contains dense polylines and meshes which represent smooth curves
or surfaces, you will probably want to use the default alternative. Using the -c or -s
options will create too many points. On the other hand, your DXF file may contain
coarse polylines or meshes. If you want access to their vertices you should use the -c
and/or the -s option.
When DXF2MSF finishes converting a file it prints a message indicating the number
of MultiSurf objects in the output file.

Program Operation
DXF2MSF is a stand-alone, batch program. To use DXF2MSF, copy the
DXF2MSF.EXE from the \MSURFWIN\UTILITY directory into the directory where
the files you want to convert are located.

Note: The MultiSurf DOS utilities do NOT work with long filenames (that is, filename
character limit is 8; .ext character limit is 3), so name your files accordingly.

To run the program, go to the directory where DXF2MSF and your data files are
stored; then type the program name, DXF2MSF, on the DOS command line, followed
by one or more command line arguments, in the following format:

MultiSurf 4.0 DXF2MSF • 5-29


Appendix B: Utility Programs • DXF2MSF

dxf2msf [options] in.dxf [ out.msf [ out.pat [ out.3da ] ] ] <Enter>


If you invoke DXF2MSF without any command line arguments (that is, by just
typing dxf2msf <Enter>), the program displays the following summary of program
operation and returns you to the DOS prompt:
DXF2MSF - Version 1.10 - 28 February 1997
(c) Copyright 1992-1997 - All rights reserved
usage:
dxf2msf [options] in.dxf [out.msf [out.pat [out.3da]]]
options:
-s translate polymeshes to .MSF instead of .pat
-c translate polylines to .MSF instead of .3da
The command line arguments can be either options or filenames. The only argument
that must be included in order to get output from DXF2MSF is the “in.dxf” filename.

“in.dxf” The first filename is the name of the input DXF file. If typed without
an extension, .DXF is assumed. As mentioned above, this filename is
required.
“out.msf” The second filename is the name of the output .MSF file. If typed
without an extension, .MSF is added. The second filename is not
required. If it is not present the input filename is used with the
extension .MSF.
“out.pat” The third filename is the name of the output .PAT file. DXF2MSF
translates any simple 3D meshes to patches in this .PAT file if the -s
option is not used. The third filename is optional. If it is not present
the input filename is used with the extension .PAT. If the third
filename is entered, the second filename must also be entered.
“out.3da” The fourth filename is the name of the output .3DA file. DXF2MSF
translates any simple 3D polylines to polylines in this .3DA file if the -
c option is not used. The fourth filename is optional. If it is not present
the input filename is used with the extension .3DA. If the fourth
filename is present, the second and third filenames must also be
present.
DXF2MSF recognizes the following options:
-s If present, convert 3D meshes to type-1 BLoftSurfs supported by type-1 BCurves.
(If absent, convert 3D meshes to TabSurfs supported by patches in the .PAT file.)
-c If present, convert 3D polylines to type-1 BCurves. (If absent, convert 3D
polylines to TabCurves supported by polylines in the .3DA file.)
For example, the following command line starts DXF2MSF and tells it to convert
SKYKING.DXF to SKYKING1.MSF, translating any 3D meshes to patches in the file
SKYKING1.PAT and translating any 3D polylines to polylines in the file
SKYKING1.3DA:
dxf2msf skyking skyking1 skyking1 <Enter>
This second example starts DXF2MSF and tells it to convert RAMBLE.DXF (by
default, the program will give the output .MSF file the name RAMBLE.MSF),
translating 3D meshes into type-1 BLoftSurfs and polylines into type-1 BCurves:
dxf2msf -s -c ramble <Enter>

5-30 • DXF2MSF December 1998


Appendix B: Utility Programs • DXF2MSF

Summary of DXF2MSF entity conversion


The following table summarizes the translation of DXF entities to MultiSurf entities:

DXF Entity AutoCAD commands MultiSurf Entity


POINT POINT AbsPoint
LINE LINE Line supported by two
AbsPoints
CIRCLE CIRCLE Type-3 Arc supported by
three AbsPoints
ARC ARC Zero-pitch Helix
supported by a Line
(supported by 2
AbsPoints), an AbsPoint,
and a RotatPoint
POLYLINE with group 3DPOLY With -c: type-1 BCurve
code 70 of 8 or 9 (simple supported by AbsPoints
3D polyline) Without -c: TabCurve
supported by polyline in
.3DA file
POLYLINE with group 3DPOLY followed by Type 2 or 3 BCurve
code 70 of 12 (curve fit PEDIT/Spline curve supported by AbsPoints
B-spline polyline)
POLYLINE with group REVSURF, RULESURF, With -s: type-1 BLoftSurf
code 70 of 16, 17, 48, or 49 TABSURF, EDGESURF, supported by type-1
(simple 3D polygon 3D (BOX, CONE, DISH, BCurves supported by
mesh) DOME, MESH, AbsPoints
PYRAMID, SPHERE, Without -s: TabSurf
TORUS, WEDGE) supported by patch in
.PAT file
POLYLINE with group Mesh creation command Type 2 or 3 BLoftSurf
code 70 of 20 (surface fit followed by supported by type 2 or 3
B-spline surface) PEDIT/Smooth surface BCurves supported by
AbsPoints
POLYLINE with group PLINE Not translated
code 70 of 0 or 1 (2D
polyline)
POLYLINE with group PFACE Not translated
code 70 of 64 (polyface
mesh)

Examples
The AutoCAD DXF format is a rich representation which contains many entities that
cannot be modeled in MultiSurf. As we’ve shown, DXF2MSF converts only a subset
of DXF entities. The following notes are intended to provide some guidance along
with specific examples of conversion.

MultiSurf 4.0 DXF2MSF • 5-31


Appendix B: Utility Programs • DXF2MSF

Not mentioned above is what to do about block inserts, which DXF2MSF does not
convert. It’s a pretty simple fix — before you try to convert, first use the AutoCAD
EXPLODE command to turn any block inserts into their underlying primitive
AutoCAD entities, then write out the DXF file from AutoCAD. You can use the
AutoCAD LIST command to determine if an AutoCAD entity is a block insert.
The following examples demonstrate some of the techniques you can use to convert
an AutoCAD model to a MultiSurf model.

HOUSE.DWG
This is a simple drawing distributed with AutoCAD Release 11. It consists only of
lines. After exporting from AutoCAD with DXFOUT, DXF2MSF was able to
completely convert the drawing to an MSF file.

AIRPLANE.DWG
AIRPLANE.DWG is distributed with AutoCAD Release 11. It consists of a number of
3D meshes collected into a block representing one side of the airplane. This block is
inserted twice, once with a negative X scale factor, in order to represent the two sides
of the plane. The EXPLODE command works only on uniformly scaled blocks, so
only half the plane can be exploded into its underlying 3D meshes. When DXF2MSF
converts the resulting DXF file, it ignores the unexploded block insert. The resulting
.MSF file has only half the plane. In MultiSurf, though, these surfaces can easily be
reflected using MirrSurf entities with a plane as a mirror.

CHAIR-3D.DWG
This is a 3D drawing of an office chair distributed with AutoCAD Release 11. It has
an external reference (XREF) to a drawing template (ADESK_B.DWG). The drawing
contains four views of the single office chair which demonstrate the paper space
feature of AutoCAD. In order to export the drawing from AutoCAD for conversion
to MultiSurf, we first used the MSPACE command to switch from paper space to
model space. Then we used the Entity option of the DXFOUT command to select
only the chair from one view to output to the DXF. The chair is made up of a
combination of lines, 3D polylines, 3D meshes, and 3D faces. DXF2MSF does not
convert the 3D faces.

ASBOAT.DWG
This is a simple three master curve boat created with AutoSurf R2. AutoSurf surfaces
are normally represented as 3D polylines gathered together into a block insert. The
block must first be exploded. The resulting 3D polylines become TabCurves (rather
than TabSurfs) in the converted .MSF file.

5-32 • DXF2MSF December 1998


Appendix B: Utility Programs • IGES2MSF, IGES2NBS, NBS2MSF

IGES2MSF, IGES2NBS, NBS2MSF


Utilities for Import of IGES Geometry into MultiSurf

Overview
MultiSurf includes a limited capability to import IGES geometry files into MultiSurf.
This is accomplished through two command-line utilities: IGES2NBS and NBS2MSF.
When these two programs operate in sequence on a valid IGES file, each Rational B-
Spline surface entity (entity 128) is translated into a set of MultiSurf objects
(currently an array of AbsPoints, 2 KnotLists, and 1 NURBSurf) in .MSF model file
format. The resulting surface in MultiSurf is an exact rendition of the original
NURBS surface.

Note: The MultiSurf DOS utilities do NOT work with long filenames (that is, filename
character limit is 8; .ext character limit is 3), so name your files accordingly.

To run these utility programs, copy them from the \MSURFWIN\UTILITY


directory into the directory where the files you want to translate are located.

Two step translation — IGES2NBS + NBS2MSF


(1) IGES2NBS reads the IGES file, identifies the type 128 surfaces, and writes them
out in AeroHydro’s .NBS NURBS format.
(2) NBS2MSF reads an AeroHydro .NBS file and writes an .MSF model file.
The process is broken down into two stages because NBS2MSF has at least one
useful application of its own (see surface fitting outlined below).

Single-command translation — IGES2MSF


The batch file IGES2MSF.BAT allows you to run IGES2NBS and NBS2MSF
automatically in succession with a single command.

Program Operation
IGES2MSF
IGES2MSF is the batch file that allows single-command generation of an .MSF file
from type 128 surface entities in an .IGS file. IGES2MSF.BAT, IGES2NBS.EXE, and
NBS2MSF.EXE must all be present and in the same directory with your data
files.
You run the batch file from the DOS command line (in the directory where the utility
programs and your data files are stored), by typing a command in the following
format:
iges2msf infile <Enter>

MultiSurf 4.0 IGES2MSF, IGES2NBS, NBS2MSF • 5-33


Appendix B: Utility Programs • IGES2MSF, IGES2NBS, NBS2MSF

where infile is the filename (do not include the extension) of the .IGS input file. Note
that the input file must have the extension .IGS (e.g. STARSHIP.IGS), but you must
NOT type that extension on the DOS command line when you run the batch file.

5-34 • IGES2MSF, IGES2NBS, NBS2MSF December 1998


Appendix B: Utility Programs • IGES2MSF, IGES2NBS, NBS2MSF

Example:
iges2msf starship <Enter>
will convert the type 128 surfaces in STARSHIP.IGS and output the file
STARSHIP.MSF.

IGES2NBS
IGES2NBS.EXE generates an .NBS output file from type 128 surface entities in an
.IGS file. You run the utility from the DOS command line (in the directory where the
utility programs and your data files are stored) using the following format:
iges2nbs infile [ outfile ] <Enter>
infile = filename for input; if no extension, .IGS is assumed.
outfile = optional filename for output; if absent, outfile name is same as infile name;
if no extension, .NBS is assumed.
Examples:
iges2nbs oldgoose <Enter>
iges2nbs oldgoose newgoose <Enter>
The first example starts the program and tells it to convert the type 128 surfaces in
OLDGOOSE.IGS and name the output file with the default OLDGOOSE.NBS. The
second example tells IGES2NBS to convert the same surfaces, but to name the output
file NEWGOOSE.NBS.

NBS2MSF
NBS2MSF.EXE converts an AeroHydro .NBS NURBS file to a MultiSurf .MSF file.
You run the utility from the DOS command line (in the directory where the utility
programs and your data files are stored) using the following format:
nbs2msf infile [ outfile ] <Enter>
infile = filename for input; if no extension, .NBS is assumed.
outfile = optional filename for output; if absent, outfile name is same as infile name;
if no extension, .MSF is assumed.

Surface fitting through NBS2MSF


An auxiliary use of NBS2MSF is least-squares surface fitting of an arbitrary target
surface mesh, e.g. the digitized surface of a hull. The procedure would be as follows:
(1) Create a mesh on the target surface. This needs to be a topologically rectangular
mesh, i.e., an NxM array of 3D surface points, arranged in rows and columns in
a .PAT file. Each row must have the same number of points. The mesh should be
as smoothly spaced as possible, with closer spacing of points in regions of higher
curvature.
(2) In MultiSurf, choose File/ New and make a model consisting of one or more
TabSurfs. The data for each TabSurf is a .PAT file created in step (1). Normally,
the insert Frame would be the default, ‘*’.
(3) File/ Export 3D/ NBS. In this stage, each TabSurf is approximated to within a
specified precision by a NURBS surface and output to a .NBS file. You can
control the degree of smoothing by choice of “Tolerance.” A tight tolerance

MultiSurf 4.0 IGES2MSF, IGES2NBS, NBS2MSF • 5-35


Appendix B: Utility Programs • IGES2MSF, IGES2NBS, NBS2MSF

(small value) will generate a NURBS surface which closely matches the target
mesh, with a relatively large number of control points. A loose tolerance (large
value) allows the mesh to be approximated with a smaller number of control
points, and the resulting NURBS surface will smooth out irregularities and noise
in the input mesh.
(4) Process the .NBS file through NBS2MSF. In MultiSurf, you will get a NURBSurf
that is the smoothed approximation of the original mesh, as a surface object
which can then be further manipulated and built upon.

5-36 • IGES2MSF, IGES2NBS, NBS2MSF December 1998


Appendix B: Utility Programs • 2DD2DXF, 3DA2DXF, PAT2DXF

2DD2DXF, 3DA2DXF, PAT2DXF


Output File Conversion Utilities

Overview
2DD2DXF, 3DA2DXF, and PAT2DXF are utility programs for converting .2DD,
.3DA, and .PAT files into .DXF files. This allows 2D and 3D images to be transferred
from AeroHydro’s FAIRLINE® system programs to a wide variety of CAD systems
including AutoCAD®. We group the three AeroHydro utilities here for discussion
because they share many similarities.

Note: The MultiSurf DOS utilities do NOT work with long filenames (that is, filename
character limit is 8; .ext character limit is 3), so name your files accordingly.

2D and 3D File Types


2DD
The .2DD file format represents a 2D drawing and is output by MultiSurf, and
OFE/4. 2DD files are binary files.
2DD2DXF writes two entity types into .DXF files: Points and 2D Polylines.

3DA
The .3DA file format represents three-dimensional wireframes and is output by
MultiSurf and OFE/4. 3DA files are ASCII files.
There are two types of .3DA representation:
• plain .3DA
• panel .3DA
A plain .3DA file represents a model as a series of polylines. The file consists of a list
of 3D points. Each point is represented by an integer pen value and floating point x,
y, and z coordinates. A 0 pen signifies “pen-up”, i.e. move to this point without
drawing. A non-zero pen indicates the color of the line from the previous point to the
current point. The sequence of line segments starting with a zero pen and proceeding
to the point before the next zero pen (or to the end of the file) represents a polyline.
The panel .3DA file is a variation of the plain .3DA file. As its title implies, it allows
for the representation of panels as well as polylines. Any polyline which starts and
ends on the same point is a panel. Panels can be mixed with polylines.
3DA2DXF writes three entity types into a .DXF file: Points, 3D Polylines, and 3D
Faces.

MultiSurf 4.0 2DD2DXF, 3DA2DXF, PAT2DXF • 5-37


Appendix B: Utility Programs • 2DD2DXF, 3DA2DXF, PAT2DXF

PAT
A .PAT file represents a model as one or more three-dimensional surface patches and
is output by MultiSurf. The .PAT file is a variation of the .3DA format, and as such it
is an ASCII file. Each surface patch is represented in the file by two or more
polylines. All the polylines which make up a single surface patch must have the
same number of points. Different patches within a file are separated by a single point
with pen, x, y, and z values all of zero. In a PAT file, regular .3DA points, polylines,
and panels cannot be combined with surface patches.
PAT2DXF converts each surface patch in a .PAT file into a 3D Mesh entity in a .DXF
file.
3DA2DXF converts a .PAT file into a series of polylines. The separator points are
converted to Point entities.

DXF
The .DXF file format is AutoDesk’s Data Exchange Format. A .DXF file can represent
many different types of entities. AutoCAD and many other CAD systems can read a
.DXF file. DXF files can be either ASCII or binary. The MultiSurf output conversion
utilities all write ASCII .DXF files.

Program Operation
2DD2DXF, 3DA2DXF, and PAT2DXF are stand-alone, batch programs. To run any
of these utility programs, copy their .EXE file from the \MSURFWIN\UTILITY
directory into the directory where the files you want to convert are located.
You run each of them by going to the directory where the utility .EXE and your data
files are located, then typing the program name on the DOS command line, followed
by one or two command line arguments. The first argument is the name of the input
file. If typed without an extension, the appropriate .2DD, .3DA, or .PAT default is
assumed. The second argument is optional — it is the name of the output file. If
typed without an extension, the appropriate .DXF or .SRF default is assumed. If the
second argument is omitted, the program uses the input filename with the default
extension.

Utility Default Input Default


Extension Output
Extension
2DD2DXF .2DD .DXF
3DA2DXF .3DA .DXF
PAT2DXF .PAT .DXF

Examples
The following four command lines all use 2DD2DXF to convert the file BOAT.2DD to
BOAT.DXF:
C:\>2DD2DXF BOAT
C:\>2DD2DXF BOAT.2DD

5-38 • 2DD2DXF, 3DA2DXF, PAT2DXF December 1998


Appendix B: Utility Programs • 2DD2DXF, 3DA2DXF, PAT2DXF

C:\>2DD2DXF BOAT BOAT


C:\>2DD2DXF BOAT.2DD BOAT.DXF

MultiSurf 4.0 2DD2DXF, 3DA2DXF, PAT2DXF • 5-39


Appendix B: Utility Programs • 2DD2DXF, 3DA2DXF, PAT2DXF

This command line uses 2DD2DXF to convert BOAT.2DD and give it the new
filename CADBOAT.DXF:
C:\>2DD2DXF BOAT CADBOAT
3DA2DXF and PAT2DXF work similarly:
C:\>3DA2DXF BOAT
etc.
C:\>PAT2DXF BOAT
etc.
3DA2DXF can be used to convert a .PAT file into a .DXF file composed of polylines
(rather than the 3D Meshes derived from PAT2DXF conversion), for example
BOATSURF.PAT to BOATSURF.DXF:
C:\>3DA2DXF BOATSURF.PAT

Technical Notes
Point and polyline conversion — 3DA2DXF
3DA2DXF converts all polylines with four or five points that end on the starting
point into three or four vertex 3D Face entities in the DXF file. All other polylines are
converted to 3D Polyline entities. Single points in the 3DA file are converted to Point
entities in the DXF file.

In 3DA file Entity in translated DXF


file
Single point Point
4 or 5 point polyline with 3D Face
same first and last point
All other polylines 3D Polyline

Temporary files
3DA2DXF writes and then deletes a temporary file named ~3DTMP.TMP. If this file
exists when 3DA2DXF is run it will be overwritten and then deleted.

Color conversion numbers


2DD2DXF, 3DA2DXF, and PAT2DXF make the following conversion of color
numbers so that line colors remain unchanged in the translated file:

5-40 • 2DD2DXF, 3DA2DXF, PAT2DXF December 1998


Appendix B: Utility Programs • 2DD2DXF, 3DA2DXF, PAT2DXF

CGA/EGA Color CGA/EGA Color Number AutoCAD Color Number


Name in 3DA file in DXF file
Black 0 pen up - not translated
Blue 1 13
Green 2 11
Cyan 3 12
Red 4 9
Magenta 5 14
Brown 6 10
White 7 15
Gray 8 8
Light Blue 9 5
Light Green 10 3
Light Cyan 11 4
Light Red 12 1
Light Magenta 13 6
Yellow 14 2
Bright White 15 7

MultiSurf 4.0 2DD2DXF, 3DA2DXF, PAT2DXF • 5-41


Appendix B: Utility Programs • NBS2IGES

NBS2IGES
Utility for Converting MultiSurf .NBS Files to IGES .IGS Files

Overview
NBS2IGES is a utility program for converting surfaces in MultiSurf NURBS files
(.NBS) to the IGES American National Standard file format (.IGS) to permit data
sharing with other CAD or CAM systems. (For more information about IGES, see
IGES International Graphics Exchange Specification, US PRO/IPO-100, IGES 5.2; U.S.
Product Data Association, 2722 Merrilee Drive, Suite 200, Fairfax, VA 22031-4499.)

Program Operation
To run the NBS2IGES conversion program you need two files:
• an .NBS data file (containing the surfaces to be converted); created by MultiSurf
• a configuration file NBS2IGES.CFG (containing other conversion information;
see specification below); distributed with NBS2IGES; to be edited by user
Be sure these two files and NBS2IGES.EXE are located in the same directory —
we generally recommend copying utility files (in this case the .CFG and .EXE)
from \MSURFWIN\UTILITY into the directory where your data files are located.

Note: The MultiSurf DOS utilities do NOT work with long filenames (that is, filename
character limit is 8; .ext character limit is 3), so name your files accordingly.

You start the utility by typing the program name, NBS2IGES, on the DOS command
line (in the directory where the utility programs and your data files are located),
followed by one or two command line arguments, in the following format:
nbs2iges infile.nbs [ outfile.igs ] <Enter>
where infile is the name of the .NBS input file and outfile (optional) is your choice of
output filename for the .IGS file — the default output filename is the infile filename
with the .IGS extension. Example:
nbs2iges gore <Enter>
nbs2iges gore octopus <Enter>
The first example starts the program and tells it to convert the surfaces in GORE.NBS
and name the output file with the default GORE.IGS. The second example tells
NBS2IGES to convert the same surfaces, but to name the output file OCTOPUS.IGS.

The NBS2IGES.CFG File


The configuration file NBS2IGES.CFG allows you to specify an author, company
name, and comments which will become part of the output file. The configuration
file is optional. If you want to use one, you can simply edit the one we’ve distributed
with your copy of NBS2IGES. All the lines in the file are optional; any line order is

5-42 • NBS2IGES December 1998


Appendix B: Utility Programs • NBS2IGES

okay. The keyword directly followed by an = sign is required in each line present;
keywords are case insensitive.
For example:
comment=Comment text lines can contain any information you
wish.
comment=If you want to use more than one comment line, go right
ahead.
author=Gillian
company=SmoothTech
comment= There can be any number of comment lines. The first 70 characters of
each comment line will be transferred to the output file. Spaces are okay.
author= The first 60 characters will be transferred to the output file. No spaces
allowed, but hyphens and underline characters are okay.
company= The first 60 characters will be transferred to the output file. No spaces
allowed, but hyphens and underline characters are okay.

The Output File


The generated IGES file will have the following sections:
• Start Section: one or more lines of text comments which come from the
NBS2IGES.CFG file
• Global Section: contains IGES descriptive data including the author and
company data from the NBS2IGES.CFG file
• Directory Section: contains global information for each translated surface and
pointers to the parameter data associated with the surface
• Parameter Data Section: contains the geometric surface data mapped to the IGES
Rational B-Spline Surface Format
• Terminate Section: contains the length of each of the preceding file sections
The data for the IGES Parameter Data Section will be transformed from the MultiSurf
.NBS file (for description of .NBS file format, see Appendix C: Output File
Specifications).
Currently, NBS2IGES only translates surface entities.
Note that in most cases the NURBS surfaces contained in .NBS files are only
approximations of the true MultiSurf surface objects. Be forewarned, for example,
that you may find edge-to-edge joins that are precise in MultiSurf but are only
approximately correct in CAD. NURBS mathematics is fundamentally incapable of
precise representation of most MultiSurf entities.

MultiSurf 4.0 NBS2IGES • 5-43


Appendix B: Utility Programs • FOILFIT

FOILFIT
Utility for Fitting B-spline Curves to Foil Sections

Overview
FOILFIT is a utility for fitting B-spline parametric curves to arbitrary airfoil and
hydrofoil sections. It reads an input data file containing thickness and camber offsets
and writes an output file containing B-spline control points. The output file is in the
format required for a user-defined foil section in MultiSurf.

Note: The MultiSurf DOS utilities do NOT work with long filenames (that is, filename
character limit is 8; .ext character limit is 3), so name your files accordingly.

To run FOILFIT, copy the .EXE file from the \MSURFWIN\UTILITY directory into
the directory where the .DAT files you want to fit are located.
To run FOILFIT, go to the directory in which the .EXE and your .DAT file(s) are
located; then at the DOS prompt by type:
foilfit filename /n <Enter>
where:
filename is the name of a foil data file — the .DAT extension is assumed (and
enforced)
/n is an optional modifier setting the number of control points (default = 8)

Input file
The input file is an ASCII text file in three sections:
(1) The first line is an identifying message for the file.
(2) The second line is an integer telling how many lines follow.
(3) The balance of file is data lines.
Each data line needs four numbers, separated by spaces, free format; all four
values expressed as % of chord (see example below):
X-position
thickness function ordinate
thickness function delta
camber function
The thickness function delta is an optional correction to the thickness; if there is
no correction to make, use zero in this column. In the following example, the .100
trailing edge thickness is removed by using deltas of .100 (x/c)4.
When fitting a symmetric section (no camber), the camber column can be all
zeroes. However, the resulting section will have no camber when used as a
5-point foil in MultiSurf, even if its 2nd and 4th control points are
unsymmetrically located.

5-44 • FOILFIT December 1998


Appendix B: Utility Programs • FOILFIT

Example input file (0010-65.dat)


data for 0010-65 foil p. 319 w/ 64 mean line p. 385
17
0.000 0.000 0.000 0.
1.250 1.467 0.000 0.369
2.500 1.967 0.000 0.726
5.000 2.589 0.000 1.406
7.500 2.989 0.000 2.039
10.000 3.300 0.000 2.625
15.000 3.756 0.000 3.656
20.000 4.089 0.000 4.500
30.000 4.578 -0.001 5.625
40.000 4.889 -0.003 6.000
50.000 5.000 -0.006 5.833
60.000 4.867 -0.013 5.333
70.000 4.389 -0.024 4.500
80.000 3.500 -0.041 3.333
90.000 2.100 -0.066 1.833
95.000 1.178 -0.081 0.958
100.000 0.100 -0.100 0.000

Program Operation
FOILFIT uses least-squares fitting with B-spline basis functions. The number of
control points is user-controlled (default 8). The B-spline order (4 = cubic), and the
control point abscissas are hard-wired. The abscissa control point values are chosen
to produce a parabolic (approximately half-cosine) distribution of X vs. t.
Separate root-mean-square error values for thickness and camber fits are displayed
as a fraction of chord. For the five built-in foil families, using 8 control points, these
ranged from .00001 to .00032, average about .00015. Be sure to examine the screen
tabulation of fit - data differences to identify bad data points.
In general, the closeness of fit should improve with increasing number of control
points. Fairness, on the other hand, often is compromised by larger numbers of
control points. We always prefer to use a small number for fairness, and would
increase the number of control points beyond 8 only if we judged the fit to be
insufficiently close.

Output file
Like the input file, the output file is in three sections (see example below):
(1) The first line is a verbatim copy of the identifying message.
(2) The second line is two integers:
the number of control points
the B-spline order (e.g., 4 = cubic)
(3) The balance of file is data lines, each with 3 numbers:
abscissa
ordinate for thickness function
ordinate for camber function
All three values are normalized to the range 0 to 1.

MultiSurf 4.0 FOILFIT • 5-45


Appendix B: Utility Programs • FOILFIT

The fitted thickness is a B-spline using (x, yt) as control points. The fitted camber
is a B-spline using (x, yc) as control points. (Both B-splines use uniform knots.)
The output file takes the name of the input file, with .FOI extension. The output file
will generally have to be renamed to be recognized by MultiSurf, e.g. TYPE101.FOI,
etc. — we renamed the example file below TYPE165.FOI.
Example output file (made from the above example input)
data for 0010-65 foil p. 319 w/ 64 mean line p. 385
8 4
0.00000 0.00000 0.00000 (Note: this line is required.)
0.00000 0.19834 0.00370
0.02667 0.50750 0.13320
0.14667 0.77953 0.65787
0.34667 0.97395 1.08315
0.62667 1.06479 0.93092
0.86667 0.62715 0.45153
1.00000 0.00000 0.00000

5-46 • FOILFIT December 1998


Appendix B: Utility Programs • ENTSERCH

ENTSERCH
Utility for Searching Model Files for Specific Strings of Text

Overview
ENTSERCH is a utility that searches a specified group of model files in the current
directory for lines containing user-specified strings. It can be used to search for all
occurrences of a specific object name, for all MultiSurf objects of a particular entity
type, etc. ENTSERCH displays results on the screen, as well as writing them to a file,
ENTSERCH.OUT (which you can copy to another filename.ext for future reference).
Matching lines, if any, are shown for each file searched. ENTSERCH also creates a
file, DIRFILE, containing a summary list of all files searched in the current directory.

Program Operation
To use ENTSERCH, copy the .EXE file from the \MSURFWIN\UTILITY directory
into the directory where the .MS2 files you want to search are located.

Note: The MultiSurf DOS utilities do NOT work with long filenames (that is, filename
character limit is 8; .ext character limit is 3), so name your files accordingly.

To start the program, go to the directory where the .EXE and the .MS2 files are
located; then on the MS-DOS command line, type a command in the following
format:
entserch [ filespec ] <Enter>
filespec is an optional MS-DOS file specification which can include wildcards * and ?.
The default is *.MS2.
ENTSERCH displays a start up banner, then prompts for a search string. Type in a
string of text to search for, then press <Enter>. For example:
Search string sheerline <Enter>
This tells ENTSERCH to search all specified files in the current directory for objects
named ‘sheerline’.
ENTSERCH will continue to prompt for search strings (up to a maximum of ten),
until you terminate the dialog by pressing <Enter> on a line by itself with no search
string.
During the search process, you can press <Esc> or <Ctrl>+<C> to escape. An
ENTSERCH.OUT file will be created, containing the search results up to that point.

Search strings
ENTSERCH does support embedded blanks in search strings. For example,
AbsMagnet mag3 is a valid search string. However, note that entity types and
object names in the model files we have created are generally separated by two or
three spaces, just for ease of reading. And you, of course, can create your own

MultiSurf 4.0 ENTSERCH • 5-47


Appendix B: Utility Programs • ENTSERCH

conventions, if you so desire. In any case, when you use ENTSERCH you must
include the correct number of spaces in the search string to get a successful match.
Also be aware that ENTSERCH searches are case sensitive. That is, if you are
searching for CLoftSurfs, the search string CLOFTSURF will not produce a match.
You must enter the search string CLoftSurf, exactly as it appears in the model file.
We recommend that you look at a sample model file or the entity description in the
Reference section of this manual to confirm your choice of search string before using
ENTSERCH.

Sample output
ENTSERCH search 04-12-1995 12:51:03 filespec= *.MS2
Search strings:
bulkhead
DevSurf
BULKHD1.MS2----------------------------------------------------
// Tutorial 1 - moving the bulkhead
DEVSURF1.MS2---------------------------------------------------
DevSurf panel1 11 1 40x1 1x1 0 / sheer chine ;
DevSurf panel2 11 1 40x1 1x1 0 / chine keel ;
DEVSURF2.MS2---------------------------------------------------
DevSurf panel1 11 1 40x1 1x1 0 / sheer chine ;
RCSH0.MS2------------------------------------------------------
DevSurf bottom 11 3 16x2 1x1 0 / chine2 profile ;
DevSurf topside 11 1 16x2 1x1 0 / sheer chine1 ;
XPLANE.MS2-----------------------------------------------------
XPlane bulkhead2 13 1 / 16.071 ;
XPlane bulkhead3 14 1 / 24.000 ;
ProjPoint top2 11 1 / top_corner bulkhead2 ;
ProjPoint bottom2 11 1 / bottom_corner bulkhead2 ;

5-48 • ENTSERCH December 1998


Appendix B: Utility Programs • OFTBL

OFTBL
Utility for Generating Offset Tables from .3DA Files

Overview
OFTBL is a utility for creating a conventional “Offset Table” of heights and half-
breadths from a hull model created in MultiSurf.
To operate OFTBL you must create two files, besides the MultiSurf model file:
(1) a special .3DA wireframe file containing the necessary geometric information
and
(2) a .DAT text file of instructions to OFTBL
The output from OFTBL is a text file which can be printed or loaded into a word
processor.

Note: The MultiSurf DOS utilities do NOT work with long filenames (that is, filename
character limit is 8; .ext character limit is 3), so name your files accordingly.

OFTBL instructions input file (.DAT)


The input file of instructions can be prepared in any editor such as Windows
Notepad. If you prepare this file in a word processor, be sure to save it in a text-only
format. You can give this file any filename.ext that is convenient (no long filenames).
The instructions input file has 6 required lines and one optional line (for an example,
see “Input .DAT file” on page 53):

Line 1. filename.ext for the model file (.MS2 or .MSF).


Extension is optional; if not given, .MS2 is assumed.
Line 2. filename.ext for the special .3DA file. Extension is
optional; if not given, .3DA is assumed.
Line 3. Units and format. This line has two entries, separated by one or
more spaces. There are two basic choices:
(a) Decimal. If you want offsets displayed as decimal numbers, make the first entry
on this line the name of the units (up to 10 characters), e.g. feet, ft,
inches, meters, mm — the same units used in your model file. Then specify
the decimal format — number of figures and number of decimal places — with a
“format string”, e.g. ###.### which allows up to 3 digits before the decimal and
3 digits after. Here’s an example of a Line 3 specifying decimal meters output:
meters ###.###
(b) Feet-inches-eighths. If you want offsets displayed as feet-inches-eighths, make
the first entry on this line ft-in-8ths — given exactly in this form. This option
should only be used with a model file whose units are feet or with a multiplier
(Line 5) which converts your model into feet. In this case, the format string, e.g.

MultiSurf 4.0 OFTBL • 5-49


Appendix B: Utility Programs • OFTBL

###, applies only to the “feet” portion of the output. Here’s an example of a Line
3 specifying feet-inches-eighths output:
ft-in-8ths ###
Line 4. Station numbering. This line has two entries, separated by one or
more spaces:
X0 = the X-position of Station 0
Xint = the X-interval between stations
This assumes that you use a station numbering scheme in which there is a linear
relation between X-position (X) and station number (n), as follows:
X = X0 + n * Xint
X0 and Xint have the same units as used in the model file.
Line 5. Multiplier
This line allows all X, Y, and Z coordinates to be multiplied by a constant factor
during printing of the table. The primary purpose is to allow conversion of units. For
example, to print offsets in meters for a vessel whose model file is in feet, use the
multiplier 0.3048. The multiplier can also be used to create a scale model or uniform
stretching of the original hull. (An alternative, of course, is to stretch the model file
before saving it and the .3DA file; then the multiplier would be 1.)
If you do not want to convert units or stretch the model, the multiplier must be 1.
Line 6. Identifying message. The information on this line will be printed
verbatim at the top of each page in the output file.
Line 7. (optional) List the object names of any curves, snakes,
or single Contour objects you want tabulated in the offset
table, separated by one or more spaces. These names must appear exactly as they
do in the MultiSurf model file, i.e. observe capitalization. General Contour objects
may be selected here (e.g., diagonals), but each such Contour object should generate
only one cut, i.e., first index = last index.

Input model file (.MS2 or .MSF)


The input MultiSurf model file (no long filenames) specified on Line 1 will be used
as the source of the following information:
(1) The location of transverse stations for the offset table, determined by reading all
visible and shown (visibility > 0) XContours objects. OFTBL collects all these
transverse positions, sorts them into ascending order, and discards any
duplicates.
(2) The locations of buttocks and waterlines, determined by reading all visible and
shown (visibility > 0) YContours and ZContours objects.
(3) The colors of any curves, snakes, or contours specified on Line 7. Note: the colors
of these objects must be unique, and different from any other displayed objects.
OFTBL will identify the selected curves in the .3DA file solely by their colors.
We recommend that you save the model file immediately before or after saving the
special .3DA file and before running OFTBL, to be sure that visibilities, colors, and
object names correspond between the two files.

5-50 • OFTBL December 1998


Appendix B: Utility Programs • OFTBL

Input .3DA file


The special .3DA file is saved in MultiSurf under File/ Export 3D/ 3DA Wireframe
(no long filenames). Before saving it, observe these special instructions:
(1) Hide all objects except XContours, YContours, ZContours, and your selected
curves, snakes, and single Contours objects. Note that turning layers off is NOT
the same as hiding — you must use the hide function (e.g. Edit/ Hide or the
toolbar button).
(2) Your offset table will be more precise if you subdivide curves and surfaces finely
(see Reference topic “How Much Accuracy Is Enough?”). You can increase the
number of divisions using the Divisions Multiplier (Settings/ Model) before
saving the .3DA file.

Running OFTBL
To use OFTBL, copy the .EXE file from the \MSURFWIN\UTILITY directory into
the directory where your input data files (.MS2, .DAT, .3DA) are located.
To start the program, go to the directory where the .EXE and the 3 input files are
stored; then on the MS-DOS command line, type a command in the following format
(be sure to put a space between each element in the command):
oftbl infile.ext [outfile.ext] <Enter>
where:
infile.ext is the filename.ext of your OFTBL input file; you must include the
extension
outfile.ext is an optional filename.ext for the output
If outfile is not specified, OFTBL will name the output file OFTBL.OUT .

Operation
OFTBL first reads and stores data from the input file, then from the MultiSurf model
file. Then it opens the .3DA file, translates it into a binary file %TEMP.BIN, and scans
this file for the specified contours and curves. Linear interpolation is performed
along stations to locate buttocks and waterlines (intersection of station polylines with
vertical and horizontal planes), and linear interpolation is performed along curves
and general contours to locate intersections with transverse station planes.
OFTBL may find and display 0, 1, or 2 intersections with each plane. (For example,
on a hull with tumblehome, some outboard buttocks may intersect some stations
twice.) If additional intersections beyond 2 are present, OFTBL ignores them.

Error conditions
OFTBL has a limited ability to diagnose errors occurring during its operation and
will provide the following error messages:
1. Input file not found.
The file specified by infile was not found in the current directory. Check the spelling
and location of the file on the command line.

MultiSurf 4.0 OFTBL • 5-51


Appendix B: Utility Programs • OFTBL

2. MultiSurf model file not found.


The MultiSurf model file named on Line 1 of the input file was not located in the
current directory.
3. 3DA file not found.
The .3DA model file named on Line 2 of the input file was not located in the current
directory.
4. No XContours in MultiSurf model file.
OFTBL requires some visible XContours to specify the stations where offsets are
required.
5. Station at X = YYYYY not found in .3DA file.
A station specified among the XContours in the model file was not present in the
wireframe.
6. Curve XXXXX not found in .3DA file.
A curve (or snake or Contour) specified on Line 7 was not present in the wireframe.
Check that the curve was visible and shown when the file was exported, and that
colors were not changed between saving the model file and exporting the .3DA file.
7. Color conflict.
Each curve to be tabulated must have a unique color code, different from all other
visible curves and contours.
If the format you specify has insufficient space to handle all the offset values (and
station X-positions), “%” signs will appear in the output, and some columns will be
out of register.

Example 1: Decimal format


Input model file
We created the input model file for this example, DEMO_OFS.MS2, by editing
DEMO.MS2 with the following steps:
(1) Add the following two curves:
CCurve sheer 2 1 40x1 / * 3
{ P11 P21 P31 };
CCurve profile 3 1 40x1 / * 3
{ P14 P24 P34 };
(2) Add two magnets and a snake for a cove stripe:
AbsMagnet m1 12 -1 / hull 0.050 0.05;
AbsMagnet m2 12 -1 / hull 0.050 0.95;
LineSnake cove 14 1 32x1 / * m1 m2 ;
(3) Add two buttock lines:
YContours buttocks 5 1 / 1 2 0.0000 1.5000 { hull };
(4) Add three waterlines:
ZContours waterlines 9 1 / -1 3 0.0000 1.0000 { hull };
(5) Add one diagonal:
AbsPoint p0 14 -1 / 0.0000 0.0000 2.0000;
RelPoint p1 14 -1 / p0 0.0000 2.0000 2.0000;
Plane2 plane_A 14 0 / p0 p1 ;
Contours diag_A 15 1 / plane_A 0 0 0.0000 1.0000 {hull};

5-52 • OFTBL December 1998


Appendix B: Utility Programs • OFTBL

(6) Increase the divisions of Master Curves ‘MC1’, ‘MC2’, and ‘MC3’ to 40.
(7) Increase the divisions of surface ‘hull’ to 10x4 by 20x2.
We saved the model as DEMO_OFS.MS2.
Input .3DA file
Then with only the following objects shown,

entity name color


XContours stations 12
YContours buttocks 5
ZContours waterlines 9
Contours diag_A 15
CCurve sheer 2
LineSnake cove 14
CCurve profile 3
we exported DEMO_OFS.3DA (Accurate option). Notice that each of ‘diag_A’,
‘sheer’, ‘cove’, and ‘profile’ has a distinct color, allowing OFTBL to reliably identify it
by its color in the .3DA file.
Y Z

'stations' (red) 'waterlines' (blue)

'cove' (yellow)

'sheer' (green)

'buttocks' (magenta)

X
'profile' (cyan)
'diag_A' (white)

Input .DAT file


We also made an input file of instructions, named DEMO_OFS.DAT, that has the
following contents:
demo_ofs
demo_ofs
ft ###.###
1.80 2.735
1.00
MultiSurf DEMO hull revised for offset table example
sheer cove diag_A profile
Discussion: both the .MS2 and .3DA file are named DEMO_OFS. The units are feet
and will be displayed in ###.### decimal format. Station 0 is at X = 1.80, and the
station interval is 2.735 ft. The multiplier is 1, i.e., no change in units. Line 6 is the
identifying message. Line 7 lists the curves to be tabulated, in addition to buttocks
and waterlines.
Running the example
The .MS2, .3DA, and .DAT files for this example are all stored in the
\MSURFWIN\SAMPLES directory. To run the example:

MultiSurf 4.0 OFTBL • 5-53


Appendix B: Utility Programs • OFTBL

(1) copy OFTBL.EXE from the \MSURFWIN\UTILITY directory into the


\MSURFWIN\SAMPLES directory
(2) go to the DOS command line, in the \MSURFWIN\SAMPLES directory, and
type the following:
oftbl demo_ofs.dat demo_ofs.txt <Enter>
The resulting offset table (pages 1A - 3B) is appended after Example 2; see “Output
from Example 1” on page 55.
In this example, we used four files, all with the same filename, but different
extensions:
DEMO_OFS.MS2 — the model file
DEMO_OFS.3DA — the special wireframe
DEMO_OFS.DAT — the input file of instructions
DEMO_OFS.TXT — the output file

Example 2: ft-in-8ths format


(From our point of view, feet-inches-eighths have nothing to recommend them,
compared with decimals, but they are preferred or even demanded by some
builders.)
For comparison, the same DEMO_OFS example was run with a new input file of
instructions, named DEMO_OF2.DAT, in which the format line (Line 3) was changed
to:
ft-in-8ths ###
To run this example, the following files need to be in your \MSURFWIN\SAMPLES
directory:
DEMO_OFS.MS2 — the model file (same as for Ex. 1)
DEMO_OFS.3DA — the special wireframe (same as for Ex. 1)
DEMO_OF2.DAT — the new input file of instructions
(and of course OFTBL.EXE )
Then, at the DOS prompt type:
oftbl demo_of2.dat demo_of2.txt <Enter>
The first page of output is appended after the output from Example 1; see “Pages 1A
and 1B of Output from Example 2” on page 58.
Each number is printed in 3 integer fields:
the first for feet
the second for inches (0 to 11)
the third for eighths of an inch (0 to 7)
The third field may be followed by a “+” sign which adds another 1/16 inch.
For example:
5 10 3 means 5’ 10 3/8”, or 5.865 ft.
-12 5 2+ means negative 12’ 5 5/16”, or -12.443 ft.

5-54 • OFTBL December 1998


Appendix B: Utility Programs • OFTBL

Output from Example 1


Offsets in ft 06-23-1995 09:57:50 page 1A
MultiSurf DEMO hull revised for offset table example

HEIGHTS above baseline Z = 0


station nos. | 0.000 1.000 2.000 3.000 4.000
X = | 1.800 4.535 7.270 10.005 12.740
-----------------------------------------------------------------
buttock | 0.177 -0.811 -0.985 -1.032
Y = 1.500 |
|
buttock | 1.395 -0.471 -0.695
Y = 3.000 |
|
sheer | 3.404 3.144 2.930 2.760 2.633
|
|
cove | 2.879 2.656 2.475 2.336 2.237
|
|
diag_A | 1.520 0.414 -0.335 -0.648 -0.766
|
|
profile | -0.999 -1.130 -1.201 -1.212
|

Offsets in ft 06-23-1995 09:57:50 page 1B


MultiSurf DEMO hull revised for offset table example

HALF-BREADTHS from centerplane Y = 0


station nos. | 0.000 1.000 2.000 3.000 4.000
X = | 1.800 4.535 7.270 10.005 12.740
-----------------------------------------------------------------
waterline | 0.000 0.824 1.428 1.694
Z = -1.000 |
|
waterline | 0.011 1.424 2.577 3.469 4.102
Z = 0.000 |
|
waterline | 0.331 1.763 2.922 3.819 4.467
Z = 1.000 |
|
waterline | 0.608 1.984 3.085 3.931 4.534
Z = 2.000 |
|
waterline | 0.846 2.138
Z = 3.000 |
|
sheer | 0.930 2.155 3.155 3.935 4.501
|
|
cove | 0.818 2.089 3.129 3.937 4.526
|
|
diag_A | 0.480 1.586 2.335 2.648 2.766
|
|
profile | 0.000 0.000 0.000 0.000
|

MultiSurf 4.0 OFTBL • 5-55


Appendix B: Utility Programs • OFTBL

Offsets in ft 06-23-1995 09:57:50 page 2A


MultiSurf DEMO hull revised for offset table example

HEIGHTS above baseline Z = 0


station nos. | 5.000 6.000 7.000 8.000 9.000
X = | 15.475 18.210 20.945 23.680 26.415
-----------------------------------------------------------------
buttock | -1.001 -0.905 -0.747 -0.528 -0.253
Y = 1.500 |
|
buttock | -0.726 -0.659 -0.513 -0.294 0.006
Y = 3.000 |
|
sheer | 2.548 2.505 2.501 2.535 2.609
|
|
cove | 2.178 2.157 2.173 2.226 2.313
|
|
diag_A | -0.779 -0.717 -0.593 -0.408 -0.167
|
|
profile | -1.161 -1.051 -0.880 -0.648 -0.356
|

Offsets in ft 06-23-1995 09:57:50 page 2B


MultiSurf DEMO hull revised for offset table example

HALF-BREADTHS from centerplane Y = 0


station nos. | 5.000 6.000 7.000 8.000 9.000
X = | 15.475 18.210 20.945 23.680 26.415
-----------------------------------------------------------------
waterline | 1.508 0.606
Z = -1.000 |
|
waterline | 4.474 4.586 4.417 3.926 2.980
Z = 0.000 |
|
waterline | 4.874 5.050 4.996 4.715 4.205
Z = 1.000 |
|
waterline | 4.913 5.079 5.039 4.799 4.357
Z = 2.000 |
|
waterline |
Z = 3.000 |
|
sheer | 4.862 5.019 4.978 4.747 4.325
|
|
cove | 4.900 5.064 5.021 4.781 4.347
|
|
diag_A | 2.779 2.717 2.593 2.408 2.167
|
|
profile | 0.000 0.000 0.000 0.000 0.000
|

5-56 • OFTBL December 1998


Appendix B: Utility Programs • OFTBL

Offsets in ft 06-23-1995 09:57:50 page 3A


MultiSurf DEMO hull revised for offset table example

HEIGHTS above baseline Z = 0


station nos. | 10.000
X = | 29.150
-----------------------------------------------------------------
buttock | 0.079
Y = 1.500 |
|
buttock | 0.460
Y = 3.000 |
|
sheer | 2.718
|
|
cove |
|
|
diag_A | 0.127
|
|
profile | -0.002
|

Offsets in ft 06-23-1995 09:57:50 page 3B


MultiSurf DEMO hull revised for offset table example

HALF-BREADTHS from centerplane Y = 0


station nos. | 10.000
X = | 29.150
-----------------------------------------------------------------
waterline |
Z = -1.000 |
|
waterline | 0.107
Z = 0.000 |
|
waterline | 3.463
Z = 1.000 |
|
waterline | 3.705
Z = 2.000 |
|
waterline |
Z = 3.000 |
|
sheer | 3.723
|
|
cove |
|
|
diag_A | 1.873
|
|
profile | 0.000
|

MultiSurf 4.0 OFTBL • 5-57


Appendix B: Utility Programs • OFTBL

Pages 1A and 1B of Output from Example 2


Offsets in ft-in-8ths 06-23-1995 10:06:57 page 1A
MultiSurf DEMO hull revised for offset table example

HEIGHTS above baseline Z = 0


station nos. | 0.000 1.000 2.000 3.000
X = | 1 9 5 4 6 3+ 7 3 2 10 0 0+
-----------------------------------------------------------------
|
buttock | 0 2 1 -0 9 6 -0 11 6+
Y = 1 6 0 |
|
buttock | 1 4 6 -0 5 5
Y = 3 0 0 |
|
sheer | 3 4 7 3 1 6 2 11 1 2 9 1
|
|
cove | 2 10 4+ 2 7 7 2 5 5+ 2 4 0+
|
|
diag_A | 1 6 2 0 4 7+ -0 4 0 -0 7 6
|
|
profile | -1 0 0 -1 1 4+ -1 2 3+
|

Offsets in ft-in-8ths 06-23-1995 10:06:57 page 1B


MultiSurf DEMO hull revised for offset table example

HALF-BREADTHS from centerplane Y = 0


station nos. | 0.000 1.000 2.000 3.000
X = | 1 9 5 4 6 3+ 7 3 2 10 0 0+
-----------------------------------------------------------------
|
waterline | 0 0 0 0 9 7 1 5 1
Z = -1 0 0 |
|
waterline | 0 0 1 1 5 0+ 2 6 7+ 3 5 5
Z = 0 0 0 |
|
waterline | 0 4 0 1 9 1+ 2 11 0+ 3 9 6+
Z = 1 0 0 |
|
waterline | 0 7 2+ 1 11 6+ 3 1 0 3 11 1+
Z = 2 0 0 |
|
waterline | 0 10 1 2 1 5
Z = 3 0 0 |
|
sheer | 0 11 1 2 1 7 3 1 7 3 11 1+
|
|
cove | 0 9 6+ 2 1 0+ 3 1 4+ 3 11 2
|
|
diag_A | 0 5 6 1 7 0+ 2 4 0 2 7 6
|
|
profile | 0 0 0 0 0 0 0 0 0
|

5-58 • OFTBL December 1998


Appendix C: Output File Specifications

Appendix C
Output File Specifications

Overview
This appendix details the file specification for most of MultiSurf’s output files: .2DD,
.3DA, .PAT, .OFE, .RUL, and .NBS.

.2DD — 2D Drawing File


A .2DD file is used for conveying 2D drawing information.
File is random; record length = 9
All numbers are single precision, MBF format.
Records 1-5: a 45-character identifying string
Records 6-9: spares, not currently used
The remaining records are fielded: 1 as Q$, 4 as X$, 4 as Y$
Point records: Q$ is an uppercase or lowercase letter
Q$ uppercase = pen up; lowercase = pen down
The letter selects layer 1 to 26; A (or a) = 1, B (or b) = 2, etc.
X$, Y$ are the single-precision (MBF) coordinates
Text records: Q$ = chr$(32) = space
X$ and Y$ = message
Color change: Q$ = chr$(49) = “1”
X$ = a color number
Y$ ignored
Last record: Q$ = chr$(26) = ctrl-Z
X$ and Y$ ignored

MultiSurf 4.0 Output File Specifications • 5-59


Appendix C: Output File Specifications

.3DA — 3D ASCII Drawing File


A .3DA file contains wireframe and/or panel information in ASCII format. It consists
of an unlimited number of records each in the format:
pen% x y z
pen% = integer controlling pen color; 0 = pen up
x, y, z = world coordinates of point
Spaces can be used for separators.
A panel is represented in a .3DA file by a group of 3 or more records having the
following special characteristics:
pen% = 0 for the first point
pen% > 0 for other points
x, y, z of first and last point are identical

.PAT — Patch File


A .PAT file is a representation of a topologically rectangular patch of NX x NY
quadrilateral panels. It is a subset of .3DA files, so it can be displayed in C3D and
otherwise processed as a wireframe. (However, when displayed as a wireframe, it
doesn’t appear as a patch, but rather as a set of polylines traversing the patch in only
one direction.) Each panel corner point appears exactly once in a .PAT file.
As a .3DA file, the .PAT file is an ASCII file with four entries for each record:
pen x y z
The .PAT wireframe consists of one or more patches. Patches are separated by a
single record with pen = 0. (In the separator record x, y, z must be present, but their
values are ignored).
Each patch consists of NY + 1 polylines, each NX +1 points long. Each polyline starts
with a pen = 0 point and has positive pen (color) for its other points.

5-60 • Output File Specifications December 1998


Appendix C: Output File Specifications

.OFE — Offset File (older format)


File is ASCII. Each record is terminated by CHR$(13) + CHR$(10)
First record: np, id$
np = no. of records (points + station identifiers) to follow
id$ = identifying message, no commas
Rest of file is np records, each with 2 decimal numbers, free format.
Second record: ns, idum
ns = no. of stations
idum = dummy, not used
Rest of file is ns stations. Each station consists of a “station identifier” record plus
npts point records.
Station identifier record: x(i), npts(i)
x(i) = X-position of station x 100
npts(i) = no. of points in this station
Point record: z(i,j), y(i,j)
z(i,j) = vertical coordinate x 100
y(i,j) = horizontal offset x 100
No terminating record is required.
Stations have to be in order of increasing X-position.
Z is positive upward; Y positive to starboard.
Only one half of a station is represented. (Bilateral symmetry is assumed in an .OFE
file).
First and last point in a station must have Y = 0.
Points go around half-station counterclockwise when viewed from astern: beginning
at the base of the keel and continuing up the starboard side of the hull, across the
deck, etc., and back to centerline.

MultiSurf 4.0 Output File Specifications • 5-61


Appendix C: Output File Specifications

.OF4 — Offset file (newer format)


An .OF4 file is a representation of one or more solids by a series of closed polylines
giving their transverse (X = constant) sections. The sections can be arbitrarily spaced,
and the points along each section are arbitrarily positioned and are independent of
other sections. The .OF4 file is intended primarily for hydrostatic and hydrodynamic
analysis.
File is ASCII. Each record is terminated by CHR$(13) + CHR$(10). Items in a record
are separated by one or more spaces.
First record: a three character string, “OF4”.
Second record: id$
id$ = the identifying string for the file, up to 255 characters in length, no commas
Third record: 0 (zero; reserved for future use)
Fourth record: UnitsPerFoot, Unit$
UnitsPerFoot = a real number specifying the relationship between the Offset File’s
units and feet (used to facilitate scaling, etc.)
Unit$ = a two character abbreviation for the name of the file’s units (“??” if
unknown)
Fifth record: NumStas%
NumStas% = an integer specifying the number of stations in the Offset File,
ranging from 1 to 32767
There follows NumStas% stations, each starting with the following record:
StatNum, LSym%, XPos, NumPts%
StatNum = a real number, the user-defined label for that station
LSym% = an integer specifying station symmetry, -1 = symmetric, 0 =
asymmetric
XPos = a real number, the X-position of the station
NumPts % = a positive integer, the number of points in the station
Each station includes NumPts% points, each consisting of the following record:
Colr%, pLabel$, z, y
Colr% = an integer specifying the color of the line drawn to the point;
colr%= 0 means pen up
pLabel$ = a two character point label, with “ ~~ “ specifying no label
z = the point’s Z-coordinate, positive upward
y = the point’s Y-coordinate, positive to starboard
• No terminating record is required.
• Stations have to be in order of increasing X-position.
• If a station is symmetric, only half the station is represented, otherwise the full
station is stored.
• Points go around the station counterclockwise when viewed from the stern,
starting at the base of the keel, and continuing up the side of the hull, across the
deck, etc.

5-62 • Output File Specifications December 1998


Appendix C: Output File Specifications

.RUL — Ruling File


A Ruling File is basically a table of ruling endpoint coordinates for one or more
surfaces.
File mode is random; record length = 24.
All numbers are single precision, MBF format.
Each surface is represented by a set of records as follows:
Records 1 and 2: ID message for the surface; up to 48 characters, padded with spaces.
Remaining records consist of 6 fields, each 4 characters long (X1$, Y1$, Z1$, X2$,
Y2$, Z2$).
Record 3:
X1$ = number of rulings (NR)
Y1$ = 0
Z1$ = 0
X2$ = 0
Y2$ = number of snake points (NS)
Z2$ = orientation (0.0 = normal; 1.0 = reversed)
Records 4 to 3+NR:
X1$, Y1$, Z1$ are the coordinates of the first end of a ruling
X2$, Y2$, Z2$ are the coordinates of the second end of the ruling
Records 3 + NR + 1 to 3 + NR + NS:
X1$ = pen/color:
0 if pen up
> 0 if pen down
if > 255, Z1$ + X2$ + Y2$ + Z2$ is an object name (Y1$ not used):
if 256, this is a Contours object
if 257, this is an XContours object
if 258, this is a YContours object
if 259, this is a ZContours object
if 260, this is a CvContours object
if 261, this is a snake object
if 262, this is a magnet object
if 263, this is a ring object
Y1$, Z1$ = u,v where point is located
ruling no. = 1 + u * (NR - 1)
fractional distance along ruling = v
X2$, Y2$, Z2$ = X,Y,Z coordinates in 3D space

MultiSurf 4.0 Output File Specifications • 5-63


Appendix C: Output File Specifications

.NBS — NURBS File


The file is ASCII. Lines are terminated by CRLF. Values on a line are separated by
one or more spaces. Objects are separated by one or more blank lines.
The 1st line of the file is creation date and time: YYMMDD.HHMMSS
There follows any number of non-blank lines of identifying messages, terminated by
one or more blank lines.
The balance of the file consists of 0 or more objects. Objects are separated by one or
more blank lines.
Each object begins with one of these class keywords:
point
bead
magnet
ring
curve
snake
surface
plane
The 2nd line in an object is an ID message for the object, consisting of the entity
keyword and object name, and for some entities information regarding symmetry.
The contents of 3rd and further lines varies according to entity class.
point class. There is only one additional line:
color X Y Z
bead, ring classes. There is only one additional line:
color t
A bead is embedded in the last line, curve, or snake that precedes it in the file. A ring
is embedded in the last snake that precedes it.
magnet class. There is only one additional line:
color u v
A magnet is embedded in the last surface that precedes it in the file.
line class.
3rd line: color X0 Y0 Z0 X1 Y1 Z1
(A line qualifies as a curve.)
curve class.
3rd line: n k t-divisions t-subdivisions color
blank line
n + k knots
blank line
n lines, consisting of:
w X Y Z

5-64 • Output File Specifications December 1998


Appendix C: Output File Specifications

snake class.
3rd line: n k t-divisions t-subdivisions color
blank line
n + k knots
blank line
n lines, consisting of:
w u v
A snake is embedded in the last surface that precedes it in the file.
surface class.
3rd line: nu ku nv kv u-divisions u-subdivisions v-divisions v-subdivisions
orientation color
blank line
nu + ku knots for the u-direction
blank line
nv + kv knots for the v-direction
nv groups of nu + 1 lines, consisting of:
blank line
nu vertices: w, x, y, z coordinates
Notes:
orientation has same meaning as in MultiSurf: positive normal orientation.
color is 0 to 255
plane class. There is only one additional line:
color X Y Z UN(1) UN(2) UN(3)
The plane is specified by a point and the unit normal vector. (A plane does not have
parameters, so does not qualify as a surface.)

MultiSurf 4.0 Output File Specifications • 5-65


Appendix D: Program Limits

Appendix D
Program Limits

MultiSurf stores its data in highly-flexible dynamic structures, so there are few hard
limits on anything. But there are a few ...
Object name: maximum 16 characters.
Object comment (user data): maximum 40 characters
Line length in model file: maximum 8192 characters+spaces (but we don’t
recommend even coming close to this limit!)
color range = 0-255
t-divisions range = 1-255
t-subdivisions range = 1-255
u-divisions range = 1-255
u-subdivisions range = 1-255
v-divisions range = 1-255
v-subdivisions range = 1-255
Total surface divisions:
u-divisions x u-subdivisions x v-divisions x v-subdivisions = 160,000. (An easy-
to-see example: 20x20 x 20x20.)
Divisions multiplier (Settings/ Model) = 1 - 10
In general, the divisions limits are FAR in excess of what is needed for adequate
screen images, and even for actual building patterns. We feel the program
default divisions (8x4 for curves and 8x4 8x4 for surfaces) are sufficient for
viewing most curves and surfaces, at least initially.

MultiSurf 4.0 Program Limits • 5-67


Appendix E: Annotated List of Sample Files

Appendix E
Annotated List of Sample Files
Distributed with MultiSurf

.3DA, .DAT, .FOI, .PAT


CUBE1.3DA — used in entity description example for WireFrame
DEMO_OFS.3DA — used in Appendix B: OFTBL example
DEMOMCS.3DA — used in entity description example for TabCurve
DEMOPTS.3DA — used in entity description example for TabPoint
0010-65.DAT — used in Appendix B: OFTBL example
DEMO_OF2.DAT — used in Appendix B: OFTBL example
DEMO_OFS.DAT — used in Appendix B: OFTBL example
TYPE165.FOI — used in entity description Example 4 for FCurve
FILLET.PAT — used in entity description example for TabSurf

.MC2
CLFTHULL.MC2 — component hull skin used in Tutorial 7 sailboat
DECK1.MC2 — component deck used in Tutorial 7 sailboat
KEEL1.MC2 — component keel used in Tutorial 7 sailboat
PAINT1.MC2 — component paint job used in Tutorial 7 sailboat
THWART1.MC2 — component thwart used in Tutorial 2 rowboat
TRANSOM1.MC2 — component transom used in Tutorial 7 sailboat

.MS2
2CABINS.MS2 — entity description Example 1 for EdgeSnake; Tutorial 5 example
“Superstructures”; Tutorial 7 source model for experimental cabin component
(wrong orientation)
2PLANE1.MS2 — entity description example for Plane2
3MCS.MS2 — beginning model for Tutorial 7: Components
3PLANE0.MS2 — entity description Example 1 for Plane3
3PLANE1.MS2 — entity description Example 2 for Plane3
ABSBEAD.MS2 — entity description example for AbsBead
ABSMAG1.MS2 — entity description example for AbsMagnet
ABSPT1.MS2 — entity description example for AbsPoint
AIRPLANE.MS2 — an example for your perusal

MultiSurf 4.0 Annotated List of Sample Files • 5-69


Appendix E: Annotated List of Sample Files

ARC1.MS2 — entity description Example 1 for Arc (type-1); also Tutorial 4 example
“Arcs”
ARC2.MS2 — entity description Example 2 for Arc (type-2); also Tutorial 4 example
“Arcs”
ARC3.MS2 — entity description Example 3 for Arc (type-3); also Tutorial 4 example
“Arcs”
ARCS4-5.MS2 — entity description Example 4 for Arc (types 4 and 5)
ARC5PERP.MS2 — entity description Example 5 for Arc (arc ending perpendicular
to plane)
ARC6.MS2 — entity description Example 6 for Arc (type-6)
ARCLENBD.MS2 — entity description example for ArcLenBead
ARCLENRG.MS2 — entity description example for ArcLenRing
ARCLOFT4.MS2 — entity description Example 2 for ALoftSurf (type-4)
ARCSNAKE.MS2 — entity description example for ArcSnake; also Tutorial 4
example “Arc Snakes”
BKRY0.MS2 —Tutorial 5 example “Sailing Yacht Keels”
BFITCV1.MS2 — entity description example for BFitCurve
BFITSRF1.MS2 — entity description example for BFitSurf
BLEND.MS2 — Tutorial 5 example “Blended-Surface Hulls” (BlendSurf solution is
slack-bilged)
BLEND1.MS2 — Tutorial 5 example “Blended-Surface Hulls” (BlendCtr solution is
stiff-bilged)
BLEND2.MS2 — entity description Example 1 for BlendSurf
BLENDC1X.MS2 — entity description Example 1 for BlendCtr (type-1)
BLENDPT2.MS2 — entity description Example 1 for BlendPoint
BLENDPT3.MS2 — entity description Example 2 for BlendPoint
BLENDSF2.MS2 — entity description Example 2 for BlendSurf
BLFT5X4.MS2 — entity description Example 1 for BLoftSurf (type-3; used for
complete hull definition); Tutorial 4 example “B-Lofted Surface”; Tutorial 5
example “Round Sterns”
BLISTER0.MS2 — entity description Example 1 for Blister (using point objects for
snake2 and curve); Tutorial 5 example “Blister Appendages” (canopy on a
fuselage)
BLOFT1.MS2 — entity description Example 2 for BLoftSurf (type-2; used for bow-
rounding)
BLOFTSOLID1.MS2 — entity description example for BLoftSolid
BOOTTOP.MS2 — entity description example for IntSnake
BOWROUND.MS2 — Tutorial 5 example “Bow Rounding” (alternative file)
BSNAK1-3.MS2 — Tutorial 4 example “B-Spline Snake” (types 1-3)
BSNAKE.MS2 — entity description example for BSnake
BSPL1-3.MS2 — Tutorial 4 example “BCurve” (types 1-3)
BSPLINE2.MS2 — entity description example for BCurve
BSUBCV0.MS2 — entity description Example 1 for BSubCurve
BSUBCV1.MS2 — entity description Example 2 for BSubCurve
BSUBSNAKE1.MS2 — entity description example for BSubSnake
BSURF.MS2 — entity description example for BSurf; also Tutorial 4 example “BSurf”
BUDVASE.MS2 — an example for your perusal
BULKHD1.MS2 — Tutorial 1 example “Moving a bulkhead”; Tutorial 5 example “A
Movable Bulkhead”
BUSTLE0.MS2 — entity description Example 2 for Blister (using a snake for snake2
and a curve for curve); Tutorial 5 example “Blister Appendages” (skeg/bustle
appendage)
CATENARY.MS2 — entity description example for Conic (type-4: catenary)

5-70 • Annotated List of Sample Files December 1998


Appendix E: Annotated List of Sample Files

CLFT5X4.MS2 — entity description example for CLoftSurf; Tutorial 4 example “C-


Lofted Surface”; Tutorial 5 example “CLoft Hulls with B-spline Master Curves”
CLFT7X4.MS2 — initial model for Reference chapter “Fairness of Curves and
Surfaces” (using /Curvature Profile)
CLFT7X4A.MS2 — final model for Curvature Profile example in Reference chapter
“Fairness of Curves and Surfaces”; initial model for Tutorial 5 example “Planar
Sheerline” (using /Curvature Profile)
CLFT7X4B.MS2 — final model for Tutorial 5 example “Planar Sheerline”; initial
model for Reference chapter “Fairness of Curves and Surfaces” (using /Surface
Curvatures/Normal)
CLFT7X4C.MS2 — final model for normal Surface Curvatures example in Reference
chapter “Fairness of Curves and Surfaces”
COBRA.MS2 — a sportscar example for your perusal
COMPBT1-8.MS2 — distribution comparison files for Tutorial 7: Components
(sailboat)
CONICS.MS2 — entity description example for Conic (types 1-3: ellipse, pos./neg.
hyperbolas)
CONSTCMB.MS2 — Tutorial 5 example “Decks” (constant camber)
CONSTRAD.MS2 — Tutorial 5 example “Decks” (constant radius)
CONTOUR1.MS2 — entity description Example 1 for Contours (boottop); also entity
description example for XContours (stations)
CONTOUR2.MS2 — entity description example for YContours (buttocks); also entity
description example for ZContours (waterlines)
CONTOURC.MS2 — entity description Example 3 for Contours (cylindrical transom
intersection)
CONTOURG.MS2 — entity description Example 2 for Contours (waterplanes)
COPYSNK1.MS2 — entity description example for CopySnake
CRUISE5.MS2 — Tutorial 7 source model for cabin component
CSNAKE.MS2 — entity description example for CSnake
CSPL1-3.MS2 — Tutorial 4 example “CCurve” (types 1-3)
CSPLINE1.MS2 — entity description example for CCurve
CUTTER.MS2 — Tutorial 5 example “Spars and Rigging”
CV-CONT1.MS2 — entity description example for CvContours
CYLTRAN.MS2 — Tutorial 5 example “Cylindrical Transom”
DEFAULTX.MS2 — entity description example for XLoftSurf
DEFSWEEP-POLYCURVE2.MS2 — entity description Example 5 for SweepSurf
(default guide) and Example 2 for PolyCurve2 (bent pipe)
DEMO.MS2 — Tutorial 1 and 3 examples; Tutorial 5 examples “CLoft Hulls with
B-spline Master Curves”, “Skin Deduction by Offset Surfaces”, “Preference for
Type 3 Master Curves”, “Heeled Waterlines”
DEMO_OFS.MS2 — used in Appendix B: OFTBL example
DEMODK1-3.MS2 — intermediate files for Tutorial 3 “Add deck surface”
DEMOTR3.MS2 — Tutorial 3 examples beginning with “Reshape the stem”
DEMOTR3A-F.MS2 — intermediate files for Tutorial 3
DEMOTYP3.MS2 — Tutorial 5 intermediate file for example “Preference for Type 3
Master Curves”
DEVSURF1.MS2 — entity description Example 1 for DevSurf (panels on chine hull;
edges with no inflection points); Tutorial 5 example “Developable Surfaces”
(saving .RUL files)
DEVSURF2.MS2 — entity description Example 2 for DevSurf (one edge with 2
inflection points)
EXTERIOR-GRID.MS2 — exterior gridding example for “Using Solids”

MultiSurf 4.0 Annotated List of Sample Files • 5-71


Appendix E: Annotated List of Sample Files

FILLET2.MS2 — entity description Example 1 for Fillet (rounding off sharp common
edge of 2 surfaces)
FLOFT1.MS2 — entity description example for FLoftSurf (half-section; keel)
FLOFT2.MS2 — entity description Example 2 for FLoftSurf (full-section; cambered
elliptic wing)
FOIL1.MS2 — entity description Example 1 for FCurve (half-section)
FOIL2.MS2 — entity description Example 2 for FCurve (full-section; no camber)
FOIL3.MS2 — entity description Example 3 for FCurve (full-section; cambered;
bottom fig. showing effect (none) of changing fore-and-aft positions of point2 and
point4)
FOIL7.MS2 — entity description Example 4 for FCurve (user-defined foil; uses
TYTPE165.FOI)
FRAME0.MS2 — entity description Example 1 for Frame3, FrameAbsPt, and
FrameRelPt
FRAME1.MS2 — entity description Example 2 for Frame3, FrameAbsPt, and
FrameRelPt
FRAME2.MS2 — entity description example for EulerFrame
FSNAKE2.MS2 — entity description example for FSnake (root of keel)
GUARD.MS2 — entity description examples for OffsetCurv and SweepSurf (Ex. 3)
GUARD1.MS2 — entity description Example 4 for SweepSurf (tapered sweep
surface); Tutorial 7 source model for rub rail component
HELIX1.MS2 — entity description example for Helix; also Tutorial 4 example
“Helix”
HELIX2.MS2 — entity description example for Helix2
HULLDECK.MS2 — Tutorial 5 example “Decks” (cambered deck as C-lofted surface
with B-spline Master Curves); Tutorial 5 example “Offsets and Hydrostatics”
INLET.MS2 — entity description Example 2 for OffsetCurv (lip)
INTERIOR-GRID.MS2 — interior gridding example for “Using Solids”
INTMAG2.MS2 — entity description example for IntMagnet
INTRING.MS2 — entity description example for IntRing
INTRING2.MS2 — entity description Example 1 for IntRing2
INTRING3.MS2 — entity description Example 2 for IntRing2
JET.MS2 — an example for your perusal
JIB.MS2 — entity description Example 2 for BlendCtr (with one side = single point)
KNOTLST0.MS2 — entity description Example 1 for KnotList ( & = default knot
distribution = uniform)
KNOTLST1.MS2 — entity description Example 2 for KnotList (non-uniform knot
distribution)
KNOTLST2.MS2 — entity description Example for KnotList2
LINESTEM.MS2 — entity description example for Line
LOBSTER1-8.MS2 — distribution comparison files for Tutorial 6: Creating a Hull
from a Sketch (lobsterboat)
LSNAKE.MS2 — entity description Example 1 for LineSnake (cove stripe)
LSNAKE3.MS2 — entity description Example 2 for LineSnake (raised deck edge)
MEGYACHT.MS2 — an example for your perusal
MIRRCAT.MS2 — entity description example for MirrSurf (catamaran hull); also
Tutorial 4 example “Mirror Surfaces”
MIRRCRV.MS2 — entity description example for MirrCurve; also Tutorial 4 example
“Mirror Curves”
MIRRPT.MS2 — entity description example for MirrPoint
MONTIOR.MS2 — an example for your perusal
MOUSE1.MS2 — an example for your perusal
NURBCRV1.MS2 — entity description example for NURBCurve

5-72 • Annotated List of Sample Files December 1998


Appendix E: Annotated List of Sample Files

NURBS7A.MS2 — entity description example for NURBSurf (uniform knot spacing)


NURBS7C.MS2 — entity description example for NURBSurf (non-uniform knot
spacing)
NURBSNK1.MS2 — entity description example for NURBSnake (portlight)
OBJLIST.MS2 — entity description example for ObjectList (ObjectLists as aids for
working on various portions of the model)
OFFSET1.MS2 — entity description example for OffsetSurf
OFFSETCV.MS2 — entity description example for OffsetCurv
OFFSETPT.MS2 — entity description example for OffsetPt
PIPES.MS2 — entity description Example 1 for ALoftSurf (type-3); Tutorial 4
example “Arc-Lofted Surfaces”
PISTON.MS2 — entity description example for IntBead
PLANE1.MS2 — Tutorial 5 example “A Planing Powerboat”
POLYCRV1.MS2 — entity description example for PolyCurve; Tutorial 4 example
“PolyCurves”
POLYSNK1.MS2 — entity description example for PolySnake
PRELPT.MS2 — entity description example for PolarRelPt
PROCCSF2.MS2 — entity description example for ProcCvSurf
PROC-CV2.MS2 — entity description example for ProcCurve
PROCPSF1.MS2 — entity description example for ProcPtSurf
PROCSNK1.MS2 — entity description example for ProcSnake
PROJCRV1.MS2 — entity description example for ProjCurve (projecting off-center
MC1 onto centerplane); Tutorial 4 example “Projected Curves”; Tutorial 5
example “Bow Rounding”
PROJPT3.MS2 — entity description example for ProjPoint (making BCurve end
perpendicular to centerplane)
PROJSURF.MS2 — entity description example for ProjSurf; Tutorial 4 example
“Projected Surfaces”
PROP3.MS2 — example of model-level rotational symmetry
PRSNAKE1.MS2 — entity description Example 2 for ProjSnake (wing-fuselage join)
PWRB1.MS2 — Tutorial 5 example “Superstructures”
PWRB2.MS2 — Tutorial 5 example “Blended-Surface Hulls” (straight keel); Tutorial
5 example “Decks” (deck with no camber made from ruled surface)
QUILT.MS2 — Reference chapter “Fairness of Curves and Surfaces” (using /Surface
Curvatures/Gaussian)
RADIUSARC3-POLYCURVE2.MS2 — entity description Example 2 for RadiusArc
(type-3) and entity description Example 1 for PolyCurve2 (hard-chine barge with
raked ends)
RCSH0.MS2 — Tutorial 5 example “Mixing Developable and Compound-Curved
Surfaces” (round-chine/radius-chine hull)
RELABEL0.MS2 — entity description Example 1 for Relabel ( * = default distribution
of t)
RELABEL3.MS2 — entity description Example 2 for Relabel (concentrating t in
middle of curve)
RELBEAD.MS2 — entity description example for RelBead
RELCURV1.MS2 — entity description Example 2 for RelCurve (variable-width spray
chine; using a graph)
RELCURV2.MS2 — entity description Example 3 for RelCurve (translated copy of a
curve; using a graph)
RELCURV3.MS2 — entity description Example 1 for RelCurve
RELMAG1.MS2 — entity description example for RelMagnet
RELPT1.MS2 — entity description example for RelPoint
RELSNK1.MS2 — entity description example for RelSnake

MultiSurf 4.0 Annotated List of Sample Files • 5-73


Appendix E: Annotated List of Sample Files

RELSURF2.MS2 — entity description example for RelSurf


REVSURF2.MS2 — entity description example for RevSurf
RINGS1.MS2 — entity description example for AbsRing
RINGS2.MS2 — entity description example for RelRing
ROTATCRV.MS2 — entity description example for RotatCurve
ROTATPT.MS2 — entity description example for RotatPoint (regular pentagon)
ROTATSRF.MS2 — entity description example for RotatSurf
RULED1.MS2 — entity description example for RuledSurf; Tutorial 5 example
“Developable Surfaces” (making a developable surface)
RULEDSOLIDBALLAST1.MS2 — entity description Example 2 for RuledSolid
(outside lead ballast casting for a trapezoidal fin keel)
RULEDSOLIDBALLAST2.MS2 — entity description Example 1 for RuledSolid (bulb
keel using solids to get weight and C.G. of the fin and bulb combination)
SAILBOAT.MS2 — an example for your perusal; Tutorial 7 source model for rudder
component
SHAMPOO.MS2 — a shampoo bottle example for your perusal
SHARK0.MS2 — an example for your perusal
SLOOP2.MS2 — Tutorial 7 source model for rigging component
SPINNAKR.MS2 — Tutorial 5 example “Sails” (mainsail and spinnaker)
STRGTPRT.MS2 — adjunct file for Tutorial 5 example “Blended-Surface Hulls - Side
trip: BCurves and CCurves with a straight portion”
SUBCURV1.MS2 — entity description example for SubCurve; also Tutorial 4
example “SubCurves”
SUBSNK1.MS2 — entity description Example 1 for SubSnake (parameter on
subsnake runs same direction as that on basis snake)
SUBSNK2.MS2 — entity description Example 2 for SubSnake (parameter on
subsnake runs opposite direction as that on basis snake)
SUBSURF1.MS2 — entity description Example 1 for SubSurf
SUBSURF2.MS2 — entity description Example 2 for SubSurf; Tutorial 5 example
“Bow Rounding” (additional file)
SWEEP1.MS2 — entity description Example 1 for SweepSurf (U-shaped rectangular
extrusion)
SWEEP3.MS2 — entity description Example 2 for SweepSurf (waterslide)
TABCURVE.MS2 — entity description example for TabCurve (uses
DEMOMCS.3DA)
TABPOINT.MS2 — entity description example for TabPoint (uses DEMOPTS.3DA)
TABSURF.MS2 — entity description example for TabSurf (uses FILLET.PAT)
TANBLENDSURF.MS2 — entity description example for BlendSurf2 (4-surface
dome with tangency along surface-surface joins)
TANKS.MS2 — tank example for “Using Solids”
TANPT1.MS2 — entity description example for TanPoint
THRUSTER.MS2 — entity description Example 1 for ProjSnake (bow thruster tunnel)
TRANSURF.MS2 — entity description example for TranSurf
TRIMSRF1.MS2 — entity description Example 1 for TrimSurf
TRIMSRF3.MS2 — entity description Example 2 for TrimSurf
TROW1-8.MS2 — distribution comparison files for Tutorial 2: Making a Simple
Model (rowboat)
UVSNK1.MS2 — entity description example for UVSnake
WHEEL.MS2 — an example for your perusal
WINGPOLY.MS2 — entity description example for PolySurf (PolySurf = wing tip +
wing body + wingroot fillet)
WINGROOT.MS2 — entity description Example 2 for Fillet (joining wing and body
of airplane); Tutorial 5 example “Fillets”

5-74 • Annotated List of Sample Files December 1998


Appendix E: Annotated List of Sample Files

WINGTIP1.MS2 — entity description Example 2 for EdgeSnake


WINGTIP2.MS2 — entity description Example 3 for Fillet (rounded tip of airplane
wing)
WIREFRM1.MS2 — entity description Example 1 for WireFrame (uses CUBE1.3DA)
WIREFRM2.MS2 — entity description Example 2 for WireFrame (inserted with
reference to Frame object; uses CUBE1.3DA)
WLENDS1.MS2 — entity description example for ProjMagnet
XCURVE.MS2 — entity description example for XCurve
XPLANE.MS2 — entity description example for XPlane (bulkheads)
YPLANE0.MS2 — entity description example for YPlane
ZPLANE0.MS2 — entity description example for ZPlane

MultiSurf 4.0 Annotated List of Sample Files • 5-75


Appendix F: Entity Specification Syntax for Model File Text

Appendix F
Entity Specification Syntax for
Model File Text

Overview
This appendix is intended for those of you who will be editing model files directly as text
(rather than interactively on the screen) and, therefore, need to know the correct specification
syntax for the MultiSurf entities. We’ve listed the entities here by class (points, curves,
snakes, surfaces, miscellaneous), in alphabetical order within each class. We first give the
entity specification, then give one or more examples as fragments of model file text (the
examples are the same as the ones in the “Entity Descriptions”). You may want to Edit/
Show/ Points or Edit/ Show/ All to see complete models on the screen (for many of the
example models, in order to put the focus on the particular entity and its direct supports,
we’ve hidden some of the other objects). See also the Reference chapter “The MultiSurf Model
File.”
Note: these examples do not include optional object information such as layers and weights
(tagged data), and object comments (user data). The “...” before the slash (/) in each entity
specification represents where these data items would be listed in an object definition. For
examples that show these usages, see Reference chapter “The MultiSurf Model File - (5) List of
Objects - Optional tagged data/Optional user data.”

Points
AbsBead name color visibility ... / curve t ;
Example: absbead.ms2
...
BCurve railing 13 1 10x1 / * 2 { p1 p2 p3 } ;
AbsBead stanchion1 11 1 / railing 0.33330 ;
AbsBead stanchion2 11 1 / railing 0.66670 ;
AbsBead stanchion3 11 1 / railing 1.0 ;

MultiSurf 4.0 Entity Specification Syntax for Model File Text • 5-77
Appendix F: Entity Specification Syntax for Model File Text

AbsMagnet name color visibility ... / surface u v ;


Example: absmag1.ms2
...
BlendSurf coachroof 13 3 5x2 5x2 0 / * *
{ fwd_edge coaming aft_edge centerline } ;
AbsMagnet dorade 11 1 / coachroof 0.80000 0.21000 ;
AbsPoint name color visibility ... / X Y Z ;
Example: abspt1.ms2
...
AbsPoint P11 14 1 / 0.000 0.000 3.600 ;
AbsPoint P12 14 1 / 1.367 0.000 0.602 ;
AbsPoint P13 14 1 / 2.324 0.000 -0.800 ;
AbsPoint P14 14 1 / 3.000 0.000 -0.900 ;
AbsRing name color visibility ... / snake t ;
Example: rings1.ms2
...
CLoftSurf deck 7 1 5x1 20x1 0 / 3
{ P11 deckbeam2 deckbeam3 transom_crown } ;
AbsMagnet dm1 10 1 / deck 0.15000 0.50000 ;
AbsMagnet dm2 10 1 / deck 0.05000 0.80000 ;
LineSnake genoa_track 10 1 10x1 / * dm1 dm2 ;
AbsRing fairlead 13 1 / genoa_track 0.40000 ;
ArcLenBead name visibility ... / bead/curve distance ;
Example: arclenbd.ms2
...
BCurve MC1 12 1 10x1 / * 2
{ P11 P12 P13 P14 } ;
ArcLenBead e0 10 1 / MC1 1.800 ;
ArcLenBead e1 10 1 / e0 1.000 ;
ArcLenBead e2 10 1 / e0 -0.500 ;
ArcLenRing name visibility ... / ring/snake distance ;
Example: arclenrg.ms2
...
LineSnake genoa_track 10 1 10x1 / * dm1 dm2 ;
ArcLenRing r0 9 1 / genoa_track 3.700 ;
ArcLenRing r1 9 1 / r0 4.000 ;
ArcLenRing r2 9 1 / r0 -2.000 ;
BlendPoint name visibility ... / type ( point1 wt1 point2 wt2 .... pointN wtN) ;
Example 1: blendpt2.ms2
...
AbsPoint p0 14 1 / 1.500 0.000 1.500 ;
RelPoint p1 14 1 / p0 4.000 0.000 0.000 ;
RelPoint p2 14 1 / p0 0.000 0.000 2.500 ;
BlendPoint p3 11 1 / 1
{ p0 -1.0 p1 1.0 p2 1.0 } ;
BlendPoint ctr 10 1 / 1
{ p0 0.25000 p1 0.25000 p3 0.25000 p2 0.25000 } ;
BCurve c0 3 1 4x1 / * 1
{ p0 p1 p3 p2 p0 } ;
Example 2: blendpt3.ms2
...
// mainmast and sail

5-78 • Entity Specification Syntax for Model File Text December 1998
Appendix F: Entity Specification Syntax for Model File Text

AbsPoint m0 14 1 / -2.666 0.000 4.665 ;


RelPoint m1 14 1 / m0 0.666 0.000 48.654 ;
Line main_mast 5 1 1x1 / * m0 m1 ;
AbsBead M1 10 1 / main_mast 0.09200 ;
AbsBead M2 10 1 / main_mast 0.98000 ;
RelPoint M3 14 1 / M1 13.330 0.000 0.000 ;
BlendPoint Mctr 11 1 / 1
{ M1 0.33333 M2 0.33333 M3 0.33333 } ;
BCurve MBC 3 1 3x8 / * 1
{ M1 M2 M3 M1 } ;
RuledSurf Main 3 1 9x1 1x1 0 / * Mctr MBC ;
// mizzen mast and sail
AbsPoint mm0 14 1 / 15.996 0.000 4.665 ;
RelPoint mm1 14 1 / mm0 0.533 0.000 38.924 ;
Line mizzen_mast 5 1 1x1 / * mm0 mm1 ;
AbsBead Z1 10 1 / mizzen_mast 0.09200 ;
AbsBead Z2 10 1 / mizzen_mast 0.98000 ;
RelPoint Z3 14 1 / Z1 10.664 0.000 0.000 ;
BlendPoint Zctr 11 1 / 1
{ Z1 0.33333 Z2 0.33333 Z3 0.33333 } ;
BCurve ZBC 2 1 3x8 / * 1
{ Z1 Z2 Z3 Z1 } ;
RuledSurf Mizzen 2 1 9x1 1x1 0 / * Zctr ZBC ;
// jib
AbsBead e0 10 1 / main_mast 0.85000 ;
RelPoint J2 14 1 / e0 -0.666 0.000 0.000 ;
RelPoint J1 14 1 / m0 -15.996 0.000 1.333 ;
RelPoint J3 14 1 / m0 -1.999 0.000 1.999 ;
BlendPoint Jctr 11 1 / 1
{ J1 0.33333 J2 0.33333 J3 0.33333 } ;
BCurve JBC 4 1 3x8 / * 1
{ J1 J2 J3 J1 } ;
RuledSurf Jib 4 1 9x1 1x1 0 / * Jctr JBC ;
BlendPoint CE 13 1 / 2
{ Jctr 275.0 Mctr 288.0 Zctr 184.0 } ;
FrameAbsPt name color visibility ... / frame x y z ;
Example: frame1.ms2
...
Frame3 F1 13 1 / e1 f2 f3 ;
FrameAbsPt fap 14 1 / F1 1.500 0.600 0.000 ;
FrameRelPt name color visibility ... / frame point dx dy dz ;
Example: frame1.ms2
...
Frame3 F1 13 1 / e1 f2 f3 ;
FrameAbsPt fap 14 1 / F1 1.500 0.600 0.000 ;
FrameRelPt frp 14 1 / F1 fap -3.000 0.000 0.000 ;
IntBead name color visibility ... / bead/curve mirror/surface point ;
Example: piston.ms2
...
AbsBead e1 10 1 / crank_axis 0.50000 ;
RelPoint tdc 14 1 / e1 0.000 0.000 0.350 ;
RotatPoint p3 14 1 / tdc crank_axis 60.000 ;
AbsPoint p4 14 1 / 0.000 0.000 2.500 ;
Line cyl_axis 6 1 1x1 / * e1 p4 ;
RelPoint p5 14 1 / p3 0.000 0.000 1.250 ;
IntBead e2 9 1 / cyl_axis p3 p5 ;

MultiSurf 4.0 Entity Specification Syntax for Model File Text • 5-79
Appendix F: Entity Specification Syntax for Model File Text

Line conn_rod 4 1 1x1 / * p3 e2 ;


IntMagnet name color visibility ... / magnet/surface bead/curve ;
Example: intmag2.ms2
...
TranSurf patch 11 3 16x1 8x1 0 / long_edge short_edge ;
AbsPoint p0 14 1 / 0.000 0.000 1.250 ;
RelPoint ctr 14 1 / p0 0.000 0.000 -1.750 ;
RelPoint p1 14 1 / p0 1.000 0.300 0.000 ;
Arc c1 10 1 32x1 / * 3 p0 ctr p1 ;
AbsMagnet m1 13 1 / patch 0.25000 0.50000 ;
IntMagnet im1 12 1 / m1 c1 ;
AbsMagnet m2 13 1 / patch 0.75000 0.50000 ;
IntMagnet im2 12 1 / m2 c1 ;
IntRing name color visibility ... / ring/snake mirror/surface point ;
Example: intring.ms2
...
AbsPoint p1 14 1 / -0.500 2.500 0.000 ;
RelPoint p2 14 1 / p1 1.000 0.000 0.000 ;
Line l1 6 1 1x1 / * p1 p2 ;
Plane2 a1 14 1 / p1 p2 ;
TranSurf patch 3 3 16x1 8x1 0 / long_edge short_edge ;
AbsMagnet m4 12 1 / patch 0.87500 0.87500 ;
AbsMagnet m3 12 1 / patch 0.12500 0.87500 ;
AbsMagnet m2 12 1 / patch 0.87500 0.12500 ;
AbsMagnet m1 12 1 / patch 0.12500 0.12500 ;
BSnake n1 10 1 32x1 / * 2
{ m1 m2 m3 m4 } ;
AbsRing r1 15 1 / n1 0.08300 ;
IntRing ir 13 1 / r1 a1 p1 ;
IntRing2 name color visibility ... / ring/snake1 ring/snake2 ;
Example 1: intring2.ms2
...
LineSnake n1 13 1 32x1 / * m0 m1 ;
AbsRing r1 10 1 / n1 0.71459 ;
CSnake n2 14 1 32x1 / * 3
{ m2 m4 m3 } ;
AbsRing r3 10 1 / n2 0.11537 ;
AbsRing r2 10 1 / n2 0.82010 ;
IntRing2 ir1 15 1 / r1 r2 ;
IntRing2 ir2 11 1 / r3 n1 ;
Example 2: intring3.ms2
...
BSnake n0 12 1 8x4 / * 2
{ M0 M1 M2 M3 } ;
AbsRing R1 10 1 / n0 0.05000 ;
AbsRing R2 10 1 / n0 0.95000 ;
IntRing2 ir3 9 1 / R1 R2 ;
MirrPoint name color visibility ... / point mirror ;
Example: mirrpt.ms2
...
AbsPoint P1 10 1 / 1.458 1.609 3.441 ;
AbsPoint P11 12 1 / 0.000 1.000 3.600 ;
YPlane centerplane 14 1 / 0.000 ;
ProjPoint Q11 11 1 / P11 centerplane ;

5-80 • Entity Specification Syntax for Model File Text December 1998
Appendix F: Entity Specification Syntax for Model File Text

MirrPoint mirr_P1 15 1 / P1 centerplane ;


MirrPoint mirr_P11 15 1 / P11 centerplane ;
OffsetPt name color visibility ... / magnet offset ;
Example: offsetpt.ms2
...
TranSurf patch 11 3 16x1 8x1 0 / long_edge short_edge ;
AbsMagnet m2 10 1 / patch 0.20000 0.80000 ;
OffsetPt ofpt 9 1 / m2 -1.000 ;
PolarRelPt name color visibility ... / point lat lon radius ;
Example: prelpt.ms2
...
AbsPoint p1 14 1 / 0.000 0.000 5.000 ;
PolarRelPt prp1 11 1 / p1 30.000 130.000 8.000 ;
ProjMagnet name color visibility ... / point magnet/surface mirror/surface ;
Example: wlends1.ms2
...
CLoftSurf hull 10 1 10x1 20x1 0 / 2
{ MC1 MC2 MC3 } ;
XPlane a1 14 1 / 0.000 ;
AbsMagnet m1 13 1 / hull 0.40000 0.03000 ;
ProjMagnet pm1 12 1 / * m1 a1 ;
AbsMagnet m2 13 1 / hull 0.90000 0.95000 ;
ProjMagnet pm2 12 1 / * m2 a1 ;
YPlane a2 5 1 / 0.000 ;
AbsPoint p0 14 1 / 10.000 0.000 1.000 ;
ProjMagnet pm3 12 1 / p0 hull a2 ;
ProjPoint name color visibility ... / point mirror ;
Example: projpt3.ms2
...
AbsPoint P1 10 1 / 1.458 1.609 3.441 ;
AbsPoint P11 12 1 / 0.000 1.000 3.600 ;
YPlane centerplane 14 1 / 0.000 ;
ProjPoint Q11 11 1 / P11 centerplane ;
BCurve curve 13 5 10x1 / * 2 { P1 P11 Q11 } ;
RelBead name color visibility ... / bead dt ;
Example: relbead.ms2
...
BCurve railing 13 1 10x1 / * 2
{ p1 p2 p3 } ;
AbsBead stanchion1 11 1 / railing 0.33330 ;
AbsBead stanchion2 11 1 / railing 0.66670 ;
AbsBead stanchion3 11 1 / railing 1.0 ;
RelBead inlay1 12 1 / stanchion2 -0.05000 ;
RelBead inlay2 12 1 / stanchion2 0.05000 ;
RelMagnet name color visibility ... / magnet du dv ;
Example: relmag1.ms2
...
BlendSurf coachroof 13 3 5x2 5x2 0 / * *
{ fwd_edge coaming aft_edge centerline } ;
AbsMagnet dorade 11 1 / coachroof 0.80000 0.21000 ;
RelMagnet chock1 12 1 / dorade 0.03000 -0.08000 ;

MultiSurf 4.0 Entity Specification Syntax for Model File Text • 5-81
Appendix F: Entity Specification Syntax for Model File Text

RelPoint name color visibility ... / point dX dY dZ ;


Example: relpt1.ms2
...
AbsPoint P11 13 1 / 0.000 0.500 3.600 ;
RelPoint RP1 12 1 / P11 7.000 3.000 0.000 ;
RelRing name color visibility ... / ring dt ;
Example: rings2.ms2
...
CLoftSurf deck 7 1 5x1 20x1 0 / 3
{ P11 deckbeam2 deckbeam3 transom_crown } ;
AbsMagnet dm1 10 1 / deck 0.15000 0.50000 ;
AbsMagnet dm2 10 1 / deck 0.05000 0.80000 ;
LineSnake genoa_track 10 1 10x1 / * dm1 dm2 ;
AbsRing fairlead 13 1 / genoa_track 0.40000 ;
RelRing turning_block 15 1 / fairlead 0.15000 ;
RotatPoint name color visibility ... / point line angle ;
Example: rotatpt.ms2
...
AbsPoint up 14 1 / 0.000 0.000 5.000 ;
Line axis 12 1 1x1 / * * up ;
AbsPoint p0 14 1 / 10.000 0.000 0.000 ;
RotatPoint p1 14 1 / p0 axis 72.000 ;
RotatPoint p2 14 1 / p0 axis 144.000 ;
RotatPoint p3 14 1 / p0 axis 216.000 ;
RotatPoint p4 14 1 / p0 axis 288.000 ;
BCurve pentagon 13 1 5x1 / * 1
{ p0 p1 p2 p3 p4 p0 } ;
TabPoint name color visibility ... / filename point no. frame/point ;
Example: tabpoint.ms2 (note: needs demopts.3da)
...
TabPoint P11 14 1 / demopts 1 * ;
TabPoint P12 14 1 / demopts 2 * ;
TabPoint P13 14 1 / demopts 3 * ;
TabPoint P14 14 1 / demopts 4 * ;
BCurve MC1 11 1 10x1 / * 2
{ P11 P12 P13 P14 };
TabPoint P21 14 1 / demopts 5 * ;
TabPoint P22 14 1 / demopts 6 * ;
TabPoint P23 14 1 / demopts 7 * ;
TabPoint P24 14 1 / demopts 8 * ;
BCurve MC2 11 1 10x1 / * 2
{ P21 P22 P23 P24 };
TabPoint P31 14 1 / demopts 9 * ;
TabPoint P32 14 1 / demopts 10 * ;
TabPoint P33 14 1 / demopts 11 * ;
TabPoint P34 14 1 / demopts 12 * ;
BCurve MC3 11 1 10x1 / * 2
{ P31 P32 P33 P34 };
CLoftSurf hull 10 1 10x1 20x1 0 / 2
{ MC1 MC2 MC3 };

5-82 • Entity Specification Syntax for Model File Text December 1998
Appendix F: Entity Specification Syntax for Model File Text

TanPoint name color visibility ... / bead offset ;


Example: tanpt1.ms2
...
Arc arc1 11 1 32x1 / * 1 p1 p2 p3 ;
AbsBead e1 10 1 / arc1 0.65730 ;
RelPoint p5 14 1 / e1 0.000 5.000 0.000 ;
TanPoint p4 12 1 / e1 5.000 ;
Line axis 6 1 1x1 / * e1 p5 ;
RotatPoint p6 14 1 / p4 axis 90.000 ;
Arc c2 10 1 32x1 / * 3 e1 p6 p4 ;

Curves
Arc name color visibility divisions ... / relabel type point1 point2 point3 ;
Example 1: arc1.ms2 (type-1)
...
AbsPoint top 14 1 / 0.000 0.000 10.000 ;
AbsPoint side 14 1 / 0.000 10.000 0.000 ;
AbsPoint bottom 14 1 / 0.000 0.000 -10.000 ;
Arc midsection 10 1 36x1 / * 1 top side bottom ;
Example 2: arc2.ms2 (type-2)
...
AbsPoint center 14 1 / 2.000 2.000 2.000 ;
RelPoint start 14 1 / center -5.000 0.000 0.000 ;
RelPoint end_guide 14 1 / center 6.000 0.000 2.000 ;
Line edge 7 1 1x1 / * center end_guide ;
Arc arc_to_edge 13 1 20x1 / * 2 start center end_guide ;
Example 3: arc3.ms2 (type-3)
...
AbsPoint center 14 1 / 3.000 3.000 3.000 ;
RelPoint start 14 1 / center -5.000 0.000 0.000 ;
RelPoint plane_guide 14 1 / center 6.000 0.000 2.000 ;
Arc full_circle 11 1 36x1 / * 3 start center plane_guide ;
Example 4: arcs4-5.ms2 (type-4 and type-5)
...
AbsPoint p1 14 1 / 0.000 0.000 0.000 ;
AbsPoint p2 14 1 / 11.122 0.000 4.774 ;
AbsPoint p3 14 1 / 10.000 0.000 9.000 ;
Arc arc4 10 5 32x1 / * 4 p1 p2 p3 ;
Arc arc5 11 5 32x1 / * 5 p1 p2 p3 ;
Example 5: arc5perp.ms2 (arc ending perpendicular to plane)
...
AbsPoint p3 14 1 / 10.000 0.000 9.000 ;
XPlane x=0 14 1 / 0.000 ;
RelPoint p4 14 1 / p3 0.000 0.000 1.500 ;
ProjPoint p5 10 1 / p4 x=0 ;
Arc arch 13 5 32x1 / * 5 p3 p4 p5 ;
Example 6: arc6.ms2 (type-6)
...
AbsPoint center 14 1 / 3.000 3.000 3.000 ;
RelPoint start 14 1 / center -5.000 0.000 0.000 ;
RelPoint plane_guide 14 1 / center 6.000 0.000 2.000 ;
Arc semi_circle 11 1 36x1 / * 6 start center plane_guide ;

MultiSurf 4.0 Entity Specification Syntax for Model File Text • 5-83
Appendix F: Entity Specification Syntax for Model File Text

BCurve name color visibility divisions ... / relabel type { point1 point2 .... pointN } ;
Example: bspline2.ms2 (type-2)
...
AbsPoint P11 14 1 / 0.000 0.000 3.600 ;
AbsPoint P12 14 1 / 1.367 0.000 0.602 ;
AbsPoint P13 14 1 / 2.324 0.000 -0.800 ;
AbsPoint P14 14 1 / 3.000 0.000 -0.900 ;
BCurve MC1 12 5 10x1 / * 2
{ P11 P12 P13 P14 } ;
BFitCurve name color visibility divisions ... / relabel type nc log-tolerance curve ;
Example: bfitcv1.ms2
...
Conic c0 11 1 8x8 / * 1 p0 px pz 0.000 90.000 ;
BFitCurve fit 9 5 8x4 / * 3 0 -4.0 c0 ;
BSubCurve name color visibility divisions ... / relabel type { bead1 bead2 .... beadN } ;
Example 1: bsubcv0.ms2
...
BCurve basis 9 1 32x1 / * 2
{ p1 p2 p3 p4 p5 } ;
AbsBead e0 12 1 / basis 0.23400 ;
AbsBead e1 12 1 / basis 0.46000 ;
BSubCurve bsub 11 3 32x1 / * 2
{ e0 e1 *1 } ;
Example 2: bsubcv1.ms2
...
BCurve MC2 9 1 10x1 / * 2
{ P21 P22 P23 P24 } ;
AbsBead e21 10 1 / MC2 0.25800 ;
AbsBead e22 10 1 / MC2 0.75000 ;
BSubCurve mc2 15 1 8x4 / * 2
{ *0 e21 e22 *1 } ;
CCurve name color visibility divisions ... / relabel type { point1 point2 .... pointN } ;
Example: cspline1.ms2 (type-3)
...
AbsPoint P11 14 1 / 0.000 0.000 3.600 ;
AbsPoint P21 14 1 / 8.000 3.118 2.953 ;
AbsPoint P31 14 1 / 15.000 4.540 2.640 ;
AbsPoint P41 14 1 / 22.500 4.721 2.564 ;
AbsPoint P51 14 1 / 30.000 3.500 2.760 ;
CCurve sheer 10 1 40x1 / * 3
{ P11 P21 P31 P41 P51 } ;
Conic name color visibility divisions ... / relabel type center point2 point3 s0 s1 ;
Example 1: conics.ms2 (types 1-3)
...
AbsPoint center 14 1 / 5.000 0.000 0.000 ;
AbsPoint major 14 1 / 10.000 0.000 0.000 ;
AbsPoint minor 14 1 / 0.000 0.000 10.000 ;
Conic ellipse 10 1 20x1 / * 1 center major minor
-90.000 90.000 ;
Conic hyperbola_pos 11 1 20x1 / * 2 center major minor
-90.000 90.000 ;
Conic hyperbola_neg 12 1 20x1 / * 3 center major minor
-90.000 90.000 ;

5-84 • Entity Specification Syntax for Model File Text December 1998
Appendix F: Entity Specification Syntax for Model File Text

Example 2: catenary.ms2 (type-4)


...
AbsPoint bottom_2 9 -1 / -100.000 0.000 -60.000 ;
AbsPoint bottom_1 9 -1 / 100.000 0.000 -60.000 ;
Line bottom 1 1 1x1 / * bottom_2 bottom_1 ;
AbsPoint center 14 1 / 0.000 0.000 -100.000 ;
RelPoint minor 14 1 / center 50.000 0.000 0.000 ;
AbsPoint contact 14 1 / 0.000 0.000 -60.000 ;
RelPoint anchor 9 1 / contact -50.000 0.000 0.000 ;
Line chain 5 1 16x1 / * anchor contact ;
Conic catenary 13 1 16x1 / * 4 center contact minor
0.000 90.000 ;
AbsBead boat 9 1 / catenary 1.00000 ;
FCurve name color visibility divisions ... / relabel type { point1 point2 .... pointN } ;
Example 1: foil1.ms2 (type-1 half-section)
...
AbsPoint p1 14 1 / 20.000 0.000 2.000 ;
AbsPoint p2 14 1 / 13.333 0.000 3.250 ;
AbsPoint p3 14 1 / 10.000 0.000 2.000 ;
FCurve profile 10 1 40x1 / * 1
{ p1 p2 p3 } ;
Example 2: foil2.ms2 (type-1 full-section)
...
AbsPoint leading_edge 14 1 / 13.000 0.000 -1.200 ;
RelPoint trailing_edge 14 1 / leading_edge
4.000 0.000 0.000 ;
RelPoint top 14 1 / leading_edge 1.200 0.240 -0.100 ;
RelPoint bottom 14 1 / leading_edge 1.200 -0.240 -0.100 ;
FCurve root 11 1 40x1 / * 1
{ trailing_edge top leading_edge bottom trailing_edge } ;
Example 3: foil3.ms2 (type-1 cambered)
...
AbsPoint leading_edge 14 1 / 13.000 0.000 -1.200 ;
RelPoint trailing_edge 14 1 / leading_edge
4.000 0.000 0.000 ;
RelPoint top 14 1 / leading_edge 1.200 0.500 -0.100 ;
RelPoint bottom 14 1 / leading_edge 1.200 -0.050 -0.100 ;
FCurve root 11 1 40x1 / * 1
{ trailing_edge top leading_edge bottom trailing_edge } ;
Example 4: foil7.ms2 (user-defined; uses type165.foi)
...
AbsPoint leading_edge 14 1 / 13.000 0.000 -1.200 ;
RelPoint trailing_edge 14 1 / leading_edge
4.000 0.000 0.000 ;
RelPoint top 14 1 / leading_edge 1.200 0.500 -0.100 ;
RelPoint bottom 14 1 / leading_edge 1.200 -0.050 -0.100 ;
FCurve root 11 1 40x1 / * 1
{ trailing_edge top leading_edge bottom trailing_edge } ;
FCurve userdef 13 1 40x1 / * 165
{ trailing_edge top leading_edge bottom trailing_edge } ;
Helix name color visibility divisions ... / relabel point line pitch angle ;
Example: helix1.ms2
...
AbsPoint p0 14 1 / 0.000 0.000 -2.000 ;
Line axis 10 1 1x1 / * p1 rp1 ;

MultiSurf 4.0 Entity Specification Syntax for Model File Text • 5-85
Appendix F: Entity Specification Syntax for Model File Text

Helix helix1 13 1 60x1 / * p0 axis 0.30000 720.000 ;


Helix2 name color visibility divisions ... / relabel point line graph angle ;
Example: helix2.ms2
...
Relabel v1 / 3
{ 0.0 0.0 0.50000 1.0 1.0 } ;
BGraph h1 / 2
{ 1.0 0.60000 0.60000 1.0 } ;
AbsPoint p1 14 1 / 0.000 0.000 3.600 ;
RelPoint rp1 14 1 / p1 30.000 0.000 0.000 ;
AbsPoint p0 14 1 / -2.093 0.000 -2.000 ;
Line axis 10 1 32x1 / v1 p1 rp1 ;
Helix2 helix 13 1 240x1 / * p0 axis h1 3600.000 ;
Line name color visibility divisions ... / relabel point1 point2 ;
Example: linestem.ms2
...
AbsPoint stemhead 14 1 / 0.000 0.000 3.600 ;
AbsPoint forefoot 14 1 / 4.000 0.000 -0.400 ;
Line stem 12 1 10x1 / * stemhead forefoot ;
MirrCurve name color visibility divisions ... / relabel curve mirror ;
Example: mirrcrv.ms2
...
AbsPoint P11 14 1 / 0.000 0.000 3.600 ;
AbsPoint P51 14 1 / 30.000 3.500 2.760 ;
CCurve sheer 10 1 40x1 / * 3
{ P11 P21 P31 P41 P51 } ;
YPlane centerplane 14 1 / 0.000 ;
ProjCurve horiz_projn 13 1 20x1 / * sheer centerplane ;
MirrCurve port_side 12 1 20x1 / * sheer centerplane ;
NURBCurve name color visibility divisions ... / relabel type knotlist
{ point1 wt1 point2 wt2 .... pointN wtN } ;
Example: nurbcrv1.ms2
...
AbsPoint p1 14 1 / 15.000 6.000 4.500 ;
AbsPoint p2 14 1 / 15.000 5.000 -0.750 ;
AbsPoint p3 14 1 / 15.000 0.000 -1.500 ;
NURBCurve polyline 12 1 20x1 / * 1 *
{ p1 1.0 p2 1.0 p3 1.0 } ;
NURBCurve midsection 11 1 20x1 / * 2 *
{ p1 1.0 p2 1.0 p3 1.0 } ;
OffsetCurv name color visibility divisions ... / relabel snake offset1 offset2 graph ;
Example 1: offsetcv.ms2
...
TranSurf patch 11 3 16x1 8x1 0 / long_edge short_edge ;
AbsMagnet m1 10 -1 / patch 0.20000 0.20000 ;
AbsMagnet m2 10 -1 / patch 0.20000 0.80000 ;
AbsMagnet m3 10 -1 / patch 0.80000 0.80000 ;
BSnake basis_snake 13 1 20x1 / * 3
{ m1 m2 m3 } ;
OffsetCurv offset_curve 9 1 20x1 / * basis_snake
-1.000 -0.500 * ;

5-86 • Entity Specification Syntax for Model File Text December 1998
Appendix F: Entity Specification Syntax for Model File Text

Example 2: inlet.ms2
...
BGraph h1 / 2
{ 0.0 1.0 1.0 0.0 } ;
AbsPoint p1 14 -1 / 0.000 0.000 0.000 ;
AbsPoint p2 14 -1 / 30.000 0.000 0.000 ;
Line axis 12 -1 1x1 / * p1 p2 ;
AbsPoint q2 14 -1 / 10.000 0.000 1.500 ;
AbsPoint q3 14 -1 / 20.000 0.000 2.000 ;
AbsPoint q4 14 -1 / 30.000 0.000 1.500 ;
CCurve meridian 11 1 32x1 / * 3
{ p1 q2 q3 q4 } ;
RevSurf fuselage 3 3 4x4 4x3 0 / * meridian axis
0.000 -180.000 ;
AbsMagnet m1 12 1 / fuselage 0.46570 0.40000 ;
RelMagnet m3 12 1 / m1 0.20000 0.20000 ;
RelMagnet m2 12 1 / m1 0.0 0.40000 ;
CSnake n2 13 1 32x1 / * 3 { m1 m3 m2 } ;
LineSnake n1 13 1 32x1 / * m1 m2 ;
OffsetCurv lip 11 1 32x1 / * n1 0.000 1.000 h1 ;
Blister cowl 2 3 4x3 6x2 0 / * 3 n2 n1 lip ;
PolyCurve name color visibility divisions ... / relabel
{ curve1 t1 curve2 t2 .... curveN 1 } ;
Example: polycrv1.ms2
...
AbsPoint keel 14 1 / 0.000 0.000 0.000 ;
AbsPoint p1 14 1 / 0.000 40.000 0.000 ;
AbsPoint p2 14 1 / 0.000 40.000 10.000 ;
AbsPoint p3 14 1 / 0.000 50.000 10.000 ;
AbsPoint deck 14 1 / 0.000 50.000 60.000 ;
Line bottom 14 1 10x1 / * keel p1 ;
Arc bilge 12 1 10x1 / * 2 p1 p2 p3 ;
Line side 10 1 10x1 / * p3 deck ;
PolyCurve midsection 13 1 50x1 / *
{ bottom 0.40000 bilge 0.60000 side 1.0 } ;
PolyCurve2 name color visibility divisions ... / relabel { curve1 .... curveN } ;
Example 1: radiusarc3-polycurve2.ms2
...
PolyCurve2 chine 11 1 8x4 / * { l1 radiusarc l3 } ;
Example 2: defsweep-polycurve2.ms2
...
PolyCurve2 path 9 1 8x8 A:__Nick("path") / * { l0 c0 l1 c3 l3 } ;
ProcCurve name color visibility divisions ... / relabel point
{ bead/ring/graph1 bead/ring/graph2 .... bead/ring/graphN } ;
Example: proc-cv2.ms2
...
Conic c0 11 1 8x8 / * 1 p0 p1 p2 0.000 360.000 ;
AbsBead e0 10 1 / c0 0.10000 ;
TanPoint p3 12 1 / e0 1.500 ;
RelPoint rp 14 -1 / e0 0.000 1.000 0.000 ;
Line axis 6 1 1x1 / * e0 rp ;
RotatPoint moving_point 14 1 / p3 axis -90.000 ;
ProcCurve rim 10 1 8x8 / * moving_point
{ e0 } ;

MultiSurf 4.0 Entity Specification Syntax for Model File Text • 5-87
Appendix F: Entity Specification Syntax for Model File Text

ProjCurve name color visibility divisions ... / relabel curve mirror ;


Example: projcrv1.ms2
...
AbsPoint P11 14 1 / 1.011 1.000 3.400 ;
AbsPoint P14 14 1 / 3.000 0.000 -0.900 ;
BCurve MC1 11 1 10x1 / * 2
{ P11 P12 P13 P14 } ;
YPlane centerplane 14 1 / 0.000 ;
ProjCurve profile 13 1 10x1 / * MC1 centerplane ;
RadiusArc name color visibility divisions ... / relabel type radius { point1 point2 point3 } ;
Example 2: radiusarc3-polycurve2.ms2 (type-3)
...
ProjPoint p2 11 1 / p1 *X=0 ;
AbsBead long_rake 9 1 A:__Nick("long_rake") / l0 0.25000 ;
AbsBead vert_rake 9 1 A:__Nick("vert_rake") / l2 0.66000 ;
RadiusArc radiusarc 10 1 8x4 A:__Nick("radiusarc") / * 3 20.000
vert_rake long_rake p2 ;
RelCurve name color visibility divisions ... / relabel curve point1 point2 graph ;
Example 1: relcurv3.ms2
...
AbsPoint P1 14 1 / 0.000 0.000 0.000 ;
AbsPoint P5 14 1 / 30.000 0.000 0.000 ;
BCurve spline 13 1 32x1 / * 3
{ P1 P2 P3 P4 P5 } ;
AbsPoint q1 10 1 / 0.000 0.000 5.000 ;
AbsPoint q2 10 1 / 33.000 0.000 5.000 ;
RelCurve relcurve1 10 1 32x1 / * spline q1 q2 * ;
RelPoint rp1 11 1 / P1 0.000 0.000 5.000 ;
RelPoint rp2 11 1 / P5 0.000 0.000 5.000 ;
RelCurve relcurve2 11 1 32x1 / * spline rp1 rp2 * ;
Example 2: relcurv1.ms2
...
AbsPoint p5 14 1 / 30.000 4.000 -0.500 ;
BCurve outer_chine 11 1 32x1 / * 3
{ p1 p2 p3 p4 p5 } ;
BCurve keel 14 1 32x1 / * 3
{ p1 r2 r3 r4 r5 } ;
RelPoint rp5 14 1 / p5 0.000 -1.000 0.000 ;
BGraph h1 / 3
{ 0.0 0.25000 0.65000 0.85000 1.0 1.0 1.0 1.0 } ;
RelCurve inner_chine 10 1 32x1 / * outer_chine p1 rp5 h1 ;
RuledSurf bottom 2 1 32x1 1x1 0 / * inner_chine keel ;
RuledSurf flat 3 1 32x1 1x1 0 / * outer_chine inner_chine ;
AbsBead e1 10 1 / inner_chine 0.75000 ;
RotatCurve name color visibility divisions ... / relabel curve line angle ;
Example: rotatcrv.ms2
...
Line line_1 4 1 1x1 / * p1 p5 ;
CCurve cspline 13 1 20x1 / * 3
{ p1 p2 p3 p4 p5 } ;
RotatCurve rotcurve 10 1 20x1 / * cspline line_1 60.000 ;

5-88 • Entity Specification Syntax for Model File Text December 1998
Appendix F: Entity Specification Syntax for Model File Text

SubCurve name color visibility divisions ... / relabel bead1 bead2 ;


Example: subcurv1.ms2
...
AbsPoint top 14 -1 / 0.000 0.000 10.000 ;
RelPoint side 14 -1 / top 0.000 10.000 -10.000 ;
RelPoint bottom 14 -1 / top 0.000 0.000 -20.000 ;
Arc midsection 10 1 72x1 / * 1 top side bottom ;
AbsBead bead1 13 1 / midsection 0.33333 ;
AbsBead bead2 13 1 / midsection 0.66667 ;
SubCurve sidepanel 13 1 24x1 / * bead1 bead2 ;
TabCurve name color visibility divisions ... / relabel filename polyline no. frame/point ;
Example: tabcurve.ms2 (needs demomcs.3da)
...
TabCurve c1 12 1 10x1 / * demomcs 1 * ;
TabCurve c2 12 1 10x1 / * demomcs 2 * ;
TabCurve c3 12 1 10x1 / * demomcs 3 * ;
CLoftSurf hull 10 1 10x1 10x2 0 / 3
{ c1 c2 c3 } ;
AbsBead e1 10 1 / c1 0.25230 ;
XCurve name color visibility divisions ... / relabel type ecc s/m1 s/m2 s/m3 s/m4
{ point1 point2 .... pointN } ;
(note: s/m means slope or moment per ecc)
Example: xcurve.ms2
...
AbsPoint p1 14 1 / 0.000 0.000 1.000 ;
AbsPoint p2 14 1 / 2.000 0.729 0.795 ;
AbsPoint p3 14 1 / 4.000 0.912 0.684 ;
AbsPoint p4 14 1 / 6.000 0.766 0.684 ;
AbsPoint p5 14 1 / 8.000 0.435 0.758 ;
XCurve x 12 1 64x1 / * 1 1
0.50000 -0.13000 -0.02000 0.00500
{ p1 p2 p3 p4 p5 } ;

Snakes
ArcSnake name color visibility divisions ... / relabel type magnet1 magnet2 magnet3 ;
Example: arcsnake.ms2
...
BlendSurf patch 10 3 5x2 5x2 1 / * *
{ AB BC CD DA } ;
AbsMagnet center 11 1 / patch 0.50000 0.50000 ;
AbsMagnet m1 11 1 / patch 0.20000 0.20000 ;
AbsMagnet m2 11 1 / patch 0.80000 0.20000 ;
ArcSnake garter 12 1 50x1 / * 3 m1 center m2 ;
BSnake name color visibility divisions ... / relabel type { magnet1 magnet2 .... magnetN };
Example: bsnake.ms2
...
CLoftSurf hull 10 8 10x1 20x1 0 / 3
{ MC1 MC2 MC3 MC4 MC5 } ;
AbsMagnet wale_fwd 11 1 / hull 0.08000 0.0 ;
AbsMagnet wale_mid 11 1 / hull 0.12000 0.50000 ;
AbsMagnet wale_aft 11 1 / hull 0.06000 1.0 ;

MultiSurf 4.0 Entity Specification Syntax for Model File Text • 5-89
Appendix F: Entity Specification Syntax for Model File Text

BSnake wale 11 1 20x1 / * 2 { wale_fwd wale_mid wale_aft } ;


BSubSnake name color visibility divisions ... / relabel type { bead/ring1 bead/ring2 .... bead/ringN }
;
Example: bsubsnake1.ms2
...
BSubSnake bss2 14 3 8x4 L:4 / * 2 { *0 ar1 ar2 *1 } ;
BSubSnake bss1 14 3 8x4 L:4 / * 2 { *0 ar3 ar4 *1 } ;
CopySnake name color visibility divisions ... / relabel snake magnet/surface scale angle;
Example: copysnak.ms2
...
TranSurf patch 11 3 16x1 8x1 0 / long_edge short_edge ;
AbsMagnet magnet 12 1 / patch 0.12452 0.10184 ;
AbsMagnet magnet1 12 1 / patch 0.53747 0.50008 ;
AbsMagnet magnet2 12 1 / patch 0.12507 0.87937 ;
CSnake n1 13 1 32x1 / * 2
{ magnet magnet1 magnet2 } ;
OffsetSurf os1 10 3 8x2 4x2 0 / patch
{ -0.500 -0.500 -0.500 -0.500 } ;
CopySnake n2 12 1 32x1 / * n1 os1 1.0 0.000 ;
RuledSurf rs 14 1 32x1 1x1 0 / * n1 n2 ;
AbsMagnet m1 15 1 / patch 0.62500 0.50000 ;
CopySnake n3 15 1 32x1 / * n1 m1 0.50000 180.000 ;
CSnake name color visibility divisions ... / relabel type
{ magnet1 magnet2 .... magnetN } ;
Example: csnake.ms2
...
CLoftSurf hull 10 8 10x1 20x1 0 / 3
{ MC1 MC2 MC3 MC4 MC5 } ;
AbsMagnet wale_fwd 11 1 / hull 0.08000 0.0 ;
AbsMagnet wale_mid 11 1 / hull 0.11500 0.50000 ;
AbsMagnet wale_aft 11 1 / hull 0.12000 1.0 ;
CSnake wale 11 1 20x1 / * 2
{ wale_fwd wale_mid wale_aft } ;
EdgeSnake name color visibility divisions ... / relabel type surface ;
Example: wingtip1.ms2
...
RuledSurf wing 2 3 6x2 4x1 0 / * root_profile tip_profile ;
EdgeSnake snake_3 13 -1 16x1 / * 3 wing ;
EdgeSnake trailing_edge 9 1 16x1 / * 4 wing ;
EdgeSnake leading_edge 13 1 16x1 / * 2 wing ;
AbsRing ring1 14 1 / leading_edge 0.75000 ;
AbsRing ring0 14 1 / trailing_edge 0.90000 ;
LineSnake snake_4 14 1 16x1 / * ring0 ring1 ;
FSnake name color visibility divisions ... / relabel type { magnet1 magnet2 .... magnetN } ;
Example: fsnake2.ms2
...
CLoftSurf hull 10 8 10x1 20x1 0 / 3 { MC1 MC2 MC3 MC4 MC5 } ;
AbsMagnet trailing_edge 13 1 / hull 1.0 0.56300 ;
AbsMagnet side 13 1 / hull 0.95000 0.40000 ;
AbsMagnet leading_edge 13 1 / hull 1.0 0.30000 ;
FSnake keel_root 11 1 20x1 / * 1 {trailing_edge side leading_edge};

5-90 • Entity Specification Syntax for Model File Text December 1998
Appendix F: Entity Specification Syntax for Model File Text

GeoSnake name color visibility divisions ... / relabel curvature graph log-tolerance
{ magnet1 magnet2 .... magnetN } ;
Example:
...
CLoftSurf hull 10 9 10x1 20x1 0 W:3.700 / * 2
{ MC1 MC2 MC3 } ;
AbsMagnet m0 12 1 / hull 0.10500 0.0 ;
RelMagnet m1 12 1 / m0 0.0 1.0 ;
GeoSnake n0 13 1 8x4 / * 0.000 * -3.0
{ m0 m1 } ;
IntSnake name color visibility divisions ... / relabel magnet mirror/surface point ;
Example: boottop.ms2
...
AbsPoint P34 14 1 / 30.000 0.000 0.120 ;
BCurve MC3 11 1 10x1 / * 2
{ P31 P32 P33 P34 } ;
CLoftSurf hull 10 1 10x1 20x1 0 / 2
{ MC1 MC2 MC3 } ;
ZPlane z=0 14 1 / 0.000 ;
AbsMagnet m1 12 1 / hull 0.35000 0.02000 ;
IntSnake wl0 13 1 32x1 / * m1 z=0 * ;
IntSnake wl1 13 1 32x1 / * m1 z=0 P34 ;
AbsRing r00 9 1 / wl0 0.0 ;
AbsRing r01 9 1 / wl0 1.0 ;
AbsRing r10 9 1 / wl1 0.0 ;
AbsRing r11 9 1 / wl1 1.0 ;
LineSnake n0 14 1 3x1 / * r10 r00 ;
LineSnake n1 14 1 3x1 / * r11 r01 ;
SubSurf stripe 15 3 8x4 3x1 0 /
{ wl1 n1 wl0 n0 } ;
LineSnake name color visibility divisions ... / relabel magnet1 magnet2 ;
Example 1: lsnake.ms2
...
CLoftSurf hull 10 8 10x1 20x1 0 / 3 { MC1 MC2 MC3 MC4 MC5 } ;
AbsMagnet cove_fwd 13 1 / hull 0.05000 0.04000 ;
AbsMagnet cove_aft 13 1 / hull 0.05000 0.96000 ;
LineSnake cove 13 1 20x1 / * cove_fwd cove_aft ;
Example 2: lsnake3.ms2
...
CLoftSurf hull 10 8 10x1 20x1 0 / 3 { MC1 MC2 MC3 MC4 MC5 } ;
AbsMagnet m1 13 1 / hull 0.0 0.0 ;
AbsMagnet m2 13 1 / hull 0.0 0.66670 ;
LineSnake sheerline 13 1 20x1 / * m1 m2 ;
NURBSnake name color visibility divisions ... / relabel type knotlist
{ magnet1 wt1 magnet2 wt2 .... magnetN wtN } ;
Example: nurbsnk1.ms2
...
CLoftSurf cabin_side 10 1 10x1 1x1 0 / 1 { cs_top cs_deck };
AbsMagnet csm1 13 1 / cabin_side 0.90000 0.50000;
...
AbsMagnet csm7 13 1 / cabin_side 0.90000 0.20000;
NURBSnake portlight 15 1 40x1 / * 2 *
{ csm1 1.0 csm2 1.0 csm3 1.0 csm4 1.0 csm5 1.0 csm6 1.0
csm7 1.0 csm1 1.0 } ;

MultiSurf 4.0 Entity Specification Syntax for Model File Text • 5-91
Appendix F: Entity Specification Syntax for Model File Text

PolySnake name color visibility divisions ... / relabel


{ snake1 t1 snake2 t2 .... snakeN 1 } ;
Example: polysnk1.ms2
...
TranSurf patch 10 3 6x2 4x2 0 / long_edge short_edge ;
BSnake bsnake 14 -1 20x1 / * 2
{ M1 M2 M3 } ;
AbsRing end1 13 1 / bsnake 1.0 ;
AbsRing end2 13 1 / bsnake 0.0 ;
SubSnake t_reversed 11 1 20x1 / * end1 end2 ;
LineSnake lsnake 14 1 10x1 / * M1 M4 ;
PolySnake polysnake 13 1 40x1 / *
{ t_reversed 0.50000 lsnake 1.0 } ;
ProcSnake name color visibility divisions ... / relabel magnet
{ bead/ring/graph1 bead/ring/graph2 .... bead/ring/graphN } ;
Example: procsnk1.ms2
...
NURBSnake portlight 15 1 60x1 / * 2 *
{ csm1 1.0 csm2 1.0 csm3 1.0 csm4 1.0 csm5 1.0 csm6 1.0 csm7 1.0
csm1 1.0 } ;
AbsRing r0 9 1 / portlight 0.25000 ;
TanPoint tanpt 11 1 / r0 0.100 ;
OffsetPt offpt 14 1 / r0 -5.000 ;
Line axis 6 1 1x1 / * r0 offpt ;
RotatPoint rotpt 13 1 / tanpt axis 90.000 ;
ProjMagnet moving_magnet 12 1 / rotpt r0 cabin_side ;
ProcSnake frame 10 1 60x1 / * moving_magnet
{ r0 } ;
ProjSnake name color visibility divisions ... / relabel curve magnet/surface mirror/surface ;
Example 1: thruster.ms2
...
CLoftSurf hull 10 1 10x2 20x1 0 / 2
{ MC1 MC2 MC3 } ;
YPlane ctrplane 3 1 / 0.000 ;
AbsPoint p1 14 1 / 4.018 0.000 -0.498 ;
RelPoint p3 14 1 / p1 -0.721 0.000 0.000 ;
RelPoint p2 14 1 / p1 0.000 0.000 0.280 ;
Arc circle 11 1 32x1 / * 3 p2 p1 p3 ;
ProjSnake n1 13 1 32x1 / * circle hull ctrplane ;
RuledSurf s1 10 3 32x1 1x1 0 / circle n1 ;
Example 2: prsnake1.ms2
...
RevSurf fuselage 3 3 4x3 6x4 0 / l1 axis 0.000 -180.000 ;
TranSurf y=18 3 3 5x1 5x1 0 / l2 l1 ;
AbsPoint q1 14 1 / 9.000 0.000 -3.750 ;
RelPoint q2 14 1 / q1 -10.500 0.000 1.750 ;
RelPoint q3 14 1 / q1 -16.000 0.000 0.000 ;
RelPoint q4 14 1 / q2 0.000 0.000 -2.438 ;
FCurve foil 11 1 32x1 / * 1
{ q1 q2 q3 q4 q1 } ;
RelPoint apex 14 1 / q1 0.000 72.000 0.000 ;
ProjSnake root 13 1 32x1 / * foil fuselage apex ;
ProjSnake foil1 15 1 32x1 / * foil y=18 apex ;
RuledSurf wing_inb 2 1 32x1 1x1 0 / root foil1 ;

5-92 • Entity Specification Syntax for Model File Text December 1998
Appendix F: Entity Specification Syntax for Model File Text

RelSnake name color visibility divisions ... / relabel snake magnet1 magnet2 graph ;
Example: relsnk1.ms2
...
TranSurf patch 10 3 6x1 4x1 0 / long_edge short_edge ;
CSnake csnake 11 1 40x1 / * 3 { CM1 CM2 CM3 CM4 CM5 } ;
RelMagnet mag1 13 1 / CM1 0.20000 0.10000 ;
RelMagnet mag2 13 1 / CM5 -0.05000 0.05000 ;
RelMagnet mag3 12 1 / CM1 -0.05000 0.05000 ;
RelSnake relsnake1 13 1 40x1 / * csnake mag1 mag2 * ;
RelSnake relsnake2 12 1 40x1 / * csnake mag3 mag2 * ;
SubSnake name color visibility divisions ... / relabel bead/ring1 bead/ring2 ;
Example 1: subsnk1.ms2
...
BSnake bsnake 14 1 20x1 / * 2 { M1 M2 M3 } ;
AbsRing end1 11 1 / bsnake 0.30000 ;
AbsRing end2 11 1 / bsnake 0.70000 ;
SubSnake segment 11 1 12x1 / * end1 end2 ;
Example 2: subsnk2.ms2
...
BSnake bsnake 14 1 20x1 / * 2
{ M1 M2 M3 } ;
AbsRing end1 11 1 / bsnake 1.0 ;
AbsRing end2 11 1 / bsnake 0.0 ;
SubSnake t_reversed 11 1 20x1 / * end1 end2 ;
UVSnake name color visibility divisions ... / relabel type magnet ;
Example: uvsnk1.ms2
...
RuledSurf top 2 3 4x3 5x1 0 / rim back_corner ;
AbsMagnet top_mag 15 1 / top 0.50000 0.30000 ;
UVSnake top_boundary 14 1 16x1 / * 2 top_mag ;
TranSurf front 10 3 4x3 5x1 0 / rim vline ;
AbsMagnet front_mag 15 1 / front 0.50000 0.30000 ;
UVSnake front_boundary 11 1 16x1 / * 2 front_mag ;

Surfaces
ALoftSurf name color visibility divisions orientation ... / relabel type
curve1 curve2 curve3 ;
Example 1: pipes.ms2 (type-3)
...
PolyCurve axis 11 1 30x1 / *
{ axis1 0.33333 axis2 0.66667 axis3 1.0 } ;
PolyCurve seam 13 1 30x1 / *
{ seam1 0.33333 seam2 0.66667 seam3 1.0 } ;
RelCurve guide 14 1 30x1 / * axis r1 r4 * ;
ALoftSurf pipe 9 3 10x2 8x4 0 / * 3 seam axis guide ;
Example 2: arcloft4.ms2 (type-4)
...
CLoftSurf hull 10 8 10x1 20x1 0 / * 3
{ MC1 MC2 MC3 MC4 } ;
YPlane centerplane 14 1 / 0.000 ;
CCurve sheer 11 1 20x1 / * 3
{ P11 P21 P31 P41 } ;

MultiSurf 4.0 Entity Specification Syntax for Model File Text • 5-93
Appendix F: Entity Specification Syntax for Model File Text

RelPoint end 14 1 / P41 0.000 0.000 0.440 ;


BGraph h0 / 3
{ 0.0 1.20000 2.20000 1.0 } ;
RelCurve guide 12 1 20x1 / * sheer P11 end h0 ;
ProjCurve center 15 1 20x1 / * guide centerplane ;
ALoftSurf deck 9 3 10x2 5x2 0 / * 4 center guide sheer ;
BFitSurf name color visibility divisions orientation ... / utype vtype ncu ncv logtolerance
surface ;
Example: bfitsrf1.ms2
...
CLoftSurf hull 10 8 10x1 20x1 0 W:3.700 / * 2
{ MC1 MC2 MC3 } ;
BFitSurf s0 15 3 8x4 8x4 0 / 3 0 3 0 -2.20000 hull ;
BlendCtr name color visibility divisions orientation ... / type point graph1 graph2
{ curve1 curve2 curve3 (curve4) } ;
Example 1: blendc1x.ms2
...
AbsPoint center 15 1 / 5.000 5.000 5.000 ;
Line AB 9 1 10x1 / * A B ;
Line BC 10 1 10x1 / * B C ;
Line CD 12 1 10x1 / * C D ;
Line DA 14 1 10x1 / * D A ;
BlendCtr blend1 11 3 5x5 5x5 0 / 1 center * *
{ AB BC CD DA } ;
Example 2: jib.ms2
...
AbsPoint J5 14 1 / 0.000 0.000 36.000 ;
AbsPoint middle 15 1 / -2.300 3.500 19.500 ;
CCurve luff 9 1 20x1 / * 2
{ J5 J6 J1 } ;
CCurve leech 12 1 20x1 / * 2
{ J5 J4 J3 } ;
CCurve foot 10 1 18x1 / * 2
{ J1 J2 J3 } ;
BlendCtr jib 13 3 10x2 6x3 0 / 1 middle * *
{ luff foot leech J5 } ;
BlendSurf name color visibility divisions orientation ... / graph1 graph2
{ curve1 curve2 curve3 curve4 } ;
Example 1: blend2.ms2
...
BCurve fwd_edge 9 1 5x1 / * 2
{ ct1 ct2 ct3 } ;
BCurve coaming 10 1 15x1 / * 2
{ ct3 ct4 ct5 } ;
BCurve aft_edge 12 1 5x1 / * 2
{ ct7 ct6 ct5 } ;
BCurve centerline 14 1 15x1 / * 2
{ ct1 ct8 ct7 } ;
BlendSurf coachroof 13 3 4x2 5x2 0 / * *
{ fwd_edge coaming aft_edge centerline } ;

5-94 • Entity Specification Syntax for Model File Text December 1998
Appendix F: Entity Specification Syntax for Model File Text

Example 2: blendsf2.ms2
...
Line l1 6 1 1x1 / * p1 p2 ;
Arc c1 11 1 32x1 / * 1 p2 p3 p4 ;
Line l2 6 1 1x1 / * p4 p5 ;
Line l3 6 1 1x1 / * p5 p1 ;
BGraph h1 / 2
{ 0.0 0.0 1.0 } ;
BGraph h2 / 2
{ 0.0 1.0 1.0 } ;
BGraph h3 / 2
{ 0.0 1.0 1.0 1.0 1.0 } ;
BlendSurf s0 15 3 4x6 6x2 0 / * *
{ l1 c1 l2 l3 } ;
BlendSurf s1 11 3 4x6 6x2 0 / h1 *
{ l1 c1 l2 l3 } ;
BlendSurf s2 12 3 4x6 6x2 0 / h2 *
{ l1 c1 l2 l3 } ;
BlendSurf s3 10 3 4x6 6x2 0 / h3 *
{ l1 c1 l2 l3 } ;
BlendSurf2 name color visibility divisions orientation ... / edge tangency bulge graph1 graph2
{ curve1 curve2 curve3 curve4 } ;
Example: tanblendsurf.ms2
...
BlendSurf2 surface1 9 3 8x8 8x8 0 L:1 / 14 0.000 * *
{ edge Bspline apex arc } ;
Blister name color visibility divisions orientation ... / relabel type snake1 snake2 curve;
Example 1: blister0.ms2
...
RevSurf fuselage 2 3 4x3 4x3 0 / * meridian axis
0.000 -180.000 ;
BSnake outline 13 1 20x1 / * 2
{ mag1 mag2 mag4 mag3 } ;
RelMagnet center 12 1 / mag1 0.10000 0.0 ;
RelPoint apex 14 1 / center -0.163 0.000 0.927 ;
Blister canopy 11 3 5x4 4x3 0 / * 3 outline center apex ;
Example 2: bustle0.ms2
...
CLoftSurf hull 2 8 10x1 20x1 0 / * 2
{ MC1 MC2 MC3 } ;
BSnake contact 11 1 16x1 / * 2
{ hm1 hm2 hm3 hm4 } ;
LineSnake ctr_snake 13 1 16x1 / * hm1 hma ;
CCurve bottom 15 1 16x1 / * 3
{ hm1 btm1 btm2 } ;
Blister bustle 10 8 4x3 3x3 0 / * 4
contact ctr_snake bottom ;
BLoftSurf name color visibility divisions orientation ... / relabel type
{ curve1 curve2 .... curveN } ;
Example 1: blft5x4.ms2
...
BCurve MC1 13 1 20x1 / * 2 { P11 P12 P13 P14 } ;
...
BCurve MC5 9 1 20x1 / * 2 { P51 P52 P53 P54 } ;
BLoftSurf hull_b 10 1 10x3 20x1 0 / * 3 { MC1 MC2 MC3 MC4 MC5 } ;

MultiSurf 4.0 Entity Specification Syntax for Model File Text • 5-95
Appendix F: Entity Specification Syntax for Model File Text

Example 2: bloft1.ms2
...
BCurve MC1 12 1 10x1 / * 2
{ P11 P12 P13 P14 } ;
BSnake tangent_line 11 1 10x1 / * 2
{ HM1 HM2 HM3 HM4 } ;
YPlane centerplane 14 1 / 0.000 ;
ProjCurve stem 13 1 10x1 / * MC1 centerplane ;
BLoftSurf bowround 14 1 10x1 10x1 0 / * 2
{ stem MC1 tangent_line } ;
BSurf name color visibility divisions orientation ... / utype vtype ncu
{ point11 point21 point31 point41 ....
point12 ....
point13 .... pointMN } ;
Example: bsurf.ms2
...
AbsPoint P11 14 1 / 0.000 0.000 3.600 ;
AbsPoint P12 14 1 / 1.367 0.000 0.602 ;
AbsPoint P13 14 1 / 2.324 0.000 -0.800 ;
AbsPoint P14 14 1 / 3.000 0.000 -0.900 ;
AbsPoint P21 14 1 / 8.000 3.118 2.953 ;
AbsPoint P22 14 1 / 8.000 3.009 0.419 ;
AbsPoint P23 14 1 / 8.000 1.972 -1.072 ;
...
AbsPoint P54 14 1 / 30.000 0.000 0.120 ;
BSurf hull 10 19 20x1 10x1 0 / 3 2 5
{P11 P21 P31 P41 P51
P12 P22 P32 P42 P52
P13 P23 P33 P43 P53
P14 P24 P34 P44 P54} ;
CLoftSurf name color visibility divisions orientation ... / relabel type
{ curve1 curve2 .... curveN } ;
Example: clft5x4.ms2
...
BCurve MC1 13 1 20x1 / * 2
{ P11 P12 P13 P14 } ;
BCurve MC2 12 1 20x1 / * 2
{ P21 P22 P23 P24 } ;
BCurve MC3 14 1 20x1 / * 2
{ P31 P32 P33 P34 } ;
BCurve MC4 11 1 20x1 / * 2
{ P41 P42 P43 P44 } ;
BCurve MC5 9 1 20x1 / * 2
{ P51 P52 P53 P54 } ;
CLoftSurf hull_c 10 1 10x3 20x1 0 / * 3
{ MC1 MC2 MC3 MC4 MC5 } ;
DevSurf name color visibility divisions orientation ... / curve1 curve2 ;
Example 1: devsurf1.ms2
...
CCurve sheer 12 1 20x1 / * 2 { P11 P31 P41 } ;
CCurve chine 12 1 20x1 / * 2 { P12 P32 P42 } ;
DevSurf panel1 11 1 40x1 1x1 0 / sheer chine ;
CCurve keel 12 1 20x1 / * 2 { P12 P33 P43 } ;
DevSurf panel2 11 1 40x1 1x1 0 / chine keel ;

5-96 • Entity Specification Syntax for Model File Text December 1998
Appendix F: Entity Specification Syntax for Model File Text

Example 2: devsurf2.ms2
...
BCurve sheer 14 1 20x1 / * 2
{ P11 P31 P41 } ;
BCurve chine 14 1 20x1 / * 3
{ P12 P22 P32 P42 P52 } ;
DevSurf panel1 11 1 40x1 1x1 0 / sheer chine ;
Fillet name color visibility divisions orientation ... / relabel type
snake1 snake2 snake3 snake4 ;
Example 1: fillet2.ms2
...
BCurve rim 10 -1 16x1 / * 2
{ p1 p2 origin p4 p5 } ;
RuledSurf top 2 3 4x3 5x1 0 / rim back_corner ;
EdgeSnake top_edge 13 1 16x1 / * 1 top ;
AbsMagnet top_mag 15 1 / top 0.50000 0.30000 ;
UVSnake top_boundary 14 1 16x1 / * 2 top_mag ;
TranSurf front 10 3 4x3 5x1 0 / rim vline ;
EdgeSnake front_edge 12 1 16x1 / * 1 front ;
AbsMagnet front_mag 15 1 / front 0.50000 0.30000 ;
UVSnake front_boundary 11 1 16x1 / * 2 front_mag ;
Fillet roundoff 9 3 12x1 6x2 0 / * 1
front_boundary front_edge top_edge top_boundary ;
Example 2: wingroot.ms2
...
RevSurf body 10 3 4x3 3x3 0 / meridian axis 0.000 90.000 ;
FSnake snake1 11 1 16x1 / * 1
{ te_rm mid_rm le_rm } ;
FSnake root 12 1 16x1 / * 1
{ te_mag mid_mag le_mag } ;
RuledSurf wing 10 1 6x2 4x1 0 / root tip ;
LineSnake snake4 15 1 16x1 / * wm2 wm3 ;
EdgeSnake wing_inb 13 1 16x1 / * 1 wing ;
Fillet fillet 9 3 6x2 4x3 0 / * 1
snake1 root wing_inb snake4 ;
Example 3: wingtip2.ms2
...
FCurve tip_profile 14 -1 16x1 / * 1
{ te_tip mid_tip le_tip } ;
Line tip_chord 6 -1 16x1 / * te_tip le_tip ;
AbsBead tip0 15 1 / tip_chord 0.20000 ;
AbsBead tip1 15 1 / tip_chord 0.80000 ;
Relabel label / 2
{ 0.0 1.0 1.0 } ;
SubCurve tip_line 14 -1 16x1 / label tip0 tip1 ;
RuledSurf tip_surf 10 9 6x2 1x1 0 / * tip_line tip_profile ;
EdgeSnake snake_2 12 1 16x1 / * 3 tip_surf ;
EdgeSnake snake_1 11 1 16x1 / * 1 tip_surf ;
AbsPoint mid_pt 14 -1 / 0.908 2.603 -1.353 ;
AbsPoint te_pt 14 -1 / 9.250 2.075 0.000 ;
AbsPoint le_pt 14 -1 / -3.875 2.856 0.000 ;
FCurve root_profile 12 -1 16x1 / * 1
{ te_pt mid_pt le_pt } ;
RuledSurf wing 2 3 6x2 4x1 0 / * root_profile tip_profile ;
EdgeSnake snake_3 13 1 16x1 / * 3 wing ;
EdgeSnake trailing_edge 9 -1 16x1 / * 4 wing ;
EdgeSnake leading_edge 5 -1 16x1 / * 2 wing ;

MultiSurf 4.0 Entity Specification Syntax for Model File Text • 5-97
Appendix F: Entity Specification Syntax for Model File Text

AbsRing ring1 15 1 / leading_edge 0.75000 ;


AbsRing ring0 15 1 / trailing_edge 0.90000 ;
LineSnake snake_4 15 1 16x1 / * ring0 ring1 ;
Fillet tip_fillet 9 3 6x2 4x2 0 / * 1
snake_1 snake_2 snake_3 snake_4 ;
FLoftSurf name color visibility divisions orientation ... / relabel type
{ curve1 curve2 ... curveN } ;
Example 1: floft1.ms2
...
Line leading_edge 13 1 10x1 / * p31 p32 ;
Line trailing_edge 9 1 10x1 / * p11 p12 ;
Line top 12 1 10x1 / * p21 p22 ;
FLoftSurf keel 10 3 6x2 5x2 0 / * 1
{ trailing_edge top leading_edge } ;
Example 2: floft2.ms2
...
AbsPoint p0 14 1 / 0.000 2.500 0.000 ;
PolarRelPt p1 14 1 / p0 0.000 180.000 5.000 ;
Line l0 6 1 1x1 / * p0 p1 ;
AbsBead e0 10 1 / l0 0.25000 ;
RelPoint p2 14 1 / e0 0.000 12.500 0.000 ;
Conic leading_edge 11 3 8x4 / * 1 e0 p2 p0 0.000 90.000 ;
Conic trailing_edge 11 3 8x4 / * 1 e0 p2 p1 0.000 90.000 ;
RelBead camber 11 1 / e0 0.03000 ;
RelBead thickness 12 1 / camber 0.05000 ;
RelPoint rp0 14 1 / e0 0.000 -1.000 0.000 ;
Line axis 12 1 1x1 / * e0 rp0 ;
MirrPoint p4 14 1 / thickness camber ;
RotatPoint p3 14 1 / thickness axis 90.000 ;
RotatPoint p5 14 1 / p4 axis 90.000 ;
Conic upper 11 3 8x4 / * 1 e0 p2 p3 0.000 90.000 ;
Conic lower 11 3 8x4 / * 1 e0 p2 p5 0.000 90.000 ;
FLoftSurf s0 10 3 8x4 8x4 0 / * 1
{ trailing_edge upper leading_edge lower trailing_edge } ;
MirrSurf name color visibility divisions orientation ... / surface mirror ;
Example: mirrcat.ms2
...
Symmetry: y
CLoftSurf outboard 11 8 5x2 16x2 0 / 2
{ MC1 MC2 MC3 } ;
Plane3 inb_plane 14 1 / p11 p12 p33 ;
MirrSurf inboard 10 3 5x2 16x2 0 / outboard inb_plane ;
NURBSurf name color visibility divisions orientation ... / utype vtype
knotlist1 knotlist2 ncu { point11 wt1 point21 wt2 .... pointMN wtMN } ;
Example: nurbs7a.ms2
...
AbsPoint P11 14 1 / 0.000 0.000 3.000 ;
AbsPoint P21 14 1 / 1.367 0.000 0.502 ;
AbsPoint P31 14 1 / 2.324 0.000 -0.667 ;
AbsPoint P41 14 1 / 3.000 0.000 -0.750 ;
AbsPoint P12 14 1 / 5.000 2.137 2.633 ;
AbsPoint P22 14 1 / 5.000 1.774 0.393 ;
AbsPoint P32 14 1 / 5.000 0.991 -0.795 ;
AbsPoint P42 14 1 / 5.000 0.000 -0.899 ;
AbsPoint P13 14 1 / 10.000 3.649 2.367 ;

5-98 • Entity Specification Syntax for Model File Text December 1998
Appendix F: Entity Specification Syntax for Model File Text

...
AbsPoint P47 14 1 / 30.500 0.000 0.100 ;
NURBSurf hull 10 3 10x1 20x1 0 / 2 3 * * 4
{ P11 1.0 P21 1.0 P31 1.0 P41 1.0
P12 1.0 P22 1.0 P32 1.0 P42 1.0
P13 1.0 P23 1.0 P33 1.0 P43 1.0
P14 1.0 P24 1.0 P34 1.0 P44 1.0
P15 1.0 P25 1.0 P35 1.0 P45 1.0
P16 1.0 P26 1.0 P36 1.0 P46 1.0
P17 1.0 P27 1.0 P37 1.0 P47 1.0 } ;
OffsetSurf name color visibility divisions orientation ... / surface
{ offset1 offset2 offset3 (offset4) } ;
Example: offset1.ms2
...
TranSurf patch 9 3 6x3 5x2 0 / long_edge short_edge ;
OffsetSurf offset 13 3 5x3 4x2 0 / patch
{ 2.000 0.500 1.000 1.000 } ;
PolySurf name color visibility divisions orientation ... /
{ surface1 t1 surface2 t2 ... surfaceN 1 } ;
Example: wingpoly.ms2
...
Fillet thetip 9 3 6x2 4x3 0 / * 1 transnak
tip_edge tip_edge1 tipsnk ;
SubSurf wing_sub 13 3 4x3 6x2 0 /
{ snake4 l_e_snake transnak t_e_snake } ;
Fillet wingroot 14 3 6x2 4x3 0 / * 1
snake1 root wing_inb snake4 ;
PolySurf polysurf 10 3 4x3 6x2 0 /
{ wingroot 0.33333 wing_sub 0.66667 thetip 1.0 } ;
ProcCvSurf name color visibility divisons orientation ... / curve
{ bead/ring/graph1 bead/ring/graph2 .... bead/ring/graphN } ;
Example: proccsf2.ms2
...
CCurve chine 11 1 8x4 / * 3
{ ch0 ch1 ch2 ch3 } ;
BCurve profile 11 1 8x4 / * 2
{ ch0 pr1 pr2 pr3 pr4 pr5 pr6 } ;
AbsBead e0 10 1 / chine 0.50000 ;
XPlane a0 14 1 / 0.000 ;
AbsBead e1 10 1 / profile 0.50000 ;
IntBead e2 9 1 / e1 a0 e0 ;
Line moving_curve0 15 1 1x1 / * e0 e2 ;
ProcCvSurf bottom 2 3 8x4 4x2 0 / moving_curve0
{ e0 e1 } ;
ProcPtSurf name color visibility divisions orientation ... / point
{ magnet1 magnet2 .... magnetN } ;
Example: procpsrf1.ms2
...
CLoftSurf hull1 10 1 10x1 20x1 0 L:1 / * 2 { MC1 MC2 MC3 } ;
PolySurf hull2 10 3 10x4 10x4 0 L:2 /
{ topside 0.40000 flat 0.50000 bottom 1.0 } ;
AbsMagnet mag1 12 1 L:1 / hull1 0.25000 0.25000 ;
AbsMagnet mag2 12 1 L:2 / hull2 0.25000 0.25000 ;
BlendPoint moving_point 11 1 / 1

MultiSurf 4.0 Entity Specification Syntax for Model File Text • 5-99
Appendix F: Entity Specification Syntax for Model File Text

{ mag1 0.50000 mag2 0.50000 } ;


ProcPtSurf hull 15 9 10x4 10x4 0 / moving_point
{ mag1 mag2 } ;
ProjSurf name color visibility divisions orientation ... / surface mirror ;
Example: projsurf.ms2
...
CLoftSurf outboard 11 1 2x1 16x2 0 / 3 { MC1 MC2 MC3 } ;
Plane3 inb_plane 14 1 / p11 p13 p33 ;
ProjSurf inboard 10 3 4x1 16x2 0 / outboard inb_plane ;
RelSurf name color visibility divisions orientation ... / surface
{ point1 point2 point3 (point4) } ;
Example: relsurf2.ms2
...
TranSurf patch 9 3 6x3 5x2 0 / long_edge short_edge ;
RelPoint Q1 10 1 / P11 0.000 0.000 3.000 ;
RelPoint Q2 14 1 / P13 0.000 0.000 2.000 ;
AbsMagnet r11 7 1 / patch 1.0 1.0 ;
RelPoint Q3 12 1 / r11 0.000 0.000 0.750 ;
RelPoint Q4 13 1 / P23 0.000 0.000 2.000 ;
RelSurf relsurf 11 3 5x3 4x2 0 / patch
{ Q1 Q2 Q3 Q4 } ;
RevSurf name color visibility divisions orientation ... / relabel curve line angle1 angle2;
Example: revsurf2.ms2
...
BCurve meridian 14 1 32x1 / * 3
{ p1 p2 p3 p4 } ;
Line axis 13 1 1x1 / * P Q ;
RevSurf shell 10 3 20x1 10x1 0 / * meridian axis
0.000 135.000 ;
RotatSurf name color visibility divisions orientation ... / surface line angle ;
Example: rotatsrf.ms2
...
Line axis 12 1 1x1 / * P11 P23 ;
TranSurf patch 11 3 10x2 5x2 0 / long_edge short_edge ;
RotatSurf rotated_surf 10 3 5x4 5x2 0 / patch axis 30.000;
RuledSurf name color visibility divisions orientation ... / relabel curve1 curve2 ;
Example: ruled1.ms2
...
CCurve sheer 13 1 40x1 / * 2
{ sh1 sh2 sh3 } ;
CCurve chine 13 1 40x1 / * 2
{ ch1 ch2 ch3 } ;
RuledSurf panel1 10 1 20x2 1x1 0 / * sheer chine ;
SubSurf name color visibility divisions orientation ... /
{ snake1 snake2 snake3 (snake4) } ;
Example: subsurf1.ms2
...
TranSurf patch 2 3 6x3 5x2 0 / long_edge short_edge ;
LineSnake edge1 9 1 5x1 / * M1 M2 ;
LineSnake edge2 10 1 5x1 / * M2 M3 ;
LineSnake edge3 12 1 5x1 / * M3 M4 ;
CSnake edge4 14 1 5x1 / * 2
{ M4 M5 M1 } ;

5-100 • Entity Specification Syntax for Model File Text December 1998
Appendix F: Entity Specification Syntax for Model File Text

SubSurf subsurf 11 3 5x2 4x2 0 /


{ edge1 edge2 edge3 edge4 } ;

MultiSurf 4.0 Entity Specification Syntax for Model File Text • 5-101
Appendix F: Entity Specification Syntax for Model File Text

SweepSurf name color visibility divisions orientation ... / bead curve1 curve2
graph1 graph2 graph3 ;
Example 1: sweep1.ms2
...
ZPlane z=0 3 1 / 0.000 ;
YPlane y=0 2 1 / 0.000 ;
AbsPoint p1 14 1 / 5.000 4.000 0.000 ;
MirrPoint p6 14 1 / p1 y=0 ;
AbsPoint p2 14 1 / 2.000 4.000 0.000 ;
MirrPoint p5 14 1 / p2 y=0 ;
AbsPoint p3 14 1 / -4.000 4.000 0.000 ;
MirrPoint p4 14 1 / p3 y=0 ;
BCurve path 11 1 64x1 / * 2
{ p1 p2 p3 p4 p5 p6 } ;
RelPoint q1 14 1 / p1 0.000 0.000 1.000 ;
MirrPoint q6 14 1 / q1 y=0 ;
RelCurve guide 4 1 64x1 / * path q1 q6 * ;
AbsBead e1 10 1 / path 0.50000 ;
RelPoint rp2 14 1 / e1 -0.200 0.000 0.400 ;
MirrPoint rp3 14 1 / rp2 z=0 ;
RelPoint rp1 14 1 / e1 0.200 0.000 0.400 ;
MirrPoint rp4 14 1 / rp1 z=0 ;
BCurve shape 14 1 4x1 / * 1
{ rp1 rp2 rp3 rp4 rp1 } ;
SweepSurf sweep 10 3 32x2 4x1 0 / e1 shape guide * * * ;
Example 2: sweep3.ms2
...
BCurve path 11 1 32x1 / * 3
{ p1 p2 p3 p4 p5 p6 } ;
AbsBead path_bead 11 1 / path 0.0 ;
BCurve guide 12 1 32x1 / * 3
{ q1 q2 q3 q4 q5 q6 } ;
RelPoint p7 14 1 / p1 0.000 -1.500 0.000 ;
MirrPoint p8 14 1 / p7 p1 ;
Arc shape 13 1 32x1 / * 1 p7 q1 p8 ;
SweepSurf slide 10 3 32x1 6x2 0 /
path_bead shape guide * * * ;
Example 3: guard.ms2
...
CLoftSurf hull 10 1 10x1 20x1 0 / 2
{ MC1 MC2 MC3 } ;
AbsMagnet m2 12 1 / hull 0.10000 0.90000 ;
AbsMagnet m1 12 1 / hull 0.10000 0.10000 ;
OffsetPt p2 14 1 / m1 -0.400 ;
LineSnake cove 13 1 32x1 / * m1 m2 ;
AbsBead cove_bead 15 1 / cove 0.0 ;
OffsetCurv guide 9 1 32x1 / * cove 0.500 0.500 * ;
RelMagnet m3 12 1 / m1 -0.04000 0.00600 ;
MirrPoint p1 14 1 / m3 m1 ;
Arc shape 11 1 16x1 / * 1 m3 p2 p1 ;
SweepSurf guard 10 3 32x1 4x2 0 /
cove_bead shape guide * * * ;

5-102 • Entity Specification Syntax for Model File Text December 1998
Appendix F: Entity Specification Syntax for Model File Text

Example 4: guard1.ms2 (using graphs)


...
BGraph h3 / 2
{ 0.50000 1.0 1.0 1.0 1.0 0.50000 } ;
BGraph h2 / 2
{ 0.0 1.0 1.0 1.0 1.0 0.0 } ;
CLoftSurf hull 10 1 10x1 20x1 1 / 2 { MC1 MC2 MC3 } ;
AbsMagnet m2 12 1 / hull 0.10000 0.90000 ;
AbsMagnet m1 12 1 / hull 0.10000 0.10000 ;
OffsetPt p2 14 1 / m1 0.400 ;
RelMagnet m3 12 1 / m1 -0.04000 0.00600 ;
MirrPoint p1 14 1 / m3 m1 ;
Arc shape 11 1 16x1 / * 1 m3 p2 p1 ;
LineSnake cove 13 1 32x1 / * m1 m2 ;
OffsetCurv guide 9 1 32x1 / * cove 0.500 0.500 * ;
AbsRing ring 15 1 / cove 0.0 ;
SweepSurf guard 10 3 32x1 4x2 0 /
ring shape guide * h2 h3 ;
TabSurf name color visibility divisions orientation ... / filename patch no. frame/point ;
Example: tabsurf.ms2
...
AbsPoint p1 14 1 / 0.000 0.000 1.000 ;
TabSurf s1 5 3 5x1 5x1 0 / fillet 1 p1 ;
TabSurf s2 3 3 12x1 1x1 0 / fillet 2 p1 ;
TabSurf s3 10 3 6x1 6x1 0 / fillet 3 p1 ;
AbsMagnet m1 12 1 / s3 0.66670 0.33330 ;
TranSurf name color visibility divisions orientation ... / curve1 curve2 ;
Example: transurf.ms2
...
CCurve long_edge 13 1 16x1 / * 2
{ P11 P12 P13 } ;
CCurve short_edge 10 1 8x1 / * 2
{ P11 P22 P23 } ;
TranSurf patch 11 3 16x1 8x1 0 / long_edge short_edge ;
TrimSurf name color visibility divisons orientation ... / type no. triangles magnet
{ snake1 sanke2 ... snakeN } ;
Example 1: trimsrf1.ms2
...
BSurf s0 15 3 5x8 5x8 0 / 2 2 3
{ P00 P10 P20
P01 P11 P21
P02 P12 P22 } ;
BSnake n1 13 1 8x4 / * 3
{ m3 m2 m1 m0 } ;
LineSnake n2 14 1 8x4 / * m0 m3 ;
TrimSurf ts1 10 11 5x4 5x4 0 / 100 s0
{ n1 n2 } ;
Example 2: trimsrf3.ms2
...
BSurf s0 2 3 5x8 5x8 0 / 2 2 3
{ P00 P10 P20
P01 P11 P21
P02 P12 P22 } ;
AbsMagnet m1 12 1 / s0 0.12500 0.40000 ;
BSnake n0 9 1 8x4 / * 2

MultiSurf 4.0 Entity Specification Syntax for Model File Text • 5-103
Appendix F: Entity Specification Syntax for Model File Text

{ m4 m0 m1 m2 m3 m4 } ;
CopySnake n1 15 1 8x4 / * n0 s0 1.0 180.000 ;
TrimSurf ts1 10 3 4x5 4x5 0 / 200 m1
{ n0 n1 n4 n5 n2 n3 } ;
EdgeSnake n2 13 1 8x4 / * 1 s0 ;
EdgeSnake n3 13 1 8x4 / * 2 s0 ;
EdgeSnake n4 13 1 8x4 / * -3 s0 ;
EdgeSnake n5 13 1 8x4 / * -4 s0 ;
XLoftSurf name color visibility divisions orientation ... / relabel type ecc
graph1 graph2 graph3 graph4 { curve1 curve2 .... curveN } ;
Example: defaultx.ms2
...
// Converted by FL2MSF 10-04-1993 13:29:06 XLoftSurf with B-spline
MCs
AbsPoint xA1 14 1 / 0.000 0.000 3.600 ;
AbsPoint xA2 14 1 / 2.000 0.000 -0.780 ;
AbsPoint xA3 14 1 / 3.000 0.000 -0.900 ;
BCurve xMCA 11 1 16x1 / * 2
{ xA1 xA2 xA3 } ;
AbsPoint xB1 14 1 / 15.000 4.540 2.640 ;
AbsPoint xB2 14 1 / 15.000 5.000 -0.960 ;
AbsPoint xB3 14 1 / 15.000 0.000 -1.440 ;
BCurve xMCB 11 1 16x1 / * 2
{ xB1 xB2 xB3 } ;
AbsPoint xC1 14 1 / 30.000 3.500 2.760 ;
AbsPoint xC2 14 1 / 30.000 3.500 1.320 ;
AbsPoint xC3 14 1 / 30.000 2.500 0.120 ;
AbsPoint xC4 14 1 / 30.000 0.000 0.120 ;
BCurve xMCC 11 1 16x1 / * 2
{ xC1 xC2 xC3 xC4 } ;
BGraph xY0 / 2
{ -0.02500 -0.01000 0.0 } ;
BGraph xZ0 / 2
{ 0.00600 0.00600 0.00600 } ;
BGraph xY1 / 2
{ -0.02500 -0.01000 0.0 0.0 } ;
BGraph xZ1 / 2
{ 0.00600 0.00600 0.00600 0.00600 } ;
XLoftSurf xsurf 10 1 8x2 10x4 0 / * 1 0 xY0 xZ0 xY1 xZ1
{ xMCA xMCB xMCC } ;

Solids
BLoftSolid name color visibility divisions ... / relabel type { surface1 surface2 .... surfaceN } ;
Example: bloftsolid1.ms2
...
BLoftSolid bloftsolid 12 7 4x4 4x4 2x4 0 / * 2
{ bsurfbottom bsurfmiddle blendctrsurf } ;
RuledSolid name color visibility divisions ... / relabel surface1 surface2 ;
Example 1: ruledsolidballast1.ms2
...
RuledSolid ballast 12 7 4x8 4x8 1x2 0 W: 695.000 / *
ballast_outer ballast_center ;

5-104 • Entity Specification Syntax for Model File Text December 1998
Appendix F: Entity Specification Syntax for Model File Text

Example 2: ruledsolidballast2.ms2
...
RuledSolid bulb_solid 14 7 4x8 4x6 1x2 1 W: 695.000
A:__Nick("bulb_solid") / * bulb bulb_ctr ;
RuledSolid subtr_solid 9 1 4x4 4x4 1x2 0 W: -695.000
A:__Nick("subtr_solid") / * subtract subtr_ctr ;
RuledSolid keel_solid 13 1 16x2 3x1 1x2 0 W: 485.000
A:__Nick("keel_solid") / * keel keel_ctr ;

Miscellaneous
BGraph name ... / type { value1 value2 .... valueN } ;
Example 1: blendsf2.ms2
...
BGraph h1 / 2
{ 0.0 0.0 1.0 } ;
BGraph h2 / 2
{ 0.0 1.0 1.0 } ;
BGraph h3 / 2
{ 0.0 1.0 1.0 1.0 1.0 } ;
BlendSurf s0 15 3 4x6 6x2 0 / * *
{ l1 c1 l2 l3 } ;
BlendSurf s1 11 3 4x6 6x2 0 / h1 *
{ l1 c1 l2 l3 } ;
BlendSurf s2 12 3 4x6 6x2 0 / h2 *
{ l1 c1 l2 l3 } ;
BlendSurf s3 10 3 4x6 6x2 0 / h3 *
{ l1 c1 l2 l3 } ;
Example 2: defaultx.ms2
...
BCurve xMCA 11 1 16x1 / * 2
{ xA1 xA2 xA3 } ;
BCurve xMCB 11 1 16x1 / * 2
{ xB1 xB2 xB3 } ;
BCurve xMCC 11 1 16x1 / * 2
{ xC1 xC2 xC3 xC4 } ;
BGraph xY0 / 2
{ -0.02500 -0.01000 0.0 } ;
BGraph xZ0 / 2
{ 0.00600 0.00600 0.00600 } ;
BGraph xY1 / 2
{ -0.02500 -0.01000 0.0 0.0 } ;
BGraph xZ1 / 2
{ 0.00600 0.00600 0.00600 0.00600 } ;
XLoftSurf xsurf 10 1 8x2 10x4 0 / * 1 0 xY0 xZ0 xY1 xZ1
{ xMCA xMCB xMCC } ;
Contours name color visibility ... / mirror first index last index q0 qint { surfaces } ;
Example 1: contour1.ms2
...
CLoftSurf hull 10 8 20x1 20x1 0 / 2
{ MC1 MC2 MC3 } ;
AbsPoint origin 15 1 / 0.000 0.000 0.000 ;
AbsPoint normal 15 1 / 0.000 0.250 5.000 ;
Plane2 cutplane 15 1 / origin normal ;
Contours boottop 15 1 / cutplane 0 0 0.400 0.000
{ hull } ;

MultiSurf 4.0 Entity Specification Syntax for Model File Text • 5-105
Appendix F: Entity Specification Syntax for Model File Text

Example 2: contourg.ms2
...
CLoftSurf starboard_side 10 8 10x1 20x1 0 / 2
{ MC1 MC2 MC3 } ;
YPlane centerplane 3 1 / 0.000 ;
MirrSurf port_side 10 8 10x1 20x1 0 /
starboard_side centerplane ;
AbsPoint origin 15 1 / 0.000 0.000 0.000 ;
RelPoint normal 15 1 / origin 0.000 0.268 1.000 ;
Plane2 plane_15 14 1 / origin normal ;
Contours waterplanes_15 15 1 / plane_15 0 -5 0.000 0.250
{ starboard_side port_side } ;
Example 3: contourc.ms2
...
CLoftSurf hull 10 1 10x1 20x1 0 / 2
{ MC1 MC2 MC3 } ;
AbsPoint px 14 1 / 22.000 0.000 0.000 ;
RelPoint py 14 1 / px 1.000 0.000 3.000 ;
Line axis 14 1 1x1 / * px py ;
Contours transom 15 1 / axis 0 0 7.500 1.000
{ hull } ;
CvContours name color visibility ... / curve first index last index t0 tint { surfaces } ;
Example: cv-cont1.ms2
...
CLoftSurf hull 10 1 10x1 20x1 0 / * 2
{ MC1 MC2 MC3 } ;
AbsMagnet m0 12 1 / hull 0.49720 0.02080 ;
ZPlane z=0 3 1 / 0.000 ;
IntSnake n0 13 1 8x4 / * m0 z=0 * ;
AbsRing r0 9 1 / n0 0.0 ;
AbsRing r1 9 1 / n0 1.0 ;
YPlane y=0 14 1 / 0.000 ;
ProjPoint r1p 11 1 / r1 y=0 ;
ProjPoint r0p 11 1 / r0 y=0 ;
Line l0 15 1 1x1 / * r0p r1p ;
CvContours stas 12 1 / l0 -1 11 0.000 0.100
{ hull } ;
EulerFrame name color visibility ... / point frame angle1 angle2 angle3 ;
Example: frame2.ms2
...
EulerFrame F0 15 1 / * * 0.000 0.000 0.000 ;
AbsPoint p1 14 1 / 1.000 0.000 0.000 ;
EulerFrame F1 10 1 / p1 F0 15.000 0.000 0.000 ;
AbsPoint p2 14 1 / 2.000 0.000 0.000 ;
EulerFrame F2 11 1 / p2 F1 0.000 30.000 0.000 ;
AbsPoint p3 14 1 / 3.000 0.000 0.000 ;
EulerFrame F3 12 1 / p3 F2 0.000 0.000 45.000 ;
AbsPoint p4 14 1 / 4.000 0.000 0.000 ;
EulerFrame F4 13 1 / p4 * 15.000 30.000 45.000 ;

5-106 • Entity Specification Syntax for Model File Text December 1998
Appendix F: Entity Specification Syntax for Model File Text

Frame3 name color visibility ... / point1 point2 point3 ;


Example: frame1.ms2
...
Arc c1 11 1 32x1 / * 1 * p2 p3 ;
AbsBead e1 9 1 / c1 0.45990 ;
RelPoint f3 14 1 / e1 0.000 0.000 2.000 ;
TanPoint f2 14 1 / e1 2.000 ;
Line axis 6 1 1x1 / * e1 f2 ;
Frame3 F1 13 1 / e1 f2 f3 ;
FrameAbsPt fap 14 1 / F1 1.500 0.600 0.000 ;
FrameRelPt frp 14 1 / F1 fap -3.000 0.000 0.000 ;
Line l2 6 1 1x1 / * fap frp ;
RevSurf cyl 10 3 4x3 12x2 0 / l2 axis 0.000 360.000 ;
KnotList name ... / { 0. knot2 knot3 .... 1. } ;
Example 1: knotlst0.ms2
...
NURBCurve curve 10 1 20x1 / * 3 *
{ P11 1.0 P21 1.0 P31 1.0 P41 1.0 P51 1.0 P61 1.0 P71 1.0 } ;
Example 2: knotlst1.ms2
...
KnotList knots1 /
{ 0.0 0.50000 0.50000 0.50000 1.0 } ;
NURBCurve curve 13 1 20x1 / * 3 knots1
{ P11 1.0 P21 1.0 P31 1.0 P41 1.0 P51 1.0 P61 1.0 P71 1.0 } ;
KnotList2 name / { value1 value2 ... valueN } ;
Example: knotlst2.ms2
...
BCurve bspline 10 -1 16x1 / * 3 { P1 P2 P3 P4 P5 } ;
NURBCurve spline 13 5 64x1 / * 2 *
{ P1 1.0 P2 1.0 P3 3.0 P4 1.0 P5 1.0 P6 1.0 } ;
KnotList k0 /
{ 0.0 0.25000 0.50000 0.75000 1.0 } ;
NURBCurve spline0 11 5 64x1 / * 2 k0
{ P1 1.0 P2 1.0 P3 3.0 P4 1.0 P5 1.0 P6 1.0 } ;
KnotList2 k1 /
{ 0.0 0.0 0.0 0.25000 0.50000 0.75000 1.0 1.0 1.0 } ;
NURBCurve spline1 14 5 64x1 / * 2 k1
{ P1 1.0 P2 1.0 P3 3.0 P4 1.0 P5 1.0 P6 1.0 } ;
KnotList2 k2 /
{-0.50000 -0.25000 0.0 0.25000 0.50000 0.75000 1.0 1.25000 1.50000};
NURBCurve spline2 12 5 64x1 / * 2 k2
{ P1 1.0 P2 1.0 P3 3.0 P4 1.0 P5 1.0 P6 1.0 } ;
ObjectList name ... / { objects } ;
Example: objlist.ms2
...
ObjectList HullDeckTransom /
{ deck hull MCAV1 deck_beam transom_top MCA MCC MCE MCCV1 deck_mid
deck_ctr MCEV1 transom1 transom0 MCAV2 MCAV3 MCAV4 MCCV2 MCCV3
MCCV4 MCEV2 MCEV3 MCEV4 transom ctr } ;
ObjectList Keel /
{ keel k_bottom keel_root ktip p_ktip hm1 hm2 hm3 hm4 ktip1 ktip2
ktip3 ktip4 ctr } ;
ObjectList BowMC /
{ MCA MCAV1 MCAV2 MCAV3 MCAV4 } ;

MultiSurf 4.0 Entity Specification Syntax for Model File Text • 5-107
Appendix F: Entity Specification Syntax for Model File Text

Plane2 name color visibility ... / point1 point2 ;


Example: 2plane1.ms2
...
CLoftSurf hull 10 8 20x1 20x1 0 / 2
{ MC1 MC2 MC3 } ;
AbsPoint origin 15 1 / 0.000 0.000 0.000 ;
AbsPoint normal 15 1 / 0.000 0.250 5.000 ;
Plane2 plane 15 1 / origin normal ;
Contours boottop 15 1 / plane 0 0 0.400 0.500
{ hull } ;
Plane3 name color visibility ... / point1 point2 point3 ;
Example: 3plane1.ms2
...
AbsPoint p11 15 1 / 0.000 10.000 3.000 ;
AbsPoint p12 15 1 / 1.000 10.310 -0.100 ;
AbsPoint p33 15 1 / 30.000 10.350 -0.500 ;
CLoftSurf outboard 11 8 5x2 16x2 0 / 2
{ MC1 MC2 MC3 } ;
Plane3 inb_plane 15 1 / p11 p12 p33 ;
MirrSurf inboard 10 8 5x2 16x2 0 / outboard inb_plane ;
Relabel name ... / type { 0. value2 value3 .... 1. } ;
Example 1: relabel0.ms2
...
BCurve curve 10 3 20x1 / * 3
{ p1 p2 p3 p4 p5 } ;
Example 2: relabel3.ms2
...
Relabel relabel3 / 2
{ 0.0 0.45000 0.55000 1.0 } ;
BCurve curve 13 3 20x1 / relabel3 3
{ p1 p2 p3 p4 p5 } ;
WireFrame name color visibility ... / filename frame ;
Example 1: wirefrm1.ms2 (uses cube1.3da)
...
AbsPoint origin 14 1 / 0.000 0.000 0.000 ;
AbsPoint insert 13 1 / 2.000 3.000 0.000 ;
WireFrame cube 11 1 / cube1 insert ;
Example 2: wirefrm2.ms2 (uses cube1.3da)
...
AbsPoint f0_origin 15 1 / 3.000 2.000 2.000 ;
RelPoint f_p3 15 1 / f0_origin 5.000 -1.000 -1.000 ;
RelPoint f_p2 15 1 / f0_origin 1.000 1.000 1.000 ;
Frame3 f0 15 1 / f0_origin f_p2 f_p3 ;
AbsPoint origin 14 1 / 0.000 0.000 0.000 ;
AbsPoint insert 13 1 / 2.000 3.000 0.000 ;
WireFrame cube 11 1 / cube1 f0 ;
XContours name color visibility ... / first index last index X0 Xint { surfaces } ;
Example: contour1.ms2
...
CLoftSurf hull 10 8 20x1 20x1 0 / 2
{ MC1 MC2 MC3 } ;
XContours stations 11 1 / 0 10 1.950 2.730
{ hull } ;

5-108 • Entity Specification Syntax for Model File Text December 1998
Appendix F: Entity Specification Syntax for Model File Text

XPlane name color visibility ... / X-coordinate ;


Example: xplane.ms2
...
XPlane bulkhead2 13 1 / 16.071 ;
XPlane bulkhead3 14 1 / 24.000 ;
AbsPoint top_corner 14 1 / 24.000 1.250 5.000 ;
AbsPoint bottom_corner 14 1 / 24.000 1.250 -1.000 ;
ProjPoint top2 13 1 / top_corner bulkhead2 ;
ProjPoint bottom2 13 1 / bottom_corner bulkhead2 ;
YContours name color visibility ... / first index last index Y0 Yint { surfaces } ;
Example: contour2.ms2
...
CLoftSurf hull 10 8 10x1 20x1 0 / 2
{ MC1 MC2 MC3 } ;
YContours buttocks 13 1 / 1 4 0.000 1.000
{ hull } ;
YPlane name color visibility ... / Y-coordinate ;
Example: yplane.ms2
...
CLoftSurf starboard_side 10 9 10x1 20x1 0 / 2
{ MC1 MC2 MC3 } ;
YPlane centerplane 13 1 / 0.000 ;
MirrCurve mMC2 3 1 10x1 / * MC2 centerplane ;
MirrCurve mMC3 3 1 10x1 / * MC3 centerplane ;
MirrSurf port_side 12 1 10x1 20x1 0 /
starboard_side centerplane ;
ZContours name color visibility ... / first index last index Z0 Zint { surfaces } ;
Example: contour2.ms2
...
CLoftSurf hull 10 8 10x1 20x1 0 / 2
{ MC1 MC2 MC3 } ;
ZContours waterlines 14 1 / -1 1 0.000 1.000
{ hull } ;
ZPlane name color visibility ... / Z-coordinate ;
Example: zplane.ms2
...
FCurve foil_top 11 1 16x1 / * 1
{ p1 p2 p3 } ;
ZPlane mirror 13 1 / 2.000 ;
MirrCurve foil_bottom 3 1 16x1 / * foil_top mirror ;

MultiSurf 4.0 Entity Specification Syntax for Model File Text • 5-109

You might also like