X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FSketchPlugin_Circle.cpp;fp=src%2FSketchPlugin%2FSketchPlugin_Circle.cpp;h=c0eecf508b5a1d3b81a67c4b4094fa04003521e7;hb=86f4ec4eb5ff5f119914f3d44cf945b49845d8c2;hp=86d5721e8d9c14f4da5a1cc14c30f5e998c09c37;hpb=f64e1300ed35bb1e9a2486cdb5713355e832dd39;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_Circle.cpp b/src/SketchPlugin/SketchPlugin_Circle.cpp index 86d5721e8..c0eecf508 100644 --- a/src/SketchPlugin/SketchPlugin_Circle.cpp +++ b/src/SketchPlugin/SketchPlugin_Circle.cpp @@ -19,22 +19,16 @@ #include "SketchPlugin_Circle.h" #include "SketchPlugin_Sketch.h" -#include "SketchPlugin_Tools.h" #include #include #include -#include -#include #include #include #include #include -#include -#include #include #include -#include #include #include #include @@ -47,7 +41,6 @@ #include const double tolerance = 1e-7; -const double PI = 3.141592653589793238463; SketchPlugin_Circle::SketchPlugin_Circle() @@ -58,27 +51,10 @@ SketchPlugin_Circle::SketchPlugin_Circle() void SketchPlugin_Circle::initDerivedClassAttributes() { data()->addAttribute(CENTER_ID(), GeomDataAPI_Point2D::typeId()); - data()->addAttribute(ROTATE_ID(), GeomDataAPI_Point2D::typeId()); - data()->addAttribute(ROTATE_REF_ID(), ModelAPI_AttributeReference::typeId()); data()->addAttribute(RADIUS_ID(), ModelAPI_AttributeDouble::typeId()); - data()->addAttribute(ANGLE_ID(), ModelAPI_AttributeDouble::typeId()); - - // While exist addCircle without creating point. - AttributeIntegerPtr aVerAttr = std::dynamic_pointer_cast( - data()->addAttribute(VERSION_ID(), ModelAPI_AttributeInteger::typeId())); - aVerAttr->setIsArgument(false); - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), VERSION_ID()); - if (!aVerAttr->isInitialized()) { - // this is a newly created feature (not read from file), - // so, initialize the latest version - aVerAttr->setValue(SketchPlugin_Circle::THE_VERSION_1); - } data()->addAttribute(EXTERNAL_ID(), ModelAPI_AttributeSelection::typeId()); ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), EXTERNAL_ID()); - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), ROTATE_ID()); - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), ROTATE_REF_ID()); - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), ANGLE_ID()); } void SketchPlugin_Circle::execute() @@ -92,7 +68,6 @@ void SketchPlugin_Circle::execute() std::shared_ptr aCenterAttr = std::dynamic_pointer_cast(data()->attribute(CENTER_ID())); AttributeDoublePtr aRadiusAttr = real(RADIUS_ID()); - AttributeDoublePtr anAngleAttr = real(ANGLE_ID()); if(!aCenterAttr->isInitialized() || !aRadiusAttr->isInitialized()) { return; } @@ -102,10 +77,7 @@ void SketchPlugin_Circle::execute() return; } - if (!anAngleAttr->isInitialized()) - anAngleAttr->setValue(0); - - // Make a visible center point. + // Make a visible point. SketchPlugin_Sketch::createPoint2DResult(this, sketch(), CENTER_ID(), 0); // Make a visible circle. @@ -114,21 +86,8 @@ void SketchPlugin_Circle::execute() aSketch->data()->attribute(SketchPlugin_Sketch::NORM_ID())); std::shared_ptr aNormal(new GeomAPI_Dir(aNDir->x(), aNDir->y(), aNDir->z())); - std::shared_ptr aCircleShape; - if (integer(VERSION_ID())->value() > SketchPlugin_Circle::THE_VERSION_0) - { - double aValAn = anAngleAttr->value(); - aCircleShape = GeomAlgoAPI_EdgeBuilder::lineCircle(aCenter, aNormal, aRadius, aValAn / 180 * PI); - - // Update corrdinates for point on circle - bool aWasBlocked = data()->blockSendAttributeUpdated(true); - GeomPnt2dPtr aCircleSewPoint = aSketch->to2D(aCircleShape->firstPoint()); - std::dynamic_pointer_cast(data()->attribute(ROTATE_ID())) - ->setValue(aCircleSewPoint->x(), aCircleSewPoint->y()); - data()->blockSendAttributeUpdated(aWasBlocked, false); - } - else - aCircleShape = GeomAlgoAPI_EdgeBuilder::lineCircle(aCenter, aNormal, aRadius); + std::shared_ptr aCircleShape = + GeomAlgoAPI_EdgeBuilder::lineCircle(aCenter, aNormal, aRadius); std::shared_ptr aResult = document()->createConstruction(data(), 1); aResult->setShape(aCircleShape); @@ -157,37 +116,7 @@ void SketchPlugin_Circle::attributeChanged(const std::string& theID) { std::shared_ptr aCenterAttr = std::dynamic_pointer_cast(attribute(CENTER_ID())); aCenterAttr->setValue(sketch()->to2D(aCirc->center())); - real(RADIUS_ID())->setValue(aCirc->radius()); - real(ANGLE_ID())->setValue(0); - } - } - else if (integer(VERSION_ID())->value() > SketchPlugin_Circle::THE_VERSION_0 && - theID == ROTATE_ID()) - { - // get cricle from results - std::shared_ptr aSelection; - ResultPtr aCircleRes = lastResult(); - if (aCircleRes) - aSelection = aCircleRes->shape(); - if (aSelection && !aSelection->isNull() && aSelection->isEdge()) { - std::shared_ptr anEdge(new GeomAPI_Edge(aSelection)); - std::shared_ptr aCirc = anEdge->circle(); - - // Get point and project it on line - std::shared_ptr aNewPntRot = - std::dynamic_pointer_cast(attribute(ROTATE_ID())); - GeomPointPtr aPntRot3D = aCirc->project( sketch()->to3D(aNewPntRot->x(), aNewPntRot->y())); - - // Compute new angle - GeomPointPtr aNorm = sketch()->to3D(real(RADIUS_ID())->value(), 0); - double aStartParam, anEndParam; - aCirc->parameter(aPntRot3D, 1.e-4, anEndParam); - aCirc->parameter(aNorm, 1.e-4, aStartParam); - - bool aWasBlocked = data()->blockSendAttributeUpdated(true); - real(ANGLE_ID())->setValue((anEndParam - aStartParam) / PI * 180.0); - data()->blockSendAttributeUpdated(aWasBlocked, false); } } }