HDK
|
#include <SIM_Force.h>
Public Types | |
enum | SIM_ForceSample { SIM_FORCE_SAMPLEPOINT, SIM_FORCE_SAMPLECIRCLE, SIM_FORCE_SAMPLESPHERE } |
Public Member Functions | |
void | getForce (const SIM_Object &object, const UT_Vector3 &position, const UT_Vector3 &velocity, const UT_Vector3 &angvel, const fpreal mass, UT_Vector3 &force, UT_Vector3 &torque) const |
bool | getForceSet (const SIM_Object &object, const UT_Vector3Array &positions, const UT_Vector3Array &velocities, const UT_Vector3Array &angvelocities, const UT_FloatArray &masses, UT_Vector3Array &forces, UT_Vector3Array &torques) const |
SIM_ForceResolver * | getForceResolver (const SIM_Object &object) const |
void | getForceOnCircle (const SIM_Object &object, const UT_Vector3 &position, const UT_Vector3 &normal, const fpreal radius, const UT_Vector3 &velocity, const UT_Vector3 &angvel, const fpreal mass, UT_Vector3 &force, UT_Vector3 &torque) const |
void | getForceOnSphere (const SIM_Object &object, const UT_Vector3 &position, const fpreal radius, const UT_Vector3 &velocity, const UT_Vector3 &angvel, const fpreal mass, UT_Vector3 &force, UT_Vector3 &torque) const |
void | getForceJacobian (const SIM_Object &object, const UT_Vector3 &position, const UT_Vector3 &velocity, const UT_Vector3 &angvel, const fpreal mass, UT_Matrix &dFdX, UT_Matrix &dFdV) const |
SIM_ForceSample | getOptimalForceSampling () const |
void | getPointForces (SIM_PointForceCallback &cb, const SIM_Object &object, const GU_ConstDetailHandle &gdh, const UT_DMatrix4 &geoxform, const SIM_Position *position, const SIM_Motion *motion, bool forcesinworldspace) 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 () |
Protected Member Functions | |
SIM_Force (const SIM_DataFactory *factory) | |
~SIM_Force () override | |
void | applyNoise (const UT_Vector3 &pos, UT_Vector3 &forceortorque) const |
void | applyNoise (const UT_Vector3 &pos, UT_Vector3 &force, UT_Vector3 &torque) const |
void | applyNoiseJacobian (const UT_Vector3 &pos, UT_Matrix &dFdX, UT_Matrix &dFdV) const |
virtual void | getForceSubclass (const SIM_Object &object, const UT_Vector3 &position, const UT_Vector3 &velocity, const UT_Vector3 &angvel, const fpreal mass, UT_Vector3 &force, UT_Vector3 &torque) const |
virtual SIM_ForceResolver * | getForceResolverSubclass (const SIM_Object &object) const |
virtual bool | getForceSetSubclass (const SIM_Object &object, const UT_Vector3Array &positions, const UT_Vector3Array &velocities, const UT_Vector3Array &angvelocities, const UT_FloatArray &masses, UT_Vector3Array &forces, UT_Vector3Array &torque) const |
virtual void | getForceOnCircleSubclass (const SIM_Object &object, const UT_Vector3 &position, const UT_Vector3 &normal, const fpreal radius, const UT_Vector3 &velocity, const UT_Vector3 &angvel, const fpreal mass, UT_Vector3 &force, UT_Vector3 &torque) const |
virtual void | getForceOnSphereSubclass (const SIM_Object &object, const UT_Vector3 &position, const fpreal radius, const UT_Vector3 &velocity, const UT_Vector3 &angvel, const fpreal mass, UT_Vector3 &force, UT_Vector3 &torque) const |
virtual void | getForceJacobianSubclass (const SIM_Object &object, const UT_Vector3 &position, const UT_Vector3 &velocity, const UT_Vector3 &angvel, const fpreal mass, UT_Matrix &dFdX, UT_Matrix &dFdV) const |
virtual SIM_ForceSample | getOptimalForceSamplingSubclass () 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 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) |
![]() | |
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 definition of the SIM_Force interface. The only function that needs to be overridden (besides any standard SIM_Data overrides) is the getForceSubclass() function.
Definition at line 46 of file SIM_Force.h.
Enumerator | |
---|---|
SIM_FORCE_SAMPLEPOINT | |
SIM_FORCE_SAMPLECIRCLE | |
SIM_FORCE_SAMPLESPHERE |
Definition at line 49 of file SIM_Force.h.
|
explicitprotected |
|
overrideprotected |
|
protected |
Looks for a SIM_Noise subdata and multiplies the force or torque vector by the noise value at the specified position.
|
protected |
Looks for a SIM_Noise subdata and multiplies the force and torque vector by the noise value at the specified position. This is equivalent to calling the alternate applyNoise function twice, but eliminates the need to look up the noise value twice.
|
protected |
The dFdX and dFdV jacobians should already be filled out with the jacobians of this force prior to noise. They are then scaled to match the magnitude of the noise at this location.
void SIM_Force::getForce | ( | const SIM_Object & | object, |
const UT_Vector3 & | position, | ||
const UT_Vector3 & | velocity, | ||
const UT_Vector3 & | angvel, | ||
const fpreal | mass, | ||
UT_Vector3 & | force, | ||
UT_Vector3 & | torque | ||
) | const |
Returns the force and torque applied by this force to a point. This function calls getForceSubclass().
void SIM_Force::getForceJacobian | ( | const SIM_Object & | object, |
const UT_Vector3 & | position, | ||
const UT_Vector3 & | velocity, | ||
const UT_Vector3 & | angvel, | ||
const fpreal | mass, | ||
UT_Matrix & | dFdX, | ||
UT_Matrix & | dFdV | ||
) | const |
Returns the derivatives of force & torque with respect to position and velocity. The jacobians are 6x6 matrices which will be initialized as UT_Matrix(1, 6, 1, 6).
|
protectedvirtual |
Returns the derivatives of force & torque with respect to position and velocity. The jacobians are 6x6 matrices indexed from 1 (ie, dFdX(1,1) is first element). The default behaviour is to return 0 matrices. Note that the matrices are already initialized to 0 when this is called.
Reimplemented in SIM_ForceField, and SIM_ForceDrag.
void SIM_Force::getForceOnCircle | ( | const SIM_Object & | object, |
const UT_Vector3 & | position, | ||
const UT_Vector3 & | normal, | ||
const fpreal | radius, | ||
const UT_Vector3 & | velocity, | ||
const UT_Vector3 & | angvel, | ||
const fpreal | mass, | ||
UT_Vector3 & | force, | ||
UT_Vector3 & | torque | ||
) | const |
Returns the force and torque applied by this force to a circle. This function calls getForceOnCircleSubclass().
|
protectedvirtual |
Returns the force and torque applied by this force to a circle. The outputs may be modified according to the information passed in about the object to which the force is being applied. The default implementation calls getForce() and assumes this is the force on a unit area. So the force and torque are then scaled by the area of the circle.
Reimplemented in HDK_Sample::SIM_ForceOrbit, SIM_ForceField, SIM_ForceFan, SIM_ForceImpulse, SIM_ForceVelImpulse, SIM_ForceGravity, and SIM_ForceDrag.
void SIM_Force::getForceOnSphere | ( | const SIM_Object & | object, |
const UT_Vector3 & | position, | ||
const fpreal | radius, | ||
const UT_Vector3 & | velocity, | ||
const UT_Vector3 & | angvel, | ||
const fpreal | mass, | ||
UT_Vector3 & | force, | ||
UT_Vector3 & | torque | ||
) | const |
Returns the force and torque applied by this force to a sphere. This function calls getForceOnSphereSubclass().
|
protectedvirtual |
Returns the force and torque applied by this force to a sphere. The outputs may be modified according to the information passed in about the object to which the force is being applied. The default implementation calls getForce() and assumes that the result is a force per unit volume. The force and torque are then scaled by the volume of the sphere.
Reimplemented in HDK_Sample::SIM_ForceOrbit, SIM_ForceImpulse, SIM_ForceVelImpulse, SIM_ForceGravity, and SIM_ForceBuoyancy.
SIM_ForceResolver* SIM_Force::getForceResolver | ( | const SIM_Object & | object | ) | const |
Creates a resolver to evaluate this force on the given object. The caller must delete the returned resolver.
|
protectedvirtual |
Creates a force resolver to evaluate this force in a threadsafe manner.
Reimplemented in SIM_ForceDrag, SIM_ForceField, SIM_ForcePoint, SIM_ForceFan, SIM_ForceUniform, SIM_ForceReferenceFrame, SIM_ForceBuoyancy, SIM_ForceImpulse, SIM_ForceVelImpulse, and SIM_ForceGravity.
bool SIM_Force::getForceSet | ( | const SIM_Object & | object, |
const UT_Vector3Array & | positions, | ||
const UT_Vector3Array & | velocities, | ||
const UT_Vector3Array & | angvelocities, | ||
const UT_FloatArray & | masses, | ||
UT_Vector3Array & | forces, | ||
UT_Vector3Array & | torques | ||
) | const |
Returns the forces and torques applied by this force to a list of points. This function calls getForceSetSubclass(). This function is available so that subclasses that implement getForceSetSubclass can make use of multithreading for a set of force calculations. Returns true if ok, false otherwise. (We use this return value to determine whether or not a subclass actually implements this function)
|
protectedvirtual |
Returns the forces and torques applied by this force to a list of points. Returns true if ok, false otherwise. This return value is used to determine whether or not subclasses actually implement this function. If this is implemented, it is the implementations responsibility to resize the forces & torque arrays appropriately.
Reimplemented in SIM_ForceVortex, and SIM_ForceVex.
|
protectedvirtual |
Returns the force and torque applied by this force to a point. The outputs may be modified according to the information passed in about the object to which the force is being applied. The default implementation sets the force and torque to zero.
Reimplemented in HDK_Sample::SIM_ForceOrbit, SIM_ForceVortex, SIM_ForceField, SIM_ForcePoint, SIM_ForceFan, SIM_ForceUniform, SIM_ForceReferenceFrame, SIM_ForceDrag, SIM_ForceMagnet, SIM_ForceBuoyancy, SIM_ForceImpulse, SIM_ForceVelImpulse, SIM_ForceGravity, and SIM_ForceVex.
SIM_ForceSample SIM_Force::getOptimalForceSampling | ( | ) | const |
Allows solvers to query what the optimal sampling type for this force would be. Solvers do not have to respect this. This should be user overrideable so users can trade efficiency for accuracy.
|
protectedvirtual |
Allows solvers to query what the optimal sampling type for this force would be. Solvers do not have to respect this. This should be user overrideable so users can trade efficiency for accuracy.
Reimplemented in SIM_ForceVortex, SIM_ForceField, SIM_ForceImpulse, SIM_ForceVelImpulse, SIM_ForceGravity, SIM_ForceFan, SIM_ForceDrag, SIM_ForceBuoyancy, SIM_ForcePoint, SIM_ForceUniform, SIM_ForceReferenceFrame, SIM_ForceMagnet, and SIM_ForceVex.
void SIM_Force::getPointForces | ( | SIM_PointForceCallback & | cb, |
const SIM_Object & | object, | ||
const GU_ConstDetailHandle & | gdh, | ||
const UT_DMatrix4 & | geoxform, | ||
const SIM_Position * | position, | ||
const SIM_Motion * | motion, | ||
bool | forcesinworldspace | ||
) | const |
This is a convenience function for applying a force to each point in a piece of geometry. For each point in the geometry, the force on that point is calculated with the getForce() function. The result of each call is passed to the SIM_PointForceCallback::forceCallback() function, along with the point number. The position, velocity, and mass for each point come from the point attributes (if they exist), modified by the SIM_Position or SIM_Motion data if they are passed in.