Ziel der Arbeit ist es die 3D-Modellierungssoftware SketchUp durch einen Programmzusatz dahingehend zu erweitern, dass es möglich ist, ein 3D-Gebäudemodell mit Zeitangaben zu versehen. Die Einsatztauglichkeit dieser 4D-Modellierungssoftware wird anhand eines Beispiel-Bauwerks überprüft.
Inhaltsverzeichnis
Aufgabenstellung
Abbildungsverzeichni
Tabellenverzeichnis
Abkürzungsverzeichnis
1. Einleitung
2. Theoretische Grundlagen
2.1. Begriff Projekt und Aufgaben der Baubetriebsplanung .
2.2. Bauablauf- und Terminplanung
2.2.1. Ablaufplanung eines Projekts
2.2.2. Vorgänge und Meilensteine
2.2.3. Abhängigkeitsbeziehungen
2.2.4. Gantt-Diagramm
2.3. Baustelleneinrichtung
2.4. 3D-Modellierungssoftware, 4D-Software und Rendering .
2.5. Google SketchUp
2.5.1. Einsatzgebiete
2.5.2. Funktionsumfang
2.5.3. Erweiterbarkeit
2.6. Programmiersprache Ruby
2.6.1. Einführung
2.6.2. Sprachgrundlagen
2.6.3. Die SketchUp Ruby API
2.7. HTML und die Programmiersprache JavaScript
2.7.1. HTML
2.7.2. JavaScript
2.7.3. JSON
2.8. CSV-Dateiformat
2.9. Programmablaufplan
3. Die virtuelle Baustelle
3.1. Einführung
3.2. Dimensionierung des Erdbaubetriebs
3.3. Rohbau Zeitkomponenten
3.4. Berechnen der Ausbauzeitkomponenten
3.5. Umsetzung in das 3D-Modell
4. Implementierung
4.1. Einführung
4.2. Werkzeug zur Eingabe von Zeitkomponenten
4.3. Import einer CSV-Datei
4.4. Export einer CSV-Datei
4.5. Animationsschieberegler
4.5.1. Einführung
4.5.2. Öffnen des Animationssteuerungsfensters .
4.5.3. Verwendung des Animationsschiebereglers
4.6. Video erstellen
5. Evaluierung
6. Zusammenfassung und Ausblick
Literaturverzeichnis
Anhang
A. Quelltext der 4D-Komponente (Ruby-Datei)
B. Quelltext der 4D-Komponente (Html-Datei)
C. Quelltext der 4D-Komponente (JavaScript-Datei)
Abbildungsverzeichnis
2.1. Abhängigkeitsbeziehungen [Proporowitz (2008): S.166]
2.2. Ablauf einer Bauleistung [Proporowitz (2008): S.188]
2.3. Stufen der Visualisierungspipeline [Schumann und Müller (1999)]
2.4. Bsp. Google Earth Fernmeldeturm [Google (2011b)]
2.5. Google 3D Galerie [Google (2011a)]
2.6. Benutzeroberfläche SketchUp [Ridder (2010): S.67]
2.7. Google SketchUp Ruby API, verwendete Klassen
2.8. Hierarchie der Elemente einer Webseite[Powers (2007): S.220]
2.9. Programmablauf
3.1. Strukturplan Rohbau
3.2. Strukturplan Ausbau
3.3. Grundrissplan und senkrecht dazu der Schnittplan
3.4. Unterkünfte für die Mitarbeiter
3.5. Bewehrung und Abfallcontainer
3.6. Bewehrung und Abfallcontainer
3.7. Großgeräte und Ausbauarbeiten
4.1. Symbolleiste der 4D-Visualisierungskomponente
4.2. Zeitkomponenten eingeben
4.3. Zeitkomponenten eingeben (Programmablaufplan)
4.4. Import einer CSV-Datei (Programmablaufplan)
4.5. Export einer CSV-Datei (Programmablaufplan)
4.6. Das Animationssteuerungsfenster
4.7. Gekürzter DOM-Baum der HTML-Datei
4.8. Animationssteuerungsfenster öffnen (Programmablaufplan)
4.9. 4D-Visualisierungskomponente Animation starten (Programmab- laufplan)
4.10.Video erstellen (Programmablaufplan)
5.1. Sehr vereinfachte Darstellung von Kran, Gerüst, Gebäude
5.2. Komplexeres Modell
Tabellenverzeichnis
2.1. Überblick über die meist verbreiteten Terminplanungsprogramme [Tulke (2010): S.29]
2.2. Überblick über 3D- bzw. 4D-Software und Rendersoftware [Wittwer (2009): S.14]
2.3. Beispiel einer durch Trennzeichen separierten Tabelle
3.1. Gruppen der virtuellen Baustelle
3.2. Stahlmatten
3.3. Schalelemente
3.4. weitere Gruppen der virtuelle Baustelle
4.1. Beispiel-CSV-Datei, an MS Project angepasst
5.1. Betrachtungszeitpunkte
Abkürzungsverzeichnis
Abbildung in dieser Leseprobe nicht enthalten
1. Einleitung
Bauprojekte sollen effektiv und effizient durchgeführt werden. Effektivität bezeich- net das Verhältnis vom erreichten Ziel zum definierten Ziel. Sie ist ein Maß für Wirksamkeit und Qualität der Zielerreichung und zwar unabhängig vom Aufwand. Effizienz ist ein Maß für die Wirtschaftlichkeit und betrifft die Nutzen-Kosten- Relation.
Gute Planungsunterlagen schaffen die Voraussetzungen für effektives und effi- zientes Arbeiten auf Baustellen. Sie erleichtern es, die richtigen Dinge zu tun, d. h. sich auf die Vorgänge konzentrieren, die Priorität haben. Denn die falschen Dinge effizient zu tun ist Verschwendung. In vielen Fällen der Bauwirtschaft entspricht Effizienz der Wirtschaftlichkeit, also dem Verhältnis von Input zu Output, Leistung zu Kosten bzw. erzieltem Ergebnis zu eingesetzten Mitteln. Ziel des Planungspro- zesses ist die Optimierung des Bauplanes, um die richtigen Dinge auch richtig tun zu können [Drucker (1971)].
Ziel der Baufortschrittsplanung ist es, vor Projektbeginn den komplexen Bau- ablauf gedanklich so intensiv zu durchdringen, dass nicht durchführbare oder unwirtschaftliche Soll-Vorgaben frühzeitig erkannt und vermieden werden. Qualita- tiv hochwertige Bauwerke sollen effektiv und effizient hergestellt werden. Deshalb müssen Bauprozesse für jedes Projekt individuell aufgrund der Variationsvielfalt von Detaillösungen neu betrachtet und durchdacht werden. Das betrifft insbeson- dere die Erstellung von Terminplänen. Hier kann die 4D-Visualisierung hilfreich eingesetzt werden, um die Koordination und Information zu allen Daten und Ab- hängigkeiten der einzelnen Arbeitsvorgänge stimmig und transparent zu gestalten und zu überprüfen.
Herkömmliche CAD-Software ermöglicht meist keine 4D-Visualisierung. Das ist für die Bewältigung der Komplexität von Ausführungsprozessen von Nachteil.
Ausführungsterminpläne können mehrere tausend Vorgänge umfassen. In den Terminplänen wird dokumentiert, wie das jeweilige Projekt durchzuführen ist. Informationen, warum ein erarbeiteter Ablauf genau so auszuführen ist, werden in der Regel nicht erfasst. Die Terminpläne selbst entziehen sich dabei weitestgehend einer methodisch abgesicherten Überprüfung. Zeitfenster für Vorgänge werden vielfach absolut gesetzt und nicht durch Abhängigkeitsbeziehungen relativ gehalten. Ein mit Vorgängen über Relationen verknüpfter Terminplan lässt sich visualisieren [Franz (2007): Hunt und Enge, S.33].
Daher soll die Modellierungssoftware Google SketchUp um 4D-Werkzeuge er- weitert werden. Diese beinhalten Zeitzuweisungswerkzeuge, einen Animations- schieberegler und einen Videogenerator. Das 4D-Modell soll in der Lage sein, den Ablauf einer Bauausführung in Raum und Zeit zweckmäßig und anschaulich darzustellen.
Ziel der Arbeit ist es die 3D-Modellierungssoftware SketchUp durch einen Programmzusatz dahingehend zu erweitern, dass es möglich ist, ein 3D- Gebäudemodell mit Zeitangaben zu versehen. Die Einsatztauglichkeit dieser 4D-Modellierungssoftware wird anhand eines Beispiel-Bauwerks überprüft.
2. Theoretische Grundlagen
2.1. Begriff Projekt und Aufgaben der Baubetriebsplanung
Ein Bauvorhaben ist ein Projekt. Um ein Projekt allgemein zu beschreiben, lie- fert Schwarze dazu folgendende Definition: „Ein Projekt ist ein zeitlich, räumlich und sachlich begrenztes komplexes Arbeitsvorhaben, bei dem durch den Einsatz von Verbrauchsgütern (Material, Energie usw.) Nutzungsgütern (z.B. Maschinen), und Arbeitskräften eine bestimmte Zielsetzung zu erreichen ist“ [Schwarze (2010): S.13].
Merkmale eines Projekts sind:
- Einzigartigkeit des Vorhabens
- Bereits gesammelte Erfahrungen aus durchgeführten Projekten lassen sich aufgrund ihres Unikatcharakters nur zu einem gewissen Grad auf das aktuel- le Projekt übertragen. Zielvorgaben, Aufgabenstellung und projektbezogene Organisation sind nicht identisch.
- Komplexes Vorhaben mit einem umfangreichen Bündel vielfältiger Maßnah- men, die in ihrer Gesamtheit zu organisieren sind
- Begrenzung durch fixierte Anfangs- und Endtermine, durch quantitativ festge- legte Ressourcen und durch einen definierten Kostenrahmen
- Spezielle Projektorganisation
- Durchführung eines Projektes meistens durch mehrere Bereiche eines Betrie bes oder mehrere Unternehmen mit wechselnder Zusammensetzung der Beteiligten. Deshalb sind Planung, Steuerung, Durchführung und Überwachung häufig neu zu organisieren [Berner u. a. (2008)].
Es ergibt sich durch die Einzigartigkeit ein besonders hoher organisatorischer Auf- wand zur effektiven Bearbeitung und Planung eines Projektes. Die Baubetriebsplanung beinhaltet planende und analytische Arbeiten, die vor und während der Bautätigkeit notwendig sind, um die Bauprozesse vorzubereiten und zu unterstützen. Sie hat das Ziel, die Einflussgrößen Termin, Qualität und Kosten einzuhalten.
„Zu den einzelnen Aufgaben der Baubetriebsplanung gehören u. a.:
- Analyse und Dokumentation des Vertrags im Vorfeld,
- Ablauf- und Terminplanung,
- Auswahl und Planung der Bauverfahren,
- Planung von Sicherheit und Gesundheitsschutz,
- Planung des Umweltschutzes,
- Planung der Baustelleneinrichtung, -versorgung und der Logistik,
- Planung des Ressourceneinsatzes,
- Planung der Liquidität und der Finanzmittel“ [Berner u. a. (2008): S.3].
Damit eine Ablaufplanung ausdrucksstark erstellt werden kann, muss das Gesamtprojekt zunächst in Teilprojekte bzw. Teilaufgaben untergliedert werden. Anhand dieser Untergliederungspunkte kann eine Projektstrukturierung vorgenommen werden. Im Zuge der Projektstrukturierung wird ein Projektstrukturplan (PSP) erstellt. Der PSP dient dazu, die Komplexität des Gesamtprojekts zu überblicken und Planungsoptimierungen vorzunehmen [Berner u. a. (2008): S.45].
2.2. Bauablauf- und Terminplanung
2.2.1. Ablaufplanung eines Projekts
Die Ablaufplanung organisiert Vorgangsdauern so, dass der Baufortschritt gesi- chert ist. Mit Hilfe der Ablaufplanung werden Vorgangsreihenfolgen festgelegt. Durch Zuordnen von konkreten Ablaufzeitkomponenten zu den jeweiligen Vorgän- gen kann der Planer einen Terminplan erstellen. Die Planung von Terminen wird auch als Terminmanagement bezeichnet [Kochendörfer u. a. (2010)]. Dabei wird die terminliche Planung aus der Sicht des Auftraggebers vorgegeben und der Auf- tragnehmer plant alle nötigen Abläufe in einem „gesteckten“ Zeitrahmen. Um den Rahmen festzulegen, gibt der Auftraggeber dem Auftragnehmer sogenannte Mei- lensteine vor. Es werden Meilensteinpläne, Rahmenterminpläne und Generalter- minpläne von Seiten des Auftraggebers erstellt. Mit dem Rahmenterminplans wer- den Ausschreibungen an potentielle Auftragnehmer herausgegeben. Der Auftrag- nehmer hat damit die Möglichkeit, einen Grobterminplan für die geplante Baumaß- nahme zu erstellen. Diesen sendet er dem Bauherrn zurück. Auf Grundlage des Grobterminplans erstellt der Bauherr einen Generalterminplan und vergibt den Auf- trag an den Bauunternehmer. Nach Vertragsabschluss ist die erste Planungsebene abgeschlossen.
Die Bauausführung wird mit Steuerungsterminplänen geplant. Der Bauunternehmer bezeichnet die Steuerungsterminpläne als Koordinationspläne. Durch das Erstellen dieser Pläne ist die zweite Planungsebene abgeschlossen. In der dritten Planungsebene werden Detailterminpläne erstellt. Diese stellen einen getrennten Ablauf für Bauausführung und Bauplanung dar. Bei größeren Bauvorhaben kann in Ausbau, Technikmontage und Rohbau unterteilt werden. Falls eine weitere Untergliederung der Vorgänge nötig wird, kann der Ausbau z.B. in Fassadenarbeiten etc. eingeteilt werden [Berner u. a. (2008)].
Bei komplexeren Bauvorhaben ergibt sich schnell eine große Anzahl an Vorgän- gen, welches einen hohen Planungsaufwand mit sich bringt. Die Herangehens- weise zu Erstellung eines Terminplans erfolgt entweder über die heuristische oder die mathematisch-analytische Methode. Wenn ein Balkenplan anhand einer Vor- gangsliste mit Zeitkomponenten von Hand gezeichnet wird, wird dies heuristische Methode genannt. Ein Balkenplan wird aus Start- und Enddaten einzelner Bau- vorgänge erstellt. Ein Balkenplan wird auch als Gantt-Diagramm bezeichnet, dies ist eine Darstellungsform. Die heuristische Methode kann Ungenauigkeiten enthal- ten und stellt deshalb keine eindeutige Lösung dar. Mit mathematisch-analytischen Verfahren der Netzplantechnik werden eindeutige Lösungen erreicht. Eine Abhil- fe durch Computer erleichtert das Planen bei einer Vielzahl von Vorgängen be- achtlich. CAD-Programme und MS Excel sind bei der Erstellung nur Hilfslösungen [Kochendörfer u. a. (2010)], da sie u.a. keine umfangreichen Kalenderfunktionen haben. Dazu gibt es spezielle Terminplanungssoftware, siehe Tabelle 2.1
Abbildung in dieser Leseprobe nicht enthalten
Tabelle 2.1.: Überblick über die meist verbreiteten Terminplanungsprogramme [Tulke (2010): S.29]
2.2.2. Vorgänge und Meilensteine
Für das Erstellen eines Terminplanes sind die Begriffe: Vorgang, Ereignis und Vor- gangsdauer wichtige Grundlagen. Die bei einem Vorgang benötigten Anfangs- und Endzeitpunkte sind Ereignisse (engl. events). Ein Ereignis ist ein Ablaufelement. Es verursacht keinen eigenen Zeitverbrauch, sondern ist ein Zustand [DIN69000 (2009): S.6]. Ist dieser Zustand von besonderer Bedeutung für den Baufortschritt des Bauprojekts, so wird er als Meilenstein bezeichnet. Ein Meilenstein ist z. B. der Baubeginn und andere Vertragstermine. Vorgänge beinhaltet z.B. Planungszeiträu- me, Ein- und Ausschalfristen, etc. "‘Ein Vorgang ist definiert als ein zielgerichtetes und Zeit erforderndes Geschehen mit definiertem Anfang und Ende" [Proporowitz (2008): S.162]. Je nach Sinn und Zweck der Vorgänge werden diese für den Ter- minplan ausgewählt. Der Detailgrad ist maßgeblich von dem Verwendungszweck des Terminplans abhängig. Wird ein Rahmenterminplan gewünscht, wird in Quar- tal oder Monat eingeteilt. Bei einem Grobterminplan wird die Zeiteinheit Woche und bei dem Detailterminplan die Zeiteinheit Tag üblicherweise verwendet. Die Vor- gangsdauer ist von der Art der Tätigkeit des Vorgangs abhängig. Sie wird bei z. B. Schalungsarbeiten in [ ], bei Betonierarbeiten in [ ] oder Bewehrungsar beiten in [ ] angegeben. Wenn ein Detailterminplan für den Bauablauf erstellt werden soll, darf nicht einfach auf die Positionen eines Leistungsverzeichnisses zurückgegriffen werden. Die Leistungsverzeichnisse (LV) sind für die Preisermitt- lung erstellt worden und enthalten keine Ablaufstruktur für Vorgänge. Deshalb muss das Arbeitsverzeichnis für die Grundlage des Terminplans verwendet und zu einer Vorgangsliste mit Vorgangsdauern und Reihenfolgebeziehnungen erstellt werden [Proporowitz (2008)].
2.2.3. Abhängigkeitsbeziehungen
Damit Beziehungen von Vorgängen in der Vorgangsliste eingebracht werden kön- nen, muss vorher klargestellt werden, welche Anordnungsbeziehung (AOB) zwi- schen zwei Vorgängen vorliegt. Dabei wird unterschieden zwischen Bauarbeiten, die sofort aufeinander folgen, die komplett oder teilweise parallel durchgeführt oder nach einer gewissen Wartezeit durchgeführt werden können. Die AOB wer- den auch als Reihenfolgebeziehungen oder Abhängigkeitsbeziehungen bezeich- net. Diese Abhängigkeitsbeziehungen sind in Abb. 2.1 dargestellt.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.1.: Abhängigkeitsbeziehungen [Proporowitz (2008): S.166]
Werden mehrere Vorgänge durch Linien, die Anordnungsbeziehungen darstellen, zu einem Netz verbunden, ergibt sich ein Vorgangsknotennetz. Um einen Netz- plan in Form eines Vorgangsknotennetzes zu erhalten, müssen die Vorgänge aus dem Projektstrukturplan zu Teilnetzen und in einem weiteren Schritt zu einem Ge- samtnetzplan unter Berücksichtigung der AOB verknüpft werden. Der Netzplan ist eine sehr genau Darstellungsform. Er ist aber meistens für „Außenstehende“ unverständlich [Proporowitz (2008): S.165].
2.2.4. Gantt-Diagramm
Eine anschaulichere Darstellungsform von Terminen und Abläufen ist der Balken- plan. Anhand der Vorgangsliste kann auch ein Balkenplan erstellt werden. Der Balkenplan wird auch als Gantt-Diagramm bezeichnet. Ein Gantt-Diagramm ist eine weitverbreitete Darstellungsform von Terminplänen. Diese Darstellungsform bietet eine einfache Lesbarkeit, ist leicht verständlich und ist eine zeitproportionale Darstellung. Jeder Vorgang wird durch einen Balken visualisiert, dabei entspricht die Länge des Balkens der Vorgangsdauer. Vorgänge können durch Verknüpfungs- pfeile in Abhängigkeit gesetzt werden.
In einem Balkenplan können auch Zusatzinformationen zu Ressourcen (Personal, Geräte) dargestellt werden. Ein Ganttdiagramm eignet sich für die Terminüberwachung. Wenn eine Arbeit fertig gestellt ist wird diese schraffiert oder farbig dargestellt. Zum Ablesen des Leistungsfortschritts einer Arbeit, wird eine senkrechte Statuslinie zum Stichtag auf der Zeitachse gezogen. Alle Vorgänge, die bis zum Stichtag noch keine farbigen oder schraffierten Balken haben, sind in Terminverzug. Liegen Vorgangsbalken rechts von der Statuslinie, so sind diese dem „Soll“ voraus [Proporowitz (2008): S.165].
Außerdem ist der Balkenplan ein Instrument des Baustellencontrollings. In der Bauausführungsphase ist frühzeitiges Feststellen von Abweichungen vom Bausoll von großem Interesse der Planenden, da der Normalfall einer Bauleistung ge- genüber dem Idealfall stark durch Störungen beeinflusst wird, wie in Abb. 2.2 zu sehen.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.2.: Ablauf einer Bauleistung [Proporowitz (2008): S.188]
2.3. Baustelleneinrichtung
Die technische Ausrüstung, die nötigen Transport-, Lager- und Produktionsstätten bilden zusammen die Baustelleneinrichtung (BE) [Schach und Otto (2008): S.1]. In der Arbeitsvorbereitung eines Bauprojekts muss die Baustelleneinrichtung mitberücksichtigt sein. Die BE wird in ihrer zeitlichen und räumlichen Positionierung bestimmt, organisiert und geplant. Die Baustelleneinrichtungsplanung wird maßgeblich durch baustellenspezifische und allgemeine Einflussfaktoren beeinflusst, welche berücksichtigt werden müssen.
Unter den allgemeinen Einflussfaktoren werden gesetzliche Auflagen, technische Details, organisatorische Gesichtspunkte, Einschränkungen durch Technik der Baumaschinen, Arbeitssicherheit sowie Kosten- und Wettereinfluss verstanden. Die baustellenspezifischen Gesichtspunkte umfassen den vorgegebenen Zeitrah- men durch den Bauherrn, Minimierung der Baukosten, betriebsbedingte und ge- bäudespezifische Gesichtspunkte und geologische Faktoren, sowie den Gebäude- standort.
Aus den allgemeinen und baustellenspezifischen Einflüssen ergeben sich Zusam- menhänge der Baustelleneinrichtungsplanung. Schacht und Otto (2008) gliedern die zu berücksichtigenden Elemente einer Baustelleneinrichtung in sechs Ober- gruppen:
- Baugrubensicherung und Grundwasserhaltung
- Schutz und Sicherheit der Baustelle
- Wege für den Transport und Flächen zum Lagern
- Baucontainer für Projektmitarbeiter
- Große Baumaschinen für Erdbau, Rohbau etc.
Die Obergruppe Großgeräte lässt sich nach Abmessung und Leistung differenziert untergliedern in Turmdrehkrane (TDK), Fahrzeugkrane, Autobetonpumpen, Bagger und Radlader, Spezialtiefbaugeräte, Aufbereitungs- und Mischanlagen sowie Tele- skopstapler. Der Einsatz von Großgeräten ist immer unter wirtschalftlichen Aspek- ten zu betrachten, da diese Maschinen teuer sind und ein Stillstand durch falsche Einsatzplanung oder falsche Dimensionierung wirtschaftliche Verluste verursacht. Mit Einsatzplanung ist der richtige Standort und mit Dimensionierung der Modell- typ, die Ausführung und Größe (abhängig von technischen Leistungsmerkmalen) gemeint.
Wenn ein falscher Standort bzw. ein falscher Einsatz von Großgeräten stattfindet, besteht für die am Bau beteiligten Mitarbeiter ggf. das Risiko, verletzt zu werden. [Schach und Otto (2008): S.4-8]. Um die Projekte und ihre Baustelleneinrichtung zu planen, werden Pläne angefertigt, um die Palung festzuhalten und Details ab- zulesen.
2.4. 3D-Modellierungssoftware, 4D-Software und Rendering
Um Pläne für Gebäude und deren Baustelleneinrichtung zu erstellen, bietet sich CAD an. Mit CAD (Computer-Aided Design) ist die elektronische Erstellung von Konstruktionsplänen gemeint. CAD ist in der Regel ein zeichenorientiertes Vor- gehen für zweidimensionale Linien und nicht für dreidimensionale Objekte [Tulke (2010): S.218]. Als der Computer in den Planungsbüros benutzt wurde, ist damit auch das computerunterstützte Konstruieren (CAD) eingeführt worden. Zu physikalischen FEM-Berechnungen ist es Baufirmen durch CAD möglich, planeri- sche Tätigkeiten schneller durchzuführen. Mit CAD kann sauber konstruiert werden und schneller Planungsänderungen eingearbeitet werden als auf dem Papier. So- mit können Baufirmen schnell Planungsalternativen für ein Projekt erstellen [Tulke (2010): S.1]. CAD-Software wird nicht nur im Bauwesen, sondern auch in vielen anderen technischen Bereichen, wie z. B. im Maschinenbau eingesetzt. Ein Anbie- ter ist Autodesk. Mit Autodesk AutoCAD ist es dem Benutzer möglich, DFX- und DWG-Pläne zu erstellen. DFX und DWG ist das Dateiformat, indem CAD-Pläne gespeichert werden. Darauf aufbauend gibt es auch AutoCAD 3D, welches vom Flächen- zum Volumenmodell übergeht und dem Anwender die Möglichkeit bietet, zusätzlich zu der Geometrie material- und körperspezifische Eigenschaften (wie Gewicht, Wichte, etc.) einzugeben und einzuplanen. Wenn ein Unternehmen eine gewisse Größe erreicht hat, ist es notwendig, die Planung und Darstellung durch CAD-Systeme zu unterstützen. Bei einer Einzelvergabe von Gewerken ist im Vor- feld zu prüfen, welche Baustelleneinrichtung zu einem optimalen Ablauf führt. Der Großunternehmer hingegen kann die Baustelleneinrichtung anders planen, da ihm mehr Mittel zur Verfügung stehen. Ein räumliches Modell eines Bauwerks zu ver- schiedenen Zeitpunkten (Bauablaufsimulation) gibt Auskunft über eine sinnvolle Platzierung, Produktionsabläufe und Logistikmengen [Kochendörfer u. a. (2010): S.261]. Um einen Überblick über 3D- bzw. 4D-Programme, sowie Renderprogram- me und deren Funktionsschwerpunkt zu geben, siehe Tabelle 2.2:
Abbildung in dieser Leseprobe nicht enthalten
Tabelle 2.2.: Überblick über 3D- bzw. 4D-Software und Rendersoftware [Wittwer (2009): S.14]
Die Firma Autodesk hat neben 3ds Max und Maya noch andere kommerzielle Pro- dukte auf dem Markt, wie Autodesk Revit Structure zum 3D-Modellieren und Au- todesk Naviswork zum Visualisieren. Eine wissenschaftlich-technische Visualisie- rung ist eine Veranschaulichung von Zusammenhängen einer gegebenen Daten- menge, in visueller Form, um eine effektive Auswertung sicherzustellen [Schumann und Müller (1999)]. Mit Hilfe der Visualisierung wird versucht, dem Betrachter einen deutlicheren Einblick und die Fähigkeit zu vermitteln, die Dinge besser zu erfassen, zu begreifen und zu beurteilen. Dieser Vorgang wird als Visualisierungsprozess be zeichnet. Er hat zum Ziel, abstrakte Daten in Form von Bildern zu verdeutlichen. Es kann sich bei den Daten aber auch um Daten geometrischer Natur handeln, bei denen es vorteilhaft ist, sie zu visualisieren. Die Erstellung dieser Bilder wird in mehreren Schritten durchgeführt, welche in der Visualisierungspipeline enthalten sind. Diese ist in der folgenden Abbildung dargestellt:
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.3.: Stufen der Visualisierungspipeline [Schumann und Müller (1999)]
Die Datenaufbereitung (Filtering) ermöglicht eine Daten-zu-Daten-Abbildung, die anhand der erhobenen Daten (Rohdaten) geschieht. Um diese Rohdaten zusam- menzustellen, müssen Operationen zur Vervollständigung oder Reduzierung einer Datenmenge erfolgen. Fehlende Daten müssen unter Umständen hinzugefügt wer- den. Bei zu großer Komplexität hingegen müssen unnötige Daten entfernt werden. Wenn die aufbereiteten Daten nach dem Filtern, d. h. nach Ausführen der oben genannten Operationen zur Verfügung stehen, kann der nachfolgende Schritt der Visualisierungspipeline, das Mapping, beginnen. Wenn nicht-geometrische Daten vorliegen, werden diese in geometrische Daten umgewandelt, d. h. es wird eine Daten-zu-Geometrie-Abbildung erstellt. Dabei werden nicht nur Datenwerte auf geometrische Primitive (z.B. ein Pixel der Bildschirmoberfläche) sondern auch de- ren zugehörigen Attribute (z.B. Farbe) übertragen. Die letzte Maßnahme vor dem Erhalt des Bildes ist die Bildgenerierung (Rendering), bei der die Geometrieda- ten in Bilddaten abgebildet werden. Die daraus gewonnenen Bilddaten können in verschiedener Darstellungsform auftreten, wie realitätsnahe Bilder, abstrahieren- de Bilder, „mentale Bilder“ oder Animationen. Bei Animationen werden Bilder kon- tinuierlich über die Zeit verändert. Caetano bezeichnet das Erstellen von einem 3D-Modell, das Inszenieren, das Beleuchten und das Rendern als 3D-Architektur- Visualisierung [Caetano (2008)].
2.5. Google SketchUp
2.5.1. Einsatzgebiete
SketchUp ist ein kostenloses, von Google entwickeltes Programm, in dem 3D- Modelle erstellen werden können. Die Idee, die hinter Google SketchUp (SU) steckt, ist einfach und dadurch schnell in 3D zu modellieren, damit die Welt, die uns umgibt, in ihrer Vielfalt der Dinge virtuell nachmodelliert werden kann [Chopra (2010)]. Natürlich können auch fiktive Dinge erstellt werden. Der Phantasie sind an dieser Stelle keine Grenzen gesetzt. 3D-Gebäudemodelle können mit den be- stehenden Satellitenbildern aus Google Earth in SU importiert werden und dort als Texturen verwendet werden, wenn keine anderen Texturen zum Gestalten vor- handen sind. Als aktuellste Möglichkeit bietet Google Street View sogar die Mög- lichkeit, bestehende Gebäude von der seitlichen Straßenansicht zu betrachten. Um die nachmodellierten 3D-Modelle von Gebäuden zusammenzutragen, bietet Google Earth die Möglichkeit, 3D-Gebäudemodelle auf Google Server hochzula- den (durch Exportieren aus SU). Sie können an den mit GPS-Koordinaten versehe- nen Standorten in der virtuellen Welt platziert werden. Damit werden sie für jeden sichtbar, der in Google Earth nachschauen will. Ein Beispiel zur Ansichtsmöglich- keit in Google Earth ist in Abbildung 2.4. zu sehen. Dort sind der Fernmeldeturm und Gebäude in Dortmund nachmodelliert worden. Google Earth speichert die
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.4.: Bsp. Google Earth Fernmeldeturm [Google (2011b)] 3D-Modelle aus Google SketchUp, nur dass in diesem Programm nicht modelliert
werden kann. Eine andere Alternative, ein erstelltes Modell zu verbreiten, ist es in die 3D-Galerie (3D-Warehouse) hochzuladen. Dort befinden sich viele Gegenstän- de, z. B. Werkzeuge, Autos oder Pflanzen etc., welche in unterschiedlicher Form und Größe, sowie Farbausführung (styles) zu finden sind, siehe dazu Abb. 2.5. Um einen internationalen Austausch dieser Modelle zu ermöglichen, kann z. B. ein
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.5.: Google 3D Galerie [Google (2011a)]
Amerikaner die Maßeinheit auf Zoll umstellen. Die Frage kommt auf, was Goog- le sich davon erhofft, die Programme und die Archivierung der Modelle kostenlos anzubieten. Der Buchautor Aidan Chopra (2010) antwortet auf diese Frage, dass Google versucht, damit Informationen zu organisieren und nicht zu erstellen [Cho- pra (2010)]. In erster Linie ist SU ganz und gar nicht auf Photorealismus ausgelegt. SU basiert auf nonphotorealistic rendering (NPR). Unter NPR wird im Wesentli- chen die Technik verstanden, die Dinge handgemalt aussehen zu lassen [Chopra (2010)].
2.5.2. Funktionsumfang
Damit in SketchUp modelliert werden kann, muss der Anwender die Benutzerober- fläche kennenlernen und sich damit vertraut machen. Der Benutzer kann anhand der Programmleiste feststellen, dass er sich in Google SketchUp befindet und wie die aktuelle Datei heißt, in der er sich befindet. In der Menüleiste findet er grundle- gende Menüpunkte, wie Datei, Bearbeiten, Ansicht, Kamera, Zeichnen, Tool, Fens- ter, Plug-Ins und Hilfe. Die Funktionen werden dem Benutzer über die Symbolleis te Erste Schritte angeboten und in einer erweiterten Ausführung über den großen Funktionssatz an, der optional ein- oder ausgeblendet werden kann, siehe Abb. 2.6 [Ridder (2010)].
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2.6.: Benutzeroberfläche SketchUp [Ridder (2010): S.67]
Die Symbolleiste besteht aus folgenden Elementen: Sie untergliedert sich in verschiedene Funktionssätze und diese bestehen aus folgenden Funktionen:
Funktionssatz 1 setzt sich zusammen aus:
- dem Pfeil zum Anwählen von Objekten
- dem Werkzeug zum Erstellen von Komponente
- dem Radiergummi zum Löschen von Objekten
- dem Maßband zum Messen von Abständen und Skalieren der Abstände
- dem Farbeimer zur Vergabe von Texturen oder Farben.
Funktionssatz 1 ist die Hauptsymbolleiste mit den grundlegendsten Funktionen und der Maßbandfunktion. Die Maßbandfunktion, die Achsenfunktion etc. ermöglichen es dem Benutzer, im Raum zu konstruieren [Ridder (2010)].
Funktionssatz 2 setzt sich zusammen aus:
- dem Stift zum Ziehen von Linien
- dem Rechteckwerkzeug zum Erstellen einer Rechteckfläche
- dem Kreiswerkzeug zum Zeichen von Kreisflächen
- dem Bogenwerkzeug zum Ziehen von Kreisbögen
Funktionssatz 2 hilft dem Benutzer, in SketchUp zu zeichnen [Ridder (2010)].
Funktionssatz 3 setzt sich zusammen aus:
- dem Drücken/Ziehenwerkzeug zum Extrudieren von Flächen
- dem Verschiebenwerkzeug zum Verschieben von Objekten im Raum
- dem Drehenwerkzeug zum Verdrehen von Objekten im Raum
- dem Versatzwerkzeug zum Versetzen von Flächen
Funktionssatz 3 ermöglicht es, im 3DRaum Objekte zu bearbeiten [Ridder (2010)].
Funktionssatz 4 setzt sich zusammen aus:
- der Rotierfunktion zum Drehen der Perspektive im Raum, der Handfunktion zum horizontalen und vertikalen Bewegen im Raum, der Zoomfunktion zum Heranzoomen
- der Alleszeigenfunktion zum automatischen Herauszoomen auf Objektgröße
Funktionssatz 4 heißt Kamera. Sie hilft dem Anwender, die gewünschte Perspektive einzustellen.
Der Funktionssatz 5 ist die Google Toolbar. Sie enthält Werkzeuge, um Modelle in Google Earth zu laden und mit weiteren Funktionen deren Anwendungsvielfalt [Ridder (2010)]. Somit erhält der Benutzer eine Reihe von hilfreichen Werkzeugen, um sich im 3D-Raum zu bewegen, zu zeichnen und zu konstruieren. Des Weiteren kann der Benutzer auch einfach nur betrachten und seine Perspektive mit dem Kamerafunktionssatz verändern.
2.5.3. Erweiterbarkeit
Das Programm Google SketchUp lässt sich in seinem Funktionsumfang durch PlugIns erweitern und bietet somit eine Möglichkeit, dem Benutzer neue Werkzeu- ge und ganze Funktionssätze zur Verfügung zu stellen. Diese PlugIns werden mit Ruby unter Verwendung der in Kapitel 2.6.3 beschriebenen SketchUp Ruby API programmiert.
Die folgenden Beispiele sollen einen Eindruck vermitteln, was z. B. erweiterte Funktionssätze sind:
Beim Importieren von CAD-Plänen werden häufig aus Linien keine Flächen er- stellt, weil sie nicht vollständig miteinander verbunden sind. Da dies manuell sehr schwierig zu korrigieren ist, gibt es dafür das PlugIn „make faces“. Dies findet sol- che nicht verbundenen Linien, verbindet sie und erstellt so die fehlenden Flächen [Burch (2004)].
Dann gibt es die „rubytoolbar“. Hiermit ist es möglich, die Ruby-Konsole über die Symbolleiste aufzurufen, zu löschen, Ruby-Skripte einzulesen und den SketchUpPlugIn-Ordner aufzurufen [?].
Um aus einem SketchUp-Modell gerenderte Bilder zu erstellen, gibt es z.B. das PlugIn „SU2POV“ [Bur (2010)]. Das POV-Ray-PlugIn stellt eine Verbindung zu der kostenlosen Rendersoftware POV-Ray her [Cason und Froehlich (2003)]. Es können Lichtverhältnisse und andere Einstellungen für die Qualität eines Bildes vorgenommen werden.
Die genannten PlugIns erweitern den bereits vorhandenen Funktionssatz von Google SketchUp (SU). Es kann mit der Pogrammiersprache Ruby ein PlugIn für SU geschrieben werden.
2.6. Programmiersprache Ruby
2.6.1. Einführung
Die frei verfügbare Programmiersprache Ruby ist eine interpretierte, dynamisch typisierte objektorientierte Skriptsprache [Kersken (2007)].
Ein Ruby-Programm wird nicht direkt vom Prozessor eines Computers ausgeführt, sondern erst in den Ruby-Interpreter geladen. Dieser wiederum liest die Ruby- Dateien Zeile für Zeile und formt daraufhin die Ruby-Anweisungen in einen Code um, den ein Computerprozessor ausführen kann [Kersken (2007)]. In dynamisch typisierten Programmiersprachen sind Variablen keine Typen zuge- wiesen. Das bedeutet, dass Variablen auf beliebige Objekte verweisen können. Ob eine Operation auf das in Verbindung gebrachte Objekt ausgeführt werden kann, wird dynamisch zur Laufzeit entschieden. Ein dynamisches Typsystem hat die Vor- teile, dass eine explizite Typumwandlung nicht nötig ist und dass es flexibler ist. Ruby ist objektorientiert. Objektorientierung basiert auf den drei Konzepten: Unter- stützung von Vererbungsmechanismen, Datenkapselung und Polymorphie (Vielge- staltigkeit) [Lahres und Rayman (2009)]. Vererbung bedeutet, dass eine Klasse ihre Elemente an eine andere Klasse vererben kann, also Attribute und Methoden. Die erbende Klasse besitzt dadurch auch die Eigenschaften der Klasse, von der sie erbt. Von Datenkapselung ist die Rede, wenn ein Objekt mehrere andere Objek- te enthält, also kapselt. Polymorphie hängt direkt mit der Vererbung zusammen. Ein Objekt, dessen Klasse von einer anderen Klasse erbt, hat zwei Typen, nämlich nicht nur die eigene Klasse, sondern auch die Klasse, von der die eigene Klasse erbt.
Des Weiteren ist Ruby eine Skriptsprache. Skriptsprachen dienen in der Regel dem Zweck, eher kleinere Anwendungen oder Anweisungsfolgen zu realisieren. Die Codesequenzen einer solchen Skriptsprache (auch Skripte/Scripts genannt) werden häufig nicht von einem Compiler in maschinenlesbaren Code umgeformt, sondern direkt über den Interpreter ausgeführt. Interpretierte Skriptsprachen sind gekennzeichnet durch ihren Geschwindigkeitsnachteil bei rechenintensiven Aufga- ben gegenüber Programmen in komplexeren Programmiersprachen, wie z.B. Ja- va [Lipinski u. a. (2011b)]. Ein weiterer Unterschied ist der Einstiegspunkt, also die Stelle im Code, bei der die Ausführung beginnt. In Skriptsprachen ist dies in der Regel der Anfang des Dokuments, in Sprachen wie Java hingegen eine Main- Methode.
Entwickelt wurde Ruby von Yukihiro Matsumoto im Jahr 1993 in Japan [Lahres und Rayman (2009)]. Allerdings wurde Ruby erst im Jahr 1995 veröffentlicht [Baird und Heymann-Reder (2008)].
Anfangs fand Ruby im Rest der Welt kein Interesse, da sie nicht ausreichend kommentiert und die Dokumentation bisher noch nicht übersetzt worden war. Dies änderte sich bald und die Skriptsprache stieß auch bei Programmierern aus anderen Nationen auf größeres Interesse.
Ruby ist in den Eigenschaften herausragend, da eine klare Syntax einen eleganten Programmierstil zulässt. „Ruby kombiniert die konzeptionelle Eleganz und stren- ge Objektorientierung von Smalltalk mit der Leistungsfähigkeit, Flexibilität und Ein- fachheit der Nutzung einer Skriptsprache“ [Lahres und Rayman (2009)]. Ruby setzt sich, wie jede andere objektorientierte Programmiersprache auch, aus Klassen, Methoden, Variablen etc. zusammen. Das bemerkenswerte an Ruby ist, dass es vollständig objektorientiert ist und alles ein Objekt ist, das gilt sogar für Klassen [Flanagan u. a. (2008)].
Dateien mit Ruby-Programmen tragen üblicherweise die Endung .rb.
2.6.2. Sprachgrundlagen
Der Grundaufbau einer Programmiersprache wird Syntax genannt. In einer normalen Sprache sind dies Sätze aus einer Fülle von Ausdrucksmöglichkeiten, die eine Grammatik zu bieten hat [Kersken (2007)].
Die Syntax von Ruby hat einige Unterschiede, aber auch viele Ähnlichkeiten zu anderen bekannten Programmiersprachen. Anweisungen werden durch Zeilenum- brüche getrennt, müssen also nicht durch ein Semikolon, wie es aus anderen Pro- grammiersprachen bekannt ist, voneinander getrennt werden. Es gibt jedoch wei- terhin die Möglichkeit, Anweisungen durch Semikolons zu trennen, um mehrere An- weisungen in eine Zeile schreiben zu können [Baird und Heymann-Reder (2008)]. Die meisten Anweisungen setzen sich aus mehreren Einzelelementen zusammen.
Das kleinste nicht trennbare Element einer Anweisung heißt Token. Die Tokens sind von verschiedenen Typen: Literale (Einzelwerte), Variablen (Speicherplätze, die Objekte enthalten), Operatoren (Vergleichs- oder arithmetische Operatoren) und Methoden (Unterprogramme, welche Argumente erhalten und Rückgabetypen besitzen können).
Literale gibt es in verschiedenen Arten: Numerische Literale sind ganze Zahlen (Integer) oder Fließkommazahlen (float), String-Literale sind Zeichenfolgen in An- führungszeichen und Spezialliterale sind z. B. das Leerliteral nil und die Wahrheits- werte false und true. Eine weitere wichtige Bedeutung haben Variablen in einem Computerprogramm. Variablen sind benannte Speicherplätze oder anders ausge- drückt, wie aus der Mathematik bekannt, Platzhalter, die einen mehr oder weniger beliebigen Wert darstellen können. Damit ein Computerprogramm korrekt ausge- führt werden kann, muss jede Variable zu jeder Zeit einen eindeutigen Wert besit- zen. Variablen sind in der Praxis vorteilhaft, wenn sie bei jedem Durchlauf andere Werte besitzen. Variablen können beliebige Objekte enthalten:
- ein Float-Zahl-Objekt, z. B. 2.345
- ein String-Objekt, z. B. “Hi everyone“
- ein Time-Objekt
Die Variable wird durch den Bezeichner benannt. Der Bezeichner kann Buchsta- ben, Ziffern und Unterstriche beinhalten. Ruby differenziert zwischen Groß- und Kleinschreibung. Grundsätzlich werden Variablen in Kleinbuchstaben begonnen. Wenn der Bezeichner aus mehreren Wörtern besteht, werden diese bei Ruby nach Konvention durch Unterstriche getrennt. Variablen, die ohne Gültigkeitsbereich im gesamten Skript gelten sollen, heißen globale Variablen und werden mit einem Dollarzeichen ($) vor dem Namen gekennzeichnet. Hingegen Variablen, die einen begrenzten Geltungsbereich besitzen, heißen lokale Variablen oder Standardvaria- blen [Baird und Heymann-Reder (2008)].
Eine Konstante wird definiert, indem der Anfangsbuchstabe des Bezeichners groß geschrieben wird. Nach Konvention soll sich der Bezeichner sogar nur aus Groß- buchstaben zusammensetzen. Die Konstanten haben einen einmal festgelegten Wert, der im gesamten Skript bestehen bleibt und haben ihre Gültigkeit auf globa- ler Ebene.
Bei einer Zuweisung wird die Variable erst dann gespeichert, wenn zuvor der Ausdruck auf der rechten Seite verarbeitet wurde, d. h. der Ausdruck kann die Variable selbst beinhalten und so den bisherigen Wert verändern.
Beispiel: x = x + 1
Eine besonderer Variablentyp, der automatisch größere Mengen von Daten verarbeiten kann, d. h. in dem sich Gruppen von Werten abspeichern lassen, heißt Array. Häufig werden Arrays mit einer festen Größe erstellt. In Ruby dagegen sind Arrays dynamisch, sodass beliebig viele Elemente hinzugefügt werden können. Um auf ein bestimmtes Element eines Arrays zuzugreifen, werden eckige Klammern hinter dem Variablennamen verwendet, welche den Index des Elements enthalten. An dieser Stelle ist darauf zu achten, dass der Index bei 0 beginnt.
Um Einzelbestandteile von Ausdrücken miteinander zu verbinden gibt es die so- genannten Operatoren. Operatoren sind unter anderem die klassischen Grundre chenarten ( ) und logische Operatoren ( ), sowie Vergleichsopera toren ( ). Im Zusammenhang mit Arrays gibt es noch den speziellen Operator ( ), welcher ein Element einer Liste hinzufügt.
Logische Operatoren werden in bedingten Anweisungen verwendet, welche an folgendem Beispiel erklärt werden sollen:
Abbildung in dieser Leseprobe nicht enthalten
Neben einer einfachen Wenn-Dann-Anweisung ist es auch möglich, weitere Fälle zu behandeln. Mit dem Schlüsselwort elsif wird im Sonst-Fall eine weitere Bedingung überprüft. Die Anweisungen, die dem Schlüsselwort else folgen, werden in jedem Fall ausgeführt, falls keine der vorherigen Bedingungen erfüllt ist. Die Schreibweise des Schlüsselwortes elsif ist ein Stolperstein für Programmierer, die Vorkenntnisse in Java oder anderen Sprachen, die die C-Syntax verwenden, haben, da es in solchen Sprachen in der Regel else if heißt.
Ein häufig genutztes Programmierkonzept ist das sogenannte Iterieren. Iterieren bedeutet ganz allgemein, Elemente einer Menge zu durchlaufen. Dies könnten z.
B. Elemente eines Arrays oder anderer Listen sein. Ruby hat für das Iterieren über Elemente einer Menge Schleifen und Iteratoren. Eine Schleife, mit der über einen Bereich von Zahlen iteriert wird, ist die for -Schleife. Die Funktionsweise soll an folgendem Beispiel verdeutlicht werden:
Abbildung in dieser Leseprobe nicht enthalten
Bei dem Arbeiten mit Arrays ist es besser, Iteratoren zu verwenden, da diese sich als kürzer, wartbarer und verständlicher herausgestellt haben [Baustert und Wir- demann (München Hauser, 2006)]. Wenn über einen Container, wie z.B. ein Array, iteriert werden soll, geschieht dies über Iteratoren in Verbindung mit Codeblöcken. In solch einem Codeblock steht der Code zur Verarbeitung eines Elements, welcher an Methoden des Containers übermittelt wird. Eine solche Methode ist each:
Abbildung in dieser Leseprobe nicht enthalten
In diesem Beispiel wird jedes Element aus dem string_array in der Konsole ausgegeben [Baustert und Wirdemann (München Hauser, 2006)]. Einzelne Elemente können durch das Schlüsselwort next übersprungen werden.
Ruby bringt neben der bereits erwähnten Array-Klasse weitere vordefinierte Klassen mit, wie z. B. Time. Die Klasse Time speichert, wie der Name schon vermuten lässt, einen Zeitpunkt. Dazu gehört das Datum, die Zeit und die Zeitzone. Time Objekte lassen sich unter anderem mit folgenden Befehlen erzeugen:
Abbildung in dieser Leseprobe nicht enthalten
Mit dem Time.new() -Befehl wird ein Datum-Objekt mit der lokalen Zeitzone erzeugt, während Time.utc() eine Zeitangabe in UTC erwartet.
[...]
-
-
-
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X. -
-
Upload your own papers! Earn money and win an iPhone X.