ISimplify.hpp
1 #ifndef OPALS_ISIMPLIFY_HPP_INCLUDED
2 #define OPALS_ISIMPLIFY_HPP_INCLUDED
3 
4 #include <opals/IModuleBase.hpp>
5 #include <opals/DivisionMode.hpp>
6 
7 #if !defined(OPALS_EXPORTS) && !defined(OPALS_MODULE_EXPORTS)
8  #if defined _DEBUG && !defined OPALS_NO_DEBUG
9  #pragma comment(lib, "opalsSimplify_d.lib")
10  #else
11  #pragma comment(lib, "opalsSimplify.lib")
12  #endif
13 #endif
14 
15 #include <opals/String.hpp>
16 #include <opals/Path.hpp>
17 
18 namespace opals {
19 
20  namespace opts
21  {
22  namespace Simplify
23  {
24  /// Options of \ref ModuleSimplify
25  typedef IGroup< Names::_, false, Cons<
26  ILeaf< Names::inFile, false, opals::Path >, Cons<
27  ILeaf< Names::outFile, false, opals::Path >, Cons<
28  ILeaf< Names::oFormat, false, opals::String >, Cons<
29  ILeaf< Names::maxTol, false, double >, Cons<
30  ILeaf< Names::maxDist, false, double >, Cons<
31  ILeaf< Names::division, false, opals::DivisionMode::Type >, Cons<
32  ILeaf< Names::lineVertexDist, false, double >, Cons<
33  ILeaf< Names::lineBufferDist, false, double >
34  > > > > > > > > > Options;
35  }
36  }
37 
38  /// Analyses a regular or hybrid grid model and generates an approximating TIN surface based on a coarse-to-fine approach.
39  /** opalsSimplify performs surface simplification of regular
40  grid datasets, possibly containing structure information (e.g.
41  breaklines, spot heights, ...). A mesh refinement approach is
42  applied starting with an initial TIN surface approximation (coarse
43  grid and structure info). Subsequently, the approximating TIN is
44  refined by iteratively inserting additional grid posts. such that
45  a certain user defined maximum height difference between the original
46  grid surface and the approximating TIN is met. */
47  /// \see \ref ModuleSimplify
48  class OPALS_API ISimplify : virtual public IModuleBase
49  {
50 
51  public:
52  static ISimplify* New();
53  static ISimplify* New( IControlObject &controlObject );
54  static ISimplify* New( const IModuleBase &parent );
55  static ISimplify* New( const IModuleBase &parent, IControlObject &controlObject );
56 
57  virtual ~ISimplify() {}
58 
59  /// \name Access to module-specific options.
60  ///@{
62  virtual Options& opts() = 0;
63  virtual const Options& opts() const = 0;
64  ///}@
65 
66  };
67 
68 };
69 
70 #endif