V4 beta Feb-9-2018 available now

 From:  Michael Gibson
8814.1 
A new v4 beta (version Feb-9-2018) is now available for download here: http://moi3d.com/beta.htm , also linked to from the download page on the main web site.

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

 

Scripting:

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();

EDITED: 10 Feb 2018 by MICHAEL GIBSON