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 SolveSpaceSolver_EntityWrapper::SolveSpaceSolver_EntityWrapper(
24 const FeaturePtr thePointFeature,
25 const AttributePtr thePointAttribute,
26 const Slvs_Entity& theEntity)
29 myBaseFeature = thePointFeature;
30 myBaseAttribute = thePointAttribute;
34 EntityID SolveSpaceSolver_EntityWrapper::id() const
36 return (EntityID)myEntity.h;
39 void SolveSpaceSolver_EntityWrapper::setGroup(const GroupID& theGroup)
41 myEntity.group = (Slvs_hGroup)theGroup;
42 std::list<EntityWrapperPtr>::iterator aSubsIt = mySubEntities.begin();
43 for (; aSubsIt != mySubEntities.end(); ++aSubsIt)
44 (*aSubsIt)->setGroup(theGroup);
45 std::list<ParameterWrapperPtr>::iterator aPIt = myParameters.begin();
46 for (; aPIt != myParameters.end(); ++aPIt)
47 (*aPIt)->setGroup(theGroup);
50 SketchSolver_EntityType SolveSpaceSolver_EntityWrapper::type() const
52 switch (myEntity.type) {
53 case SLVS_E_POINT_IN_3D:
54 case SLVS_E_POINT_IN_2D: return ENTITY_POINT;
55 case SLVS_E_LINE_SEGMENT: return ENTITY_LINE;
56 case SLVS_E_CIRCLE: return ENTITY_CIRCLE;
57 case SLVS_E_ARC_OF_CIRCLE: return ENTITY_ARC;
58 case SLVS_E_NORMAL_IN_3D:
59 case SLVS_E_NORMAL_IN_2D: return ENTITY_NORMAL;
60 case SLVS_E_DISTANCE: return ENTITY_SCALAR;
61 case SLVS_E_WORKPLANE: return ENTITY_SKETCH;
64 return ENTITY_UNKNOWN;
67 bool SolveSpaceSolver_EntityWrapper::isUsed(FeaturePtr theFeature) const
69 if (isBase(theFeature))
72 std::list<EntityWrapperPtr>::const_iterator anIt = mySubEntities.begin();
73 for (; anIt != mySubEntities.end(); ++anIt)
74 if ((*anIt)->isUsed(theFeature))
79 bool SolveSpaceSolver_EntityWrapper::isUsed(AttributePtr theAttribute) const
81 if (isBase(theAttribute))
84 std::list<EntityWrapperPtr>::const_iterator anIt = mySubEntities.begin();
85 for (; anIt != mySubEntities.end(); ++anIt)
86 if ((*anIt)->isUsed(theAttribute))
91 bool SolveSpaceSolver_EntityWrapper::isEqual(const EntityWrapperPtr& theOther)
93 if (type() != theOther->type())
96 // Verify Equality of sub-entities
97 const std::list<EntityWrapperPtr>& anOtherSubs = theOther->subEntities();
98 if (mySubEntities.size() != anOtherSubs.size())
100 std::list<EntityWrapperPtr>::const_iterator aMySubsIt = mySubEntities.begin();
101 std::list<EntityWrapperPtr>::const_iterator anOtherSubsIt = anOtherSubs.begin();
102 for (; aMySubsIt != mySubEntities.end(); ++aMySubsIt, ++anOtherSubsIt)
103 if (!(*aMySubsIt)->isEqual(*anOtherSubsIt))
106 // Verify equality of parameters
107 const std::list<ParameterWrapperPtr>& anOtherParams = theOther->parameters();
108 if (myParameters.size() != anOtherParams.size())
110 std::list<ParameterWrapperPtr>::const_iterator aMyIt = myParameters.begin();
111 std::list<ParameterWrapperPtr>::const_iterator anOtherIt = anOtherParams.begin();
112 for (; aMyIt != myParameters.end(); ++aMyIt, ++anOtherIt)
113 if (!(*aMyIt)->isEqual(*anOtherIt))
118 bool SolveSpaceSolver_EntityWrapper::update(const EntityWrapperPtr& theOther)
120 bool isUpdated = false;
122 std::list<EntityWrapperPtr> aMySubs = subEntities();
123 std::list<EntityWrapperPtr> anOtherSubs = theOther->subEntities();
124 std::list<EntityWrapperPtr>::const_iterator aMySubsIt = aMySubs.begin();
125 std::list<EntityWrapperPtr>::const_iterator anOtherSubsIt = anOtherSubs.begin();
126 for (; aMySubsIt != aMySubs.end() && anOtherSubsIt != anOtherSubs.end();
127 ++aMySubsIt, ++anOtherSubsIt)
128 isUpdated = (*aMySubsIt)->update(*anOtherSubsIt) || isUpdated;
130 std::list<ParameterWrapperPtr> aMyParams = parameters();
131 std::list<ParameterWrapperPtr> anOtherParams = theOther->parameters();
132 std::list<ParameterWrapperPtr>::const_iterator aMyParIt = aMyParams.begin();
133 std::list<ParameterWrapperPtr>::const_iterator anOtherParIt = anOtherParams.begin();
134 for (; aMyParIt != aMyParams.end() && anOtherParIt != anOtherParams.end();
135 ++aMyParIt, ++anOtherParIt)
136 isUpdated = (*aMyParIt)->update(*anOtherParIt);