X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FSketchPlugin_Sketch.cpp;h=1d97cb2b051be4fd0e51d787f4f9591d8989b2b9;hb=cc317d39fcb6bdf56dedd13c7a8141b17d9caab8;hp=f450ec74660b28ce3eaa72c5bd68d5a50e6a595b;hpb=c80e8ac643930b858f4f653e2659896ba587b165;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_Sketch.cpp b/src/SketchPlugin/SketchPlugin_Sketch.cpp index f450ec746..1d97cb2b0 100644 --- a/src/SketchPlugin/SketchPlugin_Sketch.cpp +++ b/src/SketchPlugin/SketchPlugin_Sketch.cpp @@ -4,7 +4,12 @@ #include "SketchPlugin_Sketch.h" #include +#include +#include +#include +#include #include +#include using namespace std; @@ -17,7 +22,11 @@ SketchPlugin_Sketch::SketchPlugin_Sketch() void SketchPlugin_Sketch::initAttributes() { - //data()->addAttribute(PART_ATTR_DOC_REF, ModelAPI_AttributeDocRef::type()); + data()->addAttribute(SKETCH_ATTR_ORIGIN, GeomDataAPI_Point::type()); + data()->addAttribute(SKETCH_ATTR_DIRX, GeomDataAPI_Dir::type()); + data()->addAttribute(SKETCH_ATTR_DIRY, GeomDataAPI_Dir::type()); + data()->addAttribute(SKETCH_ATTR_NORM, GeomDataAPI_Dir::type()); + data()->addAttribute(SKETCH_ATTR_FEATURES, ModelAPI_AttributeRefList::type()); } void SketchPlugin_Sketch::execute() @@ -26,14 +35,56 @@ void SketchPlugin_Sketch::execute() const boost::shared_ptr& SketchPlugin_Sketch::preview() { - if (!SketchPlugin_Feature::preview()) - { + if (isPlaneSet()) { + setPreview(boost::shared_ptr()); + } + else { + std::list > aFaces; - boost::shared_ptr anOrigin(new GeomAPI_Pnt(0, 0, 0)); - boost::shared_ptr aNormal(new GeomAPI_Dir(1, 0, 0)); - boost::shared_ptr aFace = - GeomAlgoAPI_FaceBuilder::square(anOrigin, aNormal, PLANE_SIZE); - setPreview(aFace); + addPlane(1, 0, 0, aFaces); // YZ plane + addPlane(0, 1, 0, aFaces); // XZ plane + addPlane(0, 0, 1, aFaces); // XY plane + boost::shared_ptr aCompound = GeomAlgoAPI_CompoundBuilder::compound(aFaces); + setPreview(aCompound); } - return SketchPlugin_Feature::preview(); + return getPreview(); +} + +const void SketchPlugin_Sketch::addSub(const boost::shared_ptr& theFeature) +{ + boost::dynamic_pointer_cast(theFeature)->setSketch(this); + data()->reflist(SKETCH_ATTR_FEATURES)->append(theFeature); +} + +void SketchPlugin_Sketch::addPlane(double theX, double theY, double theZ, + std::list >& theShapes) const +{ + boost::shared_ptr anOrigin(new GeomAPI_Pnt(0, 0, 0)); + boost::shared_ptr aNormal(new GeomAPI_Dir(theX, theY, theZ)); + boost::shared_ptr aFace = + GeomAlgoAPI_FaceBuilder::square(anOrigin, aNormal, PLANE_SIZE); + theShapes.push_back(aFace); +} + +boost::shared_ptr SketchPlugin_Sketch::to3D(const double theX, const double theY) +{ + boost::shared_ptr aC = + boost::dynamic_pointer_cast(data()->attribute(SKETCH_ATTR_ORIGIN)); + boost::shared_ptr aX = + boost::dynamic_pointer_cast(data()->attribute(SKETCH_ATTR_DIRX)); + boost::shared_ptr aY = + boost::dynamic_pointer_cast(data()->attribute(SKETCH_ATTR_DIRY)); + + boost::shared_ptr aSum = aC->pnt()->xyz()->added( + aX->dir()->xyz()->multiplied(theX))->added(aY->dir()->xyz()->multiplied(theY)); + + return boost::shared_ptr(new GeomAPI_Pnt(aSum)); +} + +bool SketchPlugin_Sketch::isPlaneSet() +{ + boost::shared_ptr aNormal = + boost::dynamic_pointer_cast(data()->attribute(SKETCH_ATTR_NORM)); + + return aNormal && !(aNormal->x() == 0 && aNormal->y() == 0 && aNormal->z() == 0); }