VR-Forces 4.6 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
roadSegment.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2016 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
11 
12 #pragma once
13 
15 #include <vector>
16 #include <list>
17 #include <matrix/vlVector.h>
18 #include <matrix/coordTransform.h>
20 #include "vrfutil/railSegment.h"
21 
22 class DtVrfObject;
23 class DtRailSegment;
24 class Coordinate_System;
25 class DtRoadSegment;
26 
29 #define DT_ROAD_SEGMENT_NO_LANE -1
30 
34 {
35 public:
37  virtual ~DtTrafficControlDevice();
39  DtTrafficControlDevice& operator=(const DtTrafficControlDevice& orig);
40  virtual DtTrafficControlDevice* clone();
41 
43  {
52  DtIndicationRed
53  };
54 
57  virtual DtTrafficControlIndication currentIndication() const;
58  virtual DtString indicationString(DtTrafficControlIndication ind) const;
62  virtual void setCurrentIndication(const DtTrafficControlIndication signal);
63 
66  virtual bool isStatic()const;
67  virtual void setIsStatic(const bool isStatic);
69 
72  virtual DtVrfObject* trafficLightObject();
73  virtual void setTrafficLightObject(DtVrfObject* trafficLight);
75 
78  virtual double positionAlongLane() const;
79  virtual void setPositionAlongLane(const double p);
80 
81  virtual bool hasRedIndication(DtAppearance* app) const
82  {
83  return app->powerPlantOn();
84  }
85 
86  virtual bool hasYellowIndication(DtAppearance *app) const
87  {
88  return app->flamesPresent();
89  }
90 
91  virtual bool hasGreenIndication(DtAppearance *app) const
92  {
93  return app->smokePlumePresent();
94  }
95 
96 protected:
97 
99  bool myIsStatic;
104 };
105 
106 
108 
111 {
112 public:
113  DtLaneSegment();
114  virtual ~DtLaneSegment();
115  DtLaneSegment(const DtLaneSegment& orig);
116  DtLaneSegment& operator=(const DtLaneSegment& orig);
117  virtual DtLaneSegment* clone();
118 
146  {
154 
164 
168 
173 
180 
185 
190 
191  double myWidth;
192 
193  //Lane line traffic control would go here
194  };
195 
198  virtual DtLaneGeometry& laneGeometry();
199  virtual const DtLaneGeometry& laneGeometry() const;
200 
203  virtual DtTrafficControlDevice* trafficControlDevice();
205  virtual void setTrafficControlDevice(DtTrafficControlDevice* device);
206 
207  //@ Get /set the lane. The right lane is lane 0.
208  virtual int laneNumber()const { return myLaneNumber; }
209  virtual void setLaneNumber(const int lane){ myLaneNumber = lane; }
210 
211  virtual DtRoadSegment* parentRoadSegment() const { return myRoadSegment; }
212  virtual void setParentRoadSegment(DtRoadSegment* parent)
213  {
214  myRoadSegment = parent;
215  }
216 
221 
229  virtual void generateFirstHalfLanePoints(std::vector<DtVector>& pointList,
230  bool drivingOnLeft,
231  int pointsInCurve = 5);
232 
240  virtual void generateSecondHalfLanePoints(std::vector<DtVector>& pointList,
241  bool drivingOnLeft,
242  int pointsInCurve = 5);
244 
256  virtual int connectingDownstreamLane() const {return myConnectingDownstreamLane;}
257  virtual void setConnectingDownstreamLane(const int lane)
258  {
259  myConnectingDownstreamLane = lane;
260  }
261  virtual int connectingUpstreamLane() const {return myConnectingUpstreamLane;}
262  virtual void setConnectingUpstreamLane(const int lane)
263  {
264  myConnectingUpstreamLane = lane;
265  }
267 
270 
289  virtual double calculateInsideEntryCurveGeometry(double headingChange,
290  double cosHeadingChange, double sinHeadingChange,
291  bool debug = false);
292 
297  virtual void calculateEntryCurveGeometry(double segmentLeftEdgeRadius,
298  double headingChange,
299  bool debug = false);
300 
332  virtual double calculateInsideExitCurveGeometry(double segmentLeftEdgeRadius,
333  double headingChange,
334  double cosHeadingChange, double sinHeadingChange,
335  bool debug = false);
336 
341  virtual void calculateExitCurveGeometry(double segmentLeftEdgeRadius,
342  double headingChange,
343  bool debug = false);
344 
346 
347 protected:
356 
359 
362 
365 
366 };
368 
369 typedef std::list<DtRoadSegment *> DtRoadSegmentList;
370 
374 {
379 };
380 
387 {
388 
389 public:
394  {
395  public:
396  DtTmpGeometry();
397 
410 
421  };
422 
423  DtRoadSegment();
424 
425  virtual ~DtRoadSegment();
426 
427  DtRoadSegment(const DtRoadSegment& orig);
428  DtRoadSegment& operator=(const DtRoadSegment& orig);
429  virtual DtRoadSegment* clone();
430 
434 
444  virtual bool initializeFromRailSegment(DtRailSegment* railSegment,
445  const Coordinate_System* localCoordinateSystem, bool isDrivingOnLeft,
446  DtRoadSegment* opposingSegment, bool debug = false);
447 
475  virtual bool calculateTemporaryExitGeometry(const double maxSmallBendRadius,
476  const double vehicleWidth, const double headingChange,
477  const double cosHeadingChange, const double sinHeadingChange,
478  bool debug);
479 
492  virtual bool calculateTemporaryEntryGeometry(const double headingChange,
493  const double cosHeadingChange, const double sinHeadingChange,
494  bool debug);
495 
515  virtual bool initializeExitCurve(
516  const double maxSmallBendTurnRadius, const double vehicleWidth,
517  const double headingChange,
518  const double cosHeadingChange, const double sinHeadingChange,
519  bool debug = false);
520 
536  virtual bool initializeEntryCurve(const double headingChange,
537  const double cosHeadingChange, const double sinHeadingChange,
538  bool debug = false);
539 
546  virtual void setExitCurvesForEndingLanes();
547 
567  virtual void connectWithNext(DtRoadSegment* nextSegment,
568  bool isDrivingOnLeft,
569  bool debug,
570  bool fillOpposingSegment = true);
571 
579  virtual void determineIfIntersectionApproach(const DtRoadSegment* next);
580 
587  virtual bool allAltitudesDetermined() const { return myAllAltitudesDetermined; }
588  virtual void setAllAltitudesDetermined(const bool b)
589  {
590  myAllAltitudesDetermined = b;
591  }
593 
594  //---------------------
595 
600 
603  virtual DtRoadSegmentPart segmentPart(const int laneN,
604  const double positionAlongLane);
605 
608  virtual double distanceFromLaneEnd(const int laneN,
609  const double positionAlongLane);
610 
613  virtual double evenPositionAlongLane(const double positionAlongLaneA,
614  const int laneA, const int laneB);
615 
636  virtual bool localPositionFromLanePosition(const int laneN,
637  const double positionAlongLane, const double lateralOffset, bool isDrivingOnLeft,
638  DtVector& localPosition, double& headingOffset,
639  double& distanceBeyond) const;
640 
645  virtual bool lanePositionFromLocalPosition(const DtVector localPosition,
646  const int laneN, bool isDrivingOnLeft,
647  double &positionInLane, double& laneOffset,
648  bool debug);
650 
651  //---------------------------
652 
657 
662  virtual int rightmostContinuingLane() const;
663 
674  virtual int findNearestContinuingLane(const int laneN,
675  const double positionAlongLane, const double lookAheadDistance, bool debug = false);
676 
686  virtual bool laneContinuesForDistance(const int laneN,
687  const double positionAlongLane, const double lookDistance,
688  double & actualDistance, bool & pathContinues, bool debug = false);
689 
692  virtual int matchingLane(const double offset);
693 
695 
698 
699  virtual double heading() const {return myHeading;}
700  virtual void setHeading(const double h) {myHeading = h;}
701 
706  virtual double length() const {return myLength;}
707  virtual void setLength(const double l){myLength = l;}
708 
711  virtual double medianWidth() const { return myMedianWidth; }
712  virtual void setMedianWidth(const double w) { myMedianWidth = w; }
713 
715  virtual DtString roadName() const { return myRoadName; }
716  virtual void setRoadName(const DtString& name) { myRoadName = name; }
717 
723  virtual const DtCoordTransform& segmentToLocalTransform() const {return mySegmentToLocal;}
724  virtual void setSegmentToLocalTransform(const DtCoordTransform& xform)
725  {
726  mySegmentToLocal = xform;
727  }
728 
729  virtual int numLanes() const {return myNumberLanes;}
730  virtual void setNumLanes(const int nLanes) {myNumberLanes = nLanes;}
731 
732  virtual DtLaneSegment* lanes() {return myLanes;}
733  virtual const DtLaneSegment* lanes() const { return myLanes;}
734 
735  virtual bool isOneWay() const {return myIsOneWay;}
736  virtual void setIsOneWay(const bool oneWay) {myIsOneWay = oneWay;}
737 
738  virtual bool exitIsRightTurn() const {return myExitBendsRight;}
739  virtual void setExitIsRightTurn(const bool r) {myExitBendsRight = r;}
740 
747  virtual bool entryIsRightTurn() const {return myEntryBendsRight;}
748  virtual void setEntryIsRightTurn(const bool r) {myEntryBendsRight = r;}
749 
750  virtual double entryCurveEndOffset() const {return myEntryCurveEndOffset;}
751  virtual void setEntryCurveEndOffset(const double o){myEntryCurveEndOffset = o;}
752 
753  virtual double exitCurveStartOffset() const {return myExitCurveStartOffset;}
754  virtual void setExitCurveStartOffset(const double o){myExitCurveStartOffset = o;}
755 
756  virtual bool isIntersectionApproach() const {return myIsIntersectionApproach;}
757  virtual void setIsIntersectionApproach(const bool i) {myIsIntersectionApproach = i;}
758 
759  virtual double stopLineSetBack() const {return myStopLineSetback;}
760  virtual void setStopLineSetBack(const double sb) {myStopLineSetback = sb;}
761 
762  virtual double speedLimit() const {return mySpeedLimit;}
763  virtual void setSpeedLimit(const double limit) {mySpeedLimit = limit;}
764 
770  virtual double defaultSpeedLimit(const int numLanes);
771 
772  virtual double freeFlowSpeed() const { return myFreeFlowSpeed; }
773  virtual void setFreeFlowSpeed(const double ff) {myFreeFlowSpeed = ff;}
774 
775  virtual DtRoadSegment* nextRoadSegment()const {return myNextSegment;}
776  virtual void setNextRoadSegment(DtRoadSegment* s) {myNextSegment = s;}
777 
778  virtual DtRoadSegment* previousRoadSegment() const {return myPreviousSegment;}
779  virtual void setPreviousRoadSegment(
780  DtRoadSegment* s) {myPreviousSegment = s;}
781 
782  virtual DtRoadSegment* opposingSegment() const {return myOpposingSegment;}
783  virtual void setOpposingSegment(DtRoadSegment* s)
784  {
785  myOpposingSegment = s;
786  }
787 
788  virtual bool isOpposing() const {return myIsOpposing;}
789  virtual void setIsOpposing(const bool opposing) {myIsOpposing = opposing;}
790 
796  virtual DtTmpGeometry* temporaryGeometry() ;
797 
799 
800 
801 
802 protected:
807  virtual void findRightMostAlignedLane(DtRoadSegment* nextSegment,
808  int& rightMostLane, int& nextSegmentRightMostLane,
809  int& numAlignedLanes);
810 
815  virtual void findLeftMostAlignedLane(DtRoadSegment* nextSegment,
816  int& leftMostLane, int& nextSegmentLeftMostLane,
817  int& numAlignedLanes);
818 
819  //------------------------------------------------------------------------
820 
821 public:
822 
829 
841  virtual double minIntersectionBendAngle(){ return 0.7854; }
842 
857  virtual double intrxThresholdAngleToConnectEdgeLanes(){ return 0.3; }
858 
870  virtual double intrxThresholdAngleToConnectAllLanes() { return 0.2; }
871 
883  virtual double nonIntrxThresholdAngleToConnectEdgeLanes(){ return 0.7854; }
884 
888  virtual double minimumLaneWidth(){ return 2.0; }
890 
891  //------------------------------------------------------------------------
892 
893 protected:
894 
896  double myLength;
897 
902  DtCoordTransform mySegmentToLocal;
903 
905 
906  double myHeading;
908  double myNextHeading;
913 
921 
933 
940 
946 
950 
952  double mySpeedLimit;
953 
958 
961 
964 
969 
977 
978 };
979 

Document ID: Generated on Thu Apr 12 03:15:37 EDT 2018 from SVN revision 187986
Copyright © 2005-2018 VT MÄK. All Rights Reserved (www.mak.com)