OpendTect  6.6
cubicbeziercurve.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*+
4 ________________________________________________________________________
5 (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
6 Author: K. Tingdahl
7 Date: 2005
8 Contents: Ranges
9 RCS: $Id$
10 ________________________________________________________________________
11 
12 -*/
13 
14 #include "geometrymod.h"
15 #include "parametriccurve.h"
16 #include "sets.h"
17 
18 namespace Geometry
19 {
20 
23 public:
24  CubicBezierCurve( const Coord3&, const Coord3&,
25  int firstparam=0, int step=1 );
28 
29  Coord3 computePosition( float ) const;
30  Coord3 computeTangent( float ) const;
31 
33 
35  bool setPosition( GeomPosID, const Coord3&);
38  bool insertPosition( GeomPosID, const Coord3& );
41  bool isDefined( GeomPosID ) const;
42 
43  Coord3 getBezierVertex( GeomPosID, bool before ) const;
44 
45  Coord3 getTangent( GeomPosID, bool computeifudf ) const;
46  bool setTangent( GeomPosID, const Coord3& );
48  bool isTangentDefined( GeomPosID ) const;
49  float directionInfluence() const;
50  void setTangentInfluence(float);
51 
52  bool isCircular() const;
53  bool setCircular(bool yn);
54 
55 protected:
56  int getIndex( GeomPosID param ) const
57  { return mCast(int,(param-firstparam)/paramstep); }
58 
60 
62  int paramstep;
66 
67  bool iscircular;
68 };
69 
73 inline Coord3 cubicDeCasteljau( const Coord3* p, char i0, char di, float u )
74 {
75  p += i0;
76  if ( mIsZero(u,1e-3) ) return *p;
77  else if ( mIsEqual(u,1,1e-3) ) return p[3*di];
78 
79  const float one_minus_u = 1-u;
80  Coord3 interpolpos1 = p[di]*one_minus_u+p[di*2] * u;
81 
82  const Coord3 interpolpos0 = (*p*one_minus_u+p[di]*u) * one_minus_u +
83  interpolpos1 * u;
84 
85  interpolpos1 = interpolpos1 * one_minus_u +
86  (p[di*2]*one_minus_u+p[3*di]*u) * u;
87 
88  return interpolpos0*one_minus_u+interpolpos1*u;
89 }
90 
91 
92 inline Coord3 cubicDeCasteljauTangent( const Coord3* p, char i0, char di,
93  float u)
94 {
95  p += i0;
96  if ( mIsZero(u,1e-3) ) return p[di]-*p;
97  else if ( mIsEqual(u,1,1e-3) ) return p[3*di]-p[2*di];
98 
99  const float one_minus_u = 1-u;
100  Coord3 interpolpos1 = p[di]*one_minus_u+p[2*di] * u;
101 
102  const Coord3 interpolpos0 = (*p*one_minus_u+p[di]*u) * one_minus_u +
103  interpolpos1 * u;
104 
105  interpolpos1 = interpolpos1 * one_minus_u +
106  (p[2*di]*one_minus_u+p[3*di]*u) * u;
107 
108  return interpolpos1-interpolpos0;
109 }
110 
111 };
112 
Geometry::CubicBezierCurve::CubicBezierCurve
CubicBezierCurve(const Coord3 &, const Coord3 &, int firstparam=0, int step=1)
Coord3
A cartesian coordinate in 3D space.
Definition: coord.h:72
Geometry::CubicBezierCurve::firstparam
int firstparam
Definition: cubicbeziercurve.h:61
Geometry::CubicBezierCurve::paramstep
int paramstep
Definition: cubicbeziercurve.h:62
Geometry::CubicBezierCurve::getPosition
Coord3 getPosition(GeomPosID) const
Geometry::CubicBezierCurve::directions
TypeSet< Coord3 > directions
Definition: cubicbeziercurve.h:64
Geometry::CubicBezierCurve::isCircular
bool isCircular() const
Geometry::CubicBezierCurve::mODTextTranslationClass
mODTextTranslationClass(CubicBezierCurve)
mIsEqual
#define mIsEqual(x, y, eps)
Definition: commondefs.h:67
parametriccurve.h
Geometry
Definition: arraytesselator.h:21
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
Geometry::CubicBezierCurve::removePosition
bool removePosition(GeomPosID)
Geometry::ParametricCurve
A curve that is defined by regularly sampled positions.
Definition: parametriccurve.h:32
Geometry::CubicBezierCurve::computeTangent
Coord3 computeTangent(GeomPosID) const
Geometry::CubicBezierCurve::getBezierVertex
Coord3 getBezierVertex(GeomPosID, bool before) const
Geometry::CubicBezierCurve::getTangent
Coord3 getTangent(GeomPosID, bool computeifudf) const
Geometry::CubicBezierCurve::isDefined
bool isDefined(GeomPosID) const
Geometry::CubicBezierCurve::isTangentDefined
bool isTangentDefined(GeomPosID) const
Geometry::cubicDeCasteljauTangent
Coord3 cubicDeCasteljauTangent(const Coord3 *p, char i0, char di, float u)
Definition: cubicbeziercurve.h:92
Geometry::CubicBezierCurve::directioninfluence
float directioninfluence
Definition: cubicbeziercurve.h:65
Geometry::cubicDeCasteljau
Coord3 cubicDeCasteljau(const Coord3 *p, char i0, char di, float u)
Definition: cubicbeziercurve.h:73
Geometry::CubicBezierCurve::setTangentInfluence
void setTangentInfluence(float)
Geometry::CubicBezierCurve::boundingBox
IntervalND< float > boundingBox(bool) const
Geometry::CubicBezierCurve::positions
TypeSet< Coord3 > positions
Definition: cubicbeziercurve.h:63
StepInterval< int >
Geometry::CubicBezierCurve::computePosition
Coord3 computePosition(float) const
IntervalND
Class to store ranges in N dimensions.
Definition: ranges.h:214
Geometry::CubicBezierCurve::setTangent
bool setTangent(GeomPosID, const Coord3 &)
mIsZero
#define mIsZero(x, eps)
Definition: commondefs.h:66
Geometry::CubicBezierCurve::clone
CubicBezierCurve * clone() const
Geometry::CubicBezierCurve::unsetPosition
bool unsetPosition(GeomPosID)
Geometry::CubicBezierCurve::insertPosition
bool insertPosition(GeomPosID, const Coord3 &)
mCast
#define mCast(tp, v)
Definition: commondefs.h:137
Geometry::CubicBezierCurve
Definition: cubicbeziercurve.h:22
Geometry::CubicBezierCurve::parameterRange
StepInterval< int > parameterRange() const
Geometry::CubicBezierCurve::getIndex
int getIndex(GeomPosID param) const
Definition: cubicbeziercurve.h:56
GeomPosID
od_int64 GeomPosID
Definition: geomelement.h:20
Geometry::CubicBezierCurve::iscircular
bool iscircular
Definition: cubicbeziercurve.h:67
Geometry::CubicBezierCurve::unsetTangent
bool unsetTangent(GeomPosID)
sets.h
Geometry::CubicBezierCurve::computeTangent
Coord3 computeTangent(float) const
Geometry::CubicBezierCurve::setCircular
bool setCircular(bool yn)
Geometry::CubicBezierCurve::setPosition
bool setPosition(GeomPosID, const Coord3 &)
TypeSet< Coord3 >
Geometry::CubicBezierCurve::directionInfluence
float directionInfluence() const

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B.V. 1995-2021