Salome HOME
#1150 Tab buttons problems
[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 the feature after movement
36   SolverConstraintPtr createMovementConstraint(FeaturePtr theFixedFeature) const;
37
38   /// \brief Creates new constraint(s) using given parameters
39   /// \param theConstraint [in]  original constraint
40   /// \param theGroupID    [in]  group the constraint belongs to
41   /// \param theSketchID   [in]  sketch the constraint belongs to
42   /// \param theType       [in]  type of constraint
43   /// \param theValue      [in]  numeric characteristic of constraint (e.g. distance or radius) if applicable
44   /// \param theEntity1    [in]  first attribute of constraint
45   /// \param theEntity2    [in]  second attribute of constraint
46   /// \param theEntity3    [in]  third attribute of constraint
47   /// \param theEntity4    [in]  fourth attribute of constraint
48   /// \return Created list of wrappers of constraints applicable for specific solver.
49   ///         Most of constraint types lead to single constraint, but there are some kind of
50   ///         constraints (e.g. mirror), which may produce couple of constraints.
51   virtual std::list<ConstraintWrapperPtr>
52     createConstraint(ConstraintPtr theConstraint,
53                      const GroupID& theGroup,
54                      const EntityID& theSketchID,
55                      const SketchSolver_ConstraintType& theType,
56                      const double& theValue,
57                      const EntityWrapperPtr& theEntity1,
58                      const EntityWrapperPtr& theEntity2 = EntityWrapperPtr(),
59                      const EntityWrapperPtr& theEntity3 = EntityWrapperPtr(),
60                      const EntityWrapperPtr& theEntity4 = EntityWrapperPtr()) const = 0;
61
62   /// \brief Creates new multi-translation or multi-rotation constraint
63   /// \param theConstraint [in]  original constraint
64   /// \param theGroupID    [in]  group the constraint belongs to
65   /// \param theSketchID   [in]  sketch the constraint belongs to
66   /// \param theType       [in]  type of constraint
67   /// \param theValue      [in]  numeric characteristic of constraint (angle for multi-rotation) if applicable
68   /// \param theFullValue  [in]  indicates theValue shows full translation delta/rotation angle or delta/angle between neighbor entities
69   /// \param thePoint1     [in]  center for multi-rotation or start point for multi-translation
70   /// \param thePoint2     [in]  end point for multi-translation (empty for multi-rotation)
71   /// \param theTrsfEnt    [in]  list of transformed entities
72   virtual std::list<ConstraintWrapperPtr>
73     createConstraint(ConstraintPtr theConstraint,
74                      const GroupID& theGroup,
75                      const EntityID& theSketchID,
76                      const SketchSolver_ConstraintType& theType,
77                      const double& theValue,
78                      const bool theFullValue,
79                      const EntityWrapperPtr& thePoint1,
80                      const EntityWrapperPtr& thePoint2,
81                      const std::list<EntityWrapperPtr>& theTrsfEnt) const = 0;
82
83   /// \brief Update flags for several kinds of constraints
84   virtual void adjustConstraint(ConstraintWrapperPtr theConstraint) const = 0;
85
86   /// \brief Creates a feature using list of already created attributes
87   /// \param theFeature    [in]  feature to create
88   /// \param theAttributes [in]  attributes of the feature
89   /// \param theGroupID    [in]  group the feature belongs to
90   /// \param theSketchID   [in]  sketch the feature belongs to
91   /// \return Created wrapper of the feature applicable for specific solver
92   virtual EntityWrapperPtr createFeature(FeaturePtr theFeature,
93                                          const std::list<EntityWrapperPtr>& theAttributes,
94                                          const GroupID& theGroupID,
95                                          const EntityID& theSketchID = EID_UNKNOWN) const = 0;
96
97   /// \brief Creates an attribute
98   /// \param theAttribute [in]  attribute to create
99   /// \param theGroup     [in]  group the attribute belongs to
100   /// \param theSketchID  [in]  sketch the attribute belongs to
101   /// \return Created wrapper of the attribute applicable for specific solver
102   virtual EntityWrapperPtr createAttribute(AttributePtr theAttribute,
103                                            const GroupID& theGroup,
104                                            const EntityID& theSketchID = EID_UNKNOWN) const = 0;
105
106
107   /// \brief Convert entity to point
108   /// \return empty pointer if the entity is not a point
109   SKETCHSOLVER_EXPORT std::shared_ptr<GeomAPI_Pnt2d> point(EntityWrapperPtr theEntity) const;
110   /// \brief Convert entity to line
111   /// \return empty pointer if the entity is not a line
112   SKETCHSOLVER_EXPORT std::shared_ptr<GeomAPI_Lin2d> line(EntityWrapperPtr theEntity) const;
113 };
114
115 typedef std::shared_ptr<SketchSolver_Builder> BuilderPtr;
116
117 #endif