Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import wblut.math.*;
- import wblut.processing.*;
- import wblut.core.*;
- import wblut.hemesh.*;
- import wblut.geom.*;
- import unlekker.util.*;
- import unlekker.modelbuilder.*;
- import unlekker.modelbuilder.filter.*;
- import unlekker.modelbuilder.UVertexList;
- import java.util.List;
- WB_HashGrid grid;
- HE_Mesh front,back,fused,mesh;
- WB_Render render;
- ArrayList vectors;
- UNav3D nav;
- UGeometry model;
- void setup() {
- size(800,600,OPENGL);
- nav=new UNav3D(this);
- nav.trans.set(width/2,height/2,0);
- createMesh();
- }
- void draw() {
- background(43,171,150);
- directionalLight(255, 255, 255, 1, 1, -1);
- directionalLight(127, 127, 127, -1, -1, 1);
- nav.doTransforms();
- noStroke();
- fill(242,101,34);
- render.drawFaces(mesh);
- stroke(10);
- render.drawEdges(mesh);
- }
- HE_Mesh createGrid(int scaleFactor){
- int vAmount = 13;
- int fAmount = vAmount-1;
- float[][] vertices=new float[vAmount*vAmount][3];
- int index = 0;
- for (int j = 0; j < vAmount; j++) {
- for (int i = 0; i < vAmount; i++) {
- vertices[index][0] =-200+ i * 40;
- vertices[index][1] =-200+j * 40;
- float n = noise(i+j) * scaleFactor;
- vertices[index][2] = n;
- index++;
- }
- }
- index = 0;
- int[][] faces = new int[fAmount*fAmount][];
- for (int j = 0; j < fAmount; j++) {
- for (int i = 0; i < fAmount; i++) {
- faces[index]=new int[4];
- faces[index][0] = i + vAmount * j;
- faces[index][1] = i + 1 + vAmount * j;
- faces[index][2] = i + 1 + vAmount * (j + 1);
- faces[index][3] = i + vAmount * (j + 1);
- index++;
- }
- }
- HEC_FromFacelist creator=new HEC_FromFacelist();
- creator.setVertices(vertices);
- creator.setFaces(faces);
- creator.setDuplicate(false);
- HE_Mesh grid =new HE_Mesh(creator);
- return grid;
- }
- void createMesh() {
- int gridSize =12;
- front=createGrid(200);
- //int i=0;
- for (int i=0; i < gridSize*gridSize; i++) {
- if(random(100) < 50){
- front.deleteFace(front.getFaceByKey(i));
- }
- i++;
- }
- front.cleanUnusedElementsByFace();
- front.capHalfedges();
- back = new HE_Mesh();
- back.set(front);
- back.flipAllFaces();
- HEM_Extrude extruder = new HEM_Extrude();
- extruder.setDistance(30.0);
- front.modify(extruder);
- fused = new HE_Mesh();
- fused.add(front);
- fused.fuse(back);
- mesh = new HE_Mesh();
- mesh.set(fused);
- mesh.resolvePinchPoints();
- mesh.pairHalfedges();
- //HES_CatmullClark s = new HES_CatmullClark().setKeepEdges(true).setKeepBoundary(true);
- //mesh.subdivide(s,2);
- render=new WB_Render(this);
- }
- void initImageWithFile(String file){
- PImage img = loadImage(file);
- vectors = new ArrayList();
- for (int i=0; i < img.width; i++) {
- for (int j=0; j < img.height; j++) {
- color c = img.get(i,j);
- if (red(c) != 0 && green(c) != 0 && blue(c) != 0) {
- vectors.add(new PVector(i,j));
- }
- }
- }
- }
- void saveSTL() {
- String fileName = "metaballs";
- saveFrame(fileName+".png");
- HET_Export.saveToSTL(mesh,sketchPath(fileName+".stl"),1.0);
- }
- void keyPressed() {
- if(key=='s') {
- saveSTL();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement