VR-Forces 4.0.4 Class Documentation
include/vrfmodel/gndColAvoid.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002 ** Copyright (c) 1999 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 *******************************************************************************/
00005 /******************************************************************************
00006 ** $RCSfile: gndColAvoid.h,v $ $Revision: 1.41 $ $State: Exp $
00007 *******************************************************************************/
00008 
00011 
00014 
00015 #ifndef DtGroundCollisionAvoidanceController_H_
00016 #define DtGroundCollisionAvoidanceController_H_
00017 
00018 
00019 #include "vrfmodel/gndAutoCntlr.h"
00020 #include "vrfobjcore/vrfObjIter.h"
00021 #include <vl/hostStructs.h>
00022 #include "vrfobjcore/automotivePSR.h"
00023 
00024 class DtString;
00025 class DtSimManager;
00026 class Dt3dBoundingVolume;
00027 class DtGroundFollowEntityController;
00028 class DtVrfObjectStateRepository;
00029 class DtInputControlPortGroup;
00030 class DtCollisionInputPort;
00031 class DtCollision;
00032 class DtStringInputPort;
00033 
00038 #include "vrfmodel/vrfmodelDefines.h"
00039 class DT_DLL_vrfmodel DtGroundCollisionAvoidanceController : public 
00040    DtGroundAutoControllerComponent
00041 {
00042 
00043 public:
00044 
00047    DtGroundCollisionAvoidanceController(const DtString& name, 
00048       DtVrfObject* owner,
00049       DtSimManager* simManager, 
00050       DtComponentDescriptor* desc = 0,
00051       DtReaderWriterRegistry* parentRegistry = 0);
00052 
00055    virtual ~DtGroundCollisionAvoidanceController();
00056 
00060    virtual bool init();
00061 
00071    virtual void tick();
00072 
00076    virtual double distanceSquaredToDestination(DtVector offsetVector);
00077 
00083    virtual void avoidCollision(const DtCollision& potentialCollision);
00084 
00087    virtual void clearCollision();
00088    
00093    virtual void clearingCollision();
00094 
00097    virtual DtString type() const;
00098 
00102    static DtSimComponent * creator(const DtString& name, 
00103       DtVrfObject* owner,
00104       DtSimManager* simManager, 
00105       DtComponentDescriptor* desc = 0,
00106       DtReaderWriterRegistry* parentRegistry = 0);
00107 
00108 protected:
00111    DtGroundCollisionAvoidanceController();
00112 
00114    DtGroundCollisionAvoidanceController(const 
00115       DtGroundCollisionAvoidanceController & orig);
00116 
00118    const DtGroundCollisionAvoidanceController & operator=(const 
00119       DtGroundCollisionAvoidanceController & orig);
00120 
00125    bool isAppreciablyMoving(DtVector velocity, double velocityTolerance) const;
00126 
00136    bool setDefaultPortValuesForAvoidance(DtAutoTransmissionGear currentGear);
00137 
00144    bool determineObstructionMovementDirection(DtDcm obstructionLocalOrientationMatrix,
00145                                            const DtVector& obstructionVelocity,
00146                                            int& obstructionDirectionSign) const;
00147    
00151    bool followingObstruction(const DtEntityIdentifier& entityID) const;
00152 
00165    void avoidMovingObstruction(const DtCollision& potentialCollision);
00166 
00177    void avoidNonMovingObstruction(const DtCollision& potentialCollision);
00178 
00188    void startClearingCollision(double clearingDistance);
00189 
00203    bool calculateCollisionBV();
00204 
00205    bool createPortGroups();
00206    bool createPorts();
00207 
00208 protected:
00209 
00211    double                  myClearingDistance;
00212 
00213    bool                    myAvoidingCollision;
00214    Dt3dBoundingVolume*       myCollisionBV;
00215 
00216    DtEntityIdentifier      myObjectId;
00217    bool                    myHavePortGroup;
00218 
00219    DtString                myFollowEntityName;
00220 
00223 
00229    DtCollisionInputPort*   myCollisionAvoidancePort;
00230 
00233    DtInputPortGroup*       myCollisionAvoidancePortGroup;
00234 
00240    DtStringInputPort*   myFollowEntityInputPort;
00241 
00246    DtBooleanOutputPort* myCollisionPort;
00248 
00250 };
00251 
00252 #endif
00253 
00254 
00255 
00256 

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)