From f93326feece8b4205830001c0e20168d4bb2970f Mon Sep 17 00:00:00 2001 From: vsv Date: Mon, 16 Mar 2015 14:47:15 +0300 Subject: [PATCH] Remove code duplication. --- src/SketcherPrs/SketcherPrs_Factory.cpp | 47 +++++++------------------ src/SketcherPrs/SketcherPrs_Factory.h | 17 ++++----- 2 files changed, 21 insertions(+), 43 deletions(-) diff --git a/src/SketcherPrs/SketcherPrs_Factory.cpp b/src/SketcherPrs/SketcherPrs_Factory.cpp index 187b94dce..8898569c3 100644 --- a/src/SketcherPrs/SketcherPrs_Factory.cpp +++ b/src/SketcherPrs/SketcherPrs_Factory.cpp @@ -11,40 +11,17 @@ #include #include - -AISObjectPtr SketcherPrs_Factory::coincidentConstraint(SketchPlugin_Constraint* theConstraint, - const std::shared_ptr& thePlane) -{ - std::shared_ptr aAISObj = AISObjectPtr(new GeomAPI_AISObject()); - Handle(SketcherPrs_Coincident) aPrs = new SketcherPrs_Coincident(theConstraint, thePlane); - aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aPrs)); - return aAISObj; -} - - -AISObjectPtr SketcherPrs_Factory::parallelConstraint(SketchPlugin_Constraint* theConstraint, - const std::shared_ptr& thePlane) -{ - std::shared_ptr aAISObj = AISObjectPtr(new GeomAPI_AISObject()); - Handle(SketcherPrs_Parallel) aPrs = new SketcherPrs_Parallel(theConstraint, thePlane); - aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aPrs)); - return aAISObj; +#define CONSTRAINT_PRS_IMPL(NAME, CLASS) \ +AISObjectPtr SketcherPrs_Factory::NAME(SketchPlugin_Constraint* theConstraint, \ + const std::shared_ptr& thePlane) \ +{ \ + std::shared_ptr aAISObj = AISObjectPtr(new GeomAPI_AISObject()); \ + Handle(CLASS) aPrs = new CLASS(theConstraint, thePlane); \ + aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aPrs)); \ + return aAISObj; \ } -AISObjectPtr SketcherPrs_Factory::perpendicularConstraint(SketchPlugin_Constraint* theConstraint, - const std::shared_ptr& thePlane) -{ - std::shared_ptr aAISObj = AISObjectPtr(new GeomAPI_AISObject()); - Handle(SketcherPrs_Perpendicular) aPrs = new SketcherPrs_Perpendicular(theConstraint, thePlane); - aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aPrs)); - return aAISObj; -} - -AISObjectPtr SketcherPrs_Factory::rigidConstraint(SketchPlugin_Constraint* theConstraint, - const std::shared_ptr& thePlane) -{ - std::shared_ptr aAISObj = AISObjectPtr(new GeomAPI_AISObject()); - Handle(SketcherPrs_Rigid) aPrs = new SketcherPrs_Rigid(theConstraint, thePlane); - aAISObj->setImpl(new Handle(AIS_InteractiveObject)(aPrs)); - return aAISObj; -} +CONSTRAINT_PRS_IMPL(coincidentConstraint, SketcherPrs_Coincident); +CONSTRAINT_PRS_IMPL(parallelConstraint, SketcherPrs_Parallel); +CONSTRAINT_PRS_IMPL(perpendicularConstraint, SketcherPrs_Perpendicular); +CONSTRAINT_PRS_IMPL(rigidConstraint, SketcherPrs_Rigid) diff --git a/src/SketcherPrs/SketcherPrs_Factory.h b/src/SketcherPrs/SketcherPrs_Factory.h index 6e61853e9..a76b5a285 100644 --- a/src/SketcherPrs/SketcherPrs_Factory.h +++ b/src/SketcherPrs/SketcherPrs_Factory.h @@ -14,6 +14,11 @@ class SketchPlugin_Constraint; +#define GET_CONSTRAINT_PRS(NAME) \ + static AISObjectPtr NAME(SketchPlugin_Constraint* theConstraint, \ + const std::shared_ptr& thePlane); \ + + /** * Class which creates constraints presentations */ @@ -23,26 +28,22 @@ public: /// Creates coincedent constraint presentation /// \param theConstraint the constraint /// \param thePlane the current sketch plane - static AISObjectPtr coincidentConstraint(SketchPlugin_Constraint* theConstraint, - const std::shared_ptr& thePlane); + GET_CONSTRAINT_PRS(coincidentConstraint) /// Creates coincedent parallel presentation /// \param theConstraint the constraint /// \param thePlane the current sketch plane - static AISObjectPtr parallelConstraint(SketchPlugin_Constraint* theConstraint, - const std::shared_ptr& thePlane); + GET_CONSTRAINT_PRS(parallelConstraint) /// Creates coincedent perpendicular presentation /// \param theConstraint the constraint /// \param thePlane the current sketch plane - static AISObjectPtr perpendicularConstraint(SketchPlugin_Constraint* theConstraint, - const std::shared_ptr& thePlane); + GET_CONSTRAINT_PRS(perpendicularConstraint) /// Creates coincedent perpendicular presentation /// \param theConstraint the constraint /// \param thePlane the current sketch plane - static AISObjectPtr rigidConstraint(SketchPlugin_Constraint* theConstraint, - const std::shared_ptr& thePlane); + GET_CONSTRAINT_PRS(rigidConstraint) }; #endif -- 2.39.2