public List<MeshView> getAsMeshViews() { List<MeshView> result = new ArrayList<>(meshes.size()); for (int i = 0; i < meshes.size(); i++) { Mesh mesh = meshes.get(i); Material mat = materials.get(i); MeshView view = new MeshView(mesh); view.setMaterial(mat); view.setCullFace(CullFace.NONE); result.add(view); } return result; }
MeshContainer(Vector3d min, Vector3d max, List<Mesh> meshes) { this.meshes = meshes; this.materials = new ArrayList<>(); this.bounds = new Bounds(min, max); this.width = bounds.getBounds().x; this.height = bounds.getBounds().y; this.depth = bounds.getBounds().z; PhongMaterial material = new PhongMaterial(Color.RED); for (Mesh mesh : meshes) { materials.add(material); } }
MeshContainer(Vector3d min, Vector3d max, List<Mesh> meshes, List<Material> materials) { this.meshes = meshes; this.materials = materials; this.bounds = new Bounds(min, max); this.width = bounds.getBounds().x; this.height = bounds.getBounds().y; this.depth = bounds.getBounds().z; if (materials.size() != meshes.size()) { throw new IllegalArgumentException("Mesh list and Material list must not differ in size!"); } }
public void validate(Mesh mesh) { if (!(mesh instanceof TriangleMesh)) { throw new AssertionError("Mesh is not TriangleMesh: " + mesh.getClass() + ", mesh = " + mesh); } TriangleMesh tMesh = (TriangleMesh) mesh; int numPoints = tMesh.getPoints().size() / tMesh.getPointElementSize(); int numTexCoords = tMesh.getTexCoords().size() / tMesh.getTexCoordElementSize(); int numFaces = tMesh.getFaces().size() / tMesh.getFaceElementSize(); if (numPoints == 0 || numPoints * tMesh.getPointElementSize() != tMesh.getPoints().size()) { throw new AssertionError("Points array size is not correct: " + tMesh.getPoints().size()); } if (numTexCoords == 0 || numTexCoords * tMesh.getTexCoordElementSize() != tMesh.getTexCoords().size()) { throw new AssertionError("TexCoords array size is not correct: " + tMesh.getPoints().size()); } if (numFaces == 0 || numFaces * tMesh.getFaceElementSize() != tMesh.getFaces().size()) { throw new AssertionError("Faces array size is not correct: " + tMesh.getPoints().size()); } if (numFaces != tMesh.getFaceSmoothingGroups().size() && tMesh.getFaceSmoothingGroups().size() > 0) { throw new AssertionError("FaceSmoothingGroups array size is not correct: " + tMesh.getPoints().size() + ", numFaces = " + numFaces); } ObservableIntegerArray faces = tMesh.getFaces(); for (int i = 0; i < faces.size(); i += 2) { int pIndex = faces.get(i); if (pIndex < 0 || pIndex > numPoints) { throw new AssertionError("Incorrect point index: " + pIndex + ", numPoints = " + numPoints); } int tcIndex = faces.get(i + 1); if (tcIndex < 0 || tcIndex > numTexCoords) { throw new AssertionError("Incorrect texCoord index: " + tcIndex + ", numTexCoords = " + numTexCoords); } } // System.out.println("Validation successfull of " + mesh); }
public static CSG mesh2CSG(Mesh mesh) throws IOException { List<Polygon> polygons = new ArrayList<>(); List<Vector3d> vertices = new ArrayList<>(); if(mesh instanceof TriangleMesh){ // Get faces ObservableFaceArray faces = ((TriangleMesh)mesh).getFaces(); int[] f=new int[faces.size()]; faces.toArray(f); // Get vertices ObservableFloatArray points = ((TriangleMesh)mesh).getPoints(); float[] p = new float[points.size()]; points.toArray(p); // convert faces to polygons for(int i=0; i<faces.size()/6; i++){ int i0=f[6*i], i1=f[6*i+2], i2=f[6*i+4]; vertices.add(new Vector3d(p[3*i0], p[3*i0+1], p[3*i0+2])); vertices.add(new Vector3d(p[3*i1], p[3*i1+1], p[3*i1+2])); vertices.add(new Vector3d(p[3*i2], p[3*i2+1], p[3*i2+2])); polygons.add(Polygon.fromPoints(vertices)); vertices = new ArrayList<>(); } } return CSG.fromPolygons(new PropertyStorage(),polygons); }
public Mesh getModel() { return model; }
public void setModel(Mesh model) { this.model = model; setMesh(model); }
MeshContainer(Vector3d min, Vector3d max, Mesh... meshes) { this(min, max, Arrays.asList(meshes)); }
/** * @return the mesh */ public List<Mesh> getMeshes() { return meshes; }
public static void mesh2STL(String fileName, Mesh mesh) throws IOException{ if(!(mesh instanceof TriangleMesh)){ return; } // Get faces ObservableFaceArray faces = ((TriangleMesh)mesh).getFaces(); int[] f=new int[faces.size()]; faces.toArray(f); // Get vertices ObservableFloatArray points = ((TriangleMesh)mesh).getPoints(); float[] p = new float[points.size()]; points.toArray(p); StringBuilder sb = new StringBuilder(); sb.append("solid meshFX\n"); // convert faces to polygons for(int i=0; i<faces.size()/6; i++){ int i0=f[6*i], i1=f[6*i+2], i2=f[6*i+4]; Point3D pA=new Point3D(p[3*i0], p[3*i0+1], p[3*i0+2]); Point3D pB=new Point3D(p[3*i1], p[3*i1+1], p[3*i1+2]); Point3D pC=new Point3D(p[3*i2], p[3*i2+1], p[3*i2+2]); Point3D pN=pB.subtract(pA).crossProduct(pC.subtract(pA)).normalize(); sb.append(" facet normal ").append(pN.getX()).append(" ").append(pN.getY()).append(" ").append(pN.getZ()).append("\n"); sb.append(" outer loop\n"); sb.append(" vertex ").append(pA.getX()).append(" ").append(pA.getY()).append(" ").append(pA.getZ()).append("\n"); sb.append(" vertex ").append(pB.getX()).append(" ").append(pB.getY()).append(" ").append(pB.getZ()).append("\n"); sb.append(" vertex ").append(pC.getX()).append(" ").append(pC.getY()).append(" ").append(pC.getZ()).append("\n"); sb.append(" endloop\n"); sb.append(" endfacet\n"); } sb.append("endsolid meshFX\n"); // write file try (BufferedWriter writer = Files.newBufferedWriter(Paths.get(fileName), Charset.forName("UTF-8"), StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) { writer.write(sb.toString()); } }