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,
43 CONSTRAINT_MULTI_TRANSLATION,
44 CONSTRAINT_MULTI_ROTATION
48 * Wrapper providing operations with constraints regardless the solver.
50 class SketchSolver_IConstraintWrapper
53 virtual ~SketchSolver_IConstraintWrapper() {}
55 /// \brief Return base feature
56 const ConstraintPtr& baseConstraint() const
57 { return myBaseConstraint; }
59 /// \brief Return ID of current entity
60 virtual ConstraintID id() const = 0;
62 /// \brief Change group for the constraint
63 virtual void setGroup(const GroupID& theGroup) = 0;
64 /// \brief Return identifier of the group the constraint belongs to
65 virtual GroupID group() const = 0;
67 /// \brief Return type of current entity
68 virtual SketchSolver_ConstraintType type() const = 0;
70 /// \brief Assign list of constrained objects
71 void setEntities(const std::list<EntityWrapperPtr>& theEntities)
72 { myConstrained = theEntities; }
73 /// \brief Return list of constrained objects
74 const std::list<EntityWrapperPtr>& entities() const
75 { return myConstrained; }
77 /// \brief Assign numeric parameter of constraint
78 virtual void setValue(const double& theValue)
79 { myValue = theValue; }
80 /// \brief Return numeric parameter of constraint
81 const double& value() const
84 /// \brief Store a boolean flag for full value using
85 void setIsFullValue(const bool& theFullValue)
86 { myIsFullValue = theFullValue; }
87 /// \brief Return a flag of a full value using
88 const bool& isFullValue() const
89 { return myIsFullValue; }
91 /// \brief Verify the feature is used in the constraint
92 virtual bool isUsed(FeaturePtr theFeature) const = 0;
93 /// \brief Verify the attribute is used in the constraint
94 virtual bool isUsed(AttributePtr theAttribute) const = 0;
96 /// \brief Compare current constraint with other
97 virtual bool isEqual(const std::shared_ptr<SketchSolver_IConstraintWrapper>& theOther) = 0;
99 /// \brief Update values of parameters of this constraint by the parameters of given one
100 /// \return \c true if some parameters change their values
101 virtual bool update(const std::shared_ptr<SketchSolver_IConstraintWrapper>& theOther) = 0;
104 ConstraintPtr myBaseConstraint;
105 std::list<EntityWrapperPtr> myConstrained;
110 typedef std::shared_ptr<SketchSolver_IConstraintWrapper> ConstraintWrapperPtr;