/** * Tablet events are handled here * @param event event info */ bool EditorView::viewportEvent(QEvent *event) { if(event->type() == QEvent::TabletMove) { // Stylus moved QTabletEvent *tabev = static_cast<QTabletEvent*>(event); tabev->accept(); const dpcore::Point point(mapToScene(tabev->pos()), tabev->pressure()); if(!prevpoint_.intSame(point)) { if(isdragging_) moveDrag(tabev->x(), tabev->y()); else { if(pendown_) { if(point.pressure()==0) { // Missed a release event pendown_ = NOTDOWN; emit penUp(); } else { emit penMove(point); } } updateOutline(point); } prevpoint_ = point; } } else if(event->type() == QEvent::TabletPress) { // Stylus touches the tablet surface QTabletEvent *tabev = static_cast<QTabletEvent*>(event); tabev->accept(); if(dragbtndown_) { startDrag(tabev->x(), tabev->y(), dragbtndown_); } else { if(pendown_ == NOTDOWN) { const dpcore::Point point(mapToScene(tabev->pos()), tabev->pressure()); pendown_ = TABLETDOWN; emit penDown(point); updateOutline(point); prevpoint_ = point; } } } else if(event->type() == QEvent::TabletRelease) { // Stylus lifted QTabletEvent *tabev = static_cast<QTabletEvent*>(event); tabev->accept(); if(isdragging_) { stopDrag(); } else if(pendown_ == TABLETDOWN) { dpcore::Point point(mapToScene(tabev->pos()), 0); updateOutline(point); prevpoint_ = point; pendown_ = NOTDOWN; emit penUp(); } } else { return QGraphicsView::viewportEvent(event); } return true; }
//! Handle mouse motion events void EditorView::mouseMoveEvent(QMouseEvent *event) { /** @todo why do we sometimes get mouse events for tablet strokes? */ if(pendown_ == TABLETDOWN) return; if(pendown_ && event->buttons() == Qt::NoButton) { // In case we missed a mouse release mouseReleaseEvent(event); return; } if(isdragging_) { moveDrag(event->x(), event->y()); } else { ; const dpcore::Point point(mapToScene(event->pos()), 1.0); if(!prevpoint_.intSame(point)) { if(pendown_) emit penMove(point); else updateOutline(point); prevpoint_ = point; } } }
int main(int argc, char **argv) { int ADCvalue01 = 0; int StepSpeed = 100; //Stepping speed (smaler value = faster) int i = 0; int KeyHit = 0; int KeyCode[5]; int SingleKey=0; char TextLine[300]; char FileName[100] = ""; char FileNameOld[100] = ""; char FullFileName[300]; char a; char IsDigit[]="-1234567890"; int ReadState = 0; int MenueLevel = 0; int FileSelected = 0; int FileStartRow = 0; int stopPlot = 0; long xMin = 1000000, xMax = -1000000; long yMin = 1000000, yMax = -1000000; long coordinateCount = 0; long coordinatePlot = 0; long currentPlotX = 0, currentPlotY = 0, currentPlotDown = 1; long xNow = 0, yNow = 0, zNow = 0; char *pEnd; FILE *PlotFile; double Scale = 1.0; double OldScale = 1.0; double PicWidth = 0.0; double PicHeight = 0.0; long MoveLength = 100; long OldMoveLength = 200; long PlotStartTime = 0; int MoveFinished = 0; long stepPause = 5000; long stepPauseNormal = 5000; long stepPauseMaterial = 20000; long zHub = 200; int plotterMode = 1; char FileInfo[3]; long FileSize; long LongTemp; long DataOffset; long HeaderSize; long PictureWidth; long PictureHeight; int IntTemp; int ColorDepth; long CompressionType; long PictureSize; long XPixelPerMeter; long YPixelPerMeter; long ColorNumber; long ColorUsed; int PixelRed, PixelGreen, PixelBlue; int PixOK = 0; long StepsPerPixelX = 50, StepsPerPixelY = 50; long JetOffset1 = 40, JetOffset2 = 40; //Mapping between wiringPi and pin order of my I/O board. //This was necessary, because I used a wrong description of the GPIOs //You have to change the order according to your board! //@@@THESE ARE ALL OUTPUS!! strcpy(FileName, "noFiLE"); if (wiringPiSetup () == -1){ printf("Could not run wiringPiSetup!"); exit(1); } getmaxyx(stdscr, MaxRows, MaxCols); MessageY = MaxRows-3; clrscr(1, MaxRows); PrintRow('-', MessageY - 1); initscr(); noecho(); cbreak(); start_color(); while(!quit) { clearScreen(); char * choices[] = {"Plot File","Manual Control","Servo Control","Opto Sensor Control","X&Y Control","initalize","Exit"}; char *description[] = { "You select a file to plot and will plot the file on the plotter", "Will give you full control over the plotter for debuging or demenstration", "Lets you enter and test different duration of pulses sent to the servo for fine tuning and debugging", "Will read in the togleing of the opto sensor for debuging", "Will let you have control how much to move in x and y by ticks more precisly", "Test initalization procedure", "Will exit the prgram"}; int result = menus("Hello and Welcome to my creation please sleect a mode", choices,description,7,20); switch (result) { case 1: ; /* FILE * fp; char * line = NULL; size_t len = 0; ssize_t read; fp = fopen ("sampleGcode.txt","r");*/ //Plot file char dir[1024]; getcwd(dir,sizeof(dir)); MessageText("3 seconds until plotting starts !!!!!!!!!!!!!!!!!", 1, 2, 0); delay(3000); if((PlotFile=chooseFile(dir))==NULL){ sprintf(TextLine, "Can't open file '%s'!\n", FullFileName); strcpy(FileName, "NoFiLE"); ErrorText(TextLine); } else{ currentPlotX = 0; currentPlotY = 0; PlotStartTime = time(0); PrintMenue_03(FullFileName, coordinateCount, 0, 0, 0, PlotStartTime,Scale); coordinatePlot = 0; stopPlot = 0; if(currentPlotDown == 1){ penMove(1); currentPlotDown = 0; } while(!(feof(PlotFile)) && stopPlot == 0){ fread(&a, 1, 1, PlotFile); if(a == '>'){ ReadState = 0; } if(ReadState == 0 || ReadState == 1){ TextLine[i] = a; TextLine[i+1] = '\0'; i++; } if(ReadState == 2 || ReadState == 3){ if(strchr(IsDigit, a) != NULL){ TextLine[i] = a; TextLine[i+1] = '\0'; i++; } } if(ReadState == 2){ if(strchr(IsDigit, a) == NULL){ if(strlen(TextLine) > 0){ xNow = (strtol(TextLine, &pEnd, 10) - xMin) * 0.33333 * Scale; ReadState = 3; i=0; TextLine[0]='\0'; } } } if(ReadState == 3){ if(strchr(IsDigit, a) == NULL){ if(strlen(TextLine) > 0){ yNow = ((yMax - strtol(TextLine, &pEnd, 10)) - yMin) * 0.33333 * Scale;//Flip around y-axis coordinatePlot++; PrintMenue_03(FullFileName, coordinateCount, coordinatePlot, xNow, yNow, PlotStartTime, Scale); if(stopPlot == 0){ stopPlot =0; moveXY(xNow - currentPlotX, yNow - currentPlotY); currentPlotX = xNow; currentPlotY = yNow; // sprintf(TextLine, "xNow=%ld, yNow=%ld", xNow, yNow); // MessageText(TextLine, MessageX+1, MessageY+1, 0); // getch(); } else{ if(currentPlotDown == 1){ if(plotterMode == 1){ penMove(1); } currentPlotDown = 0; } } if(currentPlotDown == 0){ if(stopPlot == 0){ penMove(0); currentPlotDown = 1; } } ReadState = 2; i=0; TextLine[0]='\0'; } } } if(strcmp(TextLine, "<path") == 0){ if(currentPlotDown == 1){ penMove(1); currentPlotDown = 0; } ReadState = 2; i = 0; TextLine[0]='\0'; } if(a == '<'){ i = 1; TextLine[0] = a; TextLine[1] = '\0'; ReadState = 1; } } fclose(PlotFile); if(currentPlotDown == 1){ penMove(1); currentPlotDown = 0; } PrintMenue_03(FullFileName, coordinateCount, coordinatePlot, 0, 0, PlotStartTime,Scale); moveXY(-currentPlotX, -currentPlotY); currentPlotX = 0; currentPlotY = 0; while(kbhit()){ getch(); } MessageText("Finished! Press any key to return to main menu.", MessageX, MessageY, 0); getch(); break; } break; case 2: manualControl(); break; case 3: servoControl(); break; case 4: optoControl(); break; case 5: xyControl(); break; case 6: initalize(); break; case -1: default: system("reset"); quit=true; break; } } allSTOP(); endwin(); return 0; }
void initalize() { pinMode(Xstop,INPUT); pinMode(Ystop,INPUT); pinMode(motorXA,OUTPUT); pinMode(motorXB,OUTPUT); pinMode(motorYA,OUTPUT); pinMode(motorYB,OUTPUT); power(motorXA,0); power(motorXB,0); power(motorYA,0); power(motorYB,0); clearScreen(); keypad(stdscr,TRUE); bool stop = false; while(!quit&&!stop) { mvprintw(4,10,"Initalizing ...."); mvprintw(5,10,"Please use Page Up and Page Down Arrows to move the pen to just touching the page,When centered hit 'q'"); pen(STOPPULSE); int c = getch(); switch(c) { case KEY_NPAGE: pen(250); safeDelay(30); break; case KEY_PPAGE: pen(50); safeDelay(30); break; case 'q': case 'Q': pen(50); safeDelay(200); stop = true; break; defaut: break; } } penMove(1); move(5,0); clrtoeol(); nodelay(stdscr,0); mvprintw(5,10,"Finding position 0 on X axis..."); getch(); refresh(); if(digitalRead(Xstop)) { power(motorXA,100); safeDelay(500); power(motorXA,0); } clrtoeol(); mvprintw(5,10,"Finding position 0 on X axis..."); getch(); refresh(); power(motorXB,50); while(!quit&&!digitalRead(Xstop)) delay(3); posX=0; power(motorXB,0); printw("just found 0 on the x!"); getch(); if(digitalRead(Ystop)) { power(motorYA,100); safeDelay(500); power(motorYA,0); } power(motorYB,100); while(!quit&&!digitalRead(Ystop)) safeDelay(1); posY=0; power(motorYB,0); allSTOP(); }
int manualControl() { clearScreen(); mvprintw(3,0,"\tUP--Up Arrow\tDown--Down Arrow\tLeft--Left Arrow\tRight--Right Arrow\t\t\t\tPen Up--Page Up\t\tPen Down--Page Down"); refresh(); keypad(stdscr,TRUE); int choice = 0; while(!quit) { nodelay(stdscr,1); // noecho(); int c = getch(); while(!quit&& c == ERR) { pen(STOPPULSE); safeDelay(15); c = getch(); } switch(c) { case KEY_UP: if(DEBUG) mvprintw(20,3,"Up arrrow pressed!"); power(motorXA,100); power(motorXB,0); delay(20); power(motorXA,0); // movex(50); break; case KEY_DOWN: if(DEBUG) mvprintw(20,3,"Down arrrow pressed!"); power(motorXB,100); power(motorXA,0); delay(20); power(motorXB,0); break; case 'q': case 'Q': if(DEBUG) mvprintw(20,3,"Quit has been pressed!"); choice = 1; break; case KEY_LEFT: if(DEBUG) mvprintw(20,3,"Left arrrow pressed!"); power(motorYB,100); power(motorYA,0); delay(20); power(motorYB,0); break; case KEY_RIGHT: if(DEBUG) mvprintw(20,3,"Right arrrow pressed!"); power(motorYA,100); power(motorYB,0); delay(20); power(motorYA,0); break; case KEY_NPAGE: if(DEBUG) mvprintw(20,3,"Page Up arrrow pressed!"); penMove(1); break; case KEY_PPAGE: if(DEBUG) mvprintw(20,3,"Page down arrrow pressed!"); penMove(0); break; default: mvprintw(24, 3, "Charcter pressed is = %3d Hopefully it can be printed as '%c'", c, c); refresh(); break; } refresh(); if(choice != 0) /* User did a choice come out of the infinite loop */ break; } pen(150); return 0; }