// Copyright 2002, FreeHEP.
package org.freehep.graphicsio.emf.gdi;
import java.awt.Point;
import java.awt.Rectangle;
import java.io.IOException;
import org.freehep.graphicsio.emf.EMFInputStream;
import org.freehep.graphicsio.emf.EMFOutputStream;
import org.freehep.graphicsio.emf.EMFTag;
/**
* PolyPolygon TAG.
*
* @author Mark Donszelmann
* @version $Id: PolyPolygon.java,v 1.4 2009-08-17 21:44:44 murkle Exp $
*/
public class PolyPolygon extends EMFTag {
private Rectangle bounds;
private int start, end;
private int[] numberOfPoints;
private Point[][] points;
public PolyPolygon() {
super(8, 1);
}
public PolyPolygon(Rectangle bounds, int start, int end,
int[] numberOfPoints, Point[][] points) {
this();
this.bounds = bounds;
this.start = start;
this.end = end;
this.numberOfPoints = numberOfPoints;
this.points = points;
}
@Override
public EMFTag read(int tagID, EMFInputStream emf, int len)
throws IOException {
Rectangle bounds = emf.readRECTL();
int np = emf.readDWORD();
/* int totalNumberOfPoints = */ emf.readDWORD();
int[] pc = new int[np];
Point[][] points = new Point[np][];
for (int i = 0; i < np; i++) {
pc[i] = emf.readDWORD();
points[i] = new Point[pc[i]];
}
for (int i = 0; i < np; i++) {
points[i] = emf.readPOINTL(pc[i]);
}
PolyPolygon tag = new PolyPolygon(bounds, 0, np - 1, pc, points);
return tag;
}
@Override
public void write(int tagID, EMFOutputStream emf) throws IOException {
emf.writeRECTL(bounds);
emf.writeDWORD(end - start + 1);
int c = 0;
for (int i = start; i < end + 1; i++) {
c += numberOfPoints[i];
}
emf.writeDWORD(c);
for (int i = start; i < end + 1; i++) {
emf.writeDWORD(numberOfPoints[i]);
}
for (int i = start; i < end + 1; i++) {
emf.writePOINTL(numberOfPoints[i], points[i]);
}
}
@Override
public String toString() {
return super.toString() + "\n" + " bounds: " + bounds + "\n"
+ " #polys: " + (end - start + 1);
}
}