Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

Lektion 9: Zeichnungsprogramm

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

    }  
  }
  

}