IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
GeometryEntity2dSrcMacros.h
Go to the documentation of this file.
1 // GeometryEntity2dSrcMacros.h:
3 // ----------------------------
4 //
14 
15 #ifndef __IPSDKGEOMETRY_GEOMETRYENTITY2DSRCMACROS_H__
16 #define __IPSDKGEOMETRY_GEOMETRYENTITY2DSRCMACROS_H__
17 
19 #include <IPSDKGeometry/Transform/2d/SimilarityTransform2d.h>
20 #include <IPSDKGeometry/Transform/2d/HomographyTransform2d.h>
21 #include <IPSDKGeometry/Transform/2d/AnisotropicScaleTransform2d.h>
22 #include <IPSDKGeometry/Transform/2d/RigidTransform2d.h>
23 #include <IPSDKGeometry/Transform/2d/RotationTransform2d.h>
24 #include <IPSDKGeometry/Transform/2d/ScaleTransform2d.h>
25 #include <IPSDKGeometry/Transform/2d/TranslationTransform2d.h>
26 #include <IPSDKGeometry/Transform/2d/CentroidTransform2d.h>
27 #include <IPSDKGeometry/Transform/2d/ConvexHullTransform2d.h>
28 #include <IPSDKGeometry/Transform/2d/EnvelopeTransform2d.h>
29 #include <IPSDKGeometry/Transform/2d/SimplifyTransform2d.h>
30 #include <IPSDKGeometry/Transform/2d/MinEnclosingCircleTransform2d.h>
31 #include <IPSDKGeometry/Measure/2d/AreaMsr2d.h>
32 #include <IPSDKGeometry/Measure/2d/PerimeterMsr2d.h>
33 #include <IPSDKGeometry/Measure/2d/MomentsMsr2d.h>
34 #include <IPSDKGeometry/Measure/2d/HuMomentsMsr2d.h>
35 
38 
42 #define IPSDK_IMPLEMENT_GEOMETRY_TRANSFORM_2D_VISITOR_MACRO(s, className, TransformType) \
43  bool className::visitInSitu(const TransformType& transform) { \
44  return transform.processInSitu(*this); \
45  } \
46  ipsdk::geom::GeometryEntity2dPtr \
47  className::visitNonInSitu(const TransformType& transform) const { \
48  return transform.process(*this); \
49  }
50 
51 
55 #define IPSDK_IMPLEMENT_GEOMETRY_TRANSFORM_2D_VISITORS(className) \
56  BOOST_PP_SEQ_FOR_EACH(IPSDK_IMPLEMENT_GEOMETRY_TRANSFORM_2D_VISITOR_MACRO, \
57  className, \
58  IPSDK_GEOMETRY_TRANSFORM_2D);
59 
63 #define IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_TRANSFORM_2D_VISITOR_MACRO(s, className, TransformType) \
64  template <typename T> \
65  bool className<T>::visitInSitu(const TransformType& transform) { \
66  return transform.processInSitu(*this); \
67  } \
68  template <typename T> \
69  ipsdk::geom::GeometryEntity2dPtr \
70  className<T>::visitNonInSitu(const TransformType& transform) const { \
71  return transform.process(*this); \
72  }
73 
74 
78 #define IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_TRANSFORM_2D_VISITORS(className) \
79  BOOST_PP_SEQ_FOR_EACH(IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_TRANSFORM_2D_VISITOR_MACRO, \
80  className, \
81  IPSDK_GEOMETRY_TRANSFORM_2D);
82 
85 
89 #define IPSDK_IMPLEMENT_GEOMETRY_MEASURE_2D_VISITOR_MACRO(s, className, MeasureInfo) \
90  bool className::visit(const BOOST_PP_SEQ_ELEM(0, MeasureInfo)& measure, \
91  BOOST_PP_SEQ_ELEM(1, MeasureInfo)& result) const { \
92  return measure.process(*this, result); \
93  }
94 
95 
99 #define IPSDK_IMPLEMENT_GEOMETRY_MEASURE_2D_VISITORS(className) \
100  BOOST_PP_SEQ_FOR_EACH(IPSDK_IMPLEMENT_GEOMETRY_MEASURE_2D_VISITOR_MACRO, \
101  className, \
102  IPSDK_GEOMETRY_MEASURE_2D);
103 
107 #define IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_MEASURE_2D_VISITOR_MACRO(s, className, MeasureInfo) \
108  template <typename T> \
109  bool className<T>::visit(const BOOST_PP_SEQ_ELEM(0, MeasureInfo)& measure, \
110  BOOST_PP_SEQ_ELEM(1, MeasureInfo)& result) const { \
111  return measure.process(*this, result); \
112  }
113 
114 
118 #define IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_MEASURE_2D_VISITORS(className) \
119  BOOST_PP_SEQ_FOR_EACH(IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_MEASURE_2D_VISITOR_MACRO, \
120  className, \
121  IPSDK_GEOMETRY_MEASURE_2D);
122 
125 
128 #define IPSDK_IMPLEMENT_GEOMETRY_ENTITY_2D(libraryName, namespaceSeq, className, version) \
129  IPSDK_IMPLEMENT_SERIAL_WITH_COPY(libraryName, namespaceSeq, className, version) \
130  IPSDK_IMPLEMENT_GEOMETRY_TRANSFORM_2D_VISITORS(className) \
131  IPSDK_IMPLEMENT_GEOMETRY_MEASURE_2D_VISITORS(className)
132 
135 #define IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_ENTITY_2D(libraryName, className, seqT, version) \
136  IPSDK_IMPLEMENT_TEMPLATE_SERIAL_WITH_COPY(libraryName, className, seqT, version) \
137  IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_TRANSFORM_2D_VISITORS(className) \
138  IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_MEASURE_2D_VISITORS(className)
139 
142 
143 #endif // __IPSDKGEOMETRY_GEOMETRYENTITY2DSRCMACROS_H__
Source part of macros set for template class serialization.