![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2007 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: vrfKinState.h,v $ $Revision: 1.37 $ $State: Exp $ 00007 *******************************************************************************/ 00008 #ifndef vrfKinState_H_ 00009 #define vrfKinState_H_ 00010 00013 00014 #include "vrfobjcore/kinState.h" 00015 #include "vrfobjcore/csValidVec.h" 00016 #include "vrfutil/lclVecIter.h" 00017 00022 #include "vrfobjcore/vrfobjcoreDefines.h" 00023 class DT_DLL_vrfobjcore DtVrfKinematicState : public DtSimKinematicState 00024 { 00025 public: 00027 DtVrfKinematicState(const Coordinate_System* coordinateSystem, 00028 DtSimObjectStateRepository* stateRep, 00029 const DtString& rwName = DtString::nullString(), 00030 DtReaderWriterRegistry * parentRegistry = 0); 00031 00033 DtVrfKinematicState(const DtVrfKinematicState& orig, 00034 const DtString& rwName = DtString::nullString(), 00035 DtReaderWriterRegistry * parentRegistry = 0); 00036 00038 const DtVrfKinematicState& operator=(const DtVrfKinematicState& orig); 00039 00041 virtual ~DtVrfKinematicState(); 00042 00044 virtual DtSimKinematicState* clone( 00045 const DtString& rwName = DtString::nullString(), 00046 DtReaderWriterRegistry * parentRegistry = 0) const; 00047 00051 virtual void setCoordinateSystem(const Coordinate_System* coordinateSystem); 00052 virtual const Coordinate_System* coordinateSystem() const; 00053 00055 virtual const DtVector& localPosition() const; 00056 virtual void setLocalPosition(const DtVector& localPosition); 00057 00059 virtual void setWorldVertices(const DtList& vertices, DtVector& newGeometricCenter); 00060 00062 virtual const DtVector& localVelocity() const; 00063 virtual void setLocalVelocity(const DtVector& localVelocity, 00064 bool recomputeSpeed = true); 00065 00067 virtual DtReal localSpeed() const; 00068 virtual void setLocalSpeed(DtReal localSpeed); 00069 00071 virtual const DtVector& localAcceleration() const; 00072 virtual void setLocalAcceleration(const DtVector& localAcceleration); 00073 00078 virtual const DtVector& relativeAcceleration() const; 00079 virtual void setRelativeAcceleration(const DtVector& localAcceleration); 00080 00082 virtual const DtVector& relativeVelocity() const; 00083 virtual void setRelativeVelocity(const DtVector& localVelocity, 00084 bool recomputeSpeed = true); 00085 00087 virtual DtVector bodyVelocity() const; 00088 00089 virtual void invalidateRelativeVelocity(); 00090 virtual void invalidateRelativeAcceleration(); 00091 00094 virtual const DtTaitBryan& localOrientationWrtDatabase() const; 00095 virtual void setLocalOrientationWrtDatabase( 00096 const DtTaitBryan& localOrientation, 00097 DtKinematicStateCS::DtRotationConstraint recomputeMatrix = DtKinematicStateCS::RotateAboutX); 00098 00101 virtual const DtDcm& localOrientationMatrix() const; 00102 virtual void setLocalOrientationMatrix(const DtDcm& localOrientationMatrix, 00103 bool recomputeEulers = true); 00104 00105 virtual void setRotationConstraint( 00106 DtKinematicStateCS::DtRotationConstraint constraint); 00107 00109 virtual const DtVector& worldPosition() const; 00110 virtual void setWorldPosition(const DtVector& gecoentricPosition); 00111 00113 virtual const DtVector& worldVelocity() const; 00114 virtual void setWorldVelocity(const DtVector& gecoentricVelocity, 00115 bool recomputeSpeed = true); 00116 00118 virtual const DtVector& worldAcceleration() const; 00119 virtual void setWorldAcceleration(const DtVector& gecoentricAcceleration); 00120 00123 virtual const DtTaitBryan& worldOrientation() const; 00124 virtual void setWorldOrientation(const DtTaitBryan& orientation, 00125 DtKinematicStateCS::DtRotationConstraint recomputeMatrix = DtKinematicStateCS::RotateAboutX); 00126 00128 virtual void setParentOrientation(const DtTaitBryan& orientation, 00129 DtKinematicStateCS::DtRotationConstraint recomputeMatrix = DtKinematicStateCS::RotateAboutX); 00130 00132 virtual void setParentPosition(const DtVector& position); 00133 00136 virtual void setWorldOrientationMatrix(const DtDcm& orientationMatrix, 00137 bool recomputeEulers = true); 00138 #if 0 00139 virtual const DtDcm& worldOrientationMatrix() const; 00140 #endif 00141 00143 virtual void parentKinematicsChanged(); 00144 00148 DtCoordSysValidationVector& localVV(); 00149 00151 virtual void validateLocalState(); 00152 virtual void validateState(); 00153 00161 virtual const DtTaitBryan& localOrientation() const; 00162 virtual void setLocalOrientation(const DtTaitBryan& topoOrientation, 00163 DtKinematicStateCS::DtRotationConstraint recomputeMatrix = DtKinematicStateCS::RotateAboutX); 00165 00168 public: 00170 virtual void addLocalVertex(const DtVector& vertex, DtVector& newGeometricCenter); 00171 00175 virtual void setLocalVertices(const DtLocalVertexList& vertices, 00176 DtVector& newGeometricCenter); 00177 virtual void setLocalVertices(const DtList& vertices, 00178 DtVector& newGeometricCenter); 00180 00182 virtual const DtLocalVertexList& localVertices() const; 00183 virtual const DtLocalVectorIterator& localVertexIterator() const; 00184 virtual void removeVertex(int i); 00185 virtual void setGeometryNeedsUpdate(bool b); 00186 00191 virtual void invalidateLocalGeometry(); 00192 00193 protected: 00196 virtual const DtKinematicStateCS& localKinematicState() const; 00197 virtual DtKinematicStateCS& localKinematicState(); 00198 00199 virtual void setLocalKinematicState( 00200 const DtKinematicStateCS& localKinematicState); 00201 virtual void clearLocalVertices(); 00202 00203 private: 00204 00205 DtVrfKinematicState(); 00206 00207 protected: 00208 00212 mutable DtKinematicStateCS myLocalKinematicState; 00213 00214 DtCoordSysValidationVector myLocalVV; 00215 00216 const Coordinate_System* myCoordinateSystemPtr; 00217 00221 DtTaitBryan myTopoOrientation; 00222 00223 DtVector myRelativeAcceleration; 00224 bool myRelativeAccelerationInvalid; 00225 00226 DtVector myRelativeVelocity; 00227 bool myRelativeVelocityInvalid; 00228 00229 mutable bool myLocalObjectGeometryInvalid; 00230 mutable DtLocalVertexList myLocalVertexList; 00231 }; 00232 00233 00234 inline void DtVrfKinematicState::setGeometryNeedsUpdate(bool b) 00235 { 00236 DtSimKinematicState::setGeometryNeedsUpdate(b); 00237 00238 myLocalObjectGeometryInvalid = b; 00239 } 00240 00241 #endif