this version 10/17
Fork of linearMirrorMotion by
Embed:
(wiki syntax)
Show/hide line numbers
renderclass.cpp
00001 #include "renderclass.h" 00002 #include "mbed.h" 00003 #include "laserProjectorHardware.h" 00004 #include <vector> 00005 00006 Ticker translationTimer; 00007 00008 //for translating ----------------------------------------------------------------- 00009 00010 inline void render::shearing(point2dl& dataBefore) 00011 { 00012 dataBefore.x = dataBefore.x - speed * cos(angle+PI/2)*speedTimer.read_us()/400; 00013 dataBefore.y = dataBefore.y - speed * sin(angle+PI/2)*speedTimer.read_us()/400; 00014 } 00015 00016 inline void render::rotation(point2dl& dataBefore) 00017 { 00018 int x=dataBefore.x; 00019 dataBefore.x = 1800 * cos(angle) + sin(angle)*x - cos(angle)*dataBefore.y; 00020 dataBefore.y = 1800 * sin(angle) - cos(angle)*x - sin(angle)*dataBefore.y; 00021 } 00022 //---------------------------------------------------------------------------------- 00023 00024 void render::startRender() 00025 { 00026 speedTimer.start(); 00027 renderTimer.attach_us(this, &render::draw,RENDER_INTERVAL); 00028 pc.printf("render started!\n"); 00029 } 00030 00031 void render::stopRender() 00032 { 00033 renderTimer.detach(); 00034 translated.clear(); 00035 currentLetters=0; 00036 currentPoints=0; 00037 } 00038 00039 void render::setRender(vector<letter> *p) 00040 { 00041 ptext = p; 00042 pc.printf("Size of text to render: %d/n", (*ptext).size() ); 00043 //for(int i=0; i!=(*ptext).size(); i++){ 00044 for(std::vector<letter>::iterator itr = (*ptext).begin(); itr != (*ptext).end(); ++itr) { 00045 translated.push_back(*itr); 00046 } //copy the liblary to the buffer. 00047 00048 00049 currentLetters=0; 00050 currentPoints=0; 00051 shearingSwitch = 1; 00052 00053 } 00054 00055 00056 void render::updateSpeed(float gspeed, float gangle){ 00057 speed = gspeed; 00058 angle = gangle; 00059 00060 //speed=sqrt(vx*vx+vy*vy);//*factorSpeed; 00061 //angle=atan2(vy,vx); 00062 } 00063 00064 int stopcounter=100; 00065 00066 void render::draw() 00067 { 00068 if(translated.size()>0){ 00069 if(stopcounter == 99) speedTimer.reset(); 00070 if(stopcounter==100){ 00071 00072 point2dl drawPoint=translated[currentLetters].letpoints[currentPoints]; 00073 transform(drawPoint); // transform it with the current speed and angle 00074 //IO.setRedPower(drawPoint.laserSwitch); 00075 IO.writeOutXY(CENTER_AD_MIRROR_X + (int)drawPoint.x , CENTER_AD_MIRROR_Y + (int)drawPoint.y); 00076 00077 00078 if(currentPoints>0) IO.setRedPower(translated[currentLetters].letpoints[currentPoints-1].laserSwitch); 00079 else IO.setRedPower(0); 00080 00081 currentPoints++; 00082 } 00083 else stopcounter++; 00084 00085 if(currentPoints >= translated[currentLetters].letpoints.size() ) { 00086 if(stopcounter == 100) stopcounter = 0; 00087 else if(stopcounter == 0){ 00088 renderTimer.detach(); 00089 } 00090 //wait_us(RENDER_INTERVAL); 00091 else if(stopcounter == 1){ 00092 IO.setRedPower(0); 00093 //wait_us(RENDER_INTERVAL); 00094 currentLetters++; 00095 currentPoints = 0; 00096 renderTimer.attach_us(this, &render::draw,RENDER_INTERVAL); 00097 speedTimer.reset(); 00098 } 00099 } 00100 if(currentLetters >= translated.size()) { 00101 currentLetters = 0; 00102 currentPoints = 0; 00103 renderTimer.detach(); 00104 //wait_us(RENDER_INTERVAL); 00105 IO.setRedPower(0); 00106 //wait_us(RENDER_INTERVAL*200); 00107 renderTimer.attach_us(this, &render::draw,RENDER_INTERVAL); 00108 speedTimer.reset(); 00109 stopcounter = -200; 00110 } 00111 } 00112 } 00113 00114 void render::transform(point2dl& mypoint) 00115 { 00116 rotation(mypoint); 00117 if(shearingSwitch == 1) shearing(mypoint); 00118 } 00119
Generated on Mon Jul 18 2022 21:55:12 by
1.7.2
