X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FSketchPlugin_Sketch.cpp;h=d1deff5364ac1e1f9369a33889243ee28db68c1b;hb=b5893b0a30fac08134c24de4565cb513a43affa6;hp=ef2ef9c691327934c4f4cf171008ffb5fd1b3842;hpb=24e5375957ba83cea9bf9fbe9bff030df996914a;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_Sketch.cpp b/src/SketchPlugin/SketchPlugin_Sketch.cpp index ef2ef9c69..d1deff536 100755 --- a/src/SketchPlugin/SketchPlugin_Sketch.cpp +++ b/src/SketchPlugin/SketchPlugin_Sketch.cpp @@ -39,8 +39,6 @@ #include #include -using namespace std; - SketchPlugin_Sketch::SketchPlugin_Sketch() { } @@ -52,7 +50,8 @@ void SketchPlugin_Sketch::initAttributes() data()->addAttribute(SketchPlugin_Sketch::NORM_ID(), GeomDataAPI_Dir::typeId()); data()->addAttribute(SketchPlugin_Sketch::FEATURES_ID(), ModelAPI_AttributeRefList::typeId()); // the selected face, base for the sketcher plane, not obligatory - data()->addAttribute(SketchPlugin_SketchEntity::EXTERNAL_ID(), ModelAPI_AttributeSelection::typeId()); + data()->addAttribute(SketchPlugin_SketchEntity::EXTERNAL_ID(), + ModelAPI_AttributeSelection::typeId()); ModelAPI_Session::get()->validators()->registerNotObligatory( getKind(), SketchPlugin_SketchEntity::EXTERNAL_ID()); data()->addAttribute(SketchPlugin_Sketch::SOLVER_ERROR(), ModelAPI_AttributeString::typeId()); @@ -91,7 +90,7 @@ void SketchPlugin_Sketch::execute() aFeature->setSketch(this); // do not include the external edges into the result if (aFeature->data()->attribute(SketchPlugin_SketchEntity::EXTERNAL_ID())) { - if (aFeature->data()->selection(SketchPlugin_SketchEntity::EXTERNAL_ID())->value()) + if (aFeature->data()->selection(SketchPlugin_SketchEntity::EXTERNAL_ID())->context()) continue; } // do not include the construction entities in the result @@ -140,6 +139,7 @@ std::shared_ptr SketchPlugin_Sketch::addFeature(std::string th } // set as current also after it becomes sub to set correctly enabled for other sketch subs document()->setCurrentFeature(aNew, false); + return aNew; } @@ -148,7 +148,8 @@ void SketchPlugin_Sketch::removeFeature(std::shared_ptr theFea if (!data()->isValid()) // sketch is already removed (case on undo of sketch), sync is not needed return; AttributeRefListPtr aList = reflist(SketchPlugin_Sketch::FEATURES_ID()); - // if the object is last, remove it from the list (needed to skip empty transaction on edit of sketch feature) + // if the object is last, remove it from the list + // (needed to skip empty transaction on edit of sketch feature) if (aList->object(aList->size(true) - 1, true) == theFeature) { aList->remove(theFeature); } else { @@ -185,7 +186,7 @@ int SketchPlugin_Sketch::subFeatureId(const int theIndex) const int aResultIndex = 1; // number of the counted (created) features, started from 1 int aFeatureIndex = -1; // number of the not-empty features in the list for (; anIt != aFeatures.end(); anIt++) { - if (anIt->get()) + if (anIt->get()) aFeatureIndex++; if (aFeatureIndex == theIndex) break; @@ -212,12 +213,13 @@ bool SketchPlugin_Sketch::isSub(ObjectPtr theObject) const void SketchPlugin_Sketch::attributeChanged(const std::string& theID) { if (theID == SketchPlugin_SketchEntity::EXTERNAL_ID()) { - std::shared_ptr aSelection = - data()->selection(SketchPlugin_SketchEntity::EXTERNAL_ID())->value(); - if (aSelection) { // update arguments due to the selection value + AttributeSelectionPtr aSelAttr = selection(SketchPlugin_SketchEntity::EXTERNAL_ID()); + if (aSelAttr->context().get()) { // update arguments due to the selection value + std::shared_ptr aSelection = aSelAttr->value(); + if (!aSelection.get()) aSelection = aSelAttr->context()->shape(); // update the sketch plane std::shared_ptr aFace(new GeomAPI_Face(aSelection)); - std::shared_ptr aPlane = GeomAlgoAPI_FaceBuilder::plane(aFace); + std::shared_ptr aPlane = aFace->getPlane(); if (aPlane) { double anA, aB, aC, aD; aPlane->coefficients(anA, aB, aC, aD); @@ -229,7 +231,8 @@ void SketchPlugin_Sketch::attributeChanged(const std::string& theID) { aCoords = aCoords->multiplied(-aD * aCoords->distance(aZero)); std::shared_ptr anOrigPnt(new GeomAPI_Pnt(aCoords)); // X axis is preferable to be dirX on the sketch - static const double tol = 0.1; // here can not be very small value to avoid very close to X normal axis (issue 595) + // here can not be very small value to avoid very close to X normal axis (issue 595) + static const double tol = 0.1; bool isX = fabs(anA) - 1.0 < tol && fabs(aB) < tol && fabs(aC) < tol; std::shared_ptr aTempDir( isX ? new GeomAPI_Dir(0, 1, 0) : new GeomAPI_Dir(1, 0, 0)); @@ -294,8 +297,8 @@ FeaturePtr SketchPlugin_Sketch::addUniqueNamedCopiedFeature(FeaturePtr theFeatur theFeature->data()->copyTo(aNewFeature->data()); // external state should not be copied as a new object is an object of the current sketch if (theFeature->selection(SketchPlugin_SketchEntity::EXTERNAL_ID()).get()) - theFeature->selection(SketchPlugin_SketchEntity::EXTERNAL_ID())->setValue(ResultPtr(), - GeomShapePtr()); + aNewFeature->selection(SketchPlugin_SketchEntity::EXTERNAL_ID())->setValue(ResultPtr(), + GeomShapePtr()); aNewFeature->data()->setName(aUniqueFeatureName); // text expressions could block setValue of some attributes SketchPlugin_Tools::clearExpressions(aNewFeature);