# Trying to use modelX() but built a spiral galaxy of points

**URL:** https://discourse.processing.org/t/trying-to-use-modelx-but-built-a-spiral-galaxy-of-points/6064
**Category:** Coding Questions
**Created:** [November 29, 2018, 8:08am UTC](https://discourse.processing.org/t/trying-to-use-modelx-but-built-a-spiral-galaxy-of-points/6064 "2018-11-29T08:08:30Z")
**Posts on this page:** 1
**Showing post:** 4

<div class="post-metadata">

### Author: ![kll](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/kll/32/964_2.png) [@kll](https://discourse.processing.org/u/kll)
#### Post date: [December 1, 2018, 3:58pm UTC](https://discourse.processing.org/t/trying-to-use-modelx-but-built-a-spiral-galaxy-of-points/6064/4 "2018-12-01T15:58:44Z")

</div>

sorry, not sure this is of any help,  
but i wanted just to be sure that a mix of

- translate
- rotate
- shear

together with saved modelXYZ works.

> **give it a try (v03)**
>
> i know it looks messy
> 
> ```auto
> // https://discourse.processing.org/t/trying-to-use-modelx-but-built-a-spiral-galaxy-of-points/6064/4
> // v02 summary line cyan
> // v03 show PVector data also on canvas, plus cleanup
> 
> int make=0, makemax = 10;
> PVector[] remember;
> 
> // ______________________________________
> void setup() {
> size(500, 500, P3D);
> info_print();
> remember = new PVector[makemax];
> tumble(true); // make / draw axis and points and boxes ( and remember )
> for ( int i=0; i<make; i++) println("i "+i+" "+remember[i]);
> println(" white line connects modelXYZ memory points / cyan line Begin End");
> println(" green points and box's draw relative at 0,0,0 after translate/rotate/shear");
> }
> 
> // ______________________________________
> void remember_it() {
> remember[make]= new PVector(modelX(0, 0, 0), modelY(0, 0, 0), modelZ(0, 0, 0));
> //println("make "+make);
> make++;
> }
> 
> void a_point(boolean mem) { // __________________ points + box and optional remember
> point(0, 0, 0); 
> box(10);
> if (mem) remember_it();
> }
> 
> // ______________________________________ 
> void tumble(boolean mem) { //_ aka drunken_monkey_in_space
> // _______________________________________________ axis
> noFill();
> stroke(200, 0, 0); 
> line(0, 0, 0, 30, 0, 0);
> stroke(200, 200, 0); 
> line(0, 0, 0, 0, 30, 0);
> stroke(200, 0, 200); 
> line(0, 0, 0, 0, 0, 30);
> // _______________________________________________ in 3D
> stroke(0, 200, 0); 
> strokeWeight(1);
> pushMatrix();
> // start
> a_point(mem);// _______________ [0]
> translate(50, 60, 0);
> a_point(mem);// _______________ [1]
> rotateX(PI/4);
> a_point(mem);// _______________ [2]
> translate(50, 0, 0);
> shearX(PI/4);
> a_point(mem);// _______________ [3]
> translate(0, 0, -30);
> a_point(mem);// _______________ [4]
> // end
> popMatrix();
> }
> 
> void show_remembered_points_as_lines() {
> strokeWeight(1);
> stroke(255); // show lines for all steps in white 
> for (int i =0; i<make-1; i++) line(remember[i].x, remember[i].y, remember[i].z, remember[i+1].x, remember[i+1].y, remember[i+1].z);
> stroke(0, 200, 200); // to show a summary we make a cyan line from NULL to END
> line(0, 0, 0, remember[make-1].x, remember[make-1].y, remember[make-1].z);
> }
> 
> void show_remembered_points_as_text() {
> fill(0, 200, 200); 
> textSize(15); // text color
> for (int i = 0; i<make; i++) text("i "+i+" PVector["+int(remember[i].x)+","+int(remember[i].y)+","+int(remember[i].z)+"]", 10, 20+20*i);
> }
> // ______________________________________
> void draw_object() { // _________________ called by / from inside PTZ
> show_remembered_points_as_lines(); // from array of PVector of modelXYZ's
> tumble(false); // draw axis and points ( not remember again ) using original translate,rotate,shear... and a BOX each
> }
> 
> // ______________________________________ DRAW
> void draw() {
> background(0, 0, 80);
> show_remembered_points_as_text();
> PTZ();
> }
> 
> // _____________________________________ PTZ tab
> int mode = 0;
> float Zmag = 5;
> int Zaxis=-10;                                                       
> float Xmag, Ymag = 0;
> float newXmag, newYmag = 0; 
> int newZmag = 0;
> int zoomf = 3;
> float newxpos, newypos = 0; // for PAN
> float xposd, yposd = 0; // for PAN
> 
> // _________________________________________________________________ ROTATE / TILDE and MOVE / PAN
> void mousePressed() {
> if (mouseButton == LEFT) { 
> mode=1;
> } // ORBIT
> else if (mouseButton == RIGHT) { 
> mode=2;
> } // PAN
> // else if (mouseButton == CENTER) { mode=3; } // zoom mouse wheel works same , presssed or not
> }
> 
> // _________________________________________________________________ mouse PT end
> void mouseReleased() { 
> mode = 0;
> }
> 
> // _________________________________________________________________ mouseWheel ZOOM
> void mouseWheel(MouseEvent event) {
> int newZmag = event.getCount(); // +- 1
> //if (Zmag > 10) { Zmag += newZmag * 5; } else { Zmag += newZmag; }// from 1 to 11 go in step 1 else in step 5 
> Zmag += newZmag*0.3;
> //println("Zmag: "+nf(Zmag, 1, 2));
> }
> 
> void keyPressed() {
> if ( keyCode == UP ) Ymag -= 0.1 ;
> if ( keyCode == DOWN ) Ymag += 0.1 ;
> if ( keyCode == RIGHT) Xmag -= 0.1 ;
> if ( keyCode == LEFT ) Xmag += 0.1 ;
> if ( keyCode == 16 ) Zmag -= 0.5 ;
> if ( keyCode == 11 ) Zmag += 0.5 ;
> //println("key: "+key); println("keyCode: "+keyCode);
> }
> // _________________________________________________________________ Pan Tilde Zoom
> void PTZ() {
> pushMatrix(); 
> translate(width/2, height/2, Zaxis);
> // get new mouse operation  
> if ( mode == 2 ) { // PAN ( right mouse button pressed)
> xposd = (mouseX-float(width/2));
> yposd = (mouseY-float(height/2));
> }  
> newxpos = xposd;// xposd=0;
> newypos = yposd;// yposd = 0; 
> translate(newxpos, newypos, 0); // move object
> if ( mode == 1 ) { // ORBIT ( left mouse button pressed)
> newXmag = mouseX/float(width) * TWO_PI;
> newYmag = mouseY/float(height) * TWO_PI;
> 
> float diff = Xmag-newXmag;
> if (abs(diff) > 0.01) Xmag -= diff/4.0;
> diff = Ymag-newYmag;
> if (abs(diff) > 0.01) Ymag -= diff/4.0;
> }
> rotateX(-Ymag);   
> rotateY(-Xmag);   
> scale(Zmag);
> draw_object(); // THE OBJECT see main tab
> popMatrix();
> }
> 
> // _______________________________________________ SETUP PRINT INFO
> void info_print() {
> println("PTZ info:");
> println("key UP DOWN RIGHT LEFT -> rotate // key PAGE UP DOWN -> zoom");
> println("mouse LEFT press drag up down right left -> rotate // mouse RIGHT press -> move // mouse WHEEL turn -> zoom");
> println("_data_");
> }
> 
> ```

---

_[View the full topic](https://discourse.processing.org/t/trying-to-use-modelx-but-built-a-spiral-galaxy-of-points/6064)._
