Salome HOME
Issue #1860: fix end lines with spaces
[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 ////////////// Attribute validators ////////////////
149
150
151 /**
152 * \ingroup Validators
153 * A validator which checks that objects selected for feature attributes are different (not the same)
154 */
155 class PartSet_DifferentObjectsValidator : public ModelAPI_AttributeValidator
156 {
157   //! Validator possible error types
158   enum ErrorType {
159     EqualObjects,
160     EqualAttributes,
161     EqualShapes,
162     EmptyShapes
163   };
164  public:
165   //! Returns true if the attribute is good for the feature attribute
166   //! \param theAttribute an attribute
167   //! \param theArguments a list of arguments (names of attributes to check)
168   //! \param theError an output error string
169   virtual bool isValid(const AttributePtr& theAttribute,
170                        const std::list<std::string>& theArguments,
171                        Events_InfoMessage& theError) const;
172 private:
173   //! Returns error message for the error type
174   //! \param theType a type of error
175   //! \param thEqualObjectInfo an
176   std::string errorMessage(const PartSet_DifferentObjectsValidator::ErrorType& theType,
177                            const std::string& thEqualObject, const std::string& theFirstAttribute,
178                            const std::string& theSecondAttribute) const;
179
180 };
181
182 /**\class PartSet_CoincidentAttr
183  * \ingroup Validators
184  * \brief Validator to check whether there is a coincident constraint between
185  * the attribute and attribute of argument.
186  */
187 class PartSet_CoincidentAttr : public ModelAPI_AttributeValidator
188 {
189  public:
190   //! returns true if attribute is valid
191   //! \param theAttribute the checked attribute
192   //! \param theArguments arguments of the attribute
193   //! \param theError an output error string
194   virtual bool isValid(const AttributePtr& theAttribute,
195                        const std::list<std::string>& theArguments,
196                        Events_InfoMessage& theError) const;
197 };
198
199
200 #endif