1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
3 // File: SketchSolver_Builder.cpp
4 // Created: 25 Mar 2015
5 // Author: Artem ZHIDKOV
7 #include "SketchSolver_Builder.h"
8 #include <SketchSolver_Constraint.h>
9 #include <SketchSolver_ConstraintAngle.h>
10 #include <SketchSolver_ConstraintCoincidence.h>
11 #include <SketchSolver_ConstraintCollinear.h>
12 #include <SketchSolver_ConstraintDistance.h>
13 #include <SketchSolver_ConstraintEqual.h>
14 #include <SketchSolver_ConstraintFixed.h>
15 #include <SketchSolver_ConstraintLength.h>
16 #include <SketchSolver_ConstraintMiddle.h>
17 #include <SketchSolver_ConstraintMirror.h>
18 #include <SketchSolver_ConstraintTangent.h>
19 #include <SketchSolver_ConstraintMultiRotation.h>
20 #include <SketchSolver_ConstraintMultiTranslation.h>
23 #include <Events_InfoMessage.h>
24 #include <ModelAPI_AttributeRefList.h>
25 #include <ModelAPI_ResultConstruction.h>
26 #include <SketchSolver_Error.h>
29 #include <SketchPlugin_ConstraintAngle.h>
30 #include <SketchPlugin_ConstraintCoincidence.h>
31 #include <SketchPlugin_ConstraintCollinear.h>
32 #include <SketchPlugin_ConstraintDistance.h>
33 #include <SketchPlugin_ConstraintEqual.h>
34 #include <SketchPlugin_ConstraintLength.h>
35 #include <SketchPlugin_ConstraintMiddle.h>
36 #include <SketchPlugin_ConstraintMirror.h>
37 #include <SketchPlugin_ConstraintRigid.h>
38 #include <SketchPlugin_ConstraintTangent.h>
39 #include <SketchPlugin_MultiRotation.h>
40 #include <SketchPlugin_MultiTranslation.h>
44 SolverConstraintPtr SketchSolver_Builder::createConstraint(ConstraintPtr theConstraint) const
46 SolverConstraintPtr aResult;
47 DataPtr aData = theConstraint->data();
50 // Verify attributes of constraint and generate errors
51 std::list<AttributePtr> anAttrList = aData->attributes(std::string());
52 std::list<AttributePtr>::iterator anIter = anAttrList.begin();
53 for (; anIter != anAttrList.end(); anIter++) {
54 AttributeRefAttrPtr aRefAttr = std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(*anIter);
56 if (aRefAttr->isObject() && aRefAttr->object()) {
57 ResultConstructionPtr aRC =
58 std::dynamic_pointer_cast<ModelAPI_ResultConstruction>(aRefAttr->object());
60 Events_InfoMessage("SketchSolver_Builder",
61 SketchSolver_Error::NEED_OBJECT_NOT_FEATURE(), this).send();
65 AttributeRefListPtr aRefList = std::dynamic_pointer_cast<ModelAPI_AttributeRefList>(*anIter);
67 std::list<ObjectPtr> aList = aRefList->list();
68 std::list<ObjectPtr>::iterator aListIter = aList.begin();
69 for (; aListIter != aList.end(); aListIter++) {
70 ResultConstructionPtr aRC =
71 std::dynamic_pointer_cast<ModelAPI_ResultConstruction>(*aListIter);
72 if (*aListIter && !aRC)
73 Events_InfoMessage("SketchSolver_Builder",
74 SketchSolver_Error::NEED_OBJECT_NOT_FEATURE(), this).send();
80 if (theConstraint->getKind() == SketchPlugin_ConstraintCoincidence::ID()) {
81 return SolverConstraintPtr(new SketchSolver_ConstraintCoincidence(theConstraint));
82 } else if (theConstraint->getKind() == SketchPlugin_ConstraintCollinear::ID()) {
83 return SolverConstraintPtr(new SketchSolver_ConstraintCollinear(theConstraint));
84 } else if (theConstraint->getKind() == SketchPlugin_ConstraintDistance::ID()) {
85 return SolverConstraintPtr(new SketchSolver_ConstraintDistance(theConstraint));
86 } else if (theConstraint->getKind() == SketchPlugin_ConstraintEqual::ID()) {
87 return SolverConstraintPtr(new SketchSolver_ConstraintEqual(theConstraint));
88 } else if (theConstraint->getKind() == SketchPlugin_ConstraintLength::ID()) {
89 return SolverConstraintPtr(new SketchSolver_ConstraintLength(theConstraint));
90 } else if (theConstraint->getKind() == SketchPlugin_ConstraintMiddle::ID()) {
91 return SolverConstraintPtr(new SketchSolver_ConstraintMiddle(theConstraint));
92 } else if (theConstraint->getKind() == SketchPlugin_ConstraintMirror::ID()) {
93 return SolverConstraintPtr(new SketchSolver_ConstraintMirror(theConstraint));
94 } else if (theConstraint->getKind() == SketchPlugin_ConstraintTangent::ID()) {
95 return SolverConstraintPtr(new SketchSolver_ConstraintTangent(theConstraint));
96 } else if (theConstraint->getKind() == SketchPlugin_ConstraintRigid::ID()) {
97 return SolverConstraintPtr(new SketchSolver_ConstraintFixed(theConstraint));
98 } else if (theConstraint->getKind() == SketchPlugin_MultiTranslation::ID()) {
99 return SolverConstraintPtr(new SketchSolver_ConstraintMultiTranslation(theConstraint));
100 } else if (theConstraint->getKind() == SketchPlugin_MultiRotation::ID()) {
101 return SolverConstraintPtr(new SketchSolver_ConstraintMultiRotation(theConstraint));
102 } else if (theConstraint->getKind() == SketchPlugin_ConstraintAngle::ID()) {
103 return SolverConstraintPtr(new SketchSolver_ConstraintAngle(theConstraint));
105 // All other types of constraints
106 return SolverConstraintPtr(new SketchSolver_Constraint(theConstraint));
109 SolverConstraintPtr SketchSolver_Builder::createMovementConstraint(FeaturePtr theMovedFeature) const
111 return SolverConstraintPtr(new SketchSolver_ConstraintFixed(theMovedFeature));