X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FSketchPlugin%2FSketchPlugin_Sketch.cpp;h=1f0e100ac37bd6286dd20e2bd6e5dbf451262aa6;hb=bbd1c59b9adc714c5d7ad17b3dc496cf1091c549;hp=81ead9d7ded55fffa4dd660608b21e10f8e138dd;hpb=712dfdf42f58bb738a0db2c051a405391151972f;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_Sketch.cpp b/src/SketchPlugin/SketchPlugin_Sketch.cpp index 81ead9d7d..1f0e100ac 100644 --- a/src/SketchPlugin/SketchPlugin_Sketch.cpp +++ b/src/SketchPlugin/SketchPlugin_Sketch.cpp @@ -5,37 +5,29 @@ #include "SketchPlugin_Sketch.h" #include #include +#include #include #include #include #include #include #include +#include -#include -#include - -#include - -const Quantity_NameOfColor SKETCH_PLANE_COLOR = Quantity_NOC_CHOCOLATE; /// the plane edge color -const int SKETCH_WIDTH = 4; /// the plane edge width using namespace std; -// face of the square-face displayed for selection of general plane -const double PLANE_SIZE = 200; - SketchPlugin_Sketch::SketchPlugin_Sketch() { } void SketchPlugin_Sketch::initAttributes() { - 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()); + data()->addAttribute(SketchPlugin_Sketch::ORIGIN_ID(), GeomDataAPI_Point::type()); + data()->addAttribute(SketchPlugin_Sketch::DIRX_ID(), GeomDataAPI_Dir::type()); + data()->addAttribute(SketchPlugin_Sketch::DIRY_ID(), GeomDataAPI_Dir::type()); + data()->addAttribute(SketchPlugin_Sketch::NORM_ID(), GeomDataAPI_Dir::type()); + data()->addAttribute(SketchPlugin_Sketch::FEATURES_ID(), ModelAPI_AttributeRefList::type()); } void SketchPlugin_Sketch::execute() @@ -43,33 +35,37 @@ void SketchPlugin_Sketch::execute() if (!data()->isValid()) return ; boost::shared_ptr aRefList = - boost::dynamic_pointer_cast(data()->attribute(SKETCH_ATTR_FEATURES)); + boost::dynamic_pointer_cast(data()->attribute(SketchPlugin_Sketch::FEATURES_ID())); boost::shared_ptr anOrigin = - boost::dynamic_pointer_cast(data()->attribute(SKETCH_ATTR_ORIGIN)); + boost::dynamic_pointer_cast(data()->attribute(SketchPlugin_Sketch::ORIGIN_ID())); boost::shared_ptr aDirX = - boost::dynamic_pointer_cast(data()->attribute(SKETCH_ATTR_DIRX)); + boost::dynamic_pointer_cast(data()->attribute(SketchPlugin_Sketch::DIRX_ID())); boost::shared_ptr aDirY = - boost::dynamic_pointer_cast(data()->attribute(SKETCH_ATTR_DIRY)); + boost::dynamic_pointer_cast(data()->attribute(SketchPlugin_Sketch::DIRY_ID())); boost::shared_ptr aNorm = - boost::dynamic_pointer_cast(data()->attribute(SKETCH_ATTR_NORM)); + boost::dynamic_pointer_cast(data()->attribute(SketchPlugin_Sketch::NORM_ID())); - std::list > aFeatures = aRefList->list(); + std::list aFeatures = aRefList->list(); if (aFeatures.empty()) return ; - std::list >::const_iterator anIt = aFeatures.begin(), - aLast = aFeatures.end(); - + std::list::const_iterator anIt = aFeatures.begin(), aLast = aFeatures.end(); boost::shared_ptr aFeature; std::list< boost::shared_ptr > aFeaturesPreview; for (; anIt != aLast; anIt++) { aFeature = boost::dynamic_pointer_cast(*anIt); - boost::shared_ptr aPreview = aFeature->preview(); - if (aPreview) - aFeaturesPreview.push_back(aPreview); + boost::shared_ptr aRes = + boost::dynamic_pointer_cast(aFeature->firstResult()); + if (aRes) { + boost::shared_ptr aShape = aRes->shape(); + if (aShape) + aFeaturesPreview.push_back(aShape); + } } + if (aFeaturesPreview.empty()) + return ; std::list< boost::shared_ptr > aLoops; std::list< boost::shared_ptr > aWires; GeomAlgoAPI_SketchBuilder::createFaces(anOrigin->pnt(), aDirX->dir(), aDirY->dir(), aNorm->dir(), @@ -77,60 +73,25 @@ void SketchPlugin_Sketch::execute() aLoops.insert(aLoops.end(), aWires.begin(), aWires.end()); boost::shared_ptr aCompound = GeomAlgoAPI_CompoundBuilder::compound(aLoops); - data()->store(aCompound); -} - -Handle(AIS_InteractiveObject) SketchPlugin_Sketch::getAISShape(Handle(AIS_InteractiveObject) thePrevious) -{ - Handle(AIS_InteractiveObject) anAIS = SketchPlugin_Feature::getAISShape(thePrevious); - Handle(AIS_Shape) aShapeAIS = Handle(AIS_Shape)::DownCast(anAIS); - aShapeAIS->SetColor(Quantity_Color(SKETCH_PLANE_COLOR)); - aShapeAIS->SetWidth(SKETCH_WIDTH); - aShapeAIS->Redisplay(); - return anAIS; -} - -const boost::shared_ptr& SketchPlugin_Sketch::preview() -{ - if (isPlaneSet()) { - setPreview(boost::shared_ptr()); - } - else { - std::list > aFaces; - - 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 getPreview(); + boost::shared_ptr aConstr = document()->createConstruction(data()); + aConstr->setShape(aCompound); + setResult(aConstr); } const void SketchPlugin_Sketch::addSub(const FeaturePtr& 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); + data()->reflist(SketchPlugin_Sketch::FEATURES_ID())->append(theFeature); } 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::dynamic_pointer_cast(data()->attribute(SketchPlugin_Sketch::ORIGIN_ID())); boost::shared_ptr aX = - boost::dynamic_pointer_cast(data()->attribute(SKETCH_ATTR_DIRX)); + boost::dynamic_pointer_cast(data()->attribute(SketchPlugin_Sketch::DIRX_ID())); boost::shared_ptr aY = - boost::dynamic_pointer_cast(data()->attribute(SKETCH_ATTR_DIRY)); + boost::dynamic_pointer_cast(data()->attribute(SketchPlugin_Sketch::DIRY_ID())); boost::shared_ptr aSum = aC->pnt()->xyz()->added( aX->dir()->xyz()->multiplied(theX))->added(aY->dir()->xyz()->multiplied(theY)); @@ -141,7 +102,7 @@ boost::shared_ptr SketchPlugin_Sketch::to3D(const double theX, cons bool SketchPlugin_Sketch::isPlaneSet() { boost::shared_ptr aNormal = - boost::dynamic_pointer_cast(data()->attribute(SKETCH_ATTR_NORM)); + boost::dynamic_pointer_cast(data()->attribute(SketchPlugin_Sketch::NORM_ID())); return aNormal && !(aNormal->x() == 0 && aNormal->y() == 0 && aNormal->z() == 0); } @@ -149,9 +110,9 @@ bool SketchPlugin_Sketch::isPlaneSet() boost::shared_ptr SketchPlugin_Sketch::plane() { boost::shared_ptr anOrigin = - boost::dynamic_pointer_cast(data()->attribute(SKETCH_ATTR_ORIGIN)); + boost::dynamic_pointer_cast(data()->attribute(SketchPlugin_Sketch::ORIGIN_ID())); boost::shared_ptr aNorm = - boost::dynamic_pointer_cast(data()->attribute(SKETCH_ATTR_NORM)); + boost::dynamic_pointer_cast(data()->attribute(SketchPlugin_Sketch::NORM_ID())); if (!anOrigin || !aNorm) return boost::shared_ptr();