IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
MeasureInfoHdrMacros.h
Go to the documentation of this file.
1 // MeasureInfoHdrMacros.h:
3 // -----------------------
4 //
15 
16 #ifndef __IPSDKBASESHAPEANALYSIS_MEASUREINFOHDRMACROS_H__
17 #define __IPSDKBASESHAPEANALYSIS_MEASUREINFOHDRMACROS_H__
18 
19 #include <IPSDKBaseShapeAnalysis/Measure/Info/BaseMeasureInfo.h>
23 #include <boost/preprocessor/cat.hpp>
24 #include <boost/preprocessor/stringize.hpp>
25 #include <boost/preprocessor/seq.hpp>
26 #include <boost/preprocessor/if.hpp>
27 #include <boost/preprocessor/dec.hpp>
28 #include <boost/preprocessor/comparison/equal.hpp>
29 #include <boost/smart_ptr/make_shared_object.hpp>
30 #include <boost/make_shared.hpp>
31 
32 namespace ipsdk {
33  namespace shape {
34  namespace analysis {
35 
37  template <typename T>
39  }
40  }
41 }
42 
45 
50 #define IPSDK_DECLARE_MEASURE_INFO_BODY(libraryName, msrName, msrResultType, msrDependSeq, \
51  msrProcessingPolicy, msrShapeRequirements, \
52  msrUnitFormat) \
53  IPSDK_DECLARE_TOOLTIP() \
54  IPSDK_DECLARE_SERIAL_WITHOUT_COPY(libraryName, BOOST_PP_CAT(msrName, MsrInfo)) \
55  friend boost::shared_ptr<BOOST_PP_CAT(msrName, MsrInfo)> \
56  boost::make_shared<BOOST_PP_CAT(msrName, MsrInfo)>(); \
57 protected: \
58  BOOST_PP_CAT(msrName, MsrInfo)(); \
59 public: \
60  ~BOOST_PP_CAT(msrName, MsrInfo)(); \
61  typedef msrResultType MsrResultType; \
62  static const ipsdk::shape::analysis::eMsrProcessingPolicy::domain g_msrProcessingPolicy = \
63  ipsdk::shape::analysis::eMsrProcessingPolicy::msrProcessingPolicy; \
64  static const ipsdk::shape::analysis::eMsrShapeRequirements::domain g_msrShapeRequirements = \
65  ipsdk::shape::analysis::eMsrShapeRequirements::msrShapeRequirements; \
66  static const ipsdk::shape::analysis::eMsrUnitFormat::domain g_msrUnitFormat = \
67  ipsdk::shape::analysis::eMsrUnitFormat::msrUnitFormat; \
68  const std::string& getDefaultName() const { \
69  static std::string g_defaultName( \
70  BOOST_PP_STRINGIZE(BOOST_PP_CAT(msrName, Msr))); \
71  return g_defaultName; \
72  } \
73  ipsdk::shape::analysis::eMsrProcessingPolicy getMsrProcessingPolicy() const { \
74  return g_msrProcessingPolicy; \
75  } \
76  ipsdk::shape::analysis::eMsrShapeRequirements getMsrShapeRequirements() const { \
77  return g_msrShapeRequirements; \
78  } \
79  ipsdk::shape::analysis::eMsrUnitFormat getMsrUnitFormat() const { \
80  return g_msrUnitFormat; \
81  } \
82  static ipsdk::shape::analysis::MeasureInfoPtr createMeasureInfo(); \
83  IPSDK_DECLARE_MEASURE_DEPENDENCIES(msrDependSeq, _) \
84 protected: \
85  ipsdk::shape::analysis::MeasurePtr createMeasureDerived() const;
86 
89 
92 #define IPSDK_DECLARE_MEASURE_PARAMS(msrName) \
93 public: \
94  typedef BOOST_PP_CAT(msrName, MsrParams) MsrParamsType; \
95  typedef const BOOST_PP_CAT(msrName, MsrParams) MsrParamsConstType; \
96  typedef boost::shared_ptr<MsrParamsType> MsrParamsStorageType; \
97  typedef boost::shared_ptr<MsrParamsConstType> MsrParamsConstStorageType; \
98  ipsdk::DataItemPtr createDefaultParams() const { \
99  boost::shared_ptr<MsrParamsType> pDefaultParams( \
100  boost::make_shared<MsrParamsType>()); \
101  return pDefaultParams; \
102  } \
103  void initDerived() { \
104  _pMsrParams = boost::static_pointer_cast<MsrParamsConstType>(getMsrParams()); \
105  } \
106 protected: \
107  MsrParamsConstStorageType _pMsrParams;
108 
111 #define IPSDK_DECLARE_MEASURE_NO_PARAMS() \
112 public: \
113  typedef ipsdk::BaseDataItem MsrParamsType; \
114  typedef const ipsdk::BaseDataItem MsrParamsConstType; \
115  typedef boost::shared_ptr<MsrParamsType> MsrParamsStorageType; \
116  typedef boost::shared_ptr<MsrParamsConstType> MsrParamsConstStorageType; \
117  void initDerived() { \
118  }
119 
122 
125 #define IPSDK_DECLARE_MEASURE_DEPENDENCY(msrInfo) \
126  { \
127  ipsdk::shape::analysis::eMsrVolumePolicy volumePolicy = \
128  ipsdk::shape::analysis::eMsrVolumePolicy::BOOST_PP_SEQ_ELEM(0, msrInfo); \
129  if ((b2dMsrMode == true && volumePolicy != ipsdk::shape::analysis::eMsrVolumePolicy::eMVP_3d) || \
130  (b2dMsrMode == false && volumePolicy != ipsdk::shape::analysis::eMsrVolumePolicy::eMVP_2d)) { \
131  std::string dependencyName = BOOST_PP_STRINGIZE(BOOST_PP_SEQ_ELEM(1, msrInfo)); \
132  std::string dependencyDefaultName = \
133  BOOST_PP_STRINGIZE(BOOST_PP_CAT(BOOST_PP_SEQ_ELEM(2, msrInfo), Msr)); \
134  ipsdk::shape::analysis::MeasureConfigConstPtr pDependencyConfig; \
135  pDependencyConfig = BOOST_PP_IF(BOOST_PP_EQUAL(BOOST_PP_SEQ_SIZE(msrInfo), 5), \
136  BOOST_PP_SEQ_ELEM(BOOST_PP_DEC(BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(msrInfo))), msrInfo), \
137  getMsrConfig()); \
138  ipsdk::DataItemConstPtr pDependencyParams; \
139  BOOST_PP_IF(BOOST_PP_GREATER_EQUAL(BOOST_PP_SEQ_SIZE(msrInfo), 4), \
140  pDependencyParams = BOOST_PP_SEQ_ELEM( \
141  BOOST_PP_DEC(BOOST_PP_SEQ_SIZE(msrInfo)), msrInfo), ); \
142  addDependency(dependencyName, dependencyDefaultName, \
143  pDependencyConfig, pDependencyParams); \
144  } \
145  }
146 
149 #define IPSDK_DECLARE_MEASURE_DEPENDENCIES_MACRO(r, _, i, msrInfo) \
150  BOOST_PP_IF(i, IPSDK_DECLARE_MEASURE_DEPENDENCY(msrInfo), )
151 
152 
157 #define IPSDK_DECLARE_MEASURE_DEPENDENCIES(msrInfoSeq, _) \
158 protected: \
159  void createDependencies(const bool b2dMsrMode) { \
160  BOOST_PP_SEQ_FOR_EACH_I(IPSDK_DECLARE_MEASURE_DEPENDENCIES_MACRO, \
161  _, ((_)(_)(_))msrInfoSeq) \
162  }
163 
166 #define IPSDK_MEASURE_NO_DEPENDENCY
167 
170 
175 #define IPSDK_DECLARE_INDIVISIBLE_MEASURE_INFO_WITHOUT_PARAMS(libraryName, msrName, \
176  msrResultType, msrDependSeq, \
177  msrUnitFormat) \
178 class IPSDK_LIB_API(libraryName) BOOST_PP_CAT(msrName, MsrInfo) : \
179  public ipsdk::shape::analysis::BaseMeasureInfo { \
180  IPSDK_DECLARE_MEASURE_NO_PARAMS() \
181  IPSDK_DECLARE_MEASURE_INFO_BODY(libraryName, msrName, msrResultType, msrDependSeq, \
182  eMPP_Indivisible, eMSR_RequireShapeNone, msrUnitFormat)
183 
188 #define IPSDK_DECLARE_GENERIC_MEASURE_INFO_WITHOUT_PARAMS(libraryName, msrName, \
189  msrResultType, msrDependSeq, \
190  msrUnitFormat) \
191 class IPSDK_LIB_API(libraryName) BOOST_PP_CAT(msrName, MsrInfo) : \
192  public ipsdk::shape::analysis::BaseMeasureInfo { \
193  IPSDK_DECLARE_MEASURE_NO_PARAMS() \
194  IPSDK_DECLARE_MEASURE_INFO_BODY(libraryName, msrName, msrResultType, msrDependSeq, \
195  eMPP_Generic, eMSR_RequireShapeNone, msrUnitFormat)
196 
201 #define IPSDK_DECLARE_GEOMETRY2D_MEASURE_INFO_WITHOUT_PARAMS(libraryName, msrName, \
202  msrResultType, msrDependSeq, \
203  msrShapeRequirements, msrUnitFormat) \
204 class IPSDK_LIB_API(libraryName) BOOST_PP_CAT(msrName, MsrInfo) : \
205  public ipsdk::shape::analysis::BaseMeasureInfo { \
206 IPSDK_DECLARE_MEASURE_NO_PARAMS() \
207  IPSDK_DECLARE_MEASURE_INFO_BODY(libraryName, msrName, msrResultType, msrDependSeq, \
208  eMPP_Geometry2d, msrShapeRequirements, msrUnitFormat)
209 
214 #define IPSDK_DECLARE_GEOMETRY3D_MEASURE_INFO_WITHOUT_PARAMS(libraryName, msrName, \
215  msrResultType, msrDependSeq, \
216  msrShapeRequirements, msrUnitFormat) \
217 class IPSDK_LIB_API(libraryName) BOOST_PP_CAT(msrName, MsrInfo) : \
218  public ipsdk::shape::analysis::BaseMeasureInfo { \
219  IPSDK_DECLARE_MEASURE_NO_PARAMS() \
220  IPSDK_DECLARE_MEASURE_INFO_BODY(libraryName, msrName, msrResultType, msrDependSeq, \
221  eMPP_Geometry3d, msrShapeRequirements, msrUnitFormat)
222 
227 #define IPSDK_DECLARE_INTENSITY_MEASURE_INFO_WITHOUT_PARAMS(libraryName, msrName, \
228  msrResultType, msrDependSeq, \
229  msrUnitFormat) \
230 class IPSDK_LIB_API(libraryName) BOOST_PP_CAT(msrName, MsrInfo) : \
231  public ipsdk::shape::analysis::BaseMeasureInfo { \
232  IPSDK_DECLARE_MEASURE_NO_PARAMS() \
233  bool requiresInputImage() const {return true;} \
234  IPSDK_DECLARE_MEASURE_INFO_BODY(libraryName, msrName, msrResultType, msrDependSeq, \
235  eMPP_Intensity, eMSR_RequireShapeRowIntersect, msrUnitFormat)
236 
239 
244 #define IPSDK_DECLARE_INDIVISIBLE_MEASURE_INFO_WITH_PARAMS(libraryName, msrName, \
245  msrResultType, msrDependSeq, \
246  msrUnitFormat) \
247 class IPSDK_LIB_API(libraryName) BOOST_PP_CAT(msrName, MsrInfo) : \
248  public ipsdk::shape::analysis::BaseMeasureInfo { \
249  IPSDK_DECLARE_MEASURE_PARAMS(msrName) \
250  IPSDK_DECLARE_MEASURE_INFO_BODY(libraryName, msrName, msrResultType, msrDependSeq, \
251  eMPP_Indivisible, eMSR_RequireShapeNone, msrUnitFormat)
252 
257 #define IPSDK_DECLARE_GENERIC_MEASURE_INFO_WITH_PARAMS(libraryName, msrName, \
258  msrResultType, msrDependSeq, \
259  msrUnitFormat) \
260 class IPSDK_LIB_API(libraryName) BOOST_PP_CAT(msrName, MsrInfo) : \
261  public ipsdk::shape::analysis::BaseMeasureInfo { \
262  IPSDK_DECLARE_MEASURE_PARAMS(msrName) \
263  IPSDK_DECLARE_MEASURE_INFO_BODY(libraryName, msrName, msrResultType, msrDependSeq, \
264  eMPP_Generic, eMSR_RequireShapeNone, msrUnitFormat)
265 
270 #define IPSDK_DECLARE_GEOMETRY2D_MEASURE_INFO_WITH_PARAMS(libraryName, msrName, \
271  msrResultType, msrDependSeq, \
272  msrShapeRequirements, msrUnitFormat) \
273 class IPSDK_LIB_API(libraryName) BOOST_PP_CAT(msrName, MsrInfo) : \
274  public ipsdk::shape::analysis::BaseMeasureInfo { \
275  IPSDK_DECLARE_MEASURE_PARAMS(msrName) \
276  IPSDK_DECLARE_MEASURE_INFO_BODY(libraryName, msrName, msrResultType, msrDependSeq, \
277  eMPP_Geometry2d, msrShapeRequirements, msrUnitFormat)
278 
283 #define IPSDK_DECLARE_GEOMETRY3D_MEASURE_INFO_WITH_PARAMS(libraryName, msrName, \
284  msrResultType, msrDependSeq, \
285  msrShapeRequirements, msrUnitFormat) \
286 class IPSDK_LIB_API(libraryName) BOOST_PP_CAT(msrName, MsrInfo) : \
287  public ipsdk::shape::analysis::BaseMeasureInfo { \
288  IPSDK_DECLARE_MEASURE_PARAMS(msrName) \
289  IPSDK_DECLARE_MEASURE_INFO_BODY(libraryName, msrName, msrResultType, msrDependSeq, \
290  eMPP_Geometry3d, msrShapeRequirements, msrUnitFormat)
291 
296 #define IPSDK_DECLARE_INTENSITY_MEASURE_INFO_WITH_PARAMS(libraryName, msrName, \
297  msrResultType, msrDependSeq, \
298  msrUnitFormat) \
299 class IPSDK_LIB_API(libraryName) BOOST_PP_CAT(msrName, MsrInfo) : \
300  public ipsdk::shape::analysis::BaseMeasureInfo { \
301  IPSDK_DECLARE_MEASURE_PARAMS(msrName) \
302  bool requiresInputImage() const {return true;} \
303  IPSDK_DECLARE_MEASURE_INFO_BODY(libraryName, msrName, msrResultType, msrDependSeq, \
304  eMPP_Intensity, eMSR_RequireShapeRowIntersect, \
305  msrUnitFormat)
306 
309 
310 #endif // __IPSDKBASESHAPEANALYSIS_MEASUREINFOHDRMACROS_H__
Main namespace for IPSDK library.
Definition: AlgorithmFunctionEfficiency.h:22
Header part of macros set for ToolTip class declaration.
Predefined types for measure results management.
registrator class for shape measure information objects
Definition: MeasureInfoHdrMacros.h:38
Predefined types for data items.