X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchSolver%2FPlaneGCSSolver%2FPlaneGCSSolver_Tools.h;h=3e615dcf142678ea724885b4547eab0e251260be;hb=refs%2Fheads%2FV9_11_BR;hp=e06acb15923efe5dbb251b1a576ac0443a7144d8;hpb=5a67842979db286af5bb5015fe413d8b06c6587e;p=modules%2Fshaper.git diff --git a/src/SketchSolver/PlaneGCSSolver/PlaneGCSSolver_Tools.h b/src/SketchSolver/PlaneGCSSolver/PlaneGCSSolver_Tools.h index e06acb159..3e615dcf1 100644 --- a/src/SketchSolver/PlaneGCSSolver/PlaneGCSSolver_Tools.h +++ b/src/SketchSolver/PlaneGCSSolver/PlaneGCSSolver_Tools.h @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// Copyright (C) 2014-2023 CEA, EDF // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -12,21 +12,26 @@ // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or -// email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // #ifndef PlaneGCSSolver_Tools_H_ #define PlaneGCSSolver_Tools_H_ #include -#include +#include #include -#include -#include +class GeomAPI_BSpline2d; +class GeomAPI_Circ2d; +class GeomAPI_Ellipse2d; +class GeomAPI_Lin2d; +class GeomAPI_Pnt2d; + +class ModelAPI_AttributeDoubleArray; +class ModelAPI_AttributeIntArray; /** \namespace PlaneGCSSolver_Tools * \ingroup Plugins @@ -39,8 +44,14 @@ namespace PlaneGCSSolver_Tools SolverConstraintPtr createConstraint(ConstraintPtr theConstraint); /// \brief Creates temporary constraint to fix the feature after movement - std::shared_ptr + std::shared_ptr createMovementConstraint(FeaturePtr theMovedFeature); + /// \brief Creates temporary constraint to fix the attribute after movement + std::shared_ptr + createMovementConstraint(AttributePtr theMovedAttribute); + /// \brief Creates temporary constraint to fix the point in array after movement + std::shared_ptr + createMovementConstraint(const std::pair& theMovedPointInArray); /// \brief Creates new constraint using given parameters /// \param theConstraint [in] original constraint @@ -60,19 +71,63 @@ namespace PlaneGCSSolver_Tools const EntityWrapperPtr& theEntity3 = EntityWrapperPtr(), const EntityWrapperPtr& theEntity4 = EntityWrapperPtr()); + /// \brief Return \c true if the attribute is used in PlaneGCS solver + /// \param[in] theAttrName name of the attribute + /// \param[in] theOwnerName name of the parent feature + bool isAttributeApplicable(const std::string& theAttrName, + const std::string& theOwnerName); + /// \brief Convert entity to point /// \return empty pointer if the entity is not a point std::shared_ptr point(EntityWrapperPtr theEntity); /// \brief Convert entity to line /// \return empty pointer if the entity is not a line std::shared_ptr line(EntityWrapperPtr theEntity); + /// \brief Convert entity to circle + /// \return empty pointer if the entity is not a circle + std::shared_ptr circle(EntityWrapperPtr theEntity); + /// \brief Convert entity to ellipse + /// \return empty pointer if the entity is not an ellipse + std::shared_ptr ellipse(EntityWrapperPtr theEntity); + /// \brief Convert entity to Bs-pline + /// \return empty pointer if the entity is not an ellipse + std::shared_ptr bspline(EntityWrapperPtr theEntity); /// \brief Convert entity to line /// \return empty pointer if the entity is not a line std::shared_ptr line(FeaturePtr theFeature); + /// \brief Update start and end parameters of circular and elliptic arcs + /// respectively to start and end points on the arc. + /// For the circular arc, the radius is calculated too. + void recalculateArcParameters(EntityWrapperPtr theArc); + /// brief Return list of parameters for the given entity GCS::SET_pD parameters(const EntityWrapperPtr& theEntity); + + /// \brief Update value in theDest if theSource is differ more than theTolerance + /// \return \c true if the value was updated. + bool updateValue(const double& theSource, double& theDest, + const double theTolerance = 1.e4 * tolerance); + + double distance(const GCS::Point& thePnt1, const GCS::Point& thePnt2); + + /// \brief Provide an interface to access values in attribute which is an array of values + class AttributeArray + { + public: + AttributeArray(AttributePtr theAttribute); + + bool isInitialized() const; + + int size() const; + + double value(const int theIndex) const; + + private: + std::shared_ptr myDouble; + std::shared_ptr myInteger; + }; }; #endif