ini.trakem2.display
Class Ball

java.lang.Object
  extended by ini.trakem2.persistence.DBObject
      extended by ini.trakem2.display.Displayable
          extended by ini.trakem2.display.ZDisplayable
              extended by ini.trakem2.display.Ball
All Implemented Interfaces:
Paintable, VectorData

public class Ball
extends ZDisplayable
implements VectorData


Nested Class Summary
 
Nested classes/interfaces inherited from class ini.trakem2.display.Displayable
Displayable.DataPackage, Displayable.DoEdit, Displayable.DoEdits, Displayable.DoTransforms, Displayable.SliderListener
 
Field Summary
protected  int n_points
          The number of points.
protected  double[][] p
          The array of clicked points.
protected  long[] p_layer
          The array of Layers over which each point lives
protected  double[] p_width
          The width of each point.
 
Fields inherited from class ini.trakem2.display.ZDisplayable
layer_set
 
Fields inherited from class ini.trakem2.display.Displayable
alpha, annotation, at, color, COMPOSITE_ADD, COMPOSITE_COLOR_YCBCR, COMPOSITE_DIFFERENCE, COMPOSITE_MULTIPLY, COMPOSITE_NORMAL, COMPOSITE_SUBTRACT, compositeModes, height, hs_linked, last_color, layer, linked_props, linked_props_origins, locked, props, TAG_ATTR1, TAG_ATTR2, title, visible, width
 
Fields inherited from class ini.trakem2.persistence.DBObject
id, project
 
Constructor Summary
Ball(Project project, long id, java.util.HashMap<java.lang.String,java.lang.String> ht, java.util.HashMap<Displayable,java.lang.String> ht_links)
          Construct a Ball from an XML entry.
Ball(Project project, long id, java.lang.String title, float width, float height, float alpha, boolean visible, java.awt.Color color, boolean locked, java.awt.geom.AffineTransform at)
          Construct an unloaded Ball from the database.
Ball(Project project, java.lang.String title, double x, double y)
           
 
Method Summary
 void addBall(double x, double y, double r, long layer_id)
          Used to add individual ball objects when parsing.
protected  int addPoint(double x_p, double y_p, long layer_id, double radius)
          Add a point either at the end or between two existing points, with accuracy depending on magnification.
 void adjustProperties()
          Shows a dialog to adjust properties of this object.
 boolean apply(Layer la, java.awt.geom.Area roi, mpicbg.models.CoordinateTransform ict)
          Applies the 2D transform @ict (which is expected to operate on the world coordinates version of the data contained here) only to the data that falls within the @param roi (in world coords), and then recomputes the bounding box and affine transform (to a translation or identity).
 boolean apply(VectorDataTransform vdt)
           
protected  boolean calculateBoundingBox(Layer la)
           
 Displayable clone(Project pr, boolean copy_id)
          Performs a deep copy of this object, without the links.
 boolean contains(Layer layer, int x, int y)
          Test whether the Ball contains the given point at the given layer.
 boolean crop(java.util.List<Layer> range)
          Retain the data within the layer range, and throw out all the rest.
 void destroy()
          Release all memory resources taken by this object.
static void exportDTD(java.lang.StringBuilder sb_header, java.util.HashSet<java.lang.String> hs, java.lang.String indent)
           
 void exportSVG(java.lang.StringBuffer data, double z_scale, java.lang.String indent)
          Does nothing unless overriden.
 void exportXML(java.lang.StringBuilder sb_body, java.lang.String indent, java.lang.Object any)
          Similar to exportSVG but the layer_id is saved instead of the z.
protected  int findPoint(double[][] a, int x_p, int y_p, double magnification, long lid)
          Find a point in an array, with a precision dependent on the magnification.
 void flush()
          Release memory resources used by this object: namely the arrays of points, which can be reloaded with a call to setupForDisplay()
static double[][][] generateGlobe(int meridians, int parallels)
          Generate a globe of radius 1.0 that can be used for any Ball.
 java.util.List<javax.vecmath.Point3f> generateTriangles(double scale, double[][][] globe)
          Put all balls as a single 'mesh'; the returned list contains all faces as three consecutive Point3f.
 java.awt.geom.Area getAreaAt(Layer layer)
          This area is meant to represent the entire area where a Displayable paints to in the @param layer.
 double[][] getBalls()
          Returns a [n_points][4] array, with x,y,z,radius on the second part; not transformed, but local! To obtain balls in world coordinates, calibrated, use getWorldBalls().
 int getCount()
          Return the number of balls.
 Layer getFirstLayer()
          Returns the layer of lowest Z coordinate where this ZDisplayable has a point in, or the creation layer if no points yet.
 java.lang.String getInfo()
          Returns information on the number of ball objects per layer.
 java.util.Collection<java.lang.Long> getLayerIds()
          Get the list of Layer ids on which this ZDisplayable has data on.
 java.awt.Polygon getPerimeter()
          The exact perimeter of this Ball, in integer precision.
 java.lang.String[] getPointsForSQL()
          Return the list of query statements needed to insert all the points in the database.
 java.util.Map<Layer,double[]> getRawBalls()
          Returns the raw data for the balls, sorted by Layer ID versus double[]{z,y,r} .
 double[][] getWorldBalls()
          Returns a [n_points][4] array, with x,y,z,radius on the second part, in world coordinates (that is, transformed with this AffineTransform and calibrated with the containing LayerSet's calibration).
 boolean intersects(java.awt.geom.Area area, double z_first, double z_last)
           
 boolean isDeletable()
           
protected  boolean isRoughlyInside(Layer layer, java.awt.Rectangle r)
          If this Displayable intersects with @param r or almost intersects, then returns true.
 void keyPressed(java.awt.event.KeyEvent ke)
           
protected  boolean layerRemoved(Layer la)
          Update internal datastructures to reflect the fact that @param layer has been removed from the containing LayerSet.
 boolean linkPatches()
          Link the Patch objects that lay underneath the part of the bounding box of this profile that shows in the current layer, so that they cannot be dragged independently.
 ij.measure.ResultsTable measure(ij.measure.ResultsTable rt)
          Returns a listing of all balls contained here, one per row with index, x, y, z, and radius, all calibrated.
 void mouseDragged(java.awt.event.MouseEvent me, Layer layer, int x_p, int y_p, int x_d, int y_d, int x_d_old, int y_d_old)
           
 void mousePressed(java.awt.event.MouseEvent me, Layer layer, int x_p, int y_p, double mag)
           
 void mouseReleased(java.awt.event.MouseEvent me, Layer layer, int x_p, int y_p, int x_d, int y_d, int x_r, int y_r)
           
 void paint(java.awt.Graphics2D g, java.awt.Rectangle srcRect, double magnification, boolean active, int channels, Layer active_layer, java.util.List<Layer> layers)
           
 boolean paintsAt(Layer layer)
          Check if this instance will paint anything at the level of the given Layer.
protected  void removePoint(int index)
          Remove a point.
 void repaint(boolean repaint_navigator, Layer layer)
          Repaints in the given ImageCanvas only the area corresponding to the bounding box of this Profile.
 void set(int i, double x, double y, Layer la, double radius)
          Set the x,y,radius raw pixel values for the ball at index i.
 void setRadius(int i, double radius)
          Set the radius (raw pixel value) for the ball at index i.
 void toShapesFile(java.lang.StringBuffer data, java.lang.String group, java.lang.String color, double z_scale)
          Writes the data of this object as a Ball object in the .shapes file represented by the 'data' StringBuffer.
 
Methods inherited from class ini.trakem2.display.ZDisplayable
exportDTD, getBucketable, getLayerSet, remove, remove2, setColor, setLayer, setLayerSet, setLayerSet, setPosition, setVisible, softRemove, transformPoints, updateBucket, updateBucket
 
Methods inherited from class ini.trakem2.display.Displayable
areThereLayerCrossLinks, canSendTo, clone, clone, commonDTDChildren, contains, deselect, displacePoints, findById, findNearestPoint, findNearestPoint, getAffineTransform, getAffineTransformCopy, getAlpha, getAnnotation, getArea, getAreaForBucket, getBoundingBox, getBoundingBox, getBoundingBox, getBounds, getBounds, getColor, getComposite, getComposite, getCompositeMode, getHeight, getIntersection, getLayer, getLayersWithData, getLinked, getLinked, getLinkedBox, getLinkedGroup, getLinkedProperties, getLinkedProperties, getLinkedProperty, getLinkedProperty, getMinimalBoundingBox, getNameId, getPerimeter, getProperties, getProperty, getProperty, getShortTitle, getTitle, getWidth, getX, getXMLSafeValue, getXMLSafeValue, getY, hasLinkedGroupWithinLayer, hasProperties, intersects, intersects, intersects, intersects, inverseTransformPoint, isLinked, isLinked, isLinked, isLocked, isLocked2, isOnlyLinkedTo, isOnlyLinkedTo, isOutOfRepaintingClip, isOutOfRepaintingClip, isVisible, link, link, makeAdjustPropertiesDialog, mouseWheelMoved, paintAsBox, paintOffscreen, paintSnapshot, prePaint, preTransform, processAdjustPropertiesDialog, removeLinkedProperties, removeLinkedPropertiesFromOrigins, repaint, restXML, rotate, rotate, rotatePoints, scale, scale, scalePoints, setAffineTransform, setAlpha, setAlpha, setAnnotation, setCompositeMode, setDimensions, setDimensions, setLayer, setLinkedProperties, setLinkedProperty, setLocation, setLocked, setProperty, setTitle, setVisible, snapTo, toString, transform, transformPoint, transformPoint, transformPoints, transformPoints, transformPoints, transformPoints, transformPoints, transformPoints, transformPoints, transformPoints, transformPoints, transformRectangle, translate, translate, unlink, unlink, unlinkAll, updateInDatabase, xmlError, xmlError
 
Methods inherited from class ini.trakem2.persistence.DBObject
addToDatabase, getId, getProject, getUniqueIdentifier, removeFromDatabase, updateInDatabase
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

n_points

protected int n_points
The number of points.


p

protected double[][] p
The array of clicked points.


p_layer

protected long[] p_layer
The array of Layers over which each point lives


p_width

protected double[] p_width
The width of each point.

Constructor Detail

Ball

public Ball(Project project,
            java.lang.String title,
            double x,
            double y)

Ball

public Ball(Project project,
            long id,
            java.lang.String title,
            float width,
            float height,
            float alpha,
            boolean visible,
            java.awt.Color color,
            boolean locked,
            java.awt.geom.AffineTransform at)
Construct an unloaded Ball from the database. Points will be loaded later, when needed.


Ball

public Ball(Project project,
            long id,
            java.util.HashMap<java.lang.String,java.lang.String> ht,
            java.util.HashMap<Displayable,java.lang.String> ht_links)
Construct a Ball from an XML entry.

Method Detail

addBall

public void addBall(double x,
                    double y,
                    double r,
                    long layer_id)
Used to add individual ball objects when parsing.


findPoint

protected int findPoint(double[][] a,
                        int x_p,
                        int y_p,
                        double magnification,
                        long lid)
Find a point in an array, with a precision dependent on the magnification.


removePoint

protected void removePoint(int index)
Remove a point.


addPoint

protected int addPoint(double x_p,
                       double y_p,
                       long layer_id,
                       double radius)
Add a point either at the end or between two existing points, with accuracy depending on magnification. The width of the new point is that of the closest point after which it is inserted.


paint

public void paint(java.awt.Graphics2D g,
                  java.awt.Rectangle srcRect,
                  double magnification,
                  boolean active,
                  int channels,
                  Layer active_layer,
                  java.util.List<Layer> layers)
Specified by:
paint in interface Paintable
Overrides:
paint in class Displayable

keyPressed

public void keyPressed(java.awt.event.KeyEvent ke)
Overrides:
keyPressed in class Displayable

mousePressed

public void mousePressed(java.awt.event.MouseEvent me,
                         Layer layer,
                         int x_p,
                         int y_p,
                         double mag)
Overrides:
mousePressed in class Displayable

mouseDragged

public void mouseDragged(java.awt.event.MouseEvent me,
                         Layer layer,
                         int x_p,
                         int y_p,
                         int x_d,
                         int y_d,
                         int x_d_old,
                         int y_d_old)
Overrides:
mouseDragged in class Displayable

mouseReleased

public void mouseReleased(java.awt.event.MouseEvent me,
                          Layer layer,
                          int x_p,
                          int y_p,
                          int x_d,
                          int y_d,
                          int x_r,
                          int y_r)
Overrides:
mouseReleased in class Displayable

calculateBoundingBox

protected boolean calculateBoundingBox(Layer la)
Specified by:
calculateBoundingBox in class ZDisplayable

destroy

public void destroy()
Release all memory resources taken by this object.

Overrides:
destroy in class Displayable

repaint

public void repaint(boolean repaint_navigator,
                    Layer layer)
Repaints in the given ImageCanvas only the area corresponding to the bounding box of this Profile.


flush

public void flush()
Release memory resources used by this object: namely the arrays of points, which can be reloaded with a call to setupForDisplay()


getPerimeter

public java.awt.Polygon getPerimeter()
The exact perimeter of this Ball, in integer precision.

Overrides:
getPerimeter in class Displayable

toShapesFile

public void toShapesFile(java.lang.StringBuffer data,
                         java.lang.String group,
                         java.lang.String color,
                         double z_scale)
Writes the data of this object as a Ball object in the .shapes file represented by the 'data' StringBuffer.


getPointsForSQL

public java.lang.String[] getPointsForSQL()
Return the list of query statements needed to insert all the points in the database.


isDeletable

public boolean isDeletable()
Specified by:
isDeletable in class Displayable

contains

public boolean contains(Layer layer,
                        int x,
                        int y)
Test whether the Ball contains the given point at the given layer. What it does: and tests whether the point is contained in any of the balls present in the given layer.

Overrides:
contains in class Displayable

linkPatches

public boolean linkPatches()
Description copied from class: ZDisplayable
Link the Patch objects that lay underneath the part of the bounding box of this profile that shows in the current layer, so that they cannot be dragged independently.

Specified by:
linkPatches in class ZDisplayable
Returns:
whether the locking state changed.

getFirstLayer

public Layer getFirstLayer()
Returns the layer of lowest Z coordinate where this ZDisplayable has a point in, or the creation layer if no points yet.

Specified by:
getFirstLayer in class ZDisplayable

getRawBalls

public java.util.Map<Layer,double[]> getRawBalls()
Returns the raw data for the balls, sorted by Layer ID versus double[]{z,y,r} .


getBalls

public double[][] getBalls()
Returns a [n_points][4] array, with x,y,z,radius on the second part; not transformed, but local! To obtain balls in world coordinates, calibrated, use getWorldBalls().


getWorldBalls

public double[][] getWorldBalls()
Returns a [n_points][4] array, with x,y,z,radius on the second part, in world coordinates (that is, transformed with this AffineTransform and calibrated with the containing LayerSet's calibration).


exportSVG

public void exportSVG(java.lang.StringBuffer data,
                      double z_scale,
                      java.lang.String indent)
Description copied from class: Displayable
Does nothing unless overriden.

Overrides:
exportSVG in class Displayable

exportXML

public void exportXML(java.lang.StringBuilder sb_body,
                      java.lang.String indent,
                      java.lang.Object any)
Similar to exportSVG but the layer_id is saved instead of the z. The convention is my own, a ball_ob that contains ball objects and links.

Overrides:
exportXML in class ZDisplayable

exportDTD

public static void exportDTD(java.lang.StringBuilder sb_header,
                             java.util.HashSet<java.lang.String> hs,
                             java.lang.String indent)

paintsAt

public boolean paintsAt(Layer layer)
Description copied from class: ZDisplayable
Check if this instance will paint anything at the level of the given Layer.

Overrides:
paintsAt in class ZDisplayable

getInfo

public java.lang.String getInfo()
Returns information on the number of ball objects per layer.

Overrides:
getInfo in class DBObject

clone

public Displayable clone(Project pr,
                         boolean copy_id)
Performs a deep copy of this object, without the links.

Specified by:
clone in class Displayable

generateGlobe

public static double[][][] generateGlobe(int meridians,
                                         int parallels)
Generate a globe of radius 1.0 that can be used for any Ball. First dimension is Z, then comes a double array x,y. Minimal accepted meridians and parallels is 3.


generateTriangles

public java.util.List<javax.vecmath.Point3f> generateTriangles(double scale,
                                                               double[][][] globe)
Put all balls as a single 'mesh'; the returned list contains all faces as three consecutive Point3f. The mesh is also translated by x,y,z of this Displayable.


intersects

public boolean intersects(java.awt.geom.Area area,
                          double z_first,
                          double z_last)
Specified by:
intersects in class ZDisplayable
Parameters:
area - is expected in world coordinates.

getAreaAt

public java.awt.geom.Area getAreaAt(Layer layer)
Description copied from class: Displayable
This area is meant to represent the entire area where a Displayable paints to in the @param layer. But for some this is reduced to areas with data, not with interpolated data. For example, a Polyine would show a list of little 1x1 rectangles for each point in the @param layer.

Overrides:
getAreaAt in class Displayable

isRoughlyInside

protected boolean isRoughlyInside(Layer layer,
                                  java.awt.Rectangle r)
Description copied from class: Displayable
If this Displayable intersects with @param r or almost intersects, then returns true. This method is meant to be very fast, and err on the "yes" and never on the "no".

Overrides:
isRoughlyInside in class Displayable

measure

public ij.measure.ResultsTable measure(ij.measure.ResultsTable rt)
Returns a listing of all balls contained here, one per row with index, x, y, z, and radius, all calibrated. 'name-id' is a column that displays the title of this Ball object only when such title is purely a number.

Overrides:
measure in class Displayable

crop

public boolean crop(java.util.List<Layer> range)
Retain the data within the layer range, and throw out all the rest.

Overrides:
crop in class ZDisplayable

layerRemoved

protected boolean layerRemoved(Layer la)
Description copied from class: ZDisplayable
Update internal datastructures to reflect the fact that @param layer has been removed from the containing LayerSet.

Overrides:
layerRemoved in class ZDisplayable

apply

public boolean apply(Layer la,
                     java.awt.geom.Area roi,
                     mpicbg.models.CoordinateTransform ict)
              throws java.lang.Exception
Description copied from interface: VectorData
Applies the 2D transform @ict (which is expected to operate on the world coordinates version of the data contained here) only to the data that falls within the @param roi (in world coords), and then recomputes the bounding box and affine transform (to a translation or identity). Does not consider links.

Specified by:
apply in interface VectorData
Parameters:
la - Only data at this Layer may be transformed.
roi - Only data inside this world-coordinates Area may be transformed.
ict - The transform to apply to the data that is in @param la and within @param roi.
Throws:
java.lang.Exception

apply

public boolean apply(VectorDataTransform vdt)
              throws java.lang.Exception
Specified by:
apply in interface VectorData
Throws:
java.lang.Exception

getLayerIds

public java.util.Collection<java.lang.Long> getLayerIds()
Description copied from class: ZDisplayable
Get the list of Layer ids on which this ZDisplayable has data on.

Overrides:
getLayerIds in class ZDisplayable

adjustProperties

public void adjustProperties()
Description copied from class: Displayable
Shows a dialog to adjust properties of this object.

Overrides:
adjustProperties in class Displayable

set

public void set(int i,
                double x,
                double y,
                Layer la,
                double radius)
Set the x,y,radius raw pixel values for the ball at index i. When done setting values, call repaint(true, null).

Throws:
java.lang.IndexOutOfBoundsException - if i < 0 or i >= the number of points.

getCount

public int getCount()
Return the number of balls.


setRadius

public void setRadius(int i,
                      double radius)
Set the radius (raw pixel value) for the ball at index i. When done setting values, call repaint(true, null).

Throws:
java.lang.IndexOutOfBoundsException - if i < 0 or i >= the number of points.