OpendTect  6.6
embodyoperator.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: Yuancheng Liu
8  Date: Feb 2009
9  RCS: $Id$
10 ________________________________________________________________________
11 
12 
13 -*/
14 
15 #include "earthmodelmod.h"
16 #include "arrayndinfo.h"
17 #include "enums.h"
18 #include "iopar.h"
19 #include "multiid.h"
20 #include "paralleltask.h"
21 #include "trigonometry.h"
22 
23 class TaskRunner;
24 class Plane3;
25 class DAGTetrahedraTree;
26 
27 template<class T> class Array3D;
28 
29 namespace EM
30 {
31 
32 class Body;
33 class ImplicitBody;
34 
41 {
42 public:
45  enum Action { Union, IntSect, Minus };
47 
48  bool isOK() const;
49 
51  /*<Make a body using b0 u/n/- b1. If use "Minus"
52  b0-b1,it means the body part in b0 but not in b1.
53  Set two inputs and one Action before use it. */
54 
56  TaskRunner* tr=0) const;
57  /*<This is an independent function which creates an
58  implicite body with position value -1,0,1 depends on
59  the position is inside, on or outside the
60  triangulated body for a set of random points. Users
61  don't have to set any action or body. */
62 
63  void setInput(bool body0,const MultiID&);
64  void setInput(bool body0,BodyOperator*);
66  BodyOperator* getChildOprt(bool body0) const;
67  bool getChildOprt(int freeid,BodyOperator&);
68 
70  Action getAction() const { return action_; }
71  int getID() const { return id_; }
72  /*<If id_ is 0, it is on the top of a tree struct. */
73  static int getFreeID();
74 
75  bool usePar(const IOPar&);
76  void fillPar(IOPar&);
77 
78  static const char* sKeyID() { return "ID"; }
79  static const char* sKeyAction() { return "Action"; }
80  static const char* sKeyBodyID0() { return "BodyID0"; }
81  static const char* sKeyBodyID1() { return "BodyID1"; }
82 
83 protected:
84 
85  ImplicitBody* getOperandBody(bool body0,TaskRunner* tr) const;
86 
89 
92 
93  int id_;
95 };
96 
97 
98 /*
99 \brief Converts an explicit body to implicit.
100 
101  Given a triangulated body, extract position value on each trace based on
102  threshhold value. The arr's size is based on inlrg, crlrg, zrg. The value at
103  each point is the min distance to the body, inside to be negative, and
104  outside to be positive.
105 */
106 
108 {
109 public:
111  const StepInterval<int>& inlrg,
112  const StepInterval<int>& crlrg,
113  const StepInterval<float>& zrg,
114  Array3D<float>& arr);
115 
117 
118 private:
119 
120  bool doPrepare(int nrthreads);
122 
130 };
131 
132 } // namespace EM
133 
EM::Expl2ImplBodyExtracter::tri_
TypeSet< int > tri_
Definition: embodyoperator.h:128
EM::BodyOperator::sKeyAction
static const char * sKeyAction()
Definition: embodyoperator.h:79
EM::BodyOperator::fillPar
void fillPar(IOPar &)
EM::Expl2ImplBodyExtracter::crlrg_
const StepInterval< int > & crlrg_
Definition: embodyoperator.h:126
EM::Expl2ImplBodyExtracter::inlrg_
const StepInterval< int > & inlrg_
Definition: embodyoperator.h:125
EM::BodyOperator::mDeclareEnumUtils
mDeclareEnumUtils(Action)
EM::BodyOperator::isOK
bool isOK() const
EM::BodyOperator::getChildOprt
bool getChildOprt(int freeid, BodyOperator &)
EM::BodyOperator::Action
Action
Definition: embodyoperator.h:45
EM::Expl2ImplBodyExtracter
Definition: embodyoperator.h:108
od_int64
#define od_int64
Definition: plftypes.h:35
EM::BodyOperator::getAction
Action getAction() const
Definition: embodyoperator.h:70
EM::BodyOperator::inputbodyop0_
BodyOperator * inputbodyop0_
Definition: embodyoperator.h:88
mExpClass
#define mExpClass(module)
Definition: commondefs.h:177
EM::Expl2ImplBodyExtracter::doPrepare
bool doPrepare(int nrthreads)
DAGTetrahedraTree
Delaunay triangulation for 3D points. Should make sure all the points are defined.
Definition: delaunay3d.h:25
EM::BodyOperator::sKeyID
static const char * sKeyID()
Definition: embodyoperator.h:78
EM
Earth Model objects like horizons, faults, fault-sticks and bodies.
Definition: bulk2dhorizonscanner.h:26
EM::Expl2ImplBodyExtracter::nrIterations
od_int64 nrIterations() const
EM::BodyOperator::getID
int getID() const
Definition: embodyoperator.h:71
arrayndinfo.h
EM::BodyOperator::setInput
void setInput(bool body0, BodyOperator *)
BodyOperator becomes mine.
EM::BodyOperator::getChildOprt
BodyOperator * getChildOprt(bool body0) const
EM::BodyOperator::getFreeID
static int getFreeID()
Array3D
Array3D ( Subclass of ArrayND ) is a three dimensional array.
Definition: arraynd.h:162
multiid.h
EM::BodyOperator
Operators for implicit body. Each BodyOperator has two children, either a Body or a BodyOperator.
Definition: embodyoperator.h:41
StepInterval< int >
EM::BodyOperator::createImplicitBody
bool createImplicitBody(ImplicitBody *&, TaskRunner *) const
EM::BodyOperator::setAction
void setAction(Action)
EM::BodyOperator::Union
@ Union
Definition: embodyoperator.h:45
EM::BodyOperator::~BodyOperator
~BodyOperator()
EM::ImplicitBody
Implicit representation of a body.
Definition: embody.h:32
EM::Expl2ImplBodyExtracter::tree_
const DAGTetrahedraTree & tree_
Definition: embodyoperator.h:123
TaskRunner
Class that can execute a task.
Definition: task.h:170
EM::Expl2ImplBodyExtracter::planes_
TypeSet< Plane3 > planes_
Definition: embodyoperator.h:129
EM::BodyOperator::sKeyBodyID0
static const char * sKeyBodyID0()
Definition: embodyoperator.h:80
Plane3
A Plane3 is a plane in space, with the equation: Ax + By + Cz + D = 0.
Definition: trigonometry.h:484
EM::BodyOperator::action_
Action action_
Definition: embodyoperator.h:94
MultiID
Compound key consisting of ints.
Definition: multiid.h:24
EM::Expl2ImplBodyExtracter::zrg_
StepInterval< float > zrg_
Definition: embodyoperator.h:124
ParallelTask
Generalization of a task that can be run in parallel.
Definition: paralleltask.h:66
EM::BodyOperator::BodyOperator
BodyOperator()
EM::BodyOperator::setInput
void setInput(bool body0, const MultiID &)
EM::BodyOperator::id_
int id_
Definition: embodyoperator.h:93
EM::BodyOperator::inputbodyop1_
BodyOperator * inputbodyop1_
Definition: embodyoperator.h:91
EM::BodyOperator::createImplicitBody
ImplicitBody * createImplicitBody(const TypeSet< Coord3 > &bodypts, TaskRunner *tr=0) const
trigonometry.h
EM::Expl2ImplBodyExtracter::arr_
Array3D< float > & arr_
Definition: embodyoperator.h:127
enums.h
EM::BodyOperator::inputbody1_
MultiID inputbody1_
Definition: embodyoperator.h:90
EM::Expl2ImplBodyExtracter::Expl2ImplBodyExtracter
Expl2ImplBodyExtracter(const DAGTetrahedraTree &tree, const StepInterval< int > &inlrg, const StepInterval< int > &crlrg, const StepInterval< float > &zrg, Array3D< float > &arr)
EM::Expl2ImplBodyExtracter::doWork
bool doWork(od_int64, od_int64, int)
iopar.h
EM::BodyOperator::usePar
bool usePar(const IOPar &)
EM::BodyOperator::getOperandBody
ImplicitBody * getOperandBody(bool body0, TaskRunner *tr) const
EM::BodyOperator::inputbody0_
MultiID inputbody0_
Definition: embodyoperator.h:87
sKey::Body
FixedString Body()
Definition: keystrs.h:42
paralleltask.h
EM::BodyOperator::sKeyBodyID1
static const char * sKeyBodyID1()
Definition: embodyoperator.h:81
IOPar
Generalized set of parameters of the keyword-value type.
Definition: iopar.h:55
TypeSet< Coord3 >

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