Takashi Asano
/
linearMirrorMotion1017
sotsuron
Fork of linearMirrorMotion1017 by
renderclass.cpp
- Committer:
- takapiasano
- Date:
- 2013-07-22
- Revision:
- 26:74ecbf9985e1
- Parent:
- 25:423050363215
- Child:
- 27:38bc8dc67dab
File content as of revision 26:74ecbf9985e1:
#include "renderclass.h" #include "mbed.h" #include "laserProjectorHardware.h" #include <vector> Ticker translationTimer; //for translating ----------------------------------------------------------------- inline void render::shearing(point2dl& dataBefore) { dataBefore.x = -dataBefore.x/2.0 - 5.0*intvx; //vx * speedTimer.read_us()*10; //2000000;//dataBefore.x - speed *speedTimer.read_us()/1000000 ;//- speed * cos(angle+PI/2)*speedTimer.read_us()/800; dataBefore.y = dataBefore.y/2.0 - 5.0*intvy; //vy * speedTimer.read_us()*10;//dataBefore.y ;//- speed * sin(angle+PI/2)*speedTimer.read_us()/800; } inline void render::rotation(point2dl& dataBefore) { int x=dataBefore.x; dataBefore.x = cos(angle)*x - sin(angle)*dataBefore.y;// dataBefore.y = sin(angle)*x + cos(angle)*dataBefore.y; } //---------------------------------------------------------------------------------- void render::startRender() { speedTimer.start(); renderTimer.attach_us(this, &render::draw,RENDER_INTERVAL); pc.printf("render started!\n"); pc.printf("int : %f, %f, v :, %f,%f, " , intvx , intvy , vx , vy); } void render::stopRender() { renderTimer.detach(); speedTimer.stop(); } void render::setRender(vector<letter> *p) { translated.clear(); radious = 200; ptext = p; pc.printf("Size of text to render: %d/n", (*ptext).size() ); //for(int i=0; i!=(*ptext).size(); i++){ int count=0; for(std::vector<letter>::iterator itr = (*ptext).begin(); itr != (*ptext).end(); ++itr) { letter translatedLetter; for(int i=0; i<(*itr).letpoints.size(); i++) { point2dl tranPoint; tranPoint.x=itr->letpoints[i].x+560*count; tranPoint.y=-itr->letpoints[i].y; tranPoint.laserSwitch=itr->letpoints[i].laserSwitch; translatedLetter.letpoints.push_back(tranPoint); } //copy the liblary to the buffer. translated.push_back(translatedLetter); count++; } shearingSwitch = 1; radious = 1800; currentLetters=0; firstPointCounter=0; lastPointCounter=0; rendererState=FIRST_POINT; } void render::updateSpeed(float vvx, float vvy) { vx = vvx; vy = vvy; //intvx += RENDER_INTERVAL*vx; //intvy += RENDER_INTERVAL*vy; angle= 0;//(1/9.0)*PI ;//+0.3* atan( vy / vx ) * 0.7*angle; atan2 } void render::draw() { /* if(firstPointCounter < 3){ IO.writeOutXY(CENTER_AD_MIRROR_X, CENTER_AD_MIRROR_Y); if(laserColor % 2 == 0) IO.setRedPower(translated[currentLetters].letpoints[currentPoints].laserSwitch); if(laserColor % 3 == 0) IO.setGreenPower(translated[currentLetters].letpoints[currentPoints].laserSwitch); firstPointCounter+=1; } else{ IO.setRedPower(0); IO.setGreenPower(0); firstPointCounter = 0; } */ //if(abs(vx)<0.001 || abs(vy) < 0.001)startSwitch = 1; if(translated.size()>0 && startSwitch == 1) { switch(rendererState) { case NORMAL_POINT: intvx += speedTimer.read_us()*vx; intvy += speedTimer.read_us()*vy; speedTimer.reset(); point2dl drawPoint=translated[currentLetters].letpoints[currentPoints]; transform(drawPoint); // transform it with the current speed and angle IO.writeOutXY(CENTER_AD_MIRROR_X + (int)drawPoint.x , CENTER_AD_MIRROR_Y + (int)drawPoint.y); if(laserColor % 2 == 0) IO.setRedPower(translated[currentLetters].letpoints[currentPoints].laserSwitch); if(laserColor % 3 == 0) IO.setGreenPower(translated[currentLetters].letpoints[currentPoints].laserSwitch); // move to the next point currentPoints++; //Should we change the state? if(currentPoints >= translated[currentLetters].letpoints.size() ) { rendererState=AFTER_LAST_POINT; } break; case AFTER_LAST_POINT: // just wait! if (lastPointCounter<WAITING_LAST) { IO.setRedPower(0); IO.setGreenPower(0); lastPointCounter++; } else { lastPointCounter=0; currentPoints = 0; // switch the laser off and move to the first point of the next letter: currentLetters++; if(currentLetters >= translated.size()) { currentLetters = 0; startSwitch=0; intvx = intvy =0; } rendererState=FIRST_POINT; } break; case FIRST_POINT: if (firstPointCounter<WAITING_FIRST) { firstPointCounter++; // show first point! point2dl drawPoint=translated[currentLetters].letpoints[0]; transform(drawPoint); // transform it with the current speed and angle IO.writeOutXY(CENTER_AD_MIRROR_X + (int)drawPoint.x , CENTER_AD_MIRROR_Y + (int)drawPoint.y); speedTimer.reset(); //IO.setRedPower(translated[currentLetters].letpoints[currentPoints].laserSwitch); } else { firstPointCounter=0; currentPoints=1; rendererState=NORMAL_POINT; } break; } } } void render::transform(point2dl& mypoint) { rotation(mypoint); if(shearingSwitch == 1) shearing(mypoint); }