X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FSketchPlugin_Point.cpp;h=c198e9b90fd22c44e7c066ea30ee88a022aa2df1;hb=29083ee3765ce3f564eb4fa6c93620084acfb067;hp=1d9601a8383694fca1691fb8bdd228a2e6b16dbc;hpb=507f658f34fc6c42f48fb83a8fa916c6f0e33fd3;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_Point.cpp b/src/SketchPlugin/SketchPlugin_Point.cpp index 1d9601a83..c198e9b90 100644 --- a/src/SketchPlugin/SketchPlugin_Point.cpp +++ b/src/SketchPlugin/SketchPlugin_Point.cpp @@ -4,8 +4,16 @@ #include "SketchPlugin_Point.h" #include "SketchPlugin_Sketch.h" + #include +#include +#include +#include + +#include + #include +#include using namespace std; @@ -15,23 +23,49 @@ SketchPlugin_Point::SketchPlugin_Point() void SketchPlugin_Point::initAttributes() { - data()->addAttribute(POINT_ATTR_COORD, GeomDataAPI_Point2D::type()); + data()->addAttribute(SketchPlugin_Point::COORD_ID(), GeomDataAPI_Point2D::type()); + data()->addAttribute(EXTERNAL_ID(), ModelAPI_AttributeSelection::type()); + ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), EXTERNAL_ID()); } -void SketchPlugin_Point::execute() +void SketchPlugin_Point::execute() { + SketchPlugin_Sketch* aSketch = sketch(); + if (aSketch) { + // compute a point in 3D view + boost::shared_ptr aPoint = + boost::dynamic_pointer_cast( + data()->attribute(SketchPlugin_Point::COORD_ID())); + boost::shared_ptr aPoint3D(aSketch->to3D(aPoint->x(), aPoint->y())); + // make a visible point + boost::shared_ptr aPointShape = GeomAlgoAPI_PointBuilder::point(aPoint3D); + boost::shared_ptr aConstr = document()->createConstruction(data()); + aConstr->setShape(aPointShape); + aConstr->setIsInHistory(false); + setResult(aConstr); + } } -const boost::shared_ptr& SketchPlugin_Point::preview() +void SketchPlugin_Point::move(double theDeltaX, double theDeltaY) { - SketchPlugin_Sketch* aSketch = sketch(); - // compute a point in 3D view - boost::shared_ptr aPoint = - boost::dynamic_pointer_cast(data()->attribute(POINT_ATTR_COORD)); - boost::shared_ptr aPoint3D(aSketch->to3D(aPoint->x(), aPoint->y())); - // make a visible point - //boost::shared_ptr anEdge = GeomAlgoAPI_EdgeBuilder::line(aStart, anEnd); - //setPreview(anEdge); - - return getPreview(); + boost::shared_ptr aData = data(); + if (!aData->isValid()) + return; + + boost::shared_ptr aPoint1 = boost::dynamic_pointer_cast( + aData->attribute(SketchPlugin_Point::COORD_ID())); + aPoint1->setValue(aPoint1->x() + theDeltaX, aPoint1->y() + theDeltaY); +} + +double SketchPlugin_Point::distanceToPoint(const boost::shared_ptr& thePoint) +{ + boost::shared_ptr aData = data(); + boost::shared_ptr aPoint = boost::dynamic_pointer_cast( + aData->attribute(SketchPlugin_Point::COORD_ID())); + + return aPoint->pnt()->distance(thePoint); +} + +bool SketchPlugin_Point::isFixed() { + return data()->selection(EXTERNAL_ID())->context(); }