]> SALOME platform Git repositories - modules/shaper.git/blob - src/PartSet/PartSet_Validators.h
Salome HOME
External edges color should not be changed when sketch is fully constrained.
[modules/shaper.git] / src / PartSet / PartSet_Validators.h
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
2
3 // File:        PartSet_Validators.h
4 // Created:     09 July 2014
5 // Author:      Vitaly SMETANNIKOV
6
7 #ifndef PartSet_Validators_H
8 #define PartSet_Validators_H
9
10 #include "PartSet.h"
11
12 #include <ModuleBase_SelectionValidator.h>
13 #include <ModuleBase_ISelection.h>
14 #include <ModelAPI_AttributeValidator.h>
15
16 /*
17  * Selector validators
18  */
19
20
21 //! \ingroup Validators
22 //! A class to validate a selection for Distance constraint operation
23 class PartSet_DistanceSelection : public ModuleBase_SelectionValidator
24 {
25 public:
26   PARTSET_EXPORT virtual bool isValid(const ModuleBase_ISelection* theSelection,
27                                       ModuleBase_Operation* theOperation) const;
28 };
29
30 //! \ingroup Validators
31 //! A class to validate a selection for Length constraint operation
32 class PartSet_LengthSelection : public ModuleBase_SelectionValidator
33 {
34 public:
35   PARTSET_EXPORT virtual bool isValid(const ModuleBase_ISelection* theSelection,
36                                       ModuleBase_Operation* theOperation) const;
37 };
38
39 //! \ingroup Validators
40 //! A class to validate a selection for Perpendicular constraint operation
41 class PartSet_PerpendicularSelection : public ModuleBase_SelectionValidator
42 {
43 public:
44   PARTSET_EXPORT virtual bool isValid(const ModuleBase_ISelection* theSelection,
45                                       ModuleBase_Operation* theOperation) const;
46 };
47
48 //! \ingroup Validators
49 //! A class to validate a selection for Parallel constraint operation
50 class PartSet_ParallelSelection : public ModuleBase_SelectionValidator
51 {
52 public:
53   PARTSET_EXPORT virtual bool isValid(const ModuleBase_ISelection* theSelection,
54                                       ModuleBase_Operation* theOperation) const;
55 };
56
57 //! \ingroup Validators
58 //! A class to validate a selection for Radius constraint operation
59 class PartSet_RadiusSelection : public ModuleBase_SelectionValidator
60 {
61 public:
62   PARTSET_EXPORT virtual bool isValid(const ModuleBase_ISelection* theSelection,
63                                       ModuleBase_Operation* theOperation) const;
64 };
65
66 //! \ingroup Validators
67 //! A class to validate a selection for Rigid constraint operation
68 class PartSet_RigidSelection : public ModuleBase_SelectionValidator
69 {
70 public:
71   PARTSET_EXPORT virtual bool isValid(const ModuleBase_ISelection* theSelection,
72                                       ModuleBase_Operation* theOperation) const;
73 };
74
75
76 //! \ingroup Validators
77 //! A class to validate a selection for coincedence constraint operation
78 class PartSet_CoincidentSelection : public ModuleBase_SelectionValidator
79 {
80 public:
81   PARTSET_EXPORT virtual bool isValid(const ModuleBase_ISelection* theSelection,
82                                       ModuleBase_Operation* theOperation) const;
83 };
84
85 //! \ingroup Validators
86 //! A class to validate a selection for Horizontal and Vertical constraints operation
87 class PartSet_HVDirSelection : public ModuleBase_SelectionValidator
88 {
89 public:
90   PARTSET_EXPORT virtual bool isValid(const ModuleBase_ISelection* theSelection,
91                                       ModuleBase_Operation* theOperation) const;
92 };
93
94 //! \ingroup Validators
95 //! A class to validate a selection for Tangential constraints operation
96 class PartSet_TangentSelection : public ModuleBase_SelectionValidator
97 {
98 public:
99   PARTSET_EXPORT virtual bool isValid(const ModuleBase_ISelection* theSelection,
100                                       ModuleBase_Operation* theOperation) const;
101 };
102
103 //! \ingroup Validators
104 //! A class to validate a selection for Fillet constraints operation
105 class PartSet_FilletSelection : public ModuleBase_SelectionValidator
106 {
107 public:
108   PARTSET_EXPORT virtual bool isValid(const ModuleBase_ISelection* theSelection,
109                                       ModuleBase_Operation* theOperation) const;
110 };
111
112 //! \ingroup Validators
113 //! A class to validate a selection for Angle constraints operation
114 class PartSet_AngleSelection : public ModuleBase_SelectionValidator
115 {
116 public:
117   PARTSET_EXPORT virtual bool isValid(const ModuleBase_ISelection* theSelection,
118                                       ModuleBase_Operation* theOperation) const;
119 };
120
121 //! \ingroup Validators
122 //! A class to validate a selection for Equal constraints operation
123 class PartSet_EqualSelection : public ModuleBase_SelectionValidator
124 {
125 public:
126   PARTSET_EXPORT virtual bool isValid(const ModuleBase_ISelection* theSelection,
127                                       ModuleBase_Operation* theOperation) const;
128 };
129
130 //! \ingroup Validators
131 //! A class to validate a selection for Collinear constraints operation
132 class PartSet_CollinearSelection : public ModuleBase_SelectionValidator
133 {
134 public:
135   PARTSET_EXPORT virtual bool isValid(const ModuleBase_ISelection* theSelection,
136                                       ModuleBase_Operation* theOperation) const;
137 };
138
139 //! \ingroup Validators
140 //! A class to validate a selection for Middle point constraints operation
141 class PartSet_MiddlePointSelection : public ModuleBase_SelectionValidator
142 {
143 public:
144   PARTSET_EXPORT virtual bool isValid(const ModuleBase_ISelection* theSelection,
145                                       ModuleBase_Operation* theOperation) const;
146 };
147
148 //! \ingroup Validators
149 //! A class to validate a selection for Middle point constraints operation
150 class PartSet_MultyTranslationSelection : public ModuleBase_SelectionValidator
151 {
152 public:
153   PARTSET_EXPORT virtual bool isValid(const ModuleBase_ISelection* theSelection,
154                                       ModuleBase_Operation* theOperation) const;
155 };
156
157 //! \ingroup Validators
158 //! A class to validate a selection for Middle point constraints operation
159 class PartSet_SplitSelection : public ModuleBase_SelectionValidator
160 {
161 public:
162   PARTSET_EXPORT virtual bool isValid(const ModuleBase_ISelection* theSelection,
163                                       ModuleBase_Operation* theOperation) const;
164 };
165
166 //! \ingroup Validators
167 //! A class to validate a selection for Middle point constraints operation
168 class PartSet_ProjectionSelection : public ModuleBase_SelectionValidator
169 {
170 public:
171   PARTSET_EXPORT virtual bool isValid(const ModuleBase_ISelection* theSelection,
172                                       ModuleBase_Operation* theOperation) const;
173 };
174
175 ////////////// Attribute validators ////////////////
176
177
178 /**
179 * \ingroup Validators
180 * A validator which checks that objects selected for feature attributes are different (not the same)
181 */
182 class PartSet_DifferentObjectsValidator : public ModelAPI_AttributeValidator
183 {
184   //! Validator possible error types
185   enum ErrorType {
186     EqualObjects,
187     EqualAttributes,
188     EqualShapes,
189     EmptyShapes
190   };
191  public:
192   //! Returns true if the attribute is good for the feature attribute
193   //! \param theAttribute an attribute
194   //! \param theArguments a list of arguments (names of attributes to check)
195   //! \param theError an output error string
196   virtual bool isValid(const AttributePtr& theAttribute,
197                        const std::list<std::string>& theArguments,
198                        Events_InfoMessage& theError) const;
199 private:
200   //! Returns error message for the error type
201   //! \param theType a type of error
202   //! \param thEqualObjectInfo an
203   std::string errorMessage(const PartSet_DifferentObjectsValidator::ErrorType& theType,
204                            const std::string& thEqualObject, const std::string& theFirstAttribute,
205                            const std::string& theSecondAttribute) const;
206
207 };
208
209 /**\class PartSet_CoincidentAttr
210  * \ingroup Validators
211  * \brief Validator to check whether there is a coincident constraint between
212  * the attribute and attribute of argument.
213  */
214 class PartSet_CoincidentAttr : public ModelAPI_AttributeValidator
215 {
216  public:
217   //! returns true if attribute is valid
218   //! \param theAttribute the checked attribute
219   //! \param theArguments arguments of the attribute
220   //! \param theError an output error string
221   virtual bool isValid(const AttributePtr& theAttribute,
222                        const std::list<std::string>& theArguments,
223                        Events_InfoMessage& theError) const;
224 };
225
226
227 #endif