1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
3 // File: SketchSolver_IConstraintWrapper.h
4 // Created: 30 Nov 2015
5 // Author: Artem ZHIDKOV
7 #ifndef SketchSolver_IConstraintWrapper_H_
8 #define SketchSolver_IConstraintWrapper_H_
10 #include <SketchSolver_IEntityWrapper.h>
12 #include <SketchPlugin_Constraint.h>
17 /// Types of constraints
18 enum SketchSolver_ConstraintType {
19 CONSTRAINT_UNKNOWN = 0,
20 CONSTRAINT_COINCIDENCE, // base coincidence if we don't know exact type yet
21 CONSTRAINT_PT_PT_COINCIDENT,
22 CONSTRAINT_PT_ON_LINE,
23 CONSTRAINT_PT_ON_CIRCLE,
24 CONSTRAINT_DISTANCE, // base distance if we don't know the measured objects yet
25 CONSTRAINT_PT_PT_DISTANCE,
26 CONSTRAINT_PT_LINE_DISTANCE,
30 CONSTRAINT_HORIZONTAL,
33 CONSTRAINT_PERPENDICULAR,
35 CONSTRAINT_EQUAL, // base equality if we don't know the measured objects yet
36 CONSTRAINT_EQUAL_LINES,
37 CONSTRAINT_EQUAL_LINE_ARC,
38 CONSTRAINT_EQUAL_RADIUS,
39 CONSTRAINT_TANGENT, // base tangency if we don't know the measured objects yet
40 CONSTRAINT_TANGENT_ARC_LINE,
41 CONSTRAINT_TANGENT_CIRCLE_LINE,
42 CONSTRAINT_TANGENT_ARC_ARC,
44 CONSTRAINT_MULTI_TRANSLATION,
45 CONSTRAINT_MULTI_ROTATION
49 * Wrapper providing operations with constraints regardless the solver.
51 class SketchSolver_IConstraintWrapper
54 virtual ~SketchSolver_IConstraintWrapper() {}
56 /// \brief Return base feature
57 const ConstraintPtr& baseConstraint() const
58 { return myBaseConstraint; }
60 /// \brief Return ID of current entity
61 virtual ConstraintID id() const = 0;
63 /// \brief Change group for the constraint
64 virtual void setGroup(const GroupID& theGroup) = 0;
65 /// \brief Return identifier of the group the constraint belongs to
66 virtual GroupID group() const = 0;
68 /// \brief Return type of current entity
69 virtual SketchSolver_ConstraintType type() const = 0;
71 /// \brief Assign list of constrained objects
72 void setEntities(const std::list<EntityWrapperPtr>& theEntities)
73 { myConstrained = theEntities; }
74 /// \brief Return list of constrained objects
75 const std::list<EntityWrapperPtr>& entities() const
76 { return myConstrained; }
78 /// \brief Assign numeric parameter of constraint
79 virtual void setValue(const double& theValue)
80 { myValue = theValue; }
81 /// \brief Return numeric parameter of constraint
82 const double& value() const
85 /// \brief Store a boolean flag for full value using
86 void setIsFullValue(const bool& theFullValue)
87 { myIsFullValue = theFullValue; }
88 /// \brief Return a flag of a full value using
89 const bool& isFullValue() const
90 { return myIsFullValue; }
92 /// \brief Verify the feature is used in the constraint
93 virtual bool isUsed(FeaturePtr theFeature) const = 0;
94 /// \brief Verify the attribute is used in the constraint
95 virtual bool isUsed(AttributePtr theAttribute) const = 0;
97 /// \brief Compare current constraint with other
98 virtual bool isEqual(const std::shared_ptr<SketchSolver_IConstraintWrapper>& theOther) = 0;
100 /// \brief Update values of parameters of this constraint by the parameters of given one
101 /// \return \c true if some parameters change their values
102 virtual bool update(const std::shared_ptr<SketchSolver_IConstraintWrapper>& theOther) = 0;
105 ConstraintPtr myBaseConstraint;
106 std::list<EntityWrapperPtr> myConstrained;
111 typedef std::shared_ptr<SketchSolver_IConstraintWrapper> ConstraintWrapperPtr;