HE_MESH Tutorial (4)
ライブラリ
- PeasyCam
- ControlP5
- HE_Mesh
上記ライブラリをContribution Managerで検索してインストールする
コード
01
import controlP5.*; import peasy.*; import peasy.org.apache.commons.math.*; import peasy.org.apache.commons.math.geometry.*; import wblut.geom.*; import wblut.hemesh.*; import wblut.core.*; import wblut.math.*; import wblut.nurbs.*; import wblut.processing.*; ControlP5 cp5; PeasyCam cam; HE_Mesh mesh; WB_Render3D render; float cubeEdge; int strutRadius; int strutFacets; int strutOffset; // setup関数 : 初回1度だけ実行される void setup() { size(960, 540, P3D); // ウィンドウサイズを960px,540pxに colorMode(HSB, 360, 100, 100); // HSBでの色指定にする cp5 = new ControlP5(this); cp5.setAutoDraw(false); cp5.addSlider("cubeEdge").setRange(0, 250).setValue(60).setPosition(20, 40); cp5.addSlider("strutRadius").setRange(0, 250).setValue(100).setPosition(20, 60); cp5.addSlider("strutFacets").setRange(0, 50).setValue(3).setPosition(20, 80); cp5.addSlider("strutOffset").setRange(0, 250).setValue(5).setPosition(20, 100); cp5.addButton("button").setLabel("Export STL").setPosition(20, 120); cam = new PeasyCam(this, 500); create(); } void create() { HEC_Cube creator = new HEC_Cube(); creator.setEdge(cubeEdge); mesh = new HE_Mesh(creator); HEM_Wireframe strut = new HEM_Wireframe(); strut.setStrutRadius(strutRadius); strut.setStrutFacets(strutFacets); strut.setMaximumStrutOffset(strutOffset); strut.setTaper(true); mesh.modify(strut); render = new WB_Render3D(this); } void controlEvent(ControlEvent e) { create(); } // draw関数 : setup関数実行後繰り返し実行される void draw() { background(0, 0, 0); cam.beginHUD(); cp5.draw(); directionalLight(0, 0, 100, 1, 1, -1); directionalLight(0, 0, 50, -1, -1, 1); cam.endHUD(); stroke(0, 0, 100); render.drawEdges(mesh); } void button() { mesh.triangulate(); HET_Export.saveToSTL(mesh, sketchPath("export_stl"), "test"); }
02
import java.util.*; import controlP5.*; import peasy.*; import peasy.org.apache.commons.math.*; import peasy.org.apache.commons.math.geometry.*; import wblut.geom.*; import wblut.hemesh.*; import wblut.core.*; import wblut.math.*; import wblut.nurbs.*; import wblut.processing.*; ControlP5 cp5; PeasyCam cam; HE_Mesh mesh; WB_Render3D render; HE_Selection selection; float cubeEdge; int cubeSegment; int extrudeDistance; // setup関数 : 初回1度だけ実行される void setup() { size(960, 540, P3D); // ウィンドウサイズを960px,540pxに colorMode(HSB, 360, 100, 100); // HSBでの色指定にする cp5 = new ControlP5(this); cp5.setAutoDraw(false); cp5.addSlider("cubeEdge").setRange(0,250).setValue(100).setPosition(20,20); cp5.addSlider("cubeSegment").setRange(1,15).setValue(4).setPosition(20,40); cp5.addSlider("extrudeDistance").setRange(5,100).setValue(15).setPosition(20,60); cp5.addButton("button").setLabel("Export STL").setPosition(20, 80); cam = new PeasyCam(this, 500); create(); } void create() { HEC_Cube creator = new HEC_Cube(); creator.setEdge(cubeEdge); creator.setWidthSegments(cubeSegment).setHeightSegments(cubeSegment).setDepthSegments(cubeSegment); creator.setCenter(0, 0, 0).setZAxis(1, 1, 1).setZAngle(PI/4); mesh = new HE_Mesh(creator); selection = new HE_Selection(mesh); Iterator<HE_Face> iterator = mesh.fItr(); HE_Face f; while (iterator.hasNext()) { f = iterator.next(); color c = color(random(360), 80, 100); f.setLabel(c); if (random(1) < 0.33) { selection.add(f); } } HEM_Extrude extrude = new HEM_Extrude(); extrude.setDistance(extrudeDistance); selection.modify(extrude); render = new WB_Render3D(this); } void controlEvent(ControlEvent e) { create(); } // draw関数 : setup関数実行後繰り返し実行される void draw() { background(0, 0, 0); cam.beginHUD(); cp5.draw(); directionalLight(0, 0, 100, 1, 1, -1); directionalLight(0, 0, 50, -1, -1, 1); cam.endHUD(); stroke(0, 0, 100); Iterator<HE_Face> iterator = mesh.fItr(); HE_Face f; while (iterator.hasNext()) { f = iterator.next(); color c = f.getLabel(); fill(c); render.drawFace(f); } stroke(0, 0, 100); render.drawEdges(mesh); } void button() { mesh.triangulate(); HET_Export.saveToSTL(mesh, sketchPath("export_stl"), "test"); }