OpendTect  6.6
cubicbeziersurface.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: December 2004
8 RCS: $Id$
9 ________________________________________________________________________
10 
11 -*/
12 
13 #include "geometrymod.h"
14 #include "parametricsurface.h"
15 
16 class Line3;
17 template <class T> class Array2D;
18 
19 namespace Geometry
20 {
21 
24 public:
26  const Coord3& p00, const Coord3& p01,
27  const Coord3& p02, const Coord3& p03,
28  const Coord3& p10, const Coord3& p11,
29  const Coord3& p12, const Coord3& p13,
30  const Coord3& p20, const Coord3& p21,
31  const Coord3& p22, const Coord3& p23,
32  const Coord3& p30, const Coord3& p31,
33  const Coord3& p32, const Coord3& p33 );
34 
36 
37  Coord3 computePos(float u,float v) const;
38  Coord3 computeNormal(float u, float v) const;
39  Coord3 computeUTangent(float u, float v) const;
40  Coord3 computeVTangent(float u, float v) const;
41 
42  bool intersectWithLine( const Line3& line,
43  float& u, float& v, float eps ) const;
44 
46 
47  Coord3 pos[16];
48  static int nrPos() { return 16; }
49 };
50 
51 
52 
55 public:
56  CubicBezierSurface( const RowCol& step=RowCol(1,1));
59 
61  bool isEmpty() const { return !positions; }
62 
63  IntervalND<float> boundingBox(bool approx) const;
64 
65  Coord3 computePosition(const Coord&) const;
66  Coord3 computeNormal(const Coord&) const;
67 
68  bool intersectWithLine(const Line3&,Coord&) const;
69 
70  Coord3 getBezierVertex(const RowCol& knot,const RowCol& relpos) const;
71 
72  bool insertRow(int row,int nrnew=1);
73  bool insertCol(int col,int nrnew=1);
74  bool removeRow(int row,int stoprow=-1);
75  bool removeCol(int col,int stopcol=-1);
76  virtual Coord3 getKnot( const RowCol& rc ) const
77  { return getKnot(rc,false); }
78  Coord3 getKnot(const RowCol&,bool estimateifundef) const;
79 
80  Coord3 getRowDirection(const RowCol&,bool computeifudf) const;
81  Coord3 getColDirection(const RowCol&,bool computeifudf) const;
82  float directionInfluence() const;
83  void setDirectionInfluence(float);
84 
85  const CubicBezierSurfacePatch* getPatch(const RowCol&) const;
87  const Interval<int>* colrange=0 ) const;
89  const Interval<int>* rowrange=0 ) const;
90 
91 protected:
92 
93  bool checkSelfIntersection( const RowCol& ) const;
94 
95  IntervalND<float> boundingBox(const RowCol&, bool ownvertices ) const;
96 
99 
100  void _setKnot( int idx, const Coord3& );
101 
102  int nrRows() const;
103  int nrCols() const;
104 
108 
110 };
111 
112 };
113 
Coord3
A cartesian coordinate in 3D space.
Definition: coord.h:72
Geometry::CubicBezierSurface::getKnot
Coord3 getKnot(const RowCol &, bool estimateifundef) const
Geometry::CubicBezierSurface::coldirections
Array2D< Coord3 > * coldirections
Definition: cubicbeziersurface.h:106
Geometry::CubicBezierSurface::createColCurve
ParametricCurve * createColCurve(float col, const Interval< int > *rowrange=0) const
Geometry::CubicBezierSurface::removeCol
bool removeCol(int col, int stopcol=-1)
stopcol will be ignored
Geometry::CubicBezierSurface::computePosition
Coord3 computePosition(const Coord &) const
Geometry::CubicBezierSurface::CubicBezierSurface
CubicBezierSurface(const CubicBezierSurface &)
Geometry::CubicBezierSurfacePatch
Definition: cubicbeziersurface.h:23
Geometry::CubicBezierSurfacePatch::mODTextTranslationClass
mODTextTranslationClass(CubicBezierSurfacePatch)
Geometry::CubicBezierSurfacePatch::computeVTangent
Coord3 computeVTangent(float u, float v) const
Geometry::CubicBezierSurface::insertRow
bool insertRow(int row, int nrnew=1)
Geometry
Definition: arraytesselator.h:21
Geometry::CubicBezierSurface::directionInfluence
float directionInfluence() const
Geometry::CubicBezierSurfacePatch::intersectWithLine
bool intersectWithLine(const Line3 &line, float &u, float &v, float eps) const
Geometry::CubicBezierSurface::nrRows
int nrRows() const
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
Geometry::ParametricCurve
A curve that is defined by regularly sampled positions.
Definition: parametriccurve.h:32
Geometry::CubicBezierSurface::computeNormal
Coord3 computeNormal(const Coord &) const
Geometry::CubicBezierSurface::computeColDirection
Coord3 computeColDirection(const RowCol &) const
Geometry::ParametricSurface
Definition: parametricsurface.h:23
Geometry::CubicBezierSurfacePatch::computePos
Coord3 computePos(float u, float v) const
Geometry::CubicBezierSurface::getKnot
virtual Coord3 getKnot(const RowCol &rc) const
Definition: cubicbeziersurface.h:76
Geometry::CubicBezierSurface::intersectWithLine
bool intersectWithLine(const Line3 &, Coord &) const
parametricsurface.h
Geometry::CubicBezierSurfacePatch::CubicBezierSurfacePatch
CubicBezierSurfacePatch(const Coord3 &p00, const Coord3 &p01, const Coord3 &p02, const Coord3 &p03, const Coord3 &p10, const Coord3 &p11, const Coord3 &p12, const Coord3 &p13, const Coord3 &p20, const Coord3 &p21, const Coord3 &p22, const Coord3 &p23, const Coord3 &p30, const Coord3 &p31, const Coord3 &p32, const Coord3 &p33)
Geometry::CubicBezierSurface
Definition: cubicbeziersurface.h:54
Geometry::CubicBezierSurface::rowdirections
Array2D< Coord3 > * rowdirections
Definition: cubicbeziersurface.h:105
Geometry::CubicBezierSurface::boundingBox
IntervalND< float > boundingBox(const RowCol &, bool ownvertices) const
Geometry::CubicBezierSurface::directioninfluence
float directioninfluence
Definition: cubicbeziersurface.h:109
Coord
A cartesian coordinate in 2D space.
Definition: coord.h:25
Geometry::CubicBezierSurface::nrCols
int nrCols() const
Geometry::CubicBezierSurface::checkSelfIntersection
bool checkSelfIntersection(const RowCol &) const
IntervalND
Class to store ranges in N dimensions.
Definition: ranges.h:214
Geometry::CubicBezierSurface::createRowCurve
ParametricCurve * createRowCurve(float row, const Interval< int > *colrange=0) const
Geometry::CubicBezierSurface::~CubicBezierSurface
~CubicBezierSurface()
Geometry::CubicBezierSurface::_setKnot
void _setKnot(int idx, const Coord3 &)
Geometry::CubicBezierSurface::CubicBezierSurface
CubicBezierSurface(const RowCol &step=RowCol(1, 1))
Geometry::CubicBezierSurface::setDirectionInfluence
void setDirectionInfluence(float)
Geometry::CubicBezierSurface::insertCol
bool insertCol(int col, int nrnew=1)
Geometry::CubicBezierSurface::mODTextTranslationClass
mODTextTranslationClass(CubicBezierSurface)
Line3
A Line3 is a line in space, with the following equations:
Definition: trigonometry.h:441
Geometry::CubicBezierSurfacePatch::computeBoundingBox
IntervalND< float > computeBoundingBox() const
Geometry::CubicBezierSurface::boundingBox
IntervalND< float > boundingBox(bool approx) const
Geometry::CubicBezierSurface::isEmpty
bool isEmpty() const
Definition: cubicbeziersurface.h:61
Geometry::CubicBezierSurface::computeRowDirection
Coord3 computeRowDirection(const RowCol &) const
Geometry::CubicBezierSurfacePatch::clone
CubicBezierSurfacePatch * clone() const
RowCol
IdxPair used for its row() and col().
Definition: rowcol.h:25
Geometry::CubicBezierSurface::getColDirection
Coord3 getColDirection(const RowCol &, bool computeifudf) const
Geometry::CubicBezierSurface::getRowDirection
Coord3 getRowDirection(const RowCol &, bool computeifudf) const
Geometry::CubicBezierSurfacePatch::computeUTangent
Coord3 computeUTangent(float u, float v) const
Geometry::CubicBezierSurface::getPatch
const CubicBezierSurfacePatch * getPatch(const RowCol &) const
Geometry::CubicBezierSurfacePatch::computeNormal
Coord3 computeNormal(float u, float v) const
Interval< int >
Geometry::CubicBezierSurfacePatch::nrPos
static int nrPos()
Definition: cubicbeziersurface.h:48
Geometry::CubicBezierSurface::removeRow
bool removeRow(int row, int stoprow=-1)
stoprow will be ignored
Array2D
Array2D ( Subclass of ArrayND ) is a two dimensional array.
Definition: arraynd.h:140
Geometry::CubicBezierSurface::clone
CubicBezierSurface * clone() const
Geometry::CubicBezierSurface::positions
Array2D< Coord3 > * positions
Definition: cubicbeziersurface.h:107
Geometry::CubicBezierSurface::getBezierVertex
Coord3 getBezierVertex(const RowCol &knot, const RowCol &relpos) const

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