AeroHydro, Inc.

The most advanced 3D surface modeling available...  

 

 




Representing weights

You can represent weights of as-yet-undetailed items in Tools/Weight Schedule. Create points with weight attributes to stand in for the missing items; for example, a point named 'ballast' with a unit weight of 2400 kg to represent a 4800-kg ballast casting. Place it where you expect the center of gravity of the ballast to be. It will be included in the weight schedule and combined with other weights. Later, when you've created geometry for the ballast and assigned it unit weights, you can delete the point, or change its unit weight to 0.
(Why 2400 kg instead of 4800? We're assuming the model has Y symmetry as most boat models do. In that case, every point has a mirror image with the same weight, even a point located on centerplane. If the model has no symmetry, then use the whole estimated weight of the item.)

Relational solids

MultiSurf and SurfaceWorks has a capability to represent relational solids, including wireframe and rendered views, mass properties, weight schedule, and export of 3D meshes. Applications for this include sailboat ballast, other castings, tank volumes and centroids, and 3D volume meshes for computational fluid dynamics and finite element grids.

You can download a self-extracting zip file containing a description of the solids functionality and two sample files from this website.

RuledSolid and BLoftSolid are on the menu (Create/Solid...) in MultiSurf 4.0 and SurfaceWorks, Advanced Modeling, and fully integrated into Mass Properties, Weight Schedule, viewing and rendering, etc.

Making a copy of a curve in a different location

If the copy is a mirror image of the original, use a MirrCurve.
If the copy results from rotating the original about an axis, use a RotatCurve.
If the copy is displaced parallel to the original, use a RelCurve with these point supports:
point1 -- a point at the new location of the t=0 end.
point2 -- can be anywhere, actually (we usually take the t=1 end of the basis curve) and a graph (this is important!) having only one value, namely 0.

See Sample file Relcurv2.ms2 for an example of this.

See also tip on CopyCurve)

MultiSurf and SurfaceWorks: CopyCurve is on the menu now. This is much more versatile – the copy can have any position and location relative to the original, and can be nonuniformly scaled in the process.

Tangent and normal planes

To make a plane normal to a curve at a particular location:
1. Position a bead at the desired location along the curve.
2. Make a TanPoint from the bead, with any nonzero offset.
3. Make a Plane2 from the bead and the TanPoint.

To make a plane tangent to a surface at a particular location:
1. Position a magnet at the desired location on the surface.
2. Make an OffsetPt from the magnet, with any nonzero offset.
3. Make a Plane2 from the magnet and the OffsetPt.

Intersections cut with planes, cylinders or spheres

Dr. John's First Rule of Intersections is "avoid them when possible". MultiSurf provides many ways to create neat, accurate joins between surfaces without performing intersections; this is usually simpler, more accurate, more efficient and more reliable than constructing surfaces that are oversize, then intersecting them and trimming off the excess.
CYLTRAN.MS2 and HULLDECK.MS2 are sample files that illustrate this.

The Second Rule of Intersections is "cut with a plane, line, or point mirror whenever you can, rather than a surface". These IntSnake constructions are more efficient and reliable than cutting with surfaces. A plane mirror makes a plane cut (BOOTTOP.MS2 is a sample of this), a line mirror makes a cylindrical cut, and a point mirror makes a spherical cut.

Sometimes a projection can substitute for an intersection. When the surface you are cutting with is a general cylinder or cone, you can usually make a ProjSnake with a plane or point mirror, then use the ProjSnake for one edge of the (automatically trimmed) surface.
(THRUSTER.MS2 is an example of this.)

Using a BLoftSurf for a fillet

A Fillet Surface is a handy way to make a fillet, or a smooth transition between two surfaces (see sample file WINGROOT.MS2). However, the Fillet Surface provides limited control over the shape of the transition surface. MultiSurf's unique B-lofted Surface provides another alternative. Make a BLoftSurf with five or more master curves, including:

two closely spaced snakes on surface 1
one or more intermediate master curves to shape the transition
two closely spaced snakes on surface 2.

Two snakes at a surface-surface intersection

In MultiSurf, you develop the intersection of two surfaces as an IntSnake. Although the resulting snake actually lies in both surfaces, it only resides in the first surface -- the one identified by the "magnet/surface" support. If you need the intersection as a snake in the second surface as well, you could make a second IntSnake. But there is a much more efficient solution: use a ProjSnake instead.

For example, suppose you are working with a hull that extends on to a station beyond the transom, and you have created a curved base surface for the transom; now you need to trim both the transom and the hull. First, make an IntSnake 'n0' on the hull, cut by the transom. Then, make a ProjSnake on the transom, by projecting 'n0' longitudinally -- use *X=0 for the mirror. This ProjSnake will evaluate about 100 times faster than a second IntSnake. The ProjSnake also has the advantage of being exactly the same 3D curve as the IntSnake, whereas a second IntSnake would usually be longer (would extend to the upper edge of the transom base surface) and therefore would need additional trimming.

(The projection distance is actually zero; that's why most people don't think of a ProjSnake in this situation.)

Inserting a Master Curve into a Lofted Surface

When you have designed a C-Lofted or X-Lofted surface that has approximately the shape you want, but you can't seem to get it exactly right, inserting another master curve is usually the answer. If all your master curves are BCurves of the same type, and the same number of control points, then we supply a nifty macro that streamlines the process. Just create a plane that cuts through the surface where you want the new curve to be, invoke the InsertMC macro, and in a few seconds it creates the necessary control points and curve, and inserts it into the surface for you.

In case your surface doesn't conform to these rather narrow conditions, MultiSurf 4.0 provides something much more general, and nearly as convenient:
(1) Make a snake (any kind that serves) on the surface where you want the master curve to be. For example, an IntSnake cut by a transverse plane is a common choice.
(2) With the snake selected, pick Tools/ Special/ BCurve Fit. Choose an appropriate B-spline type and number of control points (usually guided by the nearby master curves).
(3) Select the surface, Edit/ Attributes, double click Master Curves, and Ctrl+select the new BCurve.
(4) In Selection Set view (<F6>), move the new BCurve up to the right place in the sequence of master curves, and Accept Supports.

FRAMES.MS2: Using components for internal structure

This model was made by John Letcher to demonstrate the capability of MultiSurf to model complex internal framing members for a metal hull. You can see a picture in AeroHydro Gallery,  and download here a zip file containing the model and its 3 component files, and a write-up that explains how it works.

Basically, Dr. John started with an empty CLofted hull, created one typical midships frame related to the hull and deck in such a way that it could be dragged fore and aft and it would update its shape to adapt to the hull and deck contours at each location. This frame consists of about 50 objects, ending with a TrimSurf for the web and a TranSurf for the flange. All of these objects were saved as a Relational Component, FRAME1.MC2. This component was then inserted into the empty hull 7 times. Then John developed a different generic frame for the ends, saved it as FRAME2.MC2, and inserted it 9 times into the model. The longitudinal stringers were also made by inserting the component STIFF1.MC2 8 times.

The model still has lots of parametric variability. Any of the frames can be dragged fore and aft and will continuously adjust its shape to the hull and deck in its new position. Each stringer can be repositioned by dragging one magnet. The depth of all floors can be changed by moving one point.

"Freezing" a curve as a CCurve

There are times when we wish to detach a curve from its supports and let it stand on its own. In analogy to spreadsheet terminology, we call this "freezing" the curve. For example, a curve that results from a complex construction, such as an intersection of surfaces or a ProcCurve, might
be a candidate for freezing -- to simplify and speed up a model. The BFreeze command (see "Freezing BFit objects" tip) provides a way to freeze curves with a BCurve as the result. Similarly, the CFreeze command allows us to freeze a curve as a CCurve.

To make a CCurve with 10 control points (the default), and automatic names:

     1. select the curve you want to freeze;
     2. pick Window/ Command and type in the command: "CFreeze" (no quotes)

To make a CCurve with 8 control points, named 'sheer', the command is: "CFreeze sheer 8"

MultiSurf creates the specified number of AbsPoints, and the CCurve supported by them, to best fit  the original curve. (Since the natural labeling of a CCurve is approximately in proportion to arc length, it is a good idea to precede the CFreeze command with Tools/ Special/ ArcLength  Relabel.)

CFreeze will also freeze a snake, resulting in a CSnake with AbsMagnet supports.

Modeling piping runs

MultiSurf 4.0 has several new features that are useful for planning piping runs. Sample file DefSweep-PolyCurve2.ms2 illustrates these 3 features working together:

1. SweepSurf now doesn’t need a guide. All you need is a path and a shape.
2. The RadiusArc entity allows you to insert elbows of any angle and specified radius.
3. The PolyCurve2 entity automatically labels a series of arcs (elbows) and lines (straight runs) with uniform velocity.

As a result, all you have to do is make a series of points, connected by lines, that traces the axis of your pipe. Put RadiusArcs at the elbows, a PolyCurve2 along the length, a Helix at one end for the shape, and sweep your pipe. Of course, if necessary, you can also include curved path portions other than arcs.

For locating a bulkhead penetration, include the pipe in the surfaces cut by an XContour. For checking interferences between 2 pipes, make Contours on one pipe, using the other pipe as the mirror/surface; first = 0, last = 0, Q0= desired clearance., Qint = 1. Put this Contours object on a layer by itself, and turn all other layers off. If the pipes don’t interfere, your wireframe view will be blank. (Thanks to Mark Siburg at Argonaut Marine for this last idea.)

Nested edits

In MultiSurf, you can only edit one object at a time, but you can suspend editing one object while you edit (or create) its supports.

For example, suppose you’ve started to create a Line, but when picking supports you realize you don’t yet have a point for the second end. Don’t cancel your create; instead, double-click the Point2 support, and then proceed to create the point you need. The Line can wait. When you click the final OK for creating the point, you’ll find you’re back in selecting Point2 for the Line, and the point you just made will already be selected!

Nested edits are especially useful for creating and editing graphs and relabels, objects that have no visible graphic presence for selection in the wireframe view. Suppose you have a BlendSurf that uses a u-graph, and you want to modify the surface by editing the graph. Edit the BlendSurf, then double-click on "u-graph". Now you can proceed to edit the u-graph. When you finish editing the graph, the BlendSurf and its dependents will immediately update to reflect the change.

Nested edits offer another way to trace dependency. Suppose there’s an IntSnake in your model, and you’re a little hazy as to which surface is its host. Select the IntSnake and Edit/ Attributes; double-click on the "Magnet" support, Edit/ Attributes again, and double-click the "Surface" support. This will highlight the supporting surface. Just press <Esc> as many times as needed to back out of such an exploration without changing anything.

"Border points" in curve and surface tables

MultiSurf stores a tabulation of each curve and surface object. This is used for display and also for interpolating positions for dependent objects. Occasionally, it is important to realize that the table is somewhat bigger than the nominal parameter range of 0 to 1. This knowledge can explain otherwise mysterious failures, and often can lead you to a simple solution.

Consider a curve with 10x2 divisions. This will be tabulated at t = 0, .05, .10,... 1.0, and the resulting polyline is what you see displayed in a wireframe view. However, the table for this curve actually goes from -.05 to 1.05. These two extra points off the ends (which we call "border" points) are not needed for display, but are used for various internal purposes such as calculating curvatures. Surface tables have border points all the way around, one u or v subdivision off the edge.

The trouble arises when a construction fails at a border point. Perhaps it’s a ProjSnake with 8x4 subdivisions, and the host surface has actually folded back or fails to reach as far as t = -1/32 or t=1+1/32 on the basis curve. Then that border point fails to converge, and the whole snake is deemed a failure and refuses to display. When procedural curves or surfaces fail, it’s often at a border point. And if you’re not aware the border points are there, the failure can be mysterious.

The "simple solution" we promised above? Increase the subdivisions on the object that fails. For example, if you have an 8x4 ProjSnake that fails to converge, try 8x8 or 8x16 divisions. This moves the border points closer to 0 and 1, and often allows the construction to succeed.

Use bright white color for "handle points"

We often build models that have particular points that control certain parametric variations; for example AbsRing 'r0' and RelRing 'r1' in the 2CABINS.MS2 model. We've adopted the convention of using bright white (color 15) for these "handle" points so they stand out (on a black screen) and so are easy to identify among the other points. (It's also useful to give them names that identify their parametric functions, like 'cabin_fwd' and 'cabin_length'.)

Euler Frame bug

Fixed. The RPY Frame is a superior replacement for the Euler Frame.

Auto Reversal of Master Curves

Although it seems to have escaped mention in the manual, ruled and lofted surfaces have a new behavior in versions 4.0 to 4.5 that has surprised and puzzled some users. MultiSurf examines the relative orientations of the master curves, and based on internal rules, can use one or more master curves in reverse if it decides that's what the user intended.

For example, open Demo.MS2, select the middle master curve 'MC2', Edit/ Attributes, edit the Control Points and select them in reverse: 'P24', 'P23', 'P22', 'P21'. (The "Reverse Set" button in Selection Set View does this quickly.) Surprise! The hull doesn't change, even though the middle master curve is now oriented backwards, in relation to the other two. Explanation: MultiSurf figures out 'MC2' is backwards, and automatically reverses it when it's used in the surface.

This change was intended as a convenience feature, but we've seen a few surfaces where the effect is contrary to the designer's intent; furthermore, there's no way to achieve the intended shape without inserting additional master curves.

Workaround: Version 4.5 has a command to optionally disable master curve reversal at the model level. If you have a surface that is apparently being adversely affected, open Window/ Command and type: MCReversal off. (This setting is not stored with the model, so you have to issue it
again whenever you open the model that needs it.)

We recommend that you be conscious of the relative orientations of your master curves and get them right -- don't rely on the automatic reversal. This "feature" has caused enough trouble that it may well be removed from future versions.

Measuring bevel angles

In boat construction the “bevel angle” at a point on a surface (say, the hull) is the angle between the normal direction to the surface and a transverse plane. This is the angle at which you need to bevel a thick frame or bulkhead to match the hull surface slope. Here’s a cute trick for measuring and tabulating bevels. Try it with the Demo model:

1. Rotate the boat 90 degrees about the Y axis (Edit/ Transform/ Rotate/ Y axis / Complete model), so the bow is up and the stern is down.
2. Create an AbsMagnet ‘m0’ anywhere on the hull. Make an OffsetPt ‘p0’ from ‘m0’, a moderate distance outside the hull (offset = -2 ft in our case). Make a Line ‘l0’ from ‘m0’ to ‘p0’.
3. Move ‘m0’ to any location where you want to measure the bevel. Select ‘l0’ and Tools/ Angle. The value displayed as “latitude” is the bevel angle.

(Step 1 assumes that the hull comes out the same shape after rotation. This is true for most ways of constructing a hull, not necessarily for all ways. For example, if your hull is an XLoftSurf, you would have to change its type from 1 to 3, and also exchange some end condition graphs.)

Breaking port-starboard mirror symmetry

Most boat designs have a majority of shapes and features that have mirror symmetry with respect to the Y=0 plane. For example, the hull surface is almost always designed with port-starboard symmetry. The Y-symmetry switch (Settings/ Model dialog) makes it easy to make a symmetric model by shaping only one side. However, few boats have mirror symmetry throughout. Even when the exterior is fully symmetric, the accommodation and outfit usually have unsymmetric features.

YMirror.exe (download it here) is a Visual Basic macro that addresses this problem. Open a model that has Y-symmetry, select the surfaces and contours you want to mirror (usually, all surfaces and contours), and invoke YMirror. It turns Y-symmetry off, and for every surface in the original model it creates a MirrSurf with the same color, visibility and divisions as the pre-existing surface. Then you can go onwards, modeling the parts that are not symmetric.

Transom expansion with CopySnake

For flat expansion of most developable surfaces, we rely on MSDev, our developable-surface plate expansion add-on. However, in many boat designs about the only developable surface is a cylindrical transom. This can easily be expanded inside MultiSurf.

CYLTRAN.MS2 is a sample file with a cylindrical transom, drawn as 2 snakes 'transom_edge' and 'transom_top' on the circular cylinder 'transom_cyl'. In Tools/ Mass Properties, we can read off the arc lengths of the sides of 'transom_cyl' -- these are the lengths of Line 'transom_cl' (3.25 ft), and Arc 'circle' (4.43 ft.) Make a flat rectangular surface (see another tip on this) in a convenient place -- we made a type-1 BSurf 's0' with corners at (0, 0, -3.25), (0,0,0), (0, 4.43,-3.25), and (0, 4.43, 0). Then make a CopySnake 'n0' with 'transom_edge' and 's0' as supports, and another CopySnake 'n1' from 'transom_top' and 's0'. The two snakes 'n0', 'n1' give the expanded transom outline.

BFitSnake entity

The BFitCurve and BFitSurf entities provide means to make controlled least-squares curve and surface fits within MultiSurf, and the BFreeze command (see separate tip on this) is a facility for turning the fitted surfaces into free-standing geometry, independent of the base surface supports. A BFitCurve can be made from a snake, but the result is a curve rather than a snake; it can't serve as a support for a TrimSurf or SubSurf, for example.

Enter BFitSnake. This entity exists in MultiSurf 4.5, it just isn't on the menu. You can create it from the Command Window with the command "create BFitSnake" (no quotes, correct capitalization required). This leads to the usual Edit/Create dialog. It works very similarly to BFitCurve, but makes a snake.

BFreeze also works for a BFitSnake. The result is a BSnake supported by AbsMagnets.

MultiSurf 4.7: BFitSnake is on the menu now; also Tools/ Special/ Freeze Fit is a more convenient way to BFreeze.

CopyCurve, CopySurf entities

Sometimes you need to make an exact copy of a curve or surface in a different position and/or orientation. Rel, Rotat and Mirr entities exist to do this under limited conditions. MultiSurf 4.5 has two new "hidden" entities that provide copies in a much more flexible way.

A CopyCurve is supported by a basis curve and two frames. It takes a "snapshot" of the basis curve in the first frame, then makes a duplicate in the second frame. On the way, the curve can be scaled by different multipliers in the x, y, z directions. And of course, like any Multisurf curve, if the basis curve changes the CopyCurve updates to reflect the changed shape. A CopySurf works just the same way, but has a basis surface instead.

To create one of these objects, open the Command Window and type "create CopyCurve" or "create CopySurf" (no quotes, correct capitalization required). This leads to the usual Edit/Create dialog.

MultiSurf and SurfaceWorks: CopyCurve and CopySurf are on the menu now.

Bow Rounding with a Fillet

A Fillet surface provides a bow rounding that sometimes works better than a BLoftSurf. Open Bowround.ms2 from the Examples folder and try this:

1. Select the blue bowround surface; <F10> (to zoom to selection)
2. Edit/ Show supports (to show 'MC1')
3. Edit/ Delete (removing the old 'bowround' surface)
4. Select 'hull', create EdgeSnake 'n0', take the defaults
5. Select 'MC1' and 'profile', create RuledSurf 's0', take the defaults
6. Select 's0', create EdgeSnake 'n1', take the defaults (type-1)
7. Select 's0', create EdgeSnake 'n2', type-3
8. Select 'tangent', 'n0', 'n1', 'n2', create Fillet 'bowround', take the defaults.

This produces a bowround surface that is truly tangent to the hull. (The BLoftSurf rounding is only approximately tangent). Take the <z> view and <F5> to show the portside image.
(Thanks to Bill Sill for this suggestion.)

Differences between models

Suppose you have two model files that you know are similar -- perhaps one is a modification of the other -- and it becomes important to identify exactly what differences exist between them.

View/ History is one important source of this information. Each version of the file will have its own associated .HST file, which will help to establish which was derived from the other, on what date, and what subsequent changes occurred in either model.

Microsoft Windows comes with a useful "File Compare" utility, FC.EXE, that can be used to find the exact differences between two files. Suppose the files you want to compare are:
Dsgn125A.ms2 in C:\MSurfWin\Projects folder
Dsgn125B3.ms2 in C:\MyDocuments\Dsgn125 folder
From your Start\Programs menu, open an MS-DOS command window. At the MS-DOS prompt, type the command:
FC C:\MSurfWin\Projects\Dsgn125A.ms2
C:\MyDocuments\Dsgn125\Dsgn125B3.ms2
and press <Enter>. Any differences between the files will be displayed on the screen. If there's more than a screenful, add  C:\fc.txt to the command. This will pipe the results to a file named fc.txt in your root directory; double-click on it in Explorer to open and read it with Notepad.

FC has many options. Type the command FC /? to get a help screen about FC.

Document your models

With all its possible relationships, a MultiSurf model is a complex object to understand. If you think you understand how it works today, just wait 6 months and see how clear it is then. Adding documentation to your model can make it much easier to work with, for you or anyone else,
now or in the future.

There are at least 6 ways to add documentation to a model:

1. In Settings/ Model, add model-level comments. This box can have any quantity of text; it scrolls.
2. Use meaningful object names and layer names; organize your model into layers.
3. Put comments in the "User data" field when editing an object. This can hold up to 40 characters.
4. You can insert // comments in the model file in Edit/ Model File. (Be careful; editing the model file is risky in general, but it's always safe to add a line that starts with //.)
5. Add annotation to the History (HST) file (Edit/ Annotate History) (For example, why was this change made?)
6. Write a separate document that explains how the model works -- the principal relationships, the logic behind them.

For examples of 1, 2, 3, and 4, open the Demo.ms2 model.

Sketch planes in MultiSurf

In most solid modeling programs, curves are generated in so-called “sketch planes”, which can be oriented as required, but always present a 2D environment for curve creation. Sketch planes are sometimes handy for surface modeling, too, and can be simulated in MultiSurf by the following steps:

(1) Create a flat rectangular “sketch surface” in the position and orientation you need for your 2-D curve. This can safely have 1x1 divisions. (See separate tip on “flat rectangular surface”.)
(2) Create magnets on your sketch surface. These points will automatically lie in the plane of the sketch.
(3) Construct your sketch from Lines, Arcs, BCurves, etc. using the magnets as control points. These entities will all lie in the sketch plane because all their control points do.
(4) Your whole sketch can be stretched and resized proportionally just by dragging the corner points of the sketch surface.

Representing thickness of bulkheads, frames and other flat parts

A bulkhead or frame can be represented as a single plane cut through the hull and deck surfaces, usually representing either the forward or after face of the actual part, and you can conveniently make a whole set of these (uniformly spaced) with a single XContours object. However, consider this alternative: Represent each individual bulkhead with its own XContours object, having first index = 0, last index = 1, X0 = forward face, Xint = thickness.

Advantages:
(1) This produces two cuts through all the selected surfaces, showing the contours for both the forward and after faces.
(2) Each bulkhead can have its own color, which makes it easy to tell them apart, and can be on its own layer if you want.
(3) In body plan view, in CAD, you probably will want to keep the inner of the two lines and
erase the outer line, in order to make a bulkhead that fits all around.
(4) As you develop additional structural parts such as longitudinals and interior decks or joinerwork, having both faces of the bulkhead in view will help prevent errors that arise from forgetting which side of the plane the thickness is supposed to be on. (And of course these other flat parts can be made the same way, indicating their thickness.)

Thanks to Steve Hudson for this neat idea. (Steve is a naval architect in Southwest Harbor, Maine, who uses MultiSurf, MSDev and MicroStation to perform detailed N/C preparation for metal yachts and workboats.)

Extending the hull surface

In the days of drafting hull lines, it was common to draw and fair the extension beyond the transom as part of the lines definition. You can still do this with MultiSurf, and trim the rest off with an IntSnake; however, we discourage use of intersections in general, and advise making the transom edge neat, as in sample file DEMOTRC3.ms2.

However, the builder might ask you for one or two sections through or beyond the transom. He may want them for fairing, or he might prefer to build the actual surface "out by" and trim it off later, just as it used to be drawn. How can you make sections back where there isn't any more boat?

Actually, it's easy. Try this on the COMPBT1.ms2 model (in Tuts directory):
(1) Put an AbsMagnet 'm0' on the 'hull' at u = 0.2, v = .95.
(2) Make a type-2 (transverse) UVSnake 'n0' from 'm0'.
(3) In <y> view, drag 'm0' aft, off the end of the boat, and you'll see the UVSnake goes
with it, no complaint; so the 'hull' is still there. Drop the magnet at about X = 32.5.

To see the actual extended surface,
(4) create an EdgeSnake 'n1' (type-3, the transom edge), then
(5) make a SubSurf from 'n1' and 'n0'. This is the fair extension of the 'hull'. Cut XContours on the SubSurf to make the extended sections the builder needs.

Trimming a DevSurf

DevSurfs, like any other parametric surface type, can be a basis for either a TrimSurf or a SubSurf. However, even though the result of trimming a DevSurf in this fashion is in principle a developable
surface, MultiSurf often won't let you export the TrimSurf or SubSurf in a RUL file for expansion in MSDev. This is because of limitations in the complexity of data that can be exported in a RUL file.

The simple answer to this: Just create the snakes that you would use for trimming the DevSurf, and make sure they are visible when you export the RUL file of the DevSurf. They will show up on the flattened plate, and can be used to trim the plate outline in CAD prior to nesting..

(This is usually simpler than making a TrimSurf anyway; you don't have to make the snakes that go all the way around the trimming boundary.)

Offset, Mirror, etc. of TrimSurf

If you’ve worked with TrimSurfs, you may have discovered that they are disallowed as supports of derived surfaces such as MirrSurf and OffsetSurf. There is a fairly simple workaround for this. If you want to mirror a TrimSurf, make a MirrSurf from the base surface, then a CopySnake from each of the trimming snakes. Create a TrimSurf, selecting the MirrSurf as base surface, then the CopySnakes (in correct sequence) as trimming snakes.

Fair extension of a curve

Curves in MultiSurf are displayed over a parameter range from t = 0 to t = 1, but most curves actually extend (invisibly) an indefinite distance beyond these visible ends. You can, for example, put a bead at t = -0.5 or +1.5, and it will lie on the fair extension of the visible curve. You
can only drag these beads as far as t = -1 and t = +2, but you can position them farther out by typing in the t parameter (<F2>). 

To make the extension visible, make a SubCurve -- for example, from '*0' to 'e1', where 'e1' is a bead at a negative t-position; or from '*1' to 'e2', where 'e2' is a bead at a t position greater than 1.

Importing data from a 3DA file

The 3DA format, a very simple "connect-the-dots" ASCII format for 2D or 3D wireframe data, is often the key to importing data from drawings or other sources. You can view a 3DA file by creating a WireFrame object, and you can fit curves to its "wires" as a group with
Tools/ Special/ BCurveFit. Or you can make TabCurves from individual wires within it.
Another more flexible option for utilizing 3DA files is the Import3DA command. This takes the filename of a 3DA (or PAT) file and a 'kind' parameter that controls the results:
kind = 0: imports the points only as AbsPoints
kind = 1: turns each wire into a type-1 BCurve
kind = 2: turns each wire into a type-3 CCurve.
You can also select an insert frame prior to executing the command. This allows rotation and repositioning of the data during import (similar to the frame support used in a WireFrame object).
For example: 
setpath c:\msurfwin\samples 
import3da cube1 1 2 
imports the 6 wires of cube1.3da, turning them into Type-1 BCurves on layer 2.

Be careful about types for XYZ entities

John Letcher says: The new XYZBead, XYZMagnet and XYZRing in version 4.7 are great; I’m using them all the time. But I find I often forget to set the right type - 1, 2 or 3 - when I create one. I will have the right type in mind, but I simply forget to set it in the dialog, and accidentally take the default (usually, the last type created). My tip is just to be careful about setting the type; make it a habit to do this first. The usual result of an incorrect type is a “failure to converge” or “singular equations” error, or the point comes out in a totally unexpected place. When any of these things happens, the first thing to check is the type.

If you create one of these points, and no error occurs, but the point doesn’t show up where you expect it, you can hit <F10> to bring it to the center of the view. Seeing where it is actually located probably will help you understand why it isn’t where you meant for it to be.

A useful way to remember the 3 types for the XYZMagnet, especially when the offsets are both 0, is to think of it as being projected from the basis point parallel to one axis:  
type 1 is projected parallel to the x-axis
type-2 is projected parallel to the y-axis
type-3 is projected parallel to the z-axis

Use CopyBeads for Procedural Entities and Animation

A valuable application of the CopyBead and CopyRing (new in version 4.7) entities is to use only a single bead or ring to drive a complex ProcCurve, ProcSnake, ProcCurveSurf (or Tools/Animate), as opposed to multiple beads.

If you replace all AbsBead/Ring supports beyond the first one with CopyBeads/Rings based on the first one, then you end up with a construction that can be dragged (by dragging only that one
AbsBead/Ring) from end to end of the supporting curves. As you drag, you can visually verify how the moving point or curve is being constructed at each location, and identify any place where the intended construction fails.

For example, in sample ProcCSf2.ms2, replace ‘e1’ with a CopyBead made from ‘e0’. ‘e0’ becomes the single driver, which you can position anywhere on the ‘chine’, to verify the proper construction of ‘moving_curve0’.

In single-period animation, the advantage is that you can “debug” your animated model by “freeze-framing” it at any point in its evolution, just by dragging one bead or ring. (Of course if your animation has multiple periods, this won’t work – you probably have to move the
individual beads in that case.)

Increase divisions for NUBS approximation and IGES export

The new Non-Uniform B-Spline (NUBS) fitting in 4.7 has made great improvements in the accuracy of IGES exports, but we’ve encountered some cases where the fit "blows up" and produces moderately to extremely wild results.

1. Always check your exported surfaces by importing the IGES file back into an empty model.

2. If one or more of your surfaces shows waves, ripples, or (sometimes) wild oscillations that extend far away from your original model, open the original model, raise the Divisions Multiplier (in Settings/ Model dialog) and repeat the IGES export. Most cases are fixed with Divisions Multiplier of 2; one case we’ve seen needed 3. 

3. We are testing an improved fitting algorithm that should take care of this problem in a future release. Even so, it’s probably going to continue to be advantageous to increase Divisions Multiplier before any export. The export takes a little longer (approximately in proportion), but the results are almost always more accurate.

Angle bisection II (4.7)

The construction given in Angle bisection I will fail if ‘p1’, ‘ctr’ and ‘p2’ lie on a line (i.e., the angle is 180 degrees, or 0). Here’s a more robust alternative:

  1. Make lines ‘l1’ from ‘p1’ to ‘ctr’, and ‘l2’ from ‘ctr’ to ‘p2’.
  2. Put an AbsBead ‘e1’ on ‘l1’, anywhere but at the ‘ctr’ end.
  3. Make an IntBead ‘e2’ on ‘l2’, using ‘ctr’ as the mirror and ‘e1’ as the point support.
  4. Make a CopyPoint ‘p3’ from ‘e2’, ‘e1’ and ‘ctr’ (in that order).
  5. A Plane2 made from ‘ctr’ and ‘p3’ bisects the angle.
  6. A Frame3 ‘frame’ made from ‘ctr’, ‘p3’ and some other uninvolved point will allow convenient constructions in the plane of bisection. The y,z-plane of ‘frame’ is the bisecting plane.

Example model: bisector2.ms2

Projecting a curve on an oblique plane

The ProjCurve entity allows projection of a curve onto a plane - a frequently useful construction - but the direction of projection of a ProjCurve with a plane mirror is always normal to the plane.

To project a curve on a plane at another angle, construct a plane surface ‘ps’ on the plane where the projection is needed (see separate tip "Flat rectangular surface"), then make a ProjSnake on ‘ps’. Generally you’ll need to construct a plane mirror for the projection, normal to the line of projection. If you have a line along this direction, make a Plane2 from its two endpoints.

Example model: Collar1.ms2 . Here a circle (Helix ‘c0’) is propagated along a series of line segments, forming a jointed tube with circular cross section. At each joint we construct a surface ‘bs1’, ‘bs2’ etc. that bisects the angle between the lines (see separate tip, "Angle bisection II"), and then make a ProjSnake on it from the previous joint. The configuration of the collar can be freely adjusted by moving the points ‘p1’, ‘p2’ etc. The radius can be changed by the Z offset of RelPoint ‘radius’.

AutoCAD layer name restrictions

During 3D DXF exports, MultiSurf 4.7 has an option to put each object on a separate layer, using the object name as the layer name. This way the identity of RG objects is maintained in the DXF file and inside AutoCAD.

However, it has come to light that AutoCAD has more restrictions on the character set used in layer names than we have for object names. Consequently, it is relatively easy to create a DXF file that gets errors and is incomplete when opened in AutoCAD. Specifically, AutoCAD layer names can use only letters, digits, underscore '_', hyphen '-' and dollar sign '$', with no embedded spaces.

We're working on an automatic fix for this; meantime, there is a simple workaround: For objects that are to be exported to AutoCAD, assign names that contain only letters, digits, underscore and dollar sign. This is the set of characters that is legal for both programs.

Fastest way to show a single object, or a small group of objects:

Select the object(s)

Edit / Hide / All

Palette <S>, or Edit / Show / Selection set

MultiSurf 4.7: Select the object(s), and Edit/ Hide/ Unselected

Showing and hiding dependents, supports and points

Did you hide that surface because it was in the way of what you wanted to see? Here are two quick and easy ways to show it again:

  1. In the drawing, select any one of its supporting objects (e.g. master curves for a lofted surface); then choose Edit/ Show Dependents.
  2. In the drawing, select any of its visible dependents (e.g. contours); then choose Edit/ Show Supports.

Too many points in the picture? Use Edit/ Hide Points to hide them all (as a group); then use Edit/ Show Points when  you want to see them again.     

   

Increasing model accuracy by coordinating divisions

Coordination of divisions generally produces a more accurate stored model, and it is necessary for the display of views  such as Surface Curvature.

Here is an example: when creating a lofted surface, use the same number of divisions on each of the master curves, and also  make sure that the master curve t-divisions x t-subdivisions is the same as, or a multiple of, the surface u-divisions x  u-subdivisions. E.g. you might use: u-divisions = 8 x 4, and t-divisions = 8 x 4 (surface and curve divisions are the same),  or  u-divisions = 4 x 1, and t-divisions = 8 x 4 (curve divisions are a multiple of surface divisions).

Number of divisions

For speed, choose numbers of divisions keeping in mind that you want enough to be accurate but not too many – estimate low, then use the Divisions Multiplier (in Model Settings) if you need to go higher.

For display and working drawings, look at the DEMO hull as an excellent example of good divisions: 10x1, 20x1. Occasionally, where there is tight curvature, we might go higher.

Then, for full-scale lofting and NC cutting, we generally double (or triple; occasionally quadruple) the divisions using the Divisions Multiplier (see "How Much Accuracy Is Enough?").

 

Update extents

Have you ever found that your model seems to shrink to a tiny version of itself, or even a single dot near the edge of the screen, and <F9> (View/Autozoom) won't get it back? The usual cause is that you accidentally created a point far away from the model (for example, you entered an X-coordinate of 1000 when you meant 1.000).

First, get rid of the stray point (<F9> should bring it into view) -- either delete it, or move it back to the vicinity of the model. Then, in the Model options dialog (Settings/Model) press the <Update Extents> button.

Reliable window zooming

When zooming in on a detail (using alt-drag), switch to Ortho mode (there are three ways: View/Orthographic, O-key and toolbar button). Zooming in perspective view is much less reliable because of the complexities of perspective viewing transformations.

Establishing the center for camera rotations

To zoom in on one end of a long object like a ship, start by taking <z> or <y> view; then <F9> to zoom all; then window-zoom (alt+drag) on the area you want to see. This sets the viewing center ("look point") in the vicinity of the object you are examining, and it stays centered through subsequent view rotations.

In MultiSurf 4.0 and SurfaceWorks, you can also select one or more objects in the region of the model you want to examine, then View/Zoom to Selection. If the selection is a single point, that point will become the new center of rotation, and will be centered on the screen; if it's curves, surfaces or other extended objects, the center of the space occupied by the objects becomes the new center of rotation, and the view is zoomed so they fill the screen.

Windows on a cabin

To display realistic cabin windows, make SubSurfs on the cabin side and color them black.

Rendering bright metal

To render a metal boat with bright aluminum surfaces, use color 7 (light gray) for the surface color. Then in the Render Options dialog, you can vary the lighting direction to make glints and highlights appear where you want them.

Porcupine curvature display

The "Porcupine" command provides an alternative way to visualize the curvature distribution of a curve or snake. To turn on Porcupine display, select Window/ Command, type in "Porcupine" (without the quotes) and click Ok. Now when you select a curve or snake in the Wireframe view and select Tools/ Curvature Profile, besides the curvature vs. arc length graph across the bottom of the window you will have a porcupine display.

This is a set of lines ("quills") positioned normal to the screen projection of the curve, with their lengths proportional to the curvature in this projection at the point on the curve where the quill is rooted. (The quills are drawn in color 7 (light gray), so if this happens to be your background color, you won't be able to see them -- change to another background.)

With two optional parameters in the "porcupine" command you can control two aspects of the porcupine display (type the command "help porcupine" to see the syntax):
1. A scale factor that multiplies the length of the quills -- to amplify
small variations.
2. The number of quills displayed (default is 100).

To turn off the porcupine display, give the command "porcupine 0".

MultiSurf 4.7: The porcupine display is turned on and off with the "Porc." button in the Curvature Profile window.

Keep Selection Set and Render Views open

Often in training and support situations we see users open the Selection Set View (<F6>), use it for a moment, then close the view. Similarly with Render View: they check the appearance in Render View, but then to get back to Wireframe View they close the Render window. It is much more
convenient and efficient to leave these views open. There are two alternatives for doing this:
(1) Just click in the Wireframe window to bring it to the front. If you don’t maximize any views, this leaves a bit of the Selection Set window showing along the bottom of the screen. If you click in this area (aim for an inactive part of the view, not a button), the Selection Set view will pop to the front. Similarly, you can “park” the Render view in the lower right corner (drag it there by grabbing its caption bar) and get it back with one click in the colored background area.
(2) Minimize the Selection Set and/or Render Views. They turn into small icons stacked along the bottom edge of your screen. One click can get either of them back to the front of your desktop. Another click can minimize it again.

Animation with MultiSurf

MultiSurf 3.1 has a cool Animate feature available through the Command window. You can download a self-extracting zip file (28KB) which contains a Word document describing the feature as well as several .ms2 sample files. Enjoy!

MultiSurf 4.7: Animation is on the menu (Tools/ Special/ Animate)

Spin command

In a Wirefame view, the Spin command sets the viewing camera into circular motion, so the wireframe model appears to be spinning.

All you have to do to start spinning is open the Window/ Command dialog, type "spin" (no quotes), and click Ok. To stop spinning, click the "Stop Spin" button that appears in the upper left corner of the screen.

While spinning is underway, various view controls such as arrow keys and <F5> still work. Try turning on symmetry images (<F5>). The apparent motion makes it much easier to interpret a wireframe view with symmetry as a 3-dimensional scene.

Camouflage or mottled appearance in Render View

If one or more of your surfaces in a Render View comes out with irregular splotches of color, it's likely that you have left a surface on that was supposed to be hidden or deleted. For example, open
Demo.ms2, select the 3 master curves and create a second CLoftSurf with a color different from 10 (say bright red, 12) and different divisions (say, 8x4, 8x4). Then render the result. The two surfaces are occupying nearly the same space, but because of the differences in their tabulations, triangles on the green surface are slightly closer in some regions and triangles on the red surface are slightly closer in others. Rendering draws the closest triangle along each line of sight; hence the
mottled appearance.

To fix it, just hide the surface you don't want to display; or if it's not serving any function, delete it.

Viewing along a particular direction

Sometimes you'd like to take a viewpoint along a specific direction in relation to some modeled geometry. For example, imagine you've drawn a window on a plane surface that is not aligned with any of the coordinate axes; you'd like to get a picture of that flat panel, and the window's position on it, viewing normal to the plane.

One way or another, select two points that are on a line normal to the plane. Often these will already be present in the construction of your surface. Otherwise, put a magnet somewhere on the plane surface, and an OffsetPt some distance away from it. Or take some point not on the plane, and make a ProjPoint or ProjMagnet from it. With these two points selected, Tools/ Angle will give you the latitude-longitude orientation of the line from one point to the other. Rotate the view to this latitude and longitude; and set the view to Ortho. To confirm that you're now looking in the right direction, check that your two points are drawn right on top of each other. If you want to rotate the final picture, Open the View/ Set View dialog and vary the Tilt angle.

MultiSurf 4.7: Check out the new options View/ Set View/ Along and View/Set View/ Normal To

Rendering without symmetry images

The Render view automatically shows symmetry images when they are present in your model. Sometimes, for example when you have built interior structures or furniture, you'd like to make a rendered view without the symmetry images. All you have to do is to switch off the Y-plane symmetry checkbox in the Settings/ Model Options dialog.

Saving a 2D view of offsets

In Offsets View, Export 2D has been on the file menu for a long time, and maybe it worked at some time in the distant past, but since at least version 3.1, you get a 2D view of the WireFrame rather than the Offsets View -- even if no WireFrame View is open!

It’s definitely useful to be able to make a 2D view of the offsets, to document the data that was used for hydrostatic calculations. A good workaround is:

Bring the wireframe window to the front, and turn on symmetry images (<F5>)
Select all the visible contours that you used to make the offsets,
Edit/ Hide/ Unselected
Select a good viewpoint
File/ Export2D/ 2DD or DXF

Animation and Spin together (4.7)

Tools/ Animation allows you to create moving models with continuous motions. The Spin command allows you to "orbit" the viewpoint around your model. The combination is sometimes especially neat: watching your animated model from a continuously changing viewpoint.

While animation is underway, the Command window is unavailable (too much mischief possible!), so you can’t start Spin once animation is started. But, do it the other way around: Start Spin (note you can specify an orbit period with the Spin command), and while Spin is progressing, start the animation from Tools/ Animation.

Using an ObjectList as a restorable selection set

To select all the objects in an ObjectList, first select the ObjectList, then View/Dependency. Click the toolbar button (or ctrl+L) to clear the selection set. Then click the "Supports" button in the Dependency view.

More disk space

To recover disk space, check your Temp and Windows/Temp folders: the   files stored in those folders are transient and safe to delete as long as no applications are open (open applications may have created temp files they are counting on).

Layers

Use MultiSurf's 256 layers to organize your model; they allow you to group related portions of a model together for display and selection. The layers can be named to help keep track of and aid the model construction process, particularly for large, complex models.

Read more about using layers in our July newsletter.

Cleaning up your model

When you are getting near completion or when you replace one or more objects in your model, get rid of the old unused ones -- if they have no further function, they’ll just get in the way and confuse you (or others). Here are steps you can follow:

Turn all layers on (Settings/ Layers/ <Set All>).

Display only the surfaces and contours you want to keep.

Select/ Visible to set the visible only filter.

Select/ All.

Select/ Supports/ All Generations.

Select/ Invert Selection Set.

View/ Selection Set to review the contents (these are the proposed extraneous objects; edit the list if need be).

Edit/ Delete Selection Set (if the selection set includes any objects that have dependents, MultiSurf will tell you and it will not perform the delete; to finish, you’ll need to remove these objects from the selection set, recheck it, then delete again).

Making different layers visible in different views 

The "SetViewLayers" command allows you to specify different sets of layers to be visible in each Wireframe view. Without this command, the same objects have to be shown in each view.

Suppose you want to have only layers 2 and 6 visible in one Wireframe window. Bring this window to the front; in Window/ Command, type in "SetViewLayers 2 6" (no quotes; spaces between the layer numbers), and click OK.

To undo this command, bring the Wireframe window to the front and give the command "SetViewLayers" with no layer numbers. Then this window will again display whatever layers are turned on in the model.

MultiSurf 4.7: SetViewLayers command now works in Render view as well as Wireframe.

Sorting a model into top-down order (MultiSurf 4.0)

MultiSurf allows the objects in a model to be defined in any order, and after extensive editing the order of objects can get quite tangled. (This lack of order will generally not be noticeable unless you use Edit/ Model File, or examine a printed-out copy of the model file.)

When studying a model created by someone else, or reopening an older model of your own and trying to figure out "how it works" -- the pattern of dependencies -- it is usually much easier to understand a model that is in "top-down" or "topological" order, where each object is defined
before it is used in the construction of other objects.

The "TopoSort" command puts a model into topological order. Open the model, pick Window/ Command, type in the command "TopoSort" (no quotes), and click OK.