15 #ifndef __IPSDKGEOMETRY_GEOMETRYENTITY2DSRCMACROS_H__ 16 #define __IPSDKGEOMETRY_GEOMETRYENTITY2DSRCMACROS_H__ 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> 42 #define IPSDK_IMPLEMENT_GEOMETRY_TRANSFORM_2D_VISITOR_MACRO(s, className, TransformType) \ 43 bool className::visitInSitu(const TransformType& transform) { \ 44 return transform.processInSitu(*this); \ 46 ipsdk::geom::GeometryEntity2dPtr \ 47 className::visitNonInSitu(const TransformType& transform) const { \ 48 return transform.process(*this); \ 55 #define IPSDK_IMPLEMENT_GEOMETRY_TRANSFORM_2D_VISITORS(className) \ 56 BOOST_PP_SEQ_FOR_EACH(IPSDK_IMPLEMENT_GEOMETRY_TRANSFORM_2D_VISITOR_MACRO, \ 58 IPSDK_GEOMETRY_TRANSFORM_2D); 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); \ 68 template <typename T> \ 69 ipsdk::geom::GeometryEntity2dPtr \ 70 className<T>::visitNonInSitu(const TransformType& transform) const { \ 71 return transform.process(*this); \ 78 #define IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_TRANSFORM_2D_VISITORS(className) \ 79 BOOST_PP_SEQ_FOR_EACH(IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_TRANSFORM_2D_VISITOR_MACRO, \ 81 IPSDK_GEOMETRY_TRANSFORM_2D); 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); \ 99 #define IPSDK_IMPLEMENT_GEOMETRY_MEASURE_2D_VISITORS(className) \ 100 BOOST_PP_SEQ_FOR_EACH(IPSDK_IMPLEMENT_GEOMETRY_MEASURE_2D_VISITOR_MACRO, \ 102 IPSDK_GEOMETRY_MEASURE_2D); 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); \ 118 #define IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_MEASURE_2D_VISITORS(className) \ 119 BOOST_PP_SEQ_FOR_EACH(IPSDK_IMPLEMENT_GEOMETRY_TEMPLATE_MEASURE_2D_VISITOR_MACRO, \ 121 IPSDK_GEOMETRY_MEASURE_2D); 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) 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) 143 #endif // __IPSDKGEOMETRY_GEOMETRYENTITY2DSRCMACROS_H__ Source part of macros set for template class serialization.