Salome HOME
Fix compilation error on Linux. Part V.
[modules/shaper.git] / src / SketchSolver / SolveSpaceSolver / SolveSpaceSolver_EntityWrapper.cpp
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
2
3 // File:    SolveSpaceSolver_EntityWrapper.cpp
4 // Created: 2 Dec 2015
5 // Author:  Artem ZHIDKOV
6
7 #include <SolveSpaceSolver_EntityWrapper.h>
8
9 SolveSpaceSolver_EntityWrapper::SolveSpaceSolver_EntityWrapper(
10     const FeaturePtr theFeature, const Slvs_Entity& theEntity)
11   : myEntity(theEntity)
12 {
13   myBaseFeature = theFeature;
14 }
15
16 SolveSpaceSolver_EntityWrapper::SolveSpaceSolver_EntityWrapper(
17     const AttributePtr theAttribute, const Slvs_Entity& theEntity)
18   : myEntity(theEntity)
19 {
20   myBaseAttribute = theAttribute;
21 }
22
23 EntityID SolveSpaceSolver_EntityWrapper::id() const
24 {
25   return (EntityID)myEntity.h;
26 }
27
28 void SolveSpaceSolver_EntityWrapper::setGroup(const GroupID& theGroup)
29 {
30   myEntity.group = (Slvs_hGroup)theGroup;
31   std::list<EntityWrapperPtr>::iterator aSubsIt = mySubEntities.begin();
32   for (; aSubsIt != mySubEntities.end(); ++aSubsIt)
33     (*aSubsIt)->setGroup(theGroup);
34   std::list<ParameterWrapperPtr>::iterator aPIt = myParameters.begin();
35   for (; aPIt != myParameters.end(); ++aPIt)
36     (*aPIt)->setGroup(theGroup);
37 }
38
39 SketchSolver_EntityType SolveSpaceSolver_EntityWrapper::type() const
40 {
41   switch (myEntity.type) {
42   case SLVS_E_POINT_IN_3D:
43   case SLVS_E_POINT_IN_2D:    return ENTITY_POINT;
44   case SLVS_E_LINE_SEGMENT:   return ENTITY_LINE;
45   case SLVS_E_CIRCLE:         return ENTITY_CIRCLE;
46   case SLVS_E_ARC_OF_CIRCLE:  return ENTITY_ARC;
47   case SLVS_E_NORMAL_IN_3D:
48   case SLVS_E_NORMAL_IN_2D:   return ENTITY_NORMAL;
49   case SLVS_E_DISTANCE:       return ENTITY_SCALAR;
50   case SLVS_E_WORKPLANE:      return ENTITY_SKETCH;
51   default: break;
52   }
53   return ENTITY_UNKNOWN;
54 }
55
56 bool SolveSpaceSolver_EntityWrapper::isUsed(FeaturePtr theFeature) const
57 {
58   if (isBase(theFeature))
59     return true;
60
61   std::list<EntityWrapperPtr>::const_iterator anIt = mySubEntities.begin();
62   for (; anIt != mySubEntities.end(); ++anIt)
63     if ((*anIt)->isUsed(theFeature))
64       return true;
65   return false;
66 }
67
68 bool SolveSpaceSolver_EntityWrapper::isUsed(AttributePtr theAttribute) const
69 {
70   if (isBase(theAttribute))
71     return true;
72
73   std::list<EntityWrapperPtr>::const_iterator anIt = mySubEntities.begin();
74   for (; anIt != mySubEntities.end(); ++anIt)
75     if ((*anIt)->isUsed(theAttribute))
76       return true;
77   return false;
78 }
79
80 bool SolveSpaceSolver_EntityWrapper::isEqual(const EntityWrapperPtr& theOther)
81 {
82   if (type() != theOther->type())
83     return false;
84
85   // Verify Equality of sub-entities
86   const std::list<EntityWrapperPtr>& anOtherSubs = theOther->subEntities();
87   if (mySubEntities.size() != anOtherSubs.size())
88     return false;
89   std::list<EntityWrapperPtr>::const_iterator aMySubsIt = mySubEntities.begin();
90   std::list<EntityWrapperPtr>::const_iterator anOtherSubsIt = anOtherSubs.begin();
91   for (; aMySubsIt != mySubEntities.end(); ++aMySubsIt, ++anOtherSubsIt)
92     if (!(*aMySubsIt)->isEqual(*anOtherSubsIt))
93       return false;
94
95   // Verify equality of parameters
96   const std::list<ParameterWrapperPtr>& anOtherParams = theOther->parameters();
97   if (myParameters.size() != anOtherParams.size())
98     return false;
99   std::list<ParameterWrapperPtr>::const_iterator aMyIt = myParameters.begin();
100   std::list<ParameterWrapperPtr>::const_iterator anOtherIt = anOtherParams.begin();
101   for (; aMyIt != myParameters.end(); ++aMyIt, ++anOtherIt)
102     if (!(*aMyIt)->isEqual(*anOtherIt))
103       return false;
104   return true;
105 }
106
107 bool SolveSpaceSolver_EntityWrapper::update(const EntityWrapperPtr& theOther)
108 {
109   bool isUpdated = false;
110
111   std::list<EntityWrapperPtr> aMySubs = subEntities();
112   std::list<EntityWrapperPtr> anOtherSubs = theOther->subEntities();
113   std::list<EntityWrapperPtr>::const_iterator aMySubsIt = aMySubs.begin();
114   std::list<EntityWrapperPtr>::const_iterator anOtherSubsIt = anOtherSubs.begin();
115   for (; aMySubsIt != aMySubs.end() && anOtherSubsIt != anOtherSubs.end();
116        ++aMySubsIt, ++anOtherSubsIt)
117      isUpdated = (*aMySubsIt)->update(*anOtherSubsIt) || isUpdated;
118
119   std::list<ParameterWrapperPtr> aMyParams = parameters();
120   std::list<ParameterWrapperPtr> anOtherParams = theOther->parameters();
121   std::list<ParameterWrapperPtr>::const_iterator aMyParIt = aMyParams.begin();
122   std::list<ParameterWrapperPtr>::const_iterator anOtherParIt = anOtherParams.begin();
123   for (; aMyParIt != aMyParams.end() && anOtherParIt != anOtherParams.end();
124       ++aMyParIt, ++anOtherParIt)
125     isUpdated = (*aMyParIt)->update(*anOtherParIt);
126   return isUpdated;
127 }