1 // Copyright (C) 2014-2023 CEA, EDF
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #ifndef SketchPlugin_Validators_H
21 #define SketchPlugin_Validators_H
23 #include "SketchPlugin.h"
24 #include <ModelAPI_AttributeValidator.h>
25 #include <ModelAPI_FeatureValidator.h>
27 /**\class SketchPlugin_DistanceAttrValidator
29 * \brief Validator for the distance input.
31 * It just checks that distance is greater than zero.
33 class SketchPlugin_DistanceAttrValidator : public ModelAPI_AttributeValidator
36 //! returns true if attribute is valid
37 //! \param theAttribute the checked attribute
38 //! \param theArguments arguments of the attribute
39 //! \param theError error message
40 virtual bool isValid(const AttributePtr& theAttribute,
41 const std::list<std::string>& theArguments,
42 Events_InfoMessage& theError) const;
45 /**\class SketchPlugin_TangentAttrValidator
47 * \brief Validator for the tangent constraint input.
49 * It just checks that distance is greater than zero.
51 class SketchPlugin_TangentAttrValidator : public ModelAPI_AttributeValidator
54 //! returns true if attribute is valid
55 //! \param theAttribute the checked attribute
56 //! \param theArguments arguments of the attribute
57 //! \param theError error message
58 virtual bool isValid(const AttributePtr& theAttribute,
59 const std::list<std::string>& theArguments,
60 Events_InfoMessage& theError) const;
63 /**\class SketchPlugin_PerpendicularAttrValidator
65 * \brief Validator for the perpendicular constraint input.
67 * Checks that two arcs are not selected for perpendicular.
69 class SketchPlugin_PerpendicularAttrValidator : public ModelAPI_AttributeValidator
72 //! returns true if attribute is valid
73 //! \param theAttribute the checked attribute
74 //! \param theArguments arguments of the attribute
75 //! \param theError error message
76 virtual bool isValid(const AttributePtr& theAttribute,
77 const std::list<std::string>& theArguments,
78 Events_InfoMessage& theError) const;
82 /**\class SketchPlugin_NotFixedValidator
84 * \brief Validator for the rigid constraint input.
86 * It just checks there is no rigid constraint for the current feature.
88 class SketchPlugin_NotFixedValidator : public ModelAPI_AttributeValidator
91 //! returns true if attribute is not used in another rigid constraint
92 //! \param theAttribute the checked attribute
93 //! \param theArguments arguments of the attribute
94 //! \param theError error message
95 virtual bool isValid(const AttributePtr& theAttribute,
96 const std::list<std::string>& theArguments,
97 Events_InfoMessage& theError) const;
100 /**\class SketchPlugin_EqualAttrValidator
101 * \ingroup Validators
102 * \brief Validator for the equal constraint input.
104 * It checks that attributes of the Equal constraint are correct.
106 class SketchPlugin_EqualAttrValidator : public ModelAPI_AttributeValidator
109 //! returns true if attribute is valid
110 //! \param theAttribute the checked attribute
111 //! \param theArguments arguments of the attribute
112 //! \param theError error message
113 virtual bool isValid(const AttributePtr& theAttribute,
114 const std::list<std::string>& theArguments,
115 Events_InfoMessage& theError) const;
118 /**\class SketchPlugin_MirrorAttrValidator
119 * \ingroup Validators
120 * \brief Validator for the mirror constraint input.
122 * It checks that attributes of the Mirror constraint are correct.
124 class SketchPlugin_MirrorAttrValidator : public ModelAPI_AttributeValidator
127 //! returns true if attribute is valid
128 //! \param theAttribute the checked attribute
129 //! \param theArguments arguments of the attribute (not used)
130 //! \param theError error message
131 virtual bool isValid(const AttributePtr& theAttribute,
132 const std::list<std::string>& theArguments,
133 Events_InfoMessage& theError) const;
137 /**\class SketchPlugin_CoincidenceAttrValidator
138 * \ingroup Validators
139 * \brief Validator for the coincidence constraint input.
141 * It checks that attributes of the Coincidence constraint are correct.
143 class SketchPlugin_CoincidenceAttrValidator : public ModelAPI_AttributeValidator
146 //! returns true if attribute is valid
147 //! \param theAttribute the checked attribute
148 //! \param theArguments arguments of the attribute (not used)
149 //! \param theError error message
150 virtual bool isValid(const AttributePtr& theAttribute,
151 const std::list<std::string>& theArguments,
152 Events_InfoMessage& theError) const;
156 /**\class SketchPlugin_CopyValidator
157 * \ingroup Validators
158 * \brief Validator for the constraints which create features.
160 * Applicable only for features, which creates another features. It verifies the produced
161 * features of current constraint don't become into the list of initial features
163 class SketchPlugin_CopyValidator : public ModelAPI_AttributeValidator
166 //! returns true if attribute is valid
167 //! \param theAttribute the checked attribute
168 //! \param theArguments arguments of the attribute (not used)
169 //! \param theError error message
170 virtual bool isValid(const AttributePtr& theAttribute,
171 const std::list<std::string>& theArguments,
172 Events_InfoMessage& theError) const;
175 /**\class SketchPlugin_SolverErrorValidator
176 * \ingroup Validators
177 * \brief Validator for the solver error.
179 * Simply checks that solver error attribute is empty. Returns the attribute value as an error.
181 class SketchPlugin_SolverErrorValidator : public ModelAPI_FeatureValidator
184 //! returns true if there are no solver errors
185 //! \param theFeature the checked feature
186 //! \param theArguments arguments of the feature (not used)
187 //! \param theError error message
188 virtual bool isValid(const std::shared_ptr<ModelAPI_Feature>& theFeature,
189 const std::list<std::string>& theArguments,
190 Events_InfoMessage& theError) const;
192 /// Returns true if the attribute in feature is not obligatory for the feature execution
193 virtual bool isNotObligatory(std::string theFeature, std::string theAttribute);
196 /**\class SketchPlugin_FilletVertexValidator
197 * \ingroup Validators
198 * \brief Validator for the point for fillet creation.
200 * Checks that selected point have exactly two coincident lines.
202 class SketchPlugin_FilletVertexValidator : public ModelAPI_AttributeValidator
205 //! returns true if attribute is valid
206 //! \param theAttribute the checked attribute
207 //! \param theArguments arguments of the attribute (not used)
208 //! \param theError error message
209 virtual bool isValid(const AttributePtr& theAttribute,
210 const std::list<std::string>& theArguments,
211 Events_InfoMessage& theError) const;
213 //! returns true if attribute is a good point for fillet
214 //! \param theAttribute the checked point attribute
215 //! \param theError error message
216 //! \param theEdge1 adjacent edge feature
217 //! \param theEdge2 adjacent edge feature
218 static bool isValidVertex(const AttributePtr& theAttribute,
219 Events_InfoMessage& theError,
220 FeaturePtr& theEdge1,
221 FeaturePtr& theEdge2);
225 /**\class SketchPlugin_MiddlePointAttrValidator
226 * \ingroup Validators
227 * \brief Validator for the middle point constraint input.
229 * It checks that attributes of the Middle point constraint are correct.
231 class SketchPlugin_MiddlePointAttrValidator : public ModelAPI_AttributeValidator
234 //! returns true if attribute is valid
235 //! \param theAttribute the checked attribute
236 //! \param theArguments arguments of the attribute (not used)
237 //! \param theError error message
238 virtual bool isValid(const AttributePtr& theAttribute,
239 const std::list<std::string>& theArguments,
240 Events_InfoMessage& theError) const;
244 /**\class SketchPlugin_ArcTangentPointValidator
245 * \ingroup Validators
246 * \brief Validator for the point where the tangent arc is building.
248 * Checks that the point is a start or end point just on line or arc.
250 class SketchPlugin_ArcTangentPointValidator : public ModelAPI_AttributeValidator
253 //! returns true if attribute is valid
254 //! \param theAttribute the checked attribute
255 //! \param theArguments arguments of the attribute
256 //! \param theError error message
257 virtual bool isValid(const AttributePtr& theAttribute,
258 const std::list<std::string>& theArguments,
259 Events_InfoMessage& theError) const;
262 /**\class SketchPlugin_ArcTransversalPointValidator
263 * \ingroup Validators
264 * \brief Validator for the point where the transversal arc is building.
266 * Checks that the point is a start or end point just on line or arc.
268 class SketchPlugin_ArcTransversalPointValidator : public ModelAPI_AttributeValidator
271 //! returns true if attribute is valid
272 //! \param theAttribute the checked attribute
273 //! \param theArguments arguments of the attribute
274 //! \param theError error message
275 virtual bool isValid(const AttributePtr& theAttribute,
276 const std::list<std::string>& theArguments,
277 Events_InfoMessage& theError) const;
281 /**\class SketchPlugin_SplitValidator
282 * \ingroup Validators
283 * \brief Validator for the entity of the following type:
284 * - Linear segment with point(s) coinident to this line
285 * - Arc with point(s) coincident to the arc
286 * - Circle with at least 2 split-points on this circle
288 * Checks that there are coincident point on selected feature.
290 class SketchPlugin_SplitValidator : public ModelAPI_AttributeValidator
293 //! returns true if attribute is valid
294 //! \param theAttribute the checked attribute
295 //! \param theArguments arguments of the attribute
296 //! \param theError error message
297 virtual bool isValid(const AttributePtr& theAttribute,
298 const std::list<std::string>& theArguments,
299 Events_InfoMessage& theError) const;
302 /**\class SketchPlugin_TrimValidator
303 * \ingroup Validators
304 * \brief Validator for the entity of the following type:
305 * - Linear segment with point(s) coinident to this line or intersected it
306 * - Arc with point(s) coincident to the arc or intersected it
307 * - Circle with at least 2 split-points on this circle or intersected it
309 * Checks that there are coincident point on selected feature.
311 class SketchPlugin_TrimValidator : public ModelAPI_AttributeValidator
314 //! returns true if attribute is valid
315 //! \param theAttribute the checked attribute
316 //! \param theArguments arguments of the attribute
317 //! \param theError error message
318 virtual bool isValid(const AttributePtr& theAttribute,
319 const std::list<std::string>& theArguments,
320 Events_InfoMessage& theError) const;
323 /**\class SketchPlugin_IntersectionValidator
324 * \ingroup Validators
325 * \brief Validator for the attribute to be intersected with the sketch plane.
327 class SketchPlugin_IntersectionValidator : public ModelAPI_AttributeValidator
330 //! returns true if attribute is valid
331 //! \param theAttribute the checked attribute
332 //! \param theArguments arguments of the attribute
333 //! \param theError error message
334 virtual bool isValid(const AttributePtr& theAttribute,
335 const std::list<std::string>& theArguments,
336 Events_InfoMessage& theError) const;
339 /**\class SketchPlugin_ProjectionValidator
340 * \ingroup Validators
341 * \brief Validator for the attribute to be projected onto the sketch plane.
343 class SketchPlugin_ProjectionValidator : public ModelAPI_AttributeValidator
346 //! returns true if attribute is valid
347 //! \param theAttribute the checked attribute
348 //! \param theArguments arguments of the attribute
349 //! \param theError error message
350 virtual bool isValid(const AttributePtr& theAttribute,
351 const std::list<std::string>& theArguments,
352 Events_InfoMessage& theError) const;
355 /**\class SketchPlugin_DifferentReferenceValidator
356 * \ingroup Validators
357 * \brief Validator for attributes of a sketch feature.
359 * It checks that at least one of specified attributes
360 * refers to another feature in respect to each other.
362 class SketchPlugin_DifferentReferenceValidator : public ModelAPI_AttributeValidator
365 //! returns true if attribute is valid
366 //! \param theAttribute the checked attribute
367 //! \param theArguments arguments of the attribute
368 //! \param theError error message
369 virtual bool isValid(const AttributePtr& theAttribute,
370 const std::list<std::string>& theArguments,
371 Events_InfoMessage& theError) const;
374 /**\class SketchPlugin_DifferentPointReferenceValidator
375 * \ingroup Validators
376 * \brief Validator for attributes of a sketch feature.
378 * It checks that at least two of specified attributes refer to different points.
380 class SketchPlugin_DifferentPointReferenceValidator : public ModelAPI_AttributeValidator
383 //! returns true if attribute is valid
384 //! \param theAttribute the checked attribute
385 //! \param theArguments arguments of the attribute
386 //! \param theError error message
387 virtual bool isValid(const AttributePtr& theAttribute,
388 const std::list<std::string>& theArguments,
389 Events_InfoMessage& theError) const;
392 /**\class SketchPlugin_CirclePassedPointValidator
393 * \ingroup Validators
394 * \brief Validator for passed point of MacroCircle feature.
396 * Checks that passed point does not refer to the feature, the center is coincident to.
398 class SketchPlugin_CirclePassedPointValidator : public ModelAPI_AttributeValidator
401 //! returns true if attribute is valid
402 //! \param theAttribute the checked attribute
403 //! \param theArguments arguments of the attribute
404 //! \param theError error message
405 virtual bool isValid(const AttributePtr& theAttribute,
406 const std::list<std::string>&,
407 Events_InfoMessage& theError) const;
410 /**\class SketchPlugin_ThirdPointValidator
411 * \ingroup Validators
412 * \brief Validator for the third point of MacroCircle feature.
414 * Checks that third point does not lie on a line passed through the first two points.
415 * Checks that third point does not refer to feature lying between the first two points.
417 class SketchPlugin_ThirdPointValidator : public ModelAPI_AttributeValidator
420 //! returns true if attribute is valid
421 //! \param theAttribute the checked attribute
422 //! \param theArguments arguments of the attribute
423 //! \param theError error message
424 virtual bool isValid(const AttributePtr& theAttribute,
425 const std::list<std::string>& theArguments,
426 Events_InfoMessage& theError) const;
429 //! returns true if three points have not been placed on the same line
430 bool arePointsNotOnLine(const FeaturePtr& theMacroFeature,
431 Events_InfoMessage& theError) const;
433 //! returns true if the first two points have not been separated
434 //! by a feature referred by thrid point
435 bool arePointsNotSeparated(const FeaturePtr& theMacroFeature,
436 const std::list<std::string>& theArguments,
437 Events_InfoMessage& theError) const;
440 /**\class SketchPlugin_ArcEndPointValidator
441 * \ingroup Validators
442 * \brief Validator for the end point of MacroArc feature.
444 * Checks that third point does not lie on a point.
446 class SketchPlugin_ArcEndPointValidator: public ModelAPI_AttributeValidator
449 //! returns true if attribute is valid
450 //! \param theAttribute the checked attribute
451 //! \param theArguments arguments of the attribute
452 //! \param theError error message
453 virtual bool isValid(const AttributePtr& theAttribute,
454 const std::list<std::string>& theArguments,
455 Events_InfoMessage& theError) const;
458 /**\class SketchPlugin_ArcEndPointIntersectionValidator
459 * \ingroup Validators
460 * \brief Validator for the end point of MacroArc feature.
462 * Checks that third point does lie on edge which intersects arc.
464 class SketchPlugin_ArcEndPointIntersectionValidator: public ModelAPI_AttributeValidator
467 //! returns true if attribute is valid
468 //! \param theAttribute the checked attribute
469 //! \param theArguments arguments of the attribute
470 //! \param theError error message
471 virtual bool isValid(const AttributePtr& theAttribute,
472 const std::list<std::string>& theArguments,
473 Events_InfoMessage& theError) const;
476 /**\class SketchPlugin_HasNoConstraint
477 * \ingroup Validators
478 * \brief Validator for checking whether the feature has constraint.
480 * Checks that feature of the attribute does not have constraint with some kinds.
481 * The kinds of constraints should be described in parameters of the validator
482 * Validator processes the ModelAPI_AttributeRefAttr attribute kind
484 class SketchPlugin_HasNoConstraint: public ModelAPI_AttributeValidator
487 //! returns true if attribute is valid
488 //! \param theAttribute the checked attribute
489 //! \param theArguments arguments of the attribute
490 //! \param theError error message
491 virtual bool isValid(const AttributePtr& theAttribute,
492 const std::list<std::string>& theArguments,
493 Events_InfoMessage& theError) const;
496 /**\class SketchPlugin_ReplicationReferenceValidator
497 * \ingroup Validators
498 * \brief Validator checking that the replications features (Mirror,
499 * Multi-Rotation, Mutli-Translation) do not refer to the shapes they produce.
501 class SketchPlugin_ReplicationReferenceValidator: public ModelAPI_AttributeValidator
504 //! returns true if attribute is valid
505 //! \param theAttribute the checked attribute
506 //! \param theArguments arguments of the attribute
507 //! \param theError error message
508 virtual bool isValid(const AttributePtr& theAttribute,
509 const std::list<std::string>& theArguments,
510 Events_InfoMessage& theError) const;
513 /**\class SketchPlugin_SketchFeatureValidator
514 * \ingroup Validators
515 * \brief Validator for checking whether the feature referred by attribute is a sketch feature.
517 class SketchPlugin_SketchFeatureValidator: public ModelAPI_AttributeValidator
520 //! returns true if attribute is valid
521 //! \param theAttribute the checked attribute
522 //! \param theArguments arguments of the attribute
523 //! \param theError error message
524 virtual bool isValid(const AttributePtr& theAttribute,
525 const std::list<std::string>& theArguments,
526 Events_InfoMessage& theError) const;
529 /**\class SketchPlugin_MultiRotationAngleValidator
530 * \ingroup Validators
531 * \brief Validator for checking whether the angle of MultiRotation is in range [0, 360].
533 class SketchPlugin_MultiRotationAngleValidator : public ModelAPI_AttributeValidator
535 //! returns true if attribute is valid
536 //! \param theAttribute the checked attribute
537 //! \param theArguments arguments of the attribute
538 //! \param theError error message
539 virtual bool isValid(const AttributePtr& theAttribute,
540 const std::list<std::string>& theArguments,
541 Events_InfoMessage& theError) const;
544 /**\class SketchPlugin_BSplineValidator
545 * \ingroup Validators
546 * \brief Validator for checking poles/weights of B-spline curve.
548 class SketchPlugin_BSplineValidator : public ModelAPI_AttributeValidator
550 //! returns true if attribute is valid
551 //! \param theAttribute the checked attribute
552 //! \param theArguments arguments of the attribute
553 //! \param theError error message
554 virtual bool isValid(const AttributePtr& theAttribute,
555 const std::list<std::string>& theArguments,
556 Events_InfoMessage& theError) const;
559 /**\class SketchPlugin_CurveFittingValidator
560 * \ingroup Validators
561 * \brief Validator for the selected vertices for the curve fitting feature.
563 class SketchPlugin_CurveFittingValidator : public ModelAPI_FeatureValidator
566 //! returns true if number of selected points is greater than the minimal value
567 //! \param theAttribute the checked attribute
568 //! \param theArguments arguments of the attribute
569 //! \param theError error message
570 virtual bool isValid(const std::shared_ptr<ModelAPI_Feature>& theFeature,
571 const std::list<std::string>& theArguments,
572 Events_InfoMessage& theError) const;