4. November 2010
In dieser Aufgabe ging es darum, nun das gelernte anzuwenden und ein eigenes Zeichnungsprogramm zu gestalten. Ich orientierte mich an dem Zeichnungstool "Paint". Mit Hilfe des Sliders kann die Strichstärke ausgewählt werden. Die Linien werden durch das Setzen von zwei Punkten generiert. Hier war es schwierig, dass das Übermalen der Toolleiste nicht mehr möglich ist zu programmieren. Ich versuchte dann noch eine Farbmodifikation hinzubekommen, leider hab ich dies jedoch noch nicht fertig geschafft. Hier findest du mein Zeichnungsprogramm: Der Code:PGraphics pg; PVector startPos = new PVector(); PVector endPos = new PVector(); boolean drawFlag=false; boolean mausklick1=false; // festgelegte Variable Slider strokeline = null; void setup() { size(800, 600); strokeline = new Slider(20,25,300,20,.5); // buffer erstellen pg = createGraphics(800,550,JAVA2D); } void draw() { float strich = strokeline.pos() * 20; background(0); fill(132,234,23); strokeline.draw(); // buffer zeichnen aktivieren pg.beginDraw(); // hintergrund loeschen + farben setzen pg.smooth(); pg.stroke(255); // linie zeichnen if(drawFlag) { pg.stroke(0,0,255); pg.strokeWeight(strich); pg.line(startPos.x,startPos.y-50, endPos.x,endPos.y-50); } pg.endDraw(); // buffer zeichnen image(pg, 0, 50); } void mousePressed() { if(mausklick1 == false) // wird überprüft ob die Maus noch nicht gedrückt wurde { mausklick1 = true; // setzt die Variable auf "true"; Maus wurde gedrückt drawFlag = true; // Drawflag fird auf "true" gesetzt; if(isHitcontrolbox(mouseX,mouseY)) { mausklick1 = false; drawFlag = false; } else { startPos.set(mouseX,mouseY,0); // speichert die Koordinaten der Maus endPos = startPos.get(); // endPos wird durch startPos ersetzt resp. der Wert übernehmen. } } else { // wenn mausklick1 bereits "true" ist, wird es hier wieder auf "false" gesetzt mausklick1 = false; if(isHitcontrolbox(mouseX,mouseY)) { drawFlag = true; mausklick1 = true; } else { endPos.set(mouseX,mouseY,0); } } strokeline.mousePos(mouseX,mouseY,true); } void mouseDragged() { strokeline.mousePos(mouseX,mouseY,true); } boolean isHitcontrolbox(int x, int y) { if(x > 0 && x < 800 && y > 0 && y < 50) return true; else return false; }Und das GUI
class Slider { PVector _p1; PVector _p2; float _pos; int _h; int _x2 = 0; int _y2 = 0; int _w2 = 800; int _h2 = 50; boolean _checked; int konsolex = 800; int konsoley = 50; Slider(int x,int y,int w,int h,float pos) { _p1 = new PVector(x,y + h *.5); _p2 = new PVector(x+w,y + h *.5); _h = h; _pos = pos; if(_pos > 1.0) _pos = 1.0; else if(_pos < 0.0) _pos = 0.0; } float pos() { return _pos; } boolean isHit(int x,int y) { if(x > _p1.x && x < _p2.x && y > _p1.y - 5 && y < _p1.y + 5) return true; else return false; } void draw() { pushStyle(); drawSlider(); drawKnob(); popStyle(); } void drawSlider() { stroke(230); pushStyle(); fill(130); noStroke(); rect(0,0,konsolex,konsoley); popStyle(); pushStyle(); strokeWeight(5); strokeCap(SQUARE); fill(255); line(_p1.x,_p1.y,_p2.x,_p2.y); popStyle(); String Werte = "Strichstärke" + ":" + str(round (_pos * 20)); text(Werte,_p1.y-5,_p1.x-5); pushStyle(); fill(255,0,0); rect(350,5,15,15); popStyle(); pushStyle(); fill(0,255,0); rect(370,5,15,15); popStyle(); pushStyle(); fill(0,0,255); rect(390,5,15,15); popStyle(); } void drawKnob() { stroke(0); fill(21,175,255); PVector dir = PVector.sub(_p2,_p1); PVector pos = PVector.add( _p1 , PVector.mult(dir,_pos)); ellipse(pos.x,pos.y,10,10); } void mousePos(int x,int y,boolean pressed) { if(pressed) { if(isHit(x,y)) { // move knob PVector dir = PVector.sub(_p2,_p1); _pos = 1.0 / dir.mag() * (x - _p1.x); } } else { // mouse over } } }