Salome HOME
2811988469d4093c44e0b2957c60dfe579ef764f
[modules/shaper.git] / src / SketchSolver / PlaneGCSSolver / PlaneGCSSolver_ScalarWrapper.cpp
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
2
3 // File:    PlaneGCSSolver_ScalarWrapper.cpp
4 // Created: 14 Dec 2015
5 // Author:  Artem ZHIDKOV
6
7 #include <PlaneGCSSolver_ScalarWrapper.h>
8 #include <PlaneGCSSolver_ParameterWrapper.h>
9
10
11
12 PlaneGCSSolver_ScalarWrapper::PlaneGCSSolver_ScalarWrapper(
13     const AttributePtr              theAttribute,
14     const ParameterWrapperPtr       theParam)
15 {
16   myBaseAttribute = theAttribute;
17   myParameters.assign(1, theParam);
18 }
19
20 void PlaneGCSSolver_ScalarWrapper::setGroup(const GroupID& theGroup)
21 {
22   myGroup = theGroup;
23   myParameters.front()->setGroup(theGroup);
24 }
25
26 double* PlaneGCSSolver_ScalarWrapper::scalar() const
27 {
28   std::shared_ptr<PlaneGCSSolver_ParameterWrapper> aParam =
29       std::dynamic_pointer_cast<PlaneGCSSolver_ParameterWrapper>(myParameters.front());
30   return aParam->parameter();
31 }
32
33 bool PlaneGCSSolver_ScalarWrapper::isUsed(AttributePtr theAttribute) const
34 {
35   return isBase(theAttribute);
36 }
37
38 bool PlaneGCSSolver_ScalarWrapper::isEqual(const EntityWrapperPtr& theOther)
39 {
40   if (type() != theOther->type())
41     return false;
42
43   // Verify equality of parameters
44   const std::list<ParameterWrapperPtr>& anOtherParams = theOther->parameters();
45   if (myParameters.size() != anOtherParams.size())
46     return false;
47   std::list<ParameterWrapperPtr>::const_iterator aMyIt = myParameters.begin();
48   std::list<ParameterWrapperPtr>::const_iterator anOtherIt = anOtherParams.begin();
49   for (; aMyIt != myParameters.end(); ++aMyIt, ++anOtherIt)
50     if (!(*aMyIt)->isEqual(*anOtherIt))
51       return false;
52   return true;
53 }
54
55 bool PlaneGCSSolver_ScalarWrapper::update(const EntityWrapperPtr& theOther)
56 {
57   bool isUpdated = false;
58   std::list<ParameterWrapperPtr> aMyParams = parameters();
59   std::list<ParameterWrapperPtr> anOtherParams = theOther->parameters();
60   std::list<ParameterWrapperPtr>::const_iterator aMyParIt = aMyParams.begin();
61   std::list<ParameterWrapperPtr>::const_iterator anOtherParIt = anOtherParams.begin();
62   for (; aMyParIt != aMyParams.end() && anOtherParIt != anOtherParams.end();
63       ++aMyParIt, ++anOtherParIt)
64     isUpdated = (*aMyParIt)->update(*anOtherParIt);
65   return isUpdated;
66 }