AeroHydro, Inc.

The most advanced 3D surface modeling available...  

 

 




 Converting 3D DXF files to MultiSurf model files

To import data from a 3D DXF file, try the utility DXF2MSF which should be in your \MSurfWin\Utility folder. See instructions in Appendix B of your manual. DXF2MSF can convert a variety of AutoCAD entities to useful MultiSurf objects.

MultiSurf 4.7: File/ Import/ DXF gives a much more convenient facility for DXF import. It also imports more AutoCAD entities, and handles 2D as well as 3D DXF files.

Reconstructing a 3D curve from 2D projections

Sometimes we receive 2D data representing two orthographic views of a 3D curve, and we need to develop a 3D curve that matches this data. Usually the source is either drafting, or 2D digitizing of a drawing, in a 2D CAD program such as AutoCAD LT.
As an example, consider the sheer or chine lines of a boat hull. These are 3D curves, but are often represented by their 2D projections on the base plane (plan view) and centerplane (profile view).
The example model CvFromYZ.MS2 (download here) illustrates a neat solution using a ProcCurve.
The starting data for the sheer line is two CCurves, 'SY' (light green) in the 'Center_plane' and 'SZ' (light magenta) on the 'Base_plane'.
(1) We create an AbsBead 'Sbead' (light green) anywhere along 'SY'; we
chose t = .15.
(2) We make an IntBead 'Sib' on 'SZ' using '*X=0' for the mirror, and 'Sbead' for the point. Thus when 'Sbead' moves, 'Sib' stays in the same
transverse plane as 'Sbead'.
(3) We make a ProjPoint 'Spp' (light cyan) by projecting 'Sbead' down to
the 'Base_Plane'.
(4) We make a BlendPoint 'Sbp' from 'Sbead', 'Spp' and 'Sib', with weights of 1, -1, 1 respectively. As shown in sample file BlendPt2.ms2, this choice of weights locates the BlendPoint at the 4th corner of a parallelogram (a rectangle, in this case).
Now if you move 'Sbead' to any position along 'SY', 'Sbp' is a point on the sheer in 3D. (We added the Lines 'Sl0' and 'Sl1' just to show the relationship of 'Sbp' to the two beads; they don't play any part in the construction.)
(5) We make the ProcCurve 'Sheer' with 'Sbp' as the moving point, and
'Sbead' as the single bead/ring/graph support.
By taking the <z> and <y> views, you can confirm that 'Sheer' has the correct projections.
CvFromYZ.MS2 also contains projections of the chine, 'CY' and 'CZ'.
Can you reconstruct the 3D chine in a similar fashion?

Import3DA command

The 3DA file is an AeroHydro standard file format for communicating a 3D wireframe (see Appendix C in MultiSurf manual). It is a simple text format, so it is easy to create a 3DA file by typing coordinate data into Notepad or another editor or word processor. (Just be sure to save as "Text only".)

A 3DA file can be opened for viewing in MultiSurf by creating a WireFrame object. You can fit the individual "wires" with BCurves using Tools/ Special/ BCurve Fit. The Import3DA command is another option for getting the 3DA data in, in a usable form for building curves and surfaces.

The command is entered in the Window/ Command dialog box. The command syntax is:
Import3DA filename[.ext] [ kind ]. The filename should include the complete path, unless you have
previously used a SetPath command to point to the folder where the 3DA file resides. kind is an optional parameter (default 0) that determines what kind of objects MultiSurf will create:
kind = 0: only the points, as AbsPoints
kind = 1: AbsPoints and type-1 BCurves
kind = 2: AbsPoints and type-3 CCurves

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!

Solving geometry problems in MultiSurf and SurfaceWorks

In the Solve command, MultiSurf has a powerful general capability to solve a wide variety of geometry problems involving varying numbers of equality constraints and/or optimizations; for example:

- construct a line that passes through a given point and is tangent to a given circle;
- construct a line that is simultaneously tangent to two circles;
- construct an arc that is simultaneously tangent to two curves;
- find the maximum-beam point on a boat hull;
- find the curve on a hull where the normal vector has no x-component (this is the place to cut and insert a parallel midbody that will have C1 continuity.)


Download a self-extracting zip file Solve.exe that documents this capability and gives several examples of its use.

Guidelines for Command-line utilities

To run Command-line utilities such as 2DDLINK.EXE, it is helpful to follow these guidelines:

  1. Limit filenames to 8 characters, extensions to 3. (Most of these utilities were developed under earlier DOS versions, which had these limits.)
  2. Don't use spaces in your filenames.
  3. It's often simplest to put the input files in the same folder as the utility.
  4. In Explorer, you can often drag the input file and drop it on the utility .exe file. However, this does not allow you to use any command parameters.
  5. To run a utility with command parameters, open a DOS window (Start/ Programs/ Command prompt). Typing the utility's filename causes it to display usage information.
  6. If you use a utility often, you can install it as a macro and put it on your Tools menu.

Slow objects - StatusBarNames command

Do you have a MultiSurf model that's slow to open and update? Want to find out which object or objects are causing the slow performance?

Open the command window (Window/Command) and type the command "StatusBarNames" (no quotes; click Okay). After the command, the status bar will show the name of each object as it is being computed and displayed. The names that stay up for a long time are the slow objects.

Some entities require a lot of computation and are, therefore, likely to make slow objects. These include: IntSnakes using a surface as the cutting object; BFitCurve or BFitSurf with tight tolerances; Procedural Curves, Snakes and Surfaces, especially ones involving intersections. Any surface with an excessive number of divisions x subdivisions will be slow. Also, a high divisions multiplier will slow down the whole model.

"Freezing" BFit objects (MultiSurf 4.0)

BFitCurve and BFitSurf provide very flexible tools for approximating curves and surfaces with NURBS. They allow the user to specify either the number of control points to use, or the fitting tolerance. The quality of fit (i.e, the tolerance achieved) is available through Tools/Clearance. BFit objects can be exported through NBS and IGES without further approximation. This is often the key to achieving exact joins between exported NURBS objects.

Sometimes we want to take the NURBS approximation achieved in a BFit object and turn it into a self-standing curve or surface. For example, we may have imported a very "heavy" (lots of control points) NURBS surface via IGES, have fitted it within a satisfactory tolerance with a much smaller number of control points, and now we want to use this simplified B-spline surface in place of the original NURBSurf. This is the function of the BFreeze command.

The syntax for freezing a BFitCurve is very simple: select the BFitCurve object, open Window/ Command, type in "BFreeze" (no quotes) and hit OK.
MultiSurf will create a BCurve and all its AbsPoint control points. The resulting BCurve will be identical to the BFitCurve, but it has no dependency beyond its own control points. The BFitCurve and its supports then can be removed from the model.

For freezing a BFitSurf, there are more options. Give the command "help bfreeze" (no quotes) to see the command syntax. You can choose the result to be either a BSurf, or a BLoftSurf with BCurve master curves running in either the u or v direction.

MultiSurf 4.7: BFreeze is now on the menu under Tools/ Special/ FreezeFit. It functions with the new NUBFit entities as well as BFitCurve, BfitSnake, and BFitSurf.

Host and Guests commands (MultiSurf 4.0)

MultiSurf makes a lot of use of embedded points (beads, magnets, and rings) and embedded curves (snakes). Each embedded object has a unique host object, the higher-dimensional object it's embedded in. You can identify an object's host by selecting the object, then Window/ Command and give the command "host" (no quotes). For example, select a magnet, type the command "host", click <Ok> and MultiSurf will display the name of the surface that is host to the magnet. If the selected object is a ring, you will learn both its host snake and its host surface.

The converse relationship to "host" is "guests". To find what objects are embedded in a given surface, select the surface and give the command "guests"; same for a curve or snake.

Help command

Window/ Command provides a number of useful functions that are not yet available through the menus and dialog boxes. The commands are invoked by keywords such as "BFreeze" or "Spin". Some commands have parameters that control their effects, for example "Animate 4 4 ".

"Help" is a new command in MultiSurf 4.0 which makes the other commands much more accessible. "Help" by itself presents a list of all the available command keywords. "Help" followed by a command keyword provides information for the command. For example, "Help Animate"
provides a short description of the Animate command and the syntax for its parameters.

SetPath command

Several commands operate by reading or writing files, having a filename.ext as one of their parameters. In most cases, it is very useful to precede use of one of these commands by the SetPath command, which chooses a folder to be used by subsequent file commands. For
example, SetPath c:\msurfwin\samples
Following this, any other commands using files will use the same folder. For example,
File.Open wingroot will then find the file WingRoot.ms2 in c:\msurfwin\samples

Note that spaces in file or folder names aren't handled by SetPath or other file commands. (The command interpreter uses spaces to separate parameters.) Future versions will allow pathnames and filenames with spaces to be enclosed in double quotes; for example: SetPath "c:\projects\ proj 197"

MultiSurf 4.7: Spaces in filenames are now handled transparently by Window/ Command.

Why does my SubSurf (or BlendSurf) look like a spiderweb?

The problem usually lies with the order and t-orientations of the boundary curves or snakes. The only vital t-orientation is that of snake1. Think of snake1 as the beginning of your SubSurf (or BlendSurf or TrimSurf) definition: its t=0 end will be at the u=0, v=0 corner of the SubSurf (or BlendSurf or TrimSurf) AND its t=1 end must connect to snake2 -- i.e. snake1 "points" to snake2. As an aid in your selection process, you might Tools/ Orientation for snake1 and "follow the arrow". The t-orientation of snakes 2, 3, and 4 is immaterial -- the important point is that they are selected in the correct order.

If your IntSnake, ProjSnake, IntMagnet or ProjMagnet fails to converge

Notice that you have a choice of specifying either the host surface, or a magnet on the host surface. Use a magnet (usually an AbsMagnet), located reasonably close to the t=0 end of the snake, or the place you expect the IntMagnet or ProjMagnet to end up. This magnet support gives MultiSurf an important clue as to where to start looking for the desired intersection. If you just specify a surface, it starts at u=0.5, v=0.5.

Isolating an error with Select/ Supports and Select/ Invert

When a "Math error" occurs in a complex model, it is sometimes a challenge to figure out what's wrong. The presence of many other objects makes wireframe and selection set views confusing. Further, there may be many other objects in the model that are descendants of the object that's in error, so the Error View keeps popping up with large numbers of error 284's (Object is in error because one of its supports is in error).

You can isolate the problem from the extraneous objects and descendants
by the following steps:

1. Save As with a new name, maybe Temp.ms2
2.  In Settings/ Layers, Set All
3.  Select the object that is in error (The one whose error code is NOT 284)
4.  Select/ Supports/ All Generations
5.  Select/ Invert Selection Set
6.  Delete

This will delete all objects that are not directly involved as ancestors of the problem object. In the uncluttered model that usually results, it is relatively easy to spot the problem and fix it. Then you can reopen your actual model and make the same fix.

Identifying objects that are slowing down your model (MultiSurf 4.0)

There are several situations that can cause a MultiSurf model to be slow to open, evaluate and respond to edits. Of course, as any model becomes complex, there can be deep chains of dependency and altogether a lot of objects to evaluate. But certain entities are inherently slow, because they involve a lot of calculation. And there are choices you make in creating surfaces and solids that strongly affect the time to evaluate.

Some performance guidelines: Surface-surface intersections are very "compute-intensive"; avoid them if possible. Procedural entities (ProcCurve, ProcSnake, ProcCvSurf) are relatively slow, especially if their constructions involve intersections. Unnecessarily large subdivisions on curves, snakes and especially surfaces and solids will slow things down proportionally. NURBS surfaces imported from other systems via IGES often have huge numbers of control points, and are slow to evaluate and edit.

The "StatusBarNames" command helps diagnose such problems. In Window/ Command, type this command and click OK. (Notice it's all one word, no spaces.) Then when you open a model (or Edit Model File and OK), the name of each object is shown on the status bar while it is being evaluated. Thus you can see exactly which objects are causing the slowdown.