
import org.gvsig.fmap.geom.Geometry;
import org.gvsig.fmap.geom.primitive.Envelope;



/**
 * 
 * Utility functions to manage gvSIG geometries
 */
public class geom {
    
    // GeometryTypes
    public static final int AGGREGATE = Geometry.TYPES.AGGREGATE;
    public static final int ARC = Geometry.TYPES.ARC;
    public static final int CIRCLE = Geometry.TYPES.CIRCLE;
    public static final int CURVE = Geometry.TYPES.CURVE;
    public static final int ELLIPSE = Geometry.TYPES.ELLIPSE;
    public static final int ELLIPTICARC = Geometry.TYPES.ELLIPTICARC;
    public static final int GEOMETRY = Geometry.TYPES.GEOMETRY;
    public static final int MULTICURVE = Geometry.TYPES.MULTICURVE;
    public static final int MULTIPOINT = Geometry.TYPES.MULTIPOINT;
    public static final int MULTISOLID = Geometry.TYPES.MULTISOLID;
    public static final int MULTISURFACE = Geometry.TYPES.MULTISURFACE;
    public static final int NULL = Geometry.TYPES.NULL;
    public static final int POINT = Geometry.TYPES.POINT;
    public static final int SOLID =  Geometry.TYPES.SOLID;
    public static final int SPLINE = Geometry.TYPES.SPLINE;
    public static final int SURFACE = Geometry.TYPES.SURFACE;

    // Common named geometry types
    public static final int POLYGON = Geometry.TYPES.SURFACE;
    public static final int LINE = Geometry.TYPES.CURVE;
    public static final int MULTILINE = Geometry.TYPES.MULTICURVE;
    public static final int MULTIPOLYGON = Geometry.TYPES.MULTISURFACE;

    // geometrySubTypes 
    public static final int D2 = Geometry.SUBTYPES.GEOM2D;
    public static final int D2M = Geometry.SUBTYPES.GEOM2DM;
    public static final int D3 = Geometry.SUBTYPES.GEOM3D;
    public static final int D3M = Geometry.SUBTYPES.GEOM3DM;
    public static final int UNKNOWN = Geometry.SUBTYPES.UNKNOWN;

    /**
     * 
     * @param type
     * @param subtype, optional, default 2D
     * @return 
     */
    public static Geometry createGeometry(int type, int subtype) {
        return null;
    }
  
    /**
     * 
     * @param x
     * @param y
     * @param subtype, optional, defiult 2D
     * @return 
     */
    public static Geometry createPoint(double x, double y, int subtype) {
        return null;
    }
  
    /**
     * 
     * @param subtype, optional, defiult 2D
     */
    public static Geometry createMultiPoint(int subtype, ...) {
        return null;
    }

    public static Geometry createPolygon(int subtype, ...) {
        return null;
    }

    public static Geometry createMultiPolygon(int subtype, ...) {
        return null;        
    }  
  
    public static Geometry createLine(int subtype, ...) {
        return null;        
    }  

    public static Geometry createMultiLine(int subtype, ...) {
        return null;        
    }  

    /**
     * 
     * @param pointMax
     * @param pointMin
     * @param dimension
     * @return 
     */
    public static Envelope createEnvelope(Object pointMax, Object pointMin, int dimension) {
        return null;        
    }  
    
}
