X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_OperationSketchLine.h;h=db20415c74cb86f54548866d6b52f83077734eb7;hb=004fa7f94b343a782405d3fe21973521150729b4;hp=737c73c36780c098125de5f1a0c2cd5afda724e1;hpb=b96d49472ad23f609343fa158d1d7b96c729ed09;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_OperationSketchLine.h b/src/PartSet/PartSet_OperationSketchLine.h index 737c73c36..db20415c7 100644 --- a/src/PartSet/PartSet_OperationSketchLine.h +++ b/src/PartSet/PartSet_OperationSketchLine.h @@ -10,6 +10,9 @@ #include #include +class GeomDataAPI_Point2D; +class QMouseEvent; + /*! \class PartSet_OperationSketchLine * \brief The operation for the sketch feature creation @@ -17,6 +20,11 @@ class PARTSET_EXPORT PartSet_OperationSketchLine : public PartSet_OperationSketchBase { Q_OBJECT + +public: + /// Returns the operation type key + static std::string Type() { return "SketchLine"; } + public: /// Constructor /// \param theId the feature identifier @@ -29,15 +37,40 @@ public: /// Returns that this operator can be started above already running one. /// The runned operation should be the sketch feature modified operation - virtual bool isGranted() const; + /// \param theOperation the previous running operation + virtual bool isGranted(ModuleBase_IOperation* theOperation) const; /// Returns the operation local selection mode + /// \param theFeature the feature object to get the selection mode /// \return the selection mode - virtual int getSelectionMode() const; + virtual std::list getSelectionModes(boost::shared_ptr theFeature) const; + + /// Initializes some fields accorging to the feature + /// \param theSelected the list of selected presentations + /// \param theHighlighted the list of highlighted presentations + virtual void init(boost::shared_ptr theFeature, + const std::list& theSelected, + const std::list& theHighlighted); + + /// Returns the operation sketch feature + /// \returns the sketch instance + virtual boost::shared_ptr sketch() const; /// Gives the current selected objects to be processed by the operation - /// \param theList a list of interactive selected shapes - virtual void setSelectedShapes(const NCollection_List& theList); + /// \param theEvent the mouse event + /// \param theView a viewer to have the viewer the eye position + /// \param theSelected the list of selected presentations + /// \param theHighlighted the list of highlighted presentations + virtual void mouseReleased(QMouseEvent* theEvent, Handle_V3d_View theView, + const std::list& theSelected, + const std::list& theHighlighted); + /// Gives the current mouse point in the viewer + /// \param thePoint a point clicked in the viewer + /// \param theEvent the mouse event + virtual void mouseMoved(QMouseEvent* theEvent, Handle_V3d_View theView); + /// Processes the key pressed in the view + /// \param theKey a key value + virtual void keyReleased(const int theKey); protected: /// \brief Virtual method called when operation is started @@ -45,8 +78,66 @@ protected: /// After the parent operation body perform, set sketch feature to the created line feature virtual void startOperation(); + /// Virtual method called when operation aborted (see abort() method for more description) + /// Before the feature is aborted, it should be hidden from the viewer + virtual void abortOperation(); + + /// Virtual method called when operation stopped - committed or aborted. + /// Restore the multi selection state + virtual void stopOperation(); + + /// Creates an operation new feature + /// In addition to the default realization it appends the created line feature to + /// the sketch feature + /// \param theFlushMessage the flag whether the create message should be flushed + /// \returns the created feature + virtual boost::shared_ptr createFeature(const bool theFlushMessage = true); + + /// Creates a constraint on two points + /// \param thePoint1 the first point + /// \param thePoint1 the second point + void createConstraint(boost::shared_ptr thePoint1, + boost::shared_ptr thePoint2); + + /// Creates constrains of the current + /// \param theX the horizontal coordnate of the point + /// \param theY the vertical coordnate of the point + void setConstraints(double theX, double theY); +protected: + /// \brief Get the line point 2d coordinates. + /// \param theFeature the line feature + /// \param theAttribute the start or end attribute of the line + /// \param theX the horizontal coordinate + /// \param theY the vertical coordinate + void getLinePoint(boost::shared_ptr theFeature, const std::string& theAttribute, + double& theX, double& theY); + /// Find a point in the line with given coordinates + /// \param theFeature the line feature + /// \param theX the horizontal point coordinate + /// \param theY the vertical point coordinate + boost::shared_ptr findLinePoint(boost::shared_ptr theFeature, + double theX, double theY); + + /// \brief Save the point to the line. + /// \param theFeature the line feature + /// \param theX the horizontal coordinate + /// \param theY the vertical coordinate + /// \param theAttribute the start or end attribute of the line + void setLinePoint(boost::shared_ptr, double theX, double theY, + const std::string& theAttribute); + /// \brief Save the point to the line. + /// \param thePoint the 3D point in the viewer + /// \param theAttribute the start or end attribute of the line + void setLinePoint(const gp_Pnt& thePoint, Handle(V3d_View) theView, const std::string& theAttribute); + +protected: + ///< Structure to lists the possible types of point selection modes + enum PointSelectionMode {SM_FirstPoint, SM_SecondPoint, SM_DonePoint}; + private: boost::shared_ptr mySketch; ///< the sketch feature + boost::shared_ptr myInitPoint; ///< the first line point + PointSelectionMode myPointSelectionMode; ///< point selection mode }; #endif