VR-Forces 4.0.4 Class Documentation
include/vrfobjcore/kinState.h
Go to the documentation of this file.
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 

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)