示例#1
0
  public HE_Mesh createWithQuickHull() {
    if (points == null) {
      return new HE_Mesh();
    }
    if (numberOfPoints == 0) {
      numberOfPoints = points.length;
    }
    final WB_QuickHull3D hull = new WB_QuickHull3D(points);
    final int[][] faceIndices = hull.getFaces();
    final int[] originalindices = hull.getVertexPointIndices();
    final HEC_FromFacelist ffl =
        new HEC_FromFacelist()
            .setVertices(hull.getVertices())
            .setFaces(faceIndices)
            .setDuplicate(false)
            .setCheckNormals(false);
    final HE_Mesh result = ffl.createBase();

    vertexToPointIndex = new FastMap<Long, Integer>();
    final Iterator<HE_Vertex> vItr = result.vItr();
    int i = 0;
    while (vItr.hasNext()) {
      vertexToPointIndex.put(vItr.next().key(), originalindices[i++]);
    }
    result.cleanUnusedElementsByFace();
    return result;
  }
示例#2
0
 /*
  * (non-Javadoc)
  *
  * @see wblut.hemesh.HE_Creator#create()
  */
 @Override
 protected HE_Mesh createBase() {
   final WB_Point[] vertices = new WB_Point[(tubefacets + 1) * (torusfacets + 1)];
   final WB_Point[] uvws = new WB_Point[(tubefacets + 1) * (torusfacets + 1)];
   final double dtua = (2 * Math.PI) / tubefacets;
   final double dtoa = (2 * Math.PI) / torusfacets;
   final double dv = 1.0 / tubefacets;
   final double du = 1.0 / torusfacets;
   final double dtwa = (twist * dtoa) / tubefacets;
   int id = 0;
   WB_Point basevertex;
   for (int j = 0; j < torusfacets + 1; j++) {
     final int lj = (j == torusfacets) ? 0 : j;
     final double ca = Math.cos(lj * dtoa);
     final double sa = Math.sin(lj * dtoa);
     for (int i = 0; i < tubefacets + 1; i++) {
       final int li = (i == tubefacets) ? 0 : i;
       basevertex =
           new WB_Point(
               Ro + (Ri * Math.cos((dtua * li) + (j * dtwa))),
               0,
               Ri * Math.sin((dtua * li) + (j * dtwa)));
       vertices[id] = new WB_Point(ca * basevertex.xd(), sa * basevertex.xd(), basevertex.zd());
       uvws[id] = new WB_Point(j * du, i * dv, 0);
       id++;
     }
   }
   final int nfaces = tubefacets * torusfacets;
   id = 0;
   final int[][] faces = new int[nfaces][];
   int j = 0;
   for (j = 0; j < torusfacets; j++) {
     for (int i = 0; i < tubefacets; i++) {
       faces[id] = new int[4];
       faces[id][0] = i + (j * (tubefacets + 1));
       faces[id][1] = i + ((j + 1) * (tubefacets + 1));
       faces[id][2] = (i + 1) + ((j + 1) * (tubefacets + 1));
       faces[id][3] = (i + 1) + (j * (tubefacets + 1));
       id++;
     }
   }
   /*
    * for (int i = 0; i < tubefacets; i++) { faces[id] = new int[4];
    * faces[id][0] = i + ((torusfacets - 1) * (tubefacets + 1));
    * faces[id][1] = (i + twist) % (tubefacets + 1) + (torusfacets *
    * (tubefacets + 1)); faces[id][2] = (i + twist + 1) % (tubefacets + 1)
    * + (torusfacets * (tubefacets + 1)); faces[id][3] = (i + 1) +
    * ((torusfacets - 1) * (tubefacets + 1)); id++; }
    */
   final HEC_FromFacelist fl = new HEC_FromFacelist();
   fl.setVertices(vertices).setFaces(faces).setUVW(uvws);
   return fl.createBase();
 }
示例#3
0
  /*
   * (non-Javadoc)
   *
   * @see wblut.hemesh.creators.HEC_Creator#createBase()
   */
  @Override
  protected HE_Mesh createBase() {
    if (polygon == null) {
      return null;
    }
    final WB_Vector norm = polygon.getPlane().getNormal();
    final int n = polygon.getN();
    final boolean surf = WB_Epsilon.isZero(thickness);
    final WB_Point[] points = new WB_Point[surf ? n : 2 * n];
    for (int i = 0; i < n; i++) {
      points[i] = polygon.getPoint(i);
    }
    if (!surf) {
      for (int i = 0; i < n; i++) {
        points[n + i] = points[i].addMul(thickness, norm);
      }
    }
    int[][] faces;
    if (surf) {
      faces = new int[1][n];
      for (int i = 0; i < n; i++) {
        faces[0][i] = i;
      }

    } else {
      faces = new int[n + 2][];
      faces[n] = new int[n];
      faces[n + 1] = new int[n];
      for (int i = 0; i < n; i++) {

        faces[n][i] = i;
        faces[n + 1][i] = 2 * n - 1 - i;
        faces[i] = new int[4];
        faces[i][0] = i;
        faces[i][3] = (i + 1) % n;
        faces[i][2] = n + (i + 1) % n;
        faces[i][1] = n + i;
      }
    }
    final HEC_FromFacelist fl = new HEC_FromFacelist();
    fl.setVertices(points).setFaces(faces).setDuplicate(false);
    return fl.createBase().flipAllFaces();
  }
 /*
  * (non-Javadoc)
  *
  * @see wblut.hemesh.creators.HEC_Creator#createBase()
  */
 @Override
 protected HE_Mesh createBase() {
   final WB_Point[] points = getPoints();
   final WB_Point[] uvw = getUVW();
   final int[][] faces = new int[U * V][4];
   int li, lj;
   for (int i = 0; i < U; i++) {
     li = i + 1;
     for (int j = 0; j < V; j++) {
       lj = j + 1;
       faces[i + (U * j)][3] = i + ((U + 1) * j);
       faces[i + (U * j)][2] = li + ((U + 1) * j);
       faces[i + (U * j)][1] = li + ((U + 1) * lj);
       faces[i + (U * j)][0] = i + ((U + 1) * lj);
     }
   }
   final HEC_FromFacelist fl = new HEC_FromFacelist();
   fl.setFaces(faces).setVertices(points).setUVW(uvw);
   return new HE_Mesh(fl);
 }