1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
3 // File: SolveSpaceSolver_EntityWrapper.cpp
5 // Author: Artem ZHIDKOV
7 #include <SolveSpaceSolver_EntityWrapper.h>
9 SolveSpaceSolver_EntityWrapper::SolveSpaceSolver_EntityWrapper(
10 const FeaturePtr theFeature, const Slvs_Entity& theEntity)
13 myBaseFeature = theFeature;
16 SolveSpaceSolver_EntityWrapper::SolveSpaceSolver_EntityWrapper(
17 const AttributePtr theAttribute, const Slvs_Entity& theEntity)
20 myBaseAttribute = theAttribute;
23 EntityID SolveSpaceSolver_EntityWrapper::id() const
25 return (EntityID)myEntity.h;
28 void SolveSpaceSolver_EntityWrapper::setGroup(const GroupID& theGroup)
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);
39 SketchSolver_EntityType SolveSpaceSolver_EntityWrapper::type() const
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;
53 return ENTITY_UNKNOWN;
56 bool SolveSpaceSolver_EntityWrapper::isUsed(FeaturePtr theFeature) const
58 if (isBase(theFeature))
61 std::list<EntityWrapperPtr>::const_iterator anIt = mySubEntities.begin();
62 for (; anIt != mySubEntities.end(); ++anIt)
63 if ((*anIt)->isUsed(theFeature))
68 bool SolveSpaceSolver_EntityWrapper::isUsed(AttributePtr theAttribute) const
70 if (isBase(theAttribute))
73 std::list<EntityWrapperPtr>::const_iterator anIt = mySubEntities.begin();
74 for (; anIt != mySubEntities.end(); ++anIt)
75 if ((*anIt)->isUsed(theAttribute))
80 bool SolveSpaceSolver_EntityWrapper::isEqual(const EntityWrapperPtr& theOther)
82 if (type() != theOther->type())
85 // Verify Equality of sub-entities
86 const std::list<EntityWrapperPtr>& anOtherSubs = theOther->subEntities();
87 if (mySubEntities.size() != anOtherSubs.size())
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))
95 // Verify equality of parameters
96 const std::list<ParameterWrapperPtr>& anOtherParams = theOther->parameters();
97 if (myParameters.size() != anOtherParams.size())
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))
107 bool SolveSpaceSolver_EntityWrapper::update(const EntityWrapperPtr& theOther)
109 bool isUpdated = false;
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;
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);