X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FSketchPlugin%2FSketchPlugin_Feature.h;h=076b1d038f3f5456a92aef3b17fc5ef6a66bf932;hb=5be4a656f7f45e94dc40385cf164a88375e4403b;hp=97a2d423bd605102a579461c1774ac305baff60e;hpb=d9db5498b576854aae37ddf8c0bb6fceb264712e;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_Feature.h b/src/SketchPlugin/SketchPlugin_Feature.h index 97a2d423b..076b1d038 100644 --- a/src/SketchPlugin/SketchPlugin_Feature.h +++ b/src/SketchPlugin/SketchPlugin_Feature.h @@ -1,3 +1,5 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> + // File: SketchPlugin_Feature.h // Created: 27 Mar 2014 // Author: Mikhail PONIKAROV @@ -10,23 +12,27 @@ #include #include #include +#include +#include + +#include + +#define SKETCH_EDGE_COLOR "#ff0000" +#define SKETCH_POINT_COLOR "#ff0000" +#define SKETCH_EXTERNAL_EDGE_COLOR "#00ff00" class SketchPlugin_Sketch; class GeomAPI_Pnt2d; class Handle_AIS_InteractiveObject; /**\class SketchPlugin_Feature - * \ingroup DataModel + * \ingroup Plugins * \brief Feature for creation of the new feature in PartSet. This is an abstract class to give * an interface to create the sketch feature preview. */ -class SketchPlugin_Feature : public ModelAPI_Feature +class SketchPlugin_Feature : public ModelAPI_Feature, public GeomAPI_ICustomPrs { public: - /// Simple creation of interactive object by the result of the object - static AISObjectPtr simpleAISObject(boost::shared_ptr theRes, - AISObjectPtr thePrevious); - /// Reference to the external edge or vertex as a AttributeSelection inline static const std::string& EXTERNAL_ID() { @@ -47,7 +53,7 @@ class SketchPlugin_Feature : public ModelAPI_Feature /// Return the distance between the feature and the point /// \param thePoint the point - virtual double distanceToPoint(const boost::shared_ptr& thePoint) = 0; + virtual double distanceToPoint(const std::shared_ptr& thePoint) = 0; /// Construction result is allways recomuted on the fly SKETCHPLUGIN_EXPORT virtual bool isPersistentResult() {return false;} @@ -55,8 +61,47 @@ class SketchPlugin_Feature : public ModelAPI_Feature /// Returns true is sketch element is under the rigid constraint SKETCHPLUGIN_EXPORT virtual bool isFixed() {return false;} + /// Returns true of the feature is created basing on the external shape of not-this-sketch object + inline bool isExternal() const + { + AttributeSelectionPtr aAttr = data()->selection(EXTERNAL_ID()); + if (aAttr) + return aAttr->context().get() != NULL; + return false; + } + + /// Customize presentation of the feature + virtual void customisePresentation(AISObjectPtr thePrs) + { + std::vector aRGB; + // if this is an edge + if (thePrs->getShapeType() == 6) { + thePrs->setWidth(3); + if (isExternal()) { + // Set color from preferences + aRGB = Config_PropManager::color("Visualization", "sketch_external_color", + SKETCH_EXTERNAL_EDGE_COLOR); + } + else { + // Set color from preferences + aRGB = Config_PropManager::color("Visualization", "sketch_edge_color", + SKETCH_EDGE_COLOR); + } + } + else if (thePrs->getShapeType() == 7) { // otherwise this is a vertex + // Set color from preferences + aRGB = Config_PropManager::color("Visualization", "sketch_point_color", + SKETCH_POINT_COLOR); + } + // if this is a vertex + //else if (thePrs->getShapeType() == 7) + // thePrs->setPointMarker(6, 2.); + if (!aRGB.empty()) + thePrs->setColor(aRGB[0], aRGB[1], aRGB[2]); + } + /// Returns the sketch of this feature - inline SketchPlugin_Sketch* sketch() {return mySketch;} + SketchPlugin_Sketch* sketch(); protected: /// Sets the higher-level feature for the sub-feature (sketch for line) void setSketch(SketchPlugin_Sketch* theSketch) @@ -69,7 +114,7 @@ protected: friend class SketchPlugin_Sketch; private: - boost::shared_ptr myPreview; ///< the preview shape + std::shared_ptr myPreview; ///< the preview shape SketchPlugin_Sketch* mySketch; /// sketch that contains this feature };