SnapPointPicker

class cee.SnapPointPicker()

Helper class for implementing Snap-to features in an application

To snap to a point on while checking if the point is visible (not obscured by the model(s)):

 // Get the ray at mouse position
const ray = myViewer.rayFromMouseCoordinate(myView, event.clientX, event.clientY);

// Find the radius to use based on model extent
const modelBoundingBox = myModel.getBoundingBox();
const radius = modelBoundingBox.getExtent().getLength()/100;
let closestPoint = null;

// Snap to point, check if visible
const snapPointPicker = new cee.SnapPointPicker(myView, ray, radius);
const pointIndex = snapPointPicker.findClosestPoint(myHotSpots);

if (pointIndex >= 0) {
    closestPoint = new cee.Vec3(myHotSpots[3*pointIndex],
       myHotSpots[3*pointIndex + 1], myHotSpots[3*pointIndex + 2]);
}

To just find the closest point to the view, not checking the model if the point is visible:

// Snap to closest point, not checking the model
const pointIndex = cee.RaySphereIntersector.findClosestIntersectedSphereToRay(ray, radius, g.hotSpots);

if (pointIndex >= 0) {
    closestPoint = new cee.Vec3(g.hotSpots[3*pointIndex],
       g.hotSpots[3*pointIndex + 1], g.hotSpots[3*pointIndex + 2]);
}

Constructors


Constructors

constructor

cee.SnapPointPicker.constructor(view, ray, radius)
Arguments
Return type

cee.SnapPointPicker

Methods

findClosestPoint

cee.SnapPointPicker.findClosestPoint(pointsArr)

Find the point closest to the ray that is visible (not obsured by the model).

Arguments
  • pointsArr (ArrayLike[number]) –

Return type

number

The radius determines the maximum distance from the point in order to snap to it.

The pointsArr array contains a number of points (sphere centers) in a 1d array: <s1.x, s1.y, s1.z, s2.x, s2.y, s2.z> …

Returns the index of the closest visible point. -1 if there was not hit.