HDK
|
#include <SIM_Solver.h>
Public Types | |
enum | SIM_Result { SIM_SOLVER_SUCCESS, SIM_SOLVER_REPEAT, SIM_SOLVER_SUBSTEP, SIM_SOLVER_FAIL } |
Public Member Functions | |
SIM_Result | solveObjects (SIM_Engine &engine, SIM_ObjectArray &objects, SIM_ObjectArray &newobjects, SIM_ObjectArray &feedbacktoobjects, const SIM_Time ×tep) |
SIM_Result | postSolveObjects (SIM_Engine &engine, SIM_ObjectArray &objects, SIM_ObjectArray &newobjects, SIM_ObjectArray &feedbacktoobjects, const SIM_Time ×tep) |
SIM_Result | solveRelationship (SIM_Engine &engine, SIM_Relationship &relationship, const SIM_Time ×tep) |
int | getRequestedCache () const |
void | getImpulseMassMatrix (const SIM_Object &object, const UT_Vector3 &impulseworldpos, UT_DMatrix3 &immatrix) const |
void | getPointImpulseMassMatrix (const SIM_Object &object, GA_Index ptnum, UT_DMatrix3 &immatrix) const |
SIM_PointImpulseMassMatrixResolver * | getPointImpulseMassMatrixResolver (const SIM_Object &object) const |
Builds a resolver to efficiently compute mass matrices. More... | |
fpreal | getPropertyAtPosition (const SIM_Object &object, const UT_Vector3 &worldpos, const SIM_Property &property) const |
fpreal | getPropertyAtPoint (const SIM_Object &object, GA_Index ptnum, const SIM_Property &property) const |
SIM_PropertyResolver * | getPropertyResolver (const SIM_Object &object, const SIM_Property &property) const |
Builds a resolver to efficiently compute property values. More... | |
void | getDefaultColliderLabel (const SIM_Object &object, UT_String &label) const |
Gets the default collider label for an object using this solver. More... | |
void | getDefaultCollider (const SIM_Object &object, const UT_String &colliderlabel, UT_String &collidertype, bool &colliderreverseobjectroles) const |
void | setStartTime (const SIM_Time &starttime) |
bool | isStatic (const SIM_Object *obj) const |
![]() | |
const UT_StringHolder & | getDataType () const |
void | initialize (const SIM_SubdataBehavior &subdatabehavior) |
void | makeEqual (const SIM_Data *source, const SIM_SubdataBehavior &subdatabehavior) |
void | setParameters (const SIM_Options &parms) |
void | interpolate (const SIM_Data *source1, const SIM_Data *source2, fpreal interp) |
int64 | getMemorySize () const |
bool | getIsAlternateRepresentation () const |
bool | saveToFile (const char *filename, UT_CompressionType compressionType) const |
bool | saveToStream (std::ostream &os, UT_CompressionType compressionType) const |
void | appendFullDataPath (const SIM_Data *subdata, bool useobjectid, UT_String &datapath) const |
bool | loadFromFile (const char *filename) |
bool | loadFromStream (UT_IStream &is, bool skiptype=false) |
bool | getIsOfType (const UT_StringRef &datatype) const |
const void * | getConstPointerToType (const UT_StringRef &datatype) const |
void * | getPointerToType (const UT_StringRef &datatype) |
int | getNumSubData () const |
Get the number of sub-data items attached to this data. More... | |
const UT_StringHolder & | getSubDataName (int index) const |
Get the name of the sub-data at a particular index location. More... | |
int | getSubDataIndex (const SIM_Data *subdata) const |
bool | buildSubDataPath (const SIM_Data *subdata, UT_String &pathto) const |
const SIM_Query & | getQueryObject () const |
SIM_Options * | getUserOptions () |
const SIM_Options * | getConstUserOptions () const |
long | getGuideParmVersion () const |
void | addGuideDep (DEP_MicroNode &src) const |
virtual bool | getGuideGeometryList (const SIM_RootData &root, const char *datapath, const SIM_Time &t, UT_Array< GU_ConstDetailHandle > &detailArray, UT_Array< UT_DMatrix4 > &xformArray) const |
GU_ConstDetailHandle | getGuideGeometry (const SIM_RootData &root, const char *datapath, UT_DMatrix4 &xform, const SIM_Time &t) const |
void | buildGuideOptions (SIM_Options &options, const SIM_Time &time) const |
SIM_Data * | getSubData (int index) |
const SIM_Data * | getConstSubData (int index) const |
SIM_Data * | getNamedSubData (const char *dataname) |
const SIM_Data * | getConstNamedSubData (const char *dataname) const |
void | filterSubData (SIM_DataArray &ncdp, UT_StringArray *names, const SIM_DataFilter &ncfilter, const char *startfrom, const SIM_DataFilter &recursefilter) |
void | filterConstSubData (SIM_ConstDataArray &dp, UT_StringArray *names, const SIM_DataFilter &filter, const char *startfrom, const SIM_DataFilter &recurseFilter) const |
SIM_Data * | getNthSubData (UT_String *name, const SIM_DataFilter &filter, int n, const char *startfrom, const SIM_DataFilter &recurseFilter) |
const SIM_Data * | getNthConstSubData (UT_String *name, const SIM_DataFilter &filter, int n, const char *startfrom, const SIM_DataFilter &recurseFilter) const |
void | forEachSubData (SIM_EachDataCallback &cb, const SIM_DataFilter &filter, const char *startfrom, const SIM_DataFilter &recurseFilter) |
void | forEachConstSubData (SIM_EachDataCallback &cb, const SIM_DataFilter &filter, const char *startfrom, const SIM_DataFilter &recurseFilter) const |
SIM_Data * | createNamedSubData (const char *dataname, const char *datatype, int creationflags, UT_String *newdatanameptr=NULL) |
SIM_Data * | getOrCreateAlternateRepresentation (const char *dataname, const char *datatype) const |
void | interpolateSubData (const SIM_Data &source1, const SIM_Data &source2, fpreal interp, const SIM_DataFilter &interpdata, const SIM_DataFilter &recurse) |
void | setNamedSubData (const char *dataname, const SIM_Data *data, int setflags) |
void | createUniqueSubDataName (const SIM_Data *subdata, UT_String &dataname) const |
void | removeNamedSubData (const char *dataname) |
Remove some existing sub-data by name. More... | |
void | removeSubData (int index) |
Remove some existing sub-data by index. More... | |
void | moveNamedSubData (const char *oldname, const char *newname) |
const UT_Guid & | getUniqueId () const |
long | getReferenceCount () const |
int | getCreatorId () const |
Get the ID of the node that created this data. More... | |
OP_Node * | getCreatorNode () const |
Use the creator ID to look up the OP_Node that created this data. More... | |
OP_Node * | getOwnerNetwork () const |
Look up the owner node of our engine to get the DOP Network pointer. More... | |
const SIM_Engine & | getEngine () const |
Get the engine that created us (from our data factory). More... | |
int | getCreatorIndex () const |
Get the output index of the creator node that generated this data. More... | |
const SIM_Time & | getCreationTime () const |
Get the creation time for this data. More... | |
bool | getIsSelected () const |
Get the selected flag for this data. More... | |
void | setIsSelected (bool selected) const |
bool | getSelectionRepresentsObject () const |
void | copyCreationInfoFrom (const SIM_Data *source) |
OP_Node & | getNodePathsRelativeTo () const |
OP_Node * | getOPNode (const char *path, bool addinterest) const |
Given a path relative to our creator node, return an OBJ_Node. More... | |
OBJ_Node * | getOBJNode (const char *path, bool addinterest) const |
Given a path relative to our creator node, return an OBJ_Node. More... | |
SOP_Node * | getSOPNode (const char *path, bool addinterest) const |
Given a path relative to our creator node, return a SOP_Node. More... | |
DOP_Node * | getDOPNode (const char *path, bool addinterest) const |
Given a path relative to our creator node, return a DOP_Node. More... | |
COP2_Node * | getCOP2Node (const char *path, bool addinterest) const |
Given a path relative to our creator node, return a COP2_Node. More... | |
CHOP_Node * | getCHOPNode (const char *path, bool addinterest) const |
Given a path relative to our creator node, return a CHOP_Node. More... | |
void | addOPInterest (OP_Node *node) const |
Adds an interest in the specified node to our engine's owner node. More... | |
void | addError (const SIM_RootData *root, int errorcode, const char *errorparm, UT_ErrorSeverity severity) const |
Adds an error to our SIM_Engine. More... | |
void | makeMemberDataUnique () |
virtual void | makeMemberDataUniqueSubclass () |
Static Public Member Functions | |
static const char * | getPropertyAttribName (const SIM_Property &property) |
static fpreal | getPropertyAtPositionStatic (const SIM_Object &object, const UT_Vector3 &worldpos, const SIM_Property &property) |
static fpreal | getPropertyAtPointStatic (const SIM_Object &object, GA_Index ptnum, const SIM_Property &property) |
static SIM_PropertyResolver * | getPropertyResolverStatic (const SIM_Object &object, const SIM_Property &property) |
Static resolver for getting property values. More... | |
![]() | |
static bool | getDataTypeFromFile (const char *filename, UT_String &datatype) |
static bool | getDataTypeFromStream (UT_IStream &is, UT_String &datatype) |
static const void * | castConstPointerToType (const SIM_Data *data, const UT_StringRef &datatype) |
static void * | castPointerToType (SIM_Data *data, const UT_StringRef &datatype) |
Protected Member Functions | |
SIM_Solver (const SIM_DataFactory *factory) | |
Basic SIM_Solver constructor. More... | |
~SIM_Solver () override | |
Basic SIM_Solver destructor. More... | |
bool | getStartTime (SIM_Time &time) |
void | clearStartTime () |
void | getSolverSubdata (SIM_SolverArray &subsolvers, UT_StringArray *subsolvernames) |
void | getConstSolverSubdata (SIM_ConstSolverArray &subsolvers, UT_StringArray *subsolvernames) const |
virtual bool | isStaticSubclass (const SIM_Object *obj) const |
Determines if this solver does nothing on the object. More... | |
virtual SIM_Result | solveObjectsSubclass (SIM_Engine &engine, SIM_ObjectArray &objects, SIM_ObjectArray &newobjects, SIM_ObjectArray &feedbacktoobjects, const SIM_Time ×tep)=0 |
virtual SIM_Result | postSolveObjectsSubclass (SIM_Engine &engine, SIM_ObjectArray &objects, SIM_ObjectArray &newobjects, SIM_ObjectArray &feedbacktoobjects, const SIM_Time ×tep) |
virtual SIM_Result | solveRelationshipSubclass (SIM_Engine &engine, SIM_Relationship &relationship, const SIM_Time ×tep) |
virtual int | getRequestedCacheSubclass () const |
virtual void | getImpulseMassMatrixSubclass (const SIM_Object &object, const UT_Vector3 &impulseworldpos, UT_DMatrix3 &immatrix) const |
virtual void | getPointImpulseMassMatrixSubclass (const SIM_Object &object, int ptnum, UT_DMatrix3 &immatrix) const |
virtual SIM_PointImpulseMassMatrixResolver * | getPointImpulseMassMatrixResolverSubclass (const SIM_Object &object) const |
Builds a resolver for evaluating mass matrices swiftly. More... | |
virtual fpreal | getPropertyAtPositionSubclass (const SIM_Object &object, const UT_Vector3 &worldpos, const SIM_Property &property) const |
virtual fpreal | getPropertyAtPointSubclass (const SIM_Object &object, int ptnum, const SIM_Property &property) const |
virtual SIM_PropertyResolver * | getPropertyResolverSubclass (const SIM_Object &object, const SIM_Property &property) const |
Builds a resolver for evaluating properties swiftly. More... | |
virtual void | getDefaultColliderLabelSubclass (const SIM_Object &object, UT_String &label) const |
Gets the default collider label for an object using this solver. More... | |
virtual void | getDefaultColliderSubclass (const SIM_Object &object, const UT_String &colliderlabel, UT_String &collidertype, bool &colliderreverseobjectroles) const |
![]() | |
SIM_Data (const SIM_DataFactory *factory) | |
virtual | ~SIM_Data () |
void | handleModification (int code=-1) |
void | setNeedsToRecalculateMemorySize () const |
void | deleteQueryObjectIfNotBuilding () const |
Deletes the query object for this data, if there is one. More... | |
void | deleteGuideObjectIfNotBuilding () const |
Delete the guide geometry for this data, if it exists. More... | |
void | initAlternateRepresentation () const |
void | setNeedsInitialization (bool needsinit) const |
Flags an alternate representation subdata as requiring initialization. More... | |
bool | getNeedsInitialization () const |
Tests whether an alternate representation requires initialization. More... | |
bool | saveOptionPacket (std::ostream &os, const char *name, const SIM_Options *opts) const |
bool | loadOptionPacket (UT_IStream &is, const char *name, SIM_Options *opts) const |
bool | getIsDoingSimplifiedSaveLoad () const |
void | initializeFromParmDefaults () |
void | setSelectionRepresentsObject (bool representsobject) |
virtual void | setNeedsInitializationSubclass (bool needsinit) const |
virtual void | initializeSubclass () |
virtual void | makeEqualSubclass (const SIM_Data *source) |
virtual void | saveSubclass (std::ostream &os) const |
virtual void | saveIOSubclass (std::ostream &os, SIM_DataThreadedIO *io) const |
virtual bool | loadSubclass (UT_IStream &is) |
virtual bool | loadIOSubclass (UT_IStream &is, SIM_DataThreadedIO *io) |
virtual SIM_Query * | createQueryObjectSubclass () const |
virtual long | getGuideParmVersionSubclass () const |
virtual SIM_Guide * | createGuideObjectSubclass () const |
virtual void | buildGuideGeometrySubclass (const SIM_RootData &root, const SIM_Options &options, const GU_DetailHandle &gdh, UT_DMatrix4 *xform, const SIM_Time &t) const |
virtual void | setParametersSubclass (const SIM_Options &parms) |
virtual void | setNamedSubDataSubclass (const char *dataname, const SIM_Data *data) |
virtual void | removeNamedSubDataSubclass (const char *dataname) |
virtual void | interpolateSubclass (const SIM_Data *source1, const SIM_Data *source2, fpreal interp) |
virtual int64 | getMemorySizeSubclass () const |
virtual void | handleModificationSubclass (int code) |
virtual bool | getIsAlternateRepresentationSubclass () const |
virtual void | initAlternateRepresentationSubclass (const SIM_Data &) |
virtual void * | getCastToType (const UT_StringRef &datatype) const |
virtual const UT_StringHolder & | getDataTypeSubclass () const |
const SIM_Data * | getAlternateRepresentationOf () const |
Additional Inherited Members | |
![]() | |
static const PRM_Template * | getEmptyTemplateList () |
static const SIM_DopDescription * | getEmptyDopDescription () |
A DOP description that says not to create an automatic DOP. More... | |
static void | getDataTypeSuperclasses (UT_StringArray &) |
This is the base class for all Solvers. Solvers are the classes that perform the actual simulation for objects. The solver is passed a set of objects with mutual affector relationships.
Definition at line 25 of file SIM_Solver.h.
The possible return codes from a solve operation. These are kept in order of priority to make multi-solvers easier to write. Any result value from a subsolver that is greater than the previous highest subsolver result becmoes the new overall return value.
Enumerator | |
---|---|
SIM_SOLVER_SUCCESS | |
SIM_SOLVER_REPEAT | |
SIM_SOLVER_SUBSTEP | |
SIM_SOLVER_FAIL |
Definition at line 32 of file SIM_Solver.h.
|
explicitprotected |
Basic SIM_Solver constructor.
|
overrideprotected |
Basic SIM_Solver destructor.
|
protected |
|
protected |
Gets an array of const SIM_Solver subdata attached to this data. Useful for solvers which switch between or run other solvers.
void SIM_Solver::getDefaultCollider | ( | const SIM_Object & | object, |
const UT_String & | colliderlabel, | ||
UT_String & | collidertype, | ||
bool & | colliderreverseobjectroles | ||
) | const |
Gets the default collider type for use on an object with a particular collider label. This information is used by SIM_Object::getCollider() to create a SIM_Collider to use for collision detection betweena pair of objects. The collidertype value returns the name of the SIM_Collider subclass to use, and the collidereverseobjectroles parameter returns whether the reverse object roles flag should be turned on for the new collider. See the ReverseObjectRoles flag in SIM_Collider for an explanation of this parameter.
void SIM_Solver::getDefaultColliderLabel | ( | const SIM_Object & | object, |
UT_String & | label | ||
) | const |
Gets the default collider label for an object using this solver.
|
protectedvirtual |
Gets the default collider label for an object using this solver.
Reimplemented in SIM_SolverEnable, RBD_Solver, SIM_SolverSwitch, SIM_SolverBlend, and SIM_SolverMulti.
|
protectedvirtual |
Gets the default collider type for use on an object with a particular collider label.
Reimplemented in SIM_SolverEnable, RBD_Solver, SIM_SolverSwitch, SIM_SolverBlend, and SIM_SolverMulti.
void SIM_Solver::getImpulseMassMatrix | ( | const SIM_Object & | object, |
const UT_Vector3 & | impulseworldpos, | ||
UT_DMatrix3 & | immatrix | ||
) | const |
Gets the impulse mass matrix of an object for an impulse at the provided world space position. This function simply calls getImpulseMassMatrixSubclass().
|
protectedvirtual |
Gets the impulse mass matrix of an object for an impulse at the provided world space position. The default implementation gets the closest point in the geometry and calls getPointImpulseMassMatrix().
Reimplemented in GAS_Integrator, SIM_SolverEnable, RBD_Solver, GAS_SubStep, SIM_SolverSwitch, SIM_SolverBlend, and SIM_SolverMulti.
void SIM_Solver::getPointImpulseMassMatrix | ( | const SIM_Object & | object, |
GA_Index | ptnum, | ||
UT_DMatrix3 & | immatrix | ||
) | const |
Gets the impulse mass matrix of an object for an impulse at the provided point on the geometry of the object. This function simply calls getPointImpulseMassMatrixSubclass().
SIM_PointImpulseMassMatrixResolver* SIM_Solver::getPointImpulseMassMatrixResolver | ( | const SIM_Object & | object | ) | const |
Builds a resolver to efficiently compute mass matrices.
|
protectedvirtual |
Builds a resolver for evaluating mass matrices swiftly.
Reimplemented in GAS_Integrator, SIM_SolverEnable, GAS_SubStep, SIM_SolverSwitch, SIM_SolverBlend, and SIM_SolverMulti.
|
protectedvirtual |
Gets the impulse mass matrix of an object for an impulse at the provided point on the geometry of the object. The default implementation finds the world space position of the point and calls getImpulseMassMatrix().
Reimplemented in GAS_Integrator, SIM_SolverEnable, RBD_Solver, GAS_SubStep, SIM_SolverSwitch, SIM_SolverBlend, and SIM_SolverMulti.
fpreal SIM_Solver::getPropertyAtPoint | ( | const SIM_Object & | object, |
GA_Index | ptnum, | ||
const SIM_Property & | property | ||
) | const |
Gets the value of some physical property for the supplied object at a given point on the object's geometry. This function simply calls getPropertyAtPointSubclass().
|
static |
Static method that implements a good standard approach to getting a property at a given point number.
|
protectedvirtual |
Gets the value of some physical property for the supplied object at a given point on the object's geometry.
Reimplemented in GAS_SubSolver, SIM_SolverEnable, RBD_Solver, SIM_SolverSwitch, SIM_SolverBlend, and SIM_SolverMulti.
fpreal SIM_Solver::getPropertyAtPosition | ( | const SIM_Object & | object, |
const UT_Vector3 & | worldpos, | ||
const SIM_Property & | property | ||
) | const |
Gets the value of some physical property for the supplied object at a given position in world space. This function simply calls getPropertyAtPositionSubclass().
|
static |
Static method that implements a good standard approach to getting a property at a given position.
|
protectedvirtual |
Gets the value of some physical property for the supplied object at a given position in world space.
Reimplemented in GAS_SubSolver, SIM_SolverEnable, RBD_Solver, SIM_SolverSwitch, SIM_SolverBlend, and SIM_SolverMulti.
|
static |
Returns the standard attribute name that corresponds to a given SIM_Property value.
SIM_PropertyResolver* SIM_Solver::getPropertyResolver | ( | const SIM_Object & | object, |
const SIM_Property & | property | ||
) | const |
Builds a resolver to efficiently compute property values.
|
static |
Static resolver for getting property values.
|
protectedvirtual |
Builds a resolver for evaluating properties swiftly.
Reimplemented in GAS_SubSolver.
int SIM_Solver::getRequestedCache | ( | ) | const |
Get the number of cached time steps we want to solve for these objects. This function calls getRequestedCacheSubclass to get the real value.
|
protectedvirtual |
Returns the amount of history required by this solver. Override this function if your solver requires past data to calculate the next time step. The default implementation returns 0.
Reimplemented in SIM_SolverEnable, SIM_SolverSwitch, SIM_SolverBlend, and SIM_SolverMulti.
|
protected |
Gets an array of SIM_Solver subdata attached to this data. Useful for solvers which switch between or run other solvers.
|
protected |
|
inline |
Definition at line 136 of file SIM_Solver.h.
|
inlineprotectedvirtual |
Determines if this solver does nothing on the object.
Reimplemented in SIM_SolverEnable, SIM_SolverSwitch, and SIM_SolverStatic.
Definition at line 159 of file SIM_Solver.h.
SIM_Result SIM_Solver::postSolveObjects | ( | SIM_Engine & | engine, |
SIM_ObjectArray & | objects, | ||
SIM_ObjectArray & | newobjects, | ||
SIM_ObjectArray & | feedbacktoobjects, | ||
const SIM_Time & | timestep | ||
) |
|
inlineprotectedvirtual |
Reimplemented in GAS_SubSolver.
Definition at line 176 of file SIM_Solver.h.
SIM_Result SIM_Solver::solveObjects | ( | SIM_Engine & | engine, |
SIM_ObjectArray & | objects, | ||
SIM_ObjectArray & | newobjects, | ||
SIM_ObjectArray & | feedbacktoobjects, | ||
const SIM_Time & | timestep | ||
) |
Solve for the given objects. This function is called for each timestep after the one where the objects are first created. This function calls solveObjectSubclass to perform the real work.
|
protectedpure virtual |
This method solves for some objects. It performs whatever processing is necessary to take objects from their state at one time to another. The default implementation does nothing. The objects parameter holds all the objects that should be solved for this timestep. The newobjects parameter is a set of objects that were just created in this timestep, and so should in most cases not be solved on this timestep so that they maintain correct initial conditions.
Implemented in GAS_Integrator, SIM_SolverEnable, RBD_Solver, GAS_SubSolver, SIM_SolverScript, SIM_SingleSolver, GAS_SubStep, SIM_SolverBlend, SIM_SolverSwitch, GAS_RepeatSolver, SIM_SolverMulti, and GAS_EachDataSolver.
SIM_Result SIM_Solver::solveRelationship | ( | SIM_Engine & | engine, |
SIM_Relationship & | relationship, | ||
const SIM_Time & | timestep | ||
) |
Solves for a relationship. Invoked if "Solver" is a subdata of a SIM_Relationship data.
|
inlineprotectedvirtual |
Reimplemented in SIM_SolverEnable, SIM_SolverSop, SIM_SolverSwitch, and SIM_SolverMulti.
Definition at line 182 of file SIM_Solver.h.