Advertisement
itblanco

wallInterface

Jun 10th, 2020
206
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.34 KB | None | 0 0
  1. import controlP5.*;
  2. import toxi.geom.*;
  3. import toxi.geom.mesh.*;
  4. import toxi.processing.*;
  5. import peasy.*;
  6.  
  7.  
  8. ToxiclibsSupport gfx;
  9. Mesh3D wall;
  10. PeasyCam cam;
  11.  
  12. float wallLength = 200;
  13. float wallHeight = 350;
  14.  
  15. float panelWidth = 60;
  16. float panelHeight = 120;
  17. float panelThickness = 10;
  18. float panelMid_A = 0.1;
  19. float panelMid_B = 0.9;
  20. float panelMidHeight = 40;
  21.  
  22. ControlP5 cp5;
  23.  
  24. void setup() {
  25.   size(1500, 700, P3D);
  26.   cam = new PeasyCam(this, 600);
  27.   cam.setActive(false);
  28.   cam.rotateZ(PI/4);
  29.   cam.rotateX(-PI/4);
  30.  
  31.   gfx = new ToxiclibsSupport(this);
  32.   wall = new WETriangleMesh();
  33.   modifyWall();
  34.  
  35.   cp5 = new ControlP5(this);
  36.   cp5.setAutoDraw(false);
  37.   cp5.addSlider("wallLength").setPosition(10, 10).setSize(150, 15)
  38.     .setRange(10, 2000).setLabel("Wall Length").setValue(200)
  39.     .snapToTickMarks(true).setNumberOfTickMarks(200).showTickMarks(false);
  40.   cp5.addSlider("wallHeight").setPosition(10, 35).setSize(150, 15)
  41.     .setRange(10, 500).setLabel("Wall Height").setValue(350)
  42.     .snapToTickMarks(true).setNumberOfTickMarks(50).showTickMarks(false);
  43.  
  44.   cp5.addSlider("panelWidth").setPosition(250, 10).setSize(150, 15)
  45.     .setRange(10, 150).setLabel("Panel Width").setValue(60)
  46.     .snapToTickMarks(true).setNumberOfTickMarks(141).showTickMarks(false);
  47.   cp5.addSlider("panelHeight").setPosition(250, 35).setSize(150, 15)
  48.     .setRange(10, 150).setLabel("Panel Height").setValue(120)
  49.     .snapToTickMarks(true).setNumberOfTickMarks(141).showTickMarks(false);
  50.    
  51.   cp5.addSlider("panelThickness").setPosition(490, 10).setSize(150, 15)
  52.     .setRange(1, 50).setLabel("Panel Thickness").setValue(10)
  53.     .snapToTickMarks(true).setNumberOfTickMarks(50).showTickMarks(false);
  54.   cp5.addSlider("panelMidHeight").setPosition(490, 35).setSize(150, 15)
  55.     .setRange(30, 130).setLabel("Panel Mid Height").setValue(40)
  56.     .snapToTickMarks(true).setNumberOfTickMarks(101).showTickMarks(false);
  57.    
  58.   cp5.addSlider("panelMid_A").setPosition(730, 35).setSize(150, 15)
  59.     .setRange(0.01, 0.99).setLabel("Panel Mid A").setValue(0.1);
  60.   cp5.addSlider("panelMid_B").setPosition(730, 10).setSize(150, 15)
  61.     .setRange(0.01, 0.99).setLabel("Panel Mid B").setValue(0.9);
  62.  
  63.  
  64.   cam.lookAt(wall.getBoundingBox().x, wall.getBoundingBox().y, wall.getBoundingBox().z);
  65. }
  66.  
  67. void draw() {
  68.   background(30);
  69.   modifyWall();
  70.   //gfx.mesh(wall);
  71.   Panel p = new Panel(panelWidth, panelHeight, panelThickness, panelMid_A, panelMid_B, panelMidHeight,
  72.     new Frame(new Vec3D(), new Vec3D(0,0,1)));
  73.    
  74.     gfx.mesh(p.mesh);
  75.   cam.beginHUD();
  76.   cp5.draw();
  77.   cam.endHUD();
  78. }
  79.  
  80. void modifyWall() {
  81.   Vec3D min = new Vec3D();
  82.   Vec3D max = new Vec3D(wallLength, 20, wallHeight);
  83.   wall = AABB.fromMinMax(min, max).toMesh();
  84. }
  85.  
  86.  
  87. void keyPressed() {
  88.   if (keyCode == ALT) {
  89.     cam.setActive(true);
  90.   }
  91. }
  92.  
  93. void keyReleased() {
  94.   cam.setActive(false);
  95. }
  96.  
  97. class Panel {
  98.   WETriangleMesh mesh;
  99.   float w;
  100.   float h;
  101.   float t;
  102.   Frame frame;
  103.   float mid_A;
  104.   float mid_B;
  105.   float midHeight;
  106.  
  107.   Panel(float w, float h, float t, float mid_A, float mid_B, float midHeight, Frame frame) {
  108.     this.w = w;
  109.     this.h = h;
  110.     this.t = t;
  111.     this.mid_A = mid_A;
  112.     this.mid_B = mid_B;
  113.     this.midHeight = midHeight;
  114.     this.frame = frame;
  115.     mesh = new WETriangleMesh();
  116.     generatePanel();
  117.   }
  118.  
  119.   void generatePanel() {
  120.     Vec3D[] v = getPointArray();
  121.     addFace(v,0,1,2);
  122.     addFace(v,0,2,3);
  123.     addFace(v,0,1,4);
  124.     addFace(v,1,4,5);
  125.     addFace(v,2,3,6);
  126.     addFace(v,3,6,7);
  127.     addFace(v,0,3,7);
  128.     addFace(v,0,4,8);
  129.     addFace(v,0,7,8);
  130.     addFace(v,1,2,6);
  131.     addFace(v,1,5,9);
  132.     addFace(v,1,6,9);
  133.     addFace(v,4,5,9);
  134.     addFace(v,4,8,9);
  135.     addFace(v,6,7,8);
  136.     addFace(v,6,8,9);  
  137.   }
  138.  
  139.   Vec3D[] getPointArray() {
  140.     float moveWidth = w/2.0;
  141.     float moveHeight = h/2.0;
  142.     Vec3D[] pts = new Vec3D[10];
  143.     pts[0] = frame.origin.copy().add(frame.xAxis.scale(moveWidth)).add(frame.yAxis.scale(moveHeight));
  144.     pts[1] = frame.origin.copy().add(frame.xAxis.scale(-moveWidth)).add(frame.yAxis.scale(moveHeight));
  145.     pts[2] = frame.origin.copy().add(frame.xAxis.scale(-moveWidth)).add(frame.yAxis.scale(-moveHeight));
  146.     pts[3] = frame.origin.copy().add(frame.xAxis.scale(moveWidth)).add(frame.yAxis.scale(-moveHeight));
  147.     pts[4] = pts[0].add(frame.normal.scale(t));
  148.     pts[5] = pts[1].add(frame.normal.scale(t));
  149.     pts[6] = pts[2].add(frame.normal.scale(t));
  150.     pts[7] = pts[3].add(frame.normal.scale(t));    
  151.     pts[8] = pts[0].sub(pts[3]).scale(mid_A).add(pts[3]).add(frame.normal.scale(midHeight));
  152.     pts[9] = pts[1].sub(pts[2]).scale(mid_B).add(pts[2]).add(frame.normal.scale(midHeight));
  153.     return pts;
  154.   }
  155.  
  156.   void addFace(Vec3D[] vertices, int a, int b, int c) {
  157.     mesh.addFace(vertices[a], vertices[b], vertices[c]);
  158.   }
  159. }
  160.  
  161. class Frame extends Plane {
  162.   Vec3D origin, xAxis, yAxis;
  163.  
  164.   Frame(Vec3D origin, Vec3D xAxis, Vec3D yAxis) {
  165.    super(origin, xAxis.cross(yAxis).normalize());
  166.    this.xAxis = xAxis.normalize();
  167.    this.yAxis = yAxis.normalize();
  168.    this.origin = origin;
  169.    
  170.   }
  171.  
  172.   Frame(Vec3D origin, Vec3D normal) {
  173.    super(origin, normal.normalize());
  174.    this.xAxis = new Vec3D(normal.x == 0 && normal.y == 0? normal.z : normal.y, normal.x, 0).normalize();
  175.    this.yAxis = normal.cross(xAxis).normalize();
  176.    this.origin = origin;
  177.   }
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement