/*****************************************************************
 * PolygonExample.java 
 * Just an example of how to write a Polygon Shapefile with the 
 * NVS Shapefile library, v2.0
 *
 ****************************************************************/

import java.io.*;
import com.nvs.shapefile.*;
import java.util.*;
import java.math.*;

public class PolygonExample 
{	
	public static void main(String args[])
	{		
		new PolygonExample();
	}
	
	public PolygonExample()
	{
		// Create a new Shapefile of type POLYGON
		Shapefile shp = new Shapefile(Shapefile.SHAPETYPE_POLYGON);
		// Add a table description for the name "soil_type". You have to do this
		//  before you add a ShapeObject with a record, else you'll get an exception
		//  because the Shapefile's TableDescription won't match the ShapeObject's
		//  Record
		shp.getTableDescription().addTableDescriptor(new TableDescriptor("soil_type"));
		
		// Create a ShapeObject with an UNDEFINED type. This is handy when you don't
		//  know what type you'll need the ShapeObject to be.
		ShapeObject shpObj = new ShapeObject();
		
		// Instead of adding points one at a time, we'll add a collection this time
		//  loop through 360 times, adding a point to the ArrayList each time to
		//  make a circle
		ArrayList arlPoints = new ArrayList();
		for(int i=0;i<360;i++)
		{
			double radians = Math.toRadians((double)i);
			arlPoints.add(new Point(Math.cos(radians), Math.sin(radians)));	
		}
	
		// Set the new ShapeObject's points to the ArrayList
		shpObj.setPoints(arlPoints);
		
		shp.addShapeObject(shpObj);
		
		// Write the shapefile. Handle the IOException that may occur. Note that 
		//  the BoundingBox's for this shapefile and for each shapeobject have been 
		//  calculated as they were added/writen.
		try
		{
			shp.write("PolygonExample");
		}
		catch(IOException e)
		{
			e.printStackTrace();
		}
	}
}