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; }
/* * (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(); }
/* * (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); }