日常の進捗

主に自分のための,行為とその習慣化の記録

HE_MESH Tutorial (4)

f:id:takawo:20171105233741p:plain

f:id:takawo:20171105233746p:plain

ライブラリ

  • 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");
}

リファレンス

Hemesh : 3D Printing Part 1 | Free Art Bureau