Hauptseite | Liste aller Namensbereiche | Klassenhierarchie | Alphabetische Liste | Datenstrukturen | Auflistung der Dateien | Datenstruktur-Elemente | Datei-Elemente

Integrator.cpp

gehe zur Dokumentation dieser Datei
00001 /*
00002 Autor: $Author: kunkel $ State: $State: Exp $
00003 Datum: $Date: 2005/05/30 12:35:25 $
00004 Version: $Revision: 1.1 $
00005 */
00006 
00011 #include "Integrator.h"
00012 #include "RungeKutta.h"
00013 #include "RungeKuttaAdaptive.h"
00014 #include "Window.h"
00015 #include "Message.h"
00016 
00017 
00018 Integrator::classWindowEditAttributes * Integrator::editAttributes=0;
00019 
00020 // max Anzahl möglicher Integratoren
00021 #define INTEGRATORS 2
00022 
00023 // int- und char-Name der Integratoren
00024 char integratorName[INTEGRATORS][20] = {"RungeKutta","RungeKuttaAdaptive"} ;
00025 
00029 void Integrator::Error::print() {
00030     Message::msg(Message::ERROR, message);
00031 }
00032 
00038 Integrator * Integrator::createIntegrator(const string &  name) {
00039     Integrator * integrator;
00040     if(name == "RungeKutta")
00041         integrator = new RungeKutta;
00042     else if(name == "RungeKuttaAdaptive")
00043         integrator = new RungeKuttaAdaptive;
00044     else
00045         // verwende RungeKutta, falls name unbekannt
00046         integrator = new RungeKutta;
00047 
00048     editAttributes = 0;
00049     return integrator;
00050 }
00051 
00052 
00056 int Integrator::getTypeCount() {
00057     return INTEGRATORS;
00058 }
00059 
00065 int Integrator::TypeToInt(const string & intType) {
00066     for(int i=0; i < INTEGRATORS; i++)
00067         if(intType == integratorName[i])
00068             return i;
00069     cerr << "Unknown Integrator detected (Integrator): " << intType << endl;
00070     return 0;
00071 }
00072 
00078 char * Integrator::NumToType(const int typenum) {
00079     if(typenum < INTEGRATORS)
00080         return integratorName[typenum];
00081 
00082     cerr << "Unknown Integrator detected (Integrator): " << typenum  << endl;
00083     return integratorName[0];
00084 }
00085 
00086 
00090 void Integrator::closeAttributeWindow() {
00091     if(editAttributes == 0)
00092         return;
00093     editAttributes->attributeWindow->close();
00094     if(editAttributes->additionalInformation != 0)
00095         editAttributes->my->deleteAdditionalInformation
00096         (editAttributes->additionalInformation);
00097     delete(editAttributes);
00098     editAttributes = 0;
00099 }
00100 
00104 void Integrator::createBasisAttributeWindow() {
00105 
00106     // tue nichts, wenn AttributeWindow fuer diesen Integrator bereits existiert
00107     if(editAttributes != 0 && editAttributes->my == this )
00108         return;
00109 
00110     // schliesse AttributeWindow (eines anderen Integrators), falls es existiert
00111     closeAttributeWindow();
00112     editAttributes = new classWindowEditAttributes;
00113     editAttributes->attributeWindow = GLUI_Master.create_glui("Attributes");
00114     editAttributes->my = this;
00115     editAttributes->additionalInformation = 0;
00116     GLUI * aw= editAttributes->attributeWindow;
00117     GLUI_Update_CB mc = (GLUI_Update_CB) Integrator::AttributeMenuCallback;
00118 
00119     // erzeuge Buttons
00120     GLUI_Button *b= aw->add_button( "Set",OK, mc );
00121     b->set_w(100);
00122     b=aw->add_button( "Close",CANCEL, mc );
00123     b->set_w(100);
00124     aw->add_separator();
00125     aw->set_main_gfx_window(Window::getMainWindow());
00126 }
00127 
00132 void Integrator::AttributeMenuCallback(int b) {
00133     if(Integrator::editAttributes == 0)
00134         cerr << "FEHLER Integrator::editAttributes uninitialisiert";
00135     switch(b) {
00136     case(OK): {
00137             // geaenderte Eigenschaft wird uebernommen
00138             editAttributes->my->saveAttributes();
00139             break;
00140         }
00141     case (CANCEL): {
00142             // AttributeWindow wird geschlossen ohne evtl. Aenderungen zu
00143             // uebernehmen
00144             closeAttributeWindow();
00145             break;
00146         }
00147     default:
00148         cerr << "UNKNOWN KEY PRESSED " << b << " AttributeMenuCallback" << endl;
00149     }
00150 }
00151 
00152 
00153 

Erzeugt am Mon May 30 14:31:15 2005 für Sunsystembuildingandsimulation von doxygen 1.3.6