org.shapelogic.polygon
Class PolygonEndPointAdjuster

java.lang.Object
  extended by org.shapelogic.polygon.PolygonEndPointAdjuster
All Implemented Interfaces:
Calc0<Polygon>, CalcInvoke<Polygon>, CalcValue<Polygon>, LazyCalc<Polygon>, Improver<Polygon>

public class PolygonEndPointAdjuster
extends java.lang.Object
implements Improver<Polygon>

Take a polygon as input and a list of sets of point that potentially can be combined. Create a new polygon. I think that if there have been no changes then just return the original polygon. I think that polygons are supposed to be immutable.

Author:
Sami Badawi

Field Summary
protected  java.util.Map<IPoint2D,IPoint2D> _clusterPointToCommonPointMapping
           
protected  java.util.Map<java.util.Set<IPoint2D>,IPoint2D> _clustersToPointMapping
           
protected  boolean _createdNewVersion
           
protected  boolean _dirty
           
protected  java.util.List<java.util.Set<IPoint2D>> _endPointsMultiClusters
           
protected  Polygon _inputPolygon
           
protected  Polygon _value
           
 
Constructor Summary
PolygonEndPointAdjuster()
           
PolygonEndPointAdjuster(Polygon inputPolygon)
           
 
Method Summary
 boolean adjustmentPointOkForLine(CLine line, IPoint2D newPoint)
           
 boolean createdNewVersion()
           
static IPoint2D extendLine(CLine line, IPoint2D clusterPoint)
           
 java.util.List<java.util.Set<IPoint2D>> getEndPointsMultiClusters()
           
 Polygon getInput()
           
 Polygon getValue()
          Starts a lazy calculation.
 Polygon invoke()
           
 boolean isDirty()
          When dirty is false that means that the calculated value can be used
 void setInput(Polygon input)
           
 void setup()
          Currently not super well define used for 2 purposes: Reset: called from the outside if you want to reuse it init: Called from the inside when calculation start to have everything setup maybe the semantic could work for both? TODO: This should be separated better.
static boolean startPointIsClosest(CLine line, IPoint2D clusterPoint)
           
protected  IPoint2D testCluster(java.util.Set<IPoint2D> cluster)
          If all the points in a cluster can be combined to a single point
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_inputPolygon

protected Polygon _inputPolygon

_value

protected Polygon _value

_dirty

protected boolean _dirty

_endPointsMultiClusters

protected java.util.List<java.util.Set<IPoint2D>> _endPointsMultiClusters

_clustersToPointMapping

protected java.util.Map<java.util.Set<IPoint2D>,IPoint2D> _clustersToPointMapping

_clusterPointToCommonPointMapping

protected java.util.Map<IPoint2D,IPoint2D> _clusterPointToCommonPointMapping

_createdNewVersion

protected boolean _createdNewVersion
Constructor Detail

PolygonEndPointAdjuster

public PolygonEndPointAdjuster()

PolygonEndPointAdjuster

public PolygonEndPointAdjuster(Polygon inputPolygon)
Method Detail

getInput

public Polygon getInput()
Specified by:
getInput in interface Improver<Polygon>

isDirty

public boolean isDirty()
Description copied from interface: LazyCalc
When dirty is false that means that the calculated value can be used

Specified by:
isDirty in interface LazyCalc<Polygon>

setup

public void setup()
Description copied from interface: LazyCalc
Currently not super well define used for 2 purposes: Reset: called from the outside if you want to reuse it init: Called from the inside when calculation start to have everything setup maybe the semantic could work for both? TODO: This should be separated better.

Specified by:
setup in interface LazyCalc<Polygon>

invoke

public Polygon invoke()
Specified by:
invoke in interface Calc0<Polygon>

getValue

public Polygon getValue()
Description copied from interface: CalcValue
Starts a lazy calculation. If dirty do calc() else return cached value. This should maybe be moved up in the hierarchy

Specified by:
getValue in interface CalcValue<Polygon>

testCluster

protected IPoint2D testCluster(java.util.Set<IPoint2D> cluster)
If all the points in a cluster can be combined to a single point

Returns:
the point if it is possible otherwise null This class has very strict criteria for joining points. Only join if all lines are either very small or straight, and the new point keep all the straight lines straight. This might be relaxed in subclasses, by overriding this method

startPointIsClosest

public static boolean startPointIsClosest(CLine line,
                                          IPoint2D clusterPoint)

extendLine

public static IPoint2D extendLine(CLine line,
                                  IPoint2D clusterPoint)

adjustmentPointOkForLine

public boolean adjustmentPointOkForLine(CLine line,
                                        IPoint2D newPoint)

getEndPointsMultiClusters

public java.util.List<java.util.Set<IPoint2D>> getEndPointsMultiClusters()

createdNewVersion

public boolean createdNewVersion()
Specified by:
createdNewVersion in interface Improver<Polygon>

setInput

public void setInput(Polygon input)
Specified by:
setInput in interface Improver<Polygon>


Copyright © 2008. All Rights Reserved.