00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef __SIM_SolverScript_h__
00015 #define __SIM_SolverScript_h__
00016
00017 #include "SIMZ_API.h"
00018 #include <SIM/SIM_OptionsUser.h>
00019 #include <SIM/SIM_Solver.h>
00020 #include "SIMZ_Utils.h"
00021
00022 class SIM_GeometryCopy;
00023 class SIM_SolverScript;
00024
00025 class SIMZ_API SIM_SolverScriptData
00026 {
00027 public:
00028 SIM_SolverScriptData()
00029 : mySolver(0),
00030 myObjects(0),
00031 myTimestep(0),
00032 myIsInitializing(false)
00033 { }
00034 SIM_SolverScriptData(SIM_SolverScript *solver,
00035 const SIM_ObjectArray *objects,
00036 const SIM_Time *timestep,
00037 bool is_initializing)
00038 : mySolver(solver),
00039 myObjects(objects),
00040 myTimestep(timestep),
00041 myIsInitializing(is_initializing)
00042 { }
00043 ~SIM_SolverScriptData()
00044 { }
00045
00046 static UT_RefArray<SIM_SolverScriptData> &getSolverStack();
00047
00048 SIM_SolverScript *mySolver;
00049 const SIM_ObjectArray *myObjects;
00050 const SIM_Time *myTimestep;
00051 bool myIsInitializing;
00052 };
00053
00054 class SIMZ_API SIM_SolverScript : public SIM_Solver,
00055 public SIM_OptionsUser
00056 {
00057 public:
00058
00059 GETSET_DATA_FUNCS_S(SIM_NAME_SCRIPT, Script);
00060 GETSET_DATA_FUNCS_S(SIM_NAME_INITSCRIPT, InitScript);
00061
00062 void getDopnetPath(UT_String &path) const;
00063 const SIM_Engine &getDopnetEngine() const;
00064 static void installCommands();
00065
00066 protected:
00067 explicit SIM_SolverScript(const SIM_DataFactory *factory);
00068 virtual ~SIM_SolverScript();
00069
00070 virtual SIM_Result solveObjectsSubclass(SIM_Engine &engine,
00071 SIM_ObjectArray &objects,
00072 SIM_ObjectArray &newobjects,
00073 SIM_ObjectArray &feedbacktoobjects,
00074 const SIM_Time ×tep);
00075
00076 private:
00077 SIM_Result runScript(
00078 const char *script,
00079 const char *description,
00080 const SIM_ObjectArray &objects,
00081 const SIM_Time ×tep,
00082 bool is_initializing);
00083 SIM_Result runHscriptScript(
00084 const char *script,
00085 const char *description);
00086 SIM_Result runPythonScriptFile(
00087 const char *script_file,
00088 const char *description);
00089
00090 static const SIM_DopDescription *getSolverScriptDopDescription();
00091
00092 DECLARE_STANDARD_GETCASTTOTYPE();
00093 DECLARE_DATAFACTORY(SIM_SolverScript,
00094 SIM_Solver,
00095 "Script Solver",
00096 getSolverScriptDopDescription());
00097 };
00098
00099 #endif
00100