[Scripting] Pick 3D View Target

 From:  Umdee (BFEDACK)
7056.2 In reply to 7056.1 
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];

EDITED: 23 Nov 2014 by BFEDACK