VR-Forces 4.0.4 Class Documentation
include/vrvCore/DtMotionModel.h
Go to the documentation of this file.
00001 /******************************************************************************
00002 ** Copyright (c) 2011 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 ******************************************************************************/
00005 /******************************************************************************
00006 ** $RCSfile: DtMotionModel.h,v $ $Revision: 1.16 $ $State: Exp $
00007 ******************************************************************************/
00008 
00012 
00013 #pragma once
00014 #include <vrvCore/vrvCore.h>
00015 #include <matrix/vlVector.h>
00016 #include <matrix/vlTaitBryan.h>
00017 #include <vlutil/vlTime.h>
00018 #include <vlpi/disEnums.h>
00019 
00020 namespace makVrv
00021 {
00022    class DtSceneObject;
00023    class DtModel;
00024    class DtDe;
00025 
00028    class DT_DLL_VRVCORE DtMotionModel
00029    {
00030    public:
00031 
00032       DtMotionModel();
00033 
00034       virtual ~DtMotionModel();
00035 
00036       virtual void updateMotion(double dtTime) = 0;
00037 
00039       virtual void modelAdded(DtModel*) = 0;
00040 
00042       virtual void modelRemoved(DtModel*) = 0;
00043 
00045       virtual void setLocation(const DtVector& loc, DtTime curTime) = 0;
00046 
00049       virtual const DtVector& approxLocation(DtTime curTime) const = 0;
00050 
00052       virtual void setVelocity(const DtVector& vel, DtTime curTime) = 0;
00053 
00056       virtual const DtVector& approxVelocity(DtTime curTime) const = 0;
00057 
00059       virtual void setOrientation(const DtTaitBryan& ori, DtTime curTime) = 0;
00060 
00063       virtual const DtTaitBryan& approxEuler(DtTime curTime) const = 0;
00064 
00066       virtual void setAcceleration(const DtVector& acc, DtTime curTime) = 0;
00067       virtual const DtVector& acceleration(DtTime curTime) const = 0;
00068 
00070       virtual void setRotationalVelocity(const DtVector& vel, DtTime curTime) = 0;
00071       virtual const DtVector& rotationalVelocity(DtTime curTime) const = 0;
00072 
00074       virtual void setSmoothPeriod(float period) = 0;
00076       virtual void setSmoothingEnabled(bool enabled) = 0;
00077 
00080       virtual void setAlgorithm(DtDeadReckonTypes alg) = 0;
00081       virtual DtDeadReckonTypes algorithm() const = 0;
00082 
00083       virtual DtMotionModel* clone(double time) = 0;
00084    };
00085 
00086    template <typename DeadReckoner>
00090    class DT_DLL_VRVCORE DtVRLDeadReckonerMotionModel : public DtMotionModel,
00091       protected DeadReckoner
00092    {
00093    public:
00095       DtVRLDeadReckonerMotionModel()
00096          : DtMotionModel()
00097          , DeadReckoner()
00098       {
00099       }
00101       DtVRLDeadReckonerMotionModel(const DtVRLDeadReckonerMotionModel& orig, double time)
00102          : DtMotionModel(orig)
00103          , DeadReckoner(orig)
00104       {
00105          setAlgorithm(orig.algorithm());
00106          setSmoothingEnabled(orig.mySmoothEnable);
00107          setSmoothPeriod(orig.smoothPeriod());
00108       }
00109 
00111       DtMotionModel* clone(double time)
00112       {
00113          return new DtVRLDeadReckonerMotionModel(*this,time);
00114       }
00115 
00117       virtual void updateMotion(double dtTime)
00118       {
00119 
00120       }
00121 
00123       virtual void modelAdded(DtModel*)
00124       {
00125          //Intentionally do nothing
00126       }
00127 
00129       virtual void modelRemoved(DtModel*)
00130       {
00131          //Intentionally do nothing
00132       }
00133 
00135       virtual void setLocation(const DtVector& loc, DtTime curTime)
00136       {
00137          DeadReckoner::setLocation(loc,curTime);
00138       }
00139 
00142       virtual const DtVector& approxLocation(DtTime curTime) const
00143       {
00144          return DeadReckoner::approxLocation(curTime);
00145       }
00146 
00148       virtual void setVelocity(const DtVector& vel, DtTime curTime)
00149       {
00150          return DeadReckoner::setVelocity(vel,curTime);
00151       }
00152 
00155       virtual const DtVector& approxVelocity(DtTime curTime) const
00156       {
00157          return DeadReckoner::approxVelocity(curTime);
00158       }
00159 
00161       virtual void setOrientation(const DtTaitBryan& ori, DtTime curTime)
00162       {
00163          DeadReckoner::setOrientation(ori,curTime);
00164       }
00165 
00166       virtual void setSmoothPeriod(float period)
00167       {
00168          DeadReckoner::setSmoothPeriod(period);
00169       }
00170 
00171       virtual void setSmoothingEnabled(bool enabled)
00172       {
00173          DeadReckoner::setSmoothEnable(enabled);
00174       }
00175 
00178       virtual const DtTaitBryan& approxEuler(DtTime curTime) const
00179       {
00180          return DeadReckoner::approxEuler(curTime);
00181       }
00182 
00184       virtual void setAcceleration(const DtVector& acc, DtTime curTime)
00185       {
00186          DeadReckoner::setAcceleration(acc,curTime);
00187       }
00188 
00189       virtual const DtVector& acceleration(DtTime curTime) const
00190       {
00191          return DeadReckoner::acceleration(curTime);
00192       }
00193 
00195       virtual void setRotationalVelocity(const DtVector& vel, DtTime curTime)
00196       {
00197          DeadReckoner::setRotationalVelocity(vel,curTime);
00198       }
00199 
00200       virtual const DtVector& rotationalVelocity(DtTime curTime) const
00201       {
00202          return DeadReckoner::rotationalVelocity(curTime);
00203       }
00204 
00207       virtual void setAlgorithm(DtDeadReckonTypes alg)
00208       {
00209          DeadReckoner::setAlgorithm(alg);
00210       }
00211 
00212       virtual DtDeadReckonTypes algorithm() const
00213       {
00214          return DeadReckoner::algorithm();
00215       }
00216 
00217    };
00218 
00221    class DT_DLL_VRVCORE DtMotionModelCreator
00222    {
00223    public:
00224       virtual ~DtMotionModelCreator();
00225       virtual DtMotionModel* create(DtSceneObject* owner, DtDe& de) = 0;
00226    };   
00227 
00231    class DT_DLL_VRVCORE DtDefaultMotionModelCreator : public DtMotionModelCreator
00232    {
00233    public:
00234       DtMotionModel* create(DtSceneObject* owner, DtDe& de);
00235    };
00236 
00237 }

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)