ini.trakem2.display
Class Polyline

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.Polyline
All Implemented Interfaces:
Line3D, Paintable, VectorData

public class Polyline
extends ZDisplayable
implements Line3D, VectorData

A sequence of points that make multiple chained line segments.


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 static int index
          Helper vars for mouse events.
protected  int n_points
          The number of points.
protected  double[][] p
          The array of clicked x,y points as [2][n].
protected  long[] p_layer
          The array of Layers over which the points of this pipe live
 
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
Polyline(Project project, long id, java.util.HashMap<java.lang.String,java.lang.String> ht_attr, java.util.HashMap<Displayable,java.lang.String> ht_links)
          Reconstruct from XML.
Polyline(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)
           
Polyline(Project project, java.lang.String title)
          New empty Polyline.
 
Method Summary
protected  int addPoint(int x_p, int y_p, long layer_id, double magnification)
          Add a point either at the end or between two existing points, with accuracy depending on magnification.
protected  int appendPoint(int x_p, int y_p, long layer_id)
          Append a point at the end.
protected  void appendPoints(double[] px, double[] py, long[] p_layer_ids, int len)
           
 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)
           
 VectorString3D asVectorString3D()
          Returns a non-calibrated VectorString3D.
protected  boolean calculateBoundingBox(boolean adjust_position, Layer la)
           
protected  boolean calculateBoundingBox(Layer la)
           
protected  double[] calculateDataBoundingBox()
          Returns min_x, min_y, max_x, max_y.
 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)
          Calls contains(x_p, y_p) unless overriden -- in ZDisplayable objects, it tests whether the given point is contained in the part of the ZDisplayable that shows in the given layer.
protected  boolean containsLocal(Layer layer, int x, int y, double radius)
           
 boolean crop(java.util.List<Layer> range)
          Retain the data within the layer range, and through out all the rest.
 void destroy()
          Release all memory resources taken by this object.
 void dragPoint(int index, int dx, int dy)
          Move backbone point by the given deltas.
protected  void enlargeArrays()
          Increase the size of the arrays by 5.
protected  void enlargeArrays(int n_more)
           
static void exportDTD(java.lang.StringBuilder sb_header, java.util.HashSet<java.lang.String> hs, java.lang.String indent)
          Exports to type t2_polyline.
 void exportXML(java.lang.StringBuilder sb_body, java.lang.String indent, java.lang.Object any)
          Exports data.
protected  int findClosestSegment(int x_p, int y_p, long layer_id, double mag)
          Returns the index of the first point in the segment made of any two consecutive points.
protected  int findNearestPoint(int x_p, int y_p, long layer_id)
          Find closest point within the current layer.
protected  int findPoint(int x_p, int y_p, long layer_id, double mag)
          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 void flushTraceCache(Project project)
           
 java.util.List<javax.vecmath.Point3f> generateTriangles(double scale, int parallels, int resample)
          Calibrated.
 java.util.List<javax.vecmath.Point3f> generateTriangles(double scale, int parallels, int resample, ij.measure.Calibration cal)
          Returns a list of Point3f that define a polyline in 3D, for usage with an ij3d CustomLineMesh CONTINUOUS.
 java.awt.geom.Area getAreaAt(Layer layer)
          A little square for each pixel in @param layer.
 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 id and project name; this method is meant to be overriden by any of the subclasses.
 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 polyline, in integer precision.
 void insertPoint(int i, int x_p, int y_p, long layer_id)
           
 boolean intersects(java.awt.geom.Area area, double z_first, double z_last)
           
 boolean isDeletable()
           
 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.
 int length()
          The number of points in this pipe.
 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)
          Does nothing unless overriden.
 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)
           
protected  void removePoint(int index)
          Remove a point from the bezier backbone and its two associated control points.
 void repaint(boolean repaint_navigator, Layer la)
          Repaints in the given ImageCanvas only the area corresponding to the bounding box of this Pipe.
 void reverse()
           
 void setPosition(FallLine fl)
           
static java.lang.Object[] simplify(double[] px, double[] py, long[] p_layer_ids, int max_iterations, LayerSet layer_set)
          Resample the curve to, first, a number of points as resulting from resampling to a point interdistance of delta, and second, as adjustment by random walk of those points towards the original points.
protected  double[] sqDistanceToEndPoints(double x_p, double y_p, long layer_id)
           
 Polyline sub(int start, int end)
          Create a shorter Polyline, from start to end (inclusive); not added to the LayerSet.
 
Methods inherited from class ini.trakem2.display.ZDisplayable
exportDTD, getBucketable, getLayerSet, paintsAt, remove, remove2, setColor, setLayer, setLayerSet, setLayerSet, setVisible, softRemove, transformPoints, updateBucket, updateBucket
 
Methods inherited from class ini.trakem2.display.Displayable
adjustProperties, areThereLayerCrossLinks, canSendTo, clone, clone, commonDTDChildren, contains, deselect, displacePoints, exportSVG, 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, toString, wait, wait, wait
 
Methods inherited from interface ini.trakem2.display.Line3D
getColor, getId, getLayerSet, getProject, toString
 

Field Detail

n_points

protected int n_points
The number of points.


p

protected double[][] p
The array of clicked x,y points as [2][n].


p_layer

protected long[] p_layer
The array of Layers over which the points of this pipe live


index

protected static int index
Helper vars for mouse events. It's safe to have them static since only one Pipe will be edited at a time.

Constructor Detail

Polyline

public Polyline(Project project,
                java.lang.String title)
New empty Polyline.


Polyline

public Polyline(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)

Polyline

public Polyline(Project project,
                long id,
                java.util.HashMap<java.lang.String,java.lang.String> ht_attr,
                java.util.HashMap<Displayable,java.lang.String> ht_links)
Reconstruct from XML.

Method Detail

enlargeArrays

protected void enlargeArrays()
Increase the size of the arrays by 5.


enlargeArrays

protected void enlargeArrays(int n_more)

findClosestSegment

protected int findClosestSegment(int x_p,
                                 int y_p,
                                 long layer_id,
                                 double mag)
Returns the index of the first point in the segment made of any two consecutive points.


findPoint

protected int findPoint(int x_p,
                        int y_p,
                        long layer_id,
                        double mag)
Find a point in an array, with a precision dependent on the magnification. Only points in the given layer are considered, the rest are ignored. Returns -1 if none found.


findNearestPoint

protected int findNearestPoint(int x_p,
                               int y_p,
                               long layer_id)
Find closest point within the current layer.


removePoint

protected void removePoint(int index)
Remove a point from the bezier backbone and its two associated control points.


dragPoint

public void dragPoint(int index,
                      int dx,
                      int dy)
Move backbone point by the given deltas.


sqDistanceToEndPoints

protected double[] sqDistanceToEndPoints(double x_p,
                                         double y_p,
                                         long layer_id)
Parameters:
x_p,y_p - in local coords.

insertPoint

public void insertPoint(int i,
                        int x_p,
                        int y_p,
                        long layer_id)

appendPoint

protected int appendPoint(int x_p,
                          int y_p,
                          long layer_id)
Append a point at the end. Returns the index of the new point.


addPoint

protected int addPoint(int x_p,
                       int y_p,
                       long layer_id,
                       double magnification)
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.


appendPoints

protected void appendPoints(double[] px,
                            double[] py,
                            long[] p_layer_ids,
                            int len)

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

flushTraceCache

public static void flushTraceCache(Project project)

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

calculateBoundingBox

protected boolean calculateBoundingBox(boolean adjust_position,
                                       Layer la)

calculateDataBoundingBox

protected double[] calculateDataBoundingBox()
Returns min_x, min_y, max_x, max_y.


destroy

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

Overrides:
destroy in class Displayable

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()


repaint

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


getPerimeter

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

Overrides:
getPerimeter in class Displayable

getAreaAt

public java.awt.geom.Area getAreaAt(Layer layer)
A little square for each pixel in @param layer.

Overrides:
getAreaAt in class Displayable

isRoughlyInside

public 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

isDeletable

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

length

public int length()
The number of points in this pipe.

Specified by:
length in interface Line3D

contains

public boolean contains(Layer layer,
                        int x,
                        int y)
Description copied from class: Displayable
Calls contains(x_p, y_p) unless overriden -- in ZDisplayable objects, it tests whether the given point is contained in the part of the ZDisplayable that shows in the given layer.

Overrides:
contains in class Displayable

containsLocal

protected boolean containsLocal(Layer layer,
                                int x,
                                int y,
                                double radius)

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

exportXML

public void exportXML(java.lang.StringBuilder sb_body,
                      java.lang.String indent,
                      java.lang.Object any)
Exports data.

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)
Exports to type t2_polyline.


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

generateTriangles

public java.util.List<javax.vecmath.Point3f> generateTriangles(double scale,
                                                               int parallels,
                                                               int resample)
Calibrated.

Specified by:
generateTriangles in interface Line3D

generateTriangles

public java.util.List<javax.vecmath.Point3f> generateTriangles(double scale,
                                                               int parallels,
                                                               int resample,
                                                               ij.measure.Calibration cal)
Returns a list of Point3f that define a polyline in 3D, for usage with an ij3d CustomLineMesh CONTINUOUS. @param parallels is ignored.


intersects

public boolean intersects(java.awt.geom.Area area,
                          double z_first,
                          double z_last)
Specified by:
intersects in class ZDisplayable

asVectorString3D

public VectorString3D asVectorString3D()
Returns a non-calibrated VectorString3D.

Specified by:
asVectorString3D in interface Line3D

getInfo

public java.lang.String getInfo()
Description copied from class: DBObject
Returns id and project name; this method is meant to be overriden by any of the subclasses.

Overrides:
getInfo in class DBObject

measure

public ij.measure.ResultsTable measure(ij.measure.ResultsTable rt)
Description copied from class: Displayable
Does nothing unless overriden.

Overrides:
measure in class Displayable

simplify

public static java.lang.Object[] simplify(double[] px,
                                          double[] py,
                                          long[] p_layer_ids,
                                          int max_iterations,
                                          LayerSet layer_set)
                                   throws java.lang.Exception
Resample the curve to, first, a number of points as resulting from resampling to a point interdistance of delta, and second, as adjustment by random walk of those points towards the original points.

Throws:
java.lang.Exception

setPosition

public void setPosition(FallLine fl)
Overrides:
setPosition in class ZDisplayable

crop

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

Overrides:
crop in class ZDisplayable

sub

public Polyline sub(int start,
                    int end)
Create a shorter Polyline, from start to end (inclusive); not added to the LayerSet.


reverse

public void reverse()

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