A new v5 beta (version Mar-28-2023) is now available for download here:
http://moi3d.com/beta.htm , also linked to from the download page on the main web site.
Initial integration of the ACIS geometry kernel into MoI, starting with fillets.
Fillets are now being calculated by ACIS. Still a work in progress but many types of fillets that failed before are now working.
You can switch back to the old fillets with the "Library" option in the fillet command options.
New cross hatching option when generating a 2D drawing to PDF, AI, or SVG formats:
Thumbnail images are now written in .3dm files and shell extensions for Mac and Windows are included in MoI so you can now see thumbnail images when browsing .3dm files in Windows File Explorer or macOS Finder.
You can disable making embedded thumbnail images under Options > 3DM options > "Write thumbnail preview image" checkbox.
There is a setting in moi.ini for thumbnail image size: [3DM] ThumbnailSize=256
Can range from 64 to 1024
Supported platforms are a little different now due to the ACIS integration - on Windows, Windows 7 SP1, 8.1, 10 and 11 64-bit are supported. Windows 7 without SP1 and Windows 8.0 are not supported. On Mac 10.14 and higher is supported.
Scene browser assignment - now when you click on a name in the Scene Browser, a menu will pop up with options for "Assign selection here" or "Rename":
Update group selection - Make Ctrl+click on an unselected object that is inside of a group drill in to select that object directly instead of any intermediate groups.
Various minor bug fixes with a lot for groups.
Update SubD import - rotate Y-Up to Z-Up. By default rotate FBX subd import from the FBX Y-up coordinate system to MoI's Z-up coordinate system.
Can be disabled for both OBJ and FBX imports with a new setting under:
Options > Import/Export > SubD import options > "Rotate y-up to z-up OBJ" and "Rotate y-up to z-up OBJ" checkboxes.
Update array curve with "align to surface" option
Minimize the rotation applied to align to surface normal. Fixes a bug reported in the forum by Barry here:
http://moi3d.com/forum/index.php?webtag=MOI&msg=10725.1
Update projection view dropdown
Add an option "Active" in addition to 3D / Top / Front / Right when choosing projection views, which will use the active viewport.
Affects Make2D, Silhouette commands and also AI/PDF/SVG/DXF export.
Fix SVG locale bug
Don't use locale-aware string formatting for SVG attributes. Should not have comma values for decimal separator.
Update windows installer
Add checkbox to installer for "Create file associations", so that changing file associations can be disabled by the user.
Update Rebuild command
Add option for Endpoints mode,either Points: Interpolate or Points: CVs for making either an interpolated curve or a control points curve from the polyline endpoints. Requested on the forum by pafurijaz here:
http://moi3d.com/forum/index.php?webtag=MOI&msg=10953.9
Update command parameters
if there is a parameter repeat=true then set the repeat command checkbox.
Add moi.ini option for controlling what version of SketchUp SKP file to write:
[SKP]
SUModelVersion=Current
Version can be: SU3-SU8, SU2013-SU2016 and on Mac up to SU2021
Scripting:
Update moi.geometryDatabase.getObjects() group handling. Return objects inside groups with moi.geometryDatabase.getObjects() for increased compatibility
with existing scripts. Can pass getObjects( false ) to disable going into groups.
Group traversal - add .getFirstNode() and .getNextNode( current_node ) functions on group objects. This will only traverse groups and any objects that are the
immediate child of a group but not go into sub-objects like curve segments.
Implement document user text for scripts
New document user text values so scripts can add data that is saved and restored from 3DM files.
New methods under moi.geometryDatabase:
.setUserText( Key, Value ); - Set text value for given key.
.getUserText( Key ); - Returns text value for given key, or undefined if not present.
.removeUserText( Key ); - Remove user text value for given key.
.getAllUserText(); - Return list of all user text, each object has .key and .value properties.
.clearAllUserText(); - Clear all document user text.
There is also now object user text available for scripts to store data on an object:
.setUserText( Key, Value ); - Set text value for given key.
.getUserText( Key ); - Returns text value for given key, or undefined if not present.
.removeUserText( Key ); - Remove user text value for given key.
.getAllUserText(); - Return list of all user text, each object has .key and .value properties.
.clearAllUserText(); - Clear all object user text.
Document user text can also be viewed and edited under File > Notes > "Document user text" button and object user text will show on the "Details..." object properties dialog.
Add screenTol property to point stream picker so behavior can be modified from the default 5 pixels that the mouse has to travel before generating a new point for Sketch curve.
Can set pointstreampicker.screenTol = 0.0 to take all points regardless of distance from previous point, or something like pointstreampicker.screenTol = 30.0; to make it sparser.
Make MoiList and ObjectList implement .push() and .pop() methods with same behavior as JavaScript array.
For push() the arguments are appended to the end of the list in the order in which they appear. The new length of the list is returned as the result of the call. The push() for ObjectList can take another ObjectList or JavaScript array and it will look through the contents to find objects.
For pop() the last element of the list is removed from the list and returned. If the list is empty, returns undefined.
Updated script function argument getter. Code that is looking for an ObjectList passed as a function argument will now accept a single object and automatically wrap it with a temporary object list, and also accept a JavaScript array object which it will convert into a temporary object list.
Update background image scripting
Add .getEmbeddedImage() function on background images that will return an image object, so that image.szve() can be called to extract an embedded background image out to a separate file again. Requested by Brian on the forum here:
http://moi3d.com/forum/messages.php?webtag=MOI&msg=10813.4
Update face scripting
face.isCylinderSurface - true if the underlying surface for this face is a cylinder.
face.isConeSurface - true if the underlying surface for this face is a cone.
face.isSphereSurface - true if the underlying surface for this face is a sphere.
face.analyticFrame - coordinate frame for a cylinder, cone, or sphere surface.
face.analyticRadius - radius for a cylinder, cone, or sphere surface.
face.analyticHeight - height for a cylinder or cone surface.
Update cplane scripting
Update moi.view.setCPlaneInteractive() - return false if canceled and take optional boolean parameter for allowing nested cancel.
Add moi.command.isCanceled to allow a script to determine if the current running command has been canceled.
Add moi.command.pendingCommandName
Clear command repeat checkbox if a modal dialog has been shown.
Update moi.ini scripting
Add moi.settings.writeIniFile() which will flush the in-memory contents of moi.ini out to disk.
Add moi.settings.getIniValue( 'Section name', 'Key name') which will return an ini value to the calling script or return undefined if not present.
Make all Moi JS objects implement a .toString() function that will give back the individual class name instead of the same generic "MoiObj" name.
So for example doing this on an object list:
var objlist = moi.geometryDatabase.createObjectList();
var name = objlist.toString();
will now give back [object ObjectList], instead of [object MoiObj].
Also MoI script objects can now enumerate object properties using for ... in syntax, like:
for ( propname in obj )
var val = obj[ propname ];
Update Pointpicker scripting
Add pointpicker.screenpt - returns 2d mouse coordinates
Add pointpicker.hitTestSnapPoints( Points ) - takes array of xyz point objects, returns index of one closest to the mouse and within object snap radius or -1 if none found.
Helper function for implementing custom snap function as described here:
http://moi3d.com/forum/index.php?webtag=MOI&msg=10917.2
Add moi.filesystem.getDirName() - directory picker
var dir = moi.filesystem.getDirName( 'Dialog caption', 'c:\\initpath' );
returns '' empty string if canceled.
Add object.setEditPointSelected( index, value ); on objects as a way to set the selection state of an edit point.
Update scripting window position and size.
If a script calls window.move(x,y) or window.resize(w,h) before the window has been loaded, record the given position or size and apply
them when the window is finished loading.
Update scripting - selection undo
Add moi.geometryDatabase.saveSelectionUndo() and moi.geometryDatabase.setSelectionUndoRevision()
so scripts can have selection undo set up for changes to selection/hidden/locked properties as described on the forum here:
http://moi3d.com/forum/index.php?webtag=MOI&msg=10939.10
Update scripting, annotation points and construction lines.
Add method for creating a consruction line from script:
moi.geometryDatabase.addConstructionLine( start, end, isTemporary );
Add annotation.getPoints() which returns a list of the defining points for the annotation.
Update point picker
Add new properties to control pointpicker:
pointpicker.dontMakeConstructionLines = true;
pointpicker.finishOnMouseMove = true;
Add pointpicker.disableGridSnap and pointstreampicker.disableGridSnap properties.
Thanks, - Michael