/**
*
*/
package fr.unistra.pelican.util.connectivityTrees.connectivity;
import java.awt.Point;
import fr.unistra.pelican.util.Point3D;
/**
* A trivial connectivity is simply defined by a set of points surrounding the actual point.
* It does not depend on image pixel values.
*
* It includes 4-8-... neighborhood connectivity, use static methods to generate them.
*
* @author Benjamin Perret
*
*/
public class TrivialConnectivity extends Connectivity3D {
public static TrivialConnectivity getHorizontalNeighbourhood(){
Point3D [] neigbours={new Point3D(-1,0),new Point3D(1,0)};
return new TrivialConnectivity(neigbours );
}
public static TrivialConnectivity getVerticalNeighbourhood(){
Point3D [] neigbours={new Point3D(0,-1),new Point3D(0,1)};
return new TrivialConnectivity(neigbours );
}
public static TrivialConnectivity getFourNeighbourhood(){
Point3D [] neigbours={new Point3D(0,-1),new Point3D(-1,0),new Point3D(1,0),new Point3D(0,1)};
return new TrivialConnectivity(neigbours );
}
public static TrivialConnectivity getHeightNeighbourhood(){
Point3D [] neigbours={new Point3D(-1,-1),new Point3D(0,-1),new Point3D(1,-1),new Point3D(-1,0),new Point3D(1,0),new Point3D(-1,1),new Point3D(0,1),new Point3D(1,1)};
return new TrivialConnectivity(neigbours );
}
private Point3D [] neigbours=null;
public TrivialConnectivity(Point3D [] neigbours)
{
this.neigbours=neigbours;
}
private int nNumber=0;
/* (non-Javadoc)
* @see fr.unistra.pelican.algorithms.experimental.perret.CC.Connectivity.Connectivity2D#computeNextPointForIterator()
*/
@Override
protected void computeNextPointForIterator() {
nextPointForIterator.x=currentX+neigbours[nNumber].x;
nextPointForIterator.y=currentY+neigbours[nNumber].y;
nextPointForIterator.z=currentZ+neigbours[nNumber].z;
//System.out.println("next point " + nextPointForIterator + " " +nNumber + " " + currentX + " " + currentY);
nNumber++;
if(nNumber==neigbours.length)
hasMoreNeigbours=false;
}
/* (non-Javadoc)
* @see fr.unistra.pelican.algorithms.experimental.perret.CC.Connectivity.Connectivity2D#getConnectedNeighbours(int, int)
*/
@Override
public Point3D[] getConnectedNeighbours(int x, int y, int z) {
Point3D [] list = new Point3D[neigbours.length];
for(int i=0;i<neigbours.length;i++)
list[i]=new Point3D(x+neigbours[i].x,y+neigbours[i].y,z+neigbours[i].z);
return list;
}
/* (non-Javadoc)
* @see fr.unistra.pelican.algorithms.experimental.perret.CC.Connectivity.Connectivity2D#initializeIterator()
*/
@Override
protected void initializeIterator() {
nNumber=0;
hasMoreNeigbours=true;
}
}