/**
 * File: 	GenericCirculinearRing2D.java
 * Project: javaGeom
 * 
 * Distributed under the LGPL License.
 *
 * Created: 11 mai 09
 */
package math.geom2d.circulinear;

import java.awt.Graphics2D;
import java.util.Collection;

import math.geom2d.AffineTransform2D;
import math.geom2d.circulinear.buffer.BufferCalculator;
import math.geom2d.domain.BoundaryPolyCurve2D;
import math.geom2d.domain.ContinuousOrientedCurve2D;
import math.geom2d.transform.CircleInversion2D;


/**
 * A basic implementation of a CirculinearRing2D, which is assumed to be
 * always bounded and closed.
 * @author dlegland
 *
 */
public class GenericCirculinearRing2D 
extends PolyCirculinearCurve2D
implements CirculinearRing2D {
//TODO: parameterize with curve type ?
	
    // ===================================================================
    // static methods

    /**
     * Static factory for creating a new GenericCirculinearRing2D from a collection of
     * curves.
     * @since 0.8.1
     */
    /*
	public static  GenericCirculinearRing2D
    create(Collection curves) {
    	return new GenericCirculinearRing2D(curves);
    }
    */
    /**
     * Static factory for creating a new GenericCirculinearRing2D from an array of
     * curves.
     * @since 0.8.1
     */
    public static GenericCirculinearRing2D create(
    		CirculinearElement2D... curves) {
    	return new GenericCirculinearRing2D(curves);
    }

    
    // ===================================================================
    // constructors

    public GenericCirculinearRing2D() {
        super();
        this.closed = true;
    }

    public GenericCirculinearRing2D(int size) {
        super(size);
        this.closed = true;
    }

    public GenericCirculinearRing2D(CirculinearElement2D... curves) {
        super(curves);
        this.closed = true;
    }

    public GenericCirculinearRing2D(
    		Collection curves) {
        super(curves);
        this.closed = true;
    }

    
    // ===================================================================
    // methods specific to GenericCirculinearRing2D

	@Override
    public CirculinearRing2D parallel(double dist) {
		BufferCalculator bc = BufferCalculator.getDefaultInstance();

    	return new GenericCirculinearRing2D(
    			bc.createContinuousParallel(this, dist).smoothPieces());
    }
    
	public Collection continuousCurves() {
    	return wrapCurve(this);
    }
	
	@Override
	public GenericCirculinearRing2D transform(CircleInversion2D inv) {
    	// Allocate array for result
		GenericCirculinearRing2D result =
			new GenericCirculinearRing2D(curves.size());
        
        // add each transformed element
        for (CirculinearElement2D element : curves)
            result.add(element.transform(inv));
        return result;
	}
	
	/* (non-Javadoc)
	 * @see math.geom2d.domain.Boundary2D#fill(java.awt.Graphics2D)
	 */
	public void fill(Graphics2D g2) {
		g2.fill(this.getGeneralPath());
	}

	/* (non-Javadoc)
	 * @see math.geom2d.domain.Boundary2D#domain()
	 */
	public CirculinearDomain2D domain() {
		return new GenericCirculinearDomain2D(this);
	}

	@Override
	public GenericCirculinearRing2D reverse(){
    	int n = curves.size();
        // create array of reversed curves
    	CirculinearElement2D[] curves2 = new CirculinearElement2D[n];
        
        // reverse each curve
        for (int i = 0; i 
	transform(AffineTransform2D trans) {
		// number of curves
		int n = this.size();
		
		// create result curve
        BoundaryPolyCurve2D result =
        	new BoundaryPolyCurve2D(n);
        
        // add each curve after class cast
        for (ContinuousOrientedCurve2D curve : curves)
            result.add(curve.transform(trans));
        return result;
	}

}

 

Ads help maintain this website.