HDK
|
#include <SIM_ConAnchorSpatial.h>
Public Types | |
enum | SIM_DOFType { DOF_SPACE = 0, DOF_PLANE = 1, DOF_LINE = 2, DOF_POINT = 3 } |
Public Member Functions | |
GETSET_DATA_FUNCS_E (SIM_NAME_CONDOF, DOFTypeInput, SIM_DOFType) | |
GETSET_DATA_FUNCS_V3 (SIM_NAME_CONDIR, DOFVectorInput) | |
SIM_DOFType | getDOFType () const |
Overridable get/set for the DOF of the constraint. More... | |
void | setDOFType (const SIM_DOFType type) |
const UT_Vector3 | getDOFVector () const |
void | setDOFVector (const UT_Vector3 &vector) |
UT_Vector3 | getPosition (const SIM_Time &time) const |
Retrieve the world-space position to constrain to. More... | |
UT_Vector3 | getVelocity (const SIM_Time &time) const |
int | getNumConDOFs () const |
Retrieve number of constrained degrees of freedom. More... | |
void | getConDOFFilter (UT_Matrix3 &result, const SIM_Time &time) const |
void | getUnconDOFFilter (UT_Matrix3 &result, const SIM_Time &time) const |
![]() | |
const SIM_Object * | getReferencedObject (const SIM_Time &time) const |
bool | getNeedsInit () const |
void | initAnchor (const SIM_Object *object) |
bool | getObjectSpecification (UT_String &str) const |
void | initConstraint (const SIM_Relationship *rel) |
void | buildAnchorGuideGeometry (const SIM_Options &options, const GU_DetailHandle &gdh, const SIM_Relationship &rel, const SIM_Time &t) 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 |
Static Public Member Functions | |
static GA_Offset | buildAnchorGuideGeometry (GU_Detail *gdp, const UT_Vector3 &anchor_pos, int dofType, UT_Vector3 dofVector, fpreal scale, const GA_RWHandleV3 &colour_attrib, const UT_Vector3 &color, bool show_object_link, bool is_affecting_object, const UT_Vector3 &obj_pos) |
Static method for rendering the guide geometry for this type of anchor. 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_ConAnchorSpatial (const SIM_DataFactory *factory) | |
~SIM_ConAnchorSpatial () override | |
void | buildAnchorGuideGeometrySubclass (const SIM_Options &options, const GU_DetailHandle &gdh, const SIM_Relationship &rel, const SIM_Time &t) const override |
Default implementation does nothing. More... | |
virtual UT_Vector3 | getPositionSubclass (const SIM_Time &time) const =0 |
virtual UT_Vector3 | getVelocitySubclass (const SIM_Time &) const |
virtual SIM_DOFType | getDOFTypeSubclass () const |
virtual const UT_Vector3 | getDOFVectorSubclass () const |
![]() | |
SIM_ConAnchor (const SIM_DataFactory *factory) | |
~SIM_ConAnchor () override | |
void | setReferencedObject (const SIM_Object *object) |
virtual bool | getNeedsInitSubclass () const |
virtual void | initAnchorSubclass (const SIM_Object *object) |
virtual bool | getObjectSpecificationSubclass (UT_String &str) const |
Implements the real functionality of getObjectSpecification. More... | |
virtual void | initConstraintSubclass (const SIM_Relationship *rel) |
![]() | |
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) |
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 &) |
Normally, constraints affect all three positional degrees of freedom of an object. Some constraints, however, can limit their action to only one or two degrees of freedom. For example, a hard constraint might only force geometry to follow the anchor in y, and leave the x and z DOFs unconstrained. In these situations, the constraint is completely independent of the unconstrained DOFs - movement of the geometry in unconstrained directions has no effect on the constraint (e.g., doesn't affect springs), and the constraint never has an effect in these DOFs (e.g., the constraint will never cause movement in x or z in the earlier example).
Definition at line 28 of file SIM_ConAnchorSpatial.h.
We categorize constraints by the shape created by sweeping a point through unconstrained space. The numerical representation is thus the number of degrees that have been constrained. "DOF" stands for "degrees of freedom".
Enumerator | |
---|---|
DOF_SPACE | |
DOF_PLANE |
Any point in space is valid. (i.e., constraint has no effect) |
DOF_LINE |
Any point on a plane is valid. |
DOF_POINT |
Any point on a line is valid. |
Definition at line 35 of file SIM_ConAnchorSpatial.h.
|
explicitprotected |
|
overrideprotected |
|
static |
Static method for rendering the guide geometry for this type of anchor.
|
overrideprotectedvirtual |
Default implementation does nothing.
Reimplemented from SIM_ConAnchor.
void SIM_ConAnchorSpatial::getConDOFFilter | ( | UT_Matrix3 & | result, |
const SIM_Time & | time | ||
) | const |
Returns a matrix that, when multiplied by a vector, gives only the components of the vector that are constrained.
SIM_DOFType SIM_ConAnchorSpatial::getDOFType | ( | ) | const |
Overridable get/set for the DOF of the constraint.
|
protectedvirtual |
Reimplemented in SIM_ConAnchorObjPointGroupPos.
const UT_Vector3 SIM_ConAnchorSpatial::getDOFVector | ( | ) | const |
|
protectedvirtual |
Reimplemented in SIM_ConAnchorObjPointGroupPos.
int SIM_ConAnchorSpatial::getNumConDOFs | ( | ) | const |
Retrieve number of constrained degrees of freedom.
UT_Vector3 SIM_ConAnchorSpatial::getPosition | ( | const SIM_Time & | time | ) | const |
Retrieve the world-space position to constrain to.
|
protectedpure virtual |
Implemented in SIM_ConAnchorObjPointPos, SIM_ConAnchorObjPrimPos, SIM_ConAnchorWorldSpacePos, and SIM_ConAnchorObjSpacePos.
SIM_ConAnchorSpatial::GETSET_DATA_FUNCS_E | ( | SIM_NAME_CONDOF | , |
DOFTypeInput | , | ||
SIM_DOFType | |||
) |
SIM_ConAnchorSpatial::GETSET_DATA_FUNCS_V3 | ( | SIM_NAME_CONDIR | , |
DOFVectorInput | |||
) |
All constraints are represented by a vector which is interpreted differently depending on how many DOF will be constrained. This is troublesome as it only works in 3d. Ideally, we should specify two types of constraints: If P is the point to constrain, and R the rest point, and V the vector, we have: Normal constraint: dot(V, P) = dot(V, R) This removes one degree of freedom. Equivalent to PLANE. Vector constraint: P - R = s V, for some s This removes all but one degree of freedom. Equivalent to LINE. The result of this is always normalized.
We can then define the UnconDOFFilter which, when applied to a velocity, will cause it to fulfill those conditions. We can then clamp a position P to a rest position R with the filter uF with: P' = (uF * (P - R)) + R (Note that we can also use the ConDOFFilter with the following equation: P' = (F * (R - P)) + P We present it with the unconstrained case to match the rotational case which is harder to rearrange)
This vector is defined in simulation space, and may not be normalized.
void SIM_ConAnchorSpatial::getUnconDOFFilter | ( | UT_Matrix3 & | result, |
const SIM_Time & | time | ||
) | const |
Opposite of getConDOFFilter(). getUnconDOFFilter() = identity - getConDOFFilter()
UT_Vector3 SIM_ConAnchorSpatial::getVelocity | ( | const SIM_Time & | time | ) | const |
|
protectedvirtual |
Reimplemented in SIM_ConAnchorObjPointPos, SIM_ConAnchorObjPrimPos, SIM_ConAnchorWorldSpacePos, and SIM_ConAnchorObjSpacePos.
void SIM_ConAnchorSpatial::setDOFType | ( | const SIM_DOFType | type | ) |
void SIM_ConAnchorSpatial::setDOFVector | ( | const UT_Vector3 & | vector | ) |