VR-Forces 4.10 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) 2020 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>
19 #include <vlpi/appearance.h>
21 #include "vrfutil/railSegment.h"
22 
23 class DtVrfObject;
24 class DtRailSegment;
25 class Coordinate_System;
26 class DtRoadSegment;
27 
30 #define DT_ROAD_SEGMENT_NO_LANE -1
31 
33 #define CENTERLINE_EPSILON 0.001
34 
38 {
39 public:
41  virtual ~DtTrafficControlDevice();
43  DtTrafficControlDevice& operator=(const DtTrafficControlDevice& orig);
44  virtual DtTrafficControlDevice* clone();
45 
47  {
56  DtIndicationRed
57  };
58 
61  virtual DtTrafficControlIndication currentIndication() const;
62  virtual DtString indicationString(DtTrafficControlIndication ind) const;
66  virtual void setCurrentIndication(const DtTrafficControlIndication signal);
67 
70  virtual bool isStatic()const;
71  virtual void setIsStatic(const bool isStatic);
73 
76  virtual const DtVrfObject* trafficLightObject();
77  virtual void setTrafficLightObject(const DtVrfObject* trafficLight);
79 
82  virtual double positionAlongLane() const;
83  virtual void setPositionAlongLane(const double p);
84 
85  virtual bool hasRedIndication(const DtAppearance* app) const
86  {
87  return app->powerPlantOn();
88  }
89 
90  virtual bool hasYellowIndication(const DtAppearance *app) const
91  {
92  return app->flamesPresent();
93  }
94 
95  virtual bool hasGreenIndication(const DtAppearance *app) const
96  {
97  return app->smokePlumePresent();
98  }
99 
100 protected:
101 
108 };
109 
110 
112 
115 {
116 public:
117  DtLaneSegment();
118  virtual ~DtLaneSegment();
119  DtLaneSegment(const DtLaneSegment& orig);
120  DtLaneSegment& operator=(const DtLaneSegment& orig);
121  virtual DtLaneSegment* clone();
122 
150  {
158 
168 
172 
177 
184 
189 
194 
195  double myWidth;
196 
197  //Lane line traffic control would go here
198  };
199 
202  virtual DtLaneGeometry& laneGeometry();
203  virtual const DtLaneGeometry& laneGeometry() const;
204 
207  virtual DtTrafficControlDevice* trafficControlDevice();
209  virtual void setTrafficControlDevice(DtTrafficControlDevice* device);
210 
211  //@ Get /set the lane. The right lane is lane 0.
212  virtual int laneNumber()const { return myLaneNumber; }
213  virtual void setLaneNumber(const int lane){ myLaneNumber = lane; }
214 
215  virtual DtRoadSegment* parentRoadSegment() const { return myRoadSegment; }
216  virtual void setParentRoadSegment(DtRoadSegment* parent)
217  {
218  myRoadSegment = parent;
219  }
220 
225 
233  virtual void generateFirstHalfLanePoints(std::vector<DtVector>& pointList,
234  bool drivingOnLeft,
235  int pointsInCurve = 5);
236 
244  virtual void generateSecondHalfLanePoints(std::vector<DtVector>& pointList,
245  bool drivingOnLeft,
246  int pointsInCurve = 5);
248 
260  virtual int connectingDownstreamLane() const {return myConnectingDownstreamLane;}
261  virtual void setConnectingDownstreamLane(const int lane)
262  {
263  myConnectingDownstreamLane = lane;
264  }
265  virtual int connectingUpstreamLane() const {return myConnectingUpstreamLane;}
266  virtual void setConnectingUpstreamLane(const int lane)
267  {
268  myConnectingUpstreamLane = lane;
269  }
271 
274 
293  virtual double calculateInsideEntryCurveGeometry(double headingChange,
294  double cosHeadingChange, double sinHeadingChange,
295  bool debug = false);
296 
301  virtual void calculateEntryCurveGeometry(double segmentLeftEdgeRadius,
302  double headingChange,
303  bool debug = false);
304 
336  virtual double calculateInsideExitCurveGeometry(double segmentLeftEdgeRadius,
337  double headingChange,
338  double cosHeadingChange, double sinHeadingChange,
339  bool debug = false);
340 
345  virtual void calculateExitCurveGeometry(double segmentLeftEdgeRadius,
346  double headingChange,
347  bool debug = false);
348 
350 
351 protected:
360 
363 
366 
369 
370 };
372 
373 typedef std::list<DtRoadSegment *> DtRoadSegmentList;
374 
378 {
383 };
384 
391 {
392 
393 public:
398  {
399  public:
400  DtTmpGeometry();
401 
414 
425  };
426 
427  DtRoadSegment();
428 
429  virtual ~DtRoadSegment();
430 
431  DtRoadSegment(const DtRoadSegment& orig);
432  DtRoadSegment& operator=(const DtRoadSegment& orig);
433  virtual DtRoadSegment* clone();
434 
438 
448  virtual bool initializeFromRailSegment(DtRailSegment* railSegment,
449  const Coordinate_System* localCoordinateSystem, bool isDrivingOnLeft,
450  DtRoadSegment* opposingSegment, bool debug = false);
451 
479  virtual bool calculateTemporaryExitGeometry(const double maxSmallBendRadius,
480  const double vehicleWidth, const double headingChange,
481  const double cosHeadingChange, const double sinHeadingChange,
482  bool debug);
483 
496  virtual bool calculateTemporaryEntryGeometry(const double headingChange,
497  const double cosHeadingChange, const double sinHeadingChange,
498  bool debug);
499 
519  virtual bool initializeExitCurve(
520  const double maxSmallBendTurnRadius, const double vehicleWidth,
521  const double headingChange,
522  const double cosHeadingChange, const double sinHeadingChange,
523  bool debug = false);
524 
540  virtual bool initializeEntryCurve(const double headingChange,
541  const double cosHeadingChange, const double sinHeadingChange,
542  bool debug = false);
543 
550  virtual void setExitCurvesForEndingLanes();
551 
571  virtual void connectWithNext(DtRoadSegment* nextSegment,
572  bool isDrivingOnLeft,
573  bool debug,
574  bool fillOpposingSegment = true);
575 
583  virtual void determineIfIntersectionApproach(const DtRoadSegment* next);
584 
591  virtual bool allAltitudesDetermined() const { return myAllAltitudesDetermined; }
592  virtual void setAllAltitudesDetermined(const bool b)
593  {
594  myAllAltitudesDetermined = b;
595  }
597 
598  //---------------------
599 
604 
607  virtual DtRoadSegmentPart segmentPart(const int laneN,
608  const double positionAlongLane);
609 
612  virtual double distanceFromLaneEnd(const int laneN,
613  const double positionAlongLane);
614 
617  virtual double evenPositionAlongLane(const double positionAlongLaneA,
618  const int laneA, const int laneB);
619 
640  virtual bool localPositionFromLanePosition(const int laneN,
641  const double positionAlongLane, const double lateralOffset, bool isDrivingOnLeft,
642  DtVector& localPosition, double& headingOffset,
643  double& distanceBeyond) const;
644 
649  virtual bool lanePositionFromLocalPosition(const DtVector localPosition,
650  const int laneN, bool isDrivingOnLeft,
651  double &positionInLane, double& laneOffset,
652  bool debug);
654 
655  //---------------------------
656 
661 
666  virtual int rightmostContinuingLane() const;
667 
678  virtual int findNearestContinuingLane(const int laneN,
679  const double positionAlongLane, const double lookAheadDistance, bool debug = false);
680 
690  virtual bool laneContinuesForDistance(const int laneN,
691  const double positionAlongLane, const double lookDistance,
692  double & actualDistance, bool & pathContinues, bool debug = false);
693 
696  virtual int matchingLane(const double offset);
697 
699 
702 
703  virtual double heading() const {return myHeading;}
704  virtual void setHeading(const double h) {myHeading = h;}
705 
710  virtual double length() const {return myLength;}
711  virtual void setLength(const double l){myLength = l;}
712 
715  virtual double medianWidth() const { return myMedianWidth; }
716  virtual void setMedianWidth(const double w) { myMedianWidth = w; }
717 
719  virtual DtString roadName() const { return myRoadName; }
720  virtual void setRoadName(const DtString& name) { myRoadName = name; }
721 
727  virtual const DtCoordTransform& segmentToLocalTransform() const {return mySegmentToLocal;}
728  virtual void setSegmentToLocalTransform(const DtCoordTransform& xform)
729  {
730  mySegmentToLocal = xform;
731  }
732 
733  virtual int numLanes() const {return myNumberLanes;}
734  virtual void setNumLanes(const int nLanes) {myNumberLanes = nLanes;}
735 
736  virtual DtLaneSegment* lanes() {return myLanes;}
737  virtual const DtLaneSegment* lanes() const { return myLanes;}
738 
739  virtual bool isOneWay() const {return myIsOneWay;}
740  virtual void setIsOneWay(const bool oneWay) {myIsOneWay = oneWay;}
741 
742  virtual bool exitIsRightTurn() const {return myExitBendsRight;}
743  virtual void setExitIsRightTurn(const bool r) {myExitBendsRight = r;}
744 
751  virtual bool entryIsRightTurn() const {return myEntryBendsRight;}
752  virtual void setEntryIsRightTurn(const bool r) {myEntryBendsRight = r;}
753 
754  virtual double entryCurveEndOffset() const {return myEntryCurveEndOffset;}
755  virtual void setEntryCurveEndOffset(const double o){myEntryCurveEndOffset = o;}
756 
757  virtual double exitCurveStartOffset() const {return myExitCurveStartOffset;}
758  virtual void setExitCurveStartOffset(const double o){myExitCurveStartOffset = o;}
759 
760  virtual bool isIntersectionApproach() const {return myIsIntersectionApproach;}
761  virtual void setIsIntersectionApproach(const bool i) {myIsIntersectionApproach = i;}
762 
763  virtual double stopLineSetBack() const {return myStopLineSetback;}
764  virtual void setStopLineSetBack(const double sb) {myStopLineSetback = sb;}
765 
766  virtual double speedLimit() const {return mySpeedLimit;}
767  virtual void setSpeedLimit(const double limit) {mySpeedLimit = limit;}
768 
774  virtual double defaultSpeedLimit(const int numLanes);
775 
776  virtual double freeFlowSpeed() const { return myFreeFlowSpeed; }
777  virtual void setFreeFlowSpeed(const double ff) {myFreeFlowSpeed = ff;}
778 
779  virtual DtRoadSegment* nextRoadSegment()const {return myNextSegment;}
780  virtual void setNextRoadSegment(DtRoadSegment* s) {myNextSegment = s;}
781 
782  virtual DtRoadSegment* previousRoadSegment() const {return myPreviousSegment;}
784  DtRoadSegment* s) {myPreviousSegment = s;}
785 
786  virtual DtRoadSegment* opposingSegment() const {return myOpposingSegment;}
788  {
789  myOpposingSegment = s;
790  }
791 
792  virtual bool isOpposing() const {return myIsOpposing;}
793  virtual void setIsOpposing(const bool opposing) {myIsOpposing = opposing;}
794 
800  virtual DtTmpGeometry* temporaryGeometry() ;
801 
803 
804 
805 
806 protected:
811  virtual void findRightMostAlignedLane(DtRoadSegment* nextSegment,
812  int& rightMostLane, int& nextSegmentRightMostLane,
813  int& numAlignedLanes);
814 
819  virtual void findLeftMostAlignedLane(DtRoadSegment* nextSegment,
820  int& leftMostLane, int& nextSegmentLeftMostLane,
821  int& numAlignedLanes);
822 
823  //------------------------------------------------------------------------
824 
825 public:
826 
833 
845  virtual double minIntersectionBendAngle(){ return 0.7854; }
846 
861  virtual double intrxThresholdAngleToConnectEdgeLanes(){ return 0.3; }
862 
874  virtual double intrxThresholdAngleToConnectAllLanes() { return 0.2; }
875 
887  virtual double nonIntrxThresholdAngleToConnectEdgeLanes(){ return 0.7854; }
888 
892  virtual double minimumLaneWidth(){ return 2.0; }
894 
895  //------------------------------------------------------------------------
896 
897 protected:
898 
900  double myLength;
901 
906  DtCoordTransform mySegmentToLocal;
907 
909 
910  double myHeading;
912  double myNextHeading;
917 
925 
937 
944 
950 
954 
956  double mySpeedLimit;
957 
962 
965 
968 
973 
981 
982 };
983 
double myExitCurveStartOffset
Similarly, where the exit curve starts, relative to the end of the segment.
Definition: roadSegment.h:924
virtual bool hasYellowIndication(const DtAppearance *app) const
Definition: roadSegment.h:90
virtual bool isIntersectionApproach() const
Definition: roadSegment.h:760
virtual double freeFlowSpeed() const
Definition: roadSegment.h:776
virtual bool isOpposing() const
Definition: roadSegment.h:792
virtual void setExitCurveStartOffset(const double o)
Definition: roadSegment.h:758
virtual double minIntersectionBendAngle()
This defines how much of an angle between segments is required for the connection to be considered an...
Definition: roadSegment.h:845
#define DT_DLL_vrfmodel
This file is used to determine how to build.
Definition: vrfmodelDefines.h:24
virtual void setAllAltitudesDetermined(const bool b)
Definition: roadSegment.h:592
virtual double stopLineSetBack() const
Definition: roadSegment.h:763
double myDesiredLeftEdgeEntryRadius
Desired R for the segment left edge.
Definition: roadSegment.h:413
virtual int laneNumber() const
Definition: roadSegment.h:212
bool myEntryBendsRight
Refers to the connection from the upstream segment:
Definition: roadSegment.h:916
DtRoadSegment * myOpposingSegment
Only valid if not a one-way segment.
Definition: roadSegment.h:935
virtual double intrxThresholdAngleToConnectAllLanes()
This defines a threshold between segments at an intersection that determines whether all aligned lane...
Definition: roadSegment.h:874
int myConnectingUpstreamLane
Upstream connecting lane.
Definition: roadSegment.h:362
virtual void setRoadName(const DtString &name)
Definition: roadSegment.h:720
virtual void setParentRoadSegment(DtRoadSegment *parent)
Definition: roadSegment.h:216
DtVrfObject is used to represent any type of simulated object (entities, aggregate, control objects) in a VR-Forces application.
Definition: vrfObject.h:215
virtual double speedLimit() const
Definition: roadSegment.h:766
virtual int connectingDownstreamLane() const
Definition: roadSegment.h:260
virtual double minimumLaneWidth()
The minimum lane width expected from the feature data.
Definition: roadSegment.h:892
virtual void setStopLineSetBack(const double sb)
Definition: roadSegment.h:764
DtTrafficControlIndication myTrafficControlIndication
Definition: roadSegment.h:104
double myLength
The length of the underlying road feature, ie the rail segment.
Definition: roadSegment.h:900
virtual const DtLaneSegment * lanes() const
Definition: roadSegment.h:737
Definition: roadSegment.h:382
Definition: roadSegment.h:380
bool myAllAltitudesDetermined
Definition: roadSegment.h:908
virtual DtRoadSegment * parentRoadSegment() const
Definition: roadSegment.h:215
virtual void setIsOpposing(const bool opposing)
Definition: roadSegment.h:793
double myStraightSectionLength
This is the length of the straight section between the entry and exit curves.
Definition: roadSegment.h:183
double myExitCurveLength
Definition: roadSegment.h:188
virtual double entryCurveEndOffset() const
Definition: roadSegment.h:754
virtual int numLanes() const
Definition: roadSegment.h:733
virtual void setOpposingSegment(DtRoadSegment *s)
Definition: roadSegment.h:787
double myMinExitCurveSpace
Definition: roadSegment.h:422
double myExitCurveStartOffset
This offset is normally negative, meaning that the curve starts before the end of the segment...
Definition: roadSegment.h:192
virtual void setLength(const double l)
Definition: roadSegment.h:711
double mySpeedLimit
If available; 0 indicates not set.
Definition: roadSegment.h:956
virtual DtLaneSegment * lanes()
Definition: roadSegment.h:736
Definition: roadSegment.h:50
DtRailSegment are segments entities can follow when using the rail movement system.
Definition: railSegment.h:23
virtual const DtCoordTransform & segmentToLocalTransform() const
Converts from a road-segment coordinate system to local database coordinates.
Definition: roadSegment.h:727
double myDesiredExitCurveSpace
Definition: roadSegment.h:421
virtual bool hasGreenIndication(const DtAppearance *app) const
Definition: roadSegment.h:95
int myNumberLanes
Definition: roadSegment.h:938
double myExitCurveRadius
Exit curve, at end of segment:
Definition: roadSegment.h:187
double myExitLaneIntersectSetback
Definition: roadSegment.h:420
int myConnectingDownstreamLane
What lane this connects to in the downstream segment.
Definition: roadSegment.h:359
int myExitInsideLaneNum
Ditto for exit curve.
Definition: roadSegment.h:419
virtual double length() const
This is the length of the associated rail segment.
Definition: roadSegment.h:710
int myEntryInsideLaneNum
The inside lane that connects, ie generates the radius constraint.
Definition: roadSegment.h:403
virtual void setNextRoadSegment(DtRoadSegment *s)
Definition: roadSegment.h:780
DtTrafficControlIndication
Definition: roadSegment.h:46
std::list< DtRoadSegment * > DtRoadSegmentList
Definition: roadSegment.h:373
virtual void setEntryCurveEndOffset(const double o)
Definition: roadSegment.h:755
double myEntryCurveRadius
Entry curve:Arc radius.
Definition: roadSegment.h:167
virtual void setNumLanes(const int nLanes)
Definition: roadSegment.h:734
A class to hold the initially computed geometry for the inside lane of each segment in the path; used...
Definition: roadSegment.h:397
bool myIsOpposing
Indicates that this segment goes in the opposite direction of the related rail segment.
Definition: roadSegment.h:972
double myMedianWidth
The width of the median in this (2-way) segment.
Definition: roadSegment.h:964
double myNextHeading
The segment downstream:
Definition: roadSegment.h:912
virtual void setPreviousRoadSegment(DtRoadSegment *s)
Definition: roadSegment.h:783
virtual double exitCurveStartOffset() const
Definition: roadSegment.h:757
double myPositionAlongLane
Definition: roadSegment.h:107
Definition: coordSystem.h:54
virtual double medianWidth() const
Width of the median.
Definition: roadSegment.h:715
double myStopLineSetback
Distance before end of straight segment where stop line is located.
Definition: roadSegment.h:953
virtual void setSpeedLimit(const double limit)
Definition: roadSegment.h:767
DtRoadSegment * myNextSegment
Definition: roadSegment.h:932
virtual void setMedianWidth(const double w)
Definition: roadSegment.h:716
virtual DtString roadName() const
Name of the road containing this segment.
Definition: roadSegment.h:719
virtual bool entryIsRightTurn() const
Indicates a positive heading change from the previous segment to this one, and that lanes to the righ...
Definition: roadSegment.h:751
virtual DtRoadSegment * opposingSegment() const
Definition: roadSegment.h:786
bool myIsOneWay
Definition: roadSegment.h:933
DtLaneGeometry myGeometry
Definition: roadSegment.h:352
double myWidth
Definition: roadSegment.h:195
virtual double intrxThresholdAngleToConnectEdgeLanes()
This defines a threshold between segments at an intersection that determines how lanes are connected...
Definition: roadSegment.h:861
virtual bool exitIsRightTurn() const
Definition: roadSegment.h:742
double myEntryLaneIntersectSetback
The offset (along the lane) from the start of the segment (straight part) that the inside lane inters...
Definition: roadSegment.h:406
virtual DtRoadSegment * nextRoadSegment() const
Definition: roadSegment.h:779
virtual void setIsOneWay(const bool oneWay)
Definition: roadSegment.h:740
Description of one lane of a DtRoadSegment.
Definition: roadSegment.h:114
Definition: roadSegment.h:381
virtual void setFreeFlowSpeed(const double ff)
Definition: roadSegment.h:777
virtual bool allAltitudesDetermined() const
This indicates that the altitude lookups needed to make the mySegmentToLocal transform (start and end...
Definition: roadSegment.h:591
double myEntryCurveEndOffset
The offset in X from the segment origin to the end of the entry arc; marks the beginning of the strai...
Definition: roadSegment.h:175
double myLaneOffsetDistance
This is the lateral offset (in y) from the segment origin to the centerline of this lane...
Definition: roadSegment.h:157
virtual int connectingUpstreamLane() const
Definition: roadSegment.h:265
double myMinEntryCurveSpace
Distance from lane intersection to the end of a curve of min radius.
Definition: roadSegment.h:410
virtual void setConnectingUpstreamLane(const int lane)
Definition: roadSegment.h:266
virtual void setExitIsRightTurn(const bool r)
Definition: roadSegment.h:743
virtual bool isOneWay() const
Definition: roadSegment.h:739
DtTrafficControlDevice * myTrafficSignal
Not currently used (future work); the traffic control device controlling traffic flow in the lane of ...
Definition: roadSegment.h:356
DtTmpGeometry myTmpGeometry
This information is used when constructing the road path to find modifications to the segments when t...
Definition: roadSegment.h:980
DtRoadSegmentPart
This enumeration is a convenience for indicating what part of the lane geometry a point is on...
Definition: roadSegment.h:377
DtRoadSegment * myRoadSegment
The road segment this lane belongs to.
Definition: roadSegment.h:365
double myEntryCurveEndOffset
TODO – the following two members aren&#39;t used.
Definition: roadSegment.h:921
Definition: roadSegment.h:49
Definition: roadSegment.h:52
virtual void setConnectingDownstreamLane(const int lane)
Definition: roadSegment.h:261
bool myIsStatic
True for fixed indications–none, Stop, Yield, blinkers.
Definition: roadSegment.h:103
virtual DtRoadSegment * previousRoadSegment() const
Definition: roadSegment.h:782
A traffic control device for intersection flow, ie stop and yield signs, traffic lights, etc.
Definition: roadSegment.h:37
DtString myRoadName
The name of the road.
Definition: roadSegment.h:967
virtual double heading() const
Definition: roadSegment.h:703
The geometry of the lane, especially the parameters of the circular arcs that define the entry and ex...
Definition: roadSegment.h:149
double myDesiredEntryCurveSpace
Distance from lane intersection to the end of the curve of desired radius.
Definition: roadSegment.h:408
Description of one segment of a road.
Definition: roadSegment.h:390
double myFreeFlowSpeed
This is the speed traffic flows on average, irrespective of the legal speed limit above...
Definition: roadSegment.h:961
const DtVrfObject * myTrafficLight
If and only if the TCD is not static, then consult this for indication:
Definition: roadSegment.h:106
Definition: roadSegment.h:54
virtual bool hasRedIndication(const DtAppearance *app) const
Definition: roadSegment.h:85
DtLaneSegment * myLanes
A vector of lanes, with lane 0 the right-most, and lane myNumberLanes-1 the left-most (or vice versa ...
Definition: roadSegment.h:943
Definition: roadSegment.h:379
virtual void setHeading(const double h)
Definition: roadSegment.h:704
virtual void setIsIntersectionApproach(const bool i)
Definition: roadSegment.h:761
double myDesiredLeftEdgeExitRadius
Definition: roadSegment.h:423
bool myExitBendsRight
Refers to the connection to the downstream segment:
Definition: roadSegment.h:914
int myLaneNumber
The array index of this lane in the road segment&#39;s array of lanes.
Definition: roadSegment.h:368
virtual void setEntryIsRightTurn(const bool r)
Definition: roadSegment.h:752
voidpf uLong offset
Definition: ioapi.h:42
virtual void setLaneNumber(const int lane)
Definition: roadSegment.h:213
DtCoordTransform mySegmentToLocal
Coordinate transformation from segment coordinates to local database coordinates. ...
Definition: roadSegment.h:906
DtRoadSegment * myPreviousSegment
These come directly from the rail path, thus there is a connection to only on other road segment befo...
Definition: roadSegment.h:931
double myHeading
Definition: roadSegment.h:910
bool myIsIntersectionApproach
Indicates that the connection at the downstream end is an intersection.
Definition: roadSegment.h:949
virtual double nonIntrxThresholdAngleToConnectEdgeLanes()
Same as above, but for segments that define a bend in a through street rather than an intersection...
Definition: roadSegment.h:887
Definition: roadSegment.h:48
virtual void setSegmentToLocalTransform(const DtCoordTransform &xform)
Definition: roadSegment.h:728
double myEntryCurveLength
This is the length of the arc from the midpoint of the turn to where it joins the straight part of th...
Definition: roadSegment.h:171

Document ID: Generated on Tue Sep 21 17:42:52 EDT 2021 from SVN revision 234861
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)