package org.jzy3d.chart.controllers.mouse.selection;
import java.awt.Graphics2D;
import java.util.Deque;
import java.util.List;
import org.jzy3d.maths.ConvexHull;
import org.jzy3d.maths.Coord2d;
import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.primitives.selectable.SelectableSphere;
import org.jzy3d.plot3d.rendering.scene.Scene;
import org.jzy3d.plot3d.rendering.view.View;
public class AWTSphereMouseSelector extends AWTAbstractMouseSelector {
public AWTSphereMouseSelector(SelectableSphere scatter) {
this.sphere = scatter;
}
/** Make projection and match points belonging to selection. */
@Override
protected void processSelection(Scene scene, View view, int width, int height) {
view.project();
projection = sphere.getProjection();
sphere.setHighlighted(false);
for (Coord3d p : projection)
if (matchRectangleSelection(in, out, p, width, height)) {
sphere.setHighlighted(true);
}
}
@Override
protected void drawSelection(Graphics2D g2d, int width, int height) {
this.width = width;
this.height = height;
if (dragging)
drawRectangle(g2d, in, out);
if (projection != null && sphere.isHighlighted()) {
hull = ConvexHull.build2d(projection);
Coord2d prev = hull.pop();
Coord2d next;
g2d.setColor(java.awt.Color.GREEN);
while (!hull.isEmpty()) {
next = hull.pop();
g2d.drawOval((int) prev.getX() - 4, (int) prev.getY() - 4, 8, 8);
g2d.drawLine((int) prev.getX(), (int) prev.getY(), (int) next.getX(), (int) next.getY());
prev = next;
}
g2d.setColor(java.awt.Color.BLUE);
for (Coord3d c1 : projection) {
g2d.drawOval((int) c1.x - 2, (int) c1.y - 2, 4, 4);
}
}
}
@Override
public void clearLastSelection() {
sphere.setHighlighted(false);
projection = null;
}
protected SelectableSphere sphere;
protected int width;
protected int height;
protected List projection;
protected Deque hull;
}
Ads help maintain this website.