ILineTopology.hpp
1 #ifndef OPALS_ILINETOPOLOGY_HPP_INCLUDED
2 #define OPALS_ILINETOPOLOGY_HPP_INCLUDED
3 
4 #if !defined(OPALS_EXPORTS) && !defined(OPALS_MODULE_EXPORTS)
5  #if defined _DEBUG && !defined OPALS_NO_DEBUG
6  #pragma comment(lib, "opalsLineTopology_d.lib")
7  #else
8  #pragma comment(lib, "opalsLineTopology.lib")
9  #endif
10 #endif
11 
12 #include <opals/IModuleBase.hpp>
13 #include <opals/Path.hpp>
14 #include <opals/Vector.hpp>
15 #include <opals/TopologyProcessingMethod.hpp>
16 
17 namespace opals
18 {
19 
20  namespace opts
21  {
22  namespace LineTopology
23  {
24  /// Options of \ref ModuleLineTopology
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::method, false, opals::TopologyProcessingMethod::Type >, Cons<
29  ILeaf< Names::minLength, false, double >, Cons<
30  ILeaf< Names::maxTol, false, double >, Cons<
31  ILeaf< Names::lineVertexDist, false, double >, Cons<
32  ILeaf< Names::snapRadius, false, double >, Cons<
33  ILeaf< Names::maxAngleDev, false, opals::Vector< float > >, Cons<
34  ILeaf< Names::avgDist, false, double >, Cons<
35  ILeaf< Names::debugOutFile, false, opals::Path >, Cons<
36  IGroup< Names::merge, false, Cons<
37  ILeaf< Names::minWeight, false, double >, Cons<
38  ILeaf< Names::relWeightLead, false, double >, Cons<
39  ILeaf< Names::maxIter, false, unsigned >, Cons<
40  ILeaf< Names::revertDist, false, double >, Cons<
41  ILeaf< Names::revertInterval, false, double >, Cons<
42  ILeaf< Names::searchGeneration, false, unsigned >, Cons<
43  ILeaf< Names::preventIntersection, false, bool >
44  > > > > > > > >, Cons<
45  IGroup< Names::wf, false, Cons<
46  ILeaf< Names::dist, false, double >, Cons<
47  ILeaf< Names::angle, false, opals::Vector< float > >, Cons<
48  ILeaf< Names::revertDist, false, double >, Cons<
49  ILeaf< Names::straightness, false, double >, Cons<
50  ILeaf< Names::perpDist, false, double >
51  > > > > > >, Cons<
52  IGroup< Names::clean, false, Cons<
53  ILeaf< Names::intersectSnapDist, false, double >
54  > >
55  > > > > > > > > > > > > > > Options;
56  }
57  }
58 
59  /// Provides different line merging and topology correction tools for cleaning line networks derived via automatic edge detection.
60  /** TODO:
61  More details on opalsLineTopology with much more words,
62  possibly on several lines. */
63  /// \see \ref ModuleLineTopology
64  class OPALS_API ILineTopology : virtual public IModuleBase
65  {
66 
67  public:
68  static ILineTopology* New();
69  static ILineTopology* New( IControlObject &controlObject );
70  static ILineTopology* New( const IModuleBase &parent );
71  static ILineTopology* New( const IModuleBase &parent, IControlObject &controlObject );
72 
73  virtual ~ILineTopology() {}
74 
75  /// \name Access to module-specific options.
76  ///@{
78  virtual Options& opts() = 0;
79  virtual const Options& opts() const = 0;
80  ///}@
81 
82  };
83 
84 }
85 
86 #endif