00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef __SIM_SolverMulti_h__
00015 #define __SIM_SolverMulti_h__
00016
00017 #include "SIM_API.h"
00018 #include "SIM_Solver.h"
00019 #include "SIM_OptionsUser.h"
00020
00021
00022
00023
00024 class SIM_API SIM_SolverMulti : public SIM_Solver,
00025 public SIM_OptionsUser
00026 {
00027 public:
00028 GETSET_DATA_FUNCS_I(SIM_NAME_PRIMARYSOLVER, PrimarySolver);
00029
00030 protected:
00031
00032 explicit SIM_SolverMulti(const SIM_DataFactory *factory);
00033
00034 virtual ~SIM_SolverMulti();
00035
00036
00037 virtual SIM_Result solveObjectsSubclass(SIM_Engine &engine,
00038 SIM_ObjectArray &objects,
00039 SIM_ObjectArray &newobjects,
00040 SIM_ObjectArray &feedbacktoobjects,
00041 const SIM_Time ×tep);
00042
00043 virtual int getRequestedCacheSubclass();
00044 virtual void getImpulseMassMatrixSubclass(
00045 const SIM_Object &object,
00046 const UT_Vector3 &impulseworldpos,
00047 UT_DMatrix3 &immatrix) const;
00048 virtual void getPointImpulseMassMatrixSubclass(
00049 const SIM_Object &object,
00050 int ptnum, UT_DMatrix3 &immatrix) const;
00051 virtual fpreal getPropertyAtPositionSubclass(const SIM_Object &object,
00052 const UT_Vector3 &worldpos,
00053 const SIM_Property &property) const;
00054 virtual fpreal getPropertyAtPointSubclass(const SIM_Object &object,
00055 int ptnum, const SIM_Property &property) const;
00056 virtual void getDefaultColliderLabelSubclass(
00057 const SIM_Object &object,
00058 UT_String &label) const;
00059 virtual void getDefaultColliderSubclass(
00060 const SIM_Object &object,
00061 const UT_String &colliderlabel,
00062 UT_String &collidertype,
00063 bool &colliderreverseobjectroles) const;
00064
00065 private:
00066
00067 const SIM_Solver *getCurrentSolver() const;
00068
00069 static const SIM_DopDescription *getSolverMultiDopDescription();
00070
00071 SIM_Solver *myCurrentSolver;
00072
00073 DECLARE_STANDARD_GETCASTTOTYPE();
00074 DECLARE_DATAFACTORY(SIM_SolverMulti,
00075 SIM_Solver,
00076 "Multiple Solver",
00077 getSolverMultiDopDescription());
00078 };
00079
00080 #endif
00081