Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ss16:physiksimulation_doc_python [2016/08/13 17:06] markumnus Parser hinzugefügt |
ss16:physiksimulation_doc_python [2016/08/14 22:37] (aktuell) markumnus |
||
---|---|---|---|
Zeile 3: | Zeile 3: | ||
</a></center></html> | </a></center></html> | ||
- | <- [[ss16:Physiksimulation_doc_components|zurück zur Liste der Komponenten]] | + | **[[ss16:Physiksimulation|Physiksimulation]]/[[ss16:Physiksimulation_Doc_Main|Dokumentation]]/[[ss16:Physiksimulation_doc_components|Komponenten]]/** |
- | + | =====Python-Teil===== | |
- | =====Physiksimulation | Python-Teil===== | + | |
Zeile 49: | Zeile 48: | ||
return result | return result | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ====Reader.py==== | ||
+ | In der Datei Reader.py wird die Klasse Reader definiert. Wir haben uns hier für eine Klasse entschieden (anstatt nur einer Funktion wie beim Parser), da wir die //%%__getitem__()%%//-Funktion nutzen wollten, um die Ergebnis-Datei wie eine Liste indizierbar zu machen. Mit reader[time_step] kann man bequem auf die Positionsdaten des jeweiligen Zeitschritts zugreifen. | ||
+ | <code Python> | ||
+ | ####################################### | ||
+ | # IMPORTE | ||
+ | ####################################### | ||
+ | import Parser | ||
+ | |||
+ | class Reader: | ||
+ | |||
+ | time_steps = [] | ||
+ | |||
+ | def __init__ (self, filename): | ||
+ | # Deklarationen | ||
+ | self.FILENAME = filename | ||
+ | |||
+ | # File lesen | ||
+ | with open (self.FILENAME) as f: | ||
+ | file_cont = f.read() | ||
+ | |||
+ | # Zeitschritte voneinander trennen | | ||
+ | self.time_steps = file_cont.split('|') | ||
+ | | ||
+ | # letztes, leeres Element entfernen | ||
+ | self.time_steps.pop() | ||
+ | |||
+ | |||
+ | def __getitem__ (self, key): | ||
+ | """ | ||
+ | Indiziert einen Zeitschritt und gibt die Koordinaten der Objects zu diesem Zeitschritt zurueck. | ||
+ | """ | ||
+ | return Parser.parse(self.time_steps[key]) | ||
+ | | ||
+ | | ||
+ | def __len__ (self): | ||
+ | """ | ||
+ | Gibt Anzahl der verfuegbaren Zeitschritte zurueck. | ||
+ | """ | ||
+ | return len (self.time_steps) | ||
+ | | ||
+ | def __str__ (self): | ||
+ | s = "Reader auf \"" + self.FILENAME + "\" mit " + str(len(self)) + " Zeitschritten." | ||
+ | return s | ||
+ | |||
+ | def __repr__(self): | ||
+ | return self.__str__() | ||
+ | |||
</code> | </code> | ||
Zeile 54: | Zeile 103: | ||
====Visualizer.py==== | ====Visualizer.py==== | ||
Diese Datei deklariert die Klasse //Visualizer//. Im Konstruktor nimmt sie eine Liste mit Objekten entgegen, die visualisiert werden sollen. Außerdem wird die //scene// für Visual initialisiert.\\ | Diese Datei deklariert die Klasse //Visualizer//. Im Konstruktor nimmt sie eine Liste mit Objekten entgegen, die visualisiert werden sollen. Außerdem wird die //scene// für Visual initialisiert.\\ | ||
- | Mit der Methode //run()// wird die Animation gestartet. Die benötigten Positionsdaten werden mithilfe eines [[abc|Readers]] ausgelesen. | + | Mit der Methode //run()// wird die Animation gestartet. Die benötigten Positionsdaten werden mithilfe des Readers ausgelesen. |
<code Python> | <code Python> | ||
from visual import * | from visual import * | ||
Zeile 126: | Zeile 175: | ||
self.w.show() | self.w.show() | ||
</code> | </code> | ||
- | ... welches wiederum Buttons hat, die z.B. beim Klicken auf "OK" ein Objekt erstellen und es zunächst per [[abc|Interface]] im [[abc|Universe]] speichern: | + | ... welches wiederum Buttons hat, die z.B. beim Klicken auf "OK" ein Objekt erstellen und es zunächst per [[ss16:Physiksimulation_Doc_cpp#Interface.cpp|Interface]] im [[ss16:Physiksimulation_Doc_cpp#Universe.cpp|Universe]] speichern: |
<code Python> | <code Python> | ||
def output0(self): | def output0(self): |