This PDF version of the MoI help file is provided to allow for easier printing. Please see the regular help file for the video tutorials and links to other resources.
Moment of Inspiration (MoI) is a 3D modeling program that is focused on combining CAD accuracy with an intuitive, fluid UI.
1. File menu and frequently used tools. The File menu contains a list of recently opened files as well as several commands for opening and saving files. In the menu, Import combines the selected file with the current one (instead of replacing it which is what Open does), and Export can be used to write only the selected objects out to a file.
2. Viewport configuration tabs. This controls whether the viewport area shows the split view or only a large single view. You can switch ortho views to the reverse direction by clicking on their tab a second time. For example, a second click on the Top tab will flip it to a Bottom view. You can also right click on an ortho view tab to reverse it.
3. Point, Distance, and Angle controls. These display the coordinates of the current point under the mouse and the distance and angle from the previous point. You can also use this area to enter exact numeric values for placing a point. You can enter values just by typing numbers directly or by clicking on the control to pop up the input panel. You can also set the distance or angle to specific values to cause a distance or angle constraint to be activated.
4. Snap controls. Use these to toggle the different kinds of snapping on or off. When a snap control is highlighted in orange, it is turned on.
5. Options / Help. The little arrow button next to the Help button controls whether MoI displays as full screen or not, covering up the Windows taskbar (Windows version only). The Browser button will show or hide the Scene browser panel which lets you work with a list of different kinds of object categories.
6. View controls. These controls at the bottom of a viewport are one of two different methods that you can use to manipulate the view. They become opaque when you move the mouse over them. For more information, please see the section below: Manipulating the view.
7. Window minimize / restore / close buttons. Use the X button in the corner to close the window and exit MoI. These are only shown if the window is maximized (Windows version only). For non-maximized windows a standard Windows title bar is displayed. The name of the currently open file is displayed immediately under these controls.
8. Command options. This area holds the different options that are available for the currently running command. There is a prompt at the top of this area that tells you what type of input the command is currently expecting. The Done and Cancel buttons are at the bottom of this area. Often times you'll need to push the Done button when you are done with the current task and want to go to the next stage of a command. You can also click the right mouse button inside of a viewport as a shortcut for pushing Done. When you are in selection mode before launching a command this area will show the Properties panel which gives some information about the currently selected objects.
9. Command palettes. This is where the majority of commands are located. Click on a tab to show different sets of commands. If you click again on an already highlighted tab, it will collapse that palette.
Rotate by dragging with the Right Mouse Button inside the 3D view.
Pan by dragging with the Middle Mouse Button (press down on the scroll wheel) inside any view. You can also pan by dragging the Right Mouse Button in the Top, Front, or Right views.
Zoom by spinning the Scroll Wheel forwards or backwards.
Use the Reset button at the bottom of the viewport to fit the view to frame objects. This will also set the rotation pivot point to the center of the objects. The first time you click Reset, it will focus on selected objects. If you click it a second time, it will switch to frame all objects regardless of selection. Clicking with the right mouse button on Reset will apply the reset to all viewports.
Use the Area button at the bottom of the viewport to zoom into a specific smaller area. The center point that you pick will also become the rotation pivot point, so you can also use this to control the exact location that the 3D view will rotate around.
You can also rotate, pan, or zoom by using the buttons at the bottom of the viewport. To use these buttons, you click and hold down on the button and move the pointer. These controls are pretty sensitive, so you only need to move the pointer a small distance - don't use large motions. The behavior of these buttons can be tweaked by going to Options > View > Rotate/Pan/Zoom options.
You accomplish different tasks in MoI by running commands.
Some commands may apply their work immediately and then exit, while other commands may go through different stages waiting for you to pick points, select additional objects, or adjust various options before they are finished. Sometimes you may need to click the Done button to signal that you are finished with a stage. You can also right-click inside of a viewport, or push the Enter key as shortcuts for clicking Done.
For commands that edit or manipulate an object, you usually select the objects to be edited prior to running the command.
While a command is running, it shows information in the command options area in the upper right area of the main MoI window, labeled #8 in the screenshot above.
The top of the command options area will show a prompt that will tell you what kind of input the command is waiting for you to provide. For example, when you run the Line command, the prompt will read "Pick start point" - this is signaling that the command is waiting for you to specify a point location, either by clicking in the viewport or by typing an x,y,z value. If you get stuck wondering what to do next, it can help to read the prompt.
Below the prompt, a command may have several controls such as text inputs, buttons, checkboxes, and drop-downs to adjust different options for how the command behaves.
You can cancel a command by pushing the Cancel button or by using the Esc key.
When you are not running a command you are in "Selection Mode", which allows you to select and drag objects.
Normally when you exit a command you return back to Selection Mode so that you can adjust the selection in preparation for running the next command. While in Selection Mode you can use Right click or Enter to repeat the last command. For some commands you can also click the "Repeat" checkbox located at the very bottom of the command options area while the command is still running. This will cause the command to automatically restart until you hit cancel. For example, this can be done if you want to draw a large number of lines, then you don't have to right click to repeat the line command every single time.
Many commands require points to be defined to generate an object. For example, the Line command requires a start point and an end point to generate a line segment.
To pick a point with the mouse, press and release the left mouse button inside of a viewport.
There are several mechanisms to help you accurately place your point, including Grid snap, Straight snap, Object snap, and Construction lines.
Grid snap, Straight snap, and Object snap can be enabled or disabled by using the controls shown in area #4 in the screenshot above. When one of these controls is highlighted in orange, that snap is enabled.
Grid snap causes the point to lock on to intersections of the grid. The snap size can be adjusted under Options > Grid. Grid snap has a lower priority than Object snap, so you may need to turn Object snap off if it is getting in the way of targeting the grid.
Straight snap locks points to a straight line from the previous point. It activates when you move your mouse close to that axis line. By default Straight snap uses a 90 degree angle, but this can be altered under Snaps > Straight snap options > Snap angle. However, it may be more convenient to leave Straight snap to 90 degrees and set a temporary angle constraint when you need to lock on to other angles.
Object snap enables the point to lock on to different pieces of existing objects, such as the end or midpoint of a line, the center of a circle, etc...
You can hold down the Alt key as a shortcut to temporarily disable snapping.
Construction lines are an additional tool that can be used to help with accurate point placement. A temporary Construction line will be created if you press down the left mouse button and hold down and drag instead of doing a press and release. This enables you to quickly create alignment edges and extension lines for various types of snapping. See the reference section of the documentation under for more details on the many different types of snapping that can be performed with construction lines.
In addition to picking points with the mouse, you can also enter a numeric x,y,z value.
To enter a specific x,y,z value you can type the value in directly, and you will see your keystrokes go to the point control on the bottom toolbar, labeled #3 in the screenshot above. You can also click on the point control and enter numbers by clicking on the buttons of the input panel that pops up.
The distance and angle controls are underneath the x,y,z point control. While drawing, these will display the distance and angle of the current point from the previous point, and you can also enter values in either one of these to activate a distance or angle constraint. For example, if you want to draw a line at a 45 degree angle, you can click on the angle constraint box and enter 45.
For more information on different ways to enter typed-in coordinates, see the reference section of the help file under .
You can select or unselect a curve by clicking on it.
When you move your pointer over an unselected curve, it will get a yellow glow around it. This indicates that if you click there, that curve will become selected. If you move over an already selected curve it will instead get a dark glow around it, indicating that if you click there it will get unselected.
Multiple select is enabled at all times, you don't need to hold down the Shift key to select multiple objects.
To deselect all objects, click out in empty space or press the Esc key.
When you are in Selection Mode (not running any command), you can also click and drag on an object or a point to reposition it. If you drag on an unselected object or point, it will become the only selected item. For example, you can adjust individual points one by one without needing to click in empty space to clear the selection before each drag.
Clicking in empty space and dragging the pointer (instead of click and release in empty space) will result in an area selection box. If you drag from the left towards the right, you will get a solid area selection box which will select only objects that are completely captured inside the box. If you drag starting from the right and then move towards the left direction, you will get a dashed area selection box which will select any object that intersects the box even partially.
For some operations you may need to select an edge or face sub-object part of a solid. For example, to fillet just one specific edge of a solid, select that edge first before running the Fillet command.
The first click on a solid will select the solid as a whole object. A second click on it will "drill-in" to select an edge or face sub-object.
Once an initial drill-in selection is made, further clicks or area selects will target the same type of sub-object. For example, if you drill-in to select an edge, you can then do area selections which will only target other edges.
There is a preference to selecting edges over faces in the initial drill-in - if you're having difficulty selecting a face you may need to zoom in so that the face takes up a larger area of the screen and can be more easily targeted in a spot not close to any edges.
The typical approach to modeling an object in MoI is to start by drawing some key outline curves that define different profiles of a shape.
If you have a scanned bitmap you want to use as a guide, it can be placed into the scene by using the View > Image command.
Next, surfaces or solids are created from the outline curves using commands on the Construct palette such as Revolve, Extrude, Loft, Sweep, etc...
After some initial pieces are created, they are often times refined by using Boolean operations. Booleans can cut pieces away using other profile curves and can also combine or subtract different solids together into larger assemblies.
Finally, the sharp curves where the different pieces intersected each other are rounded out by applying fillets.
Please see the tutorials section of the help file for some example videos.
Note that the modeling approach used in MoI is significantly different than the way you create objects in a polygon/sub-d type program. In a sub-d program you tend to manipulate individual points of your object's surface a lot, kind of like sculpting. MoI's approach tends to be more like illustration or drawing because you create objects constructed from curves that you draw. Each method has strengths and weaknesses in different areas. Sub-d is stronger for shapes that have a lot of small organic details in them, like a human face for example. MoI's approach is faster and more accurate for industrial or semi-mechanical type shapes where you can identify key profile curves that define the shape. Also see Frequently Asked Questions for some more details on how MoI's objects are structured differently than a polygon mesh type model.
MoI is focused just on modeling. Often times after you have created a model in MoI you will need to export it to another program to perform additional tasks.
For example, you might want to take your model into a rendering program and set up lights and assign materials to produce a high quality realistic image, or you may want to take your model into a CAM program to calculate toolpaths for cutting your design on a CNC device.
Some file formats supported by MoI can contain curves and surfaces, and others can contain only polygon mesh type data.
When saving to a polygon mesh file format, surfaces that you created in MoI will get converted into polygon mesh facets, and the Meshing options dialog will be shown to give you some options to control the meshing process. For example, you can adjust the mesh to be made up of fewer polygons which is smaller in data size but has a rougher appearance, or you can use a denser mesh which produces a large file size but will have a smoother look. See in the reference section for details on how to control the mesher.
Typically polygon mesh file formats do not have a way to store wireframe curves in them. If your model consists only of wireframe curves (for instance 2D lines and circles drawn in the Top view), you need to create surfaces first before you can create polygon data.
.3dm, .igs, .stp, and .sat file formats support curves and surfaces, so these formats hold the most accurate representation of MoI's model data.
.obj, .stl, .3ds, .lwo, .fbx, and .skp are all polygon-based file formats.
.pdf and .ai formats generate a flattened 2D drawing for printing or import into 2D illustration programs.
.dxf format can hold either a 2D drawing for import into a 2D CAD program for annotation and printing, or also if you export wireframe curves to DXF there is an option for writing the 3D curve data.
Tips for exporting data:
Normally you use File > Save As to write your model out to a different format. File > Export can also be used. Export is short for "Export Selected", and it will write only the selected objects out to the file, while Save As will write everything regardless of selection.
Most rendering programs are focused on handling polygon mesh data. Some do support .3dm or .igs import and then convert those surfaces into polygons, but often times they will not perform a very good conversion. It is typically better to let MoI do the conversion to polygons instead.
Usually you will want to use the .obj format to bring polygon mesh data into a rendering program. However, use .lwo for Modo or LightWave, and use .fbx format for 3ds Max.
Some programs cannot handle N-gons (polygons made up of more than 3 or 4 sides) very well, so if you are getting bad results you may need to switch the Mesh options from Output: N-gons, to Output: Quads & Triangles, or Output: Triangles only.
Also, some programs may function better if you uncheck "Weld vertices along edges" which you can access by clicking the arrow in the lower-left corner of the Meshing options dialog box.
.3ds format has several limitations, so only use it if you have no other choice.
Some kinds of CAM programs may prefer to read .3dm, .igs, or .stp data, and others may be focused on taking in facets using the .stl format.
It is possible to write wireframe curve data to SketchUp .skp format, which will convert the curves into polylines. In order to avoid curves being duplicated on top of polygon edges, curves are only exported to .skp format if there are only curves being written to the .skp file and not any meshed surfaces.
You can share data back and forth between Rhino and MoI by using Copy and Paste instead of saving to a file.
It is also possible to use copy/paste between MoI and Adobe Illustrator and some other 2D
illustration programs. MoI will recognize PDF or AI formats on the clipboard and be able paste
those into MoI using the regular paste function. Use one of the following scripts on a shortcut
key for going the other direction from MoI into Illustrator:
script: /* Copy AI format to clipboard */ moi.geometryDatabase.copyToClipboardAI();
script: /* Copy PDF format to clipboard */ moi.geometryDatabase.copyToClipboardPDF();
If your object is made up of individual separate surfaces, use Edit/Join to glue the surfaces together at their common edges before exporting. The mesher will do extra work to create a unified mesh along joined edges. If surfaces get meshed individually without knowledge of their neighbors, it can lead to different vertex structures in each mesh which can cause cracks.
You can control the materials that are applied to .obj, .lwo, and .fbx format exports by assigning styles in MoI.
![]() |
File |
![]() |
Open |
Opens a file.
MoI supports reading in curve and surface data from 3DM, IGES, STEP, and SAT files. 2D curves can be opened from PDF and AI files, and curves and drafting entities like lines, circles, and arcs can be opened from DXF files.
3DM is considered the "native" file format that supports all MoI data.
A right click on the Open button will perform an Open template operation instead.
![]() |
Save As |
Saves a file to a new file name.
Curves and surfaces can be saved to 3DM, IGES, STEP, and SAT formats. A hidden line drawing can be saved to the PDF, AI, or DXF formats for printing or transfer to 2D illustration or 2D CAD programs. Polygon mesh data can be saved to OBJ, STL, 3DS, LWO, FBX, and SKP formats.
When saving to a polygon mesh format, the Meshing options dialog will be shown to allow adjusting the mesh density.
When saving to a 2D drawing format, the Hidden line options dialog will be shown.
![]() |
New |
Deletes all current model content and resets the current file name to blank.
![]() |
Import |
Import is similar to Open, except the data from the chosen file will be added to the current model instead of replacing the current model.
This could also be described as "Merge" or "Combine" files.
A right click on the Import button will perform an Import part operation which will include an additional step for positioning the imported objects.
![]() |
Export |
Export is similar to Save As, except only the selected objects are written to the file.
This could also be described as "Export selected".
Open template |
Open template is performed by right-clicking on the Open button.
When you open a file as a template file, the current file name will remain blank so that it is not so easy to save over top of the template file itself.
If you want to have a template file loaded at every startup of MoI (for example to control the default set of styles or view settings or any other properties stored in files), that can be specified under Options > General > Template file.
Import part |
Import part is available by right-clicking on the Import button.
This will merge the chosen file with the current model but has an additional step for adjusting the orientation of the imported part, for example to align it to be perpendicular to an existing surface.
The base origin of the part is defined by the CPlane that was set in the saved file, or the world origin if no custom CPlane had been set.
For more information on how the orient step works, see Orientation picker.
![]() |
Save |
Saves the model using the current file name.
Also see Incremental save for a way to save using incremented version numbers (file01.3dm, file02.3dm, file03.3dm, etc...)
![]() |
Undo |
Reverses the most recent action.
Undo is normally used to reverse edits to objects, but it can also be used to restore the previous selection or visibility state. So for example, if you are building up a selection and accidentally click somewhere and mess it up, use Undo to get your selection back. Selection undo only works for one step back, after that further undos will switch to undoing geometry edits.
![]() |
Redo |
Reapplies the last action that was undone.
![]() |
Delete |
Deletes or removes an object, or certain portions of an object depending on the selection.
If a whole object is selected, that entire object will be deleted.
If faces of a solid are selected, those faces will be removed.
Control points of a curve can be removed with this command.
If all the edges of a trimming boundary (for example, a hole trimmed in a surface) are selected, then delete can be used to remove that trimming boundary and restore the original underlying surface. This is sometimes referred to as "untrimming".
Split / 3D / Top / Front / Right |
These tabs on the bottom toolbar control the viewport configuration, switching between the split view or a maximized single view.
Clicking a second time on the Top, Front, or Right tabs will toggle back and forth between the reversed views (Bottom, Back, Left).
You can also right click on an ortho view tab to reverse it.
XYZ / Distance / Angle |
These controls in the middle of the bottom toolbar allow for viewing and entering exact numeric data when picking points during a drawing command.
The x,y,z edit box shows the coordinates of the current point under the mouse. The distance edit box shows the distance between the previous picked point and the current point, and the angle box shows the angle of the line formed between the previous picked point and the current point.
Distance constraint can be activated by entering a value in the distance edit box. This will force the next point to be the given distance away from the previous point. This can be used for example when drawing a line to restrict the length of the line to a certain value while allowing it to be oriented freely.
Angle constraint can be activated by entering a value in the angle edit box. This will force the next point to snap to the given angle from the previous point.
If you want to type in an x,y,z coordinate using the keyboard, it is usually not necessary to actually click in the xyz box before typing. Just start typing and your keystrokes will go there automatically.
The XYZ field can also be used as a mini command line entry for typing in commands. To use it in this way, press the Tab key first to put keyboard focus into this control, then type a name and push Enter. That will launch any command of that name, or select any named objects that match that name. For named object selection you can also include wildcard characters, for example if you have some objects named "upper deck" and "lower deck", you can type in *deck to select both of them.
Grid Snap |
Clicking on this button allows toggling grid snap on or off. The button will show with an orange highlight when grid snap is enabled. The size of the grid can be changed under Options > Grid, or on the popup menu that can be launched by clicking the arrow that appears when you move the mouse over this button.
Straight Snap |
Clicking on this button toggles straight snap on or off. The button will show with an orange highlight when straight snap is enabled. Different options for straight snap can be set under Options > Snaps. By default the snap angle is set to 90 degrees, and the default can be changed under options. It is also possible to use Angle constraint to define a custom snap angle that stays in effect for just one pick, see XYZ / Distance / Angle above. Snapping to too many angles by default can get in the way of doing freeform drawing, so it can be a good idea to leave the default to 90 and use Angle constraint when necessary to get other angles.
Object Snap |
Clicking on this button toggles object snap on or off. The button will show with an orange highlight when object snap is enabled. When you move over this button, an arrow will appear above it, and you can use that to show a menu that allows enabling or disabling specific types of object snaps. It is recommended to leave all the snap types enabled, and instead disable or enable Object Snap completely by clicking on the main button for it. You can also hold down the Alt key when picking points to temporarily suppress object snaps.
![]() |
Options |
Opens the Options dialog which allows for changing various options for how MoI works.
Also see Shortcut keys
![]() |
Help |
Launches the help file. When moving over the help button, you can use the arrow that appears above it to open the About dialog to show version information.
![]() |
Full Screen |
This allows for MoI to switch back and forth from full screen mode (Windows version only). When full screen mode is enabled, MoI's window will expand past the Windows system task bar to give you a larger working area. This button only appears when MoI's window is maximized.
Browser |
Clicking on this button will hide or show the Scene Browser pane when the browser is in Adjacent or Opposite position modes.
![]() |
Lines |
![]() |
Line |
Draws a line by specifying the 2 end points.
You can use Straight Snap, Object Snap and Construction lines to assist in placing the line.
Use Distance constraint or Angle constraint to draw a line of a particular length or angle.
You can enable the Both sides option to have the first point taken as the midpoint of the line.
![]() |
Polyline |
Draws a polyline which is a curve made up of multiple joined line segments.
You can use Edit/Separate to break a polyline up into individual lines.
While drawing the polyline, undo can be used to remove the last picked point.
![]() |
Freeform |
![]() |
Control points |
Draw a freeform curve using control points.
The line through the first and second point defines the starting tangent direction of the curve, and the line through the last 2 points defines the ending tangent, so you may want to place the second and second-to-last point with care to control the exact starting or ending direction of the curve
If you want the curve to come to a sharp point, check the "Make corner point" checkbox, or hold down the Ctrl key when clicking.
When drawing the curve, undo can be used to remove the last picked point.
![]() |
Through points |
Draw a freeform curve that is forced to pass through the points that you pick.
This can be useful if you want to force the curve to go through a particular spot, but this can also easily introduce wiggles in the curve. Using control points is generally preferred since it will create a more relaxed curve.
If you want the curve to come to a sharp point, check the "Make corner point" checkbox, or hold down the Ctrl key when clicking.
When drawing the curve, undo can be used to remove the last picked point.
![]() |
Sketch |
Draw a freeform curve using a click, hold down, and drag method like a brush stroke.
The curve will close automatically if your stroke comes nearby the start point.
If you want to draw many sketch curves in a row, use the Repeat checkbox.
![]() |
Rect |
![]() |
Corner |
Draw a rectangle by specifying the 2 corner points.
Move the mouse near a 45 degree angle to get a square snap.
Options are available for entering a specific width and/or height. For quick keyboard entry of width or height, it is not necessary to actually click anywhere. Just start typing and your keystrokes will go to the width box, and push Tab to move to the height box. Press Enter when you are finished with the height.
Checking the "Rounded corners" option will allow you to specify a radius for the corners of the rectangle after the 2 corners have been picked.
![]() |
Center |
Draw a rectangle by specifying the center and a corner point.
Options are the same as Rect Corner above.
![]() |
3 pts |
Draw a rectangle using 3 points, with 2 points for one edge and then a 3rd point for the width.
When picking the 3rd point, Square snaps are available to form an exact square.
Other options are the same as Rect Corner above.
![]() |
Polygon |
![]() |
Center |
Draw a polygon from a center and radius point.
Distance constraint can be used to specify an exact radius.
The Circumscribed option controls whether the polygon is contained inside the radius, or whether it is positioned to the outside of the radius.
![]() |
Edge |
Draw a polygon by specifying 2 points along the polygon's edge.
Distance constraint can be used to control the length of the edge.
![]() |
Star |
Draw a star shaped polygon by center and radius points.
Style:Auto will draw one using the classic proportions. Switching to Style:Custom allows specifying a third point to define the inside radius.
![]() |
Circles |
![]() |
Center |
Draw a circle by center and radius.
Click on the Radius label with the small arrow to switch between entering radius or diameter.
The Vertical checkbox will flip the circle 90 degrees to point vertically up from the plane.
![]() |
Diam |
Draw a circle by specifying 2 diameter points.
The Vertical checkbox will flip the circle 90 degrees to point vertically up from the plane.
![]() |
3 pts |
Draw a circle by specifying 3 points on the circumference.
![]() |
Tan |
Draw a circle tangent to existing curves.
The first 2 points must be picked snapped on to existing curves.
After the first 2 points are placed, you can either enter a radius value, pick a point for the circle to pass through, or pick a point snapped on to another curve to make a circle tangent to all 3 curves.
![]() |
Arc |
![]() |
Center |
Draw an arc by center point, start point, and angle.
The Elliptical option can be checked to create an elliptical arc that passes directly through the final picked point.
![]() |
Cont |
Draw an arc that continues tangent from the end of an existing curve.
The first picked point should be nearby the end of an existing curve
![]() |
3 pts |
Draw an arc that passes through the 3 picked points.
The order of the picked points can be changed using the Style option.
![]() |
Tan |
Draw an arc tangent to existing curves.
The first 2 points must be picked snapped on to existing curves.
After the first 2 points are placed, you can either enter a radius value, pick a point for the base circle to pass through, or pick a point snapped on to another curve to make a base circle tangent to all 3 curves.
After the the base circle has been established, an additional click is required to specify which of the available arc choices you want to keep. Click close to the portion that you want.
![]() |
Ellipse |
![]() |
Center |
Draw an ellipse by center and 2 axis points.
A specific width and height for the full ellipse can also be entered.
![]() |
Diameter |
Draw an ellipse by 2 diameter points followed by a point for the second axis.
![]() |
Corners |
Draw an ellipse by specifying the 2 corner points for its bounding box.
![]() |
More |
![]() |
Point |
Draw a single point object.
Point objects can be used to place a marker somewhere that can easily be snapped back to later on.
![]() |
Helix |
Draw a helix or spiral type curve.
Two points are picked to define the central axis and length of the helix. After the axis is defined, the next pick defines the start radius. If you want to have a different radius at the end for a tapered effect, check the Tapered option before finishing the first radius.
After the radius has been defined, you can adjust options for the number of turns of the helix, or the pitch which is the distance traveled by one coil.
If you want to draw a completely flattened 2D spiral use the "Flat spiral" option that shows up after the first point has been picked. That will cause the first point to become the center of the 2D flat spiral.
![]() |
Conic |
Draw a conic section curve (either a parabola, hyperbola, or ellipse segment) from a 3 point frame plus a "through point" or Rho value.
The frame defines the end points and the tangent directions of the generated curve.
If the ends of the frame are snapped on to curves, the intersection of the curve tangents is available as a Tan/Tan snap point for placing the middle point of the frame.
With a Rho value equal to 0.5, the curve is a segment of a parabola.
With Rho greater than 0.5 and less than 1, the curve is a segment of a hyperbola.
With Rho less than 0.5, the curve is a segment of an ellipse.
![]() |
Plane |
![]() |
Corner |
Draw a rectangular plane surface by 2 corner points, similar to Rectangle corner.
![]() |
Center |
Draw a rectangular plane surface by center and corner point, similar to Rectangle center.
![]() |
3 pts |
Draw a rectangular plane surface using 3 points, with 2 points for one edge and then a 3rd point for the width. Similar to Rectangle 3 points.
![]() |
Box |
![]() |
Corner |
Draw a solid box, starting with a base rectangle corner to corner followed by an extrusion value.
Snaps are available to make exact squares or a cube.
![]() |
Center |
Draw a solid box, starting with a base rectangle from a center point to a corner, followed by an extrusion value.
Snaps are available to make exact squares or a cube.
![]() |
3 pts |
Draw a solid box, starting with a base rectangle from 3 points, with 2 points for one edge and then a 3rd point for the width, followed by an extrusion value.
Snaps are available to make exact squares or a cube.
![]() |
Sphere |
Draw a solid sphere, from center and radius.
Click on the radius label with the small arrow to switch to diameter entry mode.
![]() |
Cylinder |
Draw a solid cylinder, from a base center point, radius, and height.
Click on the radius label with small arrow to switch to diameter entry mode.
![]() |
Cone |
Draw a solid cone, from a base center point, radius, and height.
Click on the radius label with small arrow to switch to diameter entry mode.
![]() |
Text |
Create text geometry.
First pick a base point - this will become the lower left corner of the text, and the grid of the viewport that you click in will be used to orient the text. For example, if you click the base point in the front view your text will be oriented flat to the front view so it will be pointing upwards in Z.
After your base point is defined, you can then edit various options such as the text and font. You can also change the Create option to create curves or just planar surfaces instead of extruded solids.
Some elaborate fonts may have crossing or intersecting outlines which may cause problems when MoI tries to distinguish solid areas from holes.
![]() |
Join |
Joins together curves into longer single curves, or joins surfaces along common edges into solids.
Surfaces will only be joined at common unattached edges. If you need to combine 2 objects that will require some kind of intersection and pieces removed during the combining process, then use the Boolean Union command instead.
Surface edges must be within 0.005 units from one another to be joined.
![]() |
Separate |
Breaks joined objects into individual separate objects. Curves will break up into individual segments; for example, a rectangle will convert into 4 separate line objects. A solid will break up into individual faces; for example, a box will separate out into 6 plane objects.
If a solid has face sub-objects selected, just those selected faces will be extracted from the solid. This allows for extracting just one particular sub-assembly from a larger solid.
![]() |
Trim |
Cuts up an object. Some portions may be removed to make holes, or optionally all sliced up pieces may be retained.
Trim works on curves, surfaces, or solids. The general procedure is to first select the object to be trimmed, and then run the Trim command. Next select the cutting objects, then select which pieces to discard. If you want to keep all the pieces instead of discarding any, then click Done (or right-click in a viewport) without selecting anything at that final stage.
Sometimes if you want to remove a lot of pieces, it can be easier to select the items you want to keep instead of the portions to discard. This can be controlled by switching the Mode: option to Mode: Keep.
When trimming curves, it is possible to add cuts to the curve at specific points by clicking the "Add trim points" button. For example, if you want to split a line at its midpoint, select the line, run Trim, click "Add trim points" and then click a point at the midpoint of the line and click Done. This will split the line at that point. It is also possible to trim a curve by selecting point objects as the cutting objects.
When trimming an individual surface, an "Isocurve" option will show up, which will allow you to pick one of the surface's own natural U/V directional lines as the cutting object.
It is not necessary to project curves on to surfaces before trimming. Trimming already includes projection built in, so just use the curve as a cutting object directly.
If 2 objects intersect one another and you want to cut each of them with the other, then select both of them, run Trim, and then click Done at the prompt for selecting cutting objects. This is called a "mutual trim" operation, it will use those objects as both sources and cutters.
Trim will slice just the outside surface skin of a solid. If you want to make cuts through an object where it stays as a solid, use the Boolean operations instead of Trim.
You can also use Trim on surface edges to split the edges into smaller separate segments. The Merge command can be used to reverse this and glue split edges into longer single edges.
![]() |
Extend |
Extend a curve to meet the selected boundary objects. The boundary objects can be curves, surfaces, or solids. Currently only curves are supported as the object to be extended.
Lines and curves will be extended by a straight line. Arcs will be extended as arcs.
Example for extending curves to a boundary:
It is also possible to extend 2 curves to meet each other instead of meeting a single boundary. This is called mutual extend, and can be activated by selecting both curves, running Extend, and then clicking Done instead of choosing a boundary object.
Example of mutual extend mode:
![]() |
Show pts |
Turns edit points on or off.
You can also use the Esc key to turn points off, see Shortcut keys for more information.
When a curve has control points turned on, an additional edit mode is enabled if you click and drag on the body of an unselected curve. This enables "drag point on curve" mode where the curve will be deformed to pass through the point you dragged on. This works by moving several nearby control points in one single action, so it can be useful for roughing out the shape of the curve.
Curves and individual surfaces can always have points turned on. Solids made up of surfaces joined together at common edges can only have points turned on if all the surfaces share the same points along the common edge. If 2 joined surfaces have different structures along a joined edge, points cannot be turned on for that object because it would be easy to pull the surfaces apart and ruin the shared edge. In this situation it is possible to use Edit/Separate to break the joined object into multiple independent surfaces and you can turn on points for the individual surfaces.
![]() |
Add pt |
Adds a new point to a curve, or a new row/column of points to a surface.
For curves you can make a point that will form a sharp corner when it is moved by checking the "Make corner point" option, or holding down Ctrl when clicking.
To add many points, enable the Repeat checkbox, or right-click to repeat the last command.
There are 2 different methods for adding curve points. If points for the curve are turned on and you click on the dashed hull between 2 existing points, a new point will be added with the same effect as if you had drawn the curve with that additional point. Other points will stay where they are currently located and the shape of the curve will change slightly.
The second mode for adding curve points is activated by clicking directly on a curve that does not have control points turned on - this will create a new point nearby the area you clicked, and existing points will shift slightly, but the shape of the curve will remain exactly the same as before.
For surfaces you add in an entire row of points in the U or V directions and you pick a point on the surface to indicate the area of refinement. The shape of the surface itself will remain the same and the existing control points near the refinement area will shift slightly.
![]() |
Copy |
Copies selected objects to the clipboard.
You can copy an edge of a solid to the clipboard, which will copy the curve of the edge. You can then use paste to create a copy of the edge as an independent curve object.
You can use copy/paste to move objects back and forth between MoI and Rhino. You should keep both MoI and Rhino open at the same time when doing this type of transfer.
It is also possible to use copy/paste between MoI and Adobe Illustrator and some other 2D
illustration programs. MoI will recognize PDF or AI formats on the clipboard and be able paste
those into MoI using the regular paste function. Use one of the following scripts on a shortcut
key for going the other direction from MoI into Illustrator (it's not part of the regular copy function
because it has its own set of controls with various options):
script: /* Copy AI format to clipboard */ moi.geometryDatabase.copyToClipboardAI();
script: /* Copy PDF format to clipboard */ moi.geometryDatabase.copyToClipboardPDF();
Copy with origin |
Copies selected objects to the clipboard, with an additional step to define an origin point.
This is intended to be used in combination with the Paste part command which allows the pasted objects to be positioned and oriented to align to existing shapes. The origin point for the objects will be mapped to the target point picked during the paste.
This can be called either by right-clicking on the Copy button, or by the keyboard shortcut Ctrl+Shift+C.
![]() |
Paste |
Pastes in objects from the clipboard.
It is also possible to copy/paste objects between MoI and some other applications, see the Copy command above for some more information.
Paste part |
Pastes in objects from the clipboard, with an additional step for adjusting the orientation of the pasted objects, for example to align them to be perpendicular to an existing surface.
This is intended to be used in combination with the Copy with origin command which allows specifying an origin point for the copied objects, but it can also be used with the regular Copy as well. When regular Copy is used, the origin will be either the world origin or the cplane's origin if a custom construction plane has been set.
For more information on how the orientation works, see Orientation picker.
This can be called either by right-clicking on the Paste button, or by the keyboard shortcut Ctrl+Shift+V
![]() |
Hide |
Hides or shows objects.
If objects are selected when you press Hide, those objects will be hidden.
If no objects are selected when you press Hide, all hidden objects will be shown.
There is also an Isolate function available by right-clicking on the Hide button. Isolate will keep just the selected objects visible and hide all unselected objects. When you run Isolate a second time, everything will be restored to its pre-Isolate state.
If you only want to show some of the hidden objects instead of all of them, that is possible by holding down the Ctrl key when clicking the Hide button to perform a "show subset" operation. When doing "show subset", all the hidden objects will be temporarily displayed so that you can select which of them you wish to display. Once you have finished selecting, click Done or right-click and the regular display will be restored and any objects you did not select will return to being hidden.
In addition to this button, you can also use the Scene browser to hide and show objects in batches by clicking on the eye icons for different object categories. A left click on an eye in the scene browser will switch it between hidden and visible and a right click on an eye will isolate just that item and hide everything else.
![]() |
Lock |
Locks or unlocks objects.
When objects are locked, it prevents them from being selected but keeps them visible in the scene for either a visual or snapping reference. Snapping to locked objects can be enabled or disabled by a checkbox under Options > Snaps > Object snap options > Snap to locked objects.
By default when objects are locked, they switch to a grayed out color. It's possible to disable the color switch or adjust the color used under Options > View > Locked objects use alternate color. Uncheck the checkbox to avoid color switching, or click the swatch to adjust the color.
The Lock button works the same as the Hide button next to it.
Left click on Lock with objects selected to lock all selected objects.
Left click on Lock with nothing selected to unlock all objects.
Right click on Lock to "Isolate" the current selection by locking everything else other than the current selection. Right click again later on to restore back to the pre-isolate state.
Ctrl+Left click to do an "Unlock subset" which will temporarily show all current locked objects and allow you to select just a few of them to unlock. Once you have finished selecting, click Done or right-click and the regular display will be restored and any objects you did not select will return to being locked.
In addition to this button, you can also use the Scene browser to lock and unlock objects in batches. Hold down the Ctrl key when clicking on an eye in the scene browser to switch it back and forth between locked and unlocked.
![]() |
History |
Enables or disables history updating on an object.
Some commands have history updates enabled by default. For example, the Loft command will update the lofted surface if you edit one of the original curves. If you want to stop that updating, you can select the lofted surface, run the History command and click "Disable update". After that the lofted surface will no longer update when you edit the original input curves. Also, some commands have history disabled by default such as Transform > Copy or Transform > Rotate. You can use History > Enable update to turn history updates on for the results of these commands.
![]() |
Reset all |
Applies a view reset to all viewports.
The first click will reset views to focus in on just the selected objects, and clicking a second time will switch to focusing on everything regardless of selection.
You can also reset all viewports by right-clicking the Reset button inside of an individual viewport.
![]() |
Image |
Allows placement and editing of reference image planes.
Click the Add button to create a new image plane.
After an image has been added, it will show up in the list of all images. An entry in the list can be selected to hide, show, or remove it. Pausing your mouse over top of one entry in the list will show the full path to that image.
The Align button allows you to do image registration of the selected image by picking 2 points on the image, then 2 points in the model. The image will be moved, rotated, and scaled to make the picked lines coincide.
The Properties button will pull up an image properies dialog which allows editing the path to the image if you have moved it somewhere else. Also the image can be reloaded from disk, and also an option can be enabled here to embed the image data directly inside of the 3DM model file. You can also right-click on an image's file name as a shortcut for pushing the properties button.
The following options are also available and affect all images:
Draw below objects - choosing this option draws images as a backdrop behind everything else.
Draw with objects - this option draws images mixed in as if they were regular objects.
Draw above objects - this option draws images on top of everything else as an overlay. This is intended to be used with transparency, it gives you a way to always see a faint image without objects blocking the way.
Show in all views - shows the image in all viewports.
Show in ortho only - only shows the image in the Top/Front/Right views, not in the 3D view.
Transparency - you can put in a percentage here from 0% (fully opaque with no transparency) to 100% (completely transparent).
Background images are editable while you are inside this command. Click and drag on an image to reposition it. Dragging on a corner frame widget allows scaling of the image, and dragging on the rotation widget allows rotating the image. A click and release on the rotation widget instead of click and drag enables a different rotation mode that shows a 3-wheel rotation gizmo. When that gizmo is enabled you can click and drag on any of the 3 wheels to rotate around any of the 3 axes - click off of a wheel to exit this mode. Undo can be used to undo edits of the background images while still inside the Image command.
![]() |
CPlane |
The CPlane (Construction Plane) tool allows the drawing plane and ortho views to be relocated to more easily work on objects that are not aligned to the world axis directions.
Note that you can also draw directly on surfaces by using object snaps (see Drawing on surfaces for more info), so it is not always necessary to set up a CPlane manually. But you can set one if there is no surface already available where you want to draw, or if you want more detailed control over the drawing grid.
The CPlane will be situated by an origin point and x/y/z axis locations which are specified using the Orientation picker, and which can be snapped on to a surface or curve in the model to provide a working environment local to that area.
After you have set a CPlane, when you want to return back to the default world planes, press the "Reset CPlane" button that shows up in the command options area after launching the CPlane tool. You can also right-click on the View > CPlane button as a shortcut for resetting back to world planes.
Some options are available to set before placing the CPlane origin point.
When the "Apply to all views" option is enabled, the CPlane will be global and used in all viewports. If "Apply to all views" is disabled, then the CPlane will only be applied to the 3D view and the Top/Front/Right views will remain using their regular world axis planes instead.
When setting a global CPlane, by default the Top/Front/Right views will shift to become plan views of the CPlane, for example the Top view will shift to be looking straight down at the CPlane's Z axis rather than looking down the world Z axis direction. Views that have been shifted in this way will have an additional (cplane) label displayed in their titles. This view direction shift can be disabled by unchecking the "Orient ortho views" option.
Setting a global CPlane will also affect x,y,z coordinate point entry, with the coordinates evaluated in the CPlane's coordinate system instead of in world coordinates. For example typing in 0,0,0 will place a point at the CPlane's origin instead of the world origin. You can prefix typed in points with a w (for example w5,2,1) to enter in a world coordinate point instead when a CPlane is active. The x,y,z point coordinate readout in the bottom toolbar will also show the location of the mouse in CPlane coordinates instead, with a "c" being displayed in front of them to indicate they are CPlane coordinates and not world coordinates.
![]() |
Sel all |
Selects all objects that are not hidden.
If sub-objects are selected, the selection will be limited to other sub-objects. For example, if you have an edge of a solid selected, this will select all edges of that solid and not other objects.
![]() |
Desel all |
Deselects all objects
You can also use the Esc key to deselect objects, see Shortcut keys for more information.
![]() |
Invert |
Inverts the selection - selected objects will become unselected and unselected objects will become selected.
If sub-objects are selected, the changes will be limited to other sub-objects. For example, if you have an edge selected, this will invert the selection of all edges of that solid and not other objects.
![]() |
Boolean |
![]() |
Diff |
Cut an object by subtracting another object from it.
Select the objects to be cut first, then run Boolean Difference and select the cutting objects.
Different kinds of objects can interact with each other. For example, a solid can be cut by another solid, surface, or a 2D curve. It is also possible to cut a 2D curve using another 2D curve.
The Boolean can be limited to only cut specific faces of a solid by making a face sub-object selection before doing the boolean rather than selecting entire objects.
Example of Boolean difference between solids:
It is also possible to difference a solid by a 2D curve directly, creating a solid
as the final result. It is not necessary to extrude 2D cutting shapes into solids if
you want to cut all the way through. Here is an example of a solid being differenced
by a set of 2D curves:
Another example of solid/curve Booleans - here the solid is being cut by
line segments, resulting in smaller sliced pieces each of which is a solid (result
shown slightly separated here for illustration):
It is also possible to difference a solid with an open non-solid surface. This
will slice the solid into multiple pieces. Select and delete any pieces you
don't want to keep (result shown slightly separated for illustration):
Boolean difference also works between curves that are all on one common plane. Closed
curves can also have other closed curves nested inside of them to form hollow 2D regions:
![]() |
Union |
Fuse objects together where they intersect.
Solids can be unioned with other solids or surfaces, and 2D curves can be unioned with other 2D curves.
The Boolean can be limited to only intersect with specific faces of a solid and ignore others by making a face sub-object selection before doing the boolean rather than selecting entire objects. This can be useful to union just to one side of a thin walled object.
Here's an example of unioning 2 solids - at the start there are
2 different box objects. The skinny box is positioned so that it punches
through the wider box. After selecting them and running Boolean Union,
the boxes are combined into one object. New edges are formed where the
boxes intersected each other, and portions of each box that were inside
each other have been discarded to make one single connected volume.
Curves that are all on the same plane can be combined in a similar way:
An example of subset booleans, where the boolean is limited to a specific area by face selections.
Here are 2 solids pushing through each other:
If only the outer face sub-object of the other object is selected instead of the whole object, as shown here:
Then when doing a Boolean Union, only the outside face will get intersected and the unselected faces
along the interior will be temporarily ignored, producing this type of result:
This can be useful for combining objects on only side of a thin walled object.
![]() |
Isect |
Combine objects together, only keeping areas contained by all objects.
Objects to be intersected are treated as 2 different sets. Select one set, run Boolean Intersection, then select the other set.
Solids can be intersected with other solids, surfaces, or curves, and 2D curves can be intersected with each other. 2D curves that are all on a single plane will generate a curve result, or 2D curve profiles on different planes can be combined to generate a solid result.
Example of solid/solid intersection:
Here is an example of intersection between a solid and a 2D curve. The
area inside the curve will be kept. In a sense this is the opposite of
Boolean difference, which would instead drill a star shaped hole through the sphere.
Boolean Intersection can also be useful for creating a quick blocky 3D model
that is the combination of 2 2D profiles arranged 90 degrees to each other.
For example, here 2 curves are intersected to create a basic blocky car shape.
History is available for this type of intersection, so you can adjust the
curves and watch the 3D result update.
Another example of combining 2D profiles - final stage shown after using
Fillet to round the sharp edges:
Boolean Intersection can also be used on curves that are all in the same plane
to create a curve result:
Another curve intersection example:
![]() |
Merge |
Combines objects together and extracts all volumes.
Boolean Difference, Union, or Intersection all discard certain pieces. Boolean Merge cuts up objects in a similar way as those other commands except it keeps all the solid pieces. Merge can be used on solids, surfaces, or curves in different combinations.
Here is an example of Boolean Merge between 2 solids (pieces have been
separated for illustration):
2D curves can be Merged onto a solid to cut the solid by an imprint of the
curve, leaving all pieces:
Boolean Merge can also be used to extract a common solid volume from a set of
intersecting surfaces:
Merge can also be used on curves in the same plane:
![]() |
Fillet |
![]() |
Fillet |
Fillet is used to round off sharp corners.
Fillet will apply the rounding in different ways depending on what is selected.
Selecting an entire solid object will fillet all edges of the solid.
Selecting edges of a solid will fillet just those edges.
Selecting faces of a solid will fillet all the edges that belong to those faces.
Selecting 2 individual surfaces will perform a surface/surface fillet operation, instead of an edge-based one.
Selecting 2 curves will create a fillet between them, extending or trimming them if necessary.
Selecting a single curve that has corners in it (for example, a rectangle curve) will allow filleting of some or all of those corners.
Some examples of filleting:
At the "Pick fillet radius" prompt, you can either click 2 points to define the radius as the distance between those 2 points or enter a radius value directly. If you want to type in a value, it is not necessary to click in the Radius edit box first, you can just start typing and keystrokes will go there.
The Shape: option controls whether the fillet will be shaped as an exact arc or as a more organic blend type shape. The blend options show a slider that can be used to adjust the amount of bulge.
The Straight corners option controls whether rounded corners will be placed where fillets meet,
or whether the fillets will be extended to intersect each other directly:
Enabling straight corners will cause failures in some situations where the fillets do not directly
intersect each other when they are extended. Here is an example that won't work, notice the
hole that would be created if this were attempted to be filleted with straight corners. The final
step shows how a corner patch is needed in this case to connect the pieces together:
Fillets tend to be a complex area of calculation, and places that have small slivery surfaces or a lot of edges coming together at one shared point will tend to increase the chances that the fillets will fail to calculate. Trying to build things using broader surfaces and with more simple corner structures can help.
Also one common cause for fillets failing to calculate is asking for too large of a radius than will fit inside the model. Try starting with a small value such as 0.1 and gradually increasing it. Often times it is surprising how much space a fillet of a seemingly small radius like 1 or 2 will occupy in a model, especially if the model has any thin or concave type areas.
Areas with tight bends in them can also limit the maximum possible fillet size. Here is an example
to demonstrate - imagine that the bent curve corresponds to a tightly curved area of
a model, and the line represents a fillet radius that is larger than the size of the bend.
As the filleter travels along the curve, it will try to maintain this distance, but you can see
how this will cause a pinched and bunched up area around the tight bend where the lines are not
cleanly separated and intersect with each other. The same kind of self-intersecting and bunching
would happen to a fillet surface that tried to maintain a large radius as it goes through a tight bend.
If you want to place larger fillets on your model you usually need to avoid making very tightly
bent areas like this:
Normally fillets on a solid are applied to edges of the model. An alternative filleting mechanism is available by selecting 2 individual unjoined surfaces and running Fillet (you can use Edit/Separate to break a joined model up into individual separate surfaces). This style of surface/surface fillet is created by processing just the 2 surfaces instead of making the fillet try to follow edges, so it can succeed in places where the edge-based fillet will fail. This can sometimes be used to create fillets one piece at a time in difficult areas. The tradeoff is that these fillets will tend to require more manual trimming where pieces meet up while the edge-based filleting automatically trims and handles corner areas.
A variable radius fillet can be performed where the fillet radius changes at certain spots along the edges like this:
You can use variable radius fillets by expanding the "Fillet set" section in the fillet options, and adding in a new point set by picking points on the edges. Once you have defined a point set, the next radius you enter will control the radius just at those points. You can click on the "Current set" line to pop up a menu to control which set is currently active and being manipulated by the Radius control, and also to delete prior point sets. There is a demonstration video for variable radius fillets here: Variable radius demo on YouTube.
![]() |
Chamfer |
Chamfer is used to chop off sharp corners with a small flat piece.
It is very similar to Fillet, but instead of placing a rounded area it places a facet.
Examples of chamfering:
Chamfer also has the option of specifying 2 different distances to control the
slope of the facet. If faces were selected to chamfer, those selected faces will
have distance 1 associated with them, with distance 2 applied to the adjacent
unselected faces. If edges instead of faces are selected to chamfer, the edges
are examined to see if they have a face in common and if they do that common face
will use distance 1, with distance 2 applied to the adjacent faces. Here is an
example - the top face is selected and a chamfer is then applied using
distances of 1 and 3:
![]() |
Offset |
![]() |
Offset |
Create a new object at a constant distance away from an existing one.
Offset can be used on solids, surfaces, or curves.
Examples of Offset:
Offset tends to be used more often on curves, with the Shell command being used instead more frequently on solids or surfaces.
For curve offsets, Through Pt mode will let you pick a point and calculate the offset that passes through that point. Distance mode allows entering a specific offset distance and then you pick which side of the curve to offset towards by clicking with the mouse.
Offset for surfaces or solids allows you to either pick 2 points to define the offset by the distance between the points, or enter a specific distance.
![]() |
Shell |
Modify a solid or surface to have a wall or slab thickness.
If an entire solid is selected, the result will be an object with a hollow cavity inside of it. If faces of a solid are selected (which is the more typical way to use it), openings will be created along those faces with the thickness applied to the unselected faces. If an individual surface is selected, it will be thickened into a slab-like solid.
At the "Pick thickness" prompt, 2 points can be clicked and the distance between them used as the thickness, or an exact thickness can be entered numerically. The Direction option controls which side the thickness will be added to, with Centerline placing half of the distance in either direction.
Usually it is best to shell either a completely closed solid, or a single surface. Trying to shell objects made up of several joined surfaces that do not form a closed solid can tend to fail. It is difficult for MoI to create corners that match up with one another in that situation. Try to create a fully completed solid to shell instead to have a better chance at success.
Surfaces with tight bends or twists in them can cause problems in shelling, especially if the radius of the bend is tighter than the shell thickness.
Examples of shelling:
![]() |
Inset |
Generates either a depressed or raised panel that follows the outline of faces.
The Inset command takes a selection of face sub-objects for its input.
Examples of inset:
The thickness distance sets the border size of how far the panel shrinks in from the border, and also how far it protrudes as well. The protrusion amount can be adjusted separately if you want by the "Use separate height" option. You can set the thickness either by typing a value or by clicking 2 points inside of a viewport which will take the distance between those points as the thickness.
The Direction option sets whether the protrusion goes towards
the inside of the object, or towards the outside. The first example
here has Direction = Inwards, the second has Direction = Outwards:
When Direction is set to "Outwards" an additional "Expand"
checkbox will appear which can be set to make the panel outline
grow in size rather than shrink. This makes a kind of hat placing
effect:
The "Grooved" option can be checked which will enable an
additional Groove width that can be set to produce results like
this (first one with Direction = Inwards, second one with
Direction = Outwards):
If you set the "Grooved" option but do not enter a groove width or set groove width = 0, that will cause an interior plug part to be generated as a separate object from the main one.
![]() |
Planar |
Create a planar surface from outline curves, or fill in end caps on planar openings on surface edges.
Curves that form a closed loop will be turned into a trimmed planar surface. It is possible to have nested outlines to form holes. Planar will join curves together during its processing, it is not necessary to run join before it as a separate step.
For surfaces, unattached edges will be examined, and if they form a closed planar loop a trimmed plane will be created and joined together there.
Examples of creating planar surfaces:
![]() |
Extrude |
Creates a solid or surface by tracing an outline along a direction.
Extrude works on selected curves or faces. Closed curves may contain other closed curves inside them to form holes in the final result. If the automatic assigned direction is not what you want, you can click the "Set dir" button and click 2 points to define a specific extrusion direction.
Example of extrusion:
Extrude also has a "Set path" option which enables you to pick a path curve to be used as the extrusion shape instead of the regular straight line path. The outline and the path curve are combined together to make the output shape. This is different than sweep since sweep rotates the profile staying perpendicular along the path while Extrude will not rotate it. Extrude with Set path has the special property that the output surface will have the exact same control point structure as the curves used to generate it, so sometimes this can be useful if you want to set up a surface and manipulate the surface's control points to deform it.
An example of Extrude with a path:
Other options for Extrude include extrude to point which can be useful for making
pyramid or cone-like objects:
For extrude to point, initially the point will track along the same vertical line
through the shape's centroid that the regular extrude also tracks along. If you want to
pick a point away from that line for the tip you can push the "Unlock direction" button
which will then allow you to place the top point anywhere.
The "Tapered" option allows you to produce an extrusion with a draft angle applied to make the side walls
at a specific angled slope. You can also have interior outlines which will flare in the
opposite direction. The height of the tapered extrusion will generally be limited to be less than
whatever amount would cause different sides of the profiles to collide into one another:
If you select a face sub-object of a solid as the input for extrude, the result of the extrusion will get automatically booleaned with the base object, allowing for a "push/pull" type action on solids. Extruding the face in an outward direction makes a Boolean Union of the results, while going inwards does a Boolean Difference. See here for an animated example of face extrusions with auto booleans: Face extrusion forum post.
![]() |
Revolve |
![]() |
Revolve |
Creates a solid or a surface by tracing an outline as it pivots around an axis.
Two points are picked as the revolve axis, which acts as a kind of hinge that rotates the outline around it. If you want to alter the angle of revolution, change the option for it before you finish picking the points for the revolve axis.
Examples of revolution:
![]() |
Rail revolve |
Creates a solid or surface similar to revolve, but an additional path curve is specified.
In a simple revolve, the profile sweeps a uniform circular path around the axis. In rail revolve, you can supply a custom path instead of the regular circular path. The resulting surface will be scaled from the axis to conform to the custom path.
Some examples of rail revolve:
![]() |
Loft |
Creates a solid or surface passing through cross-section profile curves.
Examples of lofting:
The option for Loft Style can be adjusted. The "Normal" style creates a loft that passes through the profile sections. "Loose" creates a surface that is guided by the profiles but not forced to go exactly through each one, this can help to create a more relaxed and smooth surface if you are having problems with wiggly output. The "Straight" style creates straight sections in between each profile instead of making a smooth surface through all the profiles.
MoI automatically aligns the profiles together to minimize twist, but this can be adjusted. At the Loft options prompt, you can click on any profile to reverse the direction of the profile, and on closed profiles a point will appear that can be dragged to edit the connecting seam point.
Part of the process of lofting is combining the multiple profiles together into one common structure to make a single surface. The Profiles option controls how this combining is done. The "Exact" option combines the curve structures by inserting all the points for every curve together. This preserves the shape of each profile, but can result in a very complex surface with too many points if each curve had different point structures. The "Refit" option reconstructs each curve to a common structure. This results in a less complex final result, but can sometimes introduce wiggle artifacts in the reconstructed curve. The default "Auto" option tries to do Exact mode, but switches to Refit mode if Exact mode generates too complex of a result. Finally, the "# Points" mode is another style of rebuilding that samples a uniform number of points along the curve for the reconstructed curves. You can choose how many points are used. This mode results in very smooth output, but small details in the profiles tend to be lost.
It's possible for a point object (created under Draw curve > More > Point) to be selected for the
start and/or end profile section of a loft. This can work well with Loft Style = "Loose" mode for generating
an organic shape with a smoothly closed tip. Put the ending point object in the same plane as the last planar
profile curve with Loft Style = "Loose" for results like these examples:
![]() |
Sweep |
Creates a solid or surface passing through cross-section profiles, guided by one or two rail path curves.
Select the profiles first, then run Sweep and select the rails next.
Sweep has different options and behavior depending on whether you use one or two rails. Selecting 3 or more rails will be treated as a batch operation performing a one-rail sweep along each rail.
One rail sweep:
Sweep using one rail will trace the profiles as they move along the rail, staying perpendicular to the rail as they slide along it. It is the main tool for making tubular type shapes. Profiles may be either placed directly along the rail, or you may place the profiles all flat on a plane away from the rail and MoI will automatically move and rotate the profiles into place along the rail for you. To enable auto-place mode make sure the profiles are positioned outside of the bounding box around the rail curve. Multiple profiles may be used in auto-place mode by placing the profiles in a left to right order.
Example of sweep with one rail:
If the rail has sharp corners in it, and there is only one profile curve,
the resulting sweep will be mitered at the corner areas:
You can use the Ends: option to make a one-rail sweep collapse to a single point at the start or end to make a tentacle type shape.
By default, a one-rail sweep will gradually rotate the profile as it travels along the
rail curve. This works well for paths that loop all over in 3D, but you can change the
Twist: option to Twist:Flat to only allow rotations in the world Z axis direction, which
keeps the profiles stabilized with respect to the ground x/y plane. When Twist:Flat is set,
an additional "Set flat direction" button will show up in the command options, which
you can push to pick 2 points to define which direction to use instead of the default
Z axis direction. Twist:Freeform is the default
since it works on any shape of path, while Flat does not work on paths that have a tangent
in them that goes straight upwards in Z. In this example the
second image has Freeform twist, and the last one has Flat twist:
The scaling rail option allows you to pick an additional rail curve which will deform the
sweep. The profiles from the original sweep will be scaled up to match up with the scaling rail.
In a sense it provides a way to control the length-wise profile of the sweep. When a scaling rail
is active, the "Maintain height" option can be used to control whether the scaling will be applied
only in one direction towards the rail resulting in a kind of stretching effect, or whether the
profile will be scaled in all directions uniformly. A scaling rail allows you to
further refine the shape of the sweep using just one curve that can be more easily
controlled than using a large number of cross-sections. The scaling rail should cover
the full extent of the sweep, with each profile being able to extend perpendicular to touch it.
An example of using a scaling rail, shown first with the regular sweep then with the scaling rail active:
Two rail sweep:
Sweep with two rails traces one or more profiles as they slide along 2 guide
rails on either side of the profiles. The profiles can either be positioned
directly on the rails, or same as one-rail sweep the profiles can also be
positioned flat on a plane away from the rails (outside the bounding box
around the rails), and they will be automatically positioned. An example
of two rail sweep:
When the "Maintain height" option is enabled, the profiles will stretch just in one direction to fit between the rails. When it is disabled, the profiles will scale in all directions uniformly when they are fit between the rails.
The scaling rail option works similar to one-rail sweep, it allows you to pick
an additional rail curve to stretch the profiles up to. In this case the scaling
rail should generally run down the middle between the 2 rails. An example of
two-rail sweep with a scaling rail:
The Maintain tangent option can be used in certain situations to make a sweep
that will mirror without a crease. Consider this sweep and the result after mirroring it:
The reason for the creasing is that the different shaped rails cause some twisting
of the profile shape as it slides along them at slightly different distances.
Preserve tangent mode can be activated in situations like this to prevent this
kind of twisting. To enable preserve tangent mode, all the profiles must share
a common tangent direction along one rail, and they all must be parallel planar
shapes. This mode slides the profiles along keeping them in the same plane. Here
is the previous example swept with Preserve tangent active and then mirrored:
Both one-rail and two-rail sweep also combine profiles together into one common structure similar to Loft. See Loft above for details on the Profiles option.
![]() |
Blend |
Creates a new piece that makes a smooth connection in the empty space between 2 existing pieces.
Blend can be used on either curves or surfaces. To use it on curves, select near the ends of the 2 curves you want to blend between. To use it on surfaces, select a sequence of unattached surface edges on either side of the blend area. Note that if you have independent curve objects overlapping your surface edges (for instance some of the original curves used to build the surface), it is easy for those curve objects to get selected when you click instead of selecting the edge of the surface. It may be necessary to delete or hide these original curves so that the edge of the surface object can be selected instead, that is an easy problem to run into when using Blend.
Blend is used when objects are not touching but you wish to connect them together. If they are already touching, then use Fillet instead - Fillet will trim back areas to make space for the radius that you request, unlike Blend.
For surface blending, the edges are connected by distance traveled along the rail. If that results in some amount of skew, you can use the "Add sync points" option to pick specific locations for where the rails should be connected together.
For surface blending, by default each side of the blend will come off perpendicular from the edge curve. Around tight bends that can cause bunching where the blend sections run over top of each other. The "Planar sections" option enables a different mode for the blend cross-section behavior where each cross-section goes on a plane which can help reduce this type of bunching. See here for some more information on the Planar sections option: Planar sections forum post.
Some examples of blending:
![]() |
NSided |
Creates a radial set of surfaces to fill in a hole bounded by open edges.
NSided takes an input of at least 3 surface edges that touch end-to-end to form a closed loop. Make sure edges are selected, not curve objects. A star-like pattern of surfaces will be calculated to fill in the loop around a central point. Surface density and a bulge factor can be adjusted in options.
NSided examples:
![]() |
Network |
Creates a surface from a 2-directional network of curves.
To create a network surface, select all the curves that make up the network before running the command.
The curves that make up the network should form a kind of 2-directional grid, similar to a fishing net. A network surface is sort of like doing a loft in 2 directions simultaneously. MoI needs to be able to organize the curves into 2 different sets for this command to work. It is not necessary for the curves to exactly intersect, but they should come close to each other since that helps MoI detect the organization and separate them into 2 different sets. The network can be closed in either direction and can also come to a point.
You can also use Network to create a surface from 3 or 4 curves that touch end to end in a loop, sometimes this is referred to as a "Coons patch".
The "Mode" option can be adjusted to modify the fitting behavior.
You can use one of the other modes than "Normal" if you want to output a less constrained
and lighter surface at the expense of it not hugging as tightly to the boundary curves.
Mode = "Normal" fits the boundary curves by the regular fitting tolerance.
This makes the resulting surface hug the shape of the boundary curves accurately
enough so that it can be joined to other surfaces built off of those same curves.
Mode = "Lighter" makes the surface fit to a looser tolerance, making a lighter surface
but that adheres less to the boundary curves.
Mode = "Custom" - allows you to enter in a numeric tolerance value of your own choosing.
Mode = "Uniform" - allows you to enter in a number of points - each section of the Network
is fit with that fixed number of control points per region rather than refining things adaptively
to meet a distance tolerance like the other modes.
Mode = "Exact" - enabled for 3 or 4 sided networks only. This mode makes a Coons path
with no refitting of the input curves. The surface's edges will exactly coincide with the input
curves but if the curves have uneven parameterization the surface can tend to be awkwardly
bunched in places.
Some examples of network surface:
![]() |
Curve |
![]() |
Project |
Projects a curve on to a surface or solid.
First select the curve, then run Project and then select the surface or solids that will receive the curve. A default direction will be used, and you can pick 2 points to define a different projection direction.
Example of curve projection:
![]() |
Isect |
Creates curves or points at intersections between objects.
Select all the objects to be intersected before running the command.
Curves will be created at the intersections between 2 surfaces or solids, and points will be created at the intersections between a curve and other objects.
Unlike the Booleans, this does not modify the objects, it just creates new curve or point objects.
This command can also be used to create a "curve from 2 views" when the inputs are 2 planar profile curves facing different directions. This is the equivalent of doing an extrusion of each curve and intersecting the extruded surfaces.
So for example with these 2 curves one of which was drawn in the Top view
and one in the Front view:
You can select both of those curves, and run Construct / Curve / Isect to
generate this result curve:
![]() |
Silhou |
Creates silhouette curves that give the profile of a curved surface from a particular view.
This can be useful to run before exporting to AI format - set up your view how you want it, then run Silhouette to generate the outline curves, then immediately export all of that to AI format. Make sure not to rotate or zoom your view in between generating the silhouettes and exporting because the silhouettes are tied to a particular viewpoint when they are done in the 3D view.
The "Include edges" option controls whether to include trim edges that are silhouettes (for example the edges on a box) in the results in addition to curved surface silhouette calculations.
For example given this model:
Running Silhouette on it will generate these result curves:
![]() |
Iso |
Creates an Isocurve going through a point on a surface. An Isocurve is a curve on a surface that runs along the surface's own U or V directions. They can be convenient for some operations since they follow the natural rectangular layout of a surface.
On several types of primitives isocurves will be key features of the object like for example on a sphere one isocurve direction will be a circle of latitude on the sphere and the other direction will be an arc of longitude on it.
Example of Isocurves:
![]() |
Move |
Moves objects by the displacement between 2 points.
Generally most object movement is done by directly dragging on an object
while not inside of any command, instead of using this command. However, the
Move command is provided so that it is possible to do precision movement
using any 2 snapped points. Here is an example of moving a circle so it is
centered about the origin. This is done by snapping the base point to the
center of the circle and the target point to the origin.
This would be more difficult to do with the quick dragging method since dragging is activated by clicking directly on the object, so it is not possible to grab the center point of a circle as the base point when dragging.
When picking the target point the "Distance from edge" option can be clicked and a distance specified, which will then place the target point at that distance away from any line that is snapped on to.
You can click the "Bounding box center" button at the first prompt to use the center of the object's bounding box as the base point.
![]() |
Copy |
Create copies of an object, placed at specific points.
Copy works similar to Move, but allows you to click multiple target points and drops a copy of the objects at each one.
Use Edit/Copy and Edit/Paste instead if you want to create a duplicate of an object in its exact same location.
![]() |
Rotate |
![]() |
Rotate |
Rotates objects around a center point.
To rotate objects, first select the objects and then run the Rotate command. Next pick a center point for the rotation. After you have picked the center of rotation you can then either type in a number for the angle to rotate by, or you can use the mouse to pick an angle. To use the mouse you pick 2 additional points that act as arms or handles coming out from the center point. The angle between these 2 arms will be the angle of rotation. The angle is specified using these 2 clicks so that it is possible to snap on to existing objects to calculate a precise rotation.
Example of rotating a rectangle 90 degrees using the mouse:
After selecting the rectangle and running Rotate, pick the center point
for the rotation, in this case the center of the rectangle:
Next, the first angle reference point is placed off to the
right snapped to the x axis. This sets the starting point for the angle:
Finally, the second angle reference point is placed off to the top snapped
on to the y axis. This sets the ending point for the angle. The object will
rotate by the angle between the 2 reference lines:
Here's an example showing how the points can be snapped to calculate a
precise rotation relative to existing objects, in this case snapping on to the
corners of the rectangle, with the center of rotation off to the left side:
You can check the "Make copies" button or hold down the Ctrl key when clicking the last point to drop rotated copies of the object.
![]() |
Rotate Axis |
Rotates objects around an axis line.
The regular Rotate command operates in a 2D fashion relative to the grid. Rotate axis allows you to pick 2 points to define an axis line to rotate around. It can be used to rotate around an arbitrary direction that is not aligned with any grid.
The operation is similar to 2D rotate, except instead of a center point you pick 2 points to make an axis line. Then you can enter a numeric angle to rotate by, or use the mouse in the same way as 2D rotate, with 2 reference arms tracking out from the first point of the axis.
An example of rotating a polygon up 30 degrees from the x/y plane around one of its own edges:
After selecting the polygon and running Rotate Axis, the first axis point is picked
at one corner of the polygon:
The second axis point is picked at the other end of the polygon's edge:
Then 30 was entered for the angle, resulting in the polygon rotating up from the x/y plane
by 30 degrees:
The rotation axis works as kind of a hinge and the objects pivot around that hinge.
You can check the "Make copies" button or hold down the Ctrl key when clicking the last point to drop rotated copies of the object.
![]() |
Scale |
![]() |
Scale |
Scales objects around a center point.
This type of scaling is sometimes called a "Uniform" or "3D" scale since it scales equally in all axis directions.
To scale objects, first select the objects then run the Scale command. Next pick an origin point for the scale. This will be the fixed point which the objects will scale around. After you have picked the origin for the scale you can then either type in a number for the scale factor, or you can use the mouse to pick a scale factor.
When entering in a number for the scale factor, 1 represents no scaling. So for example:
2 will double the size of the object,
0.5 will shrink the object to one-half the original size,
10 will increase size by 10 times,
0.1 will shrink the object to one-tenth the original size,
etc...
You can set the scale factor using the mouse by picking 2 additional reference points. The relative distances of these points from the scale origin determines the scale factor. For example, if the second point is twice as far away from the origin as the first point, the scale factor will be 2.0 .
Example of scaling a rectangle using the mouse to set the scale factor:
After selecting the rectangle and running Scale, pick the center point for
the scale, in this case the corner of the rectangle:
Next pick the first reference point. In a certain sense this point will calibrate
the scale and set the distance that will correspond to a scale factor of 1. In this
case the opposite corner of the rectangle was picked. Often times the first reference point may
be snapped on to the perimeter of the object away from the scale origin:
Then the final reference point determines the scale factor, comparing its distance
with the first distance. If you move the second reference point further away from the
scale origin than the first reference point, the object will become larger:
If you move the second reference point closer to the scale origin than the first
reference point, the object will become smaller:
Scale works with reference points in this way to make it possible to snap points
on to strategic areas to calculate scaling measured to existing objects. For example,
say you want to scale up a rectangle by just the exact right amount so that it would
touch an object above it. This is possible by careful picking of the reference points
to measure the existing distance, and then the desired new distance. The proper scale
factor for converting the existing distance into the desired distance will be calculated
and applied to scale the object:
You can check the "Make copies" button or hold down the Ctrl key when clicking the last point to drop scaled copies of the object.
![]() |
Scale 2D |
Scales objects around a center point, stretching them just in 2 axis directions.
Scale 2D works similar to Scale except the scaling is not applied in all directions, it is only applied in one 2D plane. The plane used depends on which viewport the origin point is picked in, so you will get a different effect if you pick in the Top view versus the Front view for example. The directions used correspond to the x and y axes of the viewport's grid.
See regular Scale for details on how the reference points work.
Example of scaling a cylinder with Scale 2D. The cylinder is widened in the x/y plane,
but its height remains fixed:
![]() |
Scale 1D |
Scales objects along a single direction.
Scale 1D is similar to scale, except the scaling is only applied in one direction. The direction is defined by the line between the origin and the first reference point.
See regular Scale for details on how the reference points work.
Example of scaling a circle into an ellipse along a diagonal:
Scale 1D can be used to stretch or compress an object to a new height while
leaving its shape unchanged in X and Y. For example, here a piece is stretched
in z by picking the scale origin at the bottom of the piece, the first reference
at the top of the piece directly above scale origin (this forms a line going along
the z axis which will be used as the scaling direction), and then the final
reference point at the new height above it.
In the previous example, picking the final point lower than the first reference point would result in the piece squishing down to be shorter instead.
![]() |
Mirror |
Creates a mirrored copy of an object around a dividing line.
To mirror an object, select it then run the Mirror command. Next 2 points are picked to define the axis that the object will be reflected around.
The new mirrored object has history updates enabled by default so the mirrored version will update when you edit the original.
![]() |
Array |
![]() |
Grid |
Duplicates objects in a rectangular or cube layout.
To create a grid of duplicated objects, select the objects to duplicate and run the Array Grid command. At the "Choose number of copies" prompt, enter the number of elements to use for the grid in x, y, and z and click Done. Then the final stage is for entering the spacing that will be used between each element of the grid. This can either be typed in, or you can draw a rectangle or box around one element to define it.
Here is an example of drawing the spacing with the mouse and the result (result shown zoomed out):
![]() |
Dir |
Duplicates objects along one direction.
To create a duplicated column of objects, select the objects to duplicate and run the Array Dir command.
The Mode: option controls the spacing behavior.
With "Mode: Offset, Count", the "Item count" option controls how many copies will be made, and you pick 2 points to define both the direction and the spacing between the copies.
With "Mode: Extent, Count", you also give an item count and 2 points, but the distance between the points is taken as the full extent, with the offset distance between copies being calculated as a distribution to fit inside of that.
With "Mode: Offset, Extent", you instead pick 2 distances and the item count is calculated for you and displayed in the options panel. Either start with the small distance as the offset, and then move your mouse further for the second distance to create as many copies as will fit within that longer distance, or start with the long distance first and move your mouse closer to the base point to reduce the offset and generate more copies within that extent.
Example of Array Dir with Mode: Offset, Count. In this case a 5-sided polygon is being duplicated. The first
point was placed in the lower-left corner, and the second point was placed in the opposite
corner as indicated. The distance and direction between these 2 points defines the placement
of the duplicates:
![]() |
Circular |
Duplicates objects in a circular pattern around a center point.
To duplicate objects in a circular pattern, select the objects to duplicate and run the Array Circular command. Next, pick the center point for the pattern, and finally different options for item count and angle can be adjusted.
You can click on the "Angle to fill" label with the small arrow on it to switch between specifying the angle for the full pattern, or the angle for just one single step.
The vertical and radial step options allow you to specify a distance to move each item
for every step in the pattern. Vertical controls up and down movement, and radial controls movement
away from or in towards the center point. This can be used to create spiral type patterns.
Here is an example that used an Item count of 50, Angle to fill of 900 degrees,
Vertical step of 1 to move upwards one unit for each step, and Radial step of -0.3,
to slide a small distance in towards the center on every step:
![]() |
Curve |
Duplicates objects along a path curve.
To duplicate objects along a path curve, select the objects to duplicate, then run the Array Curve command. Next, select the path curve. Finally, you can adjust options for spacing and rotation and click Done when you are finished.
You can enter either the number of items you want to have along the path, or the distance between items. If you enter in a total number of items, the distance will be calculated for you. If you enter in a distance, the number of items that fit along the path using that distance will be calculated for you.
There are different options for controlling the orientation of the objects as they travel along the path.
Rotation:Freeform calculates a change in orientation by doing a gradual rotation around the curve tangent. This means that there isn't any abrupt change at any one point, but the orientation will be constantly changing and in some cases can end up upside-down.
Rotation:Flat will only do rotations about the world Z axis. It will swing the object around the z axis to point it as much as possible in the tangent direction of the curve, but it will always stay pointing upwards, giving it a kind of stabilizing effect with regard to the z axis. This can work well for simple path curves, but it doesn't work well if the path curve slopes upwards very sharply with any parts tangent or nearly tangent to the z axis.
Rotation:None performs no orientation of the object at all and just moves it along the path curve.
Example of duplicating along a path curve. In this case the object to be duplicated is a box
and the path curve is a circle that has been edited to have a wavy shape:
Rotation:Freeform produces this result:
Rotation:Flat produces this:
Rotation:None produces this:
![]() |
Align |
Lines up control points or objects along a straight edge.
To align objects, select the objects or points to modify and run the Align command. You can then adjust the options for performing either a vertical or horizontal alignment and how objects will stack up against the alignment edge (like along the tops or bottoms of the objects or through the center, etc...). To finish the alignment, pick a point to define the location of the alignment edge.
When multiple objects are selected for the align, a "Move as group" checkbox option will appear. When enabled it causes the objects to move as an entire set to their overall combined bounding box rather than each one moving individually.
Example of using align to center objects along a horizontal edge through
the center of a rectangle:
Another use for Align is to adjust the 2 control points at the end of a curve to be exactly horizontal or vertical with each other. The 2 points at the end of a curve control the ending tangent direction of the curve, and if the end tangent is lined up it will allow for mirroring the curve without any sharp crease between the mirrored copies.
An example of aligning control points in preparation for mirroring around
the vertical axis. This curve had points turned on by Edit/Show pts. The points
are not aligned horizontally - if this curve is mirrored now there will be a
sharp corner between the mirrored copies. To fix this, select the 2 points:
Next, set the alignment option for "Horizontal center", and then pick
the point to define the alignment edge, in this case picking the end point
will define the alignment edge through the end point:
This results in the 2 points being lined up with one another and now
the curve can be mirrored without a sharp crease forming:
![]() |
Orient |
![]() |
Orient |
Positions and rotates objects from a base frame to a target frame, with a focus on positioning objects relative to one another.
Orient can be used to match a planar face on one object to coincide with another plane on a different object, or to map an object to a surface normal on a curved surface.
Here is an example where a cylinder is being reoriented to
match the side of a pyramid:
To use Orient you pick a base orientation, and then a target orientation, and the selected objects will be mapped from the base to the target. In the example above, the base orientation was picked at the center of the cylinder's cap and the target orientation was picked on the sloped pyramid side.
Each orientation pick consists of 2 steps. The first step is to place the origin point. If the origin point is snapped on to an object the x/y/z axis directions will be initialized to be aligned to that object, unless you disable the "Align to objects" option. After the origin point is placed, the second step is to optionally adjust the axis directions by dragging on an axis line to alter where it points towards. Press the "Done" button or right click in a viewport when the axis directions are configured how you want.
For simple placements where you don't need to adjust the rotation you will do 4 clicks total: 1 click to pick the base origin point, 1 right-click to accept the default rotation, 1 click to pick the target origin point, and 1 more right-click to accept the default target rotation.
Also see Orientation picker for some more details.
You can enable the "Make copies" option or hold down the Ctrl key when clicking the target origin point to drop copies of the selected objects and keep the original in place.
![]() |
Line/Line |
Transforms objects from a base line to a target line.
First 2 points are picked to define the base line, often times these points will be snapped on to the ends of a curve that is being transformed. Then 2 more points are picked to define the target line.
The objects are moved, rotated, and also optionally scaled to match the first line to the second.
The Scaling option allows for scaling to be disabled, or for scaling to happen by stretching in one direction only instead of uniformly.
You can enable the "Make copies" option or hold down the Ctrl key when clicking the target line to drop copies and keep the original objects in place.
Here's an example where a curve is being transformed so that
its ends coincide with another curve's endpoints:
![]() |
View/View |
Remaps objects from one view to another view.
You control which views are used by clicking inside of them, first do one click inside the source viewport (anywhere in it, it doesn't matter on which specific point), and then click once in the target viewport.
So for example if you have imported some 2D curves that are flat in the Top view, you can use this command to quickly shift them to be flat in the Front view instead, same as rotation by 90 degrees but without needing to do the rotation in some other side view.
You can also click in the 3D view as either a source or target view which will use the camera's view direction for the orientation.
![]() |
Deform |
![]() |
Flow |
Deforms objects by mapping them from one backbone curve or surface to another.
Flow is a versatile deformation tool which can help with the construction of curved pattern details, by taking objects that were initially modeled as flat 2D patterns and warping them into a curved shape. Being able to initially construct a rigid 2D shape made up of straight pieces can often times be an easier approach than trying to model the final curved shape directly in place.
Flow works with 2 different modes, curve-to-curve mode or surface-to-surface mode. The mode is determined by whether you select a curve or a surface at the prompt for picking the base object.
For curve-to-curve mode, start by selecting the objects you want to deform, then run the Transform > Deform > Flow command, then click on the base curve followed by a click on the target curve. The ends closest to where you click on the base and target curves will be matched together to be used as the starting points for the deformation. Usually the base curve is a line running down the center of the straight shape and the target curve is a bendy curve.
By default curve-to-curve Flow will match distance traveled along the base curve to the same distance traveled along the target curve. If you enable the "Stretch" option this will change to instead map by percentage along each curve, stretching or squishing the result if one curve is longer or shorter than the other.
Some examples of curve-to-curve flow:
Mapping some text onto a curve, here the base curve is the line under the text,
the bendy curve is the target curve:
You can use curve-to-curve flow to bend an object into a circular shape by using a straight
line through the object as the base curve, and a circular arc as the target curve:
Deforming a pattern created with Transform > Array tools onto a curved shape:
Deforming an ellipsoid into a hook shape:
A helix can be deformed to follow a curve to make a path for a phone cord sweep:
Sometimes it can be useful to position objects vertically above the curves, for example here
text positioned vertically above the base line is wrapped into a cylinder shape by using a circle
as the target curve:
For Flow surface-to-surface mode, start by selecting the objects you want to deform, then run the Transform > Deform > Flow command, then click on the base surface followed by a click on the target surface. Usually the base surface is a flat plane running underneath or through the middle of the objects and the target surface is a curved surface.
Surface-to-surface Flow has 2 different ways of working, regular mode and "Projective" mode. Regular mode works by applying objects across the entire target surface similar to texture mapping. Projective mode works by projecting onto a small region of the target object, more like applying a decal. Projective mode is activated by enabling the "Projective" checkbox that shows up in the stage where you pick the target surface. For regular mode the particular location of the base plane in relation to the target surface does not matter (but the click locations on each do matter, see below), while for Projective mode the objects to deform and base plane should be positioned above the area that receives the projection.
An example of regular surface-to-surface mode, the base plane matches to the entire width and height
of the target surface:
An example of projective mode, the base plane projects down along the plane's surface normal direction
onto a local area of the target object. The position and orientation of the base plane above the target
object is significant in this mode:
For non projective mode, the locations that you click on both the base surface and target surface are significant and control how the horizontal and vertical directions of each surface will be matched to one another. You need to click nearby an edge of each surface, towards the start or end of the edge. The pattern will be rotated and reflected as needed to make the picked locations match with one another. If you do not click each surface with care it is easy for unwanted rotations to happen. Following is a visual example for where to pick.
In this example there is a pattern on a base plane that we want to put on the cylinder:
Note that before doing the Flow only the objects to be deformed should be selected, the base plane
running under them should not be selected yet. You will select the base plane only after starting the
Flow command. At the prompt for selecting the base surface, click on the base plane nearby one of these
8 locations marked here with a red dot:
Those 8 locations are spots along an edge towards the start or end of the edge. You do not want to click exactly on the corner of the base surface because you want to target an edge and clicking directly on the corner creates ambiguity between the 2 different edges that are connected to that corner. You can use any one of these 8 click locations, but since in the next step you will be clicking on the equivalent spot on the target surface it can be good to use a location that is easily reachable on the target surface.
For this case, let's say you picked this location on the base surface:
Picking in that location means we are going to be controlling the upper horizontal direction of
the pattern. We want that direction to map to the upper circumference of the cylinder surface, so
at the next prompt to select the target surface we want to click on the cylinder surface in this
spot here, near the top edge but a little ways in from the corner:
That will then produce a result like this:
For projective mode the target object can be made up of multiple joined surfaces if they are all smooth to one another.
In projective mode, rays are fired out from the base plane along the base plane's surface normals and intersected with the target object. The target object should be large enough so that these rays actually hit it and do not just fire out into empty space.
The "Rigid" option is available for all Flow modes. When enabled the "Rigid" option causes objects to be only moved and rotated into a new position (using a "Rigid body transformation") rather than the object being deformed. This will keep a sphere for example to still be a sphere in the result without it being bent or warped into a different shape. This works by deforming only a single point of at the center of the object's bounding box and then moving and rotating the object accordingly. Usually this is used to apply a pattern of small objects across the target surface.
If you plan to do a Boolean union or difference with the result of the Flow, it is usually a good idea to position the objects so that they are pushing through the base plane a little bit rather than sitting exactly flush on top of the base plane. That will then make the deformed results similarly push through the target surface rather than having pieces with overlapping surface areas that just barely touch each other. It tends to be much more difficult for the Boolean mechanisms to make sense of skimming overlapping surfaces.
![]() |
Twist |
Deforms objects by twisting them around an axis line.
The Twist command starts by picking 2 points which defines the twist axis.
By default the twist will apply uniformly and extend through the axis direction:
If the "Limit to axis" option is set, the twist will only be applied between the
start and end points of the axis, with no twisting happening outside that region.
When "Limit to axis" is enabled, the "Ease in" and "Ease out" options control how
quickly the twist ramps up from the start or ramps down towards the end. Here's an
example with "Limit to axis" enabled, note how at the ends there is no twisting:
![]() |
Create |
From file |
Converts a SubD control polygon cage in .obj format to NURBS surfaces.
This converter allows you to use a hybrid modeling approach of constructing some surfaces in a SubD modeling program and then bringing those over into MoI where you can apply further details using MoI's CAD toolset such as booleans. This can be helpful for working with some kinds of organic shapes.
There are some options for the conversion process under Options > Import/Export > SubD import options. You can set Patch type to "Fewer patches, more control points" which will make a smaller number of surfaces but each individual surface will have a denser control point structure, or "More patches, fewer control points" which will make a larger number of fragmented surface patches especially around star points, but those surfaces have a lower control point density.
You can also get some control over patch formation by assigning materials - polys that have different material assignments will not be merged together into larger combined patches unless the "Use materials" option is disabled.
When using this converter make sure to have the base level coarse control cage in the .obj file, without any subdivision applied to it already.
Dimensions have various properties to control things like spacing, arrowhead style, text positioning, etc... These properties can be set on a selected dimension object through the "Details..." extended object properties dialog.
Annotation presets control the property values that will be applied to a newly drawn dimension. Presets are created and edited in the Options dialog > Dimensions section. Different presets can be created to make different styles and when you are drawing a dimension there is an option for which property preset to use. The "Default" preset is stored in the moi.ini file and so is globally available in all projects. Additional presets are project specific and saved in .3dm files.
If you want additional presets beyond "Default" to be available in new files, set up a .3dm file with the presets you want and set that as the startup template file under Options > General > "Template file". The presets will be read from that template file when MoI starts up or when you use File > New.
Dimensions can have customized text set in addition to the numeric value. To show the numeric value include <> characters in the text and the <> will be replaced with the number value in the dimension's displayed text.
The sizing behavior of annotation elements like arrowheads and text is controlled by the "Scaling" property. There are 2 different options, Scaling: "By screen size", or Scaling: "By model units".
Scaling: "By screen size" is a scale independent mode where arrowheads and text stays the same size on screen independent from the current zoom level. So with this mode if you set text to a 12pt size for example, the text will be 12pt on screen and also 12pt on the printed page for PDF/AI format output. For simple drawings this keeps text to always be at a legible size. However, if you have a lot of text they can overlap with each other when you zoom out.
Scaling: "By model size" is a scale dependent mode where you specify sizes for text and arrowheads in model units. With this mode the text and arrowheads will size the same as regular geometry, when you zoom in they will display larger and when zoomed out they will be smaller. This can take more work to get a legible text size but it also will prevent neighboring text from overlapping on top of each other when you zoom out. CAD programs usually use this method and it is also good if you want to place text to be contained inside of line geometry like in a title block grid.
![]() |
Horiz |
Creates a linear dimension displaying distance in the construction plane's x-axis direction.
The "From object" button can be clicked to set the start and end points to the ends of a preselected line segment.
![]() |
Vert |
Creates a linear dimension displaying distance in the construction plane's y-axis direction.
The "From object" button can be clicked to set the start and end points to the ends of a preselected line segment.
![]() |
Aligned |
Creates a linear dimension displaying distance between 2 points.
The "From object" button can be clicked to set the start and end points to the ends of a preselected line segment.
![]() |
Radius |
Creates a radial dimension displaying the radius or diameter of a circle or arc.
![]() |
Angle |
Creates an angular dimension displaying the angle between 2 lines.
![]() |
Leader |
Creates a leader object consisting of a text label and arrow.
![]() |
Text |
Creates a block of annotation text without any arrows.
![]() |
Area |
Zooms in and centers the view on a smaller specified area.
The area is defined by a center point and then a corner forming a rectangle.
For the 3D view, the picked center point will become the new rotation pivot point as well, so sometimes Zoom Area can be useful to focus in on a particular spot that you want the 3D view to pivot around.
![]() |
Zoom |
Zooms the view in or out.
In addition to this zoom button, you can also spin the scroll wheel on a mouse to zoom in or out.
To use this zoom button, click and hold down on the button and then while still holding down, drag up to zoom in or drag down to zoom out.
By default the button is fairly sensitive so you don't need to move the mouse pointer very far to control it. Try moving only a pretty small distance up or down.
You can flip the up/down action and adjust the sensitivity under Options > View > Rotate/Pan/Zoom options.
![]() |
Pan |
Moves the view left, right, up or down.
In addition to this pan button, you can also click and drag inside a viewport with the middle mouse button (or also the right mouse button in the Top, Front, or Right views). If you have a mouse wheel pushing down on the wheel also acts as a middle button.
To use this pan button, click and hold down on the button and then while still holding down, drag up, down, left, or right to reposition the view towards that direction.
By default the button is fairly sensitive so you don't need to move the mouse pointer very far to control it. Try using smaller motions instead of moving by a large distance.
Panning works with a kind of accelerated motion. You can drag a small distance and then hold still, and the view will continue to move in that direction. If you move a further distance the movement will accelerate.
You can reverse the directions of the movement and adjust the sensitivity under Options > View > Rotate/Pan/Zoom options.
![]() |
Rotate |
Rotates the 3D view around the pivot point.
In addition to this rotate button, you can also click and drag inside the 3D view with the right mouse button as a different way to rotate.
It often helps to use the Reset button to set the pivot point to the center of the selected objects before doing a rotation. You can also use the Area zoom button to set the rotation pivot to a point directly on one specific part of an object if you want to pivot around one particular area.
To use this rotate button, click and hold down on the button and then while still holding down, drag up, down, left, or right to rotate the view towards that direction.
By default the button is somewhat sensitive so you don't need to move the mouse pointer too far to control it. Try using smaller motions instead of moving by a large distance.
Rotation using the button works with a kind of accelerated motion. You can drag a small distance and then hold still, and the view will continue to rotate in that direction. If you move a further distance the rotation will accelerate in speed.
You can reverse the directions of the movement and adjust the sensitivity under Options > View > Rotate/Pan/Zoom options.
![]() |
Reset |
Fills the view with either the selected objects or all objects.
On the first click Reset will target just the selected objects and adjust the view so the selected objects fill up the viewport.
If you click the button a second time, Reset will target all objects in the model regardless of selection, zooming to fit everything within the view.
Reset also places the pivot point for rotating the 3D view at the center of what it zoomed to.
If you right-click on the Reset button, the reset will be applied to all viewports.
If there are no objects visible, Reset will restore the view to the initial startup default view.
Incremental save |
It is possible to set up a keyboard shortcut to do an incremental save, where a number in the filename will be bumped on each save, like file01.3dm, file02.3dm, file03.3dm, etc...
To do this, go to Options > Shortcut keys, and add a new entry with a key of whatever you like (for example, Alt+S), and IncrementalSave for the command.
Rebuild |
Reconstructs a curve by sampling points and generating a new curve through those points.
The Rebuild command does not currently have a button in the UI, it must be set up on a keyboard shortcut (under Options > Shortcut keys) or have its command name typed in (press Tab first to enter a command name) to launch it.
Rebuild can be used to simplify a curve that is overly complex or messy or has too many points in it to be easily manipulated by control point editing. It can also be used for the reverse as well, to add a lot more points to a simple curve if you want to have a higher level of detail available for editing.
There are 2 modes, a "Refit to tolerance" mode where you enter a distance tolerance value and as many points are added as needed (not necessarily uniformly) to maintain the new curve within that distance of the original curve, or a "# of points" mode where you tell it a specific number of evenly spaced points to sample for creating the new curve.
Flip |
Flips the positive normal direction of an open surface to the other side.
This doesn't affect much in MoI itself but can be used to reverse the normals for polygons generated from open surfaces when saving to a polygon mesh file format.
The Flip command does not currently have a button in the UI, it must be set up on a keyboard shortcut (under Options > Shortcut keys) or have its command name typed in (press Tab first to enter a command name) to launch it.
Merge |
Merges split up edge fragments into longer combined edges.
The edges must be tangent where they touch each other in order to be merged together into a single edge.
The Merge command does not currently have a button in the UI, it must be set up on a keyboard shortcut (under Options > Shortcut keys) or have its command name typed in (press Tab first to enter a command name) to launch it.
ArrayGem |
Replicates a gemstone along a set of curves on a surface, aligning the gem to the surface normal.
The ArrayGem command does not currently have a button in the UI, it must be set up on a keyboard shortcut (under Options > Shortcut keys) or have its command name typed in (press Tab first to enter a command name) to launch it.
ArrayGem uses a different spacing method than the other array commands - along with the objects to be arrayed you also include a base circle and the spacing that you provide becomes the separating distance between each placed circle along the target area.
For the targets you pick a surface, and a set of curves that have been projected on to that surface.
Note that for this command to work properly, there must be a base circle previously drawn and also included among the objects that you want to have copied. The base circle should be selected at the same time along with the objects to copy.
The center of the base circle will become the point that is placed on to the surface, and the diameter of the base circle will be taken as the size of the object.
An example:
ExplodeMove |
Moves objects away from a common center point giving an effect similar to an exploded diagram.
If a single solid is selected, its faces will be separated and moved apart, otherwise if multiple objects are selected the objects will stay whole and move apart from one another.
The ExplodeMove command does not currently have a button in the UI, it must be set up on a keyboard shortcut (under Options > Shortcut keys) or have its command name typed in (press Tab first to enter a command name) to launch it.
BoundingBox |
Creates a box or rectangle that frames the current selection.
The BoundingBox command does not currently have a button in the UI, it must be set up on a keyboard shortcut (under Options > Shortcut keys) or have its command name typed in (press Tab first to enter a command name) to launch it.
BoundingBoxCenter |
Creates a point object marking the center point of the bounding box around the current selection.
The BoundingBoxCenter command does not currently have a button in the UI, it must be set up on a keyboard shortcut (under Options > Shortcut keys) or have its command name typed in (press Tab first to enter a command name) to launch it.
ShrinkTrimmedSrf |
Shrinks the underlying surfaces of the selected objects to remove areas of the surface that were extending larger than the trimming boundaries.
The ShrinkTrimmedSrf command does not currently have a button in the UI, it must be set up on a keyboard shortcut (under Options > Shortcut keys) or have its command name typed in (press Tab first to enter a command name) to launch it.
Make2D |
Generates a hidden line drawing with the curves inserted directly inside of MoI. Similar to exporting to a 2D drawing format like PDF/AI/DXF and importing that drawing back in again.
The Make2D command does not currently have a button in the UI, it must be set up on a keyboard shortcut (under Options > Shortcut keys) or have its command name typed in (press Tab first to enter a command name) to launch it.
RemoveDuplicates |
Currently only works on curves, removes other curves that are duplicates within a specified tolerance (curve endpoints must be in tolerance too).
The RemoveDuplicates command does not currently have a button in the UI, it must be set up on a keyboard shortcut (under Options > Shortcut keys) or have its command name typed in (press Tab first to enter a command name) to launch it.
Meshing options |
When saving to a polygon file format, MoI needs to convert from smooth surface data into faceted polygon data. The "Meshing options" dialog is shown during this process to control different aspects of how the polygon data is generated.
During the meshing process the number of generated polygons and points are displayed in the upper-right corner of the main window where command options normally are shown.
MoI does extra work to align mesh vertices along shared edges between joined surfaces. So you'll generally want to make sure surfaces that are next to one another have been joined together into one connected solid object before exporting mesh data.
Initially the dialog is shown in its compact form:
Move the slider to the left to create a lighter mesh with fewer polygons. This will reduce the amount of data generated but will also give a more jagged appearance to the mesh. Move the slider to the right to create a denser mesh with more polygons in it. A denser mesh will be smoother visually but will also contain a lot more data.
The Output: option controls the type of polygon data that will be created, whether to allow creation of N-gons (polygons with more than 3 or 4 sides), or whether to break polygons up to only allow 3 or 4 sided polygons. Some programs have difficulty dealing with complex N-gon shapes. If you see bad results when importing N-gons into your polygon application, try reducing this option to Quads & Triangles, or Triangles only. Some polygon file formats don't allow N-gons, for example STL or 3DS files can only contain triangles, so you won't see this option when exporting to these formats.
You can click on the arrow in the lower-left corner of the compact dialog to
expand it to show more options:
Weld vertices along edges option:
Welding controls how polygons are connected to points along shared edges between surfaces. When welding is on, polygons will share a single point in common along the shared edge. When welding is off, the polygons on each side of the edge will have their own individual points which are stacked up in the same location.
Example of welded polygons - each polygon from either side of a joined
edge will be hooked into the same vertex. The vertices are shared between polygons:
Example of unwelded polygons - in this case each polygon across the unwelded
edge has its own individual vertices. The points are stacked on top of each other, shown
slightly separated here for illustration:
Typically welding is left on for normal rendering use but some programs may have difficulties with welded meshes. Also, sometimes you may want to have points unwelded for certain special effects, such as doing a sketch or toon style rendering. Unwelded edges will get an accent line in a sketch rendering. Turning welding off may also help separate polygons out into different chunks for each original surface during later polygon editing.
Angle option:
The Angle option controls the maximum angle allowed between the surface normals at the corners of each polygon. When the maximum allowed angle is small, it will force additional subdivisions along more tightly curved areas. When the maximum angle is larger, fewer subdivisions will be forced in curved areas and coarser polygons will be allowed. This is the same value that is controlled by the slider. This option just allows you to control it more directly and to allow for values outside of the normal slider range. For example, if you want a very low polygon mesh you may want to type in a larger angle here than the slider normally permits.
Divide larger than option:
The "Divide larger than" option provides another way to refine the mesh in certain areas. You can enter a distance here which will force polygons that are larger than this length to be broken down into smaller pieces. This can be used to add detail to larger areas that have shallow curvature. Areas that have shallow curvature will tend to get fewer polygons in them because the regular density control that is adjusted by the slider is based only on curvature and not lengths. You can also adjust the drop-down to limit additional subdivisions to a specific type of surface. By default it will be applied only to curved surfaces leaving planar surfaces unaffected, but this can be changed to only apply to planar surfaces for special meshing needs, or to apply to all surfaces.
Here is an example of a large area with shallow curvature that didn't get
many polygons. Because it is covering a larger area the lack of refinement
here can be more noticeable:
By entering a distance of 5 in the "Divide larger than" option, it will force
more divisions along the large shallowly curved surface. Any polygon larger than
5 units along an edge will be further broken down:
Avoid smaller than option:
The "Avoid smaller than" option can be used to avoid creating too many polygons in small areas where they may be difficult to see, in order to reduce polygon counts. You enter a distance here, and subdivisions will be restricted for any polygon that is smaller than this value. Normally the same density will be generated in both small and large areas because it is controlled only by the curvature. This is good if you are going to be zooming into a smaller area for a rendering, but if you're never going to zoom in to a small area you may wish to have fewer polygons there to reduce the amount of data being processed and speed things up.
Here's an example of a knob that is a tiny piece of a much larger model:
By setting an "Avoid smaller than" distance of 0.5, it will reduce the number
of divisions there since this knob is close to that size:
Aspect ratio limit option:
The "Aspect ratio limit" option offers another way to force additional subdivisions
for quads that are short in one direction but long in another. This affects all
surfaces, including planar ones. Here is an example of a mesh with long and
skinny quads:
If you want to get more regularly sized quads here, you can enter 2 in the
aspect ratio control, which will force a division in any quad that has one
edge more than twice as long as the other:
Once you enter a value into one of the extended controls, you can clear it by either using backspace to clear the field or by entering a value of 0.
Repeat |
You can repeat the most recently used command by right-clicking inside a viewport or by pushing the Enter key on the keyboard.
It is also possible to turn on repeat automatically for a period of time by clicking the "Repeat" checkbox that shows up at the bottom of the command options area in the upper-right area of the window. When that option is checked, a drawing command will automatically repeat until you cancel it or uncheck that box.
Construction lines |
Construction lines allow you to quickly place additional guide lines to help with precise snapping and alignment while drawing shapes.
You can create a construction line anytime that MoI is asking you to specify a point location, like for the start or end of a line, the center of a circle, the next point of a curve, etc... To create a construction line, hold down and drag the mouse.
When MoI is asking you for a point, clicking and releasing the mouse button will finish picking that point. If you hold the button down and drag instead of releasing, you will drag out a construction line. Construction lines are automatically erased at the end of each command.
Here is an example of how a construction line can be used to help accurately
place a point. Imagine you have a drawing as shown here in the first image, and you
want to create a new horizontal line as shown in yellow in the second image, such
that the end is exactly aligned as indicated by the dashed line:
To draw such a line, start the line command and click the first point at the
end that you can easily grab:
Next, move to the end that you want to be aligned with. Click down on that point,
but do not release the mouse button. Instead hold the button down and drag away and a
construction line will be created. Drag downward to make the construction line
go downward, and release the mouse when you see the construction line has snapped
vertically:
Now that a construction line has been created dropping down from that point,
you can find a snap point at the intersection between the horizontal line and
the vertical construction line, and click it to place the end of the line:
You can drag out any number of these construction lines to set up additional
intersection snaps. They can be dragged along the x, y, or z axes, perpendicular
or tangent from a curve, etc... The construction line is formed through 2 points
- the point you started the drag on and then the point where you release the mouse.
After a construction line has been defined by these 2 points, the midpoint between
them is available as another snap as well as the reflected endpoints. The
reflected endpoints are calculated by taking the distance between the start and
end and repeating that same distance in both directions.
For example, creating a construction line through the 2 points in the first image
will provide the additional snaps shown in the second image:
This makes it possible to find the midpoint between any 2 points by dragging a construction line through those 2 points. Also the reflected endpoints can be useful for snapping symmetrically around a centerline.
Here is an example of how the reflected endpoints can be useful. Let's say
you have a line, and you want to draw a square at the end of the line, centered
around it, like so:
To do this, start the Rectangle 3 points command. Before placing any points
for the rectangle, go to the end of the line and drag out a construction line
perpendicular to it:
Thanks to the reflected endpoints, this now sets up all the snaps you need
to draw the square. Place the first point at the original end of the
construction line, point #2 marked above. Then for the next point of the
rectangle, pick the reflected endpoint on the other side:
Finally, the square snap built into the rectangle tool can be used for
placing the 3rd point to form an exact square:
Construction lines can be used in this manner to form a kind of quick temporary scaffolding or grid adapted to the size and orientation of existing objects.
After you drag out a construction line, a small marker will appear above your
mouse pointer that looks like this:
If you move your mouse over that marker the marker will brighten up and
if you press and hold down on the marker for a moment a menu will pop up with
additional options for controlling the construction line:
The "Relocate cline" option allows you to pick a new point for the construction line to go through, basically dragging the construction line to a new location. This allows you to capture a direction and then move it to a different area to use for a parallel construction guide.
The "Reorient cline" option allows you to pick a new point and pivot the construction line to point in a new direction going through that point. The original endpoints, midpoint, and reflected endpoints of the construction line are still available as snaps at the same distances after the reorientation. This, combined with the relocation option, allows you to use a construction line as a kind of measuring stick to capture a distance between any 2 snapped points and then apply that distance to a different area or different direction.
Here is one example of measuring a distance and applying it in a different
direction while drawing a cylinder on top of a box. After starting the cylinder
command, a construction line is created from the midpoint of the box's edge
to the end:
Then the construction line is re-oriented to point perpendicular to the edge,
towards the inside of the box:
Now there are snap points available at the same spacing as the edge
of the box to draw an exactly placed cylinder:
The "Rotate cline" option allows you to rotate the construction line around its base point by the given angle. This allows you to set up a guide line at the given angle relative to some existing edge of an object. It is also possible to use Distance or Angle constraint while initially drawing the construction line by dragging outside the viewport to the distance or angle controls and clicking and entering a constraint value there, then returning to the viewport and clicking to place the second point of the construction line.
The "Division snap" option enables you to snap to different fractional increments along the construction line instead of only the midpoint. For example, entering 5 here will provide snaps at 1/5, 2/5, 3/5, 4/5, as well as -1/5, -2/5, 6/5, 7/5, etc...
The "Project next pt" option forces the next picked point to be projected
to the closest point along the construction line. This allows you to snap on to
a different object and find the relative height of that point along the line. For
example, here a construction line has been pulled up in z along side of a different
object. When projection is turned on you can move to a snap point on the other
object and the relative height of that object will be captured by the projection
on to the line:
Here is an example of this projection being used to place the top point of
a cylinder at an equal height as an existing box object:
Shortcut keys |
Keys or key combinations can be assigned to different actions under Options > Shortcut keys.
The Enter and Esc keys have predefined functions. You can use Enter as a shortcut for clicking the "Done" button while inside of a command, and pressing it outside of a command will repeat the last used command. Esc is used to cancel or turn off modes. If you are currently running a command, Esc will cancel the command same as clicking the "Cancel" button. If you are outside of a command, Esc will deselect objects on the first tap, and then turn off any points that were enabled with the "Show pts" command on the next tap.
To create a new shortcut key, click the "Add" button. A dialog will pop up asking you to press the shortcut key combination that you want to assign. After you have set the shortcut key, you can then fill in the Command entry with either a command name or also script code can be inserted directly here as well. Script macros are prefixed with the keyword "script:".
Command names:
So for example, a shortcut for E to activate extrude would look like this:
E Extrude
There are a few buttons in the UI that run script macros instead of commands: Hide, Reset all, Select all, Deselect all, and Invert. This is so they can be used while a command is still running, so these functions are slightly different than a regular command. To hook these up to a shortcut key fill in the Command part with one of the following scripts:
Hide:
Lock:
Reset all views:
Select all:
Deselect all:
Invert selection:
Here are some frequently requested scripts that can be assigned to a key to perform a custom action. To use these, copy the entire line that begins with script: and paste it into the Command part of the shortcut key:
Maximize the view the mouse is over, or switch back to split view (usually assigned to Space key):
Go to split view:
Maximize the 3D view:
Maximize the Front view:
Maximize the Right view:
Isolate the selection (hide everything else that is not selected):
Select all curve objects:
Select all open curves (curves that do not form a closed loop):
Hide all curve objects:
Hide all surface/solid objects:
Select all objects that were created by the last command:
Toggle grid snap on or off:
Toggle object snap on or off:
Toggle straight snap on or off:
Many other scripts are possible, see the web site for a larger list, and post any requests for custom scripts to the discussion forum.
Edit frame |
The edit frame shows up around the outside of selected objects and allows you to quickly perform scaling or rotation without having to launch any commands.
The edit frame's starting position is based on the bounding box of
the selected objects, and is made up of 5 grips - 4 scaling grips in
the corners and one rotation grip at the top:
The grips are drawn with a semi-transparent effect to maintain a low profile, but will light up when you move the mouse over top of one.
Primarily the edit frame is intended to be used in the 2D Top/Front/Right views, but it will also show in the 3D view if the selected objects are all planar.
To scale with the edit frame, grab one of the corner grips and drag it to size the object. By default objects will be scaled from the center point, but you can switch to scale from the opposite corner instead by clicking on one of the corners instead of dragging it. Each click will toggle the scaling origin between the center or the corner. When the mouse is over a corner grip, a marker will appear at the current scaling origin.
When scaling, if you drag your mouse in a horizontal or vertical direction, a guideline will appear and the scale will happen as a 1D stretch along that direction. Stay close to this guideline if you want to do a stretch, otherwise if you drag diagonally it will scale the object in all directions. If you move far enough away from the 1D scaling guides, stretch mode will be turned off for that drag. You can also hold down the Shift key when scaling to perform a 2D scale which will stretch only in 2 directions and leave the vertical direction untouched.
While stretching an object, a "Flat" snap is available at the point
where the frame collapses completely down to a line. This can be used
as a quick way to flatten objects from a side view:
You can also create a mirrored copy of an object using the corner
grips as well. To do that, grab a corner and drag it all the way over
to the opposite side of the object. There will be a snap point available
there and if you snap on to it, a mirrored copy of your object will be
produced same as doing the Transform > Mirror command:
Also if you are scaling from the center, there are mirror snap points at the other 3 corners to enable an exact "in-place" type flipping or mirroring.
To rotate with the edit frame, grab and drag the rotation grip which is located in the middle of the top edge of the bounding frame.
You can rotate by a specific angle by entering an angle constraint before dragging the rotation grip. There are 2 ways you can enter an angle constraint, either by typing <angle (like <45) just by typing directly without clicking anywhere, or by clicking on the angle box in the bottom toolbar and entering your value there. So for example if you want to rotate something by 30 degrees, type in <30 and push enter, then grab that rotation grip and it will rotate in 30 degree increments.
If you click instead of drag on the rotation grip, it will switch to a different "wheel mode" which makes it possible to grab the center rotation pivot and move it to whatever spot you would like to rotate around. Also while in this mode there is a tri-wheel rotation widget displayed in the 3D view which allows you to grab any one of 3 rotation axes.
Properties panel |
The Properties panel shows up in the upper-right area of the main window and lets you view and edit properties of the currently selected objects.
This panel shows up when you are in Selection mode, before you have launched a command.
In addition to viewing properties, you can also click on different areas to pop up menus or dialogs that allow you to edit them. As you move your mouse over this area you will see different clickable areas highlight.
1. Object name indicator - this displays the name of the currently selected objects. You can assign a name by clicking on this line to bring up the "Edit object name" dialog box. Named objects will have entries show up in the Objects section of the Scene Browser to be quickly accessed for hiding, showing, or selecting.
2. Object type indicator - this displays some basic information about the selected object, for example if it is a fully closed solid it will display "Solid" here. The type can be one of the following: Curve, Closed crv, Edge, Face, Surface, Joined srf, Solid, Point. Also if you have multiple objects selected, the number of objects currently selected will be shown here as well.
3. Style indicator - this displays the style that is assigned to the current selection. You can assign a different style by clicking on this line to pop out the styles menu. There is also an alternate way for assigning styles available by clicking on a style's color swatch in the Scene browser. You can right click on this line as a shortcut to edit the style.
4. Size indicator - this displays the bounding dimensions around the current selection, and you can click on it to scale the objects to a different size. The bounding size will be displayed in either world coordinates, or in cplane coordinates if a custom cplane is currently set. Certain objects have special size values - a line will display length, a circle, arc, sphere, or trimmed cylinder will display radius, and a full cylinder or cone will display radius and height.
When editing the size, there is a "Maintain proportions" option you can turn on or off to control whether objects will be scaled uniformly or whether to allow them to stretch in only one direction when a value is edited.
When you enter in a new size, you can enter in numeric formulas
(for example: 22 / 5 * 4) and there are also the following variables
that be used as part of the formula:
You can also enter a value starting with + or -- in a field to make it a relative adjustment. For example if you enter in radius: +5 it will add 5 to the current radius.
5. Opens the object properties dialog.
Object properties dialog |
The object properties dialog can be opened by clicking the "Details..." button on the properties panel that displays in the upper right corner of the window when objects are selected.
There are controls here for calculating length of curves and surface area or volumes of surfaces or solids.
Some more detailed information on the object type is available here with a report on all the styles used on a multi-style solid, whether curves are line segments, polylines, circles, arcs, ellipses, elliptical arcs, planar, open or closed and the number of faces and edges in a solid.
The type report can be used for selection filtering, if you click on a type label the selection will narrow down to only objects that match that type. So for example if it reports that there are "3 lines, 3 circles, 1 ellipse, 4 planar" curves selected, if you click on the "3 lines" label the selection will narrow down so only the line curves will be selected. You can hold down Shift to click on multiple labels, and if you hold down Ctrl when you click on a label it will remove those objects from the selection rather than narrowing selection down to them.
There are also numerous properties here that can be set on annotation objects for controlling details like arrowhead types and extension lengths, etc...
Scene browser |
The scene browser helps to organize larger projects by categorizing objects in different ways and allowing you to perform actions (such as hiding, showing, locking, selecting) to all the objects that belong to a particular category.
The scene browser's appearance and location in the UI can be set under Options > General > "Scene browser position".
When set to "Adjacent" or "Opposite" the scene browser will be displayed as a separate full height panel either along side or on the opposite side from the regular side pane, and a Browser button will be displayed in the bottom of the main window next to the Help button. The Browser button can be clicked to hide or show the scene browser.
When set to "Inside" mode, the scene browser will be displayed as an additional palette at the bottom within the side pane. In this mode, the browser can be shown or collapsed by clicking on the palette title area.
The scene browser has different sections, with each section using a different categorization method. They include:
Objects - for working with objects that have been assigned a name. You can assign a name to a selected object (or multiple objects) by clicking on the name part of the properties panel that shows up in the upper-right area of the main window. Once you have assigned a name, that name will appear as an item under this section of the scene browser.
Types - for dealing with all objects of a certain type, like all curves, or all solids. This section allows you to perform actions like hide all curves, or select all solids, etc...
Styles - for organizing objects into different colored categories. This section allows you to work on all objects that have been assigned a particular style. You can assign a style to the selected objects by either clicking on the style line in the properties panel, or by clicking on the colored swatch of a style item within the scene browser. Style assignments will become material assignments when you export to OBJ or LWO mesh formats.
The default set of styles can be altered by setting up a 3DM file that contains the styles you want to have as the default, and then specifying that file as the startup template file under Options > General > Template file. That will cause the styles (and other per-file settings) to come from that file when MoI starts up or when you do a File > New.
The Styles section also has a menu which can be launched by the
arrow on the right-hand side of its header, here:
That menu has entries for:
There are some shortcuts available for editing styles:
You can control which style is applied to newly drawn objects by setting the "Active style". You can set a style as the Active style by right-clicking (or left-clicking when there is nothing selected) on the style's color swatch.
The active style is marked in the scene browser style list by
an extra ring around its color swatch. For example here the Green
style is marked as the Active style:
Scene browser items
Every item listed under a scene browser section represents a category of objects, and you can click on different parts of the item to perform an action on all objects that belong to that category.
For example here the Objects section is showing 4 items, each
of which represents a different group of named objects in the model:
When you move the mouse over each item you will see different clickable areas highlight.
There is a status indicator area on the left:
And a selection indicator dot on the right:
Style items have an additional color swatch area in the middle:
The status indicator can be used for hiding, showing, or locking objects. The selection indicator dot can be used for selecting, deselecting, or setting selection filters. The color swatch for style items can be used for assigning the current selection to that style or to set the style used for newly drawn objects.
The status indicator will display an eye icon if all the objects belonging
to that category are set to be shown, or a blank spot if all the objects belonging
to that category are hidden. For example here all the objects belonging to
"Lower deck" are shown, and all the objects belonging to "Upper deck" have
been hidden:
You can switch a category between hidden and shown by clicking on the status area.
You can also right-click on the status area to "isolate" that item, which will hide everything else leaving just that item being shown. Right-click on it a second time later on to show everything.
You can press and hold the mouse button down and swipe over the status area of several adjacent items to set multiple items in one mouse action.
The status area also shows whether items are locked. If all objects
belonging to that item are shown and locked, a lock icon will be displayed
instead of the eye. If all of that item's objects are hidden and locked,
a fainter lock is displayed, for example:
To switch between locked and unlocked, hold down the Ctrl key and click on the status area.
The status area will also show a mixed state indicator if the
item's objects have a variety of different states.
If some of the item's objects are shown, and some are hidden, a
half-eye icon will be displayed. If there is a mixture of some locked
and some unlocked objects, there will be a diagonal dividing line with
both an eye icon portion and a lock icon portion. To clear this kind
of mixed lock state, hold down Ctrl and click:
The selection indicator dot on the right side gives feedback about the
selection of objects belonging to that item and can also be clicked on
to perform selection actions:
The selection indicator dot will display a full yellow dot if all objects belonging to that category are selected, or it will be blank if all the objects belonging to that category are unselected. It will display a half dot if some are selected and some are unselected.
You can click on the selection dot area to toggle selection on or off similar to how clicking on the eye toggles visibility on or off.
When you click on the selection dot it will only select objects that are not hidden. Use Shift+click on the selection dot to select all objects of that slot regardless of current visibility state (any hidden objects will become shown if you do that).
Right click on the selection dot to do an "isolated selection" - it will select the item's objects and deselect all other objects.
You can also use Ctrl+click on the selection indicator dot area to activate a
selection filter. When you do this a filter icon will appear:
When a selection filter is active only objects that belong to that slot will be targeted for selection actions. So for example if you want to select all red curves, you can tag Style=Red with a filter, and then go the Types section of the Scene Browser and click on the selection indicator dot for curves and it will only target curves that have Style=Red.
Selection filters influence all types of selection actions, including selecting things with the mouse, select all, using the Scene Browser to select things, etc...
It is possible to set many selection filters to be active at the same time. Only objects which pass all the active filters will be targeted for selection.
When you activate a selection filter, it does not immediately change any already existing selection, it only influences any new selection actions after that. This allows for building a selection in several steps. If you don't want the existing selection then clear the selection before setting the filter.
A second Ctrl+click will clear the filter, or you can push the Escape key as a shortcut to clear any active selection filters when you are done using them. Usually it is best to only leave selection filters active for a short time, if you forget you have one active it can easily seem like selection is not working at all.
Orientation picker |
The orientation picker is used in several commands (CPlane, Orient, Import part, Paste part) that need to specify a base point and x/y/z axis orientation.
The orientation is represented visually by a base point with 3
perpendicular axis lines, sometimes with one axis (called the "primary axis")
marked with an extra outlined dot at its end:
The orientation defines a localized coordinate system with its own position and rotation.
Picking an orientation is a 2 step process.
The first step is to pick the origin point. During this step the
z axis of the picker will align itself to a surface normal if the
origin point is being snapped on to an existing object. For example:
In addition to surface normals, the picker can also align itself to the plane of a circle or rectangle curve when snapped to their center points, or to the tangent of a curve when snapped to a point on a curve.
This alignment can be disabled by unchecking the "Align to objects" option, or the direction can be reversed by checking the "Flip aligned z axis" option.
After the origin point has been placed, the second step is to optionally adjust the axis directions to control what they are pointing towards.
When you are done adjusting the directions (or if the default directions were already fine), right-click or press the "Done" button to finish picking the orientation.
An axis direction can be adjusted by moving your mouse to the axis line, and dragging on that axis, keeping the mouse button held down and releasing it over the target location you want it to point towards.
Here's an example - say you have placed the origin point on the
side of a cube like this:
If you would like to adjust the orientation so that the x axis is
pointing towards a corner of the cube instead, you can do that by
moving your mouse to the x axis line (labels will be displayed on
each one as you move over them to indicate which one is which),
like this:
Then press and hold the mouse button down and drag on that axis line.
As you drag the picker will adjust that direction to point towards what
you are dragging over. Release the mouse button when you are over the
desired target point:
The "primary axis" is the axis line that is marked with an extra outline dot at its end. When you drag one of the other axis lines, its motion will be restricted so as to only pivot around the primary axis, keeping the primary axis unmodified.
You can switch the primary axis to a different axis line by clicking on the axis line rather than holding the mouse button down and dragging on it.
If the picker was aligned to an object when picking its initial origin point, the z axis will start out as the primary axis. Otherwise the first axis that is repositioned will become the primary axis.
You can also drag on the origin point to relocate it during the axis adjustment step as well as dragging on the axis lines.
Drawing on surfaces |
In MoI you can control how newly drawn objects are oriented by either setting the construction plane using View/CPlane, or by snapping points directly on to existing surfaces.
Drawing and snapping directly on to surfaces is made up of a few related pieces.
First, there is an "On srf" object snap that lets you snap a point directly on to the surface that is under the mouse.
Another related area is surface normal snapping - this is an
additional kind of straight snap similar to perpendicular or tangent
snaps, except coming off of a surface. For example here the first point
of the cylinder was placed on the sphere, then when picking the second
point, a surface normal snap is available:
To avoid over-snapping, there will only be one surface normal straight snap line at a time. If your base point is snapped on to an area common to more than one surface (for example the corner of a box), you will only get a surface normal snap if just one of those surfaces is selected.
The last piece of on-surface drawing is surface snap plane
alignment. This is when a surface gets used as a temporary construction
plane for a drawing command, aligning the drawn object to the surface
instead of to the default world x/y/z planes. Some examples:
Snap plane alignment will only happen when you are picking points in the 3D view. Using your mouse in the 2D Top/Front/Right views will keep alignment to the regular view plane.
Different commands align to surfaces with slightly different intensities. The draw commands that are symmetrical around a center point like Circle from center, Rectangle from center, Polygon center, and Polygon Star, will align to a surface if just their initial center point is snapped on to any surface, including both planar and curved surfaces.
Most other commands such as Line, Polyline, Rectangle, Curve, etc... will only align their snap planes (which for example with Polyline controls which direction straight snaps will go in) if you have both the base point and the current point snapped on to a planar (not curved) surface.
If the base point and the current point are snapped on to areas that are common to more than one planar face (like with both points snapped on to an edge of a box so that the points touch 2 faces of the same box), then the planar face that is pointing most towards the eye point direction will be used. So for example if you snap one point on to a corner of a box, rotate the view so that you are facing more towards the face of the box you want to draw on to control which face will be used when there are multiple candidates.
Numeric expressions |
You can type in an expression or formula into numeric edit fields that are asking for distance or radius values.
For example when you are drawing a circle for the radius you can type 15/4*2 and the result 7.5 will be calculated for you.
Another example is if you're drawing a line, you can type <360/12 to set an angle constraint of 360/12 = 30 degree angle snap for that line.
You can also use functions like sin - for example typing in sin(45) will calculate the sin of 45 degrees. All trig functions take angles in degrees. Angle input in radians is available by prefixing the function name with an underscore character, for example: _sin(PI/4). Any of the functions on the JavaScript "Math" object are available for use, including: sin(), cos(), tan(), sqrt(), pow(), round(), random(), the constant PI, and also rad() which takes a parameter in degrees and returns it in radians, and deg() which takes a parameter in radians and returns it in degrees.
You can also type in a "relative expression" to modify the value of an edit field that has previously been initialized to some other value. To make a relative expression, start it with one of these symbols: + -- * / which will alter the value by the given amount rather than inputting a completely new value. So for instance in a grid size input field you can type /2 to modify the existing value by dividing it by 2. Note that for subtraction a double minus sign is used to avoid any conflict with entering in a regular non-relative negative value.
You can also use expressions for x,y,z point values. If your regional settings for the operating system uses a comma character as the decimal point separator for numeric values, then surround each coordinate with parentheses to separate them, for example: (2+2)(5/2-1)(5).
Multitouch view navigation |
You can use multitouch gestures (pinch or drag fingers) to do zoom/pan/rotate view manipulations. This works on Mac OSX 10.7+ using a trackpad or on Windows 8 using a touch screen. There's a demo video here: Multitouch view demo on forum.
The supported gestures are:
Pan by 2 fingers dragging left/right/up/down
Zoom by pinching index finger and thumb together or apart.
Rotate left/right/up/down in the 3D view by dragging 3 fingers.
2 finger double tap for view reset (zoom to selected objects or zoom to all if done a second time).
Twist thumb and index fingers for 2D ortho view spin or 3D view tilt if those are enabled under settings.
Zooming in and out with multitouch can be easier to control in the 3D view if you have a parallel view projection rather than perspective. You can set a parallel projection under Options > View > "3D view projection". To set the default projection on startup, save a 3DM file with a parallel projection set and then put that 3DM file as the startup template under Options > General > Template file.
On OSX, 3 finger dragging for rotation in the 3D view will not work if any 3 finger swiping is already being used for OSX system functions. Check under System Preferences > Trackpad > More Gestures. If "Swipe between full-screen apps" or "Mission Control" are set to use 3 finger swiping, change them to use 4 finger swiping instead, then MoI will be able to receive the 3 finger dragging events.
There are some options available for changing multitouch behavior under Options > Rotate/Pan/Zoom options > MultiTouch options (in lower-right area):
Reverse rotation checkbox - when enabled the 3D view rotation directions will be reversed.
Rotate ortho views checkbox - when enabled thumb/index spin will spin the 2D ortho (top/front/right) views.
Swap 3D rotate and pan checkbox - when enabled 2 finger dragging in the 3D view will do rotation and 3 fingers will do panning instead.
Allow 3D rotation tilt - when enabled thumb/index spin will tilt the 3D view left or right.
Rotation speed, Pan speed, and Zoom speed - a scale factor can be entered in here to adjust the speed of these movements, for example putting in 0.5 will make that operation half speed, putting in 2 will double the speed.
There are also a few additional settings available in moi.ini under the [MultiTouch] section:
[MultiTouch]
SingleFingerRotation=n
TiltSpeed=1.0
TiltCenterMode=0
SingleFingerRotation can be set to =y on Windows to make just one finger dragging do 3D view rotation instead of 3 finger dragging. This will prevent things like window selection from happening with touch so you should probably only try this if you also have a mouse or pen to use for selection.
TiltSpeed can be set to a scale factor to speed up or slow down thumb/index finger spin action in 3D views.
TiltCenterMode can be set to 0, 1, or 2 and controls how the center point works for 3D view tilting.
© 2020 Triple Squid Software Design