//TODO missing: BBox, AntiAlias (p. 305 in 1.7 spec)
// p318:
// reading in sequence from higher-order to lower-order bit positions
ImageInputStream mciis = new MemoryCacheImageInputStream(cosStream.getUnfilteredStream());
int verticesPerRow = shadingType5.getVerticesPerRow(); //TODO check >=2
LOG.debug("verticesPerRow" + verticesPerRow);
try
{
ArrayList<Vertex> prevVertexRow = new ArrayList<Vertex>();
while (true)
{
// read a vertex row
ArrayList<Vertex> vertexList = new ArrayList<Vertex>();
for (int row = 0; row < verticesPerRow; ++row)
{
vertexList.add(readVertex(mciis, (byte) 0, maxSrcCoord, maxSrcColor, rangeX, rangeY, colRangeTab));
}
transformVertices(vertexList, ctm, xform, pageHeight);
// create the triangles from two rows
if (!prevVertexRow.isEmpty())
{
for (int vj = 0; vj < vertexList.size() - 1; ++vj)
{
// p.192,194 pdf spec 1.7
Vertex vij = prevVertexRow.get(vj); // v i,j
Vertex vijplus1 = prevVertexRow.get(vj + 1); // v i,j+1
Vertex viplus1j = vertexList.get(vj); // v i+1,j
Vertex viplus1jplus1 = vertexList.get(vj + 1); // v i+1,j+1
GouraudTriangle g = new GouraudTriangle(vij.point, vij.color,
vijplus1.point, vijplus1.color,
viplus1j.point, viplus1j.color);
if (!g.isEmpty())
{
triangleList.add(g);
}
else
{
LOG.debug("triangle is empty!");
}
g = new GouraudTriangle(vijplus1.point, vijplus1.color,
viplus1j.point, viplus1j.color,
viplus1jplus1.point, viplus1jplus1.color);
if (!g.isEmpty())
{
triangleList.add(g);
}
else
{
LOG.debug("triangle is empty!");
}
}
}
prevVertexRow = vertexList;
}
}
catch (EOFException ex)
{
LOG.debug("EOF");
}
mciis.close();
}