/* * GeometrySaver Klasse * v.01 * desc: speichert aktuelle Geometrie, Strahlenbild (mit Emitterposition) und Fitnesswert * gibt alle gespeicherten Werte als Liste aus und lädt einzelne Zustände * * Konstruktor Parameter: * - * * Methoden * xxx * */ class GeometrySaver { ArrayList GeometryList; /* * CLASS KONSTRUKTOR */ GeometrySaver() { GeometryList = new ArrayList(); // Liste/Container } /* * Methode: GeometrySaver.saveToList(Polygon myPolygon, RayGenerator myRays, float myFitness) * Desc: speichert zustand in Liste * * Params: * xx * */ void saveToList(Polygon myPolygon, RayGenerator myRays, float myFitness) { if (GeometryList.size() < 35) // maximal 35 Speicherungen erlauben { GeometryContainer ItemContainer = new GeometryContainer(myPolygon, myRays, myFitness); // Container für alle Variablen einer Geometrie GeometryList.add(ItemContainer); // Container in KlassenObjekt (Liste) ablegen } } /* * Methode: GeometrySaver.showList() * Desc: zeigt alle gespeicherten Zustände als Liste an * * Params: * xPos - x-Koordinate der li. oberen Ecke * yPos - y-Koordinate der li. oberen Ecke */ void showList(float xPos, float yPos) { int margin = 5; // Randabstand des Textes int listWidth = 110; // Breite der Liste float itemFitness; // Fitness des Listen Items boolean condX, condY; if (GeometryList.size() > 0) { rectMode(CORNER); fill(cTransp1); noStroke(); rect(xPos, yPos, listWidth, (2*margin + GeometryList.size()*15 + 8)); fill(cDark1); textAlign(RIGHT); textFont(font01, 8); text("SAVED GEOMETRIES", xPos+listWidth-margin, margin+18); for (int i=1; i <= GeometryList.size(); i++) // Ausgabe aller gespeicherten Zustände in Listenform { condX = ((mouseX >= xPos+margin+40) && (mouseX <= xPos+listWidth-margin)); // MouseOver Bedingung x-Koordinaten condY = ((mouseY >= margin+3+i*15) && (mouseY <= margin+16+i*15)); // MouseOver Bedingung y-Koordinaten if (condX && condY) // MouseOver überprüfen { showGeometry(i-1); // Geometrie zeigen fill(cHighlight1); } else { fill(cDark1); } itemFitness = getItem(i-1).getFitness(); text("["+nf(i,2)+"] geometry (f="+nf(itemFitness,2,2)+")", xPos+listWidth-margin, margin+16+i*15); if (condX && condY && mousePressed && (mouseButton == LEFT)) // bei Mausklick laden { loadGeometry(i-1); } } } stroke(1); } /* * Methode: GeometrySaver.showGeometry() (vorbereitet) * Desc: zeigt alte Geometrie bei MouseOver * * Params: * index - zu zeigender Zustand * */ void showGeometry(int index) { //println("SHOW GEOMETRY"); } /* * Methode: GeometrySaver.loadGeometry() * Desc: lädt Polygoneckpunkte, initiiert neue Berechnung des Strahlenbilds * * Params: * index - zu ladender Zustand * */ void loadGeometry(int index) { Vec[] polypointsArray = new Vec[0]; ourNewPolygon.listPoints(); polypointsArray = getItem(index).polypointsArray; int polyLength = ourNewPolygon.polyPoints.size(); // Anzahl der punkte feststellen ourNewPolygon.polyPoints = null; // bestehende ArrayList löschen ourNewPolygon.polyPoints = new ArrayList(); // neue initiieren for (int i=0; i <= polyLength-1; i++) { ourNewPolygon.polyPoints.add(polypointsArray[i]); } currFitness = getItem(index).getFitness(); // gespeicherten Fitnesswert anzeigen (wird nciht neu berechnet) allRays.calculateRays(emitterCenter, ourNewPolygon); // Strahlenbild neu berechnen } /* * Methode: GeometrySaver.loadGeometry() * Desc: * * Params: * xx * */ GeometryContainer getItem(int index) { return (GeometryContainer) GeometryList.get(index); } }