IPSDK  4_1_0_2
IPSDK : Image Processing Software Development Kit
GeometryEntity3dSrcMacros.h
Go to the documentation of this file.
1 // GeometryEntity3dSrcMacros.h:
3 // ----------------------------
4 //
14 
15 #ifndef __IPSDKGEOMETRY_GEOMETRYENTITY3DSRCMACROS_H__
16 #define __IPSDKGEOMETRY_GEOMETRYENTITY3DSRCMACROS_H__
17 
19 #include <IPSDKGeometry/Transform/3d/SimilarityTransform3d.h>
20 #include <IPSDKGeometry/Transform/3d/HomographyTransform3d.h>
21 #include <IPSDKGeometry/Transform/3d/AnisotropicScaleTransform3d.h>
22 #include <IPSDKGeometry/Transform/3d/RigidTransform3d.h>
23 #include <IPSDKGeometry/Transform/3d/RotationTransform3d.h>
24 #include <IPSDKGeometry/Transform/3d/ScaleTransform3d.h>
25 #include <IPSDKGeometry/Transform/3d/TranslationTransform3d.h>
26 #include <IPSDKGeometry/Transform/3d/CentroidTransform3d.h>
27 #include <IPSDKGeometry/Transform/3d/ConvexHullTransform3d.h>
28 #include <IPSDKGeometry/Transform/3d/EnvelopeTransform3d.h>
29 #include <IPSDKGeometry/Transform/3d/MinEnclosingSphereTransform3d.h>
30 #include <IPSDKGeometry/Measure/3d/AreaMsr3d.h>
31 #include <IPSDKGeometry/Measure/3d/VolumeMsr3d.h>
32 
35 
39 #define IPSDK_IMPLEMENT_GEOMETRY_TRANSFORM_3D_VISITOR_MACRO(s, className, TransformType) \
40  bool className::visitInSitu(const TransformType& transform) { \
41  return transform.processInSitu(*this); \
42  } \
43  ipsdk::geom::GeometryEntity3dPtr \
44  className::visitNonInSitu(const TransformType& transform) const { \
45  return transform.process(*this); \
46  }
47 
48 
52 #define IPSDK_IMPLEMENT_GEOMETRY_TRANSFORM_3D_VISITORS(className) \
53  BOOST_PP_SEQ_FOR_EACH(IPSDK_IMPLEMENT_GEOMETRY_TRANSFORM_3D_VISITOR_MACRO, \
54  className, \
55  IPSDK_GEOMETRY_TRANSFORM_3D);
56 
60 #define IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_TRANSFORM_3D_VISITOR_MACRO(s, className, TransformType) \
61  template <typename T> \
62  bool className<T>::visitInSitu(const TransformType& transform) { \
63  return transform.processInSitu(*this); \
64  } \
65  template <typename T> \
66  ipsdk::geom::GeometryEntity3dPtr \
67  className<T>::visitNonInSitu(const TransformType& transform) const { \
68  return transform.process(*this); \
69  }
70 
71 
75 #define IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_TRANSFORM_3D_VISITORS(className) \
76  BOOST_PP_SEQ_FOR_EACH(IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_TRANSFORM_3D_VISITOR_MACRO, \
77  className, \
78  IPSDK_GEOMETRY_TRANSFORM_3D);
79 
82 
86 #define IPSDK_IMPLEMENT_GEOMETRY_MEASURE_3D_VISITOR_MACRO(s, className, MeasureInfo) \
87  bool className::visit(const BOOST_PP_SEQ_ELEM(0, MeasureInfo)& measure, \
88  BOOST_PP_SEQ_ELEM(1, MeasureInfo)& result) const { \
89  return measure.process(*this, result); \
90  }
91 
92 
96 #define IPSDK_IMPLEMENT_GEOMETRY_MEASURE_3D_VISITORS(className) \
97  BOOST_PP_SEQ_FOR_EACH(IPSDK_IMPLEMENT_GEOMETRY_MEASURE_3D_VISITOR_MACRO, \
98  className, \
99  IPSDK_GEOMETRY_MEASURE_3D);
100 
104 #define IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_MEASURE_3D_VISITOR_MACRO(s, className, MeasureInfo) \
105  template <typename T> \
106  bool className<T>::visit(const BOOST_PP_SEQ_ELEM(0, MeasureInfo)& measure, \
107  BOOST_PP_SEQ_ELEM(1, MeasureInfo)& result) const { \
108  return measure.process(*this, result); \
109  }
110 
111 
115 #define IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_MEASURE_3D_VISITORS(className) \
116  BOOST_PP_SEQ_FOR_EACH(IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_MEASURE_3D_VISITOR_MACRO, \
117  className, \
118  IPSDK_GEOMETRY_MEASURE_3D);
119 
122 
125 #define IPSDK_IMPLEMENT_GEOMETRY_ENTITY_3D(libraryName, namespaceSeq, className, version) \
126  IPSDK_IMPLEMENT_SERIAL_WITH_COPY(libraryName, namespaceSeq, className, version) \
127  IPSDK_IMPLEMENT_GEOMETRY_TRANSFORM_3D_VISITORS(className) \
128  IPSDK_IMPLEMENT_GEOMETRY_MEASURE_3D_VISITORS(className)
129 
132 #define IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_ENTITY_3D(libraryName, className, seqT, version) \
133  IPSDK_IMPLEMENT_TEMPLATE_SERIAL_WITH_COPY(libraryName, className, seqT, version) \
134  IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_TRANSFORM_3D_VISITORS(className) \
135  IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_MEASURE_3D_VISITORS(className)
136 
137 #define IPSDK_IMPLEMENT_ABSTRACT_GEOMETRY_TEMPLATE_ENTITY_3D(libraryName, className, seqT, version) \
138  IPSDK_IMPLEMENT_ABSTRACT_TEMPLATE_SERIAL_WITH_COPY(libraryName, className, seqT, version) \
139  IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_TRANSFORM_3D_VISITORS(className) \
140  IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_MEASURE_3D_VISITORS(className)
141 
144 
145 #endif // __IPSDKGEOMETRY_GEOMETRYENTITY3DSRCMACROS_H__
Source part of macros set for template class serialization.