Salome HOME
Add call execute() to sketch feature.
[modules/shaper.git] / src / SketchSolver / SketchSolver_Constraint.h
index 6a57f6b2182def8f4382a7d02a3a602f509bbc3f..f4a15db60ff19e3445a04d1c3c420ffa7134cae6 100644 (file)
@@ -28,6 +28,7 @@ class SketchSolver_Constraint
 protected:
   /// Default constructor
   SketchSolver_Constraint() {}
+  /// Constructor based on SketchPlugin constraint
   SketchSolver_Constraint(ConstraintPtr theConstraint);
 
 public:
@@ -46,11 +47,14 @@ public:
   virtual bool remove(ConstraintPtr theConstraint = ConstraintPtr());
 
   /// \brief Update SketchPlugin attributes using the data obtained from SolveSpace entities
-  void refresh();
+  virtual void refresh();
 
   /// \brief Returns the type of constraint
   virtual int getType() const = 0;
 
+  /// \brief The constraint is made temporary
+  void makeTemporary() const;
+
   /// \brief Checks the constraint is used by current object
   virtual bool hasConstraint(ConstraintPtr theConstraint) const
   { return theConstraint == myBaseConstraint; }
@@ -63,6 +67,9 @@ public:
   /// \brief Return identifier of SolveSpace entity relating to the attribute
   Slvs_hEntity getId(AttributePtr theAttribute) const;
 
+  /// \brief Adds a feature to constraint and create its analogue in SolveSpace
+  virtual void addFeature(FeaturePtr theFeature);
+
   /// \brief Shows error message
   const std::string& error() const
   { return myErrorMsg; }
@@ -76,7 +83,12 @@ protected:
   /// \param[out] theAttributes list of attributes to be filled
   virtual void getAttributes(double& theValue, std::vector<Slvs_hEntity>& theAttributes);
 
-  /// \brief This method is used in derived objects to check consistence of constraint.
+  /// \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 This method is used in derived objects to check consistency of constraint.
   ///        E.g. the distance between line and point may be signed.
   virtual void adjustConstraint()
   {}
@@ -91,6 +103,14 @@ protected:
   /// \brief Create or change SlveSpace entity according to the given feature
   Slvs_hEntity changeEntity(FeaturePtr theFeature, int& theType);
 
+  /// \brief Calculate middle point on the specified entity
+  /// \param[in]  theEntity  arc or line
+  /// \param[in]  theCoeff   is a value in [0.0, 1.0] which shows the position of the point on the entity (0.0 - start point, 1.0 - end point)
+  /// \param[out] theX       X coordinate of middle point
+  /// \param[out] theY       Y coordinate of middle point
+  void calculateMiddlePoint(const Slvs_Entity& theEntity, double theCoeff,
+                            double& theX, double& theY) const;
+
   /// \brief Removes the links to unused entities
   void cleanRemovedEntities();
 
@@ -98,6 +118,10 @@ protected:
   void cleanErrorMsg()
   { myErrorMsg.clear(); }
 
+private:
+  /// \brief Sets error, if the attribute is not initialized
+  bool isInitialized(AttributePtr theAttribute);
+
 protected:
   SketchSolver_Group* myGroup; ///< the group which contains current constraint
   ConstraintPtr myBaseConstraint; ///< SketchPlugin constraint
@@ -121,6 +145,7 @@ typedef std::shared_ptr<SketchSolver_Constraint> SolverConstraintPtr;
 class SketchSolver_ConstraintParallel : public SketchSolver_Constraint
 {
 public:
+  /// Constructor based on SketchPlugin constraint
   SketchSolver_ConstraintParallel(ConstraintPtr theConstraint) :
       SketchSolver_Constraint(theConstraint)
   {}
@@ -137,6 +162,7 @@ public:
 class SketchSolver_ConstraintPerpendicular : public SketchSolver_Constraint
 {
 public:
+  /// Constructor based on SketchPlugin constraint
   SketchSolver_ConstraintPerpendicular(ConstraintPtr theConstraint) :
       SketchSolver_Constraint(theConstraint)
   {}
@@ -153,6 +179,7 @@ public:
 class SketchSolver_ConstraintHorizontal : public SketchSolver_Constraint
 {
 public:
+  /// Constructor based on SketchPlugin constraint
   SketchSolver_ConstraintHorizontal(ConstraintPtr theConstraint) :
       SketchSolver_Constraint(theConstraint)
   {}
@@ -169,6 +196,7 @@ public:
 class SketchSolver_ConstraintVertical : public SketchSolver_Constraint
 {
 public:
+  /// Constructor based on SketchPlugin constraint
   SketchSolver_ConstraintVertical(ConstraintPtr theConstraint) :
       SketchSolver_Constraint(theConstraint)
   {}
@@ -177,4 +205,28 @@ public:
   { return SLVS_C_VERTICAL; }
 };
 
+
+/** \class   SketchSolver_ConstraintRadius
+ *  \ingroup Plugins
+ *  \brief   Convert Radius constraint to SolveSpace structure
+ */
+class SketchSolver_ConstraintRadius : public SketchSolver_Constraint
+{
+public:
+  /// Constructor based on SketchPlugin constraint
+  SketchSolver_ConstraintRadius(ConstraintPtr theConstraint) :
+      SketchSolver_Constraint(theConstraint)
+  {}
+
+  virtual int getType() const
+  { return SLVS_C_DIAMETER; }
+
+  virtual void adjustConstraint()
+  {
+    Slvs_Constraint aConstraint = myStorage->getConstraint(mySlvsConstraints.front());
+    aConstraint.valA *= 2.0;
+    myStorage->updateConstraint(aConstraint);
+  }
+};
+
 #endif