VR-Forces 4.5 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator 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 
35 {
36 public:
38  virtual ~DtTrafficControlDevice();
40  DtTrafficControlDevice& operator=(const DtTrafficControlDevice& orig);
41  virtual DtTrafficControlDevice* clone();
42 
44  {
53  DtIndicationRed
54  };
55 
58  virtual DtTrafficControlIndication currentIndication() 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 
76 protected:
77 
79  bool myIsStatic;
83 };
85 
88 {
89 public:
90  DtLaneSegment();
91  virtual ~DtLaneSegment();
92  DtLaneSegment(const DtLaneSegment& orig);
93  DtLaneSegment& operator=(const DtLaneSegment& orig);
94  virtual DtLaneSegment* clone();
95 
123  {
131 
141 
145 
150 
157 
162 
167 
168  double myWidth;
169 
170  //Lane line traffic control would go here
171  };
172 
175  virtual DtLaneGeometry& laneGeometry();
176  virtual const DtLaneGeometry& laneGeometry() const;
177 
180  virtual DtTrafficControlDevice& trafficControlDevice();
182  virtual void setTrafficSignal(const DtTrafficControlDevice& device);
183 
184  //@ Get /set the lane. The right lane is lane 0.
185  virtual int laneNumber()const { return myLaneNumber; }
186  virtual void setLaneNumber(const int lane){ myLaneNumber = lane; }
187 
188  virtual DtRoadSegment* parentRoadSegment() const { return myRoadSegment; }
189  virtual void setParentRoadSegment(DtRoadSegment* parent)
190  {
191  myRoadSegment = parent;
192  }
193 
198 
206  virtual void generateFirstHalfLanePoints(std::vector<DtVector>& pointList,
207  bool drivingOnLeft,
208  int pointsInCurve = 5);
209 
217  virtual void generateSecondHalfLanePoints(std::vector<DtVector>& pointList,
218  bool drivingOnLeft,
219  int pointsInCurve = 5);
221 
233  virtual int connectingDownstreamLane() const {return myConnectingDownstreamLane;}
234  virtual void setConnectingDownstreamLane(const int lane)
235  {
236  myConnectingDownstreamLane = lane;
237  }
238  virtual int connectingUpstreamLane() const {return myConnectingUpstreamLane;}
239  virtual void setConnectingUpstreamLane(const int lane)
240  {
241  myConnectingUpstreamLane = lane;
242  }
244 
247 
266  virtual double calculateInsideEntryCurveGeometry(double headingChange,
267  double cosHeadingChange, double sinHeadingChange,
268  bool debug = false);
269 
274  virtual void calculateEntryCurveGeometry(double segmentLeftEdgeRadius,
275  double headingChange,
276  bool debug = false);
277 
309  virtual double calculateInsideExitCurveGeometry(double segmentLeftEdgeRadius,
310  double headingChange,
311  double cosHeadingChange, double sinHeadingChange,
312  bool debug = false);
313 
318  virtual void calculateExitCurveGeometry(double segmentLeftEdgeRadius,
319  double headingChange,
320  bool debug = false);
321 
323 
324 protected:
331 
334 
337 
340 
341 };
343 
344 typedef std::list<DtRoadSegment *> DtRoadSegmentList;
345 
349 {
354 };
355 
362 {
363 
364 public:
369  {
370  public:
371  DtTmpGeometry();
372 
385 
396  };
397 
398  DtRoadSegment();
399 
400  virtual ~DtRoadSegment();
401 
402  DtRoadSegment(const DtRoadSegment& orig);
403  DtRoadSegment& operator=(const DtRoadSegment& orig);
404  virtual DtRoadSegment* clone();
405 
409 
419  virtual bool initializeFromRailSegment(DtRailSegment* railSegment,
420  const Coordinate_System* localCoordinateSystem,
421  DtRoadSegment* opposingSegment, bool debug = false);
422 
450  virtual bool calculateTemporaryExitGeometry(const double maxSmallBendRadius,
451  const double vehicleWidth, const double headingChange,
452  const double cosHeadingChange, const double sinHeadingChange,
453  bool debug);
454 
467  virtual bool calculateTemporaryEntryGeometry(const double headingChange,
468  const double cosHeadingChange, const double sinHeadingChange,
469  bool debug);
470 
490  virtual bool initializeExitCurve(
491  const double maxSmallBendTurnRadius, const double vehicleWidth,
492  const double headingChange,
493  const double cosHeadingChange, const double sinHeadingChange,
494  bool debug = false);
495 
511  virtual bool initializeEntryCurve(const double headingChange,
512  const double cosHeadingChange, const double sinHeadingChange,
513  bool debug = false);
514 
521  virtual void setExitCurvesForEndingLanes();
522 
542  virtual void connectWithNext(DtRoadSegment* nextSegment,
543  bool isDrivingOnLeft,
544  bool debug,
545  bool fillOpposingSegment = true);
546 
554  virtual void determineIfIntersectionApproach(const DtRoadSegment* next);
555 
562  virtual bool allAltitudesDetermined() const { return myAllAltitudesDetermined; }
563  virtual void setAllAltitudesDetermined(const bool b)
564  {
565  myAllAltitudesDetermined = b;
566  }
568 
569  //---------------------
570 
575 
578  virtual DtRoadSegmentPart segmentPart(const int laneN,
579  const double positionAlongLane);
580 
583  virtual double distanceFromLaneEnd(const int laneN,
584  const double positionAlongLane);
585 
588  virtual double evenPositionAlongLane(const double positionAlongLaneA,
589  const int laneA, const int laneB);
590 
608  virtual bool localPositionFromLanePosition(const int laneN,
609  const double positionAlongLane, const double lateralOffset, bool isDrivingOnLeft,
610  DtVector& localPosition, double& headingOffset,
611  double& distanceBeyond) const;
612 
614 
615  //---------------------------
616 
621 
626  virtual int rightmostContinuingLane() const;
627 
638  virtual int findNearestContinuingLane(const int laneN,
639  const double positionAlongLane, const double lookAheadDistance, bool debug = false);
640 
650  virtual bool laneContinuesForDistance(const int laneN,
651  const double positionAlongLane, const double lookDistance,
652  double & actualDistance, bool & pathContinues, bool debug = false);
653 
656  virtual int matchingLane(const double offset);
657 
659 
662 
663  virtual double heading() const {return myHeading;}
664  virtual void setHeading(const double h) {myHeading = h;}
665 
670  virtual double length() const {return myLength;}
671  virtual void setLength(const double l){myLength = l;}
672 
675  virtual double medianWidth() const { return myMedianWidth; }
676  virtual void setMedianWidth(const double w) { myMedianWidth = w; }
677 
679  virtual DtString roadName() const { return myRoadName; }
680  virtual void setRoadName(const DtString& name) { myRoadName = name; }
681 
682  virtual const DtCoordTransform& segmentToLocalTransform() const {return mySegmentToLocal;}
683  virtual void setSegmentToLocalTransform(const DtCoordTransform& xform)
684  {
685  mySegmentToLocal = xform;
686  }
687 
688  virtual int numLanes() const {return myNumberLanes;}
689  virtual void setNumLanes(const int nLanes) {myNumberLanes = nLanes;}
690 
691  virtual DtLaneSegment* lanes() {return myLanes;}
692  virtual const DtLaneSegment* lanes() const { return myLanes;}
693 
694  virtual bool isOneWay() const {return myIsOneWay;}
695  virtual void setIsOneWay(const bool oneWay) {myIsOneWay = oneWay;}
696 
697  virtual bool exitIsRightTurn() const {return myExitBendsRight;}
698  virtual void setExitIsRightTurn(const bool r) {myExitBendsRight = r;}
699 
700  virtual bool entryIsRightTurn() const {return myEntryIsRightTurn;}
701  virtual void setEntryIsRightTurn(const bool r) {myEntryIsRightTurn = r;}
702 
703  virtual double entryCurveEndOffset() const {return myEntryCurveEndOffset;}
704  virtual void setEntryCurveEndOffset(const double o){myEntryCurveEndOffset = o;}
705 
706  virtual double exitCurveStartOffset() const {return myExitCurveStartOffset;}
707  virtual void setExitCurveStartOffset(const double o){myExitCurveStartOffset = o;}
708 
709  virtual bool isIntersectionApproach() const {return myIsIntersectionApproach;}
710  virtual void setIsIntersectionApproach(const bool i) {myIsIntersectionApproach = i;}
711 
712  virtual double stopLineSetBack() const {return myStopLineSetback;}
713  virtual void setStopLineSetBack(const double sb) {myStopLineSetback = sb;}
714 
715  virtual double speedLimit() const {return mySpeedLimit;}
716  virtual void setSpeedLimit(const double limit) {mySpeedLimit = limit;}
717 
723  virtual double defaultSpeedLimit(const int numLanes);
724 
725  virtual double freeFlowSpeed() const { return myFreeFlowSpeed; }
726  virtual void setFreeFlowSpeed(const double ff) {myFreeFlowSpeed = ff;}
727 
728  virtual DtRoadSegment* nextRoadSegment()const {return myNextSegment;}
729  virtual void setNextRoadSegment(DtRoadSegment* s) {myNextSegment = s;}
730 
731  virtual DtRoadSegment* previousRoadSegment() const {return myPreviousSegment;}
732  virtual void setPreviousRoadSegment(
733  DtRoadSegment* s) {myPreviousSegment = s;}
734 
735  virtual DtRoadSegment* opposingSegment() const {return myOpposingSegment;}
736  virtual void setOpposingSegment(DtRoadSegment* s)
737  {
738  myOpposingSegment = s;
739  }
740 
741  virtual bool isOpposing() const {return myIsOpposing;}
742  virtual void setIsOpposing(const bool opposing) {myIsOpposing = opposing;}
743 
749  virtual DtTmpGeometry* temporaryGeometry() ;
750 
752 
753 
754 
755 protected:
760  virtual void findRightMostAlignedLane(DtRoadSegment* nextSegment,
761  int& rightMostLane, int& nextSegmentRightMostLane,
762  int& numAlignedLanes);
763 
768  virtual void findLeftMostAlignedLane(DtRoadSegment* nextSegment,
769  int& leftMostLane, int& nextSegmentLeftMostLane,
770  int& numAlignedLanes);
771 
772  //------------------------------------------------------------------------
773 
774 public:
775 
782 
794  virtual double minIntersectionBendAngle(){ return 0.7854; }
795 
810  virtual double intrxThresholdAngleToConnectEdgeLanes(){ return 0.3; }
811 
823  virtual double intrxThresholdAngleToConnectAllLanes() { return 0.2; }
824 
836  virtual double nonIntrxThresholdAngleToConnectEdgeLanes(){ return 0.7854; }
837 
841  virtual double minimumLaneWidth(){ return 2.0; }
843 
844  //------------------------------------------------------------------------
845 
846 protected:
847 
849  double myLength;
850 
855  DtCoordTransform mySegmentToLocal;
856 
858 
859  double myHeading;
861  double myNextHeading;
866 
874 
886 
893 
899 
903 
905  double mySpeedLimit;
906 
911 
914 
917 
922 
930 
931 };
932 

Document ID: Generated on Thu Mar 23 18:54:12 EDT 2017 from SVN revision 174804
Copyright © 2005-2017 VT MÄK. All Rights Reserved (www.mak.com)