![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2001 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: kinState.h,v $ $Revision: 1.28 $ $State: Exp $ 00007 *******************************************************************************/ 00008 #ifndef kinState_H_ 00009 #define kinState_H_ 00010 00013 00014 #include "vrfobjcore/kinStateCS.h" 00015 #include "vrfutil/rdrWritr.h" 00016 #include <vlpi/disEnums.h> 00017 #include "vrfobjcore/csValidVec.h" 00018 #include "vrfutil/rwVector.h" 00019 #include "vrfutil/vertexList.h" 00020 00021 #include <matrix/vlTaitBryan.h> 00022 00023 class DtVertexList; 00024 class DtSimObjectStateRepository; 00025 class DtRwVectorIterator; 00026 00033 #include "vrfobjcore/vrfobjcoreDefines.h" 00034 class DT_DLL_vrfobjcore DtSimKinematicState : public DtReaderWriter 00035 { 00036 public: 00037 00039 DtSimKinematicState(DtSimObjectStateRepository* stateRep, 00040 const DtString& name = DtString::nullString(), 00041 DtReaderWriterRegistry * parentRegistry = NULL); 00042 00043 DtSimKinematicState(DtSimObjectStateRepository* stateRep, 00044 const DtSymbolString& name, 00045 DtReaderWriterRegistry * parentRegistry = NULL); 00046 00048 DtSimKinematicState(const DtSimKinematicState& orig, 00049 const DtString& name = DtString::nullString(), 00050 DtReaderWriterRegistry * parentRegistry = 0); 00051 00052 DtSimKinematicState(const DtSimKinematicState& orig, 00053 const DtSymbolString& name, 00054 DtReaderWriterRegistry * parentRegistry = 0); 00055 00057 const DtSimKinematicState& operator=(const DtSimKinematicState& orig); 00058 00060 virtual ~DtSimKinematicState(); 00061 00063 virtual DtSimKinematicState* clone(const DtString& name = DtString::nullString(), 00064 DtReaderWriterRegistry* parentRegistry = NULL) const; 00065 00066 virtual DtSimKinematicState* clone(const DtSymbolString& name, 00067 DtReaderWriterRegistry* parentRegistry = NULL) const; 00068 00069 virtual const DtVector& parentPosition() const; 00070 virtual void setParentPosition(const DtVector& position); 00071 00072 virtual const DtVector& parentVelocity() const; 00073 virtual void setParentVelocity(const DtVector& velocity, 00074 bool recomputeSpeed = true); 00075 virtual DtReal parentSpeed() const; 00076 00077 virtual const DtVector& parentAcceleration() const; 00078 virtual void setParentAcceleration(const DtVector& acceleration); 00079 00080 virtual const DtTaitBryan& parentOrientation() const; 00081 virtual void setParentOrientation(const DtTaitBryan& orientation, 00082 DtKinematicStateCS::DtRotationConstraint recomputeMatrix = DtKinematicStateCS::RotateAboutX); 00083 00084 virtual const DtDcm& parentOrientationMatrix() const; 00085 virtual void setParentOrientationMatrix(const DtDcm& orientationMatrix, 00086 bool recomputeEulers = true); 00087 00088 virtual const DtVector& worldPosition() const; 00089 virtual void setWorldPosition(const DtVector& position); 00090 00091 virtual const DtVector& worldVelocity() const; 00092 virtual void setWorldVelocity(const DtVector& velocity, 00093 bool recomputeSpeed = true); 00094 00095 virtual DtReal worldSpeed() const; 00096 00097 virtual const DtVector& worldAcceleration() const; 00098 virtual void setWorldAcceleration(const DtVector& acceleration); 00099 00100 virtual const DtTaitBryan& worldOrientation() const; 00101 virtual void setWorldOrientation(const DtTaitBryan& orientation, 00102 DtKinematicStateCS::DtRotationConstraint recomputeMatrix = DtKinematicStateCS::RotateAboutX); 00103 00104 virtual const DtDcm& worldOrientationMatrix() const; 00105 virtual void setWorldOrientationMatrix(const DtDcm& orientationMatrix, 00106 bool recomputeEulers = true); 00107 00108 virtual DtVector bodyVelocity() const; 00111 virtual DtTaitBryan topoEuler() const; 00114 virtual double heading() const; 00117 virtual double pitch() const; 00120 virtual double roll() const; 00121 00122 virtual const DtVector& rotationalVelocity() const; 00123 virtual void setRotationalVelocity(const DtVector& rotationalVelocity); 00124 00125 virtual DtKinematicStateCS::DtRotationConstraint rotationConstraint() 00126 const; 00127 00128 virtual void setRotationConstraint( 00129 DtKinematicStateCS::DtRotationConstraint constraint); 00130 00132 virtual DtKinematicStateCS::DtSimOrientationType orientationType() const; 00133 virtual void setOrientationType( 00134 DtKinematicStateCS::DtSimOrientationType orientationType); 00135 00136 virtual DtSimObjectStateRepository* stateRepository() const; 00137 00138 virtual void parentKinematicsChanged(); 00139 00140 DtCoordSysValidationVector& parentVV(); 00141 DtCoordSysValidationVector& worldVV(); 00142 00146 virtual void putSelf(FILE *fp, int indentLevel = 0, bool writeUnspecified = false, 00147 const DtFilename& path = DtReaderWriter::appPath()); 00148 00150 virtual void validateParentState(); 00151 virtual void validateWorldState(); 00152 virtual void validateState(); 00153 00155 virtual void clearWorldVertices(); 00156 virtual void copyWorldVertices(const DtList&); 00157 00160 public: 00162 virtual void addWorldVertex(const DtVector& vertex, DtVector& newGeometricCenter); 00163 00165 virtual void setWorldVertices(const DtVertexList& vertices, DtVector& newGeometricCenter); 00166 virtual void setWorldVertices(const DtList& vertices, DtVector& newGeometricCenter); 00167 00169 virtual const DtVertexList& worldVertices() const; 00170 virtual const DtRwVectorIterator& worldVertexIterator() const; 00171 00173 virtual void removeVertex(int); 00174 00176 virtual void setGeometryNeedsUpdate(bool); 00177 00181 virtual void invalidateWorldGeometry(); 00182 00183 protected: 00184 00187 virtual const DtKinematicStateCS& parentKinematicState() const; 00188 virtual DtKinematicStateCS& parentKinematicState(); 00189 00190 virtual void setParentKinematicState( 00191 const DtKinematicStateCS& parentKinematicState); 00192 00195 virtual const DtKinematicStateCS& worldKinematicState() const; 00196 virtual DtKinematicStateCS& worldKinematicState(); 00197 00198 virtual void setWorldKinematicState( 00199 const DtKinematicStateCS& worldKinematicState); 00200 00202 virtual void setWorldPositionFromParent(); 00203 00205 virtual void setWorldOrientationFromParent(); 00206 00207 protected: 00209 virtual bool calculateGeometricCenter(const DtList& vertices, DtVector& geometricCenter) const; 00210 00214 virtual void calculateBodyCoordinates(const DtList& worldVertices); 00215 00216 private: 00217 00219 DtSimKinematicState(); 00220 00221 protected: 00224 DtKinematicStateCS myParentKinematicState; 00225 00230 00233 DtKinematicStateCS myWorldKinematicState; 00234 mutable DtVertexList myWorldVertices; 00235 00239 00240 DtCoordSysValidationVector myParentVV; 00241 DtCoordSysValidationVector myWorldVV; 00242 00244 DtRwVector myRotationalVelocity; 00245 00246 00247 DtSimObjectStateRepository* myStateRepository; 00248 00249 DtTaitBryan myTopoEuler; 00250 bool myTopoInvalid; 00251 00254 mutable bool myObjectGeometryInvalid; 00255 }; 00256 00257 inline void DtSimKinematicState::setGeometryNeedsUpdate(bool b) 00258 { 00259 myObjectGeometryInvalid = b; 00260 } 00261 00262 #endif 00263