/* * Slider Klasse * v.01 * desc: zeichnet Slider mit variabler Länge(px), Position(px), min- und max-Werten * * Konstruktor Parameter: * sliderX - X-Postion des gesamten Sliders * sliderY - Y-Postion des gesamten Sliders * sliderLength - Länge des gesamten Sliders in px * minVal - untere Einstellgrenze des durch den Slider kontrolllierten Werts * maxVal - obere Einstellgrenze des durch den Slider kontrolllierten Werts * startVal - Startwert des durch den Slider kontrolllierten Werts * * Methoden * drawSlider(), dragSlider(), getValue() * */ class Slider { float xPos, yPos; float myLength, currX; // absolute Position des Sliderkopfes float minValue, maxValue, currValue; float mouseAreaX = 5; // Breite des für MouseOver sensitiven Bereichs float mouseAreaY = 8; // Höhe des für MouseOver sensitiven Bereichs /* * CLASS KONSTRUKTOR */ Slider(float sliderX, float sliderY, float sliderLength, float minVal, float maxVal, float startVal) { xPos = sliderX; yPos = sliderY; myLength = sliderLength; currValue = startVal; minValue = minVal; maxValue = maxVal; currX = xPos + (currValue/(maxValue - minValue)) * myLength; } /* * Methode: Slider.drawSlider() * Desc: zeichnet Slider und checkt auf MouseOver * * Params: - * */ boolean drawSlider() { boolean mouseOver; // Rückgabewert stroke(cDark2); line(xPos, yPos, xPos+myLength, yPos); // Sliderlinie zeichnen boolean condX = (mouseX >= currX-mouseAreaX/2) && (mouseX <= currX+mouseAreaX/2); // MouseOver X-Koordinaten boolean condY = (mouseY <= yPos+mouseAreaY/2) && (mouseY >= yPos-mouseAreaY/2); // MouseOver Y-Koordinaten if (condX && condY) { mouseOver = true; // Rückgabewert stroke(cHighlight1); // Sliderknopf hervorheben textFont(font01, 8); fill(cHighlight1); textAlign(CENTER); text(nf(resolutionSlider.getValue(), 2, 0), currX, yPos-5); // aktuellen Sliderwert ausgeben } else { mouseOver = false; // Rückgabewert stroke(cNormal1); } rectMode(CENTER); rect(currX, yPos, 1, 5); // Sliderknopf zeichnen return mouseOver; // mouseOver Status zurückgeben } /* * Methode: Slider.dragSlider() * Desc: bewegt Slider, berechnet neuen Wert, löst Strahlenneuberechnung aus * * Params: - * */ void dragSlider() { float xOff = mouseX - currX; // Mouse Offsett vom Zentrum des Sliderknopfes currX = constrain(mouseX, xPos, xPos+myLength); // aktueller x-Wert darf Min/Max-Bereich nicht verlassen currValue = round(((currX-xPos)/myLength) * maxValue); // aktuellen Sliderwert berechnen allRays.setRayResolution((int)currValue); // rayResolution in Instanz aus RayGenerator Klasse setzen allRays.calculateRays(emitterCenter, ourNewPolygon); // Strahlen neu berechnen } /* * Methode: Slider.getValue() * Desc: aktuellen Wert des Sliders zurückgeben * * Params: - * */ float getValue() { return currValue; } }