Salome HOME
First phase of SketchSolver refactoring
[modules/shaper.git] / src / SketchSolver / SketchSolver_ConstraintMultiTranslation.cpp
1 #include <SketchSolver_ConstraintMultiTranslation.h>
2 #include <SketchSolver_Error.h>
3 #include <SketchSolver_Manager.h>
4
5 #include <SketchPlugin_MultiTranslation.h>
6
7
8 void SketchSolver_ConstraintMultiTranslation::getAttributes(
9     EntityWrapperPtr& theStartPoint, EntityWrapperPtr& theEndPoint,
10     std::list< std::list<EntityWrapperPtr> >& theEntities)
11 {
12   DataPtr aData = myBaseConstraint->data();
13   AttributePtr aStartPointAttr = aData->attribute(SketchPlugin_MultiTranslation::START_POINT_ID());
14   AttributePtr aEndPointAttr = aData->attribute(SketchPlugin_MultiTranslation::END_POINT_ID());
15   if (!aStartPointAttr || !aStartPointAttr->isInitialized() ||
16       !aEndPointAttr || !aEndPointAttr->isInitialized()) {
17     myErrorMsg = SketchSolver_Error::NOT_INITIALIZED();
18     return;
19   }
20
21   myType = CONSTRAINT_MULTI_TRANSLATION;
22
23   myStorage->update(aStartPointAttr);
24   theStartPoint = myStorage->entity(aStartPointAttr);
25   myStorage->update(aEndPointAttr);
26   theEndPoint = myStorage->entity(aEndPointAttr);
27
28   getEntitiesAndCopies(theEntities);
29
30 }
31
32 void SketchSolver_ConstraintMultiTranslation::process()
33 {
34   cleanErrorMsg();
35   if (!myBaseConstraint || !myStorage || myGroupID == GID_UNKNOWN) {
36     /// TODO: Put error message here
37     return;
38   }
39
40   EntityWrapperPtr aStartPoint, aEndPoint;
41   std::list<std::list<EntityWrapperPtr> > anEntitiesAndCopies;
42   getAttributes(aStartPoint, aEndPoint, anEntitiesAndCopies);
43   if (!myErrorMsg.empty())
44     return;
45
46   BuilderPtr aBuilder = SketchSolver_Manager::instance()->builder();
47   std::list<ConstraintWrapperPtr> aTransConstraints;
48
49   std::list< std::list<EntityWrapperPtr> >::iterator anEntIt = anEntitiesAndCopies.begin();
50   for (; anEntIt != anEntitiesAndCopies.end(); ++anEntIt) {
51     std::list<ConstraintWrapperPtr> aNewConstraints =
52         aBuilder->createConstraint(myBaseConstraint, myGroupID, mySketchID, myType,
53         0.0, aStartPoint, aEndPoint, *anEntIt);
54     aTransConstraints.insert(aTransConstraints.end(), aNewConstraints.begin(), aNewConstraints.end());
55   }
56   myStorage->addConstraint(myBaseConstraint, aTransConstraints);
57
58   myAdjusted = false;
59   adjustConstraint();
60 }
61
62 const std::string& SketchSolver_ConstraintMultiTranslation::nameNbObjects()
63 {
64   return SketchPlugin_MultiTranslation::NUMBER_OF_OBJECTS_ID();
65 }