X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchSolver%2FSketchSolver_Storage.cpp;h=c63d28e437a662c61818cf2c85b400e6f0f3516d;hb=8476d5e088f7b1b5a414fa5e33ce99d6131929eb;hp=8370549174a16d7acc09de33e539a67599f88123;hpb=9ddc291385b55eb7efd9a560a1a5c468a98dc324;p=modules%2Fshaper.git diff --git a/src/SketchSolver/SketchSolver_Storage.cpp b/src/SketchSolver/SketchSolver_Storage.cpp index 837054917..c63d28e43 100644 --- a/src/SketchSolver/SketchSolver_Storage.cpp +++ b/src/SketchSolver/SketchSolver_Storage.cpp @@ -12,6 +12,9 @@ #include #include #include +#include +#include +#include #include @@ -80,6 +83,26 @@ void SketchSolver_Storage::addConstraint( theConstraint->data()->blockSendAttributeUpdated(myEventsBlocked); } +static std::list pointAttributes(FeaturePtr theFeature) +{ + std::list aPoints; + if (theFeature->getKind() == SketchPlugin_Arc::ID()) { + aPoints.push_back(theFeature->attribute(SketchPlugin_Arc::CENTER_ID())); + aPoints.push_back(theFeature->attribute(SketchPlugin_Arc::START_ID())); + aPoints.push_back(theFeature->attribute(SketchPlugin_Arc::END_ID())); + } + else if (theFeature->getKind() == SketchPlugin_Circle::ID()) + aPoints.push_back(theFeature->attribute(SketchPlugin_Circle::CENTER_ID())); + else if (theFeature->getKind() == SketchPlugin_Line::ID()) { + aPoints.push_back(theFeature->attribute(SketchPlugin_Line::START_ID())); + aPoints.push_back(theFeature->attribute(SketchPlugin_Line::END_ID())); + } + else if (theFeature->getKind() == SketchPlugin_Point::ID() || + theFeature->getKind() == SketchPlugin_IntersectionPoint::ID()) + aPoints.push_back(theFeature->attribute(SketchPlugin_Point::COORD_ID())); + return aPoints; +} + void SketchSolver_Storage::addEntity(FeaturePtr theFeature, EntityWrapperPtr theSolverEntity) { @@ -90,8 +113,7 @@ void SketchSolver_Storage::addEntity(FeaturePtr theFeature, if (!theSolverEntity) { // feature links to the empty entity, add its attributes - std::list aPntAttrs = - theFeature->data()->attributes(GeomDataAPI_Point2D::typeId()); + std::list aPntAttrs = pointAttributes(theFeature); std::list::const_iterator anAttrIt = aPntAttrs.begin(); for (; anAttrIt != aPntAttrs.end(); ++anAttrIt) addEntity(*anAttrIt, EntityWrapperPtr()); @@ -131,8 +153,7 @@ bool SketchSolver_Storage::update(FeaturePtr theFeature, const GroupID& theGroup // Reserve the feature in the map of features (do not want to add several copies of it) myFeatureMap[theFeature] = aRelated; // Firstly, create/update its attributes - std::list anAttrs = - theFeature->data()->attributes(GeomDataAPI_Point2D::typeId()); + std::list anAttrs = pointAttributes(theFeature); std::list::const_iterator anIt = anAttrs.begin(); for (; anIt != anAttrs.end(); ++anIt) { isUpdated = update(*anIt, theGroup) || isUpdated; @@ -335,7 +356,7 @@ bool SketchSolver_Storage::isUsed(FeaturePtr theFeature) const if (::isUsed(*aCWIt, theFeature)) return true; // check attributes - std::list anAttrList = theFeature->data()->attributes(GeomDataAPI_Point2D::typeId()); + std::list anAttrList = pointAttributes(theFeature); std::list::const_iterator anIt = anAttrList.begin(); for (; anIt != anAttrList.end(); ++anIt) if (isUsed(*anIt))