package org.jzy3d.plot3d.builder.delaunay;

import il.ac.idc.jdt.DelaunayTriangulation;
import il.ac.idc.jdt.Triangle;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.jzy3d.maths.Coord3d;
import org.jzy3d.plot3d.builder.Tessellator;
import org.jzy3d.plot3d.primitives.AbstractComposite;
import org.jzy3d.plot3d.primitives.Polygon;
import org.jzy3d.plot3d.primitives.Shape;

public class DelaunayTessellator extends Tessellator{
    @Override
    public AbstractComposite build(List coordinates) {
        Shape s = new Shape();
        s.add(computePolygons(coordinates));
        return s;
    }

    protected List computePolygons(List coordinates) {
        // Append all input Jzy3d coordinates in JDT triangulator
        DelaunayTriangulation triangulator = new DelaunayTriangulation();
        for (Coord3d coord: coordinates) {
            triangulator.insertPoint(JDTConverter.toJdtPoint(coord));
        }

        // Retrieve triangles computed by JDT
        List polygons = new ArrayList(triangulator.trianglesSize());
        Iterator it = triangulator.trianglesIterator();
        while (it.hasNext()) {
            Triangle triangle = it.next();
            // isHalfplane indicates a degenerated triangle
            if (triangle.isHalfplane()) 
                continue;
            polygons.add(JDTConverter.toJzyPolygon(triangle));
        }
        return polygons;
    }

    @Override
    public AbstractComposite build(float[] x, float[] y, float[] z) {
        throw new RuntimeException("not called");
    }
}

 

Ads help maintain this website.