16 #ifndef __IPSDKBASESHAPEANALYSIS_MEASUREINFOHDRMACROS_H__ 17 #define __IPSDKBASESHAPEANALYSIS_MEASUREINFOHDRMACROS_H__ 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> 50 #define IPSDK_DECLARE_MEASURE_INFO_BODY(libraryName, msrName, msrResultType, msrDependSeq, \ 51 msrProcessingPolicy, msrShapeRequirements, \ 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)>(); \ 58 BOOST_PP_CAT(msrName, MsrInfo)(); \ 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; \ 73 ipsdk::shape::analysis::eMsrProcessingPolicy getMsrProcessingPolicy() const { \ 74 return g_msrProcessingPolicy; \ 76 ipsdk::shape::analysis::eMsrShapeRequirements getMsrShapeRequirements() const { \ 77 return g_msrShapeRequirements; \ 79 ipsdk::shape::analysis::eMsrUnitFormat getMsrUnitFormat() const { \ 80 return g_msrUnitFormat; \ 82 static ipsdk::shape::analysis::MeasureInfoPtr createMeasureInfo(); \ 83 IPSDK_DECLARE_MEASURE_DEPENDENCIES(msrDependSeq, _) \ 85 ipsdk::shape::analysis::MeasurePtr createMeasureDerived() const; 92 #define IPSDK_DECLARE_MEASURE_PARAMS(msrName) \ 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; \ 103 void initDerived() { \ 104 _pMsrParams = boost::static_pointer_cast<MsrParamsConstType>(getMsrParams()); \ 107 MsrParamsConstStorageType _pMsrParams; 111 #define IPSDK_DECLARE_MEASURE_NO_PARAMS() \ 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() { \ 125 #define IPSDK_DECLARE_MEASURE_DEPENDENCY(msrInfo) \ 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), \ 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); \ 149 #define IPSDK_DECLARE_MEASURE_DEPENDENCIES_MACRO(r, _, i, msrInfo) \ 150 BOOST_PP_IF(i, IPSDK_DECLARE_MEASURE_DEPENDENCY(msrInfo), ) 157 #define IPSDK_DECLARE_MEASURE_DEPENDENCIES(msrInfoSeq, _) \ 159 void createDependencies(const bool b2dMsrMode) { \ 160 BOOST_PP_SEQ_FOR_EACH_I(IPSDK_DECLARE_MEASURE_DEPENDENCIES_MACRO, \ 161 _, ((_)(_)(_))msrInfoSeq) \ 166 #define IPSDK_MEASURE_NO_DEPENDENCY 175 #define IPSDK_DECLARE_INDIVISIBLE_MEASURE_INFO_WITHOUT_PARAMS(libraryName, msrName, \ 176 msrResultType, msrDependSeq, \ 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) 188 #define IPSDK_DECLARE_GENERIC_MEASURE_INFO_WITHOUT_PARAMS(libraryName, msrName, \ 189 msrResultType, msrDependSeq, \ 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) 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) 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) 227 #define IPSDK_DECLARE_INTENSITY_MEASURE_INFO_WITHOUT_PARAMS(libraryName, msrName, \ 228 msrResultType, msrDependSeq, \ 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) 244 #define IPSDK_DECLARE_INDIVISIBLE_MEASURE_INFO_WITH_PARAMS(libraryName, msrName, \ 245 msrResultType, msrDependSeq, \ 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) 257 #define IPSDK_DECLARE_GENERIC_MEASURE_INFO_WITH_PARAMS(libraryName, msrName, \ 258 msrResultType, msrDependSeq, \ 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) 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) 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) 296 #define IPSDK_DECLARE_INTENSITY_MEASURE_INFO_WITH_PARAMS(libraryName, msrName, \ 297 msrResultType, msrDependSeq, \ 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, \ 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.