OpendTect  6.6
marchingcubes.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*+
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: K. Tingdahl
8  Date: March 2006
9  RCS: $Id$
10 ________________________________________________________________________
11 
12 -*/
13 
14 #include "geometrymod.h"
15 #include "task.h"
16 #include "callback.h"
17 #include "multidimstorage.h"
18 #include "ranges.h"
19 #include "refcount.h"
20 #include "threadlock.h"
21 
22 #include "od_iosfwd.h"
23 
24 template <class T> class Array3D;
25 template <class T> class DataInterpreter;
26 
27 class Executor;
28 class MarchingCuebs2ImplicitFloodFiller;
29 class SeedBasedFloodFiller;
30 
50 {
51 public:
54 
56  bool operator==(const MarchingCubesModel&) const;
57 
58  bool set(const Array3D<float>& arr,
59  int i0,int i1, int i2,float threshold);
60 
61  bool isEmpty() const;
62 
63  static unsigned char determineModel( bool c000, bool c001, bool c010,
64  bool c011, bool c100, bool c101,
65  bool c110, bool c111 );
66 
67  static bool getCornerSign(unsigned char model, int corner);
68  bool writeTo(od_ostream&,bool binary=true) const;
69  bool readFrom(od_istream&,bool binary=true);
70 
71  static const unsigned char cUdfAxisPos;
72  static const unsigned char cMaxAxisPos;
73  static const unsigned char cAxisSpacing;
74 
75  unsigned char model_; //Don't change the order of these
76  unsigned char submodel_; //since they are written to
77  unsigned char axispos_[3]; //the stream in this order
78 };
79 
80 
83 public:
84 
86 
87  bool setVolumeData(int xorigin,int yorigin,int zorigin,
88  const Array3D<float>&,float threshold,
89  TaskRunner* = 0);
96  void removeAll();
97  bool isEmpty() const;
98 
99  bool getModel(const int* pos, unsigned char& model,
100  unsigned char& submodel) const;
101 
102  Executor* writeTo(od_ostream&,bool binary=true) const;
105 
108 
112  Interval<int> changepos_[3];
114 };
115 
116 
119 public:
120  Implicit2MarchingCubes(int posx, int posy, int posz,
121  const Array3D<float>&, float threshold,
124 
128  { return tr("Implicit body to MarchingCubes: Contouring"); }
129 
130 
131 protected:
133 
135  float threshold_;
136 
137  int xorigin_;
138  int yorigin_;
139  int zorigin_;
140 };
141 
142 
143 
151 public:
153  Array3D<int>&,
154  int originx,int originy,int originz,
155  bool nodistance);
162 
163  float threshold() const { return 0; }
165  { return tr("Processing MarchingCubes2Implicit."); }
166 
167 protected:
168  od_int64 nrDone() const;
170 
171  bool doPrepare(int);
173  bool processSeeds( const od_int64*, int nr );
174 
175  friend class MarchingCubes2ImplicitDistGen;
176 
177  bool shouldSetValue(od_int64 offset, int newval );
178  void setValue(od_int64 offset,int newval,bool checkval);
179 
181  int originx_;
182  int originy_;
183  int originz_;
184 
185  int size_[3];
186 
188 
192 
195 };
196 
197 
MarchingCubes2Implicit::result_
Array3D< int > & result_
Definition: marchingcubes.h:190
Implicit2MarchingCubes::~Implicit2MarchingCubes
~Implicit2MarchingCubes()
MarchingCubesSurface::models_
MultiDimStorage< MarchingCubesModel > models_
Definition: marchingcubes.h:106
MarchingCubesModel::submodel_
unsigned char submodel_
Definition: marchingcubes.h:76
MarchingCubesSurface::isEmpty
bool isEmpty() const
Implicit2MarchingCubes
Definition: marchingcubes.h:118
task.h
MarchingCubesSurface::getModel
bool getModel(const int *pos, unsigned char &model, unsigned char &submodel) const
Implicit2MarchingCubes::mODTextTranslationClass
mODTextTranslationClass(Implicit2MarchingCubes)
Geometry
Definition: arraytesselator.h:21
od_int64
#define od_int64
Definition: plftypes.h:35
MarchingCubes2Implicit
Definition: marchingcubes.h:150
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
Implicit2MarchingCubes::zorigin_
int zorigin_
Definition: marchingcubes.h:139
MarchingCubes2Implicit::uiMessage
uiString uiMessage() const
will be message() again in 7.x
Definition: marchingcubes.h:164
MarchingCubesModel::MarchingCubesModel
MarchingCubesModel()
MarchingCubesSurface::MarchingCubesSurface
MarchingCubesSurface()
od_istream
OD class for stream read common access to the std::cin.
Definition: od_istream.h:24
Implicit2MarchingCubes::yorigin_
int yorigin_
Definition: marchingcubes.h:138
MarchingCubesModel::set
bool set(const Array3D< float > &arr, int i0, int i1, int i2, float threshold)
MarchingCubesSurface::allchanged_
bool allchanged_
set when change is trig.
Definition: marchingcubes.h:110
MarchingCubesModel::operator==
bool operator==(const MarchingCubesModel &) const
callback.h
CallBacker
Inherit from this class to be able to send and/or receive CallBacks.
Definition: callback.h:185
MultiDimStorage< MarchingCubesModel >
Implicit2MarchingCubes::doWork
bool doWork(od_int64, od_int64, int)
MarchingCubesSurface::mRefCountImpl
mRefCountImpl(MarchingCubesSurface)
MarchingCubes2Implicit::surface_
const MarchingCubesSurface & surface_
Definition: marchingcubes.h:180
DataInterpreter
Byte-level data interpreter.
Definition: cbvswriter.h:21
MarchingCubes2Implicit::doPrepare
bool doPrepare(int)
MarchingCubesSurface::removeAll
void removeAll()
MarchingCubesSurface::readFrom
Executor * readFrom(od_istream &, const DataInterpreter< od_int32 > *)
MarchingCubes2Implicit::nrIterations
od_int64 nrIterations() const
MarchingCubesModel::cAxisSpacing
static const unsigned char cAxisSpacing
Definition: marchingcubes.h:73
Implicit2MarchingCubes::uiMessage
uiString uiMessage() const
will be message() again in 7.x
Definition: marchingcubes.h:127
MarchingCubes2Implicit::mODTextTranslationClass
mODTextTranslationClass(MarchingCubes2Implicit)
Array3D
Array3D ( Subclass of ArrayND ) is a three dimensional array.
Definition: arraynd.h:162
MarchingCubes2Implicit::processSeeds
bool processSeeds(const od_int64 *, int nr)
MarchingCubesModel::cUdfAxisPos
static const unsigned char cUdfAxisPos
Definition: marchingcubes.h:71
Implicit2MarchingCubes::threshold_
float threshold_
Definition: marchingcubes.h:135
MarchingCubesModel::MarchingCubesModel
MarchingCubesModel(const MarchingCubesModel &)
MarchingCubesModel::getCornerSign
static bool getCornerSign(unsigned char model, int corner)
Executor
Specification to enable chunkwise execution of a process.
Definition: executor.h:39
MarchingCubesModel::isEmpty
bool isEmpty() const
MarchingCubes2Implicit::newfloodfillers_
bool * newfloodfillers_
Definition: marchingcubes.h:193
MarchingCubes2Implicit::originx_
int originx_
Definition: marchingcubes.h:181
MarchingCubes2Implicit::originy_
int originy_
Definition: marchingcubes.h:182
TaskRunner
Class that can execute a task.
Definition: task.h:170
Notifier< MarchingCubesSurface >
MarchingCubesModel::determineModel
static unsigned char determineModel(bool c000, bool c001, bool c010, bool c011, bool c100, bool c101, bool c110, bool c111)
MarchingCubes2Implicit::nrDone
od_int64 nrDone() const
May be -1, i.e. class does not report nrdone.
MarchingCubes2Implicit::activefloodfillers_
TypeSet< od_int64 > activefloodfillers_
Definition: marchingcubes.h:194
MarchingCubes2Implicit::barrier_
Threads::Barrier barrier_
Definition: marchingcubes.h:189
ParallelTask
Generalization of a task that can be run in parallel.
Definition: paralleltask.h:66
MarchingCubesModel::cMaxAxisPos
static const unsigned char cMaxAxisPos
Definition: marchingcubes.h:72
MarchingCubes2Implicit::originz_
int originz_
Definition: marchingcubes.h:183
MarchingCubes2Implicit::nrdefined_
od_int64 nrdefined_
Definition: marchingcubes.h:191
MarchingCubes2Implicit::~MarchingCubes2Implicit
~MarchingCubes2Implicit()
Threads::Barrier
Waits for a number of threads to reach a certain point (i.e. the call to Barrier::waitForAll)....
Definition: thread.h:239
MarchingCubesModel
Definition: marchingcubes.h:50
MarchingCubesSurface::setVolumeData
bool setVolumeData(int xorigin, int yorigin, int zorigin, const Array3D< float > &, float threshold, TaskRunner *=0)
MarchingCubes2Implicit::threshold
float threshold() const
Definition: marchingcubes.h:163
uiString
String that is able to hold international (UTF-8) strings for the user interface.
Definition: uistring.h:121
od_iosfwd.h
MarchingCubesModel::readFrom
bool readFrom(od_istream &, bool binary=true)
Implicit2MarchingCubes::xorigin_
int xorigin_
Definition: marchingcubes.h:137
threadlock.h
MarchingCubesModel::writeTo
bool writeTo(od_ostream &, bool binary=true) const
refcount.h
Implicit2MarchingCubes::array_
const Array3D< float > & array_
Definition: marchingcubes.h:134
MarchingCubes2Implicit::setValue
void setValue(od_int64 offset, int newval, bool checkval)
MarchingCubes2Implicit::nodistance_
bool nodistance_
Definition: marchingcubes.h:187
MarchingCubes2Implicit::shouldSetValue
bool shouldSetValue(od_int64 offset, int newval)
ranges.h
MarchingCubes2Implicit::doWork
bool doWork(od_int64, od_int64, int)
Interval< int >
MarchingCubesSurface::writeTo
Executor * writeTo(od_ostream &, bool binary=true) const
MarchingCubesSurface::modelslock_
Threads::Lock modelslock_
Definition: marchingcubes.h:107
od_ostream
OD class for stream write common access to the user log file, or std::cout in other than od_main.
Definition: od_ostream.h:26
Threads::Lock
A lock of a type that (hopefully) suits your needs. To use it, you need the Locker class.
Definition: threadlock.h:53
Implicit2MarchingCubes::Implicit2MarchingCubes
Implicit2MarchingCubes(int posx, int posy, int posz, const Array3D< float > &, float threshold, MarchingCubesSurface &)
MarchingCubes2Implicit::MarchingCubes2Implicit
MarchingCubes2Implicit(const MarchingCubesSurface &, Array3D< int > &, int originx, int originy, int originz, bool nodistance)
MarchingCubesSurface
Definition: marchingcubes.h:82
MarchingCubesModel::operator=
MarchingCubesModel & operator=(const MarchingCubesModel &)
Implicit2MarchingCubes::nrIterations
od_int64 nrIterations() const
Implicit2MarchingCubes::surface_
MarchingCubesSurface & surface_
Definition: marchingcubes.h:132
multidimstorage.h
TypeSet< od_int64 >
MarchingCubesSurface::change
Notifier< MarchingCubesSurface > change
Definition: marchingcubes.h:109
MarchingCubesModel::model_
unsigned char model_
Definition: marchingcubes.h:75

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