|
| void | getCollisionsDeformable (SIM_IsectArray &collisions, SIM_Object &object, SIM_Object &affector, fpreal tolerance, const SIM_Time &startTime, const SIM_Time &endTime, bool doRepulsion) const |
| |
| void | getCollisionsRigid (SIM_IsectArray &collisions, SIM_Object &object, SIM_Object &affector, fpreal tolerance, const SIM_Time &startTime, const SIM_Time &endTime, const UT_DMatrix4 &startXformA, const UT_DMatrix4 &startXformB, const UT_DMatrix4 &endXformA, const UT_DMatrix4 &endXformB) const |
| |
| | simDetail (int objectId, const GU_Detail &gdp, const SIM_TriangulatedGeometry *tgeo, const UT_DMatrix4 &startXform, const UT_DMatrix4 &endXform, const SIM_Time &startTime, const SIM_Time &endTime) |
| |
| int | getObjectId () const |
| |
| const GU_Detail & | getGdp () const |
| |
| bool | operator== (const simDetail &rhs) const |
| |
| const SIM_Time & | getStartTime () const |
| |
| const SIM_Time & | getEndTime () const |
| |
| const SIM_Time | getTimestep () const |
| |
| int | getTriPointId (int fid, int vid) const |
| | Get point id of vertex on a given face. Optimized for triangles. More...
|
| |
| int | getPrimPointId (int fid, int vid) const |
| | Unoptimized version of getTriPointId for arbitrary primitives. More...
|
| |
| bool | hasTriEdgeIds () const |
| |
| int | getTriEdgeId (int fid, int vid) const |
| |
| int | getFusePointId (int pid) const |
| |
| bool | hasFusePointIds () const |
| |
| UT_Vector3 | getDetailPointPos (int pid) const |
| |
| const UT_Vector3 & | getPointVel (int pid) const |
| |
| float | getPointMass (int pid) const |
| |
| const UT_Vector3 & | getPointStartPos (int pid) const |
| |
| const UT_Vector3 & | getPointEndPos (int pid) const |
| |
| UT_Vector3 | getPointPos (int pid, const SIM_Time &time) const |
| |
| UT_Vector3 | getTriBaryPos (int primId, const UT_Vector3 &baryV3, const SIM_Time &time) const |
| |
| UT_Vector3 | getTriBaryVel (int primId, const UT_Vector3 &baryV3) const |
| |
| fpreal | getTriBaryMass (int primId, const UT_Vector3 &baryV3) const |
| |
| UT_Vector3 | getTriEdgePos (int primId, int eid, fpreal bary, const SIM_Time &time) const |
| | Get a position of a point somewhere on the edge of a triangle. More...
|
| |
| UT_Vector3 | getPrimEdgePos (int primId, int eid, fpreal bary, const SIM_Time &time) const |
| | Optimized variant of getTriEdgePos for non-triangular primitives. More...
|
| |
| UT_Vector3 | getTriStartBaryCenter (int primId) const |
| |
| bool | setPointChecked (int primIdA, const simDetail &sdpB, int pidB) |
| |
| bool | setEdgeChecked (int eidA, const simDetail &sdpB, int eidB) |
| |
| | simPrimPairEvent (int primId0, int primId1, int edgeId0, int edgeId1, fpreal radius0, fpreal radius1, int &adjacent) |
| |
| | GETSET_DATA_FUNCS_B (SIM_NAME_REVERSEOBJECTROLES, ReverseObjectRoles) |
| |
| bool | collideObjects (SIM_Engine &engine, SIM_Object &object, SIM_Object &affector, const SIM_Time &starttime, const SIM_Time &endtime, SIM_ImpactApplyType impactapplytype, int impactflags) const |
| |
| bool | collideObjects (SIM_Engine &engine, SIM_Object &object, SIM_Object &affector, const SIM_Time &starttime, const SIM_Time &endtime, SIM_ImpactApplyType impactapplytype, int impactflags, UT_ValArray< SIM_ColliderCacheData * > &objcachedata, UT_ValArray< SIM_ColliderCacheData * > &affectorcachedata) 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 () |
| |
| | SIM_OptionsUser (SIM_Data *owner) |
| |
| virtual | ~SIM_OptionsUser () |
| |
| void | optionChanged (const char *name) |
| |
| const SIM_Options & | getOptions () const |
| |
|
| | SIM_ColliderBFA (const SIM_DataFactory *factory) |
| |
| | ~SIM_ColliderBFA () override |
| |
| virtual SIM_BVTree::simBVTreeType | getBVTreeType () const |
| |
| virtual BV_LeafIterator * | createLeafIt (const SIM_Object &object, const SIM_Time ×tep, bool startPosOnly) const =0 |
| |
| virtual void | convertLeafToPrim (const BV_LeafIterator &leafIt, int leafId, int &outPrimId, int &outEdgeId) const =0 |
| |
| virtual fpreal | getLeafRadius (const BV_LeafIterator &leafIt, int leafId) const =0 |
| |
| virtual bool | getEventsAtSurface () const |
| |
| void | retrieveGeometry (const SIM_Object &object, GU_ConstDetailHandle &outGdh, const GU_Detail *&outGdp, UT_DMatrix4 *outEndTransform, const SIM_TriangulatedGeometry **tgeo) const |
| |
| bool | testFaceSharesPoint (const simDetail &sdpF, int pidF0, int pidF1, int pidF2, const simDetail &sdpV, int pidV) const |
| |
| bool | testEdgesSharePoint (const simDetail &sdpA, int pidA0, int pidA1, const simDetail &sdpB, int pidB0, int pidB1) const |
| |
| virtual bool | doCheckTangle () const |
| |
| virtual void | intersectPrims (simPrimPairEvent &event, simDetail &sdpA, simDetail &sdpB, fpreal tolerance, bool doRepulsion, bool selfCollision) const |
| |
| | SIM_Collider (const SIM_DataFactory *factory) |
| | The SIM_Collider constructor. More...
|
| |
| | ~SIM_Collider () override |
| | The SIM_Collider destructor. More...
|
| |
| SIM_Impacts * | getObjectImpactData (SIM_Object &object, SIM_ImpactApplyType impactapplytype) const |
| |
| SIM_Impacts * | getAffectorImpactData (SIM_Object &affector, SIM_ImpactApplyType impactapplytype) const |
| |
| bool | getAffectorInterpolatedToEndTime () const |
| |
| virtual bool | collideObjectsSubclass (SIM_Engine &engine, SIM_Object &object, SIM_Object &affector, const SIM_Time &starttime, const SIM_Time &endtime, SIM_ImpactApplyType impactapplytype, int impactflags) const |
| |
| virtual bool | collideObjectsCachedSubclass (SIM_Engine &engine, SIM_Object &object, SIM_Object &affector, const SIM_Time &starttime, const SIM_Time &endtime, SIM_ImpactApplyType impactapplytype, int impactflags, UT_ValArray< SIM_ColliderCacheData * > &objcachedata, UT_ValArray< SIM_ColliderCacheData * > &affectorcachedata) const |
| |
| virtual bool | getAffectorInterpolatedToEndTimeSubclass () 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 |
| |
| SIM_Options & | getOptions () |
| |
| virtual void | optionChangedSubclass (const char *name) |
| |
A single potential-collision event involving a pair of primitives.
This class implements a cloth-cloth collider based on Bridson's 2002 paper (BriFedAnd02). We use it for several types of deformable collisions: cloth-cloth, cloth-hair and hair-hair. We also use it for thin plate rigid body collisions. This class can only be used for collision detection. The cloth subclass does the Bridson/Fedkiw/Anderson collision response.
For deformable objects, the input objects should be updated to the end-of-step positions and velocities. This collider will proposes changes to that end-of-step velocity which can then be used to obtain a new end-of-step position. The start-of-step position is calculated by assuming that explicit integration was used - i.e., by computing x - dt*v.
This class does both self-collision and object/object collision. It supports "point fusing," where two points in the same object (or one point in each of the two objects) are fused together into a single virtual point. (Typically, the user sets that up using a hard DOPs constraint.) For collision purposes, those points are treated as a single point - so, if two edges collide, but they share a virtual point as an endpoint, the collision will be ignored.
Definition at line 142 of file SIM_ColliderBFA.h.