3D Viewer: Highlight Points
(Return to the Developer Documentation page)
(Return to the main 3D_Viewer page)
How to highlight named points of a Content
You can download example source code for this HowTo here.
Each Content
owns a list of named points, which may e.g. be used to mark specific positions. By default, the point list is not shown, but it can be switched on, which displays the points as spheres in the universe and opens a dialog showing a list of the points.
The following example shows how to retrieve the point list of a Content
and add a few points:
// Add the image as a volume Content c = univ.addVoltex(imp); // Make the point list visible c.showPointList(true); // Retrieve the point list PointList pl = c.getPointList(); // Add a few points pl.add(190, 450, 170); pl.add(330, 370, 300); pl.add(430, 90, 150);
The coordinates specified to create a new point are local coordinates of the corresponding Content
.
Sometimes, it's convenient to select a point on the surface of a Content
at a specific canvas position. This is also possible, by using the Picker
class. A reference to a Picker
object can be obtained from the universe:
// Add a point at a specific canvas position univ.getPicker().addPoint(c, 256, 256);
The points have a default size, which can be changed:
// Change the size of the points float curr = c.getLandmarkPointSize(); c.setLandmarkPointSize(curr * 2);
To delete the first point in the list;
// delete the first point pl.remove(0);
To rename a point:
// rename the now first point pl.rename(pl.get(0), "newName");
To change the position of a point:
// change the position of the now first point pl.placePoint(pl.get(0), 190, 450, 170);
Important methods regarding landmark points
Important methods are found in Content.java
and PointList.java
.
Content.java:
public void showPointList(boolean b); public PointList getPointList(); public void loadPointList(); public void savePointList(); public float getLandmarkPointSize(); public void setLandmarkPointSize(float r);
PointList.java
:
public void add(BenesNamedPoint point); public void add(String name, double x, double y, double z); public void add(double x, double y, double z); public void remove(BenesNamedPoint point); public void remove(int i); public void clear(); public void rename(BenesNamedPoint point, String name); public void up(BenesNamedPoint point); public void down(BenesNamedPoint point); public void highlight(BenesNamedPoint p); public void placePoint(BenesNamedPoint point, double x, double y, double z); public BenesNamedPoint get(int index); public int indexOf(BenesNamedPoint p); public int indexOfPointAt(double x, double y, double z, double tol); public BenesNamedPoint pointAt(double x, double y, double z, double tol); public int size(); public BenesNamedPoint get(String name); public Iterator iterator();
Both Content.java
and PointList.java
provide a save()
and load()
method, but it is highly recommended to use that of Content.java
.