DSpiral2dBase.h
Go to the documentation of this file.
1 /*--------------------------------------------------------------------------------------+
2 |
3 | Supplied under applicable software license agreement.
4 |
5 | Copyright (c) 2018 Bentley Systems, Incorporated. All rights reserved.
6 |
7 +---------------------------------------------------------------------------------------*/
8 #pragma once
9 
11 // VANCOUVER max stroke length assumes UOR's !!!!
12 #define DEFAULT_SPIRAL_MAX_STROKE_LENGTH 10000.0
13 typedef struct DSpiral2dBase *DSpiral2dBaseP;
14 typedef struct DSpiral2dBase const *DSpiral2dBaseCP;
15 
16 typedef struct DSpiral2dBase &DSpiral2dBaseR;
17 typedef struct DSpiral2dBase const &DSpiral2dBaseCR;
18 
19 // Interface class for callbacks ...
21 {
22 GEOMAPI_VIRTUAL void Announce (double fraction, DVec2dCR xy) = 0;
23 };
25 
70 struct GEOMDLLIMPEXP DSpiral2dBase : BSIVectorIntegrand
71 {
72 public:
73 static const int TransitionType_Unknown = 0;
74 static const int TransitionType_Clothoid = 10;
75 static const int TransitionType_Bloss = 11;
76 static const int TransitionType_Biquadratic = 12;
77 static const int TransitionType_Cosine = 13;
78 static const int TransitionType_Sine = 14;
79 static const int TransitionType_Viennese = 20;
80 static const int TransitionType_WeightedViennese = 21;
81 // convention: spirals that really have direct evaluations start at 50.
82 static const int TransitionType_FirstDirectEvaluate = 50;
83 static const int TransitionType_NewSouthWales = 50; // IMPLEMENTED 01/18
84 static const int TransitionType_Czech = 51; // NOT IMPLEMENTED
85 static const int TransitionType_Australian = 52; // IMPLEMENTED 01/18
86 static const int TransitionType_Italian = 53; // NOT IMPLEMENTED
87 static const int TransitionType_PolishCubic = 54; // NOT IMPLEMENTED
88 static const int TransitionType_AremaCubic = 55; // NOT IMPLEMENTED
89 static const int TransitionType_MXCubic = 56; // NOT IMPLEMENTED
90 static const int TransitionType_MXCubicArc = 57; // NOT IMPLEMENTED
91 
93 public: static DSpiral2dBaseP Create (int transitionType);
94 
96 public: static int StringToTransitionType (Utf8CP name);
97 
99 public: static bool TransitionTypeToString (int type, Utf8StringR string);
101 public: static DSpiral2dBaseP CreateBearingCurvatureBearingCurvature
102  (
103  int transitionType,
104  double startRadians,
105  double startCurvature,
106  double endRadians,
107  double endCurvature
108  );
109 
111 public: static DSpiral2dBaseP CreateBearingCurvatureLengthCurvature
112  (
113  int transitionType,
114  double startRadians,
115  double startCurvature,
116  double length,
117  double endCurvature
118  );
119 public:
120  // Primary bearing and curvature data:
121  double mTheta0, mTheta1;
122  double mCurvature0, mCurvature1;
123 
124  // Derived length:
125  double mLength;
126 public:
127  // Return the recommended default stroke angle control
128  static double DefaultStrokeAngle ();
129 
130 public:
131  // Default constructor.
132  //
133  DSpiral2dBase ();
134  // Clone all data ...
135  GEOMAPI_VIRTUAL DSpiral2dBaseP Clone () const = 0;
136  // Set bearing and angle at start and end of the bounded curve.
137  // Return true if able to calculate length
138  bool SetBearingAndCurvatureLimits
139  (
140  double theta0,
141  double curvature0,
142  double theta1,
143  double curvature1
144  );
145 
154 
155  bool SetBearingCurvatureLengthCurvature
156  (
157  double theta0,
158  double curvature0,
159  double length,
160  double curvature1
161  );
162 
169  bool SetBearingCurvatureLengthBearing
170  (
171  double theta0,
172  double curvature0,
173  double length,
174  double theta1
175  );
176 
177  // Copy all base class parameters from source.
178  void CopyBaseParameters (DSpiral2dBaseCP pSource);
179  // Convert distance-along the spiral to fractional coordinate.
180  double DistanceToFraction (double distance) const;
181  // Convert fractional coordiante to distance-along.
182  double FractionToDistance (double fraction) const;
186 
187  int GetVectorIntegrandCount () override;
193 
194  void EvaluateVectorIntegrand (double distance, double *pF) override;
195 
196  double DistanceToGlobalAngle (double distance) const;
197 
198  // Apply a scale factor (e.g. change of units) in place.
199  // return true if the scale is nonzero.
200  bool ScaleInPlace (double s);
201 
202  // Return derivatives of the position vector with respect to fraction parameter.
203  bool FractionToDerivatives (double fraction, DVec2dR dXdf, DVec2dR ddXdfdf, DVec2dR dddXdfdfdf);
204 
205  // Derived classes must implement 2 virtuals:
206  // Return the accumulated turning angle at specified distance, i.e. always 0 at distanece 0;
207  GEOMAPI_VIRTUAL double DistanceToLocalAngle (double distance) const = 0;
208  // Return the curvature at specified distance from start ...
209  GEOMAPI_VIRTUAL double DistanceToCurvature (double distance) const = 0;
210  // Return the derivative of curvature wrt arc length at specified distance from start ...
211  GEOMAPI_VIRTUAL double DistanceToCurvatureDerivative (double distance) const = 0;
212 
213  // Return the type code for this spiral.
214  GEOMAPI_VIRTUAL int GetTransitionTypeCode () const = 0;
215 
216 
217 #define DECLARE_DSPIRAL2DBASE_OVERRIDES \
218  double DistanceToLocalAngle (double distance) const override;\
219  double DistanceToCurvature (double distance) const override;\
220  DSpiral2dBaseP Clone () const override;\
221  double DistanceToCurvatureDerivative (double distance) const override;\
222  int GetTransitionTypeCode () const override;
223 
224 #define DECLARE_DSPIRAL2DBASE_DIRECT_EVALUATION_MIDLEVEL_OVERRIDES \
225  double DistanceToLocalAngle (double distance) const override;\
226  double DistanceToCurvature (double distance) const override;\
227  double DistanceToCurvatureDerivative (double distance) const override;
228 
229 #define DECLARE_DSPIRAL2DBASE_DIRECT_EVALUATION_OVERRIDES \
230  DSpiral2dBaseP Clone () const override;\
231  int GetTransitionTypeCode () const override;
232 
246 static bool Stroke
247  (
248  DSpiral2dBase &spiral,
249  double maxRadians,
250  DVec2d *pDXY,
251  int &numDXY,
252  int maxDXY,
253  double &errorBound
254  );
255 
256 
257 static bool Stroke
258  (
259  DSpiral2dBase &spiral,
260  double maxRadians,
261  DPoint3dCR xyz0,
262  DPoint3dP pXYZ,
263  int &numXYZ,
264  int maxXYZ,
265  double &errorBound
266  );
267 
279 static bool Stroke
280 (
281 DSpiral2dBase &spiral,
282 double startFraction,
283 double endFraction,
284 double maxRadians,
285 DVec2dR delta,
286 double &errorBound
287 );
288 
303 static bool Stroke
304 (
305 DSpiral2dBase &spiral,
306 double startFraction,
307 double endFraction,
308 double maxRadians,
309 DVec2d *pDXY,
310 int &numDXY,
311 int maxDXY,
312 double &errorBound
313 );
314 
330 static bool Stroke
331 (
332 DSpiral2dBase &spiral,
333 double startFraction,
334 double endFraction,
335 double maxRadians,
336 DVec2d *pDXY,
337 double *pFraction,
338 int &numDXY,
339 int maxDXY,
340 double &errorBound
341 );
342 
355 static bool Stroke
356 (
357 DSpiral2dBase &spiral,
358 double startFraction,
359 double endFraction,
360 double maxRadians,
361 DVec2dR delta,
362 double &errorBound,
363 double maxStrokeLength
364 );
365 
379 static bool Stroke
380 (
381 DSpiral2dBase &spiral,
382 double startFraction,
383 double endFraction,
384 double maxRadians,
385 bvector<DVec2d> &uvPoints,
386 bvector<double> &fractions,
387 double &errorBound,
388 double maxStrokeLength = DEFAULT_SPIRAL_MAX_STROKE_LENGTH
389 );
390 
391 
403 static bool StrokeToAnnouncer
404 (
405 DSpiral2dBase &spiral,
406 double startFraction,
407 double endFraction,
408 double maxRadians,
409 AnnounceDoubleDPoint2dR F,
410 double &errorBound,
411 int minInterval = 0,
412 double maxStrokeLength = DEFAULT_SPIRAL_MAX_STROKE_LENGTH
413 );
414 
415 
424 static size_t GetIntervalCount
425 (
426 DSpiral2dBase &spiral,
427 double startFraction,
428 double endFraction,
429 double maxRadians,
430 int minInterval = 0,
431 double maxStrokeLength = DEFAULT_SPIRAL_MAX_STROKE_LENGTH
432 );
445 static bool ClosestPoint
446 (
447 DSpiral2dBase &spiral,
448 double startFraction,
449 double endFraction,
450 TransformCR spiralToWorld,
451 DPoint3dCR spacePoint,
452 DPoint3dR spiralPoint,
453 double& spiralFraction,
454 double& minDistance
455 );
456 
457 
477 static bool LineSpiralArcSpiralLineTransition
478 (
479 DPoint3dCR lineAPoint,
480 DPoint3dCR lineBPoint,
481 DPoint3dCR lineLineIntersection,
482 double radius,
483 double lengthA,
484 double lengthB,
485 DSpiral2dBase &spiralA,
486 DSpiral2dBase &spiralB,
487 DPoint3dR lineToSpiralA,
488 DPoint3dR lineToSpiralB,
489 DPoint3dR spiralAToArc,
490 DPoint3dR spiralBToArc,
491 DEllipse3dR arc
492 );
493 
511 static bool SymmetricLineSpiralSpiralLineTransition
512 (
513 DPoint3dCR lineAPoint,
514 DPoint3dCR lineBPoint,
515 DPoint3dCR lineLineIntersection,
516 double length,
517 DSpiral2dBase &spiralA,
518 DSpiral2dBase &spiralB,
519 DPoint3dR lineToSpiralA,
520 DPoint3dR lineToSpiralB,
521 DPoint3dR spiralToSpiral,
522 double &junctionRadius
523 );
526 // First spiral begins exactly at the start point and aims at the shoulder
527 // Second spiral ends somewhere on the line from shoulder to target.
539 static bool SymmetricPointShoulderTargetTransition
540 (
541 DPoint2dCR startPoint,
542 DPoint2dCR shoulderPoint,
543 DPoint2dCR targetPoint,
544 DSpiral2dBase &spiralA,
545 DSpiral2dBase &spiralB,
546 DPoint2dR junctionPoint,
547 DPoint2dR endPoint
548 );
549 
555  {
567 
568  GEOMAPI_VIRTUAL void Collect
569  (
570  DPoint3dCR centerA,
571  DPoint3dCR arcToSpiralA,
572  DSpiral2dBase &spiralA,
573  DPoint3dCR spiralToLineA,
574  DPoint3dCR centerB,
575  DPoint3dCR arcToSpiralB,
576  DSpiral2dBase &spiralB,
577  DPoint3dCR spiralToLineB
578  ) = 0;
579  };
600 static int ArcSpiralLineSpiralArcTransition
601 (
602 DPoint3dCR centerA,
603 double radiusA,
604 double lengthA,
605 DPoint3dCR centerB,
606 double radiusB,
607 double lengthB,
608 DSpiral2dBase &spiralA,
609 DSpiral2dBase &spiralB,
610 ASLSACollector &collector
611 );
612 
613 
614 
615 };
616 
617 
618 // CLOTHOID spiral
619 // Curvature function is simple linear variation from K0 to K1, i.e.
620 // K(u) = K0 + u (K1 - K0)
621 struct GEOMDLLIMPEXP DSpiral2dClothoid : DSpiral2dBase
622 {
623 public:
626 };
627 
628 // BLOSS Spiral
629 // Curvature function has linear first derivative, constant second derivative ...
630 // K(u) = K0 + (3u^2 - 2 u^3)(K1 - K0)
631 struct GEOMDLLIMPEXP DSpiral2dBloss : DSpiral2dBase
632 {
633 public:
634  DSpiral2dBloss ();
636 };
637 
638 // BIQUADRATIC Spiral
639 // Curvature function is a pair of quadratics with continuous K and K' at midpoint,
640 // i.e. K(u) = K0 + 2U^2 (K1 - K0) for u in (0,1/2); reverse from 1.
641 // Second derivative is piecewise constant at 1 and -1 over the first and second half intervals.
642 struct GEOMDLLIMPEXP DSpiral2dBiQuadratic : DSpiral2dBase
643 {
644 public:
647 };
648 
649 
650 // COSINE spiral ..
651 // Curvature function second derivative is 180 degrees of cosine.
652 struct GEOMDLLIMPEXP DSpiral2dCosine : DSpiral2dBase
653 {
654 public:
655  DSpiral2dCosine ();
657 };
658 
659 // SINE spiral ...
660 // Curvature function second derivative is 360 degrees of sine.
661 struct GEOMDLLIMPEXP DSpiral2dSine : DSpiral2dBase
662 {
663 public:
664  DSpiral2dSine ();
666 };
667 
668 
669 
670 // VIENNESE spiral
671 // Curvature function second derivative is
672 struct GEOMDLLIMPEXP DSPiral2dViennese : DSpiral2dBase
673 {
674 private:
675  double mPhi;
676 public:
678  (
679  double cant,
680  double h,
681  double e
682  );
683 
685 };
686 
687 // Specialization for VIENNESE with caller-specified multipliers for primary and roll terms
688 // <list>
689 // <item>Spiral part second derivative Ks''(u) proportional to u^2 (1-u)^2 (1-2u), i.e. has double roots at 0 and 1, single root at 0.5.</item>
690 // <item>Roll part curvature Kr(u) is proportioanl to u^2 (1-u)^2 (1-2u)
691 // </list>
693 {
694 private:
695  double mPhi;
696  double mF0;
697  double mF1;
698 public:
700  (
701  double cant,
702  double h,
703  double e,
704  double weight0, // multiplier for standard term
705  double weight1 // multiplier for roll term.
706  );
707 
709 };
710 
717 {
719 
720 public:
723 virtual bool EvaluateAtDistance
724  (
725  double distanceAlong,
726  DPoint2dR xyz,
727  DVec2dP d1XYZ,
728  DVec2dP d2XYZ,
729  DVec2dP d3XYZ
730  ) const = 0;
734 void EvaluateVectorIntegrand (double distance, double *pF) override;
736 static void ApplyCCWRotation (
737  double radians,
738  DPoint2dR xyz,
739  DVec2dP d1XYZ,
740  DVec2dP d2XYZ,
741  DVec2dP d3XYZ
742  );
743 };
744 // NEWSOUTHWALES Spiral
745 // Let a = 1/ (40 R*R*L*L) for exit radius R, spiral length L
746 // Let b = 1/(6 R L)
747 // at distance s along the spiral
748 // x = s *(1-a *s^4)
749 // y = b * s^3
750 
752 {
754 public:
756 
760  (
761  double distanceAlong,
762  DPoint2dR xyz,
763  DVec2dP d1XYZ,
764  DVec2dP d2XYZ,
765  DVec2dP d3XYZ
766  ) const override;
767 
769 static bool EvaluateAtDistanceInStandardOrientation
770  (
771  double s,
772  double length,
773  double curvature1,
774  DPoint2dR xy,
775  DVec2dP d1XY,
776  DVec2dP d2XY,
777  DVec2dP d3XY
778  );
779 };
780 
781 // AUSTRALIAN Spiral
782 // In local coordinates, with specific constants a1,a2,a3,a4 and m based on length and final radius . . .
783 // x = s (1 - a1 m^2 s^4 + a2 m^4 s^8 - a3 m^6 s^12 + a4 m^8 s^16)
784 // y = m * s^3
786 {
788 public:
790 
795  (
796  double distanceAlong,
797  DPoint2dR xy,
798  DVec2dP d1XY,
799  DVec2dP d2XY,
800  DVec2dP d3XY
801  ) const override;
803 static bool EvaluateAtDistanceInStandardOrientation
804  (
805  double s,
806  double length,
807  double curvature1,
808  DPoint2dR xy,
809  DVec2dP d1XY,
810  DVec2dP d2XY,
811  DVec2dP d3XY
812  );
813 };
814 
815 // MX approximate Spiral
816 // In local coordinates, with specific constants a1,a2,a3,a4 and m based on length and final radius . . .
817 // x = s (1 - a1 m^2 s^4 + a2 m^4 s^8 - a3 m^6 s^12 + a4 m^8 s^16)
818 // y = m * s^3
820 {
822 public:
823  DSpiral2dMXCubic ();
824 
829  (
830  double distanceAlong,
831  DPoint2dR xy,
832  DVec2dP d1XY,
833  DVec2dP d2XY,
834  DVec2dP d3XY
835  ) const override;
837 static bool EvaluateAtDistanceInStandardOrientation
838  (
839  double s,
840  double length,
841  double curvature1,
842  DPoint2dR xy,
843  DVec2dP d1XY,
844  DVec2dP d2XY,
845  DVec2dP d3XY
846  );
847 };
848 
849 
855 
861 {
862 DSpiral2dBaseP spiral;
863 Transform frame;
864 double fractionA;
865 double fractionB;
869 DSpiral2dPlacement (DSpiral2dBaseCR source, TransformCR frame, double fractionA, double fractionB);
870 
872 DSpiral2dPlacement (DSpiral2dBaseP _spiral, TransformCR frame, double fractionA, double fractionB);
873 
879 void ReplaceSpiral (DSpiral2dBaseP callerSpiral);
881 bool ReverseInPlace ();
883 bool AlmostEqual (DSpiral2dPlacement const &other, double tolerance = 0.0) const;
885 bool AlmostEqual01 (DSpiral2dPlacement const &other, double tolerance = 0.0) const;
887 
888 DPoint3d FractionToPoint (double fraction) const;
889 DRay3d FractionToPointAndDerivative (double fraction) const;
890 DRay3d FractionToPointAndUnitTangent (double fraction) const;
891 
892 DPoint3d ActiveFractionToPoint (double fraction) const;
893 DRay3d ActiveFractionToPointAndDerivative (double fraction) const;
894 DRay3d ActiveFractionToPointAndUnitTangent (double fraction) const;
895 
896 double ActiveFractionToGlobalFraction (double activeFraction) const;
897 
899 RotMatrix FractionToDerivatives (double fraction) const;
901 RotMatrix ActiveFractionToDerivatives (double fraction) const;
902 
903 
904 Transform FractionToFrenetFrame (double fraction) const;
905 Transform ActiveFractionToFrenetFrame (double fraction) const;
907 double SpiralLength01 () const;
909 double SpiralLengthActiveInterval () const;
911 double MappedSpiralLengthActiveInterval (RotMatrixCR matrix) const;
912 
914 DVec3d DisplacementBetweenFractions (double f0, double f1) const;
915 DVec3d DisplacementBetweenActiveFractions (double g0, double g1) const;
916 };
918 #endif
double fractionB
Definition: DSpiral2dBase.h:865
Definition: DSpiral2dBase.h:661
Definition: DSpiral2dBase.h:672
double mLength
Definition: DSpiral2dBase.h:125
struct DSpiral2dBase const * DSpiral2dBaseCP
Definition: DSpiral2dBase.h:14
RotMatrix ActiveFractionToDerivatives(double fraction) const
return xyz first, second, third derivatives as columns, scaled for active interval.
struct DVec2d const & DVec2dCR
Definition: msgeomstructs_typedefs.h:90
Definition: DSpiral2dBase.h:652
double SpiralLengthActiveInterval() const
absolute length of the partial spiral (between start and end fractions)
DPoint3d ActiveFractionToPoint(double fraction) const
#define END_BENTLEY_GEOMETRY_NAMESPACE
Definition: Bentley.r.h:30
Abstract interface for multi-variate function of a single variable.
Definition: BSIQuadrature.h:18
DSpiral2dBaseP spiral
Definition: DSpiral2dBase.h:862
DRay3d FractionToPointAndUnitTangent(double fraction) const
void EvaluateVectorIntegrand(double distance, double *pF) override
BSIVectorIntegrand query function.
DSpiral2dPlacement * DSpiral2dPlacementP
Definition: DSpiral2dBase.h:850
struct RotMatrix const & RotMatrixCR
Definition: msgeomstructs_typedefs.h:135
Transform frame
Definition: DSpiral2dBase.h:863
DVec3d DisplacementBetweenFractions(double f0, double f1) const
return the displacement between fractions. Having a close f0 is much faster than FractionToPoint with...
double MappedSpiralLengthActiveInterval(RotMatrixCR matrix) const
Length of the spiral after mapping by matrix*frame.matrix.
struct DVec2d * DVec2dP
Definition: msgeomstructs_typedefs.h:90
Transform ActiveFractionToFrenetFrame(double fraction) const
struct DSpiral2dBase * DSpiral2dBaseP
Definition: DSpiral2dBase.h:13
struct AnnounceDoubleDPoint2d & AnnounceDoubleDPoint2dR
Definition: DSpiral2dBase.h:24
struct DPoint2d & DPoint2dR
Definition: msgeomstructs_typedefs.h:78
Base class for virtuals that implement spiral curve variants.
Definition: DSpiral2dBase.h:70
Definition: DSpiral2dBase.h:642
struct DPoint3d * DPoint3dP
Definition: msgeomstructs_typedefs.h:79
GEOMAPI_VIRTUAL void Announce(double fraction, DVec2dCR xy)=0
struct DEllipse3d & DEllipse3dR
Definition: msgeomstructs_typedefs.h:114
double mTheta1
Definition: DSpiral2dBase.h:121
GEOMAPI_VIRTUAL int GetVectorIntegrandCount()=0
double ActiveFractionToGlobalFraction(double activeFraction) const
#define GEOMAPI_VIRTUAL
Definition: GeomApi.h:18
DSpiral2dPlacement & DSpiral2dPlacementR
Definition: DSpiral2dBase.h:853
A DSegment1d is an interval [x0,x1] on the real line.
Definition: DSegment1d.h:19
DSpiral2dPlacementP Clone(DSpiral2dPlacementCR source) const
Return a clone.
DSpiral2dPlacement()
Null spiral, identity transform, zero fractions;.
#define DECLARE_DSPIRAL2DBASE_DIRECT_EVALUATION_OVERRIDES
Definition: DSpiral2dBase.h:229
Definition: DSpiral2dBase.h:819
Spiral packaged with placement frame and fractional interval Note that the stored spiral is a pointer...
Definition: DSpiral2dBase.h:860
Definition: DSpiral2dBase.h:692
bool AlmostEqual(DSpiral2dPlacement const &other, double tolerance=0.0) const
Apply AlmostEqual to all components.
DVec3d DisplacementBetweenActiveFractions(double g0, double g1) const
Definition: DSpiral2dBase.h:631
struct DPoint2d const & DPoint2dCR
Definition: msgeomstructs_typedefs.h:78
A Bentley supplied implementation std::vector.
Definition: stdcxx/bvector.h:77
DRay3d ActiveFractionToPointAndUnitTangent(double fraction) const
Transform FractionToFrenetFrame(double fraction) const
struct DVec2d & DVec2dR
Definition: msgeomstructs_typedefs.h:90
interface declaration for function to receive announcements of (multiple) Arc-spiral-line-spiral-arc ...
Definition: DSpiral2dBase.h:554
double fractionA
Definition: DSpiral2dBase.h:864
struct DPoint3d & DPoint3dR
Definition: msgeomstructs_typedefs.h:79
Start point and direction (NOT necessarily unit) for a 3D ray.
Definition: dray3d.h:21
struct Bentley::Utf8String & Utf8StringR
Definition: Bentley.h:241
bool ReverseInPlace()
Reverse the fractions !!
virtual bool EvaluateAtDistance(double distanceAlong, DPoint2dR xyz, DVec2dP d1XYZ, DVec2dP d2XYZ, DVec2dP d3XYZ) const =0
Evaluate the spiral and derivatives at specified distance along.
DRay3d ActiveFractionToPointAndDerivative(double fraction) const
struct Transform const & TransformCR
Definition: msgeomstructs_typedefs.h:134
DSpiral2dPlacement const * DSpiral2dPlacementCP
Definition: DSpiral2dBase.h:852
DRay3d FractionToPointAndDerivative(double fraction) const
Utf8Char const * Utf8CP
Definition: Bentley.h:229
Definition: DSpiral2dBase.h:621
~DSpiral2dPlacement()
Free the spiral pointer.
DSpiral2dPlacement const & DSpiral2dPlacementCR
Definition: DSpiral2dBase.h:854
RotMatrix FractionToDerivatives(double fraction) const
return xyz first, second, third derivatives as columns.
#define BEGIN_BENTLEY_GEOMETRY_NAMESPACE
Definition: Bentley.r.h:29
struct DPoint3d const & DPoint3dCR
Definition: msgeomstructs_typedefs.h:79
GEOMAPI_VIRTUAL void EvaluateVectorIntegrand(double t, double *pF)=0
double mCurvature1
Definition: DSpiral2dBase.h:122
struct DSpiral2dBase & DSpiral2dBaseR
Definition: DSpiral2dBase.h:16
struct DSpiral2dBase const & DSpiral2dBaseCR
Definition: DSpiral2dBase.h:17
#define DECLARE_DSPIRAL2DBASE_DIRECT_EVALUATION_MIDLEVEL_OVERRIDES
Definition: DSpiral2dBase.h:224
void ReplaceSpiral(DSpiral2dBaseP callerSpiral)
Free the current spiral pointer and replace by (possibly NULL) arg.
intermediate class for "spirals" that really have distance-to-xy methods but need to act like spirals...
Definition: DSpiral2dBase.h:716
double SpiralLength01() const
absolute length of the reference spiral (between 0 and 1)
Definition: DSpiral2dBase.h:751
#define DECLARE_DSPIRAL2DBASE_OVERRIDES
Definition: DSpiral2dBase.h:217
Definition: DSpiral2dBase.h:20
bool AlmostEqual01(DSpiral2dPlacement const &other, double tolerance=0.0) const
Apply AlmostEqual to all components except fractions.
DSegment1d FractionInterval() const
Definition: DSpiral2dBase.h:785
DPoint3d FractionToPoint(double fraction) const
#define DEFAULT_SPIRAL_MAX_STROKE_LENGTH
Definition: DSpiral2dBase.h:12

Copyright © 2017 Bentley Systems, Incorporated. All rights reserved.