X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchSolver%2FSketchSolver_ConstraintMirror.h;h=f6aa365eb616810b736c30d501cd36644449a985;hb=506a83727ca8f8297fc1dcdf4ea40d7865c35450;hp=092e4dff658f1020b63f1c003ce75f8bae83176e;hpb=ef017929d9fd0f90a8bc7513148e25ce833971ac;p=modules%2Fshaper.git diff --git a/src/SketchSolver/SketchSolver_ConstraintMirror.h b/src/SketchSolver/SketchSolver_ConstraintMirror.h index 092e4dff6..f6aa365eb 100644 --- a/src/SketchSolver/SketchSolver_ConstraintMirror.h +++ b/src/SketchSolver/SketchSolver_ConstraintMirror.h @@ -17,9 +17,11 @@ class SketchSolver_ConstraintMirror : public SketchSolver_Constraint { public: + /// Constructor based on SketchPlugin constraint SketchSolver_ConstraintMirror(ConstraintPtr theConstraint) : SketchSolver_Constraint(theConstraint), - myNumberOfObjects(0) + myNumberOfObjects(0), + myMirrorLineLength(0.0) {} virtual int getType() const @@ -42,6 +44,11 @@ protected: virtual void getAttributes(double& theValue, std::vector& theAttributes) { /* do nothing here */ } + /// \brief Verify the attributes of constraint are changed (and constraint need to rebuild) + /// \param[in] theConstraint constraint, which attributes should be checked (if NULL, the myBaseConstraint is used) + /// \return \c true if some attributes are changed + virtual bool checkAttributesChanged(ConstraintPtr theConstraint); + /// \brief Generate list of entities of mirror constraint /// \param[out] theMirrorLine entity corresponding to mirror line /// \param[out] theBaseEntities list of entities to mirror @@ -50,6 +57,10 @@ protected: std::vector& theBaseEntities, std::vector& theMirrorEntities); + /// \brief This method is used in derived objects to check consistence of constraint. + /// E.g. the distance between line and point may be signed. + virtual void adjustConstraint(); + private: /// \brief Change parameters of entities to be symmetric relative a line, /// given by array of parameters (coordinates of first and last points) @@ -57,8 +68,12 @@ private: const Slvs_Entity& theMirror, const double theMirrorLine[]) const; + /// \brief Precisely update last point to be on arc + void adjustArcPoints(const Slvs_Entity& theArc) const; + private: - size_t myNumberOfObjects; ///< number of previously mirrored objects + size_t myNumberOfObjects; ///< number of previously mirrored objects + double myMirrorLineLength; ///< length of mirror line (should be always greater than 0) }; #endif