Package org.opensphere.geometry.triangulation.model

Examples of org.opensphere.geometry.triangulation.model.Edge


      Integer idS = this.coordinates.get(s.p0);
      Integer idD = this.coordinates.get(s.p1);
      Vertex oV = this.vertices.get(idS);
      Vertex eV = this.vertices.get(idD);
     
      Edge edge;
      if (qeBorder.contains(qe)) {
        oV.setBorder(true);
        eV.setBorder(true);
        edge = new Edge(i, s, oV, eV, true);
        if (s.getLength() < this.threshold) {
          this.shortLengths.put(i, edge);
        } else {
          this.lengths.put(i, edge);
        }
      } else {
        edge = new Edge(i, s, oV, eV, false);
      }
      this.edges.put(i, edge);
      this.segments.put(s, i);
      i++;
    }

    // hm of linesegment and hm of edges // with id as key
    // hm of triangles using hm of ls and connection with hm of edges
   
    i = 0;
    for (QuadEdgeTriangle qet : qeTriangles) {
      LineSegment sA = qet.getEdge(0).toLineSegment();
      LineSegment sB = qet.getEdge(1).toLineSegment();
      LineSegment sC = qet.getEdge(2).toLineSegment();
      sA.normalize();
      sB.normalize();
      sC.normalize();
     
      Edge edgeA = this.edges.get(this.segments.get(sA));
      Edge edgeB = this.edges.get(this.segments.get(sB));
      Edge edgeC = this.edges.get(this.segments.get(sC));
      if (edgeA == null || edgeB == null || edgeC == null)
          continue;

      Triangle triangle = new Triangle(i, qet.isBorder()?true:false);
      triangle.addEdge(edgeA);
      triangle.addEdge(edgeB);
      triangle.addEdge(edgeC);

      edgeA.addTriangle(triangle);
      edgeB.addTriangle(triangle);
      edgeC.addTriangle(triangle);

      this.triangles.put(i, triangle);
      i++;
    }

    // add triangle neighbourood
    for (Edge edge : this.edges.values()) {
      if (edge.getTriangles().size() > 1) {
        Triangle tA = edge.getTriangles().get(0);
        Triangle tB = edge.getTriangles().get(1);
        tA.addNeighbour(tB);
        tB.addNeighbour(tA);
      }
    }

   
    // concave hull algorithm
    int index = 0;
    while (index != -1) {
      index = -1;

      Edge e = null;

      // find the max length (smallest id so first entry)
      int si = this.lengths.size();

      if (si != 0) {
        Entry<Integer, Edge> entry = this.lengths.firstEntry();
        int ind = entry.getKey();
        if (entry.getValue().getGeometry().getLength() > this.threshold) {
          index = ind;
          e = entry.getValue();
        }
      }

      if (index != -1) {
        Triangle triangle = e.getTriangles().get(0);
        List<Triangle> neighbours = triangle.getNeighbours();
        // irregular triangle test
        if (neighbours.size() == 1) {
          this.shortLengths.put(e.getId(), e);
          this.lengths.remove(e.getId());
        } else  {
          Edge e0 = triangle.getEdges().get(0);
          Edge e1 = triangle.getEdges().get(1);
          // test if all the vertices are on the border
          if (e0.getOV().isBorder() && e0.getEV().isBorder()
              && e1.getOV().isBorder() && e1.getEV().isBorder()) {
            this.shortLengths.put(e.getId(), e);
            this.lengths.remove(e.getId());
          } else {
            // management of triangles
                  if (neighbours.size() < 1) continue; //not sure this is safe
            Triangle tA = neighbours.get(0);
            Triangle tB = neighbours.get(1);
            tA.setBorder(true); // FIXME not necessarily useful
            tB.setBorder(true); // FIXME not necessarily useful
            this.triangles.remove(triangle.getId());
            tA.removeNeighbour(triangle);
            tB.removeNeighbour(triangle);
           
            // new edges
            List<Edge> ee = triangle.getEdges();
            Edge eA = ee.get(0);
            Edge eB = ee.get(1);
            Edge eC = ee.get(2);
           
            if (eA.isBorder()) {
              this.edges.remove(eA.getId());
              eB.setBorder(true);
              eB.getOV().setBorder(true);
              eB.getEV().setBorder(true);
              eC.setBorder(true);
              eC.getOV().setBorder(true);
              eC.getEV().setBorder(true);

              // clean the relationships with the triangle
              eB.removeTriangle(triangle);
              eC.removeTriangle(triangle);

              if (eB.getGeometry().getLength() < this.threshold) {
                this.shortLengths.put(eB.getId(), eB);
              } else {
                this.lengths.put(eB.getId(), eB);
              }
              if (eC.getGeometry().getLength() < this.threshold) {
                this.shortLengths.put(eC.getId(), eC);
              } else {
                this.lengths.put(eC.getId(), eC);
              }
              this.lengths.remove(eA.getId());
            } else if (eB.isBorder()) {
              this.edges.remove(eB.getId());
              eA.setBorder(true);
              eA.getOV().setBorder(true);
              eA.getEV().setBorder(true);
              eC.setBorder(true);
              eC.getOV().setBorder(true);
              eC.getEV().setBorder(true);

              // clean the relationships with the triangle
              eA.removeTriangle(triangle);
              eC.removeTriangle(triangle);

              if (eA.getGeometry().getLength() < this.threshold) {
                this.shortLengths.put(eA.getId(), eA);
              } else {
                this.lengths.put(eA.getId(), eA);
              }
              if (eC.getGeometry().getLength() < this.threshold) {
                this.shortLengths.put(eC.getId(), eC);
              } else {
                this.lengths.put(eC.getId(), eC);
              }
              this.lengths.remove(eB.getId());
            } else {
              this.edges.remove(eC.getId());
              eA.setBorder(true);
              eA.getOV().setBorder(true);
              eA.getEV().setBorder(true);
              eB.setBorder(true);
              eB.getOV().setBorder(true);
              eB.getEV().setBorder(true);
              // clean the relationships with the triangle
              eA.removeTriangle(triangle);
              eB.removeTriangle(triangle);

              if (eA.getGeometry().getLength() < this.threshold) {
                this.shortLengths.put(eA.getId(), eA);
              } else {
                this.lengths.put(eA.getId(), eA);
              }
              if (eB.getGeometry().getLength() < this.threshold) {
                this.shortLengths.put(eB.getId(), eB);
              } else {
                this.lengths.put(eB.getId(), eB);
              }
              this.lengths.remove(eC.getId());
            }
          }
        }
      }
    }
View Full Code Here

TOP

Related Classes of org.opensphere.geometry.triangulation.model.Edge

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.