Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import controlP5.*;
- import toxi.geom.*;
- import toxi.geom.mesh.*;
- import toxi.processing.*;
- import peasy.*;
- ToxiclibsSupport gfx;
- Mesh3D wall;
- PeasyCam cam;
- float wallLength = 200;
- float wallHeight = 350;
- float panelWidth = 60;
- float panelHeight = 120;
- float panelThickness = 10;
- float panelMid_A = 0.1;
- float panelMid_B = 0.9;
- float panelMidHeight = 40;
- ControlP5 cp5;
- void setup() {
- size(1500, 700, P3D);
- cam = new PeasyCam(this, 600);
- cam.setActive(false);
- cam.rotateZ(PI/4);
- cam.rotateX(-PI/4);
- gfx = new ToxiclibsSupport(this);
- wall = new WETriangleMesh();
- modifyWall();
- cp5 = new ControlP5(this);
- cp5.setAutoDraw(false);
- cp5.addSlider("wallLength").setPosition(10, 10).setSize(150, 15)
- .setRange(10, 2000).setLabel("Wall Length").setValue(200)
- .snapToTickMarks(true).setNumberOfTickMarks(200).showTickMarks(false);
- cp5.addSlider("wallHeight").setPosition(10, 35).setSize(150, 15)
- .setRange(10, 500).setLabel("Wall Height").setValue(350)
- .snapToTickMarks(true).setNumberOfTickMarks(50).showTickMarks(false);
- cp5.addSlider("panelWidth").setPosition(250, 10).setSize(150, 15)
- .setRange(10, 150).setLabel("Panel Width").setValue(60)
- .snapToTickMarks(true).setNumberOfTickMarks(141).showTickMarks(false);
- cp5.addSlider("panelHeight").setPosition(250, 35).setSize(150, 15)
- .setRange(10, 150).setLabel("Panel Height").setValue(120)
- .snapToTickMarks(true).setNumberOfTickMarks(141).showTickMarks(false);
- cp5.addSlider("panelThickness").setPosition(490, 10).setSize(150, 15)
- .setRange(1, 50).setLabel("Panel Thickness").setValue(10)
- .snapToTickMarks(true).setNumberOfTickMarks(50).showTickMarks(false);
- cp5.addSlider("panelMidHeight").setPosition(490, 35).setSize(150, 15)
- .setRange(30, 130).setLabel("Panel Mid Height").setValue(40)
- .snapToTickMarks(true).setNumberOfTickMarks(101).showTickMarks(false);
- cp5.addSlider("panelMid_A").setPosition(730, 35).setSize(150, 15)
- .setRange(0.01, 0.99).setLabel("Panel Mid A").setValue(0.1);
- cp5.addSlider("panelMid_B").setPosition(730, 10).setSize(150, 15)
- .setRange(0.01, 0.99).setLabel("Panel Mid B").setValue(0.9);
- cam.lookAt(wall.getBoundingBox().x, wall.getBoundingBox().y, wall.getBoundingBox().z);
- }
- void draw() {
- background(30);
- modifyWall();
- //gfx.mesh(wall);
- Panel p = new Panel(panelWidth, panelHeight, panelThickness, panelMid_A, panelMid_B, panelMidHeight,
- new Frame(new Vec3D(), new Vec3D(0,0,1)));
- gfx.mesh(p.mesh);
- cam.beginHUD();
- cp5.draw();
- cam.endHUD();
- }
- void modifyWall() {
- Vec3D min = new Vec3D();
- Vec3D max = new Vec3D(wallLength, 20, wallHeight);
- wall = AABB.fromMinMax(min, max).toMesh();
- }
- void keyPressed() {
- if (keyCode == ALT) {
- cam.setActive(true);
- }
- }
- void keyReleased() {
- cam.setActive(false);
- }
- class Panel {
- WETriangleMesh mesh;
- float w;
- float h;
- float t;
- Frame frame;
- float mid_A;
- float mid_B;
- float midHeight;
- Panel(float w, float h, float t, float mid_A, float mid_B, float midHeight, Frame frame) {
- this.w = w;
- this.h = h;
- this.t = t;
- this.mid_A = mid_A;
- this.mid_B = mid_B;
- this.midHeight = midHeight;
- this.frame = frame;
- mesh = new WETriangleMesh();
- generatePanel();
- }
- void generatePanel() {
- Vec3D[] v = getPointArray();
- addFace(v,0,1,2);
- addFace(v,0,2,3);
- addFace(v,0,1,4);
- addFace(v,1,4,5);
- addFace(v,2,3,6);
- addFace(v,3,6,7);
- addFace(v,0,3,7);
- addFace(v,0,4,8);
- addFace(v,0,7,8);
- addFace(v,1,2,6);
- addFace(v,1,5,9);
- addFace(v,1,6,9);
- addFace(v,4,5,9);
- addFace(v,4,8,9);
- addFace(v,6,7,8);
- addFace(v,6,8,9);
- }
- Vec3D[] getPointArray() {
- float moveWidth = w/2.0;
- float moveHeight = h/2.0;
- Vec3D[] pts = new Vec3D[10];
- pts[0] = frame.origin.copy().add(frame.xAxis.scale(moveWidth)).add(frame.yAxis.scale(moveHeight));
- pts[1] = frame.origin.copy().add(frame.xAxis.scale(-moveWidth)).add(frame.yAxis.scale(moveHeight));
- pts[2] = frame.origin.copy().add(frame.xAxis.scale(-moveWidth)).add(frame.yAxis.scale(-moveHeight));
- pts[3] = frame.origin.copy().add(frame.xAxis.scale(moveWidth)).add(frame.yAxis.scale(-moveHeight));
- pts[4] = pts[0].add(frame.normal.scale(t));
- pts[5] = pts[1].add(frame.normal.scale(t));
- pts[6] = pts[2].add(frame.normal.scale(t));
- pts[7] = pts[3].add(frame.normal.scale(t));
- pts[8] = pts[0].sub(pts[3]).scale(mid_A).add(pts[3]).add(frame.normal.scale(midHeight));
- pts[9] = pts[1].sub(pts[2]).scale(mid_B).add(pts[2]).add(frame.normal.scale(midHeight));
- return pts;
- }
- void addFace(Vec3D[] vertices, int a, int b, int c) {
- mesh.addFace(vertices[a], vertices[b], vertices[c]);
- }
- }
- class Frame extends Plane {
- Vec3D origin, xAxis, yAxis;
- Frame(Vec3D origin, Vec3D xAxis, Vec3D yAxis) {
- super(origin, xAxis.cross(yAxis).normalize());
- this.xAxis = xAxis.normalize();
- this.yAxis = yAxis.normalize();
- this.origin = origin;
- }
- Frame(Vec3D origin, Vec3D normal) {
- super(origin, normal.normalize());
- this.xAxis = new Vec3D(normal.x == 0 && normal.y == 0? normal.z : normal.y, normal.x, 0).normalize();
- this.yAxis = normal.cross(xAxis).normalize();
- this.origin = origin;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement