Salome HOME
SketchSolver library refactoring
[modules/shaper.git] / src / SketchSolver / SketchSolver_Constraint.h
index b7925d66c9c400190818c55426f0709d29d8efcf..6cfe355f8aa159338b4e2d1b8a3c68a6beeafe92 100644 (file)
@@ -76,6 +76,11 @@ 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.
+  ///        E.g. the distance between line and point may be signed.
+  virtual void adjustConstraint()
+  {}
+
   /// \brief Create or change SlveSpace entity according to the given attribute
   /// \param[in]  theAttribute  reference to the entity to be changed
   /// \param[out] theType       type of created entity
@@ -86,6 +91,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();
 
@@ -93,6 +106,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
@@ -109,22 +126,6 @@ typedef std::shared_ptr<SketchSolver_Constraint> SolverConstraintPtr;
 
 
 
-/** \class   SketchSolver_ConstraintDistance
- *  \ingroup Plugins
- *  \brief   Convert distance constraint to SolveSpace structure
- */
-class SketchSolver_ConstraintDistance : public SketchSolver_Constraint
-{
-public:
-  SketchSolver_ConstraintDistance(ConstraintPtr theConstraint) :
-      SketchSolver_Constraint(theConstraint)
-  {}
-
-  virtual int getType() const
-  { return SLVS_C_PT_PT_DISTANCE; }
-};
-
-
 /** \class   SketchSolver_ConstraintParallel
  *  \ingroup Plugins
  *  \brief   Convert Parallel constraint to SolveSpace structure
@@ -188,4 +189,27 @@ public:
   { return SLVS_C_VERTICAL; }
 };
 
+
+/** \class   SketchSolver_ConstraintRadius
+ *  \ingroup Plugins
+ *  \brief   Convert Radius constraint to SolveSpace structure
+ */
+class SketchSolver_ConstraintRadius : public SketchSolver_Constraint
+{
+public:
+  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