From MoiWiki
Jump to navigationJump to search

Release notes for each V4 beta release are gathered here.


Forum announcement

V4 is a major rewrite with changes on many levels so please be on the lookout for any bugs.

The main new functionality is that MoI is now a 64-bit program for both Windows and Mac and the Mac version is a native build and doesn't use Wineskin anymore.

New system requirements are Windows 7/8/10 64-bit or macOS 10.8 - 10.13 .

Polygon conversion can now use all your system memory instead of running into 32-bit memory limits.

A lot of various little quirky things should be tuned up for the Mac version.

The only known areas still not quite working yet are snap text labels and dotted/dashed line styles in viewports and Mac trackpad gestures aren't fully functional yet.


Forum announcement

Bug fixes:

Fix for the frozen UI bug when restoring a maximized main window from a minimized or hidden state. Please let me know if you see it again.

Fix Mac deployment issue that was preventing things from working on OS X 10.8 and 10.9, MoI should run ok there now.

Fix font name bug where MoI V4 would overwrite the UI font name property that V3 uses in moi.ini and so the V3 UI font changed after you ran V4. They should now stay separate.

Fix bug where dropdown controls in commands wouldn't reinitialize to their last used value. Reported by bemfarmer in the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8675.204

Fix construction line snapping bug reported in the forum by Moujiik here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8675.119

Not a whole lot of changes, normally I would have waited until a bit more were batched up but the frozen UI bug was pretty significant so I wanted to try and nail that one down soon.


Forum announcement

Bug fixes:

Saving to IGES and STEP files - fixed a bug where using .stp or .igs file extensions wasn't working on Mac.

Mac full screen mode - fix for the problem where the view controls window would show on the desktop space, sending you back to the desktop the first time you moved the mouse over a viewport after going to full screen. Please let me know if you see it again.

Updated shortcut key editor - Make the "Key" column expand to whatever width is necessary to show the longest key combo. Fixes problem reported in the forum by Metin here: http://moi3d.com/forum/messages.php?webtag=MOI&msg=8682.42

Viewport toolbar - fixed a bug where doing view manipulation using the bottom viewport toolbar could miss the mouse up event and get stuck.

Orientation picker - fixed a sporadic drawing bug with the orientation picker reported on the forum by Max here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8682.16

Shortcut keys with Shift - Fixed a bug in shortcut keys using shift + number keys. V4 was generating Shift+1 as Shift+! which was incompatible with V3, V3 would convert it back to Shift+1 which was then not recognized by V4. V4 should now generate Shift+1 for that key combination and not Shift+! anymore. Fixes a bug reported on the forum by Marco here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8682.50

Background images - Fixed a crash when making a background image from a bitmap file with lower than 32-bit color depth. Reported on the forum by Vladimir here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8682.100

Undo - Fixed a bug where undo wouldn't find the proper object to restore in some cases. Reported on the forum by Val here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8682.83


moi.geometryDatabase.findStyle() - fixed a bug in the findStyle() function for the "create if not found" case, reported on the forum by Max here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8682.16

obj.getBoundingBox() - The boolean parameter for getting high accuracy bounds was marked as required in v4, while in v3 it was optional with a default of false. Updated v4 to match v3.

moi.filesystem.openFileStream - switch to use QTextStream for reading to get better unicode support. Unicode files with byte order marks should be supported now, the default will be UTF-8 if no byte order mark is found. Also added new methods .setWriteBOM( boolean ) which you can call to make writing a text file write the byte order mark at the front (default is no BOM), and .setCodec( name ) to have specific control over what encoding to use for reading or writing. Supported codecs are listed here: http://doc.qt.io/qt-5/qtextcodec.html#details .

moi://appdata/ - add support for moi://appdata/ URLs so you can load HTML resources like images from the MoI app data directory. moi://appdata/ will resolve to %AppData%\Moi on Windows and to ~/Library/Application Support/Moi on Mac.

String to integer conversion - Updated so a string value of "1.0" will be successfully converted to an integer value of 1 rather than rejecting it. Fixes a change in behavior from v3 to v4 that broke some of Brian's scripts.

factory.setValue() - switched to v3 behavior so sending the wrong object type doesn't trigger an exception. Fixes the SpurGearProfile script.


Forum announcement

Bug fixes and changes:

Mac full screen mode - getting sent back to the desktop the first time you moved the mouse over each viewport after going to full screen mode should be finally fixed! Also Ctrl+Cmd+F shortcut key for full screen toggle should now work.

Mac trackpad and Magic Mouse - Finished implementing multitouch view navigation for the trackpad and Magic Mouse on Mac. Magic Mouse should be back to zooming instead of panning. The Zoom speed can be adjusted in moi.ini [MultiTouch] MagicMouseZoomSpeed=1.0 . Change this to something like 2.0 to make the default behavior faster or 0.5 to go slower. You can also hold down the Ctrl key to go slower as well.

Mac ignored mouse bug - Fix for bug where mousemove events would stop working in certain conditions when restoring the main window from hidden or showing a modal dialog. Fixes bug reported by Finema here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8675.189

Updated "On" object snap mechanics - Changed the way On object snap for curves works to get better accuracy with curves far from the origin.

Incorrect default values for some commands - Fixed a bug where the default values for the Text and Rebuild commands were incorrect on locales that use commas for the decimal separator. Reported by Vladimir on the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8704.32

Trim - fixed a bug in the Edit > Trim command where if an object was set to be both an object to be trimmed as well as a cutting object it could get hidden unexpectedly.

Command button highlighting - Fix for command buttons remaining highlighted after command ends. Reported by Vladimir on the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8704.32

Read-only file handling - Fix bug where using File > Save wasn't prompting for a new file name when the current opened file was set to read-only. Reported in the forum by mhasse here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8714.1

Crash fix for newer CPU/Older OS combination - Fix for 0xc000001d illegal instruction exception when running on Win7 SP0 with a newer AVX-capable CPU.

Hidden-line generation - Increase Canvas megapixel size limit from 175 to 1000.

Degenerate box error - fixed bug where a script error would be displayed if you made a degenerate rectangle in any of the Draw solid > Box commands.

Update text input fields - Text input fields were only applying typed in values when the input panel was open, or when the Enter or Tab keys were pressed, not if just clicking outside the field as they now will. Should fix a PDF export dialog bug reported by reported by Moujiik here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8704.15


viewport.setCameraAndTarget() - Fixed bug in viewport.setCameraAndTarget() function, reported in the forum by Ralf here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8704.25

Process memory use limit - Added option in moi.ini for limiting maximum memory use - Windows only. Can be set in moi.ini under [Settings] MaxProcessMemoryUse=x . Requested by Burr on the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8704.26

moi.view.screenshot - Fix bug where the moi.view.screenshot() method was capturing the wrong area of the screen on Mac.

Enable setting default values for controls from shortcut keys. UI controls can now be triggered or initialized with custom values if the control's id is supplied in the command-line parameters for the command. For buttons, the presence of the button's id value in command line parameters will trigger a UI event for the button the first time that it is shown, this will have the same effect as clicking the button. For dropdowns and checkboxes, the presence of the control's id in an id=value pair will use that value to initialize the control rather than taking the last used or default value as normal.

This makes it possible to set up shortcut keys that package up different options within commands, for example:

Trim addtrimpoints removekeepmode=keep

Trim addtrimpoints removekeepmode=remove

Trim isocurve isodir=u

Trim isocurve isodir=v

Line bothsides=true

Extrude tapered


Forum announcement

Text labels inside viewports still not implemented yet, that's the last remaining thing still left to get v4 fully caught up.

Bug fixes and changes:

Dashed/Dotted line styles implemented so things like the grid, construction lines, and hidden line display should be looking proper now.

Appdata commands folder - MoI will now look for commands in a "commands" subfolder under appdata in addition to the regular commands folder. On Windows this is located at C:\Users\<username>\AppData\Roaming\Moi\commands, on Mac it's /Users/<username>/Library/Application Support/Moi/commands . Note that on Mac the user Library folder is hidden by default, you can use the Cmd Shift . [period] shortcut while in a Finder window to show it for that Finder session. This will be the new recommended place to install plug-in commands, if you put them here then you won't have to copy them anywhere when new betas are released.

DXF import layers - Support reading layers in the DXF file as Styles in MoI.

DXF export layer names - Make layer names in DXF files encoded as AutoCAD is expecting for an AutoCAD 2000 DXF file. By default names will be written using Windows-1252 encoding, with unicode characters escaped. Fixes crashes in AutoCAD when opening a DXF file exported from MoI with layer names using non-ascii characters. It is possible to override this and use UTF-8 encoding for reading or writing names by settings in moi.ini: [DXF Import] ReadNamesAsUTF8=y and [DXF Export] WriteNamesAsUTF8=y

Alt/Cmd Shortcut keys Mac - Fix bug where Cmd+ keys were getting converted into Alt+ keys when written out in v4, and also that Alt+ keys were converted to Cmd+ keys in the moi.ini file by V3 if V3 was opened. Shortcut keys on the v4 Mac version are now written to a separate [Shortcut Keys Mac] section in moi.ini to avoid the conflict with V3.

Extrude responsiveness Mac - Rework communication with worker process to fix problem where some commands like Extrude were not as responsive as V3 especially on Mac.

Window resizing Mac - Fixes for flickering that was happening when turning browser pane on/off, switching between Split/3D/Top/Front/Right views and main window resizing.

Construction lines - Fix bug where when drawing a construction line, letting the mouse button up outside the viewport would finish the construction line, which prevents snaps from being changed. Changed to same behavior as V3. Fixes a bug reported by Vladimir on the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8731.59

Numeric input field display - if a value is typed into an input field the number of decimal places that were used is remembered for the session and will be used the next time the field is displayed. Fixes problems like typing in 0.001 for the Rebuild command tolerance but then having it show up as 0 the next time because of rounding to 2 decimal places.

Command macros - Make macro parameters sent in command line parameters also work for non-persistent controls like the ones in the Box command. Updated the UI for several commands to have input field ids of just "width" and "height" so now it's possible to make a shortcut of Box width=10 for example.

Straight snap - Fix bug where pressing or releasing Shift without any mouse movement didn't show the straight snap changing as it did in V3.

Alt+MMB view manipulation - Revert Alt+MMB to Pan to behave same as previous versions of MoI. Previously in V4 Alt+MMB had been set to do view rotation in the 3D view for compatibility with 3DS Max, but this change in default behavior has caused problems for some users accustomed to how V3 behaved. You can still enable Alt+MMB to do view rotation by a setting in moi.ini : [View] AltMMBRotate=y

Alt+RMB view manipulation - Add option for Alt+RMB to do Pan instead of Zoom, for ZBrush compatibility. This can be enabled in moi.ini under [View] AltRMBPan=y

Shortcuts editor - Fix bug where right-clicking in a text control in the Shortcuts editor to get the cut/copy/paste context menu didn't work right.

Windows shutdown bug - Fix bug when shutting down Windows while MoI is still open reported by Vladimir in the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8731.81

Trim curve by point - Update tolerance used for trimming curves to points. Fixes Trim bug reported by bemfarmer on the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8786.18

Fix crash on program shutdown if license key dialog was canceled.

OBJ export - Fix invalid UV coordinates generated in .obj export when meshing a degenerate face. Fixes bug reported by 4rw1n in the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8754.20


Added additional script interface for Curve and CurveSegment objects.

For both Curves and CurveSegments:

crv.domainMin - Property that returns lower bound of the curve's parametric domain.

crv.domainMax - Property that returns upper bound of the curve's parametric domain.

crv.evaluatePoint( t ) - Function returning a point for the given parameter value.

crv.evaluateTangent( t, FromLeft = true ) - Function returning a unit tangent vector for the given parameter value. Optional second parameter controls calculating the tangent from the lower or higher parametric side at a discontinuity, default value = true.

crv.evaluateCurvature( t, FromLeft = true ) - Function returning the curvature vector for the given parameter value. Optional second parameter controls calculating the tangent from the lower or higher parametric side at a discontinuity, default value = true.

crv.evaluateDerivatives( t, NumDerivs, FromLeft = true ) - Function returning a list of derivative values for the given parameter value. Optional third parameter controls calculating the tangent from the lower or higher parametric side at a discontinuity, default value = true. The derivatives are returned in a list of length NumDerivs+1 with index 0 having the point value, index 1 having the first derivative, index 2 having the second derivative, etc...

crv.isPlanar - Property that returns true if the curve's control polygon is planar.

crv.planarFrame - Property that returns a coordinate frame with an origin point at the curve's control polygon centroid and a z axis along the plane normal, only valid if crv.isPlanar == true.

crv.isOnPlane( frame ) - Function that returns true if the curve is on the given frame's x/y plane.

crv.isOnParallelPlane( frame ) - Function that returns true if the curve is on a plane parallel to the given frame's x/y plane.

crv.isClosed - Property that returns true if the curve is closed.

crv.isPeriodic - Property that returns true if the curve has periodic ends (overlapping control points at start/end rather than a corner point at the start/end).

crv.isDegenerate - Property that returns true if the curve has a degenerate control polygon with all the points stacked in the same spot.

crv.isLine - Property that returns true if the curve has the shape of a line.

crv.isSimpleLine - Property that returns true if the curve is a simple line segment made up of only 2 control points.

crv.isCircle - Property that returns true if the curve is a circle.

crv.isArc - Property that returns true if the curve is a circular arc.

crv.isEllipse - Property that returns true if the curve is an ellipse (either a full ellipse or an elliptical arc).

crv.conicFrame - Property that returns the coordinate frame of a circle, arc, or ellipse. Only valid if isCircle, isArc, or isEllipse returns true.

crv.conicRadius - Property that returns the radius of a circle, arc or the x-axis radius of an ellipse. Only valid if isCircle, isArc, or isEllipse returns true.

crv.conicRadiusY - Property that returns the y-axis radius of an ellipse. Only valid if isEllipse returns true.

crv.conicEndAngleRadians - Property that returns the end angle in radians of a circular arc. The arc starts at the x-axis of the arc's frame. Only valid if isArc returns true.

The following only apply to Curves, not CurveSegments:

crv.isClickSelected - Property that returns true if the curve was selected by a mouse click action.

crv.clickSelectionPoint - Property that returns the point on the curve where it was click selected. Only valid if isClickSelected returns true.

crv.clickSelectionParam - Property that returns the parameter value of the curve where it was click selected. Only valid if isClickSelected returns true.

crv.isClickSelectedNearEnd - Property that returns true if the curve was selected by a mouse click action and it was clicked on a spot closer to it's ending side than its starting side.

Added moi.ui.systemDPI property.

Make text input controls fire an onchange event in addition to the previous onvaluechange event - onchange is the standard one used by regular input elements.

Add new script function moi.ui.findElement( 'id' ) - looks through all UIPanels for any element with the given id. Returns the element or null if not found.

Implement startup scripts. Now when MoI is started it will run all .js files it finds in a directory named "startup" inside of MoI's AppData. It will also look for any startup directory inside the main application install folder as well. The scripts will run right before the main window is displayed - note that if the script puts up a modal dialog the main window won't show until the script finishes. Scripts will be run in alphabetical order. MoI will create startup and commands directories inside appdata.

Add a container with id="CommandBarCustomUI" in CommandBar.htm to make it easier to populate the UI from a startup script. Example:
    var container = moi.ui.commandBar.CommandBarCustomUI;
    container.insertAdjacentHTML( 'beforeEnd', '<moi:CommandButton>Test1</moi:CommandButton>' );

Appdata/scripts directory - you can add a scripts folder inside appdata and MoI will also check there for running an "instant script".

Add trackpadgesture event for Mac - Set up a custom trackpadgesture event so the node editor dialog can use Mac trackpad gestures for zooming and panning.
The trackpadgesture event object has these properties:
    event.gestureType : string value of 'Scroll', 'SmartZoom', 'Zoom', or 'Rotate'.
    event.deltaX, event.deltaY : movement for Scroll , 2 fingers swiping.
    event.numTouches : number of touch points being used for Scroll.
    event.scaleFactor : scale factor for pinch/zoom
    event.angle : angle change for Rotate.

SmartZoom is a 2 finger double tap, used by MoI viewports for view reset. The trackpadgesture event also has all the same properties as a mouse event giving the location of the mouse cursor. By default the Scroll gesture generates a mouse wheel event, to prevent that use event.preventDefault();


Forum announcement

I think this version is all caught up now, the last remaining things that were missing from v3 such as text labels inside viewports are now implemented and all regression bugs that have been reported should now be fixed. So if that holds up this should be a major milestone for v4 where I'll now be switching to working on new features rather than rewriting stuff from v3.

Bug fixes and changes:

Implemented text rendering inside viewports for things like snapping tag labels ("End", "Mid", etc...)

OBJ export - Fixed bug where invalid OBJ file would be generated if object names had extended characters in them. Reported through e-mail by Lewis.

STEP import - Fixed crash bug in STEP import reported through e-mail by John Lewis.

iMac Pro draw speed - Fixed bug where too frequent UI updates caused a noticeable draw speed slowdown compared to V3 on some high dpi Mac machines. Fixes bug reported by Metin.

Mouse cursors - Fixed various bugs where the mouse cursor wasn't updating properly, reported by Vladimir in the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8814.128

Text field right click context menu - Fixed a bug with right click on text input fields in menus being offset.

Menu hover state - Fixed a bug where when launching a menu, the button hover state on the launching UI would get stuck until another click.

Color picker custom colors - Custom colors set in the color picker dialog are now saved to and restored from moi.ini so they will persist between program sessions. Fixes bug reported by Moujiik on the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8855.5

Object properties - Fixed bug where cached objects in the async worker process wouldn't get updated if style, name, or selection changed. Fixes bug reported on the newsgroup by Brian here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8814.81

Selection filter crash - Fix for crash when setting a style selection filter, reported by Shane on the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8872.1

Busy script interruption - Scripts that do a lot of calculation in loops can now be interrupted by pushing the Escape key. Requested on the forum by Marco here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8814.63

Trackpad scroll gesture - Fix bug where Mac trackpad scroll gesture could be treated as a mouse wheel event, if the first touch happened on a different window. Fixes bug reported by Max in the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8814.21

DXF export arcs and circles - Previously arcs and circles that had a normal vector pointing straight down in the negative z axis direction would get flipped in the export, because there are a couple of programs that do not read those correctly. But this direction flip is bad for CNC usage, so the default now is to not flip them. It is possible to return to the previous flipping behavior by a setting in moi.ini: [DXF Export] FlipNegativeZAxisCirclesAndArcs=y Fixes a bug reported in the forum by Vladimir here: http://moi3d.com/forum/index.php?webtag=MOI&msg=6925.419

VSync - Added option in moi.ini to limit screen redraw with vsync, might help if you are experiencing a tearing type effect in the display. Can be set under [View] VSync=y . Requested by torsten in the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8814.140

Additional command dirs - Add moi.ini setting under [Commands] AdditionalCommandsDirs= which can be set to a semi-colon delimited list of additional directories to look for commands, in addition to the built in commands and appdata commands.
Requested on the forum by Hamish here: http://moi3d.com/forum/messages.php?webtag=MOI&msg=8814.97

FBX export vertex colors - Add option in moi.ini for writing vertex colors to FBX exports. Can be enabled by setting:
[FBX Export]
Requested by Stefan in the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8853.5

Graphics API override - Add moi.ini option for which graphics API to use. On Windows or Linux/Wine a specific render engine can be controlled by a setting in moi.ini, under the [View] section, GraphicsAPI key:

Startup working directory - Add moi.ini options for setting the initial working directory on startup.
Requested by Marc in the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8814.88

Trackpad as mouse wheel - Add setting in moi.ini for making Mac trackpad scroll used as a mouse wheel zoom as older MoI versions did.
Requested by Marc in the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8814.88


Forum announcement

New stuff:

Major overhaul of STEP/IGES/SAT importing.

These imports will now no longer block the main thread so it won't look like MoI is frozen while it is loading a big file.

The loading happens in 2 phases, first an initial scan of the file that doesn't do too much work except logging the structure of where objects are located. Then the next heavier phase of processing the objects will make use of multiple CPU cores for a major speed increase. So there should be a very substantial performance increase in loading large STEP, IGES, or SAT files in this version.

Also the HarmonyWare libraries used for working with these formats have now been updated from version 1.7.11 to the latest 2.0.8 release and there are a lot of bug fixes from that. A notable one is that some incorrect positioning of instances should be good now. Also some other fixes on MoI's side should make for colors coming through from STEP files that were previously missed.

It would be cool to hear how the new multi-core enabled importer performs on some big files compared to MoI v3!

Also please let me know if you see any new problems with any particular imports. If you do please try to send the file to me at moi@moi3d.com so I can test with it over here, I will keep any files confidential.

Other things:

Window selection Mac - Fix for sluggish selection window dragging reported by James through e-mail.

Properties panel size display - Adjusted the quick size calculation for the properties panel to hopefully increase accuracy a little.

Properties panel - Report closed edges as a distinct object type. Fixes an issue of inconsistent behavior between curves and edges reported through e-mail by Scott.

Edit frame grip size - Added option in moi.ini for setting edit frame grip handle pixel size, so it can be adjusted for higher res displays, Requested by Barry in the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8960.1

DisableOnSrfInOrtho setting - Added scripting access to DisableOnSrfInOrtho setting so it can be toggled at runtime under moi.drawingAids.disableOnSrfInOrtho . Requested on the forum by immortalx here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8947.1

NURBS Export RotateZUpToYUp option - Added option in moi.ini for option for exporting STEP/IGES/SAT formats to rotate the export to a Y up coordinate system.
[NURBS Export]

Update viewport right click - Don't push Cancel buttons with a viewport right click, it's too easy to accidentally cancel a long file import or things like that.


Forum announcement

The main focus for this beta is performance enhancements.

3DM files will now use multiple CPU cores for loading so large files should load significantly faster and show a progress bar.

Also the display engine has been enhanced to take advantage of modern GPUs - display data is now cached in the GPU's VRAM which should result in faster redraw speed for large files.

Other bug fixes and changes:

Mac version multiple windows - Add "Window" menu to Mac version top menu. Shows all open files and allows switching between them easier. Also support Cmd+Tilde (Cmd+~) and Cmd+Shift+Tilde for switching to next/prev window.

Construction line bug fix - Fix construction line creation bug reported by jopo in the forum here:

Object drag bug fix - fix bug for moving the mouse over another viewport when dragging objects. Reported by Burr on the forum here:

Mac AMD performance - fix problem with default buffer location with OpenGL on some AMD cards that was causing slow redraws on some machines like iMac pro.

Updated Mac file open behavior. To match the Mac document based application framework behavior, if a file is opened by drag/drop or by double-clicking on the desktop icon do not open a new window for it if there is an existing window with it already open.

3DS Max zoom compatibility - Added moi.ini option for Alt+Ctrl+MMB zoom for 3DS Max compatibility. Can be set under:

Object snap labels on left side - Add moi.ini option to make object snap labels shown to the left of the target point, can be useful if you're drawing directly on a screen such as with a Cintiq screen. Can be set in moi.ini under:
[Drawing Aids]

Shortcut keys update - On Windows if there is a [Shortcut Keys Mac] section of the moi.ini file, read and write shortcuts from there so you can copy the moi.ini file over from Mac to Windows. Fixes issue reported on the forum by Matt here:

STEP import bug fix - Fixed import bug for file MF2018.STEP getting stuck at 36%, reported on the forum by Marco here:
Also fixed a different STEP import bug reported by Eric Bucy through e-mail.

Fixed file loader UI bug - Fix bug where main window would not maximize properly when trying to show progress bar UI before main window was initially displayed, such as when MoI launched by double clicking a STP file. Fixes bug reported in the forum by OSTexo here:
OSTexo http://moi3d.com/forum/index.php?webtag=MOI&msg=8966.40

File notes - Add notes property that is saved to and loaded from .3dm files. Can be accessed by setting up a shortcut key with:
script: moi.ui.createDialog( 'moi://ui/NotesDialog.htm', 'resizeable' );

Viewport right click option - Add option for v3 behavior of right clicking in a viewport working as a shortcut for pushing the Cancel button when a command only has Cancel and not Done. Can be set in moi.ini under:
[View] DoRightClickCancel=y

Add new appdata directory option - MoI will now look for an appdata directory that has been created alongside "commands", "ui", etc... and if found will use that location as the appdata folder, to make it possible to store everything within a single directory.

Add moi.ini setting for selection hit test radius

Scene browser scripting - Added script access to scene browser items so it is possible to make a startup script that expands sections on program startup. To do that put the following in a .js file in your Moi appdata startup folder:
var items = moi.ui.sceneBrowser.rootItems;
for ( var i = 0; i < items.length; ++i )
    items[i].expanded = true;


Forum announcement

The main focus for this beta is a polygon sub-d surface to NURBS conversion method, available on the side pane under SubD > Create > From file. This allows you to open an .obj file that contains a sub-d polygon cage and have it converted to a high quality NURBS object in MoI.

Some other stuff:

Settings for page size are now available in PDF/AI exports.

Fixed crash bug when modifying display mesh angle.

Updated STEP export to fix problem with object names not coming through to SolidWorks, Fusion360 and KeyShot.

Added moi.ini option to set current file name with foreign file types. In moi.ini under [Settings] SetNameWhenOpeningAllFileTypes=y When set, the current file name is set for all file opens not just .3dm files. Requested by Alex on the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=9044.41

Updated DXF export to allow the dialog to be suppressed and options set by script. Parameters that can be set are:
// DXF export function parameter options:
// NoUI=true
// ExportType=2d | 3d
// ProjectionView=top | 3d | front | right
// WriteCurvesAs=splines | cubicsplines | polylines
// PolylineAngleDegrees=10.0
// UseSimpleEntities=true
// NumDecimalPlaces=12
// GenerateHiddenLines=false
// HiddenLineLayerMode=fromstyle | custom
// HiddenLineLayerName=Hidden lines (layer name to use when layer mode = custom)
// IgnoreTangentEdges=false
// Resolution=25.0


Forum announcement

New stuff:

Numerous fixes for SubD import crashes and translation issues.

Fix for SubD imports on objects of small scale.

Fix for SubD imports with meshes that have multiple volumes that partially overlap each other. Previously these could sometimes not get separated into different solids properly.

Update SubD import to read materials from the .obj file and make Styles from them in MoI. Also patch combining will pay attention to material assignments so patches will not get combined across different materials. Can be disabled under Options > Import/Export > SubD import options > "Use materials" checkbox.

Add SubD import option for either fewer patches but with denser surface control points, or more patches around extraordinary vertices but with fewer surface control points in regular areas of the mesh. Set under Options > Import/Export > SubD import options > "Patch type".

Update multiple selection - Add option for doing multiple selection only when shift key is down. Options > General > Multiple selection: "Always" or "Only when Shift is down".

Fix cylinder boolean union bug. There was a bug with combining cylinders in boolean union when the cylinders had opposite axis directions. This was the cause of some occasional mysterious missing fillets where the fillet surface was ending up displaced some distance away from the trim boundaries.

Fix a sporadic crash in Chamfer reported through e-mail by Sebastian Bielecki.

Fix crash in center object snap after copy/pasting an arc edge curve.

Update tesselator - fix degenerate span display bug. Fixes bug in mesher for making display meshes on surfaces with nearly degenerate spans. Fixes a bug reported through PM by BarryH.

Add option for scaling STL export to target unit system. Under Options > Import/Export > STL Options > "Export units conversion".

Update curve filleting - Enable "Constant distance" fillet mode for curves, currently only works for line segments.

Fix 3DConnexion buttons bug where undo/redo on space mouse button presses was not working, reported by Ivan in the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=9130.1

Update command parameter parsing. Allow quotes to control parameter parsing so values with spaces can be used, for example: ArrayDir mode="Extent, Count" . Fixes a problem reported on the forum by Bravlin here: http://moi3d.com/forum/index.php?webtag=MOI&msg=6087.75

Update shortcut keys parameters - start and end scripts. Make it possible for shortcut keys to define parameters for oncommandstart="" and oncommandend="" for script to run at the start or end of the command. For example this shortcut will run a script when the line command ends to select it: line oncommandend="moi.geometryDatabase.selectLastCreated();"

Update shortcut keys for file commands. Enable controlling the file dialog file type with keyboard shortcuts by adding a filetype= option in the shortcut key. For example a shortcut key with: Open filetype=igs will make the file dialog have the .igs file type active. Can be used with Open, SaveAs, Import, and Export commands. Requested in the forum by Peticel here: http://moi3d.com/forum/index.php?webtag=MOI&msg=9118.1

Update command UI automation - ordering. Some UI events cause the command to finish, so to be able to control a command the ordering of the events needs to be controllable. Rework the UI event triggering so they are triggered in the order given in the command line parameters. This makes the following possible:
extrude tapered draftangle=20 distanceinput=10
Previously that didn't work because the distanceinput is earlier in the UI and so got triggered earlier and ended the command before tapered or draftangle could be processed.

Fix properties panel line length editing bug reported through e-mail by Tim Hickox.

Fix tolerance bug that could cause small sized objects to get mangled boundaries when joined, regression from v3.

Fix IGES import joining regression - Make iges entity 128 surfaces join together if joining is enabled, regression from v3.

Updated IGES import joining - allow T junctures to join instead of only simple matching endpoints only.

Fix IGES import bug for some cases with edges on seams of closed surfaces. Fixes an IGES file sent through e-mail by Charles Ludeke.

Fix excessive load time with STEP file that had a degenerate surface in it.

Update license key file paths - Allow a path to moi_v3_license.key to be passed as a command line parameter or set as an environment variable like moi_v3_license.key=path . Requested by Mariusz in the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=9106.1

If straight snap snap angle is set to 0, disable x/y plane straight snap line snapping.

Add warning if running on Mac case sensitive file system.

Update file dialogs - Save and restore last used file dialog location on all platforms.

Update file loader progress bar - Add full path as tooltip to file name label.

Add option for limiting the number of CPU cores used by file loading. Can be set under: [Settings] FileLoaderThreadLimit=x

Update scripting - exe command line args
moi.getExecutableCommandLineArgs() - returns list of command line parameters for launching the executable.
moi.geometryDatabase.initialFileToLoad - filename for initial file to load by executable command line parameter.

Scripting - Add moi.command.currentCommandName property for getting the current running command name by script, or empty string if no command currently running. Requested by Bravlin on the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=7238.61

Update Scene Browser, Types > Edges and Types > Faces behavior. Don't show edges or faces of hidden breps unless shift is down. Makes it easier to turn edges on/off without hidden breps being shown. Requested through e-mail by Tim Hickox

Update scene browser - Make sure scene browser is initialized before any startup script that wants to access it is run.

Scene browser script access - Add more script access to SceneBrowser: sceneBrowser.objects, sceneBrowser.types, and sceneBrowser.styles to get the root item for those sections.
Added methods to a scene browser item:
    item.find('name') - will search all children and return an item with that name or null if none present.
    item.alterStatus(mode,rightclick) - alter the status area of an item, that's the one with the eye icon. Mode can be one of 'show','hide','lock','unlock'. Optional boolean parameter for rightclick will make it behave like a right mouse button click.
    item.select(mode,rightclick) - alter the selection dot of an item. Mode can be one of 'toggle','select','deselect','filteron','filteroff'. Optional boolean parameter for rightclick will make it behave like a right mouse button click.
Here's an example that toggles the selection dot for the Blue item under styles: moi.ui.scenebrowser.styles.find('Blue').select('toggle');

Fix selection redraw bug on static objects where objects could get stuck looking like they were selected in the Intersect, Project, Silhouette, Join, and Separate commands. Reported through e-mail by James Elliott.

Fix bug in Add pt with rational curves, reported in the forum by Bravlin here: http://moi3d.com/forum/index.php?webtag=MOI&msg=9216.34

Fix for wrong selection display on iMac with NVIDIA GeForce GT 750M 1024 MB - work around driver bug.

Fix for mouse move events getting stacked up on some Mac machines.

Fix .skp and .fbx format export with unicode file names on Mac. Exporting to .skp or .fbx formats with certain kinds certain kinds of extended characters in the filename would fail.

Update filename display Mac - Fix bug where filenames with <> characters were being treated as html tags.

Fix MRU file list Mac - Fixed bug where on Mac if a file had a \ in it, it would not persist to the MRU list properly.

Fix Mac crash when exporting to .3ds format.

Fix QtWebKit Ctrl/Meta flippage on Mac. Make the HTML event object use Ctrl for Ctrl and Cmd for Cmd instead of flipped on Mac.

Turn off viewport display time that was previously always on.

Update mouse wheel for node editor - dispatch wheel events to canvas elements.

Fix bug in <moi:Select> control when the <moi:Select> element had keyboard focus when the command UI document was torn down. Fixes bug reported by Bravlin on the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=952.31

Add setting for allowing snap plane change in ortho:
[Drawing Aids]
When set the orientation picker will align to surfaces in ortho views, by default it only aligns to surfaces in the 3D view.

Update viewport text - fallback fonts. Switch to a fallback font if the regular UI font does not contain glyphs that we are going to be using in the viewport. This enables stuff like Japanese text to render properly in the viewport even if the UI font has not been set to a font with Japanese glyphs in it.

Update Wine hit testing BGRA textures. Add option to use BGRA for the texture format for off-screen rendering. Make it used by default when running under Wine. Hopefully will solve selection problems where hit test map had unexpected byte ordering on the propietary Nvidia driver, as reported by Ronnie Ashlock.

Add option to use same color picker dialog as v3 on Windows. Can be set under
[Color Dialog]
Requested by Barry-H in the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=9100.241

Update scripting moi.view.resetAll() - Update moi.view.resetAll() to take an optional parameter. Can be one of:
    'auto' - Do automatic toggle between selected or all.
    'selected' - Only reset to selected objects.
    'all' - Only reset to all objects.
    'default' - Reset to default startup views, keeping reversed views (bottom/back/left).
    'harddefault' - Reset to startup views and get rid of reversed views (bottom view will become top).
Requested on the forum by arial here: http://moi3d.com/forum/index.php?webtag=MOI&msg=8123.39

Update edit style shortcut. Make Ctrl+Left click on the style line in the properties panel also work as a style edit shortcut in addition to right-click. Requested by shane in the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=9245.5

Add moi.ini option for window select behavior.
Can be one of "Combo", "Intersect", or "Contained".

Update mesh export - allow generating empty mesh files when saving to OBJ, STL, 3DS, LWO, FBX, or SKP mesh formats. Requested by Mikael Sundell for pipeline integration.


Forum announcement

The primary focus for this release is a new detailed object properties dialog and new annotation/dimension tools on the "Dim" tab in the side pane.

The new extended properties dialog is triggered by the "Details..." button in the Properties Panel here:


The Type: section of the detailed object properties dialog will give some additional information about the object type:


For curves it will report if it is an open curve or closed curve, whether it has the shape of a line, polyline, circle, arc, ellipse, elliptical arc, whether it is planar and the number of segments in the curve.

For surface/solid objects it will report if it is a solid, open joined surface, or open individual surface, if it is a planar surface, the number of joined edges, number of naked edges, and number of faces.

For edges it will report open, closed, joined, naked, line, circle, ellipse, elliptical arc, and planar.

For a face selected it will report if it is a planar face.

For an annotation selected it will report if it is a linear dimension, radial dimension, angular dimension, leader, or annotation text.

When multiple objects are selected it will make a combined report like this:


The type labels can be clicked on to filter the selection down to just the objects that match that label:


You can also hold down the shift key which will allow you to click multiple labels and the filtering will be triggered when you release the shift key. Holding down the Ctrl key while clicking on a label will remove its objects from the selection.

Lower down on the dialog there are sections for Curve properties, Solid or surface properties, and Annotation properties if any of those types of objects are selected:


There you can calculate the length of curves, the surface area or volume of a surface or solid, and adjust properties for annotation objects.

When you click the "Calc" button to calculate a value the button will be replaced with a numeric value and a small "Copy" icon will appear next to it. You can click on the value to copy it to the system clipboard.

The other major new feature area are annotation objects which can be used to add dimensions and text to your model to use for documentation.

These are added by 7 new commands in the Dim tab on the side pane here:


The DimHorizontal command creates a linear dimension going in the x-axis direction of the construction plane:

The DimVertical command creates a linear dimension going in the y-axis direction of the construction plane:

The DimAligned command creates a linear dimension going in any direction on the construction plane:

All 3 of the linear dimension commands have a "From object" button in their command options which you can trigger to take the start and end point of a curve as the first 2 points of the dimension.

The DimRadius command creates a radial dimension on a circle or arc curve:

The DimAngle command creates an angular dimension on the construction plane. There is a "From lines" button in its command options which will allow you to select 2 line objects instead of picking points.

The Leader command creates a leader object which is a text label with an arrow.

The AnnotationText command creates an annotation text object which is a text box by itself, no arrows.

Annotations are currently only saved to and from .3dm files. Saving them to DXF and PDF/AI files will be upcoming.

There is an option in moi.ini for changing the display appearance of arrowheads in annotations by disabling mitered arrowhead tips:

Other bug fixes and updates:

Update FBX export - FBX version, object names, and materials. Add option for which FBX version to use under Options dialog > Import/Export > FBX options > FBX version. Object names are now written to the FBX files instead of only generic "object1", "object2", ... names and styles are now written as materials in the FBX export. Writing materials can be disabled in moi.ini under [FBX Export] WriteMaterials=n

Added SubD import option for open boundaries behavior under Options > Import/Export > SubD import options. Can be one of "Open boundaries: Keep corners" or "Open boundaries: Rounded". The default is "Keep corners" as per the discussion on the forum here:
It can be set to "Open boundaries: Rounded" to return to the previous beta's behavior at open boundary areas.

Update DXF/PDF/AI hidden line layer controls. Add an optional prefix and/or suffix to be added to the style name when generating a 2D hidden line drawing to DXF/PDF/AI formats. Requested on the forum by miquik here:

Update view tabs - enable right click to get reverse views. Requested by Juraj in the forum here:

Add option in moi.ini for zooming using Shift+MMB:

Update file dialog filters. Make "All supported files" the first item in the file open filter list on both Windows and Mac (previously it was only on Mac). So that will be the default filter when the file dialog is first opened. This can be reverted to the previous behavior by a setting in moi.ini :
Requested by agonyii in the discussion forum here:

Add moi.ini option for LWO export to not write styles as materials/surfaces in the LWO file.

Fix bug with meshing dialog settings not being saved. Reported by stefan in the newsgroup here:

Fix Options dialog sub dialogs not displaying in full screen mode on macOS Mojave. Simplify dialog window z-ordering on Mac to avoid Mojave bug and hopefully be more resilient against any future Mac child window behavior changes. Reported by Martin in the forum here:

Fix improper mouse coordinate scaling on Mac w/Retina. Fix bug with longer distance delay before rotate/pan engages with V4 compared to V3, reported on the forum by Nis here:

Fix PDF export crash bug reported on the forum by Mip here:

Fix crash with some extended combination keystrokes such as Ctrl+Alt+Win+Numpad1 (QTBUG-36061). Fixes a crash bug reported through e-mail by Mark Tomlinson.

Fixed a crash in display meshing with a file reported through e-mail by Bodo-Lutz.

Fix crash in node editor revolve with small angle value, reported by Pilou in the forum here:

Updated HarmonyWare libs for STEP, SAT, and IGES file I/O from version 2.1.0 to 2.1.4, various bug fixes.

Update STEP import/export - face colors. Support per-face colors for STEP file import and export. Fixes STEP import color bug reported on the forum by Fran6 here:

Fix 3DM import bug with incorrect circle orientation when reading 3DM files from CAD Exchanger. Fixes mangled import of mould.quadlobe.toy reported on the forum by LarryV here:

Update Construct > Curve > Isect "Curve from 2 views". Allow lines to be used as input for curve from 2 views, requested by Przemas in the forum here:

Update Trim - "stencil cut" options. Add options to Edit > Trim for deleting the cutting objects and for having a joined together result with "keep all" instead of always separarting into pieces. Requested on the forum by Przemas here:

Fixed bug where left-click on style line of properties panel behaved the same as the right click shortcut for editing the style rather than putting up the style picker menu. Reported in the forum by Ralf here:

Update selection texture readback on Wine - test for Nvidia driver bug with red/blue bytes swapped and compensate. Also add calls to glFinish() on Wine to try and help avoid some other Nvidia driver bugs on Linux/Wine.

Update command object model for properties undo. Add moi.command.addSelectedObjectsStateUndoUnit(); that can be called by a command that only modifies properties and doesn't add or delete objects, to get undo support.

Add script properties to Face objects:
face.domainMin : Property that returns u,v coordinate of the lower left of the surface's parameter range.
face.domainMax : Property that returns u,v coordinate of the upper right of the surface's parameter range.
face.evaluatePoint( uv, u_from_left, v_from_left ) : Function that evaluates a uv parameter value and returns a 3D point.
face.evaluateNormal( uv ) : Function that evaluates a uv parameter value and returns a normal vector.
face.evaluate1stDerivatives( uv, u_from_left, v_from_left ) : Function that evaluates a uv parameter value and returns first derivatives as a list containing [pt, du, dv, duv].
face.evaluate2ndDerivatives( uv, u_from_left, v_from_left ) : Function that evaluates a uv parameter value and returns first and second derivatives as a list containing [pt, du, dv, duv, duu, dvv].
face.isPlanar : Property that returns true if the surface is planar.
face.planarFrame : Property that returns a coordinate from for a planar surface. Only valid if isPlanar returns true.
face.isOnPlane( frame ) : Function that returns true if the surface is planar and is on the given coordinate frame's x/y plane.
face.isOnParallelPlane( frame ) : Function that returns true if the surface is planar and is on a plane parallel to the given coordinate frame's x/y plane.


Forum announcement

New stuff:

Added dimension property preset system for controlling initial properties of newly drawn dimensions.
Accessed under Options > Dimensions. The properties set for the "Default" preset are stored in moi.ini and so if you want the same settings used in all projects you can set that one. You can also create additional presets for project-specific settings.
Any presets after "Default" are stored in .3dm files. When you draw a dimension there is now a "Preset:" option which you can set to control which preset will be used.

Implement sizing of the scene browser by dragging on its edge.

Update dimensions arrowheads - Add option to position arrowheads to the outside, for linear dimension and angular dimension.

Enable turning on edit points for annotations. This can be used to edit dimensions and also to reposition dimension text.
If the text point is selected on a linear or angular dimension you can also use Delete to clear the user positioned text and reset it to default positioned text.

Add circumference field. Add a circumference field in addition to radius/diameter for circle picking.
Affects ArcTangent, Circle, CircleTangent, Cone, Cylinder, and Sphere commands.

Add length field to ArcCenter command. The ArcCenter command now has a length field that shows the length of the arc as you move your mouse around and you can enter a length value instead of an angle value.

Update DimAngle command, add angle input field. Add angle input field to DimAngle command so you can type in a desired angle if you are drawing a standalone dimension.

Add snap points on angular dimension objects

Update annotation font dialog - add font clear button. Add "Clear" button to font dialog, if pushed will clear out the font name and set it to use the default UI font.

Updated STEP/SAT/IGES imported object names. Support unicode object names and try to avoid excessively long object names by using just the last component name instead of including the full colon delimited hierarchical names. Can be reverted to use long names by a setting in moi.ini : [NURBS Import] UseHierarchicalNames=y

Fixed bug with dimension text getting distorted when coordinate values were larger than 2500.0

Fix OBJ sub-d conversion crash when reading materials that had texture maps set up.
Fixes a crash reported through e-mail by Phil Nolan.

Fix sweep bug. History update with editing control points for Sweep was making unexpected results.
Fixes bug reported in the forum by nameless here: http://moi3d.com/forum/index.php?webtag=MOI&msg=9526.196

Update Circle tangent commands - Fixed bug in curve coplanar detection that could fail with certain mirrored control point arrangements. Fixes bug reported through e-mail by Vladimir.

Fix bug with circle Tan Tan Radius reported through e-mail by Vladimir.

Fix annotation window select bug - Leaders without any text were not working with window selection.

Fix Project command styles bug. The projected curve was inheriting the target object's style instead of its input curve style. Fixed to make the projected curve have the input curve's style instead. This can be reverted to the previous behavior by a setting in moi.ini [Styles] ProjectGetStyleFromTarget=y
Fixes a bug reported in the forum by Axel here: http://moi3d.com/forum/index.php?webtag=MOI&msg=9615.1

Fix DXF import bug - Fix bug with importing a 2 vertex polyline with closed flag and bulge factor. Fixes import bug reported through e-mail by Vladimir.

Update edge hit testing - Fix dead zone around outside of object with selection filters active. Fixes bug reported on the forum by Pior here:

Update annotation font handling - support all font styles and weights. Make annotation fonts handle the full range of weights instead of just bold/not bold and also allow custom font styles so all font variations can be used instead of just bold and italic.

Fixed annotation font picking bug that would cause the font size to grow to larger values on Mac just by opening the font dialog.

Update detailed properties dialog styles. When multiple styles selected, list the styles.

Fix annotation objects bounding box bug which caused Transform > Align to behave strangely with annotation objects. Reported by OSTexo on the forum here:

Fix dim hit testing bug - Fix problem where dimensions would go on top of lines making the lines hard to select. Reported on the forum here:

Fix bug with Display: Wireframe mode on Meshing options dialog box not working. Reported on the forum by Schbeurd here:

Fix curve offset bug - Curve offset through point wasn't working correctly if closest point was at a tangent discontinuity.

Show error dialog if trying to load a Rhino v6 or higher .3dm file.

Fixed problems with dialog box ordering on some Mac OS versions, where sub dialogs could end up below their parent windows. Fixes bug reported by tech on the forum at:

Fixed bug where esc key could prevent hit testing from being reset on curve used for DimRadius. Reported through e-mail by Vladimir

Update mesh dialog - Don't restore window corner position saved in moi.ini if the corner is not on a visible screen.

Revert IGES import change - only use simple joins, not any vertex/edge splitting. Fixes regression reported on the forum by Will here:

Add moi.ini setting for showing grid in ortho views only, not the 3D view.

Add option for scene browser show/unlock selection behavior. Add in options in moi.ini to select objects that are shown and/or unlocked using the scene browser when clicking on the eye or lock icon. Can be enabled in moi.ini under: [Scene Browser] SelectShownObjects=y SelectUnlockedObjects=y .
Requested by Lestatdelc in the forum here:

Add moi.ini setting to disable selection edge flashing.
If set to =y then the edge flash feedback when selecting faces or breps will be disabled. Requested by Pior in the forum here:

Add moi.ini options for disabling preselection highlighting. In moi.ini under:
If DisablePreselectionHighlighting=y then no highlighting on mouse moves will be done. If DisablePreselectionHighlightingExceptCurves=y then highlight will still be done on curves and edges but not other objects. Requested in the forum by Pior here:

Add moi.ini option to export FBX names as ascii [FBX Export] ConvertObjectNamesToAscii=y . Requested on the forum by Sven here:


Update view.setCameraAndTarget() function. Take an optional 3rd parameter of an "up" direction vector.

Add script methods for dropping points:
  curve.dropPoint( pt ) - returns curve parameter value of closest point on the curve to the given 3D point.
  curvesegment.dropPoint( pt ) - returns curve parameter value of closest point on the curve segment to the given 3D point.
  face.dropPoint( pt ); - returns 2D uv coordinate point of closest point on the face to the given 3D point.
  brep.dropPoint( pt ); - finds closest point on brep to given 3D point. Returns a list with 3 items, 0: Face object that the closest point is on, 1: 2D uv coordinate for the face, 2: 3D coordinate of the closest point.

Updated face.planarFrame() method for analytic planes to use the same x/y axis alignment that point picking snap plane uses.

Add moi.filesystem.getDirs() method for getting a list of subdirectories within a given dir. Given a directory name and an optional filter string, return a list of sub-directories within that directory. For example: var dirs = moi.filesystem.getDirs( 'c:\\', 'p*' ); Filter can be a semi-colon delimited list of filters.

Add getEdgeIsoType script method
Takes a parameter of which face to consider, an edge can be shared between 2 faces.
var Iso = EdgeCrv.getEdgeIsoType( Face );
Return value:
    -1 : Edge is not an isocurve of the given face.
    0 : Edge is an isocurve of the given face, going in the U direction.
    1 : Edge is an isocurve of the given face, going in the V direction.


Forum announcement

Still not quite finished but really close! Exporting dimensions to PDF/AI formats is still in progress and almost there but I needed to release this new beta now because the current beta expires tomorrow. It has been quite a while since the last beta, please let me know if you see any new bugs surface in this release. It won't be much longer before v4 will be wrapped up.

New stuff:

Updated DXF - support import/export of dimension entities.
    Import of TEXT, MTEXT, LEADER, and DIMENSION (linear, angular, radius/diameter sub types) is now supported. MoI will export dimensions to MTEXT, LEADER, and DIMENSION enties.

Update annotations, add model units scaling behavior.
    There is a new option for annotation behavior under Details > Annotation properties > "Scaling:" which has options for "Scaling: By screen size" or "Scaling: By model units".

    Scaling: "By screen size" works the same as the earlier v4 betas where text and arrowheads stay the same size on screen independent from the current zoom level.

    Scaling: "By model units" is a new option that makes the text and arrowheads to behave the same as geometry, where it is fixed at a certain unit size (given by the Height: field just after it) and will display larger or smaller when you zoom in and out. This option gives better compatibility with other CAD programs since almost all other programs work this way. When you import dimensions from DXF or from a 3DM file created in Rhino they will default to using this method so that things like title blocks where there are lines or other geometry making a table with text inside it will work as expected.

Finished the AnnotationText and Leader command dialogs.

Updated show points for dimension leader. Allow delete of selected edit points for leader objects.

Handle file write errors - an error dialog will show now on file write failures like if the system ran out of disk space or permission denied.

3DConnexion updates:
     - Updated 3dx default speed on Windows. On Windows 3dx translation and rotation speed was too fast, implement same default speed as Mac.
     - Add "Reverse roll" setting in Options dialog under Options > View > Rotate/Pan/Zoom options > 3DConnexion options. Requested by Fred in the forum here:
     - Also added individual settings for reversing twist or tilt in moi.ini, under:

Update SaveAs to STEP/IGES/SAT formats for hidden objects.
    By default don't write hidden objects to STEP/IGES/SAT formats when doing a SaveAs, unless turned on in moi.ini under:
    [NURBS Export]

    Also fixed regression in v4 where the blanked flag for hidden objects was not being set on IGES and SAT export.

Update History
    Enable face extrudes and the Rebuild command to trigger history updates.

Curve offset overhaul - Improve curve offset robustness:
    1 - when extending a line make a new analytic line as the result and use an analytic line/line intersection when possible for more accuracy.

    2 - Update how convex corner processing is done to avoid getting little loops which could confuse trim classification and were not getting trimmed out with shallow angle polylines as reported on the forum by Yanik here:

    3 - Do a better job of selecting intersections and screening out wild results from G2 reflection type extension. Should eliminate crazy looping extensions.

Update grid axis display colors
    Add in Z axis color option under Options > Grid. Grid axis lines are now colored according to their 3D orientation, so for example if you set the Z axis color to blue, then the vertical axis line in the front view will be colored blue. Previously the grid axis lines were colored the same in all viewports. You can re-enable that previous way by a setting in moi.ini :

    Also added in an option for displaying the z axis grid line in the 3D view, under Options > Grid > "Show grid z axis in 3D view" checkbox.

Update IGES export
    Add an option under Options > Import/Export > IGES options > "Write solids as" for writing out solids as either an IGES type 186 "Manifold Solid B-Rep" entity or whether to write them as individual separate surfaces as MoI v3 and earlier always did.

Update Draw solid > Text command - font styles
    Add a Style: option to the Draw solid > Text command to make it possible to access styles of the font other than bold/italic. Requested on the forum by Javier here:

Update error message when command not found.
    Pop up a "command not found" dialog instead of a script exception dialog if trying to exec a command that was not found in any command folder.

Update Help > About dialog
    Add links for showing license keys and EULA from Help > About dialog. The license key dialog also has an option to clear out license keys.

Detailed object properties dialog
    Implement undo for annotation property changes in detailed object properties dialog.

Update detailed properties panel types report
    Add reports for all curves, all edges, and all brep edges if there is a mix of different types so there is one label that can be targeted for grabbing all edges or all curves instead of needing to shift+click on both "Open curves" and "Closed curves" for example.

Add scale factor option for SubD import, in moi.ini
    [SubD Import]     ScaleFactor=1.0     requested by Tudor in the forum here:     http://moi3d.com/forum/index.php?webtag=MOI&msg=8665.109

Update annotations bounding size
    Don't include annotations in the bounding size for the edit frame or the properties panel, unless only annotations are selected.

    There is a moi.ini option to include annotations always in these sizes:
    [Annotations] IncludeAnnotationsInBoundingBox=y
         Discussed in the forum here:
    http://moi3d.com/forum/index.php?webtag=MOI&msg=9526.30      Update persistence of "Mesh angle" option.
    On startup, clamp the value for Options > View > Meshing parameters > Mesh angle to be between 10 and 45 degrees. It can be set lower by a startup script.

Update annotation text display - substitution fonts
    Enable use of substitution fonts in annotation text rendering. This will automatically switch to a fallback font if the current font does not have glyphs for unicode text characters being displayed.

Update sub-d import
    Use mesh object name in sub-d obj file conversion, and merge styles with the same names and colors. Requested in the forum by pafurijaz here:     http://moi3d.com/forum/index.php?webtag=MOI&msg=9660.142

Update edit styles dialog.
    Show gray text on styles with nothing assigned to them same as the scene browser. Requested by pafurijaz in the forum here:     http://moi3d.com/forum/index.php?webtag=MOI&msg=9660.148

Update object dragging
    Option for disabling object dragging so clicking on objects will only do selections and not any drags.Set under moi.ini under:     [Selection]     <...>'     DisableObjectDrag=y

Bug fixes:

Fix window un-maximize bug on Windows - Fixed bug where the restored window position used for un-maximizing a window would keep growing larger on every run.

Updated selection with filters on - if a selection filter is active, when clicking on an edge or face object to select it do the selection update immediately on the mouse press instead of mouse release. Fixes a bug reported by pior in the forum here:

Updated hit testing. Fixed bug where edge boost for selected breps was happening even for objects with selection lock on them. So in the case of boolean difference, the base object was having its edges boosted over top of any standalone curves in the same spot, preventing them from being selected. Fixes a bug reported through e-mail by Vladimir.

Fixed annotation text bugs with text anchor property. The text anchor property was not persisting properly for all values.

Fixed a bug with importing a DEGENERATE_TOROIDAL_SURFACE surface type through STEP format.

Fixed a chamfer/fillet bug with skinny surfaces. If a chamfer surface was skinny (less than 10*tolerance across) it was possible for the chamfer surfaces to get connected improperly since it took just the first one within tolerance instead of the closest one.

Fixed a bug with keyboard shortcut handling on Mac with a Japanese keyboard. Reported on the forum by nemuneko here:

Fixed shortcut key bug where capslock key was being interpreted as the letter "A" key.
Reported on the forum by nemuneko here: http://moi3d.com/forum/index.php?webtag=MOI&msg=9660.39

Fixed bugs with dialog size and positioning.
Previously when showing a resizable dialog, if there was a saved size from a previous use it would restore that same size. The bug from that was if the dialog size was done on a high resolution monitor and now the use has switched to a different screen the saved dialog size could exceed the current screen resolution. Fixed by limiting saved dialog width and height by current screen size. Also if a saved position for a dialog will be used, check if it is visible on screen before using it. Additionally, don't allow resizable dialogs to shrink to down 0 width or height. Fixes bugs reported through e-mail by James.

Fixed sweep bug - Freeform sweep framing had a bug when rail segments were anti-tangent. Fixes a bug reported through e-mail by Pilou.

Updated dimension text rendering - Y positioning for glyphs used incorrect rounding. Was causing noticeable mis-positioned glyphs when using Gill Sans 18 pt font on Mac. Fixes a text display bug reported through e-mail by James.

Variable radius filleting - linear blend fix. Fixed a bug in variable radius filleting with "linear blend" option where fillet surfaces were not being extended properly. Fixes a bug reported on the forum by Dan R here:

Fixed arrowhead bug - outside dimension arrowhead lines not placed correctly on larger scaled objects. Fixes a bug reported through e-mail by James.

Fixed dimension feet & inches display - for feet&inches, check if the font does not support any Unicode fraction characters being used and if not replace with long form text like 1/2.

Fixed STEP/IGES import of composite curve entities with G0 discontinuities. Look for G0 discontinuities in imported curves and break those out to separate curves.

Fix file dialog bug - Fix bug where file open dialog called by script was not returning empty string when canceled. Fixes node editor bug reported in the forum by Wayne here:

Fix Extrude bug with end caps disabled - When making a curve extrude with end caps disabled, a brep with disjoint shells would be created if there were any interior holes in the extrusion.

Update sweep - true up rail segment ends. If segment end tangents are within 2 degrees of tangent, true them up to be exactly tangent if possible. This can improve corner mitering fails with segments that are nearly G1 but not quite. Fixes bug reported through e-mail by Salvatore.

Fix curve fillet bugs -
    Fix curve filleting bug reported by Cemortan_Tudor in the forum here:
    and also another curve filleting bug reported a long time ago in the forum by macray here:

Fix select last created not working with drag/copy. Reported by Tudor in the forum here:

Fix bug in orient line / line
Fix bug when line directions pointing opposite each other. Fixes a bug reported in the forum by Karsten here:

Fix file dialog crash on Mac Catalina OS
Implement fix for QTBUG-83342 for an OS bug that could cause the file dialog to crash on Mac Catalina OS.

Scripting updates:

Added Curve.getIsTangentEdge( AngleToleranceDegrees /* optional, default = 2 degrees */ );
    - returns true if the 2 surfaces on either side of the edge are tangent to each other.

Added CurveSegment.getIsG1ToAdjacentSegment( 0 /* 0 for start, 1 for end */ );
    - returns true if the next segment at the start or end is smooth to the current curve segment.

moi.filesystem.shellExecute(), added wait for finished parameter.
    moi.filesystem.shellExecute( path, params, wait ) now takes an optional 3rd boolean parameter for whether to wait until the called process has exited before returning. When used, the return value from shellExecute() is an object containing an .exitCode property for the integer exit code of the called process and an .output string parameter for any text written by the called process to stdout.
    Example:     var res = moi.filesystem.shellExecute( 'cmd /c dir c:\\', , true );     if ( res.output ) moi.ui.alert( res.output );

Updated geometryDatabase::addObject()
    Ignore the add if the given object is already in the geometry database. Fixes node editor bug reported by Brian here:     http://moi3d.com/forum/index.php?webtag=MOI&msg=7777.1668

Add face.isNew and curve.isNewEdge properties.
    These will be set to true if the face or edge was newly generated instead of coming from a copy or split off piece of an original one.
    script: /* Select new edges at intersections after a boolean command */ moi.geometryDatabase.deselectAll();
    var breps = moi.geometryDatabase.getLastCreated().getBReps(); for ( var i = 0; i < breps.length; ++i )
    { var edges = breps.item(i).getEdges(); for ( var j = 0; j < edges.length; ++j ) { var e = edges.item(j);
    if ( e.isNewEdge ) e.selected = true; } }

Add moi.geometryDatabase.getLastCreated(); - get an object list of the objects that were created by the last run command.
    script: /* Select fillet surfaces */ moi.geometryDatabase.deselectAll(); var breps = moi.geometryDatabase.getLastCreated().getBReps();
    for ( var i = 0; i < breps.length; ++i ) { var faces = breps.item(i).getFaces(); for ( var j = 0; j < faces.length; ++j )
    { var f = faces.item(j); if ( f.isNew ) f.selected = true; } }

Update MoiList and ObjectList - Add list.clear() and objectlist.clear() methods which will empty out the list so it has length=0.

Add curve.changeClosedCurveSeam( new_start_parameter, rebuild_circles /*optional, default = true */ );

Update scripting - window moving and sizing methods.
    Add window positioning methods:

    win.move( x, y ); - move the window to the given x,y screen coordinates. Can be given either one argument of an object with x,y properties, or 2 numeric arguments.
    win.resize( width, height ) - resize the client area of a window to the given width and height. Can be given either one argument with x,y or width,height properties, or 2 numeric arguments.
    win.getPosition() - returns an object with .x and .y properties for the window's screen coordinates.
    win.getSize() - returns an object with .width and .height properties for the window's client area width and height.
    win.getFrameSize() - returns an object with .width and .height properties for the window frame's width and height.

    Also added moi.ui.getScreenRect( element ) which will give the screen coordinates of the given element or UIPanel. Returns an object with .left, .top, .right, .bottom, .width, and .height properties.

    Example - increase the Options dialog width by 10 pixels:

    var uipanel = moi.ui.getUIPanel( 'moi://ui/options.htm' );
    if ( uipanel )
        var dlg = uipanel.moiWindow;
    var pos = dlg.getSize(); pos.width += 10; dlg.resize( pos );

    Example - position the Options dialog to the right of the side pane:

    var options = moi.ui.getUIPanel( 'moi://ui/options.htm' );
    if ( options )
        var rc = moi.ui.getScreenRect(moi.ui.sidePane);

Update view tabs customization
    Call a function UpdateViewTab( TabButton ) in the UI when a view tab has been reversed, so that it is possible to implement custom UI like having images there instead of text. Requested on the forum by Tim Whiteman here:

Update Esc script cancelling
    Use different method to determine time since last wait for event. The previous method of watching calls to WaitableObject::waitForEvent() is not good because there are other kinds of event loops that do not go through WaitableObject, like modal dialogs or combo box dropdowns. The new method should handle all types of event loops.

Update offset factory - Enable a new property factory.curveOffsetDistance to return the distance used by offset in through point mode.

Update pointpicker, add .recalc() method Requested on the forum by Tudor here:


Forum announcement

This should be the last v4 beta unless any new bugs pop up. The only remaining area for finishing v4 is to update the documentation.

New stuff:

Implemented dimension output to PDF/AI formats.

Loosen cplane projection behavior for dimensions. Projection to the cplane is now a checkbox option inside the dim commands. When turned off you can now do things like pick the first point in the 3D view and then the next point in an ortho view instead of all points being projected to the cplane of the first pick (which can still be enabled by the Project to cplane checkbox option). You can also now create a linear dimension going in the z-axis direction in the 3D view.

Lightweight conics for PDF/AI export - Use specialized fitter for circles, arcs, ellipses and elliptical arcs to make a lighter weight control point structure. Can be disabled by a setting in moi.ini, add in an entry under [AI/PDF Export] :
[AI/PDF Export] UseLightweightConics=n

Update dimension grid snap. Fix bug where grid snap was snapping to a displaced grid if the initial picked point was not on a grid point. Fixes bug reported in the forum by Larry here:

64-bit 3DM file output - switch to Rhino v5 3DM output by default and fixed a bug to allow 3DM files sizes greater than 2GB. Also added a moi.ini option to control the default 3DM version:
[3DM] Version= Can be set to Version=4 to make Rhino v4 3DM output which was what MoI v3 used.

Update FBX default version. Update default FBX file version to 2013/7.3/7300 since Blender does not support 2010/6.1/6100 .

PDF/AI export - Fix bug with "Preserve units" + "Center on page" option. Fixes a bug reported on the forum by David here:

Update DXF spline import - handle DXF output from CorelDRAW with duplicated points. Fixes DXF import problems reported on the forum here:

Fixed an infinite loop bug in Qt when showing popup windows in a certain order.

Update curve control point editing - maintain analytic curves. When doing control point editing on multi segment curves, maintain analytic curve types for segments that are not affected by the current control point selection.

Updated Esc key handling. If there is a waitable object that has called allowNestedCancel(), don't make Esc cancel the entire command. This should give equivalent behavior for command flow whether clicking on tthe "Cancel" button or using Esc. Fixes a problem reported in the forum by Larry here:

Update color picker dialog - fix dialog size shifting when using "Pick Screen Color" button.
Fixes a bug reported by Wayne on the forum here:

Updated SubD import library with fixes for a couple of remaining crash cases when processing malformed mesh topology.

Update IGES/STEP output - option for not generating output as an assembly structure. Can be set in moi.ini for IGES or STEP output under:
[IGES] ExportFlattenAssemblies=y
[STEP] ExportFlattenAssemblies=y
Set to =y to generate output without assembly structures same as V3. Should fix problem with exporting to Condacam reported by Joerg in the forum here: http://moi3d.com/forum/index.php?webtag=MOI&msg=9942.105

Scroll bar bug fix - Update Qt webkit to fix bug when dragging scroll bar and releasing mouse outside window resetting scroll position to top. Fixes a bug reported by Frederick on the forum here:

Fix edge selection bug after boolean union in areas where planes were merged together. Fixes a bug reported in e-mail by Pilou.

Update IncrementalSave - Maintain leading 0 padding in current filename, so File_0020.3dm for example will make File_0021.3dm instead of just File_21.3dm as it previously did.

Add Align option to Draw solid > Text command. Requested by Stefano in the forum here:

Add option for showing annotations in a specific color instead of by style color. In moi.ini under the [View] section:
The color mode can be either ByStyle or FixedColor. If set to AnnotationColorMode=FixedColor then they will show using the color from AnnotationFixedColor=R,G,B (each with a value from 0 to 255).
Requested by Stefano in the forum here:

Add Value: property to Details... properties dialog for dimensions for copying value to the clipboard. Requested by Mindset in the forum here:

Add option in moi.ini for not limiting Options > View > Meshing parameters > "Mesh angle" value:


Add moi.ui.getLastOrientationPickerFrame() - returns the coordinate frame that was picked with the last OrientationPicker.

Update startup scripts - call startup scripts after first UI panel layout has been completed so things like the side pane tabs can be manipulated by the script.


Forum announcement

I'm just about ready for the final v4 release. There were a few bugs fixed since the previous v4 beta and the v4 final release, and so I'm publishing this final v4 beta with those last fixes included.

New stuff:

Documentation has been updated for v4.

Update angular dimension extension lines. Only draw extension lines for angular dimensions from the arc to the picked points, not from arc all the way to the center. Fixes angular dimension issues reported in the forum by Mik here:

Update DimRadius command. Fix problem with placing first dimension point further away than the arc's center point. Fixes bug reported by WN on the forum here:

Update Inset command - Allow thickness of 0 in Inset command for some additional effects. Discussed in the forum here:

Bug fixes:

Fixed regression with named object selection by typing in object names in the XYZ input control. This was broken a couple builds back with a new "Command not found" error message showing if the input did not match any command names.

Fixed regression in numeric input field handling. Match behavior of v3 when erasing all text in an input field, set a value of 0 in this case. Fixes regression reported by PaQ in the forum here:

Update static objects rendering - check for 32-bit index buffer support before trying to use it.

Update Chamfer - make analytic plane for chamfer surface when possible, fixes Inset failing on a newly generated chamfer which would succeed when saved to 3dm and reloaded. Reported on the forum here:

Update Mac font fallbacks. Fix Qt problem where DefaultFontFallbacks.plist file is not present on Catalina OS anymore.

Update BGFX error handling - Put up a message box if BGFX returns a fatal error and guard against using it if it was not initialized, rather than crashing.

Update Undo settings - fix shutdown bug where undo settings were not being written to moi.ini on app shutdown.

Update SKP and FBX export - fix bug where SKP/FBX export didn't work right with some filenames with extended characters.


Update PointPicker script properties so a script can tell if there is a straight snap currently active.
Added pointpicker.hasBasePt , pointpicker.hasStraightSnap , pointpicker.straightSnapDir read only properties.
This makes it possible to do a "direction lock" shortcut key:
var pp = moi.ui.getActivePointPicker(); if ( pp && pp.hasStraightSnap ) { pp.restrictToLinePtDir( pp.basePt, pp.straightSnapDir, true ); }


V4 release version.