X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FSketchSolver%2FSketchSolver_Constraint.cpp;h=67a177038088fffb546b35af925fa8483aab67e6;hb=2ca823f76cac784f9e4a2fc37deeb7147b834814;hp=2bfd8e697780bd2265b8c903347d3d017870868d;hpb=beb7b62b44875845bc640e1d9ccde5ea15ee1a2a;p=modules%2Fshaper.git diff --git a/src/SketchSolver/SketchSolver_Constraint.cpp b/src/SketchSolver/SketchSolver_Constraint.cpp index 2bfd8e697..67a177038 100644 --- a/src/SketchSolver/SketchSolver_Constraint.cpp +++ b/src/SketchSolver/SketchSolver_Constraint.cpp @@ -5,6 +5,16 @@ #include "SketchSolver_Constraint.h" #include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include #include @@ -83,7 +93,7 @@ const int& SketchSolver_Constraint::getType(boost::shared_ptrdata()->attribute(CONSTRAINT_ATTRIBUTES[indAttr]) ); if (!anAttr) continue; - if (anAttr->isFeature()) + if (anAttr->isFeature() && anAttr->feature()) { // verify posiible entities const std::string& aKind = anAttr->feature()->getKind(); - if (aKind.compare("SketchPoint") == 0) + if (aKind.compare(SKETCH_POINT_KIND) == 0) { myAttributesList[aNbPoints++] = CONSTRAINT_ATTRIBUTES[indAttr]; continue; } - else if(aKind.compare("SketchLine") == 0) + else if(aKind.compare(SKETCH_LINE_KIND) == 0) { // entities are placed starting from CONSTRAINT_ATTR_ENTITY_C attribute myAttributesList[2 + aNbEntities++] = CONSTRAINT_ATTRIBUTES[indAttr]; @@ -138,9 +148,32 @@ const int& SketchSolver_Constraint::getType(boost::shared_ptr anAttr = + boost::dynamic_pointer_cast( + theConstraint->data()->attribute(CONSTRAINT_ATTRIBUTES[indAttr]) + ); + if (!anAttr) continue; + if (anAttr->isFeature() && anAttr->feature() && + anAttr->feature()->getKind().compare(SKETCH_LINE_KIND) == 0) + { + myAttributesList[aNbLines++] = CONSTRAINT_ATTRIBUTES[indAttr]; + break; + } + } + if (aNbLines == 1) + myType = SLVS_C_PT_PT_DISTANCE; + return getType(); + } + // Constraint for two parallel/perpendicular lines - bool isParallel = (aConstraintKind.compare("SketchConstraintParallel") == 0); - bool isPerpendicular = (aConstraintKind.compare("SketchConstraintPerpendicular") == 0); + bool isParallel = (aConstraintKind.compare(SKETCH_CONSTRAINT_PARALLEL_KIND) == 0); + bool isPerpendicular = (aConstraintKind.compare(SKETCH_CONSTRAINT_PERPENDICULAR_KIND) == 0); if (isParallel || isPerpendicular) { int aNbEntities = 2; // lines in SolveSpace constraints should started from CONSTRAINT_ATTR_ENTITY_C attribute @@ -150,9 +183,9 @@ const int& SketchSolver_Constraint::getType(boost::shared_ptr( theConstraint->data()->attribute(CONSTRAINT_ATTRIBUTES[indAttr]) ); - if (!anAttr || !anAttr->isFeature()) continue; + if (!anAttr || !anAttr->isFeature() || !anAttr->feature()) continue; const std::string& aKind = anAttr->feature()->getKind(); - if (aKind.compare("SketchLine") == 0) + if (aKind.compare(SKETCH_LINE_KIND) == 0) { myAttributesList[aNbEntities++] = CONSTRAINT_ATTRIBUTES[indAttr]; continue; @@ -163,8 +196,8 @@ const int& SketchSolver_Constraint::getType(boost::shared_ptr( theConstraint->data()->attribute(CONSTRAINT_ATTRIBUTES[indAttr]) ); - if (!anAttr || !anAttr->isFeature()) continue; + if (!anAttr || !anAttr->isFeature() || !anAttr->feature()) continue; const std::string& aKind = anAttr->feature()->getKind(); - if (aKind.compare("SketchCircle") == 0) + if (aKind.compare(SKETCH_CIRCLE_KIND) == 0 || aKind.compare(SKETCH_ARC_KIND) == 0) { myAttributesList[aNbEntities++] = CONSTRAINT_ATTRIBUTES[indAttr]; continue;