Salome HOME
Managing of several groups with conflicting constraints on the same sketch plane
[modules/shaper.git] / src / SketchSolver / SketchSolver_Builder.h
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
2
3 // File:    SketchSolver_Builder.h
4 // Created: 25 Mar 2015
5 // Author:  Artem ZHIDKOV
6
7 #ifndef SketchSolver_Builder_H_
8 #define SketchSolver_Builder_H_
9
10 #include <SketchSolver_Constraint.h>
11 #include <SketchPlugin_Constraint.h>
12
13 #include <GeomAPI_Lin2d.h>
14 #include <GeomAPI_Pnt2d.h>
15
16 /** \class   SketchSolver_Builder
17  *  \ingroup Plugins
18  *  \brief   Abstract class for builders of solver's entities
19  */
20 class SketchSolver_Builder
21 {
22 public:
23   /// \brief Creates a storage specific for used solver
24   virtual StoragePtr createStorage(const GroupID& theGroup) const = 0;
25   /// \brief Creates specific solver
26   virtual SolverPtr createSolver() const = 0;
27
28   /// \brief Creates a solver's constraint using given SketchPlugin constraint
29   ///        or returns empty pointer if not all attributes are correct
30   SolverConstraintPtr createConstraint(ConstraintPtr theConstraint) const;
31
32   /// \brief Creates temporary constraint to fix the placement of the feature
33   SolverConstraintPtr createFixedConstraint(FeaturePtr theFixedFeature) const;
34
35   /// \brief Creates temporary constraint to fix radius of the arc
36   SolverConstraintPtr createFixedArcRadiusConstraint(FeaturePtr theArc) const;
37
38   /// \brief Creates temporary constraint to fix the feature after movement
39   SolverConstraintPtr createMovementConstraint(FeaturePtr theFixedFeature) const;
40
41   /// \brief Creates new constraint(s) using given parameters
42   /// \param theConstraint [in]  original constraint
43   /// \param theGroupID    [in]  group the constraint belongs to
44   /// \param theSketchID   [in]  sketch the constraint belongs to
45   /// \param theType       [in]  type of constraint
46   /// \param theValue      [in]  numeric characteristic of constraint (e.g. distance or radius) if applicable
47   /// \param theEntity1    [in]  first attribute of constraint
48   /// \param theEntity2    [in]  second attribute of constraint
49   /// \param theEntity3    [in]  third attribute of constraint
50   /// \param theEntity4    [in]  fourth attribute of constraint
51   /// \return Created list of wrappers of constraints applicable for specific solver.
52   ///         Most of constraint types lead to single constraint, but there are some kind of
53   ///         constraints (e.g. mirror), which may produce couple of constraints.
54   virtual std::list<ConstraintWrapperPtr>
55     createConstraint(ConstraintPtr theConstraint,
56                      const GroupID& theGroup,
57                      const EntityID& theSketchID,
58                      const SketchSolver_ConstraintType& theType,
59                      const double& theValue,
60                      const EntityWrapperPtr& theEntity1,
61                      const EntityWrapperPtr& theEntity2 = EntityWrapperPtr(),
62                      const EntityWrapperPtr& theEntity3 = EntityWrapperPtr(),
63                      const EntityWrapperPtr& theEntity4 = EntityWrapperPtr()) const = 0;
64
65   /// \brief Creates new multi-translation or multi-rotation constraint
66   /// \param theConstraint [in]  original constraint
67   /// \param theGroupID    [in]  group the constraint belongs to
68   /// \param theSketchID   [in]  sketch the constraint belongs to
69   /// \param theType       [in]  type of constraint
70   /// \param theValue      [in]  numeric characteristic of constraint (angle for multi-rotation) if applicable
71   /// \param theFullValue  [in]  indicates theValue shows full translation delta/rotation angle or delta/angle between neighbor entities
72   /// \param thePoint1     [in]  center for multi-rotation or start point for multi-translation
73   /// \param thePoint2     [in]  end point for multi-translation (empty for multi-rotation)
74   /// \param theTrsfEnt    [in]  list of transformed entities
75   virtual std::list<ConstraintWrapperPtr>
76     createConstraint(ConstraintPtr theConstraint,
77                      const GroupID& theGroup,
78                      const EntityID& theSketchID,
79                      const SketchSolver_ConstraintType& theType,
80                      const double& theValue,
81                      const bool theFullValue,
82                      const EntityWrapperPtr& thePoint1,
83                      const EntityWrapperPtr& thePoint2,
84                      const std::list<EntityWrapperPtr>& theTrsfEnt) const = 0;
85
86   /// \brief Update flags for several kinds of constraints
87   virtual void adjustConstraint(ConstraintWrapperPtr theConstraint) const = 0;
88
89   /// \brief Creates a feature using list of already created attributes
90   /// \param theFeature    [in]  feature to create
91   /// \param theAttributes [in]  attributes of the feature
92   /// \param theGroupID    [in]  group the feature belongs to
93   /// \param theSketchID   [in]  sketch the feature belongs to
94   /// \return Created wrapper of the feature applicable for specific solver
95   virtual EntityWrapperPtr createFeature(FeaturePtr theFeature,
96                                          const std::list<EntityWrapperPtr>& theAttributes,
97                                          const GroupID& theGroupID,
98                                          const EntityID& theSketchID = EID_UNKNOWN) const = 0;
99
100   /// \brief Creates an attribute
101   /// \param theAttribute [in]  attribute to create
102   /// \param theGroup     [in]  group the attribute belongs to
103   /// \param theSketchID  [in]  sketch the attribute belongs to
104   /// \return Created wrapper of the attribute applicable for specific solver
105   virtual EntityWrapperPtr createAttribute(AttributePtr theAttribute,
106                                            const GroupID& theGroup,
107                                            const EntityID& theSketchID = EID_UNKNOWN) const = 0;
108
109
110   /// \brief Convert entity to point
111   /// \return empty pointer if the entity is not a point
112   SKETCHSOLVER_EXPORT std::shared_ptr<GeomAPI_Pnt2d> point(EntityWrapperPtr theEntity) const;
113   /// \brief Convert entity to line
114   /// \return empty pointer if the entity is not a line
115   SKETCHSOLVER_EXPORT std::shared_ptr<GeomAPI_Lin2d> line(EntityWrapperPtr theEntity) const;
116 };
117
118 typedef std::shared_ptr<SketchSolver_Builder> BuilderPtr;
119
120 #endif