While the above script gets the job done, there are a few ways to improve it. However, my brief foray into JavaScript and the Moi scripting docs renders me ill-equipped to do so. Here are my questions:
1. Can the view be refreshed at the end of the script to remove lingering artifacts, such as the occasional point graphic that remains after picking?
2. If I have no need for construction lines while picking, is there a way to disable them to simplify user interaction?
3. Let's say I want only surface snapping enabled during the picking process. Is there a concise way to store snapping states, disable all but surface snapping, and restore snapping states? Here is an ugly way that seems to work:
code:
// Save object snapping states.
var drawingAids = moi.drawingAids;
var objectSnaps = [
drawingAids.objectSnapOrigin,
drawingAids.objectSnapAxis,
drawingAids.objectSnapEnd,
drawingAids.objectSnapMid,
drawingAids.objectSnapCen,
drawingAids.objectSnapInt,
drawingAids.objectSnapQuad,
drawingAids.objectSnapPt,
drawingAids.objectSnapOn,
drawingAids.objectSnapSrf,
drawingAids.objectSnapPerp,
drawingAids.objectSnapTan,
drawingAids.objectSnapPerpPerp,
drawingAids.objectSnapTanTan
];
// Disable all but surface snapping.
drawingAids.objectSnapOrigin = false;
drawingAids.objectSnapAxis = false;
drawingAids.objectSnapEnd = false;
drawingAids.objectSnapMid = false;
drawingAids.objectSnapCen = false;
drawingAids.objectSnapInt = false;
drawingAids.objectSnapQuad = false;
drawingAids.objectSnapPt = false;
drawingAids.objectSnapOn = false;
drawingAids.objectSnapSrf = true;
drawingAids.objectSnapPerp = false;
drawingAids.objectSnapTan = false;
drawingAids.objectSnapPerpPerp = false;
drawingAids.objectSnapTanTan = false;
// Create a point picker.
var pointPicker = moi.ui.createPointPicker();
// Disable all but object snapping.
pointPicker.disableGridSnap = true;
pointPicker.disableStraightSnap = true;
pointPicker.enableObjectSnap = true;
// Wait for the user to pick a point.
pointPicker.waitForEvent();
// The user picked a point.
if (pointPicker.event == 'finished') {
// Set the 3D viewport's target to the location of the picked point.
moi.ui.mainWindow.viewpanel.getViewport('3D').targetPt = pointPicker.pt;
}
// Restore object snapping states.
drawingAids.objectSnapOrigin = objectSnaps[0];
drawingAids.objectSnapAxis = objectSnaps[1];
drawingAids.objectSnapEnd = objectSnaps[2];
drawingAids.objectSnapMid = objectSnaps[3];
drawingAids.objectSnapCen = objectSnaps[4];
drawingAids.objectSnapInt = objectSnaps[5];
drawingAids.objectSnapQuad = objectSnaps[6];
drawingAids.objectSnapPt = objectSnaps[7];
drawingAids.objectSnapOn = objectSnaps[8];
drawingAids.objectSnapSrf = objectSnaps[9];
drawingAids.objectSnapPerp = objectSnaps[10];
drawingAids.objectSnapTan = objectSnaps[11];
drawingAids.objectSnapPerpPerp = objectSnaps[12];
drawingAids.objectSnapTanTan = objectSnaps[13];
|